Skip to content

Commit 306e4da

Browse files
authored
gazelle: Standalone tests depend on their test libraries (#241)
1 parent b04853d commit 306e4da

File tree

6 files changed

+97
-5
lines changed

6 files changed

+97
-5
lines changed

java/gazelle/generate.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ func (l javaLang) GenerateRules(args language.GenerateArgs) language.GenerateRes
203203
libName := filepath.Base(args.Rel)
204204
if testHelperJavaClasses.Contains(m) {
205205
isTestOnly = true
206-
libName += "-test-lib"
206+
libName = testHelperLibname(libName)
207207
}
208208
l.generateJavaBinary(args.File, m, libName, isTestOnly, &res)
209209
}
@@ -235,7 +235,7 @@ func (l javaLang) GenerateRules(args language.GenerateArgs) language.GenerateRes
235235
case "file":
236236
for _, tf := range testJavaFiles.SortedSlice() {
237237
extraAttributes := separateTestJavaFiles[tf]
238-
l.generateJavaTest(args.File, args.Rel, cfg.MavenRepositoryName(), tf, isModule, testJavaImportsWithHelpers, extraAttributes, &res)
238+
l.generateJavaTest(args.File, args.Rel, cfg.MavenRepositoryName(), tf, isModule, testJavaImportsWithHelpers, nil, extraAttributes, &res)
239239
}
240240

241241
case "suite":
@@ -274,7 +274,11 @@ func (l javaLang) GenerateRules(args language.GenerateArgs) language.GenerateRes
274274
sortedSeparateTestJavaFiles.Add(src)
275275
}
276276
for _, src := range sortedSeparateTestJavaFiles.SortedSlice() {
277-
l.generateJavaTest(args.File, args.Rel, cfg.MavenRepositoryName(), src, isModule, testJavaImportsWithHelpers, separateTestJavaFiles[src], &res)
277+
var testHelperDep *string
278+
if testHelperJavaFiles.Len() > 0 {
279+
testHelperDep = ptr(testHelperLibname(suiteName))
280+
}
281+
l.generateJavaTest(args.File, args.Rel, cfg.MavenRepositoryName(), src, isModule, testJavaImportsWithHelpers, testHelperDep, separateTestJavaFiles[src], &res)
278282
}
279283
}
280284
}
@@ -484,7 +488,7 @@ func (l javaLang) generateJavaBinary(file *rule.File, m types.ClassName, libName
484488
})
485489
}
486490

487-
func (l javaLang) generateJavaTest(file *rule.File, pathToPackageRelativeToBazelWorkspace string, mavenRepositoryName string, f javaFile, includePackageInName bool, imports *sorted_set.SortedSet[types.PackageName], extraAttributes map[string]bzl.Expr, res *language.GenerateResult) {
491+
func (l javaLang) generateJavaTest(file *rule.File, pathToPackageRelativeToBazelWorkspace string, mavenRepositoryName string, f javaFile, includePackageInName bool, imports *sorted_set.SortedSet[types.PackageName], depOnTestHelpers *string, extraAttributes map[string]bzl.Expr, res *language.GenerateResult) {
488492
className := f.ClassName()
489493
fullyQualifiedTestClass := className.FullyQualifiedClassName()
490494
var testName string
@@ -516,6 +520,10 @@ func (l javaLang) generateJavaTest(file *rule.File, pathToPackageRelativeToBazel
516520
r.SetAttr("test_class", fullyQualifiedTestClass)
517521
r.SetPrivateAttr(packagesKey, []types.ResolvableJavaPackage{*types.NewResolvableJavaPackage(f.pkg, true, false)})
518522

523+
if depOnTestHelpers != nil {
524+
r.SetAttr("deps", []string{*depOnTestHelpers})
525+
}
526+
519527
if runtimeDeps.Len() != 0 {
520528
r.SetAttr("runtime_deps", labelsToStrings(runtimeDeps.SortedSlice()))
521529
}
@@ -618,3 +626,11 @@ func labelsToStrings(labels []label.Label) []string {
618626
}
619627
return out
620628
}
629+
630+
func testHelperLibname(targetName string) string {
631+
return targetName + "-test-lib"
632+
}
633+
634+
func ptr[T any](v T) *T {
635+
return &v
636+
}

java/gazelle/generate_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ func TestSingleJavaTestFile(t *testing.T) {
135135
var res language.GenerateResult
136136

137137
l := newTestJavaLang(t)
138-
l.generateJavaTest(nil, "", "maven", f, tc.includePackageInName, stringsToPackageNames(tc.importedPackages), nil, &res)
138+
l.generateJavaTest(nil, "", "maven", f, tc.includePackageInName, stringsToPackageNames(tc.importedPackages), nil, nil, &res)
139139

140140
require.Len(t, res.Gen, 1, "want 1 generated rule")
141141

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
load("@contrib_rules_jvm//java:defs.bzl", "java_junit5_test", "java_test_suite")
2+
3+
java_test_suite(
4+
name = "hastestutil",
5+
srcs = [
6+
"RandomNumberGenerator.java",
7+
"ReliableTest.java",
8+
],
9+
runner = "junit5",
10+
runtime_deps = [
11+
"@maven//:org_junit_jupiter_junit_jupiter_engine",
12+
"@maven//:org_junit_platform_junit_platform_launcher",
13+
"@maven//:org_junit_platform_junit_platform_reporting",
14+
],
15+
deps = [
16+
"//src/main/com/example/annotation",
17+
"@maven//:org_junit_jupiter_junit_jupiter_api",
18+
],
19+
)
20+
21+
java_junit5_test(
22+
name = "RandomTest",
23+
srcs = ["RandomTest.java"],
24+
flaky = True,
25+
test_class = "com.example.hastestutil.RandomTest",
26+
runtime_deps = [
27+
"@maven//:org_junit_jupiter_junit_jupiter_engine",
28+
"@maven//:org_junit_platform_junit_platform_launcher",
29+
"@maven//:org_junit_platform_junit_platform_reporting",
30+
],
31+
deps = [
32+
":hastestutil-test-lib",
33+
"//src/main/com/example/annotation",
34+
"@maven//:org_junit_jupiter_junit_jupiter_api",
35+
],
36+
)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.example.hastestutil;
2+
3+
public class RandomNumberGenerator {
4+
public static int generateNumberLessThanTwo() {
5+
Random random = new Random();
6+
return random.nextInt(2);
7+
}
8+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.example.hastestutil;
2+
3+
import com.example.annotation.FlakyTest;
4+
import org.junit.jupiter.api.Test;
5+
6+
import java.util.Random;
7+
8+
import static org.junit.jupiter.api.Assertions.assertEquals;
9+
10+
@FlakyTest
11+
public class RandomTest {
12+
@Test
13+
public void unreliableTest() {
14+
int r = RandomNumberGenerator.generateNumberLessThanTwo();
15+
assertEquals(r, 0);
16+
}
17+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.example.hastestutil;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import java.util.Random;
6+
7+
import static org.junit.jupiter.api.Assertions.assertTrue;
8+
9+
public class ReliableTest {
10+
@Test
11+
public void reliableTest() {
12+
int r = RandomNumberGenerator.generateNumberLessThanTwo();
13+
assertTrue(r < 2);
14+
}
15+
}

0 commit comments

Comments
 (0)