## 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: "!\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: ...