| 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 |
| ) |