github.com/riscv/riscv-go@v0.0.0-20200123204226-124ebd6fcc8e/src/debug/plan9obj/file_test.go (about)

     1  // Copyright 2014 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package plan9obj
     6  
     7  import (
     8  	"reflect"
     9  	"testing"
    10  )
    11  
    12  type fileTest struct {
    13  	file     string
    14  	hdr      FileHeader
    15  	sections []*SectionHeader
    16  }
    17  
    18  var fileTests = []fileTest{
    19  	{
    20  		"testdata/386-plan9-exec",
    21  		FileHeader{Magic386, 0x324, 0x14, 4, 0x1000, 32},
    22  		[]*SectionHeader{
    23  			{"text", 0x4c5f, 0x20},
    24  			{"data", 0x94c, 0x4c7f},
    25  			{"syms", 0x2c2b, 0x55cb},
    26  			{"spsz", 0x0, 0x81f6},
    27  			{"pcsz", 0xf7a, 0x81f6},
    28  		},
    29  	},
    30  	{
    31  		"testdata/amd64-plan9-exec",
    32  		FileHeader{MagicAMD64, 0x618, 0x13, 8, 0x200000, 40},
    33  		[]*SectionHeader{
    34  			{"text", 0x4213, 0x28},
    35  			{"data", 0xa80, 0x423b},
    36  			{"syms", 0x2c8c, 0x4cbb},
    37  			{"spsz", 0x0, 0x7947},
    38  			{"pcsz", 0xca0, 0x7947},
    39  		},
    40  	},
    41  }
    42  
    43  func TestOpen(t *testing.T) {
    44  	for i := range fileTests {
    45  		tt := &fileTests[i]
    46  
    47  		f, err := Open(tt.file)
    48  		if err != nil {
    49  			t.Error(err)
    50  			continue
    51  		}
    52  		if !reflect.DeepEqual(f.FileHeader, tt.hdr) {
    53  			t.Errorf("open %s:\n\thave %#v\n\twant %#v\n", tt.file, f.FileHeader, tt.hdr)
    54  			continue
    55  		}
    56  
    57  		for i, sh := range f.Sections {
    58  			if i >= len(tt.sections) {
    59  				break
    60  			}
    61  			have := &sh.SectionHeader
    62  			want := tt.sections[i]
    63  			if !reflect.DeepEqual(have, want) {
    64  				t.Errorf("open %s, section %d:\n\thave %#v\n\twant %#v\n", tt.file, i, have, want)
    65  			}
    66  		}
    67  		tn := len(tt.sections)
    68  		fn := len(f.Sections)
    69  		if tn != fn {
    70  			t.Errorf("open %s: len(Sections) = %d, want %d", tt.file, fn, tn)
    71  		}
    72  	}
    73  }
    74  
    75  func TestOpenFailure(t *testing.T) {
    76  	filename := "file.go"    // not a Plan 9 a.out file
    77  	_, err := Open(filename) // don't crash
    78  	if err == nil {
    79  		t.Errorf("open %s: succeeded unexpectedly", filename)
    80  	}
    81  }