PageRenderTime 28ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/js/lib/Socket.IO-node/support/expresso/deps/jscoverage/doc/example-jsunit/jsunit/app/jsUnitCore.js

http://github.com/onedayitwillmake/RealtimeMultiplayerNodeJs
JavaScript | 534 lines | 440 code | 74 blank | 20 comment | 92 complexity | 5c3183453ac60dd8b238dad7e2406703 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1, MPL-2.0-no-copyleft-exception, BSD-3-Clause
  1. var JSUNIT_UNDEFINED_VALUE;
  2. var JSUNIT_VERSION = 2.2;
  3. var isTestPageLoaded = false;
  4. //hack for NS62 bug
  5. function jsUnitFixTop() {
  6. var tempTop = top;
  7. if (!tempTop) {
  8. tempTop = window;
  9. while (tempTop.parent) {
  10. tempTop = tempTop.parent;
  11. if (tempTop.top && tempTop.top.jsUnitTestSuite) {
  12. tempTop = tempTop.top;
  13. break;
  14. }
  15. }
  16. }
  17. try {
  18. window.top = tempTop;
  19. } catch (e) {
  20. }
  21. }
  22. jsUnitFixTop();
  23. /**
  24. + * A more functional typeof
  25. + * @param Object o
  26. + * @return String
  27. + */
  28. function _trueTypeOf(something) {
  29. var result = typeof something;
  30. try {
  31. switch (result) {
  32. case 'string':
  33. case 'boolean':
  34. case 'number':
  35. break;
  36. case 'object':
  37. case 'function':
  38. switch (something.constructor)
  39. {
  40. case String:
  41. result = 'String';
  42. break;
  43. case Boolean:
  44. result = 'Boolean';
  45. break;
  46. case Number:
  47. result = 'Number';
  48. break;
  49. case Array:
  50. result = 'Array';
  51. break;
  52. case RegExp:
  53. result = 'RegExp';
  54. break;
  55. case Function:
  56. result = 'Function';
  57. break;
  58. default:
  59. var m = something.constructor.toString().match(/function\s*([^( ]+)\(/);
  60. if (m)
  61. result = m[1];
  62. else
  63. break;
  64. }
  65. break;
  66. }
  67. }
  68. finally {
  69. result = result.substr(0, 1).toUpperCase() + result.substr(1);
  70. return result;
  71. }
  72. }
  73. function _displayStringForValue(aVar) {
  74. var result = '<' + aVar + '>';
  75. if (!(aVar === null || aVar === top.JSUNIT_UNDEFINED_VALUE)) {
  76. result += ' (' + _trueTypeOf(aVar) + ')';
  77. }
  78. return result;
  79. }
  80. function fail(failureMessage) {
  81. throw new JsUnitException("Call to fail()", failureMessage);
  82. }
  83. function error(errorMessage) {
  84. var errorObject = new Object();
  85. errorObject.description = errorMessage;
  86. errorObject.stackTrace = getStackTrace();
  87. throw errorObject;
  88. }
  89. function argumentsIncludeComments(expectedNumberOfNonCommentArgs, args) {
  90. return args.length == expectedNumberOfNonCommentArgs + 1;
  91. }
  92. function commentArg(expectedNumberOfNonCommentArgs, args) {
  93. if (argumentsIncludeComments(expectedNumberOfNonCommentArgs, args))
  94. return args[0];
  95. return null;
  96. }
  97. function nonCommentArg(desiredNonCommentArgIndex, expectedNumberOfNonCommentArgs, args) {
  98. return argumentsIncludeComments(expectedNumberOfNonCommentArgs, args) ?
  99. args[desiredNonCommentArgIndex] :
  100. args[desiredNonCommentArgIndex - 1];
  101. }
  102. function _validateArguments(expectedNumberOfNonCommentArgs, args) {
  103. if (!( args.length == expectedNumberOfNonCommentArgs ||
  104. (args.length == expectedNumberOfNonCommentArgs + 1 && typeof(args[0]) == 'string') ))
  105. error('Incorrect arguments passed to assert function');
  106. }
  107. function _assert(comment, booleanValue, failureMessage) {
  108. if (!booleanValue)
  109. throw new JsUnitException(comment, failureMessage);
  110. }
  111. function assert() {
  112. _validateArguments(1, arguments);
  113. var booleanValue = nonCommentArg(1, 1, arguments);
  114. if (typeof(booleanValue) != 'boolean')
  115. error('Bad argument to assert(boolean)');
  116. _assert(commentArg(1, arguments), booleanValue === true, 'Call to assert(boolean) with false');
  117. }
  118. function assertTrue() {
  119. _validateArguments(1, arguments);
  120. var booleanValue = nonCommentArg(1, 1, arguments);
  121. if (typeof(booleanValue) != 'boolean')
  122. error('Bad argument to assertTrue(boolean)');
  123. _assert(commentArg(1, arguments), booleanValue === true, 'Call to assertTrue(boolean) with false');
  124. }
  125. function assertFalse() {
  126. _validateArguments(1, arguments);
  127. var booleanValue = nonCommentArg(1, 1, arguments);
  128. if (typeof(booleanValue) != 'boolean')
  129. error('Bad argument to assertFalse(boolean)');
  130. _assert(commentArg(1, arguments), booleanValue === false, 'Call to assertFalse(boolean) with true');
  131. }
  132. function assertEquals() {
  133. _validateArguments(2, arguments);
  134. var var1 = nonCommentArg(1, 2, arguments);
  135. var var2 = nonCommentArg(2, 2, arguments);
  136. _assert(commentArg(2, arguments), var1 === var2, 'Expected ' + _displayStringForValue(var1) + ' but was ' + _displayStringForValue(var2));
  137. }
  138. function assertNotEquals() {
  139. _validateArguments(2, arguments);
  140. var var1 = nonCommentArg(1, 2, arguments);
  141. var var2 = nonCommentArg(2, 2, arguments);
  142. _assert(commentArg(2, arguments), var1 !== var2, 'Expected not to be ' + _displayStringForValue(var2));
  143. }
  144. function assertNull() {
  145. _validateArguments(1, arguments);
  146. var aVar = nonCommentArg(1, 1, arguments);
  147. _assert(commentArg(1, arguments), aVar === null, 'Expected ' + _displayStringForValue(null) + ' but was ' + _displayStringForValue(aVar));
  148. }
  149. function assertNotNull() {
  150. _validateArguments(1, arguments);
  151. var aVar = nonCommentArg(1, 1, arguments);
  152. _assert(commentArg(1, arguments), aVar !== null, 'Expected not to be ' + _displayStringForValue(null));
  153. }
  154. function assertUndefined() {
  155. _validateArguments(1, arguments);
  156. var aVar = nonCommentArg(1, 1, arguments);
  157. _assert(commentArg(1, arguments), aVar === top.JSUNIT_UNDEFINED_VALUE, 'Expected ' + _displayStringForValue(top.JSUNIT_UNDEFINED_VALUE) + ' but was ' + _displayStringForValue(aVar));
  158. }
  159. function assertNotUndefined() {
  160. _validateArguments(1, arguments);
  161. var aVar = nonCommentArg(1, 1, arguments);
  162. _assert(commentArg(1, arguments), aVar !== top.JSUNIT_UNDEFINED_VALUE, 'Expected not to be ' + _displayStringForValue(top.JSUNIT_UNDEFINED_VALUE));
  163. }
  164. function assertNaN() {
  165. _validateArguments(1, arguments);
  166. var aVar = nonCommentArg(1, 1, arguments);
  167. _assert(commentArg(1, arguments), isNaN(aVar), 'Expected NaN');
  168. }
  169. function assertNotNaN() {
  170. _validateArguments(1, arguments);
  171. var aVar = nonCommentArg(1, 1, arguments);
  172. _assert(commentArg(1, arguments), !isNaN(aVar), 'Expected not NaN');
  173. }
  174. function assertObjectEquals() {
  175. _validateArguments(2, arguments);
  176. var var1 = nonCommentArg(1, 2, arguments);
  177. var var2 = nonCommentArg(2, 2, arguments);
  178. var type;
  179. var msg = commentArg(2, arguments)?commentArg(2, arguments):'';
  180. var isSame = (var1 === var2);
  181. //shortpath for references to same object
  182. var isEqual = ( (type = _trueTypeOf(var1)) == _trueTypeOf(var2) );
  183. if (isEqual && !isSame) {
  184. switch (type) {
  185. case 'String':
  186. case 'Number':
  187. isEqual = (var1 == var2);
  188. break;
  189. case 'Boolean':
  190. case 'Date':
  191. isEqual = (var1 === var2);
  192. break;
  193. case 'RegExp':
  194. case 'Function':
  195. isEqual = (var1.toString() === var2.toString());
  196. break;
  197. default: //Object | Array
  198. var i;
  199. if (isEqual = (var1.length === var2.length))
  200. for (i in var1)
  201. assertObjectEquals(msg + ' found nested ' + type + '@' + i + '\n', var1[i], var2[i]);
  202. }
  203. _assert(msg, isEqual, 'Expected ' + _displayStringForValue(var1) + ' but was ' + _displayStringForValue(var2));
  204. }
  205. }
  206. assertArrayEquals = assertObjectEquals;
  207. function assertEvaluatesToTrue() {
  208. _validateArguments(1, arguments);
  209. var value = nonCommentArg(1, 1, arguments);
  210. if (!value)
  211. fail(commentArg(1, arguments));
  212. }
  213. function assertEvaluatesToFalse() {
  214. _validateArguments(1, arguments);
  215. var value = nonCommentArg(1, 1, arguments);
  216. if (value)
  217. fail(commentArg(1, arguments));
  218. }
  219. function assertHTMLEquals() {
  220. _validateArguments(2, arguments);
  221. var var1 = nonCommentArg(1, 2, arguments);
  222. var var2 = nonCommentArg(2, 2, arguments);
  223. var var1Standardized = standardizeHTML(var1);
  224. var var2Standardized = standardizeHTML(var2);
  225. _assert(commentArg(2, arguments), var1Standardized === var2Standardized, 'Expected ' + _displayStringForValue(var1Standardized) + ' but was ' + _displayStringForValue(var2Standardized));
  226. }
  227. function assertHashEquals() {
  228. _validateArguments(2, arguments);
  229. var var1 = nonCommentArg(1, 2, arguments);
  230. var var2 = nonCommentArg(2, 2, arguments);
  231. for (var key in var1) {
  232. assertNotUndefined("Expected hash had key " + key + " that was not found", var2[key]);
  233. assertEquals(
  234. "Value for key " + key + " mismatch - expected = " + var1[key] + ", actual = " + var2[key],
  235. var1[key], var2[key]
  236. );
  237. }
  238. for (var key in var2) {
  239. assertNotUndefined("Actual hash had key " + key + " that was not expected", var1[key]);
  240. }
  241. }
  242. function assertRoughlyEquals() {
  243. _validateArguments(3, arguments);
  244. var expected = nonCommentArg(1, 3, arguments);
  245. var actual = nonCommentArg(2, 3, arguments);
  246. var tolerance = nonCommentArg(3, 3, arguments);
  247. assertTrue(
  248. "Expected " + expected + ", but got " + actual + " which was more than " + tolerance + " away",
  249. Math.abs(expected - actual) < tolerance
  250. );
  251. }
  252. function assertContains() {
  253. _validateArguments(2, arguments);
  254. var contained = nonCommentArg(1, 2, arguments);
  255. var container = nonCommentArg(2, 2, arguments);
  256. assertTrue(
  257. "Expected '" + container + "' to contain '" + contained + "'",
  258. container.indexOf(contained) != -1
  259. );
  260. }
  261. function standardizeHTML(html) {
  262. var translator = document.createElement("DIV");
  263. translator.innerHTML = html;
  264. return translator.innerHTML;
  265. }
  266. function isLoaded() {
  267. return isTestPageLoaded;
  268. }
  269. function setUp() {
  270. }
  271. function tearDown() {
  272. }
  273. function getFunctionName(aFunction) {
  274. var regexpResult = aFunction.toString().match(/function(\s*)(\w*)/);
  275. if (regexpResult && regexpResult.length >= 2 && regexpResult[2]) {
  276. return regexpResult[2];
  277. }
  278. return 'anonymous';
  279. }
  280. function getStackTrace() {
  281. var result = '';
  282. if (typeof(arguments.caller) != 'undefined') { // IE, not ECMA
  283. for (var a = arguments.caller; a != null; a = a.caller) {
  284. result += '> ' + getFunctionName(a.callee) + '\n';
  285. if (a.caller == a) {
  286. result += '*';
  287. break;
  288. }
  289. }
  290. }
  291. else { // Mozilla, not ECMA
  292. // fake an exception so we can get Mozilla's error stack
  293. var testExcp;
  294. try
  295. {
  296. foo.bar;
  297. }
  298. catch(testExcp)
  299. {
  300. var stack = parseErrorStack(testExcp);
  301. for (var i = 1; i < stack.length; i++)
  302. {
  303. result += '> ' + stack[i] + '\n';
  304. }
  305. }
  306. }
  307. return result;
  308. }
  309. function parseErrorStack(excp)
  310. {
  311. var stack = [];
  312. var name;
  313. if (!excp || !excp.stack)
  314. {
  315. return stack;
  316. }
  317. var stacklist = excp.stack.split('\n');
  318. for (var i = 0; i < stacklist.length - 1; i++)
  319. {
  320. var framedata = stacklist[i];
  321. name = framedata.match(/^(\w*)/)[1];
  322. if (!name) {
  323. name = 'anonymous';
  324. }
  325. stack[stack.length] = name;
  326. }
  327. // remove top level anonymous functions to match IE
  328. while (stack.length && stack[stack.length - 1] == 'anonymous')
  329. {
  330. stack.length = stack.length - 1;
  331. }
  332. return stack;
  333. }
  334. function JsUnitException(comment, message) {
  335. this.isJsUnitException = true;
  336. this.comment = comment;
  337. this.jsUnitMessage = message;
  338. this.stackTrace = getStackTrace();
  339. }
  340. function warn() {
  341. if (top.tracer != null)
  342. top.tracer.warn(arguments[0], arguments[1]);
  343. }
  344. function inform() {
  345. if (top.tracer != null)
  346. top.tracer.inform(arguments[0], arguments[1]);
  347. }
  348. function info() {
  349. inform(arguments[0], arguments[1]);
  350. }
  351. function debug() {
  352. if (top.tracer != null)
  353. top.tracer.debug(arguments[0], arguments[1]);
  354. }
  355. function setJsUnitTracer(aJsUnitTracer) {
  356. top.tracer = aJsUnitTracer;
  357. }
  358. function trim(str) {
  359. if (str == null)
  360. return null;
  361. var startingIndex = 0;
  362. var endingIndex = str.length - 1;
  363. while (str.substring(startingIndex, startingIndex + 1) == ' ')
  364. startingIndex++;
  365. while (str.substring(endingIndex, endingIndex + 1) == ' ')
  366. endingIndex--;
  367. if (endingIndex < startingIndex)
  368. return '';
  369. return str.substring(startingIndex, endingIndex + 1);
  370. }
  371. function isBlank(str) {
  372. return trim(str) == '';
  373. }
  374. // the functions push(anArray, anObject) and pop(anArray)
  375. // exist because the JavaScript Array.push(anObject) and Array.pop()
  376. // functions are not available in IE 5.0
  377. function push(anArray, anObject) {
  378. anArray[anArray.length] = anObject;
  379. }
  380. function pop(anArray) {
  381. if (anArray.length >= 1) {
  382. delete anArray[anArray.length - 1];
  383. anArray.length--;
  384. }
  385. }
  386. function jsUnitGetParm(name)
  387. {
  388. if (typeof(top.jsUnitParmHash[name]) != 'undefined')
  389. {
  390. return top.jsUnitParmHash[name];
  391. }
  392. return null;
  393. }
  394. if (top && typeof(top.xbDEBUG) != 'undefined' && top.xbDEBUG.on && top.testManager)
  395. {
  396. top.xbDebugTraceObject('top.testManager.containerTestFrame', 'JSUnitException');
  397. // asserts
  398. top.xbDebugTraceFunction('top.testManager.containerTestFrame', '_displayStringForValue');
  399. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'error');
  400. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'argumentsIncludeComments');
  401. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'commentArg');
  402. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'nonCommentArg');
  403. top.xbDebugTraceFunction('top.testManager.containerTestFrame', '_validateArguments');
  404. top.xbDebugTraceFunction('top.testManager.containerTestFrame', '_assert');
  405. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assert');
  406. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertTrue');
  407. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertEquals');
  408. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNotEquals');
  409. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNull');
  410. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNotNull');
  411. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertUndefined');
  412. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNotUndefined');
  413. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNaN');
  414. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'assertNotNaN');
  415. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'isLoaded');
  416. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'setUp');
  417. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'tearDown');
  418. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'getFunctionName');
  419. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'getStackTrace');
  420. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'warn');
  421. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'inform');
  422. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'debug');
  423. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'setJsUnitTracer');
  424. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'trim');
  425. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'isBlank');
  426. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'newOnLoadEvent');
  427. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'push');
  428. top.xbDebugTraceFunction('top.testManager.containerTestFrame', 'pop');
  429. }
  430. function newOnLoadEvent() {
  431. isTestPageLoaded = true;
  432. }
  433. function jsUnitSetOnLoad(windowRef, onloadHandler)
  434. {
  435. var isKonqueror = navigator.userAgent.indexOf('Konqueror/') != -1 ||
  436. navigator.userAgent.indexOf('Safari/') != -1;
  437. if (typeof(windowRef.attachEvent) != 'undefined') {
  438. // Internet Explorer, Opera
  439. windowRef.attachEvent("onload", onloadHandler);
  440. } else if (typeof(windowRef.addEventListener) != 'undefined' && !isKonqueror) {
  441. // Mozilla, Konqueror
  442. // exclude Konqueror due to load issues
  443. windowRef.addEventListener("load", onloadHandler, false);
  444. } else if (typeof(windowRef.document.addEventListener) != 'undefined' && !isKonqueror) {
  445. // DOM 2 Events
  446. // exclude Mozilla, Konqueror due to load issues
  447. windowRef.document.addEventListener("load", onloadHandler, false);
  448. } else if (typeof(windowRef.onload) != 'undefined' && windowRef.onload) {
  449. windowRef.jsunit_original_onload = windowRef.onload;
  450. windowRef.onload = function() {
  451. windowRef.jsunit_original_onload();
  452. onloadHandler();
  453. };
  454. } else {
  455. // browsers that do not support windowRef.attachEvent or
  456. // windowRef.addEventListener will override a page's own onload event
  457. windowRef.onload = onloadHandler;
  458. }
  459. }
  460. jsUnitSetOnLoad(window, newOnLoadEvent);