1## Check how obj2yaml dumps regular archives.
2
3## Check how we dump an empty archive.
4
5# RUN: yaml2obj %s --docnum=1 -o %t.empty.a
6# RUN: obj2yaml %t.empty.a | FileCheck %s --check-prefix=EMPTY
7
8# EMPTY:      --- !Arch
9# EMPTY-NEXT: Members: []
10# EMPTY-NEXT: ...
11
12--- !Arch
13Members: []
14
15## Check how we dump archives with multiple members.
16## Check we don't dump excessive spaces when dumping fields.
17## Check we don't dump fields with values that are equal to default values.
18## Check how we dump empty field values.
19
20# RUN: yaml2obj %s --docnum=2 -o %t.multiple.a
21# RUN: obj2yaml %t.multiple.a | FileCheck %s --check-prefix=MULTIPLE
22
23# MULTIPLE:      --- !Arch
24# MULTIPLE-NEXT: Members:
25# MULTIPLE-NEXT:   - Name:         'bbb/'
26# MULTIPLE-NEXT:     LastModified: '1'
27# MULTIPLE-NEXT:     UID:          '2'
28# MULTIPLE-NEXT:     GID:          '3'
29# MULTIPLE-NEXT:     AccessMode:   '644'
30# MULTIPLE-NEXT:     Size:         '6'
31# MULTIPLE-NEXT:     Content:      20616161200A
32# MULTIPLE-NEXT:   - Name:         'dddd/'
33# MULTIPLE-NEXT:     LastModified: '4'
34# MULTIPLE-NEXT:     UID:          '5'
35# MULTIPLE-NEXT:     GID:          '6'
36# MULTIPLE-NEXT:     AccessMode:   '987'
37# MULTIPLE-NEXT:     Size:         '7'
38# MULTIPLE-NEXT:     Content:      2063636363200A
39# MULTIPLE-NEXT:     PaddingByte:  0xA
40# MULTIPLE-NEXT:   - LastModified: ''
41# MULTIPLE-NEXT:     UID:          ''
42# MULTIPLE-NEXT:     GID:          ''
43# MULTIPLE-NEXT:     AccessMode:   ''
44# MULTIPLE-NEXT:     Terminator:   ''
45# MULTIPLE-NEXT:     Content:      ''
46# MULTIPLE-NEXT:   - {}
47# MULTIPLE-NEXT: ...
48
49--- !Arch
50Members:
51  - Name:         'bbb/'
52    LastModified: '1'
53    UID:          '2'
54    GID:          '3'
55    AccessMode:   '644'
56    Size:         '6'
57    Terminator:   "`\n"
58    Content:      20616161200A ## " aaa \n"
59  - Name:         'dddd/'
60    LastModified: '4'
61    UID:          '5'
62    GID:          '6'
63    AccessMode:   '987'
64    Size:         '7'
65    Terminator:   "`\n"
66    Content:      2063636363200A ## " cccc \n"
67    PaddingByte:  0x0A
68## All fields are empty (where possible).
69  - Name:         ''
70    LastModified: ''
71    UID:          ''
72    GID:          ''
73    AccessMode:   ''
74    Size:         '0'
75    Terminator:   ''
76    Content:      ''
77## All fields are explicitly set to the default values.
78  - Name:         ''
79    LastModified: '0'
80    UID:          '0'
81    GID:          '0'
82    AccessMode:   '0'
83    Size:         '0'
84    Terminator:   "`\n"
85    Content:      ""
86...
87
88## Check we report an error for non-regular archives.
89
90# RUN: yaml2obj %s --docnum=3 -o %t.not.regular.a
91# RUN: not obj2yaml %t.not.regular.a 2>&1 | \
92# RUN:   FileCheck %s -DFILE=%t.not.regular.a --check-prefix=NOT-REGULAR-ERR
93
94# NOT-REGULAR-ERR: Error reading file: [[FILE]]: only regular archives are supported
95
96--- !Arch
97Magic: "!<thin>\n"
98Members:
99  - {}
100
101## Check we report an error when unable to read the header of an archive member.
102
103# RUN: yaml2obj %s --docnum=4 -o %t.truncated.a
104# RUN: not obj2yaml %t.truncated.a 2>&1 | \
105# RUN:   FileCheck %s -DFILE=%t.truncated.a --check-prefix=TRUNCATED-ERR
106
107# TRUNCATED-ERR: Error reading file: [[FILE]]: unable to read the header of a child at offset 0x8
108
109--- !Arch
110Content: "00"
111
112## Check we report an error when unable to read the data of an archive member.
113
114# RUN: yaml2obj %s --docnum=5 -o %t.entdata.a
115# RUN: not obj2yaml %t.entdata.a 2>&1 | \
116# RUN:   FileCheck %s -DFILE=%t.entdata.a --check-prefix=ENTDATA-ERR
117
118# 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
119
120--- !Arch
121Members:
122  - Size: [[SIZE='1']]
123
124## Check we report an error when unable to read the size of an archive member.
125
126# RUN: yaml2obj %s --docnum=5 -DSIZE='x' -o %t.entsize.a
127# RUN: not obj2yaml %t.entsize.a 2>&1 | \
128# RUN:   FileCheck %s -DFILE=%t.entsize.a --check-prefix=ENTSIZE-ERR
129
130# ENTSIZE-ERR: Error reading file: [[FILE]]: unable to read the size of a child at offset 0x8 as integer: "x"
131
132## Check we don't try to dump the padding byte when the size of the content is odd and
133## the content ends at the end of a file.
134
135# RUN: yaml2obj %s --docnum=6 -DCONTENT="61" -o %t.no.padding.byte.a
136# RUN: obj2yaml %t.no.padding.byte.a | FileCheck %s --check-prefix=NO-PADDING-BYTE
137
138#      NO-PADDING-BYTE: --- !Arch
139# NO-PADDING-BYTE-NEXT: Members:
140# NO-PADDING-BYTE-NEXT:   - Size:    '1'
141# NO-PADDING-BYTE-NEXT:     Content: '61'
142# NO-PADDING-BYTE-NEXT: ...
143
144--- !Arch
145Members:
146  - Size:    '1'
147    Content: [[CONTENT]]
148
149## Check we dump the padding byte when the size of the content is odd and the content ends
150## before the end of a file.
151
152# RUN: yaml2obj %s --docnum=6 -DCONTENT="610A" -o %t.padding.byte.a
153# RUN: obj2yaml %t.padding.byte.a | FileCheck %s --check-prefix=PADDING-BYTE
154
155#      PADDING-BYTE: --- !Arch
156# PADDING-BYTE-NEXT: Members:
157# PADDING-BYTE-NEXT:   - Size:        '1'
158# PADDING-BYTE-NEXT:     Content:     '61'
159# PADDING-BYTE-NEXT:     PaddingByte: 0xA
160# PADDING-BYTE-NEXT: ...
161