blob: 7655493cab23c54aedf51de8be4245f2f33fb2cb [file] [log] [blame] [edit]
load(":library.bzl", "java_library", "java_test")
load(":package.bzl", "package_name")
load(":selenium_test.bzl", "BROWSERS", "selenium_test")
_test_attrs = [
"browsers",
"deploy_manifest_lines",
"flaky",
"jvm_flags",
"launcher",
"main_class",
"shard_count",
"size",
"test_class",
"timeout",
"use_launcher",
"use_testrunner",
]
def _test_class_name(pkg, src_file):
test_name = src_file[:-len(".java")]
return pkg + test_name.replace("/", ".")
def _matches(identifiers, name):
test_name = name.split("/")[-1]
for identifier in identifiers:
if test_name.startswith(identifier) or test_name.endswith(identifier):
return True
return False
def _generate_test_suite(
name,
create_test_target,
size,
srcs,
deps,
tags,
test_identifiers,
**kwargs):
lib_srcs = [src for src in srcs if not _matches(test_identifiers, src)]
test_srcs = [src for src in srcs if _matches(test_identifiers, src)]
if len(lib_srcs):
libargs = {}
for (key, value) in kwargs.items():
if key not in _test_attrs:
libargs.update({key: value})
java_library(
name = "%s-support" % name,
testonly = True,
srcs = srcs,
deps = deps,
**libargs
)
deps = deps + [":%s-support" % name]
additional_tags = [] if size == "small" else ["no-sandbox"]
suite_targets = []
pkg = package_name()
for test in test_srcs:
test_class = _test_class_name(pkg, test)
test_name = test_class.rpartition(".")[2]
suite_targets.append(":%s" % test_name)
create_test_target(
name = test_name,
test_class = test_class,
size = size,
srcs = [test],
deps = deps,
tags = tags + additional_tags,
**kwargs
)
native.test_suite(
name = name,
tags = tags + ["manual"],
testonly = True,
tests = suite_targets,
)
def _create_java_test_target(
name,
test_class,
tags = [],
**kwargs):
java_test(
name = name,
tags = tags,
test_class = test_class,
**kwargs
)
def java_test_suite(
name,
srcs,
size = None,
suite_name = None,
test_identifiers = ["Test.java"],
deps = [],
tags = [],
**kwargs):
_generate_test_suite(
name = name,
create_test_target = _create_java_test_target,
size = size,
srcs = srcs,
deps = deps,
tags = tags,
test_identifiers = test_identifiers,
**kwargs
)
def _create_selenium_test_target(
name,
test_class,
tags = [],
**kwargs):
selenium_test(
name = name,
test_class = test_class,
tags = tags,
**kwargs
)
def java_selenium_test_suite(
name,
browsers = BROWSERS.keys(),
srcs = None,
size = None,
test_identifiers = ["Test.java"],
deps = None,
jvm_flags = [],
tags = [],
**kwargs):
args = {}
args.update(kwargs)
args.update({"browsers": browsers})
_generate_test_suite(
name = name,
create_test_target = _create_selenium_test_target,
size = size,
srcs = srcs,
deps = deps,
tags = tags,
test_identifiers = test_identifiers,
**args
)