UNPKG

sku-pg

Version:

Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!

385 lines (336 loc) 12.9 kB
<!DOCTYPE html> <html> <!-- Copyright 2008 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> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Closure Unit Tests - goog.testing.net.XhrIo</title> <script src="../../base.js"></script> <script> goog.require('goog.dom.xml'); goog.require('goog.events'); goog.require('goog.events.Event'); goog.require('goog.net.EventType'); goog.require('goog.testing.asserts'); goog.require('goog.testing.jsunit'); goog.require('goog.testing.net.XhrIo'); goog.require('goog.testing.mockmatchers.InstanceOf'); goog.require('goog.testing.MockControl'); </script> </head> <body> <script> var mockControl; function setUp() { mockControl = new goog.testing.MockControl(); } function testStaticSend() { sendInstances = goog.testing.net.XhrIo.getSendInstances(); goog.testing.net.XhrIo.send('url'); assertEquals('sendInstances_ after send', 1, sendInstances.length); xhr = sendInstances[sendInstances.length - 1]; assertTrue('isActive after request', xhr.isActive()); assertEquals('readyState after request', goog.net.XmlHttp.ReadyState.LOADING, xhr.getReadyState()); xhr.simulateResponse(200, ''); assertFalse('isActive after response', xhr.isActive()); assertEquals('readyState after response', goog.net.XmlHttp.ReadyState.COMPLETE, xhr.getReadyState()); xhr.simulateReady(); assertEquals('sendInstances_ after READY', 0, sendInstances.length); } function testStaticSendWithException() { goog.testing.net.XhrIo.send('url', function() { if (!this.isSuccess()) { throw Error('The xhr did not complete successfully!'); } }); var sendInstances = goog.testing.net.XhrIo.getSendInstances(); var xhr = sendInstances[sendInstances.length - 1]; try { xhr.simulateResponse(400, ''); } catch(e) { // Do nothing with the exception; we just want to make sure // the class cleans itself up properly when an exception is // thrown. } assertEquals('Send instance array not cleaned up properly!', 0, sendInstances.length); } function testMultipleSend() { var xhr = new goog.testing.net.XhrIo(); assertFalse('isActive before first request', xhr.isActive()); assertEquals('readyState before first request', goog.net.XmlHttp.ReadyState.UNINITIALIZED, xhr.getReadyState()); xhr.send('url'); assertTrue('isActive after first request', xhr.isActive()); assertEquals('readyState after first request', goog.net.XmlHttp.ReadyState.LOADING, xhr.getReadyState()); xhr.simulateResponse(200, ''); assertFalse('isActive after first response', xhr.isActive()); assertEquals('readyState after first response', goog.net.XmlHttp.ReadyState.COMPLETE, xhr.getReadyState()); xhr.send('url'); assertTrue('isActive after second request', xhr.isActive()); assertEquals('readyState after second request', goog.net.XmlHttp.ReadyState.LOADING, xhr.getReadyState()); } function testGetLastUri() { var xhr = new goog.testing.net.XhrIo(); assertEquals('nothing sent yet, empty URI', '', xhr.getLastUri()); var requestUrl = 'http://www.example.com/'; xhr.send(requestUrl); assertEquals('message sent, URI saved', requestUrl, xhr.getLastUri()); } function testGetLastMethod() { var xhr = new goog.testing.net.XhrIo(); assertUndefined('nothing sent yet, empty method', xhr.getLastMethod()); var method = 'POKE'; xhr.send('http://www.example.com/', method); assertEquals('message sent, method saved', method, xhr.getLastMethod()); xhr.simulateResponse(200, ''); xhr.send('http://www.example.com/'); assertEquals('message sent, method saved', 'GET', xhr.getLastMethod()); } function testGetLastContent() { var xhr = new goog.testing.net.XhrIo(); assertUndefined('nothing sent yet, empty content', xhr.getLastContent()); var postContent = 'var=value&var2=value2'; xhr.send('http://www.example.com/', undefined, postContent); assertEquals('POST message sent, content saved', postContent, xhr.getLastContent()); xhr.simulateResponse(200, ''); xhr.send('http://www.example.com/'); assertUndefined('GET message sent, content cleaned', xhr.getLastContent()); } function testGetLastRequestHeaders() { var xhr = new goog.testing.net.XhrIo(); assertUndefined('nothing sent yet, empty headers', xhr.getLastRequestHeaders()); xhr.send('http://www.example.com/', undefined, undefined, {'From': 'page@google.com'}); assertObjectEquals('Request sent with extra headers, headers saved', {'From': 'page@google.com'}, xhr.getLastRequestHeaders()); xhr.simulateResponse(200, ''); xhr.send('http://www.example.com'); assertUndefined('New request sent without extra headers', xhr.getLastRequestHeaders()); } function testGetResponseText() { // Text response came. var called = false; var xhr = new goog.testing.net.XhrIo(); goog.events.listen(xhr, goog.net.EventType.SUCCESS, function(e) { called = true; assertEquals('text', e.target.getResponseText()); }); xhr.simulateResponse(200, 'text'); assertTrue(called); // XML response came. var called = false; var xhr = new goog.testing.net.XhrIo(); var xml = goog.dom.xml.createDocument(); xml.appendChild(xml.createElement('root')); goog.events.listen(xhr, goog.net.EventType.SUCCESS, function(e) { called = true; var text = e.target.getResponseText(); assertTrue(/<root ?\/>/.test(text)); }); xhr.simulateResponse(200, xml); assertTrue(called); } function testGetResponseJson() { // Valid JSON response came. var called = false; var xhr = new goog.testing.net.XhrIo(); goog.events.listen(xhr, goog.net.EventType.SUCCESS, function(e) { called = true; assertArrayEquals([0, 1], e.target.getResponseJson()); }); xhr.simulateResponse(200, '[0, 1]'); assertTrue(called); // Valid JSON response with XSSI prefix encoded came. var called = false; var xhr = new goog.testing.net.XhrIo(); goog.events.listen(xhr, goog.net.EventType.SUCCESS, function(e) { called = true; assertArrayEquals([0, 1], e.target.getResponseJson(')]}\', \n')); }); xhr.simulateResponse(200, ')]}\', \n[0, 1]'); assertTrue(called); // Invalid JSON response came. var called = false; var xhr = new goog.testing.net.XhrIo(); goog.events.listen(xhr, goog.net.EventType.SUCCESS, function(e) { called = true; assertThrows(e.target.getResponseJson); }); xhr.simulateResponse(200, '[0, 1'); assertTrue(called); // XML response came. var called = false; var xhr = new goog.testing.net.XhrIo(); var xml = goog.dom.xml.createDocument(); xml.appendChild(xml.createElement('root')); goog.events.listen(xhr, goog.net.EventType.SUCCESS, function(e) { called = true; assertThrows(e.target.getResponseJson); }); xhr.simulateResponse(200, xml); assertTrue(called); } function testGetResponseXml() { // Text response came. var called = false; var xhr = new goog.testing.net.XhrIo(); goog.events.listen(xhr, goog.net.EventType.SUCCESS, function(e) { called = true; assertNull(e.target.getResponseXml()); }); xhr.simulateResponse(200, 'text'); assertTrue(called); // XML response came. var called = false; var xhr = new goog.testing.net.XhrIo(); var xml = goog.dom.xml.createDocument(); xml.appendChild(xml.createElement('root')); goog.events.listen(xhr, goog.net.EventType.SUCCESS, function(e) { called = true; assertEquals(xml, e.target.getResponseXml()); }); xhr.simulateResponse(200, xml); assertTrue(called); } function testGetResponseHeaders_noHeadersPresent() { var xhr = new goog.testing.net.XhrIo(); var mockListener = mockControl.createFunctionMock(); mockListener(new goog.testing.mockmatchers.InstanceOf(goog.events.Event)) .$does(function(e) { assertTrue(e.type == goog.net.EventType.SUCCESS); assertUndefined(e.target.getResponseHeader('XHR')); }); mockControl.$replayAll(); goog.events.listen(xhr, goog.net.EventType.SUCCESS, mockListener); xhr.simulateResponse(200, ''); mockControl.$verifyAll(); mockControl.$resetAll(); } function testGetResponseHeaders_headersPresent() { var xhr = new goog.testing.net.XhrIo(); var mockListener = mockControl.createFunctionMock(); mockListener(new goog.testing.mockmatchers.InstanceOf(goog.events.Event)) .$does(function(e) { assertTrue(e.type == goog.net.EventType.SUCCESS); assertUndefined(e.target.getResponseHeader('XHR')); assertEquals(e.target.getResponseHeader('Pragma'), 'no-cache'); }); mockControl.$replayAll(); goog.events.listen(xhr, goog.net.EventType.SUCCESS, mockListener); xhr.simulateResponse(200, '', {'Pragma': 'no-cache'}); mockControl.$verifyAll(); mockControl.$resetAll(); } function testAbort_WhenNoPendingSentRequests() { var xhr = new goog.testing.net.XhrIo(); var eventListener = mockControl.createFunctionMock(); mockControl.$replayAll(); goog.events.listen(xhr, goog.net.EventType.COMPLETE, eventListener); goog.events.listen(xhr, goog.net.EventType.SUCCESS, eventListener); goog.events.listen(xhr, goog.net.EventType.ABORT, eventListener); goog.events.listen(xhr, goog.net.EventType.ERROR, eventListener); goog.events.listen(xhr, goog.net.EventType.READY, eventListener); xhr.abort(); mockControl.$verifyAll(); mockControl.$resetAll(); } function testAbort_PendingSentRequest() { var xhr = new goog.testing.net.XhrIo(); var mockListener = mockControl.createFunctionMock(); mockListener(new goog.testing.mockmatchers.InstanceOf(goog.events.Event)) .$does(function(e) { assertTrue(e.type == goog.net.EventType.COMPLETE); assertObjectEquals(e.target, xhr); assertEquals(e.target.getLastErrorCode(), goog.net.ErrorCode.ABORT); assertTrue(e.target.isActive()); }); mockListener(new goog.testing.mockmatchers.InstanceOf(goog.events.Event)) .$does(function(e) { assertTrue(e.type == goog.net.EventType.ABORT); assertObjectEquals(e.target, xhr); assertTrue(e.target.isActive()); }); mockListener(new goog.testing.mockmatchers.InstanceOf(goog.events.Event)) .$does(function(e) { assertTrue(e.type == goog.net.EventType.READY); assertObjectEquals(e.target, xhr); assertFalse(e.target.isActive()); }); mockControl.$replayAll(); goog.events.listen(xhr, goog.net.EventType.COMPLETE, mockListener); goog.events.listen(xhr, goog.net.EventType.SUCCESS, mockListener); goog.events.listen(xhr, goog.net.EventType.ABORT, mockListener); goog.events.listen(xhr, goog.net.EventType.ERROR, mockListener); goog.events.listen(xhr, goog.net.EventType.READY, mockListener); xhr.send('dummyurl'); xhr.abort(); mockControl.$verifyAll(); mockControl.$resetAll(); } function testEvents_Success() { var xhr = new goog.testing.net.XhrIo(); var mockListener = mockControl.createFunctionMock(); var readyState = goog.net.XmlHttp.ReadyState.UNINITIALIZED; function readyStateListener(e) { assertEquals(e.type, goog.net.EventType.READY_STATE_CHANGE); assertObjectEquals(e.target, xhr); readyState++; assertEquals(e.target.getReadyState(), readyState); assertTrue(e.target.isActive()); } mockListener(new goog.testing.mockmatchers.InstanceOf(goog.events.Event)) .$does(function(e) { assertEquals(e.type, goog.net.EventType.COMPLETE); assertObjectEquals(e.target, xhr); assertEquals(e.target.getLastErrorCode(), goog.net.ErrorCode.NO_ERROR); assertTrue(e.target.isActive()); }); mockListener(new goog.testing.mockmatchers.InstanceOf(goog.events.Event)) .$does(function(e) { assertEquals(e.type, goog.net.EventType.SUCCESS); assertObjectEquals(e.target, xhr); assertTrue(e.target.isActive()); }); mockListener(new goog.testing.mockmatchers.InstanceOf(goog.events.Event)) .$does(function(e) { assertEquals(e.type, goog.net.EventType.READY); assertObjectEquals(e.target, xhr); assertFalse(e.target.isActive()); }); mockControl.$replayAll(); goog.events.listen(xhr, goog.net.EventType.READY_STATE_CHANGE, readyStateListener); goog.events.listen(xhr, goog.net.EventType.COMPLETE, mockListener); goog.events.listen(xhr, goog.net.EventType.SUCCESS, mockListener); goog.events.listen(xhr, goog.net.EventType.ABORT, mockListener); goog.events.listen(xhr, goog.net.EventType.ERROR, mockListener); goog.events.listen(xhr, goog.net.EventType.READY, mockListener); xhr.send('dummyurl'); xhr.simulateResponse(200, null); mockControl.$verifyAll(); mockControl.$resetAll(); } </script> </body> </html>