// Copyright 2011 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 build import ( "os" "path/filepath" "runtime" "testing" ) func TestMatch(t *testing.T) { ctxt := Default what := "default" match := func(tag string) { if !ctxt.match(tag) { t.Errorf("%s context should match %s, does not", what, tag) } } nomatch := func(tag string) { if ctxt.match(tag) { t.Errorf("%s context should NOT match %s, does", what, tag) } } match(runtime.GOOS + "," + runtime.GOARCH) match(runtime.GOOS + "," + runtime.GOARCH + ",!foo") nomatch(runtime.GOOS + "," + runtime.GOARCH + ",foo") what = "modified" ctxt.BuildTags = []string{"foo"} match(runtime.GOOS + "," + runtime.GOARCH) match(runtime.GOOS + "," + runtime.GOARCH + ",foo") nomatch(runtime.GOOS + "," + runtime.GOARCH + ",!foo") match(runtime.GOOS + "," + runtime.GOARCH + ",!bar") nomatch(runtime.GOOS + "," + runtime.GOARCH + ",bar") nomatch("!") } func TestDotSlashImport(t *testing.T) { p, err := ImportDir("testdata/other", 0) if err != nil { t.Fatal(err) } if len(p.Imports) != 1 || p.Imports[0] != "./file" { t.Fatalf("testdata/other: Imports=%v, want [./file]", p.Imports) } p1, err := Import("./file", "testdata/other", 0) if err != nil { t.Fatal(err) } if p1.Name != "file" { t.Fatalf("./file: Name=%q, want %q", p1.Name, "file") } dir := filepath.Clean("testdata/other/file") // Clean to use \ on Windows if p1.Dir != dir { t.Fatalf("./file: Dir=%q, want %q", p1.Name, dir) } } func TestEmptyImport(t *testing.T) { p, err := Import("", Default.GOROOT, FindOnly) if err == nil { t.Fatal(`Import("") returned nil error.`) } if p == nil { t.Fatal(`Import("") returned nil package.`) } if p.ImportPath != "" { t.Fatalf("ImportPath=%q, want %q.", p.ImportPath, "") } } func TestLocalDirectory(t *testing.T) { cwd, err := os.Getwd() if err != nil { t.Fatal(err) } p, err := ImportDir(cwd, 0) if err != nil { t.Fatal(err) } if p.ImportPath != "go/build" { t.Fatalf("ImportPath=%q, want %q", p.ImportPath, "go/build") } } func TestShouldBuild(t *testing.T) { const file1 = "// +build tag1\n\n" + "package main\n" const file2 = "// +build cgo\n\n" + "// This package implements parsing of tags like\n" + "// +build tag1\n" + "package build" const file3 = "// Copyright The Go Authors.\n\n" + "package build\n\n" + "// shouldBuild checks tags given by lines of the form\n" + "// +build tag\n" + "func shouldBuild(content []byte)\n" ctx := &Context{BuildTags: []string{"tag1"}} if !ctx.shouldBuild([]byte(file1)) { t.Errorf("should not build file1, expected the contrary") } if ctx.shouldBuild([]byte(file2)) { t.Errorf("should build file2, expected the contrary") } ctx = &Context{BuildTags: nil} if !ctx.shouldBuild([]byte(file3)) { t.Errorf("should not build file3, expected the contrary") } }