label: Streamline the test cases (#1074)
This commit is contained in:
parent
b553ca8dcc
commit
b7f443b73f
1 changed files with 33 additions and 62 deletions
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue