label: Streamline the test cases (#1074)

This commit is contained in:
Floyd Wang 2025-07-18 17:10:36 +08:00 committed by GitHub
parent b553ca8dcc
commit b7f443b73f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -165,117 +165,88 @@ mod tests {
use super::*; use super::*;
#[test] #[test]
fn test_no_highlights() { fn test_highlight_ranges() {
// Basic functionality
// No highlights
let label = Label::new("Hello World"); let label = Label::new("Hello World");
let result = label.highlight_ranges("Hello World".len()); let result = label.highlight_ranges("Hello World".len());
assert_eq!(result, Vec::<Range<usize>>::new()); assert_eq!(result, Vec::<Range<usize>>::new());
}
#[test] // Secondary text ranges only
fn test_secondary_text_ranges() {
let label = Label::new("Hello").secondary("World"); let label = Label::new("Hello").secondary("World");
let total_length = "Hello World".len(); let total_length = "Hello World".len();
let result = label.highlight_ranges(total_length); let result = label.highlight_ranges(total_length);
assert_eq!(result.len(), 2); assert_eq!(result.len(), 2);
assert_eq!(result[0], 0..5); // "Hello" assert_eq!(result[0], 0..5); // "Hello"
assert_eq!(result[1], 5..11); // " World" assert_eq!(result[1], 5..11); // " World"
}
#[test] // Text highlighting
fn test_highlights_text_single_match() {
let label = Label::new("Hello World").highlights("World");
let result = label.highlight_ranges("Hello World".len());
assert_eq!(result.len(), 1); // Single match with case insensitive
assert_eq!(result[0], 6..11); // "World"
}
#[test]
fn test_highlights_text_case_insensitive() {
let label = Label::new("Hello World").highlights("WORLD"); let label = Label::new("Hello World").highlights("WORLD");
let result = label.highlight_ranges("Hello World".len()); let result = label.highlight_ranges("Hello World".len());
assert_eq!(result.len(), 1); assert_eq!(result.len(), 1);
assert_eq!(result[0], 6..11); // "World" assert_eq!(result[0], 6..11); // "World"
}
#[test] // Multiple matches
fn test_highlights_text_multiple_matches() {
let label = Label::new("Hello Hello Hello").highlights("Hello"); let label = Label::new("Hello Hello Hello").highlights("Hello");
let result = label.highlight_ranges("Hello Hello Hello".len()); let result = label.highlight_ranges("Hello Hello Hello".len());
assert_eq!(result.len(), 3); assert_eq!(result.len(), 3);
assert_eq!(result[0], 0..5); // First "Hello" assert_eq!(result[0], 0..5); // First "Hello"
assert_eq!(result[1], 6..11); // Second "Hello" assert_eq!(result[1], 6..11); // Second "Hello"
assert_eq!(result[2], 12..17); // Third "Hello" assert_eq!(result[2], 12..17); // Third "Hello"
}
#[test] // No match and empty search
fn test_highlights_text_no_match() {
let label = Label::new("Hello World").highlights("xyz"); let label = Label::new("Hello World").highlights("xyz");
let result = label.highlight_ranges("Hello World".len()); let result = label.highlight_ranges("Hello World".len());
assert_eq!(result, Vec::<Range<usize>>::new()); assert_eq!(result, Vec::<Range<usize>>::new());
}
#[test]
fn test_highlights_text_empty_search() {
let label = Label::new("Hello World").highlights(""); let label = Label::new("Hello World").highlights("");
let result = label.highlight_ranges("Hello World".len()); let result = label.highlight_ranges("Hello World".len());
assert_eq!(result, Vec::<Range<usize>>::new()); assert_eq!(result, Vec::<Range<usize>>::new());
}
#[test] // Combined functionality
fn test_both_secondary_and_highlights() {
// Secondary + highlights in main text
let label = Label::new("Hello").secondary("World").highlights("llo"); let label = Label::new("Hello").secondary("World").highlights("llo");
let total_length = "Hello World".len(); let total_length = "Hello World".len();
let result = label.highlight_ranges(total_length); let result = label.highlight_ranges(total_length);
assert_eq!(result.len(), 3); assert_eq!(result.len(), 3);
assert_eq!(result[0], 0..5); // Main text range assert_eq!(result[0], 0..5); // Main text range
assert_eq!(result[1], 5..11); // Secondary text range assert_eq!(result[1], 5..11); // Secondary text range
assert_eq!(result[2], 2..5); // "llo" in "Hello" assert_eq!(result[2], 2..5); // "llo" in main text
}
#[test] // Highlight in secondary text
fn test_highlights_text_boundary() { let label = Label::new("Hello").secondary("World").highlights("World");
let label = Label::new("Hello World Hello").highlights("Hello"); let total_length = "Hello World".len();
let result = label.highlight_ranges("Hello World Hello".len()); let result = label.highlight_ranges(total_length);
assert_eq!(result.len(), 3);
assert_eq!(result[0], 0..5); // Main text range
assert_eq!(result[1], 5..11); // Secondary text range
assert_eq!(result[2], 6..11); // "World" in secondary text
assert_eq!(result.len(), 2); // Cross-boundary highlight
assert_eq!(result[0], 0..5); // Start of "Hello" let label = Label::new("Hello").secondary("World").highlights("o W");
assert_eq!(result[1], 12..17); // End of "Hello" let total_length = "Hello World".len();
} let result = label.highlight_ranges(total_length);
assert_eq!(result.len(), 3);
assert_eq!(result[0], 0..5); // Main text range
assert_eq!(result[1], 5..11); // Secondary text range
assert_eq!(result[2], 4..7); // "o W" across boundary
#[test] // Edge cases
fn test_highlights_text_overlapping_match() {
// Overlapping matches
let label = Label::new("aaaa").highlights("aa"); let label = Label::new("aaaa").highlights("aa");
let result = label.highlight_ranges("aaaa".len()); let result = label.highlight_ranges("aaaa".len());
assert!(result.len() >= 2); assert!(result.len() >= 2);
assert_eq!(result[0], 0..2); // First "aa" assert_eq!(result[0], 0..2); // First "aa"
assert_eq!(result[1], 1..3); // Overlapping "aa" assert_eq!(result[1], 1..3); // Overlapping "aa"
if result.len() >= 3 {
assert_eq!(result[2], 2..4); // Third "aa"
}
}
#[test] // Unicode text
fn test_partial_word_highlight() {
let label = Label::new("JavaScript is great").highlights("Script");
let result = label.highlight_ranges("JavaScript is great".len());
assert_eq!(result.len(), 1);
assert_eq!(result[0], 4..10); // "Script" in "JavaScript"
}
#[test]
fn test_unicode_text_highlight() {
let label = Label::new("你好世界Hello World").highlights("世界"); let label = Label::new("你好世界Hello World").highlights("世界");
let result = label.highlight_ranges("你好世界Hello World".len()); let result = label.highlight_ranges("你好世界Hello World".len());
assert_eq!(result.len(), 1); assert_eq!(result.len(), 1);
let text = "你好世界Hello World"; let text = "你好世界Hello World";
let start = text.find("世界").unwrap(); let start = text.find("世界").unwrap();