github.com/please-build/puku@v1.7.3-0.20240516143641-f7d7f4941f57/generate/deps_test.go (about) 1 package generate 2 3 import ( 4 "path/filepath" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 10 "github.com/please-build/puku/config" 11 "github.com/please-build/puku/please" 12 "github.com/please-build/puku/proxy" 13 "github.com/please-build/puku/trie" 14 ) 15 16 func TestDepTarget(t *testing.T) { 17 exampleModule := "github.com/example/module" 18 modules := []string{exampleModule, filepath.Join(exampleModule, "foo")} 19 20 t.Run("returns longest match", func(t *testing.T) { 21 label := depTarget(modules, filepath.Join(exampleModule, "foo", "bar"), "third_party/go") 22 assert.Equal(t, "///third_party/go/github.com_example_module_foo//bar", label) 23 }) 24 25 t.Run("returns root package", func(t *testing.T) { 26 label := depTarget(modules, exampleModule, "third_party/go") 27 assert.Equal(t, "///third_party/go/github.com_example_module//:module", label) 28 }) 29 30 t.Run("handles when module is prefixed but not a submodule", func(t *testing.T) { 31 label := depTarget(modules, exampleModule+"-foo", "third_party/go") 32 assert.Equal(t, "", label) 33 }) 34 } 35 36 func TestLocalDeps(t *testing.T) { 37 conf := new(please.Config) 38 conf.Parse.BuildFileName = []string{"BUILD_FILE", "BUILD_FILE.plz"} 39 conf.Plugin.Go.ImportPath = []string{"github.com/some/module"} 40 41 u := newUpdater(conf) 42 43 trgt, err := u.localDep("test_project/foo") 44 require.NoError(t, err) 45 assert.Equal(t, "//test_project/foo:bar", trgt) 46 47 trgt, err = u.localDep("github.com/some/module/test_project/foo") 48 require.NoError(t, err) 49 assert.Equal(t, "//test_project/foo:bar", trgt) 50 } 51 52 func TestBuildTarget(t *testing.T) { 53 local := BuildTarget("foo", "", "") 54 assert.Equal(t, local, ":foo") 55 56 root := BuildTarget("foo", ".", "") 57 assert.Equal(t, "//:foo", root) 58 59 pkg := BuildTarget("foo", "pkg", "") 60 assert.Equal(t, "//pkg:foo", pkg) 61 62 pkgSameName := BuildTarget("foo", "foo", "") 63 assert.Equal(t, "//foo", pkgSameName) 64 65 subrepo := BuildTarget("foo", "pkg", "repo") 66 assert.Equal(t, "///repo//pkg:foo", subrepo) 67 68 subrepoRoot := BuildTarget("foo", ".", "repo") 69 assert.Equal(t, "///repo//:foo", subrepoRoot) 70 71 subrepoRootAlt := BuildTarget("foo", "", "repo") 72 assert.Equal(t, "///repo//:foo", subrepoRootAlt) 73 } 74 75 func TestResolveImport(t *testing.T) { 76 installs := trie.New() 77 installs.Add("installed", "//third_party/go:installed") 78 79 conf := &config.Config{ 80 KnownTargets: map[string]string{ 81 "knowntarget": "//third_party/go:known_target", 82 }, 83 } 84 85 u := updater{ 86 plzConf: &please.Config{}, 87 installs: installs, 88 resolvedImports: map[string]string{ 89 "resolved": "//third_party/go:resolved", 90 }, 91 modules: []string{"github.com/cached-module"}, 92 proxy: proxy.New(proxy.DefaultURL), 93 } 94 95 t.Run("resolve against a module in the puku.json", func(t *testing.T) { 96 ret, err := u.resolveImport(conf, "knowntarget") 97 require.NoError(t, err) 98 assert.Equal(t, "//third_party/go:known_target", ret) 99 }) 100 101 t.Run("resolve against a module that we already know about", func(t *testing.T) { 102 ret, err := u.resolveImport(conf, "resolved") 103 require.NoError(t, err) 104 assert.Equal(t, "//third_party/go:resolved", ret) 105 }) 106 107 t.Run("resolve against module install list", func(t *testing.T) { 108 ret, err := u.resolveImport(conf, "installed") 109 require.NoError(t, err) 110 assert.Equal(t, "//third_party/go:installed", ret) 111 }) 112 113 t.Run("resolve against cached module name", func(t *testing.T) { 114 ret, err := u.resolveImport(conf, "github.com/cached-module/package") 115 require.NoError(t, err) 116 assert.Equal(t, "///third_party/go/github.com_cached-module//package", ret) 117 }) 118 119 t.Run("resolve against the module proxy", func(t *testing.T) { 120 ret, err := u.resolveImport(conf, "github.com/please-build/puku/package") 121 require.NoError(t, err) 122 assert.Equal(t, "///third_party/go/github.com_please-build_puku//package", ret) 123 }) 124 }