Skip to content

Commit 263c2c9

Browse files
committed
test(anstyle-svg): Add tests for Hyperlinks
1 parent 8d50530 commit 263c2c9

4 files changed

Lines changed: 414 additions & 0 deletions

File tree

crates/anstyle-svg/src/adapter.rs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,8 @@ mod test {
303303
use super::*;
304304
use proptest::prelude::*;
305305

306+
const URL: &str = "https://example.com";
307+
306308
#[track_caller]
307309
fn verify(input: &str, expected: Vec<(anstyle::Style, &str)>) {
308310
let expected = expected
@@ -314,6 +316,10 @@ mod test {
314316
assert_eq!(expected, actual, "{input:?}");
315317
}
316318

319+
fn hyperlink(input: &str) -> String {
320+
format!("\x1B]8;;{URL}\x1B\\{input}\x1B]8;;\x1B\\")
321+
}
322+
317323
#[test]
318324
fn start() {
319325
let green_on_red = anstyle::AnsiColor::Green.on(anstyle::AnsiColor::Red);
@@ -361,6 +367,75 @@ mod test {
361367
verify(&input, expected);
362368
}
363369

370+
#[test]
371+
fn hyperlink_start() {
372+
let green_on_red = anstyle::AnsiColor::Green.on(anstyle::AnsiColor::Red);
373+
let input = format!(
374+
"{green_on_red}{}{green_on_red:#} world!",
375+
hyperlink("Hello")
376+
);
377+
let expected = vec![
378+
(green_on_red, "Hello"),
379+
(anstyle::Style::default(), " world!"),
380+
];
381+
verify(&input, expected);
382+
}
383+
384+
#[test]
385+
fn hyperlink_middle() {
386+
let green_on_red = anstyle::AnsiColor::Green.on(anstyle::AnsiColor::Red);
387+
let input = format!(
388+
"Hello {green_on_red}{}{green_on_red:#}!",
389+
hyperlink("world")
390+
);
391+
let expected = vec![
392+
(anstyle::Style::default(), "Hello "),
393+
(green_on_red, "world"),
394+
(anstyle::Style::default(), "!"),
395+
];
396+
verify(&input, expected);
397+
}
398+
399+
#[test]
400+
fn hyperlink_end() {
401+
let green_on_red = anstyle::AnsiColor::Green.on(anstyle::AnsiColor::Red);
402+
let input = format!(
403+
"Hello {green_on_red}{}{green_on_red:#}",
404+
hyperlink("world!")
405+
);
406+
let expected = vec![
407+
(anstyle::Style::default(), "Hello "),
408+
(green_on_red, "world!"),
409+
];
410+
verify(&input, expected);
411+
}
412+
413+
#[test]
414+
fn hyperlink_ansi256_colors() {
415+
let ansi_11 = anstyle::Ansi256Color(11).on_default();
416+
// termcolor only supports "brights" via these
417+
let input = format!("Hello {ansi_11}{}{ansi_11:#}!", hyperlink("world"));
418+
let expected = vec![
419+
(anstyle::Style::default(), "Hello "),
420+
(ansi_11, "world"),
421+
(anstyle::Style::default(), "!"),
422+
];
423+
verify(&input, expected);
424+
}
425+
426+
#[test]
427+
fn style_mid_hyperlink_text() {
428+
let green_on_red = anstyle::AnsiColor::Green.on(anstyle::AnsiColor::Red);
429+
let styled_str = format!("Hello {green_on_red}world{green_on_red:#}!");
430+
let input = hyperlink(&styled_str);
431+
let expected = vec![
432+
(anstyle::Style::default(), "Hello "),
433+
(green_on_red, "world"),
434+
(anstyle::Style::default(), "!"),
435+
];
436+
verify(&input, expected);
437+
}
438+
364439
proptest! {
365440
#[test]
366441
#[cfg_attr(miri, ignore)] // See https://github.com/AltSysrq/proptest/issues/253
Lines changed: 234 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)