Skip to content

Commit 06f53b3

Browse files
committed
[bazel] Generate a test per test file for java
The developer experience of only having a test suite and using filters was pretty nasty in IJ with a single suite. Rolling back that change so that we generate a test target per test class.
1 parent 41b9b38 commit 06f53b3

File tree

7 files changed

+92
-137
lines changed

7 files changed

+92
-137
lines changed

java/client/test/org/openqa/selenium/edge/BUILD.bazel

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,6 @@ java_selenium_test_suite(
3333
data = [
3434
"//third_party/chrome_ext:backspace.crx",
3535
],
36-
tags = [
37-
"no-remote",
38-
],
3936
deps = [
4037
"//java/client/src/org/openqa/selenium/edge",
4138
"//java/client/src/org/openqa/selenium/remote",

java/client/test/org/openqa/selenium/firefox/BUILD.bazel

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,6 @@ java_selenium_test_suite(
4545
"//third_party/firebug:firebug-1.5.0-fx.xpi",
4646
"//third_party/firebug:mooltipass-1.1.87.xpi",
4747
],
48-
tags = [
49-
"no-remote",
50-
],
5148
deps = [
5249
"//java/client/src/org/openqa/selenium/firefox",
5350
"//java/client/src/org/openqa/selenium/remote",

java/client/test/org/openqa/selenium/ie/BUILD.bazel

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,6 @@ java_selenium_test_suite(
3333
browsers = [
3434
"ie",
3535
],
36-
tags = [
37-
"no-remote",
38-
],
3936
deps = [
4037
"//java/client/src/org/openqa/selenium/ie",
4138
"//java/client/src/org/openqa/selenium/remote",

java/client/test/org/openqa/selenium/safari/BUILD.bazel

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@ java_selenium_test_suite(
88
browsers = [
99
"safari",
1010
],
11-
tags = [
12-
"no-remote",
13-
],
1411
deps = [
1512
"//java/client/src/org/openqa/selenium/remote",
1613
"//java/client/src/org/openqa/selenium/safari",

java/private/selenium_test.bzl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def selenium_test(name, test_class, size = "medium", browsers = BROWSERS.keys()
7676
if not browser in BROWSERS:
7777
fail("Unrecognized browser: " + browser)
7878

79-
test = "%s-%s" % (name, browser)
79+
test = name if browser == default_browser else "%s-%s" % (name, browser)
8080

8181
native.java_test(
8282
name = test,
@@ -88,7 +88,7 @@ def selenium_test(name, test_class, size = "medium", browsers = BROWSERS.keys()
8888
**stripped_args
8989
)
9090

91-
if not "no-remote" in tags:
91+
if "selenium-remote" in tags:
9292
native.java_test(
9393
name = "%s-remote" % test,
9494
test_class = test_class,
@@ -105,4 +105,4 @@ def selenium_test(name, test_class, size = "medium", browsers = BROWSERS.keys()
105105
)
106106

107107
# Handy way to run everything
108-
native.test_suite(name = name, tests = [":%s-%s" % (name, default_browser)], tags = tags + ["manual"])
108+
native.test_suite(name = "%s-all-browsers" % name, tests = [":%s-%s" % (name, default_browser)], tags = tags + ["manual"])

java/private/suite.bzl

Lines changed: 89 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,9 @@
1+
load(":library.bzl", "java_library")
12
load(":selenium_test.bzl", "BROWSERS", "DEFAULT_BROWSER", "selenium_test")
23
load(":package.bzl", "package_name")
34

4-
def _test_class_name(src_file):
5-
test_name = src_file[:-len(".java")]
6-
7-
pkg = package_name()
8-
if pkg != None:
9-
return pkg + "." + test_name.replace("/", ".")
10-
return test_name.replace("/", ".")
11-
12-
def _write_suite_impl(ctx):
13-
src_file = ctx.actions.declare_file("%s.java" % ctx.attr.suite_name)
14-
15-
class_names = [t + ".class" for t in ctx.attr.test_classes]
16-
17-
contents = """
18-
package %s;
19-
import org.junit.runner.RunWith;
20-
import org.junit.runners.Suite;
21-
22-
@RunWith(Suite.class)
23-
@Suite.SuiteClasses({
24-
%s
25-
})
26-
public class %s {
27-
}
28-
""" % (ctx.attr.package, ",\n".join(class_names), ctx.attr.suite_name)
29-
ctx.actions.write(src_file, contents)
30-
31-
return [
32-
DefaultInfo(
33-
files = depset([src_file]),
34-
),
35-
]
36-
37-
_write_suite = rule(
38-
_write_suite_impl,
39-
attrs = {
40-
"package": attr.string(),
41-
"suite_name": attr.string(),
42-
"test_classes": attr.string_list(),
43-
},
44-
)
45-
46-
def _matches(identifiers, name):
47-
for identifier in identifiers:
48-
if name.startswith(identifier) or name.endswith(identifier):
49-
return True
50-
return False
51-
525
_test_attrs = [
6+
"browsers",
537
"deploy_manifest_lines",
548
"flaky",
559
"jvm_flags",
@@ -63,45 +17,79 @@ _test_attrs = [
6317
"use_testrunner",
6418
]
6519

66-
def _suite_name(name, suite_name):
67-
if not suite_name:
68-
return "".join([p.capitalize() for p in name.replace("-", " ").replace("_", " ").split(" ")])
69-
return suite_name
20+
def _test_class_name(pkg, src_file):
21+
test_name = src_file[:-len(".java")]
22+
return pkg + test_name.replace("/", ".")
23+
24+
def _matches(identifiers, name):
25+
for identifier in identifiers:
26+
if name.startswith(identifier) or name.endswith(identifier):
27+
return True
28+
return False
7029

71-
def _generate_common_targets(
30+
def _generate_test_suite(
7231
name,
32+
create_test_target,
7333
size,
74-
suite_name,
7534
srcs,
7635
deps,
7736
tags,
7837
test_identifiers,
7938
**kwargs):
80-
suite_name = _suite_name(name, suite_name)
39+
lib_srcs = [src for src in srcs if not _matches(test_identifiers, src)]
40+
test_srcs = [src for src in srcs if _matches(test_identifiers, src)]
41+
42+
if len(lib_srcs):
43+
libargs = {}
44+
for (key, value) in kwargs.items():
45+
if key not in _test_attrs:
46+
libargs.update({key: value})
47+
48+
java_library(
49+
name = "%s-support" % name,
50+
testonly = True,
51+
srcs = srcs,
52+
deps = deps,
53+
**libargs
54+
)
55+
deps = deps + [":%s-support" % name]
8156

57+
additional_tags = [] if size == "small" else ["no-sandbox"]
58+
suite_targets = []
8259
pkg = package_name()
83-
test_classes = [pkg + src[:-len(".java")].replace("/", ".") for src in srcs if _matches(test_identifiers, src)]
84-
85-
libargs = {}
86-
for (key, value) in kwargs.items():
87-
if key not in _test_attrs:
88-
libargs.update({key: value})
89-
90-
# Allow linting of sources we've written
91-
native.java_library(
92-
name = "%s-suite-lib" % name,
60+
for test in test_srcs:
61+
test_class = _test_class_name(pkg, test)
62+
test_name = test_class.rpartition(".")[2]
63+
64+
suite_targets.append(":%s" % test_name)
65+
66+
create_test_target(
67+
name = test_name,
68+
test_class = test_class,
69+
size = size,
70+
srcs = [test],
71+
deps = deps,
72+
tags = tags + additional_tags,
73+
**kwargs
74+
)
75+
76+
native.test_suite(
77+
name = name,
78+
tags = tags + ["manual"],
9379
testonly = True,
94-
srcs = srcs,
95-
deps = deps,
96-
tags = tags,
97-
**libargs
80+
tests = suite_targets,
9881
)
9982

100-
_write_suite(
101-
name = "%s-suite-src" % name,
102-
package = pkg[:-1],
103-
suite_name = suite_name,
104-
test_classes = test_classes,
83+
def _create_java_test_target(
84+
name,
85+
test_class,
86+
tags = [],
87+
**kwargs):
88+
native.java_test(
89+
name = name,
90+
tags = tags,
91+
test_class = test_class,
92+
**kwargs
10593
)
10694

10795
def java_test_suite(
@@ -113,69 +101,51 @@ def java_test_suite(
113101
deps = [],
114102
tags = [],
115103
**kwargs):
116-
suite_name = _suite_name(name, suite_name)
117-
pkg = package_name()
118-
test_classes = [pkg + src[:-len(".java")].replace("/", ".") for src in srcs if _matches(test_identifiers, src)]
119-
additional_tags = [] if size == "small" else ["no-sandbox"]
120-
121-
_generate_common_targets(
122-
name,
123-
size,
124-
suite_name,
125-
srcs,
126-
deps,
127-
tags,
128-
test_identifiers,
104+
_generate_test_suite(
105+
name = name,
106+
create_test_target = _create_java_test_target,
107+
size = size,
108+
srcs = srcs,
109+
deps = deps,
110+
tags = tags,
111+
test_identifiers = test_identifiers,
129112
**kwargs
130113
)
131114

132-
# Skip linting for the generated test suite
133-
native.java_test(
115+
def _create_selenium_test_target(
116+
name,
117+
test_class,
118+
tags = [],
119+
**kwargs):
120+
selenium_test(
134121
name = name,
135-
test_class = pkg + suite_name,
136-
size = size,
137-
srcs = [":%s-suite-src" % name],
138-
deps = deps + ["%s-suite-lib" % name],
139-
shard_count = len(test_classes),
140-
tags = tags + additional_tags,
122+
test_class = test_class,
123+
tags = tags,
141124
**kwargs
142125
)
143126

144127
def java_selenium_test_suite(
145128
name,
146129
browsers = BROWSERS.keys(),
147130
srcs = None,
131+
size = None,
148132
test_identifiers = ["Test.java"],
149133
deps = None,
150134
data = [],
151135
jvm_flags = [],
152136
tags = [],
153137
**kwargs):
154-
suite_name = _suite_name(name, None)
155-
pkg = package_name()
156-
test_classes = [pkg + src[:-len(".java")].replace("/", ".") for src in srcs if _matches(test_identifiers, src)]
157-
158-
amended_flags = {k: v for (k, v) in kwargs.items() if k != "size"}
159-
160-
_generate_common_targets(
161-
name,
162-
"large",
163-
suite_name,
164-
srcs,
165-
deps,
166-
tags,
167-
test_identifiers,
168-
**amended_flags
169-
)
138+
args = {}
139+
args.update(kwargs)
140+
args.update({"browsers": browsers})
170141

171-
selenium_test(
142+
_generate_test_suite(
172143
name = name,
173-
test_class = pkg + suite_name,
174-
browsers = browsers,
175-
size = "large",
176-
srcs = [":%s-suite-src" % name],
177-
deps = deps + ["%s-suite-lib" % name],
178-
data = data,
179-
jvm_flags = jvm_flags,
144+
create_test_target = _create_selenium_test_target,
145+
size = size,
146+
srcs = srcs,
147+
deps = deps,
180148
tags = tags,
149+
test_identifiers = test_identifiers,
150+
**args
181151
)

java/server/test/org/openqa/selenium/grid/router/BUILD.bazel

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,6 @@ java_selenium_test_suite(
4444
"--release",
4545
"11",
4646
],
47-
tags = [
48-
"no-remote",
49-
],
5047
deps = [
5148
":support",
5249
"//java/client/src/org/openqa/selenium/chrome",

0 commit comments

Comments
 (0)