| // Copyright 2018 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package xcoff | |
| import ( | |
| "reflect" | |
| "testing" | |
| ) | |
| type archiveTest struct { | |
| file string | |
| hdr ArchiveHeader | |
| members []*MemberHeader | |
| membersFileHeader []FileHeader | |
| } | |
| var archTest = []archiveTest{ | |
| { | |
| "testdata/bigar-ppc64", | |
| ArchiveHeader{AIAMAGBIG}, | |
| []*MemberHeader{ | |
| {"printbye.o", 836}, | |
| {"printhello.o", 860}, | |
| }, | |
| []FileHeader{ | |
| {U64_TOCMAGIC}, | |
| {U64_TOCMAGIC}, | |
| }, | |
| }, | |
| { | |
| "testdata/bigar-empty", | |
| ArchiveHeader{AIAMAGBIG}, | |
| []*MemberHeader{}, | |
| []FileHeader{}, | |
| }, | |
| } | |
| func TestOpenArchive(t *testing.T) { | |
| for i := range archTest { | |
| tt := &archTest[i] | |
| arch, err := OpenArchive(tt.file) | |
| if err != nil { | |
| t.Error(err) | |
| continue | |
| } | |
| if !reflect.DeepEqual(arch.ArchiveHeader, tt.hdr) { | |
| t.Errorf("open archive %s:\n\thave %#v\n\twant %#v\n", tt.file, arch.ArchiveHeader, tt.hdr) | |
| continue | |
| } | |
| for i, mem := range arch.Members { | |
| if i >= len(tt.members) { | |
| break | |
| } | |
| have := &mem.MemberHeader | |
| want := tt.members[i] | |
| if !reflect.DeepEqual(have, want) { | |
| t.Errorf("open %s, member %d:\n\thave %#v\n\twant %#v\n", tt.file, i, have, want) | |
| } | |
| f, err := arch.GetFile(mem.Name) | |
| if err != nil { | |
| t.Error(err) | |
| continue | |
| } | |
| if !reflect.DeepEqual(f.FileHeader, tt.membersFileHeader[i]) { | |
| t.Errorf("open %s, member file header %d:\n\thave %#v\n\twant %#v\n", tt.file, i, f.FileHeader, tt.membersFileHeader[i]) | |
| } | |
| } | |
| tn := len(tt.members) | |
| an := len(arch.Members) | |
| if tn != an { | |
| t.Errorf("open %s: len(Members) = %d, want %d", tt.file, an, tn) | |
| } | |
| } | |
| } |