selenium-webdriver 0.0.24 → 0.0.25
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/{common/src/rb/CHANGES → CHANGES} +13 -0
- data/{common/src/rb/README → README} +1 -1
- data/{common/src/rb/lib → lib}/selenium-webdriver.rb +0 -0
- data/{common/src/rb/lib → lib}/selenium/webdriver.rb +2 -1
- data/{common/src/rb/lib → lib}/selenium/webdriver/bridge_helper.rb +0 -0
- data/{common/src/rb/lib → lib}/selenium/webdriver/child_process.rb +0 -0
- data/{chrome/src/rb/lib → lib}/selenium/webdriver/chrome.rb +0 -0
- data/{chrome/src/rb/lib → lib}/selenium/webdriver/chrome/bridge.rb +2 -2
- data/{chrome/src/rb/lib → lib}/selenium/webdriver/chrome/command_executor.rb +0 -0
- data/lib/selenium/webdriver/chrome/extension.zip +0 -0
- data/{chrome/src/rb/lib → lib}/selenium/webdriver/chrome/launcher.rb +26 -20
- data/{common/src/rb/lib → lib}/selenium/webdriver/core_ext/dir.rb +0 -0
- data/{common/src/rb/lib → lib}/selenium/webdriver/core_ext/string.rb +0 -0
- data/{common/src/rb/lib → lib}/selenium/webdriver/driver.rb +0 -0
- data/{common/src/rb/lib → lib}/selenium/webdriver/driver_extensions/takes_screenshot.rb +0 -0
- data/{common/src/rb/lib → lib}/selenium/webdriver/element.rb +0 -0
- data/{common/src/rb/lib → lib}/selenium/webdriver/error.rb +0 -0
- data/{common/src/rb/lib → lib}/selenium/webdriver/file_reaper.rb +2 -1
- data/{common/src/rb/lib → lib}/selenium/webdriver/find.rb +0 -0
- data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox.rb +2 -1
- data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/binary.rb +32 -6
- data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/bridge.rb +0 -0
- data/lib/selenium/webdriver/firefox/extension/webdriver.xpi +0 -0
- data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/launcher.rb +0 -0
- data/lib/selenium/webdriver/firefox/native/linux/amd64/x_ignore_nofocus.so +0 -0
- data/lib/selenium/webdriver/firefox/native/linux/x86/x_ignore_nofocus.so +0 -0
- data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/profile.rb +37 -72
- data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/profiles_ini.rb +0 -0
- data/{firefox/src/rb/lib → lib}/selenium/webdriver/firefox/util.rb +0 -0
- data/{jobbie/src/rb/lib → lib}/selenium/webdriver/ie.rb +2 -2
- data/{jobbie/src/rb/lib → lib}/selenium/webdriver/ie/bridge.rb +7 -2
- data/{jobbie/src/rb/lib → lib}/selenium/webdriver/ie/lib.rb +0 -0
- data/{jobbie/prebuilt/Win32/Release → lib/selenium/webdriver/ie/native/win32}/InternetExplorerDriver.dll +0 -0
- data/lib/selenium/webdriver/ie/native/x64/InternetExplorerDriver.dll +0 -0
- data/{jobbie/src/rb/lib → lib}/selenium/webdriver/ie/util.rb +0 -0
- data/{common/src/rb/lib → lib}/selenium/webdriver/keys.rb +0 -0
- data/{common/src/rb/lib → lib}/selenium/webdriver/navigation.rb +0 -0
- data/{common/src/rb/lib → lib}/selenium/webdriver/options.rb +0 -0
- data/{common/src/rb/lib → lib}/selenium/webdriver/platform.rb +5 -1
- data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote.rb +0 -0
- data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/bridge.rb +0 -0
- data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/capabilities.rb +0 -0
- data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/commands.rb +0 -0
- data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/http/common.rb +0 -0
- data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/http/curb.rb +0 -0
- data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/http/default.rb +5 -1
- data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/response.rb +0 -0
- data/{remote/client/src/rb/lib → lib}/selenium/webdriver/remote/server_error.rb +0 -0
- data/{common/src/rb/lib → lib}/selenium/webdriver/target_locator.rb +0 -0
- data/{common/src/rb/lib → lib}/selenium/webdriver/timeouts.rb +0 -0
- data/lib/selenium/webdriver/zip_helper.rb +30 -0
- metadata +73 -214
- data/COPYING +0 -204
- data/chrome/prebuilt/Win32/Release/npchromedriver.dll +0 -0
- data/chrome/prebuilt/x64/Release/npchromedriver.dll +0 -0
- data/chrome/src/extension/background.html +0 -9
- data/chrome/src/extension/background.js +0 -1029
- data/chrome/src/extension/content_script.js +0 -1488
- data/chrome/src/extension/icons/busy.png +0 -0
- data/chrome/src/extension/icons/free.png +0 -0
- data/chrome/src/extension/manifest-nonwin.json +0 -19
- data/chrome/src/extension/manifest-win.json +0 -20
- data/chrome/src/extension/utils.js +0 -231
- data/common/src/js/abstractcommandprocessor.js +0 -132
- data/common/src/js/asserts.js +0 -296
- data/common/src/js/by.js +0 -149
- data/common/src/js/command.js +0 -380
- data/common/src/js/core/Blank.html +0 -7
- data/common/src/js/core/InjectedRemoteRunner.html +0 -8
- data/common/src/js/core/RemoteRunner.html +0 -101
- data/common/src/js/core/SeleniumLog.html +0 -109
- data/common/src/js/core/TestPrompt.html +0 -145
- data/common/src/js/core/TestRunner-splash.html +0 -55
- data/common/src/js/core/TestRunner.html +0 -165
- data/common/src/js/core/icons/all.png +0 -0
- data/common/src/js/core/icons/continue.png +0 -0
- data/common/src/js/core/icons/continue_disabled.png +0 -0
- data/common/src/js/core/icons/pause.png +0 -0
- data/common/src/js/core/icons/pause_disabled.png +0 -0
- data/common/src/js/core/icons/selected.png +0 -0
- data/common/src/js/core/icons/step.png +0 -0
- data/common/src/js/core/icons/step_disabled.png +0 -0
- data/common/src/js/core/lib/cssQuery/cssQuery-p.js +0 -6
- data/common/src/js/core/lib/cssQuery/src/cssQuery-level2.js +0 -142
- data/common/src/js/core/lib/cssQuery/src/cssQuery-level3.js +0 -150
- data/common/src/js/core/lib/cssQuery/src/cssQuery-standard.js +0 -53
- data/common/src/js/core/lib/cssQuery/src/cssQuery.js +0 -356
- data/common/src/js/core/lib/prototype.js +0 -2006
- data/common/src/js/core/lib/scriptaculous/builder.js +0 -101
- data/common/src/js/core/lib/scriptaculous/controls.js +0 -815
- data/common/src/js/core/lib/scriptaculous/dragdrop.js +0 -915
- data/common/src/js/core/lib/scriptaculous/effects.js +0 -958
- data/common/src/js/core/lib/scriptaculous/scriptaculous.js +0 -47
- data/common/src/js/core/lib/scriptaculous/slider.js +0 -283
- data/common/src/js/core/lib/scriptaculous/unittest.js +0 -383
- data/common/src/js/core/lib/snapsie.js +0 -91
- data/common/src/js/core/scripts/find_matching_child.js +0 -69
- data/common/src/js/core/scripts/htmlutils.js +0 -8716
- data/common/src/js/core/scripts/injection.html +0 -72
- data/common/src/js/core/scripts/selenium-api.js +0 -3291
- data/common/src/js/core/scripts/selenium-browserbot.js +0 -2457
- data/common/src/js/core/scripts/selenium-browserdetect.js +0 -153
- data/common/src/js/core/scripts/selenium-commandhandlers.js +0 -379
- data/common/src/js/core/scripts/selenium-executionloop.js +0 -175
- data/common/src/js/core/scripts/selenium-logging.js +0 -148
- data/common/src/js/core/scripts/selenium-remoterunner.js +0 -695
- data/common/src/js/core/scripts/selenium-testrunner.js +0 -1362
- data/common/src/js/core/scripts/selenium-version.js +0 -5
- data/common/src/js/core/scripts/ui-doc.html +0 -808
- data/common/src/js/core/scripts/ui-element.js +0 -1644
- data/common/src/js/core/scripts/ui-map-sample.js +0 -979
- data/common/src/js/core/scripts/user-extensions.js +0 -3
- data/common/src/js/core/scripts/user-extensions.js.sample +0 -75
- data/common/src/js/core/scripts/xmlextras.js +0 -153
- data/common/src/js/core/selenium-logo.png +0 -0
- data/common/src/js/core/selenium-test.css +0 -43
- data/common/src/js/core/selenium.css +0 -316
- data/common/src/js/core/xpath/dom.js +0 -566
- data/common/src/js/core/xpath/javascript-xpath-0.1.11.js +0 -2816
- data/common/src/js/core/xpath/util.js +0 -549
- data/common/src/js/core/xpath/xmltoken.js +0 -149
- data/common/src/js/core/xpath/xpath.js +0 -2481
- data/common/src/js/extension/README +0 -2
- data/common/src/js/extension/dommessenger.js +0 -152
- data/common/src/js/factory.js +0 -55
- data/common/src/js/future.js +0 -141
- data/common/src/js/jsunit.js +0 -40
- data/common/src/js/jsunit/app/css/jsUnitStyle.css +0 -50
- data/common/src/js/jsunit/app/css/readme +0 -10
- data/common/src/js/jsunit/app/emptyPage.html +0 -11
- data/common/src/js/jsunit/app/jsUnitCore.js +0 -534
- data/common/src/js/jsunit/app/jsUnitMockTimeout.js +0 -81
- data/common/src/js/jsunit/app/jsUnitTestManager.js +0 -705
- data/common/src/js/jsunit/app/jsUnitTestSuite.js +0 -44
- data/common/src/js/jsunit/app/jsUnitTracer.js +0 -102
- data/common/src/js/jsunit/app/jsUnitVersionCheck.js +0 -59
- data/common/src/js/jsunit/app/main-counts-errors.html +0 -12
- data/common/src/js/jsunit/app/main-counts-failures.html +0 -13
- data/common/src/js/jsunit/app/main-counts-runs.html +0 -13
- data/common/src/js/jsunit/app/main-counts.html +0 -21
- data/common/src/js/jsunit/app/main-data.html +0 -178
- data/common/src/js/jsunit/app/main-errors.html +0 -23
- data/common/src/js/jsunit/app/main-frame.html +0 -19
- data/common/src/js/jsunit/app/main-loader.html +0 -45
- data/common/src/js/jsunit/app/main-progress.html +0 -25
- data/common/src/js/jsunit/app/main-results.html +0 -67
- data/common/src/js/jsunit/app/main-status.html +0 -13
- data/common/src/js/jsunit/app/testContainer.html +0 -16
- data/common/src/js/jsunit/app/testContainerController.html +0 -77
- data/common/src/js/jsunit/app/xbDebug.js +0 -306
- data/common/src/js/jsunit/changelog.txt +0 -60
- data/common/src/js/jsunit/css/jsUnitStyle.css +0 -83
- data/common/src/js/jsunit/images/green.gif +0 -0
- data/common/src/js/jsunit/images/logo_jsunit.gif +0 -0
- data/common/src/js/jsunit/images/powerby-transparent.gif +0 -0
- data/common/src/js/jsunit/images/red.gif +0 -0
- data/common/src/js/jsunit/licenses/JDOM_license.txt +0 -56
- data/common/src/js/jsunit/licenses/Jetty_license.html +0 -213
- data/common/src/js/jsunit/licenses/MPL-1.1.txt +0 -470
- data/common/src/js/jsunit/licenses/gpl-2.txt +0 -340
- data/common/src/js/jsunit/licenses/index.html +0 -141
- data/common/src/js/jsunit/licenses/lgpl-2.1.txt +0 -504
- data/common/src/js/jsunit/licenses/mpl-tri-license-c.txt +0 -35
- data/common/src/js/jsunit/licenses/mpl-tri-license-html.txt +0 -35
- data/common/src/js/jsunit/readme.txt +0 -19
- data/common/src/js/jsunit/testRunner.html +0 -167
- data/common/src/js/jsunit/version.txt +0 -1
- data/common/src/js/key.js +0 -117
- data/common/src/js/localcommandprocessor.js +0 -171
- data/common/src/js/testcase.js +0 -219
- data/common/src/js/timing.js +0 -89
- data/common/src/js/webdriver.js +0 -860
- data/common/src/js/webelement.js +0 -483
- data/firefox/prebuilt/Win32/Release/webdriver-firefox.dll +0 -0
- data/firefox/prebuilt/amd64/libnoblur64.so +0 -0
- data/firefox/prebuilt/i386/libnoblur.so +0 -0
- data/firefox/prebuilt/linux/Release/libwebdriver-firefox.so +0 -0
- data/firefox/prebuilt/linux64/Release/libwebdriver-firefox.so +0 -0
- data/firefox/prebuilt/nsICommandProcessor.xpt +0 -0
- data/firefox/prebuilt/nsINativeEvents.xpt +0 -0
- data/firefox/prebuilt/nsIResponseHandler.xpt +0 -0
- data/firefox/src/extension/chrome.manifest +0 -3
- data/firefox/src/extension/components/badCertListener.js +0 -295
- data/firefox/src/extension/components/dispatcher.js +0 -495
- data/firefox/src/extension/components/driver-component.js +0 -130
- data/firefox/src/extension/components/errorcode.js +0 -70
- data/firefox/src/extension/components/firefoxDriver.js +0 -831
- data/firefox/src/extension/components/json2.js +0 -273
- data/firefox/src/extension/components/keytest.html +0 -554
- data/firefox/src/extension/components/nsCommandProcessor.js +0 -684
- data/firefox/src/extension/components/promptService.js +0 -208
- data/firefox/src/extension/components/request.js +0 -219
- data/firefox/src/extension/components/response.js +0 -276
- data/firefox/src/extension/components/screenshooter.js +0 -81
- data/firefox/src/extension/components/session.js +0 -314
- data/firefox/src/extension/components/sessionstore.js +0 -226
- data/firefox/src/extension/components/socketListener.js +0 -435
- data/firefox/src/extension/components/utils.js +0 -1335
- data/firefox/src/extension/components/webLoadingListener.js +0 -57
- data/firefox/src/extension/components/webdriverserver.js +0 -110
- data/firefox/src/extension/components/wrappedElement.js +0 -706
- data/firefox/src/extension/content/fxdriver.xul +0 -30
- data/firefox/src/extension/content/server.js +0 -95
- data/firefox/src/extension/idl/nsICommandProcessor.idl +0 -38
- data/firefox/src/extension/idl/nsIResponseHandler.idl +0 -34
- data/firefox/src/extension/install.rdf +0 -29
- data/jobbie/prebuilt/x64/Release/InternetExplorerDriver.dll +0 -0
|
Binary file
|
|
Binary file
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "WebDriver",
|
|
3
|
-
"version": "1.9.12",
|
|
4
|
-
"description": "WebDriver extension for Chrome",
|
|
5
|
-
"browser_action": {
|
|
6
|
-
"default_title": "WebDriver",
|
|
7
|
-
"default_icon": "icons/free.png"
|
|
8
|
-
},
|
|
9
|
-
"background_page": "background.html",
|
|
10
|
-
"content_scripts": [
|
|
11
|
-
{
|
|
12
|
-
"matches": ["http://*/*", "https://*/*", "file:///*"],
|
|
13
|
-
"js": ["utils.js", "content_script.js"],
|
|
14
|
-
"run_at": "document_end",
|
|
15
|
-
"all_frames": true
|
|
16
|
-
}
|
|
17
|
-
],
|
|
18
|
-
"permissions": ["http://*/*", "tabs"]
|
|
19
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "WebDriver",
|
|
3
|
-
"version": "1.9.12",
|
|
4
|
-
"description": "WebDriver extension for Chrome",
|
|
5
|
-
"browser_action": {
|
|
6
|
-
"default_title": "WebDriver",
|
|
7
|
-
"default_icon": "icons/free.png"
|
|
8
|
-
},
|
|
9
|
-
"background_page": "background.html",
|
|
10
|
-
"content_scripts": [
|
|
11
|
-
{
|
|
12
|
-
"matches": ["http://*/*", "https://*/*", "file:///*"],
|
|
13
|
-
"js": ["utils.js", "content_script.js"],
|
|
14
|
-
"run_at": "document_end",
|
|
15
|
-
"all_frames": true
|
|
16
|
-
}
|
|
17
|
-
],
|
|
18
|
-
"plugins": [{"path": "npchromedriver.dll", "public": true}],
|
|
19
|
-
"permissions": ["http://*/*", "tabs"]
|
|
20
|
-
}
|
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
//Very cut-down and slightly modified (generally to remove context) from
|
|
2
|
-
//$WEBDRIVER_HOME/firefox/src/extension/components/utils.js
|
|
3
|
-
|
|
4
|
-
function Utils() {
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
function getTextFromNode(node, toReturn, textSoFar, isPreformatted) {
|
|
8
|
-
if (node['tagName'] && node.tagName == "SCRIPT") {
|
|
9
|
-
return [toReturn, textSoFar];
|
|
10
|
-
} else if (node['tagName'] && node.tagName == "TITLE") {
|
|
11
|
-
return [textSoFar + node.text, ""];
|
|
12
|
-
}
|
|
13
|
-
var children = node.childNodes;
|
|
14
|
-
|
|
15
|
-
for (var i = 0; i < children.length; i++) {
|
|
16
|
-
var child = children[i];
|
|
17
|
-
|
|
18
|
-
// Do we need to collapse the text so far?
|
|
19
|
-
if (child["tagName"] && child.tagName == "PRE") {
|
|
20
|
-
toReturn += collapseWhitespace(textSoFar);
|
|
21
|
-
textSoFar = "";
|
|
22
|
-
var bits = getTextFromNode(child, toReturn, "", true);
|
|
23
|
-
toReturn += bits[1];
|
|
24
|
-
continue;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// Or is this just plain text?
|
|
28
|
-
if (child.nodeName == "#text") {
|
|
29
|
-
if (Utils.isDisplayed(child)) {
|
|
30
|
-
var textToAdd = child.nodeValue;
|
|
31
|
-
textToAdd = textToAdd.replace(new RegExp(String.fromCharCode(160), "gm"), " ");
|
|
32
|
-
textSoFar += textToAdd;
|
|
33
|
-
}
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Treat as another child node.
|
|
38
|
-
var bits = getTextFromNode(child, toReturn, textSoFar, false);
|
|
39
|
-
toReturn = bits[0];
|
|
40
|
-
textSoFar = bits[1];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
if (isBlockLevel(node)) {
|
|
44
|
-
if (node["tagName"] && node.tagName != "PRE") {
|
|
45
|
-
toReturn += collapseWhitespace(textSoFar) + "\n";
|
|
46
|
-
textSoFar = "";
|
|
47
|
-
} else {
|
|
48
|
-
toReturn += "\n";
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return [toReturn, textSoFar];
|
|
52
|
-
}
|
|
53
|
-
;
|
|
54
|
-
|
|
55
|
-
function isBlockLevel(node) {
|
|
56
|
-
if (node["tagName"] && node.tagName == "BR")
|
|
57
|
-
return true;
|
|
58
|
-
|
|
59
|
-
try {
|
|
60
|
-
// Should we think about getting hold of the current document?
|
|
61
|
-
return "block" == Utils.getStyleProperty(node, "display");
|
|
62
|
-
} catch (e) {
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
Utils.isInHead = function(element) {
|
|
68
|
-
while (element) {
|
|
69
|
-
if (element.tagName && element.tagName.toLowerCase() == "head") {
|
|
70
|
-
return true;
|
|
71
|
-
}
|
|
72
|
-
try {
|
|
73
|
-
element = element.parentNode;
|
|
74
|
-
} catch (e) {
|
|
75
|
-
// Fine. the DOM has dispeared from underneath us
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return false;
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
Utils.isDisplayed = function(element) {
|
|
84
|
-
// Ensure that we're dealing with an element.
|
|
85
|
-
var el = element;
|
|
86
|
-
while (el.nodeType != 1 && !(el.nodeType >= 9 && el.nodeType <= 11)) {
|
|
87
|
-
el = el.parentNode;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// Hidden input elements are, by definition, never displayed
|
|
91
|
-
if (el.tagName == "input" && el.type == "hidden") {
|
|
92
|
-
return false;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
var visibility = Utils.getStyleProperty(el, "visibility");
|
|
96
|
-
|
|
97
|
-
var _isDisplayed = function(e) {
|
|
98
|
-
var display = e.ownerDocument.defaultView.getComputedStyle(e, null).getPropertyValue("display");
|
|
99
|
-
if (display == "none") return display;
|
|
100
|
-
if (e && e.parentNode && e.parentNode.style) {
|
|
101
|
-
return _isDisplayed(e.parentNode);
|
|
102
|
-
}
|
|
103
|
-
return undefined;
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
var displayed = _isDisplayed(el);
|
|
107
|
-
|
|
108
|
-
if (element.scrollIntoView && element.getBoundingClientRect &&
|
|
109
|
-
element.tagName.toLowerCase() != "option") {
|
|
110
|
-
//Option tags have 0-dimension bounding rects so ignore them
|
|
111
|
-
element.scrollIntoView(true);
|
|
112
|
-
var clientRect = element.getBoundingClientRect();
|
|
113
|
-
if (clientRect.width == 0 || clientRect.height == 0) {
|
|
114
|
-
return false;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
return displayed != "none" && visibility != "hidden";
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
Utils.getStyleProperty = function(node, propertyName) {
|
|
122
|
-
if (!node)
|
|
123
|
-
return undefined;
|
|
124
|
-
|
|
125
|
-
var value = node.ownerDocument.defaultView.getComputedStyle(node, null).getPropertyValue(propertyName);
|
|
126
|
-
|
|
127
|
-
// Convert colours to hex if possible
|
|
128
|
-
var raw = /rgb\((\d{1,3}),\s(\d{1,3}),\s(\d{1,3})\)/.exec(value);
|
|
129
|
-
if (raw) {
|
|
130
|
-
var temp = value.substr(0, raw.index);
|
|
131
|
-
|
|
132
|
-
var hex = "#";
|
|
133
|
-
for (var i = 1; i <= 3; i++) {
|
|
134
|
-
var colour = (raw[i] - 0).toString(16);
|
|
135
|
-
if (colour.length == 1)
|
|
136
|
-
colour = "0" + colour;
|
|
137
|
-
hex += colour
|
|
138
|
-
}
|
|
139
|
-
hex = hex.toLowerCase();
|
|
140
|
-
value = temp + hex + value.substr(raw.index + raw[0].length);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
if (value == "inherit" && element.parentNode.style) {
|
|
144
|
-
value = Utils.getStyleProperty(node.parentNode, propertyName);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
return value;
|
|
148
|
-
};
|
|
149
|
-
|
|
150
|
-
function collapseWhitespace(textSoFar) {
|
|
151
|
-
return textSoFar.replace(/\s+/g, " ");
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
function getPreformattedText(node) {
|
|
155
|
-
var textToAdd = "";
|
|
156
|
-
return getTextFromNode(node, "", textToAdd, true)[1];
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
function isWhiteSpace(character) {
|
|
160
|
-
return character == '\n' || character == ' ' || character == '\t' || character == '\r';
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
Utils.getText = function(element) {
|
|
164
|
-
var bits = getTextFromNode(element, "", "", element.tagName == "PRE");
|
|
165
|
-
var text = bits[0] + collapseWhitespace(bits[1]);
|
|
166
|
-
var start = 0;
|
|
167
|
-
while (start < text.length && isWhiteSpace(text[start])) {
|
|
168
|
-
++start;
|
|
169
|
-
}
|
|
170
|
-
var end = text.length;
|
|
171
|
-
while (end > start && isWhiteSpace(text[end - 1])) {
|
|
172
|
-
--end;
|
|
173
|
-
}
|
|
174
|
-
return text.slice(start, end);
|
|
175
|
-
};
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Fires the event using Utils.fireEvent, and if the event returned true,
|
|
179
|
-
* perform callback, which will be passed on arguments
|
|
180
|
-
*/
|
|
181
|
-
Utils.fireHtmlEventAndConditionallyPerformAction = function(element, eventName, callback) {
|
|
182
|
-
Utils.fireHtmlEvent(element, eventName, function(evt) { if (JSON.parse(evt.newValue).value) { callback(); } });
|
|
183
|
-
};
|
|
184
|
-
|
|
185
|
-
Utils.fireHtmlEvent = function(element, eventName, callback) {
|
|
186
|
-
if (callback === undefined) {
|
|
187
|
-
callback = function() {};
|
|
188
|
-
}
|
|
189
|
-
var args = [
|
|
190
|
-
{"ELEMENT": addElementToInternalArray(element)},
|
|
191
|
-
eventName
|
|
192
|
-
];
|
|
193
|
-
|
|
194
|
-
// We need to do this because event handlers refer to functions that
|
|
195
|
-
// the content script can't reah. See:
|
|
196
|
-
// http://code.google.com/p/chromium/issues/detail?id=29071
|
|
197
|
-
var script = "var e = document.createEvent('HTMLEvents'); "
|
|
198
|
-
+ "e.initEvent(arguments[1], true, true); "
|
|
199
|
-
+ "return arguments[0].dispatchEvent(e);";
|
|
200
|
-
|
|
201
|
-
execute_(script, args, callback);
|
|
202
|
-
};
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
Utils.fireMouseEventOn = function(element, eventName) {
|
|
206
|
-
Utils.triggerMouseEvent(element, eventName, 0, 0);
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
Utils.triggerMouseEvent = function(element, eventType, clientX, clientY) {
|
|
210
|
-
var args = [
|
|
211
|
-
{"ELEMENT": addElementToInternalArray(element)},
|
|
212
|
-
eventType,
|
|
213
|
-
clientX,
|
|
214
|
-
clientY
|
|
215
|
-
];
|
|
216
|
-
|
|
217
|
-
// We need to do this because event handlers refer to functions that
|
|
218
|
-
// the content script can't reah. See:
|
|
219
|
-
// http://code.google.com/p/chromium/issues/detail?id=29071
|
|
220
|
-
var script =
|
|
221
|
-
"var event = arguments[0].ownerDocument.createEvent('MouseEvents'); "
|
|
222
|
-
+ "var view = arguments[0].ownerDocument.defaultView; "
|
|
223
|
-
+ "event.initMouseEvent(arguments[1], true, true, view, 1, 0, 0, arguments[2], arguments[3], false, false, false, false, 0, arguments[0]);"
|
|
224
|
-
+ " arguments[0].dispatchEvent(event);";
|
|
225
|
-
|
|
226
|
-
execute_(script, args, function(){});
|
|
227
|
-
};
|
|
228
|
-
|
|
229
|
-
Utils.trim = function(str) {
|
|
230
|
-
return str.replace(/^\s*/, "").replace(/\s*$/, "");
|
|
231
|
-
};
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
/** @license
|
|
2
|
-
Copyright 2007-2009 WebDriver committers
|
|
3
|
-
Copyright 2007-2009 Google Inc.
|
|
4
|
-
|
|
5
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
you may not use this file except in compliance with the License.
|
|
7
|
-
You may obtain a copy of the License at
|
|
8
|
-
|
|
9
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
|
|
11
|
-
Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
See the License for the specific language governing permissions and
|
|
15
|
-
limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* @fileoverview Base class for all WebDriver command processors.
|
|
20
|
-
* @author jmleyba@gmail.com (Jason Leyba)
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
|
-
goog.provide('webdriver.AbstractCommandProcessor');
|
|
24
|
-
|
|
25
|
-
goog.require('goog.Disposable');
|
|
26
|
-
goog.require('goog.array');
|
|
27
|
-
goog.require('goog.object');
|
|
28
|
-
goog.require('webdriver.CommandName');
|
|
29
|
-
goog.require('webdriver.Future');
|
|
30
|
-
goog.require('webdriver.Response');
|
|
31
|
-
goog.require('webdriver.Response.Code');
|
|
32
|
-
goog.require('webdriver.WebElement');
|
|
33
|
-
goog.require('webdriver.timing');
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Base class for all WebDriver command processors.
|
|
38
|
-
* @constructor
|
|
39
|
-
* @extends {goog.Disposable}
|
|
40
|
-
*/
|
|
41
|
-
webdriver.AbstractCommandProcessor = function() {
|
|
42
|
-
goog.Disposable.call(this);
|
|
43
|
-
};
|
|
44
|
-
goog.inherits(webdriver.AbstractCommandProcessor, goog.Disposable);
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Updates a {@code webdriver.Command} instance so that any parameters that
|
|
49
|
-
* are {@code webdriver.Future} values are converted to their asynchronously set
|
|
50
|
-
* values.
|
|
51
|
-
* @param {webdriver.Command} command The command object to modify.
|
|
52
|
-
* @throws If an attempt is made to fetch the value of a
|
|
53
|
-
* {@code webdriver.Future} that hasn't been computed yet.
|
|
54
|
-
* @private
|
|
55
|
-
*/
|
|
56
|
-
webdriver.AbstractCommandProcessor.resolveFutureParams_ = function(
|
|
57
|
-
command) {
|
|
58
|
-
function getValue(obj) {
|
|
59
|
-
if (obj instanceof webdriver.Future) {
|
|
60
|
-
return obj.getValue();
|
|
61
|
-
} else if (goog.isFunction(obj) ||
|
|
62
|
-
obj instanceof webdriver.WebElement) {
|
|
63
|
-
return obj;
|
|
64
|
-
} else if (goog.isObject(obj)) {
|
|
65
|
-
goog.object.forEach(obj, function(value, key) {
|
|
66
|
-
if (value instanceof webdriver.Future) {
|
|
67
|
-
obj[key] = getValue(value);
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
return obj;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
command.parameters = goog.object.map(command.parameters, function(param) {
|
|
75
|
-
if (goog.isArray(param)) {
|
|
76
|
-
return goog.array.map(param, getValue);
|
|
77
|
-
} else {
|
|
78
|
-
return getValue(param);
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Executes a command.
|
|
86
|
-
* @param {webdriver.Command} command The command to execute.
|
|
87
|
-
*/
|
|
88
|
-
webdriver.AbstractCommandProcessor.prototype.execute = function(command) {
|
|
89
|
-
var driver = command.getDriver();
|
|
90
|
-
webdriver.AbstractCommandProcessor.resolveFutureParams_(command);
|
|
91
|
-
var parameters = command.getParameters();
|
|
92
|
-
switch (command.getName()) {
|
|
93
|
-
case webdriver.CommandName.SLEEP:
|
|
94
|
-
var ms = parameters['ms'];
|
|
95
|
-
webdriver.timing.setTimeout(function() {
|
|
96
|
-
command.setResponse(new webdriver.Response(
|
|
97
|
-
webdriver.Response.Code.SUCCESS, ms));
|
|
98
|
-
}, ms);
|
|
99
|
-
break;
|
|
100
|
-
|
|
101
|
-
case webdriver.CommandName.WAIT:
|
|
102
|
-
case webdriver.CommandName.FUNCTION:
|
|
103
|
-
try {
|
|
104
|
-
var result = parameters['function'].apply(null, parameters['args']);
|
|
105
|
-
command.setResponse(new webdriver.Response(
|
|
106
|
-
webdriver.Response.Code.SUCCESS, result));
|
|
107
|
-
} catch (ex) {
|
|
108
|
-
command.setResponse(new webdriver.Response(
|
|
109
|
-
webdriver.Response.Code.UNHANDLED_ERROR, ex));
|
|
110
|
-
}
|
|
111
|
-
break;
|
|
112
|
-
|
|
113
|
-
default:
|
|
114
|
-
try {
|
|
115
|
-
this.dispatchDriverCommand(command);
|
|
116
|
-
} catch (ex) {
|
|
117
|
-
command.setResponse(new webdriver.Response(
|
|
118
|
-
webdriver.Response.Code.UNHANDLED_ERROR, ex));
|
|
119
|
-
}
|
|
120
|
-
break;
|
|
121
|
-
}
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Sends a command to be executed by a browser driver. This method must be
|
|
127
|
-
* implemented by each subclass.
|
|
128
|
-
* @param {webdriver.Command} command The command to execute.
|
|
129
|
-
* @protected
|
|
130
|
-
*/
|
|
131
|
-
webdriver.AbstractCommandProcessor.prototype.dispatchDriverCommand =
|
|
132
|
-
goog.abstractMethod;
|
data/common/src/js/asserts.js
DELETED
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
/** @license
|
|
2
|
-
Copyright 2007-2009 WebDriver committers
|
|
3
|
-
Copyright 2007-2009 Google Inc.
|
|
4
|
-
|
|
5
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
you may not use this file except in compliance with the License.
|
|
7
|
-
You may obtain a copy of the License at
|
|
8
|
-
|
|
9
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
|
|
11
|
-
Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
See the License for the specific language governing permissions and
|
|
15
|
-
limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* @fileoverview Assertion functions for use in webdriver test cases.
|
|
20
|
-
* @author jmleyba@gmail.com (Jason Leyba)
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
|
-
goog.provide('webdriver.asserts');
|
|
24
|
-
|
|
25
|
-
goog.require('goog.math.Coordinate');
|
|
26
|
-
goog.require('goog.string');
|
|
27
|
-
goog.require('webdriver.Future');
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* @param {webdriver.Future|Object} obj The object to get the value form.
|
|
32
|
-
* @return {*} The value of the given object.
|
|
33
|
-
*/
|
|
34
|
-
webdriver.asserts.getValue_ = function(obj) {
|
|
35
|
-
return obj instanceof webdriver.Future ? obj.getValue() : obj;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Returns a string with the following format: "<$value> ($type)" where $value
|
|
41
|
-
* is the String representation of the {@code obj} and $type is its type.
|
|
42
|
-
* @param {*} obj The object to build a string for.
|
|
43
|
-
* @return {string} A string describing the given object.
|
|
44
|
-
*/
|
|
45
|
-
webdriver.asserts.objToString = function(obj) {
|
|
46
|
-
var value = webdriver.asserts.getValue_(obj);
|
|
47
|
-
var valueStr = goog.isDef(value) ? String(value) : 'undefined';
|
|
48
|
-
return '<' + valueStr + '> (' + goog.typeOf(value) + ')';
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* A class for determining if a value matches a defined criteria.
|
|
54
|
-
* @param {function} matchFn A function that takes a single argument and whether
|
|
55
|
-
* that argument matches the criteria defined by this Matcher.
|
|
56
|
-
* @param {function} describeFn A function that returns a string describing the
|
|
57
|
-
* criteria for this matcher. The string returned by this function should
|
|
58
|
-
* finish this sentence: "Expected to..."
|
|
59
|
-
* @constructor
|
|
60
|
-
*/
|
|
61
|
-
webdriver.asserts.Matcher = function(matchFn, describeFn) {
|
|
62
|
-
this.matches = matchFn;
|
|
63
|
-
this.describe = describeFn;
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Factory method for a {@code webdriver.asserts.Matcher} that does a
|
|
69
|
-
* {@code ===} comparison between the expected and actual values.
|
|
70
|
-
* @param {*} expected The expected value.
|
|
71
|
-
* @return {webdriver.asserts.Matcher} An equality matcher.
|
|
72
|
-
*/
|
|
73
|
-
webdriver.asserts.Matcher.equals = function(expected) {
|
|
74
|
-
return new webdriver.asserts.Matcher(
|
|
75
|
-
function (actual) {
|
|
76
|
-
return webdriver.asserts.getValue_(expected) ===
|
|
77
|
-
webdriver.asserts.getValue_(actual);
|
|
78
|
-
},
|
|
79
|
-
function () {
|
|
80
|
-
return 'equal ' + webdriver.asserts.objToString(expected);
|
|
81
|
-
});
|
|
82
|
-
};
|
|
83
|
-
goog.exportSymbol('equals', webdriver.asserts.Matcher.equals);
|
|
84
|
-
goog.exportSymbol('is', webdriver.asserts.Matcher.equals);
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Creates a {@code webdriver.asserts.Matcher} that tests if the actual
|
|
89
|
-
* value contains the expected value.
|
|
90
|
-
* @param {string} expected The string expected to be in the actual value.
|
|
91
|
-
* @return {webdriver.asserts.Matcher} A new matcher.
|
|
92
|
-
*/
|
|
93
|
-
webdriver.asserts.Matcher.contains = function(expected) {
|
|
94
|
-
return new webdriver.asserts.Matcher(
|
|
95
|
-
function (actual) {
|
|
96
|
-
var ev = webdriver.asserts.getValue_(expected);
|
|
97
|
-
var av = webdriver.asserts.getValue_(actual);
|
|
98
|
-
return goog.string.contains(av, ev);
|
|
99
|
-
},
|
|
100
|
-
function () {
|
|
101
|
-
return 'contain ' + webdriver.asserts.objToString(expected);
|
|
102
|
-
});
|
|
103
|
-
};
|
|
104
|
-
goog.exportSymbol('contains', webdriver.asserts.Matcher.contains);
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Creates a {@code webdriver.asserts.Matcher} that tests if the actual value
|
|
109
|
-
* matches the given regular expression.
|
|
110
|
-
* @param {RegEx} regex The expected regular expression.
|
|
111
|
-
* @return {webdriver.asserts.Matcher} A new matcher.
|
|
112
|
-
*/
|
|
113
|
-
webdriver.asserts.Matcher.matchesRegex = function(regex) {
|
|
114
|
-
if (!(regex instanceof RegExp)) {
|
|
115
|
-
throw new Error('IllegalArgument; must be a RegExp, but was: ' + regex +
|
|
116
|
-
'(' + goog.typeOf(regex) + ')');
|
|
117
|
-
}
|
|
118
|
-
return new webdriver.asserts.Matcher(
|
|
119
|
-
function (actual) {
|
|
120
|
-
var av = webdriver.asserts.getValue_(actual);
|
|
121
|
-
return av.match(regex) != null;
|
|
122
|
-
},
|
|
123
|
-
function () {
|
|
124
|
-
return 'match regex ' + regex;
|
|
125
|
-
});
|
|
126
|
-
};
|
|
127
|
-
goog.exportSymbol('matchesRegex', webdriver.asserts.Matcher.matchesRegex);
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Creates a {@code webdriver.asserts.Matcher} that tests if the actual value
|
|
132
|
-
* starts with the given string.
|
|
133
|
-
* @param {string} expected The expected beginning of the tested string.
|
|
134
|
-
* @return {webdriver.asserts.Matcher} A new matcher.
|
|
135
|
-
*/
|
|
136
|
-
webdriver.asserts.Matcher.startsWith = function(expected) {
|
|
137
|
-
return new webdriver.asserts.Matcher(
|
|
138
|
-
function (actual) {
|
|
139
|
-
var ev = webdriver.asserts.getValue_(expected);
|
|
140
|
-
var av = webdriver.asserts.getValue_(actual);
|
|
141
|
-
return goog.string.startsWith(av, ev);
|
|
142
|
-
},
|
|
143
|
-
function () {
|
|
144
|
-
return 'start with ' + webdriver.asserts.objToString(expected);
|
|
145
|
-
});
|
|
146
|
-
};
|
|
147
|
-
goog.exportSymbol('startsWith', webdriver.asserts.Matcher.startsWith);
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Creates a {@code webdriver.asserts.Matcher} that tests if the actual value is
|
|
152
|
-
* the same location as the expected value.
|
|
153
|
-
* @param {goog.math.Coordinate} expected The expected location, or a future
|
|
154
|
-
* whose pending result is the expected location.
|
|
155
|
-
* @return {webdriver.asserts.Matcher} A new matcher.
|
|
156
|
-
*/
|
|
157
|
-
webdriver.asserts.Matcher.isTheSameLocationAs = function(expected) {
|
|
158
|
-
return new webdriver.asserts.Matcher(
|
|
159
|
-
function (actual) {
|
|
160
|
-
var ev = webdriver.asserts.getValue_(expected);
|
|
161
|
-
var av = webdriver.asserts.getValue_(actual);
|
|
162
|
-
return goog.math.Coordinate.equals(ev, av);
|
|
163
|
-
},
|
|
164
|
-
function () {
|
|
165
|
-
return 'equal ' + webdriver.asserts.objToString(expected);
|
|
166
|
-
});
|
|
167
|
-
};
|
|
168
|
-
goog.exportSymbol('isTheSameLocationAs',
|
|
169
|
-
webdriver.asserts.Matcher.isTheSameLocationAs);
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Verifies that that given value matches the provided {@code Matcher}. This
|
|
174
|
-
* method has two signatures based on the number of arguments:
|
|
175
|
-
* Two arguments:
|
|
176
|
-
* assertThat(actualValue, matcher)
|
|
177
|
-
* Three arguments:
|
|
178
|
-
* assertThat(failureMessage, actualValue, matcher)
|
|
179
|
-
* @param {string} failureMessage The message to include in the resulting error
|
|
180
|
-
* if actualValue does not match matcher.
|
|
181
|
-
* @param {webdriver.Future|Object} The actual value to verify.
|
|
182
|
-
* @param {webdriver.asserts.Matcher} matcher The object to match the actual
|
|
183
|
-
* value against. If not an instanceof {@code webdriver.Matcher}, will
|
|
184
|
-
* default to the matcher returned by the {@code webdriver.equals} factory
|
|
185
|
-
* function.
|
|
186
|
-
*/
|
|
187
|
-
webdriver.asserts.assertThat = function(a, b, opt_c) {
|
|
188
|
-
var args = goog.array.slice(arguments, 0);
|
|
189
|
-
var message = args.length > 2 ? (args[0] + '\n') : '';
|
|
190
|
-
var future = args.length > 2 ? args[1] : args[0];
|
|
191
|
-
|
|
192
|
-
var matcher = args.length > 2 ? args[2] : args[1];
|
|
193
|
-
if (!(matcher instanceof webdriver.asserts.Matcher)) {
|
|
194
|
-
matcher = webdriver.asserts.Matcher.equals(matcher);
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
var doAssertion = function() {
|
|
198
|
-
if (!matcher.matches(future)) {
|
|
199
|
-
throw new Error(message +
|
|
200
|
-
'Expected to ' + matcher.describe() +
|
|
201
|
-
'\n but was ' + webdriver.asserts.objToString(future));
|
|
202
|
-
}
|
|
203
|
-
};
|
|
204
|
-
|
|
205
|
-
if (future instanceof webdriver.Future) {
|
|
206
|
-
// Schedule a function with the Future's controlling driver so the value
|
|
207
|
-
// is verified after it has been set.
|
|
208
|
-
future.getDriver().callFunction(doAssertion);
|
|
209
|
-
} else {
|
|
210
|
-
doAssertion();
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
goog.exportSymbol('assertThat', webdriver.asserts.assertThat);
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
// ----------------------------------------------------------------------------
|
|
217
|
-
// Define some common xUnit paradigm assertion functions, but do not override
|
|
218
|
-
// any pre-existing function (e.g. if the jsapi is being used with the jsunit
|
|
219
|
-
// library.
|
|
220
|
-
// ----------------------------------------------------------------------------
|
|
221
|
-
|
|
222
|
-
goog.global.fail = goog.global.fail || function(opt_msg) {
|
|
223
|
-
var msg = 'Call to fail()';
|
|
224
|
-
if (opt_msg) {
|
|
225
|
-
msg += ': ' + opt_msg;
|
|
226
|
-
}
|
|
227
|
-
throw new Error(msg);
|
|
228
|
-
};
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
goog.global.assertEquals = goog.global.assertEquals || function(a, b, opt_c) {
|
|
232
|
-
var args = goog.array.slice(arguments, 0);
|
|
233
|
-
var msg = args.length > 2 ? args[0] : '';
|
|
234
|
-
var expected = args.length > 2 ? args[1] : args[0];
|
|
235
|
-
var actual = args.length > 2 ? args[2] : args[1];
|
|
236
|
-
if (expected !== actual) {
|
|
237
|
-
webdriver.asserts.assertThat(msg, actual, equals(expected));
|
|
238
|
-
}
|
|
239
|
-
};
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
goog.global.assertTrue = goog.global.assertTrue || function(a, opt_b) {
|
|
243
|
-
var args = goog.array.slice(arguments, 0);
|
|
244
|
-
if (args.length > 1) {
|
|
245
|
-
goog.global.assertEquals(args[0], true, args[1]);
|
|
246
|
-
} else {
|
|
247
|
-
goog.global.assertEquals(true, args[0]);
|
|
248
|
-
}
|
|
249
|
-
};
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
goog.global.assertFalse = goog.global.assertFalse || function(a, opt_b) {
|
|
253
|
-
var args = goog.array.slice(arguments, 0);
|
|
254
|
-
if (args.length > 1) {
|
|
255
|
-
goog.global.assertEquals(args[0], false, args[1]);
|
|
256
|
-
} else {
|
|
257
|
-
goog.global.assertEquals(false, args[0]);
|
|
258
|
-
}
|
|
259
|
-
};
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* Utility function for inverting a value. If the input is a...
|
|
264
|
-
* <ul>
|
|
265
|
-
* <li>{@code webdriver.asserts.Matcher}, returns a new Matcher that inverts
|
|
266
|
-
* the result of the input</li>
|
|
267
|
-
* <li>{@code webdriver.Future}, returns a new Future whose result will be the
|
|
268
|
-
* inverse of hte input</li>
|
|
269
|
-
* <li>any other type of object, it will be converted to a boolean and
|
|
270
|
-
* inverted</li>
|
|
271
|
-
* </ul>
|
|
272
|
-
* @param {*) input The value to invert.
|
|
273
|
-
* @return {webdriver.asserts.Matcher|webdriver.Future|boolean} The inverted
|
|
274
|
-
* value according to the rules defined above.
|
|
275
|
-
*/
|
|
276
|
-
webdriver.not = function(input) {
|
|
277
|
-
if (input instanceof webdriver.Future) {
|
|
278
|
-
var invertedFuture = new webdriver.Future(input.getDriver());
|
|
279
|
-
goog.events.listen(input, goog.events.EventType.CHANGE,
|
|
280
|
-
function() {
|
|
281
|
-
invertedFuture.setValue(!!!input.getValue());
|
|
282
|
-
});
|
|
283
|
-
return invertedFuture;
|
|
284
|
-
} else if (input instanceof webdriver.asserts.Matcher) {
|
|
285
|
-
return new webdriver.asserts.Matcher(
|
|
286
|
-
function (actual) {
|
|
287
|
-
return !input.matches(actual);
|
|
288
|
-
},
|
|
289
|
-
function () {
|
|
290
|
-
return 'not ' + input.describe();
|
|
291
|
-
});
|
|
292
|
-
} else {
|
|
293
|
-
return !!!value;
|
|
294
|
-
}
|
|
295
|
-
};
|
|
296
|
-
goog.exportSymbol('not', webdriver.not);
|