1
+ load (":library.bzl" , "java_library" )
1
2
load (":selenium_test.bzl" , "BROWSERS" , "DEFAULT_BROWSER" , "selenium_test" )
2
3
load (":package.bzl" , "package_name" )
3
4
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
-
52
5
_test_attrs = [
6
+ "browsers" ,
53
7
"deploy_manifest_lines" ,
54
8
"flaky" ,
55
9
"jvm_flags" ,
@@ -63,45 +17,79 @@ _test_attrs = [
63
17
"use_testrunner" ,
64
18
]
65
19
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
70
29
71
- def _generate_common_targets (
30
+ def _generate_test_suite (
72
31
name ,
32
+ create_test_target ,
73
33
size ,
74
- suite_name ,
75
34
srcs ,
76
35
deps ,
77
36
tags ,
78
37
test_identifiers ,
79
38
** 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 ]
81
56
57
+ additional_tags = [] if size == "small" else ["no-sandbox" ]
58
+ suite_targets = []
82
59
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" ],
93
79
testonly = True ,
94
- srcs = srcs ,
95
- deps = deps ,
96
- tags = tags ,
97
- ** libargs
80
+ tests = suite_targets ,
98
81
)
99
82
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
105
93
)
106
94
107
95
def java_test_suite (
@@ -113,69 +101,51 @@ def java_test_suite(
113
101
deps = [],
114
102
tags = [],
115
103
** 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 ,
129
112
** kwargs
130
113
)
131
114
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 (
134
121
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 ,
141
124
** kwargs
142
125
)
143
126
144
127
def java_selenium_test_suite (
145
128
name ,
146
129
browsers = BROWSERS .keys (),
147
130
srcs = None ,
131
+ size = None ,
148
132
test_identifiers = ["Test.java" ],
149
133
deps = None ,
150
134
data = [],
151
135
jvm_flags = [],
152
136
tags = [],
153
137
** 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 })
170
141
171
- selenium_test (
142
+ _generate_test_suite (
172
143
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 ,
180
148
tags = tags ,
149
+ test_identifiers = test_identifiers ,
150
+ ** args
181
151
)
0 commit comments