| ## Check how obj2yaml dumps regular archives. |
| |
| ## Check how we dump an empty archive. |
| |
| # RUN: yaml2obj %s --docnum=1 -o %t.empty.a |
| # RUN: obj2yaml %t.empty.a | FileCheck %s --check-prefix=EMPTY |
| |
| # EMPTY: --- !Arch |
| # EMPTY-NEXT: Members: [] |
| # EMPTY-NEXT: ... |
| |
| --- !Arch |
| Members: [] |
| |
| ## Check how we dump archives with multiple members. |
| ## Check we don't dump excessive spaces when dumping fields. |
| ## Check we don't dump fields with values that are equal to default values. |
| ## Check how we dump empty field values. |
| |
| # RUN: yaml2obj %s --docnum=2 -o %t.multiple.a |
| # RUN: obj2yaml %t.multiple.a | FileCheck %s --check-prefix=MULTIPLE |
| |
| # MULTIPLE: --- !Arch |
| # MULTIPLE-NEXT: Members: |
| # MULTIPLE-NEXT: - Name: 'bbb/' |
| # MULTIPLE-NEXT: LastModified: '1' |
| # MULTIPLE-NEXT: UID: '2' |
| # MULTIPLE-NEXT: GID: '3' |
| # MULTIPLE-NEXT: AccessMode: '644' |
| # MULTIPLE-NEXT: Size: '6' |
| # MULTIPLE-NEXT: Content: 20616161200A |
| # MULTIPLE-NEXT: - Name: 'dddd/' |
| # MULTIPLE-NEXT: LastModified: '4' |
| # MULTIPLE-NEXT: UID: '5' |
| # MULTIPLE-NEXT: GID: '6' |
| # MULTIPLE-NEXT: AccessMode: '987' |
| # MULTIPLE-NEXT: Size: '7' |
| # MULTIPLE-NEXT: Content: 2063636363200A |
| # MULTIPLE-NEXT: PaddingByte: 0xA |
| # MULTIPLE-NEXT: - LastModified: '' |
| # MULTIPLE-NEXT: UID: '' |
| # MULTIPLE-NEXT: GID: '' |
| # MULTIPLE-NEXT: AccessMode: '' |
| # MULTIPLE-NEXT: Terminator: '' |
| # MULTIPLE-NEXT: Content: '' |
| # MULTIPLE-NEXT: - {} |
| # MULTIPLE-NEXT: ... |
| |
| --- !Arch |
| Members: |
| - Name: 'bbb/' |
| LastModified: '1' |
| UID: '2' |
| GID: '3' |
| AccessMode: '644' |
| Size: '6' |
| Terminator: "`\n" |
| Content: 20616161200A ## " aaa \n" |
| - Name: 'dddd/' |
| LastModified: '4' |
| UID: '5' |
| GID: '6' |
| AccessMode: '987' |
| Size: '7' |
| Terminator: "`\n" |
| Content: 2063636363200A ## " cccc \n" |
| PaddingByte: 0x0A |
| ## All fields are empty (where possible). |
| - Name: '' |
| LastModified: '' |
| UID: '' |
| GID: '' |
| AccessMode: '' |
| Size: '0' |
| Terminator: '' |
| Content: '' |
| ## All fields are explicitly set to the default values. |
| - Name: '' |
| LastModified: '0' |
| UID: '0' |
| GID: '0' |
| AccessMode: '0' |
| Size: '0' |
| Terminator: "`\n" |
| Content: "" |
| ... |
| |
| ## Check we report an error for non-regular archives. |
| |
| # RUN: yaml2obj %s --docnum=3 -o %t.not.regular.a |
| # RUN: not obj2yaml %t.not.regular.a 2>&1 | \ |
| # RUN: FileCheck %s -DFILE=%t.not.regular.a --check-prefix=NOT-REGULAR-ERR |
| |
| # NOT-REGULAR-ERR: Error reading file: [[FILE]]: only regular archives are supported |
| |
| --- !Arch |
| Magic: "!<thin>\n" |
| Members: |
| - {} |
| |
| ## Check we report an error when unable to read the header of an archive member. |
| |
| # RUN: yaml2obj %s --docnum=4 -o %t.truncated.a |
| # RUN: not obj2yaml %t.truncated.a 2>&1 | \ |
| # RUN: FileCheck %s -DFILE=%t.truncated.a --check-prefix=TRUNCATED-ERR |
| |
| # TRUNCATED-ERR: Error reading file: [[FILE]]: unable to read the header of a child at offset 0x8 |
| |
| --- !Arch |
| Content: "00" |
| |
| ## Check we report an error when unable to read the data of an archive member. |
| |
| # RUN: yaml2obj %s --docnum=5 -o %t.entdata.a |
| # RUN: not obj2yaml %t.entdata.a 2>&1 | \ |
| # RUN: FileCheck %s -DFILE=%t.entdata.a --check-prefix=ENTDATA-ERR |
| |
| # ENTDATA-ERR: Error reading file: [[FILE]]: unable to read the data of a child at offset 0x8 of size 1: the remaining archive size is 0 |
| |
| --- !Arch |
| Members: |
| - Size: [[SIZE='1']] |
| |
| ## Check we report an error when unable to read the size of an archive member. |
| |
| # RUN: yaml2obj %s --docnum=5 -DSIZE='x' -o %t.entsize.a |
| # RUN: not obj2yaml %t.entsize.a 2>&1 | \ |
| # RUN: FileCheck %s -DFILE=%t.entsize.a --check-prefix=ENTSIZE-ERR |
| |
| # ENTSIZE-ERR: Error reading file: [[FILE]]: unable to read the size of a child at offset 0x8 as integer: "x" |
| |
| ## Check we don't try to dump the padding byte when the size of the content is odd and |
| ## the content ends at the end of a file. |
| |
| # RUN: yaml2obj %s --docnum=6 -DCONTENT="61" -o %t.no.padding.byte.a |
| # RUN: obj2yaml %t.no.padding.byte.a | FileCheck %s --check-prefix=NO-PADDING-BYTE |
| |
| # NO-PADDING-BYTE: --- !Arch |
| # NO-PADDING-BYTE-NEXT: Members: |
| # NO-PADDING-BYTE-NEXT: - Size: '1' |
| # NO-PADDING-BYTE-NEXT: Content: '61' |
| # NO-PADDING-BYTE-NEXT: ... |
| |
| --- !Arch |
| Members: |
| - Size: '1' |
| Content: [[CONTENT]] |
| |
| ## Check we dump the padding byte when the size of the content is odd and the content ends |
| ## before the end of a file. |
| |
| # RUN: yaml2obj %s --docnum=6 -DCONTENT="610A" -o %t.padding.byte.a |
| # RUN: obj2yaml %t.padding.byte.a | FileCheck %s --check-prefix=PADDING-BYTE |
| |
| # PADDING-BYTE: --- !Arch |
| # PADDING-BYTE-NEXT: Members: |
| # PADDING-BYTE-NEXT: - Size: '1' |
| # PADDING-BYTE-NEXT: Content: '61' |
| # PADDING-BYTE-NEXT: PaddingByte: 0xA |
| # PADDING-BYTE-NEXT: ... |