From e60d0f5bfdcd465de53b34b3cdf97fd7dd51e95a Mon Sep 17 00:00:00 2001 From: Michael Matloob Date: Fri, 5 Oct 2018 16:08:45 -0400 Subject: [PATCH] go/packages: skip TestLoadImportsC when Go has been built without cgo This test is unsurprisingly failing on the nocgo builder because the cgo packages don't exist on those builders. Updates golang/go#28040 Change-Id: I633b73bb48e76824645e4e8dd141fb42c9adc19f Reviewed-on: https://go-review.googlesource.com/c/140121 Reviewed-by: Brad Fitzpatrick --- go/packages/packages_test.go | 46 ------------------------- go/packages/packagescgo_test.go | 60 +++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 46 deletions(-) create mode 100644 go/packages/packagescgo_test.go diff --git a/go/packages/packages_test.go b/go/packages/packages_test.go index 77874de9..7f65479e 100644 --- a/go/packages/packages_test.go +++ b/go/packages/packages_test.go @@ -282,52 +282,6 @@ func TestLoadImportsTestVariants(t *testing.T) { } } -func TestLoadImportsC(t *testing.T) { - // This test checks that when a package depends on the - // test variant of "syscall", "unsafe", or "runtime/cgo", that dependency - // is not removed when those packages are added when it imports "C". - // - // For this test to work, the external test of syscall must have a dependency - // on net, and net must import "syscall" and "C". - if runtime.GOOS == "windows" { - t.Skipf("skipping on windows; packages on windows do not satisfy conditions for test.") - } - if runtime.GOOS == "plan9" { - // See https://github.com/golang/go/issues/27100. - t.Skip(`skipping on plan9; for some reason "net [syscall.test]" is not loaded`) - } - - cfg := &packages.Config{ - Mode: packages.LoadImports, - Tests: true, - } - initial, err := packages.Load(cfg, "syscall", "net") - if err != nil { - t.Fatalf("failed to load imports: %v", err) - } - - _, all := importGraph(initial) - - for _, test := range []struct { - pattern string - wantImport string // an import to check for - }{ - {"net", "syscall:syscall"}, - {"net [syscall.test]", "syscall:syscall [syscall.test]"}, - {"syscall_test [syscall.test]", "net:net [syscall.test]"}, - } { - // Test the import paths. - pkg := all[test.pattern] - if pkg == nil { - t.Errorf("package %q not loaded", test.pattern) - continue - } - if imports := strings.Join(imports(pkg), " "); !strings.Contains(imports, test.wantImport) { - t.Errorf("package %q: got \n%s, \nwant to have %s", test.pattern, imports, test.wantImport) - } - } -} - func TestLoadAbsolutePath(t *testing.T) { tmp, cleanup := makeTree(t, map[string]string{ "gopatha/src/a/a.go": `package a`, diff --git a/go/packages/packagescgo_test.go b/go/packages/packagescgo_test.go new file mode 100644 index 00000000..ff0d4d82 --- /dev/null +++ b/go/packages/packagescgo_test.go @@ -0,0 +1,60 @@ +// Copyright 2018 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. + +// +build cgo + +package packages_test + +import ( + "golang.org/x/tools/go/packages" + "runtime" + "strings" + "testing" +) + +func TestLoadImportsC(t *testing.T) { + // This test checks that when a package depends on the + // test variant of "syscall", "unsafe", or "runtime/cgo", that dependency + // is not removed when those packages are added when it imports "C". + // + // For this test to work, the external test of syscall must have a dependency + // on net, and net must import "syscall" and "C". + if runtime.GOOS == "windows" { + t.Skipf("skipping on windows; packages on windows do not satisfy conditions for test.") + } + if runtime.GOOS == "plan9" { + // See https://github.com/golang/go/issues/27100. + t.Skip(`skipping on plan9; for some reason "net [syscall.test]" is not loaded`) + } + + cfg := &packages.Config{ + Mode: packages.LoadImports, + Tests: true, + } + initial, err := packages.Load(cfg, "syscall", "net") + if err != nil { + t.Fatalf("failed to load imports: %v", err) + } + + _, all := importGraph(initial) + + for _, test := range []struct { + pattern string + wantImport string // an import to check for + }{ + {"net", "syscall:syscall"}, + {"net [syscall.test]", "syscall:syscall [syscall.test]"}, + {"syscall_test [syscall.test]", "net:net [syscall.test]"}, + } { + // Test the import paths. + pkg := all[test.pattern] + if pkg == nil { + t.Errorf("package %q not loaded", test.pattern) + continue + } + if imports := strings.Join(imports(pkg), " "); !strings.Contains(imports, test.wantImport) { + t.Errorf("package %q: got \n%s, \nwant to have %s", test.pattern, imports, test.wantImport) + } + } +}