annotate export-tests/test-layer-exports.sh @ 2596:04d381f0d89a tip

Default branch is now named default on git as well as hg, in case we ever want to switch to mirroring in the other direction
author Chris Cannam
date Thu, 27 Aug 2020 15:58:56 +0100
parents 7535f13569fa
children
rev   line source
Chris@2438 1 #!/bin/bash
Chris@2438 2 #
Chris@2438 3 # Regression tests for layer export to CSV
Chris@2438 4 # Must be run from directory that contains this script
Chris@2438 5
Chris@2438 6 # NB hardcoded assumptions here about the contents of the session
Chris@2438 7 # file, so the session file (all.sv) is also hardcoded. The session is
Chris@2438 8 # expected to consist of:
Chris@2438 9 #
Chris@2438 10 # - pane 1 with 3 layers (ruler, waveform, instants)
Chris@2438 11 # - pane 2 with 3 layers (ruler, waveform, values)
Chris@2438 12 # - pane 3 with 3 layers (ruler, image, regions)
Chris@2438 13 # - pane 4 with 3 layers (ruler, text, notes)
Chris@2438 14 # - pane 5 with 2 layers (ruler, 3d plot)
Chris@2438 15 # - pane 6 with 3 layers (ruler, spectrogram, boxes)
Chris@2438 16 # - pane 7 with 2 layers (ruler, peak frequency spectrogram)
Chris@2438 17
Chris@2438 18 set -e
Chris@2438 19
Chris@2438 20 if [ -n "$1" ]; then
Chris@2438 21 echo "Usage: $0" 1>&2
Chris@2438 22 exit 2
Chris@2438 23 fi
Chris@2438 24
Chris@2438 25 set -u
Chris@2438 26
Chris@2438 27 sv="../sonic-visualiser"
Chris@2438 28 if [ ! -f "$sv" -o ! -x "$sv" ]; then
Chris@2438 29 echo "This script must be run from the sonic-visualiser/test directory" 1>&2
Chris@2438 30 exit 1
Chris@2438 31 fi
Chris@2438 32
Chris@2557 33 version=$("$sv" -v 2>&1 | grep -v App)
Chris@2438 34 adequate=no
Chris@2438 35 case "$version" in
Chris@2438 36 [012].*) ;;
Chris@2438 37 3.[012]) ;;
Chris@2438 38 3.[012].*) ;;
Chris@2438 39 [1-9]*) adequate=yes ;;
Chris@2438 40 *) echo "Failed to query Sonic Visualiser version" 1>&2
Chris@2438 41 exit 1 ;;
Chris@2438 42 esac
Chris@2438 43 if [ "$adequate" = "no" ]; then
Chris@2438 44 echo "Sonic Visualiser version must be at least 3.3 (supporting --osc-script option)" 1>&2
Chris@2438 45 exit 1
Chris@2438 46 fi
Chris@2438 47
Chris@2438 48 session="all.sv"
Chris@2438 49
Chris@2438 50 if [ ! -f "$session" ]; then
Chris@2438 51 echo "Session file $session not found" 1>&2
Chris@2438 52 exit 1
Chris@2438 53 fi
Chris@2438 54
Chris@2438 55 tmpdir=$(mktemp -d)
Chris@2443 56 trap "rm -rf $tmpdir" 0
Chris@2438 57
Chris@2438 58 input="$tmpdir/input.sv"
Chris@2438 59
Chris@2438 60 cp "$session" "$input"
Chris@2438 61
Chris@2438 62 cat > "$tmpdir/script" <<EOF
Chris@2439 63 # Load the session file
Chris@2438 64 /open "$input"
Chris@2439 65
Chris@2439 66 # Select each exportable layer in turn and export to a CSV file
Chris@2438 67 /setcurrent 1 3
Chris@2438 68 /exportlayer "$tmpdir/instants.csv"
Chris@2438 69 /setcurrent 2 3
Chris@2438 70 /exportlayer "$tmpdir/values.csv"
Chris@2438 71 /setcurrent 3 2
Chris@2438 72 /exportlayer "$tmpdir/image.csv"
Chris@2438 73 /setcurrent 3 3
Chris@2438 74 /exportlayer "$tmpdir/regions.csv"
Chris@2438 75 /setcurrent 4 2
Chris@2438 76 /exportlayer "$tmpdir/text.csv"
Chris@2438 77 /setcurrent 4 3
Chris@2438 78 /exportlayer "$tmpdir/notes.csv"
Chris@2438 79 /setcurrent 5 2
Chris@2438 80 /exportlayer "$tmpdir/3dplot.csv"
Chris@2438 81 /setcurrent 6 2
Chris@2438 82 /exportlayer "$tmpdir/spectrogram.csv"
Chris@2438 83 /setcurrent 6 3
Chris@2438 84 /exportlayer "$tmpdir/boxes.csv"
Chris@2438 85 /setcurrent 7 2
Chris@2438 86 /exportlayer "$tmpdir/peakfreq.csv"
Chris@2439 87
Chris@2439 88 # Note layer can also be exported as MIDI
Chris@2439 89 /setcurrent 4 3
Chris@2439 90 /exportlayer "$tmpdir/notes.mid"
Chris@2439 91
Chris@2509 92 # And everything as SVL
Chris@2509 93 /setcurrent 1 3
Chris@2509 94 /exportlayer "$tmpdir/instants.svl"
Chris@2509 95 /setcurrent 2 3
Chris@2509 96 /exportlayer "$tmpdir/values.svl"
Chris@2509 97 /setcurrent 3 2
Chris@2509 98 /exportlayer "$tmpdir/image.svl"
Chris@2509 99 /setcurrent 3 3
Chris@2509 100 /exportlayer "$tmpdir/regions.svl"
Chris@2509 101 /setcurrent 4 2
Chris@2509 102 /exportlayer "$tmpdir/text.svl"
Chris@2509 103 /setcurrent 4 3
Chris@2509 104 /exportlayer "$tmpdir/notes.svl"
Chris@2509 105 /setcurrent 5 2
Chris@2509 106 /exportlayer "$tmpdir/3dplot.svl"
Chris@2509 107 /setcurrent 6 2
Chris@2509 108 /exportlayer "$tmpdir/spectrogram.svl"
Chris@2509 109 /setcurrent 6 3
Chris@2509 110 /exportlayer "$tmpdir/boxes.svl"
Chris@2509 111 /setcurrent 7 2
Chris@2509 112 /exportlayer "$tmpdir/peakfreq.svl"
Chris@2509 113
Chris@2509 114 # Now test exporting only the contents of a (multiple) selection. This
Chris@2509 115 # is only supported for CSV files.
Chris@2439 116 # First set waveform layer as current, to avoid snapping the selection
Chris@2439 117 # to the contents of an annotation layer.
Chris@2439 118 /setcurrent 1 2
Chris@2439 119
Chris@2439 120 # Make a selection
Chris@2439 121 /select 8 10
Chris@2439 122 /addselect 14 16
Chris@2439 123
Chris@2439 124 # And repeat all the previous exports
Chris@2439 125 /setcurrent 1 3
Chris@2439 126 /exportlayer "$tmpdir/selected-instants.csv"
Chris@2439 127 /setcurrent 2 3
Chris@2439 128 /exportlayer "$tmpdir/selected-values.csv"
Chris@2439 129 /setcurrent 3 2
Chris@2439 130 /exportlayer "$tmpdir/selected-image.csv"
Chris@2439 131 /setcurrent 3 3
Chris@2439 132 /exportlayer "$tmpdir/selected-regions.csv"
Chris@2439 133 /setcurrent 4 2
Chris@2439 134 /exportlayer "$tmpdir/selected-text.csv"
Chris@2439 135 /setcurrent 4 3
Chris@2439 136 /exportlayer "$tmpdir/selected-notes.csv"
Chris@2439 137 /setcurrent 5 2
Chris@2439 138 /exportlayer "$tmpdir/selected-3dplot.csv"
Chris@2439 139 /setcurrent 6 2
Chris@2439 140 /exportlayer "$tmpdir/selected-spectrogram.csv"
Chris@2439 141 /setcurrent 6 3
Chris@2439 142 /exportlayer "$tmpdir/selected-boxes.csv"
Chris@2439 143 /setcurrent 7 2
Chris@2439 144 /exportlayer "$tmpdir/selected-peakfreq.csv"
Chris@2439 145
Chris@2439 146 /setcurrent 4 3
Chris@2439 147 /exportlayer "$tmpdir/selected-notes.mid"
Chris@2439 148
Chris@2444 149 # If we also zoom in vertically in the 3d plot, our export should
Chris@2444 150 # include only the zoomed area - check this
Chris@2444 151 /setcurrent 5 2
Chris@2444 152 /zoomvertical 0 12
Chris@2444 153 /exportlayer "$tmpdir/selected-zoomed-3dplot.csv"
Chris@2444 154
Chris@2438 155 /quit
Chris@2438 156 EOF
Chris@2438 157
Chris@2438 158 "$sv" --no-splash --osc-script "$tmpdir/script"
Chris@2438 159
Chris@2438 160 for type in instants values image regions text notes 3dplot spectrogram boxes peakfreq ; do
Chris@2509 161 for format in csv svl ; do
Chris@2509 162 for pfx in "" "selected-"; do
Chris@2509 163 if [ "$format" = "svl" ] && [ -n "$pfx" ]; then
Chris@2509 164 continue
Chris@2499 165 fi
Chris@2509 166 actual="$tmpdir/$pfx$type.$format"
Chris@2509 167 expected="layers-expected/$pfx$type.$format"
Chris@2509 168 if ! cmp -s "$actual" "$expected" ; then
Chris@2509 169 echo
Chris@2509 170 if [ -z "$pfx" ]; then
Chris@2509 171 echo "Test failed for file type $format, layer type \"$type\"!"
Chris@2509 172 else
Chris@2509 173 echo "Test failed for selected regions in layer type \"$type\"!"
Chris@2509 174 fi
Chris@2509 175 echo
Chris@2509 176 echo "Actual:"
Chris@2509 177 ls -l "$actual"
Chris@2509 178 echo "Expected:"
Chris@2509 179 ls -l "$expected"
Chris@2509 180 echo
Chris@2509 181 echo "Diff begins:"
Chris@2509 182 git diff --no-index --word-diff=color --word-diff-regex=. "$actual" "$expected" | head
Chris@2509 183 echo
Chris@2509 184 fi
Chris@2509 185 done
Chris@2439 186 done
Chris@2439 187 done
Chris@2439 188
Chris@2444 189 for csv in selected-zoomed-3dplot.csv ; do
Chris@2444 190 actual="$tmpdir/$csv"
Chris@2444 191 expected="layers-expected/$csv"
Chris@2444 192 if ! cmp -s "$actual" "$expected" ; then
Chris@2444 193 echo
Chris@2444 194 echo "Test failed for \"$csv\"!"
Chris@2444 195 echo
Chris@2444 196 echo "Actual:"
Chris@2444 197 ls -l "$actual"
Chris@2444 198 echo "Expected:"
Chris@2444 199 ls -l "$expected"
Chris@2444 200 echo
Chris@2444 201 echo "Diff begins:"
Chris@2499 202 git diff --no-index --word-diff=color --word-diff-regex=. "$actual" "$expected" | head
Chris@2444 203 echo
Chris@2444 204 fi
Chris@2444 205 done
Chris@2444 206
Chris@2439 207 for other in notes.mid selected-notes.mid ; do
Chris@2439 208 actual="$tmpdir/$other"
Chris@2439 209 expected="layers-expected/$other"
Chris@2438 210 if ! cmp -s "$actual" "$expected" ; then
Chris@2438 211 echo
Chris@2439 212 if [ -z "$pfx" ]; then
Chris@2439 213 echo "Test failed for \"$other\"!"
Chris@2439 214 fi
Chris@2438 215 echo
Chris@2438 216 echo "Actual:"
Chris@2438 217 ls -l "$actual"
Chris@2439 218 echo "Expected:"
Chris@2438 219 ls -l "$expected"
Chris@2438 220 echo
Chris@2439 221 od -c "$actual" > "$actual".txt
Chris@2439 222 od -c "$expected" > "$tmpdir/expected-$other".txt
Chris@2439 223 echo
Chris@2439 224 echo "Diff:"
Chris@2499 225 git diff --no-index --word-diff=color --word-diff-regex=. "$actual".txt "expected-$other".txt | head
Chris@2438 226 echo
Chris@2438 227 fi
Chris@2438 228 done
Chris@2438 229