79 lines
2.6 KiB
Python
79 lines
2.6 KiB
Python
import json
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
import reflection_config_generator as rgen
|
|
|
|
|
|
class ReflectionConfigGeneratorTests(unittest.TestCase):
|
|
def test_parse_package_filters_deduplicates_and_normalizes(self) -> None:
|
|
filters = rgen.parse_package_filters(
|
|
["com.acme.*, org.foo", "com.acme", " org.foo.bar "]
|
|
)
|
|
self.assertEqual(filters, ["com.acme", "org.foo", "org.foo.bar"])
|
|
|
|
def test_extract_top_level_types_ignores_nested_types(self) -> None:
|
|
source = """
|
|
package com.acme;
|
|
|
|
public class Outer {
|
|
class Inner {}
|
|
}
|
|
|
|
record Value(String v) {}
|
|
enum Mode { A, B }
|
|
"""
|
|
cleaned = rgen.strip_comments_and_literals(source)
|
|
self.assertEqual(
|
|
rgen.extract_top_level_types(cleaned),
|
|
["Outer", "Value", "Mode"],
|
|
)
|
|
|
|
def test_main_generates_reflection_config_for_filtered_packages(self) -> None:
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
root = Path(tmp)
|
|
(root / "src/com/acme").mkdir(parents=True)
|
|
(root / "src/com/acme/sub").mkdir(parents=True)
|
|
(root / "src/org/other").mkdir(parents=True)
|
|
|
|
(root / "src/com/acme/A.java").write_text(
|
|
"package com.acme; public class A {}",
|
|
encoding="utf-8",
|
|
)
|
|
(root / "src/com/acme/sub/B.java").write_text(
|
|
"package com.acme.sub; public record B(String name) {}",
|
|
encoding="utf-8",
|
|
)
|
|
(root / "src/org/other/C.java").write_text(
|
|
"package org.other; public class C {}",
|
|
encoding="utf-8",
|
|
)
|
|
|
|
out_file = root / "reflection-config.json"
|
|
exit_code = rgen.main(
|
|
[
|
|
"--source-root",
|
|
str(root / "src"),
|
|
"--package",
|
|
"com.acme",
|
|
"--output",
|
|
str(out_file),
|
|
]
|
|
)
|
|
self.assertEqual(exit_code, 0)
|
|
|
|
content = json.loads(out_file.read_text(encoding="utf-8"))
|
|
self.assertEqual(
|
|
[entry["name"] for entry in content],
|
|
["com.acme.A", "com.acme.sub.B"],
|
|
)
|
|
self.assertTrue(content[0]["allDeclaredMethods"])
|
|
self.assertTrue(content[0]["allDeclaredConstructors"])
|
|
self.assertTrue(content[0]["allDeclaredFields"])
|
|
self.assertNotIn("allPublicMethods", content[0])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|