| // 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 importer_test |
| |
| import ( |
| "fmt" |
| "go/build" |
| "testing" |
| |
| "code.google.com/p/go.tools/importer" |
| ) |
| |
| func TestLoadInitialPackages(t *testing.T) { |
| ctxt := &importer.Config{Build: &build.Default} |
| |
| // Failed load: bad first import path causes parsePackageFiles to fail. |
| args := []string{"nosuchpkg", "errors"} |
| if _, _, err := importer.New(ctxt).LoadInitialPackages(args); err == nil { |
| t.Errorf("LoadInitialPackages(%q) succeeded, want failure", args) |
| } else { |
| // cannot find package: ok. |
| } |
| |
| // Failed load: bad second import path proceeds to doImport0, which fails. |
| args = []string{"errors", "nosuchpkg"} |
| if _, _, err := importer.New(ctxt).LoadInitialPackages(args); err == nil { |
| t.Errorf("LoadInitialPackages(%q) succeeded, want failure", args) |
| } else { |
| // cannot find package: ok |
| } |
| |
| // Successful load. |
| args = []string{"fmt", "errors", "testdata/a.go,testdata/b.go", "--", "surplus"} |
| imp := importer.New(ctxt) |
| infos, rest, err := imp.LoadInitialPackages(args) |
| if err != nil { |
| t.Errorf("LoadInitialPackages(%q) failed: %s", args, err) |
| return |
| } |
| if got, want := fmt.Sprint(rest), "[surplus]"; got != want { |
| t.Errorf("LoadInitialPackages(%q) rest: got %s, want %s", got, want) |
| } |
| // Check list of initial packages. |
| var pkgnames []string |
| for _, info := range infos { |
| pkgnames = append(pkgnames, info.Pkg.Path()) |
| } |
| // Only the first import path (currently) contributes tests. |
| if got, want := fmt.Sprint(pkgnames), "[fmt fmt_test errors P]"; got != want { |
| t.Errorf("InitialPackages: got %s, want %s", got, want) |
| } |
| // Check set of transitive packages. |
| // There are >30 and the set may grow over time, so only check a few. |
| all := map[string]struct{}{} |
| for _, info := range imp.AllPackages() { |
| all[info.Pkg.Path()] = struct{}{} |
| } |
| want := []string{"strings", "time", "runtime", "testing", "unicode"} |
| for _, w := range want { |
| if _, ok := all[w]; !ok { |
| t.Errorf("AllPackages: want element %s, got set %v", w, all) |
| } |
| } |
| } |