summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/webidl-api/test/test_webidl_from_json_schema.py
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/webidl-api/test/test_webidl_from_json_schema.py')
-rw-r--r--toolkit/components/extensions/webidl-api/test/test_webidl_from_json_schema.py110
1 files changed, 110 insertions, 0 deletions
diff --git a/toolkit/components/extensions/webidl-api/test/test_webidl_from_json_schema.py b/toolkit/components/extensions/webidl-api/test/test_webidl_from_json_schema.py
new file mode 100644
index 0000000000..64cd7a7361
--- /dev/null
+++ b/toolkit/components/extensions/webidl-api/test/test_webidl_from_json_schema.py
@@ -0,0 +1,110 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+from textwrap import dedent
+
+import helpers # Import test helpers module.
+import mozunit
+
+helpers.setup()
+
+from GenerateWebIDLBindings import (
+ WEBEXT_STUBS_MAPPING,
+ APIFunction,
+ Schemas,
+ WebIDLHelpers,
+)
+
+original_stub_mapping_config = WEBEXT_STUBS_MAPPING.copy()
+
+
+def teardown_function():
+ WEBEXT_STUBS_MAPPING.clear()
+ for key in original_stub_mapping_config:
+ WEBEXT_STUBS_MAPPING[key] = original_stub_mapping_config[key]
+
+
+def test_ambiguous_stub_mappings(write_jsonschema_fixtures):
+ """
+ Test generated webidl for methods that are either
+ - being marked as ambiguous because of the "allowAmbiguousOptionalArguments" property
+ in their JSONSchema definition
+ - mapped to "AsyncAmbiguous" stub per WEBEXT_STUBS_MAPPING python script config
+ """
+
+ schema_dir = write_jsonschema_fixtures(
+ {
+ "test_api.json": dedent(
+ """
+ [
+ {
+ "namespace": "testAPINamespace",
+ "functions": [
+ {
+ "name": "jsonSchemaAmbiguousMethod",
+ "type": "function",
+ "allowAmbiguousOptionalArguments": true,
+ "async": true,
+ "parameters": [
+ {"type": "any", "name": "param1", "optional": true},
+ {"type": "any", "name": "param2", "optional": true},
+ {"type": "string", "name": "param3", "optional": true}
+ ]
+ },
+ {
+ "name": "configuredAsAmbiguousMethod",
+ "type": "function",
+ "async": "callback",
+ "parameters": [
+ {"name": "param1", "optional": true, "type": "object"},
+ {"name": "callback", "type": "function", "parameters": []}
+ ]
+ }
+ ]
+ }
+ ]
+ """
+ )
+ }
+ )
+
+ assert "testAPINamespace.configuredAsAmbiguousMethod" not in WEBEXT_STUBS_MAPPING
+ # NOTE: mocked config reverted in the teardown_method pytest hook.
+ WEBEXT_STUBS_MAPPING[
+ "testAPINamespace.configuredAsAmbiguousMethod"
+ ] = "AsyncAmbiguous"
+
+ schemas = Schemas()
+ schemas.load_schemas(schema_dir, "toolkit")
+
+ assert schemas.get_all_namespace_names() == ["testAPINamespace"]
+ schemas.parse_schemas()
+
+ apiNs = schemas.get_namespace("testAPINamespace")
+ fnAmbiguousBySchema = apiNs.functions.get("jsonSchemaAmbiguousMethod")
+
+ assert isinstance(fnAmbiguousBySchema, APIFunction)
+ generated_webidl = WebIDLHelpers.to_webidl_definition(fnAmbiguousBySchema, None)
+ expected_webidl = "\n".join(
+ [
+ ' [Throws, WebExtensionStub="AsyncAmbiguous"]',
+ " any jsonSchemaAmbiguousMethod(any... args);",
+ ]
+ )
+ assert generated_webidl == expected_webidl
+
+ fnAmbiguousByConfig = apiNs.functions.get("configuredAsAmbiguousMethod")
+ assert isinstance(fnAmbiguousByConfig, APIFunction)
+ generated_webidl = WebIDLHelpers.to_webidl_definition(fnAmbiguousByConfig, None)
+ expected_webidl = "\n".join(
+ [
+ ' [Throws, WebExtensionStub="AsyncAmbiguous"]',
+ " any configuredAsAmbiguousMethod(any... args);",
+ ]
+ )
+ assert generated_webidl == expected_webidl
+
+
+if __name__ == "__main__":
+ mozunit.main()