// 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)
}
}