#!/bin/sh # # recfix.sh - System tests for recfix. # # 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 . # # Initialization # : ${srcdir=.} : ${builddir=.} : ${crypt_support=yes} : ${uuid_support=yes} . $builddir/config.sh . $srcdir/testutils.sh test_init "recfix" # # Create input files. # test_declare_input_file type-rec-valid \ '%rec: Package %type: Maintainer rec Hacker Name: GNU recutils Maintainer: jemarch@gnu.org ' test_declare_input_file type-rec-invalid-empty \ '%rec: Package %type: Maintainer rec ' test_declare_input_file type-rec-invalid-malformed \ '%rec: Package %type: Maintainer rec foo;invalid ' test_declare_input_file type-int-valid \ '%rec: Types %type: Integer int Integer: 10 Integer: 0x10 Integer: 012 Integer: 0xaaaa0000 Integer: -0x10 Integer: -0xFF ' test_declare_input_file type-int-invalid \ '%rec: Types %type: Integer int Integer: aaa Integer: 0x Integer: --0xF ' test_declare_input_file type-real-valid \ '%rec: Types %type: Real real Real: 3.14 ' test_declare_input_file type-real-invalid \ '%rec: Types %type: Real real Real: 3..14 ' test_declare_input_file duplicated-keys \ '%rec: Keys %key: Id Id: 0 Id: 1 Id: 2 Id: 2 Id: 3 ' test_declare_input_file missing-mandatory \ '%rec: Mandatory %mandatory: ma foo: bar bar: baz ma: foo ' test_declare_input_file several-unique \ '%rec: Unique %unique: Id Id: 0 Id: 1 Id: 2 Id: 3 ' test_declare_input_file referred-type \ '%rec: One %type: foo int foo: 10 foo: 20 %rec: Two One:foo: 20 ' test_declare_input_file hidden-type \ '%rec: One %type: foo int foo: 10 foo: 20 %rec: Two %type: foo line One:foo: foobar ' test_declare_input_file ranges-ok \ '%rec: Foo %type: bar range -10 10 %type: baz range 10 bar: -10 baz: 0 bar: 10 baz: 10 bar: 2 baz: 5 ' test_declare_input_file ranges-hex-ok \ '%rec: Foo %type: bar range -0x10 0x10 bar: -16 bar: 0 bar: 5 bar: 0x10 ' test_declare_input_file ranges-hex-invalid \ '%rec: Foo %type: bar range 0 0xFF bar: 0 bar: 0x100 ' test_declare_input_file ranges-oct-ok \ '%rec: Foo %type: bar range -010 010 bar: -8 bar: 0 bar: 8 ' test_declare_input_file ranges-oct-invalid \ '%rec: Foo %type: bar range -010 010 bar: -8 bar: 0 bar: 9 ' test_declare_input_file ranges-xfail-1 \ '%rec: Foo %type: bar range -10 10 %type: baz range 10 bar: -25 baz: 0 ' test_declare_input_file ranges-xfail-2 \ '%rec: Foo %type: bar range -10 10 %type: baz range 10 bar: 2 baz: 11 ' test_declare_input_file multiple-rec \ '%rec: foo %type: bar int %rec: bar bar: 10 ' test_declare_input_file enum-valid \ '%rec: foo %type: bar enum + KEY1 (This is key 1) + KEY2 (This is key 2) + KEY3 (This is key 3) bar: KEY1 bar: KEY2 bar: KEY3 ' test_declare_input_file enum-invalid-1 \ '%rec: foo %type: bar enum + KEY1 (This is key 1) + KEY2 ((This is key 2) + KEY3 (This is key 3) bar: KEY1 bar: KEY2 bar: KEY3 ' test_declare_input_file enum-invalid-2 \ '%rec: foo %type: bar enum + KEY1 (This is key 1) + KEY2 (This is key 2)) + KEY3 (This is key 3) bar: KEY1 bar: KEY2 bar: KEY3 ' test_declare_input_file type-size-valid \ '%rec: foo %type: bar size 10 bar: bar: xxx bar: 1 2 3 + 4 55 ' test_declare_input_file type-size-valid-hex \ '%rec: foo %type: bar size 0xa bar: bar: xxx bar: 1 2 3 + 4 55 ' test_declare_input_file type-size-valid-oct \ '%rec: foo %type: bar size 012 bar: bar: xxx bar: 1 2 3 + 4 55 ' test_declare_input_file type-size-invalid \ '%rec: foo %type: bar size 2 bar: bar: xxx bar: 1 2 3 \ + 4 55 ' test_declare_input_file type-size-invalid-negative \ '%rec: foo %type: bar size -2 ' test_declare_input_file prohibited-fields-ok \ '%rec: foo %prohibit: banned foo: bar bar: baz ' test_declare_input_file prohibited-fields \ '%rec: foo %prohibit: banned1 banned2 foo: bar banned1: foo bar: baz banned2: bar bar: foo ' test_declare_input_file auto-int \ '%rec: foo %type: myint int %auto: myint ' test_declare_input_file auto-range \ '%rec: foo %type: myrange range 0 10 %auto: myrange ' test_declare_input_file auto-date \ '%rec: foo %type: mydate date %auto: mydate ' test_declare_input_file auto-notype \ '%rec: foo %auto: myint ' test_declare_input_file auto-invalid-type \ '%rec: foo %auto: key %type: key line ' test_declare_input_file auto-nofex \ '%rec: foo %auto: this%is#not%a^ fex ' test_declare_input_file size-invalid-1 \ '%rec: foo %size: > ' test_declare_input_file size-invalid-2 \ '%rec: foo %size: foo ' test_declare_input_file size-exact-zero \ '%rec: foo %size: 0 ' test_declare_input_file size-exact-zero-invalid \ '%rec: foo %size: 0 foo: bar ' test_declare_input_file size-exact \ '%rec: foo %size: 2 foo: bar bar: baz ' test_declare_input_file size-exact-hex \ '%rec: foo %size: 0x2 foo: bar bar: baz ' test_declare_input_file size-exact-oct \ '%rec: foo %size: 02 foo: bar bar: baz ' test_declare_input_file size-exact-invalid \ '%rec: foo %size: 2 foo: bar ' test_declare_input_file size-less \ '%rec: foo %size: < 2 foo: bar ' test_declare_input_file size-less-invalid \ '%rec: foo %size: < 2 foo: bar bar: baz ' test_declare_input_file size-less-equal \ '%rec: foo %size: <= 2 foo: bar bar: baz ' test_declare_input_file size-less-equal-invalid \ '%rec: foo %size: <= 1 foo: bar bar: baz ' test_declare_input_file size-bigger \ '%rec: foo %size: > 1 foo: bar bar: baz ' test_declare_input_file size-bigger-invalid \ '%rec: foo %size: > 2 foo: bar ' test_declare_input_file size-bigger-equal \ '%rec: foo %size: >= 2 foo: bar bar: baz ' test_declare_input_file size-bigger-equal-invalid \ '%rec: foo %size: >= 2 foo: bar ' test_declare_input_file size-several \ '%rec: foo %size: 2 %size: < 10 ' test_declare_input_file typedef-valid \ '%rec: foo %typedef: Id_t int %type: Id Id_t Id: 10 ' test_declare_input_file typedef-valid-xfail \ '%rec: foo %typedef: Id_t int %type: Id Id_t Id: xx ' test_declare_input_file typedef-valid-with-blanks \ '%rec: foo %typedef: + Id_t int %type: Id Id_t + Id: 10 ' test_declare_input_file typedef-valid-with-blanks-xfail \ '%rec: foo %typedef: + Id_t int %type: Id Id_t + Id: xx ' test_declare_input_file typedef-valid-order \ '%rec: foo %type: Id Id_t %typedef: Id_t int Id: 10 ' test_declare_input_file typedef-valid-order-xfail \ '%rec: foo %type: Id Id_t %typedef: Id_t int Id: xx ' test_declare_input_file typedef-valid-chain \ '%rec: foo %typedef: Foo_t Bar_t %typedef: Bar_t Baz_t %typedef: Baz_t int %type: Foo Foo_t Foo: 10 ' test_declare_input_file typedef-valid-chain-xfail \ '%rec: foo %typedef: Foo_t Bar_t %typedef: Bar_t Baz_t %typedef: Baz_t int %type: Foo Foo_t Foo: xx ' test_declare_input_file typedef-valid-multiple \ '%rec: foo %typedef: Foo_t int %typedef: Foo_t email %type: Foo Foo_t Foo: foo@bar.baz ' test_declare_input_file typedef-valid-multiple-xfail \ '%rec: foo %typedef: Foo_t int %typedef: Foo_t email %type: Foo Foo_t Foo: 10 ' test_declare_input_file typedef-invalid-bad-type \ '%rec: foo %typedef: Id_t int invalid %type: Id Id_t Id: 10 ' test_declare_input_file typedef-invalid-chain-undefined \ '%rec: foo %typedef: Id_t Undefined_t %type: Id Id_t Id: 10 ' test_declare_input_file typedef-invalid-chain-loop \ '%rec: foo %typedef: Foo_t Bar_t %typedef: Bar_t Baz_t %typedef: Baz_t Foo_t %type: Id Foo_t Id: 10 ' test_declare_input_file sortcheck-valid \ '%rec: foo %sort: AField ' test_declare_input_file sortcheck-with-blanks \ '%rec: foo %sort: + AField \ ' test_declare_input_file sortcheck-invalid-empty \ '%rec: foo %sort: ' test_declare_input_file sortcheck-invalid-field-name \ '%rec: foo %sort: A/Field ' test_declare_input_file sortcheck-with-several-fields-invalid \ '%rec: foo %sort: BField %sort: AField ' test_declare_input_file unsorted-int \ '%rec: foo %type: Id int %sort: Id Id: 4 Name: A Field Id: 2 Name: C Field Id: 1 Name: D Field Id: 3 Name: B Field ' test_declare_input_file unsorted-int-with-equals \ '%rec: foo %type: Id int %sort: Id Id: 4 Name: A Field Id: 2 Name: C Field Id: 1 Name: D Field Id: 3 Name: B Field Id: 2 Name: Cbis Field ' test_declare_input_file unsorted-range \ '%rec: foo %type: Id range 0 10 %sort: Id Id: 4 Name: A Field Id: 2 Name: C Field Id: 1 Name: D Field Id: 3 Name: B Field ' test_declare_input_file unsorted-range-with-equals \ '%rec: foo %type: Id range 0 10 %sort: Id Id: 4 Name: A Field Id: 2 Name: C Field Id: 1 Name: D Field Id: 3 Name: B Field Id: 2 Name: Cbis Field ' test_declare_input_file unsorted-real \ '%rec: foo %type: Id real %sort: Id Id: 4.2 Name: A Field Id: 2.2 Name: C Field Id: 1.2 Name: D Field Id: 3.2 Name: B Field ' test_declare_input_file unsorted-real-with-equals \ '%rec: foo %type: Id real %sort: Id Id: 4.2 Name: A Field Id: 2.2 Name: C Field Id: 1.2 Name: D Field Id: 3.2 Name: B Field Id: 4.2 Name: Abis Field ' test_declare_input_file unsorted-lex \ '%rec: foo %sort: Name Id: 4 Name: A Field Id: 2 Name: C Field Id: 1 Name: D Field Id: 3 Name: B Field ' test_declare_input_file unsorted-lex-with-equals \ '%rec: foo %sort: Name Id: 4 Name: A Field Id: 2 Name: C Field Id: 1 Name: D Field Id: 3 Name: B Field Id: 1 Name: Dbis Field ' test_declare_input_file unsorted-bool \ '%rec: foo %type: Bool bool %sort: Bool Id: 5 Bool: 1 Id: 1 Bool: 0 Id: 3 Bool: no Id: 6 Bool: true Id: 2 Bool: false Id: 4 Bool: yes ' test_declare_input_file unsorted-date \ '%rec: foo %type: Date date %sort: Date Id: 1 Date: 24 September 1972 Id: 3 Date: 23 October 1972 Id: 5 Date: 26 May 1984 Id: 2 Date: 23 September 1972 Id: 4 Date: 1 April 1999 ' test_declare_input_file unsorted-date-with-equals \ '%rec: foo %type: Date date %sort: Date Id: 1 Date: 24 September 1972 Id: 3 Date: 23 October 1972 Id: 5 Date: 26 May 1984 Id: 6 Date: 23 October 1972 Id: 2 Date: 23 September 1972 Id: 4 Date: 1 April 1999 ' test_declare_input_file unsorted-multiple \ '%rec: SortMultiple %sort: Class Price %type: Price real Item: one Class: B Price: 30 Item: two Class: A Price: 30 Item: three Class: C Price: 40 Item: four Class: A Price: 10 Item: five Class: B Price: 15 ' test_declare_input_file confidential \ '%rec: foo %confidential: Foo Bar Baz Foo: encrypted-foo Bar: encrypted-bar Baz: encrypted-baz %rec: bar Foo: jorl Bar: jarl Baz: jerl ' test_declare_input_file confidential-several \ '%rec: foo %confidential: Foo Bar Baz %confidential: Jorl ' test_declare_input_file confidential-with-unencrypted-fields \ '%rec: foo %confidential: Foo Foo: encrypted-foo Foo: Not encrypted ' test_declare_input_file confidential-fields \ '%rec: foo %confidential: Password WebPassword User: user1 Password: secret1 Password: secret2 WebPassword: websecret1 User: user2 Password: secret2 Password: secret22 WebPassword: websecret2 ' test_declare_input_file encrypt \ '%rec: Account %confidential: Secret Secret: foo Secret: bar %rec: Jorl Secret: jojo %rec: jojo %confidential: joo joo: je fo: fu joo: ji fo: ja ' test_declare_input_file decrypt \ '%rec: Account %confidential: Secret Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== Secret: encrypted-V1xOls6u5Zw/D5AOtZ9gfQ== %rec: Jorl Secret: jojo %rec: jojo %confidential: joo joo: encrypted-MhsqXvDjqU9vOXG8QoHxKg== fo: fu joo: encrypted-By/F2HBy1wiim1fUWMVKRg== fo: ja ' test_declare_input_file encrypt-already-encrypted \ '%rec: Account %confidential: Secret Id: 1 Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== Id: 2 Secret: bar ' test_declare_input_file missing-auto-fields \ '%rec: Item %auto: Id Id: 0 Title: foo Id: 1 Title: baz Title: bar ' test_declare_input_file uuid-fields-ok \ '%rec: Item %type: Id uuid Id: 550e8400-e29b-41d4-a716-446655440000 Name: Item 1 Id: 550e8401-e29b-41d4-a716-446655440000 Name: Item 2 ' test_declare_input_file uuid-fields-invalid \ '%rec: Item %type: Id uuid Id: Name: Item 1 Id: foo Name: Item 2 ' test_declare_input_file type-rec-norset \ '%rec: foo %type: Foo rec bar Foo: foo Foo: bar ' test_declare_input_file type-rec-nokey \ '%rec: foo %type: Foo rec bar Foo: foo Foo: bar %rec: bar Bar: 10 Bar: 20 ' test_declare_input_file type-rec-key-notype \ '%rec: foo %type: Foo rec bar Foo: foo Foo: bar %rec: bar %key: Bar Bar: 10 Bar: 20 ' test_declare_input_file type-rec-key-type \ '%rec: foo %type: Foo rec bar Foo: 2 Foo: 3 %rec: bar %key: Bar %type: Bar int Bar: 10 Bar: 20 ' test_declare_input_file type-rec-key-type-invalid \ '%rec: foo %type: Foo rec bar Foo: xxx Foo: 3 %rec: bar %key: Bar %type: Bar int Bar: 10 Bar: 20 ' test_declare_input_file constraint-sex-valid \ '%rec: Task %constraint: Status = '\''Closed'\'' => #ClosedBy Id: 0 Status: Closed ClosedBy: jemarch Id: 1 Status: Closed ClosedBy: bar Id: 2 Status: Open ' test_declare_input_file constraint-sex-invalid \ '%rec: Task %constraint: Status &= 'Closed' => #ClosedBy Id: 0 Status: Closed ClosedBy: jemarch Id: 1 Status: Closed Id: 2 Status: Open ' test_declare_input_file constraint-sex-invalid-empty \ '%rec: Task %constraint: Id: 0 Status: Closed ClosedBy: jemarch Id: 1 Status: Closed Id: 2 Status: Open ' test_declare_input_file constraint-sex-with-violation \ '%rec: Task %constraint: Status = '\''Closed'\'' + => #ClosedBy = 0 Id: 0 Status: Closed ClosedBy: jemarch Id: 1 Status: Closed Id: 2 Status: Open ' test_declare_input_file constraint-sex-several-valid \ '%rec: Task %constraint: Status = '\''Closed'\'' => #ClosedBy %constraint: 1 Id: 0 Status: Closed ClosedBy: jemarch Id: 1 Status: Closed ClosedBy: mr foo Id: 2 Status: Open ' test_declare_input_file constraint-sex-several-invalid \ '%rec: Task %constraint: Status = '\''Closed'\'' => #ClosedBy %constraint: Id = 1 => Status != '\''Closed'\'' Id: 0 Status: Closed ClosedBy: jemarch Id: 1 Status: Closed Id: 2 Status: Open ' test_declare_input_file unused-type \ '%rec: Task %typedef: Status_t enum Open Closed %key: Id Id: 1 ' test_declare_input_file blank-line-after-record \ 'foo: bar ' test_declare_input_file blank-line-after-record-invalid \ 'foo:bar x ' test_declare_input_file hyphens-in-field-names \ 'foo-bar: baz ' test_declare_input_file ranges-min-ok \ '%rec: foo %type: Negative range MIN -1 Negative: -1 Negative: -2147483648 ' test_declare_input_file ranges-min-invalid \ '%rec: foo %type: Negative range MIN -1 Negative: -1 Negative: 0 ' test_declare_input_file ranges-max-ok \ '%rec: foo %type: Positive range 0 MAX Positive: 0 Positive: 2147483647 ' test_declare_input_file ranges-max-invalid \ '%rec: foo %type: Positive range 0 MAX Positive: -1 Positive: 2147483647 ' test_declare_input_file ranges-minmax-ok \ '%rec: foo %type: Any range MIN MAX Any: -2147483648 Any: 0 Any: 2147483647 ' test_declare_input_file ranges-minmax-invalid \ '%rec: foo %type None range MAX MIN None: -2147483648 None: 0 None: 2147483647 ' test_declare_input_file allowed-ok-1 \ '%rec: foo %allowed: xxx xxx: 10 xxx: 20 ' test_declare_input_file allowed-ok-2 \ '%rec: foo %allowed: xxx yyy xxx: 10 xxx: 20 yyy: 30 ' test_declare_input_file allowed-ok-3 \ '%rec: foo %allowed: xxx %allowed: yyy xxx: 10 xxx: 20 yyy: 30 ' test_declare_input_file allowed-ok-4 \ '%rec: foo %allowed: xxx %allowed: yyy xxx: 10 xxx: 20 yyy: 30 ' test_declare_input_file allowed-ok-5 \ '%rec: foo %key: xkey %mandatory: xmandatory %allowed: xxx xkey: jur xxx: 10 xmandatory: jur xxx: 20 xkey: jor xmandatory: jur ' test_declare_input_file allowed-xfail-1 \ '%rec: foo %allowed: xxx xxx: 10 xxx: 20 yyy: 30 ' test_declare_input_file allowed-xfail-2 \ '%rec: foo %allowed: xxx yyy xxx: 10 xxx: 20 zzz: 40 yyy: 30 ' test_declare_input_file allowed-xfail-3 \ '%rec: foo %allowed: xxx %allowed: yyy xxx: 10 xxx: 20 zzz: 40 yyy: 30 ' test_declare_input_file multiple-singulars \ '%rec: Foo %singular: Id %unique: Id Id: 0 Name: Name1 Id: 2 Name: Name2 Id: 2 Name: Name3 ' test_declare_input_file blanks-before-fex-in-type \ '%rec: Bug %mandatory: Id Title Desc Status Reporter Time %typedef: Id_t int %type: Id Id_t %typedef: Status_t enum TODO ACTIVE DOING DONE %type: Status Status_t Id: 1 Title: first bug Desc: test recfiles Status: DONE Reporter: Hao Wu Time: Thu Jan 30 14:11:05 CST 2020 Id: 2 Title: first bug Title: first bug Desc: test recfiles Status: DONE Reporter: Hao Wu Time: : Thu Jan 30 14:10:56 CST 2020 Id: 3 Title: learn recfiles Desc: learn recfiles Status: DOING Reporter: Hao Wu Time: Mon Feb 3 14:35:03 CST 2020 ' # # Declare tests. # test_tool recfix-with-operation ok \ recfix \ '--check' \ type-int-valid \ '' test_tool recfix-type-int-valid ok \ recfix \ '' \ type-int-valid \ '' test_tool recfix-type-int-invalid xfail \ recfix \ '' \ type-int-invalid test_tool recfix-type-real-valid ok \ recfix \ '' \ type-real-valid \ '' test_tool recfix-type-real-invalid xfail \ recfix \ '' \ type-real-invalid test_tool recfix-duplicated-keys xfail \ recfix \ '' \ duplicated-keys test_tool recfix-missing-mandatory xfail \ recfix \ '' \ missing-mandatory test_tool recfix-several-unique xfail \ recfix \ '' \ several-unique test_tool recfix-referred-type ok \ recfix \ '' \ referred-type \ '' test_tool recfix-hidden-type ok \ recfix \ '' \ hidden-type \ '' test_tool recfix-ranges-ok ok \ recfix \ '' \ ranges-ok \ '' test_tool recfix-range-hex-ok ok \ recfix \ '' \ ranges-hex-ok \ '' test_tool recfix-range-hex-xfail xfail \ recfix \ '' \ ranges-hex-invalid test_tool recfix-range-oct-ok ok \ recfix \ '' \ ranges-oct-ok \ '' test_tool recfix-range-oct-xfail xfail \ recfix \ '' \ ranges-oct-invalid test_tool recfix-range-min-ok ok \ recfix \ '' \ ranges-min-ok \ '' test_tool recfix-range-min-invalid xfail \ recfix \ '' \ ranges-min-invalid test_tool recfix-range-max-ok ok \ recfix \ '' \ ranges-max-ok \ '' test_tool recfix-range-max-invalid xfail \ recfix \ '' \ ranges-max-invalid test_tool recfix-range-minmax-ok ok \ recfix \ '' \ ranges-minmax-ok \ '' test_tool recfix-range-minmax-invalid xfail \ recfix \ '' \ ranges-minmax-invalid test_tool recfix-ranges-xfail-1 xfail \ recfix \ '' \ ranges-xfail-1 test_tool recfix-ranges-xfail-2 xfail \ recfix \ '' \ ranges-xfail-2 test_tool recfix-one-rec ok \ recfix \ '' \ type-int-valid \ '' test_tool recfix-multiple-rec-in-descriptor xfail \ recfix \ '' \ multiple-rec test_tool recfix-enum-valid ok \ recfix \ '' \ enum-valid \ '' test_tool recfix-enum-invalid-1 xfail \ recfix \ '' \ enum-invalid-1 test_tool recfix-enum-invalid-2 xfail \ recfix \ '' \ enum-invalid-2 test_tool recfix-type-size-valid ok \ recfix \ '' \ type-size-valid \ '' test_tool recfix-type-size-valid-hex ok \ recfix \ '' \ type-size-valid-hex \ '' test_tool recfix-type-size-valid-oct ok \ recfix \ '' \ type-size-valid-oct \ '' test_tool recfix-type-size-invalid xfail \ recfix \ '' \ type-size-invalid test_tool recfix-type-size-invalid-negative xfail \ recfix \ '' \ type-size-invalid-negative test_tool recfix-prohibited-fields-ok ok \ recfix \ '' \ prohibited-fields-ok \ '' test_tool recfix-prohibited-fields-fail xfail \ recfix \ '' \ prohibited-fields test_tool recfix-auto-int ok \ recfix \ '' \ auto-int \ '' test_tool recfix-auto-range ok \ recfix \ '' \ auto-range \ '' test_tool recfix-auto-date ok \ recfix \ '' \ auto-date \ '' test_tool recfix-auto-notype ok \ recfix \ '' \ auto-notype \ '' test_tool recfix-auto-invalid-type xfail \ recfix \ '' \ auto-invalid-type test_tool recfix-auto-nofex xfail \ recfix \ '' \ auto-nofex test_tool recfix-size-invalid-1 xfail \ recfix \ '' \ size-invalid-1 test_tool recfix-size-invalid-2 xfail \ recfix \ '' \ size-invalid-2 test_tool recfix-size-exact-zero ok \ recfix \ '' \ size-exact-zero \ '' test_tool recfix-size-exact-zero-invalid xfail \ recfix \ '' \ size-exact-zero-invalid test_tool recfix-size-exact ok \ recfix \ '' \ size-exact \ '' test_tool recfix-size-exact-hex ok \ recfix \ '' \ size-exact-hex \ '' test_tool recfix-size-exact-oct ok \ recfix \ '' \ size-exact-oct \ '' test_tool recfix-size-exact-invalid xfail \ recfix \ '' \ size-exact-invalid test_tool recfix-size-less ok \ recfix \ '' \ size-less \ '' test_tool recfix-size-less-invalid xfail \ recfix \ '' \ size-less-invalid test_tool recfix-size-less-equal ok \ recfix \ '' \ size-less-equal \ '' test_tool recfix-size-less-equal-invalid xfail \ recfix \ '' \ size-less-equal-invalid test_tool recfix-size-bigger ok \ recfix \ '' \ size-bigger \ '' test_tool recfix-size-bigger-invalid xfail \ recfix \ '' \ size-bigger-invalid test_tool recfix-size-bigger-equal ok \ recfix \ '' \ size-bigger-equal \ '' test_tool recfix-size-bigger-equal-invalid xfail \ recfix \ '' \ size-bigger-equal-invalid test_tool recfix-size-several xfail \ recfix \ '' \ size-several test_tool recfix-typedef-valid ok \ recfix \ '' \ typedef-valid \ '' test_tool recfix-typedef-valid-xfail xfail \ recfix \ '' \ typedef-valid-xfail test_tool recfix-typedef-valid-with-blanks ok \ recfix \ '' \ typedef-valid-with-blanks \ '' test_tool recfix-typedef-valid-with-blanks-xfail xfail \ recfix \ '' \ typedef-valid-with-blanks-xfail test_tool recfix-typedef-valid-order ok \ recfix \ '' \ typedef-valid-order \ '' test_tool recfix-typedef-valid-order-xfail xfail \ recfix \ '' \ typedef-valid-order-xfail test_tool recfix-typedef-valid-chain ok \ recfix \ '' \ typedef-valid-chain \ '' test_tool recfix-typedef-valid-chain-xfail xfail \ recfix \ '' \ typedef-valid-chain-xfail test_tool recfix-typedef-valid-multiple ok \ recfix \ '' \ typedef-valid-multiple \ '' test_tool recfix-typedef-valid-multiple-xfail xfail \ recfix \ '' \ typedef-valid-multiple-xfail test_tool recfix-typedef-invalid-bad-type xfail \ recfix \ '' \ typedef-invalid-bad-type test_tool recfix-typedef-invalid-chain-undefined xfail \ recfix \ '' \ typedef-invalid-chain-undefined test_tool recfix-typedef-invalid-chain-loop xfail \ recfix \ '' \ typedef-invalid-chain-loop test_tool recfix-sortcheck-valid ok \ recfix \ '' \ sortcheck-valid \ '' test_tool recfix-sortcheck-with-blanks ok \ recfix \ '' \ sortcheck-with-blanks \ '' test_tool recfix-sortcheck-invalid-empty xfail \ recfix \ '' \ sortcheck-invalid-empty test_tool recfix-sortcheck-invalid-field-name xfail \ recfix \ '' \ sortcheck-invalid-field-name if test "x$crypt_support" = "yes"; then test_tool recfix-confidential ok \ recfix \ '--check' \ confidential \ '' test_tool recfix-confidential-several ok \ recfix \ '--check' \ confidential-several \ '' test_tool recfix-confidential-with-unencrypted-fields xfail \ recfix \ '--check' \ confidential-with-unencrypted-fields test_tool recfix-encrypt ok \ recfix \ '--encrypt -s foo' \ encrypt \ '%rec: Account %confidential: Secret Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== Secret: encrypted-V1xOls6u5Zw/D5AOtZ9gfQ== %rec: Jorl Secret: jojo %rec: jojo %confidential: joo joo: encrypted-MhsqXvDjqU9vOXG8QoHxKg== fo: fu joo: encrypted-By/F2HBy1wiim1fUWMVKRg== fo: ja ' test_tool recfix-encrypt-password-long ok \ recfix \ '--encrypt --password=foo' \ encrypt \ '%rec: Account %confidential: Secret Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== Secret: encrypted-V1xOls6u5Zw/D5AOtZ9gfQ== %rec: Jorl Secret: jojo %rec: jojo %confidential: joo joo: encrypted-MhsqXvDjqU9vOXG8QoHxKg== fo: fu joo: encrypted-By/F2HBy1wiim1fUWMVKRg== fo: ja ' test_tool recfix-encrypt-without-password xfail \ recfix \ '--encrypt' \ encrypt test_tool recfix-encrypt-password-before-operation xfail \ recfix \ '-s foo --encrypt' \ encrypt test_tool recfix-encrypt-already-encrypted xfail \ recfix \ '--encrypt -s foo' \ encrypt-already-encrypted test_tool recfix-encrypt-already-encrypted-force ok \ recfix \ '--force --encrypt -s foo' \ encrypt-already-encrypted \ '%rec: Account %confidential: Secret Id: 1 Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== Id: 2 Secret: encrypted-V1xOls6u5Zw/D5AOtZ9gfQ== ' test_tool recfix-decrypt ok \ recfix \ '--decrypt -s foo' \ decrypt \ '%rec: Account %confidential: Secret Secret: foo Secret: bar %rec: Jorl Secret: jojo %rec: jojo %confidential: joo joo: je fo: fu joo: ji fo: ja ' test_tool recfix-decrypt-invalid-password ok \ recfix \ '--decrypt -s bar' \ decrypt \ '%rec: Account %confidential: Secret Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== Secret: encrypted-V1xOls6u5Zw/D5AOtZ9gfQ== %rec: Jorl Secret: jojo %rec: jojo %confidential: joo joo: encrypted-MhsqXvDjqU9vOXG8QoHxKg== fo: fu joo: encrypted-By/F2HBy1wiim1fUWMVKRg== fo: ja ' fi # crypt_support test_tool recfix-sort-several-fields-invalid xfail \ recfix \ '--check' \ sortcheck-with-several-fields-invalid test_tool recfix-sort-ints ok \ recfix \ '--sort' \ unsorted-int \ '%rec: foo %type: Id int %sort: Id Id: 1 Name: D Field Id: 2 Name: C Field Id: 3 Name: B Field Id: 4 Name: A Field ' test_tool recfix-sort-multiple ok \ recfix \ '--sort' \ unsorted-multiple \ '%rec: SortMultiple %sort: Class Price %type: Price real Item: four Class: A Price: 10 Item: two Class: A Price: 30 Item: five Class: B Price: 15 Item: one Class: B Price: 30 Item: three Class: C Price: 40 ' test_tool recfix-sort-ints-with-equals ok \ recfix \ '--sort' \ unsorted-int-with-equals \ '%rec: foo %type: Id int %sort: Id Id: 1 Name: D Field Id: 2 Name: C Field Id: 2 Name: Cbis Field Id: 3 Name: B Field Id: 4 Name: A Field ' test_tool recfix-sort-ranges ok \ recfix \ '--sort' \ unsorted-range \ '%rec: foo %type: Id range 0 10 %sort: Id Id: 1 Name: D Field Id: 2 Name: C Field Id: 3 Name: B Field Id: 4 Name: A Field ' test_tool recfix-sort-ranges-with-equals ok \ recfix \ '--sort' \ unsorted-range-with-equals \ '%rec: foo %type: Id range 0 10 %sort: Id Id: 1 Name: D Field Id: 2 Name: C Field Id: 2 Name: Cbis Field Id: 3 Name: B Field Id: 4 Name: A Field ' test_tool recfix-sort-reals ok \ recfix \ '--sort' \ unsorted-real \ '%rec: foo %type: Id real %sort: Id Id: 1.2 Name: D Field Id: 2.2 Name: C Field Id: 3.2 Name: B Field Id: 4.2 Name: A Field ' test_tool recfix-sort-reals-with-equals ok \ recfix \ '--sort' \ unsorted-real-with-equals \ '%rec: foo %type: Id real %sort: Id Id: 1.2 Name: D Field Id: 2.2 Name: C Field Id: 3.2 Name: B Field Id: 4.2 Name: A Field Id: 4.2 Name: Abis Field ' test_tool recfix-sort-lex ok \ recfix \ '--sort' \ unsorted-lex \ '%rec: foo %sort: Name Id: 4 Name: A Field Id: 3 Name: B Field Id: 2 Name: C Field Id: 1 Name: D Field ' test_tool recfix-sort-lex-with-equals ok \ recfix \ '--sort' \ unsorted-lex-with-equals \ '%rec: foo %sort: Name Id: 4 Name: A Field Id: 3 Name: B Field Id: 2 Name: C Field Id: 1 Name: D Field Id: 1 Name: Dbis Field ' test_tool recfix-sort-dates ok \ recfix \ '--sort' \ unsorted-date \ '%rec: foo %type: Date date %sort: Date Id: 2 Date: 23 September 1972 Id: 1 Date: 24 September 1972 Id: 3 Date: 23 October 1972 Id: 5 Date: 26 May 1984 Id: 4 Date: 1 April 1999 ' test_tool recfix-sort-dates-with-equals ok \ recfix \ '--sort' \ unsorted-date-with-equals \ '%rec: foo %type: Date date %sort: Date Id: 2 Date: 23 September 1972 Id: 1 Date: 24 September 1972 Id: 3 Date: 23 October 1972 Id: 6 Date: 23 October 1972 Id: 5 Date: 26 May 1984 Id: 4 Date: 1 April 1999 ' test_tool recfix-sort-booleans ok \ recfix \ '--sort' \ unsorted-bool \ '%rec: foo %type: Bool bool %sort: Bool Id: 1 Bool: 0 Id: 3 Bool: no Id: 2 Bool: false Id: 5 Bool: 1 Id: 6 Bool: true Id: 4 Bool: yes ' test_tool recfix-missing-auto-fields ok \ recfix \ "--auto" \ missing-auto-fields \ '%rec: Item %auto: Id Id: 0 Title: foo Id: 1 Title: baz Id: 2 Title: bar ' if test "$uuid_support" = "yes"; then test_tool recfix-uuid-ok ok \ recfix \ '--check' \ uuid-fields-ok \ '' test_tool recfix-uuid-invalid xfail \ recfix \ '--check' \ uuid-fields-invalid fi test_tool recfix-type-rec-valid ok \ recfix \ '--check' \ type-rec-valid \ '' test_tool recfix-type-rec-invalid-empty xfail \ recfix \ '--check' \ type-rec-invalid-empty test_tool recfix-type-rec-invalid-malformed xfail \ recfix \ '--check' \ type-rec-invalid-malformed test_tool recfix-type-rec-norset ok \ recfix \ '--check' \ type-rec-norset \ '' test_tool recfix-type-rec-nokey ok \ recfix \ '--check' \ type-rec-nokey \ '' test_tool recfix-type-rec-key-notype ok \ recfix \ '--check' \ type-rec-key-notype \ '' test_tool recfix-type-rec-key-type ok \ recfix \ '--check' \ type-rec-key-type \ '' test_tool recfix-type-rec-key-type-invalid xfail \ recfix \ '--check' \ type-rec-key-type-invalid test_tool recfix-constraint-sex-valid ok \ recfix \ '--check' \ constraint-sex-valid \ '' test_tool recfix-constraint-sex-invalid xfail \ recfix \ '--check' \ constraint-sex-invalid test_tool recfix-constraint-sex-invalid-empty xfail \ recfix \ '--check' \ constraint-sex-invalid-empty test_tool recfix-constraint-sex-several-valid ok \ recfix \ '--check' \ constraint-sex-several-valid \ '' test_tool recfix-constraint-sex-several-invalid xfail \ recfix \ '--check' \ constraint-sex-several-invalid test_tool recfix-constraint-sex-with-violation xfail \ recfix \ '--check' \ constraint-sex-with-violation test_tool recfix-unused-type ok \ recfix \ '--check' \ unused-type \ '' test_tool recfix-blank-line-after-record ok \ recfix \ '--check' \ blank-line-after-record \ '' test_tool recfix-blank-line-after-record-invalid xfail \ recfix \ '--check' \ blank-line-after-record-invalid test_tool recfix-hyphens-in-field-names xfail \ recfix \ '--check' \ hyphens-in-field-names test_tool recfix-allowed-ok-1 ok \ recfix \ '--check' \ allowed-ok-1 \ '' test_tool recfix-allowed-ok-2 ok \ recfix \ '--check' \ allowed-ok-2 \ '' test_tool recfix-allowed-ok-3 ok \ recfix \ '--check' \ allowed-ok-3 \ '' test_tool recfix-allowed-ok-4 ok \ recfix \ '--check' \ allowed-ok-4 \ '' test_tool recfix-allowed-ok-5 ok \ recfix \ '--check' \ allowed-ok-5 \ '' test_tool recfix-allowed-xfail-1 xfail \ recfix \ '--check' \ allowed-xfail-1 test_tool recfix-allowed-xfail-2 xfail \ recfix \ '--check' \ allowed-xfail-2 test_tool recfix-allowed-xfail-3 xfail \ recfix \ '--check' \ allowed-xfail-3 test_tool recfix-blanks-before-fex-in-type ok \ recfix \ '--check' \ blanks-before-fex-in-type \ '' test_tool recfix-multiple-singulars xfail \ recfix \ '--check' \ multiple-singulars # # Cleanup. # test_cleanup exit $? # End of recfix.sh