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