diff options
Diffstat (limited to 'testing/web-platform/tests/subapps/resources')
-rw-r--r-- | testing/web-platform/tests/subapps/resources/subapps-helpers.js | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/testing/web-platform/tests/subapps/resources/subapps-helpers.js b/testing/web-platform/tests/subapps/resources/subapps-helpers.js new file mode 100644 index 0000000000..38b8d11466 --- /dev/null +++ b/testing/web-platform/tests/subapps/resources/subapps-helpers.js @@ -0,0 +1,123 @@ +// This mock provides a way to intercept renderer <-> browser mojo messages for +// navigator.subApps.* calls eliminating the need for an actual browser. +// +// In Chromium-based browsers this implementation is provided by a polyfill +// in order to reduce the amount of test-only code shipped to users. + +'use strict'; + +let mockSubAppsService = null; + +// TODO(crbug.com/1408101): Figure out how to export SubAppsServiceResult (and +// get rid of this). +const Status = { + SUCCESS: 0, + FAILURE: 1, +}; + +async function createMockSubAppsService(service_result_code, add_call_return_value, list_call_return_value, remove_call_return_value) { + if (typeof SubAppsServiceTest === 'undefined') { + // Load test-only API helpers. + const script = document.createElement('script'); + script.src = '/resources/test-only-api.js'; + script.async = false; + const p = new Promise((resolve, reject) => { + script.onload = () => { resolve(); }; + script.onerror = e => { reject(e); }; + }) + document.head.appendChild(script); + await p; + + if (isChromiumBased) { + // Chrome setup. + await import('/resources/chromium/mock-subapps.js'); + } else { + throw new Error('Unsupported browser.'); + } + } + assert_implements(SubAppsServiceTest, 'SubAppsServiceTest is not loaded properly.'); + + if (mockSubAppsService === null) { + mockSubAppsService = new SubAppsServiceTest(); + mockSubAppsService.initialize(service_result_code, add_call_return_value, list_call_return_value, remove_call_return_value); + } +} + +function subapps_test(func, description) { + promise_test(async test => { + test.add_cleanup(async () => { + await mockSubAppsService.reset(); + mockSubAppsService = null; + }); + await createMockSubAppsService(Status.SUCCESS, [], [], []); + await func(test, mockSubAppsService); + }, description); +} + +async function subapps_add_expect_reject_with_result(t, add_call_params, mocked_response, expected_results) { + t.add_cleanup(async () => { + await mockSubAppsService.reset(); + mockSubAppsService = null; + }); + + await createMockSubAppsService(Status.FAILURE, mocked_response, [], []); + await navigator.subApps.add(add_call_params).then( + result => { + assert_unreached("Should have rejected: ", result); + }, + error => { + for (const app_id in expected_results) { + assert_own_property(error, app_id, "Return results are missing entry for subapp.") + assert_equals(error[app_id], expected_results[app_id], "Return results are not as expected.") + } + }); +} + +async function subapps_add_expect_success_with_result(t, add_call_params, mocked_response, expected_results) { + t.add_cleanup(async () => { + await mockSubAppsService.reset(); + mockSubAppsService = null; + }); + + await createMockSubAppsService(Status.SUCCESS, mocked_response, [], []); + await navigator.subApps.add(add_call_params).then(result => { + for (const app_id in expected_results) { + assert_own_property(result, app_id, "Return results are missing entry for subapp.") + assert_equals(result[app_id], expected_results[app_id], "Return results are not as expected.") + } + }); +} + +async function subapps_remove_expect_reject_with_result(t, remove_call_params, mocked_response, expected_results) { + t.add_cleanup(async () => { + await mockSubAppsService.reset(); + mockSubAppsService = null; + }); + + await createMockSubAppsService(Status.FAILURE, [], [], mocked_response); + await navigator.subApps.remove(remove_call_params).then( + result => { + assert_unreached("Should have rejected: ", result); + }, + error => { + for (const app_id in expected_results) { + assert_own_property(error, app_id, "Return results are missing entry for subapp.") + assert_equals(error[app_id], expected_results[app_id], "Return results are not as expected.") + } + }); +} + +async function subapps_remove_expect_success_with_result(t, remove_call_params, mocked_response, expected_results) { + t.add_cleanup(async () => { + await mockSubAppsService.reset(); + mockSubAppsService = null; + }); + + await createMockSubAppsService(Status.SUCCESS, [], [], mocked_response); + await navigator.subApps.remove(remove_call_params).then(result => { + for (const app_id in expected_results) { + assert_own_property(result, app_id, "Return results are missing entry for subapp.") + assert_equals(result[app_id], expected_results[app_id], "Return results are not as expected.") + } + }); +} |