Skip to content

Commit 44c13ae

Browse files
committed
refactor(tests): share control flow value oracle
1 parent d14d0ec commit 44c13ae

4 files changed

Lines changed: 30 additions & 39 deletions

File tree

tests/oracle/control_flow/oracle_statement_control_flow.rs

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
use std::ffi::OsStr;
2-
use std::process::Command;
3-
1+
use super::quickjs_control_value_oracle::observe_normalized_value;
42
use super::quickjs_syntax_diagnostic_oracle::observe_cmdline_syntax_error as oracle_error_observation;
53
use quickjs_oxide::value::number_to_string;
64
use quickjs_oxide::{Context, Runtime, RuntimeError, Value};
@@ -690,7 +688,7 @@ fn statement_control_flow_values_match_pinned_quickjs() {
690688
.unwrap_or_else(|error| panic!("Rust rejected {description:?} ({source:?}): {error}"));
691689
assert_eq!(
692690
normalize_rust_value(&value),
693-
oracle_value_observation(&oracle, source, description),
691+
observe_normalized_value(&oracle, source, description, ORACLE_NORMALIZER),
694692
"value mismatch for {description:?} ({source:?})"
695693
);
696694
}
@@ -712,23 +710,6 @@ fn statement_control_flow_diagnostics_match_pinned_quickjs() {
712710
}
713711
}
714712

715-
fn oracle_value_observation(oracle: &OsStr, source: &str, description: &str) -> String {
716-
let script = format!("var __qjo_value = std.evalScript(scriptArgs[0]);\n{ORACLE_NORMALIZER}");
717-
let output = Command::new(oracle)
718-
.args(["--std", "-e", &script, source])
719-
.output()
720-
.unwrap_or_else(|error| panic!("could not run QuickJS for {description:?}: {error}"));
721-
assert!(
722-
output.status.success(),
723-
"QuickJS rejected {description:?} ({source:?}): {}",
724-
String::from_utf8_lossy(&output.stderr)
725-
);
726-
String::from_utf8(output.stdout)
727-
.expect("QuickJS value output was not UTF-8")
728-
.trim_end()
729-
.to_owned()
730-
}
731-
732713
fn rust_error_observation(source: &str) -> String {
733714
let runtime = Runtime::new();
734715
let mut context = runtime.new_context();

tests/oracle/control_flow/oracle_switch_control_flow.rs

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::ffi::OsStr;
22
use std::process::Command;
33

4+
use super::quickjs_control_value_oracle::observe_normalized_value;
45
use super::quickjs_syntax_diagnostic_oracle::observe_cmdline_syntax_error as oracle_error_observation;
56
use quickjs_oxide::value::number_to_string;
67
use quickjs_oxide::{Context, Runtime, RuntimeError, Value};
@@ -247,7 +248,7 @@ fn switch_values_match_pinned_quickjs() {
247248
.unwrap_or_else(|error| panic!("Rust rejected {description:?} ({source:?}): {error}"));
248249
assert_eq!(
249250
normalize_rust_value(&value),
250-
oracle_value_observation(&oracle, source, description),
251+
observe_normalized_value(&oracle, source, description, ORACLE_NORMALIZER),
251252
"value mismatch for {description:?} ({source:?})"
252253
);
253254
}
@@ -292,23 +293,6 @@ fn switch_abrupt_values_match_pinned_quickjs() {
292293
}
293294
}
294295

295-
fn oracle_value_observation(oracle: &OsStr, source: &str, description: &str) -> String {
296-
let script = format!("var __qjo_value = std.evalScript(scriptArgs[0]);\n{ORACLE_NORMALIZER}");
297-
let output = Command::new(oracle)
298-
.args(["--std", "-e", &script, source])
299-
.output()
300-
.unwrap_or_else(|error| panic!("could not run QuickJS for {description:?}: {error}"));
301-
assert!(
302-
output.status.success(),
303-
"QuickJS rejected {description:?} ({source:?}): {}",
304-
String::from_utf8_lossy(&output.stderr)
305-
);
306-
String::from_utf8(output.stdout)
307-
.expect("QuickJS value output was not UTF-8")
308-
.trim_end()
309-
.to_owned()
310-
}
311-
312296
fn oracle_throw_observation(oracle: &OsStr, source: &str, description: &str) -> String {
313297
let script = format!(
314298
"try {{ std.evalScript(scriptArgs[0]); throw 'switch did not throw'; }} catch (__qjo_value) {{ {ORACLE_NORMALIZER} }}"

tests/oracle_control_flow.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
#[path = "support/quickjs_argv_completion_oracle.rs"]
55
mod quickjs_argv_completion_oracle;
6+
#[path = "support/quickjs_control_value_oracle.rs"]
7+
mod quickjs_control_value_oracle;
68
#[path = "support/quickjs_syntax_diagnostic_oracle.rs"]
79
mod quickjs_syntax_diagnostic_oracle;
810

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
use std::ffi::OsStr;
2+
use std::process::Command;
3+
4+
pub(super) fn observe_normalized_value(
5+
oracle: &OsStr,
6+
source: &str,
7+
description: &str,
8+
normalizer: &str,
9+
) -> String {
10+
let script = format!("var __qjo_value = std.evalScript(scriptArgs[0]);\n{normalizer}");
11+
let output = Command::new(oracle)
12+
.args(["--std", "-e", &script, source])
13+
.output()
14+
.unwrap_or_else(|error| panic!("could not run QuickJS for {description:?}: {error}"));
15+
assert!(
16+
output.status.success(),
17+
"QuickJS rejected {description:?} ({source:?}): {}",
18+
String::from_utf8_lossy(&output.stderr)
19+
);
20+
String::from_utf8(output.stdout)
21+
.expect("QuickJS value output was not UTF-8")
22+
.trim_end()
23+
.to_owned()
24+
}

0 commit comments

Comments
 (0)