File: test.sh

package info (click to toggle)
tree-sitter-bash 0.25.1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 10,520 kB
  • sloc: ansic: 352,182; javascript: 1,083; sh: 747; makefile: 101; python: 92; lisp: 47; cpp: 14
file content (138 lines) | stat: -rwxr-xr-x 2,481 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/usr/bin/env bash

set -e

function usage {
  cat <<-EOF
USAGE

  $0  [-dgGhv] [-f focus-string] [-s seed]

OPTIONS

  -h  print this message

  -b  run make under scan-build static analyzer

  -d  run tests in a debugger (either lldb or gdb)

  -g  run tests with valgrind's memcheck tool

  -G  run tests with valgrind's memcheck tool, including a full leak check

  -v  run tests with verbose output

  -f  run only tests whose description contain the given string

  -s  set the seed used to control random behavior

  -z  pipe tests' stderr to \`dot(1)\` to render an SVG log


EOF
}

profile=
leak_check=no
mode=normal
verbose=
args=()
target=tests
export BUILDTYPE=Test
cmd="out/${BUILDTYPE}/${target}"
run_scan_build=

if [ "$(uname -s)" == "Darwin" ]; then
  export LINK="clang++ -fsanitize=address"
fi

while getopts "bdf:s:gGhpvS" option; do
  case ${option} in
    h)
      usage
      exit
      ;;
    d)
      mode=debug
      ;;
    g)
      mode=valgrind
      ;;
    G)
      mode=valgrind
      leak_check=full
      ;;
    p)
      profile=true
      ;;
    f)
      args+=("--only=${OPTARG}")
      ;;
    v)
      verbose=true
      ;;
    s)
      export TREE_SITTER_SEED=${OPTARG}
      ;;
    S)
      mode=SVG
      ;;
    b)
      run_scan_build=true
      ;;
  esac
done

if [[ -n $verbose ]]; then
  args+=("--reporter=spec")
else
  args+=("--reporter=singleline")
fi

if [[ -n "$run_scan_build" ]]; then
  . script/util/scan-build.sh
  scan_build make -j2 $target
else
  make -j2 $target
fi
args=${args:-""}

if [[ -n $profile ]]; then
  export CPUPROFILE=/tmp/${target}-$(date '+%s').prof
fi

case ${mode} in
  valgrind)
    valgrind                                     \
      --suppressions=./script/util/valgrind.supp \
      --dsymutil=yes                             \
      --leak-check=${leak_check}                 \
      $cmd "${args[@]}" 2>&1 |                   \
      grep --color -E '\w+_tests?.cc:\d+|$'
    ;;

  debug)
    if which -s lldb; then
      lldb $cmd -- "${args[@]}"
    elif which -s gdb; then
      gdb $cmd -- "${args[@]}"
    else
      echo "No debugger found"
      exit 1
    fi
    ;;

  SVG)
    echo "<!DOCTYPE html><style>svg { width: 100%; margin-bottom: 20px; }</style>" > index.html
    $cmd "${args[@]}" 2> >(grep -v 'Assertion failed' | dot -Tsvg >> index.html)
    echo "Wrote index.html"
    ;;

  normal)
    time $cmd "${args[@]}"
    ;;
esac

if [[ -n $profile ]]; then
  pprof $cmd $CPUPROFILE
fi