Merge pull request #2842 from totten/master-api-rollback-soft-errors
[civicrm-core.git] / tools / scripts / jmat
1 #!/bin/bash
2 ####################################################################
3 function show_help() {
4 echo "Jeanine Matthews - Divergent Hunter"
5 echo "summary: Execute test suite in multiple ways and compare results"
6 echo "usage: env [var1=... var2=...] $0 [--bundled-full|--bf] [--bundled-indiv|--bi] [--standalone-full|--sf] [--standalone-indiv|--si] [--compare]"
7 echo "Optional variables:"
8 echo " - CIVI: Path to Civi installation [$CIVI]"
9 echo " - PHP: Path to PHP binary [$PHP]"
10 echo " - PHPUNIT: Path to phpunit binary [$PHPUNIT]"
11 echo " - TESTCLASS: PHP class name for the test case/suite [$TESTCLASS]"
12 echo " - TESTPATH: Path for the test file/directory (Note: MUST match TESTCLASS) [$TESTPATH]"
13 echo " - OUTDIR: Folder to which outputs are written [$OUTDIR]"
14 }
15
16 function reset_dir() {
17 [ -d "$1" ] && rm -rf "$1"
18 mkdir -p "$1"
19 }
20
21 ####################################################################
22 ## Env
23 export PHP=${PHP:-php}
24 export PHPUNIT=${PHPUNIT:-phpunit}
25 export TESTCLASS=${TESTCLASS:-api_v3_AllTests}
26 export TESTPATH=${TESTPATH:-tests/phpunit/api/v3}
27 export CIVI=$(realpath "${CIVI:-.}")
28 export OUTDIR=$(realpath "${OUTDIR:-output}")
29
30 ####################################################################
31 ## Main
32 if [ -z "$1" ];then
33 show_help
34 exit 1
35 fi
36
37 while [ -n "$1" ]; do
38 OPTION="$1"
39 shift
40
41 case "$OPTION" in
42 --bundled-full|--bf)
43 echo "[[ Prepare $OUTDIR/bundled-full ]]"
44
45 [ -d "packages/PHPUnit.bak" ] && mv "packages/PHPUnit.bak" "packages/PHPUnit"
46 if [ ! -d "$CIVI/packages/PHPUnit" ]; then
47 echo "Missing $CIVI/packages/PHPUnit"
48 exit 2
49 fi
50
51 reset_dir "$OUTDIR/bundled-full"
52
53 pushd "$CIVI/tools"
54 $PHP ./scripts/phpunit --tap --log-json "$OUTDIR/bundled-full/all.json" "$TESTCLASS"
55 popd
56 ;;
57
58 --bundled-indiv|--bi)
59 echo "[[ Prepare $OUTDIR/bundled-indiv ]]"
60
61 [ -d "packages/PHPUnit.bak" ] && mv "packages/PHPUnit.bak" "packages/PHPUnit"
62 if [ ! -d "$CIVI/packages/PHPUnit" ]; then
63 echo "Missing $CIVI/packages/PHPUnit"
64 exit 2
65 fi
66
67 reset_dir "$OUTDIR/bundled-indiv"
68
69 pushd "$CIVI/tools"
70 ./scripts/phpunit-indiv --civi --test-dir "../$TESTPATH" --json-dir "$OUTDIR/bundled-indiv"
71 popd
72
73 cat "$OUTDIR"/bundled-indiv/*-*.json > "$OUTDIR/bundled-indiv/all.json"
74 ;;
75
76 --standalone-full|--sf)
77 echo "[[ Prepare $OUTDIR/standalone-full ]]"
78 reset_dir "$OUTDIR/standalone-full"
79
80 pushd "$CIVI"
81 [ -d "packages/PHPUnit" ] && mv "packages/PHPUnit" "packages/PHPUnit.bak"
82 $PHP $(which $PHPUNIT) --tap --log-json "$OUTDIR/standalone-full/all.json" "$TESTPATH"
83 [ -d "packages/PHPUnit.bak" ] && mv "packages/PHPUnit.bak" "packages/PHPUnit"
84 popd
85 ;;
86
87 --standalone-indiv|--si)
88 echo "[[ Prepare $OUTDIR/standalone-indiv ]]"
89 reset_dir "$OUTDIR/standalone-indiv"
90
91 pushd "$CIVI"
92 [ -d "packages/PHPUnit" ] && mv "packages/PHPUnit" "packages/PHPUnit.bak"
93 ./tools/scripts/phpunit-indiv --test-dir "$TESTPATH" --json-dir "$OUTDIR/standalone-indiv"
94 [ -d "packages/PHPUnit.bak" ] && mv "packages/PHPUnit.bak" "packages/PHPUnit"
95 popd
96
97 cat "$OUTDIR"/standalone-indiv/*-*.json > "$OUTDIR/standalone-indiv/all.json"
98 ;;
99
100 --compare)
101 echo "[[ Compare all results in $OUTDIR ]]"
102 phpunit-compare "$OUTDIR"/*/all.json
103 ;;
104 esac
105 done