1
var JSUNIT_UNDEFINED_VALUE;
2
var JSUNIT_VERSION = 2.2;
3
var isTestPageLoaded = false;
6
function jsUnitFixTop() {
10
while (tempTop.parent) {
11
tempTop = tempTop.parent;
12
if (tempTop.top && tempTop.top.jsUnitTestSuite) {
13
tempTop = tempTop.top;
27
+ * A more functional typeof
31
function _trueTypeOf(something) {
32
var result = typeof something;
41
switch (something.constructor)
62
var m = something.constructor.toString().match(/function\s*([^( ]+)\(/);
72
result = result.substr(0, 1).toUpperCase() + result.substr(1);
77
function _displayStringForValue(aVar) {
78
var result = '<' + aVar + '>';
79
if (!(aVar === null || aVar === top.JSUNIT_UNDEFINED_VALUE)) {
80
result += ' (' + _trueTypeOf(aVar) + ')';
85
function fail(failureMessage) {
86
throw new JsUnitException("Call to fail()", failureMessage);
89
function error(errorMessage) {
90
var errorObject = new Object();
91
errorObject.description = errorMessage;
92
errorObject.stackTrace = getStackTrace();
96
function argumentsIncludeComments(expectedNumberOfNonCommentArgs, args) {
97
return args.length == expectedNumberOfNonCommentArgs + 1;
100
function commentArg(expectedNumberOfNonCommentArgs, args) {
101
if (argumentsIncludeComments(expectedNumberOfNonCommentArgs, args))
107
function nonCommentArg(desiredNonCommentArgIndex, expectedNumberOfNonCommentArgs, args) {
108
return argumentsIncludeComments(expectedNumberOfNonCommentArgs, args) ?
109
args[desiredNonCommentArgIndex] :
110
args[desiredNonCommentArgIndex - 1];
113
function _validateArguments(expectedNumberOfNonCommentArgs, args) {
114
if (!( args.length == expectedNumberOfNonCommentArgs ||
115
(args.length == expectedNumberOfNonCommentArgs + 1 && typeof(args[0]) == 'string') ))
116
error('Incorrect arguments passed to assert function');
119
function _assert(comment, booleanValue, failureMessage) {
121
throw new JsUnitException(comment, failureMessage);
125
_validateArguments(1, arguments);
126
var booleanValue = nonCommentArg(1, 1, arguments);
128
if (typeof(booleanValue) != 'boolean')
129
error('Bad argument to assert(boolean)');
131
_assert(commentArg(1, arguments), booleanValue === true, 'Call to assert(boolean) with false');
134
function assertTrue() {
135
_validateArguments(1, arguments);
136
var booleanValue = nonCommentArg(1, 1, arguments);
138
if (typeof(booleanValue) != 'boolean')
139
error('Bad argument to assertTrue(boolean)');
141
_assert(commentArg(1, arguments), booleanValue === true, 'Call to assertTrue(boolean) with false');
144
function assertFalse() {
145
_validateArguments(1, arguments);
146
var booleanValue = nonCommentArg(1, 1, arguments);
148
if (typeof(booleanValue) != 'boolean')
149
error('Bad argument to assertFalse(boolean)');
151
_assert(commentArg(1, arguments), booleanValue === false, 'Call to assertFalse(boolean) with true');
154
function assertEquals() {
155
_validateArguments(2, arguments);
156
var var1 = nonCommentArg(1, 2, arguments);
157
var var2 = nonCommentArg(2, 2, arguments);
158
_assert(commentArg(2, arguments), var1 === var2, 'Expected ' + _displayStringForValue(var1) + ' but was ' + _displayStringForValue(var2));
161
function assertNotEquals() {
162
_validateArguments(2, arguments);
163
var var1 = nonCommentArg(1, 2, arguments);
164
var var2 = nonCommentArg(2, 2, arguments);
165
_assert(commentArg(2, arguments), var1 !== var2, 'Expected not to be ' + _displayStringForValue(var2));
168
function assertNull() {
169
_validateArguments(1, arguments);
170
var aVar = nonCommentArg(1, 1, arguments);
171
_assert(commentArg(1, arguments), aVar === null, 'Expected ' + _displayStringForValue(null) + ' but was ' + _displayStringForValue(aVar));
174
function assertNotNull() {
175
_validateArguments(1, arguments);
176
var aVar = nonCommentArg(1, 1, arguments);
177
_assert(commentArg(1, arguments), aVar !== null, 'Expected not to be ' + _displayStringForValue(null));
180
function assertUndefined() {
181
_validateArguments(1, arguments);
182
var aVar = nonCommentArg(1, 1, arguments);
183
_assert(commentArg(1, arguments), aVar === top.JSUNIT_UNDEFINED_VALUE, 'Expected ' + _displayStringForValue(top.JSUNIT_UNDEFINED_VALUE) + ' but was ' + _displayStringForValue(aVar));
186
function assertNotUndefined() {
187
_validateArguments(1, arguments);
188
var aVar = nonCommentArg(1, 1, arguments);
189
_assert(commentArg(1, arguments), aVar !== top.JSUNIT_UNDEFINED_VALUE, 'Expected not to be ' + _displayStringForValue(top.JSUNIT_UNDEFINED_VALUE));
192
function assertNaN() {
193
_validateArguments(1, arguments);
194
var aVar = nonCommentArg(1, 1, arguments);
195
_assert(commentArg(1, arguments), isNaN(aVar), 'Expected NaN');
198
function assertNotNaN() {
199
_validateArguments(1, arguments);
200
var aVar = nonCommentArg(1, 1, arguments);
201
_assert(commentArg(1, arguments), !isNaN(aVar), 'Expected not NaN');
204
function assertObjectEquals() {
205
_validateArguments(2, arguments);
206
var var1 = nonCommentArg(1, 2, arguments);
207
var var2 = nonCommentArg(2, 2, arguments);
209
var msg = commentArg(2, arguments)?commentArg(2, arguments):'';
210
var isSame = (var1 === var2);
211
//shortpath for references to same object
212
var isEqual = ( (type = _trueTypeOf(var1)) == _trueTypeOf(var2) );
213
if (isEqual && !isSame) {
217
isEqual = (var1 == var2);
221
isEqual = (var1 === var2);
225
isEqual = (var1.toString() === var2.toString());
227
default: //Object | Array
229
if (isEqual = (var1.length === var2.length))
231
assertObjectEquals(msg + ' found nested ' + type + '@' + i + '\n', var1[i], var2[i]);
233
_assert(msg, isEqual, 'Expected ' + _displayStringForValue(var1) + ' but was ' + _displayStringForValue(var2));
237
assertArrayEquals = assertObjectEquals;
239
function assertEvaluatesToTrue() {
240
_validateArguments(1, arguments);
241
var value = nonCommentArg(1, 1, arguments);
243
fail(commentArg(1, arguments));
246
function assertEvaluatesToFalse() {
247
_validateArguments(1, arguments);
248
var value = nonCommentArg(1, 1, arguments);
250
fail(commentArg(1, arguments));
253
function assertHTMLEquals() {
254
_validateArguments(2, arguments);
255
var var1 = nonCommentArg(1, 2, arguments);
256
var var2 = nonCommentArg(2, 2, arguments);
257
var var1Standardized = standardizeHTML(var1);
258
var var2Standardized = standardizeHTML(var2);
260
_assert(commentArg(2, arguments), var1Standardized === var2Standardized, 'Expected ' + _displayStringForValue(var1Standardized) + ' but was ' + _displayStringForValue(var2Standardized));
263
function assertHashEquals() {
264
_validateArguments(2, arguments);
265
var var1 = nonCommentArg(1, 2, arguments);
266
var var2 = nonCommentArg(2, 2, arguments);
267
for (var key in var1) {
268
assertNotUndefined("Expected hash had key " + key + " that was not found", var2[key]);
270
"Value for key " + key + " mismatch - expected = " + var1[key] + ", actual = " + var2[key],
274
for (var key in var2) {
275
assertNotUndefined("Actual hash had key " + key + " that was not expected", var1[key]);
279
function assertRoughlyEquals() {
280
_validateArguments(3, arguments);
281
var expected = nonCommentArg(1, 3, arguments);
282
var actual = nonCommentArg(2, 3, arguments);
283
var tolerance = nonCommentArg(3, 3, arguments);
285
"Expected " + expected + ", but got " + actual + " which was more than " + tolerance + " away",
286
Math.abs(expected - actual) < tolerance
290
function assertContains() {
291
_validateArguments(2, arguments);
292
var contained = nonCommentArg(1, 2, arguments);
293
var container = nonCommentArg(2, 2, arguments);
295
"Expected '" + container + "' to contain '" + contained + "'",
296
container.indexOf(contained) != -1
300
function standardizeHTML(html) {
301
var translator = document.createElement("DIV");
302
translator.innerHTML = html;
303
return translator.innerHTML;
306
function isLoaded() {
307
return isTestPageLoaded;
313
function tearDown() {
316
function getFunctionName(aFunction) {
317
var regexpResult = aFunction.toString().match(/function(\s*)(\w*)/);
318
if (regexpResult && regexpResult.length >= 2 && regexpResult[2]) {
319
return regexpResult[2];
324
function getStackTrace() {
327
if (typeof(arguments.caller) != 'undefined') { // IE, not ECMA
328
for (var a = arguments.caller; a != null; a = a.caller) {
329
result += '> ' + getFunctionName(a.callee) + '\n';
336
else { // Mozilla, not ECMA
337
// fake an exception so we can get Mozilla's error stack
345
var stack = parseErrorStack(testExcp);
346
for (var i = 1; i < stack.length; i++)
348
result += '> ' + stack[i] + '\n';
356
function parseErrorStack(excp)
361
if (!excp || !excp.stack)
366
var stacklist = excp.stack.split('\n');
368
for (var i = 0; i < stacklist.length - 1; i++)
370
var framedata = stacklist[i];
372
name = framedata.match(/^(\w*)/)[1];
377
stack[stack.length] = name;
379
// remove top level anonymous functions to match IE
381
while (stack.length && stack[stack.length - 1] == 'anonymous')
383
stack.length = stack.length - 1;
388
function JsUnitException(comment, message) {
389
this.isJsUnitException = true;
390
this.comment = comment;
391
this.jsUnitMessage = message;
392
this.stackTrace = getStackTrace();
396
if (top.tracer != null)
397
top.tracer.warn(arguments[0], arguments[1]);
401
if (top.tracer != null)
402
top.tracer.inform(arguments[0], arguments[1]);
406
inform(arguments[0], arguments[1]);
410
if (top.tracer != null)
411
top.tracer.debug(arguments[0], arguments[1]);
414
function setJsUnitTracer(aJsUnitTracer) {
415
top.tracer = aJsUnitTracer;
422
var startingIndex = 0;
423
var endingIndex = str.length - 1;
425
while (str.substring(startingIndex, startingIndex + 1) == ' ')
428
while (str.substring(endingIndex, endingIndex + 1) == ' ')
431
if (endingIndex < startingIndex)
434
return str.substring(startingIndex, endingIndex + 1);
437
function isBlank(str) {
438
return trim(str) == '';
441
// the functions push(anArray, anObject) and pop(anArray)
442
// exist because the JavaScript Array.push(anObject) and Array.pop()
443
// functions are not available in IE 5.0
445
function push(anArray, anObject) {
446
anArray[anArray.length] = anObject;
448
function pop(anArray) {
449
if (anArray.length >= 1) {
450
delete anArray[anArray.length - 1];
455
function jsUnitGetParm(name)
457
if (typeof(top.jsUnitParmHash[name]) != 'undefined')
459
return top.jsUnitParmHash[name];
464
if (top && typeof(top.xbDEBUG) != 'undefined' && top.xbDEBUG.on && top.testManager)
466
top.xbDebugTraceObject('top.testManager.containerTestFrame', 'JSUnitException');
468
top.xbDebugTraceFunction('top.testManager.containerTestFrame', '_displayStringForValue');
469
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'error');
470
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'argumentsIncludeComments');
471
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'commentArg');
472
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'nonCommentArg');
473
top.xbDebugTraceFunction('top.testManager.containerTestFrame', '_validateArguments');
474
top.xbDebugTraceFunction('top.testManager.containerTestFrame', '_assert');
475
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assert');
476
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertTrue');
477
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertEquals');
478
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNotEquals');
479
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNull');
480
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNotNull');
481
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertUndefined');
482
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNotUndefined');
483
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNaN');
484
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNotNaN');
485
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'isLoaded');
486
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'setUp');
487
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'tearDown');
488
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'getFunctionName');
489
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'getStackTrace');
490
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'warn');
491
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'inform');
492
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'debug');
493
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'setJsUnitTracer');
494
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'trim');
495
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'isBlank');
496
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'newOnLoadEvent');
497
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'push');
498
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'pop');
501
function newOnLoadEvent() {
502
isTestPageLoaded = true;
505
function jsUnitSetOnLoad(windowRef, onloadHandler)
507
var isKonqueror = navigator.userAgent.indexOf('Konqueror/') != -1 ||
508
navigator.userAgent.indexOf('Safari/') != -1;
510
if (typeof(windowRef.attachEvent) != 'undefined') {
511
// Internet Explorer, Opera
512
windowRef.attachEvent("onload", onloadHandler);
513
} else if (typeof(windowRef.addEventListener) != 'undefined' && !isKonqueror) {
514
// Mozilla, Konqueror
515
// exclude Konqueror due to load issues
516
windowRef.addEventListener("load", onloadHandler, false);
517
} else if (typeof(windowRef.document.addEventListener) != 'undefined' && !isKonqueror) {
519
// exclude Mozilla, Konqueror due to load issues
520
windowRef.document.addEventListener("load", onloadHandler, false);
521
} else if (typeof(windowRef.onload) != 'undefined' && windowRef.onload) {
522
windowRef.jsunit_original_onload = windowRef.onload;
523
windowRef.onload = function() {
524
windowRef.jsunit_original_onload();
528
// browsers that do not support windowRef.attachEvent or
529
// windowRef.addEventListener will override a page's own onload event
530
windowRef.onload = onloadHandler;
1
var JSUNIT_UNDEFINED_VALUE;
2
var JSUNIT_VERSION = 2.2;
3
var isTestPageLoaded = false;
6
function jsUnitFixTop() {
10
while (tempTop.parent) {
11
tempTop = tempTop.parent;
12
if (tempTop.top && tempTop.top.jsUnitTestSuite) {
13
tempTop = tempTop.top;
27
+ * A more functional typeof
31
function _trueTypeOf(something) {
32
var result = typeof something;
41
switch (something.constructor)
62
var m = something.constructor.toString().match(/function\s*([^( ]+)\(/);
72
result = result.substr(0, 1).toUpperCase() + result.substr(1);
77
function _displayStringForValue(aVar) {
78
var result = '<' + aVar + '>';
79
if (!(aVar === null || aVar === top.JSUNIT_UNDEFINED_VALUE)) {
80
result += ' (' + _trueTypeOf(aVar) + ')';
85
function fail(failureMessage) {
86
throw new JsUnitException("Call to fail()", failureMessage);
89
function error(errorMessage) {
90
var errorObject = new Object();
91
errorObject.description = errorMessage;
92
errorObject.stackTrace = getStackTrace();
96
function argumentsIncludeComments(expectedNumberOfNonCommentArgs, args) {
97
return args.length == expectedNumberOfNonCommentArgs + 1;
100
function commentArg(expectedNumberOfNonCommentArgs, args) {
101
if (argumentsIncludeComments(expectedNumberOfNonCommentArgs, args))
107
function nonCommentArg(desiredNonCommentArgIndex, expectedNumberOfNonCommentArgs, args) {
108
return argumentsIncludeComments(expectedNumberOfNonCommentArgs, args) ?
109
args[desiredNonCommentArgIndex] :
110
args[desiredNonCommentArgIndex - 1];
113
function _validateArguments(expectedNumberOfNonCommentArgs, args) {
114
if (!( args.length == expectedNumberOfNonCommentArgs ||
115
(args.length == expectedNumberOfNonCommentArgs + 1 && typeof(args[0]) == 'string') ))
116
error('Incorrect arguments passed to assert function');
119
function _assert(comment, booleanValue, failureMessage) {
121
throw new JsUnitException(comment, failureMessage);
125
_validateArguments(1, arguments);
126
var booleanValue = nonCommentArg(1, 1, arguments);
128
if (typeof(booleanValue) != 'boolean')
129
error('Bad argument to assert(boolean)');
131
_assert(commentArg(1, arguments), booleanValue === true, 'Call to assert(boolean) with false');
134
function assertTrue() {
135
_validateArguments(1, arguments);
136
var booleanValue = nonCommentArg(1, 1, arguments);
138
if (typeof(booleanValue) != 'boolean')
139
error('Bad argument to assertTrue(boolean)');
141
_assert(commentArg(1, arguments), booleanValue === true, 'Call to assertTrue(boolean) with false');
144
function assertFalse() {
145
_validateArguments(1, arguments);
146
var booleanValue = nonCommentArg(1, 1, arguments);
148
if (typeof(booleanValue) != 'boolean')
149
error('Bad argument to assertFalse(boolean)');
151
_assert(commentArg(1, arguments), booleanValue === false, 'Call to assertFalse(boolean) with true');
154
function assertEquals() {
155
_validateArguments(2, arguments);
156
var var1 = nonCommentArg(1, 2, arguments);
157
var var2 = nonCommentArg(2, 2, arguments);
158
_assert(commentArg(2, arguments), var1 === var2, 'Expected ' + _displayStringForValue(var1) + ' but was ' + _displayStringForValue(var2));
161
function assertNotEquals() {
162
_validateArguments(2, arguments);
163
var var1 = nonCommentArg(1, 2, arguments);
164
var var2 = nonCommentArg(2, 2, arguments);
165
_assert(commentArg(2, arguments), var1 !== var2, 'Expected not to be ' + _displayStringForValue(var2));
168
function assertNull() {
169
_validateArguments(1, arguments);
170
var aVar = nonCommentArg(1, 1, arguments);
171
_assert(commentArg(1, arguments), aVar === null, 'Expected ' + _displayStringForValue(null) + ' but was ' + _displayStringForValue(aVar));
174
function assertNotNull() {
175
_validateArguments(1, arguments);
176
var aVar = nonCommentArg(1, 1, arguments);
177
_assert(commentArg(1, arguments), aVar !== null, 'Expected not to be ' + _displayStringForValue(null));
180
function assertUndefined() {
181
_validateArguments(1, arguments);
182
var aVar = nonCommentArg(1, 1, arguments);
183
_assert(commentArg(1, arguments), aVar === top.JSUNIT_UNDEFINED_VALUE, 'Expected ' + _displayStringForValue(top.JSUNIT_UNDEFINED_VALUE) + ' but was ' + _displayStringForValue(aVar));
186
function assertNotUndefined() {
187
_validateArguments(1, arguments);
188
var aVar = nonCommentArg(1, 1, arguments);
189
_assert(commentArg(1, arguments), aVar !== top.JSUNIT_UNDEFINED_VALUE, 'Expected not to be ' + _displayStringForValue(top.JSUNIT_UNDEFINED_VALUE));
192
function assertNaN() {
193
_validateArguments(1, arguments);
194
var aVar = nonCommentArg(1, 1, arguments);
195
_assert(commentArg(1, arguments), isNaN(aVar), 'Expected NaN');
198
function assertNotNaN() {
199
_validateArguments(1, arguments);
200
var aVar = nonCommentArg(1, 1, arguments);
201
_assert(commentArg(1, arguments), !isNaN(aVar), 'Expected not NaN');
204
function assertObjectEquals() {
205
_validateArguments(2, arguments);
206
var var1 = nonCommentArg(1, 2, arguments);
207
var var2 = nonCommentArg(2, 2, arguments);
209
var msg = commentArg(2, arguments)?commentArg(2, arguments):'';
210
var isSame = (var1 === var2);
211
//shortpath for references to same object
212
var isEqual = ( (type = _trueTypeOf(var1)) == _trueTypeOf(var2) );
213
if (isEqual && !isSame) {
217
isEqual = (var1 == var2);
221
isEqual = (var1 === var2);
225
isEqual = (var1.toString() === var2.toString());
227
default: //Object | Array
229
if (isEqual = (var1.length === var2.length))
231
assertObjectEquals(msg + ' found nested ' + type + '@' + i + '\n', var1[i], var2[i]);
233
_assert(msg, isEqual, 'Expected ' + _displayStringForValue(var1) + ' but was ' + _displayStringForValue(var2));
237
assertArrayEquals = assertObjectEquals;
239
function assertEvaluatesToTrue() {
240
_validateArguments(1, arguments);
241
var value = nonCommentArg(1, 1, arguments);
243
fail(commentArg(1, arguments));
246
function assertEvaluatesToFalse() {
247
_validateArguments(1, arguments);
248
var value = nonCommentArg(1, 1, arguments);
250
fail(commentArg(1, arguments));
253
function assertHTMLEquals() {
254
_validateArguments(2, arguments);
255
var var1 = nonCommentArg(1, 2, arguments);
256
var var2 = nonCommentArg(2, 2, arguments);
257
var var1Standardized = standardizeHTML(var1);
258
var var2Standardized = standardizeHTML(var2);
260
_assert(commentArg(2, arguments), var1Standardized === var2Standardized, 'Expected ' + _displayStringForValue(var1Standardized) + ' but was ' + _displayStringForValue(var2Standardized));
263
function assertHashEquals() {
264
_validateArguments(2, arguments);
265
var var1 = nonCommentArg(1, 2, arguments);
266
var var2 = nonCommentArg(2, 2, arguments);
267
for (var key in var1) {
268
assertNotUndefined("Expected hash had key " + key + " that was not found", var2[key]);
270
"Value for key " + key + " mismatch - expected = " + var1[key] + ", actual = " + var2[key],
274
for (var key in var2) {
275
assertNotUndefined("Actual hash had key " + key + " that was not expected", var1[key]);
279
function assertRoughlyEquals() {
280
_validateArguments(3, arguments);
281
var expected = nonCommentArg(1, 3, arguments);
282
var actual = nonCommentArg(2, 3, arguments);
283
var tolerance = nonCommentArg(3, 3, arguments);
285
"Expected " + expected + ", but got " + actual + " which was more than " + tolerance + " away",
286
Math.abs(expected - actual) < tolerance
290
function assertContains() {
291
_validateArguments(2, arguments);
292
var contained = nonCommentArg(1, 2, arguments);
293
var container = nonCommentArg(2, 2, arguments);
295
"Expected '" + container + "' to contain '" + contained + "'",
296
container.indexOf(contained) != -1
300
function standardizeHTML(html) {
301
var translator = document.createElement("DIV");
302
translator.innerHTML = html;
303
return translator.innerHTML;
306
function isLoaded() {
307
return isTestPageLoaded;
313
function tearDown() {
316
function getFunctionName(aFunction) {
317
var regexpResult = aFunction.toString().match(/function(\s*)(\w*)/);
318
if (regexpResult && regexpResult.length >= 2 && regexpResult[2]) {
319
return regexpResult[2];
324
function getStackTrace() {
327
if (typeof(arguments.caller) != 'undefined') { // IE, not ECMA
328
for (var a = arguments.caller; a != null; a = a.caller) {
329
result += '> ' + getFunctionName(a.callee) + '\n';
336
else { // Mozilla, not ECMA
337
// fake an exception so we can get Mozilla's error stack
345
var stack = parseErrorStack(testExcp);
346
for (var i = 1; i < stack.length; i++)
348
result += '> ' + stack[i] + '\n';
356
function parseErrorStack(excp)
361
if (!excp || !excp.stack)
366
var stacklist = excp.stack.split('\n');
368
for (var i = 0; i < stacklist.length - 1; i++)
370
var framedata = stacklist[i];
372
name = framedata.match(/^(\w*)/)[1];
377
stack[stack.length] = name;
379
// remove top level anonymous functions to match IE
381
while (stack.length && stack[stack.length - 1] == 'anonymous')
383
stack.length = stack.length - 1;
388
function JsUnitException(comment, message) {
389
this.isJsUnitException = true;
390
this.comment = comment;
391
this.jsUnitMessage = message;
392
this.stackTrace = getStackTrace();
396
if (top.tracer != null)
397
top.tracer.warn(arguments[0], arguments[1]);
401
if (top.tracer != null)
402
top.tracer.inform(arguments[0], arguments[1]);
406
inform(arguments[0], arguments[1]);
410
if (top.tracer != null)
411
top.tracer.debug(arguments[0], arguments[1]);
414
function setJsUnitTracer(aJsUnitTracer) {
415
top.tracer = aJsUnitTracer;
422
var startingIndex = 0;
423
var endingIndex = str.length - 1;
425
while (str.substring(startingIndex, startingIndex + 1) == ' ')
428
while (str.substring(endingIndex, endingIndex + 1) == ' ')
431
if (endingIndex < startingIndex)
434
return str.substring(startingIndex, endingIndex + 1);
437
function isBlank(str) {
438
return trim(str) == '';
441
// the functions push(anArray, anObject) and pop(anArray)
442
// exist because the JavaScript Array.push(anObject) and Array.pop()
443
// functions are not available in IE 5.0
445
function push(anArray, anObject) {
446
anArray[anArray.length] = anObject;
448
function pop(anArray) {
449
if (anArray.length >= 1) {
450
delete anArray[anArray.length - 1];
455
function jsUnitGetParm(name)
457
if (typeof(top.jsUnitParmHash[name]) != 'undefined')
459
return top.jsUnitParmHash[name];
464
if (top && typeof(top.xbDEBUG) != 'undefined' && top.xbDEBUG.on && top.testManager)
466
top.xbDebugTraceObject('top.testManager.containerTestFrame', 'JSUnitException');
468
top.xbDebugTraceFunction('top.testManager.containerTestFrame', '_displayStringForValue');
469
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'error');
470
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'argumentsIncludeComments');
471
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'commentArg');
472
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'nonCommentArg');
473
top.xbDebugTraceFunction('top.testManager.containerTestFrame', '_validateArguments');
474
top.xbDebugTraceFunction('top.testManager.containerTestFrame', '_assert');
475
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assert');
476
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertTrue');
477
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertEquals');
478
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNotEquals');
479
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNull');
480
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNotNull');
481
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertUndefined');
482
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNotUndefined');
483
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNaN');
484
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNotNaN');
485
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'isLoaded');
486
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'setUp');
487
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'tearDown');
488
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'getFunctionName');
489
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'getStackTrace');
490
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'warn');
491
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'inform');
492
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'debug');
493
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'setJsUnitTracer');
494
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'trim');
495
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'isBlank');
496
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'newOnLoadEvent');
497
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'push');
498
top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'pop');
501
function newOnLoadEvent() {
502
isTestPageLoaded = true;
505
function jsUnitSetOnLoad(windowRef, onloadHandler)
507
var isKonqueror = navigator.userAgent.indexOf('Konqueror/') != -1 ||
508
navigator.userAgent.indexOf('Safari/') != -1;
510
if (typeof(windowRef.attachEvent) != 'undefined') {
511
// Internet Explorer, Opera
512
windowRef.attachEvent("onload", onloadHandler);
513
} else if (typeof(windowRef.addEventListener) != 'undefined' && !isKonqueror) {
514
// Mozilla, Konqueror
515
// exclude Konqueror due to load issues
516
windowRef.addEventListener("load", onloadHandler, false);
517
} else if (typeof(windowRef.document.addEventListener) != 'undefined' && !isKonqueror) {
519
// exclude Mozilla, Konqueror due to load issues
520
windowRef.document.addEventListener("load", onloadHandler, false);
521
} else if (typeof(windowRef.onload) != 'undefined' && windowRef.onload) {
522
windowRef.jsunit_original_onload = windowRef.onload;
523
windowRef.onload = function() {
524
windowRef.jsunit_original_onload();
528
// browsers that do not support windowRef.attachEvent or
529
// windowRef.addEventListener will override a page's own onload event
530
windowRef.onload = onloadHandler;
534
534
jsUnitSetOnLoad(window, newOnLoadEvent);
b'\\ No newline at end of file'