#!/usr/bin/env bash # # Converts assertion failure text involving two mutations to a diff. # cmd="diff -au" sed_cmd="sed -E" while getopts ":d:" opt; do case $opt in d) cmd="$OPTARG";; *) echo "Usage: $0 [-d diff_command] []" 1>&2 exit 1;; esac done shift $((OPTIND-1)) file="$1" if [ -z "$file" -o "$file" = "-" ]; then tmpfile=$(mktemp) cat > "$tmpfile" file="$tmpfile" fi function filter { $sed_cmd 's/@0x[0-9a-f]*//g' } begin="(expected |critical check .+ == .+ has failed \[)" middle="(got:|\!=)" end="^$|\}\]|Leaving test case" $cmd <($sed_cmd -n "/$begin/,/$middle/p" "$file" | head -n-1 | $sed_cmd "s/.*$begin/&\n/" | filter) \ <($sed_cmd -n "/$middle/,/$end/p" "$file" | $sed_cmd "s/.*$middle /&\n/" | filter) | less -R if [ -n "$tmpfile" ]; then rm -f "$tmpfile" fi