Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shorter output for rustc --test binaries. #31887

Merged
merged 2 commits into from
Mar 15, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/compiletest/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -155,5 +155,8 @@ pub struct Config {
pub lldb_python_dir: Option<String>,

// Explain what's going on
pub verbose: bool
pub verbose: bool,

// Print one character per test instead of one line
pub quiet: bool,
}
4 changes: 4 additions & 0 deletions src/compiletest/compiletest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ pub fn parse_config(args: Vec<String> ) -> Config {
optopt("", "host-rustcflags", "flags to pass to rustc for host", "FLAGS"),
optopt("", "target-rustcflags", "flags to pass to rustc for target", "FLAGS"),
optflag("", "verbose", "run tests verbosely, showing all output"),
optflag("", "quiet", "print one character per test instead of one line"),
optopt("", "logfile", "file to log test execution to", "FILE"),
optopt("", "target", "the target to build for", "TARGET"),
optopt("", "host", "the host to build for", "HOST"),
Expand Down Expand Up @@ -158,6 +159,7 @@ pub fn parse_config(args: Vec<String> ) -> Config {
!opt_str2(matches.opt_str("adb-test-dir")).is_empty(),
lldb_python_dir: matches.opt_str("lldb-python-dir"),
verbose: matches.opt_present("verbose"),
quiet: matches.opt_present("quiet"),
}
}

Expand Down Expand Up @@ -191,6 +193,7 @@ pub fn log_config(config: &Config) {
logv(c, format!("adb_device_status: {}",
config.adb_device_status));
logv(c, format!("verbose: {}", config.verbose));
logv(c, format!("quiet: {}", config.quiet));
logv(c, format!("\n"));
}

Expand Down Expand Up @@ -257,6 +260,7 @@ pub fn test_opts(config: &Config) -> test::TestOpts {
Some(ref filter) => Some(filter.clone()),
},
run_ignored: config.run_ignored,
quiet: config.quiet,
logfile: config.logfile.clone(),
run_tests: true,
bench_benchmarks: true,
Expand Down
50 changes: 34 additions & 16 deletions src/libtest/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ impl fmt::Display for TestName {
}
}

#[derive(Clone, Copy)]
#[derive(Clone, Copy, PartialEq, Eq)]
enum NamePadding {
PadNone,
PadOnRight,
Expand Down Expand Up @@ -301,6 +301,7 @@ pub struct TestOpts {
pub logfile: Option<PathBuf>,
pub nocapture: bool,
pub color: ColorConfig,
pub quiet: bool,
}

impl TestOpts {
Expand All @@ -314,6 +315,7 @@ impl TestOpts {
logfile: None,
nocapture: false,
color: AutoColor,
quiet: false,
}
}
}
Expand All @@ -331,6 +333,7 @@ fn optgroups() -> Vec<getopts::OptGroup> {
of stdout", "PATH"),
getopts::optflag("", "nocapture", "don't capture stdout/stderr of each \
task, allow printing directly"),
getopts::optflag("q", "quiet", "Display one character per test instead of one line"),
getopts::optopt("", "color", "Configure coloring of output:
auto = colorize if stdout is a tty and tests are run on serially (default);
always = always colorize output;
Expand Down Expand Up @@ -388,6 +391,7 @@ pub fn parse_opts(args: &[String]) -> Option<OptRes> {
};

let run_ignored = matches.opt_present("ignored");
let quiet = matches.opt_present("quiet");

let logfile = matches.opt_str("logfile");
let logfile = logfile.map(|s| PathBuf::from(&s));
Expand Down Expand Up @@ -420,6 +424,7 @@ pub fn parse_opts(args: &[String]) -> Option<OptRes> {
logfile: logfile,
nocapture: nocapture,
color: color,
quiet: quiet,
};

Some(Ok(test_opts))
Expand Down Expand Up @@ -451,6 +456,7 @@ struct ConsoleTestState<T> {
log_out: Option<File>,
out: OutputLocation<T>,
use_color: bool,
quiet: bool,
total: usize,
passed: usize,
failed: usize,
Expand All @@ -476,6 +482,7 @@ impl<T: Write> ConsoleTestState<T> {
out: out,
log_out: log_out,
use_color: use_color(opts),
quiet: opts.quiet,
total: 0,
passed: 0,
failed: 0,
Expand All @@ -488,15 +495,15 @@ impl<T: Write> ConsoleTestState<T> {
}

pub fn write_ok(&mut self) -> io::Result<()> {
self.write_pretty("ok", term::color::GREEN)
self.write_short_result("ok", ".", term::color::GREEN)
}

pub fn write_failed(&mut self) -> io::Result<()> {
self.write_pretty("FAILED", term::color::RED)
self.write_short_result("FAILED", "F", term::color::RED)
}

pub fn write_ignored(&mut self) -> io::Result<()> {
self.write_pretty("ignored", term::color::YELLOW)
self.write_short_result("ignored", "i", term::color::YELLOW)
}

pub fn write_metric(&mut self) -> io::Result<()> {
Expand All @@ -507,6 +514,16 @@ impl<T: Write> ConsoleTestState<T> {
self.write_pretty("bench", term::color::CYAN)
}

pub fn write_short_result(&mut self, verbose: &str, quiet: &str, color: term::color::Color)
-> io::Result<()> {
if self.quiet {
self.write_pretty(quiet, color)
} else {
try!(self.write_pretty(verbose, color));
self.write_plain("\n")
}
}

pub fn write_pretty(&mut self, word: &str, color: term::color::Color) -> io::Result<()> {
match self.out {
Pretty(ref mut term) => {
Expand Down Expand Up @@ -550,28 +567,28 @@ impl<T: Write> ConsoleTestState<T> {
}

pub fn write_test_start(&mut self, test: &TestDesc, align: NamePadding) -> io::Result<()> {
let name = test.padded_name(self.max_name_len, align);
self.write_plain(&format!("test {} ... ", name))
if self.quiet && align != PadOnRight {
Ok(())
} else {
let name = test.padded_name(self.max_name_len, align);
self.write_plain(&format!("test {} ... ", name))
}
}

pub fn write_result(&mut self, result: &TestResult) -> io::Result<()> {
try!(match *result {
match *result {
TrOk => self.write_ok(),
TrFailed => self.write_failed(),
TrIgnored => self.write_ignored(),
TrMetrics(ref mm) => {
try!(self.write_metric());
self.write_plain(&format!(": {}", mm.fmt_metrics()))
self.write_plain(&format!(": {}\n", mm.fmt_metrics()))
}
TrBench(ref bs) => {
try!(self.write_bench());

try!(self.write_plain(&format!(": {}", fmt_bench_samples(bs))));

Ok(())
self.write_plain(&format!(": {}\n", fmt_bench_samples(bs)))
}
});
self.write_plain("\n")
}
}

pub fn write_log(&mut self, test: &TestDesc, result: &TestResult) -> io::Result<()> {
Expand Down Expand Up @@ -629,9 +646,9 @@ impl<T: Write> ConsoleTestState<T> {
try!(self.write_plain("\ntest result: "));
if success {
// There's no parallelism at this point so it's safe to use color
try!(self.write_ok());
try!(self.write_pretty("ok", term::color::GREEN));
} else {
try!(self.write_failed());
try!(self.write_pretty("FAILED", term::color::RED));
}
let s = format!(". {} passed; {} failed; {} ignored; {} measured\n\n",
self.passed,
Expand Down Expand Up @@ -758,6 +775,7 @@ fn should_sort_failures_before_printing_them() {
log_out: None,
out: Raw(Vec::new()),
use_color: false,
quiet: false,
total: 0,
passed: 0,
failed: 0,
Expand Down
2 changes: 2 additions & 0 deletions src/test/run-make/test-harness/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@ all:
$(RUSTC) --test test-ignore-cfg.rs --cfg ignorecfg
$(call RUN,test-ignore-cfg) | grep 'shouldnotignore ... ok'
$(call RUN,test-ignore-cfg) | grep 'shouldignore ... ignored'
$(call RUN,test-ignore-cfg --quiet) | grep "^i\.$$"
$(call RUN,test-ignore-cfg --quiet) | grep -v 'should'