Files
openide/build/tests-options.bzl
Leonid Shalupov 26a40784c4 build: bazel: do not run non-sandbox tests in sandbox
if sandbox parameter of jps_test is false, do not run tests in sandbox at all
it's expected that tests will gradually set sandbox=True and there will be rainbows and fireworks

ref IJI-2653 Bazel: prototype tests running from Bazel

GitOrigin-RevId: e277fbc53d09f77e8f8d8133bd3bc448e4cc3eae
2025-11-13 17:24:20 +00:00

136 lines
4.8 KiB
Python

load("@rules_java//java:defs.bzl", "java_test")
PKGS = [
"java.base/java.io",
"java.base/java.lang",
"java.base/java.lang.reflect",
"java.base/java.net",
"java.base/java.nio",
"java.base/java.nio.charset",
"java.base/java.text",
"java.base/java.time",
"java.base/java.util",
"java.base/java.util.concurrent",
"java.base/java.util.concurrent.atomic",
"java.base/jdk.internal.ref",
"java.base/jdk.internal.vm",
"java.base/sun.nio.ch",
"java.base/sun.nio.fs",
"java.base/sun.security.ssl",
"java.base/sun.security.util",
"java.desktop/com.apple.eawt",
"java.desktop/com.apple.eawt.event",
"java.desktop/com.apple.laf",
"java.desktop/java.awt",
"java.desktop/java.awt.dnd.peer",
"java.desktop/java.awt.event",
"java.desktop/java.awt.font",
"java.desktop/java.awt.image",
"java.desktop/java.awt.peer",
"java.desktop/javax.swing",
"java.desktop/javax.swing.plaf.basic",
"java.desktop/javax.swing.text.html",
"java.desktop/javax.swing.text.html.parser",
"java.desktop/sun.awt",
"java.desktop/sun.awt.datatransfer",
"java.desktop/sun.awt.image",
"java.desktop/sun.font",
"java.desktop/sun.java2d",
"java.desktop/sun.lwawt",
"java.desktop/sun.lwawt.macosx",
"java.desktop/sun.swing",
"jdk.attach/sun.tools.attach",
"jdk.compiler/com.sun.tools.javac.api",
"jdk.internal.jvmstat/sun.jvmstat.monitor",
"jdk.jdi/com.sun.tools.jdi",
]
ADD_OPENS_FLAGS = ["--add-opens=" + pkg + "=ALL-UNNAMED" for pkg in PKGS]
JAVA_TEST_FLAGS = [
"-Didea.classpath.index.enabled=false",
"-Djava.awt.headless=true",
"-Djunit.jupiter.extensions.autodetection.enabled=true",
"-Didea.force.use.core.classloader=true",
"-Djava.system.class.loader=com.intellij.util.lang.PathClassLoader",
"-Didea.reset.classpath.from.manifest=true",
"-Dintellij.build.use.compiled.classes=false",
]
JAVA_TEST_ARGS = [
]
TEST_FRAMEWORK_DEPS = [
# TODO Review this list, most likely only tools-testsBootstrap is required
# junit stuff should be propagated via runtime deps of testsBootstrap
"@community//platform/testFramework/bootstrap:tools-testsBootstrap",
"@community//platform/util:util-tests_test_lib",
# Provide test engines to run actual tests
# Junit 3/4 is also run by junit5 via junit vintage
"@lib//:junit5Vintage",
"@lib//:junit5Launcher",
]
# needed to avoid runtime duplications in jps_test of community/platform/util/BUILD.bazel
# as depset can't recognize that ":util-tests_test_lib" and "@community//platform/util:util-tests_test_lib" is the same lib
def _normalize_runtime_dep(dep):
if dep in [
":util-tests_test_lib",
"//platform/util:util-tests_test_lib",
"@community//platform/util:util-tests_test_lib",
]:
return "@community//platform/util:util-tests_test_lib"
return dep
def jps_test(name, jvm_flags = [], runtime_deps = [], args = [], data = [], tags = [], sandbox = False, env = {}):
# Merge user-provided args with our default ones
all_jvm_flags = JAVA_TEST_FLAGS + ADD_OPENS_FLAGS + jvm_flags
all_args = JAVA_TEST_ARGS + args
normalized_runtime_deps = [_normalize_runtime_dep(d) for d in runtime_deps]
all_runtime_deps = depset(TEST_FRAMEWORK_DEPS + normalized_runtime_deps).to_list()
all_data = list(data)
all_tags = list(tags)
all_env = dict(env)
# required for com.intellij.openapi.projectRoots.impl.JavaSdkImpl.internalJdkAnnotationsPath
# almost all tests in monorepo need it, so we add it to all tests
all_data.append("@community//java:mockJDK")
# handled by com.intellij.tests.JUnit5BazelRunner.main
all_env["JB_TEST_SANDBOX"] = str(sandbox)
if sandbox:
if "block-network" not in all_tags:
all_tags.append("block-network")
if "no-sandbox" in all_tags:
fail("sandboxed (by sandbox parameter to jps_test) tests should not have no-sandbox tag")
else:
# so com.intellij.tests.JUnit5BazelRunner.guessBazelWorkspaceDir will find a real workspace root
all_data.append("@community//:intellij.idea.community.main.iml")
if "no-sandbox" not in all_tags:
all_tags.append("no-sandbox")
# https://bazel.build/reference/be/java#java_test
# https://bazel.build/reference/be/common-definitions#common-attributes-tests
java_test(
name = name,
main_class = "com.intellij.tests.JUnit5BazelRunner",
jvm_flags = all_jvm_flags,
args = all_args,
runtime_deps = all_runtime_deps,
# maximum available test size, do not enforce more precise limits for now
# settings size also sets test timeout to 1 hours
# which is also a reasonable tests timeout for current state of things
size = "enormous",
tags = all_tags,
data = all_data,
env = all_env,
use_testrunner = False,
)