#!/usr/bin/env bash # # Runs the full suite of tests against LinkedIn DustJS and duster to compare the result set -euo pipefail IFS=$'\n\t' DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" failed_count=0 show_diff=0 while (( "$#" )); do if [ "$1" = "--help" ]; then cat<&2 echo "Unrecognized option: $1") exit 1 fi shift done while read -r test_group; do test_group_name=$(basename "$test_group") while read -r test_case; do test_case_file_name=$(basename "$test_case") test_case_name=${test_case_file_name%.*} set +e ( if cmp -s <(xargs -a <(find "$test_group" -maxdepth 1 -mindepth 1 -type f -name 'main.dust'; find "$test_group" -maxdepth 1 -mindepth 1 -type f -name '*.dust' ! -name 'main.dust' | sort) node "$DIR/dustjs_shim.js" < "$test_case") <(xargs -a <(find "$test_group" -maxdepth 1 -mindepth 1 -type f -name 'main.dust'; find "$test_group" -maxdepth 1 -mindepth 1 -type f -name '*.dust' ! -name 'main.dust' | sort) "$DIR/../target/debug/duster-cli" < "$test_case"); then echo "$test_group_name::$test_case_name PASSED" else echo "$test_group_name::$test_case_name FAILED" if [ $show_diff -eq 1 ]; then diff --label "dustjs-linked" --label "duster" <(xargs -a <(find "$test_group" -maxdepth 1 -mindepth 1 -type f -name 'main.dust'; find "$test_group" -maxdepth 1 -mindepth 1 -type f -name '*.dust' ! -name 'main.dust' | sort) node "$DIR/dustjs_shim.js" < "$test_case" 2>/dev/null ) <(xargs -a <(find "$test_group" -maxdepth 1 -mindepth 1 -type f -name 'main.dust'; find "$test_group" -maxdepth 1 -mindepth 1 -type f -name '*.dust' ! -name 'main.dust' | sort) "$DIR/../target/debug/duster-cli" < "$test_case" 2>/dev/null ) fi exit 1 fi ) if [ $? -ne 0 ]; then failed_count=$((failed_count + 1)) fi set -e done <<<"$(find "$test_group" -maxdepth 1 -mindepth 1 -type f -name '*.json' | sort)" done <<<"$(find "$DIR/test_cases" -maxdepth 1 -mindepth 1 -type d | sort)" if [ $failed_count -ne 0 ]; then echo "$failed_count failed tests" exit 1 else echo "All tests passed" fi