Created
July 13, 2016 15:00
-
-
Save jart/9a9f48e216fd747275012d2f2364ac09 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- mode:python; -*- | |
# | |
# Copyright 2016 The Bazel Authors. 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 GenTestRules(name, | |
test_files, | |
deps, | |
exclude_tests=[], | |
default_test_size="small", | |
small_tests=[], | |
medium_tests=[], | |
large_tests=[], | |
enormous_tests=[], | |
resources=[], | |
flaky_tests=[], | |
tags=[], | |
prefix="", | |
jvm_flags=["-XX:MaxPermSize=128m"], | |
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" | |
flaky = 0 | |
if (test in flaky_tests) or ("flaky" in tags): | |
flaky = 1 | |
java_class = _package_from_path( | |
PACKAGE_NAME + "/" + _strip_right(test, ".java")) | |
package = java_class[:java_class.rfind(".")] | |
native.java_test(name = prefix + test, | |
runtime_deps = deps, | |
resources = resources, | |
size = test_size, | |
jvm_flags = jvm_flags, | |
args = args, | |
flaky = flaky, | |
tags = tags, | |
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 ['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(str, suffix): | |
"""Returns str without the suffix if it ends with suffix.""" | |
if str.endswith(suffix): | |
return str[0: len(str) - len(suffix)] | |
else: | |
return str | |
def _index_of_end(str, part): | |
"""If part is in str, return the index of the first character after part. | |
Return -1 if part is not in str.""" | |
index = str.find(part) | |
if index >= 0: | |
return index + len(part) | |
return -1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment