mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
3.0 KiB
138 lines
3.0 KiB
#!/bin/bash
|
|
|
|
if [ "$DEBUG" != "" ]; then
|
|
set -x
|
|
fi
|
|
|
|
|
|
# the "npm" command is set to a custom function here so that we can
|
|
# test the code in this repo, rather than whichever version of npm
|
|
# happens to be installed.
|
|
|
|
main () {
|
|
# setup
|
|
FAILURES=0
|
|
|
|
cd "$TESTDIR"
|
|
|
|
npm config ls
|
|
|
|
# install
|
|
npm install "$NPMPKG" || exit 1
|
|
|
|
# used in test later
|
|
npm config set package-config:foo boo || exit 1
|
|
|
|
npm install $( ls packages | awk '{print "packages/" $1 }' ) || exit 1
|
|
(ls packages | while read pkg; do
|
|
npm test "$pkg"
|
|
done) || exit 1
|
|
if [ "$FAILURES" == "0" ]; then
|
|
npm rm $(ls packages) npm || exit 1
|
|
fi
|
|
cleanup
|
|
|
|
if ! [ "$npm_package_config_publishtest" == "true" ]; then
|
|
echo_err "To test publishing: npm config set npm:publishtest true"
|
|
else
|
|
# attempt to publish and unpublish each of them.
|
|
npm install "$NPMPKG" || exit 1
|
|
|
|
(ls packages | grep -v 'npm-test-private' | while read pkg; do
|
|
npm publish packages/$pkg || exit 1
|
|
npm install $pkg || exit 1
|
|
npm unpublish $pkg --force || exit 1
|
|
done) || exit 1
|
|
|
|
# verify that the private package can't be published
|
|
# bypass the test-harness npm function.
|
|
"$NPMCLI" publish packages/npm-test-private && (
|
|
npm unpublish npm-test-private --force
|
|
exit 1000
|
|
)
|
|
if [ $? -eq 1000 ]; then
|
|
fail "Private package shouldn't be publishable" >&2
|
|
fi
|
|
|
|
if [ "$FAILURES" == "0" ]; then
|
|
npm rm $(ls packages) npm || exit 1
|
|
fi
|
|
cleanup
|
|
|
|
fi
|
|
|
|
if [ $FAILURES -eq 0 ]; then
|
|
echo_err "ok"
|
|
rm -rf $TMP
|
|
else
|
|
echo_err "FAILED: $FAILURES"
|
|
fi
|
|
exit $FAILURES
|
|
}
|
|
|
|
|
|
|
|
####################
|
|
# Test Harness below
|
|
|
|
# fake functions
|
|
npm () {
|
|
echo -e "npm $@"
|
|
"$NPMCLI" "$@" \
|
|
|| fail npm "$@"
|
|
}
|
|
|
|
# get the absolute path of the executable
|
|
SELF_PATH="$0"
|
|
if [ "${SELF_PATH:0:1}" != "." ] && [ "${SELF_PATH:0:1}" != "/" ]; then
|
|
SELF_PATH=./"$SELF_PATH"
|
|
fi
|
|
SELF_PATH=$( cd -P -- "$(dirname -- "$SELF_PATH")" \
|
|
&& pwd -P \
|
|
) && SELF_PATH=$SELF_PATH/$(basename -- "$0")
|
|
# resolve symlinks
|
|
while [ -h "$SELF_PATH" ]; do
|
|
DIR=$(dirname -- "$SELF_PATH")
|
|
SYM=$(readlink -- "$SELF_PATH")
|
|
SELF_PATH=$( cd -- "$DIR" \
|
|
&& cd -- $(dirname -- "$SYM") \
|
|
&& pwd \
|
|
)/$(basename -- "$SYM")
|
|
done
|
|
NPMPKG="$(dirname -- "$(dirname -- "$SELF_PATH")")"
|
|
NPMCLI="$NPMPKG/cli.js"
|
|
TESTDIR="$NPMPKG/test/"
|
|
TMP=${TMPDIR:-/tmp}
|
|
rm -rf $TMP/npm*
|
|
TMP=$TMP/npm-test-$$
|
|
echo "Testing in $TMP ..."
|
|
ROOTDIR="$TMP/root"
|
|
|
|
cleanup () {
|
|
if [ "$FAILURES" != "0" ] && [ "$FAILURES" != "" ]; then
|
|
return
|
|
fi
|
|
[ -d "$ROOTDIR" ] && rm -rf -- "$ROOTDIR"
|
|
mkdir -p -- "$ROOTDIR"
|
|
}
|
|
|
|
export npm_config_prefix="$ROOTDIR"
|
|
export npm_config_color="always"
|
|
export npm_config_global=true
|
|
# have to set this to false, or it'll try to test itself forever
|
|
export npm_config_npat=false
|
|
export PATH="$PATH":"$ROOTDIR/bin":"$ROOTDIR/node_modules/.bin"
|
|
export NODE_PATH="$ROOTDIR/node_modules"
|
|
|
|
echo_err () {
|
|
echo "$@" >&2
|
|
}
|
|
fail () {
|
|
let 'FAILURES += 1'
|
|
echo_err ""
|
|
echo_err -e "\033[33mFailure: $@\033[m"
|
|
exit 1
|
|
}
|
|
|
|
cleanup
|
|
main
|
|
|