mirror of
https://github.com/beautifier/js-beautify.git
synced 2025-02-05 20:36:25 +00:00
397 lines
16 KiB
Bash
Executable File
397 lines
16 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
REL_SCRIPT_DIR="`dirname \"$0\"`"
|
|
SCRIPT_DIR="`( cd \"$REL_SCRIPT_DIR\" && pwd )`"
|
|
|
|
|
|
test_cli_common()
|
|
{
|
|
echo ----------------------------------------
|
|
echo Testing common cli behavior...
|
|
CLI_SCRIPT_NAME=${1:?missing_param}.js
|
|
CLI_SCRIPT=$SCRIPT_DIR/../bin/$CLI_SCRIPT_NAME
|
|
echo Script: $CLI_SCRIPT
|
|
|
|
# should find the minimal help output
|
|
$CLI_SCRIPT 2>&1 | grep -q "Must pipe input or define at least one file\." || {
|
|
$CLI_SCRIPT 2>&1
|
|
echo "[$CLI_SCRIPT_NAME] Output should be help message."
|
|
exit 1
|
|
}
|
|
|
|
$CLI_SCRIPT 2> /dev/null && {
|
|
echo "[$CLI_SCRIPT_NAME (with no parameters)] Return code should be error."
|
|
exit 1
|
|
}
|
|
|
|
$CLI_SCRIPT -Z 2> /dev/null && {
|
|
echo "[$CLI_SCRIPT_NAME -Z] Return code for invalid parameter should be error."
|
|
exit 1
|
|
}
|
|
|
|
$CLI_SCRIPT -h > /dev/null || {
|
|
echo "[$CLI_SCRIPT_NAME -h] Return code should be success."
|
|
exit 1
|
|
}
|
|
|
|
$CLI_SCRIPT -v > /dev/null || {
|
|
echo "[$CLI_SCRIPT_NAME -v] Return code should be success."
|
|
exit 1
|
|
}
|
|
|
|
MISSING_FILE="$SCRIPT_DIR/../../../js/bin/missing_file"
|
|
MISSING_FILE_MESSAGE="Unable to open path"
|
|
$CLI_SCRIPT $MISSING_FILE 2> /dev/null && {
|
|
echo "[$CLI_SCRIPT_NAME $MISSING_FILE] Return code should be error."
|
|
exit 1
|
|
}
|
|
|
|
$CLI_SCRIPT $MISSING_FILE 2>&1 | grep -q "$MISSING_FILE_MESSAGE" || {
|
|
echo "[$CLI_SCRIPT_NAME $MISSING_FILE] Stderr should have useful message."
|
|
exit 1
|
|
}
|
|
|
|
if [ "`$CLI_SCRIPT $MISSING_FILE 2> /dev/null`" != "" ]; then
|
|
echo "[$CLI_SCRIPT_NAME $MISSING_FILE] Stdout should have no text."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
setup_temp()
|
|
{
|
|
mkdir -p target
|
|
TEST_TEMP=$PWD/`mktemp -d target/test_temp_XXXX`
|
|
echo Created $TEST_TEMP...
|
|
}
|
|
|
|
cleanup()
|
|
{
|
|
rm -rf $TEST_TEMP && echo Removed $TEST_TEMP...
|
|
test -z $1 || exit $1
|
|
}
|
|
|
|
|
|
test_cli_js_beautify()
|
|
{
|
|
echo ----------------------------------------
|
|
echo Testing js-beautify cli behavior...
|
|
CLI_SCRIPT=$SCRIPT_DIR/../bin/js-beautify.js
|
|
|
|
$CLI_SCRIPT $SCRIPT_DIR/../bin/js-beautify.js > /dev/null || {
|
|
echo "js-beautify output for $SCRIPT_DIR/../bin/js-beautify.js was expected succeed."
|
|
exit 1
|
|
}
|
|
|
|
$CLI_SCRIPT $SCRIPT_DIR/../bin/css-beautify.js > /dev/null || {
|
|
echo "js-beautify output for $SCRIPT_DIR/../bin/css-beautify.js was expected succeed."
|
|
exit 1
|
|
}
|
|
|
|
$CLI_SCRIPT $SCRIPT_DIR/../bin/js-beautify.js | diff $SCRIPT_DIR/../bin/js-beautify.js - || {
|
|
echo "js-beautify output for $SCRIPT_DIR/../bin/js-beautify.js was expected to be unchanged."
|
|
exit 1
|
|
}
|
|
|
|
node $SCRIPT_DIR/../lib/cli.js $SCRIPT_DIR/../bin/js-beautify.js | diff $SCRIPT_DIR/../bin/js-beautify.js - || {
|
|
echo "js-beautify output for $SCRIPT_DIR/../bin/js-beautify.js was expected to be unchanged."
|
|
exit 1
|
|
}
|
|
|
|
cat $SCRIPT_DIR/../bin/js-beautify.js | $CLI_SCRIPT | diff $SCRIPT_DIR/../bin/js-beautify.js - || {
|
|
echo "js-beautify output for $SCRIPT_DIR/../bin/js-beautify.js was expected to be unchanged."
|
|
exit 1
|
|
}
|
|
|
|
cat $SCRIPT_DIR/../bin/js-beautify.js | $CLI_SCRIPT - | diff $SCRIPT_DIR/../bin/js-beautify.js - || {
|
|
echo "js-beautify output for $SCRIPT_DIR/../bin/js-beautify.js was expected to be unchanged."
|
|
exit 1
|
|
}
|
|
|
|
setup_temp
|
|
cat $SCRIPT_DIR/../bin/js-beautify.js | $CLI_SCRIPT -o $TEST_TEMP/js-beautify-pipe.js - && diff $TEST_TEMP/js-beautify-pipe.js $SCRIPT_DIR/../bin/js-beautify.js || {
|
|
echo "js-beautify output for $SCRIPT_DIR/../bin/js-beautify.js should have been created in $TEST_TEMP/js-beautify-pipe.js."
|
|
cleanup 1
|
|
}
|
|
|
|
$CLI_SCRIPT -o $TEST_TEMP/js-beautify.js $SCRIPT_DIR/../bin/js-beautify.js && diff $SCRIPT_DIR/../bin/js-beautify.js $TEST_TEMP/js-beautify.js || {
|
|
echo "js-beautify output for $SCRIPT_DIR/../bin/js-beautify.js should have been created in $TEST_TEMP/js-beautify.js."
|
|
cleanup 1
|
|
}
|
|
|
|
# ensure new line settings work
|
|
$CLI_SCRIPT -o $TEST_TEMP/js-beautify-n.js -e '\n' $SCRIPT_DIR/../bin/js-beautify.js
|
|
$CLI_SCRIPT -o $TEST_TEMP/js-beautify-rn.js -e '\r\n' $TEST_TEMP/js-beautify-n.js
|
|
|
|
# ensure eol processed correctly
|
|
$CLI_SCRIPT -o $TEST_TEMP/js-beautify-n-dash.js --indent-size 2 --eol '\n' $TEST_TEMP/js-beautify-n.js
|
|
$CLI_SCRIPT -o $TEST_TEMP/js-beautify-rn-dash.js --indent-size 2 --eol '\r\n' $TEST_TEMP/js-beautify-n.js
|
|
diff -q $TEST_TEMP/js-beautify-n-dash.js $TEST_TEMP/js-beautify-rn-dash.js && {
|
|
diff $TEST_TEMP/js-beautify-n-dash.js $TEST_TEMP/js-beautify-rn-dash.js | cat -t -e
|
|
echo "js-beautify output for $TEST_TEMP/js-beautify-n-dash.js and $TEST_TEMP/js-beautify-rn-dash.js was expected to be different."
|
|
cleanup 1
|
|
}
|
|
|
|
diff -q $TEST_TEMP/js-beautify-n.js $TEST_TEMP/js-beautify-rn.js && {
|
|
diff $TEST_TEMP/js-beautify-n.js $TEST_TEMP/js-beautify-rn.js | cat -t -e
|
|
echo "js-beautify output for $TEST_TEMP/js-beautify-n.js and $TEST_TEMP/js-beautify-rn.js was expected to be different."
|
|
cleanup 1
|
|
}
|
|
|
|
$CLI_SCRIPT $TEST_TEMP/js-beautify-n.js | diff -q $TEST_TEMP/js-beautify-n.js - || {
|
|
echo "js-beautify output for $TEST_TEMP/js-beautify-n.js was expected to be unchanged."
|
|
cleanup 1
|
|
}
|
|
|
|
$CLI_SCRIPT -e 'auto' $TEST_TEMP/js-beautify-rn.js | diff -q $TEST_TEMP/js-beautify-rn.js - || {
|
|
echo "js-beautify output for $TEST_TEMP/js-beautify-rn.js was expected to be unchanged."
|
|
cleanup 1
|
|
}
|
|
|
|
# EditorConfig related tests
|
|
cp -r js/test/resources/editorconfig $TEST_TEMP/
|
|
$CLI_SCRIPT -o $TEST_TEMP/editorconfig/example.js --end-with-newline --indent-size 4 -e '\n' $TEST_TEMP/editorconfig/example-base.js
|
|
$CLI_SCRIPT -o $TEST_TEMP/editorconfig/example-ec.js --indent-size 2 -e '\n' $TEST_TEMP/editorconfig/example-base.js
|
|
|
|
$CLI_SCRIPT -o $TEST_TEMP/editorconfig/cr/example.js --end-with-newline --indent-size 4 -e '\n' $TEST_TEMP/editorconfig/example-base.js
|
|
$CLI_SCRIPT -o $TEST_TEMP/editorconfig/cr/example-ec.js --indent-size 2 -e '\r' $TEST_TEMP/editorconfig/example-base.js
|
|
|
|
$CLI_SCRIPT -o $TEST_TEMP/editorconfig/crlf/example.js --end-with-newline --indent-size 4 -e '\n' $TEST_TEMP/editorconfig/example-base.js
|
|
$CLI_SCRIPT -o $TEST_TEMP/editorconfig/crlf/example-ec.js --indent-size 2 -e '\r\n' $TEST_TEMP/editorconfig/example-base.js
|
|
|
|
$CLI_SCRIPT -o $TEST_TEMP/editorconfig/error/example.js --end-with-newline --indent-size 4 -e '\n' $TEST_TEMP/editorconfig/example-base.js
|
|
|
|
pushd $TEST_TEMP/editorconfig
|
|
|
|
cd $TEST_TEMP/editorconfig/error
|
|
$CLI_SCRIPT --editorconfig $TEST_TEMP/js-beautify-n.js \
|
|
> /dev/null || {
|
|
echo "Invalid editorconfig file should not report error (consistent with the EditorConfig)."
|
|
cleanup 1
|
|
}
|
|
|
|
$CLI_SCRIPT --editorconfig example.js \
|
|
> /dev/null || {
|
|
echo "Invalid editorconfig file should not report error (consistent with the EditorConfig)."
|
|
cleanup 1
|
|
}
|
|
|
|
# TODO: EditorConfig setting should NOT overide cli setting, but that is
|
|
# the current by-design behavior, due to code limitations.
|
|
|
|
# file input scenario
|
|
SCENARIO=a
|
|
cd $TEST_TEMP/editorconfig || exit 1
|
|
$CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig -o example-${SCENARIO}.js example.js \
|
|
&& diff -q example-${SCENARIO}.js example-ec.js || {
|
|
echo "EditorConfig setting should overide cli setting."
|
|
diff example-${SCENARIO}.js example-ec.js | cat -t -e
|
|
cleanup 1
|
|
}
|
|
|
|
cd $TEST_TEMP/editorconfig/crlf || exit 1
|
|
$CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig -o example-${SCENARIO}.js example.js \
|
|
&& diff -q example-${SCENARIO}.js example-ec.js || {
|
|
echo "EditorConfig setting should overide cli setting."
|
|
diff example-${SCENARIO}.js example-ec.js | cat -t -e
|
|
cleanup 1
|
|
}
|
|
|
|
cd $TEST_TEMP/editorconfig/cr || exit 1
|
|
$CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig -o example-${SCENARIO}.js example.js \
|
|
&& diff -q example-${SCENARIO}.js example-ec.js || {
|
|
echo "EditorConfig setting should overide cli setting."
|
|
diff example-${SCENARIO}.js example-ec.js | cat -t -e
|
|
cleanup 1
|
|
}
|
|
|
|
# stdin input to stdout scenario
|
|
SCENARIO=b
|
|
cd $TEST_TEMP/editorconfig || exit 1
|
|
echo "cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig > example-${SCENARIO}.js"
|
|
cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig > example-${SCENARIO}.js \
|
|
&& diff -q example-${SCENARIO}.js example-ec.js || {
|
|
echo "EditorConfig setting should overide cli setting."
|
|
diff example-${SCENARIO}.js example-ec.js | cat -t -e
|
|
cleanup 1
|
|
}
|
|
|
|
cd $TEST_TEMP/editorconfig/crlf || exit 1
|
|
echo "cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig > example-${SCENARIO}.js"
|
|
cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig > example-${SCENARIO}.js \
|
|
&& diff -q example-${SCENARIO}.js example-ec.js || {
|
|
echo "EditorConfig setting should overide cli setting."
|
|
diff example-${SCENARIO}.js example-ec.js | cat -t -e
|
|
cleanup 1
|
|
}
|
|
|
|
cd $TEST_TEMP/editorconfig/cr || exit 1
|
|
echo "cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig > example-${SCENARIO}.js"
|
|
cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig > example-${SCENARIO}.js \
|
|
&& diff -q example-${SCENARIO}.js example-ec.js || {
|
|
echo "EditorConfig setting should overide cli setting."
|
|
diff example-${SCENARIO}.js example-ec.js | cat -t -e
|
|
cleanup 1
|
|
}
|
|
|
|
|
|
# stdin input to file scenario
|
|
SCENARIO=c
|
|
cd $TEST_TEMP/editorconfig || exit 1
|
|
echo "cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig -o example-${SCENARIO}.js"
|
|
cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig -o example-${SCENARIO}.js - \
|
|
&& diff -q example-${SCENARIO}.js example-ec.js || {
|
|
echo "EditorConfig setting should overide cli setting."
|
|
diff example-${SCENARIO}.js example-ec.js | cat -t -e
|
|
cleanup 1
|
|
}
|
|
|
|
cd $TEST_TEMP/editorconfig/crlf || exit 1
|
|
cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig -o example-${SCENARIO}.js - \
|
|
&& diff -q example-${SCENARIO}.js example-ec.js || {
|
|
echo "EditorConfig setting should overide cli setting."
|
|
diff example-${SCENARIO}.js example-ec.js | cat -t -e
|
|
cleanup 1
|
|
}
|
|
|
|
cd $TEST_TEMP/editorconfig/cr || exit 1
|
|
cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig -o example-${SCENARIO}.js - \
|
|
&& diff -q example-${SCENARIO}.js example-ec.js || {
|
|
echo "EditorConfig setting should overide cli setting."
|
|
diff example-${SCENARIO}.js example-ec.js | cat -t -e
|
|
cleanup 1
|
|
}
|
|
|
|
popd
|
|
# End EditorConfig
|
|
|
|
# ensure unchanged files are not overwritten
|
|
$CLI_SCRIPT -o $TEST_TEMP/js-beautify.js $SCRIPT_DIR/../bin/js-beautify.js
|
|
cp -p $TEST_TEMP/js-beautify.js $TEST_TEMP/js-beautify-old.js
|
|
touch $TEST_TEMP/js-beautify.js
|
|
sleep 2
|
|
touch $TEST_TEMP/js-beautify-old.js
|
|
$CLI_SCRIPT -r $TEST_TEMP/js-beautify.js && test $TEST_TEMP/js-beautify.js -nt $TEST_TEMP/js-beautify-old.js && {
|
|
echo "js-beautify should not replace unchanged file $TEST_TEMP/js-beautify.js when using -r"
|
|
cleanup 1
|
|
}
|
|
|
|
$CLI_SCRIPT -o $TEST_TEMP/js-beautify.js $TEST_TEMP/js-beautify.js && test $TEST_TEMP/js-beautify.js -nt $TEST_TEMP/js-beautify-old.js && {
|
|
echo "js-beautify should not replace unchanged file $TEST_TEMP/js-beautify.js when using -o and same file name"
|
|
cleanup 1
|
|
}
|
|
|
|
$CLI_SCRIPT -o $TEST_TEMP/js-beautify.js $TEST_TEMP/js-beautify-old.js && test $TEST_TEMP/js-beautify.js -nt $TEST_TEMP/js-beautify-old.js && {
|
|
echo "js-beautify should not replace unchanged file $TEST_TEMP/js-beautify.js when using -o and different file name"
|
|
cleanup 1
|
|
}
|
|
|
|
$CLI_SCRIPT $SCRIPT_DIR/../bin/css-beautify.js | diff -q $SCRIPT_DIR/../bin/css-beautify.js - && {
|
|
echo "js-beautify output for $SCRIPT_DIR/../bin/css-beautify.js was expected to be different."
|
|
cleanup 1
|
|
}
|
|
|
|
unset HOME
|
|
unset USERPROFILE
|
|
$CLI_SCRIPT -o $TEST_TEMP/example1-default.js $SCRIPT_DIR/resources/example1.js || exit 1
|
|
|
|
$CLI_SCRIPT -o $TEST_TEMP/example1-sanity.js $TEST_TEMP/example1-default.js || exit 1
|
|
diff -q $TEST_TEMP/example1-default.js $TEST_TEMP/example1-sanity.js || {
|
|
echo "js-beautify output for $TEST_TEMP/example1-default.js was expected to be identical after no change in settings."
|
|
cleanup 1
|
|
}
|
|
|
|
cd $SCRIPT_DIR/resources/configerror
|
|
$CLI_SCRIPT $TEST_TEMP/example1-default.js 2>&1 | grep -q "Error while loading beautifier configuration\." || {
|
|
echo "js-beautify output for $TEST_TEMP/example1-default.js was expected to be configration load error message."
|
|
cleanup 1
|
|
}
|
|
|
|
cd $SCRIPT_DIR/resources/indent11chars
|
|
$CLI_SCRIPT $TEST_TEMP/example1-default.js | diff -q $TEST_TEMP/example1-default.js - && {
|
|
echo "js-beautify output for $TEST_TEMP/example1-default.js was expected to be different based on CWD settings."
|
|
cleanup 1
|
|
}
|
|
|
|
cd $SCRIPT_DIR/resources/indent11chars/subDir1/subDir2
|
|
$CLI_SCRIPT $TEST_TEMP/example1-default.js | diff -q $TEST_TEMP/example1-default.js - && {
|
|
echo "js-beautify output for $TEST_TEMP/example1-default.js was expected to be different based on CWD parent folder settings."
|
|
cleanup 1
|
|
}
|
|
cd $SCRIPT_DIR
|
|
|
|
export HOME=$SCRIPT_DIR/resources/indent11chars
|
|
$CLI_SCRIPT $TEST_TEMP/example1-default.js | diff -q $TEST_TEMP/example1-default.js - && {
|
|
echo "js-beautify output for $TEST_TEMP/example1-default.js was expected to be different based on HOME settings."
|
|
cleanup 1
|
|
}
|
|
|
|
$CLI_SCRIPT -o $TEST_TEMP/example1-indent11chars.js $TEST_TEMP/example1-default.js
|
|
|
|
unset HOME
|
|
export USERPROFILE=$SCRIPT_DIR/resources/indent11chars
|
|
# node -p 'process.env["USERPROFILE"] || process.env["HOME"] || "unset"'
|
|
$CLI_SCRIPT $TEST_TEMP/example1-default.js | diff -q $TEST_TEMP/example1-indent11chars.js - || {
|
|
echo "js-beautify output for $TEST_TEMP/example1-default.js was expected to be identical for same HOME and USERPROFILE settings."
|
|
cleanup 1
|
|
}
|
|
|
|
$CLI_SCRIPT $TEST_TEMP/example1-default.js | diff -q $TEST_TEMP/example1-default.js - && {
|
|
echo "js-beautify output for $TEST_TEMP/example1-default.js was expected to be different based on USERPROFILE settings."
|
|
cleanup 1
|
|
}
|
|
|
|
#meta-parameter brace_style
|
|
$CLI_SCRIPT -b 'invalid' $TEST_TEMP/example1-default.js > /dev/null && {
|
|
echo "[$CLI_SCRIPT_NAME -b 'invalid' $TEST_TEMP/example1-default.js] Return code for invalid brace_style meta-parameter should be error."
|
|
cleanup 1
|
|
}
|
|
$CLI_SCRIPT -b 'expand,preserve-inline,invalid' $TEST_TEMP/example1-default.js > /dev/null && {
|
|
echo "[$CLI_SCRIPT_NAME -b 'expand,preserve-inline,invalid' $TEST_TEMP/example1-default.js] Return code for invalid brace_style meta-parameter should be error."
|
|
cleanup 1
|
|
}
|
|
$CLI_SCRIPT -b 'preserve-inline' $TEST_TEMP/example1-default.js > /dev/null || {
|
|
echo "[$CLI_SCRIPT_NAME -b 'preserve-inline' $TEST_TEMP/example1-default.js] Return code for only one part of valid brace_style meta-parameter should be success (uses default where it can)."
|
|
cleanup 1
|
|
}
|
|
|
|
cleanup
|
|
}
|
|
|
|
test_smoke_js_beautify()
|
|
{
|
|
echo ----------------------------------------
|
|
echo Testing js-beautify functionality...
|
|
node $SCRIPT_DIR/node-beautify-tests.js || exit 1
|
|
node $SCRIPT_DIR/amd-beautify-tests.js || exit 1
|
|
}
|
|
|
|
|
|
test_performance_js_beautify()
|
|
{
|
|
echo ----------------------------------------
|
|
echo Testing js-beautify performance...
|
|
node $SCRIPT_DIR/node-beautify-perf-tests.js || exit 1
|
|
echo ----------------------------------------
|
|
}
|
|
|
|
test_performance_html_beautify()
|
|
{
|
|
echo ----------------------------------------
|
|
echo Testing html-beautify performance...
|
|
node $SCRIPT_DIR/node-beautify-html-perf-tests.js || exit 1
|
|
echo ----------------------------------------
|
|
}
|
|
|
|
test_cli_common css-beautify
|
|
test_cli_common html-beautify
|
|
test_cli_common js-beautify
|
|
|
|
test_cli_js_beautify
|
|
test_smoke_js_beautify
|
|
test_performance_js_beautify
|
|
test_performance_html_beautify
|
|
|
|
echo ----------------------------------------
|
|
echo $0 - PASSED.
|
|
echo ----------------------------------------
|