diff --git a/crates/nu-std/CONTRIBUTING.md b/crates/nu-std/CONTRIBUTING.md index 1677a31de1..e866cc9206 100644 --- a/crates/nu-std/CONTRIBUTING.md +++ b/crates/nu-std/CONTRIBUTING.md @@ -204,7 +204,7 @@ More design guidelines: ### Useful Commands - Run all unit tests for the standard library: ```nushell - cargo run -- -c 'use std testing; testing run-tests --path crates/nu-std' + cargo run -- -c 'use crates/nu-std/testing.nu; testing run-tests --path crates/nu-std' ``` > **Note** > this uses the debug version of NU interpreter from the same repo, which is @@ -216,7 +216,7 @@ More design guidelines: - Run all tests for a specific test module, e.g, `crates/nu-std/tests/test_foo.nu` ```nushell - cargo run -- -c 'use std testing; testing run-tests --path crates/nu-std --module test_foo' + cargo run -- -c 'use crates/nu-std/testing.nu; testing run-tests --path crates/nu-std --module test_foo' ``` - Run a custom command with additional logging (assuming you have instrumented the command with `log `, as we recommend.) diff --git a/crates/nu-std/std/mod.nu b/crates/nu-std/std/mod.nu index 15bad0e8e5..4d4f2bb0f1 100644 --- a/crates/nu-std/std/mod.nu +++ b/crates/nu-std/std/mod.nu @@ -66,7 +66,7 @@ export def --env "path add" [ "record" => { $p | get --ignore-errors $nu.os-info.name }, } - $p | path expand + $p | path expand --no-symlink } if null in $paths or ($paths | is-empty) { @@ -80,7 +80,6 @@ export def --env "path add" [ $env | get $path_name | split row (char esep) - | path expand | if $append { append $paths } else { prepend $paths } )} diff --git a/crates/nu-std/tests/test_std.nu b/crates/nu-std/tests/test_std.nu index 45633719a0..6ac7c6b9e0 100644 --- a/crates/nu-std/tests/test_std.nu +++ b/crates/nu-std/tests/test_std.nu @@ -38,12 +38,38 @@ def path_add [] { std path add $target_paths assert equal (get_path) ([($target_paths | get $nu.os-info.name)] | path expand) - load-env {$path_name: [$"/foo(char esep)/bar"]} + load-env {$path_name: [$"(["/foo", "/bar"] | path expand | str join (char esep))"]} std path add "~/foo" assert equal (get_path) (["~/foo", "/foo", "/bar"] | path expand) } } +#[test] +def path_add_expand [] { + use std assert + + # random paths to avoid collision, especially if left dangling on failure + let real_dir = $nu.temp-path | path join $"real-dir-(random chars)" + let link_dir = $nu.temp-path | path join $"link-dir-(random chars)" + mkdir $real_dir + let path_name = if $nu.os-info.family == 'windows' { + mklink /D $link_dir $real_dir + "Path" + } else { + ln -s $real_dir $link_dir | ignore + "PATH" + } + + with-env {$path_name: []} { + def get_path [] { $env | get $path_name } + + std path add $link_dir + assert equal (get_path) ([$link_dir]) + } + + rm $real_dir $link_dir +} + #[test] def banner [] { std assert ((std banner | lines | length) == 15)