UNPKG

sku-pg

Version:

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

352 lines (300 loc) 11.8 kB
<!DOCTYPE html> <html> <!-- Copyright 2009 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.debug.ErrorReporter</title> <!-- These paths should be relative to the test --> <script src="../base.js" type="text/javascript"></script> <script type="text/javascript"> goog.require('goog.debug.ErrorReporter'); goog.require('goog.testing.jsunit'); goog.require('goog.testing.PropertyReplacer'); goog.require('goog.userAgent'); </script> </head> <body> <script type="text/javascript"> MockXhrIo = function() {}; MockXhrIo.prototype.onReadyStateChangeEntryPoint_ = function() {}; MockXhrIo.protectEntryPoints = function() {}; MockXhrIo.lastUrl = null; MockXhrIo.send = function(url, opt_callback, opt_method, opt_content, opt_headers, opt_timeInterval) { MockXhrIo.lastUrl = url; MockXhrIo.lastContent = opt_content; MockXhrIo.lastHeaders = opt_headers; }; var errorReporter; var originalSetTimeout = window.setTimeout; var stubs = new goog.testing.PropertyReplacer(); var url = "http://www.your.tst/more/bogus.js"; var encodedUrl = "http%3A%2F%2Fwww.your.tst%2Fmore%2Fbogus.js"; function setUp() { stubs.set(goog.net, 'XhrIo', MockXhrIo); } function tearDown() { goog.dispose(errorReporter); stubs.reset(); MockXhrIo.lastUrl = null; } function throwAnErrorWith(script, line, message, opt_stack) { var error = { message: message, fileName: script, lineNumber: line}; if (opt_stack) { error['stack'] = opt_stack } throw error; } function testsendErrorReport() { errorReporter = new goog.debug.ErrorReporter('/log'); errorReporter.sendErrorReport( 'message', 'filename.js', 123, 'trace'); assertEquals('/log?script=filename.js&error=message&line=123', MockXhrIo.lastUrl); assertEquals('trace=trace', MockXhrIo.lastContent); } function testsendErrorReportWithCustomSender() { var uri = null; var method = null; var content = null; var headers = null; function mockXhrSender(uriIn, methodIn, contentIn, headersIn) { uri = uriIn; method = methodIn; content = contentIn; headers = headersIn; } errorReporter = new goog.debug.ErrorReporter('/log'); errorReporter.setXhrSender(mockXhrSender); errorReporter.sendErrorReport('message', 'filename.js', 123, 'trace'); assertEquals('/log?script=filename.js&error=message&line=123', uri); assertEquals('POST', method); assertEquals('trace=trace', content); assertUndefined(headers); } function testsendErrorReport_noTrace() { errorReporter = new goog.debug.ErrorReporter('/log'); errorReporter.sendErrorReport( 'message', 'filename.js', 123); assertEquals('/log?script=filename.js&error=message&line=123', MockXhrIo.lastUrl); assertEquals('', MockXhrIo.lastContent); } function test_nonInternetExplorerSendErrorReport() { stubs.set(goog.userAgent, 'IE', false); stubs.set(goog.global, 'setTimeout', function(fcn, time) { fcn.call(); }); errorReporter = goog.debug.ErrorReporter.install("/errorreporter"); var errorFunction = goog.partial(throwAnErrorWith, url, 5, "Hello :)"); try { goog.global.setTimeout(errorFunction, 0); } catch (e) { // Expected. The error is rethrown after sending. } assertEquals( "/errorreporter?script=" + encodedUrl + "&error=Hello%20%3A)&line=5", MockXhrIo.lastUrl); assertEquals("trace=Not%20available", MockXhrIo.lastContent); } function test_internetExplorerSendErrorReport() { stubs.set(goog.userAgent, 'IE', true); // Remove test runner's onerror handler so the test doesn't fail. stubs.set(goog.global, 'onerror', null); errorReporter = goog.debug.ErrorReporter.install("/errorreporter"); goog.global.onerror("Goodbye :(", url, 22); assertEquals( "/errorreporter?script=" + encodedUrl + "&error=Goodbye%20%3A(&line=22", MockXhrIo.lastUrl); assertEquals("trace=Not%20available", MockXhrIo.lastContent); } function test_setLoggingHeaders() { stubs.set(goog.userAgent, 'IE', true); // Remove test runner's onerror handler so the test doesn't fail. stubs.set(goog.global, 'onerror', null); errorReporter = goog.debug.ErrorReporter.install("/errorreporter"); errorReporter.setLoggingHeaders("header!"); goog.global.onerror("Goodbye :(", "http://www.your.tst/more/bogus.js", 22); assertEquals("header!", MockXhrIo.lastHeaders); } function test_nonInternetExplorerSendErrorReportWithTrace() { stubs.set(goog.userAgent, 'IE', false); stubs.set(goog.global, 'setTimeout', function(fcn, time) { fcn.call(); }); errorReporter = goog.debug.ErrorReporter.install("/errorreporter"); var trace = "Error(\"Something Wrong\")@:0\n" + "$MF$E$Nx$([object Object])@http://a.b.c:83/a/f.js:901\n" + "([object Object])@http://a.b.c:813/a/f.js:37"; var errorFunction = goog.partial(throwAnErrorWith, url, 5, "Hello :)", trace); try { goog.global.setTimeout(errorFunction, 0); } catch (e) { // Expected. The error is rethrown after sending. } assertEquals( "/errorreporter?script=" + encodedUrl + "&error=Hello%20%3A)&line=5", MockXhrIo.lastUrl); assertEquals("trace=" + "Error(%22Something%20Wrong%22)%40%3A0%0A" + "%24MF%24E%24Nx%24(%5Bobject%20Object%5D)%40"+ "http%3A%2F%2Fa.b.c%3A83%2Fa%2Ff.js%3A901%0A"+ "(%5Bobject%20Object%5D)%40http%3A%2F%2Fa.b.c%3A813%2Fa%2Ff.js%3A37", MockXhrIo.lastContent); } function testProtectAdditionalEntryPoint_nonIE() { stubs.set(goog.userAgent, 'IE', false); errorReporter = goog.debug.ErrorReporter.install("/errorreporter"); var fn = function() {}; var protectedFn = errorReporter.protectAdditionalEntryPoint(fn); assertNotNull(protectedFn); assertNotEquals(fn, protectedFn); } function testProtectAdditionalEntryPoint_IE() { stubs.set(goog.userAgent, 'IE', true); errorReporter = goog.debug.ErrorReporter.install("/errorreporter"); var fn = function() {}; var protectedFn = errorReporter.protectAdditionalEntryPoint(fn); assertNull(protectedFn); } function testHandleException_dispatchesEvent() { errorReporter = goog.debug.ErrorReporter.install("/errorreporter"); var loggedErrors = 0; goog.events.listen(errorReporter, goog.debug.ErrorReporter.ExceptionEvent.TYPE, function(event) { assertNotNullNorUndefined(event.error); loggedErrors++; }); errorReporter.handleException(new Error()); errorReporter.handleException(new Error()); assertEquals('Expected 2 errors. ' + '(Ensure an exception was not swallowed.)', 2, loggedErrors); } function testHandleException_includesContext() { errorReporter = goog.debug.ErrorReporter.install("/errorreporter"); var loggedErrors = 0; var testError = new Error('test error'); var testContext = { 'contextParam' : 'contextValue' }; goog.events.listen(errorReporter, goog.debug.ErrorReporter.ExceptionEvent.TYPE, function(event) { assertNotNullNorUndefined(event.error); assertObjectEquals({ contextParam : 'contextValue' }, event.context); loggedErrors++; }); errorReporter.handleException(testError, testContext); assertEquals('Expected 1 error. ' + '(Ensure an exception was not swallowed.)', 1, loggedErrors); } function testContextProvider() { errorReporter = goog.debug.ErrorReporter.install("/errorreporter", function(error, context) { context.providedContext ='value'; }); var loggedErrors = 0; var testError = new Error('test error'); goog.events.listen(errorReporter, goog.debug.ErrorReporter.ExceptionEvent.TYPE, function(event) { assertNotNullNorUndefined(event.error); assertObjectEquals({ providedContext : 'value' } , event.context); loggedErrors++; }); errorReporter.handleException(testError); assertEquals('Expected 1 error. ' + '(Ensure an exception was not swallowed.)', 1, loggedErrors); } function testContextProvider_withOtherContext() { errorReporter = goog.debug.ErrorReporter.install("/errorreporter", function(error, context) { context.providedContext = 'value'; }); var loggedErrors = 0; var testError = new Error('test error'); goog.events.listen(errorReporter, goog.debug.ErrorReporter.ExceptionEvent.TYPE, function(event) { assertNotNullNorUndefined(event.error); assertObjectEquals( { providedContext : 'value', otherContext : 'value' }, event.context); loggedErrors++; }); errorReporter.handleException(testError, { 'otherContext' : 'value' }); assertEquals('Expected 1 error. ' + '(Ensure an exception was not swallowed.)', 1, loggedErrors); } function testHandleException_ignoresExceptionsDuringEventDispatch() { errorReporter = goog.debug.ErrorReporter.install("/errorreporter"); goog.events.listen(errorReporter, goog.debug.ErrorReporter.ExceptionEvent.TYPE, function(event) { fail('This exception should be swallowed.'); }); errorReporter.handleException(new Error()); } function testDisposal() { errorReporter = goog.debug.ErrorReporter.install("/errorreporter"); if (!goog.userAgent.IE) { assertNotEquals(originalSetTimeout, window.setTimeout); } goog.dispose(errorReporter); assertEquals(originalSetTimeout, window.setTimeout); } function testSetContextPrefix() { errorReporter = new goog.debug.ErrorReporter('/log'); errorReporter.setContextPrefix('baz.'); errorReporter.sendErrorReport( 'message', 'filename.js', 123, 'trace', {"foo": "bar"}); assertEquals('trace=trace&baz.foo=bar', MockXhrIo.lastContent); } function testTruncationLimit() { errorReporter = new goog.debug.ErrorReporter('/log'); errorReporter.setTruncationLimit(6); errorReporter.sendErrorReport( 'message', 'filename.js', 123, 'trace', {"foo": "bar"}); assertEquals('trace=', MockXhrIo.lastContent); } function testZeroTruncationLimit() { errorReporter = new goog.debug.ErrorReporter('/log'); errorReporter.setTruncationLimit(0); errorReporter.sendErrorReport( 'message', 'filename.js', 123, 'trace', {"foo": "bar"}); assertEquals('', MockXhrIo.lastContent); } function testTruncationLimitLargerThanBody() { errorReporter = new goog.debug.ErrorReporter('/log'); errorReporter.setTruncationLimit(9999); errorReporter.sendErrorReport( 'message', 'filename.js', 123, 'trace', {"foo": "bar"}); assertEquals('trace=trace&context.foo=bar', MockXhrIo.lastContent); } function testSetNegativeTruncationLimit() { errorReporter = new goog.debug.ErrorReporter('/log'); assertThrows(function() { errorReporter.setTruncationLimit(-10); }); } function testSetTruncationLimitNull() { errorReporter = new goog.debug.ErrorReporter('/log'); errorReporter.setTruncationLimit(null); errorReporter.sendErrorReport( 'message', 'filename.js', 123, 'trace', {"foo": "bar"}); assertEquals('trace=trace&context.foo=bar', MockXhrIo.lastContent); } </script> </body> </html>