rufus 0.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/.gitignore +61 -0
- data/.gitmodules +6 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +51 -0
- data/README.md +120 -0
- data/RufusApp/Frank/features/my_first.feature +12 -0
- data/RufusApp/Frank/features/step_definitions/launch_steps.rb +20 -0
- data/RufusApp/Frank/features/support/env.rb +8 -0
- data/RufusApp/Frank/frank_static_resources.bundle/ViewAttributeMapping.plist +63 -0
- data/RufusApp/Frank/frank_static_resources.bundle/ViewAttributeMappingMac.plist +99 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/ajax-loader.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/file.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/folder-closed.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/folder.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/loader.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/loader.png +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/minus.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/plus.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-black-line.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-black.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-default-line.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-default.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-famfamfam-line.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-famfamfam.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-gray-line.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-gray.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-red-line.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-red.gif +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/index.html +86 -0
- data/RufusApp/Frank/frank_static_resources.bundle/index.html.haml +76 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/accessible_views_view.coffee +41 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/accessible_views_view.js +46 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/controller.coffee +134 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/controller.js +139 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/details_view.coffee +42 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/details_view.js +51 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/dropdown_control.coffee +64 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/dropdown_control.js +73 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/ersatz_model.coffee +46 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/ersatz_model.js +60 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/ersatz_view.coffee +167 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/ersatz_view.js +205 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/experiment_bar_model.coffee +10 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/experiment_bar_model.js +17 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/experiment_bar_view.coffee +44 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/experiment_bar_view.js +63 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/frank.coffee +96 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/frank.js +146 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/lib/backbone.js +1431 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/lib/coffee-script.js +8 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/lib/jquery-ui.min.js +405 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/lib/jquery.min.js +4 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/lib/jquery.treeview.js +251 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/lib/json2.js +481 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/lib/raphael.js +5815 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/lib/require.js +2053 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/lib/underscore.js +1059 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/main.coffee +27 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/main.js +29 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/tabs_controller.coffee +13 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/tabs_controller.js +22 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/toast_controller.coffee +15 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/toast_controller.js +28 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/transform_stack.coffee +59 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/transform_stack.js +78 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/tree_view.coffee +53 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/tree_view.js +64 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/view_hier_model.coffee +37 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/view_hier_model.js +48 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/view_model.coffee +39 -0
- data/RufusApp/Frank/frank_static_resources.bundle/js/view_model.js +62 -0
- data/RufusApp/Frank/frank_static_resources.bundle/pictos/index.html +329 -0
- data/RufusApp/Frank/frank_static_resources.bundle/pictos/pictos-web.eot +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/pictos/pictos-web.svg +114 -0
- data/RufusApp/Frank/frank_static_resources.bundle/pictos/pictos-web.ttf +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/pictos/pictos-web.woff +0 -0
- data/RufusApp/Frank/frank_static_resources.bundle/pictos/pictos.css +20 -0
- data/RufusApp/Frank/frank_static_resources.bundle/pictos/pictos_base64.css +18 -0
- data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/css/symbiote.css +1 -0
- data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_elements.scss +28 -0
- data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_header.scss +61 -0
- data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_inspect_tabs_list_tabs.scss +194 -0
- data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_jquery.treeview.scss +68 -0
- data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_jqui.scss +2 -0
- data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_layout.scss +13 -0
- data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_mixins.sass +137 -0
- data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_reset.scss +32 -0
- data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_selector_test_toolbar.scss +81 -0
- data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_solarized.scss +16 -0
- data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_typography.scss +11 -0
- data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_unicode.scss +3 -0
- data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_z_index.scss +2 -0
- data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/symbiote.scss +26 -0
- data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/Default-568h@2x.png +0 -0
- data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/Default.png +0 -0
- data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/Default@2x.png +0 -0
- data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/Info.plist +0 -0
- data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/PkgInfo +1 -0
- data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/ResourceRules.plist +25 -0
- data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/RufusApp +0 -0
- data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/RufusPageViewController.nib +0 -0
- data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/_CodeSignature/CodeResources +60 -0
- data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/embedded.mobileprovision +0 -0
- data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/en.lproj/InfoPlist.strings +0 -0
- data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/en.lproj/RUViewController.nib +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/Default-568h@2x.png +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/Default.png +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/Default@2x.png +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/Info.plist +51 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/PkgInfo +1 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/RufusApp +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/RufusPageViewController.nib +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/en.lproj/InfoPlist.strings +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/en.lproj/RUViewController.nib +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/ViewAttributeMapping.plist +63 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/ViewAttributeMappingMac.plist +99 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/ajax-loader.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/file.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/folder-closed.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/folder.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/loader.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/loader.png +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/minus.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/plus.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-black-line.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-black.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-default-line.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-default.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-famfamfam-line.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-famfamfam.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-gray-line.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-gray.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-red-line.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-red.gif +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/index.html +86 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/index.html.haml +76 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/accessible_views_view.coffee +41 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/accessible_views_view.js +46 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/controller.coffee +134 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/controller.js +139 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/details_view.coffee +42 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/details_view.js +51 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/dropdown_control.coffee +64 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/dropdown_control.js +73 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/ersatz_model.coffee +46 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/ersatz_model.js +60 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/ersatz_view.coffee +167 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/ersatz_view.js +205 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/experiment_bar_model.coffee +10 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/experiment_bar_model.js +17 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/experiment_bar_view.coffee +44 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/experiment_bar_view.js +63 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/frank.coffee +96 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/frank.js +146 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/backbone.js +1431 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/coffee-script.js +8 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/jquery-ui.min.js +405 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/jquery.min.js +4 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/jquery.treeview.js +251 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/json2.js +481 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/raphael.js +5815 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/require.js +2053 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/underscore.js +1059 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/main.coffee +27 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/main.js +29 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/tabs_controller.coffee +13 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/tabs_controller.js +22 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/toast_controller.coffee +15 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/toast_controller.js +28 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/transform_stack.coffee +59 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/transform_stack.js +78 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/tree_view.coffee +53 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/tree_view.js +64 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/view_hier_model.coffee +37 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/view_hier_model.js +48 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/view_model.coffee +39 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/view_model.js +62 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/pictos/index.html +329 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/pictos/pictos-web.eot +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/pictos/pictos-web.svg +114 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/pictos/pictos-web.ttf +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/pictos/pictos-web.woff +0 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/pictos/pictos.css +20 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/pictos/pictos_base64.css +18 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/css/symbiote.css +1 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_elements.scss +28 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_header.scss +61 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_inspect_tabs_list_tabs.scss +194 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_jquery.treeview.scss +68 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_jqui.scss +2 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_layout.scss +13 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_mixins.sass +137 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_reset.scss +32 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_selector_test_toolbar.scss +81 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_solarized.scss +16 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_typography.scss +11 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_unicode.scss +3 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_z_index.scss +2 -0
- data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/symbiote.scss +26 -0
- data/RufusApp/Frank/frankified_build/RufusApp.app/Default-568h@2x.png +0 -0
- data/RufusApp/Frank/frankified_build/RufusApp.app/Default.png +0 -0
- data/RufusApp/Frank/frankified_build/RufusApp.app/Default@2x.png +0 -0
- data/RufusApp/Frank/frankified_build/RufusApp.app/Info.plist +0 -0
- data/RufusApp/Frank/frankified_build/RufusApp.app/PkgInfo +1 -0
- data/RufusApp/Frank/frankified_build/RufusApp.app/ResourceRules.plist +25 -0
- data/RufusApp/Frank/frankified_build/RufusApp.app/RufusApp +0 -0
- data/RufusApp/Frank/frankified_build/RufusApp.app/RufusPageViewController.nib +0 -0
- data/RufusApp/Frank/frankified_build/RufusApp.app/_CodeSignature/CodeResources +60 -0
- data/RufusApp/Frank/frankified_build/RufusApp.app/embedded.mobileprovision +0 -0
- data/RufusApp/Frank/frankified_build/RufusApp.app/en.lproj/InfoPlist.strings +0 -0
- data/RufusApp/Frank/frankified_build/RufusApp.app/en.lproj/RUViewController.nib +0 -0
- data/RufusApp/Frank/frankify.xcconfig +6 -0
- data/RufusApp/Frank/libCocoaAsyncSocket.a +0 -0
- data/RufusApp/Frank/libCocoaAsyncSocketMac.a +0 -0
- data/RufusApp/Frank/libCocoaHTTPServer.a +0 -0
- data/RufusApp/Frank/libCocoaHTTPServerMac.a +0 -0
- data/RufusApp/Frank/libCocoaLumberjack.a +0 -0
- data/RufusApp/Frank/libCocoaLumberjackMac.a +0 -0
- data/RufusApp/Frank/libFrank.a +0 -0
- data/RufusApp/Frank/libFrankMac.a +0 -0
- data/RufusApp/Frank/libShelley.a +0 -0
- data/RufusApp/Frank/libShelleyMac.a +0 -0
- data/RufusApp/Rakefile +28 -0
- data/RufusApp/RufusApp/Default-568h@2x.png +0 -0
- data/RufusApp/RufusApp/Default.png +0 -0
- data/RufusApp/RufusApp/Default@2x.png +0 -0
- data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/Default-568h@2x.png +0 -0
- data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/Default.png +0 -0
- data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/Default@2x.png +0 -0
- data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/Info.plist +0 -0
- data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/PkgInfo +1 -0
- data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/ResourceRules.plist +25 -0
- data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/RufusApp +0 -0
- data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/RufusPageViewController.nib +0 -0
- data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/_CodeSignature/CodeResources +60 -0
- data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/embedded.mobileprovision +0 -0
- data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/en.lproj/InfoPlist.strings +0 -0
- data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/en.lproj/RUViewController.nib +0 -0
- data/RufusApp/RufusApp/RUAppDelegate.h +19 -0
- data/RufusApp/RufusApp/RUAppDelegate.m +53 -0
- data/RufusApp/RufusApp/RUViewController.h +16 -0
- data/RufusApp/RufusApp/RUViewController.m +34 -0
- data/RufusApp/RufusApp/RufusApp-Info.plist +39 -0
- data/RufusApp/RufusApp/RufusApp-Prefix.pch +14 -0
- data/RufusApp/RufusApp/RufusPageViewController.h +15 -0
- data/RufusApp/RufusApp/RufusPageViewController.m +45 -0
- data/RufusApp/RufusApp/RufusPageViewController.xib +372 -0
- data/RufusApp/RufusApp/en.lproj/InfoPlist.strings +2 -0
- data/RufusApp/RufusApp/en.lproj/RUViewController.xib +525 -0
- data/RufusApp/RufusApp/main.m +18 -0
- data/RufusApp/RufusApp.xcodeproj/project.pbxproj +493 -0
- data/RufusApp/RufusApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- data/RufusApp/RufusAppTests/RufusAppTests-Info.plist +22 -0
- data/RufusApp/RufusAppTests/RufusAppTests.h +13 -0
- data/RufusApp/RufusAppTests/RufusAppTests.m +32 -0
- data/RufusApp/RufusAppTests/en.lproj/InfoPlist.strings +2 -0
- data/features/driver.feature +6 -0
- data/features/step_definitions/driver_steps.rb +16 -0
- data/features/step_definitions/view_steps.rb +12 -0
- data/features/support/core_ext/string.rb +5 -0
- data/features/support/env.rb +15 -0
- data/features/support/screens/home_page.rb +13 -0
- data/features/support/screens/rufus_page.rb +12 -0
- data/features/view.feature +10 -0
- data/lib/rufus/accessors/accessors.rb +25 -0
- data/lib/rufus/accessors/view.rb +47 -0
- data/lib/rufus/driver.rb +120 -0
- data/lib/rufus/navigation.rb +23 -0
- data/lib/rufus.rb +11 -0
- data/rufus.gemspec +13 -0
- data/spec/accessors_spec.rb +85 -0
- data/spec/driver_spec.rb +152 -0
- data/spec/spec_helper.rb +16 -0
- data/spec/view_spec.rb +102 -0
- metadata +352 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
module Rufus
|
2
|
+
module Accessors
|
3
|
+
|
4
|
+
def view(name, locator)
|
5
|
+
define_method("#{name}_view") do
|
6
|
+
Rufus::Accessors::View.new(locator)
|
7
|
+
end
|
8
|
+
define_method("#{name}") do
|
9
|
+
Rufus::Accessors::View.new(locator).click
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def label(name, locator)
|
14
|
+
view(name, locator)
|
15
|
+
end
|
16
|
+
|
17
|
+
def text(name, locator)
|
18
|
+
view(name, locator)
|
19
|
+
end
|
20
|
+
|
21
|
+
def button(name, locator)
|
22
|
+
view(name, locator)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Rufus
|
2
|
+
module Accessors
|
3
|
+
class View
|
4
|
+
include Rufus
|
5
|
+
|
6
|
+
def initialize(locator={})
|
7
|
+
@locator = locator
|
8
|
+
end
|
9
|
+
|
10
|
+
def exists?
|
11
|
+
element = selenium.find(what)
|
12
|
+
false
|
13
|
+
true unless element.nil?
|
14
|
+
end
|
15
|
+
|
16
|
+
def click
|
17
|
+
selenium.find(what).click
|
18
|
+
end
|
19
|
+
|
20
|
+
def displayed?
|
21
|
+
selenium.find(what).displayed?
|
22
|
+
end
|
23
|
+
|
24
|
+
def enabled?
|
25
|
+
selenium.find(what).enabled?
|
26
|
+
end
|
27
|
+
|
28
|
+
def text
|
29
|
+
selenium.find(what).text
|
30
|
+
end
|
31
|
+
|
32
|
+
def send_keys(keys)
|
33
|
+
selenium.find(what).send_keys keys
|
34
|
+
end
|
35
|
+
|
36
|
+
def what
|
37
|
+
key = @locator.keys[0].to_sym
|
38
|
+
value = @locator[key]
|
39
|
+
{key => value}
|
40
|
+
end
|
41
|
+
|
42
|
+
def locator
|
43
|
+
@locator
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/rufus/driver.rb
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'selenium-webdriver'
|
3
|
+
|
4
|
+
module Rufus
|
5
|
+
class Driver
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@config = YAML.load_file('config.yml') unless !File.exists?('config.yml')
|
9
|
+
|
10
|
+
if @config["appium_url"].nil? || @config["appium_url"].eql?("")
|
11
|
+
@url = 'http://127.0.0.1:4723/wd/hub'
|
12
|
+
else
|
13
|
+
@url = @config["appium_url"]
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
def start
|
19
|
+
driver.get @url
|
20
|
+
end
|
21
|
+
|
22
|
+
def config
|
23
|
+
@config
|
24
|
+
end
|
25
|
+
|
26
|
+
def server_url
|
27
|
+
@url
|
28
|
+
end
|
29
|
+
|
30
|
+
def find(locator)
|
31
|
+
how = locator.keys[0].to_sym
|
32
|
+
what = locator[how]
|
33
|
+
driver.find_element(how, what)
|
34
|
+
end
|
35
|
+
|
36
|
+
def click(locator)
|
37
|
+
find(locator).click
|
38
|
+
end
|
39
|
+
|
40
|
+
def press_button name
|
41
|
+
click(:name => name)
|
42
|
+
end
|
43
|
+
|
44
|
+
def enabled?(locator)
|
45
|
+
find(locator).enabled?
|
46
|
+
end
|
47
|
+
|
48
|
+
def displayed?(locator)
|
49
|
+
find(locator).displayed?
|
50
|
+
end
|
51
|
+
|
52
|
+
def type(keys, name)
|
53
|
+
locator = {:name => name}
|
54
|
+
find(locator).send_keys keys
|
55
|
+
end
|
56
|
+
|
57
|
+
def sequence(*names, times)
|
58
|
+
timed_sequence(names, times, 1)
|
59
|
+
end
|
60
|
+
|
61
|
+
def buttons
|
62
|
+
buttons = []
|
63
|
+
elements = elements_by_tag 'UIAButton'
|
64
|
+
elements.each do |element|
|
65
|
+
buttons << element.text
|
66
|
+
end
|
67
|
+
buttons
|
68
|
+
end
|
69
|
+
|
70
|
+
def text_fields
|
71
|
+
fields = []
|
72
|
+
elements = elements_by_tag 'UIATextField'
|
73
|
+
elements.each do |element|
|
74
|
+
fields << element.text
|
75
|
+
end
|
76
|
+
fields
|
77
|
+
end
|
78
|
+
|
79
|
+
def labels
|
80
|
+
labels = []
|
81
|
+
elements = elements_by_tag 'UIAStaticText'
|
82
|
+
elements.each do |element|
|
83
|
+
labels << element.text
|
84
|
+
end
|
85
|
+
labels
|
86
|
+
end
|
87
|
+
|
88
|
+
def timed_sequence(names, times, seconds)
|
89
|
+
current = 0
|
90
|
+
until current == times
|
91
|
+
names.each do |name|
|
92
|
+
click(:name => name)
|
93
|
+
sleep seconds
|
94
|
+
|
95
|
+
end
|
96
|
+
current += 1
|
97
|
+
puts "sequence #{current} completed"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
private
|
102
|
+
def elements_by_tag(name)
|
103
|
+
driver.find_elements(:tag_name, name)
|
104
|
+
end
|
105
|
+
|
106
|
+
private
|
107
|
+
def capabilities
|
108
|
+
{
|
109
|
+
'browserName' => @config["browser"],
|
110
|
+
'platform' => @config["platform"],
|
111
|
+
'version' => @config["version"].to_s,
|
112
|
+
'app' => @config["app"]
|
113
|
+
}
|
114
|
+
end
|
115
|
+
|
116
|
+
def driver
|
117
|
+
@selenium ||= Selenium::WebDriver.for(:remote, :desired_capabilities => capabilities, :url => @url)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'page_navigation'
|
2
|
+
|
3
|
+
module Rufus
|
4
|
+
module Navigation
|
5
|
+
include PageNavigation
|
6
|
+
|
7
|
+
def on(cls)
|
8
|
+
screen = cls.new
|
9
|
+
|
10
|
+
wait = 0
|
11
|
+
until wait == 59 do
|
12
|
+
|
13
|
+
if screen.active?
|
14
|
+
return screen
|
15
|
+
else
|
16
|
+
wait += 1
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
raise "Expected #{cls} to be active"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/rufus.rb
ADDED
data/rufus.gemspec
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Gem::Specification.new do |gem|
|
2
|
+
gem.name = "rufus"
|
3
|
+
gem.version = "0.1"
|
4
|
+
gem.authors = ["Jeremy Stewart"]
|
5
|
+
gem.email = ["jlstewart379@gmail.com"]
|
6
|
+
gem.description = "Page object wrapper for Appium"
|
7
|
+
gem.summary = "Page object wrapper for Appium"
|
8
|
+
gem.homepage = "https://github.com/jlstewart379/rufus"
|
9
|
+
gem.require_paths = ["lib"]
|
10
|
+
gem.files = `git ls-files`.split($/)
|
11
|
+
gem.add_dependency 'page_navigation', '>= 0.7'
|
12
|
+
gem.add_development_dependency 'rspec'
|
13
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class TestPage
|
4
|
+
include Rufus
|
5
|
+
|
6
|
+
view(:some_view, :name => 'testView')
|
7
|
+
label(:some_label, :name => 'someLabel')
|
8
|
+
text(:some_text_box, :name => 'someTextBox')
|
9
|
+
button(:some_button, :name => 'someButton')
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
describe Rufus::Accessors do
|
14
|
+
|
15
|
+
let(:screen) { TestPage.new }
|
16
|
+
|
17
|
+
context 'view' do
|
18
|
+
let(:view) { double('View accessor') }
|
19
|
+
|
20
|
+
before(:each) do
|
21
|
+
Rufus::Accessors::View.should_receive(:new).with(:name => 'testView').and_return(view)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'can return the view object' do
|
25
|
+
screen.some_view_view.should be(view)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'can click a view' do
|
29
|
+
view.should_receive(:click)
|
30
|
+
screen.some_view
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'label' do
|
35
|
+
let(:label) { double('Label accessor') }
|
36
|
+
|
37
|
+
before(:each) do
|
38
|
+
Rufus::Accessors::View.should_receive(:new).with(:name => 'someLabel').and_return(label)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'can return the label' do
|
42
|
+
screen.some_label_view.should be(label)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'can click a label' do
|
46
|
+
label.should_receive(:click)
|
47
|
+
screen.some_label
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'text box' do
|
52
|
+
let(:text_box) { double('Label accessor') }
|
53
|
+
|
54
|
+
before(:each) do
|
55
|
+
Rufus::Accessors::View.should_receive(:new).with(:name => 'someTextBox').and_return(text_box)
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'can return the text box' do
|
59
|
+
screen.some_text_box_view.should be(text_box)
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'can click a text box' do
|
63
|
+
text_box.should_receive(:click)
|
64
|
+
screen.some_text_box
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'button' do
|
69
|
+
let(:button) { double('Label accessor') }
|
70
|
+
|
71
|
+
before(:each) do
|
72
|
+
Rufus::Accessors::View.should_receive(:new).with(:name => 'someButton').and_return(button)
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'can return the button' do
|
76
|
+
screen.some_button_view.should be(button)
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'can click a button' do
|
80
|
+
button.should_receive(:click)
|
81
|
+
screen.some_button
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
data/spec/driver_spec.rb
ADDED
@@ -0,0 +1,152 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rufus/driver'
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
describe Rufus::Driver do
|
6
|
+
|
7
|
+
let(:selenium){double('Selenium web driver')}
|
8
|
+
|
9
|
+
context 'initializing' do
|
10
|
+
|
11
|
+
let(:yaml){double('YAML loader')}
|
12
|
+
|
13
|
+
|
14
|
+
before(:each) do
|
15
|
+
File.stub(:exists?).and_return(true)
|
16
|
+
YAML.should_receive(:load_file).with("config.yml").and_return("browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app")
|
17
|
+
@driver = Rufus::Driver.new
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'loads the config file' do
|
21
|
+
|
22
|
+
config = @driver.config
|
23
|
+
config["browser_name"].should eq("iOS")
|
24
|
+
config["platform"].should eq("Mac")
|
25
|
+
config["version"].should eq("6.1")
|
26
|
+
config["app"].should eq("/Users/app/path/rufus.app")
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'dealing with elements' do
|
32
|
+
|
33
|
+
let(:mock_driver){double('mock selenium driver')}
|
34
|
+
let(:mock_elements){double('mock selenium driver elements list')}
|
35
|
+
let(:mock_element){double('mock selenium driver element')}
|
36
|
+
|
37
|
+
before(:each) do
|
38
|
+
File.stub(:exists?).and_return(true)
|
39
|
+
YAML.should_receive(:load_file).with("config.yml").and_return("browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app")
|
40
|
+
|
41
|
+
@driver = Rufus::Driver.new
|
42
|
+
|
43
|
+
Selenium::WebDriver.should_receive(:for).and_return(mock_driver)
|
44
|
+
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_return(mock_element)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'can find an element by name' do
|
48
|
+
@driver.find({:name => 'rufusButton'})
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'can click on an element by name' do
|
52
|
+
mock_element.should_receive(:click)
|
53
|
+
@driver.click({:name =>'rufusButton'})
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'can click a button by name only' do
|
57
|
+
mock_element.should_receive(:click)
|
58
|
+
@driver.press_button 'rufusButton'
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'can tell if an element is enabled' do
|
62
|
+
mock_element.should_receive(:enabled?).and_return(true)
|
63
|
+
@driver.enabled?(:name => 'rufusButton').should be_true
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'can tell if an element is displayed on screen' do
|
67
|
+
mock_element.should_receive(:displayed?).and_return(true)
|
68
|
+
@driver.displayed?(:name => 'rufusButton').should be_true
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'can enter text into an element' do
|
72
|
+
mock_element.should_receive(:send_keys).with('text')
|
73
|
+
@driver.type('text', 'rufusButton')
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context 'finding all elements of a type' do
|
78
|
+
|
79
|
+
let(:mock_driver){double('mock selenium driver')}
|
80
|
+
let(:mock1){double('first mock element')}
|
81
|
+
let(:mock2){double('second mock element')}
|
82
|
+
let(:mock3){double('third mock element')}
|
83
|
+
|
84
|
+
before(:each) do
|
85
|
+
File.stub(:exists?).and_return(true)
|
86
|
+
YAML.should_receive(:load_file).with("config.yml").and_return("browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app")
|
87
|
+
|
88
|
+
@test_driver = Rufus::Driver.new
|
89
|
+
|
90
|
+
Selenium::WebDriver.should_receive(:for).and_return(mock_driver)
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'can find all button elements on the screen' do
|
95
|
+
mock_driver.should_receive(:find_elements).with(:tag_name, 'UIAButton').and_return([mock1, mock2, mock3])
|
96
|
+
mock1.should_receive(:text).and_return("one")
|
97
|
+
mock2.should_receive(:text).and_return("two")
|
98
|
+
mock3.should_receive(:text).and_return("three")
|
99
|
+
@test_driver.buttons.should == ["one", "two", "three"]
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'can find all text field elements on the screen' do
|
103
|
+
mock_driver.should_receive(:find_elements).with(:tag_name, 'UIATextField').and_return([mock1, mock2, mock3])
|
104
|
+
mock1.should_receive(:text).and_return("one")
|
105
|
+
mock2.should_receive(:text).and_return("two")
|
106
|
+
mock3.should_receive(:text).and_return("three")
|
107
|
+
@test_driver.text_fields.should == ["one", "two", "three"]
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'can find all labels on the screen' do
|
111
|
+
mock_driver.should_receive(:find_elements).with(:tag_name, 'UIAStaticText').and_return([mock1, mock2, mock3])
|
112
|
+
mock1.should_receive(:text).and_return("one")
|
113
|
+
mock2.should_receive(:text).and_return("two")
|
114
|
+
mock3.should_receive(:text).and_return("three")
|
115
|
+
@test_driver.labels.should == ["one", "two", "three"]
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
context 'choosing the url' do
|
120
|
+
before(:each) do
|
121
|
+
File.stub(:exists?).and_return(true)
|
122
|
+
YAML.should_receive(:load_file).with("config.yml").and_return("browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app")
|
123
|
+
@driver = Rufus::Driver.new
|
124
|
+
end
|
125
|
+
it 'sets the default url' do
|
126
|
+
@driver.server_url.should eq 'http://127.0.0.1:4723/wd/hub'
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
context 'executing button sequences' do
|
131
|
+
|
132
|
+
let(:mock_driver){double('mock selenium driver')}
|
133
|
+
let(:mock_rufus_button){double('Mock rufus button')}
|
134
|
+
let(:mock_rufus_page_button){double('mock selenium driver element')}
|
135
|
+
|
136
|
+
before(:each) do
|
137
|
+
File.stub(:exists?).and_return(true)
|
138
|
+
YAML.should_receive(:load_file).with("config.yml").and_return("browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app")
|
139
|
+
@driver = Rufus::Driver.new
|
140
|
+
Selenium::WebDriver.should_receive(:for).and_return(mock_driver)
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'can click buttons in sequence' do
|
144
|
+
mock_driver.should_receive(:find_element).exactly(20).times.with(:name, 'rufusButton').and_return(mock_rufus_button)
|
145
|
+
mock_driver.should_receive(:find_element).exactly(10).times.with(:name, 'rufusPageButton').and_return(mock_rufus_page_button)
|
146
|
+
mock_rufus_button.should_receive(:click).exactly(20).times
|
147
|
+
mock_rufus_page_button.should_receive(:click).exactly(10).times
|
148
|
+
@driver.timed_sequence(['rufusButton', 'rufusPageButton', 'rufusButton'] , 10, 0)
|
149
|
+
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'selenium-webdriver'
|
2
|
+
require 'rufus'
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
5
|
+
|
6
|
+
RSpec.configure do |config|
|
7
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
8
|
+
config.run_all_when_everything_filtered = true
|
9
|
+
config.filter_run :focus
|
10
|
+
|
11
|
+
# Run specs in random order to surface order dependencies. If you find an
|
12
|
+
# order dependency and want to debug it, you can fix the order by providing
|
13
|
+
# the seed, which is printed after each run.
|
14
|
+
# --seed 1234
|
15
|
+
config.order = 'random'
|
16
|
+
end
|
data/spec/view_spec.rb
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'rufus/accessors/view'
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
|
5
|
+
describe Rufus::Accessors::View do
|
6
|
+
|
7
|
+
context 'checking for existence' do
|
8
|
+
let(:view){Rufus::Accessors::View.new(:label => 'testView')}
|
9
|
+
let(:view_by_text){Rufus::Accessors::View.new(:text => "textViewText")}
|
10
|
+
let(:selenium){double('Selenium::WebDriver')}
|
11
|
+
let(:element){double('Selenium element')}
|
12
|
+
|
13
|
+
before(:each) do
|
14
|
+
view.should_receive(:selenium).and_return(selenium)
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'element exists' do
|
18
|
+
it 'reports that element exists' do
|
19
|
+
selenium.should_receive(:find).and_return(Selenium::WebDriver::Element.new(nil, nil))
|
20
|
+
view.exists?.should be_true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'element does not exist' do
|
25
|
+
it 'reports that the element does not exist' do
|
26
|
+
selenium.should_receive(:find).and_return(nil)
|
27
|
+
view.exists?.should be_false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'clicking an element' do
|
32
|
+
it 'can click an element' do
|
33
|
+
selenium.should_receive(:find).with({:label =>'testView'}).and_return(element)
|
34
|
+
element.should_receive(:click)
|
35
|
+
view.click
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'telling if a view is displayed' do
|
40
|
+
it 'can tell if a view is displayed' do
|
41
|
+
selenium.should_receive(:find).with({:label =>'testView'}).and_return(element)
|
42
|
+
element.should_receive(:displayed?).and_return(true)
|
43
|
+
view.displayed?.should be_true
|
44
|
+
end
|
45
|
+
it 'can tell if a view is not displayed' do
|
46
|
+
selenium.should_receive(:find).with({:label =>'testView'}).and_return(element)
|
47
|
+
element.should_receive(:displayed?).and_return(false)
|
48
|
+
view.displayed?.should be_false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'telling if a view is enabled' do
|
53
|
+
it 'can tell if a view is enabled' do
|
54
|
+
selenium.should_receive(:find).with({:label =>'testView'}).and_return(element)
|
55
|
+
element.should_receive(:enabled?).and_return(true)
|
56
|
+
view.enabled?.should be_true
|
57
|
+
end
|
58
|
+
it 'can tell if a view is not enabled' do
|
59
|
+
selenium.should_receive(:find).with({:label =>'testView'}).and_return(element)
|
60
|
+
element.should_receive(:enabled?).and_return(false)
|
61
|
+
view.enabled?.should be_false
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'getting text from a view' do
|
66
|
+
it 'can get the text of a view' do
|
67
|
+
selenium.should_receive(:find).with({:label =>'testView'}).and_return(element)
|
68
|
+
element.should_receive(:text).and_return("some text")
|
69
|
+
view.text.should eq("some text")
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'sending text input to a view' do
|
74
|
+
it 'can send text input to a view' do
|
75
|
+
selenium.should_receive(:find).with({:label =>'testView'}).and_return(element)
|
76
|
+
element.should_receive(:send_keys).with("keyboard entries")
|
77
|
+
view.send_keys("keyboard entries")
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
context 'finding element by text' do
|
84
|
+
|
85
|
+
let(:view_by_text){Rufus::Accessors::View.new(:text => "textViewText")}
|
86
|
+
let(:selenium){double('Selenium::WebDriver')}
|
87
|
+
let(:element){double('Selenium element')}
|
88
|
+
|
89
|
+
it 'tells selenium to search by text' do
|
90
|
+
view_by_text.should_receive(:selenium).and_return(selenium)
|
91
|
+
selenium.should_receive(:find).with({:text=>'textViewText'}).and_return(element)
|
92
|
+
view_by_text.exists?
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
|