Skip to content

Commit 96e3f75

Browse files
committed
test(anstyle-svg): Add tests for Hyperlinks
1 parent abdd703 commit 96e3f75

File tree

4 files changed

+473
-0
lines changed

4 files changed

+473
-0
lines changed

crates/anstyle-svg/src/adapter.rs

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,8 @@ mod test {
312312
use super::*;
313313
use proptest::prelude::*;
314314

315+
const URL: &str = "https://example.com";
316+
315317
#[track_caller]
316318
fn verify(input: &str, expected: Vec<Element>) {
317319
let expected = expected.into_iter().collect::<Vec<_>>();
@@ -320,6 +322,10 @@ mod test {
320322
assert_eq!(expected, actual, "{input:?}");
321323
}
322324

325+
fn hyperlink(input: &str, url: &str) -> String {
326+
format!("\x1B]8;;{url}\x1B\\{input}\x1B]8;;\x1B\\")
327+
}
328+
323329
#[test]
324330
fn start() {
325331
let green_on_red = anstyle::AnsiColor::Green.on(anstyle::AnsiColor::Red);
@@ -397,6 +403,134 @@ mod test {
397403
verify(&input, expected);
398404
}
399405

406+
#[test]
407+
fn hyperlink_start() {
408+
let green_on_red = anstyle::AnsiColor::Green.on(anstyle::AnsiColor::Red);
409+
let input = format!(
410+
"{green_on_red}{}{green_on_red:#} world!",
411+
hyperlink("Hello", URL)
412+
);
413+
let expected = vec![
414+
Element {
415+
text: "Hello".to_owned(),
416+
style: green_on_red,
417+
},
418+
Element {
419+
text: " world!".to_owned(),
420+
style: anstyle::Style::default(),
421+
},
422+
];
423+
verify(&input, expected);
424+
}
425+
426+
#[test]
427+
fn hyperlink_middle() {
428+
let green_on_red = anstyle::AnsiColor::Green.on(anstyle::AnsiColor::Red);
429+
let input = format!(
430+
"Hello {green_on_red}{}{green_on_red:#}!",
431+
hyperlink("world", URL)
432+
);
433+
let expected = vec![
434+
Element {
435+
text: "Hello ".to_owned(),
436+
style: anstyle::Style::default(),
437+
},
438+
Element {
439+
text: "world".to_owned(),
440+
style: green_on_red,
441+
},
442+
Element {
443+
text: "!".to_owned(),
444+
style: anstyle::Style::default(),
445+
},
446+
];
447+
verify(&input, expected);
448+
}
449+
450+
#[test]
451+
fn hyperlink_end() {
452+
let green_on_red = anstyle::AnsiColor::Green.on(anstyle::AnsiColor::Red);
453+
let input = format!(
454+
"Hello {green_on_red}{}{green_on_red:#}",
455+
hyperlink("world!", URL)
456+
);
457+
let expected = vec![
458+
Element {
459+
text: "Hello ".to_owned(),
460+
style: anstyle::Style::default(),
461+
},
462+
Element {
463+
text: "world!".to_owned(),
464+
style: green_on_red,
465+
},
466+
];
467+
verify(&input, expected);
468+
}
469+
470+
#[test]
471+
fn hyperlink_ansi256_colors() {
472+
let ansi_11 = anstyle::Ansi256Color(11).on_default();
473+
// termcolor only supports "brights" via these
474+
let input = format!("Hello {ansi_11}{}{ansi_11:#}!", hyperlink("world", URL));
475+
let expected = vec![
476+
Element {
477+
text: "Hello ".to_owned(),
478+
style: anstyle::Style::default(),
479+
},
480+
Element {
481+
text: "world".to_owned(),
482+
style: ansi_11,
483+
},
484+
Element {
485+
text: "!".to_owned(),
486+
style: anstyle::Style::default(),
487+
},
488+
];
489+
verify(&input, expected);
490+
}
491+
492+
#[test]
493+
fn style_mid_hyperlink_text() {
494+
let green_on_red = anstyle::AnsiColor::Green.on(anstyle::AnsiColor::Red);
495+
let styled_str = format!("Hello {green_on_red}world{green_on_red:#}!");
496+
let input = hyperlink(&styled_str, URL);
497+
let expected = vec![
498+
Element {
499+
text: "Hello ".to_owned(),
500+
style: anstyle::Style::default(),
501+
},
502+
Element {
503+
text: "world".to_owned(),
504+
style: green_on_red,
505+
},
506+
Element {
507+
text: "!".to_owned(),
508+
style: anstyle::Style::default(),
509+
},
510+
];
511+
verify(&input, expected);
512+
}
513+
514+
#[test]
515+
fn hyperlink_empty() {
516+
let green_on_red = anstyle::AnsiColor::Green.on(anstyle::AnsiColor::Red);
517+
let input = format!(
518+
"{green_on_red}{}{green_on_red:#} world!",
519+
hyperlink("Hello", "")
520+
);
521+
let expected = vec![
522+
Element {
523+
text: "Hello".to_owned(),
524+
style: green_on_red,
525+
},
526+
Element {
527+
text: " world!".to_owned(),
528+
style: anstyle::Style::default(),
529+
},
530+
];
531+
verify(&input, expected);
532+
}
533+
400534
proptest! {
401535
#[test]
402536
#[cfg_attr(miri, ignore)] // See https://github.com/AltSysrq/proptest/issues/253
Lines changed: 234 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)