GoPLS Viewer

Home|gopls/go/internal/gccgoimporter/gccgoinstallation_test.go
1// Copyright 2013 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// Except for this comment, this file is a verbatim copy of the file
6// with the same name in $GOROOT/src/go/internal/gccgoimporter.
7
8package gccgoimporter
9
10import (
11    "go/types"
12    "runtime"
13    "testing"
14)
15
16// importablePackages is a list of packages that we verify that we can
17// import. This should be all standard library packages in all relevant
18// versions of gccgo. Note that since gccgo follows a different release
19// cycle, and since different systems have different versions installed,
20// we can't use the last-two-versions rule of the gc toolchain.
21var importablePackages = [...]string{
22    "archive/tar",
23    "archive/zip",
24    "bufio",
25    "bytes",
26    "compress/bzip2",
27    "compress/flate",
28    "compress/gzip",
29    "compress/lzw",
30    "compress/zlib",
31    "container/heap",
32    "container/list",
33    "container/ring",
34    "crypto/aes",
35    "crypto/cipher",
36    "crypto/des",
37    "crypto/dsa",
38    "crypto/ecdsa",
39    "crypto/elliptic",
40    "crypto",
41    "crypto/hmac",
42    "crypto/md5",
43    "crypto/rand",
44    "crypto/rc4",
45    "crypto/rsa",
46    "crypto/sha1",
47    "crypto/sha256",
48    "crypto/sha512",
49    "crypto/subtle",
50    "crypto/tls",
51    "crypto/x509",
52    "crypto/x509/pkix",
53    "database/sql/driver",
54    "database/sql",
55    "debug/dwarf",
56    "debug/elf",
57    "debug/gosym",
58    "debug/macho",
59    "debug/pe",
60    "encoding/ascii85",
61    "encoding/asn1",
62    "encoding/base32",
63    "encoding/base64",
64    "encoding/binary",
65    "encoding/csv",
66    "encoding/gob",
67    // "encoding", // Added in GCC 4.9.
68    "encoding/hex",
69    "encoding/json",
70    "encoding/pem",
71    "encoding/xml",
72    "errors",
73    "expvar",
74    "flag",
75    "fmt",
76    "go/ast",
77    "go/build",
78    "go/doc",
79    // "go/format", // Added in GCC 4.8.
80    "go/parser",
81    "go/printer",
82    "go/scanner",
83    "go/token",
84    "hash/adler32",
85    "hash/crc32",
86    "hash/crc64",
87    "hash/fnv",
88    "hash",
89    "html",
90    "html/template",
91    "image/color",
92    // "image/color/palette", // Added in GCC 4.9.
93    "image/draw",
94    "image/gif",
95    "image",
96    "image/jpeg",
97    "image/png",
98    "index/suffixarray",
99    "io",
100    "io/ioutil",
101    "log",
102    "log/syslog",
103    "math/big",
104    "math/cmplx",
105    "math",
106    "math/rand",
107    "mime",
108    "mime/multipart",
109    "net",
110    "net/http/cgi",
111    // "net/http/cookiejar", // Added in GCC 4.8.
112    "net/http/fcgi",
113    "net/http",
114    "net/http/httptest",
115    "net/http/httputil",
116    "net/http/pprof",
117    "net/mail",
118    "net/rpc",
119    "net/rpc/jsonrpc",
120    "net/smtp",
121    "net/textproto",
122    "net/url",
123    "os/exec",
124    "os",
125    "os/signal",
126    "os/user",
127    "path/filepath",
128    "path",
129    "reflect",
130    "regexp",
131    "regexp/syntax",
132    "runtime/debug",
133    "runtime",
134    "runtime/pprof",
135    "sort",
136    "strconv",
137    "strings",
138    "sync/atomic",
139    "sync",
140    "syscall",
141    "testing",
142    "testing/iotest",
143    "testing/quick",
144    "text/scanner",
145    "text/tabwriter",
146    "text/template",
147    "text/template/parse",
148    "time",
149    "unicode",
150    "unicode/utf16",
151    "unicode/utf8",
152}
153
154func TestInstallationImporter(t *testing.T) {
155    // This test relies on gccgo being around.
156    gpath := gccgoPath()
157    if gpath == "" {
158        t.Skip("This test needs gccgo")
159    }
160    if runtime.GOOS == "aix" {
161        // We don't yet have a debug/xcoff package for reading
162        // object files on AIX. Remove this skip if/when issue #29038
163        // is implemented (see also issue #49445).
164        t.Skip("no support yet for debug/xcoff")
165    }
166
167    var inst GccgoInstallation
168    err := inst.InitFromDriver(gpath)
169    if err != nil {
170        t.Fatal(err)
171    }
172    imp := inst.GetImporter(nilnil)
173
174    // Ensure we don't regress the number of packages we can parse. First import
175    // all packages into the same map and then each individually.
176    pkgMap := make(map[string]*types.Package)
177    for _pkg := range importablePackages {
178        _err = imp(pkgMappkg"."nil)
179        if err != nil {
180            t.Error(err)
181        }
182    }
183
184    for _pkg := range importablePackages {
185        _err = imp(make(map[string]*types.Package), pkg"."nil)
186        if err != nil {
187            t.Error(err)
188        }
189    }
190
191    // Test for certain specific entities in the imported data.
192    for _test := range [...]importerTest{
193        {pkgpath"io"name"Reader"want"type Reader interface{Read(p []byte) (n int, err error)}"},
194        {pkgpath"io"name"ReadWriter"want"type ReadWriter interface{Reader; Writer}"},
195        {pkgpath"math"name"Pi"want"const Pi untyped float"},
196        {pkgpath"math"name"Sin"want"func Sin(x float64) float64"},
197        {pkgpath"sort"name"Search"want"func Search(n int, f func(int) bool) int"},
198        {pkgpath"unsafe"name"Pointer"want"type Pointer"},
199    } {
200        runImporterTest(timpnil, &test)
201    }
202}
203
MembersX
TestInstallationImporter.gpath
TestInstallationImporter.inst
TestInstallationImporter.err
TestInstallationImporter.imp
TestInstallationImporter.pkgMap
testing
TestInstallationImporter
TestInstallationImporter.t
TestInstallationImporter.RangeStmt_3889.test
runtime
TestInstallationImporter.RangeStmt_3559.pkg
TestInstallationImporter.RangeStmt_3681.pkg
Members
X