// Copyright 2014 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 plan9obj import ( "reflect" "testing" ) type fileTest struct { file string hdr FileHeader sections []*SectionHeader } var fileTests = []fileTest{ { "testdata/386-plan9-exec", FileHeader{Magic386, 0x324, 0x14, 4, 0x1000, 32}, []*SectionHeader{ {"text", 0x4c5f, 0x20}, {"data", 0x94c, 0x4c7f}, {"syms", 0x2c2b, 0x55cb}, {"spsz", 0x0, 0x81f6}, {"pcsz", 0xf7a, 0x81f6}, }, }, { "testdata/amd64-plan9-exec", FileHeader{MagicAMD64, 0x618, 0x13, 8, 0x200000, 40}, []*SectionHeader{ {"text", 0x4213, 0x28}, {"data", 0xa80, 0x423b}, {"syms", 0x2c8c, 0x4cbb}, {"spsz", 0x0, 0x7947}, {"pcsz", 0xca0, 0x7947}, }, }, } func TestOpen(t *testing.T) { for i := range fileTests { tt := &fileTests[i] f, err := Open(tt.file) if err != nil { t.Error(err) continue } if !reflect.DeepEqual(f.FileHeader, tt.hdr) { t.Errorf("open %s:\n\thave %#v\n\twant %#v\n", tt.file, f.FileHeader, tt.hdr) continue } for i, sh := range f.Sections { if i >= len(tt.sections) { break } have := &sh.SectionHeader want := tt.sections[i] if !reflect.DeepEqual(have, want) { t.Errorf("open %s, section %d:\n\thave %#v\n\twant %#v\n", tt.file, i, have, want) } } tn := len(tt.sections) fn := len(f.Sections) if tn != fn { t.Errorf("open %s: len(Sections) = %d, want %d", tt.file, fn, tn) } } } func TestOpenFailure(t *testing.T) { filename := "file.go" // not a Plan 9 a.out file _, err := Open(filename) // don't crash if err == nil { t.Errorf("open %s: succeeded unexpectedly", filename) } }