├── .gitattributes ├── .gitignore ├── .npmignore ├── .travis.yml ├── CONTRIBUTING.md ├── LICENSE.md ├── Makefile ├── README.markdown ├── bash_completion ├── install.sh ├── nvm-exec ├── nvm.sh ├── package.json └── test ├── fast ├── Aliases │ ├── Running "nvm alias " again should change the target │ ├── Running "nvm alias " should list but one alias. │ ├── Running "nvm alias" lists implicit aliases when they do not exist │ ├── Running "nvm alias" lists manual aliases instead of implicit aliases when present │ ├── Running "nvm alias" should list all aliases. │ ├── circular │ │ ├── nvm_resolve_alias │ │ ├── nvm_resolve_local_alias │ │ ├── setup │ │ └── teardown │ ├── nvm_ensure_default_set │ ├── nvm_resolve_alias │ ├── nvm_resolve_local_alias │ ├── setup │ └── teardown ├── Listing paths │ ├── Running "nvm which 0.0.2" should display only version 0.0.2. │ ├── Running "nvm which foo" should return a nonzero exit code when not found │ └── teardown ├── Listing versions │ ├── Running "nvm ls 0.0.2" should display only version 0.0.2. │ ├── Running "nvm ls 0.2" should display only 0.2.x versions. │ ├── Running "nvm ls foo" should return a nonzero exit code when not found │ ├── Running "nvm ls io" should return NA │ ├── Running "nvm ls node_" should return a nonzero exit code when not found │ ├── Running "nvm ls stable" and "nvm ls unstable" should return the appropriate implicit alias │ ├── Running "nvm ls system" should include "system" when appropriate │ ├── Running "nvm ls" should display all installed versions. │ ├── Running "nvm ls" should filter out ".nvm" │ ├── Running "nvm ls" should filter out "versions" │ ├── Running "nvm ls" should include "system" when appropriate │ ├── Running "nvm ls" should list versions in the "versions" directory │ ├── Running "nvm ls" with node-like versioning vx.x.x should only list a matched version │ └── teardown ├── Running "nvm alias" should create a file in the alias directory. ├── Running "nvm current" should display current nvm environment. ├── Running "nvm deactivate" should unset the nvm environment variables. ├── Running "nvm install" with "--reinstall-packages-from" requires a valid version ├── Running "nvm install" with an invalid version fails nicely ├── Running "nvm unalias" should remove the alias file. ├── Running "nvm uninstall" should remove the appropriate directory. ├── Running "nvm unload" should unset all function and variables. ├── Running "nvm use foo" where "foo" is circular aborts ├── Running "nvm use iojs" uses latest io.js version ├── Running "nvm use system" should work as expected ├── Running "nvm use x" should create and change the "current" symlink ├── Running "nvm use x" should not create the "current" symlink if $NVM_SYMLINK_CURRENT is false ├── Sourcing nvm.sh should make the nvm command available. ├── Unit tests │ ├── nvm_add_iojs_prefix │ ├── nvm_alias │ ├── nvm_alias_path │ ├── nvm_checksum │ ├── nvm_ensure_default_set │ ├── nvm_ensure_version_installed │ ├── nvm_ensure_version_prefix │ ├── nvm_find_up │ ├── nvm_format_version │ ├── nvm_get_latest missing curl or wget │ ├── nvm_has │ ├── nvm_has_system_iojs │ ├── nvm_has_system_node │ ├── nvm_iojs_prefix │ ├── nvm_is_alias │ ├── nvm_is_iojs_version │ ├── nvm_is_merged_node_version │ ├── nvm_is_valid_version │ ├── nvm_ls_current │ ├── nvm_ls_remote │ ├── nvm_ls_remote_iojs │ ├── nvm_node_prefix │ ├── nvm_num_version_groups │ ├── nvm_prepend_path │ ├── nvm_print_implicit_alias errors │ ├── nvm_print_implicit_alias success │ ├── nvm_print_npm_version │ ├── nvm_remote_version │ ├── nvm_remote_versions │ ├── nvm_strip_iojs_prefix │ ├── nvm_strip_path │ ├── nvm_tree_contains_path │ ├── nvm_validate_implicit_alias │ ├── nvm_version │ ├── nvm_version_dir │ ├── nvm_version_greater │ └── nvm_version_path ├── setup ├── setup_dir ├── teardown └── teardown_dir ├── install_script ├── nvm_check_global_modules ├── nvm_detect_profile ├── nvm_do_install ├── nvm_reset └── nvm_source ├── installation ├── io.js │ ├── install already installed uses it │ ├── install from binary │ ├── install two versions and use the latest one │ ├── install version specified in .nvmrc from binary │ ├── install while reinstalling packages │ ├── nvm install v1 works │ ├── setup_dir │ └── teardown_dir └── node │ ├── install already installed uses it │ ├── install from binary │ ├── install from source │ ├── install from source implicitly │ ├── install from source without V8 snapshot for ARM │ ├── install two versions and use the latest one │ ├── install version specified in .nvmrc from binary │ ├── install version specified in .nvmrc from source │ ├── install while reinstalling packages │ ├── setup_dir │ └── teardown_dir ├── slow ├── Running "nvm current" should display current nvm environment. ├── node 0.6.21 should install 0.6.21-pre ├── nvm exec │ ├── Running "nvm exec 0.x" should work │ ├── Running "nvm exec" should pick up .nvmrc version │ ├── setup_dir │ └── teardown_dir ├── nvm reinstall-packages │ ├── Running "nvm copy-packages $(nvm ls current)" should error out │ ├── setup_dir │ ├── should work as expected │ ├── teardown_dir │ └── test-npmlink │ │ ├── index.js │ │ └── package.json ├── nvm run │ ├── Running "nvm run --harmony --version" should work │ ├── Running "nvm run 0.x" should error out sensibly when 0.x is not installed │ ├── Running "nvm run 0.x" should work │ ├── Running "nvm run" should pick up .nvmrc version │ ├── setup_dir │ └── teardown_dir ├── nvm use │ ├── Running "nvm use iojs" uses latest io.js version │ ├── Running "nvm use node" uses latest stable node version │ ├── Running "nvm use v1.0.0" uses iojs-v1.0.0 iojs version │ ├── setup_dir │ └── teardown_dir └── nvm_get_latest │ ├── nvm_get_latest │ └── nvm_get_latest failed redirect └── sourcing ├── Sourcing nvm.sh should use the default if available ├── Sourcing nvm.sh with --install and .nvmrc should install it ├── Sourcing nvm.sh with --install should install the default ├── Sourcing nvm.sh with no default should return 0 ├── setup └── teardown /.gitattributes: -------------------------------------------------------------------------------- 1 | *.sh eol=lf 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | HEAD 2 | src 3 | v* 4 | alias 5 | 6 | # For testing 7 | test/bak 8 | .urchin.log 9 | .urchin_stdout 10 | 11 | node_modules/ 12 | npm-debug.log 13 | 14 | .DS_Store 15 | current 16 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | v* 3 | alias 4 | 5 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: c # defaults to ruby 3 | addons: 4 | apt_packages: 5 | - zsh 6 | - ksh 7 | install: 8 | - (mkdir /tmp/urchin && cd /tmp/urchin && curl -s "$(curl -s https://registry.npmjs.com/urchin | grep -Eo '"tarball":\s*"[^"]+"' | tail -n 1 | awk -F\" '{ print $4 }')" -O && tar -x -f urchin*) 9 | - chmod +x /tmp/urchin/package/urchin 10 | - '[ -z "$WITHOUT_CURL" ] || sudo apt-get remove curl -y' 11 | script: 12 | - NVM_DIR=$TRAVIS_BUILD_DIR make TEST_SUITE=$TEST_SUITE URCHIN=/tmp/urchin/package/urchin test-$SHELL 13 | env: 14 | - SHELL=bash TEST_SUITE=install_script 15 | - SHELL=sh TEST_SUITE=fast 16 | - SHELL=dash TEST_SUITE=fast 17 | - SHELL=bash TEST_SUITE=fast 18 | - SHELL=zsh TEST_SUITE=fast 19 | # - SHELL=ksh TEST_SUITE=fast 20 | - SHELL=sh TEST_SUITE=slow 21 | - SHELL=dash TEST_SUITE=slow 22 | - SHELL=bash TEST_SUITE=slow 23 | - SHELL=zsh TEST_SUITE=slow 24 | # - SHELL=ksh TEST_SUITE=slow 25 | - SHELL=sh TEST_SUITE=sourcing 26 | - SHELL=dash TEST_SUITE=sourcing 27 | - SHELL=bash TEST_SUITE=sourcing 28 | - SHELL=zsh TEST_SUITE=sourcing 29 | # - SHELL=ksh TEST_SUITE=sourcing 30 | - SHELL=sh TEST_SUITE=installation 31 | - SHELL=sh TEST_SUITE=installation WITHOUT_CURL=1 32 | - SHELL=dash TEST_SUITE=installation 33 | - SHELL=dash TEST_SUITE=installation WITHOUT_CURL=1 34 | - SHELL=bash TEST_SUITE=installation 35 | - SHELL=bash TEST_SUITE=installation WITHOUT_CURL=1 36 | - SHELL=zsh TEST_SUITE=installation 37 | - SHELL=zsh TEST_SUITE=installation WITHOUT_CURL=1 38 | # - SHELL=ksh TEST_SUITE=installation 39 | # - SHELL=ksh TEST_SUITE=installation WITHOUT_CURL=1 40 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Thanks for contributing to `nvm`! 2 | 3 | We love pull requests, they're our favorite. 4 | 5 | However, before submitting, please review the following: 6 | 7 | - Please include tests. Changes with tests will be merged very quickly. 8 | - Please manually confirm that your changes work in `bash`, `sh`/`dash`, `ksh`, and `zsh`. Fast tests do run in these shells, but it's nice to manually verify also. 9 | - Please maintain consistent whitespace - 2-space indentation, trailing newlines in all files, etc. 10 | - Any time you make a change to your PR, please rebase freshly on top of master. Nobody likes merge commits. 11 | 12 | Even if you don't have all of these items covered, please still feel free to submit a PR! Someone else may be inspired and volunteer to complete it for you. 13 | 14 | Thanks again! 15 | 16 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2010-2014 Tim Caswell 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Since we rely on paths relative to the makefile location, abort if make isn't being run from there. 2 | $(if $(findstring /,$(MAKEFILE_LIST)),$(error Please only invoke this makefile from the directory it resides in)) 3 | # Note: With Travis CI: 4 | # - the path to urchin is passed via the command line. 5 | # - the other utilities are NOT needed, so we skip the test for their existence. 6 | URCHIN := urchin 7 | ifeq ($(findstring /,$(URCHIN)),) # urchin path was NOT passed in. 8 | # Add the local npm packages' bin folder to the PATH, so that `make` can find them, when invoked directly. 9 | # Note that rather than using `$(npm bin)` the 'node_modules/.bin' path component is hard-coded, so that invocation works even from an environment 10 | # where npm is (temporarily) unavailable due to having deactivated an nvm instance loaded into the calling shell in order to avoid interference with tests. 11 | export PATH := $(shell printf '%s' "$$PWD/node_modules/.bin:$$PATH") 12 | # The list of all supporting utilities, installed with `npm install`. 13 | UTILS := $(URCHIN) replace semver 14 | # Make sure that all required utilities can be located. 15 | UTIL_CHECK := $(or $(shell PATH="$(PATH)" which $(UTILS) >/dev/null && echo 'ok'),$(error Did you forget to run `npm install` after cloning the repo? At least one of the required supporting utilities not found: $(UTILS))) 16 | endif 17 | # The files that need updating when incrementing the version number. 18 | VERSIONED_FILES := nvm.sh install.sh README.markdown package.json 19 | # Define all shells to test with. Can be overridden with `make SHELLS=... `. 20 | SHELLS := sh bash dash zsh # ksh (#574) 21 | # Generate 'test-' target names from specified shells. 22 | # The embedded shell names are extracted on demand inside the recipes. 23 | SHELL_TARGETS := $(addprefix test-,$(SHELLS)) 24 | # Define the default test suite(s). This can be overridden with `make TEST_SUITE=<...> `. 25 | # Test suites are the names of subfolders of './test'. 26 | TEST_SUITE := $(shell find ./test/* -type d -prune -exec basename {} \;) 27 | 28 | 29 | # Default target (by virtue of being the first non '.'-prefixed in the file). 30 | .PHONY: _no-target-specified 31 | _no-target-specified: 32 | $(error Please specify the target to make - `make list` shows targets. Alternatively, use `npm test` to run the default tests; `npm run` shows all tests) 33 | 34 | # Lists all targets defined in this makefile. 35 | .PHONY: list 36 | list: 37 | @$(MAKE) -pRrn : -f $(MAKEFILE_LIST) 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | egrep -v -e '^[^[:alnum:]]' -e '^$@$$' | sort 38 | 39 | # Set of test- targets; each runs the specified test suites for a single shell. 40 | # Note that preexisting NVM_* variables are unset to avoid interfering with tests, except when running the Travis tests (where NVM_DIR must be passed in and the env. is assumed to be pristine). 41 | .PHONY: $(SHELL_TARGETS) 42 | $(SHELL_TARGETS): 43 | @shell='$@'; shell=$${shell##*-}; which "$$shell" >/dev/null || { printf '\033[0;31m%s\033[0m\n' "WARNING: Cannot test with shell '$$shell': not found." >&2; exit 0; } && \ 44 | printf '\n\033[0;34m%s\033[0m\n' "Running tests in $$shell"; \ 45 | [ -z "$$TRAVIS_BUILD_DIR" ] && for v in $$(set | awk -F'=' '$$1 ~ "^NVM_" { print $$1 }'); do unset $$v; done && unset v; \ 46 | for suite in $(TEST_SUITE); do $(URCHIN) -f -s $$shell test/$$suite || exit; done 47 | 48 | # All-tests target: invokes the specified test suites for ALL shells defined in $(SHELLS). 49 | .PHONY: test 50 | test: $(SHELL_TARGETS) 51 | 52 | .PHONY: _ensure-tag 53 | _ensure-tag: 54 | ifndef TAG 55 | $(error Please invoke with `make TAG= release`, where is either an increment specifier (patch, minor, major, prepatch, preminor, premajor, prerelease), or an explicit major.minor.patch version number) 56 | endif 57 | 58 | # Ensures that the git workspace is clean. 59 | .PHONY: _ensure-clean 60 | _ensure-clean: 61 | @[ -z "$$(git status --porcelain --untracked-files=no || echo err)" ] || { echo "Workspace is not clean; please commit changes first." >&2; exit 2; } 62 | 63 | # Makes a release; invoke with `make TAG= release`. 64 | .PHONY: release 65 | release: _ensure-tag _ensure-clean 66 | @old_ver=`git describe --abbrev=0 --tags --match 'v[0-9]*.[0-9]*.[0-9]*'` || { echo "Failed to determine current version." >&2; exit 1; }; old_ver=$${old_ver#v}; \ 67 | new_ver=`echo "$(TAG)" | sed 's/^v//'`; new_ver=$${new_ver:-patch}; \ 68 | if printf "$$new_ver" | grep -q '^[0-9]'; then \ 69 | semver "$$new_ver" >/dev/null || { echo 'Invalid version number specified: $(TAG) - must be major.minor.patch' >&2; exit 2; }; \ 70 | semver -r "> $$old_ver" "$$new_ver" >/dev/null || { echo 'Invalid version number specified: $(TAG) - must be HIGHER than current one.' >&2; exit 2; } \ 71 | else \ 72 | new_ver=`semver -i "$$new_ver" "$$old_ver"` || { echo 'Invalid version-increment specifier: $(TAG)' >&2; exit 2; } \ 73 | fi; \ 74 | printf "=== Bumping version **$$old_ver** to **$$new_ver** before committing and tagging:\n=== TYPE 'proceed' TO PROCEED, anything else to abort: " && read response && [ "$$response" = 'proceed' ] || { echo 'Aborted.' >&2; exit 2; }; \ 75 | replace "$$old_ver" "$$new_ver" -- $(VERSIONED_FILES) && \ 76 | git commit -m "v$$new_ver" $(VERSIONED_FILES) && \ 77 | git tag -a -m "v$$new_ver" "v$$new_ver" 78 | -------------------------------------------------------------------------------- /README.markdown: -------------------------------------------------------------------------------- 1 | # Node Version Manager [![Build Status](https://travis-ci.org/creationix/nvm.svg?branch=master)][3] 2 | 3 | ___This is a fork `nvm` using [cnpm mirrors](https://npm.taobao.org/mirrors).___ 4 | 5 | ## Installation 6 | 7 | First you'll need to make sure your system has a c++ compiler. For OSX, XCode will work, for Ubuntu, the build-essential and libssl-dev packages work. 8 | 9 | Note: `nvm` does not support Windows (see [#284](https://github.com/creationix/nvm/issues/284)). Two alternatives exist, which are neither supported nor developed by us: 10 | - [nvmw](https://github.com/hakobera/nvmw) 11 | - [nvm-windows](https://github.com/coreybutler/nvm-windows) 12 | 13 | Note: `nvm` does not support [Fish] either (see [#303](https://github.com/creationix/nvm/issues/303)). An alternative exists, which is neither supported nor developed by us: 14 | - [bass](https://github.com/edc/bass) allows to use utilities written for Bash in fish shell 15 | 16 | ### Install script 17 | 18 | To install you could use the [install script][2] using cURL: 19 | 20 | curl https://raw.githubusercontent.com/cnpm/nvm/master/install.sh | bash 21 | 22 | or Wget: 23 | 24 | wget -qO- https://raw.githubusercontent.com/cnpm/nvm/master/install.sh | bash 25 | 26 | The script clones the nvm repository to `~/.nvm` and adds the source line to your profile (`~/.bash_profile`, `~/.zshrc` or `~/.profile`). 27 | 28 | You can customize the install source, directory and profile using the `NVM_SOURCE`, `NVM_DIR`, and `PROFILE` variables. 29 | Eg: `curl ... | NVM_DIR=/usr/local/nvm bash` for a global install. 30 | 31 | *NB. The installer can use `git`, `curl`, or `wget` to download `nvm`, whatever is available.* 32 | 33 | ### Manual install 34 | 35 | For manual install create a folder somewhere in your filesystem with the `nvm.sh` file inside it. I put mine in a folder called `nvm`. 36 | 37 | Or if you have `git` installed, then just clone it, and check out the latest version: 38 | 39 | git clone https://github.com/cnpm/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags` 40 | 41 | To activate nvm, you need to source it from your shell: 42 | 43 | . ~/.nvm/nvm.sh 44 | 45 | I always add this line to my `~/.bashrc`, `~/.profile`, or `~/.zshrc` file to have it automatically sourced upon login. 46 | Often I also put in a line to use a specific version of node. 47 | 48 | ## Usage 49 | 50 | You can create an `.nvmrc` file containing version number in the project root directory (or any parent directory). 51 | `nvm use`, `nvm install`, `nvm exec`, `nvm run`, and `nvm which` will all respect an `.nvmrc` file when a version is not supplied. 52 | 53 | To download, compile, and install the latest v0.10.x release of node, do this: 54 | 55 | nvm install 0.10 56 | 57 | And then in any new shell just use the installed version: 58 | 59 | nvm use 0.10 60 | 61 | Or you can just run it: 62 | 63 | nvm run 0.10 --version 64 | 65 | Or, you can run any arbitrary command in a subshell with the desired version of node: 66 | 67 | nvm exec 0.10 node --version 68 | 69 | You can also get the path to the executable to where it was installed: 70 | 71 | nvm which 0.10 72 | 73 | In place of a version pointer like "0.10", you can use the special default aliases "stable" and "unstable": 74 | 75 | nvm install stable 76 | nvm install unstable 77 | nvm use stable 78 | nvm run unstable --version 79 | 80 | If you want to install a new version of Node.js and migrate npm packages from a previous version: 81 | 82 | nvm install node --reinstall-packages-from=node 83 | 84 | This will first use "nvm version node" to identify the current version you're migrating packages from. Then it resolves the new version to install from the remote server and installs it. Lastly, it runs "nvm reinstall-packages" to reinstall the npm packages from your prior version of Node to the new one. 85 | 86 | You can also install and migrate npm packages from specific versions of Node like this: 87 | 88 | nvm install v0.10.40 --reinstall-packages-from=0.10.39 89 | nvm install v0.12.7 --reinstall-packages-from=0.12.6 90 | 91 | If you want to install [io.js](https://github.com/iojs/io.js/): 92 | 93 | nvm install iojs 94 | 95 | If you want to install a new version of io.js and migrate npm packages from a previous version: 96 | 97 | nvm install iojs --reinstall-packages-from=iojs 98 | 99 | The same guidelines mentioned for migrating npm packages in Node.js are applicable to io.js. 100 | 101 | If you want to use the system-installed version of node, you can use the special default alias "system": 102 | 103 | nvm use system 104 | nvm run system --version 105 | 106 | If you want to see what versions are installed: 107 | 108 | nvm ls 109 | 110 | If you want to see what versions are available to install: 111 | 112 | nvm ls-remote 113 | 114 | To restore your PATH, you can deactivate it. 115 | 116 | nvm deactivate 117 | 118 | To set a default Node version to be used in any new shell, use the alias 'default': 119 | 120 | nvm alias default stable 121 | 122 | To use a mirror of the node binaries, set `$NVM_NODEJS_ORG_MIRROR`: 123 | 124 | export NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist 125 | nvm install 0.10 126 | 127 | NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist nvm install 0.10 128 | 129 | To use a mirror of the iojs binaries, set `$NVM_IOJS_ORG_MIRROR`: 130 | 131 | export NVM_IOJS_ORG_MIRROR=https://iojs.org/dist 132 | nvm install iojs-v1.0.3 133 | 134 | NVM_IOJS_ORG_MIRROR=https://iojs.org/dist nvm install iojs-v1.0.3 135 | 136 | `nvm use` will not, by default, create a "current" symlink. Set `$NVM_SYMLINK_CURRENT` to "true" to enable this behavior, which is sometimes useful for IDEs. 137 | 138 | ## License 139 | 140 | nvm is released under the MIT license. 141 | 142 | 143 | Copyright (C) 2010-2014 Tim Caswell 144 | 145 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 146 | 147 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 148 | 149 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 150 | 151 | ## Running tests 152 | Tests are written in [Urchin]. Install Urchin (and other dependencies) like so: 153 | 154 | npm install 155 | 156 | There are slow tests and fast tests. The slow tests do things like install node 157 | and check that the right versions are used. The fast tests fake this to test 158 | things like aliases and uninstalling. From the root of the nvm git repository, 159 | run the fast tests like this. 160 | 161 | npm run test/fast 162 | 163 | Run the slow tests like this. 164 | 165 | npm run test/slow 166 | 167 | Run all of the tests like this 168 | 169 | npm test 170 | 171 | Nota bene: Avoid running nvm while the tests are running. 172 | 173 | ## Bash completion 174 | 175 | To activate, you need to source `bash_completion`: 176 | 177 | [[ -r $NVM_DIR/bash_completion ]] && . $NVM_DIR/bash_completion 178 | 179 | Put the above sourcing line just below the sourcing line for NVM in your profile (`.bashrc`, `.bash_profile`). 180 | 181 | ### Usage 182 | 183 | nvm 184 | 185 | $ nvm [tab][tab] 186 | alias deactivate install ls run unload 187 | clear-cache exec list ls-remote unalias use 188 | current help list-remote reinstall-packages uninstall version 189 | 190 | nvm alias 191 | 192 | $ nvm alias [tab][tab] 193 | default 194 | 195 | $ nvm alias my_alias [tab][tab] 196 | v0.6.21 v0.8.26 v0.10.28 197 | 198 | nvm use 199 | 200 | $ nvm use [tab][tab] 201 | my_alias default v0.6.21 v0.8.26 v0.10.28 202 | 203 | nvm uninstall 204 | 205 | $ nvm uninstall [tab][tab] 206 | my_alias default v0.6.21 v0.8.26 v0.10.28 207 | 208 | ## Compatibility Issues 209 | `nvm` will encounter some issues if you have some non-default settings set. (see [#606](/../../issues/606)) 210 | The following are known to cause issues: 211 | 212 | Inside `~/.npmrc` 213 | ``` 214 | prefix='some/path' 215 | ``` 216 | Environment Variables: 217 | ``` 218 | $NPM_CONFIG_PREFIX 219 | $PREFIX 220 | ``` 221 | 222 | ## Problems 223 | 224 | If you try to install a node version and the installation fails, be sure to delete the node downloads from src (~/.nvm/src/) or you might get an error when trying to reinstall them again or you might get an error like the following: 225 | 226 | curl: (33) HTTP server doesn't seem to support byte ranges. Cannot resume. 227 | 228 | Where's my 'sudo node'? Check out this link: 229 | 230 | https://github.com/creationix/nvm/issues/43 231 | 232 | On Arch Linux and other systems using python3 by default, before running *install* you need to 233 | 234 | export PYTHON=python2 235 | 236 | After the v0.8.6 release of node, nvm tries to install from binary packages. But in some systems, the official binary packages don't work due to incompatibility of shared libs. In such cases, use `-s` option to force install from source: 237 | 238 | nvm install -s 0.8.6 239 | 240 | [1]: https://github.com/creationix/nvm.git 241 | [2]: https://github.com/cnpm/nvm/blob/master/install.sh 242 | [3]: https://travis-ci.org/creationix/nvm 243 | [Urchin]: https://github.com/scraperwiki/urchin 244 | [Fish]: http://fishshell.com 245 | -------------------------------------------------------------------------------- /bash_completion: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # bash completion for Node Version Manager (NVM) 4 | 5 | __nvm_generate_completion() 6 | { 7 | declare current_word 8 | current_word="${COMP_WORDS[COMP_CWORD]}" 9 | COMPREPLY=($(compgen -W "$1" -- "$current_word")) 10 | return 0 11 | } 12 | 13 | __nvm_commands () 14 | { 15 | declare current_word 16 | declare command 17 | 18 | current_word="${COMP_WORDS[COMP_CWORD]}" 19 | 20 | COMMANDS='\ 21 | help install uninstall use run exec \ 22 | alias unalias reinstall-packages \ 23 | current list ls list-remote ls-remote \ 24 | clear-cache deactivate unload \ 25 | version which' 26 | 27 | if [ ${#COMP_WORDS[@]} == 4 ]; then 28 | 29 | command="${COMP_WORDS[COMP_CWORD-2]}" 30 | case "${command}" in 31 | alias) __nvm_installed_nodes ;; 32 | esac 33 | 34 | else 35 | 36 | case "${current_word}" in 37 | -*) __nvm_options ;; 38 | *) __nvm_generate_completion "$COMMANDS" ;; 39 | esac 40 | 41 | fi 42 | } 43 | 44 | __nvm_options () 45 | { 46 | OPTIONS='' 47 | __nvm_generate_completion "$OPTIONS" 48 | } 49 | 50 | __nvm_installed_nodes () 51 | { 52 | __nvm_generate_completion "$(nvm_ls) $(__nvm_aliases)" 53 | } 54 | 55 | __nvm_aliases () 56 | { 57 | declare aliases 58 | aliases="" 59 | if [ -d $NVM_DIR/alias ]; then 60 | aliases="`cd $NVM_DIR/alias && command ls`" 61 | fi 62 | echo "${aliases}" 63 | } 64 | 65 | __nvm_alias () 66 | { 67 | __nvm_generate_completion "$(__nvm_aliases)" 68 | } 69 | 70 | __nvm () 71 | { 72 | declare previous_word 73 | previous_word="${COMP_WORDS[COMP_CWORD-1]}" 74 | 75 | case "$previous_word" in 76 | use|run|exec|ls|list|uninstall) __nvm_installed_nodes ;; 77 | alias|unalias) __nvm_alias ;; 78 | *) __nvm_commands ;; 79 | esac 80 | 81 | return 0 82 | } 83 | 84 | # complete is a bash builtin, but recent versions of ZSH come with a function 85 | # called bashcompinit that will create a complete in ZSH. If the user is in 86 | # ZSH, load and run bashcompinit before calling the complete function. 87 | if [[ -n ${ZSH_VERSION-} ]]; then 88 | autoload -U +X bashcompinit && bashcompinit 89 | fi 90 | 91 | complete -o default -o nospace -F __nvm nvm 92 | 93 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | { # this ensures the entire script is downloaded # 6 | 7 | nvm_has() { 8 | type "$1" > /dev/null 2>&1 9 | } 10 | 11 | if [ -z "$NVM_DIR" ]; then 12 | NVM_DIR="$HOME/.nvm" 13 | fi 14 | 15 | nvm_latest_version() { 16 | echo "v0.26.1" 17 | } 18 | 19 | # 20 | # Outputs the location to NVM depending on: 21 | # * The availability of $NVM_SOURCE 22 | # * The method used ("script" or "git" in the script, defaults to "git") 23 | # NVM_SOURCE always takes precedence unless the method is "script-nvm-exec" 24 | # 25 | nvm_source() { 26 | local NVM_METHOD 27 | NVM_METHOD="$1" 28 | local NVM_SOURCE_URL 29 | NVM_SOURCE_URL="$NVM_SOURCE" 30 | if [ "_$NVM_METHOD" = "_script-nvm-exec" ]; then 31 | NVM_SOURCE_URL="https://raw.githubusercontent.com/creationix/nvm/$(nvm_latest_version)/nvm-exec" 32 | elif [ -z "$NVM_SOURCE_URL" ]; then 33 | if [ "_$NVM_METHOD" = "_script" ]; then 34 | NVM_SOURCE_URL="https://raw.githubusercontent.com/cnpm/nvm/$(nvm_latest_version)/nvm.sh" 35 | elif [ "_$NVM_METHOD" = "_script-nvm-exec" ]; then 36 | NVM_SOURCE_URL="https://raw.githubusercontent.com/cnpm/nvm/$(nvm_latest_version)/nvm.sh" 37 | elif [ "_$NVM_METHOD" = "_git" ] || [ -z "$NVM_METHOD" ]; then 38 | NVM_SOURCE_URL="https://github.com/cnpm/nvm.git" 39 | else 40 | echo >&2 "Unexpected value \"$NVM_METHOD\" for \$NVM_METHOD" 41 | return 1 42 | fi 43 | fi 44 | echo "$NVM_SOURCE_URL" 45 | } 46 | 47 | nvm_download() { 48 | if nvm_has "curl"; then 49 | curl -q $* 50 | elif nvm_has "wget"; then 51 | # Emulate curl with wget 52 | ARGS=$(echo "$*" | command sed -e 's/--progress-bar /--progress=bar /' \ 53 | -e 's/-L //' \ 54 | -e 's/-I /--server-response /' \ 55 | -e 's/-s /-q /' \ 56 | -e 's/-o /-O /' \ 57 | -e 's/-C - /-c /') 58 | wget $ARGS 59 | fi 60 | } 61 | 62 | install_nvm_from_git() { 63 | if [ -d "$NVM_DIR/.git" ]; then 64 | echo "=> nvm is already installed in $NVM_DIR, trying to update using git" 65 | printf "\r=> " 66 | cd "$NVM_DIR" && (command git fetch 2> /dev/null || { 67 | echo >&2 "Failed to update nvm, run 'git fetch' in $NVM_DIR yourself." && exit 1 68 | }) 69 | else 70 | # Cloning to $NVM_DIR 71 | echo "=> Downloading nvm from git to '$NVM_DIR'" 72 | printf "\r=> " 73 | mkdir -p "$NVM_DIR" 74 | command git clone "$(nvm_source git)" "$NVM_DIR" 75 | fi 76 | cd "$NVM_DIR" && command git checkout --quiet $(nvm_latest_version) 77 | if [ ! -z "$(cd "$NVM_DIR" && git show-ref refs/heads/master)" ]; then 78 | if git branch --quiet 2>/dev/null; then 79 | cd "$NVM_DIR" && command git branch --quiet -D master >/dev/null 2>&1 80 | else 81 | echo >&2 "Your version of git is out of date. Please update it!" 82 | cd "$NVM_DIR" && command git branch -D master >/dev/null 2>&1 83 | fi 84 | fi 85 | return 86 | } 87 | 88 | install_nvm_as_script() { 89 | local NVM_SOURCE_LOCAL 90 | NVM_SOURCE_LOCAL=$(nvm_source script) 91 | local NVM_EXEC_SOURCE 92 | NVM_EXEC_SOURCE=$(nvm_source script-nvm-exec) 93 | 94 | # Downloading to $NVM_DIR 95 | mkdir -p "$NVM_DIR" 96 | if [ -d "$NVM_DIR/nvm.sh" ]; then 97 | echo "=> nvm is already installed in $NVM_DIR, trying to update the script" 98 | else 99 | echo "=> Downloading nvm as script to '$NVM_DIR'" 100 | fi 101 | nvm_download -s "$NVM_SOURCE_LOCAL" -o "$NVM_DIR/nvm.sh" || { 102 | echo >&2 "Failed to download '$NVM_SOURCE_LOCAL'" 103 | return 1 104 | } 105 | nvm_download -s "$NVM_EXEC_SOURCE" -o "$NVM_DIR/nvm-exec" || { 106 | echo >&2 "Failed to download '$NVM_EXEC_SOURCE'" 107 | return 2 108 | } 109 | chmod a+x "$NVM_DIR/nvm-exec" || { 110 | echo >&2 "Failed to mark '$NVM_DIR/nvm-exec' as executable" 111 | return 3 112 | } 113 | } 114 | 115 | # 116 | # Detect profile file if not specified as environment variable 117 | # (eg: PROFILE=~/.myprofile) 118 | # The echo'ed path is guaranteed to be an existing file 119 | # Otherwise, an empty string is returned 120 | # 121 | nvm_detect_profile() { 122 | 123 | local DETECTED_PROFILE 124 | DETECTED_PROFILE='' 125 | local SHELLTYPE 126 | SHELLTYPE="$(basename /$SHELL)" 127 | 128 | if [ $SHELLTYPE = "bash" ]; then 129 | if [ -f "$HOME/.bashrc" ]; then 130 | DETECTED_PROFILE="$HOME/.bashrc" 131 | elif [ -f "$HOME/.bash_profile" ]; then 132 | DETECTED_PROFILE="$HOME/.bash_profile" 133 | fi 134 | elif [ $SHELLTYPE = "zsh" ]; then 135 | DETECTED_PROFILE="$HOME/.zshrc" 136 | fi 137 | 138 | if [ -z $DETECTED_PROFILE ]; then 139 | if [ -f "$PROFILE" ]; then 140 | DETECTED_PROFILE="$PROFILE" 141 | elif [ -f "$HOME/.profile" ]; then 142 | DETECTED_PROFILE="$HOME/.profile" 143 | elif [ -f "$HOME/.bashrc" ]; then 144 | DETECTED_PROFILE="$HOME/.bashrc" 145 | elif [ -f "$HOME/.bash_profile" ]; then 146 | DETECTED_PROFILE="$HOME/.bash_profile" 147 | elif [ -f "$HOME/.zshrc" ]; then 148 | DETECTED_PROFILE="$HOME/.zshrc" 149 | fi 150 | fi 151 | 152 | if [ ! -z $DETECTED_PROFILE ]; then 153 | echo "$DETECTED_PROFILE" 154 | fi 155 | } 156 | 157 | # 158 | # Check whether the user has any globally-installed npm modules in their system 159 | # Node, and warn them if so. 160 | # 161 | nvm_check_global_modules() { 162 | command -v npm >/dev/null 2>&1 || return 0 163 | 164 | local NPM_VERSION 165 | NPM_VERSION="$(npm --version)" 166 | NPM_VERSION="${NPM_VERSION:--1}" 167 | [ "${NPM_VERSION%%[!-0-9]*}" -gt 0 ] || return 0 168 | 169 | local NPM_GLOBAL_MODULES 170 | NPM_GLOBAL_MODULES="$( 171 | npm list -g --depth=0 | 172 | sed '/ npm@/d' | 173 | sed '/ (empty)$/d' 174 | )" 175 | 176 | local MODULE_COUNT 177 | MODULE_COUNT="$( 178 | printf %s\\n "$NPM_GLOBAL_MODULES" | 179 | sed -ne '1!p' | # Remove the first line 180 | wc -l | tr -d ' ' # Count entries 181 | )" 182 | 183 | if [ $MODULE_COUNT -ne 0 ]; then 184 | cat <<-'END_MESSAGE' 185 | => You currently have modules installed globally with `npm`. These will no 186 | => longer be linked to the active version of Node when you install a new node 187 | => with `nvm`; and they may (depending on how you construct your `$PATH`) 188 | => override the binaries of modules installed with `nvm`: 189 | 190 | END_MESSAGE 191 | printf %s\\n "$NPM_GLOBAL_MODULES" 192 | cat <<-'END_MESSAGE' 193 | 194 | => If you wish to uninstall them at a later point (or re-install them under your 195 | => `nvm` Nodes), you can remove them from the system Node as follows: 196 | 197 | $ nvm use system 198 | $ npm uninstall -g a_module 199 | 200 | END_MESSAGE 201 | fi 202 | } 203 | 204 | nvm_do_install() { 205 | if [ -z "$METHOD" ]; then 206 | # Autodetect install method 207 | if nvm_has "git"; then 208 | install_nvm_from_git 209 | elif nvm_has "nvm_download"; then 210 | install_nvm_as_script 211 | else 212 | echo >&2 "You need git, curl, or wget to install nvm" 213 | exit 1 214 | fi 215 | elif [ "~$METHOD" = "~git" ]; then 216 | if ! nvm_has "git"; then 217 | echo >&2 "You need git to install nvm" 218 | exit 1 219 | fi 220 | install_nvm_from_git 221 | elif [ "~$METHOD" = "~script" ]; then 222 | if ! nvm_has "nvm_download"; then 223 | echo >&2 "You need curl or wget to install nvm" 224 | exit 1 225 | fi 226 | install_nvm_as_script 227 | fi 228 | 229 | echo 230 | 231 | local NVM_PROFILE 232 | NVM_PROFILE=$(nvm_detect_profile) 233 | 234 | SOURCE_STR="\nexport NVM_DIR=\"$NVM_DIR\"\n[ -s \"\$NVM_DIR/nvm.sh\" ] && . \"\$NVM_DIR/nvm.sh\" # This loads nvm" 235 | 236 | if [ -z "$NVM_PROFILE" ] ; then 237 | echo "=> Profile not found. Tried $NVM_PROFILE (as defined in \$PROFILE), ~/.bashrc, ~/.bash_profile, ~/.zshrc, and ~/.profile." 238 | echo "=> Create one of them and run this script again" 239 | echo "=> Create it (touch $NVM_PROFILE) and run this script again" 240 | echo " OR" 241 | echo "=> Append the following lines to the correct file yourself:" 242 | printf "$SOURCE_STR" 243 | echo 244 | else 245 | if ! grep -qc 'nvm.sh' "$NVM_PROFILE"; then 246 | echo "=> Appending source string to $NVM_PROFILE" 247 | printf "$SOURCE_STR\n" >> "$NVM_PROFILE" 248 | else 249 | echo "=> Source string already in $NVM_PROFILE" 250 | fi 251 | fi 252 | 253 | nvm_check_global_modules 254 | 255 | . $NVM_DIR/nvm.sh 256 | echo "=> You can now start using nvm" 257 | nvm_reset 258 | } 259 | 260 | # 261 | # Unsets the various functions defined 262 | # during the execution of the install script 263 | # 264 | nvm_reset() { 265 | unset -f nvm_reset nvm_has nvm_latest_version \ 266 | nvm_source nvm_download install_nvm_as_script install_nvm_from_git \ 267 | nvm_detect_profile nvm_check_global_modules nvm_do_install 268 | } 269 | 270 | [ "_$NVM_ENV" = "_testing" ] || nvm_do_install 271 | 272 | } # this ensures the entire script is downloaded # 273 | -------------------------------------------------------------------------------- /nvm-exec: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DIR="$(command cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 4 | 5 | source "$DIR/nvm.sh" 6 | 7 | if [ -n "$NODE_VERSION" ]; then 8 | nvm use $NODE_VERSION > /dev/null || (echo "NODE_VERSION not set" >&2 && exit 127) 9 | else 10 | nvm use > /dev/null || (echo "No .nvmrc file found" >&2 && exit 127) 11 | fi 12 | 13 | exec $@ 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nvm", 3 | "version": "0.26.1", 4 | "description": "Node Version Manager - Simple bash script to manage multiple active node.js versions", 5 | "directories": { 6 | "test": "test" 7 | }, 8 | "scripts": { 9 | "test": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make test-$shell", 10 | "test/fast": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=fast test-$shell", 11 | "test/slow": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=slow test-$shell", 12 | "test/install_script": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=install_script test-$shell", 13 | "test/installation": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=installation test-$shell", 14 | "test/sourcing": "shell=$(basename -- $(ps -o comm= $(ps -o ppid= -p $PPID)) | sed 's/^-//'); make TEST_SUITE=sourcing test-$shell" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git://github.com/creationix/nvm.git" 19 | }, 20 | "keywords": [ 21 | "nvm", 22 | "node", 23 | "version", 24 | "manager" 25 | ], 26 | "author": "Tim Caswell ", 27 | "license": "MIT", 28 | "bugs": { 29 | "url": "https://github.com/creationix/nvm/issues" 30 | }, 31 | "homepage": "https://github.com/creationix/nvm", 32 | "devDependencies": { 33 | "replace": "^0.3.0", 34 | "semver": "^5.0.1", 35 | "urchin": "^0.0.5" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /test/fast/Aliases/Running "nvm alias " again should change the target: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | 5 | die () { echo $@ ; exit 1; } 6 | 7 | if [ -n "$ZSH_VERSION" ]; then 8 | # set clobber option in order to test that this does not produce any 9 | # incompatibilities 10 | setopt noclobber 11 | fi 12 | 13 | nvm alias test-stable-1 0.0.2 14 | 15 | nvm alias test-stable-1 | \grep -e "test-stable-1 -> 0.0.2 (-> v0.0.2)" \ 16 | || die "nvm alias test-stable-1 0.0.2 did not set test-stable-1 to 0.0.2" 17 | 18 | nvm alias test-stable-1 0.0.1 19 | 20 | nvm alias test-stable-1 | \grep -e "test-stable-1 -> 0.0.1 (-> v0.0.1)" \ 21 | || die "nvm alias test-stable-1 0.0.1 did not set test-stable-1 to 0.0.1" 22 | -------------------------------------------------------------------------------- /test/fast/Aliases/Running "nvm alias " should list but one alias.: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | [ $(nvm alias test-stable-1 | wc -l) = '2' ] 5 | -------------------------------------------------------------------------------- /test/fast/Aliases/Running "nvm alias" lists implicit aliases when they do not exist: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | 5 | die () { echo $@ ; exit 1; } 6 | 7 | NVM_ALIAS_OUTPUT=$(nvm alias) 8 | 9 | EXPECTED_STABLE="$(nvm_print_implicit_alias local stable)" 10 | STABLE_VERSION="$(nvm_version "$EXPECTED_STABLE")" 11 | echo "$NVM_ALIAS_OUTPUT" | \grep -e "^stable -> $EXPECTED_STABLE (-> $STABLE_VERSION) (default)$" \ 12 | || die "nvm alias did not contain the default local stable node version" 13 | 14 | echo "$NVM_ALIAS_OUTPUT" | \grep -e "^node -> stable (-> $STABLE_VERSION) (default)$" \ 15 | || die "nvm alias did not contain the default local stable node version under 'node'" 16 | 17 | EXPECTED_UNSTABLE="$(nvm_print_implicit_alias local unstable)" 18 | UNSTABLE_VERSION="$(nvm_version "$EXPECTED_UNSTABLE")" 19 | echo "$NVM_ALIAS_OUTPUT" | \grep -e "^unstable -> $EXPECTED_UNSTABLE (-> $UNSTABLE_VERSION) (default)$" \ 20 | || die "nvm alias did not contain the default local unstable node version" 21 | 22 | EXPECTED_IOJS="$(nvm_print_implicit_alias local iojs)" 23 | IOJS_VERSION="$(nvm_version "$EXPECTED_IOJS")" 24 | echo "$NVM_ALIAS_OUTPUT" | \grep -e "^iojs -> $EXPECTED_IOJS (-> $IOJS_VERSION) (default)$" \ 25 | || die "nvm alias did not contain the default local iojs version" 26 | 27 | -------------------------------------------------------------------------------- /test/fast/Aliases/Running "nvm alias" lists manual aliases instead of implicit aliases when present: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | 5 | die () { echo $@ ; cleanup ; exit 1; } 6 | cleanup () { 7 | rm -rf ../../../alias/stable 8 | rm -rf ../../../alias/unstable 9 | rm -rf ../../../alias/node 10 | rm -rf ../../../alias/iojs 11 | rm -rf ../../../v0.8.1 12 | rm -rf ../../../v0.9.1 13 | rm -rf ../../../versions/io.js/v0.2.1 14 | } 15 | 16 | mkdir ../../../v0.8.1 17 | mkdir ../../../v0.9.1 18 | mkdir -p ../../../versions/io.js/v0.2.1 19 | 20 | EXPECTED_STABLE="$(nvm_print_implicit_alias local stable)" 21 | STABLE_VERSION="$(nvm_version "$EXPECTED_STABLE")" 22 | 23 | EXPECTED_UNSTABLE="$(nvm_print_implicit_alias local unstable)" 24 | UNSTABLE_VERSION="$(nvm_version "$EXPECTED_UNSTABLE")" 25 | 26 | [ "_$STABLE_VERSION" != "_$UNSTABLE_VERSION" ] \ 27 | || die "stable and unstable versions are the same!" 28 | 29 | nvm alias stable "$EXPECTED_UNSTABLE" 30 | nvm alias unstable "$EXPECTED_STABLE" 31 | nvm alias node stable 32 | nvm alias iojs unstable 33 | 34 | NVM_ALIAS_OUTPUT=$(nvm alias) 35 | 36 | echo "$NVM_ALIAS_OUTPUT" | command grep -e "^stable -> $EXPECTED_UNSTABLE (-> $UNSTABLE_VERSION)$" \ 37 | || die "nvm alias did not contain the overridden 'stable' alias" 38 | 39 | echo "$NVM_ALIAS_OUTPUT" | command grep -e "^unstable -> $EXPECTED_STABLE (-> $STABLE_VERSION)$" \ 40 | || die "nvm alias did not contain the overridden 'unstable' alias" 41 | 42 | echo "$NVM_ALIAS_OUTPUT" | command grep -e "^node -> stable (-> $UNSTABLE_VERSION)$" \ 43 | || die "nvm alias did not contain the overridden 'node' alias" 44 | 45 | echo "$NVM_ALIAS_OUTPUT" | command grep -e "^iojs -> unstable (-> $STABLE_VERSION)$" \ 46 | || die "nvm alias did not contain the overridden 'iojs' alias" 47 | 48 | cleanup 49 | 50 | -------------------------------------------------------------------------------- /test/fast/Aliases/Running "nvm alias" should list all aliases.: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | 5 | die () { echo $@ ; exit 1; } 6 | 7 | NVM_ALIAS_OUTPUT=$(nvm alias) 8 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-1 -> 0.0.1 (-> v0.0.1)$' \ 9 | || die "did not find test-stable-1 alias" 10 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-2 -> 0.0.2 (-> v0.0.2)$' \ 11 | || die "did not find test-stable-2 alias" 12 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-3 -> 0.0.3 (-> v0.0.3)$' \ 13 | || die "did not find test-stable-3 alias" 14 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-4 -> 0.0.4 (-> v0.0.4)$' \ 15 | || die "did not find test-stable-4 alias" 16 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-5 -> 0.0.5 (-> v0.0.5)$' \ 17 | || die "did not find test-stable-5 alias" 18 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-6 -> 0.0.6 (-> v0.0.6)$' \ 19 | || die "did not find test-stable-6 alias" 20 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-7 -> 0.0.7 (-> v0.0.7)$' \ 21 | || die "did not find test-stable-7 alias" 22 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-8 -> 0.0.8 (-> v0.0.8)$' \ 23 | || die "did not find test-stable-8 alias" 24 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-9 -> 0.0.9 (-> v0.0.9)$' \ 25 | || die "did not find test-stable-9 alias" 26 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-stable-10 -> 0.0.10 (-> v0.0.10)$' \ 27 | || die "did not find test-stable-10 alias" 28 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-1 -> 0.1.1 (-> v0.1.1)$' \ 29 | || die "did not find test-unstable-1 alias" 30 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-2 -> 0.1.2 (-> v0.1.2)$' \ 31 | || die "did not find test-unstable-2 alias" 32 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-3 -> 0.1.3 (-> v0.1.3)$' \ 33 | || die "did not find test-unstable-3 alias" 34 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-4 -> 0.1.4 (-> v0.1.4)$' \ 35 | || die "did not find test-unstable-4 alias" 36 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-5 -> 0.1.5 (-> v0.1.5)$' \ 37 | || die "did not find test-unstable-5 alias" 38 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-6 -> 0.1.6 (-> v0.1.6)$' \ 39 | || die "did not find test-unstable-6 alias" 40 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-7 -> 0.1.7 (-> v0.1.7)$' \ 41 | || die "did not find test-unstable-7 alias" 42 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-8 -> 0.1.8 (-> v0.1.8)$' \ 43 | || die "did not find test-unstable-8 alias" 44 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-9 -> 0.1.9 (-> v0.1.9)$' \ 45 | || die "did not find test-unstable-9 alias" 46 | echo "$NVM_ALIAS_OUTPUT" | \grep -e '^test-unstable-10 -> 0.1.10 (-> v0.1.10)$' \ 47 | || die "did not find test-unstable-10 alias" 48 | 49 | -------------------------------------------------------------------------------- /test/fast/Aliases/circular/nvm_resolve_alias: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../../nvm.sh 6 | 7 | ALIAS="$(nvm_resolve_alias loopback)" 8 | [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_alias loopback was not ∞; got $ALIAS" 9 | OUTPUT="$(nvm alias loopback)" 10 | EXPECTED_OUTPUT="loopback -> loopback (-> ∞)" 11 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias loopback was not $EXPECTED_OUTPUT; got $OUTPUT" 12 | 13 | ALIAS="$(nvm_resolve_alias one)" 14 | [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_alias one was not ∞; got $ALIAS" 15 | OUTPUT="$(nvm alias one)" 16 | EXPECTED_OUTPUT="one -> two (-> ∞)" 17 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias one was not $EXPECTED_OUTPUT; got $OUTPUT" 18 | 19 | ALIAS="$(nvm_resolve_alias two)" 20 | [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_alias two was not ∞; got $ALIAS" 21 | OUTPUT="$(nvm alias two)" 22 | EXPECTED_OUTPUT="two -> three (-> ∞)" 23 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias two was not $EXPECTED_OUTPUT; got $OUTPUT" 24 | 25 | ALIAS="$(nvm_resolve_alias three)" 26 | [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_alias three was not ∞; got $ALIAS" 27 | OUTPUT="$(nvm alias three)" 28 | EXPECTED_OUTPUT="three -> one (-> ∞)" 29 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias three was not $EXPECTED_OUTPUT; got $OUTPUT" 30 | 31 | ALIAS="$(nvm_resolve_alias four)" 32 | [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_alias four was not ∞; got $ALIAS" 33 | OUTPUT="$(nvm alias four)" 34 | EXPECTED_OUTPUT="four -> two (-> ∞)" 35 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias four was not $EXPECTED_OUTPUT; got $OUTPUT" 36 | 37 | -------------------------------------------------------------------------------- /test/fast/Aliases/circular/nvm_resolve_local_alias: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../../nvm.sh 6 | 7 | ALIAS="$(nvm_resolve_local_alias loopback)" 8 | [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_local_alias loopback was not ∞; got $ALIAS" 9 | OUTPUT="$(nvm alias loopback)" 10 | EXPECTED_OUTPUT="loopback -> loopback (-> ∞)" 11 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias loopback was not $EXPECTED_OUTPUT; got $OUTPUT" 12 | 13 | ALIAS="$(nvm_resolve_local_alias one)" 14 | [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_local_alias one was not ∞; got $ALIAS" 15 | OUTPUT="$(nvm alias one)" 16 | EXPECTED_OUTPUT="one -> two (-> ∞)" 17 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias one was not $EXPECTED_OUTPUT; got $OUTPUT" 18 | 19 | ALIAS="$(nvm_resolve_local_alias two)" 20 | [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_local_alias two was not ∞; got $ALIAS" 21 | OUTPUT="$(nvm alias two)" 22 | EXPECTED_OUTPUT="two -> three (-> ∞)" 23 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias two was not $EXPECTED_OUTPUT; got $OUTPUT" 24 | 25 | ALIAS="$(nvm_resolve_local_alias three)" 26 | [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_local_alias three was not ∞; got $ALIAS" 27 | OUTPUT="$(nvm alias three)" 28 | EXPECTED_OUTPUT="three -> one (-> ∞)" 29 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias three was not $EXPECTED_OUTPUT; got $OUTPUT" 30 | 31 | ALIAS="$(nvm_resolve_local_alias four)" 32 | [ "_$ALIAS" = "_∞" ] || die "nvm_resolve_local_alias four was not ∞; got $ALIAS" 33 | OUTPUT="$(nvm alias four)" 34 | EXPECTED_OUTPUT="four -> two (-> ∞)" 35 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm alias four was not $EXPECTED_OUTPUT; got $OUTPUT" 36 | 37 | -------------------------------------------------------------------------------- /test/fast/Aliases/circular/setup: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo loopback > ../../../../alias/loopback 4 | 5 | echo two > ../../../../alias/one 6 | echo three > ../../../../alias/two 7 | echo one > ../../../../alias/three 8 | 9 | echo two > ../../../../alias/four 10 | 11 | -------------------------------------------------------------------------------- /test/fast/Aliases/circular/teardown: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -f ../../../../alias/loopback 4 | 5 | rm -f ../../../../alias/one 6 | rm -f ../../../../alias/two 7 | rm -f ../../../../alias/three 8 | 9 | rm -f ../../../../alias/four 10 | 11 | -------------------------------------------------------------------------------- /test/fast/Aliases/nvm_ensure_default_set: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | nvm alias default 0.1 >/dev/null || die "'nvm alias default 0.1' failed" 8 | 9 | nvm_ensure_default_set 0.3 || die "'nvm_ensure_default_set' with an existing default alias exits 0" 10 | 11 | nvm unalias default || die "'nvm unalias default' failed" 12 | 13 | OUTPUT="$(nvm_ensure_default_set 0.2)" 14 | EXPECTED_OUTPUT="Creating default alias: default -> 0.2 (-> iojs-v0.2.10)" 15 | EXIT_CODE="$?" 16 | 17 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_ensure_default_set 0.2' did not output '$EXPECTED_OUTPUT', got '$OUTPUT'" 18 | [ "_$EXIT_CODE" = "_0" ] || die "'nvm_ensure_default_set 0.2' did not exit with 0, got $EXIT_CODE" 19 | -------------------------------------------------------------------------------- /test/fast/Aliases/nvm_resolve_alias: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | EXIT_CODE=$(nvm_resolve_alias ; echo $?) 8 | [ $EXIT_CODE = "1" ] || die "nvm_resolve_alias without an argument did not return 1; got $EXIT_CODE" 9 | 10 | for i in $(seq 1 10) 11 | do 12 | STABLE_ALIAS="$(nvm_resolve_alias test-stable-$i)" 13 | [ "_$STABLE_ALIAS" = "_v0.0.$i" ] \ 14 | || die "'nvm_resolve_alias test-stable-$i' was not v0.0.$i; got $STABLE_ALIAS" 15 | UNSTABLE_ALIAS="$(nvm_resolve_alias test-unstable-$i)" 16 | [ "_$UNSTABLE_ALIAS" = "_v0.1.$i" ] \ 17 | || die "'nvm_resolve_alias test-unstable-$i' was not v0.1.$i; got $UNSTABLE_ALIAS" 18 | done 19 | 20 | EXIT_CODE=$(nvm_resolve_alias nonexistent ; echo $?) 21 | [ $EXIT_CODE = "2" ] || die "'nvm_resolve_alias nonexistent' did not return 2; got $EXIT_CODE" 22 | 23 | STABLE="$(nvm_resolve_alias stable)" 24 | [ "_$STABLE" = "_v0.0" ] || die "'nvm_resolve_alias stable' was not v0.0; got $STABLE" 25 | 26 | NODE="$(nvm_resolve_alias node)" 27 | [ "_$NODE" = "_stable" ] || die "'nvm_resolve_alias node' was not stable; got $NODE" 28 | 29 | UNSTABLE="$(nvm_resolve_alias unstable)" 30 | [ "_$UNSTABLE" = "_v0.1" ] || die "'nvm_resolve_alias unstable' was not v0.1; got $UNSTABLE" 31 | 32 | IOJS="$(nvm_resolve_alias iojs)" 33 | [ "_$IOJS" = "_iojs-v0.2" ] || die "'nvm_resolve_alias iojs' was not iojs-v0.2; got $IOJS" 34 | 35 | ALINODE="$(nvm_resolve_alias alinode)" 36 | [ "_$ALINODE" = "_alinode-v0.3" ] || die "'nvm_resolve_alias alinode' was not alinode-v0.3; got $ALINODE" 37 | -------------------------------------------------------------------------------- /test/fast/Aliases/nvm_resolve_local_alias: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | EXIT_CODE=$(nvm_resolve_local_alias ; echo $?) 8 | [ "_$EXIT_CODE" = "_1" ] || die "nvm_resolve_local_alias without an argument did not return 1; got $EXIT_CODE" 9 | 10 | for i in $(seq 1 10) 11 | do 12 | STABLE_ALIAS="$(nvm_resolve_local_alias test-stable-$i)" 13 | [ "_$STABLE_ALIAS" = "_v0.0.$i" ] \ 14 | || die "'nvm_resolve_local_alias test-stable-$i' was not v0.0.$i; got $STABLE_ALIAS" 15 | UNSTABLE_ALIAS="$(nvm_resolve_local_alias test-unstable-$i)" 16 | [ "_$UNSTABLE_ALIAS" = "_v0.1.$i" ] \ 17 | || die "'nvm_resolve_local_alias test-unstable-$i' was not v0.1.$i; got $UNSTABLE_ALIAS" 18 | done 19 | 20 | OUTPUT="$(nvm_resolve_local_alias nonexistent)" 21 | EXIT_CODE=$(nvm_resolve_local_alias nonexistent > /dev/null 2>&1 ; echo $?) 22 | [ "_$EXIT_CODE" = "_2" ] || die "'nvm_resolve_local_alias nonexistent' did not return 2; got $EXIT_CODE" 23 | [ "_$OUTPUT" = "_" ] || die "'nvm_resolve_local_alias nonexistent' did not have empty output; got $OUTPUT" 24 | 25 | STABLE="$(nvm_resolve_local_alias stable)" 26 | [ "_$STABLE" = "_v0.0.10" ] || die "'nvm_resolve_local_alias stable' was not v0.0.10; got $STABLE" 27 | 28 | NODE="$(nvm_resolve_local_alias node)" 29 | [ "_$NODE" = "_v0.0.10" ] || die "'nvm_resolve_local_alias node' was not v0.0.10; got $NODE" 30 | 31 | UNSTABLE="$(nvm_resolve_local_alias unstable)" 32 | [ "_$UNSTABLE" = "_v0.1.10" ] || die "'nvm_resolve_local_alias unstable' was not v0.1.10; got $UNSTABLE" 33 | 34 | IOJS="$(nvm_resolve_local_alias iojs)" 35 | [ "_$IOJS" = "_iojs-v0.2.10" ] || die "'nvm_resolve_local_alias iojs' was not iojs-v0.2.10; got $IOJS" 36 | -------------------------------------------------------------------------------- /test/fast/Aliases/setup: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | for i in $(seq 1 10) 4 | do 5 | echo 0.0.$i > ../../../alias/test-stable-$i 6 | mkdir -p ../../../v0.0.$i 7 | echo 0.1.$i > ../../../alias/test-unstable-$i 8 | mkdir -p ../../../v0.1.$i 9 | echo 0.2.$i > ../../../alias/test-iojs-$i 10 | mkdir -p ../../../versions/io.js/v0.2.$i 11 | echo 0.3.$i > ../../../alias/test-alinode-$i 12 | mkdir -p ../../../versions/alinode/v0.3.$i 13 | done 14 | -------------------------------------------------------------------------------- /test/fast/Aliases/teardown: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | for i in $(seq 1 10) 4 | do 5 | rm -f "../../../alias/test-stable-$i" 6 | rm -rf "../../../v0.0.$i" 7 | rm -f "../../../alias/test-unstable-$i" 8 | rm -rf "../../../v0.1.$i" 9 | rm -rf "../../../alias/test-iojs-$i" 10 | rm -rf "../../../versions/io.js/v0.2.$i" 11 | done 12 | 13 | rm -f "../../../alias/stable" 14 | rm -f "../../../alias/unstable" 15 | rm -f "../../../alias/node" 16 | rm -f "../../../alias/iojs" 17 | rm -f "../../../alias/default" 18 | -------------------------------------------------------------------------------- /test/fast/Listing paths/Running "nvm which 0.0.2" should display only version 0.0.2.: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | mkdir -p ../../../v0.0.2 4 | mkdir -p ../../../v0.0.20 5 | mkdir -p ../../../versions/node/v0.12.0 6 | 7 | . ../../../nvm.sh 8 | 9 | die () { echo $@ ; exit 1; } 10 | 11 | # The result should contain only the appropriate version numbers. 12 | 13 | nvm which 0.0.2 || die "v0.0.2 not found" 14 | NVM_BIN="$(nvm which 0.0.2)" 15 | [ "_$NVM_BIN" = "_$(nvm_version_path v0.0.2)/bin/node" ] \ 16 | || die "'nvm which 0.0.2' did not contain the correct path: got '$NVM_BIN'" 17 | 18 | nvm which 0.0.20 || die "v0.0.20 not found" 19 | NVM_BIN="$(nvm which 0.0.20)" 20 | [ "_$NVM_BIN" = "_$(nvm_version_path v0.0.20)/bin/node" ] \ 21 | || die "'nvm which 0.20.0' did not contain the correct path: got '$NVM_BIN'" 22 | 23 | nvm which 0.12.0 || die "v0.0.20 not found" 24 | NVM_BIN="$(nvm which 0.12.0)" 25 | [ "_$NVM_BIN" = "_$(nvm_version_path v0.12.0)/bin/node" ] \ 26 | || die "'nvm which 0.12.0' did not contain the correct path: got '$NVM_BIN'" 27 | 28 | -------------------------------------------------------------------------------- /test/fast/Listing paths/Running "nvm which foo" should return a nonzero exit code when not found: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | 5 | nvm which nonexistent_version 6 | [ "_$?" = "_1" ] 7 | -------------------------------------------------------------------------------- /test/fast/Listing paths/teardown: -------------------------------------------------------------------------------- 1 | rmdir ../../../v0.0.2 >/dev/null 2>&1 2 | rmdir ../../../v0.0.20 >/dev/null 2>&1 3 | rmdir ../../../v0.12.0 >/dev/null 2>&1 4 | -------------------------------------------------------------------------------- /test/fast/Listing versions/Running "nvm ls 0.0.2" should display only version 0.0.2.: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | mkdir ../../../v0.0.2 4 | mkdir ../../../v0.0.20 5 | 6 | . ../../../nvm.sh 7 | 8 | die () { echo $@ ; exit 1; } 9 | 10 | # The result should contain only the appropriate version numbers. 11 | 12 | nvm ls 0.0.2 | grep 'v0.0.2' > /dev/null 13 | if [ $? -eq 0 ]; then 14 | echo '"nvm ls 0.0.2" contained v0.0.2' 15 | fi 16 | 17 | nvm ls 0.0.2 | grep 'v0.0.20' > /dev/null 18 | if [ $? -eq 0 ]; then 19 | die '"nvm ls 0.0.2" contained v0.0.20' 20 | fi 21 | 22 | -------------------------------------------------------------------------------- /test/fast/Listing versions/Running "nvm ls 0.2" should display only 0.2.x versions.: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | mkdir ../../../v0.1.3 4 | mkdir ../../../v0.2.3 5 | mkdir ../../../v0.20.3 6 | 7 | . ../../../nvm.sh 8 | 9 | die () { echo $@ ; exit 1; } 10 | 11 | # The result should contain only the appropriate version numbers. 12 | 13 | nvm ls 0.1 | grep 'v0.2.3' > /dev/null 14 | if [ $? -eq 0 ]; then 15 | echo '"nvm ls 0.1" contained v0.2.3' 16 | fi 17 | 18 | nvm ls 0.1 | grep 'v0.20.3' > /dev/null 19 | if [ $? -eq 0 ]; then 20 | die '"nvm ls 0.1" contained v0.20.3' 21 | fi 22 | 23 | nvm ls 0.1 | grep 'v0.1.3' > /dev/null 24 | if [ $? -ne 0 ]; then 25 | die '"nvm ls 0.1" did not contain v0.1.3' 26 | fi 27 | 28 | nvm ls 0.2 | grep 'v0.2.3' > /dev/null 29 | if [ $? -ne 0 ]; then 30 | die '"nvm ls 0.2" did not contain v0.2.3' 31 | fi 32 | 33 | nvm ls 0.2 | grep 'v0.20.3' > /dev/null 34 | if [ $? -eq 0 ]; then 35 | die '"nvm ls 0.2" contained v0.20.3' 36 | fi 37 | 38 | nvm ls 0.2 | grep 'v0.2.3' > /dev/null 39 | if [ $? -ne 0 ]; then 40 | die '"nvm ls 0.2" did not contain v0.2.3' 41 | fi 42 | -------------------------------------------------------------------------------- /test/fast/Listing versions/Running "nvm ls foo" should return a nonzero exit code when not found: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | 5 | nvm ls nonexistent_version 6 | [ "$?" = "3" ] 7 | 8 | -------------------------------------------------------------------------------- /test/fast/Listing versions/Running "nvm ls io" should return NA: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | 5 | nvm ls io 6 | [ "$?" = "3" ] 7 | 8 | -------------------------------------------------------------------------------- /test/fast/Listing versions/Running "nvm ls node_" should return a nonzero exit code when not found: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | 5 | nvm ls node_ 6 | [ "$?" = "3" ] 7 | 8 | -------------------------------------------------------------------------------- /test/fast/Listing versions/Running "nvm ls stable" and "nvm ls unstable" should return the appropriate implicit alias: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | 5 | die () { echo $@ ; exit 1; } 6 | 7 | mkdir ../../../v0.2.3 8 | mkdir ../../../v0.3.3 9 | 10 | EXPECTED_STABLE="$(nvm_print_implicit_alias local stable)" 11 | STABLE_VERSION="$(nvm_version "$EXPECTED_STABLE")" 12 | 13 | EXPECTED_UNSTABLE="$(nvm_print_implicit_alias local unstable)" 14 | UNSTABLE_VERSION="$(nvm_version "$EXPECTED_UNSTABLE")" 15 | 16 | nvm ls stable | \grep "$STABLE_VERSION" >/dev/null \ 17 | || die "expected 'nvm ls stable' to give $STABLE_VERSION, got $(nvm ls stable)" 18 | 19 | nvm ls unstable | \grep "$UNSTABLE_VERSION" >/dev/null \ 20 | || die "expected 'nvm ls unstable' to give $UNSTABLE_VERSION, got $(nvm ls unstable)" 21 | 22 | mkdir ../../../v0.1.2 23 | nvm alias stable 0.1 24 | 25 | nvm ls stable | \grep -v "$STABLE_VERSION" >/dev/null \ 26 | || die "'nvm ls stable' contained $STABLE_VERSION instead of v0.1.2" 27 | nvm ls stable | \grep v0.1.2 >/dev/null \ 28 | || die "'nvm ls stable' did not contain v0.1.2" 29 | 30 | -------------------------------------------------------------------------------- /test/fast/Listing versions/Running "nvm ls system" should include "system" when appropriate: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | mkdir -p ../../../v0.0.1 8 | mkdir -p ../../../v0.0.3 9 | mkdir -p ../../../v0.0.9 10 | mkdir -p ../../../v0.3.1 11 | mkdir -p ../../../v0.3.3 12 | mkdir -p ../../../v0.3.9 13 | 14 | nvm_has_system_node() { return 0; } 15 | nvm ls system | grep system 2>&1 > /dev/null 16 | [ $? -eq 0 ] || die '"nvm ls system" did not contain "system" when system node is present' 17 | 18 | nvm_has_system_node() { return 1; } 19 | nvm ls system | grep system 2>&1 > /dev/null 20 | [ $? -ne 0 ] || die '"nvm ls system" contained "system" when system node is not present' 21 | 22 | -------------------------------------------------------------------------------- /test/fast/Listing versions/Running "nvm ls" should display all installed versions.: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | 5 | mkdir ../../../v0.0.1 6 | mkdir ../../../v0.0.3 7 | mkdir ../../../v0.0.9 8 | mkdir ../../../v0.3.1 9 | mkdir ../../../v0.3.3 10 | mkdir ../../../v0.3.9 11 | mkdir -p ../../../versions/node/v0.12.87 12 | mkdir -p ../../../versions/node/v0.12.9 13 | mkdir -p ../../../versions/io.js/v0.1.2 14 | mkdir -p ../../../versions/io.js/v0.10.2 15 | 16 | # The result should contain the version numbers. 17 | nvm ls | grep v0.0.1 >/dev/null && 18 | nvm ls | grep v0.0.3 >/dev/null && 19 | nvm ls | grep v0.0.9 >/dev/null && 20 | nvm ls | grep v0.3.1 >/dev/null && 21 | nvm ls | grep v0.3.3 >/dev/null && 22 | nvm ls | grep v0.3.9 >/dev/null && 23 | nvm ls | grep v0.12.87 >/dev/null && 24 | nvm ls | grep iojs-v0.1.2 >/dev/null 25 | -------------------------------------------------------------------------------- /test/fast/Listing versions/Running "nvm ls" should filter out ".nvm": -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | mkdir ../../../v0.1.3 4 | mkdir ../../../v0.2.3 5 | 6 | . ../../../nvm.sh 7 | 8 | [ -z `nvm ls | grep '^ *\.'` ] 9 | # The result should contain only the appropriate version numbers. 10 | -------------------------------------------------------------------------------- /test/fast/Listing versions/Running "nvm ls" should filter out "versions": -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | mkdir ../../../v0.1.3 4 | mkdir ../../../v0.2.3 5 | mkdir -p ../../../versions/node 6 | 7 | . ../../../nvm.sh 8 | 9 | [ -z "$(nvm ls | \grep 'versions')" ] 10 | # The result should contain only the appropriate version numbers. 11 | 12 | -------------------------------------------------------------------------------- /test/fast/Listing versions/Running "nvm ls" should include "system" when appropriate: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | mkdir -p ../../../v0.0.1 8 | mkdir -p ../../../v0.0.3 9 | mkdir -p ../../../v0.0.9 10 | mkdir -p ../../../v0.3.1 11 | mkdir -p ../../../v0.3.3 12 | mkdir -p ../../../v0.3.9 13 | 14 | nvm_has_system_node() { return 0; } 15 | nvm ls | grep system 2>&1 > /dev/null 16 | [ $? -eq 0 ] || die '"nvm ls" did not contain "system" when system node is present' 17 | 18 | nvm_has_system_node() { return 1; } 19 | nvm ls | grep system 2>&1 > /dev/null 20 | [ $? -ne 0 ] || die '"nvm ls" contained "system" when system node is not present' 21 | 22 | -------------------------------------------------------------------------------- /test/fast/Listing versions/Running "nvm ls" should list versions in the "versions" directory: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | mkdir -p ../../../versions/node/v0.12.1 6 | mkdir ../../../v0.1.3 7 | 8 | . ../../../nvm.sh 9 | 10 | nvm ls 0.12 | grep v0.12.1 || die '"nvm ls" did not list a version in the versions/ directory' 11 | nvm ls 0.1 | grep v0.1.3 || die '"nvm ls" did not list a version not in the versions/ directory' 12 | 13 | -------------------------------------------------------------------------------- /test/fast/Listing versions/Running "nvm ls" with node-like versioning vx.x.x should only list a matched version: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | mkdir ../../../v0.1.2 4 | 5 | . ../../../nvm.sh 6 | 7 | nvm ls v0.1 | grep v0.1.2 && 8 | nvm ls v0.1.2 | grep v0.1.2 && 9 | nvm ls v0.1. | grep v0.1.2 && 10 | nvm ls v0.1.1 | grep N/A 11 | 12 | -------------------------------------------------------------------------------- /test/fast/Listing versions/teardown: -------------------------------------------------------------------------------- 1 | rmdir ../../../v0.0.1 >/dev/null 2>&1 2 | rmdir ../../../v0.0.2 >/dev/null 2>&1 3 | rmdir ../../../v0.0.3 >/dev/null 2>&1 4 | rmdir ../../../v0.0.9 >/dev/null 2>&1 5 | rmdir ../../../v0.0.20 >/dev/null 2>&1 6 | rmdir ../../../v0.1.2 >/dev/null 2>&1 7 | rmdir ../../../v0.1.3 >/dev/null 2>&1 8 | rmdir ../../../v0.2.3 >/dev/null 2>&1 9 | rmdir ../../../v0.3.1 >/dev/null 2>&1 10 | rmdir ../../../v0.3.3 >/dev/null 2>&1 11 | rmdir ../../../v0.3.9 >/dev/null 2>&1 12 | rmdir ../../../v0.20.3 >/dev/null 2>&1 13 | rmdir ../../../versions >/dev/null 2>&1 14 | unalias nvm_has_system_node >/dev/null 2>&1 15 | rm -f ../../../alias/stable >/dev/null 2>&1 16 | rm -f ../../../alias/unstable >/dev/null 2>&1 17 | 18 | -------------------------------------------------------------------------------- /test/fast/Running "nvm alias" should create a file in the alias directory.: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../nvm.sh 4 | nvm alias test v0.1.2 5 | [ "$(cat ../../alias/test)" = "v0.1.2" ] 6 | -------------------------------------------------------------------------------- /test/fast/Running "nvm current" should display current nvm environment.: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../nvm.sh 6 | 7 | nvm deactivate 2>&1 8 | 9 | [ "$(nvm current)" = "system" ] || [ "$(nvm current)" = "none" ] || die '"nvm current" did not report "system" or "none" when deactivated' 10 | 11 | -------------------------------------------------------------------------------- /test/fast/Running "nvm deactivate" should unset the nvm environment variables.: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | mkdir -p ../../v0.2.3 4 | 5 | die () { echo $@ ; exit 1; } 6 | 7 | [ `expr $PATH : ".*v0.2.3/.*/bin"` = 0 ] || echo "WARNING: Unexpectedly found v0.2.3 already active" >&2 8 | 9 | . ../../nvm.sh 10 | nvm use v0.2.3 || die "Failed to activate v0.2.3" 11 | [ `expr "$PATH" : ".*v0.2.3/.*/bin"` != 0 ] || die "PATH not set up properly" 12 | [ `expr "$NODE_PATH" : ".*v0.2.3/.*/lib/node_modules"` = 0 ] || die "NODE_PATH should not contain (npm root -g)" 13 | # ^ note: NODE_PATH should not contain `npm root -g` since globals should not be requireable 14 | 15 | nvm deactivate || die "Failed to deactivate v0.2.3" 16 | [ `expr "$PATH" : ".*v0.2.3/.*/bin"` = 0 ] || die "PATH not cleaned properly" 17 | [ `expr "$NODE_PATH" : ".*v0.2.3/.*/lib/node_modules"` = 0 ] || die "NODE_PATH not cleaned properly" 18 | -------------------------------------------------------------------------------- /test/fast/Running "nvm install" with "--reinstall-packages-from" requires a valid version: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; cleanup ; exit 1; } 4 | cleanup () { 5 | rm -rf ../../v0.10.4 6 | } 7 | 8 | mkdir ../../v0.10.4 9 | 10 | . ../../nvm.sh 11 | 12 | nvm deactivate >/dev/null 2>&1 13 | 14 | INSTALL_ERROR_MSG="$(nvm install v0.10.5 --reinstall-packages-from=0.11 2>&1)" 15 | EXPECTED_ERROR_MSG="If --reinstall-packages-from is provided, it must point to an installed version of node." 16 | [ "~$INSTALL_ERROR_MSG" = "~$EXPECTED_ERROR_MSG" ] \ 17 | || die ""nvm install --reinstall-packages-from" should fail when given an uninstalled version: expected '$EXPECTED_ERROR_MSG', got '$INSTALL_ERROR_MSG'" 18 | 19 | INSTALL_EXIT_CODE="$(nvm install v0.10.5 --reinstall-packages-from=0.11 >/dev/null 2>&1; echo $?)" 20 | [ "~$INSTALL_EXIT_CODE" = "~5" ] \ 21 | || die ""nvm install --reinstall-packages-from" should exit with code 5 when given an uninstalled version, got $INSTALL_EXIT_CODE" 22 | 23 | INSTALL_ERROR_MSG="$(nvm install v0.10.5 --reinstall-packages-from=0.10.5 2>&1)" 24 | EXPECTED_ERROR_MSG="You can't reinstall global packages from the same version of node you're installing." 25 | [ "~$INSTALL_ERROR_MSG" = "~$EXPECTED_ERROR_MSG" ] \ 26 | || die ""nvm install --reinstall-packages-from" should fail when given the same version: expected '$EXPECTED_ERROR_MSG', got '$INSTALL_ERROR_MSG'" 27 | 28 | INSTALL_EXIT_CODE="$(nvm install v0.10.5 --reinstall-packages-from=0.10.5 >/dev/null 2>&1; echo $?)" 29 | [ "~$INSTALL_EXIT_CODE" = "~4" ] \ 30 | || die ""nvm install --reinstall-packages-from" should exit with code 4 when given the same version, got $INSTALL_EXIT_CODE" 31 | 32 | -------------------------------------------------------------------------------- /test/fast/Running "nvm install" with an invalid version fails nicely: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../nvm.sh 6 | [ "$(nvm install invalid.invalid 2>&1)" = "Version 'invalid.invalid' not found - try \`nvm ls-remote\` to browse available versions." ] || die "nvm installing an invalid version did not print a nice error message" 7 | 8 | -------------------------------------------------------------------------------- /test/fast/Running "nvm unalias" should remove the alias file.: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo v0.1.2 > ../../alias/test 4 | . ../../nvm.sh 5 | nvm unalias test 6 | ! [ -e ../../alias/test ] 7 | -------------------------------------------------------------------------------- /test/fast/Running "nvm uninstall" should remove the appropriate directory.: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | cd ../.. 4 | mkdir v0.0.1 5 | mkdir src/node-v0.0.1 6 | 7 | . ./nvm.sh 8 | nvm uninstall v0.0.1 9 | 10 | [ ! -d 'v0.0.1' ] && [ ! -d 'src/node-v0.0.1' ] 11 | -------------------------------------------------------------------------------- /test/fast/Running "nvm unload" should unset all function and variables.: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | fail () { echo $@ ; exit 1; } 4 | 5 | . ../../nvm.sh 6 | 7 | type nvm > /dev/null 2>&1 || fail "NVM not loaded" 8 | 9 | nvm unload 10 | 11 | type nvm > /dev/null 2>&1 && fail "NVM not unloaded" || exit 0 12 | 13 | -------------------------------------------------------------------------------- /test/fast/Running "nvm use foo" where "foo" is circular aborts: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; cleanup ; exit 1; } 4 | 5 | cleanup() { 6 | rm -rf ../../alias/foo 7 | } 8 | 9 | . ../../nvm.sh 10 | 11 | echo 'foo' > ../../alias/foo 12 | 13 | OUTPUT="$(nvm use foo 2>&1)" 14 | EXPECTED_OUTPUT='The alias "foo" leads to an infinite loop. Aborting.' 15 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \ 16 | || die "'nvm use foo' did not output '$EXPECTED_OUTPUT'; got '$OUTPUT'" 17 | 18 | EXIT_CODE="$(nvm use foo 2>/dev/null ; echo $?)" 19 | [ "_$EXIT_CODE" = "_8" ] || die "Expected exit code 8; got $EXIT_CODE" 20 | 21 | OUTPUT="$(nvm use --silent foo 2>&1)" 22 | EXPECTED_OUTPUT='' 23 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \ 24 | || die "'nvm use --silent foo' did not output '$EXPECTED_OUTPUT'; got '$OUTPUT'" 25 | 26 | EXIT_CODE="$(nvm use --silent foo 2>/dev/null ; echo $?)" 27 | [ "_$EXIT_CODE" = "_8" ] || die "Expected exit code 8 from 'nvm use --silent foo'; got $EXIT_CODE" 28 | 29 | cleanup; 30 | 31 | -------------------------------------------------------------------------------- /test/fast/Running "nvm use iojs" uses latest io.js version: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; cleanup ; exit 1; } 4 | 5 | cleanup() { 6 | rm -rf ../../alias/foo 7 | } 8 | 9 | . ../../nvm.sh 10 | 11 | echo 'foo' > ../../alias/foo 12 | 13 | OUTPUT="$(nvm use foo 2>&1)" 14 | EXPECTED_OUTPUT='The alias "foo" leads to an infinite loop. Aborting.' 15 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \ 16 | || die "'nvm use foo' did not output '$EXPECTED_OUTPUT'; got '$OUTPUT'" 17 | 18 | EXIT_CODE="$(nvm use foo 2>/dev/null ; echo $?)" 19 | [ "_$EXIT_CODE" = "_8" ] || die "Expected exit code 8; got $EXIT_CODE" 20 | 21 | OUTPUT="$(nvm use --silent foo 2>&1)" 22 | EXPECTED_OUTPUT='' 23 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \ 24 | || die "'nvm use --silent foo' did not output '$EXPECTED_OUTPUT'; got '$OUTPUT'" 25 | 26 | EXIT_CODE="$(nvm use --silent foo 2>/dev/null ; echo $?)" 27 | [ "_$EXIT_CODE" = "_8" ] || die "Expected exit code 8 from 'nvm use --silent foo'; got $EXIT_CODE" 28 | 29 | cleanup; 30 | 31 | -------------------------------------------------------------------------------- /test/fast/Running "nvm use system" should work as expected: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../nvm.sh 6 | 7 | nvm_has_system_node() { return 0; } 8 | nvm_print_npm_version() { return ' (npm v1.2.3)'; } 9 | EXPECTED_OUTPUT="Now using system version of node: $(node -v)$(nvm_print_npm_version)" 10 | [ "$(nvm use system 2>&1 | tail -n1)" = "$EXPECTED_OUTPUT" ] || die "Could not use system version of node" 11 | EXPECTED_OUTPUT="" 12 | [ "$(nvm use --silent system 2>&1 | tail -n1)" = "$EXPECTED_OUTPUT" ] || die "Could not use system version of node or --silent was not silent" 13 | 14 | nvm_has_system_node() { return 1; } 15 | nvm_print_npm_version() { return ''; } 16 | EXPECTED_OUTPUT="System version of node not found." 17 | [ "$(nvm use system 2>&1 | tail -n1)" = "$EXPECTED_OUTPUT" ] || die "Did not report error, system node not found" 18 | nvm use system 2>&1 > /dev/null || [ $? -eq 127 ] || die "Did not return error code, system node not found" 19 | EXPECTED_OUTPUT="" 20 | [ "$(nvm use --silent system 2>&1 | tail -n1)" = "$EXPECTED_OUTPUT" ] || die "Did not report error, system node not found or --silent was not silent" 21 | nvm use --silent system 2>&1 > /dev/null || [ $? -eq 127 ] || die "Did not return error code, system node not found or --silent was not silent" 22 | 23 | -------------------------------------------------------------------------------- /test/fast/Running "nvm use x" should create and change the "current" symlink: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export NVM_SYMLINK_CURRENT=true 4 | . ../../nvm.sh 5 | 6 | rm -rf ../../v0.10.29 7 | mkdir ../../v0.10.29 8 | nvm use 0.10.29 9 | rmdir ../../v0.10.29 10 | 11 | if [ ! -L ../../current ];then 12 | echo "Expected 'current' symlink to be created!" 13 | exit 1 14 | fi 15 | 16 | oldLink="$(readlink ../../current)" 17 | 18 | if [ "$(basename $oldLink)" != 'v0.10.29' ];then 19 | echo "Expected 'current' to point to v0.10.29 but was $oldLink" 20 | exit 1 21 | fi 22 | 23 | rm -rf ../../v0.11.13 24 | mkdir ../../v0.11.13 25 | nvm use 0.11.13 26 | rmdir ../../v0.11.13 27 | 28 | newLink="$(readlink ../../current)" 29 | 30 | if [ "$(basename $newLink)" != 'v0.11.13' ];then 31 | echo "Expected 'current' to point to v0.11.13 but was $newLink" 32 | exit 1 33 | fi 34 | -------------------------------------------------------------------------------- /test/fast/Running "nvm use x" should not create the "current" symlink if $NVM_SYMLINK_CURRENT is false: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | . ../../nvm.sh 4 | 5 | TEST_NODE_VERSION="v0.10.29" 6 | 7 | TEST_COUNT=0 8 | TEST_PASSED=0 9 | TEST_FAILED=0 10 | 11 | function registerExpectedSymlink() { 12 | registerResult ${1} 13 | } 14 | 15 | function registerExpectedNoSymlink() { 16 | [ ${1} -ne 0 ] 17 | registerResult $? 18 | } 19 | 20 | function registerResult() { 21 | result=${1} 22 | 23 | TEST_COUNT=$(($TEST_COUNT + 1)) 24 | 25 | [ ${result} -eq 0 ] \ 26 | && TEST_PASSED=$(($TEST_PASSED + 1)) \ 27 | || TEST_FAILED=$(($TEST_FAILED + 1)) 28 | } 29 | 30 | function cleanup() { 31 | rm -rf ../../${TEST_NODE_VERSION} 32 | rm -f ../../current 33 | } 34 | 35 | function runNvmUse() { 36 | mkdir ../../${TEST_NODE_VERSION} 37 | nvm use ${TEST_NODE_VERSION} > /dev/null 2>&1 38 | rmdir ../../${TEST_NODE_VERSION} 39 | } 40 | 41 | function isCurrentSymlinkPresent() { 42 | [ -L ../../current ] 43 | } 44 | 45 | NVM_SYMLINK_CURRENT=false 46 | cleanup 47 | runNvmUse 48 | isCurrentSymlinkPresent && echo >&2 "Expected 'current' symlink not to be created when NVM_SYMLINK_CURRENT=false!" 49 | registerExpectedNoSymlink $? 50 | 51 | NVM_SYMLINK_CURRENT=true 52 | cleanup 53 | runNvmUse 54 | isCurrentSymlinkPresent || echo >&2 "Expected 'current' symlink to be created when NVM_SYMLINK_CURRENT=true!" 55 | registerExpectedSymlink $? 56 | 57 | NVM_SYMLINK_CURRENT=garbagevalue 58 | cleanup 59 | runNvmUse 60 | isCurrentSymlinkPresent && echo >&2 "Expected 'current' symlink not to be created when NVM_SYMLINK_CURRENT contains a string!" 61 | registerExpectedNoSymlink $? 62 | 63 | NVM_SYMLINK_CURRENT=0 64 | cleanup 65 | runNvmUse 66 | isCurrentSymlinkPresent && echo >&2 "Expected 'current' symlink not to be created when NVM_SYMLINK_CURRENT=0!" 67 | registerExpectedNoSymlink $? 68 | 69 | NVM_SYMLINK_CURRENT=1 70 | cleanup 71 | runNvmUse 72 | isCurrentSymlinkPresent && echo >&2 "Expected 'current' symlink not to be created when NVM_SYMLINK_CURRENT=1!" 73 | registerExpectedNoSymlink $? 74 | 75 | unset NVM_SYMLINK_CURRENT 76 | cleanup 77 | runNvmUse 78 | isCurrentSymlinkPresent && echo >&2 "Expected 'current' symlink not to be created when NVM_SYMLINK_CURRENT has been unset (default behaviour)!" 79 | registerExpectedNoSymlink $? 80 | 81 | cleanup 82 | 83 | [ ${TEST_FAILED} -ne 0 ] && echo "${TEST_COUNT} tested, ${TEST_PASSED} passed, ${TEST_FAILED} failed" && exit 1 || true 84 | 85 | -------------------------------------------------------------------------------- /test/fast/Sourcing nvm.sh should make the nvm command available.: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../nvm.sh 4 | nvm 5 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_add_iojs_prefix: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | [ "_$(nvm_add_iojs_prefix 1)" = "_iojs-v1" ] || die '"nvm_add_iojs_prefix 1" did not return "iojs-v1"' 8 | [ "_$(nvm_add_iojs_prefix iojs-1)" = "_iojs-v1" ] || die '"nvm_add_iojs_prefix iojs-1" did not return "iojs-v1"' 9 | [ "_$(nvm_add_iojs_prefix iojs-1.2.3)" = "_iojs-v1.2.3" ] || die '"nvm_add_iojs_prefix iojs-1.2.3" did not return "iojs-v1.2.3"' 10 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_alias: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; cleanup ; exit 1; } 4 | 5 | cleanup () { 6 | rm -rf ../../../alias/test 7 | } 8 | 9 | . ../../../nvm.sh 10 | 11 | OUTPUT="$(nvm_alias 2>&1)" 12 | EXPECTED_OUTPUT='An alias is required.' 13 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_alias' produced wrong output; got $OUTPUT" 14 | 15 | EXIT_CODE="$(nvm_alias >/dev/null 2>&1 ; echo $?)" 16 | [ "_$EXIT_CODE" = "_1" ] || die "'nvm_alias' exited with $EXIT_CODE, expected 1" 17 | 18 | rm -rf ../../../alias/nonexistent 19 | 20 | OUTPUT="$(nvm_alias nonexistent 2>&1)" 21 | EXPECTED_OUTPUT='Alias does not exist.' 22 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_alias nonexistent' produced wrong output; got $OUTPUT" 23 | 24 | EXIT_CODE="$(nvm_alias nonexistent >/dev/null 2>&1 ; echo $?)" 25 | [ "_$EXIT_CODE" = "_2" ] || die "'nvm_alias nonexistent' exited with $EXIT_CODE, expected 2" 26 | 27 | EXPECTED_OUTPUT="0.10" 28 | nvm alias test "$EXPECTED_OUTPUT" || die "'nvm alias test $EXPECTED_OUTPUT' failed" 29 | OUTPUT="$(nvm_alias test)" 30 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_alias test' produced wrong output; got $OUTPUT" 31 | 32 | cleanup 33 | 34 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_alias_path: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | [ "_$(nvm_alias_path)" = "_$NVM_DIR/alias" ] || die "nvm_alias_path did not requrn correct location" 8 | 9 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_checksum: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | cleanup () { 4 | rm tmp/emptyfile tmp/testfile 5 | rmdir tmp 6 | } 7 | die () { echo $@ ; cleanup; exit 1; } 8 | 9 | . ../../../nvm.sh 10 | 11 | mkdir -p tmp 12 | touch tmp/emptyfile 13 | echo -n "test" > tmp/testfile 14 | 15 | nvm_checksum tmp/emptyfile "da39a3ee5e6b4b0d3255bfef95601890afd80709" || die "nvm_checksum on an empty file did not match the SHA1 digest of the empty string" 16 | nvm_checksum tmp/testfile "da39a3ee5e6b4b0d3255bfef95601890afd80709" && die "nvm_checksum allowed a bad checksum" 17 | 18 | cleanup 19 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_ensure_default_set: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | EXPECTED_OUTPUT="nvm_ensure_default_set: a version is required" 8 | OUTPUT="$(nvm_ensure_default_set 2>&1 >/dev/null)" 9 | EXIT_CODE="$?" 10 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "'nvm_ensure_default_set' did not output "$EXPECTED_OUTPUT", got "$OUTPUT"" 11 | [ "_$EXIT_CODE" = "_1" ] || die "'nvm_ensure_default_set' did not exit with 1, got "$EXIT_CODE"" 12 | 13 | # see test/fast/Aliases for remaining nvm_ensure_default_set tests 14 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_ensure_version_installed: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; cleanup ; exit 1; } 4 | cleanup () { 5 | rm -rf "$(nvm_version_path v0.1.2)" 6 | } 7 | 8 | . ../../../nvm.sh 9 | 10 | mkdir -p "$(nvm_version_path v0.1.2)" 11 | 12 | OUTPUT="$(nvm_ensure_version_installed foo 2>&1)" 13 | EXIT_CODE=$? 14 | EXPECTED_OUTPUT='N/A: version "foo" is not yet installed' 15 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "expected 'nvm_ensure_version_installed foo' to give $EXPECTED_OUTPUT, got $OUTPUT" 16 | [ "_$EXIT_CODE" = "_1" ] || die "expected 'nvm_ensure_version_installed foo' to exit with 1, got $EXIT_CODE" 17 | 18 | OUTPUT="$(nvm_ensure_version_installed 0.1)" 19 | EXIT_CODE=$? 20 | [ "_$OUTPUT" = "_" ] || die "expected 'nvm_ensure_version_installed 0.1' to have no output, got $OUTPUT" 21 | [ "_$EXIT_CODE" = "_0" ] || die "expected 'nvm_ensure_version_installed 0.1' to exit with 0, got $EXIT_CODE" 22 | 23 | cleanup 24 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_ensure_version_prefix: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | [ "_$(nvm_ensure_version_prefix 1)" = "_v1" ] || die '"nvm_ensure_version_prefix 1" did not return "v1"' 8 | [ "_$(nvm_ensure_version_prefix v1)" = "_v1" ] || die '"nvm_ensure_version_prefix v1" did not return "v1"' 9 | [ "_$(nvm_ensure_version_prefix foo)" = "_foo" ] || die '"nvm_ensure_version_prefix foo" did not return "foo"' 10 | 11 | [ "_$(nvm_ensure_version_prefix iojs-1)" = "_iojs-v1" ] || die '"nvm_ensure_version_prefix iojs-1" did not return "iojs-v1"' 12 | [ "_$(nvm_ensure_version_prefix iojs-v1)" = "_iojs-v1" ] || die '"nvm_ensure_version_prefix iojs-v1" did not return "iojs-v1"' 13 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_find_up: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; cleanup ; exit 1; } 4 | setup() { 5 | cleanup 6 | mkdir -p tmp_nvm_find_up/a/b/c/d 7 | touch tmp_nvm_find_up/test 8 | touch tmp_nvm_find_up/a/b/c/test 9 | } 10 | cleanup () { 11 | rm -rf tmp_nvm_find_up 12 | } 13 | 14 | . ../../../nvm.sh 15 | 16 | setup 17 | 18 | TEST_DIR="$PWD" 19 | 20 | [ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up" ] || die "failed to find 1 dir up" 21 | [ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a/b nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up" ] || die "failed to find 2 dirs up" 22 | [ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a/b/c nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up/a/b/c" ] || die "failed to find in current dir" 23 | [ "~$(PWD=$TEST_DIR/tmp_nvm_find_up/a/b/c/d nvm_find_up 'test')" = "~$TEST_DIR/tmp_nvm_find_up/a/b/c" ] || die "failed to find 1 level up from current dir" 24 | 25 | cleanup 26 | 27 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_format_version: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | OUTPUT="$(nvm_format_version 0.1.2)" 8 | EXPECTED_OUTPUT="v0.1.2" 9 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_format_version 0.1.2 did not return $EXPECTED_OUTPUT; got $OUTPUT" 10 | 11 | OUTPUT="$(nvm_format_version 0.1)" 12 | EXPECTED_OUTPUT="v0.1.0" 13 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_format_version 0.1.0 did not return $EXPECTED_OUTPUT; got $OUTPUT" 14 | 15 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_get_latest missing curl or wget: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; cleanup ; exit 1; } 4 | 5 | cleanup() { 6 | unset -f nvm_has 7 | } 8 | 9 | . ../../../nvm.sh 10 | 11 | nvm_has() { return 1 ; } 12 | 13 | OUTPUT="$(nvm_get_latest 2>&1)" 14 | EXIT_CODE="$(nvm_get_latest >/dev/null 2>&1 ; echo $?)" 15 | [ "_$OUTPUT" = "_nvm needs curl or wget to proceed." ] \ 16 | || die "no curl/wget did not report correct error message, got '$OUTPUT'" 17 | [ "_$EXIT_CODE" = "_1" ] \ 18 | || die "no curl/wget did not exit with code 1, got $EXIT_CODE" 19 | 20 | cleanup 21 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_has: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | nvm_has cat && type cat > /dev/null || die 'nvm_has locates "cat" properly' 8 | 9 | [ "~$(nvm_has foobarbaz 2>&1)" = "~" ] || die "nvm_has does not suppress error output" 10 | 11 | ! nvm_has foobarbaz && ! type foobarbaz >/dev/null 2>&1 || die "nvm_has does not return a nonzero exit code when not found" 12 | 13 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_has_system_iojs: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | cleanup () { 4 | rm ../../../versions/io.js/v0.1.2/node 5 | rm ../../../versions/io.js/v0.1.2/iojs 6 | rmdir ../../../versions/io.js/v0.1.2 7 | } 8 | die () { echo $@ ; exit 1; } 9 | 10 | . ../../../nvm.sh 11 | 12 | mkdir ../../../versions/io.js/v0.1.2 13 | touch ../../../versions/io.js/v0.1.2/node 14 | touch ../../../versions/io.js/v0.1.2/iojs 15 | 16 | nvm use iojs-v0.1.2 17 | 18 | if command -v iojs; then 19 | nvm_has_system_iojs 20 | else 21 | ! nvm_has_system_iojs 22 | fi 23 | 24 | nvm deactivate /dev/null 2>&1 25 | 26 | if command -v iojs; then 27 | nvm_has_system_iojs 28 | else 29 | ! nvm_has_system_iojs 30 | fi 31 | 32 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_has_system_node: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | cleanup () { 4 | rm ../../../v0.1.2/node 5 | rmdir ../../../v0.1.2 6 | } 7 | die () { echo $@ ; exit 1; } 8 | 9 | . ../../../nvm.sh 10 | 11 | mkdir ../../../v0.1.2 12 | touch ../../../v0.1.2/node 13 | 14 | nvm use 0.1.2 15 | 16 | if command -v node; then 17 | nvm_has_system_node 18 | else 19 | ! nvm_has_system_node 20 | fi 21 | 22 | nvm deactivate /dev/null 2>&1 23 | 24 | if command -v node; then 25 | nvm_has_system_node 26 | else 27 | ! nvm_has_system_node 28 | fi 29 | 30 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_iojs_prefix: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | [ "$(nvm_iojs_prefix)" = "iojs" ] || die '"nvm_iojs_prefix" did not return the string "iojs". why did this fail?!' 8 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_is_alias: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | cleanup () { unalias foo; unalias grep; } 4 | die () { echo $@ ; cleanup ; exit 1; } 5 | 6 | . ../../../nvm.sh 7 | 8 | alias foo='bar' 9 | nvm_is_alias foo || die '"nvm_is_alias foo" was not true' 10 | 11 | ! nvm_is_alias nvm_is_alias || die '"nvm_is_alias nvm_is_alias was not false' 12 | 13 | alias grep='grep' 14 | unalias grep || die '"unalias grep" failed' 15 | ! nvm_is_alias grep || die '"nvm_is_alias grep" with unaliased grep was not false' 16 | 17 | alias grep='grep' 18 | nvm_is_alias grep || die '"nvm_is_alias grep" with aliased grep was not true' 19 | 20 | cleanup 21 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_is_iojs_version: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | nvm_is_iojs_version 'iojs-' || die '"nvm_is_iojs_version iojs- was not true' 8 | nvm_is_iojs_version 'iojs-foo' || die '"nvm_is_iojs_version iojs- was not true' 9 | ! nvm_is_iojs_version 'iojs' || die '"nvm_is_iojs_version iojs was not false' 10 | ! nvm_is_iojs_version 'v1.0.0' || die '"nvm_is_iojs_version v1.0.0" was not false' 11 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_is_merged_node_version: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | nvm_is_merged_node_version '4.0' || die '"nvm_is_merged_node_version 4.0 was not true' 8 | nvm_is_merged_node_version '5.1' || die '"nvm_is_merged_node_version 5.1 was not true' 9 | ! nvm_is_merged_node_version '3.99' || die '"nvm_is_merged_node_version 3.99 was not false' 10 | ! nvm_is_merged_node_version 'v1.0.0' || die '"nvm_is_merged_node_version v1.0.0" was not false' 11 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_is_valid_version: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | nvm_is_valid_version 0.1.2 || die "nvm_is_valid_version 0.1.2 did not return 0" 8 | nvm_is_valid_version foo && die "nvm_is_valid_version foo did not return 1" 9 | nvm_is_valid_version iojs-1 || die "nvm_is_valid_version iojs-1 did not return 0" 10 | nvm_is_valid_version iojs || die "nvm_is_valid_version iojs did not return 0" 11 | nvm_is_valid_version node || die "nvm_is_valid_version node did not return 0" 12 | nvm_is_valid_version stable || die "nvm_is_valid_version stable did not return 0" 13 | nvm_is_valid_version unstable || die "nvm_is_valid_version unstable did not return 0" 14 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_ls_current: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | TEST_PWD=$(pwd) 4 | TEST_DIR="$TEST_PWD/nvm_ls_current_tmp" 5 | 6 | cleanup() { rm -rf "$TEST_DIR"; unset -f return_zero; alias node='node' ; unalias node; } 7 | die () { echo $@ ; cleanup ; exit 1; } 8 | 9 | . ../../../nvm.sh 10 | 11 | return_zero () { return 0; } 12 | 13 | if nvm_has_system_node || nvm_has_system_iojs; then 14 | EXPECTED_SYSTEM_NODE="system" 15 | else 16 | EXPECTED_SYSTEM_NODE="none" 17 | fi 18 | [ "_$(nvm deactivate > /dev/null 2>&1 ; nvm_ls_current)" = "_$EXPECTED_SYSTEM_NODE" ] || die "when deactivated, did not return $EXPECTED_SYSTEM_NODE" 19 | 20 | rm -rf "$TEST_DIR" 21 | mkdir "$TEST_DIR" 22 | ln -s "$(command which which)" "$TEST_DIR/which" 23 | ln -s "$(command which dirname)" "$TEST_DIR/dirname" 24 | 25 | [ "$(PATH="$TEST_DIR" nvm_ls_current)" = "none" ] || die 'when node not installed, nvm_ls_current did not return "none"' 26 | [ "@$(PATH="$TEST_DIR" nvm_ls_current 2> /dev/stdout 1> /dev/null)@" = "@@" ] || die 'when node not installed, nvm_ls_current returned error output' 27 | 28 | echo "#!/bin/bash" > "$TEST_DIR/node" 29 | echo "echo 'VERSION FOO!'" > "$TEST_DIR/node" 30 | chmod a+x "$TEST_DIR/node" 31 | 32 | [ "$(alias nvm_tree_contains_path='return_zero' && PATH="$TEST_DIR" nvm_ls_current)" = "VERSION FOO!" ] || die 'when activated, did not return nvm node version' 33 | 34 | alias node='node --harmony' 35 | [ "$(alias nvm_tree_contains_path='return_zero' && PATH="$TEST_DIR" nvm_ls_current)" = "VERSION FOO!" ] || die 'when activated and node aliased, did not return nvm node version' 36 | 37 | cleanup 38 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_ls_remote: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; cleanup ; exit 1; } 4 | 5 | cleanup() { 6 | unset -f nvm_download 7 | } 8 | 9 | . ../../../nvm.sh 10 | 11 | # sample output at the time the test was written 12 | nvm_download() { 13 | echo 'foo "v0.10.0' 14 | echo 'foo "v0.10.0' 15 | echo 'foo "v0.10.1' 16 | echo 'foo "v0.10.1' 17 | echo 'foo "v0.10.10' 18 | echo 'foo "v0.10.10' 19 | echo 'foo "v0.10.11' 20 | echo 'foo "v0.10.11' 21 | echo 'foo "v0.10.12' 22 | echo 'foo "v0.10.12' 23 | echo 'foo "v0.10.13' 24 | echo 'foo "v0.10.13' 25 | echo 'foo "v0.10.14' 26 | echo 'foo "v0.10.14' 27 | echo 'foo "v0.10.15' 28 | echo 'foo "v0.10.15' 29 | echo 'foo "v0.10.16' 30 | echo 'foo "v0.10.16' 31 | echo 'foo "v0.10.16' 32 | echo 'foo "v0.10.16' 33 | echo 'foo "v0.10.17' 34 | echo 'foo "v0.10.17' 35 | echo 'foo "v0.10.18' 36 | echo 'foo "v0.10.18' 37 | echo 'foo "v0.10.19' 38 | echo 'foo "v0.10.19' 39 | echo 'foo "v0.10.2' 40 | echo 'foo "v0.10.2' 41 | echo 'foo "v0.10.20' 42 | echo 'foo "v0.10.20' 43 | echo 'foo "v0.10.21' 44 | echo 'foo "v0.10.21' 45 | echo 'foo "v0.10.22' 46 | echo 'foo "v0.10.22' 47 | echo 'foo "v0.10.23' 48 | echo 'foo "v0.10.23' 49 | echo 'foo "v0.10.24' 50 | echo 'foo "v0.10.24' 51 | echo 'foo "v0.10.25' 52 | echo 'foo "v0.10.25' 53 | echo 'foo "v0.10.26' 54 | echo 'foo "v0.10.26' 55 | echo 'foo "v0.10.27' 56 | echo 'foo "v0.10.27' 57 | echo 'foo "v0.10.28' 58 | echo 'foo "v0.10.28' 59 | echo 'foo "v0.10.29' 60 | echo 'foo "v0.10.29' 61 | echo 'foo "v0.10.3' 62 | echo 'foo "v0.10.3' 63 | echo 'foo "v0.10.30' 64 | echo 'foo "v0.10.30' 65 | echo 'foo "v0.10.31' 66 | echo 'foo "v0.10.31' 67 | echo 'foo "v0.10.32' 68 | echo 'foo "v0.10.32' 69 | echo 'foo "v0.10.4' 70 | echo 'foo "v0.10.4' 71 | echo 'foo "v0.10.5' 72 | echo 'foo "v0.10.5' 73 | echo 'foo "v0.10.6' 74 | echo 'foo "v0.10.6' 75 | echo 'foo "v0.10.7' 76 | echo 'foo "v0.10.7' 77 | echo 'foo "v0.10.8' 78 | echo 'foo "v0.10.8' 79 | echo 'foo "v0.10.9' 80 | echo 'foo "v0.10.9' 81 | echo 'foo "v0.11.0' 82 | echo 'foo "v0.11.0' 83 | echo 'foo "v0.11.1' 84 | echo 'foo "v0.11.1' 85 | echo 'foo "v0.11.10' 86 | echo 'foo "v0.11.10' 87 | echo 'foo "v0.11.11' 88 | echo 'foo "v0.11.11' 89 | echo 'foo "v0.11.12' 90 | echo 'foo "v0.11.12' 91 | echo 'foo "v0.11.13' 92 | echo 'foo "v0.11.13' 93 | echo 'foo "v0.11.14' 94 | echo 'foo "v0.11.14' 95 | echo 'foo "v0.11.2' 96 | echo 'foo "v0.11.2' 97 | echo 'foo "v0.11.3' 98 | echo 'foo "v0.11.3' 99 | echo 'foo "v0.11.4' 100 | echo 'foo "v0.11.4' 101 | echo 'foo "v0.11.5' 102 | echo 'foo "v0.11.5' 103 | echo 'foo "v0.11.6' 104 | echo 'foo "v0.11.6' 105 | echo 'foo "v0.11.7' 106 | echo 'foo "v0.11.7' 107 | echo 'foo "v0.11.8' 108 | echo 'foo "v0.11.8' 109 | echo 'foo "v0.11.9' 110 | echo 'foo "v0.11.9' 111 | echo 'foo "v0.5.1' 112 | echo 'foo "v0.5.1' 113 | echo 'foo "v0.5.10' 114 | echo 'foo "v0.5.10' 115 | echo 'foo "v0.5.2' 116 | echo 'foo "v0.5.2' 117 | echo 'foo "v0.5.3' 118 | echo 'foo "v0.5.3' 119 | echo 'foo "v0.5.4' 120 | echo 'foo "v0.5.4' 121 | echo 'foo "v0.5.5' 122 | echo 'foo "v0.5.5' 123 | echo 'foo "v0.5.6' 124 | echo 'foo "v0.5.6' 125 | echo 'foo "v0.5.7' 126 | echo 'foo "v0.5.7' 127 | echo 'foo "v0.5.8' 128 | echo 'foo "v0.5.8' 129 | echo 'foo "v0.5.9' 130 | echo 'foo "v0.5.9' 131 | echo 'foo "v0.6.0' 132 | echo 'foo "v0.6.0' 133 | echo 'foo "v0.6.1' 134 | echo 'foo "v0.6.1' 135 | echo 'foo "v0.6.10' 136 | echo 'foo "v0.6.10' 137 | echo 'foo "v0.6.11' 138 | echo 'foo "v0.6.11' 139 | echo 'foo "v0.6.12' 140 | echo 'foo "v0.6.12' 141 | echo 'foo "v0.6.13' 142 | echo 'foo "v0.6.13' 143 | echo 'foo "v0.6.14' 144 | echo 'foo "v0.6.14' 145 | echo 'foo "v0.6.15' 146 | echo 'foo "v0.6.15' 147 | echo 'foo "v0.6.16' 148 | echo 'foo "v0.6.16' 149 | echo 'foo "v0.6.17' 150 | echo 'foo "v0.6.17' 151 | echo 'foo "v0.6.18' 152 | echo 'foo "v0.6.18' 153 | echo 'foo "v0.6.19' 154 | echo 'foo "v0.6.19' 155 | echo 'foo "v0.6.2' 156 | echo 'foo "v0.6.2' 157 | echo 'foo "v0.6.20' 158 | echo 'foo "v0.6.20' 159 | echo 'foo "v0.6.21' 160 | echo 'foo "v0.6.21' 161 | echo 'foo "v0.6.3' 162 | echo 'foo "v0.6.3' 163 | echo 'foo "v0.6.4' 164 | echo 'foo "v0.6.4' 165 | echo 'foo "v0.6.5' 166 | echo 'foo "v0.6.5' 167 | echo 'foo "v0.6.6' 168 | echo 'foo "v0.6.6' 169 | echo 'foo "v0.6.7' 170 | echo 'foo "v0.6.7' 171 | echo 'foo "v0.6.8' 172 | echo 'foo "v0.6.8' 173 | echo 'foo "v0.6.9' 174 | echo 'foo "v0.6.9' 175 | echo 'foo "v0.7.0' 176 | echo 'foo "v0.7.0' 177 | echo 'foo "v0.7.1' 178 | echo 'foo "v0.7.1' 179 | echo 'foo "v0.7.10' 180 | echo 'foo "v0.7.10' 181 | echo 'foo "v0.7.11' 182 | echo 'foo "v0.7.11' 183 | echo 'foo "v0.7.12' 184 | echo 'foo "v0.7.12' 185 | echo 'foo "v0.7.2' 186 | echo 'foo "v0.7.2' 187 | echo 'foo "v0.7.3' 188 | echo 'foo "v0.7.3' 189 | echo 'foo "v0.7.4' 190 | echo 'foo "v0.7.4' 191 | echo 'foo "v0.7.5' 192 | echo 'foo "v0.7.5' 193 | echo 'foo "v0.7.6' 194 | echo 'foo "v0.7.6' 195 | echo 'foo "v0.7.7' 196 | echo 'foo "v0.7.7' 197 | echo 'foo "v0.7.8' 198 | echo 'foo "v0.7.8' 199 | echo 'foo "v0.7.9' 200 | echo 'foo "v0.7.9' 201 | echo 'foo "v0.8.0' 202 | echo 'foo "v0.8.0' 203 | echo 'foo "v0.8.1' 204 | echo 'foo "v0.8.1' 205 | echo 'foo "v0.8.10' 206 | echo 'foo "v0.8.10' 207 | echo 'foo "v0.8.11' 208 | echo 'foo "v0.8.11' 209 | echo 'foo "v0.8.12' 210 | echo 'foo "v0.8.12' 211 | echo 'foo "v0.8.13' 212 | echo 'foo "v0.8.13' 213 | echo 'foo "v0.8.14' 214 | echo 'foo "v0.8.14' 215 | echo 'foo "v0.8.15' 216 | echo 'foo "v0.8.15' 217 | echo 'foo "v0.8.16' 218 | echo 'foo "v0.8.16' 219 | echo 'foo "v0.8.17' 220 | echo 'foo "v0.8.17' 221 | echo 'foo "v0.8.18' 222 | echo 'foo "v0.8.18' 223 | echo 'foo "v0.8.19' 224 | echo 'foo "v0.8.19' 225 | echo 'foo "v0.8.2' 226 | echo 'foo "v0.8.2' 227 | echo 'foo "v0.8.20' 228 | echo 'foo "v0.8.20' 229 | echo 'foo "v0.8.21' 230 | echo 'foo "v0.8.21' 231 | echo 'foo "v0.8.22' 232 | echo 'foo "v0.8.22' 233 | echo 'foo "v0.8.23' 234 | echo 'foo "v0.8.23' 235 | echo 'foo "v0.8.24' 236 | echo 'foo "v0.8.24' 237 | echo 'foo "v0.8.25' 238 | echo 'foo "v0.8.25' 239 | echo 'foo "v0.8.26' 240 | echo 'foo "v0.8.26' 241 | echo 'foo "v0.8.27' 242 | echo 'foo "v0.8.27' 243 | echo 'foo "v0.8.28' 244 | echo 'foo "v0.8.28' 245 | echo 'foo "v0.8.3' 246 | echo 'foo "v0.8.3' 247 | echo 'foo "v0.8.4' 248 | echo 'foo "v0.8.4' 249 | echo 'foo "v0.8.5' 250 | echo 'foo "v0.8.5' 251 | echo 'foo "v0.8.6' 252 | echo 'foo "v0.8.6' 253 | echo 'foo "v0.8.7' 254 | echo 'foo "v0.8.7' 255 | echo 'foo "v0.8.8' 256 | echo 'foo "v0.8.8' 257 | echo 'foo "v0.8.9' 258 | echo 'foo "v0.8.9' 259 | echo 'foo "v0.9.0' 260 | echo 'foo "v0.9.0' 261 | echo 'foo "v0.9.1' 262 | echo 'foo "v0.9.1' 263 | echo 'foo "v0.9.10' 264 | echo 'foo "v0.9.10' 265 | echo 'foo "v0.9.11' 266 | echo 'foo "v0.9.11' 267 | echo 'foo "v0.9.12' 268 | echo 'foo "v0.9.12' 269 | echo 'foo "v0.9.2' 270 | echo 'foo "v0.9.2' 271 | echo 'foo "v0.9.3' 272 | echo 'foo "v0.9.3' 273 | echo 'foo "v0.9.4' 274 | echo 'foo "v0.9.4' 275 | echo 'foo "v0.9.5' 276 | echo 'foo "v0.9.5' 277 | echo 'foo "v0.9.6' 278 | echo 'foo "v0.9.6' 279 | echo 'foo "v0.9.7' 280 | echo 'foo "v0.9.7' 281 | echo 'foo "v0.9.8' 282 | echo 'foo "v0.9.8' 283 | echo 'foo "v0.9.9' 284 | echo 'foo "v0.9.9' 285 | echo 'foo "v0.1.100' 286 | echo 'foo "v0.1.100' 287 | echo 'foo "v0.1.101' 288 | echo 'foo "v0.1.101' 289 | echo 'foo "v0.1.102' 290 | echo 'foo "v0.1.102' 291 | echo 'foo "v0.1.103' 292 | echo 'foo "v0.1.103' 293 | echo 'foo "v0.1.104' 294 | echo 'foo "v0.1.104' 295 | echo 'foo "v0.1.14' 296 | echo 'foo "v0.1.14' 297 | echo 'foo "v0.1.15' 298 | echo 'foo "v0.1.15' 299 | echo 'foo "v0.1.16' 300 | echo 'foo "v0.1.16' 301 | echo 'foo "v0.1.17' 302 | echo 'foo "v0.1.17' 303 | echo 'foo "v0.1.18' 304 | echo 'foo "v0.1.18' 305 | echo 'foo "v0.1.19' 306 | echo 'foo "v0.1.19' 307 | echo 'foo "v0.1.20' 308 | echo 'foo "v0.1.20' 309 | echo 'foo "v0.1.21' 310 | echo 'foo "v0.1.21' 311 | echo 'foo "v0.1.22' 312 | echo 'foo "v0.1.22' 313 | echo 'foo "v0.1.23' 314 | echo 'foo "v0.1.23' 315 | echo 'foo "v0.1.24' 316 | echo 'foo "v0.1.24' 317 | echo 'foo "v0.1.25' 318 | echo 'foo "v0.1.25' 319 | echo 'foo "v0.1.26' 320 | echo 'foo "v0.1.26' 321 | echo 'foo "v0.1.27' 322 | echo 'foo "v0.1.27' 323 | echo 'foo "v0.1.28' 324 | echo 'foo "v0.1.28' 325 | echo 'foo "v0.1.29' 326 | echo 'foo "v0.1.29' 327 | echo 'foo "v0.1.30' 328 | echo 'foo "v0.1.30' 329 | echo 'foo "v0.1.31' 330 | echo 'foo "v0.1.31' 331 | echo 'foo "v0.1.32' 332 | echo 'foo "v0.1.32' 333 | echo 'foo "v0.1.33' 334 | echo 'foo "v0.1.33' 335 | echo 'foo "v0.1.90' 336 | echo 'foo "v0.1.90' 337 | echo 'foo "v0.1.91' 338 | echo 'foo "v0.1.91' 339 | echo 'foo "v0.1.92' 340 | echo 'foo "v0.1.92' 341 | echo 'foo "v0.1.93' 342 | echo 'foo "v0.1.93' 343 | echo 'foo "v0.1.94' 344 | echo 'foo "v0.1.94' 345 | echo 'foo "v0.1.95' 346 | echo 'foo "v0.1.95' 347 | echo 'foo "v0.1.96' 348 | echo 'foo "v0.1.96' 349 | echo 'foo "v0.1.97' 350 | echo 'foo "v0.1.97' 351 | echo 'foo "v0.1.98' 352 | echo 'foo "v0.1.98' 353 | echo 'foo "v0.1.99' 354 | echo 'foo "v0.1.99' 355 | echo 'foo "v0.10.14' 356 | echo 'foo "v0.10.14' 357 | echo 'foo "v0.2.0' 358 | echo 'foo "v0.2.0' 359 | echo 'foo "v0.2.1' 360 | echo 'foo "v0.2.1' 361 | echo 'foo "v0.2.2' 362 | echo 'foo "v0.2.2' 363 | echo 'foo "v0.2.3' 364 | echo 'foo "v0.2.3' 365 | echo 'foo "v0.2.4' 366 | echo 'foo "v0.2.4' 367 | echo 'foo "v0.2.5' 368 | echo 'foo "v0.2.5' 369 | echo 'foo "v0.2.6' 370 | echo 'foo "v0.2.6' 371 | echo 'foo "v0.3.0' 372 | echo 'foo "v0.3.0' 373 | echo 'foo "v0.3.1' 374 | echo 'foo "v0.3.1' 375 | echo 'foo "v0.3.2' 376 | echo 'foo "v0.3.2' 377 | echo 'foo "v0.3.3' 378 | echo 'foo "v0.3.3' 379 | echo 'foo "v0.3.4' 380 | echo 'foo "v0.3.4' 381 | echo 'foo "v0.3.5' 382 | echo 'foo "v0.3.5' 383 | echo 'foo "v0.3.6' 384 | echo 'foo "v0.3.6' 385 | echo 'foo "v0.3.7' 386 | echo 'foo "v0.3.7' 387 | echo 'foo "v0.3.8' 388 | echo 'foo "v0.3.8' 389 | echo 'foo "v0.4.0' 390 | echo 'foo "v0.4.0' 391 | echo 'foo "v0.4.1' 392 | echo 'foo "v0.4.1' 393 | echo 'foo "v0.4.10' 394 | echo 'foo "v0.4.10' 395 | echo 'foo "v0.4.11' 396 | echo 'foo "v0.4.11' 397 | echo 'foo "v0.4.12' 398 | echo 'foo "v0.4.12' 399 | echo 'foo "v0.4.2' 400 | echo 'foo "v0.4.2' 401 | echo 'foo "v0.4.3' 402 | echo 'foo "v0.4.3' 403 | echo 'foo "v0.4.4' 404 | echo 'foo "v0.4.4' 405 | echo 'foo "v0.4.5' 406 | echo 'foo "v0.4.5' 407 | echo 'foo "v0.4.6' 408 | echo 'foo "v0.4.6' 409 | echo 'foo "v0.4.7' 410 | echo 'foo "v0.4.7' 411 | echo 'foo "v0.4.8' 412 | echo 'foo "v0.4.8' 413 | echo 'foo "v0.4.9' 414 | echo 'foo "v0.4.9' 415 | echo 'foo "v0.5.0' 416 | echo 'foo "v0.5.0' 417 | echo 'foo "v0.6.1' 418 | echo 'foo "v0.6.1' 419 | echo 'foo "v0.6.10' 420 | echo 'foo "v0.6.10' 421 | echo 'foo "v0.6.11' 422 | echo 'foo "v0.6.11' 423 | echo 'foo "v0.6.12' 424 | echo 'foo "v0.6.12' 425 | echo 'foo "v0.6.13' 426 | echo 'foo "v0.6.13' 427 | echo 'foo "v0.6.2' 428 | echo 'foo "v0.6.2' 429 | echo 'foo "v0.6.3' 430 | echo 'foo "v0.6.3' 431 | echo 'foo "v0.6.4' 432 | echo 'foo "v0.6.4' 433 | echo 'foo "v0.6.5' 434 | echo 'foo "v0.6.5' 435 | echo 'foo "v0.6.6' 436 | echo 'foo "v0.6.6' 437 | echo 'foo "v0.6.7' 438 | echo 'foo "v0.6.7' 439 | echo 'foo "v0.6.8' 440 | echo 'foo "v0.6.8' 441 | echo 'foo "v0.6.9' 442 | echo 'foo "v0.6.9' 443 | } 444 | 445 | OUTPUT="$(nvm_ls_remote foo)" 446 | EXIT_CODE="$(nvm_ls_remote foo >/dev/null 2>&1 ; echo $?)" 447 | [ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A" 448 | [ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE" 449 | 450 | OUTPUT="$(nvm_ls_remote)" 451 | EXPECTED_OUTPUT="$(nvm_download | \egrep -o 'v[0-9]+\.[0-9]+\.[0-9]+' | sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n)" 452 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "bare nvm_ls_remote did not output expected sorted versions; got $(echo "$OUTPUT") expected $(echo "$EXPECTED_OUTPUT")" 453 | 454 | OUTPUT="$(nvm_ls_remote 0.3)" 455 | EXPECTED_OUTPUT="v0.3.0 456 | v0.3.1 457 | v0.3.2 458 | v0.3.3 459 | v0.3.4 460 | v0.3.5 461 | v0.3.6 462 | v0.3.7 463 | v0.3.8" 464 | 465 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_ls_remote 0.3 did not output 0.3.x versions; got $OUTPUT" 466 | 467 | # Sanity checks 468 | OUTPUT="$(nvm_print_implicit_alias remote stable)" 469 | EXPECTED_OUTPUT="0.10" 470 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_print_implicit_alias remote stable did not output $EXPECTED_OUTPUT; got $OUTPUT" 471 | 472 | OUTPUT="$(nvm_print_implicit_alias remote unstable)" 473 | EXPECTED_OUTPUT="0.11" 474 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_print_implicit_alias remote unstable did not output $EXPECTED_OUTPUT; got $OUTPUT" 475 | 476 | OUTPUT="$(nvm_ls_remote stable)" 477 | EXPECTED_OUTPUT="v0.10.32" 478 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_ls_remote stable did not output $EXPECTED_OUTPUT; got $OUTPUT" 479 | 480 | OUTPUT="$(nvm_ls_remote unstable)" 481 | EXPECTED_OUTPUT="v0.11.14" 482 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_ls_remote unstable did not output $EXPECTED_OUTPUT; got $OUTPUT" 483 | 484 | cleanup 485 | 486 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_ls_remote_iojs: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; cleanup ; exit 1; } 4 | 5 | cleanup() { 6 | unset -f nvm_download 7 | } 8 | 9 | . ../../../nvm.sh 10 | 11 | # sample output at the time the test was written 12 | nvm_download() { 13 | echo 'version date files npm v8 uv zlib openssl modules' 14 | echo 'v1.0.1 2015-01-14 linux-armv7l,linux-x64,linux-x86,osx-x64-tar,win-x64-exe,win-x64-msi,win-x86-exe,win-x86-msi' 15 | echo 'v1.0.0 2015-01-14 linux-armv7l,linux-x64,linux-x86,osx-x64-tar,win-x64-exe,win-x64-msi,win-x86-exe,win-x86-msi' 16 | } 17 | 18 | OUTPUT="$(nvm_ls_remote_iojs foo)" 19 | EXIT_CODE="$(nvm_ls_remote_iojs foo >/dev/null 2>&1 ; echo $?)" 20 | [ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A" 21 | [ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE" 22 | 23 | OUTPUT="$(nvm_ls_remote_iojs)" 24 | EXPECTED_OUTPUT="$(nvm_download | \egrep -o 'v[0-9]+\.[0-9]+\.[0-9]+' | sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n | sed -e 's/^/iojs-/')" 25 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "bare nvm_ls_remote_iojs did not output expected sorted versions; got $(echo "$OUTPUT") expected $(echo "$EXPECTED_OUTPUT")" 26 | 27 | OUTPUT="$(nvm_ls_remote_iojs 1.0)" 28 | EXPECTED_OUTPUT="iojs-v1.0.0 29 | iojs-v1.0.1" 30 | 31 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_ls_remote_iojs 1.0 did not output 1.0.x versions; got $OUTPUT" 32 | 33 | cleanup 34 | 35 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_node_prefix: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | [ "$(nvm_node_prefix)" = "node" ] || die '"nvm_node_prefix" did not return the string "node". why did this fail?!' 8 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_num_version_groups: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | [ "~$(nvm_num_version_groups)" = "~0" ] || die "no args should give 0" 8 | [ "~$(nvm_num_version_groups v)" = "~0" ] || die "just "v" should give 0" 9 | [ "~$(nvm_num_version_groups .)" = "~0" ] || die "just "." should give 0" 10 | [ "~$(nvm_num_version_groups a)" = "~1" ] || die "one letter should give 1" 11 | 12 | [ "~$(nvm_num_version_groups 1)" = "~1" ] || die "1 should give 1" 13 | [ "~$(nvm_num_version_groups 1.)" = "~1" ] || die "1. should give 1" 14 | [ "~$(nvm_num_version_groups v1)" = "~1" ] || die "v1 should give 1" 15 | [ "~$(nvm_num_version_groups v1.)" = "~1" ] || die "v1. should give 1" 16 | 17 | [ "~$(nvm_num_version_groups 1.2)" = "~2" ] || die "1.2 should give 2" 18 | [ "~$(nvm_num_version_groups 1.2.)" = "~2" ] || die "1.2. should give 2" 19 | [ "~$(nvm_num_version_groups v1.2)" = "~2" ] || die "v1.2 should give 2" 20 | [ "~$(nvm_num_version_groups v1.2.)" = "~2" ] || die "v1.2. should give 2" 21 | 22 | [ "~$(nvm_num_version_groups 1.2.3)" = "~3" ] || die "1.2.3 should give 3" 23 | [ "~$(nvm_num_version_groups v1.2.3)" = "~3" ] || die "v1.2.3 should give 3" 24 | [ "~$(nvm_num_version_groups v1.2.3.)" = "~3" ] || die "v1.2.3. should give 3" 25 | 26 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_prepend_path: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | TEST_PATH=/usr/bin:/usr/local/bin 8 | 9 | NEW_PATH=`nvm_prepend_path "$TEST_PATH" "$NVM_DIR/v0.2.5/bin"` 10 | 11 | [ "$NEW_PATH" = "$NVM_DIR/v0.2.5/bin:/usr/bin:/usr/local/bin" ] || die "Not correctly prepended: $NEW_PATH " 12 | 13 | 14 | EMPTY_PATH= 15 | 16 | NEW_PATH=`nvm_prepend_path "$EMPTY_PATH" "$NVM_DIR/v0.2.5/bin"` 17 | 18 | [ "$NEW_PATH" = "$NVM_DIR/v0.2.5/bin" ] || die "Not correctly prepended: $NEW_PATH " 19 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_print_implicit_alias errors: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | EXPECTED_FIRST_MSG="nvm_print_implicit_alias must be specified with local or remote as the first argument." 8 | [ "_$(nvm_print_implicit_alias 2>&1)" = "_$EXPECTED_FIRST_MSG" ] \ 9 | || die "nvm_print_implicit_alias did not require local|remote as first argument" 10 | [ "_$(nvm_print_implicit_alias foo 2>&1)" = "_$EXPECTED_FIRST_MSG" ] \ 11 | || die "nvm_print_implicit_alias did not require local|remote as first argument" 12 | 13 | FIRST_EXIT_CODE="$(nvm_print_implicit_alias > /dev/null 2>&1 ; echo $?)" 14 | [ "_$FIRST_EXIT_CODE" = "_1" ] \ 15 | || die "nvm_print_implicit_alias without local|remote had wrong exit code: expected 1, got $FIRST_EXIT_CODE" 16 | 17 | EXPECTED_SECOND_MSG="Only implicit aliases 'stable', 'unstable', 'iojs', 'alinode', and 'node' are supported." 18 | [ "_$(nvm_print_implicit_alias local 2>&1)" = "_$EXPECTED_SECOND_MSG" ] \ 19 | || die "nvm_print_implicit_alias did not require stable|unstable|iojs|node as second argument" 20 | [ "_$(nvm_print_implicit_alias local foo 2>&1)" = "_$EXPECTED_SECOND_MSG" ] \ 21 | || die "nvm_print_implicit_alias did not require stable|unstable|iojs|node as second argument" 22 | 23 | SECOND_EXIT_CODE="$(nvm_print_implicit_alias local > /dev/null 2>&1 ; echo $?)" 24 | [ "_$SECOND_EXIT_CODE" = "_2" ] \ 25 | || die "nvm_print_implicit_alias without stable|unstable|iojs|node had wrong exit code: expected 2, got $SECOND_EXIT_CODE" 26 | 27 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_print_implicit_alias success: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; cleanup ; exit 1; } 4 | cleanup() { 5 | rm -rf ../../../v0.2.3 6 | rm -rf ../../../v0.3.4 7 | rm -rf ../../../v0.4.6 8 | rm -rf ../../../v0.5.7 9 | rm -rf ../../../v0.7.7 10 | rm -rf ../../../versions/io.js/v0.98.0 11 | rm -rf ../../../versions/node/v1.0.0 12 | rm -rf ../../../versions/node/v1.1.0 13 | unset -f nvm_ls_remote nvm_ls_remote_iojs 14 | } 15 | 16 | . ../../../nvm.sh 17 | 18 | mkdir ../../../v0.2.3 19 | mkdir ../../../v0.3.4 20 | mkdir ../../../v0.4.6 21 | mkdir ../../../v0.5.7 22 | mkdir ../../../v0.7.7 23 | mkdir -p ../../../versions/io.js/v0.98.0 24 | 25 | LATEST_STABLE="$(nvm_print_implicit_alias local stable)" 26 | [ "_$LATEST_STABLE" = "_0.4" ] || die "local stable is not latest even minor: expected 0.4, got $LATEST_STABLE" 27 | 28 | LATEST_NODE="$(nvm_print_implicit_alias local node)" 29 | [ "_$LATEST_NODE" = "_stable" ] || die "local node is not stable: expected stable, got $LATEST_NODE" 30 | 31 | LATEST_UNSTABLE="$(nvm_print_implicit_alias local unstable)" 32 | [ "_$LATEST_UNSTABLE" = "_0.7" ] || die "local unstable is not latest odd minor: expected 0.7, got $LATEST_UNSTABLE" 33 | 34 | LATEST_IOJS="$(nvm_print_implicit_alias local iojs)" 35 | [ "_$LATEST_IOJS" = "_iojs-v0.98" ] || die "local iojs is not latest iojs: expected iojs-v0.98, got $LATEST_IOJS" 36 | 37 | ## node post v1.0/io.js merger ## 38 | mkdir -p ../../../versions/node/v1.0.0 39 | mkdir -p ../../../versions/node/v1.1.0 40 | 41 | LATEST_STABLE="$(nvm_print_implicit_alias local stable)" 42 | [ "_$LATEST_STABLE" = "_1.1" ] || die "local stable when post-v1.0 exists is not latest: expected 1.1, got $LATEST_STABLE" 43 | 44 | LATEST_UNSTABLE="$(nvm_print_implicit_alias local unstable)" 45 | [ "_$LATEST_UNSTABLE" = "_0.7" ] || die "local unstable is not latest pre-v1.0 odd minor: expected 0.7, got $LATEST_UNSTABLE" 46 | ## ** ## 47 | 48 | nvm_ls_remote() { 49 | echo "v0.4.3" 50 | echo "v0.5.4" 51 | echo "v0.6.6" 52 | echo "v0.7.7" 53 | echo "v0.9.7" 54 | echo "v0.4.3" 55 | echo "v0.5.4" 56 | echo "v0.6.6" 57 | echo "v0.7.7" 58 | echo "v0.9.7" 59 | } 60 | 61 | nvm_ls_remote_iojs() { 62 | echo "iojs-v0.1.0" 63 | echo "iojs-v0.1.1" 64 | echo "iojs-v0.7.8" 65 | echo "iojs-v0.98.5" 66 | echo "iojs-v0.99.0" 67 | } 68 | 69 | LATEST_STABLE="$(nvm_print_implicit_alias remote stable)" 70 | [ "_$LATEST_STABLE" = "_0.6" ] || die "remote stable is not latest even minor: expected 0.6, got $LATEST_STABLE" 71 | 72 | LATEST_NODE="$(nvm_print_implicit_alias remote node)" 73 | [ "_$LATEST_NODE" = "_stable" ] || die "remote node is not stable: expected stable, got $LATEST_NODE" 74 | 75 | LATEST_UNSTABLE="$(nvm_print_implicit_alias remote unstable)" 76 | [ "_$LATEST_UNSTABLE" = "_0.9" ] || die "remote unstable is not latest odd minor: expected 0.9, got $LATEST_UNSTABLE" 77 | 78 | LATEST_IOJS="$(nvm_print_implicit_alias remote iojs)" 79 | [ "_$LATEST_IOJS" = "_iojs-v0.99" ] || die "remote iojs is not latest: expected iojs-v0.99, got $LATEST_IOJS" 80 | 81 | ## node post v1.0/io.js merger ## 82 | nvm_ls_remote() { 83 | echo "v0.4.3" 84 | echo "v0.5.4" 85 | echo "v0.6.6" 86 | echo "v0.7.7" 87 | echo "v0.9.7" 88 | echo "v0.4.3" 89 | echo "v0.5.4" 90 | echo "v0.6.6" 91 | echo "v0.7.7" 92 | echo "v0.9.7" 93 | echo "v1.0.0" 94 | echo "v1.1.0" 95 | } 96 | 97 | LATEST_STABLE="$(nvm_print_implicit_alias remote stable)" 98 | [ "_$LATEST_STABLE" = "_1.1" ] || die "remote stable when post-v1.0 exists is not latest: expected 1.1, got $LATEST_STABLE" 99 | 100 | LATEST_UNSTABLE="$(nvm_print_implicit_alias remote unstable)" 101 | [ "_$LATEST_UNSTABLE" = "_0.9" ] || die "remote unstable is not latest odd pre-v1.0 minor: expected 0.9, got $LATEST_UNSTABLE" 102 | ## ** ## 103 | 104 | cleanup 105 | 106 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_print_npm_version: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | cleanup () { 4 | alias nvm_has='\nvm_has' 5 | alias npm='\npm' 6 | unset -f nvm_has npm 7 | } 8 | die () { echo $@ ; exit 1; } 9 | 10 | . ../../../nvm.sh 11 | 12 | nvm_has() { return 1; } 13 | OUTPUT="$(nvm_print_npm_version)" 14 | [ -z "$OUTPUT" ] || die "nvm_print_npm_version did not return empty when nvm_has returns 1, got '$OUTPUT'" 15 | 16 | nvm_has() { return 0; } 17 | npm() { 18 | if [ "_$@" = "_--version" ]; then 19 | echo "1.2.3" 20 | else 21 | echo "error" 22 | fi 23 | } 24 | OUTPUT="$(nvm_print_npm_version)" 25 | EXPECTED_OUTPUT=" (npm v1.2.3)" 26 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "nvm_print_npm_version did not provided '$EXPECTED_OUTPUT', got '$OUTPUT'" 27 | 28 | cleanup 29 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_remote_version: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; cleanup ; exit 1; } 4 | 5 | cleanup() { 6 | unset -f nvm_ls_remote nvm_ls_remote_iojs 7 | } 8 | 9 | . ../../../nvm.sh 10 | 11 | nvm_ls_remote() { 12 | echo "N/A" 13 | } 14 | OUTPUT="$(nvm_remote_version foo)" 15 | EXIT_CODE="$(nvm_remote_version foo >/dev/null 2>&1 ; echo $?)" 16 | [ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A" 17 | [ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE" 18 | 19 | nvm_ls_remote_iojs() { 20 | echo "N/A" 21 | } 22 | OUTPUT="$(nvm_remote_version iojs-foo)" 23 | EXIT_CODE="$(nvm_remote_version iojs-foo >/dev/null 2>&1 ; echo $?)" 24 | [ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A" 25 | [ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE" 26 | 27 | 28 | nvm_ls_remote() { 29 | if ! nvm_is_iojs_version "$1"; then 30 | echo "test output" 31 | echo "more test output" 32 | echo "pattern received: _$1_" 33 | fi 34 | } 35 | nvm_ls_remote_iojs() { 36 | if [ -z "$1" ] || nvm_is_iojs_version "$1"; then 37 | echo "test iojs output" 38 | echo "more iojs test output" 39 | echo "iojs pattern received: _$1_" 40 | fi 41 | } 42 | OUTPUT="$(nvm_remote_version foo)" 43 | EXIT_CODE="$(nvm_remote_version foo >/dev/null 2>&1 ; echo $?)" 44 | [ "_$OUTPUT" = "_pattern received: _foo_" ] \ 45 | || die "nvm_remote_version foo did not return last line only of nvm_ls_remote foo; got $OUTPUT" 46 | [ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_version foo did not exit with 0, got $EXIT_CODE" 47 | 48 | OUTPUT="$(nvm_remote_version iojs-foo)" 49 | EXIT_CODE="$(nvm_remote_version iojs-foo >/dev/null 2>&1 ; echo $?)" 50 | [ "_$OUTPUT" = "_iojs pattern received: _iojs-foo_" ] \ 51 | || die "nvm_remote_version iojs-foo did not return last line only of nvm_ls_remote_iojs foo; got $OUTPUT" 52 | [ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_version iojs-foo did not exit with 0, got $EXIT_CODE" 53 | 54 | OUTPUT="$(nvm_remote_version iojs)" 55 | EXIT_CODE="$(nvm_remote_version iojs >/dev/null 2>&1 ; echo $?)" 56 | [ "_$OUTPUT" = "_iojs pattern received: __" ] \ 57 | || die "nvm_remote_version iojs did not return last line only of nvm_ls_remote_iojs; got $OUTPUT" 58 | [ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_version iojs did not exit with 0, got $EXIT_CODE" 59 | 60 | OUTPUT="$(nvm_remote_version stable)" 61 | EXIT_CODE="$(nvm_remote_version stable >/dev/null 2>&1 ; echo $?)" 62 | [ "_$OUTPUT" = "_$(nvm_ls_remote stable)" ] \ 63 | || die "nvm_remote_version stable did not return contents of nvm_ls_remote stable; got $OUTPUT" 64 | [ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_version stable did not exit with 0, got $EXIT_CODE" 65 | 66 | OUTPUT="$(nvm_remote_version unstable)" 67 | EXIT_CODE="$(nvm_remote_version unstable >/dev/null 2>&1 ; echo $?)" 68 | [ "_$OUTPUT" = "_$(nvm_ls_remote unstable)" ] \ 69 | || die "nvm_remote_version unstable did not return contents of nvm_ls_remote unstable; got $OUTPUT" 70 | [ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_version unstable did not exit with 0, got $EXIT_CODE" 71 | 72 | OUTPUT="$(nvm_remote_version node)" 73 | EXIT_CODE="$(nvm_remote_version node >/dev/null 2>&1 ; echo $?)" 74 | [ "_$OUTPUT" = "_$(nvm_ls_remote node)" ] \ 75 | || die "nvm_remote_version node did not return contents of nvm_ls_remote node; got $OUTPUT" 76 | [ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_version node did not exit with 0, got $EXIT_CODE" 77 | 78 | cleanup 79 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_remote_versions: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; cleanup ; exit 1; } 4 | 5 | cleanup() { 6 | unset -f nvm_ls_remote nvm_ls_remote_iojs 7 | } 8 | 9 | . ../../../nvm.sh 10 | 11 | OUTPUT="$(nvm_remote_versions stable 2>&1)" 12 | EXPECTED_OUTPUT="Implicit aliases are not supported in nvm_remote_versions." 13 | EXIT_CODE="$(nvm_remote_versions stable >/dev/null 2>&1; echo $?)" 14 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "implicit alias 'stable' did not error out with correct message, got $OUTPUT" 15 | [ "_$EXIT_CODE" = "_1" ] || die "implicit alias 'stable' did not exit with code 1, got $EXIT_CODE" 16 | 17 | OUTPUT="$(nvm_remote_versions unstable 2>&1)" 18 | EXPECTED_OUTPUT="Implicit aliases are not supported in nvm_remote_versions." 19 | EXIT_CODE="$(nvm_remote_versions unstable >/dev/null 2>&1; echo $?)" 20 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die "implicit alias 'unstable' did not error out with correct message, got $OUTPUT" 21 | [ "_$EXIT_CODE" = "_1" ] || die "implicit alias 'unstable' did not exit with code 1, got $EXIT_CODE" 22 | 23 | nvm_ls_remote() { 24 | echo "N/A" 25 | } 26 | OUTPUT="$(nvm_remote_versions foo)" 27 | EXIT_CODE="$(nvm_remote_versions foo >/dev/null 2>&1 ; echo $?)" 28 | [ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A" 29 | [ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE" 30 | 31 | nvm_ls_remote_iojs() { 32 | echo "N/A" 33 | } 34 | OUTPUT="$(nvm_remote_versions iojs-foo)" 35 | EXIT_CODE="$(nvm_remote_versions iojs-foo >/dev/null 2>&1 ; echo $?)" 36 | [ "_$OUTPUT" = "_N/A" ] || die "nonexistent version did not report N/A" 37 | [ "_$EXIT_CODE" = "_3" ] || die "nonexistent version did not exit with code 3, got $EXIT_CODE" 38 | 39 | 40 | nvm_ls_remote() { 41 | echo "test output" 42 | echo "more test output" 43 | echo "pattern received: _$1_" 44 | } 45 | nvm_ls_remote_iojs() { 46 | echo "test iojs output" 47 | echo "more iojs test output" 48 | echo "iojs pattern received: _$1_" 49 | } 50 | 51 | OUTPUT="$(nvm_remote_versions foo)" 52 | EXIT_CODE="$(nvm_remote_versions foo >/dev/null 2>&1 ; echo $?)" 53 | [ "_$OUTPUT" = "_$(nvm_ls_remote foo) 54 | $(nvm_ls_remote_iojs foo)" ] \ 55 | || die "nvm_remote_versions foo did not return contents of nvm_ls_remote foo combined with nvm_ls_remote_iojs foo; got $OUTPUT" 56 | [ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_versions foo did not exit with 0, got $EXIT_CODE" 57 | 58 | OUTPUT="$(nvm_remote_versions node)" 59 | EXIT_CODE="$(nvm_remote_versions node >/dev/null 2>&1 ; echo $?)" 60 | [ "_$OUTPUT" = "_$(nvm_ls_remote)" ] \ 61 | || die "nvm_remote_versions node did not return contents of nvm_ls_remote; got $OUTPUT" 62 | [ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_versions node did not exit with 0, got $EXIT_CODE" 63 | 64 | OUTPUT="$(nvm_remote_versions iojs-foo)" 65 | EXIT_CODE="$(nvm_remote_versions iojs-foo >/dev/null 2>&1 ; echo $?)" 66 | [ "_$OUTPUT" = "_$(nvm_ls_remote iojs-foo) 67 | $(nvm_ls_remote_iojs iojs-foo)" ] \ 68 | || die "nvm_remote_versions iojs-foo did not return contents of nvm_ls_remote iojs-foo combined with nvm_ls_remote_iojs iojs-foo; got $OUTPUT" 69 | [ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_versions iojs-foo did not exit with 0, got $EXIT_CODE" 70 | 71 | OUTPUT="$(nvm_remote_versions iojs)" 72 | EXIT_CODE="$(nvm_remote_versions iojs >/dev/null 2>&1 ; echo $?)" 73 | [ "_$OUTPUT" = "_$(nvm_ls_remote_iojs)" ] \ 74 | || die "nvm_remote_versions iojs did not return contents of nvm_ls_remote_iojs; got $OUTPUT" 75 | [ "_$EXIT_CODE" = "_0" ] || die "nvm_remote_versions iojs did not exit with 0, got $EXIT_CODE" 76 | 77 | cleanup 78 | 79 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_strip_iojs_prefix: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | [ "_$(nvm_strip_iojs_prefix iojs)" = "_" ] || die '"nvm_strip_iojs_prefix iojs" did not return an empty string' 8 | [ "_$(nvm_strip_iojs_prefix iojs-)" = "_" ] || die '"nvm_strip_iojs_prefix iojs-" did not return an empty string' 9 | [ "_$(nvm_strip_iojs_prefix iojs-foo)" = "_foo" ] || die '"nvm_strip_iojs_prefix iojs-foo" did not return "foo"' 10 | [ "_$(nvm_strip_iojs_prefix iojsfoo)" = "_iojsfoo" ] || die '"nvm_strip_iojs_prefix iojsfoo" did not return "iojsfoo"' 11 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_strip_path: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | TEST_PATH=$NVM_DIR/v0.10.5/bin:/usr/bin:$NVM_DIR/v0.11.5/bin:$NVM_DIR/v0.9.5/bin:/usr/local/bin:$NVM_DIR/v0.2.5/bin:$NVM_DIR/versions/node/v0.12.0/bin:$NVM_DIR/versions/io.js/v1.0.0/bin 8 | 9 | STRIPPED_PATH=`nvm_strip_path "$TEST_PATH" "/bin"` 10 | 11 | [ "$STRIPPED_PATH" = "/usr/bin:/usr/local/bin" ] || die "Not correctly stripped: $STRIPPED_PATH " 12 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_tree_contains_path: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | cleanup () { 4 | rm tmp/node 5 | rmdir tmp 6 | rm tmp2/node 7 | rmdir tmp2 8 | } 9 | die () { echo $@ ; cleanup; exit 1; } 10 | 11 | . ../../../nvm.sh 12 | 13 | mkdir -p tmp 14 | touch tmp/node 15 | mkdir -p tmp2 16 | touch tmp2/node 17 | 18 | [ "$(nvm_tree_contains_path 2>&1)" = "both the tree and the node path are required" ] || die 'incorrect error message with no args' 19 | [ "$(nvm_tree_contains_path > /dev/null 2>&1 ; echo $?)" = "2" ] || die 'incorrect error code with no args' 20 | [ "$(nvm_tree_contains_path tmp 2>&1)" = "both the tree and the node path are required" ] || die 'incorrect error message with one arg' 21 | [ "$(nvm_tree_contains_path > /dev/null 2>&1 ; echo $?)" = "2" ] || die 'incorrect error code with one arg' 22 | 23 | nvm_tree_contains_path tmp tmp/node || die '"tmp" should contain "tmp/node"' 24 | 25 | nvm_tree_contains_path tmp tmp2/node && die '"tmp" should not contain "tmp2/node"' 26 | 27 | nvm_tree_contains_path tmp2 tmp2/node || die '"tmp2" should contain "tmp2/node"' 28 | 29 | nvm_tree_contains_path tmp2 tmp/node && die '"tmp2" should not contain "tmp/node"' 30 | 31 | cleanup 32 | 33 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_validate_implicit_alias: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | EXPECTED_MSG="Only implicit aliases 'stable', 'unstable', 'iojs', 'alinode', and 'node' are supported." 8 | [ "_$(nvm_validate_implicit_alias 2>&1)" = "_$EXPECTED_MSG" ] \ 9 | || die "nvm_validate_implicit_alias did not require stable|unstable|iojs|node" 10 | [ "_$(nvm_validate_implicit_alias foo 2>&1)" = "_$EXPECTED_MSG" ] \ 11 | || die "nvm_validate_implicit_alias did not require stable|unstable|iojs|node" 12 | 13 | EXIT_CODE="$(nvm_validate_implicit_alias >/dev/null 2>&1 ; echo $?)" 14 | [ "_$EXIT_CODE" = "_1" ] \ 15 | || die "nvm_validate_implicit_alias without stable|unstable|iojs|node had wrong exit code: expected 1, got $EXIT_CODE" 16 | 17 | nvm_validate_implicit_alias stable || die "nvm_validate_implicit_alias stable did not exit 0" 18 | nvm_validate_implicit_alias unstable || die "nvm_validate_implicit_alias unstable did not exit 0" 19 | nvm_validate_implicit_alias node || die "nvm_validate_implicit_alias node did not exit 0" 20 | nvm_validate_implicit_alias iojs || die "nvm_validate_implicit_alias iojs did not exit 0" 21 | 22 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_version: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; cleanup ; exit 1; } 4 | cleanup () { 5 | unset -f nvm_ls_current nvm_ls 6 | } 7 | 8 | . ../../../nvm.sh 9 | 10 | nvm_ls_current() { 11 | echo "CURRENT!" 12 | return 7 13 | } 14 | 15 | OUTPUT="$(nvm_version current)" 16 | EXPECTED_OUTPUT="CURRENT!" 17 | EXIT_CODE="$(nvm_version current 2>&1 >/dev/null ; echo $?)" 18 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die '"nvm_version current" did not return nvm_ls_current output' 19 | [ "_$EXIT_CODE" = "_7" ] || die '"nvm_version current" did not return nvm_ls_current exit code' 20 | 21 | OUTPUT="$(nvm_version)" 22 | EXPECTED_OUTPUT="CURRENT!" 23 | EXIT_CODE="$(nvm_version 2>&1 >/dev/null ; echo $?)" 24 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die '"nvm_version" did not return nvm_ls_current output' 25 | [ "_$EXIT_CODE" = "_7" ] || die '"nvm_version" did not return nvm_ls_current exit code' 26 | 27 | nvm_ls() { 28 | echo "line 1" 29 | echo "line 2" 30 | echo "pattern: $1" 31 | } 32 | [ "_$(nvm_version foo)" = "_pattern: foo" ] || die '"nvm_version foo" did not pass the pattern to "nvm_ls", or return the last line' 33 | [ "_$(nvm_version node)" = "_pattern: stable" ] || die '"nvm_version node" did not pass "stable" to "nvm_ls"' 34 | [ "_$(nvm_version node-)" = "_pattern: stable" ] || die '"nvm_version node-" did not pass "stable" to "nvm_ls"' 35 | 36 | nvm_ls() { echo "N/A"; } 37 | OUTPUT="$(nvm_version foo)" 38 | EXPECTED_OUTPUT="N/A" 39 | EXIT_CODE="$(nvm_version foo 2>&1 >/dev/null ; echo $?)" 40 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die '"nvm_version" did not return N/A when nvm_ls returns N/A' 41 | [ "_$EXIT_CODE" = "_3" ] || die '"nvm_version" returning N/A did not exit code with code 3' 42 | 43 | nvm_ls() { echo; } 44 | OUTPUT="$(nvm_version foo)" 45 | EXPECTED_OUTPUT="N/A" 46 | EXIT_CODE="$(nvm_version foo 2>&1 >/dev/null ; echo $?)" 47 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] || die '"nvm_version" did not return N/A when nvm_ls returns nothing' 48 | [ "_$EXIT_CODE" = "_3" ] || die '"nvm_version" returning N/A did not exit code with code 3' 49 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_version_dir: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | [ "$(nvm_version_dir)" = "$NVM_DIR/versions/node" ] || die '"nvm_version_dir" did not return new dir path' 8 | [ "$(nvm_version_dir iojs)" = "$NVM_DIR/versions/io.js" ] || die '"nvm_version_dir iojs" did not return iojs dir path' 9 | [ "$(nvm_version_dir new)" = "$(nvm_version_dir)" ] || die '"nvm_version_dir new" did not return new dir path' 10 | [ "$(nvm_version_dir old)" = "$NVM_DIR" ] || die '"nvm_version_dir old" did not return old dir path' 11 | [ "$(nvm_version_dir foo 2>&1)" = "unknown version dir" ] || die '"nvm_version_dir foo" did not error out' 12 | 13 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_version_greater: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | nvm_version_greater 0.10.0 0.2.12 || die '"nvm_version_greater 0.10.0 0.2.12" did not return true' 8 | 9 | if nvm_version_greater 0.10.0 0.20.12; then 10 | die '"nvm_version_greater 0.10.0 0.20.12" returned true' 11 | fi 12 | 13 | if nvm_version_greater 0.10.0 0.10.0; then 14 | die '"nvm_version_greater" returned false for the same two versions' 15 | fi 16 | 17 | -------------------------------------------------------------------------------- /test/fast/Unit tests/nvm_version_path: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | [ "$(nvm_version_path foo)" = "$NVM_DIR/foo" ] || die '"nvm_version_path foo" did not return correct location' 8 | [ "$(nvm_version_path 2>&1)" = "version is required" ] || die '"nvm_version_path" did not error out' 9 | [ "$(nvm_version_path v0.11.0)" = "$NVM_DIR/v0.11.0" ] || die 'old version has the wrong path' 10 | [ "$(nvm_version_path v0.12.0)" = "$NVM_DIR/versions/node/v0.12.0" ] || die 'new version has the wrong path' 11 | [ "$(nvm_version_path iojs-v0.12.0)" = "$NVM_DIR/versions/io.js/v0.12.0" ] || die 'iojs version has the wrong path' 12 | 13 | -------------------------------------------------------------------------------- /test/fast/setup: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | ( 4 | cd ../.. 5 | 6 | # Back up 7 | 8 | type setopt >/dev/null 2>&1 && setopt NULL_GLOB 9 | type shopt >/dev/null 2>&1 && shopt -s nullglob 10 | rm -Rf v* src alias 11 | mkdir src alias 12 | ) 13 | -------------------------------------------------------------------------------- /test/fast/setup_dir: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | ( 4 | cd ../.. 5 | 6 | # Back up 7 | 8 | mkdir -p bak 9 | for SRC in v* src alias; do 10 | [ -e "$SRC" ] && mv "$SRC" bak 11 | done 12 | if [ -d versions ]; then 13 | mv versions bak 14 | fi 15 | true 16 | ) 17 | -------------------------------------------------------------------------------- /test/fast/teardown: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Remove temporary files 4 | ( 5 | cd ../.. 6 | 7 | type setopt >/dev/null 2>&1 && setopt NULL_GLOB 8 | type shopt >/dev/null 2>&1 && shopt -s nullglob 9 | rm -fR v* src alias 10 | ) 11 | -------------------------------------------------------------------------------- /test/fast/teardown_dir: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | ( 4 | cd ../.. 5 | 6 | # Restore 7 | if [ -d bak ] 8 | then 9 | mv bak/* . > /dev/null 2>&1 || sleep 0s 10 | rmdir bak 11 | fi 12 | mkdir -p src alias 13 | ) 14 | -------------------------------------------------------------------------------- /test/install_script/nvm_check_global_modules: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | cleanup () { 4 | rm -rf "$npm_config_prefix/lib" >/dev/null 2>&1 5 | unset npm_config_prefix 6 | 7 | rm -f npm 8 | PATH="$ORIGINAL_PATH" 9 | 10 | unset -f setup cleanup die 11 | unset message ORIGINAL_PATH 12 | } 13 | die () { echo $@ ; cleanup ; exit 1; } 14 | 15 | NVM_ENV=testing . ../../install.sh 16 | 17 | setup () { 18 | ORIGINAL_PATH="$PATH" 19 | 20 | npm_config_prefix="$(pwd)" 21 | export npm_config_prefix 22 | mkdir -p "$npm_config_prefix/lib" 23 | } 24 | 25 | 26 | setup 27 | 28 | npm install -g nop >/dev/null || die 'nvm_check_global_modules cannot be tested because `npm` cannot install the `nop` package' 29 | message=$(nvm_check_global_modules) 30 | [ ! -z "$message" ] || die "nvm_check_global_modules should have printed a notice when npm had global modules installed" 31 | 32 | npm uninstall -g nop >/dev/null 33 | message=$(nvm_check_global_modules) 34 | [ -z "$message" ] || die "nvm_check_global_modules should not have printed a notice when npm had no global modules installed" 35 | 36 | # Faking an installation of npm 37 | mkdir -p "$npm_config_prefix/lib/node_modules/npm" 38 | cat <<'JSON' >"$npm_config_prefix/lib/node_modules/npm/package.json" 39 | { "name": "npm", "version": "0.0.1fake" } 40 | JSON 41 | 42 | message=$(nvm_check_global_modules) 43 | [ -z "$message" ] || die "nvm_check_global_modules should have not printed a notice when npm had only itself installed as a global module" 44 | 45 | # Faking the absence of npm 46 | PATH=".:$PATH" 47 | touch npm 48 | chmod +x npm 49 | 50 | message=$(nvm_check_global_modules) 51 | [ -z "$message" ] || die "nvm_check_global_modules should have not printed a notice when npm was unavailable" 52 | 53 | 54 | cleanup 55 | -------------------------------------------------------------------------------- /test/install_script/nvm_detect_profile: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | cleanup () { 4 | unset -f setup cleanup die 5 | unset _PROFILE 6 | rm -f .bashrc .bash_profile .zshrc .profile test_profile > /dev/null 2>&1 7 | } 8 | die () { echo $@ ; cleanup ; exit 1; } 9 | 10 | NVM_ENV=testing . ../../install.sh 11 | 12 | setup () { 13 | touch .bashrc 14 | touch .bash_profile 15 | touch .zshrc 16 | touch .profile 17 | touch test_profile 18 | } 19 | 20 | #Let's hack $HOME 21 | HOME="." 22 | 23 | setup 24 | 25 | #Let's force $SHELL to be bash 26 | SHELL="/bin/bash" 27 | 28 | # $SHELL is set to bash and .bashrc is there, it must be detected 29 | _PROFILE=$(nvm_detect_profile) 30 | [ "_$_PROFILE" = "_$HOME/.bashrc" ] || echo "_\$HOME/.bashrc: _$HOME/.bashrc\n" \ 31 | echo "_\$_PROFILE: _$_PROFILE\n" \ 32 | die "nvm_detect_profile didn't pick $SHELL and $HOME/.bashrc" 33 | 34 | #Let's force $SHELL to be zsh 35 | SHELL="/usr/bin/zsh" 36 | 37 | # $SHELL is set to zsh and .zshrc is there, it must be detected 38 | _PROFILE=$(nvm_detect_profile) 39 | [ "_$_PROFILE" = "_$HOME/.zshrc" ] || echo "_\$HOME/.zshrc: _$HOME/.zshrc\n" \ 40 | echo "_\$_PROFILE: _$_PROFILE\n" \ 41 | die "nvm_detect_profile didn't pick $SHELL and $HOME/.zshrc" 42 | 43 | 44 | # if we unset shell it looks for the files 45 | unset SHELL 46 | 47 | # $PROFILE points to a valid file, its path must be returned 48 | PROFILE="test_profile" 49 | _PROFILE=$(nvm_detect_profile) 50 | [ "_$_PROFILE" = "_$PROFILE" ] || echo "_\$_PROFILE: _$_PROFILE\n" \ 51 | echo "_\$PROFILE: _$PROFILE\n" \ 52 | die "nvm_detect_profile didn't pick \$PROFILE" 53 | 54 | # $PROFILE doesn't point to a valid file, its path must not be returned 55 | PROFILE="invalid_profile" 56 | _PROFILE=$(nvm_detect_profile) 57 | [ "_$_PROFILE" != "_$PROFILE" ] || echo "_\$_PROFILE: _$_PROFILE\n" \ 58 | echo "_\$PROFILE: _$PROFILE\n" \ 59 | die "nvm_detect_profile shouldn't pick \$PROFILE when it's not a valid file" 60 | 61 | 62 | # Below are tests for when $PROFILE is undefined 63 | rm test_profile 64 | unset PROFILE 65 | 66 | # It should favor .profile if file exists 67 | _PROFILE=$(nvm_detect_profile) 68 | [ "_$_PROFILE" = "_$HOME/.profile" ] || echo "_\$_PROFILE: _$_PROFILE\n" \ 69 | echo "_\$PROFILE: _$PROFILE\n" \ 70 | die "nvm_detect_profile should have selected .profile" 71 | 72 | rm .profile 73 | # Otherwise, it should favor .bashrc if file exists 74 | _PROFILE=$(nvm_detect_profile) 75 | [ "_$_PROFILE" = "_$HOME/.bashrc" ] || echo "_\$_PROFILE: _$_PROFILE\n" \ 76 | echo "_\$PROFILE: _$PROFILE\n" \ 77 | die "nvm_detect_profile should have selected .bashrc" 78 | 79 | rm .bashrc 80 | # Otherwise, it should favor .bash_profile if file exists 81 | _PROFILE=$(nvm_detect_profile) 82 | [ "_$_PROFILE" = "_$HOME/.bash_profile" ] || echo "_\$_PROFILE: _$_PROFILE\n" \ 83 | echo "_\$PROFILE: _$PROFILE\n" \ 84 | die "nvm_detect_profile should have selected .bash_profile" 85 | 86 | rm .bash_profile 87 | # Otherwise, it should favor .zshrc if file exists 88 | _PROFILE=$(nvm_detect_profile) 89 | [ "_$_PROFILE" = "_$HOME/.zshrc" ] || echo "_\$_PROFILE: _$_PROFILE\n" \ 90 | echo "_\$PROFILE: _$PROFILE\n" \ 91 | die "nvm_detect_profile should have selected .zshrc" 92 | 93 | rm .zshrc 94 | # It should be empty if none is found 95 | _PROFILE=$(nvm_detect_profile) 96 | [ -z "$_PROFILE" ] || echo "_\$_PROFILE: _$_PROFILE\n" \ 97 | echo "_\$PROFILE: _$PROFILE\n" \ 98 | die "nvm_detect_profile should have echo'ed an empty value" 99 | 100 | 101 | cleanup 102 | -------------------------------------------------------------------------------- /test/install_script/nvm_do_install: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | NVM_ENV=testing . ../../install.sh 6 | 7 | #nvm_do_install is available 8 | type nvm_do_install > /dev/null 2>&1 || die 'nvm_do_install is not available' 9 | 10 | -------------------------------------------------------------------------------- /test/install_script/nvm_reset: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | cleanup () { 4 | unset -f safe_type die cleanup 5 | } 6 | die () { echo $@ ; cleanup ; exit 1; } 7 | 8 | NVM_ENV=testing . ../../install.sh 9 | 10 | safe_type() { 11 | type "$1" > /dev/null 2>&1 12 | } 13 | 14 | # Check nvm_reset exists 15 | safe_type nvm_reset || die 'nvm_reset is not available' 16 | 17 | # Apply nvm_reset 18 | nvm_reset || die 'nvm_reset failed' 19 | 20 | # The names should be unset 21 | ! safe_type nvm_do_install || die 'nvm_do_install is still available' 22 | ! safe_type nvm_has || die 'nvm_has is still available' 23 | ! safe_type nvm_download || die 'nvm_download is still available' 24 | ! safe_type install_nvm_as_script || die 'install_nvm_as_script is still available' 25 | ! safe_type install_nvm_from_git || die 'install_nvm_from_git is still available' 26 | ! safe_type nvm_reset || die 'nvm_reset is still available' 27 | ! safe_type nvm_detect_profile || die 'nvm_detect_profile is still available' 28 | 29 | cleanup 30 | 31 | -------------------------------------------------------------------------------- /test/install_script/nvm_source: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | cleanup () { 4 | unset -f die cleanup 5 | unset NVM_SOURCE out 6 | } 7 | die () { echo $@ ; cleanup ; exit 1; } 8 | 9 | NVM_ENV=testing . ../../install.sh 10 | 11 | # nvm_source with no parameter returns the git endpoint 12 | echo $(nvm_source) | grep "nvm.git$" > /dev/null || die "nvm_source without arguments should return the location of the git repo" 13 | 14 | # nvm_source with git parameter returns the location of the nvm repo 15 | echo $(nvm_source "git") | grep "nvm.git$" > /dev/null || die "nvm_source without arguments should return the location of the git repo" 16 | 17 | # nvm_source with script parameter returns the location of nvm.sh 18 | echo $(nvm_source "script") | grep "nvm.sh$" > /dev/null || die "nvm_source \"script\" should return the location of nvm.sh" 19 | 20 | # nvm_source with script-nvm-exec parameter returns the location of nvm-exec 21 | echo $(nvm_source "script-nvm-exec") | grep "nvm-exec$" > /dev/null || die "nvm_source \"script-nvm-exec\" should return the location of nvm.sh" 22 | 23 | # nvm_source with any other parameter errors out and exits 24 | nvm_source "anything" 2> /dev/null && die "nvm_source with invalid parameter should exit" 25 | out=$(nvm_source "anything" 2>&1 >/dev/null) || : #Saving the process here 26 | [ -z "$out" ] && die "nvm_source with invalid parameter should error out" 27 | 28 | #nvm_source should always return NVM_SOURCE no matter the parameters 29 | NVM_SOURCE="my_location" 30 | out=$(nvm_source) 31 | [ "_$out" = "_my_location" ] || die "nvm_source without arguments should have returned \$NVM_SOURCE. Got \"$out\"" 32 | out=$(nvm_source "git") 33 | [ "_$out" = "_my_location" ] || die "nvm_source git should have returned \$NVM_SOURCE. Got \"$out\"" 34 | out=$(nvm_source "script") 35 | [ "_$out" = "_my_location" ] || die "nvm_source script should have returned \$NVM_SOURCE. Got \"$out\"" 36 | out=$(nvm_source "anything") 37 | [ "_$out" = "_my_location" ] || die "nvm_source script should have returned \$NVM_SOURCE. Got \"$out\"" 38 | 39 | cleanup 40 | 41 | -------------------------------------------------------------------------------- /test/installation/io.js/install already installed uses it: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | [ "$(nvm install invalid.invalid 2>&1)" = "Version 'invalid.invalid' not found - try \`nvm ls-remote\` to browse available versions." ] || die "nvm installing an invalid version did not print a nice error message" 8 | 9 | # Remove the stuff we're clobbering. 10 | [ -e ../../../versions/io.js/v1.0.0 ] && rm -R ../../../versions/io.js/v1.0.0 11 | [ -e ../../../versions/io.js/v1.0.1 ] && rm -R ../../../versions/io.js/v1.0.1 12 | 13 | # Install from binary 14 | nvm install iojs-v1.0.0 15 | nvm install iojs-v1.0.1 16 | 17 | nvm use iojs-v1.0.0 18 | 19 | node --version | grep v1.0.0 || die "precondition failed: iojs node doesn't start at v1.0.0" 20 | iojs --version | grep v1.0.0 || die "precondition failed: iojs binary doesn't start at v1.0.0" 21 | 22 | nvm install iojs-v1.0.1 23 | 24 | node --version | grep v1.0.1 || die "nvm install on already installed version doesn't use it (node binary)" 25 | iojs --version | grep v1.0.1 || die "nvm install on already installed version doesn't use it (iojs binary)" 26 | 27 | -------------------------------------------------------------------------------- /test/installation/io.js/install from binary: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | NVM_TEST_VERSION="v1.0.0" 8 | NVM_PREFIXED_TEST_VERSION="iojs-$NVM_TEST_VERSION" 9 | 10 | # Remove the stuff we're clobbering. 11 | [ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION 12 | 13 | # Install from binary 14 | nvm install $NVM_PREFIXED_TEST_VERSION || die "install $NVM_PREFIXED_TEST_VERSION failed" 15 | 16 | # Check 17 | [ -d ../../../versions/io.js/$NVM_TEST_VERSION ] 18 | nvm run $NVM_PREFIXED_TEST_VERSION --version | grep $NVM_TEST_VERSION || die "'nvm run $NVM_PREFIXED_TEST_VERSION --version | grep $NVM_TEST_VERSION' failed" 19 | 20 | -------------------------------------------------------------------------------- /test/installation/io.js/install two versions and use the latest one: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | # Remove the stuff we're clobbering. 8 | [ -e ../../../versions/io.js/v1.0.0 ] && rm -R ../../../versions/io.js/v1.0.0 9 | [ -e ../../../versions/io.js/v1.0.1 ] && rm -R ../../../versions/io.js/v1.0.1 10 | 11 | # Install from binary 12 | nvm install iojs-v1.0.0 || die "'nvm install iojs-v1.0.0' failed" 13 | nvm i iojs-v1.0.1 || die "'nvm i iojs-v1.0.1' failed" 14 | 15 | # Check 16 | [ -d ../../../versions/io.js/v1.0.0 ] || die "iojs v1.0.0 didn't exist" 17 | [ -d ../../../versions/io.js/v1.0.1 ] || die "iojs v1.0.1 didn't exist" 18 | 19 | # Use the first one 20 | nvm use iojs-1.0.0 || die "'nvm use iojs-1.0.0' failed" 21 | 22 | # Use the latest one 23 | nvm use iojs-1 || die "'nvm use iojs-1' failed" 24 | [ "_$(node --version)" = "_v1.0.1" ] || die "'node --version' was not v1.0.1, got: $(node --version)" 25 | [ "_$(iojs --version)" = "_v1.0.1" ] || die "'iojs --version' was not v1.0.1, got: $(iojs --version)" 26 | 27 | -------------------------------------------------------------------------------- /test/installation/io.js/install version specified in .nvmrc from binary: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | NVM_TEST_VERSION=v1.0.0 8 | NVM_PREFIXED_TEST_VERSION="iojs-$NVM_TEST_VERSION" 9 | VERSION_PATH="../../../versions/io.js/$NVM_TEST_VERSION" 10 | 11 | # Remove the stuff we're clobbering. 12 | [ -e $VERSION_PATH ] && rm -R $VERSION_PATH 13 | 14 | # Install from binary 15 | echo "$NVM_PREFIXED_TEST_VERSION" > .nvmrc 16 | 17 | nvm install || die "'nvm install' failed" 18 | 19 | # Check 20 | [ -d $VERSION_PATH ] || die "./$VERSION_PATH did not exist" 21 | nvm run $NVM_PREFIXED_TEST_VERSION --version | grep $NVM_TEST_VERSION \ 22 | || "'nvm run $NVM_PREFIXED_TEST_VERSION --version | grep $NVM_TEST_VERSION' failed" 23 | 24 | 25 | -------------------------------------------------------------------------------- /test/installation/io.js/install while reinstalling packages: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | # Remove the stuff we're clobbering. 8 | [ -e ../../../versions/io.js/v1.0.0 ] && rm -R ../../../versions/io.js/v1.0.0 9 | [ -e ../../../versions/io.js/v1.0.1 ] && rm -R ../../../versions/io.js/v1.0.1 10 | 11 | # Install from binary 12 | nvm install iojs-v1.0.0 13 | 14 | # Check 15 | [ -d ../../../versions/io.js/v1.0.0 ] || die "nvm install iojs-v1.0.0 didn't install" 16 | 17 | node --version | grep v1.0.0 > /dev/null || die "nvm install didn't use iojs-v1.0.0" 18 | 19 | npm install -g object-is@0.0.0 || die "npm install -g object-is failed" 20 | npm list --global | grep object-is > /dev/null || die "object-is isn't installed" 21 | 22 | nvm ls iojs-1 | grep iojs-v1.0.0 > /dev/null || die "nvm ls iojs-1 didn't show iojs-v1.0.0" 23 | 24 | nvm install iojs-v1.0.1 --reinstall-packages-from=iojs-1.0.0 || die "nvm install iojs-v1.0.1 --reinstall-packages-from=iojs-1.0.0 failed" 25 | 26 | [ -d ../../../versions/io.js/v1.0.1 ] || die "nvm install iojs-v1.0.1 didn't install" 27 | 28 | nvm use iojs-1 29 | node --version | grep v1.0.1 > /dev/null || die "nvm use iojs-1 didn't use v1.0.1" 30 | 31 | npm list --global | grep object-is > /dev/null || die "object-is isn't installed" 32 | 33 | -------------------------------------------------------------------------------- /test/installation/io.js/nvm install v1 works: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | NVM_VERSION="v1" 8 | NVM_PREFIXED_TEST_VERSION="$(nvm ls-remote "$NVM_VERSION" | tail -n1 | sed 's/^[ ]*//;s/[ ]*$//')" 9 | NVM_TEST_VERSION="$(nvm_strip_iojs_prefix "$NVM_PREFIXED_TEST_VERSION")" 10 | 11 | # Remove the stuff we're clobbering. 12 | [ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION 13 | 14 | # Install from binary 15 | nvm install "$NVM_VERSION" || die "nvm install $NVM_VERSION failed" 16 | 17 | # Check 18 | [ -d ../../../versions/io.js/$NVM_TEST_VERSION ] 19 | nvm run $NVM_PREFIXED_TEST_VERSION --version | grep $NVM_TEST_VERSION || die "'nvm run $NVM_PREFIXED_TEST_VERSION --version | grep $NVM_TEST_VERSION' failed" 20 | 21 | -------------------------------------------------------------------------------- /test/installation/io.js/setup_dir: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ -f ".nvmrc" ]; then 4 | mv .nvmrc .nvmrc.bak 5 | fi 6 | 7 | -------------------------------------------------------------------------------- /test/installation/io.js/teardown_dir: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | nvm deactivate 5 | nvm uninstall iojs-v1.0.0 6 | 7 | if [ -f ".nvmrc" ]; then 8 | rm .nvmrc 9 | fi 10 | 11 | if [ -f ".nvmrc.bak" ]; then 12 | mv .nvmrc.bak .nvmrc 13 | fi 14 | 15 | -------------------------------------------------------------------------------- /test/installation/node/install already installed uses it: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | [ "$(nvm install invalid.invalid 2>&1)" = "Version 'invalid.invalid' not found - try \`nvm ls-remote\` to browse available versions." ] || die "nvm installing an invalid version did not print a nice error message" 8 | 9 | # Remove the stuff we're clobbering. 10 | [ -e ../../../v0.9.7 ] && rm -R ../../../v0.9.7 11 | [ -e ../../../v0.9.12 ] && rm -R ../../../v0.9.12 12 | 13 | # Install from binary 14 | nvm install 0.9.7 15 | nvm install 0.9.12 16 | 17 | nvm use 0.9.7 18 | 19 | node --version | grep v0.9.7 || die "precondition failed: node doesn't start at 0.9.7" 20 | 21 | nvm install 0.9.12 22 | 23 | node --version | grep v0.9.12 || die "nvm install on already installed version doesn't use it" 24 | 25 | -------------------------------------------------------------------------------- /test/installation/node/install from binary: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | NVM_TEST_VERSION=v0.10.7 8 | 9 | # Remove the stuff we're clobbering. 10 | [ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION 11 | 12 | # Install from binary 13 | nvm install $NVM_TEST_VERSION || die "install $NVM_TEST_VERSION failed" 14 | 15 | # Check 16 | [ -d ../../../$NVM_TEST_VERSION ] 17 | nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION || die "'nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION' failed" 18 | 19 | -------------------------------------------------------------------------------- /test/installation/node/install from source: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | NVM_TEST_VERSION=v0.10.7 8 | 9 | # Remove the stuff we're clobbering. 10 | [ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION 11 | 12 | # Install from source 13 | nvm install -s $NVM_TEST_VERSION || die "'nvm install -s $NVM_TEST_VERSION' failed" 14 | 15 | # Check 16 | [ -d ../../../$NVM_TEST_VERSION ] 17 | nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION || "'nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION' failed" 18 | 19 | -------------------------------------------------------------------------------- /test/installation/node/install from source implicitly: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | NVM_TEST_VERSION=v0.8.5 8 | 9 | # Remove the stuff we're clobbering. 10 | [ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION 11 | 12 | # Install from source implicitly (v0.8.6 is when binaries started) 13 | nvm install $NVM_TEST_VERSION || die "'nvm install -s $NVM_TEST_VERSION' failed" 14 | 15 | # Check 16 | [ -d ../../../$NVM_TEST_VERSION ] 17 | nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION || "'nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION' failed" 18 | 19 | -------------------------------------------------------------------------------- /test/installation/node/install from source without V8 snapshot for ARM: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | NVM_TEST_VERSION=v0.10.7 8 | 9 | # Remove the stuff we're clobbering. 10 | [ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION 11 | 12 | # Fake ARM arch 13 | nvm_get_arch() { 14 | echo "armv7l" 15 | } 16 | 17 | # Install from source 18 | nvm install -s $NVM_TEST_VERSION || die "'nvm install -s $NVM_TEST_VERSION' failed" 19 | 20 | # Check Install 21 | [ -d ../../../$NVM_TEST_VERSION ] 22 | node --version | grep $NVM_TEST_VERSION || "'node --version | grep $NVM_TEST_VERSION' failed" 23 | 24 | # Check V8 snapshot isn't compiled 25 | node -p "if(! process.config.variables.v8_use_snapshot) { console.log('no-snapshot'); }" | grep "no-snapshot" || "'node -p \"if(! process.config.variables.v8_use_snapshot) { console.log('no-snapshot'); }\" | grep \"no-snapshot\"' failed" -------------------------------------------------------------------------------- /test/installation/node/install two versions and use the latest one: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | # Remove the stuff we're clobbering. 8 | [ -e ../../../v0.9.7 ] && rm -R ../../../v0.9.7 9 | [ -e ../../../v0.9.12 ] && rm -R ../../../v0.9.12 10 | 11 | # Install from binary 12 | nvm install 0.9.7 || die "'nvm install 0.9.7' failed" 13 | nvm i 0.9.12 || die "'nvm i 0.9.12' failed" 14 | 15 | # Check 16 | [ -d ../../../v0.9.7 ] || die "v0.9.7 didn't exist" 17 | [ -d ../../../v0.9.12 ] || die "v0.9.12 didn't exist" 18 | 19 | # Use the first one 20 | nvm use 0.9.7 || die "'nvm use 0.9.7' failed" 21 | 22 | # Use the latest one 23 | nvm use 0.9 || die "'nvm use 0.9' failed" 24 | node --version | grep v0.9.12 || die "'node --version' was not v0.9.12, got: $(node --version)" 25 | 26 | -------------------------------------------------------------------------------- /test/installation/node/install version specified in .nvmrc from binary: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | NVM_TEST_VERSION=v0.10.7 8 | 9 | # Remove the stuff we're clobbering. 10 | [ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION 11 | 12 | # Install from binary 13 | echo "$NVM_TEST_VERSION" > .nvmrc 14 | 15 | nvm install || die "'nvm install' failed" 16 | 17 | # Check 18 | [ -d ../../../$NVM_TEST_VERSION ] || die "./$NVM_TEST_VERSION did not exist" 19 | nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION \ 20 | || "'nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION' failed" 21 | 22 | 23 | -------------------------------------------------------------------------------- /test/installation/node/install version specified in .nvmrc from source: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | NVM_TEST_VERSION=v0.10.7 8 | 9 | # Remove the stuff we're clobbering. 10 | [ -e ../../../$NVM_TEST_VERSION ] && rm -R ../../../$NVM_TEST_VERSION 11 | 12 | # Install from binary 13 | echo "$NVM_TEST_VERSION" > .nvmrc 14 | 15 | nvm install -s || "'nvm install -s' failed" 16 | 17 | # Check 18 | [ -d ../../../$NVM_TEST_VERSION ] || die "$NVM_TEST_VERSION did not exist" 19 | nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION \ 20 | || die "'nvm run $NVM_TEST_VERSION --version | grep $NVM_TEST_VERSION' failed" 21 | 22 | 23 | -------------------------------------------------------------------------------- /test/installation/node/install while reinstalling packages: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | # Remove the stuff we're clobbering. 8 | [ -e ../../../v0.9.7 ] && rm -R ../../../v0.9.7 9 | [ -e ../../../v0.9.12 ] && rm -R ../../../v0.9.12 10 | 11 | # Install from binary 12 | nvm install 0.9.7 13 | 14 | # Check 15 | [ -d ../../../v0.9.7 ] || die "nvm install 0.9.7 didn't install" 16 | 17 | nvm use 0.9.7 18 | 19 | node --version | grep v0.9.7 > /dev/null || die "nvm use 0.9.7 failed" 20 | 21 | npm install -g object-is@0.0.0 || die "npm install -g object-is failed" 22 | npm list --global | grep object-is > /dev/null || die "object-is isn't installed" 23 | 24 | nvm ls 0.9 | grep v0.9.7 > /dev/null || die "nvm ls 0.9 didn't show v0.9.7" 25 | 26 | nvm install 0.9.12 --reinstall-packages-from=0.9 || die "nvm install 0.9.12 --reinstall-packages-from=0.9 failed" 27 | 28 | [ -d ../../../v0.9.12 ] || die "nvm install 0.9.12 didn't install" 29 | 30 | nvm use 0.9 31 | node --version | grep v0.9.12 > /dev/null || die "nvm ls 0.9 didn't use v0.9.12" 32 | 33 | npm list --global | grep object-is > /dev/null || die "object-is isn't installed" 34 | 35 | -------------------------------------------------------------------------------- /test/installation/node/setup_dir: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ -f ".nvmrc" ]; then 4 | mv .nvmrc .nvmrc.bak 5 | fi 6 | 7 | -------------------------------------------------------------------------------- /test/installation/node/teardown_dir: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | nvm deactivate 5 | nvm uninstall v0.10.7 6 | 7 | if [ -f ".nvmrc" ]; then 8 | rm .nvmrc 9 | fi 10 | 11 | if [ -f ".nvmrc.bak" ]; then 12 | mv .nvmrc.bak .nvmrc 13 | fi 14 | 15 | -------------------------------------------------------------------------------- /test/slow/Running "nvm current" should display current nvm environment.: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../nvm.sh 6 | 7 | nvm install 0.10 8 | 9 | [ "$(nvm current)" = "$(node -v)" ] || die "Failed to find current version: got \"$(nvm current)\", expected \"$(node -v)\"" 10 | -------------------------------------------------------------------------------- /test/slow/node 0.6.21 should install 0.6.21-pre: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../nvm.sh 6 | 7 | nvm install 0.6.21 || die 'v0.6.21 installation failed' 8 | [ "_$(node -v)" = "_v0.6.21-pre" ] || die "v0.6.21-pre not installed with v0.6.21, got $(node -v)" 9 | [ "_$(nvm current)" = "_v0.6.21" ] || die "v0.6.21-pre not reported as v0.6.21, got $(nvm current)" 10 | 11 | -------------------------------------------------------------------------------- /test/slow/nvm exec/Running "nvm exec 0.x" should work: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | nvm use 0.10 8 | NPM_VERSION_TEN="$(npm --version)" 9 | 10 | nvm use 0.11.7 && [ "$(node --version)" = "v0.11.7" ] || die "\`nvm use\` failed!" 11 | 12 | [ "$(nvm exec 0.10 npm --version | tail -1)" = "$NPM_VERSION_TEN" ] || die "`nvm exec` failed to run with the correct version" 13 | 14 | -------------------------------------------------------------------------------- /test/slow/nvm exec/Running "nvm exec" should pick up .nvmrc version: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | nvm use 0.10.7 8 | NPM_VERSION_TEN="$(npm --version)" 9 | 10 | nvm use 0.11.7 && [ "$(node --version)" = "v0.11.7" ] || die "\`nvm use\` failed!" 11 | 12 | echo "0.10.7" > .nvmrc 13 | 14 | [ "$(nvm exec npm --version | tail -1)" = "$NPM_VERSION_TEN" ] || die "\`nvm exec\` failed to run with the .nvmrc version" 15 | 16 | [ "$(nvm exec npm --version | head -1)" = "Found '$PWD/.nvmrc' with version <0.10.7>" ] || die "\`nvm exec\` failed to print out the \"found in .nvmrc\" message" 17 | 18 | -------------------------------------------------------------------------------- /test/slow/nvm exec/setup_dir: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | nvm install 0.10.7 5 | nvm install 0.11.7 6 | 7 | if [ -f ".nvmrc" ]; then 8 | mv .nvmrc .nvmrc.bak 9 | fi 10 | 11 | -------------------------------------------------------------------------------- /test/slow/nvm exec/teardown_dir: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | nvm deactivate 5 | nvm uninstall v0.10.7 6 | nvm uninstall v0.11.7 7 | 8 | rm .nvmrc 9 | 10 | if [ -f ".nvmrc.bak" ]; then 11 | mv .nvmrc.bak .nvmrc 12 | fi 13 | 14 | -------------------------------------------------------------------------------- /test/slow/nvm reinstall-packages/Running "nvm copy-packages $(nvm ls current)" should error out: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | nvm use 0.10.28 > /dev/null 8 | 9 | EXPECTED_MSG="Can not reinstall packages from the current version of node." 10 | ACTUAL_MSG="$(nvm reinstall-packages 0.10.28 2>&1 > /dev/null)" 11 | [ "~$ACTUAL_MSG" = "~$EXPECTED_MSG" ] || die "'nvm use 0.10.28 && nvm reinstall-packages 0.10.28' did not fail with the right message: '$ACTUAL_MESSAGE'" 12 | 13 | EXPECTED_ERROR_CODE="2" 14 | ACTUAL_ERROR_CODE="$(nvm reinstall-packages 0.10.28 > /dev/null 2>&1 ; echo $?)" 15 | [ "~$ACTUAL_ERROR_CODE" = "~$EXPECTED_ERROR_CODE" ] || die "'nvm use 0.10.28 && nvm reinstall-packages 0.10.28' did not fail with the right error code: expected '$EXPECTED_ERROR_CODE', got '$ACTUAL_ERROR_CODE'" 16 | 17 | -------------------------------------------------------------------------------- /test/slow/nvm reinstall-packages/setup_dir: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | nvm install 0.10.28 5 | nvm install 0.10.29 6 | 7 | if [ -f ".nvmrc" ]; then 8 | mv .nvmrc .nvmrc.bak 9 | fi 10 | 11 | -------------------------------------------------------------------------------- /test/slow/nvm reinstall-packages/should work as expected: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo "$@" ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | nvm exec 0.10.28 npm install -g npm@~1.4.11 # this is required because before 1.4.10, npm ls doesn't indicated linked packages 8 | nvm exec 0.10.29 npm install -g npm@~1.4.11 # this is required because before 1.4.10, npm ls doesn't indicated linked packages 9 | 10 | nvm use 0.10.28 11 | (cd test-npmlink && npm link) 12 | 13 | EXPECTED_PACKAGES="autoprefixer bower david eslint grunt-cli grunth-cli http-server jshint marked node-gyp npmlist recursive-blame spawn-sync test-npmlink uglify-js yo" 14 | 15 | echo "$EXPECTED_PACKAGES" | sed -e 's/test-npmlink //' | xargs npm install -g --quiet 16 | 17 | get_packages() { 18 | npm list -g --depth=0 | \sed -e '1 d' -e 's/^.* \(.*\)@.*/\1/' -e '/^npm$/ d' | xargs 19 | } 20 | 21 | nvm use 0.10.29 22 | ORIGINAL_PACKAGES=$(get_packages) 23 | 24 | nvm reinstall-packages 0.10.28 25 | FINAL_PACKAGES=$(get_packages) 26 | 27 | [ "$FINAL_PACKAGES" = "$EXPECTED_PACKAGES" ] || die "final packages ($FINAL_PACKAGES) did not match expected packages ($EXPECTED_PACKAGES)" 28 | [ "$ORIGINAL_PACKAGES" != "$FINAL_PACKAGES" ] || die "original packages matched final packages ($ORIGINAL_PACKAGES)" 29 | 30 | [ $(test-npmlink) = 'ok' ] || die "failed to run test-npmlink" 31 | -------------------------------------------------------------------------------- /test/slow/nvm reinstall-packages/teardown_dir: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | nvm uninstall v0.10.28 5 | nvm uninstall v0.10.29 6 | 7 | rm -f .nvmrc 8 | 9 | if [ -f ".nvmrc.bak" ]; then 10 | mv .nvmrc.bak .nvmrc 11 | fi 12 | 13 | -------------------------------------------------------------------------------- /test/slow/nvm reinstall-packages/test-npmlink/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | console.log('ok') 3 | -------------------------------------------------------------------------------- /test/slow/nvm reinstall-packages/test-npmlink/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test-npmlink", 3 | "version": "0.0.1", 4 | "description": "Stub package for testing npm link", 5 | "bin": { 6 | "test-npmlink": "index.js" 7 | }, 8 | "author": "hax", 9 | "license": "ISC" 10 | } 11 | -------------------------------------------------------------------------------- /test/slow/nvm run/Running "nvm run --harmony --version" should work: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | nvm run 0.10.7 --harmony --version 8 | [ "_$(nvm run 0.10.7 --harmony --version 2>/dev/null | tail -1)" = "_v0.10.7" ] || die "\`nvm run --harmony --version\` failed to run with the correct version" 9 | 10 | -------------------------------------------------------------------------------- /test/slow/nvm run/Running "nvm run 0.x" should error out sensibly when 0.x is not installed: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | 4 | die () { echo $@ ; exit 1; } 5 | 6 | . ../../../nvm.sh 7 | 8 | [ "$(nvm run 0.2 --version 2>&1)" = "v0.2 is not installed yet" ] || die "\`nvm run\` with an uninstalled node version failed to error out correctly" 9 | [ "$(nvm run iojs-0.2 --version 2>&1)" = "iojs-v0.2 is not installed yet" ] || die "\`nvm run\` with an uninstalled iojs version failed to error out correctly" 10 | -------------------------------------------------------------------------------- /test/slow/nvm run/Running "nvm run 0.x" should work: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | 4 | die () { echo $@ ; exit 1; } 5 | 6 | . ../../../nvm.sh 7 | 8 | [ "$(nvm run 0.10.7 --version | tail -1)" = "v0.10.7" ] || die "\`nvm run\` failed to run with the correct version" 9 | 10 | -------------------------------------------------------------------------------- /test/slow/nvm run/Running "nvm run" should pick up .nvmrc version: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | 4 | die () { echo $@ ; exit 1; } 5 | 6 | . ../../../nvm.sh 7 | 8 | echo "0.10.7" > .nvmrc 9 | 10 | [ "$(nvm run --version | tail -1)" = "v0.10.7" ] || die "\`nvm run\` failed to run with the .nvmrc version" 11 | 12 | [ "$(nvm run --version | head -1)" = "Found '$PWD/.nvmrc' with version <0.10.7>" ] || die "\`nvm run\` failed to print out the \"found in .nvmrc\" message" 13 | 14 | -------------------------------------------------------------------------------- /test/slow/nvm run/setup_dir: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | nvm install 0.10.7 5 | 6 | if [ -f ".nvmrc" ]; then 7 | mv .nvmrc .nvmrc.bak 8 | fi 9 | 10 | -------------------------------------------------------------------------------- /test/slow/nvm run/teardown_dir: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | nvm deactivate 5 | nvm uninstall v0.10.7 6 | 7 | rm .nvmrc 8 | 9 | if [ -f ".nvmrc.bak" ]; then 10 | mv .nvmrc.bak .nvmrc 11 | fi 12 | 13 | -------------------------------------------------------------------------------- /test/slow/nvm use/Running "nvm use iojs" uses latest io.js version: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | nvm deactivate 2>&1 >/dev/null || die 'deactivate failed' 8 | 9 | nvm use iojs || die 'nvm use iojs failed' 10 | OUTPUT="$(nvm current)" 11 | EXPECTED_OUTPUT="iojs-v1.0.1" 12 | 13 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \ 14 | || die "'nvm use iojs' + 'nvm current' did not output '$EXPECTED_OUTPUT'; got '$OUTPUT'" 15 | 16 | OUTPUT="$(nvm use --silent iojs)" 17 | EXPECTED_OUTPUT="" 18 | 19 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \ 20 | || die "'nvm use --silent iojs' output was not silenced '$EXPECTED_OUTPUT'; got '$OUTPUT'" 21 | -------------------------------------------------------------------------------- /test/slow/nvm use/Running "nvm use node" uses latest stable node version: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | nvm deactivate 2>&1 >/dev/null || die 'deactivate failed' 8 | 9 | nvm use node || die 'nvm use node failed' 10 | OUTPUT="$(nvm current)" 11 | EXPECTED_OUTPUT="$(nvm_version stable)" 12 | 13 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \ 14 | || die "'nvm use node' + 'nvm current' did not output '$EXPECTED_OUTPUT'; got '$OUTPUT'" 15 | 16 | OUTPUT="$(nvm use --silent node)" 17 | EXPECTED_OUTPUT="" 18 | 19 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \ 20 | || die "'nvm use --silent node' output was not silenced '$EXPECTED_OUTPUT'; got '$OUTPUT'" 21 | -------------------------------------------------------------------------------- /test/slow/nvm use/Running "nvm use v1.0.0" uses iojs-v1.0.0 iojs version: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | . ../../../nvm.sh 6 | 7 | nvm deactivate 2>&1 >/dev/null || die 'deactivate failed' 8 | 9 | nvm use 'v1.0.0' || die 'nvm use v1.0.0 failed' 10 | OUTPUT="$(nvm current)" 11 | EXPECTED_OUTPUT="$(nvm_version v1.0.0)" 12 | 13 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \ 14 | || die "'nvm use v1.0.0' + 'nvm current' did not output '$EXPECTED_OUTPUT'; got '$OUTPUT'" 15 | 16 | OUTPUT="$(nvm use --silent 'v1.0.0')" 17 | EXPECTED_OUTPUT="" 18 | 19 | [ "_$OUTPUT" = "_$EXPECTED_OUTPUT" ] \ 20 | || die "'nvm use --silent v1.0.0' output was not silenced '$EXPECTED_OUTPUT'; got '$OUTPUT'" 21 | -------------------------------------------------------------------------------- /test/slow/nvm use/setup_dir: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | 5 | mkdir -p ../../../.nvm_use_bak 6 | if [ -d "../../../v*" ]; then 7 | mv "../../../v*" ../../../.nvm_use_bak/ 8 | fi 9 | 10 | for VERSION in "0.8.7" "0.9.1" "0.10.1" "0.11.1"; do 11 | nvm install "v$VERSION" 12 | done 13 | 14 | for VERSION in "1.0.0" "1.0.1"; do 15 | nvm install "iojs-v$VERSION" 16 | done 17 | -------------------------------------------------------------------------------- /test/slow/nvm use/teardown_dir: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ../../../nvm.sh 4 | 5 | for VERSION in "0.8.7" "0.9.1" "0.10.1" "0.11.1"; do 6 | nvm uninstall "$VERSION" 7 | done 8 | 9 | for VERSION in "1.0.0" "1.0.1"; do 10 | nvm uninstall "iojs-v$VERSION" 11 | done 12 | 13 | if [ -d ../../../.nvm_use_bak/* ]; then 14 | mv ../../../.nvm_use_bak/* ../../../ 15 | fi 16 | rmdir ../../../.nvm_use_bak 17 | -------------------------------------------------------------------------------- /test/slow/nvm_get_latest/nvm_get_latest: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; cleanup ; exit 1; } 4 | 5 | cleanup() { 6 | unset -f curl wget nvm_has 7 | } 8 | 9 | . ../../../nvm.sh 10 | 11 | EXPECTED_VERSION="v12.3.456" 12 | URL="https://github.com/creationix/nvm/releases/tag/$EXPECTED_VERSION" 13 | EXPECTED_CURL_ARGS="-q -w %{url_effective}\n -L -s -S http://latest.nvm.sh -o /dev/null" 14 | EXPECTED_WGET_ARGS="http://latest.nvm.sh --server-response -O /dev/null" 15 | 16 | curl() { 17 | if [ "_$*" != "_$EXPECTED_CURL_ARGS" ]; then 18 | echo >&2 "expected args ($EXPECTED_CURL_ARGS), got ($*)" 19 | return 1 20 | else 21 | echo $URL 22 | fi 23 | } 24 | wget() { 25 | if [ "_$*" != "_$EXPECTED_WGET_ARGS" ]; then 26 | echo >&2 "expected args ($EXPECTED_WGET_ARGS), got ($*)" 27 | return 1 28 | else 29 | local WGET_CONTENTS 30 | WGET_CONTENTS=" 31 | --2014-12-21 18:11:14-- http://latest.nvm.sh/ 32 | Resolving latest.nvm.sh... 50.31.209.229 33 | Connecting to latest.nvm.sh|50.31.209.229|:80... connected. 34 | HTTP request sent, awaiting response... 35 | HTTP/1.1 301 Moved Permanently 36 | Location: https://github.com/creationix/nvm/releases/latest 37 | Content-Type: text/html; charset=utf-8 38 | Content-Length: 84 39 | Date: Mon, 22 Dec 2014 02:11:15 GMT 40 | Location: https://github.com/creationix/nvm/releases/latest [following] 41 | --2014-12-21 18:11:15-- https://github.com/creationix/nvm/releases/latest 42 | Resolving github.com... 192.30.252.130 43 | Connecting to github.com|192.30.252.130|:443... connected. 44 | HTTP request sent, awaiting response... 45 | HTTP/1.1 302 Found 46 | Server: GitHub.com 47 | Date: Mon, 22 Dec 2014 02:11:15 GMT 48 | Content-Type: text/html; charset=utf-8 49 | Transfer-Encoding: chunked 50 | Status: 302 Found 51 | X-XSS-Protection: 1; mode=block 52 | X-Frame-Options: deny 53 | Content-Security-Policy: default-src *; script-src assets-cdn.github.com collector-cdn.github.com; object-src assets-cdn.github.com; style-src 'self' 'unsafe-inline' 'unsafe-eval' assets-cdn.github.com; img-src 'self' data: assets-cdn.github.com identicons.github.com www.google-analytics.com collector.githubapp.com *.githubusercontent.com *.gravatar.com *.wp.com; media-src 'none'; frame-src 'self' render.githubusercontent.com gist.github.com www.youtube.com player.vimeo.com checkout.paypal.com; font-src assets-cdn.github.com; connect-src 'self' ghconduit.com:25035 live.github.com uploads.github.com www.google-analytics.com s3.amazonaws.com 54 | Cache-Control: no-cache 55 | Vary: X-PJAX 56 | Location: $URL 57 | X-UA-Compatible: IE=Edge,chrome=1 58 | Set-Cookie: logged_in=no; domain=.github.com; path=/; expires=Fri, 22-Dec-2034 02:11:15 GMT; secure; HttpOnly 59 | Set-Cookie: _gh_sess=eyJzZXNzaW9uX2lkIjoiNTMzNGNjZWUxM2VhZjNhN2M3MzIwZWUxNGYwNzhmNDkiLCJzcHlfcmVwbyI6ImNyZWF0aW9uaXgvbnZtIiwic3B5X3JlcG9fYXQiOjE0MTkyMTQyNzV9--e2fa4cf5305d61aa58c0e0bf21fdb335a9660dcf; path=/; secure; HttpOnly 60 | X-Request-Id: 4b99bf200157dd845f76ab83e4093acc 61 | X-Runtime: 0.030872 62 | X-Rack-Cache: miss 63 | X-GitHub-Request-Id: 45B56780:3913:880EF6:54977DC3 64 | Strict-Transport-Security: max-age=31536000; includeSubdomains; preload 65 | X-Content-Type-Options: nosniff 66 | Vary: Accept-Encoding 67 | X-Served-By: ef97014f01ea59c1ef337fe51a4d0331 68 | Location: $URL [following] 69 | --2014-12-21 18:11:15-- $URL 70 | Reusing existing connection to github.com:443. 71 | HTTP request sent, awaiting response... 72 | HTTP/1.1 200 OK 73 | Server: GitHub.com 74 | Date: Mon, 22 Dec 2014 02:11:15 GMT 75 | Content-Type: text/html; charset=utf-8 76 | Transfer-Encoding: chunked 77 | Status: 200 OK 78 | X-XSS-Protection: 1; mode=block 79 | X-Frame-Options: deny 80 | Content-Security-Policy: default-src *; script-src assets-cdn.github.com collector-cdn.github.com; object-src assets-cdn.github.com; style-src 'self' 'unsafe-inline' 'unsafe-eval' assets-cdn.github.com; img-src 'self' data: assets-cdn.github.com identicons.github.com www.google-analytics.com collector.githubapp.com *.githubusercontent.com *.gravatar.com *.wp.com; media-src 'none'; frame-src 'self' render.githubusercontent.com gist.github.com www.youtube.com player.vimeo.com checkout.paypal.com; font-src assets-cdn.github.com; connect-src 'self' ghconduit.com:25035 live.github.com uploads.github.com www.google-analytics.com s3.amazonaws.com 81 | Cache-Control: no-cache, private 82 | Vary: X-PJAX 83 | X-UA-Compatible: IE=Edge,chrome=1 84 | Set-Cookie: _gh_sess=eyJzZXNzaW9uX2lkIjoiNTMzNGNjZWUxM2VhZjNhN2M3MzIwZWUxNGYwNzhmNDkiLCJzcHlfcmVwbyI6ImNyZWF0aW9uaXgvbnZtIiwic3B5X3JlcG9fYXQiOjE0MTkyMTQyNzUsIl9jc3JmX3Rva2VuIjoiemZTVDNIRGo0QzF0dzkyNXp6NFBRdGJVbTl4NSsxTGo1cngwVFQ3NDVwdz0ifQ%3D%3D--b72bfd5241907dcf557b226e74351ff39f0e9ede; path=/; secure; HttpOnly 85 | X-Request-Id: 305b0d158bf8c0b3fa488a33d7687091 86 | X-Runtime: 0.038544 87 | X-Rack-Cache: miss 88 | X-GitHub-Request-Id: 45B56780:3913:880F19:54977DC3 89 | Strict-Transport-Security: max-age=31536000; includeSubdomains; preload 90 | X-Content-Type-Options: nosniff 91 | Vary: Accept-Encoding 92 | X-Served-By: 926b734ea1992f8ee1f88ab967a93dac 93 | Length: unspecified [text/html] 94 | Saving to: ‘/dev/null’ 95 | 96 | 0K .......... ......... 225K=0.09s 97 | 98 | 2014-12-21 18:11:15 (225 KB/s) - ‘/dev/null’ saved [20298] 99 | 100 | " 101 | "$WGET_CONTENTS" | while read line 102 | do 103 | >&2 echo "$line" 104 | done 105 | fi 106 | } 107 | 108 | OUTPUT="$(nvm_get_latest)" 109 | EXIT_CODE="$(nvm_get_latest >/dev/null 2>&1 ; echo $?)" 110 | [ "_$OUTPUT" = "_$EXPECTED_VERSION" ] \ 111 | || die "success path did not return version '$EXPECTED_VERSION', got '$OUTPUT'" 112 | [ "_$EXIT_CODE" = "_0" ] \ 113 | || die "success path did not exit with code 0, got $EXIT_CODE" 114 | 115 | 116 | cleanup 117 | 118 | -------------------------------------------------------------------------------- /test/slow/nvm_get_latest/nvm_get_latest failed redirect: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; cleanup ; exit 1; } 4 | 5 | cleanup() { 6 | unset -f curl wget 7 | } 8 | 9 | . ../../../nvm.sh 10 | 11 | curl() { 12 | return 1 13 | } 14 | wget() { 15 | return 1 16 | } 17 | 18 | OUTPUT="$(nvm_get_latest 2>&1)" 19 | EXIT_CODE="$(nvm_get_latest >/dev/null 2>&1 ; echo $?)" 20 | [ "_$OUTPUT" = "_http://latest.nvm.sh did not redirect to the latest release on Github" ] \ 21 | || die "failed redirect did not report correct error message, got '$OUTPUT'" 22 | [ "_$EXIT_CODE" = "_2" ] \ 23 | || die "failed redirect did not exit with code 2, got $EXIT_CODE" 24 | 25 | cleanup 26 | 27 | -------------------------------------------------------------------------------- /test/sourcing/Sourcing nvm.sh should use the default if available: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | echo '0.10.1' > ../../alias/default || die 'creation of default alias failed' 6 | 7 | . ../../nvm.sh || die 'sourcing returned nonzero exit code' 8 | 9 | NVM_LS_CURRENT="$(nvm ls current | \grep -o v0.10.1)" 10 | [ "_$NVM_LS_CURRENT" = '_v0.10.1' ] || die "'nvm ls current' did not return '-> v0.10.1', got '$NVM_LS_CURRENT'" 11 | 12 | # NVM_LS_CURRENT_COLORED="$(nvm ls current | sed -n l)" 13 | 14 | NVM_ALIAS_DEFAULT="$(nvm alias default)" 15 | [ "_$NVM_ALIAS_DEFAULT" = "_default -> 0.10.1 (-> v0.10.1)" ] \ 16 | || die "'nvm alias default did not return 'default -> 0.10.1 (-> v0.10.1)', got '$NVM_ALIAS_DEFAULT'" 17 | 18 | -------------------------------------------------------------------------------- /test/sourcing/Sourcing nvm.sh with --install and .nvmrc should install it: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | supports_source_options () { 5 | [ "_$(echo 'echo $1' | . /dev/stdin yes)" = "_yes" ] 6 | } 7 | 8 | if ! supports_source_options; then 9 | echo 'this shell does not support passing options on sourcing' 10 | exit 0; 11 | fi 12 | 13 | echo '0.10.2' > ../../.nvmrc || die 'creation of .nvmrc failed' 14 | 15 | . ../../nvm.sh --install 16 | EXIT_CODE="$(echo $?)" 17 | 18 | echo 'sourcing complete.' 19 | 20 | nvm_version 0.10.2 >/dev/null 2>&1 || die "v0.10.2 not installed: $(nvm ls)" 21 | 22 | [ "_$(nvm_rc_version | \grep -o -e 'with version .*$')" = "_with version <0.10.2>" ] || die "nvm_rc_version $(nvm_rc_version)" 23 | 24 | [ "_$EXIT_CODE" = "_0" ] || die "sourcing returned nonzero exit code: $EXIT_CODE" 25 | 26 | NVM_LS_CURRENT="$(nvm ls current | \grep -o v0.10.2)" 27 | [ "_$NVM_LS_CURRENT" = '_v0.10.2' ] || die "'nvm ls current' did not return '-> v0.10.2', got '$NVM_LS_CURRENT' `nvm ls`" 28 | 29 | -------------------------------------------------------------------------------- /test/sourcing/Sourcing nvm.sh with --install should install the default: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | supports_source_options () { 5 | [ "_$(echo 'echo $1' | . /dev/stdin yes)" = "_yes" ] 6 | } 7 | 8 | if ! supports_source_options; then 9 | echo 'this shell does not support passing options on sourcing' 10 | exit 0; 11 | fi 12 | 13 | echo '0.10.2' > ../../alias/default || die 'creation of default alias failed' 14 | 15 | echo 'sourcing nvm with --install...' 16 | 17 | . ../../nvm.sh --install 18 | EXIT_CODE="$(echo $?)" 19 | 20 | echo 'sourcing complete.' 21 | 22 | nvm_version 0.10.2 >/dev/null 2>&1 || die "v0.10.2 not installed: $(nvm ls)" 23 | 24 | [ "_$EXIT_CODE" = "_0" ] || die "sourcing returned nonzero exit code: $EXIT_CODE" 25 | 26 | NVM_LS_CURRENT="$(nvm ls current | \grep -o v0.10.2)" 27 | [ "_$NVM_LS_CURRENT" = '_v0.10.2' ] || die "'nvm ls current' did not return '-> v0.10.2', got '$NVM_LS_CURRENT'" 28 | 29 | NVM_ALIAS_DEFAULT="$(nvm alias default)" 30 | [ "_$NVM_ALIAS_DEFAULT" = "_default -> 0.10.2 (-> v0.10.2)" ] \ 31 | || die "'nvm alias default did not return 'default -> 0.10.2 (-> v0.10.2)', got '$NVM_ALIAS_DEFAULT'" 32 | 33 | -------------------------------------------------------------------------------- /test/sourcing/Sourcing nvm.sh with no default should return 0: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | die () { echo $@ ; exit 1; } 4 | 5 | touch ../../alias/default 6 | rm ../../alias/default || die 'removal of default alias failed' 7 | nvm_alias default && die '"nvm_alias default" did not fail' 8 | 9 | set -e # necessary to fail internally with a nonzero code 10 | 11 | . ../../nvm.sh || die 'sourcing returned nonzero exit code' 12 | -------------------------------------------------------------------------------- /test/sourcing/setup: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | mkdir -p ../../alias 4 | rm -f ../../.nvmrc 5 | rm -rf ../../v0.10.7 6 | rm -rf ../../v0.9.7 7 | rm -rf ../../v0.9.12 8 | 9 | . ../../nvm.sh 10 | nvm install 0.10.1 || echo >&2 'nvm install 0.10.1 failed' 11 | nvm unload || echo >&2 'nvm unload failed' 12 | 13 | -------------------------------------------------------------------------------- /test/sourcing/teardown: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | rm -rf ../../alias 4 | rm -rf ../../v0.10.1 5 | rm -rf ../../v0.10.2 6 | rm -f ../../.nvmrc 7 | 8 | --------------------------------------------------------------------------------