diff --git a/nixjs-rt/src/builtins.ts b/nixjs-rt/src/builtins.ts index 6bc66a3..02ccf63 100644 --- a/nixjs-rt/src/builtins.ts +++ b/nixjs-rt/src/builtins.ts @@ -549,7 +549,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; +}