recutils/torture/utils/recset.sh
2025-08-31 14:58:19 -04:00

492 lines
8.2 KiB
Bash
Executable File

#!/bin/sh
#
# recset.sh - System tests for recset.
#
# Copyright (C) 2010-2022 Jose E. Marchesi.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Initialization
#
: ${srcdir=.}
. $srcdir/testutils.sh
test_init "recset"
#
# Create input files.
#
test_declare_input_file one-record \
'field1: value1
field2: value2
field3: value3
'
test_declare_input_file repeated-fields \
'field1: value1
field2: value21
field2: value22
field3: value3
'
test_declare_input_file integrity \
'%rec: Integrity
%key: Id
Id: 10
other: field
'
test_declare_input_file renames \
'%rec: Type1
%key: field1
%type: field2 line
%mandatory: field2
%sort: field2
field1: field11
field2: field121
field2: field122
field2: field123
field3: field13
'
test_declare_input_file renames-multiple \
'%rec: Type1
%key: field1
%type: field2 line
%mandatory: field2
%sort: field2
field1: field11
field2: field121
field2: field122
field2: field123
field3: field13
field1: field21
field2: field221
field2: field222
field2: field223
field3: field23
'
test_declare_input_file multiple-records \
'field1: value11
field2: value12
field3: value13
field1: value21
field2: value22
field3: value23
field1: value31
field2: value32
field3: value33
'
#
# Declare tests.
#
test_tool recset-append-field ok \
recset \
'-n 0 -f foo -a bar' \
one-record \
'field1: value1
field2: value2
field3: value3
foo: bar
'
test_tool recset-set-field ok \
recset \
'-n 0 -f field2 -s bar' \
one-record \
'field1: value1
field2: bar
field3: value3
'
test_tool recset-delete-field ok \
recset \
'-n 0 -f field2 -d' \
one-record \
'field1: value1
field3: value3
'
test_tool recset-comment-out-field ok \
recset \
'-n 0 -f field2 -c' \
one-record \
'field1: value1
#field2: value2
field3: value3
'
test_tool recset-delete-non-existant ok \
recset \
'-n 0 -f nonexistant -d' \
one-record \
'field1: value1
field2: value2
field3: value3
'
test_tool recset-comment-out-fex-first ok \
recset \
'-n 0 -f field2[0] -c' \
repeated-fields \
'field1: value1
#field2: value21
field2: value22
field3: value3
'
test_tool recset-comment-out-fex-last ok \
recset \
'-n 0 -f field2[1] -c' \
repeated-fields \
'field1: value1
field2: value21
#field2: value22
field3: value3
'
test_tool recset-violate-integrity xfail \
recset \
'-n 0 -f Id -d' \
integrity
test_tool recset-force-integrity ok \
recset \
'--force -n 0 -f Id -d' \
integrity \
'%rec: Integrity
%key: Id
other: field
'
test_tool recset-rename ok \
recset \
'--force -t Type1 -n 0 -f field2 -r foo' \
renames \
'%rec: Type1
%key: field1
%type: field2 line
%mandatory: field2
%sort: field2
field1: field11
foo: field121
foo: field122
foo: field123
field3: field13
'
test_tool recset-rename-first ok \
recset \
'--force -t Type1 -n 0 -f field2[0] -r foo' \
renames \
'%rec: Type1
%key: field1
%type: field2 line
%mandatory: field2
%sort: field2
field1: field11
foo: field121
field2: field122
field2: field123
field3: field13
'
test_tool recset-rename-middle ok \
recset \
'--force -t Type1 -n 0 -f field2[1] -r foo' \
renames \
'%rec: Type1
%key: field1
%type: field2 line
%mandatory: field2
%sort: field2
field1: field11
field2: field121
foo: field122
field2: field123
field3: field13
'
test_tool recset-rename-last ok \
recset \
'--force -t Type1 -n 0 -f field2[2] -r foo' \
renames \
'%rec: Type1
%key: field1
%type: field2 line
%mandatory: field2
%sort: field2
field1: field11
field2: field121
field2: field122
foo: field123
field3: field13
'
test_tool recset-rename-range-first ok \
recset \
'--force -t Type1 -n 0 -f field2[0-1] -r foo' \
renames \
'%rec: Type1
%key: field1
%type: field2 line
%mandatory: field2
%sort: field2
field1: field11
foo: field121
foo: field122
field2: field123
field3: field13
'
test_tool recset-rename-range-last ok \
recset \
'--force -t Type1 -n 0 -f field2[1-2] -r foo' \
renames \
'%rec: Type1
%key: field1
%type: field2 line
%mandatory: field2
%sort: field2
field1: field11
field2: field121
foo: field122
foo: field123
field3: field13
'
test_tool recset-rename-range-all ok \
recset \
'--force -t Type1 -n 0 -f field2[0-2] -r foo' \
renames \
'%rec: Type1
%key: field1
%type: field2 line
%mandatory: field2
%sort: field2
field1: field11
foo: field121
foo: field122
foo: field123
field3: field13
'
test_tool recset-rename-all ok \
recset \
'--force -t Type1 -e "1" -f field2[0-2] -r foo' \
renames-multiple \
'%rec: Type1
%key: field1
%type: field2 line
%mandatory: field2
%sort: field2
field1: field11
foo: field121
foo: field122
foo: field123
field3: field13
field1: field21
foo: field221
foo: field222
foo: field223
field3: field23
'
test_tool recset-rename-all-descriptor ok \
recset \
'--force -t Type1 -f field2[0-2] -r foo' \
renames-multiple \
'%rec: Type1
%key: field1
%type: foo line
%mandatory: foo
%sort: foo
field1: field11
foo: field121
foo: field122
foo: field123
field3: field13
field1: field21
foo: field221
foo: field222
foo: field223
field3: field23
'
test_tool recset-rename-all-key ok \
recset \
'--force -t Type1 -f field1 -r newkey' \
renames-multiple \
'%rec: Type1
%key: newkey
%type: field2 line
%mandatory: field2
%sort: field2
newkey: field11
field2: field121
field2: field122
field2: field123
field3: field13
newkey: field21
field2: field221
field2: field222
field2: field223
field3: field23
'
test_tool recset-rename-invalid-fex xfail \
recset \
'--force -t Type1 -f field1,field2 -r foo' \
renames-multiple
test_tool recset-set-add-1 ok \
recset \
'-f field2 -S foo' \
one-record \
'field1: value1
field2: foo
field3: value3
'
test_tool recset-set-add-2 ok \
recset \
'-f field4 -S foo' \
one-record \
'field1: value1
field2: value2
field3: value3
field4: foo
'
test_tool recset-set-add-3 ok \
recset \
'-f field2,field4 -S foo' \
one-record \
'field1: value1
field2: foo
field3: value3
field4: foo
'
test_tool recset-quick-simple ok \
recset \
'-q value22 -f field1 -s foo' \
multiple-records \
'field1: value11
field2: value12
field3: value13
field1: foo
field2: value22
field3: value23
field1: value31
field2: value32
field3: value33
'
test_tool recset-set-field-in-range ok \
recset \
'-n 0-1 -f field2 -s XXX' \
multiple-records \
'field1: value11
field2: XXX
field3: value13
field1: value21
field2: XXX
field3: value23
field1: value31
field2: value32
field3: value33
'
test_tool recset-set-field-in-several-indexes ok \
recset \
'-n 0,2 -f field2 -s XXX' \
multiple-records \
'field1: value11
field2: XXX
field3: value13
field1: value21
field2: value22
field3: value23
field1: value31
field2: XXX
field3: value33
'
test_tool recset-random-all ok \
recset \
'-m 0 -f field2 -s XXX' \
multiple-records \
'field1: value11
field2: XXX
field3: value13
field1: value21
field2: XXX
field3: value23
field1: value31
field2: XXX
field3: value33
'
test_tool recset-random-one ok \
recset \
'-m 1 -f field2 -s XXX' \
one-record \
'field1: value1
field2: XXX
field3: value3
'
#
# Cleanup.
#
test_cleanup
exit $?
# End of recset.sh