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 )