123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- """
- Generates a side-car JUnit suite test runner class for each
- input src.
- """
- _template = """import org.junit.runners.Suite;
- import org.junit.runner.RunWith;
- @RunWith(Suite.class)
- @Suite.SuiteClasses({%s})
- public class %s {}
- """
- def _as_classname(fname, pkg):
- path_name = [x.path for x in fname.files.to_list()][0]
- file_name = path_name.split("/")[-1]
- return ".".join([pkg, file_name.split(".")[0]]) + ".class"
- def _gen_suite_impl(ctx):
- classes = ",".join(
- [_as_classname(x, ctx.attr.package_name) for x in ctx.attr.srcs],
- )
- ctx.actions.write(output = ctx.outputs.out, content = _template % (
- classes,
- ctx.attr.outname,
- ))
- _gen_suite = rule(
- attrs = {
- "srcs": attr.label_list(allow_files = True),
- "package_name": attr.string(),
- "outname": attr.string(),
- },
- outputs = {"out": "%{name}.java"},
- implementation = _gen_suite_impl,
- )
- def junit_tests(name, srcs, data = [], deps = [], package_name = "com.google.protobuf", test_prefix = None, **kwargs):
- testlib_name = "%s_lib" % name
- native.java_library(
- name = testlib_name,
- srcs = srcs,
- deps = deps,
- resources = data,
- data = data,
- )
- test_names = []
- prefix = name.replace("-", "_") + "TestSuite"
- for src in srcs:
- test_name = src.rsplit("/", 1)[1].split(".")[0]
- if not test_name.endswith("Test") or test_name.startswith("Abstract"):
- continue
- if test_prefix:
- test_name = "%s%s" % (test_prefix, test_name)
- test_names = test_names + [test_name]
- suite_name = prefix + '_' + test_name
- _gen_suite(
- name = suite_name,
- srcs = [src],
- package_name = package_name,
- outname = suite_name,
- )
- native.java_test(
- name = test_name,
- test_class = suite_name,
- srcs = [src] + [":" + suite_name],
- deps = deps + [":%s" % testlib_name],
- **kwargs
- )
- native.test_suite(
- name = name,
- tests = test_names,
- )
|