|
3 | 3 | load test_helper |
4 | 4 |
|
5 | 5 | @test 'Recognizes simple node version specified in package.json engines' { |
6 | | - create_version 4.2.1 |
7 | | - cd_into_package 4.2.1 |
| 6 | + in_package_for_engine 4.2.1 |
8 | 7 |
|
9 | 8 | run nodenv version |
10 | 9 | assert_success '4.2.1 (set by package-json-engine matching 4.2.1)' |
11 | | - run nodenv which node |
12 | | - assert_success "${NODENV_ROOT}/versions/4.2.1/bin/node" |
13 | | -} |
14 | | - |
15 | | -@test 'Recognizes a semver range matching an installed version' { |
16 | | - create_version 4.2.1 |
17 | | - cd_into_package '>= 4.0.0' |
18 | | - |
19 | | - run nodenv version |
20 | | - assert_success '4.2.1 (set by package-json-engine matching >= 4.0.0)' |
21 | 10 | } |
22 | 11 |
|
23 | 12 | @test 'Prefers the greatest installed version matching a range' { |
24 | | - create_version 4.0.0 |
25 | | - create_version 4.2.1 |
26 | | - cd_into_package '^4.0.0' |
| 13 | + in_package_for_engine '^4.0.0' |
27 | 14 |
|
28 | 15 | run nodenv version |
29 | 16 | assert_success '4.2.1 (set by package-json-engine matching ^4.0.0)' |
30 | 17 | } |
31 | 18 |
|
32 | 19 | @test 'Ignores non-matching installed versions' { |
33 | | - create_version 0.12.7 |
34 | | - cd_into_package '>= 4.0.0' |
35 | | - |
36 | | - # For unknown reasons, nodenv-version succeeds when version-name fails, |
37 | | - # so we're testing version-name directly |
38 | | - run nodenv version-name |
39 | | - assert [ "$output" = "package-json-engine: no version satisfying \`>= 4.0.0' installed" ] |
40 | | - assert [ "$status" -eq 1 ] |
| 20 | + in_package_for_engine '^1.0.0' |
41 | 21 |
|
42 | | - # `which` should fail similarly |
43 | | - run nodenv which node |
44 | | - assert echo "$output" | grep 'no version satisfying' |
45 | | - assert [ "$status" -eq 1 ] |
| 22 | + run nodenv version |
| 23 | + # note the command completes successfully |
| 24 | + assert_success "package-json-engine: version satisfying \`^1.0.0' not installed |
| 25 | + (set by package-json-engine matching ^1.0.0)" |
46 | 26 | } |
47 | 27 |
|
48 | 28 | @test 'Prefers nodenv-local over package.json' { |
49 | | - create_version 4.2.1 |
50 | | - create_version 5.0.0 |
51 | | - cd_into_package 4.2.1 |
| 29 | + in_package_for_engine 4.2.1 |
52 | 30 | nodenv local 5.0.0 |
53 | 31 |
|
54 | 32 | run nodenv version |
55 | 33 | assert_success "5.0.0 (set by $PWD/.node-version)" |
56 | 34 | } |
57 | 35 |
|
58 | 36 | @test 'Prefers nodenv-shell over package.json' { |
59 | | - create_version 5.0.0 |
60 | | - cd_into_package 4.2.1 |
61 | | - eval "$(nodenv sh-shell 5.0.0)" |
| 37 | + in_package_for_engine 4.2.1 |
62 | 38 |
|
63 | | - run nodenv version |
| 39 | + NODENV_VERSION=5.0.0 run nodenv version |
64 | 40 | assert_success "5.0.0 (set by NODENV_VERSION environment variable)" |
65 | 41 | } |
66 | 42 |
|
67 | 43 | @test 'Prefers package.json over nodenv-global' { |
68 | | - create_version 4.2.1 |
69 | | - create_version 5.0.0 |
70 | | - cd_into_package 4.2.1 |
| 44 | + in_package_for_engine 4.2.1 |
71 | 45 | nodenv global 5.0.0 |
72 | 46 |
|
73 | 47 | run nodenv version-name |
74 | 48 | assert_success '4.2.1' |
75 | 49 | } |
76 | 50 |
|
77 | 51 | @test 'Is not confused by nodenv-shell shadowing nodenv-global' { |
78 | | - create_version 4.2.1 |
79 | | - create_version 5.0.0 |
80 | | - cd_into_package 4.2.1 |
| 52 | + in_package_for_engine 4.2.1 |
81 | 53 | nodenv global 5.0.0 |
82 | | - eval "$(nodenv sh-shell 5.0.0)" |
| 54 | + |
| 55 | + NODENV_VERSION=5.0.0 run nodenv version |
| 56 | + assert_success "5.0.0 (set by NODENV_VERSION environment variable)" |
| 57 | +} |
| 58 | + |
| 59 | +@test 'Does not match arbitrary "node" key in package.json' { |
| 60 | + in_package_with_babel_env |
83 | 61 |
|
84 | 62 | run nodenv version-name |
85 | | - assert_success '5.0.0' |
| 63 | + |
| 64 | + assert_success 'system' |
86 | 65 | } |
87 | 66 |
|
88 | | -@test 'Does not match babel preset env settings' { |
89 | | - create_version 4.2.1 |
90 | | - cd_into_babel_env_package |
| 67 | +@test 'Handles missing package.json' { |
| 68 | + in_example_package |
| 69 | + |
91 | 70 | run nodenv version-name |
| 71 | + |
92 | 72 | assert_success 'system' |
93 | 73 | } |
| 74 | + |
| 75 | +@test 'Does not fail with unreadable package.json' { |
| 76 | + in_example_package |
| 77 | + touch package.json |
| 78 | + chmod -r package.json |
| 79 | + |
| 80 | + run nodenv version-name |
| 81 | + |
| 82 | + assert_success 'system' |
| 83 | +} |
| 84 | + |
| 85 | +@test 'Does not fail with non-file package.json' { |
| 86 | + in_example_package |
| 87 | + mkdir package.json |
| 88 | + |
| 89 | + run nodenv version-name |
| 90 | + |
| 91 | + assert_success 'system' |
| 92 | +} |
| 93 | + |
| 94 | +@test 'Does not fail with empty or malformed package.json' { |
| 95 | + in_example_package |
| 96 | + |
| 97 | + # empty |
| 98 | + touch package.json |
| 99 | + run nodenv version-name |
| 100 | + assert_success 'system' |
| 101 | + |
| 102 | + # non json |
| 103 | + echo "foo" > package.json |
| 104 | + run nodenv version-name |
| 105 | + assert_success 'system' |
| 106 | + |
| 107 | + # malformed |
| 108 | + echo "{" > package.json |
| 109 | + run nodenv version-name |
| 110 | + assert_success 'system' |
| 111 | +} |
| 112 | + |
| 113 | +@test 'Handles multiple occurrences of "node" key' { |
| 114 | + in_example_package |
| 115 | + cat << JSON > package.json |
| 116 | +{ |
| 117 | + "engines": { |
| 118 | + "node": "4.2.1" |
| 119 | + }, |
| 120 | + "presets": [ |
| 121 | + ["env", { |
| 122 | + "targets": { |
| 123 | + "node": "current" |
| 124 | + } |
| 125 | + }] |
| 126 | + ] |
| 127 | +} |
| 128 | +JSON |
| 129 | + |
| 130 | + run nodenv version-name |
| 131 | + assert_success '4.2.1' |
| 132 | +} |
0 commit comments