fixed bug

This commit is contained in:
0rphon 2022-06-15 16:06:26 -07:00
parent 64c47f8bf9
commit d0cfa983b5
4 changed files with 61 additions and 25 deletions

View File

@ -4,5 +4,5 @@ expectation: Pass
outputs:
- output:
- initial_input_ast: c7315faf1ac3ceeb90260e64e4a411a27a8aa732892a64c15f49e81adf464beb
initial_ast: b80eed2960509f11bce6294687558fb7b907f1d83455287f944dfa981ebe1ec8
symbol_table: 9d42b1d8f167826635e5169bc3a50c14f722fba8e5ce2480fbde3b8cf2e75237
initial_ast: 767d8228dd9818cb115e7369cec91352dd406008981487380e863deb06dc11a0
symbol_table: e8029086f943767e4f98014b3991bff8336cb6472c2d2dc3d51b4b13e5c72ea5

View File

@ -5,5 +5,5 @@ outputs:
- output:
- initial_input_ast: dc6b4b00185dd6c1f2b83a1bfae619c1d6e3f68ac0f1d3d87ae3bd0ed5caf083
- initial_input_ast: 73a38568160c3d2be402043d04ccdc2290abe27647bc81c4bd50367834c206cf
initial_ast: 6514080a9452d6e193510250dec3b87081e0741d05cc59ca456f2b2f3f36ec72
symbol_table: 7ec407fabcae0eeef889009b8ba99beac3d18b2d79cc49e7760261d80bd59728
initial_ast: 31f3fdca173acafc69b0975e91e891bbb27bf6d63bdc986c86b4d22c70d928cc
symbol_table: 25f09247dfa86534ff321b8e1b2ca1666c92751d37a611d62e56b8cfac96261d

View File

@ -5,5 +5,5 @@ outputs:
- output:
- initial_input_ast: b6371958e735320861c84ed514f258ae8a9858b34615364b2f9ebbaa2aaadd8c
- initial_input_ast: d384cfea1a36220e9ea4e246ece89d8fffa320f90aeeb85660bc445ab62a0829
initial_ast: 7085f8bf0a01a4fd7b73b5e3fc1c2c812d0cd459a5b6ea85791fc3c01118c7a0
symbol_table: 5a12f141aef86a7a00b86650e23cfd9af657d6f418df7b1ee9eab06714305d31
initial_ast: d3a4a7e3effdc165649d9e1239ee983eb2385c4b93646472395a05f4df982ca2
symbol_table: 5fddde57167344769d00e423fb56692291d57ac8c953c512b82a4626bbdcb6c9

View File

@ -113,21 +113,19 @@ impl TestCases {
let mut configs = Vec::new();
self.tests = find_tests(&self.path_prefix.clone())
.filter(|(path, content)| {
let config = match extract_test_config(content) {
None => {
self.fail_categories.push(TestFailure {
path: path.to_str().unwrap_or("").to_string(),
errors: vec![TestError::MissingTestConfig],
});
return true;
}
Some(cfg) => cfg,
};
let res = additional_check(&config);
configs.push(config);
res
.filter(|(path, content)| match extract_test_config(content) {
None => {
self.fail_categories.push(TestFailure {
path: path.to_str().unwrap_or("").to_string(),
errors: vec![TestError::MissingTestConfig],
});
true
}
Some(cfg) => {
let res = additional_check(&cfg);
configs.push(cfg);
res
}
})
.collect();
@ -155,12 +153,11 @@ impl TestCases {
output.push(process(self, (path, content, &test_name, config)));
std::env::remove_var("LEO_TESTFRAMEWORK");
}
output
}
fn clear_expectations(&self, path: &Path, expectation_category: &str) -> (PathBuf, Option<TestExpectation>) {
fn load_expectations(&self, path: &Path, expectation_category: &str) -> (PathBuf, Option<TestExpectation>) {
let test_dir = [env!("CARGO_MANIFEST_DIR"), "../../tests/"].iter().collect::<PathBuf>();
let relative_path = path.strip_prefix(&test_dir).expect("path error for test");
let expectation_path = test_dir
@ -168,7 +165,7 @@ impl TestCases {
.join(expectation_category)
.join(relative_path.parent().expect("no parent dir for test"))
.join(relative_path.file_name().expect("no file name for test"))
.with_extension("out");
.with_extension("leo.out");
if expectation_path.exists() {
if !is_env_var_set("CLEAR_LEO_TEST_EXPECTATIONS") {
@ -200,7 +197,7 @@ pub fn run_tests<T: Runner>(runner: &T, expectation_category: &str) {
None => return,
};
let (expectation_path, expectations) = cases.clear_expectations(path, expectation_category);
let (expectation_path, expectations) = cases.load_expectations(path, expectation_category);
let tests = match namespace.parse_type() {
ParseType::Line => crate::fetch::split_tests_one_line(content)
@ -267,6 +264,45 @@ pub fn run_tests<T: Runner>(runner: &T, expectation_category: &str) {
})
}
});
if !cases.fail_categories.is_empty() {
for (i, fail) in cases.fail_categories.iter().enumerate() {
println!(
"\n\n-----------------TEST #{} FAILED (and shouldn't have)-----------------",
i + 1
);
println!("File: {}", fail.path);
for error in &fail.errors {
println!("{}", error);
}
}
panic!(
"failed {}/{} tests in {}/{} categories",
pass_tests,
fail_tests + pass_tests,
cases.fail_categories.len(),
cases.fail_categories.len() + pass_categories
);
} else {
for (path, new_expectation) in outputs {
std::fs::create_dir_all(path.parent().unwrap()).expect("failed to make test expectation parent directory");
std::fs::write(
&path,
serde_yaml::to_string(&new_expectation).expect("failed to serialize expectation yaml"),
)
.expect("failed to write expectation file");
}
println!(
"passed {}/{} tests in {}/{} categories",
pass_tests,
fail_tests + pass_tests,
pass_categories,
pass_categories
);
}
std::env::remove_var("LEO_TESTFRAMEWORK");
}
/// returns (name, content) for all benchmark samples