161 lines
4.9 KiB
YAML
161 lines
4.9 KiB
YAML
## 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: ...
|