sku-pg
Version:
Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!
288 lines (244 loc) • 9.46 kB
HTML
<html>
<!--
Copyright 2009 The Closure Library Authors. All Rights Reserved.
Use of this source code is governed by an Apache 2.0 License.
See the COPYING file for details.
-->
<!--
Author: btlee@google.com (Brian Lee)
-->
<head>
<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.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 stubs = new goog.testing.PropertyReplacer();
function setUp() {
stubs.set(goog.net, 'XhrIo', MockXhrIo);
// Ensure that setTimeout always gets cleaned up, since ErrorReporter
// nukes setTimeout.
stubs.set(goog.global, 'setTimeout', window.setTimeout);
}
function tearDown() {
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() {
new goog.debug.ErrorReporter('/log').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;
}
var er = new goog.debug.ErrorReporter('/log');
er.setXhrSender(mockXhrSender);
er.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() {
new goog.debug.ErrorReporter('/log').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();
});
goog.debug.ErrorReporter.install("/errorreporter");
var errorFunction = goog.partial(
throwAnErrorWith, "http://www.my.tst/some/bogus.js", 5, "Hello :)");
try {
goog.global.setTimeout(errorFunction, 0);
} catch (e) {
// Expected. The error is rethrown after sending.
}
assertEquals(
"/errorreporter?script=bogus.js&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);
var errorReporter = goog.debug.ErrorReporter.install("/errorreporter");
goog.global.onerror("Goodbye :(", "http://www.your.tst/more/bogus.js", 22);
assertEquals(
"/errorreporter?script=bogus.js&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);
var 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();
});
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, "http://www.my.tst/some/bogus.js", 5, "Hello :)",
trace);
try {
goog.global.setTimeout(errorFunction, 0);
} catch (e) {
// Expected. The error is rethrown after sending.
}
assertEquals(
"/errorreporter?script=bogus.js&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);
var reporter = goog.debug.ErrorReporter.install("/errorreporter");
var fn = function() {};
var protectedFn = reporter.protectAdditionalEntryPoint(fn);
assertNotNull(protectedFn);
assertNotEquals(fn, protectedFn);
}
function testProtectAdditionalEntryPoint_IE() {
stubs.set(goog.userAgent, 'IE', true);
var reporter = goog.debug.ErrorReporter.install("/errorreporter");
var fn = function() {};
var protectedFn = reporter.protectAdditionalEntryPoint(fn);
assertNull(protectedFn);
}
function testHandleException_dispatchesEvent() {
var reporter = goog.debug.ErrorReporter.install("/errorreporter");
var loggedErrors = 0;
goog.events.listen(reporter, goog.debug.ErrorReporter.ExceptionEvent.TYPE,
function(event) {
assertNotNullNorUndefined(event.error);
loggedErrors++;
});
reporter.handleException(new Error());
reporter.handleException(new Error());
assertEquals('Expected 2 errors. ' +
'(Ensure an exception was not swallowed.)', 2, loggedErrors);
}
function testHandleException_includesContext() {
var reporter = goog.debug.ErrorReporter.install("/errorreporter");
var loggedErrors = 0;
var testError = new Error('test error');
var testContext = { 'contextParam' : 'contextValue' };
goog.events.listen(reporter, goog.debug.ErrorReporter.ExceptionEvent.TYPE,
function(event) {
assertNotNullNorUndefined(event.error);
assertObjectEquals({ contextParam : 'contextValue' }, event.context);
loggedErrors++;
});
reporter.handleException(testError, testContext);
assertEquals('Expected 1 error. ' +
'(Ensure an exception was not swallowed.)', 1, loggedErrors);
}
function testContextProvider() {
var reporter = goog.debug.ErrorReporter.install("/errorreporter",
function(error, context) {
context.providedContext ='value';
});
var loggedErrors = 0;
var testError = new Error('test error');
goog.events.listen(reporter, goog.debug.ErrorReporter.ExceptionEvent.TYPE,
function(event) {
assertNotNullNorUndefined(event.error);
assertObjectEquals({ providedContext : 'value' } , event.context);
loggedErrors++;
});
reporter.handleException(testError);
assertEquals('Expected 1 error. ' +
'(Ensure an exception was not swallowed.)', 1, loggedErrors);
}
function testContextProvider_withOtherContext() {
var reporter = goog.debug.ErrorReporter.install("/errorreporter",
function(error, context) {
context.providedContext = 'value';
});
var loggedErrors = 0;
var testError = new Error('test error');
goog.events.listen(reporter, goog.debug.ErrorReporter.ExceptionEvent.TYPE,
function(event) {
assertNotNullNorUndefined(event.error);
assertObjectEquals(
{ providedContext : 'value', otherContext : 'value' },
event.context);
loggedErrors++;
});
reporter.handleException(testError, { 'otherContext' : 'value' });
assertEquals('Expected 1 error. ' +
'(Ensure an exception was not swallowed.)', 1, loggedErrors);
}
function testHandleException_ignoresExceptionsDuringEventDispatch() {
var reporter = goog.debug.ErrorReporter.install("/errorreporter");
goog.events.listen(reporter, goog.debug.ErrorReporter.ExceptionEvent.TYPE,
function(event) {
fail('This exception should be swallowed.');
});
reporter.handleException(new Error());
}
</script>
</body>
</html>