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.

43 lines
1.2 KiB

3 years ago
#!/bin/bash
# Copyright (c) Facebook, Inc. and its affiliates.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
# Script to validate Yojson outputs w.r.t. ATD specifications.
# This works by running a given 'converter' to parse and pretty-print the outputs, then observing the difference with gunzip + pretty-print.
if [ "$2" == "--std" ]; then
CONVERTER=("$1" --std --pretty)
YDUMP=(ydump -std)
shift 2
else
CONVERTER=("$1" --pretty)
YDUMP=(ydump)
shift
fi
while [ -n "$1" ]
do
if [[ "$1" == *.gz ]]; then
DUMP_CMD=(gunzip -c "$1")
else
DUMP_CMD=(cat "$1")
fi
if ! diff -q <("${DUMP_CMD[@]}" | "${YDUMP[@]}") <("${CONVERTER[@]}" "$1" /dev/stdout) >/dev/null 2>&1; then
echo "The file '$1' does not respect the ATD format implemented by $CONVERTER."
echo "Here is the command that shows the problem:"
echo -n " diff <("
printf '%s ' "${DUMP_CMD[@]}"
echo -n "| "
printf '"%s" ' "${YDUMP[@]}"
echo -n ") <("
printf '"%s" ' "${CONVERTER[@]}" "$1"
echo "/dev/stdout)"
exit 2
fi
shift;
done