| <!DOCTYPE html> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <script src="../resources/mojo-helpers.js"></script> |
| <script> |
| 'use strict'; |
| |
| // Verify that the mojo_test helper functions properly and Mojo bindings |
| // are available. |
| mojo_test(mojo => { |
| assert_true(mojo instanceof Object); |
| assert_true(mojo.core instanceof Object); |
| assert_true(mojo.router instanceof Object); |
| assert_true(mojo.frameInterfaces instanceof Object); |
| assert_true(mojo.interfaces instanceof Object); |
| }, 'Mojo system APIs should be available to layout tests.'); |
| |
| mojo_test(mojo => { |
| return new Promise(resolve => { |
| let calls = 0; |
| // Complete the test as soon as two requests come in for a Frobinator |
| // interface. |
| mojo.frameInterfaces.addInterfaceOverrideForTesting('Frobinator', () => { |
| if (++calls == 2) |
| resolve(); |
| }); |
| |
| // Try to connect to the browser's Frobinator interface. This should be |
| // intercepted by the above override. |
| mojo.frameInterfaces.getInterface('Frobinator'); |
| mojo.frameInterfaces.getInterface('Frobinator'); |
| }); |
| }, 'Frame interface provider overrides should be properly intercepted.'); |
| |
| mojo_test(mojo => { |
| return new Promise(resolve => { |
| let calls = 0; |
| // Complete the test as soon as two requests come in for a Frobinator |
| // interface. |
| mojo.interfaces.addInterfaceOverrideForTesting('Frobinator', () => { |
| if (++calls == 2) |
| resolve(); |
| }); |
| |
| // Try to connect to the browser's Frobinator interface. This should be |
| // intercepted by the above override. |
| mojo.interfaces.getInterface('Frobinator'); |
| mojo.interfaces.getInterface('Frobinator'); |
| }); |
| }, 'Interface provider overrides should be properly intercepted.'); |
| |
| mojo_test(mojo => { |
| return new Promise(resolve => { |
| let TEST_REQUEST = new Uint8Array([42, 0, 2, 3, 5, 7, 11, 13, 17, 19, 23]); |
| |
| mojo.interfaces.addInterfaceOverrideForTesting('Frobinator', pipe => { |
| resolve(mojo_wait_for_incoming_message(mojo, pipe) |
| .then(message => { |
| assert_array_equals(new Uint8Array(message.buffer), TEST_REQUEST); |
| assert_array_equals(message.handles, []); |
| })); |
| }); |
| |
| let pipe = mojo.interfaces.getInterface('Frobinator'); |
| assert_equals(mojo.core.writeMessage(pipe, TEST_REQUEST, [], 0), |
| mojo.core.RESULT_OK); |
| }); |
| }, 'Mock interfaces can receive messages from test code.'); |
| |
| mojo_test(mojo => { |
| let TEST_REQUEST = new Uint8Array([1, 2, 3, 4, 5]); |
| let EXPECTED_RESPONSE = new Uint8Array([5, 4, 3, 2, 1]); |
| |
| // Mock interface should respond to any message with its reverse. |
| mojo.interfaces.addInterfaceOverrideForTesting('Reversinator', pipe => { |
| mojo_wait_for_incoming_message(mojo, pipe) |
| .then(message => { |
| let response = new Uint8Array(message.buffer); |
| response.reverse(); |
| assert_equals(mojo.core.writeMessage(pipe, response, [], 0), |
| mojo.core.RESULT_OK); |
| }); |
| }); |
| |
| let pipe = mojo.interfaces.getInterface('Reversinator'); |
| assert_equals(mojo.core.writeMessage(pipe, TEST_REQUEST, [], 0), |
| mojo.core.RESULT_OK); |
| |
| return mojo_wait_for_incoming_message(mojo, pipe) |
| .then(response => { |
| assert_array_equals(new Uint8Array(response.buffer), EXPECTED_RESPONSE); |
| assert_array_equals(response.handles, []); |
| }); |
| }, 'Test code can receive response messages from mock interfaces.'); |
| |
| mojo_test(() => { |
| return new Promise(resolve => { |
| let iframe = document.createElement('iframe'); |
| let listener = result => { |
| document.body.removeChild(iframe); |
| window.removeEventListener('message', listener); |
| assert_true(result.data); |
| resolve(); |
| } |
| window.addEventListener('message', listener); |
| iframe.setAttribute('src', 'resources/mojo-helpers-inner.html'); |
| document.body.appendChild(iframe); |
| }); |
| }, 'Mojo bindings are accessible from iframes'); |
| |
| mojo_test(() => { |
| return new Promise(resolve => { |
| let popup; |
| let listener = result => { |
| popup.close(); |
| window.removeEventListener('message', listener); |
| assert_true(result.data); |
| resolve(); |
| } |
| window.addEventListener('message', listener); |
| popup = window.open('resources/mojo-helpers-inner.html'); |
| }); |
| }, 'Mojo bindings are accessible from popups'); |
| </script> |