Skip to content

Commit

Permalink
go/packages: skip TestLoadImportsC when Go has been built without cgo
Browse files Browse the repository at this point in the history
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 <bradfitz@golang.org>
  • Loading branch information
matloob committed Oct 5, 2018
1 parent 59602fd commit e60d0f5
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 46 deletions.
46 changes: 0 additions & 46 deletions go/packages/packages_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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`,
Expand Down
60 changes: 60 additions & 0 deletions go/packages/packagescgo_test.go
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)
}
}
}

0 comments on commit e60d0f5

Please sign in to comment.