-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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 <[email protected]>
- Loading branch information
Showing
2 changed files
with
60 additions
and
46 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) | ||
} | ||
} | ||
} |