| 1 | #!/usr/bin/env bash
 | 
| 2 | #
 | 
| 3 | # Analogous to test/spec.sh, but for the environment set up by test/alpine2.sh.
 | 
| 4 | #
 | 
| 5 | # Usage:
 | 
| 6 | #   test/spec-alpine.sh <function name>
 | 
| 7 | 
 | 
| 8 | set -o nounset
 | 
| 9 | set -o pipefail
 | 
| 10 | set -o errexit
 | 
| 11 | shopt -s strict:all 2>/dev/null || true  # dogfood for OSH
 | 
| 12 | 
 | 
| 13 | source test/common.sh
 | 
| 14 | source test/spec-common.sh
 | 
| 15 | 
 | 
| 16 | readonly SH=osh  # just use the one in the $PATH
 | 
| 17 | 
 | 
| 18 | builtin-bracket() {
 | 
| 19 |   # some tests depend on 'bin' existing
 | 
| 20 |   # Also running as root so you can read anything!  Doh!  Need a real user.
 | 
| 21 |   sh-spec spec/builtin-bracket.test.sh --oils-failures-allowed 3 \
 | 
| 22 |     $SH "$@"
 | 
| 23 | }
 | 
| 24 | 
 | 
| 25 | # This is bash/OSH only
 | 
| 26 | builtin-completion() {
 | 
| 27 |   # 8 failures instead of 1
 | 
| 28 |   sh-spec spec/builtin-completion.test.sh --oils-failures-allowed 8 \
 | 
| 29 |     $SH "$@"
 | 
| 30 | }
 | 
| 31 | 
 | 
| 32 | builtin-eval-source() {
 | 
| 33 |   sh-spec spec/builtin-eval-source.test.sh $SH "$@"
 | 
| 34 | }
 | 
| 35 | 
 | 
| 36 | builtin-trap() {
 | 
| 37 |   sh-spec spec/builtin-trap.test.sh --oils-failures-allowed 3 \
 | 
| 38 |     $SH "$@"
 | 
| 39 | }
 | 
| 40 | 
 | 
| 41 | builtins() {
 | 
| 42 |   # 6 failures instead of 1
 | 
| 43 |   sh-spec spec/builtins.test.sh --oils-failures-allowed 6 \
 | 
| 44 |     $SH "$@"
 | 
| 45 | }
 | 
| 46 | 
 | 
| 47 | errexit-oil() {
 | 
| 48 |   sh-spec spec/errexit-oil.test.sh $SH "$@"
 | 
| 49 | }
 | 
| 50 | 
 | 
| 51 | glob() {
 | 
| 52 |   # 11 failures rather than 7 under Ubuntu.  Probably due to musl libc globbing
 | 
| 53 |   # differences.
 | 
| 54 |   sh-spec spec/glob.test.sh --oils-failures-allowed 11 \
 | 
| 55 |     $SH "$@"
 | 
| 56 | }
 | 
| 57 | 
 | 
| 58 | introspect() {
 | 
| 59 |   sh-spec spec/introspect.test.sh $SH "$@"
 | 
| 60 | }
 | 
| 61 | 
 | 
| 62 | loop() {
 | 
| 63 |   # 1 failure instead of 0
 | 
| 64 |   sh-spec spec/loop.test.sh --oils-failures-allowed 1 \
 | 
| 65 |     $SH "$@"
 | 
| 66 | }
 | 
| 67 | 
 | 
| 68 | smoke() {
 | 
| 69 |   # 1 failure instead of 0
 | 
| 70 |   sh-spec spec/smoke.test.sh --oils-failures-allowed 1 $SH "$@"
 | 
| 71 | }
 | 
| 72 | 
 | 
| 73 | strict-options() {
 | 
| 74 |   sh-spec spec/strict-options.test.sh $SH "$@"
 | 
| 75 | }
 | 
| 76 | 
 | 
| 77 | var-op-len() {
 | 
| 78 |   sh-spec spec/var-op-len.test.sh $SH "$@"
 | 
| 79 | }
 | 
| 80 | 
 | 
| 81 | run-file() {
 | 
| 82 |   ### Run a test with the given name.
 | 
| 83 | 
 | 
| 84 |   local test_name=$1
 | 
| 85 |   shift
 | 
| 86 | 
 | 
| 87 |   if declare -F "$test_name"; then
 | 
| 88 |     # Delegate to a function in this file.
 | 
| 89 |     "$test_name" "$@"
 | 
| 90 |   else
 | 
| 91 |     # Run it with OSH
 | 
| 92 |     sh-spec spec/$test_name.test.sh $SH "$@"
 | 
| 93 |   fi
 | 
| 94 | }
 | 
| 95 | 
 | 
| 96 | all() {
 | 
| 97 |   # TODO: Test this function and run in CI
 | 
| 98 | 
 | 
| 99 |   export OSH_LIST=osh YSH_LIST=ysh
 | 
| 100 | 
 | 
| 101 |   # this is like test/spec.sh {oil,osh}-all
 | 
| 102 |   # $suite $compare_mode $spec_subdir
 | 
| 103 |   test/spec-runner.sh all-parallel oil release-alpine oil-language
 | 
| 104 |   test/spec-runner.sh all-parallel osh release-alpine survey
 | 
| 105 | }
 | 
| 106 | 
 | 
| 107 | home-page() {
 | 
| 108 |   cat <<EOF
 | 
| 109 | <h1>Spec Test Results</h2>
 | 
| 110 | 
 | 
| 111 | <a href="_tmp/spec/osh.html">osh.html</a> <br/>
 | 
| 112 | <a href="_tmp/spec/oil.html">oil.html</a> <br/>
 | 
| 113 | 
 | 
| 114 | EOF
 | 
| 115 | }
 | 
| 116 | 
 | 
| 117 | # oilshell.org/spec-results/$date-$hostname-$distro.wwz/
 | 
| 118 | #   _tmp/spec/     # from _tmp/spec
 | 
| 119 | #     osh.html
 | 
| 120 | #     oil.html
 | 
| 121 | #   web/           # from web
 | 
| 122 | 
 | 
| 123 | manifest() {
 | 
| 124 |   find index.html _tmp/spec/ web/ -type f 
 | 
| 125 | }
 | 
| 126 | 
 | 
| 127 | archive-results() {
 | 
| 128 |   local archive_type=${1:-zip}  # zip or tar
 | 
| 129 | 
 | 
| 130 |   home-page > index.html
 | 
| 131 |   local out_name="$(date +%Y-%m-%d__%H-%M-%S)__$(hostname)"
 | 
| 132 | 
 | 
| 133 |   case $archive_type in
 | 
| 134 |     # zip isn't in POSIX so some systems might not have it.
 | 
| 135 |     tar)
 | 
| 136 |       local out=$out_name.tar.gz
 | 
| 137 |       manifest | xargs -- tar -c -z > $out
 | 
| 138 |       ;;
 | 
| 139 | 
 | 
| 140 |     zip)
 | 
| 141 |       # .wwz is just a zip file that is served
 | 
| 142 |       local out=$out_name.wwz
 | 
| 143 |       manifest | xargs -- zip $out
 | 
| 144 |       ;;
 | 
| 145 | 
 | 
| 146 |     *)
 | 
| 147 |       die "Invalid type $archive_type"
 | 
| 148 |       ;;
 | 
| 149 |   esac
 | 
| 150 | 
 | 
| 151 |   ls -l $out
 | 
| 152 | }
 | 
| 153 | 
 | 
| 154 | "$@"
 |