GoPLS Viewer

Home|gopls/go/gccgoexportdata/gccgoexportdata_test.go
1// Copyright 2016 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
5package gccgoexportdata_test
6
7import (
8    "go/types"
9    "os"
10    "testing"
11
12    "golang.org/x/tools/go/gccgoexportdata"
13)
14
15// Test ensures this package can read gccgo export data from the
16// .go_export from a standalone ELF file or such a file in an archive
17// library.
18//
19// The testdata/{short,long}.a ELF archive files were produced by:
20//
21//    $ echo 'package foo; func F()' > foo.go
22//    $ gccgo -c -fgo-pkgpath blah foo.go
23//    $ objcopy -j .go_export foo.o foo.gox
24//    $ ar q short.a foo.gox
25//    $ objcopy -j .go_export foo.o name-longer-than-16-bytes.gox
26//    $ ar q long.a name-longer-than-16-bytes.gox
27//
28// The file long.a contains an archive string table.
29//
30// The errors.gox file (an ELF object file) comes from the toolchain's
31// standard library.
32func Test(t *testing.T) {
33    for _test := range []struct {
34        filenamepathmemberwantType string
35    }{
36        {"testdata/errors.gox""errors""New""func(text string) error"},
37        {"testdata/short.a""short""F""func()"},
38        {"testdata/long.a""long""F""func()"},
39    } {
40        t.Logf("filename = %s"test.filename)
41        ferr := os.Open(test.filename)
42        if err != nil {
43            t.Error(err)
44            continue
45        }
46        defer f.Close()
47        rerr := gccgoexportdata.NewReader(f)
48        if err != nil {
49            t.Error(err)
50            continue
51        }
52
53        imports := make(map[string]*types.Package)
54        pkgerr := gccgoexportdata.Read(rnilimportstest.path)
55        if err != nil {
56            t.Error(err)
57            continue
58        }
59
60        // Check type of designated package member.
61        obj := pkg.Scope().Lookup(test.member)
62        if obj == nil {
63            t.Errorf("%s.%s not found"test.pathtest.member)
64            continue
65        }
66        if obj.Type().String() != test.wantType {
67            t.Errorf("%s.%s.Type = %s, want %s",
68                test.pathtest.memberobj.Type(), test.wantType)
69        }
70    }
71}
72
MembersX
gccgoexportdata
Test
Test.RangeStmt_931.test
Test.RangeStmt_931.BlockStmt.f
Test.RangeStmt_931.BlockStmt.err
Test.RangeStmt_931.BlockStmt.obj
os
testing
Test.t
Test.RangeStmt_931.BlockStmt.r
Test.RangeStmt_931.BlockStmt.imports
Test.RangeStmt_931.BlockStmt.pkg
Members
X