lebowski 0.1.1 → 0.2.0
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/History.md +17 -1
- data/Manifest.txt +8 -0
- data/README.md +6 -0
- data/lib/lebowski/foundation/application.rb +340 -74
- data/lib/lebowski/foundation/core.rb +23 -0
- data/lib/lebowski/foundation/dom_element.rb +15 -0
- data/lib/lebowski/foundation/errors/timeout.rb +5 -0
- data/lib/lebowski/foundation/mixins/collection_item_view_support.rb +5 -0
- data/lib/lebowski/foundation/mixins/define_paths_support.rb +318 -0
- data/lib/lebowski/foundation/mixins/delegate_support.rb +5 -0
- data/lib/lebowski/foundation/mixins/frame_application_context_support.rb +37 -0
- data/lib/lebowski/foundation/mixins/inline_text_field_support.rb +5 -0
- data/lib/lebowski/foundation/mixins/key_check.rb +5 -0
- data/lib/lebowski/foundation/mixins/list_item_view_support.rb +5 -0
- data/lib/lebowski/foundation/mixins/positioned_element.rb +24 -0
- data/lib/lebowski/foundation/mixins/stall_support.rb +5 -0
- data/lib/lebowski/foundation/mixins/user_actions.rb +37 -8
- data/lib/lebowski/foundation/mixins/wait_actions.rb +5 -0
- data/lib/lebowski/foundation/object_array.rb +96 -1
- data/lib/lebowski/foundation/proxy_factory.rb +2 -0
- data/lib/lebowski/foundation/proxy_object.rb +128 -130
- data/lib/lebowski/foundation/views/select_button.rb +69 -0
- data/lib/lebowski/foundation/views/view.rb +10 -0
- data/lib/lebowski/foundation/views/web.rb +26 -0
- data/lib/lebowski/foundation.rb +10 -0
- data/lib/lebowski/runtime/errors/remote_control_command_execution_error.rb +5 -0
- data/lib/lebowski/runtime/errors/remote_control_command_timeout_error.rb +5 -0
- data/lib/lebowski/runtime/errors/remote_control_error.rb +5 -0
- data/lib/lebowski/runtime/errors/selenium_server_error.rb +5 -0
- data/lib/lebowski/runtime/object_encoder.rb +5 -0
- data/lib/lebowski/runtime/sprout_core_driver.rb +5 -0
- data/lib/lebowski/runtime/sprout_core_extensions.rb +114 -0
- data/lib/lebowski/runtime.rb +5 -0
- data/lib/lebowski/scui/mixins/link_support.rb +32 -0
- data/lib/lebowski/scui/mixins/node_item_view_support.rb +50 -13
- data/lib/lebowski/scui/mixins/terminal_view_support.rb +30 -0
- data/lib/lebowski/scui/views/color_well.rb +48 -0
- data/lib/lebowski/scui/views/combo_box.rb +90 -87
- data/lib/lebowski/scui/views/content_editable.rb +422 -0
- data/lib/lebowski/scui/views/date_picker.rb +70 -58
- data/lib/lebowski/scui/views/linkit.rb +8 -0
- data/lib/lebowski/scui/views/select_field_tab.rb +30 -0
- data/lib/lebowski/scui.rb +18 -0
- data/lib/lebowski/version.rb +2 -2
- data/resources/user-extensions.js +293 -11
- metadata +69 -25
@@ -2,7 +2,7 @@
|
|
2
2
|
// Project: Lebowski Framework - The SproutCore Test Automation Framework
|
3
3
|
// License: Licensed under MIT license (see License.txt)
|
4
4
|
// ==========================================================================
|
5
|
-
/*globals Selenium PageBot selenium */
|
5
|
+
/*globals Selenium PageBot selenium eval_css*/
|
6
6
|
|
7
7
|
/**
|
8
8
|
This file contains all Lebowski framework extensions for the Selenium Core framework.
|
@@ -716,6 +716,87 @@ ScExt.CollectionView = {
|
|
716
716
|
|
717
717
|
};
|
718
718
|
|
719
|
+
ScExt.RangeGenerator = {
|
720
|
+
|
721
|
+
generate: function(params) {
|
722
|
+
var startElementSelector = params['startElementSelector'];
|
723
|
+
var startElementIndex = params['startElementIndex'];
|
724
|
+
var startOffset = params['startOffset'];
|
725
|
+
var startBefore = params['startBefore'];
|
726
|
+
var startAfter = params['startAfter'];
|
727
|
+
var endElementSelector = params['endElementSelector'];
|
728
|
+
var endElementIndex = params['endElementIndex'];
|
729
|
+
var endOffset = params['endOffset'];
|
730
|
+
var endBefore = params['endBefore'];
|
731
|
+
var endAfter = params['endAfter'];
|
732
|
+
var collapseToStart = params['collapseToStart'];
|
733
|
+
var collapseToEnd = params['collapseToEnd'];
|
734
|
+
|
735
|
+
var startElement = eval_css(startElementSelector, selenium.browserbot.getDocument())[startElementIndex];
|
736
|
+
var endElement = eval_css(endElementSelector, selenium.browserbot.getDocument())[endElementIndex];
|
737
|
+
|
738
|
+
var startElemOffset = this._parseRangeElementOffset(startElement, startOffset);
|
739
|
+
var endElemOffset = this._parseRangeElementOffset(endElement, endOffset);
|
740
|
+
|
741
|
+
var range = selenium.browserbot.getDocument().createRange();
|
742
|
+
|
743
|
+
if (startBefore) {
|
744
|
+
range.setStartBefore(startElemOffset[0]);
|
745
|
+
} else if (startAfter) {
|
746
|
+
range.setStartAfter(startElemOffset[0]);
|
747
|
+
} else {
|
748
|
+
range.setStart(startElemOffset[0], startElemOffset[1]);
|
749
|
+
}
|
750
|
+
|
751
|
+
if (endBefore) {
|
752
|
+
range.setEndBefore(endElemOffset[0]);
|
753
|
+
} else if (endAfter) {
|
754
|
+
range.setEndAfter(endElemOffset[0]);
|
755
|
+
} else {
|
756
|
+
range.setEnd(endElemOffset[0], endElemOffset[1]);
|
757
|
+
}
|
758
|
+
|
759
|
+
if (collapseToStart === true) {
|
760
|
+
range.collapse(true);
|
761
|
+
} else if (collapseToEnd === true) {
|
762
|
+
range.collapse(false);
|
763
|
+
}
|
764
|
+
|
765
|
+
return range;
|
766
|
+
},
|
767
|
+
|
768
|
+
_parseRangeElementOffset: function(element, offset) {
|
769
|
+
if (element.childNodes.length === 0) {
|
770
|
+
return [element, 0];
|
771
|
+
}
|
772
|
+
|
773
|
+
else if (typeof offset === 'number') {
|
774
|
+
return [element, offset];
|
775
|
+
}
|
776
|
+
|
777
|
+
// @tnN-M
|
778
|
+
else if (typeof offset === 'string') {
|
779
|
+
var matches = offset.match(/@tn(\d+)-(\d+)/i);
|
780
|
+
if (matches && matches.length === 3) {
|
781
|
+
var tnPos = matches[1]*1;
|
782
|
+
var tnOffset = matches[2]*1;
|
783
|
+
var tnCounter = 0;
|
784
|
+
for (var i = 0; i < element.childNodes.length; i++) {
|
785
|
+
var node = element.childNodes[i];
|
786
|
+
if (node.nodeName === "#text") {
|
787
|
+
if (tnPos === tnCounter) {
|
788
|
+
return [node, tnOffset];
|
789
|
+
}
|
790
|
+
tnCounter = tnCounter + 1;
|
791
|
+
}
|
792
|
+
}
|
793
|
+
}
|
794
|
+
}
|
795
|
+
|
796
|
+
return [element, 0];
|
797
|
+
}
|
798
|
+
};
|
799
|
+
|
719
800
|
///////////////////// Selenium Core API Extensions - Actions for Testing ////////////////////////////////////
|
720
801
|
|
721
802
|
/**
|
@@ -802,16 +883,15 @@ Selenium.prototype.doOpenScApplication = function(appRootPath, timeoutInSeconds)
|
|
802
883
|
|
803
884
|
if (win.location.href !== loc) win.location.href = loc;
|
804
885
|
|
805
|
-
|
806
|
-
|
886
|
+
return this.doUpdateScApplicationContext(this._sc_applicationName, timeoutInSeconds);
|
887
|
+
};
|
888
|
+
|
889
|
+
Selenium.prototype.doUpdateScApplicationContext = function(appName, timeoutInSeconds) {
|
890
|
+
|
891
|
+
if (typeof(appName) !== "string" || appName.length === 0) appName = this._sc_applicationName;
|
807
892
|
|
808
893
|
var timeout = timeoutInSeconds ? (parseInt(timeoutInSeconds, 10) * 1000) : Selenium.DEFAULT_TIMEOUT;
|
809
894
|
|
810
|
-
// Now run the wait function which will keep checking until
|
811
|
-
// either the SproutCore framework and application are found or
|
812
|
-
// the time out is reached. The function will also set up some
|
813
|
-
// core global variables to make it easier to program againt
|
814
|
-
// the SC framework and application
|
815
895
|
return Selenium.decorateFunctionWithTimeout(function () {
|
816
896
|
|
817
897
|
var win = selenium.browserbot.getCurrentWindow();
|
@@ -827,6 +907,7 @@ Selenium.prototype.doOpenScApplication = function(appRootPath, timeoutInSeconds)
|
|
827
907
|
|
828
908
|
return true;
|
829
909
|
}, timeout, this);
|
910
|
+
|
830
911
|
};
|
831
912
|
|
832
913
|
///////////////////// Selenium Core API Extensions - Actions ////////////////////////////////////
|
@@ -835,7 +916,8 @@ Selenium.prototype.doOpenScApplication = function(appRootPath, timeoutInSeconds)
|
|
835
916
|
Move the application window to a given x-y coordinate
|
836
917
|
*/
|
837
918
|
Selenium.prototype.doScWindowMoveTo = function(x, y) {
|
838
|
-
var win =
|
919
|
+
var win = this.browserbot.getCurrentWindow();
|
920
|
+
win.focus();
|
839
921
|
win.moveTo(x*1, y*1);
|
840
922
|
};
|
841
923
|
|
@@ -843,7 +925,8 @@ Selenium.prototype.doScWindowMoveTo = function(x, y) {
|
|
843
925
|
Resize the application window by a width and height
|
844
926
|
*/
|
845
927
|
Selenium.prototype.doScWindowResizeTo = function(width, height) {
|
846
|
-
var win =
|
928
|
+
var win = this.browserbot.getCurrentWindow();
|
929
|
+
win.focus();
|
847
930
|
win.resizeTo(width*1, height*1);
|
848
931
|
};
|
849
932
|
|
@@ -851,11 +934,130 @@ Selenium.prototype.doScWindowResizeTo = function(width, height) {
|
|
851
934
|
Maximizes the applicaiton window
|
852
935
|
*/
|
853
936
|
Selenium.prototype.doScWindowMaximize = function() {
|
854
|
-
var win =
|
937
|
+
var win = this.browserbot.getCurrentWindow();
|
938
|
+
win.focus();
|
855
939
|
win.resizeTo(window.screen.availWidth, window.screen.availHeight);
|
856
940
|
win.moveTo(1,1); // Slight offset from origin so that Firefox will actually move the window
|
857
941
|
};
|
858
942
|
|
943
|
+
/**
|
944
|
+
Used to select an open window based on locator values. The window that is selected will
|
945
|
+
become the current context is which all commands there after are directed towards.
|
946
|
+
|
947
|
+
Expected input:
|
948
|
+
|
949
|
+
{
|
950
|
+
locatorType: "location" | "title" | "name" | "top"
|
951
|
+
locatorValue: string | regex
|
952
|
+
}
|
953
|
+
|
954
|
+
To select the main application window, just set the locationType to be "top", no locator
|
955
|
+
value is needed.
|
956
|
+
|
957
|
+
@see #_getScOpenedWindow
|
958
|
+
*/
|
959
|
+
Selenium.prototype.doScSelectWindow = function(params) {
|
960
|
+
var decodedParams = ScExt.ObjectDecoder.decodeHash(params);
|
961
|
+
var locatorType = decodedParams['locatorType'];
|
962
|
+
var locatorValue = decodedParams['locatorValue'];
|
963
|
+
|
964
|
+
if (locatorType === "top") {
|
965
|
+
this.browserbot._selectTopWindow();
|
966
|
+
} else {
|
967
|
+
var name = this._getScOpenedWindowName(locatorType, locatorValue);
|
968
|
+
this.browserbot._selectWindowByName(name);
|
969
|
+
}
|
970
|
+
|
971
|
+
var win = this.browserbot.getCurrentWindow();
|
972
|
+
if (win) win.focus();
|
973
|
+
};
|
974
|
+
|
975
|
+
/**
|
976
|
+
Closes an opened window based on a matching locator type and value
|
977
|
+
*/
|
978
|
+
Selenium.prototype.doScCloseOpenedWindow = function(params) {
|
979
|
+
var decodedParams = ScExt.ObjectDecoder.decodeHash(params);
|
980
|
+
var locatorType = decodedParams['locatorType'];
|
981
|
+
var locatorValue = decodedParams['locatorValue'];
|
982
|
+
|
983
|
+
var win = this._getScOpenedWindow(locatorType, locatorValue);
|
984
|
+
delete this.browserbot.openedWindows[win.name];
|
985
|
+
if (win) win.close();
|
986
|
+
};
|
987
|
+
|
988
|
+
/**
|
989
|
+
Checks if there is a opened window matching a given locator strategy. Expected input:
|
990
|
+
|
991
|
+
{
|
992
|
+
locatorType: "location" | "title" | "name"
|
993
|
+
locatorValue: string | regex
|
994
|
+
}
|
995
|
+
|
996
|
+
@see #_getScOpenedWindow
|
997
|
+
*/
|
998
|
+
Selenium.prototype.isScOpenedWindow = function(params) {
|
999
|
+
var decodedParams = ScExt.ObjectDecoder.decodeHash(params);
|
1000
|
+
var locatorType = decodedParams['locatorType'];
|
1001
|
+
var locatorValue = decodedParams['locatorValue'];
|
1002
|
+
|
1003
|
+
// This is a hack for the Safari browser. I'm not sure why this is happening, but if you
|
1004
|
+
// open a window using window.open, call this method, and then call window.open
|
1005
|
+
// again, and where you supply the exact same name to open, Selenium's console window
|
1006
|
+
// will get redirect to the url supplied to the open method. It's really weird. I'm
|
1007
|
+
// sure it has something to do with how selenium has changed the default open method.
|
1008
|
+
// In any case, by updating the openedWindows object it, for whatever reason, fixes
|
1009
|
+
// the problem. I don't like this hack, but I can't think of what the root cause is.
|
1010
|
+
// Requires further investigation with the Selenium framework.
|
1011
|
+
var safariHack = '__safari_hack__' + Math.round(100000 * Math.random());
|
1012
|
+
this.browserbot.openedWindows[safariHack] = {};
|
1013
|
+
delete this.browserbot.openedWindows[safariHack];
|
1014
|
+
|
1015
|
+
var name = this._getScOpenedWindowName(locatorType, locatorValue);
|
1016
|
+
return name !== null;
|
1017
|
+
};
|
1018
|
+
|
1019
|
+
/**
|
1020
|
+
Returns an opened window matching a given locator type and value. The locator type
|
1021
|
+
can either be 'name', 'title', or 'location'. The locator value can either be a string
|
1022
|
+
or a regular expression. The assigned name of the first window that matches the locator
|
1023
|
+
will be returned, otherwise null is returned.
|
1024
|
+
*/
|
1025
|
+
Selenium.prototype._getScOpenedWindowName = function(locatorType, locatorValue) {
|
1026
|
+
var openedWindows = this.browserbot.openedWindows;
|
1027
|
+
var win = null;
|
1028
|
+
var value = null;
|
1029
|
+
|
1030
|
+
for (name in openedWindows) {
|
1031
|
+
win = openedWindows[name];
|
1032
|
+
if (!win || this.browserbot._windowClosed(win)) continue;
|
1033
|
+
if (locatorType === 'location') {
|
1034
|
+
value = win.location.href;
|
1035
|
+
} else if (locatorType === 'title') {
|
1036
|
+
try { value = win.document.title; } catch (e) { /* swallow any permission denied errors here */ }
|
1037
|
+
} else if (locatorType === 'name') {
|
1038
|
+
value = name;
|
1039
|
+
} else {
|
1040
|
+
return null;
|
1041
|
+
}
|
1042
|
+
|
1043
|
+
if (typeof locatorValue === "string" && locatorValue === value) {
|
1044
|
+
return name;
|
1045
|
+
} else if (locatorValue instanceof RegExp && value.match(locatorValue)) {
|
1046
|
+
return name;
|
1047
|
+
}
|
1048
|
+
}
|
1049
|
+
|
1050
|
+
return null;
|
1051
|
+
};
|
1052
|
+
|
1053
|
+
Selenium.prototype._getScOpenedWindow = function(locatorType, locatorValue) {
|
1054
|
+
var name = this._getScOpenedWindowName(locatorType, locatorValue);
|
1055
|
+
//var win = this.browserbot.getWindowByName(name, true);
|
1056
|
+
var win = this.browserbot.openedWindows[name];
|
1057
|
+
if (!win) return null;
|
1058
|
+
return win;
|
1059
|
+
};
|
1060
|
+
|
859
1061
|
/**
|
860
1062
|
Action to call a view's scrollToVisible method. The path must point
|
861
1063
|
to an actual SC view object.
|
@@ -1018,6 +1220,58 @@ Selenium.prototype.doScCoreQueryDone = function(handle) {
|
|
1018
1220
|
this._unregisterCoreQueryObject(handle);
|
1019
1221
|
};
|
1020
1222
|
|
1223
|
+
/**
|
1224
|
+
Used to select a range in a DOM structure
|
1225
|
+
*/
|
1226
|
+
Selenium.prototype.doSelectRange = function(params) {
|
1227
|
+
var decodedParams = ScExt.ObjectDecoder.decodeHash(params);
|
1228
|
+
var range = ScExt.RangeGenerator.generate(decodedParams);
|
1229
|
+
|
1230
|
+
var selection = this.browserbot.getCurrentWindow().getSelection();
|
1231
|
+
selection.removeAllRanges();
|
1232
|
+
selection.addRange(range);
|
1233
|
+
};
|
1234
|
+
|
1235
|
+
/**
|
1236
|
+
Used to delete content within a given range
|
1237
|
+
*/
|
1238
|
+
Selenium.prototype.doRangeDeleteContent = function(params) {
|
1239
|
+
var decodedParams = ScExt.ObjectDecoder.decodeHash(params);
|
1240
|
+
var range = ScExt.RangeGenerator.generate(decodedParams);
|
1241
|
+
|
1242
|
+
var selection = this.browserbot.getCurrentWindow().getSelection();
|
1243
|
+
selection.removeAllRanges();
|
1244
|
+
selection.addRange(range);
|
1245
|
+
range.deleteContents();
|
1246
|
+
|
1247
|
+
if (!$SC.browser.mozilla) {
|
1248
|
+
range = this.browserbot.getDocument().createRange();
|
1249
|
+
selection.removeAllRanges();
|
1250
|
+
selection.addRange(range);
|
1251
|
+
}
|
1252
|
+
};
|
1253
|
+
|
1254
|
+
/**
|
1255
|
+
Used to insert content at the beginning of a given range
|
1256
|
+
*/
|
1257
|
+
Selenium.prototype.doRangeInsertContent = function(params) {
|
1258
|
+
var decodedParams = ScExt.ObjectDecoder.decodeHash(params);
|
1259
|
+
var range = ScExt.RangeGenerator.generate(decodedParams);
|
1260
|
+
range.collapse(true);
|
1261
|
+
|
1262
|
+
var content = decodedParams['content'];
|
1263
|
+
var doc = this.browserbot.getDocument();
|
1264
|
+
var selection = this.browserbot.getCurrentWindow().getSelection();
|
1265
|
+
selection.removeAllRanges();
|
1266
|
+
selection.addRange(range);
|
1267
|
+
|
1268
|
+
if ($SC.browser.msie) {
|
1269
|
+
doc.selection.createRange().pasteHTML(content);
|
1270
|
+
} else {
|
1271
|
+
doc.execCommand('inserthtml', false, content);
|
1272
|
+
}
|
1273
|
+
};
|
1274
|
+
|
1021
1275
|
///////////////////// Selenium Core API Extensions - Accessors ////////////////////////////////////
|
1022
1276
|
|
1023
1277
|
/**
|
@@ -1141,6 +1395,14 @@ Selenium.prototype.getScObjectArrayIndexLookup = function(path, lookupParams) {
|
|
1141
1395
|
return indexes;
|
1142
1396
|
};
|
1143
1397
|
|
1398
|
+
/**
|
1399
|
+
Gets the count of elements that match the given CSS selector
|
1400
|
+
*/
|
1401
|
+
Selenium.prototype.getCssSelectorCount = function(selector) {
|
1402
|
+
var result = this.browserbot.evaluateCssSelectorCount(selector, this.browserbot.getDocument());
|
1403
|
+
return result;
|
1404
|
+
};
|
1405
|
+
|
1144
1406
|
/////// SC Core Query Specific Selenium Calls /////////////////
|
1145
1407
|
|
1146
1408
|
/**
|
@@ -1310,6 +1572,16 @@ Selenium.prototype.getScCoreQueryElementTag = function(handle, elemIndex) {
|
|
1310
1572
|
return elem.tagName;
|
1311
1573
|
};
|
1312
1574
|
|
1575
|
+
Selenium.prototype.getElementTagName = function(selector, elemIndex) {
|
1576
|
+
var elem = eval_css(selector, selenium.browserbot.getDocument())[elemIndex];
|
1577
|
+
return elem.tagName.toLowerCase();
|
1578
|
+
};
|
1579
|
+
|
1580
|
+
Selenium.prototype.getElementChildNodesCount = function(selector, elemIndex) {
|
1581
|
+
var elem = eval_css(selector, selenium.browserbot.getDocument())[elemIndex];
|
1582
|
+
return elem.childNodes.length;
|
1583
|
+
};
|
1584
|
+
|
1313
1585
|
/////// SC Collection View Specific Selenium Calls /////////////////
|
1314
1586
|
|
1315
1587
|
Selenium.prototype.getScCollectionViewContentGroupIndexes = function(path) {
|
@@ -1419,3 +1691,13 @@ PageBot.prototype.locateElementByScCoreQuery = function(text) {
|
|
1419
1691
|
return elem;
|
1420
1692
|
|
1421
1693
|
};
|
1694
|
+
|
1695
|
+
/**
|
1696
|
+
Returns the number of DOM elements that match the given css selector.
|
1697
|
+
|
1698
|
+
(Not entirely sure why this wasn't already part of the browser bot.)
|
1699
|
+
*/
|
1700
|
+
PageBot.prototype.evaluateCssSelectorCount = function(css, document) {
|
1701
|
+
var elements = eval_css(css, document);
|
1702
|
+
return elements.length;
|
1703
|
+
};
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lebowski
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 23
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Michael Cohen
|
@@ -9,49 +15,73 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-
|
18
|
+
date: 2010-08-20 00:00:00 -04:00
|
13
19
|
default_executable:
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
22
|
name: selenium-client
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
20
26
|
requirements:
|
21
27
|
- - ">="
|
22
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 59
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 2
|
33
|
+
- 18
|
23
34
|
version: 1.2.18
|
24
|
-
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
25
37
|
- !ruby/object:Gem::Dependency
|
26
38
|
name: rspec
|
27
|
-
|
28
|
-
|
29
|
-
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
30
42
|
requirements:
|
31
43
|
- - ">="
|
32
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 27
|
46
|
+
segments:
|
47
|
+
- 1
|
48
|
+
- 3
|
49
|
+
- 0
|
33
50
|
version: 1.3.0
|
34
|
-
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
35
53
|
- !ruby/object:Gem::Dependency
|
36
54
|
name: rubyforge
|
37
|
-
|
38
|
-
|
39
|
-
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
40
58
|
requirements:
|
41
59
|
- - ">="
|
42
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 7
|
62
|
+
segments:
|
63
|
+
- 2
|
64
|
+
- 0
|
65
|
+
- 4
|
43
66
|
version: 2.0.4
|
44
|
-
|
67
|
+
type: :development
|
68
|
+
version_requirements: *id003
|
45
69
|
- !ruby/object:Gem::Dependency
|
46
70
|
name: hoe
|
47
|
-
|
48
|
-
|
49
|
-
|
71
|
+
prerelease: false
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
50
74
|
requirements:
|
51
75
|
- - ">="
|
52
76
|
- !ruby/object:Gem::Version
|
53
|
-
|
54
|
-
|
77
|
+
hash: 21
|
78
|
+
segments:
|
79
|
+
- 2
|
80
|
+
- 6
|
81
|
+
- 1
|
82
|
+
version: 2.6.1
|
83
|
+
type: :development
|
84
|
+
version_requirements: *id004
|
55
85
|
description: " \n Lebowski is a test automation framework designed for full feature, integration, \n and regression testing of SproutCore applications.\n \n"
|
56
86
|
email:
|
57
87
|
- michael.lee.cohen@gmail.com
|
@@ -94,7 +124,9 @@ files:
|
|
94
124
|
- lib/lebowski/foundation/mixins/collection_item_view_support.rb
|
95
125
|
- lib/lebowski/foundation/mixins/list_item_view_support.rb
|
96
126
|
- lib/lebowski/foundation/mixins/inline_text_field_support.rb
|
127
|
+
- lib/lebowski/foundation/mixins/frame_application_context_support.rb
|
97
128
|
- lib/lebowski/foundation/mixins/stall_support.rb
|
129
|
+
- lib/lebowski/foundation/mixins/define_paths_support.rb
|
98
130
|
- lib/lebowski/foundation/proxy_object.rb
|
99
131
|
- lib/lebowski/foundation/sc_object.rb
|
100
132
|
- lib/lebowski/foundation/object_array.rb
|
@@ -115,6 +147,8 @@ files:
|
|
115
147
|
- lib/lebowski/foundation/views/list.rb
|
116
148
|
- lib/lebowski/foundation/views/list_item.rb
|
117
149
|
- lib/lebowski/foundation/views/grid.rb
|
150
|
+
- lib/lebowski/foundation/views/web.rb
|
151
|
+
- lib/lebowski/foundation/views/select_button.rb
|
118
152
|
- lib/lebowski/foundation/views/support/simple_item_array.rb
|
119
153
|
- lib/lebowski/foundation/panes/pane.rb
|
120
154
|
- lib/lebowski/foundation/panes/main.rb
|
@@ -131,8 +165,12 @@ files:
|
|
131
165
|
- lib/lebowski/scui/views/combo_box.rb
|
132
166
|
- lib/lebowski/scui/views/date_picker.rb
|
133
167
|
- lib/lebowski/scui/views/linkit.rb
|
168
|
+
- lib/lebowski/scui/views/select_field_tab.rb
|
169
|
+
- lib/lebowski/scui/views/color_well.rb
|
170
|
+
- lib/lebowski/scui/views/content_editable.rb
|
134
171
|
- lib/lebowski/scui/mixins/node_item_view_support.rb
|
135
172
|
- lib/lebowski/scui/mixins/terminal_view_support.rb
|
173
|
+
- lib/lebowski/scui/mixins/link_support.rb
|
136
174
|
- lib/lebowski/spec.rb
|
137
175
|
- lib/lebowski/spec/core.rb
|
138
176
|
- lib/lebowski/spec/util.rb
|
@@ -157,7 +195,7 @@ licenses: []
|
|
157
195
|
post_install_message: |
|
158
196
|
**************************************************
|
159
197
|
|
160
|
-
Thank you for installing lebowski-0.
|
198
|
+
Thank you for installing lebowski-0.2.0
|
161
199
|
|
162
200
|
Please be sure to read the README.md and History.md
|
163
201
|
for useful information on how to use this framework
|
@@ -173,27 +211,33 @@ post_install_message: |
|
|
173
211
|
|
174
212
|
rdoc_options:
|
175
213
|
- --main
|
176
|
-
- README.
|
214
|
+
- README.txt
|
177
215
|
require_paths:
|
178
216
|
- lib
|
179
217
|
required_ruby_version: !ruby/object:Gem::Requirement
|
218
|
+
none: false
|
180
219
|
requirements:
|
181
220
|
- - ">="
|
182
221
|
- !ruby/object:Gem::Version
|
222
|
+
hash: 3
|
223
|
+
segments:
|
224
|
+
- 0
|
183
225
|
version: "0"
|
184
|
-
version:
|
185
226
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
227
|
+
none: false
|
186
228
|
requirements:
|
187
229
|
- - ">="
|
188
230
|
- !ruby/object:Gem::Version
|
231
|
+
hash: 3
|
232
|
+
segments:
|
233
|
+
- 0
|
189
234
|
version: "0"
|
190
|
-
version:
|
191
235
|
requirements: []
|
192
236
|
|
193
237
|
rubyforge_project: lebowski
|
194
|
-
rubygems_version: 1.3.
|
238
|
+
rubygems_version: 1.3.7
|
195
239
|
signing_key:
|
196
240
|
specification_version: 3
|
197
|
-
summary: lebowski 0.
|
241
|
+
summary: lebowski 0.2.0
|
198
242
|
test_files: []
|
199
243
|
|