aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/build/script/parser+diag.test.testscript
blob: 504c9a400ff9c26075f5a37e48d8a952613f91d4 (plain)
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# file      : libbuild2/build/script/parser+diag.test.testscript
# license   : MIT; see accompanying LICENSE file

test.options += -g

: name
:
$* test <<EOI >>EOO
  echo abc
  EOI
  name: test
  EOO

: name-deduce
:
$* <<EOI >>EOO
  echo abc
  EOI
  name: echo
  EOO

: name-operation
:
$* <<EOI >>EOO
  a = 'b'
  EOI
  name: update
  EOO

: preamble
:
{
  : disambiguate
  :
  $* <<EOI >>~%EOO%
    echo abc | set v
    cat abc | set v
    diag copy >= $>
    cp <- $>
    EOI
    echo abc | set v
    cat abc | set v
    %diag: copy >= .+file\{driver\.\}%
    EOO

  : name
  :
  $* <<EOI >>EOO
    n = foo
    diag copy $n
    cp $n $>
    EOI
    diag: copy foo
    EOO

  : quoted
  :
  $* <<EOI >'diag: foo'
    f = foo
    diag "$f"
    EOI

  : quoted-eval
  :
  $* <<EOI >'diag: foo'
    f = foo
    diag "($f)"
    EOI

  : temp_dir
  :
  {
    test.options += -t

    : no
    :
    $* <<EOI >false
      f = foo
      diag $f
      f = $~/f
      foo "$f"
      EOI

    : no-depdb
    :
    $* <<EOI >false
      f = $~/f
      depdb hash "$f"
      diag $f
      f = $~/f
      foo "$f"
      EOI

    : yes
    :
    $* <<EOI >true
      f = $~/f
      diag $f
      foo $f
      EOI

    : yes-depdb
    :
    $* <<EOI >true
      f = $~/f
      depdb hash "$f"
      f = $~/t
      diag $f
      f = $~/f
      foo "$f"
      EOI
  }
}

: ambiguity
:
{
  : name
  :
  $* test <<EOI 2>>EOE != 0
    echo abc
    diag xyz
    EOI
    buildfile:12:1: error: both low-verbosity script diagnostics name and 'diag' builtin call
      buildfile:10: info: script name specified here
    EOE

  : diag
  :
  $* <<EOI 2>>EOE != 0
    echo abc
    diag abc
    cat abc
    diag xyz
    EOI
    buildfile:14:1: error: multiple 'diag' builtin calls
      buildfile:12:1: info: previous call is here
    EOE

  : names
  :
  $* <<EOI 2>>EOE != 0
    cp abc xyz
    cat xyz
    EOI
    buildfile:11:1: error: low-verbosity script diagnostics name is ambiguous
      buildfile:11:1: info: could be 'cp'
      buildfile:12:1: info: could be 'cat'
      info: consider specifying it explicitly with the 'diag' recipe attribute
      info: or provide custom low-verbosity diagnostics with the 'diag' builtin
    EOE
}

: inside-if
:
$* <<EOI 2>>EOE != 0
  if true
    diag copy >= $>
  fi
  EOI
  buildfile:12:3: error: 'diag' call inside flow control construct
  EOE

: inside-if-cond
:
$* <<EOI 2>>EOE != 0
  if diag copy >= $>
    true
  fi
  EOI
  buildfile:11:4: error: 'diag' call inside flow control construct
  EOE

: second-command
:
$* <<EOI 2>>EOE != 0
  true && diag copy >= $>
  EOI
  buildfile:11:9: error: 'diag' call must be the only command
  EOE

: via-env
:
$* <<EOI 2>>EOE != 0
  env -- diag copy >= $>
  EOI
  buildfile:11:8: error: 'diag' call via 'env' builtin
  EOE

: before-depdb
:
$* <<EOI 2>>EOE != 0
  diag test
  depdb clear
  EOI
  buildfile:11:1: error: 'diag' builtin call before 'depdb' call
    buildfile:12:1: info: 'depdb' call is here
  EOE