lebowski 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|