20221212
[devspec.git] / devspec.en_US / project / recutils / torture / utils / recins.sh
blob73448c244d2b1589fb37fc4d69f171bd80dbd81a
1 #!/bin/sh
3 # recins.sh - System tests for recins.
5 # Copyright (C) 2010-2015 Jose E. Marchesi.
7 # This program is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation, either version 3 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
21 # Initialization
24 : ${srcdir=.}
25 . $srcdir/testutils.sh
26 test_init "recins"
29 # Create input files.
32 test_declare_input_file empty-file \
35 test_declare_input_file one-record \
36 'field1: value11
37 field2: value12
38 field3: value13
41 test_declare_input_file multiple-records \
42 'field1: value11
43 field2: value12
44 field3: value13
46 field1: value21
47 field2: value22
48 field3: value23
50 field1: value31
51 field2: value32
52 field3: value33
55 test_declare_input_file multiple-records-case \
56 'field1: Value11
57 field2: Value12
58 field3: Value13
60 field1: Value21
61 field2: Value22
62 field3: Value23
64 field1: Value31
65 field2: Value32
66 field3: Value33
69 test_declare_input_file multiple-named \
70 '%rec: Type1
72 field1: value11
73 field2: value12
74 field3: value13
76 %rec: Type2
78 field1: value21
79 field2: value22
80 field3: value23
82 %rec: Type3
84 field1: value31
85 field2: value32
86 field3: value33
89 test_declare_input_file integrity \
90 '%rec: Integrity
91 %type: Id int
93 Id: 0
96 test_declare_input_file only-descriptor \
97 '%rec: foo
100 test_declare_input_file comments-and-descriptor \
101 '# comment 1
103 # comment 2
105 %rec: foo
108 test_declare_input_file external-descriptor-types \
109 '%rec: Patata
110 %type: foo int
113 test_declare_input_file external-descriptor \
114 '%rec: Patata recins-external-descriptor-types.in
116 foo: 10
119 test_declare_input_file auto-fields \
120 '%rec: foo
121 %type: myint int
122 %type: myrange range 0 10
123 %auto: myint myrange
125 myint: 10
126 myrange: 0
129 test_declare_input_file auto-notype \
130 '%rec: foo
131 %auto: key
133 key: 12
136 test_declare_input_file auto-fields-several \
137 '%rec: foo
138 %type: myint int
139 %type: myrange range 0 10
140 %auto: myint
141 %auto: myrange
143 myint: 10
144 myrange: 0
147 test_declare_input_file auto-range-overflow \
148 '%rec: foo
149 %type: myrange range 0 10
150 %auto: myrange
152 myrange: 10
155 test_declare_input_file marks \
156 '%rec: Marks
157 %type: Class enum A B C
159 Name: Alfred
160 Class: A
162 Name: Bertram
163 Class: B
167 # Declare tests.
170 test_tool recins-empty ok \
171 recins \
172 '-f field1 -v "value1"' \
173 empty-file \
174 'field1: value1
177 test_tool recins-empty-with-type ok \
178 recins \
179 '-t Type1 -f field1 -v "value1"' \
180 empty-file \
181 '%rec: Type1
183 field1: value1
186 test_tool recins-several-fields ok \
187 recins \
188 '-f field1 -v "value1" -f field2 -v "value2"' \
189 empty-file \
190 'field1: value1
191 field2: value2
194 test_tool recins-append ok \
195 recins \
196 '-f afield1 -v "appended1"' \
197 multiple-records \
198 'field1: value11
199 field2: value12
200 field3: value13
202 field1: value21
203 field2: value22
204 field3: value23
206 field1: value31
207 field2: value32
208 field3: value33
210 afield1: appended1
213 test_tool recins-append-in-type ok \
214 recins \
215 '-t Type2 -f afield1 -v "appended1"' \
216 multiple-named \
217 '%rec: Type1
219 field1: value11
220 field2: value12
221 field3: value13
223 %rec: Type2
225 field1: value21
226 field2: value22
227 field3: value23
229 afield1: appended1
231 %rec: Type3
233 field1: value31
234 field2: value32
235 field3: value33
238 test_tool recins-append-new-type ok \
239 recins \
240 '-t NewType -f afield1 -v "appended1"' \
241 multiple-records \
242 'field1: value11
243 field2: value12
244 field3: value13
246 field1: value21
247 field2: value22
248 field3: value23
250 field1: value31
251 field2: value32
252 field3: value33
254 %rec: NewType
256 afield1: appended1
259 test_tool recins-replace ok \
260 recins \
261 '-n 1 -f afield1 -v "replaced"' \
262 multiple-records \
263 'field1: value11
264 field2: value12
265 field3: value13
267 afield1: replaced
269 field1: value31
270 field2: value32
271 field3: value33
274 test_tool recins-replace-range ok \
275 recins \
276 '-n 1-2 -f afield1 -v "replaced"' \
277 multiple-records \
278 'field1: value11
279 field2: value12
280 field3: value13
282 afield1: replaced
284 afield1: replaced
287 test_tool recins-replace-several-indexes ok \
288 recins \
289 '-n 0,2 -f afield1 -v "replaced"' \
290 multiple-records \
291 'afield1: replaced
293 field1: value21
294 field2: value22
295 field3: value23
297 afield1: replaced
300 test_tool recins-replace-sex ok \
301 recins \
302 '-e "field2 = '\''value22'\''" -f afield1 -v "replaced"' \
303 multiple-records \
304 'field1: value11
305 field2: value12
306 field3: value13
308 afield1: replaced
310 field1: value31
311 field2: value32
312 field3: value33
315 test_tool recins-violate-restrictions xfail \
316 recins \
317 '-t Integrity -f Id -v "not a number"' \
318 integrity
320 test_tool recins-force-restrictions ok \
321 recins \
322 '--force -t Integrity -f Id -v "not a number"' \
323 integrity \
324 '%rec: Integrity
325 %type: Id int
327 Id: 0
329 Id: not a number
332 test_tool recins-only-descriptor ok \
333 recins \
334 '' \
335 only-descriptor \
336 '%rec: foo
339 test_tool recins-comments-and-descriptor ok \
340 recins \
341 '' \
342 comments-and-descriptor \
343 '# comment 1
345 # comment 2
347 %rec: foo
350 test_tool recins-external-descriptor ok \
351 recins \
352 '-t Patata -f foo -v 20' \
353 external-descriptor \
354 '%rec: Patata recins-external-descriptor-types.in
356 foo: 10
358 foo: 20
361 test_tool recins-auto-fields ok \
362 recins \
363 '-t foo -f foo -v bar' \
364 auto-fields \
365 '%rec: foo
366 %type: myint int
367 %type: myrange range 0 10
368 %auto: myint myrange
370 myint: 10
371 myrange: 0
373 myint: 11
374 myrange: 1
375 foo: bar
378 test_tool recins-auto-notype ok \
379 recins \
380 '-t foo -f foo -v bar' \
381 auto-notype \
382 '%rec: foo
383 %auto: key
385 key: 12
387 key: 13
388 foo: bar
391 test_tool recins-auto-fields-several ok \
392 recins \
393 '-t foo -f foo -v bar' \
394 auto-fields-several \
395 '%rec: foo
396 %type: myint int
397 %type: myrange range 0 10
398 %auto: myint
399 %auto: myrange
401 myint: 10
402 myrange: 0
404 myint: 11
405 myrange: 1
406 foo: bar
409 test_tool recins-no-auto ok \
410 recins \
411 '--no-auto -t foo -f foo -v bar' \
412 auto-fields \
413 '%rec: foo
414 %type: myint int
415 %type: myrange range 0 10
416 %auto: myint myrange
418 myint: 10
419 myrange: 0
421 foo: bar
424 test_tool recins-auto-range-overflow xfail \
425 recins \
426 '-t foo -f foo -v bar' \
427 auto-range-overflow
429 test_tool recins-auto-range-overflow-force ok \
430 recins \
431 '--force -t foo -f foo -v bar' \
432 auto-range-overflow \
433 '%rec: foo
434 %type: myrange range 0 10
435 %auto: myrange
437 myrange: 10
439 myrange: 11
440 foo: bar
443 test_tool recins-quick-simple ok \
444 recins \
445 '-q value22 -f foo -v bar' \
446 multiple-records \
447 'field1: value11
448 field2: value12
449 field3: value13
451 foo: bar
453 field1: value31
454 field2: value32
455 field3: value33
458 test_tool recins-random-all ok \
459 recins \
460 '-m 0 -f foo -v bar' \
461 multiple-records \
462 'field1: value11
463 field2: value12
464 field3: value13
466 field1: value21
467 field2: value22
468 field3: value23
470 field1: value31
471 field2: value32
472 field3: value33
474 foo: bar
477 test_tool recins-random-one ok \
478 recins \
479 '-m 1 -f foo -v bar' \
480 one-record \
481 'foo: bar
484 test_tool recins-case-insensitive ok \
485 recins \
486 '-i -q value22 -f foo -v bar' \
487 multiple-records-case \
488 'field1: Value11
489 field2: Value12
490 field3: Value13
492 foo: bar
494 field1: Value31
495 field2: Value32
496 field3: Value33
499 test_tool recins-case-sensitive ok \
500 recins \
501 '-q value22 -f foo -v bar' \
502 multiple-records-case \
503 'field1: Value11
504 field2: Value12
505 field3: Value13
507 field1: Value21
508 field2: Value22
509 field3: Value23
511 field1: Value31
512 field2: Value32
513 field3: Value33
516 test_tool recins-insert-default-type ok \
517 recins \
518 '-f Name -v Xavier -f Class -v X' \
519 marks \
520 'Name: Xavier
521 Class: X
523 %rec: Marks
524 %type: Class enum A B C
526 Name: Alfred
527 Class: A
529 Name: Bertram
530 Class: B
534 # Cleanup.
537 test_cleanup
538 exit $?
540 # End of recins.sh