90 lines
3.4 KiB
90 lines
3.4 KiB
# Copyright (C) 2020 The Dagger Authors.
|
|
#
|
|
# 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.
|
|
|
|
"""Macros for building compiler tests."""
|
|
|
|
load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_jvm_library")
|
|
|
|
def compiler_test(name, size = "large", compiler_deps = None, **kwargs):
|
|
"""Generates a java_test that tests java compilation with the given compiler deps.
|
|
|
|
This macro separates the compiler dependencies from the test dependencies to avoid
|
|
1-version violations. For example, this often happens when the java_test uses java
|
|
dependencies but the compiler test expects the android version of the dependencies.
|
|
|
|
Args:
|
|
name: The name of the java_test.
|
|
size: The size of the test (default "large" since this test does disk I/O).
|
|
compiler_deps: The deps needed during compilation.
|
|
**kwargs: The parameters to pass to the generated java_test.
|
|
|
|
Returns:
|
|
None
|
|
"""
|
|
|
|
# This JAR is loaded at runtime and contains the dependencies used by the compiler during tests.
|
|
# We separate these dependencies from the java_test dependencies to avoid 1 version violations.
|
|
native.java_binary(
|
|
name = name + "_compiler_deps",
|
|
testonly = 1,
|
|
tags = ["notap"],
|
|
visibility = ["//visibility:private"],
|
|
main_class = "Object.class",
|
|
runtime_deps = compiler_deps,
|
|
)
|
|
|
|
# Add the compiler deps jar, generated above, to the test's data.
|
|
kwargs["data"] = kwargs.get("data", []) + [name + "_compiler_deps_deploy.jar"]
|
|
|
|
# Need to check for srcs since for Kotlin tests we use a runtime dep on the kt_jvm_library
|
|
# target. We don't need to worry about adding a compile testing dep since kt_compiler_test
|
|
# adds that in the kt_jvm_library. Adding this dep automatically is merely a convenience
|
|
# for cases with srcs anyway.
|
|
if kwargs.get("srcs", None):
|
|
# Add a dep to allow usage of CompilerTests.
|
|
kwargs["deps"] = kwargs.get("deps", []) + ["//java/dagger/testing/compile"]
|
|
|
|
native.java_test(name = name, size = size, **kwargs)
|
|
|
|
def kt_compiler_test(name, srcs = [], deps = [], **kwargs):
|
|
"""Generates a java_test that tests java compilation with the given compiler deps.
|
|
|
|
This macro works the same as the above compiler_test, but for Kotlin sources.
|
|
|
|
Args:
|
|
name: The name of the java_test.
|
|
srcs: Source files for the test (typically should include Kotlin sources). If no
|
|
sources are needed, just use compiler_test with runtime_deps.
|
|
deps: Deps for compiling the files in srcs.
|
|
**kwargs: The parameters to pass to compiler_test
|
|
|
|
Returns:
|
|
None
|
|
"""
|
|
kt_jvm_library(
|
|
name = name + "_ktlib",
|
|
testonly = 1,
|
|
srcs = srcs,
|
|
deps = deps + ["//java/dagger/testing/compile"],
|
|
visibility = ["//visibility:private"],
|
|
)
|
|
|
|
compiler_test(
|
|
name = name,
|
|
runtime_deps = [
|
|
":" + name + "_ktlib",
|
|
],
|
|
**kwargs
|
|
)
|