Skip to content

Update tests for libtest --format json #110644

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

Merged
merged 4 commits into from
Apr 29, 2023
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
11 changes: 11 additions & 0 deletions src/tools/compiletest/src/header.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ pub struct TestProps {
pub unset_rustc_env: Vec<String>,
// Environment settings to use during execution
pub exec_env: Vec<(String, String)>,
// Environment variables to unset prior to execution.
// Variables are unset before applying 'exec_env'
pub unset_exec_env: Vec<String>,
// Build documentation for all specified aux-builds as well
pub build_aux_docs: bool,
// Flag to force a crate to be built with the host architecture
Expand Down Expand Up @@ -198,6 +201,7 @@ mod directives {
pub const AUX_CRATE: &'static str = "aux-crate";
pub const EXEC_ENV: &'static str = "exec-env";
pub const RUSTC_ENV: &'static str = "rustc-env";
pub const UNSET_EXEC_ENV: &'static str = "unset-exec-env";
pub const UNSET_RUSTC_ENV: &'static str = "unset-rustc-env";
pub const FORBID_OUTPUT: &'static str = "forbid-output";
pub const CHECK_TEST_LINE_NUMBERS_MATCH: &'static str = "check-test-line-numbers-match";
Expand Down Expand Up @@ -231,6 +235,7 @@ impl TestProps {
rustc_env: vec![],
unset_rustc_env: vec![],
exec_env: vec![],
unset_exec_env: vec![],
build_aux_docs: false,
force_host: false,
check_stdout: false,
Expand Down Expand Up @@ -382,6 +387,12 @@ impl TestProps {
&mut self.exec_env,
Config::parse_env,
);
config.push_name_value_directive(
ln,
UNSET_EXEC_ENV,
&mut self.unset_exec_env,
|r| r,
);
config.push_name_value_directive(
ln,
RUSTC_ENV,
Expand Down
6 changes: 5 additions & 1 deletion src/tools/compiletest/src/header/cfg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -165,11 +165,15 @@ pub(super) fn parse_cfg_name_directive<'a>(
message: "when the architecture is part of the Thumb family"
}

// Technically the locally built compiler uses the "dev" channel rather than the "nightly"
// channel, even though most people don't know or won't care about it. To avoid confusion, we
// treat the "dev" channel as the "nightly" channel when processing the directive.
condition! {
name: &config.channel,
name: if config.channel == "dev" { "nightly" } else { &config.channel },
allowed_names: &["stable", "beta", "nightly"],
message: "when the release channel is {name}",
}

condition! {
name: "cross-compile",
condition: config.target != config.host,
Expand Down
25 changes: 21 additions & 4 deletions src/tools/compiletest/src/runtest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1613,8 +1613,13 @@ impl<'test> TestCx<'test> {
test_client
.args(&["run", &support_libs.len().to_string(), &prog])
.args(support_libs)
.args(args)
.envs(env.clone());
.args(args);

for key in &self.props.unset_exec_env {
test_client.env_remove(key);
}
test_client.envs(env.clone());

self.compose_and_run(
test_client,
self.config.run_lib_path.to_str().unwrap(),
Expand All @@ -1626,7 +1631,13 @@ impl<'test> TestCx<'test> {
let aux_dir = self.aux_output_dir_name();
let ProcArgs { prog, args } = self.make_run_args();
let mut wr_run = Command::new("wr-run");
wr_run.args(&[&prog]).args(args).envs(env.clone());
wr_run.args(&[&prog]).args(args);

for key in &self.props.unset_exec_env {
wr_run.env_remove(key);
}
wr_run.envs(env.clone());

self.compose_and_run(
wr_run,
self.config.run_lib_path.to_str().unwrap(),
Expand All @@ -1638,7 +1649,13 @@ impl<'test> TestCx<'test> {
let aux_dir = self.aux_output_dir_name();
let ProcArgs { prog, args } = self.make_run_args();
let mut program = Command::new(&prog);
program.args(args).current_dir(&self.output_base_dir()).envs(env.clone());
program.args(args).current_dir(&self.output_base_dir());

for key in &self.props.unset_exec_env {
program.env_remove(key);
}
program.envs(env.clone());

self.compose_and_run(
program,
self.config.run_lib_path.to_str().unwrap(),
Expand Down
18 changes: 18 additions & 0 deletions tests/ui/feature-gates/test-listing-format-json.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// no-prefer-dynamic
// compile-flags: --test
// run-flags: --list --format json -Zunstable-options
// run-fail
// check-run-results
// ignore-nightly
// unset-exec-env:RUSTC_BOOTSTRAP

#![cfg(test)]
#[test]
fn m_test() {}

#[test]
#[ignore = "not yet implemented"]
fn z_test() {}

#[test]
fn a_test() {}
1 change: 1 addition & 0 deletions tests/ui/feature-gates/test-listing-format-json.run.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
error: the option `Z` is only accepted on the nightly compiler
1 change: 1 addition & 0 deletions tests/ui/test-attrs/tests-listing-format-json.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// run-flags: --list --format json -Zunstable-options
// run-pass
// check-run-results
// only-nightly
// normalize-stdout-test: "fake-test-src-base/test-attrs/" -> "$$DIR/"
// normalize-stdout-test: "fake-test-src-base\\test-attrs\\" -> "$$DIR/"

Expand Down
6 changes: 3 additions & 3 deletions tests/ui/test-attrs/tests-listing-format-json.run.stdout
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{ "type": "suite", "event": "discovery" }
{ "type": "test", "event": "discovered", "name": "a_test", "ignore": false, "ignore_message": "", "source_path": "$DIR/tests-listing-format-json.rs", "start_line": 20, "start_col": 4, "end_line": 20, "end_col": 10 }
{ "type": "test", "event": "discovered", "name": "m_test", "ignore": false, "ignore_message": "", "source_path": "$DIR/tests-listing-format-json.rs", "start_line": 13, "start_col": 4, "end_line": 13, "end_col": 10 }
{ "type": "test", "event": "discovered", "name": "z_test", "ignore": true, "ignore_message": "not yet implemented", "source_path": "$DIR/tests-listing-format-json.rs", "start_line": 17, "start_col": 4, "end_line": 17, "end_col": 10 }
{ "type": "test", "event": "discovered", "name": "a_test", "ignore": false, "ignore_message": "", "source_path": "$DIR/tests-listing-format-json.rs", "start_line": 21, "start_col": 4, "end_line": 21, "end_col": 10 }
{ "type": "test", "event": "discovered", "name": "m_test", "ignore": false, "ignore_message": "", "source_path": "$DIR/tests-listing-format-json.rs", "start_line": 14, "start_col": 4, "end_line": 14, "end_col": 10 }
{ "type": "test", "event": "discovered", "name": "z_test", "ignore": true, "ignore_message": "not yet implemented", "source_path": "$DIR/tests-listing-format-json.rs", "start_line": 18, "start_col": 4, "end_line": 18, "end_col": 10 }
{ "type": "suite", "event": "completed", "tests": 3, "benchmarks": 0, "total": 3, "ignored": 1 }