diff --git a/Cargo.lock b/Cargo.lock index e0b6b34e..1cd58437 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -70,6 +70,7 @@ name = "anstyle" version = "1.0.11" dependencies = [ "lexopt", + "snapbox", ] [[package]] diff --git a/crates/anstyle/Cargo.toml b/crates/anstyle/Cargo.toml index 5784d3c5..e0c3cde0 100644 --- a/crates/anstyle/Cargo.toml +++ b/crates/anstyle/Cargo.toml @@ -32,6 +32,7 @@ std = [] [dev-dependencies] lexopt = "0.3.0" +snapbox = "0.6.5" [lints] workspace = true diff --git a/crates/anstyle/src/color.rs b/crates/anstyle/src/color.rs index 479921d4..a66dd530 100644 --- a/crates/anstyle/src/color.rs +++ b/crates/anstyle/src/color.rs @@ -591,7 +591,7 @@ impl DisplayBuffer { let c2: u8 = (code / 10) % 10; let c3: u8 = code % 10; - let mut printed = true; + let mut printed = false; if c1 != 0 { printed = true; self.buffer[self.len] = b'0' + c1; diff --git a/crates/anstyle/tests/no_leading_zero.vte b/crates/anstyle/tests/no_leading_zero.vte new file mode 100644 index 00000000..b2374b7f --- /dev/null +++ b/crates/anstyle/tests/no_leading_zero.vte @@ -0,0 +1,16 @@ +Style { fg: Some(Ansi256(Ansi256Color(0))), bg: None, underline: None, effects: Effects() } +Style { fg: Some(Ansi256(Ansi256Color(1))), bg: None, underline: None, effects: Effects() } +Style { fg: Some(Ansi256(Ansi256Color(2))), bg: None, underline: None, effects: Effects() } +Style { fg: Some(Ansi256(Ansi256Color(3))), bg: None, underline: None, effects: Effects() } +Style { fg: Some(Ansi256(Ansi256Color(4))), bg: None, underline: None, effects: Effects() } +Style { fg: Some(Ansi256(Ansi256Color(5))), bg: None, underline: None, effects: Effects() } +Style { fg: Some(Ansi256(Ansi256Color(6))), bg: None, underline: None, effects: Effects() } +Style { fg: Some(Ansi256(Ansi256Color(7))), bg: None, underline: None, effects: Effects() } +Style { fg: Some(Ansi256(Ansi256Color(8))), bg: None, underline: None, effects: Effects() } +Style { fg: Some(Ansi256(Ansi256Color(9))), bg: None, underline: None, effects: Effects() } +Style { fg: Some(Ansi256(Ansi256Color(10))), bg: None, underline: None, effects: Effects() } +Style { fg: Some(Ansi256(Ansi256Color(11))), bg: None, underline: None, effects: Effects() } +Style { fg: Some(Ansi256(Ansi256Color(12))), bg: None, underline: None, effects: Effects() } +Style { fg: Some(Ansi256(Ansi256Color(13))), bg: None, underline: None, effects: Effects() } +Style { fg: Some(Ansi256(Ansi256Color(14))), bg: None, underline: None, effects: Effects() } +Style { fg: Some(Ansi256(Ansi256Color(15))), bg: None, underline: None, effects: Effects() } diff --git a/crates/anstyle/tests/testsuite.rs b/crates/anstyle/tests/testsuite.rs new file mode 100644 index 00000000..40e775a5 --- /dev/null +++ b/crates/anstyle/tests/testsuite.rs @@ -0,0 +1,35 @@ +use std::fmt::{Result, Write}; + +use anstyle::{Ansi256Color, AnsiColor}; + +#[test] +fn no_leading_zero() -> Result { + let mut actual = String::new(); + let ansi_colors = vec![ + AnsiColor::Black, + AnsiColor::Red, + AnsiColor::Green, + AnsiColor::Yellow, + AnsiColor::Blue, + AnsiColor::Magenta, + AnsiColor::Cyan, + AnsiColor::White, + AnsiColor::BrightBlack, + AnsiColor::BrightRed, + AnsiColor::BrightGreen, + AnsiColor::BrightYellow, + AnsiColor::BrightBlue, + AnsiColor::BrightMagenta, + AnsiColor::BrightCyan, + AnsiColor::BrightWhite, + ]; + + for c in ansi_colors { + let c = Ansi256Color::from_ansi(c).on_default(); + writeln!(actual, "{c}{c:?}{c:#}")?; + } + + snapbox::assert_data_eq!(actual, snapbox::file!["no_leading_zero.vte": Text].raw()); + + Ok(()) +}