diff options
author | Vincent Ambo <mail@tazj.in> | 2022-08-10T15·53+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2022-08-24T21·25+0000 |
commit | 92c53fe982560248dc7655a5605db5e3cfc35d04 (patch) | |
tree | 567f8bf95bbc3ae7e10e262c589769c05a372056 /tvix/eval/src/tests/mod.rs | |
parent | b28da8ad56bd0d5dbf58926241060a6e4d34908b (diff) |
feat(tvix/tests): check in Nix' language test suite r/4461
This adds scaffolding code for running the Nix language test suite. The majority of eval-okay-* tests should eventually be runnable as-is by Tvix, however the eval-fail-* tests might not as we intend to have more useful error messages than upstream Nix. Change-Id: I4f3227f0889c55e4274b804a3072850fb78dd1bd Reviewed-on: https://cl.tvl.fyi/c/depot/+/6126 Tested-by: BuildkiteCI Autosubmit: tazjin <tazjin@tvl.su> Reviewed-by: grfn <grfn@gws.fyi>
Diffstat (limited to 'tvix/eval/src/tests/mod.rs')
-rw-r--r-- | tvix/eval/src/tests/mod.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/tvix/eval/src/tests/mod.rs b/tvix/eval/src/tests/mod.rs new file mode 100644 index 000000000000..fa565733951a --- /dev/null +++ b/tvix/eval/src/tests/mod.rs @@ -0,0 +1,28 @@ +use crate::eval::interpret; + +use test_generator::test_resources; + +// eval-okay-* tests contain a snippet of Nix code, and an expectation +// of the produced string output of the evaluator. +// +// These evaluations are always supposed to succeed, i.e. all snippets +// are guaranteed to be valid Nix code. +#[test_resources("src/tests/nix_tests/eval-okay-*.nix")] +fn eval_okay(code_path: &str) { + let base = code_path + .strip_suffix("nix") + .expect("test files always end in .nix"); + let exp_path = format!("{}exp", base); + + let code = std::fs::read_to_string(code_path).expect("should be able to read test code"); + let exp = std::fs::read_to_string(exp_path).expect("should be able to read test expectation"); + + let result = interpret(&code).expect("evaluation of eval-okay test should succeed"); + let result_str = format!("{}", result); + + assert_eq!( + exp.trim(), + result_str, + "result value (and its representation) must match expectation" + ); +} |