195 lines
3.7 KiB
Go
195 lines
3.7 KiB
Go
// Copyright 2013 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 gccgoimporter
|
|
|
|
import (
|
|
"runtime"
|
|
"testing"
|
|
|
|
"golang.org/x/tools/go/types"
|
|
)
|
|
|
|
var importablePackages = [...]string{
|
|
"archive/tar",
|
|
"archive/zip",
|
|
"bufio",
|
|
"bytes",
|
|
"compress/bzip2",
|
|
"compress/flate",
|
|
"compress/gzip",
|
|
"compress/lzw",
|
|
"compress/zlib",
|
|
"container/heap",
|
|
"container/list",
|
|
"container/ring",
|
|
"crypto/aes",
|
|
"crypto/cipher",
|
|
"crypto/des",
|
|
"crypto/dsa",
|
|
"crypto/ecdsa",
|
|
"crypto/elliptic",
|
|
"crypto",
|
|
"crypto/hmac",
|
|
"crypto/md5",
|
|
"crypto/rand",
|
|
"crypto/rc4",
|
|
"crypto/rsa",
|
|
"crypto/sha1",
|
|
"crypto/sha256",
|
|
"crypto/sha512",
|
|
"crypto/subtle",
|
|
"crypto/tls",
|
|
"crypto/x509",
|
|
"crypto/x509/pkix",
|
|
"database/sql/driver",
|
|
"database/sql",
|
|
"debug/dwarf",
|
|
"debug/elf",
|
|
"debug/gosym",
|
|
"debug/macho",
|
|
"debug/pe",
|
|
"encoding/ascii85",
|
|
"encoding/asn1",
|
|
"encoding/base32",
|
|
"encoding/base64",
|
|
"encoding/binary",
|
|
"encoding/csv",
|
|
"encoding/gob",
|
|
"encoding",
|
|
"encoding/hex",
|
|
"encoding/json",
|
|
"encoding/pem",
|
|
"encoding/xml",
|
|
"errors",
|
|
"exp/proxy",
|
|
"exp/terminal",
|
|
"expvar",
|
|
"flag",
|
|
"fmt",
|
|
"go/ast",
|
|
"go/build",
|
|
"go/doc",
|
|
"go/format",
|
|
"go/parser",
|
|
"go/printer",
|
|
"go/scanner",
|
|
"go/token",
|
|
"hash/adler32",
|
|
"hash/crc32",
|
|
"hash/crc64",
|
|
"hash/fnv",
|
|
"hash",
|
|
"html",
|
|
"html/template",
|
|
"image/color",
|
|
"image/color/palette",
|
|
"image/draw",
|
|
"image/gif",
|
|
"image",
|
|
"image/jpeg",
|
|
"image/png",
|
|
"index/suffixarray",
|
|
"io",
|
|
"io/ioutil",
|
|
"log",
|
|
"log/syslog",
|
|
"math/big",
|
|
"math/cmplx",
|
|
"math",
|
|
"math/rand",
|
|
"mime",
|
|
"mime/multipart",
|
|
"net",
|
|
"net/http/cgi",
|
|
"net/http/cookiejar",
|
|
"net/http/fcgi",
|
|
"net/http",
|
|
"net/http/httptest",
|
|
"net/http/httputil",
|
|
"net/http/pprof",
|
|
"net/mail",
|
|
"net/rpc",
|
|
"net/rpc/jsonrpc",
|
|
"net/smtp",
|
|
"net/textproto",
|
|
"net/url",
|
|
"old/regexp",
|
|
"old/template",
|
|
"os/exec",
|
|
"os",
|
|
"os/signal",
|
|
"os/user",
|
|
"path/filepath",
|
|
"path",
|
|
"reflect",
|
|
"regexp",
|
|
"regexp/syntax",
|
|
"runtime/debug",
|
|
"runtime",
|
|
"runtime/pprof",
|
|
"sort",
|
|
"strconv",
|
|
"strings",
|
|
"sync/atomic",
|
|
"sync",
|
|
"syscall",
|
|
"testing",
|
|
"testing/iotest",
|
|
"testing/quick",
|
|
"text/scanner",
|
|
"text/tabwriter",
|
|
"text/template",
|
|
"text/template/parse",
|
|
"time",
|
|
"unicode",
|
|
"unicode/utf16",
|
|
"unicode/utf8",
|
|
}
|
|
|
|
func TestInstallationImporter(t *testing.T) {
|
|
// This test relies on gccgo being around, which it most likely will be if we
|
|
// were compiled with gccgo.
|
|
if runtime.Compiler != "gccgo" {
|
|
t.Skip("This test needs gccgo")
|
|
return
|
|
}
|
|
|
|
var inst GccgoInstallation
|
|
err := inst.InitFromDriver("gccgo")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
imp := inst.GetImporter(nil, nil)
|
|
|
|
// Ensure we don't regress the number of packages we can parse. First import
|
|
// all packages into the same map and then each individually.
|
|
pkgMap := make(map[string]*types.Package)
|
|
for _, pkg := range importablePackages {
|
|
_, err = imp(pkgMap, pkg)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
for _, pkg := range importablePackages {
|
|
_, err = imp(make(map[string]*types.Package), pkg)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
// Test for certain specific entities in the imported data.
|
|
for _, test := range [...]importerTest{
|
|
{pkgpath: "io", name: "Reader", want: "type Reader interface{Read(p []uint8) (n int, err error)}"},
|
|
{pkgpath: "io", name: "ReadWriter", want: "type ReadWriter interface{Reader; Writer}"},
|
|
{pkgpath: "math", name: "Pi", want: "const Pi untyped float"},
|
|
{pkgpath: "math", name: "Sin", want: "func Sin(x float64) float64"},
|
|
{pkgpath: "sort", name: "Ints", want: "func Ints(a []int)"},
|
|
{pkgpath: "unsafe", name: "Pointer", want: "type Pointer unsafe.Pointer"},
|
|
} {
|
|
runImporterTest(t, imp, nil, &test)
|
|
}
|
|
}
|