Skip to content

Commit 57d60db

Browse files
Merge pull request #44 from hanna-kruppe/anstream
Switch from termcolor to anstream
2 parents af6e427 + 6097b93 commit 57d60db

File tree

2 files changed

+24
-26
lines changed

2 files changed

+24
-26
lines changed

Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name = "libtest-mimic"
33
version = "0.7.3"
44
authors = ["Lukas Kalbertodt <[email protected]>"]
55
edition = "2021"
6-
rust-version = "1.60"
6+
rust-version = "1.65"
77

88
description = """
99
Write your own test harness that looks and behaves like the built-in test \
@@ -21,8 +21,9 @@ exclude = [".github"]
2121
[dependencies]
2222
clap = { version = "4.0.8", features = ["derive"] }
2323
threadpool = "1.8.1"
24-
termcolor = "1.0.5"
2524
escape8259 = "0.5.2"
25+
anstream = "0.6.14"
26+
anstyle = "1.0.7"
2627

2728
[dev-dependencies]
2829
fastrand = "1.8.0"

src/printer.rs

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@
66
//! - `format` (and `quiet`)
77
//! - `logfile`
88
9-
use std::{fs::File, time::Duration};
9+
use std::{fs::File, io::Write, time::Duration};
1010

11-
use termcolor::{Ansi, Color, ColorChoice, ColorSpec, NoColor, StandardStream, WriteColor};
11+
use anstream::AutoStream;
12+
use anstyle::{AnsiColor, Color, Style};
1213

1314
use crate::{
1415
Arguments, ColorSetting, Conclusion, Failed, FormatSetting, Measurement, Outcome, TestInfo,
1516
Trial,
1617
};
1718

1819
pub(crate) struct Printer {
19-
out: Box<dyn WriteColor>,
20+
out: Box<dyn Write>,
2021
format: FormatSetting,
2122
name_width: usize,
2223
kind_width: usize,
@@ -29,20 +30,20 @@ impl Printer {
2930
let color_arg = args.color.unwrap_or(ColorSetting::Auto);
3031

3132
// Determine target of all output
32-
let out = if let Some(logfile) = &args.logfile {
33+
let out: Box<dyn Write> = if let Some(logfile) = &args.logfile {
3334
let f = File::create(logfile).expect("failed to create logfile");
3435
if color_arg == ColorSetting::Always {
35-
Box::new(Ansi::new(f)) as Box<dyn WriteColor>
36+
Box::new(AutoStream::always(f))
3637
} else {
37-
Box::new(NoColor::new(f))
38+
Box::new(AutoStream::never(f))
3839
}
3940
} else {
4041
let choice = match color_arg {
41-
ColorSetting::Auto => ColorChoice::Auto,
42-
ColorSetting::Always => ColorChoice::Always,
43-
ColorSetting::Never => ColorChoice::Never,
42+
ColorSetting::Auto => anstream::ColorChoice::Auto,
43+
ColorSetting::Always => anstream::ColorChoice::Always,
44+
ColorSetting::Never => anstream::ColorChoice::Never,
4445
};
45-
Box::new(StandardStream::stdout(choice))
46+
Box::new(AutoStream::new(std::io::stdout(), choice))
4647
};
4748

4849
// Determine correct format
@@ -160,9 +161,8 @@ impl Printer {
160161
}
161162
};
162163

163-
self.out.set_color(&color_of_outcome(outcome)).unwrap();
164-
write!(self.out, "{}", c).unwrap();
165-
self.out.reset().unwrap();
164+
let style = color_of_outcome(outcome);
165+
write!(self.out, "{style}{}{style:#}", c).unwrap();
166166
}
167167
FormatSetting::Json => {
168168
if let Outcome::Measured(Measurement { avg, variance }) = outcome {
@@ -319,9 +319,8 @@ impl Printer {
319319
Outcome::Measured { .. } => "bench",
320320
};
321321

322-
self.out.set_color(&color_of_outcome(outcome)).unwrap();
323-
write!(self.out, "{}", s).unwrap();
324-
self.out.reset().unwrap();
322+
let style = color_of_outcome(outcome);
323+
write!(self.out, "{style}{}{style:#}", s).unwrap();
325324

326325
if let Outcome::Measured(Measurement { avg, variance }) = outcome {
327326
write!(
@@ -347,14 +346,12 @@ pub fn fmt_with_thousand_sep(mut v: u64) -> String {
347346
}
348347

349348
/// Returns the `ColorSpec` associated with the given outcome.
350-
fn color_of_outcome(outcome: &Outcome) -> ColorSpec {
351-
let mut out = ColorSpec::new();
349+
fn color_of_outcome(outcome: &Outcome) -> Style {
352350
let color = match outcome {
353-
Outcome::Passed => Color::Green,
354-
Outcome::Failed { .. } => Color::Red,
355-
Outcome::Ignored => Color::Yellow,
356-
Outcome::Measured { .. } => Color::Cyan,
351+
Outcome::Passed => AnsiColor::Green,
352+
Outcome::Failed { .. } => AnsiColor::Red,
353+
Outcome::Ignored => AnsiColor::Yellow,
354+
Outcome::Measured { .. } => AnsiColor::Cyan,
357355
};
358-
out.set_fg(Some(color));
359-
out
356+
Style::new().fg_color(Some(Color::Ansi(color)))
360357
}

0 commit comments

Comments
 (0)