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
|
- Test description language (testscript) [feature]
Requirements
============
* Multiple testscript files (to group related test)
* Run multiple tests
* Specify exit status (optional, expect 0 by default).
* Run pre/post test actions (setups/teardowns, e.g., database schema creation).
* Test input (optional)
* Test stdout output (to compare to, optional)
* Test stderr output (to compare to, optional)
* Test description
* Create (and automatically clean up) input files
? Variable expansion, looked up on target in buildfile
* Ability to pass arguments from build files (how for multiple scripts?)
Could use $0, $1, $* if have variable expansion.
Questions
=========
* What is the testcript attached at the buildfile level? An executable? What
if the test is not for executable. I guess we always have the directory
target.
We could reuse the test variable to specify (list of) scripts:
exe{hello}: test = test1 test2
* Do we want a notion of multi-command test (e.g., with pre/post commands)?
Maybe {}? Will need it not to clean up output files too early.
Notes
=====
* If expected exist status is not 0, then probably makes sense to suppress
stderr output if there is no comparison.
Syntax
======
The goal is to be as concise as possible at least for the common cases.
$0 World # hello World, 0 exit expected
$0 "John Doe" # hello "John Doe"
$0 == 1 # hello, 1 exit expected
$0 != 0 # hello, non-0 exit expected
$0 World >>EOO
Hello, World!
EOO
$0 World >"Hello, World!"
$0 2>>EOE
Usage: $0 <name>
EOE
$0 --trace <<EOI >>EOO 2>>EOE # The data should appear in the order specified.
World
EOI
Hello, World!
EOO
13 characters written
EOE
~ Built in cat command with auto-cleanup? To create files for tests, etc.
~ Output file redirects should be relative to out_base. Input? Could actually
track created out files and use that if exists, and src otherwise. What if
the test create a file without a redirect? Will need to "register" it
somehow for auto-cleanup. Maybe &<file>?
~ Will there be a way to combine stderr and stdout, could be useful sometimes
(e.g., order of output relative to diagnostics). 2>& syntax?
~ Do we support command piping?
~ What if we actually do want the output to go to a file, e.g., for a second
command to act on it? Maybe keep shell syntax since familiar? Or reverse it
(> - inline, >> - multiline, >>> to file). Simplest thing is the shortest, I
like it.
~ $0 is target path (works out in case of a directory, but will be out).
~ #-comment (also for mid-line)
~ quoting & escaping (need to think and specify). Would be nice to avoid shell
madness. Perhaps only support escaping only inside quoted strings).
~ If we support variable expansion inside "here doc", what if we need to
specify literal '$'? Perhaps treat heredoc as a kind of string? Maybe only
do effective escaping? Otherwise will have to escape backslashes...
~ Will probably need to support both $foo and $(foo) syntax. Will need to
replicate var name lexing mode form build2. Perhaps use it to avoid
duplication?
~ line continuation with \
~ == !=
|