1 ## our_shell: ysh
2
3 #### Test framework
4
5 source --builtin testing.ysh
6 setglobal _test_use_color = false
7
8 test-suite "three bad tests" {
9 test-case "the assertion is false" {
10 assert [1 > 0]
11 assert [1 > 1]
12 assert [1 > 2]
13 }
14
15 test-case "there is an exception while evaluating the assertion" {
16 assert ["Superman" > "Batman"]
17 }
18
19 test-case "there is an exception outside of any assertion" {
20 error "oops!"
21 }
22 }
23
24 test-case "one good test case" {
25 assert [1 === 1]
26 assert [2 === 2]
27 }
28
29 run-tests
30
31 ## STDOUT:
32 begin three bad tests
33 test the assertion is false ...
34 assertion FAILED
35 test there is an exception while evaluating the assertion ...
36 assertion ERRORED: 10
37 test there is an exception outside of any assertion ...
38 ERROR: 10
39 end
40 test one good test case ... ok
41 3 / 4 tests failed
42 ## END
43
44 #### Test framework: nested test suites
45
46 source --builtin testing.ysh
47 setglobal _test_use_color = false
48
49 test-case "A" { : }
50 test-suite "outer test suite" {
51 test-case "B" { : }
52 test-suite "first inner test suite" {
53 test-case "C" { : }
54 }
55 test-case "D" { : }
56 test-suite "second inner test suite" {
57 test-case "E" { : }
58 }
59 test-case "F" { : }
60 }
61 test-case "G" { : }
62
63 run-tests
64
65 ## STDOUT:
66 test A ... ok
67 begin outer test suite
68 test B ... ok
69 begin first inner test suite
70 test C ... ok
71 end
72 test D ... ok
73 begin second inner test suite
74 test E ... ok
75 end
76 test F ... ok
77 end
78 test G ... ok
79 7 tests succeeded
80 ## END
81
82 #### Test framework: stdout and stderr
83
84 source --builtin testing.ysh
85 setglobal _test_use_color = false
86
87 proc p {
88 echo STDOUT
89 echo STDERR >& 2
90 return 42
91 }
92
93 test-case "that it prints to stdout and stderr" {
94 # each case changes to a clean directory?
95 #
96 # and each one is numbered?
97
98 try {
99 p > out 2> err
100 }
101
102 assert [_status === 42]
103 assert [$(<out) === "STDOUT"]
104 assert [$(<err) === "STDERR"]
105 }
106
107 run-tests
108
109 ## STDOUT:
110 test that it prints to stdout and stderr ... ok
111 1 tests succeeded
112 ## END
113
114 # #### ysh --tool test file
115 #
116 # cat >mytest.ysh <<EOF
117 # echo hi
118 # EOF
119 #
120 # # which ysh
121 #
122 # # the test framework sets $SH to bin/ysh
123 # # but ysh is already installed on this machine
124 #
125 # $SH --tool test mytest.ysh
126 #
127 # ## STDOUT:
128 # ## END
129 #
130 # # Hm can we do this entirely in user code, not as a builtin?