github.com/nya3jp/tast@v0.0.0-20230601000426-85c8e4d83a9b/src/go.chromium.org/tast/core/cmd/tast-lint/internal/check/forbidden_bundle_imports_test.go (about) 1 // Copyright 2019 The ChromiumOS Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package check 6 7 import ( 8 "testing" 9 ) 10 11 func TestParseBundlePackage(t *testing.T) { 12 type resp struct { 13 bundlePkg string 14 category string 15 ok bool 16 } 17 for _, tc := range []struct { 18 p string 19 want resp 20 }{ 21 { 22 "go.chromium.org/tast-tests/cros/local/bundles/cros/foo", 23 resp{"go.chromium.org/tast-tests/cros/local/bundles/cros", "foo", true}, 24 }, 25 { 26 "go.chromium.org/tast-tests/cros/remote/bundles/crosint/foo/bar", 27 resp{"go.chromium.org/tast-tests/cros/remote/bundles/crosint", "foo", true}, 28 }, 29 { 30 "go.chromium.org/tast-tests/cros/local/foo", 31 resp{"", "", false}, 32 }, 33 { 34 "", 35 resp{"", "", false}, 36 }, 37 { 38 "go.chromium.org/tast-tests/cros/local/bundles/cros", 39 resp{"", "", false}, 40 }, 41 } { 42 bundlePkg, category, ok := parseBundlePackage(tc.p) 43 if got, want := (resp{bundlePkg, category, ok}), tc.want; got != want { 44 t.Errorf("parseBundlePackage(%q) returns %+v; want %+v", tc.p, got, want) 45 } 46 } 47 } 48 49 func TestForbiddenBundleImports(t *testing.T) { 50 for _, tc := range []struct { 51 code, path string 52 expects []string 53 }{ 54 { 55 `package main 56 57 import ( 58 "go.chromium.org/tast-tests/cros/local/bar/baz" 59 "go.chromium.org/tast-tests/cros/local/bundles/cros/bar/baz" 60 "go.chromium.org/tast-tests/cros/local/bundles/cros/foo/baz" 61 "go.chromium.org/tast-tests/cros/local/bundles/crosint/bar" 62 "go.chromium.org/tast-tests/cros/local/bundles/crosint/bar/baz" 63 "go.chromium.org/tast-tests/cros/local/bundles/crosint/foo" 64 "go.chromium.org/tast-tests/cros/local/bundles/crosint/foo/baz" 65 "go.chromium.org/tast-tests/cros/remote/bundles/cros/foo/baz" 66 ) 67 `, 68 "src/go.chromium.org/tast-tests/cros/local/bundles/cros/foo/testfile.go", 69 []string{ 70 "src/go.chromium.org/tast-tests/cros/local/bundles/cros/foo/testfile.go:5:2: import of go.chromium.org/tast-tests/cros/local/bundles/cros/bar/baz is only allowed from go.chromium.org/tast-tests/cros/local/bundles/*/bar or its descendant", 71 "src/go.chromium.org/tast-tests/cros/local/bundles/cros/foo/testfile.go:7:2: import of go.chromium.org/tast-tests/cros/local/bundles/crosint/bar is only allowed from go.chromium.org/tast-tests/cros/local/bundles/*/bar or its descendant", 72 "src/go.chromium.org/tast-tests/cros/local/bundles/cros/foo/testfile.go:8:2: import of go.chromium.org/tast-tests/cros/local/bundles/crosint/bar/baz is only allowed from go.chromium.org/tast-tests/cros/local/bundles/*/bar or its descendant", 73 "src/go.chromium.org/tast-tests/cros/local/bundles/cros/foo/testfile.go:11:2: import of go.chromium.org/tast-tests/cros/remote/bundles/cros/foo/baz is only allowed from go.chromium.org/tast-tests/cros/remote/bundles/*/foo or its descendant", 74 }, 75 }, 76 { 77 `package main 78 79 import ( 80 "go.chromium.org/tast-tests/cros/local/bundles/cros/bar" 81 "go.chromium.org/tast-tests/cros/remote/bundles/cros/bar" 82 "go.chromium.org/tast-tests/cros/remote/bundles/cros/bar/baz" 83 ) 84 `, 85 "src/go.chromium.org/tast-tests/cros/remote/bundles/cros/testfile.go", 86 []string{ 87 "src/go.chromium.org/tast-tests/cros/remote/bundles/cros/testfile.go:4:2: import of go.chromium.org/tast-tests/cros/local/bundles/cros/bar is only allowed from go.chromium.org/tast-tests/cros/local/bundles/*/bar or its descendant", 88 }, 89 }, 90 { 91 `package main 92 93 import ( 94 "go.chromium.org/tast-tests/cros/local/bundles/cros/foo" 95 ) 96 `, 97 "src/go.chromium.org/tast-tests/cros/local/foo/testfile.go", 98 []string{ 99 "src/go.chromium.org/tast-tests/cros/local/foo/testfile.go:4:2: import of go.chromium.org/tast-tests/cros/local/bundles/cros/foo is only allowed from go.chromium.org/tast-tests/cros/local/bundles/*/foo or its descendant", 100 }, 101 }, 102 } { 103 f, fs := parse(tc.code, tc.path) 104 issues := ForbiddenBundleImports(fs, f) 105 verifyIssues(t, issues, tc.expects) 106 } 107 }