aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/messaging/portchannel_test.html
diff options
context:
space:
mode:
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/messaging/portchannel_test.html')
-rw-r--r--contexts/data/lib/closure-library/closure/goog/messaging/portchannel_test.html391
1 files changed, 0 insertions, 391 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/messaging/portchannel_test.html b/contexts/data/lib/closure-library/closure/goog/messaging/portchannel_test.html
deleted file mode 100644
index 845a488..0000000
--- a/contexts/data/lib/closure-library/closure/goog/messaging/portchannel_test.html
+++ /dev/null
@@ -1,391 +0,0 @@
-<!DOCTYPE html>
-<html>
-<!--
-Copyright 2010 The Closure Library Authors. All Rights Reserved.
-
-Use of this source code is governed by the Apache License, Version 2.0.
-See the COPYING file for details.
--->
-<!--
--->
-<head>
-<title>
- Closure Unit Tests - goog.messaging.PortChannel
-</title>
-<script src="../base.js"></script>
-<script>
-goog.require('goog.dom');
-goog.require('goog.events.EventTarget');
-goog.require('goog.json');
-goog.require('goog.messaging.PortChannel');
-goog.require('goog.testing.AsyncTestCase');
-goog.require('goog.testing.MockControl');
-goog.require('goog.testing.async.MockControl');
-goog.require('goog.testing.jsunit');
-goog.require('goog.testing.messaging.MockMessageEvent');
-goog.require('goog.userAgent.product');
-</script>
-</head>
-<body>
-<div id="frame"></div>
-<script>
-
-var mockControl;
-var asyncMockControl;
-var mockPort;
-var portChannel;
-
-var workerChannel;
-var asyncTestCase = goog.testing.AsyncTestCase.createAndInstall();
-var timer;
-
-// Use a relatively long timeout because workers can take a while to start up.
-asyncTestCase.stepTimeout = 3 * 1000;
-
-function setUpPage() {
- if (!('Worker' in goog.global)) {
- return;
- }
- workerChannel = new goog.messaging.PortChannel(
- new Worker('testdata/portchannel_worker.js'));
-}
-
-function tearDownPage() {
- goog.dispose(workerChannel);
-}
-
-function setUp() {
- timer = new goog.Timer(50);
- mockControl = new goog.testing.MockControl();
- asyncMockControl = new goog.testing.async.MockControl(mockControl);
- mockPort = new goog.events.EventTarget();
- mockPort.postMessage = mockControl.createFunctionMock('postMessage');
- portChannel = new goog.messaging.PortChannel(mockPort);
-}
-
-function tearDown() {
- goog.dispose(timer);
- portChannel.dispose();
- mockControl.$verifyAll();
-}
-
-function makeMessage(serviceName, payload) {
- var msg = {'serviceName': serviceName, 'payload': payload};
- msg[goog.messaging.PortChannel.FLAG] = true;
- if (goog.messaging.PortChannel.REQUIRES_SERIALIZATION_) {
- msg = goog.json.serialize(msg);
- }
- return msg;
-}
-
-function expectNoMessage() {
- portChannel.registerDefaultService(
- mockControl.createFunctionMock('expectNoMessage'));
-}
-
-function receiveMessage(serviceName, payload, opt_origin, opt_ports) {
- mockPort.dispatchEvent(
- goog.testing.messaging.MockMessageEvent.wrap(
- makeMessage(serviceName, payload),
- opt_origin || 'http://google.com',
- undefined, undefined, opt_ports));
-}
-
-function receiveNonChannelMessage(data) {
- if (goog.messaging.PortChannel.REQUIRES_SERIALIZATION_ &&
- !goog.isString(data)) {
- data = goog.json.serialize(data);
- }
- mockPort.dispatchEvent(
- goog.testing.messaging.MockMessageEvent.wrap(
- data, 'http://google.com'));
-}
-
-function testPostMessage() {
- mockPort.postMessage(makeMessage('foobar', 'This is a value'), []);
- mockControl.$replayAll();
- portChannel.send('foobar', 'This is a value');
-}
-
-function testPostMessageWithPorts() {
- if (!('MessageChannel' in goog.global)) {
- return;
- }
- var channel = new MessageChannel();
- var port1 = channel.port1;
- var port2 = channel.port2;
- mockPort.postMessage(makeMessage('foobar', {'val': [
- {'_port': {'type': 'real', 'index': 0}},
- {'_port': {'type': 'real', 'index': 1}}
- ]}), [port1, port2]);
- mockControl.$replayAll();
- portChannel.send('foobar', {'val': [port1, port2]});
-}
-
-function testReceiveMessage() {
- portChannel.registerService(
- 'foobar', asyncMockControl.asyncAssertEquals(
- 'testReceiveMessage', 'This is a string'));
- mockControl.$replayAll();
- receiveMessage('foobar', 'This is a string');
-}
-
-function testReceiveMessageWithPorts() {
- if (!('MessageChannel' in goog.global)) {
- return;
- }
- var channel = new MessageChannel();
- var port1 = channel.port1;
- var port2 = channel.port2;
- portChannel.registerService(
- 'foobar', asyncMockControl.asyncAssertEquals(
- 'testReceiveMessage', {'val': [port1, port2]}),
- true);
- mockControl.$replayAll();
- receiveMessage('foobar', {'val': [
- {'_port': {'type': 'real', 'index': 0}},
- {'_port': {'type': 'real', 'index': 1}}
- ]}, null, [port1, port2]);
-}
-
-function testReceiveNonChannelMessageWithStringBody() {
- expectNoMessage();
- mockControl.$replayAll();
- receiveNonChannelMessage('Foo bar');
-}
-
-function testReceiveNonChannelMessageWithArrayBody() {
- expectNoMessage();
- mockControl.$replayAll();
- receiveNonChannelMessage([5, 'Foo bar']);
-}
-
-function testReceiveNonChannelMessageWithNoFlag() {
- expectNoMessage();
- mockControl.$replayAll();
- receiveNonChannelMessage({
- serviceName: 'foobar',
- payload: 'this is a payload'
- });
-}
-
-function testReceiveNonChannelMessageWithFalseFlag() {
- expectNoMessage();
- mockControl.$replayAll();
- var body = {
- serviceName: 'foobar',
- payload: 'this is a payload'
- };
- body[goog.messaging.PortChannel.FLAG] = false;
- receiveNonChannelMessage(body);
-}
-
-// Integration tests
-
-function testWorker() {
- if (!('Worker' in goog.global)) {
- return;
- }
- workerChannel.registerService('pong', function(msg) {
- assertObjectEquals({'val': 'fizzbang'}, msg);
- asyncTestCase.continueTesting();
- }, true);
- workerChannel.send('ping', {'val': 'fizzbang'});
- asyncTestCase.waitForAsync('worker response');
-}
-
-function testWorkerWithPorts() {
- if (!('Worker' in goog.global) || !('MessageChannel' in goog.global)) {
- return;
- }
- var messageChannel = new MessageChannel();
- workerChannel.registerService('pong', function(msg) {
- assertPortsEntangled(msg['port'], messageChannel.port2, function() {
- asyncTestCase.continueTesting();
- });
- }, true);
- workerChannel.send('ping', {'port': messageChannel.port1});
- asyncTestCase.waitForAsync('worker response');
-}
-
-function testPort() {
- if (!('Worker' in goog.global) || !('MessageChannel' in goog.global)) {
- return;
- }
- var messageChannel = new MessageChannel();
- workerChannel.send('addPort', messageChannel.port1);
- messageChannel.port2.start();
- var realPortChannel = new goog.messaging.PortChannel(messageChannel.port2);
- realPortChannel.registerService('pong', function(msg) {
- assertObjectEquals({'val': 'fizzbang'}, msg);
-
- messageChannel.port2.close();
- realPortChannel.dispose();
- asyncTestCase.continueTesting();
- }, true);
- realPortChannel.send('ping', {'val': 'fizzbang'});
- asyncTestCase.waitForAsync('port response');
-}
-
-function testPortIgnoresOrigin() {
- if (!('Worker' in goog.global) || !('MessageChannel' in goog.global)) {
- return;
- }
- var messageChannel = new MessageChannel();
- workerChannel.send('addPort', messageChannel.port1);
- messageChannel.port2.start();
- var realPortChannel = new goog.messaging.PortChannel(
- messageChannel.port2, 'http://somewhere-else.com');
- realPortChannel.registerService('pong', function(msg) {
- assertObjectEquals({'val': 'fizzbang'}, msg);
-
- messageChannel.port2.close();
- realPortChannel.dispose();
- asyncTestCase.continueTesting();
- }, true);
- realPortChannel.send('ping', {'val': 'fizzbang'});
- asyncTestCase.waitForAsync('port response');
-}
-
-function testWindow() {
- if (!('Worker' in goog.global) || !('MessageChannel' in goog.global)) {
- return;
- }
-
- // NOTE(nicksantos): This test is having problems in Safari4 on the
- // test farm, but no one can reproduce them locally. Just turn it off.
- if (goog.userAgent.product.SAFARI) {
- return;
- }
-
- withIframe(function() {
- var iframeChannel = goog.messaging.PortChannel.forEmbeddedWindow(
- window.frames['inner'], '*', timer);
- iframeChannel.registerService('pong', function(msg) {
- assertEquals('fizzbang', msg);
-
- goog.dispose(iframeChannel);
- asyncTestCase.continueTesting();
- });
- iframeChannel.send('ping', 'fizzbang');
- asyncTestCase.waitForAsync('window response');
- });
-}
-
-function testWindowCancelled() {
- if (!('Worker' in goog.global) || !('MessageChannel' in goog.global)) {
- return;
- }
- withIframe(function() {
- var iframeChannel = goog.messaging.PortChannel.forEmbeddedWindow(
- window.frames['inner'], '*', timer);
- iframeChannel.cancel();
-
- iframeChannel.registerService('pong', function(msg) {
- fail('no messages should be received due to cancellation');
- goog.dispose(iframeChannel);
- asyncTestCase.continueTesting();
- });
-
- iframeChannel.send('ping', 'fizzbang');
- asyncTestCase.waitForAsync('window response');
-
- // Leave plenty of time for the connection to be made if the test fails, but
- // stop the test before the asyncTestCase timeout is hit.
- setTimeout(goog.bind(asyncTestCase.continueTesting, asyncTestCase),
- asyncTestCase.stepTimeout / 3);
- });
-}
-
-function testWindowWontSendToWrongOrigin() {
- if (!('Worker' in goog.global) || !('MessageChannel' in goog.global)) {
- return;
- }
- withIframe(function() {
- var iframeChannel = goog.messaging.PortChannel.forEmbeddedWindow(
- window.frames['inner'], 'http://somewhere-else.com', timer);
- iframeChannel.registerService('pong', function(msg) {
- fail('Should not receive pong from unexpected origin');
- iframeChannel.dispose();
- asyncTestCase.continueTesting();
- });
- iframeChannel.send('ping', 'fizzbang');
-
- setTimeout(function() {
- iframeChannel.dispose();
- asyncTestCase.continueTesting();
- }, asyncTestCase.stepTimeout - 500);
- asyncTestCase.waitForAsync('window response');
- });
-}
-
-function testWindowWontReceiveFromWrongOrigin() {
- if (!('Worker' in goog.global) || !('MessageChannel' in goog.global)) {
- return;
- }
- withIframe(function() {
- var iframeChannel = goog.messaging.PortChannel.forEmbeddedWindow(
- window.frames['inner'], '*', timer);
- iframeChannel.registerService('pong', function(msg) {
- fail('Should not receive pong from unexpected origin');
- iframeChannel.dispose();
- asyncTestCase.continueTesting();
- });
- iframeChannel.send('ping', 'fizzbang');
-
- setTimeout(function() {
- iframeChannel.dispose();
- asyncTestCase.continueTesting();
- }, asyncTestCase.stepTimeout - 500);
- asyncTestCase.waitForAsync('window response');
- }, 'testdata/portchannel_wrong_origin_inner.html');
-}
-
-/**
- * Assert that two HTML5 MessagePorts are entangled by posting messages from
- * each to the other.
- *
- * @param {!MessagePort} port1
- * @param {!MessagePort} port2
- * @param {function()} callback Called when the assertion is finished.
- */
-function assertPortsEntangled(port1, port2, callback) {
- port1.onmessage = function(e) {
- assertEquals('port 2 should send messages to port 1',
- 'port2 to port1', e.data);
- callback();
- };
-
- port2.onmessage = function(e) {
- assertEquals('port 1 should send messages to port 2',
- 'port1 to port2', e.data);
- port2.postMessage('port2 to port1');
- asyncTestCase.waitForAsync('port 1 receiving message');
- };
-
- port1.postMessage('port1 to port2');
- asyncTestCase.waitForAsync('port 2 receiving message');
-}
-
-function withIframe(callback, opt_url) {
- var frameDiv = goog.dom.$('frame');
- goog.dom.removeChildren(frameDiv);
- goog.dom.appendChild(frameDiv, goog.dom.createDom('iframe', {
- style: 'display: none',
- name: 'inner',
- id: 'inner',
- src: opt_url || 'testdata/portchannel_inner.html'
- }));
-
- asyncTestCase.waitForAsync('creating iframe');
- // We need to pass control back to the event loop to give the iframe a chance
- // to load.
- setTimeout(function() {
- asyncTestCase.continueTesting();
- callback();
- }, 0);
-}
-
-</script>
-</body>
-</html>