rubinium 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +7 -0
- data/MIT-LICENSE +21 -0
- data/README +137 -0
- data/Rakefile +139 -0
- data/TODO +7 -0
- data/doc/examples/rtc_site_live.rb +12 -0
- data/doc/examples/rts_main.rb +9 -0
- data/doc/examples/rts_shared_code.rb +25 -0
- data/lib/rubinium.rb +9 -0
- data/lib/rubinium/string.rb +3 -0
- data/lib/rubinium/test_base.rb +80 -0
- data/lib/rubinium/test_suite.rb +53 -0
- data/lib/rubinium/validator.rb +16 -0
- data/test/selenium_tests/test_click.rb +22 -0
- data/test/selenium_tests/test_open.rb +11 -0
- data/test/tc_file_creation.rb +60 -0
- data/test/ts_rubinium.rb +1 -0
- data/vendor/selenium-0.6.0/install-readme.txt +9 -0
- data/vendor/selenium-0.6.0/selenium/SeleneseRunner.html +253 -0
- data/vendor/selenium-0.6.0/selenium/SeleniumLog.html +61 -0
- data/vendor/selenium-0.6.0/selenium/TestRunner-splash.html +55 -0
- data/vendor/selenium-0.6.0/selenium/TestRunner.hta +146 -0
- data/vendor/selenium-0.6.0/selenium/TestRunner.html +146 -0
- data/vendor/selenium-0.6.0/selenium/devtests/TestClickInFrame.html +58 -0
- data/vendor/selenium-0.6.0/selenium/devtests/TestOpenInFrame.html +48 -0
- data/vendor/selenium-0.6.0/selenium/devtests/TestOpenInNewWindow.html +78 -0
- data/vendor/selenium-0.6.0/selenium/devtests/TestOpenMeta.html +43 -0
- data/vendor/selenium-0.6.0/selenium/devtests/TestSuite.html +39 -0
- data/vendor/selenium-0.6.0/selenium/devtests/meta/page.html +5 -0
- data/vendor/selenium-0.6.0/selenium/dom-images/butmin.gif +0 -0
- data/vendor/selenium-0.6.0/selenium/dom-images/butplus.gif +0 -0
- data/vendor/selenium-0.6.0/selenium/dom-styles/default.css +298 -0
- data/vendor/selenium-0.6.0/selenium/domviewer.html +16 -0
- data/vendor/selenium-0.6.0/selenium/html-xpath/carnation.jpg +0 -0
- data/vendor/selenium-0.6.0/selenium/html-xpath/example.html +75 -0
- data/vendor/selenium-0.6.0/selenium/html-xpath/html-xpath-patched.js +657 -0
- data/vendor/selenium-0.6.0/selenium/html-xpath/html-xpath.js +610 -0
- data/vendor/selenium-0.6.0/selenium/html-xpath/license.txt +504 -0
- data/vendor/selenium-0.6.0/selenium/html-xpath/rainbow.jpg +0 -0
- data/vendor/selenium-0.6.0/selenium/htmlutils.js +283 -0
- data/vendor/selenium-0.6.0/selenium/index.html +60 -0
- data/vendor/selenium-0.6.0/selenium/jsmock/mock-tests.html +205 -0
- data/vendor/selenium-0.6.0/selenium/jsmock/mock.js +124 -0
- data/vendor/selenium-0.6.0/selenium/selenium-api.js +683 -0
- data/vendor/selenium-0.6.0/selenium/selenium-browserbot.js +930 -0
- data/vendor/selenium-0.6.0/selenium/selenium-commandhandlers.js +286 -0
- data/vendor/selenium-0.6.0/selenium/selenium-domviewer.js +188 -0
- data/vendor/selenium-0.6.0/selenium/selenium-executionloop.js +250 -0
- data/vendor/selenium-0.6.0/selenium/selenium-fitrunner.js +597 -0
- data/vendor/selenium-0.6.0/selenium/selenium-logging.js +88 -0
- data/vendor/selenium-0.6.0/selenium/selenium-logo.png +0 -0
- data/vendor/selenium-0.6.0/selenium/selenium-tableparser.js +50 -0
- data/vendor/selenium-0.6.0/selenium/selenium.css +211 -0
- data/vendor/selenium-0.6.0/selenium/tests/ErrorCheckingTestSuite.html +36 -0
- data/vendor/selenium-0.6.0/selenium/tests/GoogleTestSearch.html +69 -0
- data/vendor/selenium-0.6.0/selenium/tests/GoogleTestSuite.html +32 -0
- data/vendor/selenium-0.6.0/selenium/tests/JsUnitSuite.html +38 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestClick.html +128 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestClickJavascriptHref.html +115 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestCommandError.html +79 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestConfirmations.html +77 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestErrorChecking.html +71 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestFailingAssert.html +59 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestFailingVerifications.html +198 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestFocusOnBlur.html +53 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestGoBack.html +81 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestImplicitLocators.html +81 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestJavascriptParameters.html +91 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestLocators.html +161 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestModalDialog.html +58 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestModalDialogDialog.html +48 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestOpen.html +66 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestPatternMatching.html +127 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestPause.html +78 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestPrompting.html +82 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestProxy.html +62 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestSelect.html +111 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestSelectWindow.html +106 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestStore.html +165 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestSuite-InternetExplorer.html +79 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestSuite-Konqueror.html +75 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestSuite-Safari.html +75 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestSuite.html +75 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestType.html +79 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestUserExtensions.html +81 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestVerifications.html +164 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestVerifyAlerts.html +80 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestVerifyAlertsFailures.html +108 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestVerifyConfirmationFailures.html +86 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestVerifyEditable.html +70 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestVerifyEditableFailures.html +95 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestVisibility.html +91 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestVisibilityFailures.html +131 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestWait.html +112 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestWaitFor.html +63 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestWaitInPopupWindow.html +94 -0
- data/vendor/selenium-0.6.0/selenium/tests/TestXPathLocators.html +98 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/alert-handling-tests.html +79 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/assert-tests.html +113 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/browserbot-tests.html +123 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/command-factory-tests.html +290 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/command-handler-tests.html +115 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/confirm-handling-tests.html +97 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/error-checking-command-tests.html +198 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/event-bubble-tests.html +106 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/optionlocator-tests.html +180 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-accessor-tests.html +65 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-action-tests.html +200 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-attribute-tests.html +98 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-locator-tests-include.html +33 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-locator-tests.html +258 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/pagebot-property-tests.html +49 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/pattern-matcher-tests.html +66 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/selenium-api-tests.html +412 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/selenium-parameter-tests.html +98 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/suite.html +52 -0
- data/vendor/selenium-0.6.0/selenium/tests/browserbot/testloop-handle-error-tests.html +74 -0
- data/vendor/selenium-0.6.0/selenium/tests/events/TestButtonEvents.html +72 -0
- data/vendor/selenium-0.6.0/selenium/tests/events/TestCheckboxEvents.html +107 -0
- data/vendor/selenium-0.6.0/selenium/tests/events/TestFireEvents.html +75 -0
- data/vendor/selenium-0.6.0/selenium/tests/events/TestLinkEvents.html +43 -0
- data/vendor/selenium-0.6.0/selenium/tests/events/TestRadioEvents.html +149 -0
- data/vendor/selenium-0.6.0/selenium/tests/events/TestSelectEvents.html +122 -0
- data/vendor/selenium-0.6.0/selenium/tests/events/TestTextEvents.html +87 -0
- data/vendor/selenium-0.6.0/selenium/tests/events/readme.txt +26 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/banner.gif +0 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_async_event.html +36 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_click_javascript_page.html +34 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_click_page1.html +31 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_click_page2.html +30 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_confirm.html +34 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_dummy_page.html +26 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_editable.html +36 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_focus_on_blur.html +33 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_form_events.html +98 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_framed_page.html +7 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_just_text.html +22 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_locators.html +34 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_modal_dialog.html +29 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_modal_dialog_dialog.html +35 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_open.html +23 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_prompt.html +34 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_reload_onchange_page.html +32 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_select.html +35 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_select_window.html +29 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_select_window_popup.html +28 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_slowloading_page.html +27 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_store_value.html +23 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_type_page1.html +37 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_type_page2.html +61 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_verifications.html +42 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_verify_alert.html +46 -0
- data/vendor/selenium-0.6.0/selenium/tests/html/test_visibility.html +53 -0
- data/vendor/selenium-0.6.0/selenium/tests/readme.txt +1 -0
- data/vendor/selenium-0.6.0/selenium/tests/tableparser/tableparser-tests.html +122 -0
- data/vendor/selenium-0.6.0/selenium/tests/tinyWebServer.py +70 -0
- data/vendor/selenium-0.6.0/selenium/user-extensions.js.sample +62 -0
- data/vendor/selenium-0.6.0/selenium/version.txt +1 -0
- data/vendor/selenium-0.6.0/selenium/xmlextras.js +153 -0
- data/vendor/selenium-0.6.0/selenium/xpath.js +3910 -0
- metadata +216 -0
|
Binary file
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2004 ThoughtWorks, Inc
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
// This script contains some HTML utility functions that
|
|
19
|
+
// make it possible to handle elements in a way that is
|
|
20
|
+
// compatible with both IE-like and Mozilla-like browsers
|
|
21
|
+
|
|
22
|
+
String.prototype.trim = function() {
|
|
23
|
+
var result = this.replace( /^\s+/g, "" );// strip leading
|
|
24
|
+
return result.replace( /\s+$/g, "" );// strip trailing
|
|
25
|
+
};
|
|
26
|
+
String.prototype.lcfirst = function() {
|
|
27
|
+
return this.charAt(0).toLowerCase() + this.substr(1);
|
|
28
|
+
};
|
|
29
|
+
String.prototype.ucfirst = function() {
|
|
30
|
+
return this.charAt(0).toUpperCase() + this.substr(1);
|
|
31
|
+
};
|
|
32
|
+
String.prototype.startsWith = function(str) {
|
|
33
|
+
return this.indexOf(str) == 0;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// Returns the text in this element
|
|
37
|
+
function getText(element) {
|
|
38
|
+
text = "";
|
|
39
|
+
|
|
40
|
+
if(element.textContent) {
|
|
41
|
+
text = element.textContent;
|
|
42
|
+
} else if(element.innerText) {
|
|
43
|
+
text = element.innerText;
|
|
44
|
+
}
|
|
45
|
+
// Replace with a space
|
|
46
|
+
// TODO - should this be in the match() code instead?
|
|
47
|
+
text = text.replace(/\240/g, " ");
|
|
48
|
+
return text.trim();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Sets the text in this element
|
|
52
|
+
function setText(element, text) {
|
|
53
|
+
if(element.textContent) {
|
|
54
|
+
element.textContent = text;
|
|
55
|
+
} else if(element.innerText) {
|
|
56
|
+
element.innerText = text;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Get the value of an <input> element
|
|
61
|
+
function getInputValue(inputElement) {
|
|
62
|
+
if (inputElement.type.toUpperCase() == 'CHECKBOX' ||
|
|
63
|
+
inputElement.type.toUpperCase() == 'RADIO')
|
|
64
|
+
{
|
|
65
|
+
return (inputElement.checked ? 'on' : 'off');
|
|
66
|
+
}
|
|
67
|
+
return inputElement.value;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* Fire an event in a browser-compatible manner */
|
|
71
|
+
function triggerEvent(element, eventType, canBubble) {
|
|
72
|
+
canBubble = (typeof(canBubble) == undefined) ? true : canBubble;
|
|
73
|
+
if (element.fireEvent) {
|
|
74
|
+
element.fireEvent('on' + eventType);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
var evt = document.createEvent('HTMLEvents');
|
|
78
|
+
evt.initEvent(eventType, canBubble, true);
|
|
79
|
+
element.dispatchEvent(evt);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* Fire a mouse event in a browser-compatible manner */
|
|
84
|
+
function triggerMouseEvent(element, eventType, canBubble) {
|
|
85
|
+
canBubble = (typeof(canBubble) == undefined) ? true : canBubble;
|
|
86
|
+
if (element.fireEvent) {
|
|
87
|
+
element.fireEvent('on' + eventType);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
var evt = document.createEvent('MouseEvents');
|
|
91
|
+
evt.initMouseEvent(eventType, canBubble, true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
|
|
92
|
+
element.dispatchEvent(evt);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function removeLoadListener(element, command) {
|
|
97
|
+
if (window.removeEventListener)
|
|
98
|
+
element.removeEventListener("load", command, true);
|
|
99
|
+
else if (window.detachEvent)
|
|
100
|
+
element.detachEvent("onload", command);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function addLoadListener(element, command) {
|
|
104
|
+
if (window.addEventListener)
|
|
105
|
+
element.addEventListener("load",command, true);
|
|
106
|
+
else if (window.attachEvent)
|
|
107
|
+
element.attachEvent("onload",command);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function addUnloadListener(element, command) {
|
|
111
|
+
if (window.addEventListener)
|
|
112
|
+
element.addEventListener("unload",command, true);
|
|
113
|
+
else if (window.attachEvent)
|
|
114
|
+
element.attachEvent("onunload",command);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Override the broken getFunctionName() method from JsUnit
|
|
119
|
+
* This file must be loaded _after_ the jsunitCore.js
|
|
120
|
+
*/
|
|
121
|
+
function getFunctionName(aFunction) {
|
|
122
|
+
var regexpResult = aFunction.toString().match(/function (\w*)/);
|
|
123
|
+
if (regexpResult && regexpResult[1]) {
|
|
124
|
+
return regexpResult[1];
|
|
125
|
+
}
|
|
126
|
+
return 'anonymous';
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function describe(object, delimiter) {
|
|
130
|
+
var props = new Array();
|
|
131
|
+
for (var prop in object) {
|
|
132
|
+
props.push(prop + " -> " + object[prop]);
|
|
133
|
+
}
|
|
134
|
+
return props.join(delimiter || '\n');
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
PatternMatcher = function(pattern) {
|
|
138
|
+
this.selectStrategy(pattern);
|
|
139
|
+
};
|
|
140
|
+
PatternMatcher.prototype = {
|
|
141
|
+
|
|
142
|
+
selectStrategy: function(pattern) {
|
|
143
|
+
this.pattern = pattern;
|
|
144
|
+
var strategyName = 'glob'; // by default
|
|
145
|
+
if (/^([a-zA-Z]+):(.*)/.test(pattern)) {
|
|
146
|
+
strategyName = RegExp.$1;
|
|
147
|
+
pattern = RegExp.$2;
|
|
148
|
+
}
|
|
149
|
+
var matchStrategy = PatternMatcher.strategies[strategyName];
|
|
150
|
+
if (!matchStrategy) {
|
|
151
|
+
throw new SeleniumError("cannot find PatternMatcher.strategies." + strategyName);
|
|
152
|
+
}
|
|
153
|
+
this.matcher = new matchStrategy(pattern);
|
|
154
|
+
},
|
|
155
|
+
|
|
156
|
+
matches: function(actual) {
|
|
157
|
+
return this.matcher.matches(actual + '');
|
|
158
|
+
// Note: appending an empty string avoids a Konqueror bug
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* A "static" convenience method for easy matching
|
|
165
|
+
*/
|
|
166
|
+
PatternMatcher.matches = function(pattern, actual) {
|
|
167
|
+
return new PatternMatcher(pattern).matches(actual);
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
PatternMatcher.strategies = {
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Exact matching, e.g. "exact:***"
|
|
174
|
+
*/
|
|
175
|
+
exact: function(expected) {
|
|
176
|
+
this.expected = expected;
|
|
177
|
+
this.matches = function(actual) {
|
|
178
|
+
return actual == this.expected;
|
|
179
|
+
};
|
|
180
|
+
},
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Match by regular expression, e.g. "regexp:^[0-9]+$"
|
|
184
|
+
*/
|
|
185
|
+
regexp: function(regexpString) {
|
|
186
|
+
this.regexp = new RegExp(regexpString);
|
|
187
|
+
this.matches = function(actual) {
|
|
188
|
+
return this.regexp.test(actual);
|
|
189
|
+
};
|
|
190
|
+
},
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* "glob" (aka "wildmat") patterns, e.g. "glob:one,two,*"
|
|
194
|
+
*/
|
|
195
|
+
glob: function(globString) {
|
|
196
|
+
this.regexp = new RegExp(PatternMatcher.regexpFromGlob(globString));
|
|
197
|
+
this.matches = function(actual) {
|
|
198
|
+
return this.regexp.test(actual);
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
PatternMatcher.regexpFromGlob = function(glob) {
|
|
205
|
+
var re = glob;
|
|
206
|
+
re = re.replace(/([.^$+(){}\[\]\\|])/g, "\\$1");
|
|
207
|
+
re = re.replace(/\?/g, "(.|[\r\n])");
|
|
208
|
+
re = re.replace(/\*/g, "(.|[\r\n])*");
|
|
209
|
+
return "^" + re + "$";
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
var Assert = {
|
|
213
|
+
|
|
214
|
+
fail: function(message) {
|
|
215
|
+
throw new AssertionFailedError(message);
|
|
216
|
+
},
|
|
217
|
+
|
|
218
|
+
/*
|
|
219
|
+
* Assert.equals(comment?, expected, actual)
|
|
220
|
+
*/
|
|
221
|
+
equals: function() {
|
|
222
|
+
var args = new AssertionArguments(arguments);
|
|
223
|
+
if (args.expected === args.actual) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
Assert.fail(args.comment +
|
|
227
|
+
"Expected '" + args.expected +
|
|
228
|
+
"' but was '" + args.actual + "'");
|
|
229
|
+
},
|
|
230
|
+
|
|
231
|
+
/*
|
|
232
|
+
* Assert.matches(comment?, pattern, actual)
|
|
233
|
+
*/
|
|
234
|
+
matches: function() {
|
|
235
|
+
var args = new AssertionArguments(arguments);
|
|
236
|
+
if (PatternMatcher.matches(args.expected, args.actual)) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
Assert.fail(args.comment +
|
|
240
|
+
"Actual value '" + args.actual +
|
|
241
|
+
"' did not match '" + args.expected + "'");
|
|
242
|
+
},
|
|
243
|
+
|
|
244
|
+
/*
|
|
245
|
+
* Assert.notMtches(comment?, pattern, actual)
|
|
246
|
+
*/
|
|
247
|
+
notMatches: function() {
|
|
248
|
+
var args = new AssertionArguments(arguments);
|
|
249
|
+
if (!PatternMatcher.matches(args.expected, args.actual)) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
Assert.fail(args.comment +
|
|
253
|
+
"Actual value '" + args.actual +
|
|
254
|
+
"' did match '" + args.expected + "'");
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
// Preprocess the arguments to allow for an optional comment.
|
|
260
|
+
function AssertionArguments(args) {
|
|
261
|
+
if (args.length == 2) {
|
|
262
|
+
this.comment = "";
|
|
263
|
+
this.expected = args[0];
|
|
264
|
+
this.actual = args[1];
|
|
265
|
+
} else {
|
|
266
|
+
this.comment = args[0] + "; ";
|
|
267
|
+
this.expected = args[1];
|
|
268
|
+
this.actual = args[2];
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
function AssertionFailedError(message) {
|
|
275
|
+
this.isAssertionFailedError = true;
|
|
276
|
+
this.failureMessage = message;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
function SeleniumError(message) {
|
|
280
|
+
var error = new Error(message);
|
|
281
|
+
error.isSeleniumError = true;
|
|
282
|
+
return error;
|
|
283
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<html>
|
|
2
|
+
<head>
|
|
3
|
+
<title>Selenium starting points</title>
|
|
4
|
+
<script language="Javascript">
|
|
5
|
+
function fixUnitTestLink() {
|
|
6
|
+
baseurl = document.location + "";
|
|
7
|
+
baseurl = baseurl.replace(/[^\/]*$/, '');
|
|
8
|
+
jsunitLink = document.getElementById("unitTestLink");
|
|
9
|
+
jsunitLink['href'] = jsunitLink['href'].replace('BASEURL', baseurl);
|
|
10
|
+
}
|
|
11
|
+
</script>
|
|
12
|
+
<style>
|
|
13
|
+
li { margin-top: 6pt; }
|
|
14
|
+
</style>
|
|
15
|
+
</head>
|
|
16
|
+
<body onload="fixUnitTestLink();">
|
|
17
|
+
|
|
18
|
+
<h1>Selenium</h1>
|
|
19
|
+
|
|
20
|
+
<p>
|
|
21
|
+
<b>Acceptance tests:</b> These test-suites demonstrate/exercise the
|
|
22
|
+
functionality of Selenium.
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
<ul>
|
|
26
|
+
|
|
27
|
+
<li>
|
|
28
|
+
<a href="TestRunner.html">Main TestSuite</a> - tests for all of the features that we consider core to Selenium
|
|
29
|
+
</li>
|
|
30
|
+
<li>
|
|
31
|
+
<a href="TestRunner.html?test=tests/TestSuite-InternetExplorer.html">Internet Explorer TestSuite</a> - tests for all core features, plus IE specific features
|
|
32
|
+
</li>
|
|
33
|
+
<li>
|
|
34
|
+
<a href="TestRunner.html?test=tests/TestSuite-Konqueror.html">Konqueror TestSuite</a> - tests that currently pass on Konqueror
|
|
35
|
+
</li>
|
|
36
|
+
<li>
|
|
37
|
+
<a href="TestRunner.html?test=tests/TestSuite-Safari.html">Safari TestSuite</a> - tests that currently pass on Safari
|
|
38
|
+
</li>
|
|
39
|
+
<li>
|
|
40
|
+
<a href="TestRunner.html?test=devtests/TestSuite.html"><i>devtests</i></a>
|
|
41
|
+
- experimental features
|
|
42
|
+
</li>
|
|
43
|
+
<li>
|
|
44
|
+
<a href="TestRunner.html?test=tests/ErrorCheckingTestSuite.html">Error Checking TestSuite</a> - tests for the error verification commands
|
|
45
|
+
</li>
|
|
46
|
+
</ul>
|
|
47
|
+
|
|
48
|
+
<p><b>Unit-tests:</b> Use JsUnit to test Selenium internals.</p>
|
|
49
|
+
|
|
50
|
+
<ul>
|
|
51
|
+
|
|
52
|
+
<li>
|
|
53
|
+
<a id="unitTestLink" href="jsunit/testRunner.html?testPage=BASEURLtests/JsUnitSuite.html">BrowserBot unit-tests</a>
|
|
54
|
+
<br />
|
|
55
|
+
</li>
|
|
56
|
+
|
|
57
|
+
</ul>
|
|
58
|
+
|
|
59
|
+
</body>
|
|
60
|
+
</html>
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
|
2
|
+
"http://www.w3.org/TR/html4/loose.dtd">
|
|
3
|
+
|
|
4
|
+
<!--
|
|
5
|
+
Copyright 2004 ThoughtWorks, Inc
|
|
6
|
+
|
|
7
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
you may not use this file except in compliance with the License.
|
|
9
|
+
You may obtain a copy of the License at
|
|
10
|
+
|
|
11
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
|
|
13
|
+
Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
See the License for the specific language governing permissions and
|
|
17
|
+
limitations under the License.
|
|
18
|
+
-->
|
|
19
|
+
<html>
|
|
20
|
+
<head>
|
|
21
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
22
|
+
<title>JsMock Tests</title>
|
|
23
|
+
<link rel="stylesheet" type="text/css" href="/jsunit/css/jsUnitStyle.css">
|
|
24
|
+
<script language="JavaScript" type="text/javascript" src="/jsunit/app/jsUnitCore.js"></script>
|
|
25
|
+
<script language="JavaScript" type="text/javascript" src="/jsmock/mock.js"></script>
|
|
26
|
+
<script language="JavaScript" type="text/javascript">
|
|
27
|
+
|
|
28
|
+
function testCallingExpectedFunctionShouldPass() {
|
|
29
|
+
var myMock = new Mock()
|
|
30
|
+
myMock.expects("aslak")
|
|
31
|
+
myMock.aslak()
|
|
32
|
+
myMock.verify()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function testAccessingExpectedPropertyShouldPass() {
|
|
36
|
+
var myMock = new Mock()
|
|
37
|
+
myMock.expectsProperty("hello").returns("world")
|
|
38
|
+
assertEquals("world", myMock.hello)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function testAccessingExpectedPropertyWithObjectShouldPass() {
|
|
42
|
+
var myMock = new Mock()
|
|
43
|
+
ob = [1,2]
|
|
44
|
+
myMock.expectsProperty("hello").returns(ob)
|
|
45
|
+
assertEquals(ob, myMock.hello)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function testCallingUnexpectedFunctionShouldFail() {
|
|
49
|
+
var myMock = new Mock()
|
|
50
|
+
try {
|
|
51
|
+
myMock.someMethod()
|
|
52
|
+
} catch(expected) {
|
|
53
|
+
return
|
|
54
|
+
}
|
|
55
|
+
fail("Should fail because someMethod wasn't expected!")
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function testNotCallingExpectedFunctionShouldFail() {
|
|
59
|
+
var myMock = new Mock()
|
|
60
|
+
myMock.expects("someMethod")
|
|
61
|
+
try {
|
|
62
|
+
myMock.verify()
|
|
63
|
+
} catch(expected) {
|
|
64
|
+
return
|
|
65
|
+
}
|
|
66
|
+
fail("Should fail because someMethod wasn't called!")
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function testCallingExpectedFunctionWithBadArgumentsShouldFail() {
|
|
70
|
+
var myMock = new Mock()
|
|
71
|
+
myMock.expects("someMethod", "foo")
|
|
72
|
+
try {
|
|
73
|
+
myMock.someMethod("bar")
|
|
74
|
+
} catch(expected) {
|
|
75
|
+
return
|
|
76
|
+
}
|
|
77
|
+
fail("Should fail because bar wasn't the expected arg!")
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function testCallingExpectedFunctionWithExpectedArgumentsShouldPass() {
|
|
81
|
+
var myMock = new Mock()
|
|
82
|
+
myMock.expects("someMethod", "foo")
|
|
83
|
+
myMock.expects("anotherMethod", "bar", "zap")
|
|
84
|
+
assertUndefined(myMock.someMethod("foo"))
|
|
85
|
+
assertUndefined(myMock.anotherMethod("bar", "zap"))
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function testCallingExpectedFunctionWithTooFewArgumentsShouldFail() {
|
|
89
|
+
var myMock = new Mock()
|
|
90
|
+
myMock.expects("someMethod", "foo", "bar")
|
|
91
|
+
try {
|
|
92
|
+
myMock.someMethod("foo")
|
|
93
|
+
} catch(expected) {
|
|
94
|
+
return
|
|
95
|
+
}
|
|
96
|
+
fail("Should fail because too few arguments were passed!")
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function testCallingExpectedFunctionWithTooManyArgumentsShouldFail() {
|
|
100
|
+
var myMock = new Mock()
|
|
101
|
+
myMock.expects("someMethod", "foo")
|
|
102
|
+
try {
|
|
103
|
+
myMock.someMethod("foo", "bar")
|
|
104
|
+
} catch(expected) {
|
|
105
|
+
return
|
|
106
|
+
}
|
|
107
|
+
fail("Should fail because too many arguments were passed!")
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function testShouldCreateMockInstancesWithoutSideffects() {
|
|
111
|
+
var foo = new Mock()
|
|
112
|
+
var bar = new Mock()
|
|
113
|
+
|
|
114
|
+
foo.expects("foo")
|
|
115
|
+
bar.expects("bar")
|
|
116
|
+
|
|
117
|
+
try {
|
|
118
|
+
bar.foo()
|
|
119
|
+
} catch(expected) {
|
|
120
|
+
return
|
|
121
|
+
}
|
|
122
|
+
fail("Should fail because an unexpected bar was called!")
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function testCallingExpectedFunctionWithReturnShouldReturnValue() {
|
|
126
|
+
var myMock = new Mock()
|
|
127
|
+
myMock.expects("someMethod", "bar").returns("foo")
|
|
128
|
+
myMock.expects("theOtherMethod", "zap", "ping", "pong").returns("bang")
|
|
129
|
+
assertEquals("foo", myMock.someMethod("bar"))
|
|
130
|
+
assertEquals("bang", myMock.theOtherMethod("zap", "ping", "pong"))
|
|
131
|
+
myMock.verify()
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function testCallingExpectedFunctionWithThrowsShouldThrowError() {
|
|
135
|
+
var myMock = new Mock();
|
|
136
|
+
myMock.expects("someMethod", "bar").andThrows("failure")
|
|
137
|
+
try {
|
|
138
|
+
myMock.someMethod("bar")
|
|
139
|
+
} catch (e) {
|
|
140
|
+
assertEquals("failure", e.message);
|
|
141
|
+
return
|
|
142
|
+
}
|
|
143
|
+
fail("Mock did not throw exception when required");
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function testSettingExpectedPropertyShouldPass() {
|
|
147
|
+
var myMock = new Mock()
|
|
148
|
+
myMock.expectsProperty("foo", "bar")
|
|
149
|
+
myMock.foo = "bar"
|
|
150
|
+
myMock.verify()
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function TODO_testSettingUnexpectedPropertyShouldFail() {
|
|
154
|
+
var myMock = new Mock()
|
|
155
|
+
myMock.foo = "bar"
|
|
156
|
+
|
|
157
|
+
try {
|
|
158
|
+
myMock.verify()
|
|
159
|
+
} catch(expected) {
|
|
160
|
+
return
|
|
161
|
+
}
|
|
162
|
+
fail("Should fail because an unexpected property was set!")
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function TODO_testShouldAllowExpectationOfSameFunctionWithDifferentArguments() {
|
|
166
|
+
var myMock = new Mock()
|
|
167
|
+
myMock.expects("aslak", "hello").returns("world")
|
|
168
|
+
myMock.expects("aslak", "bonjour").returns("monde")
|
|
169
|
+
assertEquals("world", myMock.aslak("hello"))
|
|
170
|
+
assertEquals("monde", myMock.aslak("bonjour"))
|
|
171
|
+
myMock.verify()
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
function TODO_testNotSettingExpectedPropertyShouldFail() {
|
|
175
|
+
var myMock = new Mock()
|
|
176
|
+
myMock.expectsProperty("foo", "bar")
|
|
177
|
+
try {
|
|
178
|
+
myMock.verify()
|
|
179
|
+
} catch(expected) {
|
|
180
|
+
return
|
|
181
|
+
}
|
|
182
|
+
fail("Should fail because an expected property was not set!")
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function TODO_testSettingExpectedPropertyWithUnexpectedValueShouldFail() {
|
|
186
|
+
var myMock = new Mock()
|
|
187
|
+
myMock.expectsProperty("foo", "bar")
|
|
188
|
+
myMock.foo="zap"
|
|
189
|
+
try {
|
|
190
|
+
myMock.verify()
|
|
191
|
+
} catch(expected) {
|
|
192
|
+
return
|
|
193
|
+
}
|
|
194
|
+
fail("Should fail because an expected property was set with unexpected value!")
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
</script>
|
|
198
|
+
</head>
|
|
199
|
+
|
|
200
|
+
<body>
|
|
201
|
+
<h1>JsMock Tests</h1>
|
|
202
|
+
|
|
203
|
+
<p>This page contains tests for JsMock. To see them, take a look at the source. To run them, load this file via JsUnit's testRunner.html</p>
|
|
204
|
+
</body>
|
|
205
|
+
</html>
|