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/.
import os
import types
from textwrap import dedent
import helpers # Import test helpers module.
import mozunit
helpers.setup()
from GenerateWebIDLBindings import Schemas
from InspectJSONSchema import run_inspect_command
def test_inspect_schema_platform_diffs(capsys, write_jsonschema_fixtures, tmpdir):
"""
Test InspectJSONSchema --dump-platform-diff command.
"""
browser_schema_dir = os.path.join(tmpdir, "browser")
mobile_schema_dir = os.path.join(tmpdir, "mobile")
os.mkdir(browser_schema_dir)
os.mkdir(mobile_schema_dir)
write_jsonschema_fixtures(
{
"test_api_browser.json": dedent(
"""
[
{
"namespace": "apiWithDiff",
"functions": [
{
"name": "sharedMethod",
"type": "function",
"parameters": [
{ "name": "sharedParam", "type": "string" },
{ "name": "desktopOnlyMethodParam", "type": "string" }
]
},
{
"name": "desktopMethod",
"type": "function",
"parameters": []
}
],
"events": [
{
"name": "onSharedEvent",
"type": "function",
"parameters": [
{ "name": "sharedParam", "type": "string" },
{ "name": "desktopOnlyEventParam", "type": "string" }
]
}
],
"properties": {
"sharedProperty": { "type": "string", "value": "desktop-value" },
"desktopOnlyProperty": { "type": "string", "value": "desktop-only-value" }
}
}
]
"""
)
},
browser_schema_dir,
)
write_jsonschema_fixtures(
{
"test_api_mobile.json": dedent(
"""
[
{
"namespace": "apiWithDiff",
"functions": [
{
"name": "sharedMethod",
"type": "function",
"parameters": [
{ "name": "sharedParam", "type": "string" },
{ "name": "mobileOnlyMethodParam", "type": "string" }
]
},
{
"name": "mobileMethod",
"type": "function",
"parameters": []
}
],
"events": [
{
"name": "onSharedEvent",
"type": "function",
"parameters": [
{ "name": "sharedParam", "type": "string" },
{ "name": "mobileOnlyEventParam", "type": "string" }
]
}
],
"properties": {
"sharedProperty": { "type": "string", "value": "mobile-value" },
"mobileOnlyProperty": { "type": "string", "value": "mobile-only-value" }
}
}
]
"""
)
},
mobile_schema_dir,
)
schemas = Schemas()
schemas.load_schemas(browser_schema_dir, "browser")
schemas.load_schemas(mobile_schema_dir, "mobile")
assert schemas.get_all_namespace_names() == ["apiWithDiff"]
apiNs = schemas.api_namespaces["apiWithDiff"]
assert apiNs.in_browser
assert apiNs.in_mobile
apiNs.parse_schemas()
fakeArgs = types.SimpleNamespace()
fakeArgs.dump_namespaces_info = False
fakeArgs.dump_platform_diffs = True
fakeArgs.only_if_webidl_diffs = False
fakeArgs.diff_command = None
fakeParser = types.SimpleNamespace()
fakeParser.print_help = lambda: None
run_inspect_command(fakeArgs, schemas, fakeParser)
captured = capsys.readouterr()
assert "API schema desktop vs. mobile for apiWithDiff.sharedMethod" in captured.out
assert '- "name": "desktopOnlyMethodParam",' in captured.out
assert '+ "name": "mobileOnlyMethodParam",' in captured.out
assert "API schema desktop vs. mobile for apiWithDiff.onSharedEvent" in captured.out
assert '- "name": "desktopOnlyEventParam",' in captured.out
assert '+ "name": "mobileOnlyEventParam",' in captured.out
assert (
"API schema desktop vs. mobile for apiWithDiff.sharedProperty" in captured.out
)
assert '- "value": "desktop-value"' in captured.out
assert '+ "value": "mobile-value"' in captured.out
assert captured.err == ""
if __name__ == "__main__":
mozunit.main()