Init Commit
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user