selenium-webdriver 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. data/chrome/prebuilt/Win32/Release/npchromedriver.dll +0 -0
  2. data/chrome/prebuilt/x64/Release/npchromedriver.dll +0 -0
  3. data/chrome/src/extension/background.js +1 -0
  4. data/chrome/src/extension/content_script.js +182 -177
  5. data/chrome/src/extension/manifest-nonwin.json +1 -1
  6. data/chrome/src/extension/manifest-win.json +1 -1
  7. data/chrome/src/rb/lib/selenium/webdriver/chrome/bridge.rb +9 -3
  8. data/chrome/src/rb/lib/selenium/webdriver/chrome/launcher.rb +1 -1
  9. data/common/src/js/core/Blank.html +7 -0
  10. data/common/src/js/core/InjectedRemoteRunner.html +8 -0
  11. data/common/src/js/core/RemoteRunner.html +101 -0
  12. data/common/src/js/core/SeleniumLog.html +109 -0
  13. data/common/src/js/core/TestPrompt.html +145 -0
  14. data/common/src/js/core/TestRunner-splash.html +55 -0
  15. data/common/src/js/core/TestRunner.html +177 -0
  16. data/common/src/js/core/icons/all.png +0 -0
  17. data/common/src/js/core/icons/continue.png +0 -0
  18. data/common/src/js/core/icons/continue_disabled.png +0 -0
  19. data/common/src/js/core/icons/pause.png +0 -0
  20. data/common/src/js/core/icons/pause_disabled.png +0 -0
  21. data/common/src/js/core/icons/selected.png +0 -0
  22. data/common/src/js/core/icons/step.png +0 -0
  23. data/common/src/js/core/icons/step_disabled.png +0 -0
  24. data/common/src/js/core/lib/cssQuery/cssQuery-p.js +6 -0
  25. data/common/src/js/core/lib/cssQuery/src/cssQuery-level2.js +142 -0
  26. data/common/src/js/core/lib/cssQuery/src/cssQuery-level3.js +150 -0
  27. data/common/src/js/core/lib/cssQuery/src/cssQuery-standard.js +53 -0
  28. data/common/src/js/core/lib/cssQuery/src/cssQuery.js +356 -0
  29. data/common/src/js/core/lib/prototype.js +2006 -0
  30. data/common/src/js/core/lib/scriptaculous/builder.js +101 -0
  31. data/common/src/js/core/lib/scriptaculous/controls.js +815 -0
  32. data/common/src/js/core/lib/scriptaculous/dragdrop.js +915 -0
  33. data/common/src/js/core/lib/scriptaculous/effects.js +958 -0
  34. data/common/src/js/core/lib/scriptaculous/scriptaculous.js +47 -0
  35. data/common/src/js/core/lib/scriptaculous/slider.js +283 -0
  36. data/common/src/js/core/lib/scriptaculous/unittest.js +383 -0
  37. data/common/src/js/core/lib/snapsie.js +91 -0
  38. data/common/src/js/core/scripts/find_matching_child.js +69 -0
  39. data/common/src/js/core/scripts/htmlutils.js +1623 -0
  40. data/common/src/js/core/scripts/injection.html +72 -0
  41. data/common/src/js/core/scripts/selenium-api.js +3294 -0
  42. data/common/src/js/core/scripts/selenium-browserbot.js +2430 -0
  43. data/common/src/js/core/scripts/selenium-browserdetect.js +153 -0
  44. data/common/src/js/core/scripts/selenium-commandhandlers.js +379 -0
  45. data/common/src/js/core/scripts/selenium-executionloop.js +175 -0
  46. data/common/src/js/core/scripts/selenium-logging.js +148 -0
  47. data/common/src/js/core/scripts/selenium-remoterunner.js +695 -0
  48. data/common/src/js/core/scripts/selenium-testrunner.js +1362 -0
  49. data/common/src/js/core/scripts/selenium-version.js +5 -0
  50. data/common/src/js/core/scripts/ui-doc.html +808 -0
  51. data/common/src/js/core/scripts/ui-element.js +1644 -0
  52. data/common/src/js/core/scripts/ui-map-sample.js +979 -0
  53. data/common/src/js/core/scripts/user-extensions.js +3 -0
  54. data/common/src/js/core/scripts/user-extensions.js.sample +75 -0
  55. data/common/src/js/core/scripts/xmlextras.js +153 -0
  56. data/common/src/js/core/selenium-logo.png +0 -0
  57. data/common/src/js/core/selenium-test.css +43 -0
  58. data/common/src/js/core/selenium.css +316 -0
  59. data/common/src/js/core/xpath/dom.js +566 -0
  60. data/common/src/js/core/xpath/javascript-xpath-0.1.11.js +2816 -0
  61. data/common/src/js/core/xpath/util.js +549 -0
  62. data/common/src/js/core/xpath/xmltoken.js +149 -0
  63. data/common/src/js/core/xpath/xpath.js +2481 -0
  64. data/common/src/js/jsunit/app/css/jsUnitStyle.css +50 -0
  65. data/common/src/js/jsunit/app/css/readme +10 -0
  66. data/common/src/js/jsunit/app/emptyPage.html +11 -0
  67. data/common/src/js/jsunit/app/jsUnitCore.js +534 -0
  68. data/common/src/js/jsunit/app/jsUnitMockTimeout.js +81 -0
  69. data/common/src/js/jsunit/app/jsUnitTestManager.js +705 -0
  70. data/common/src/js/jsunit/app/jsUnitTestSuite.js +44 -0
  71. data/common/src/js/jsunit/app/jsUnitTracer.js +102 -0
  72. data/common/src/js/jsunit/app/jsUnitVersionCheck.js +59 -0
  73. data/common/src/js/jsunit/app/main-counts-errors.html +12 -0
  74. data/common/src/js/jsunit/app/main-counts-failures.html +13 -0
  75. data/common/src/js/jsunit/app/main-counts-runs.html +13 -0
  76. data/common/src/js/jsunit/app/main-counts.html +21 -0
  77. data/common/src/js/jsunit/app/main-data.html +178 -0
  78. data/common/src/js/jsunit/app/main-errors.html +23 -0
  79. data/common/src/js/jsunit/app/main-frame.html +19 -0
  80. data/common/src/js/jsunit/app/main-loader.html +45 -0
  81. data/common/src/js/jsunit/app/main-progress.html +25 -0
  82. data/common/src/js/jsunit/app/main-results.html +67 -0
  83. data/common/src/js/jsunit/app/main-status.html +13 -0
  84. data/common/src/js/jsunit/app/testContainer.html +16 -0
  85. data/common/src/js/jsunit/app/testContainerController.html +77 -0
  86. data/common/src/js/jsunit/app/xbDebug.js +306 -0
  87. data/common/src/js/jsunit/changelog.txt +60 -0
  88. data/common/src/js/jsunit/css/jsUnitStyle.css +83 -0
  89. data/common/src/js/jsunit/images/green.gif +0 -0
  90. data/common/src/js/jsunit/images/logo_jsunit.gif +0 -0
  91. data/common/src/js/jsunit/images/powerby-transparent.gif +0 -0
  92. data/common/src/js/jsunit/images/red.gif +0 -0
  93. data/common/src/js/jsunit/licenses/JDOM_license.txt +56 -0
  94. data/common/src/js/jsunit/licenses/Jetty_license.html +213 -0
  95. data/common/src/js/jsunit/licenses/MPL-1.1.txt +470 -0
  96. data/common/src/js/jsunit/licenses/gpl-2.txt +340 -0
  97. data/common/src/js/jsunit/licenses/index.html +141 -0
  98. data/common/src/js/jsunit/licenses/lgpl-2.1.txt +504 -0
  99. data/common/src/js/jsunit/licenses/mpl-tri-license-c.txt +35 -0
  100. data/common/src/js/jsunit/licenses/mpl-tri-license-html.txt +35 -0
  101. data/common/src/js/jsunit/readme.txt +19 -0
  102. data/common/src/js/jsunit/testRunner.html +167 -0
  103. data/common/src/js/jsunit/version.txt +1 -0
  104. data/common/src/rb/README +29 -0
  105. data/common/src/rb/lib/selenium/webdriver/driver.rb +124 -12
  106. data/common/src/rb/lib/selenium/webdriver/element.rb +119 -3
  107. data/common/src/rb/lib/selenium/webdriver/error.rb +1 -2
  108. data/common/src/rb/lib/selenium/webdriver/find.rb +19 -2
  109. data/common/src/rb/lib/selenium/webdriver/keys.rb +5 -1
  110. data/common/src/rb/lib/selenium/webdriver/navigation.rb +8 -4
  111. data/common/src/rb/lib/selenium/webdriver/platform.rb +4 -2
  112. data/common/src/rb/lib/selenium/webdriver/target_locator.rb +18 -0
  113. data/firefox/prebuilt/Win32/Release/webdriver-firefox.dll +0 -0
  114. data/firefox/prebuilt/linux/Release/libwebdriver-firefox.so +0 -0
  115. data/firefox/prebuilt/linux/Release/x_ignore_nofocus.so +0 -0
  116. data/firefox/prebuilt/linux64/Release/libwebdriver-firefox.so +0 -0
  117. data/firefox/prebuilt/linux64/Release/x_ignore_nofocus.so +0 -0
  118. data/firefox/src/extension/components/utils.js +13 -2
  119. data/firefox/src/extension/install.rdf +1 -1
  120. data/firefox/src/rb/lib/selenium/webdriver/firefox.rb +3 -2
  121. data/firefox/src/rb/lib/selenium/webdriver/firefox/binary.rb +1 -7
  122. data/firefox/src/rb/lib/selenium/webdriver/firefox/bridge.rb +11 -4
  123. data/firefox/src/rb/lib/selenium/webdriver/firefox/profile.rb +56 -15
  124. data/firefox/src/rb/lib/selenium/webdriver/firefox/util.rb +1 -1
  125. data/jobbie/prebuilt/Win32/Release/InternetExplorerDriver.dll +0 -0
  126. data/jobbie/prebuilt/x64/Release/InternetExplorerDriver.dll +0 -0
  127. data/jobbie/src/rb/lib/selenium/webdriver/ie/bridge.rb +10 -5
  128. data/jobbie/src/rb/lib/selenium/webdriver/ie/util.rb +9 -10
  129. data/remote/client/src/rb/lib/selenium/webdriver/remote/bridge.rb +4 -2
  130. data/remote/client/src/rb/lib/selenium/webdriver/remote/capabilities.rb +23 -23
  131. metadata +103 -6
  132. data/jobbie/prebuilt/Win32/Release/webdriver-ie-test.dll +0 -0
  133. data/jobbie/prebuilt/Win32/Release/webdriver-ie.dll +0 -0
  134. data/jobbie/prebuilt/x64/Release/webdriver-ie-test.dll +0 -0
  135. data/jobbie/prebuilt/x64/Release/webdriver-ie.dll +0 -0
@@ -0,0 +1,50 @@
1
+ body {
2
+ margin-top: 0;
3
+ margin-bottom: 0;
4
+ font-family: Verdana, Arial, Helvetica, sans-serif;
5
+ color: #000;
6
+ font-size: 0.8em;
7
+ background-color: #fff;
8
+ }
9
+
10
+ a:link, a:visited {
11
+ color: #00F;
12
+ }
13
+
14
+ a:hover {
15
+ color: #F00;
16
+ }
17
+
18
+ h1 {
19
+ font-size: 1.2em;
20
+ font-weight: bold;
21
+ color: #039;
22
+ font-family: Verdana, Arial, Helvetica, sans-serif;
23
+ }
24
+
25
+ h2 {
26
+ font-weight: bold;
27
+ color: #039;
28
+ font-family: Verdana, Arial, Helvetica, sans-serif;
29
+ }
30
+
31
+ h3 {
32
+ font-weight: bold;
33
+ color: #039;
34
+ text-decoration: underline;
35
+ font-family: Verdana, Arial, Helvetica, sans-serif;
36
+ }
37
+
38
+ h4 {
39
+ font-weight: bold;
40
+ color: #039;
41
+ font-family: Verdana, Arial, Helvetica, sans-serif;
42
+ }
43
+
44
+ .jsUnitTestResultSuccess {
45
+ color: #000;
46
+ }
47
+
48
+ .jsUnitTestResultNotSuccess {
49
+ color: #F00;
50
+ }
@@ -0,0 +1,10 @@
1
+ this file is required due to differences in behavior between Mozilla/Opera
2
+ and Internet Explorer.
3
+
4
+ main-data.html calls kickOffTests() which calls top.testManager.start()
5
+ in the top most frame. top.testManager.start() initializes the output
6
+ frames using document.write and HTML containing a relative <link> to the
7
+ jsUnitStyle.css file. In MSIE, the base href used to find the CSS file is
8
+ that of the top level frame however in Mozilla/Opera the base href is
9
+ that of main-data.html. This leads to not-found for the jsUnitStyle.css
10
+ in Mozilla/Opera. Creating app/css/jsUnitStyle.css works around this problem.
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5
+ <title>emptyPage</title>
6
+ </head>
7
+
8
+ <body>
9
+ </body>
10
+ </html>
11
+
@@ -0,0 +1,534 @@
1
+ var JSUNIT_UNDEFINED_VALUE;
2
+ var JSUNIT_VERSION = 2.2;
3
+ var isTestPageLoaded = false;
4
+
5
+ //hack for NS62 bug
6
+ function jsUnitFixTop() {
7
+ var tempTop = top;
8
+ if (!tempTop) {
9
+ tempTop = window;
10
+ while (tempTop.parent) {
11
+ tempTop = tempTop.parent;
12
+ if (tempTop.top && tempTop.top.jsUnitTestSuite) {
13
+ tempTop = tempTop.top;
14
+ break;
15
+ }
16
+ }
17
+ }
18
+ try {
19
+ window.top = tempTop;
20
+ } catch (e) {
21
+ }
22
+ }
23
+
24
+ jsUnitFixTop();
25
+
26
+ /**
27
+ + * A more functional typeof
28
+ + * @param Object o
29
+ + * @return String
30
+ + */
31
+ function _trueTypeOf(something) {
32
+ var result = typeof something;
33
+ try {
34
+ switch (result) {
35
+ case 'string':
36
+ case 'boolean':
37
+ case 'number':
38
+ break;
39
+ case 'object':
40
+ case 'function':
41
+ switch (something.constructor)
42
+ {
43
+ case String:
44
+ result = 'String';
45
+ break;
46
+ case Boolean:
47
+ result = 'Boolean';
48
+ break;
49
+ case Number:
50
+ result = 'Number';
51
+ break;
52
+ case Array:
53
+ result = 'Array';
54
+ break;
55
+ case RegExp:
56
+ result = 'RegExp';
57
+ break;
58
+ case Function:
59
+ result = 'Function';
60
+ break;
61
+ default:
62
+ var m = something.constructor.toString().match(/function\s*([^( ]+)\(/);
63
+ if (m)
64
+ result = m[1];
65
+ else
66
+ break;
67
+ }
68
+ break;
69
+ }
70
+ }
71
+ finally {
72
+ result = result.substr(0, 1).toUpperCase() + result.substr(1);
73
+ return result;
74
+ }
75
+ }
76
+
77
+ function _displayStringForValue(aVar) {
78
+ var result = '<' + aVar + '>';
79
+ if (!(aVar === null || aVar === top.JSUNIT_UNDEFINED_VALUE)) {
80
+ result += ' (' + _trueTypeOf(aVar) + ')';
81
+ }
82
+ return result;
83
+ }
84
+
85
+ function fail(failureMessage) {
86
+ throw new JsUnitException("Call to fail()", failureMessage);
87
+ }
88
+
89
+ function error(errorMessage) {
90
+ var errorObject = new Object();
91
+ errorObject.description = errorMessage;
92
+ errorObject.stackTrace = getStackTrace();
93
+ throw errorObject;
94
+ }
95
+
96
+ function argumentsIncludeComments(expectedNumberOfNonCommentArgs, args) {
97
+ return args.length == expectedNumberOfNonCommentArgs + 1;
98
+ }
99
+
100
+ function commentArg(expectedNumberOfNonCommentArgs, args) {
101
+ if (argumentsIncludeComments(expectedNumberOfNonCommentArgs, args))
102
+ return args[0];
103
+
104
+ return null;
105
+ }
106
+
107
+ function nonCommentArg(desiredNonCommentArgIndex, expectedNumberOfNonCommentArgs, args) {
108
+ return argumentsIncludeComments(expectedNumberOfNonCommentArgs, args) ?
109
+ args[desiredNonCommentArgIndex] :
110
+ args[desiredNonCommentArgIndex - 1];
111
+ }
112
+
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');
117
+ }
118
+
119
+ function _assert(comment, booleanValue, failureMessage) {
120
+ if (!booleanValue)
121
+ throw new JsUnitException(comment, failureMessage);
122
+ }
123
+
124
+ function assert() {
125
+ _validateArguments(1, arguments);
126
+ var booleanValue = nonCommentArg(1, 1, arguments);
127
+
128
+ if (typeof(booleanValue) != 'boolean')
129
+ error('Bad argument to assert(boolean)');
130
+
131
+ _assert(commentArg(1, arguments), booleanValue === true, 'Call to assert(boolean) with false');
132
+ }
133
+
134
+ function assertTrue() {
135
+ _validateArguments(1, arguments);
136
+ var booleanValue = nonCommentArg(1, 1, arguments);
137
+
138
+ if (typeof(booleanValue) != 'boolean')
139
+ error('Bad argument to assertTrue(boolean)');
140
+
141
+ _assert(commentArg(1, arguments), booleanValue === true, 'Call to assertTrue(boolean) with false');
142
+ }
143
+
144
+ function assertFalse() {
145
+ _validateArguments(1, arguments);
146
+ var booleanValue = nonCommentArg(1, 1, arguments);
147
+
148
+ if (typeof(booleanValue) != 'boolean')
149
+ error('Bad argument to assertFalse(boolean)');
150
+
151
+ _assert(commentArg(1, arguments), booleanValue === false, 'Call to assertFalse(boolean) with true');
152
+ }
153
+
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));
159
+ }
160
+
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));
166
+ }
167
+
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));
172
+ }
173
+
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));
178
+ }
179
+
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));
184
+ }
185
+
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));
190
+ }
191
+
192
+ function assertNaN() {
193
+ _validateArguments(1, arguments);
194
+ var aVar = nonCommentArg(1, 1, arguments);
195
+ _assert(commentArg(1, arguments), isNaN(aVar), 'Expected NaN');
196
+ }
197
+
198
+ function assertNotNaN() {
199
+ _validateArguments(1, arguments);
200
+ var aVar = nonCommentArg(1, 1, arguments);
201
+ _assert(commentArg(1, arguments), !isNaN(aVar), 'Expected not NaN');
202
+ }
203
+
204
+ function assertObjectEquals() {
205
+ _validateArguments(2, arguments);
206
+ var var1 = nonCommentArg(1, 2, arguments);
207
+ var var2 = nonCommentArg(2, 2, arguments);
208
+ var type;
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) {
214
+ switch (type) {
215
+ case 'String':
216
+ case 'Number':
217
+ isEqual = (var1 == var2);
218
+ break;
219
+ case 'Boolean':
220
+ case 'Date':
221
+ isEqual = (var1 === var2);
222
+ break;
223
+ case 'RegExp':
224
+ case 'Function':
225
+ isEqual = (var1.toString() === var2.toString());
226
+ break;
227
+ default: //Object | Array
228
+ var i;
229
+ if (isEqual = (var1.length === var2.length))
230
+ for (i in var1)
231
+ assertObjectEquals(msg + ' found nested ' + type + '@' + i + '\n', var1[i], var2[i]);
232
+ }
233
+ _assert(msg, isEqual, 'Expected ' + _displayStringForValue(var1) + ' but was ' + _displayStringForValue(var2));
234
+ }
235
+ }
236
+
237
+ assertArrayEquals = assertObjectEquals;
238
+
239
+ function assertEvaluatesToTrue() {
240
+ _validateArguments(1, arguments);
241
+ var value = nonCommentArg(1, 1, arguments);
242
+ if (!value)
243
+ fail(commentArg(1, arguments));
244
+ }
245
+
246
+ function assertEvaluatesToFalse() {
247
+ _validateArguments(1, arguments);
248
+ var value = nonCommentArg(1, 1, arguments);
249
+ if (value)
250
+ fail(commentArg(1, arguments));
251
+ }
252
+
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);
259
+
260
+ _assert(commentArg(2, arguments), var1Standardized === var2Standardized, 'Expected ' + _displayStringForValue(var1Standardized) + ' but was ' + _displayStringForValue(var2Standardized));
261
+ }
262
+
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]);
269
+ assertEquals(
270
+ "Value for key " + key + " mismatch - expected = " + var1[key] + ", actual = " + var2[key],
271
+ var1[key], var2[key]
272
+ );
273
+ }
274
+ for (var key in var2) {
275
+ assertNotUndefined("Actual hash had key " + key + " that was not expected", var1[key]);
276
+ }
277
+ }
278
+
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);
284
+ assertTrue(
285
+ "Expected " + expected + ", but got " + actual + " which was more than " + tolerance + " away",
286
+ Math.abs(expected - actual) < tolerance
287
+ );
288
+ }
289
+
290
+ function assertContains() {
291
+ _validateArguments(2, arguments);
292
+ var contained = nonCommentArg(1, 2, arguments);
293
+ var container = nonCommentArg(2, 2, arguments);
294
+ assertTrue(
295
+ "Expected '" + container + "' to contain '" + contained + "'",
296
+ container.indexOf(contained) != -1
297
+ );
298
+ }
299
+
300
+ function standardizeHTML(html) {
301
+ var translator = document.createElement("DIV");
302
+ translator.innerHTML = html;
303
+ return translator.innerHTML;
304
+ }
305
+
306
+ function isLoaded() {
307
+ return isTestPageLoaded;
308
+ }
309
+
310
+ function setUp() {
311
+ }
312
+
313
+ function tearDown() {
314
+ }
315
+
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];
320
+ }
321
+ return 'anonymous';
322
+ }
323
+
324
+ function getStackTrace() {
325
+ var result = '';
326
+
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';
330
+ if (a.caller == a) {
331
+ result += '*';
332
+ break;
333
+ }
334
+ }
335
+ }
336
+ else { // Mozilla, not ECMA
337
+ // fake an exception so we can get Mozilla's error stack
338
+ var testExcp;
339
+ try
340
+ {
341
+ foo.bar;
342
+ }
343
+ catch(testExcp)
344
+ {
345
+ var stack = parseErrorStack(testExcp);
346
+ for (var i = 1; i < stack.length; i++)
347
+ {
348
+ result += '> ' + stack[i] + '\n';
349
+ }
350
+ }
351
+ }
352
+
353
+ return result;
354
+ }
355
+
356
+ function parseErrorStack(excp)
357
+ {
358
+ var stack = [];
359
+ var name;
360
+
361
+ if (!excp || !excp.stack)
362
+ {
363
+ return stack;
364
+ }
365
+
366
+ var stacklist = excp.stack.split('\n');
367
+
368
+ for (var i = 0; i < stacklist.length - 1; i++)
369
+ {
370
+ var framedata = stacklist[i];
371
+
372
+ name = framedata.match(/^(\w*)/)[1];
373
+ if (!name) {
374
+ name = 'anonymous';
375
+ }
376
+
377
+ stack[stack.length] = name;
378
+ }
379
+ // remove top level anonymous functions to match IE
380
+
381
+ while (stack.length && stack[stack.length - 1] == 'anonymous')
382
+ {
383
+ stack.length = stack.length - 1;
384
+ }
385
+ return stack;
386
+ }
387
+
388
+ function JsUnitException(comment, message) {
389
+ this.isJsUnitException = true;
390
+ this.comment = comment;
391
+ this.jsUnitMessage = message;
392
+ this.stackTrace = getStackTrace();
393
+ }
394
+
395
+ function warn() {
396
+ if (top.tracer != null)
397
+ top.tracer.warn(arguments[0], arguments[1]);
398
+ }
399
+
400
+ function inform() {
401
+ if (top.tracer != null)
402
+ top.tracer.inform(arguments[0], arguments[1]);
403
+ }
404
+
405
+ function info() {
406
+ inform(arguments[0], arguments[1]);
407
+ }
408
+
409
+ function debug() {
410
+ if (top.tracer != null)
411
+ top.tracer.debug(arguments[0], arguments[1]);
412
+ }
413
+
414
+ function setJsUnitTracer(aJsUnitTracer) {
415
+ top.tracer = aJsUnitTracer;
416
+ }
417
+
418
+ function trim(str) {
419
+ if (str == null)
420
+ return null;
421
+
422
+ var startingIndex = 0;
423
+ var endingIndex = str.length - 1;
424
+
425
+ while (str.substring(startingIndex, startingIndex + 1) == ' ')
426
+ startingIndex++;
427
+
428
+ while (str.substring(endingIndex, endingIndex + 1) == ' ')
429
+ endingIndex--;
430
+
431
+ if (endingIndex < startingIndex)
432
+ return '';
433
+
434
+ return str.substring(startingIndex, endingIndex + 1);
435
+ }
436
+
437
+ function isBlank(str) {
438
+ return trim(str) == '';
439
+ }
440
+
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
444
+
445
+ function push(anArray, anObject) {
446
+ anArray[anArray.length] = anObject;
447
+ }
448
+ function pop(anArray) {
449
+ if (anArray.length >= 1) {
450
+ delete anArray[anArray.length - 1];
451
+ anArray.length--;
452
+ }
453
+ }
454
+
455
+ function jsUnitGetParm(name)
456
+ {
457
+ if (typeof(top.jsUnitParmHash[name]) != 'undefined')
458
+ {
459
+ return top.jsUnitParmHash[name];
460
+ }
461
+ return null;
462
+ }
463
+
464
+ if (top && typeof(top.xbDEBUG) != 'undefined' && top.xbDEBUG.on && top.testManager)
465
+ {
466
+ top.xbDebugTraceObject('top.testManager.containerTestFrame', 'JSUnitException');
467
+ // asserts
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');
499
+ }
500
+
501
+ function newOnLoadEvent() {
502
+ isTestPageLoaded = true;
503
+ }
504
+
505
+ function jsUnitSetOnLoad(windowRef, onloadHandler)
506
+ {
507
+ var isKonqueror = navigator.userAgent.indexOf('Konqueror/') != -1 ||
508
+ navigator.userAgent.indexOf('Safari/') != -1;
509
+
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) {
518
+ // DOM 2 Events
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();
525
+ onloadHandler();
526
+ };
527
+ } else {
528
+ // browsers that do not support windowRef.attachEvent or
529
+ // windowRef.addEventListener will override a page's own onload event
530
+ windowRef.onload = onloadHandler;
531
+ }
532
+ }
533
+
534
+ jsUnitSetOnLoad(window, newOnLoadEvent);