| 'use strict'; |
| |
| // These tests rely on the User Agent providing an implementation of |
| // the sms retriever. |
| // |
| // In Chromium-based browsers this implementation is provided by a polyfill |
| // in order to reduce the amount of test-only code shipped to users. To enable |
| // these tests the browser must be run with these options: |
| // // --enable-blink-features=MojoJS,MojoJSTest |
| |
| async function loadChromiumResources() { |
| if (!window.MojoInterfaceInterceptor) { |
| // Do nothing on non-Chromium-based browsers or when the Mojo bindings are |
| // not present in the global namespace. |
| return; |
| } |
| |
| const resources = [ |
| '/gen/layout_test_data/mojo/public/js/mojo_bindings_lite.js', |
| '/gen/mojo/public/mojom/base/time.mojom-lite.js', |
| '/gen/third_party/blink/public/mojom/sms/sms_receiver.mojom-lite.js', |
| '/resources/chromium/mock-sms-receiver.js', |
| ]; |
| |
| await Promise.all(resources.map(path => { |
| const script = document.createElement('script'); |
| script.src = path; |
| script.async = false; |
| const promise = new Promise((resolve, reject) => { |
| script.onload = resolve; |
| script.onerror = reject; |
| }); |
| document.head.appendChild(script); |
| return promise; |
| })); |
| |
| Status.kSuccess = blink.mojom.SmsStatus.kSuccess; |
| Status.kTimeout = blink.mojom.SmsStatus.kTimeout; |
| Status.kCancelled = blink.mojom.SmsStatus.kCancelled; |
| }; |
| |
| const Status = {}; |
| |
| async function create_sms_provider() { |
| if (typeof SmsProvider === 'undefined') { |
| await loadChromiumResources(); |
| } |
| if (typeof SmsProvider == 'undefined') { |
| throw new Error('Mojo testing interface is not available.'); |
| } |
| return new SmsProvider(); |
| } |
| |
| function receive() { |
| throw new Error("expected to be overriden by tests"); |
| } |
| |
| function expect(call) { |
| return { |
| async andReturn(callback) { |
| const mock = await create_sms_provider(); |
| mock.pushReturnValuesForTesting(call.name, callback); |
| } |
| } |
| } |