blob: b13b26f579ec6888c7aadad420612482a2cb4981 [file] [log] [blame]
import os
import unittest
import subprocess
import sys
import tempfile
from tools.adt.idea.studio.tests import test_utils
class MkSpecTest(unittest.TestCase):
def _run(self, script, path, out):
# A cross-platform way of running a python script.
ret = subprocess.run(
[sys.executable, script, "--path", path, "--out", out],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
env = {"PYTHONPATH": os.path.dirname(script)}
)
return ret
def test_mkspec(self):
deploy_dir = test_utils.deploy_py("mkspec_files")
download = tempfile.mkdtemp()
test_utils.create_all(download, {"lib/app.jar": {"__index__": "data"},
"lib/resources.jar": {
"idea/WhiteSpacerApplicationInfo.xml": "<version major=\"2024\" minor=\"1\">",
},
"lib/modules/intellij.platform.coverage.jar": {},
"lib/testFramework.jar": {},
"plugins/foo/lib/foo.jar": {"META-INF/plugin.xml": "<idea-plugin><id>com.sample.foo</id></idea-plugin>"},
"plugins/bar/lib/bar.jar": {
"META-INF/plugin.xml": """<idea-plugin xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="/META-INF/Other.xml" xpointer="xpointer(/idea-plugin/*)" />
</idea-plugin>""",
"META-INF/Other.xml": """<idea-plugin xmlns:xi="http://www.w3.org/2001/XInclude">
<id>com.sample.bar</id>
</idea-plugin>"""},
"plugins/common/lib/common.jar": {"META-INF/plugin.xml": "<idea-plugin><id>com.sample.common</id></idea-plugin>"},
"plugins/common/lib/modules/common.plugin.module.jar": {"common.plugin.module.xml": "<idea-plugin></idea-plugin>"},
"plugins/noid/lib/noid.jar": {"META-INF/plugin.xml": "<idea-plugin><name>the_name</name></idea-plugin>"},
"product-info.json": {
"launch": [{
"bootClassPathJarNames": ["util.jar"],
"additionalJvmArguments": [
"-Didea.platform.prefix=WhiteSpacer",
"--add-opens=java.base/java.io=ALL-UNNAMED",
"--add-opens=java.base/java.net=ALL-UNNAMED",
"--add-exports=java.base/java.lang=ALL-UNNAMED",
],
}]
},
})
bzl = os.path.join(download, "spec.bzl")
ret = self._run(deploy_dir + os.path.normpath("/tools/adt/idea/studio/mkspec.py"), download, bzl)
ret.check_returncode()
expected = """# Auto-generated file, do not edit manually.
SPEC = struct(
major_version = "2024",
minor_version = "1",
jars = [
"/lib/util.jar",
],
jars_linux = [
],
plugin_jars = {
"com.sample.bar": [
"plugins/bar/lib/bar.jar",
],
"com.sample.common": [
"plugins/common/lib/common.jar",
],
"com.sample.foo": [
"plugins/foo/lib/foo.jar",
],
"common.plugin.module": [
"plugins/common/lib/modules/common.plugin.module.jar",
],
"intellij.platform.coverage": [
"lib/modules/intellij.platform.coverage.jar",
],
"the_name": [
"plugins/noid/lib/noid.jar",
],
},
plugin_jars_linux = {
},
add_exports = [
"java.base/java.lang",
],
add_opens = [
"java.base/java.io",
"java.base/java.net",
],
)
"""
actual = test_utils.readstr(bzl)
if expected != actual:
print(actual)
self.assertEqual(expected, actual)
def test_no_prefix(self):
deploy_dir = test_utils.deploy_py("mkspec_files")
download = tempfile.mkdtemp()
test_utils.create_all(download, {"lib/app.jar": {"__index__": "data"},
"lib/any.jar": {
"idea/ApplicationInfo.xml": "<version major=\"2024\" minor=\"1\">",
},
"product-info.json": {
"launch": [{
"bootClassPathJarNames": [],
"additionalJvmArguments": [],
}]
},
})
bzl = os.path.join(download, "spec.bzl")
ret = self._run(deploy_dir + os.path.normpath("/tools/adt/idea/studio/mkspec.py"), download, bzl)
ret.check_returncode()
expected = """# Auto-generated file, do not edit manually.
SPEC = struct(
major_version = "2024",
minor_version = "1",
jars = [
],
jars_linux = [
],
plugin_jars = {
},
plugin_jars_linux = {
},
add_exports = [
],
add_opens = [
],
)
"""
actual = test_utils.readstr(bzl)
if expected != actual:
print(actual)
self.assertEqual(expected, actual)
if __name__ == "__main__":
unittest.main()