}
n := len(l)
if n >= 2 && KnownOS[l[n-2]] && KnownArch[l[n-1]] {
- return tags[l[n-2]] && tags[l[n-1]]
+ return matchTag(l[n-2], tags, true) && matchTag(l[n-1], tags, true)
}
if n >= 1 && KnownOS[l[n-1]] {
- return tags[l[n-1]]
+ return matchTag(l[n-1], tags, true)
}
if n >= 1 && KnownArch[l[n-1]] {
- return tags[l[n-1]]
+ return matchTag(l[n-1], tags, true)
}
return true
}
package imports
import (
+ "bytes"
"internal/testenv"
+ "io/ioutil"
+ "path"
"path/filepath"
- "reflect"
"runtime"
+ "strings"
"testing"
)
t.Errorf("json missing test import net/http (%q)", testImports)
}
}
-
-func TestScanStar(t *testing.T) {
+func TestScanDir(t *testing.T) {
testenv.MustHaveGoBuild(t)
- imports, _, err := ScanDir("testdata/import1", map[string]bool{"*": true})
+ dirs, err := ioutil.ReadDir("testdata")
if err != nil {
t.Fatal(err)
}
+ for _, dir := range dirs {
+ if !dir.IsDir() || strings.HasPrefix(dir.Name(), ".") {
+ continue
+ }
+ t.Run(dir.Name(), func(t *testing.T) {
+ tagsData, err := ioutil.ReadFile(filepath.Join("testdata", dir.Name(), "tags.txt"))
+ if err != nil {
+ t.Fatalf("error reading tags: %v", err)
+ }
+ tags := make(map[string]bool)
+ for _, t := range strings.Fields(string(tagsData)) {
+ tags[t] = true
+ }
+
+ wantData, err := ioutil.ReadFile(filepath.Join("testdata", dir.Name(), "want.txt"))
+ if err != nil {
+ t.Fatalf("error reading want: %v", err)
+ }
+ want := string(bytes.TrimSpace(wantData))
- want := []string{"import1", "import2", "import3", "import4"}
- if !reflect.DeepEqual(imports, want) {
- t.Errorf("ScanDir testdata/import1:\nhave %v\nwant %v", imports, want)
+ imports, _, err := ScanDir(path.Join("testdata", dir.Name()), tags)
+ if err != nil {
+ t.Fatal(err)
+ }
+ got := strings.Join(imports, "\n")
+ if got != want {
+ t.Errorf("ScanDir: got imports:\n%s\n\nwant:\n%s", got, want)
+ }
+ })
}
}