From 482484bf5ded6d1a2433e92f26ab92fa37e5d495 Mon Sep 17 00:00:00 2001 From: "arduano@localhost" <> Date: Mon, 27 May 2024 11:44:59 +1000 Subject: [PATCH] More robust import tests Everything I've done in previous PRs fixed issues with these tests. They test importing both using paths and strings, importing from the same folder, from a parent folder, from a child folder. --- nixjs-rt/src/builtins.ts | 9 +++- src/tests/builtins.rs | 52 ++++++++++++++++++- src/tests/import_tests/basic.nix | 3 ++ .../import_tests/child-folder-import.nix | 4 ++ src/tests/import_tests/nested/basic.nix | 3 ++ .../nested/parent-folder-import.nix | 4 ++ src/tests/import_tests/same-folder-import.nix | 4 ++ 7 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 src/tests/import_tests/basic.nix create mode 100644 src/tests/import_tests/child-folder-import.nix create mode 100644 src/tests/import_tests/nested/basic.nix create mode 100644 src/tests/import_tests/nested/parent-folder-import.nix create mode 100644 src/tests/import_tests/same-folder-import.nix diff --git a/nixjs-rt/src/builtins.ts b/nixjs-rt/src/builtins.ts index 8e6d4a3..bbaf07a 100644 --- a/nixjs-rt/src/builtins.ts +++ b/nixjs-rt/src/builtins.ts @@ -548,7 +548,14 @@ export function getBuiltins() { throw new Error("unimplemented"); }, - toString: (arg) => { + toString: (arg: NixType) => { + if (arg instanceof NixString) { + return arg; + } else if (arg instanceof Path) { + return new NixString(arg.path); + } + + // TODO: Expand on this throw new Error("unimplemented"); }, diff --git a/src/tests/builtins.rs b/src/tests/builtins.rs index fe0a8f8..91e9580 100644 --- a/src/tests/builtins.rs +++ b/src/tests/builtins.rs @@ -488,11 +488,59 @@ mod import { #[test] fn eval() { assert_eq!( - eval_ok("(builtins.import ./flake.nix).description"), - Value::Str("A reimplementation or nix in Rust.".into()) + eval_ok("(builtins.import ./src/tests/import_tests/basic.nix).data"), + Value::Str("imported!".into()) ); } + #[test] + fn eval_same_folder_import() { + assert_eq!( + eval_ok("(builtins.import ./src/tests/import_tests/same-folder-import.nix).dataPath"), + Value::Str("imported!".into()) + ); + assert_eq!( + eval_ok("(builtins.import ./src/tests/import_tests/same-folder-import.nix).dataString"), + Value::Str("imported!".into()) + ); + } + + #[test] + fn eval_child_folder_import() { + assert_eq!( + eval_ok("(builtins.import ./src/tests/import_tests/child-folder-import.nix).dataPath"), + Value::Str("imported!".into()) + ); + assert_eq!( + eval_ok( + "(builtins.import ./src/tests/import_tests/child-folder-import.nix).dataString" + ), + Value::Str("imported!".into()) + ); + } + + #[test] + fn eval_parent_folder_import() { + assert_eq!( + eval_ok("(builtins.import ./src/tests/import_tests/nested/parent-folder-import.nix).dataPath"), + Value::Str("imported!".into()) + ); + assert_eq!( + eval_ok("(builtins.import ./src/tests/import_tests/nested/parent-folder-import.nix).dataString"), + Value::Str("imported!".into()) + ); + } + + #[test] + fn eval_relative_string() { + assert_eq!( + eval_err(r#"builtins.import "./foo.nix""#), + NixErrorKind::Other { + codename: "builtins-import-non-absolute-path".to_owned() + } + ) + } + #[test] fn eval_lazy() { assert_eq!( diff --git a/src/tests/import_tests/basic.nix b/src/tests/import_tests/basic.nix new file mode 100644 index 0000000..55c15c7 --- /dev/null +++ b/src/tests/import_tests/basic.nix @@ -0,0 +1,3 @@ +{ + data = "imported!"; +} diff --git a/src/tests/import_tests/child-folder-import.nix b/src/tests/import_tests/child-folder-import.nix new file mode 100644 index 0000000..f6aa112 --- /dev/null +++ b/src/tests/import_tests/child-folder-import.nix @@ -0,0 +1,4 @@ +{ + dataPath = (builtins.import ./nested/basic.nix).data; + dataString = (builtins.import (builtins.toString ./nested/basic.nix)).data; +} diff --git a/src/tests/import_tests/nested/basic.nix b/src/tests/import_tests/nested/basic.nix new file mode 100644 index 0000000..55c15c7 --- /dev/null +++ b/src/tests/import_tests/nested/basic.nix @@ -0,0 +1,3 @@ +{ + data = "imported!"; +} diff --git a/src/tests/import_tests/nested/parent-folder-import.nix b/src/tests/import_tests/nested/parent-folder-import.nix new file mode 100644 index 0000000..be7a8f9 --- /dev/null +++ b/src/tests/import_tests/nested/parent-folder-import.nix @@ -0,0 +1,4 @@ +{ + dataPath = (builtins.import ../basic.nix).data; + dataString = (builtins.import (builtins.toString ../basic.nix)).data; +} diff --git a/src/tests/import_tests/same-folder-import.nix b/src/tests/import_tests/same-folder-import.nix new file mode 100644 index 0000000..5040c08 --- /dev/null +++ b/src/tests/import_tests/same-folder-import.nix @@ -0,0 +1,4 @@ +{ + dataPath = (builtins.import ./basic.nix).data; + dataString = (builtins.import (builtins.toString ./basic.nix)).data; +}