From 29f5f314f75314117af7e05f85c8b4996e359a2b Mon Sep 17 00:00:00 2001 From: Fabian Meumertzheim Date: Tue, 28 May 2024 22:48:42 +0200 Subject: [PATCH] Add test and fix bug --- BUILD.bazel | 2 + internal/module/BUILD.bazel | 17 ++++++- internal/module/module.go | 5 +-- internal/module/module_test.go | 44 +++++++++++++++++++ internal/module/testdata/MODULE.bazel | 10 +++++ .../testdata/bazel/dir/deps.MODULE.bazel | 1 + .../module/testdata/bazel/lang.MODULE.bazel | 4 ++ internal/module/testdata/deps.MODULE.bazel | 1 + 8 files changed, 80 insertions(+), 4 deletions(-) create mode 100644 internal/module/module_test.go create mode 100644 internal/module/testdata/MODULE.bazel create mode 100644 internal/module/testdata/bazel/dir/deps.MODULE.bazel create mode 100644 internal/module/testdata/bazel/lang.MODULE.bazel create mode 100644 internal/module/testdata/deps.MODULE.bazel diff --git a/BUILD.bazel b/BUILD.bazel index 5467e221b..e281ea890 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -9,8 +9,10 @@ load("//:def.bzl", "gazelle", "gazelle_binary") # gazelle:exclude .bazelci # gazelle:exclude .bcr # gazelle:exclude .idea +# gazelle:exclude .ijwb # gazelle:exclude .github # gazelle:exclude .vscode +# gazelle:exclude internal/module/testdata # gazelle:go_naming_convention import_alias gazelle( name = "gazelle", diff --git a/internal/module/BUILD.bazel b/internal/module/BUILD.bazel index 9a6a07bc4..0adffa699 100644 --- a/internal/module/BUILD.bazel +++ b/internal/module/BUILD.bazel @@ -1,4 +1,4 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "module", @@ -17,6 +17,7 @@ filegroup( srcs = [ "BUILD.bazel", "module.go", + "module_test.go", ], visibility = ["//visibility:public"], ) @@ -26,3 +27,17 @@ alias( actual = ":module", visibility = ["//:__subpackages__"], ) + +go_test( + name = "module_test", + srcs = ["module_test.go"], + data = glob( + ["testdata/**"], + allow_empty = True, + ), + embed = [":module"], + deps = [ + "@com_github_google_go_cmp//cmp", + "@io_bazel_rules_go//go/runfiles:go_default_library", + ], +) diff --git a/internal/module/module.go b/internal/module/module.go index 22230df83..04e2e612a 100644 --- a/internal/module/module.go +++ b/internal/module/module.go @@ -79,8 +79,7 @@ func collectApparentNames(repoRoot, relPath string) (map[string]string, error) { apparentNames[name] = apparentName } for _, includeLabel := range includeLabels { - var l label.Label - l, err = label.Parse(includeLabel) + l, err := label.Parse(includeLabel) if err != nil { return nil, fmt.Errorf("failed to parse include label %q: %v", includeLabel, err) } @@ -97,7 +96,7 @@ func collectApparentNamesAndIncludes(f *build.File) (map[string]string, []string var includeLabels []string for _, dep := range f.Rules("") { - if dep.Name() == "" { + if dep.ExplicitName() == "" { if ident, ok := dep.Call.X.(*build.Ident); !ok || ident.Name != "include" { continue } diff --git a/internal/module/module_test.go b/internal/module/module_test.go new file mode 100644 index 000000000..a9cee370b --- /dev/null +++ b/internal/module/module_test.go @@ -0,0 +1,44 @@ +package module + +import ( + "path/filepath" + "testing" + + "github.com/bazelbuild/rules_go/go/runfiles" + "github.com/google/go-cmp/cmp" +) + +func TestCollectApparent(t *testing.T) { + moduleFile, err := runfiles.Rlocation("bazel_gazelle/internal/module/testdata/MODULE.bazel") + if err != nil { + t.Fatal(err) + } + + apparentNames, err := collectApparentNames(filepath.Dir(moduleFile), "MODULE.bazel") + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + expected := map[string]string{ + "rules_bar": "rules_bar", + "rules_baz": "rules_baz", + "rules_foo": "my_rules_foo", + "rules_lang": "my_rules_lang", + "rules_quz": "rules_quz", + "test_module": "my_test_module", + } + if diff := cmp.Diff(expected, apparentNames); diff != "" { + t.Errorf("unexpected apparent names (-want +got):\n%s", diff) + } +} + +func TestCollectApparent_fileDoesNotExist(t *testing.T) { + _, err := collectApparentNames(t.TempDir(), "MODULE.bazel") + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + _, err = collectApparentNames(t.TempDir(), "segment.MODULE.bazel") + if err == nil { + t.Fatalf("expected error, got nil") + } +} diff --git a/internal/module/testdata/MODULE.bazel b/internal/module/testdata/MODULE.bazel new file mode 100644 index 000000000..fd5273061 --- /dev/null +++ b/internal/module/testdata/MODULE.bazel @@ -0,0 +1,10 @@ +module( + name = "test_module", + repo_name = "my_test_module", +) + +bazel_dep(name = "rules_bar", version = "1.2.3") + +include("//bazel:lang.MODULE.bazel") + +bazel_dep(name = "rules_foo", version = "1.2.3", repo_name = "my_rules_foo") diff --git a/internal/module/testdata/bazel/dir/deps.MODULE.bazel b/internal/module/testdata/bazel/dir/deps.MODULE.bazel new file mode 100644 index 000000000..ccafd9582 --- /dev/null +++ b/internal/module/testdata/bazel/dir/deps.MODULE.bazel @@ -0,0 +1 @@ +bazel_dep(name = "rules_quz", version = "0.0.1") diff --git a/internal/module/testdata/bazel/lang.MODULE.bazel b/internal/module/testdata/bazel/lang.MODULE.bazel new file mode 100644 index 000000000..6d8489e4d --- /dev/null +++ b/internal/module/testdata/bazel/lang.MODULE.bazel @@ -0,0 +1,4 @@ +bazel_dep(name = "rules_lang", version = "1.2.3", repo_name = "my_rules_lang") + +include("//:deps.MODULE.bazel") +include("//bazel:dir/deps.MODULE.bazel") diff --git a/internal/module/testdata/deps.MODULE.bazel b/internal/module/testdata/deps.MODULE.bazel new file mode 100644 index 000000000..3c23d33e4 --- /dev/null +++ b/internal/module/testdata/deps.MODULE.bazel @@ -0,0 +1 @@ +bazel_dep(name = "rules_baz", version = "0.0.1")