| # Copyright 2017 Google Inc. All Rights Reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| ################################################################################ |
| |
| """Generate Java test rules from given test_files. |
| |
| Instead of having to create one test rule per test in the BUILD file, this rule |
| provides a handy way to create a bunch of test rules for the specified test |
| files. |
| |
| """ |
| |
| def gen_java_test_rules( |
| test_files, |
| deps, |
| data = [], |
| exclude_tests = [], |
| default_test_size = "small", |
| small_tests = [], |
| medium_tests = [], |
| large_tests = [], |
| enormous_tests = [], |
| flaky_tests = [], |
| manual_tests = [], |
| notsan_tests = [], |
| no_rbe_tests = [], |
| resources = [], |
| tags = [], |
| prefix = "", |
| jvm_flags = [], |
| args = [], |
| visibility = None, |
| shard_count = 1): |
| for test in _get_test_names(test_files): |
| if test in exclude_tests: |
| continue |
| test_size = default_test_size |
| if test in small_tests: |
| test_size = "small" |
| if test in medium_tests: |
| test_size = "medium" |
| if test in large_tests: |
| test_size = "large" |
| if test in enormous_tests: |
| test_size = "enormous" |
| manual = [] |
| if test in manual_tests: |
| manual = ["manual"] |
| notsan = [] |
| if test in notsan_tests: |
| notsan = ["notsan"] |
| no_rbe = [] |
| if test in no_rbe_tests: |
| no_rbe = ["no_rbe"] |
| flaky = 0 |
| if (test in flaky_tests) or ("flaky" in tags): |
| flaky = 1 |
| java_class = _package_from_path( |
| native.package_name() + "/" + _strip_right(test, ".java"), |
| ) |
| native.java_test( |
| name = prefix + test, |
| runtime_deps = deps, |
| data = data, |
| resources = resources, |
| size = test_size, |
| jvm_flags = jvm_flags, |
| args = args, |
| flaky = flaky, |
| tags = tags + manual + notsan + no_rbe, |
| test_class = java_class, |
| visibility = visibility, |
| shard_count = shard_count, |
| ) |
| |
| def _get_test_names(test_files): |
| test_names = [] |
| for test_file in test_files: |
| if not test_file.endswith("Test.java"): |
| continue |
| test_names += [test_file[:-5]] |
| return test_names |
| |
| def _package_from_path(package_path, src_impls = None): |
| src_impls = src_impls or ["src/test/java/", "javatests/", "java/"] |
| for src_impl in src_impls: |
| if not src_impl.endswith("/"): |
| src_impl += "/" |
| index = _index_of_end(package_path, src_impl) |
| if index >= 0: |
| package_path = package_path[index:] |
| break |
| return package_path.replace("/", ".") |
| |
| def _strip_right(s, suffix): |
| if s.endswith(suffix): |
| return s[0:len(s) - len(suffix)] |
| else: |
| return s |
| |
| def _index_of_end(s, part): |
| index = s.find(part) |
| if index >= 0: |
| return index + len(part) |
| return -1 |