1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
<!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.serviceRegistry 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 service.
mojo.serviceRegistry.addServiceOverrideForTesting('Frobinator', () => {
if (++calls == 2)
resolve();
});
// Try to connect to the browser's Frobinator service. This should be
// intercepted by the above override.
mojo.serviceRegistry.connectToService('Frobinator');
mojo.serviceRegistry.connectToService('Frobinator');
});
}, 'Service registry 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.serviceRegistry.addServiceOverrideForTesting('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.serviceRegistry.connectToService('Frobinator');
assert_equals(mojo.core.writeMessage(pipe, TEST_REQUEST, [], 0),
mojo.core.RESULT_OK);
});
}, 'Mock services 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 service should respond to any message with its reverse.
mojo.serviceRegistry.addServiceOverrideForTesting('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.serviceRegistry.connectToService('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 services.');
mojo_test(() => {
return loadMojoModules(
'module loading test',
['mojo/shell/public/interfaces/interface_provider.mojom']).then(mojo => {
let interfaceProvider = mojo.modules[0];
assert_equals(interfaceProvider.InterfaceProvider.name,
'mojo::shell::mojom::InterfaceProvider');
});
}, 'Generated mojo bindings can be loaded in tests');
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>
|