forked from weaselab/weaseljson
Merge pull request 'schemagen: add C++20 keywords to the C++ keyword allow-list' (#22) from weaselbot/weaseljson:weaselbot/issue-18 into main
Reviewed-on: weaselab/weaseljson#22
This commit is contained in:
@@ -49,5 +49,43 @@ class SchemagenEnumTest(unittest.TestCase):
|
|||||||
self.assertIn("enum class Role : int { admin, user, guest };", stdout)
|
self.assertIn("enum class Role : int { admin, user, guest };", stdout)
|
||||||
|
|
||||||
|
|
||||||
|
class SchemagenKeywordTest(unittest.TestCase):
|
||||||
|
def run_schemagen(self, schema, args=None):
|
||||||
|
"""Run schemagen on a schema dict. Returns (returncode, stdout, stderr)."""
|
||||||
|
with tempfile.NamedTemporaryFile("w", suffix=".json", delete=False) as fp:
|
||||||
|
json.dump(schema, fp)
|
||||||
|
schema_path = fp.name
|
||||||
|
try:
|
||||||
|
cmd = [sys.executable, SCRIPT, schema_path]
|
||||||
|
if args:
|
||||||
|
cmd.extend(args)
|
||||||
|
result = subprocess.run(cmd, capture_output=True, text=True, check=False)
|
||||||
|
return result.returncode, result.stdout, result.stderr
|
||||||
|
finally:
|
||||||
|
os.unlink(schema_path)
|
||||||
|
|
||||||
|
def test_cpp20_keywords_are_sanitized(self):
|
||||||
|
"""C++20 keywords used as JSON property names must be suffixed."""
|
||||||
|
keywords = [
|
||||||
|
"concept",
|
||||||
|
"consteval",
|
||||||
|
"constinit",
|
||||||
|
"co_await",
|
||||||
|
"co_return",
|
||||||
|
"co_yield",
|
||||||
|
"requires",
|
||||||
|
"module",
|
||||||
|
"import",
|
||||||
|
]
|
||||||
|
schema = {"type": "object", "properties": {}}
|
||||||
|
for kw in keywords:
|
||||||
|
schema["properties"][kw] = {"type": "string"}
|
||||||
|
rc, stdout, stderr = self.run_schemagen(schema)
|
||||||
|
self.assertEqual(rc, 0, msg=stderr)
|
||||||
|
for kw in keywords:
|
||||||
|
self.assertIn(f"std::optional<std::string> {kw}_;", stdout)
|
||||||
|
self.assertNotIn(f"std::optional<std::string> {kw};", stdout)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|||||||
@@ -133,9 +133,15 @@ _CPP_KEYWORDS = {
|
|||||||
"catch",
|
"catch",
|
||||||
"char",
|
"char",
|
||||||
"class",
|
"class",
|
||||||
|
"concept",
|
||||||
"const",
|
"const",
|
||||||
|
"consteval",
|
||||||
|
"constinit",
|
||||||
"constexpr",
|
"constexpr",
|
||||||
"continue",
|
"continue",
|
||||||
|
"co_await",
|
||||||
|
"co_return",
|
||||||
|
"co_yield",
|
||||||
"decltype",
|
"decltype",
|
||||||
"default",
|
"default",
|
||||||
"delete",
|
"delete",
|
||||||
@@ -152,9 +158,11 @@ _CPP_KEYWORDS = {
|
|||||||
"friend",
|
"friend",
|
||||||
"goto",
|
"goto",
|
||||||
"if",
|
"if",
|
||||||
|
"import",
|
||||||
"inline",
|
"inline",
|
||||||
"int",
|
"int",
|
||||||
"long",
|
"long",
|
||||||
|
"module",
|
||||||
"namespace",
|
"namespace",
|
||||||
"new",
|
"new",
|
||||||
"not",
|
"not",
|
||||||
@@ -166,6 +174,7 @@ _CPP_KEYWORDS = {
|
|||||||
"public",
|
"public",
|
||||||
"register",
|
"register",
|
||||||
"return",
|
"return",
|
||||||
|
"requires",
|
||||||
"short",
|
"short",
|
||||||
"signed",
|
"signed",
|
||||||
"sizeof",
|
"sizeof",
|
||||||
|
|||||||
Reference in New Issue
Block a user