Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

# 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()