2016-04-25 14:37:31 +01:00
|
|
|
#!/usr/bin/env bash
|
2016-03-14 00:35:46 -07:00
|
|
|
# Copyright (c) 2015-present, Facebook, Inc. All rights reserved.
|
2016-03-31 19:14:26 -07:00
|
|
|
|
2016-04-25 14:37:31 +01:00
|
|
|
set -eu
|
2016-04-25 11:07:44 +01:00
|
|
|
|
2016-03-31 19:14:26 -07:00
|
|
|
WARNING='\033[0;31m'
|
2016-04-12 23:34:30 -07:00
|
|
|
SUCCESS='\033[0;32m'
|
2017-10-30 15:29:26 -07:00
|
|
|
NOTICE='\033[0;33m'
|
2016-04-12 23:34:30 -07:00
|
|
|
INFO=''
|
2016-04-15 17:58:33 +08:00
|
|
|
DEBUG=''
|
2016-03-31 19:14:26 -07:00
|
|
|
RESET='\033[0m'
|
2016-04-25 14:37:31 +01:00
|
|
|
VERBOSE=${VERBOSE:-}
|
2017-03-07 15:53:00 -08:00
|
|
|
OCAML_VERSION=`echo $(ocaml -version) | egrep -o '[0-9]+.[0-9]+.[0-9]+' | head -1`
|
2017-03-03 21:12:34 +01:00
|
|
|
OCAML_VERSION=${OCAML_VERSION:-"4.02.3"}
|
2016-03-31 19:14:26 -07:00
|
|
|
|
|
|
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
|
|
2017-10-30 22:40:16 -07:00
|
|
|
REFMT="$DIR/../_build/install/default/bin/refmt"
|
2018-10-08 21:07:45 +01:00
|
|
|
OPRINT_TEST_BIN="$DIR/../_build/default/src/reason-parser-tests/testOprint.exe"
|
2016-03-31 19:14:26 -07:00
|
|
|
|
2016-04-20 14:23:56 -07:00
|
|
|
if [[ -f REFMT ]];
|
2016-03-31 19:14:26 -07:00
|
|
|
then
|
2016-04-20 14:23:56 -07:00
|
|
|
echo "Cannot find refmt at $REFMT" 1>&2
|
2016-03-31 19:14:26 -07:00
|
|
|
exit 1;
|
|
|
|
|
fi
|
|
|
|
|
|
2017-10-05 01:57:32 -07:00
|
|
|
# for better visual diffing in the terminal, try https://github.com/jeffkaufman/icdiff
|
2017-10-31 17:06:39 -07:00
|
|
|
if hash icdiff 2> /dev/null; then
|
|
|
|
|
DIFF="icdiff"
|
|
|
|
|
elif hash git 2> /dev/null; then
|
|
|
|
|
DIFF="git --no-pager diff --no-index"
|
2017-10-05 01:57:32 -07:00
|
|
|
else
|
2017-10-31 17:06:39 -07:00
|
|
|
DIFF="eval diff --unchanged-line-format='' --new-line-format=':%dn: %L' --old-line-format=':%dn: %L'"
|
2017-10-05 01:57:32 -07:00
|
|
|
fi
|
|
|
|
|
|
2016-03-31 19:14:26 -07:00
|
|
|
UNIT_TEST_INPUT=$DIR/unit_tests/input
|
|
|
|
|
|
2016-12-12 20:39:02 -08:00
|
|
|
UNIT_TEST_OUTPUT=$DIR/unit_tests/actual_output
|
2016-03-31 19:14:26 -07:00
|
|
|
|
|
|
|
|
UNIT_TEST_EXPECTED_OUTPUT=$DIR/unit_tests/expected_output
|
|
|
|
|
|
|
|
|
|
|
2016-04-08 00:33:15 -07:00
|
|
|
TYPE_TEST_INPUT=$DIR/typeCheckedTests/input
|
2016-03-31 19:14:26 -07:00
|
|
|
|
2016-12-12 20:39:02 -08:00
|
|
|
TYPE_TEST_OUTPUT=$DIR/typeCheckedTests/actual_output
|
2016-03-31 19:14:26 -07:00
|
|
|
|
2016-04-08 00:33:15 -07:00
|
|
|
TYPE_TEST_EXPECTED_OUTPUT=$DIR/typeCheckedTests/expected_output
|
|
|
|
|
|
2016-04-24 18:46:00 -07:00
|
|
|
|
|
|
|
|
ERROR_TEST_INPUT=$DIR/errorTests/input
|
|
|
|
|
|
2016-12-12 20:39:02 -08:00
|
|
|
ERROR_TEST_OUTPUT=$DIR/errorTests/actual_output
|
2016-04-24 18:46:00 -07:00
|
|
|
|
|
|
|
|
ERROR_TEST_EXPECTED_OUTPUT=$DIR/errorTests/expected_output
|
|
|
|
|
|
|
|
|
|
|
2018-10-08 21:07:45 +01:00
|
|
|
OPRINT_TEST_INPUT=$DIR/oprintTests/input
|
|
|
|
|
|
|
|
|
|
OPRINT_TEST_OUTPUT=$DIR/oprintTests/actual_output
|
|
|
|
|
|
|
|
|
|
OPRINT_TEST_EXPECTED_OUTPUT=$DIR/oprintTests/expected_output
|
|
|
|
|
|
|
|
|
|
OPRINT_TEST_INTF_OUTPUT=$DIR/oprintTests/intf_output
|
|
|
|
|
|
|
|
|
|
|
2016-12-12 20:39:02 -08:00
|
|
|
FAILED_TESTS=$DIR/failed_tests
|
2016-04-12 23:34:30 -07:00
|
|
|
|
2016-03-31 19:14:26 -07:00
|
|
|
function info() {
|
|
|
|
|
printf "${INFO}$1${RESET}\n"
|
|
|
|
|
}
|
|
|
|
|
|
2016-04-15 17:58:33 +08:00
|
|
|
function debug() {
|
|
|
|
|
if [ ! -z "$VERBOSE" ]; then
|
2016-05-04 11:40:50 +02:00
|
|
|
printf "${DEBUG}$1${RESET}\n"
|
2016-04-15 17:58:33 +08:00
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-30 15:29:26 -07:00
|
|
|
function notice() {
|
|
|
|
|
printf "${NOTICE}$1${RESET}\n"
|
|
|
|
|
}
|
|
|
|
|
|
2016-04-12 23:34:30 -07:00
|
|
|
function success() {
|
2017-10-24 00:21:51 -07:00
|
|
|
printf "${SUCCESS}$1${RESET}"
|
2016-04-12 23:34:30 -07:00
|
|
|
}
|
|
|
|
|
|
2016-03-31 19:14:26 -07:00
|
|
|
function output() {
|
|
|
|
|
printf "$1\n"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function warning() {
|
|
|
|
|
printf "${WARNING}$1${RESET}\n"
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-30 15:29:26 -07:00
|
|
|
function version() {
|
|
|
|
|
echo "$@" | awk -F . '{ printf("%03d%03d%03d\n", $1, $2, $3); }';
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-31 19:14:26 -07:00
|
|
|
function setup_test_dir() {
|
2016-12-12 20:39:02 -08:00
|
|
|
echo "Setting up test dirs actual_output alongside the tests' expected_output"
|
2018-10-08 21:07:45 +01:00
|
|
|
mkdir -p $UNIT_TEST_OUTPUT $TYPE_TEST_OUTPUT $ERROR_TEST_OUTPUT $OPRINT_TEST_OUTPUT $OPRINT_TEST_INTF_OUTPUT
|
2016-04-15 17:58:33 +08:00
|
|
|
touch $FAILED_TESTS
|
2016-03-31 19:14:26 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setup_test_dir
|
|
|
|
|
|
2016-04-25 14:37:31 +01:00
|
|
|
set +e
|
|
|
|
|
|
2016-04-18 22:42:20 -07:00
|
|
|
function stdin_test() {
|
|
|
|
|
INPUT_FILE=$1
|
|
|
|
|
OUTPUT_FILE=$2
|
|
|
|
|
EXPECTED_OUTPUT_FILE=$3
|
|
|
|
|
# explicitly pass in heuristics file because idempotent tests read from output directory
|
|
|
|
|
HEURISTICS_FILE=$4
|
2018-10-08 21:07:45 +01:00
|
|
|
if [[ -z "${5-}" ]]; then
|
|
|
|
|
EXTRA_FLAGS='--interface false --parse re'
|
|
|
|
|
else
|
|
|
|
|
EXTRA_FLAGS="$5"
|
|
|
|
|
fi
|
2016-04-18 22:42:20 -07:00
|
|
|
|
|
|
|
|
FILENAME=$(basename $INPUT_FILE)
|
|
|
|
|
FILEEXT="${FILENAME##*.}"
|
|
|
|
|
|
|
|
|
|
if [[ $FILEEXT = "re" ]]; then
|
2018-10-08 21:07:45 +01:00
|
|
|
cat $INPUT_FILE | $REFMT $EXTRA_FLAGS --print-width 50 --print re 2>&1 > $OUTPUT_FILE
|
2016-04-18 22:42:20 -07:00
|
|
|
elif [[ $FILEEXT = "rei" ]]; then
|
2017-01-09 11:37:34 -08:00
|
|
|
cat $INPUT_FILE | $REFMT --interface true --print-width 50 --parse re --print re 2>&1 > $OUTPUT_FILE
|
2016-04-18 22:42:20 -07:00
|
|
|
elif [[ $FILEEXT = "ml" ]]; then
|
2017-01-09 11:37:34 -08:00
|
|
|
cat $INPUT_FILE | $REFMT --heuristics-file $HEURISTICS_FILE --interface false --print-width 50 --parse ml --print re 2>&1 > $OUTPUT_FILE
|
2016-04-18 22:42:20 -07:00
|
|
|
elif [[ $FILEEXT = "mli" ]]; then
|
2017-01-09 11:37:34 -08:00
|
|
|
cat $INPUT_FILE | $REFMT --heuristics-file $HEURISTICS_FILE --interface true --print-width 50 --parse ml --print re 2>&1 > $OUTPUT_FILE
|
2016-04-18 22:42:20 -07:00
|
|
|
else
|
2017-01-06 01:13:29 -08:00
|
|
|
warning " ⊘ FAILED --use-stdin \n"
|
2016-04-18 22:42:20 -07:00
|
|
|
info " Cannot determine default implementation parser for extension ${FILEEXT}"
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if ! [[ $? -eq 0 ]]; then
|
2017-01-06 01:13:29 -08:00
|
|
|
warning " ⊘ FAILED --use-stdin \n"
|
|
|
|
|
info " There was an error when testing --use-stdin"
|
2016-04-18 22:42:20 -07:00
|
|
|
info " for input file $INPUT_FILE"
|
|
|
|
|
info " and output file $OUTPUT_FILE${RESET}"
|
|
|
|
|
echo ""
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
|
2017-11-29 01:36:12 -08:00
|
|
|
debug " Comparing --use-stdin results: diff $EXPECTED_OUTPUT_FILE $OUTPUT_FILE"
|
|
|
|
|
$DIFF $EXPECTED_OUTPUT_FILE $OUTPUT_FILE
|
2016-04-18 22:42:20 -07:00
|
|
|
|
|
|
|
|
if ! [[ $? -eq 0 ]]; then
|
2017-01-06 01:13:29 -08:00
|
|
|
warning " ⊘ FAILED --use-stdin \n"
|
2016-04-18 22:42:20 -07:00
|
|
|
info " ${INFO}$OUTPUT_FILE${RESET}"
|
|
|
|
|
info " doesn't match expected output"
|
|
|
|
|
info " ${INFO}$EXPECTED_OUTPUT_FILE${RESET}"
|
|
|
|
|
echo ""
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-31 19:14:26 -07:00
|
|
|
function unit_test() {
|
|
|
|
|
FILE=$1
|
|
|
|
|
INPUT=$2
|
|
|
|
|
OUTPUT=$3
|
|
|
|
|
EXPECTED_OUTPUT=$4
|
2016-04-18 22:42:20 -07:00
|
|
|
|
|
|
|
|
FILENAME=$(basename $FILE)
|
|
|
|
|
FILEEXT="${FILENAME##*.}"
|
|
|
|
|
|
2017-03-09 12:09:34 -08:00
|
|
|
|
2016-04-12 23:34:30 -07:00
|
|
|
info "Unit Test: $FILE"
|
2016-04-11 01:22:19 -07:00
|
|
|
if [ "$(basename $FILE)" != "$(basename $FILE .ml)" ] || [ "$(basename $FILE)" != "$(basename $FILE .mli)" ]; then
|
|
|
|
|
if [ "$(basename $FILE)" != "$(basename $FILE .ml)" ]; then
|
|
|
|
|
REFILE="$(basename $FILE .ml).re"
|
|
|
|
|
else
|
|
|
|
|
REFILE="$(basename $FILE .mli).rei"
|
|
|
|
|
fi
|
2017-01-06 01:13:29 -08:00
|
|
|
debug "$REFMT --heuristics-file $INPUT/arity.txt --print-width 50 --print re $INPUT/$FILE 2>&1 > $OUTPUT/$REFILE"
|
|
|
|
|
$REFMT --heuristics-file $INPUT/arity.txt --print-width 50 --print re $INPUT/$FILE 2>&1 > $OUTPUT/$REFILE
|
2016-04-08 00:33:15 -07:00
|
|
|
if ! [[ $? -eq 0 ]]; then
|
2016-04-12 23:34:30 -07:00
|
|
|
warning " ⊘ TEST FAILED CONVERTING ML TO RE\n"
|
2016-04-15 17:58:33 +08:00
|
|
|
return 1
|
2016-04-08 00:33:15 -07:00
|
|
|
fi
|
|
|
|
|
FILE=$REFILE
|
|
|
|
|
else
|
2017-01-06 01:13:29 -08:00
|
|
|
debug " '$REFMT --print-width 50 --print re $INPUT/$FILE 2>&1 > $OUTPUT/$FILE'"
|
|
|
|
|
$REFMT --print-width 50 --print re $INPUT/$FILE 2>&1 > $OUTPUT/$FILE
|
2016-04-08 00:33:15 -07:00
|
|
|
fi
|
2016-03-31 19:14:26 -07:00
|
|
|
|
2017-03-09 12:09:34 -08:00
|
|
|
OFILE="${FILE}"
|
|
|
|
|
VERSION_SPECIFIC_FILE="${FILE}.${OCAML_VERSION}"
|
|
|
|
|
if [ -f "${EXPECTED_OUTPUT}/${VERSION_SPECIFIC_FILE}" ]; then
|
|
|
|
|
echo "Found test file specific to version ${OCAML_VERSION}..."
|
|
|
|
|
OFILE="${VERSION_SPECIFIC_FILE}"
|
|
|
|
|
fi
|
|
|
|
|
|
2017-11-29 01:36:12 -08:00
|
|
|
debug " Comparing results: diff $EXPECTED_OUTPUT/$OFILE $OUTPUT/$FILE"
|
2016-03-31 19:14:26 -07:00
|
|
|
|
2017-11-29 01:36:12 -08:00
|
|
|
$DIFF $EXPECTED_OUTPUT/$OFILE $OUTPUT/$FILE
|
2016-03-31 19:14:26 -07:00
|
|
|
|
|
|
|
|
if ! [[ $? -eq 0 ]]; then
|
2016-04-12 23:34:30 -07:00
|
|
|
warning " ⊘ FAILED\n"
|
|
|
|
|
info " ${INFO}$OUTPUT/$FILE${RESET}"
|
2016-04-15 17:58:33 +08:00
|
|
|
info " doesn't match expected output"
|
2017-03-09 12:09:34 -08:00
|
|
|
info " ${INFO}$EXPECTED_OUTPUT/$OFILE${RESET}"
|
2017-11-18 21:00:43 -08:00
|
|
|
info ""
|
|
|
|
|
info " To approve the changes run:"
|
|
|
|
|
info " cp $OUTPUT/$FILE $EXPECTED_OUTPUT/$OFILE"
|
2016-04-15 17:58:33 +08:00
|
|
|
echo ""
|
|
|
|
|
return 1
|
2016-03-31 19:14:26 -07:00
|
|
|
fi
|
|
|
|
|
|
2017-01-06 01:13:29 -08:00
|
|
|
debug "Testing --use-stdin"
|
2017-03-09 12:09:34 -08:00
|
|
|
stdin_test $INPUT/$1 $OUTPUT/$FILE $EXPECTED_OUTPUT/$OFILE $INPUT/arity.txt
|
2016-04-18 22:42:20 -07:00
|
|
|
|
|
|
|
|
if ! [[ $? -eq 0 ]]; then
|
|
|
|
|
return 1
|
|
|
|
|
else
|
|
|
|
|
success " ☑ PASS"
|
|
|
|
|
echo
|
|
|
|
|
fi
|
2016-03-31 19:14:26 -07:00
|
|
|
}
|
2016-02-19 16:36:03 -08:00
|
|
|
|
|
|
|
|
function idempotent_test() {
|
2016-03-31 19:14:26 -07:00
|
|
|
FILE=$1
|
|
|
|
|
INPUT=$2
|
|
|
|
|
OUTPUT=$3
|
2018-10-08 21:07:45 +01:00
|
|
|
EXTRA_FLAGS=${5-}
|
2016-02-19 16:36:03 -08:00
|
|
|
|
2016-04-18 22:42:20 -07:00
|
|
|
FILENAME=$(basename $FILE)
|
|
|
|
|
FILEEXT="${FILENAME##*.}"
|
|
|
|
|
|
2016-04-12 23:34:30 -07:00
|
|
|
info "Idempotent Test: $FILE"
|
2016-04-11 01:57:43 -07:00
|
|
|
if [ "$(basename $FILE)" != "$(basename $FILE .ml)" ] || [ "$(basename $FILE)" != "$(basename $FILE .mli)" ]; then
|
2016-04-11 01:22:19 -07:00
|
|
|
if [ "$(basename $FILE)" != "$(basename $FILE .ml)" ]; then
|
|
|
|
|
REFILE="$(basename $FILE .ml).re"
|
|
|
|
|
else
|
|
|
|
|
REFILE="$(basename $FILE .mli).rei"
|
|
|
|
|
fi
|
2016-04-15 17:58:33 +08:00
|
|
|
debug " Converting $FILE to $REFILE:"
|
2016-03-31 19:14:26 -07:00
|
|
|
|
2018-10-08 21:07:45 +01:00
|
|
|
debug " Formatting Once: $REFMT $EXTRA_FLAGS --heuristics-file $INPUT/arity.txt --print-width 50 --print re $INPUT/$FILE 2>&1 > $OUTPUT/$REFILE"
|
2017-01-06 01:13:29 -08:00
|
|
|
$REFMT --heuristics-file $INPUT/arity.txt --print-width 50 --print re $INPUT/$FILE 2>&1 > $OUTPUT/$REFILE
|
2016-04-08 00:33:15 -07:00
|
|
|
if ! [[ $? -eq 0 ]]; then
|
2016-04-12 23:34:30 -07:00
|
|
|
warning "⊘ FAILED\n"
|
2016-04-15 17:58:33 +08:00
|
|
|
return 1
|
2016-04-08 00:33:15 -07:00
|
|
|
fi
|
|
|
|
|
FILE=$REFILE
|
2018-10-08 21:07:45 +01:00
|
|
|
debug " Generating output again: $REFMT $EXTRA_FLAGS --print-width 50 --print re $OUTPUT/$FILE 2>&1 > $OUTPUT/$FILE.formatted"
|
2017-01-06 01:13:29 -08:00
|
|
|
$REFMT --print-width 50 --print re $OUTPUT/$FILE 2>&1 > $OUTPUT/$FILE.formatted
|
2016-04-08 00:33:15 -07:00
|
|
|
else
|
2018-10-08 21:07:45 +01:00
|
|
|
debug " Formatting Once: '$REFMT $EXTRA_FLAGS --print-width 50 --print re $INPUT/$FILE 2>&1 > $OUTPUT/$FILE'"
|
|
|
|
|
$REFMT $EXTRA_FLAGS --print-width 50 --print re $INPUT/$FILE 2>&1 > $OUTPUT/$FILE
|
2016-04-08 00:33:15 -07:00
|
|
|
|
2018-10-08 21:07:45 +01:00
|
|
|
debug " Generating output again: $REFMT $EXTRA_FLAGS --print-width 50 --print re $OUTPUT/$FILE 2>&1 > $OUTPUT/$FILE.formatted"
|
|
|
|
|
$REFMT $EXTRA_FLAGS --print-width 50 --print re $OUTPUT/$FILE 2>&1 > $OUTPUT/$FILE.formatted
|
2016-04-08 00:33:15 -07:00
|
|
|
fi
|
2016-03-31 19:14:26 -07:00
|
|
|
|
2017-10-05 01:57:32 -07:00
|
|
|
$DIFF $OUTPUT/$FILE $OUTPUT/$FILE.formatted
|
2016-02-19 16:36:03 -08:00
|
|
|
if ! [[ $? -eq 0 ]]; then
|
2016-04-12 23:34:30 -07:00
|
|
|
warning "⊘ FAILED\n"
|
2016-04-18 22:42:20 -07:00
|
|
|
info " ${INFO}$OUTPUT/$FILE.formatted${RESET}\n"
|
2016-04-15 17:58:33 +08:00
|
|
|
info " is not same as"
|
2016-04-18 22:42:20 -07:00
|
|
|
info " ${INFO}$OUTPUT/$FILE${RESET}"
|
2016-04-15 17:58:33 +08:00
|
|
|
return 1
|
2016-02-19 16:36:03 -08:00
|
|
|
fi
|
2016-03-31 19:14:26 -07:00
|
|
|
|
2017-01-06 01:13:29 -08:00
|
|
|
debug "Testing --use-stdin"
|
2018-10-08 21:07:45 +01:00
|
|
|
stdin_test $INPUT/$1 $OUTPUT/$FILE $OUTPUT/$FILE $INPUT/arity.txt "$EXTRA_FLAGS"
|
2016-04-18 22:42:20 -07:00
|
|
|
|
|
|
|
|
if ! [[ $? -eq 0 ]]; then
|
|
|
|
|
return 1
|
|
|
|
|
else
|
2018-10-08 21:07:45 +01:00
|
|
|
stdin_test $OUTPUT/$FILE $OUTPUT/$FILE.formatted $OUTPUT/$FILE $INPUT/arity.txt "$EXTRA_FLAGS"
|
2016-04-18 22:42:20 -07:00
|
|
|
if ! [[ $? -eq 0 ]]; then
|
|
|
|
|
return 1
|
|
|
|
|
else
|
|
|
|
|
success " ☑ PASS"
|
|
|
|
|
echo
|
|
|
|
|
fi
|
|
|
|
|
fi
|
2016-02-19 16:36:03 -08:00
|
|
|
}
|
|
|
|
|
|
2016-03-31 19:14:26 -07:00
|
|
|
function typecheck_test() {
|
2017-10-30 15:29:26 -07:00
|
|
|
FILE=$(basename $1)
|
2016-03-31 19:14:26 -07:00
|
|
|
INPUT=$2
|
|
|
|
|
OUTPUT=$3
|
2016-02-19 16:36:03 -08:00
|
|
|
|
2017-10-30 15:29:26 -07:00
|
|
|
info "Typecheck Test: $1"
|
|
|
|
|
|
|
|
|
|
if [ "$FILE" != "$(basename $FILE .ml)" ] || [ "$FILE" != "$(basename $FILE .mli)" ]; then
|
|
|
|
|
if [ "$FILE" != "$(basename $FILE .ml)" ]; then
|
|
|
|
|
REFILE="$(basename $FILE .ml).re"
|
2016-04-11 01:22:19 -07:00
|
|
|
else
|
2017-10-30 15:29:26 -07:00
|
|
|
REFILE="$(basename $FILE .mli).rei"
|
2016-04-11 01:22:19 -07:00
|
|
|
fi
|
2016-04-15 17:58:33 +08:00
|
|
|
debug " Converting $FILE to $REFILE:"
|
2017-01-06 01:13:29 -08:00
|
|
|
debug "$REFMT --heuristics-file $INPUT/arity.txt --print-width 50 --print re $INPUT/$FILE 2>&1 > $OUTPUT/$REFILE"
|
|
|
|
|
$REFMT --heuristics-file $INPUT/arity.txt --print-width 50 --print re $INPUT/$FILE 2>&1 > $OUTPUT/$REFILE
|
2016-03-31 19:14:26 -07:00
|
|
|
if ! [[ $? -eq 0 ]]; then
|
2016-04-12 23:34:30 -07:00
|
|
|
warning " ⊘ FAILED\n"
|
2016-04-15 17:58:33 +08:00
|
|
|
return 1
|
2016-03-31 19:14:26 -07:00
|
|
|
fi
|
|
|
|
|
FILE=$REFILE
|
|
|
|
|
else
|
2017-01-06 01:13:29 -08:00
|
|
|
debug " Formatting: $REFMT --print-width 50 --print re $INPUT/$FILE 2>&1 > $OUTPUT/$FILE"
|
|
|
|
|
$REFMT --print-width 50 --print re $INPUT/$FILE 2>&1 > $OUTPUT/$FILE
|
2016-03-31 19:14:26 -07:00
|
|
|
if ! [[ $? -eq 0 ]]; then
|
2016-04-12 23:34:30 -07:00
|
|
|
warning " ⊘ FAILED\n"
|
2016-04-15 17:58:33 +08:00
|
|
|
return 1
|
2016-03-31 19:14:26 -07:00
|
|
|
fi
|
|
|
|
|
fi
|
2017-10-30 15:29:26 -07:00
|
|
|
|
|
|
|
|
if [ "$FILE" != "$(basename $FILE .re)" ]; then
|
|
|
|
|
SUFFIX=".re"
|
|
|
|
|
COMPILE_FLAGS="-intf-suffix .rei -impl"
|
2016-04-11 01:22:19 -07:00
|
|
|
else
|
2017-10-30 15:29:26 -07:00
|
|
|
SUFFIX=".rei"
|
|
|
|
|
COMPILE_FLAGS="-intf"
|
2016-04-11 01:22:19 -07:00
|
|
|
fi
|
2016-02-19 16:36:03 -08:00
|
|
|
|
2017-10-30 15:29:26 -07:00
|
|
|
BASE_NAME=$(echo $FILE | cut -d '.' -f 1)
|
|
|
|
|
MIN_VERSION=$(basename $FILE $SUFFIX | cut -d '.' -f 2-4)
|
|
|
|
|
|
|
|
|
|
if [ "$MIN_VERSION" != "$BASE_NAME" ] && [ "$(version "$OCAML_VERSION")" -lt "$(version "$MIN_VERSION")" ]
|
|
|
|
|
then
|
|
|
|
|
notice " ☒ IGNORED COMPILATION STEP: Requires OCaml >= $MIN_VERSION"
|
|
|
|
|
else
|
|
|
|
|
debug " Compiling: ocamlc -c -pp $REFMT $COMPILE_FLAGS $OUTPUT/$FILE"
|
|
|
|
|
ocamlc -c -pp "$REFMT --print binary" $COMPILE_FLAGS "$OUTPUT/$FILE"
|
|
|
|
|
if ! [[ $? -eq 0 ]]; then
|
|
|
|
|
warning " ⊘ FAILED\n"
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
2016-03-31 19:14:26 -07:00
|
|
|
fi
|
2016-02-19 16:36:03 -08:00
|
|
|
|
2016-04-12 23:34:30 -07:00
|
|
|
success " ☑ PASS"
|
2016-03-31 19:14:26 -07:00
|
|
|
echo
|
|
|
|
|
}
|
2016-02-25 23:24:22 -08:00
|
|
|
|
2018-10-08 21:07:45 +01:00
|
|
|
function oprint_test() {
|
|
|
|
|
FILE=$1
|
|
|
|
|
INPUT=$2
|
|
|
|
|
OUTPUT=$3
|
|
|
|
|
EXPECTED_OUTPUT=$4
|
|
|
|
|
INTF_OUTPUT=$5
|
|
|
|
|
|
|
|
|
|
FILENAME=$(basename $FILE)
|
|
|
|
|
FILEEXT="${FILENAME##*.}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
info "Outcome Printer Test: $FILE"
|
|
|
|
|
|
|
|
|
|
debug " 'cat $FILE | $OPRINT_TEST_BIN $INPUT/$FILE 2>&1 > $OUTPUT/$FILE'"
|
|
|
|
|
cat $INPUT/$FILE | $OPRINT_TEST_BIN $INPUT/$FILE 2>&1 > $OUTPUT/$FILE
|
|
|
|
|
|
|
|
|
|
debug " 'cp $OUTPUT/$FILE $INTF_OUTPUT/$(basename $FILE .re).rei"
|
|
|
|
|
cp $OUTPUT/$FILE $INTF_OUTPUT/$(basename $FILE .re).rei
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OFILE="${FILE}"
|
|
|
|
|
VERSION_SPECIFIC_FILE="${FILE}.${OCAML_VERSION}"
|
|
|
|
|
if [ -f "${EXPECTED_OUTPUT}/${VERSION_SPECIFIC_FILE}" ]; then
|
|
|
|
|
echo "Found test file specific to version ${OCAML_VERSION}..."
|
|
|
|
|
OFILE="${VERSION_SPECIFIC_FILE}"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
debug " Comparing results: diff $EXPECTED_OUTPUT/$OFILE $OUTPUT/$FILE"
|
|
|
|
|
|
|
|
|
|
$DIFF $EXPECTED_OUTPUT/$OFILE $OUTPUT/$FILE
|
|
|
|
|
|
|
|
|
|
if ! [[ $? -eq 0 ]]; then
|
|
|
|
|
warning " ⊘ FAILED\n"
|
|
|
|
|
info " ${INFO}$OUTPUT/$FILE${RESET}"
|
|
|
|
|
info " doesn't match expected output"
|
|
|
|
|
info " ${INFO}$EXPECTED_OUTPUT/$OFILE${RESET}"
|
|
|
|
|
info ""
|
|
|
|
|
info " To approve the changes run:"
|
|
|
|
|
info " cp $OUTPUT/$FILE $EXPECTED_OUTPUT/$OFILE"
|
|
|
|
|
echo ""
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if ! [[ $? -eq 0 ]]; then
|
|
|
|
|
return 1
|
|
|
|
|
else
|
|
|
|
|
success " ☑ PASS"
|
|
|
|
|
echo
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
2016-04-24 18:46:00 -07:00
|
|
|
function error_test() {
|
|
|
|
|
FILE=$1
|
|
|
|
|
INPUT=$2
|
|
|
|
|
OUTPUT=$3
|
|
|
|
|
EXPECTED_OUTPUT=$4
|
|
|
|
|
|
|
|
|
|
info "Error Test: $FILE"
|
|
|
|
|
if [ "$(basename $FILE)" != "$(basename $FILE .ml)" ] || [ "$(basename $FILE)" != "$(basename $FILE .mli)" ]; then
|
|
|
|
|
warning " ⊘ FAILED: .ml files should not need to be run against error tests. \n"
|
|
|
|
|
return 1
|
|
|
|
|
else
|
2017-01-06 01:13:29 -08:00
|
|
|
debug " '$REFMT --print-width 50 --print re $INPUT/$FILE &> $OUTPUT/$FILE'"
|
2016-04-24 18:46:00 -07:00
|
|
|
# ensure errors are not absolute filepaths
|
|
|
|
|
cd $INPUT
|
2017-01-06 01:13:29 -08:00
|
|
|
$REFMT --print-width 50 --print re $(basename $FILE) &> $OUTPUT/$FILE
|
2016-04-18 22:42:20 -07:00
|
|
|
cd - > /dev/null
|
2016-04-24 18:46:00 -07:00
|
|
|
fi
|
|
|
|
|
|
2017-11-29 01:36:12 -08:00
|
|
|
debug " Comparing results: diff $EXPECTED_OUTPUT/$FILE $OUTPUT/$FILE"
|
2016-04-24 18:46:00 -07:00
|
|
|
|
2017-11-29 01:36:12 -08:00
|
|
|
$DIFF $EXPECTED_OUTPUT/$FILE $OUTPUT/$FILE
|
2016-04-24 18:46:00 -07:00
|
|
|
|
|
|
|
|
if ! [[ $? -eq 0 ]]; then
|
|
|
|
|
warning " ⊘ FAILED\n"
|
|
|
|
|
info " ${INFO}$OUTPUT/$FILE${RESET}"
|
|
|
|
|
info " doesn't match expected output"
|
|
|
|
|
info " ${INFO}$EXPECTED_OUTPUT/$FILE${RESET}"
|
2017-11-18 21:00:43 -08:00
|
|
|
info ""
|
|
|
|
|
info " To approve the changes run:"
|
|
|
|
|
info " cp $OUTPUT/$FILE $EXPECTED_OUTPUT/$FILE"
|
2016-04-24 18:46:00 -07:00
|
|
|
echo ""
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
success " ☑ PASS"
|
|
|
|
|
echo
|
|
|
|
|
}
|
|
|
|
|
|
2017-02-16 15:24:01 -08:00
|
|
|
|
2018-10-08 21:07:45 +01:00
|
|
|
cd $OPRINT_TEST_INPUT && find . -type f \( -name "*.re*" -or -name "*.ml*" \) | while read file; do
|
|
|
|
|
oprint_test $file $OPRINT_TEST_INPUT $OPRINT_TEST_OUTPUT $OPRINT_TEST_EXPECTED_OUTPUT $OPRINT_TEST_INTF_OUTPUT
|
|
|
|
|
if ! [[ $? -eq 0 ]]; then
|
|
|
|
|
echo "$file -- failed unit_test" >> $FAILED_TESTS
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
idempotent_test $file $OPRINT_TEST_OUTPUT $OPRINT_TEST_INTF_OUTPUT $OPRINT_TEST_EXPECTED_OUTPUT '-i true --parse re'
|
|
|
|
|
if ! [[ $? -eq 0 ]]; then
|
|
|
|
|
echo "$file -- failed idempotent_test" >> $FAILED_TESTS
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
|
2016-04-12 23:34:30 -07:00
|
|
|
cd $UNIT_TEST_INPUT && find . -type f \( -name "*.re*" -or -name "*.ml*" \) | while read file; do
|
2016-03-31 19:14:26 -07:00
|
|
|
unit_test $file $UNIT_TEST_INPUT $UNIT_TEST_OUTPUT $UNIT_TEST_EXPECTED_OUTPUT
|
2016-04-15 17:58:33 +08:00
|
|
|
if ! [[ $? -eq 0 ]]; then
|
2016-06-12 22:22:03 -07:00
|
|
|
echo "$file -- failed unit_test" >> $FAILED_TESTS
|
2016-04-15 17:58:33 +08:00
|
|
|
fi
|
|
|
|
|
|
2016-03-31 19:14:26 -07:00
|
|
|
idempotent_test $file $UNIT_TEST_INPUT $UNIT_TEST_OUTPUT $UNIT_TEST_EXPECTED_OUTPUT
|
2016-04-15 17:58:33 +08:00
|
|
|
if ! [[ $? -eq 0 ]]; then
|
2016-06-12 22:22:03 -07:00
|
|
|
echo "$file -- failed idempotent_test" >> $FAILED_TESTS
|
2016-04-15 17:58:33 +08:00
|
|
|
fi
|
2016-02-25 23:24:22 -08:00
|
|
|
done
|
|
|
|
|
|
2017-10-30 15:29:26 -07:00
|
|
|
cd $TYPE_TEST_INPUT
|
|
|
|
|
find . -type f \( -name "*.re*" -or -name "*.ml*" \) | sort | while read file; do
|
2016-03-31 19:14:26 -07:00
|
|
|
typecheck_test $file $TYPE_TEST_INPUT $TYPE_TEST_OUTPUT
|
2016-04-15 17:58:33 +08:00
|
|
|
if ! [[ $? -eq 0 ]]; then
|
2016-06-12 22:22:03 -07:00
|
|
|
echo "$file -- failed typecheck_test" >> $FAILED_TESTS
|
2016-04-15 17:58:33 +08:00
|
|
|
fi
|
2016-04-08 00:33:15 -07:00
|
|
|
unit_test $file $TYPE_TEST_INPUT $TYPE_TEST_OUTPUT $TYPE_TEST_EXPECTED_OUTPUT
|
2016-04-15 17:58:33 +08:00
|
|
|
if ! [[ $? -eq 0 ]]; then
|
2016-06-12 22:22:03 -07:00
|
|
|
echo "$file -- failed unit_test" >> $FAILED_TESTS
|
2016-04-15 17:58:33 +08:00
|
|
|
fi
|
2016-04-08 00:33:15 -07:00
|
|
|
idempotent_test $file $TYPE_TEST_INPUT $TYPE_TEST_OUTPUT $TYPE_TEST_EXPECTED_OUTPUT
|
2016-04-15 17:58:33 +08:00
|
|
|
if ! [[ $? -eq 0 ]]; then
|
2016-06-12 22:22:03 -07:00
|
|
|
echo "$file -- failed idempotent_test" >> $FAILED_TESTS
|
2016-04-15 17:58:33 +08:00
|
|
|
fi
|
2016-03-31 19:14:26 -07:00
|
|
|
done
|
2016-02-25 23:24:22 -08:00
|
|
|
|
2016-04-24 18:46:00 -07:00
|
|
|
cd $ERROR_TEST_INPUT && find . -type f \( -name "*.re*" -or -name "*.ml*" \) | while read file; do
|
|
|
|
|
error_test $file $ERROR_TEST_INPUT $ERROR_TEST_OUTPUT $ERROR_TEST_EXPECTED_OUTPUT
|
|
|
|
|
if ! [[ $? -eq 0 ]]; then
|
2016-06-12 22:22:03 -07:00
|
|
|
echo "$file -- failed error_test" >> $FAILED_TESTS
|
2016-04-24 18:46:00 -07:00
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
|
2016-04-15 17:58:33 +08:00
|
|
|
if [[ -s $FAILED_TESTS ]]; then
|
|
|
|
|
warning "Failed tests:"
|
|
|
|
|
cat $FAILED_TESTS
|
2016-04-12 23:34:30 -07:00
|
|
|
exit 1
|
2016-03-31 19:14:26 -07:00
|
|
|
fi
|
2016-02-19 16:36:03 -08:00
|
|
|
|
2016-03-31 19:14:26 -07:00
|
|
|
exit 0
|