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  }