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.
Files changed (275) hide show
  1. data/.gitignore +61 -0
  2. data/.gitmodules +6 -0
  3. data/Gemfile +7 -0
  4. data/Gemfile.lock +51 -0
  5. data/README.md +120 -0
  6. data/RufusApp/Frank/features/my_first.feature +12 -0
  7. data/RufusApp/Frank/features/step_definitions/launch_steps.rb +20 -0
  8. data/RufusApp/Frank/features/support/env.rb +8 -0
  9. data/RufusApp/Frank/frank_static_resources.bundle/ViewAttributeMapping.plist +63 -0
  10. data/RufusApp/Frank/frank_static_resources.bundle/ViewAttributeMappingMac.plist +99 -0
  11. data/RufusApp/Frank/frank_static_resources.bundle/images/ajax-loader.gif +0 -0
  12. data/RufusApp/Frank/frank_static_resources.bundle/images/file.gif +0 -0
  13. data/RufusApp/Frank/frank_static_resources.bundle/images/folder-closed.gif +0 -0
  14. data/RufusApp/Frank/frank_static_resources.bundle/images/folder.gif +0 -0
  15. data/RufusApp/Frank/frank_static_resources.bundle/images/loader.gif +0 -0
  16. data/RufusApp/Frank/frank_static_resources.bundle/images/loader.png +0 -0
  17. data/RufusApp/Frank/frank_static_resources.bundle/images/minus.gif +0 -0
  18. data/RufusApp/Frank/frank_static_resources.bundle/images/plus.gif +0 -0
  19. data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-black-line.gif +0 -0
  20. data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-black.gif +0 -0
  21. data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-default-line.gif +0 -0
  22. data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-default.gif +0 -0
  23. data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-famfamfam-line.gif +0 -0
  24. data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-famfamfam.gif +0 -0
  25. data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-gray-line.gif +0 -0
  26. data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-gray.gif +0 -0
  27. data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-red-line.gif +0 -0
  28. data/RufusApp/Frank/frank_static_resources.bundle/images/treeview-red.gif +0 -0
  29. data/RufusApp/Frank/frank_static_resources.bundle/index.html +86 -0
  30. data/RufusApp/Frank/frank_static_resources.bundle/index.html.haml +76 -0
  31. data/RufusApp/Frank/frank_static_resources.bundle/js/accessible_views_view.coffee +41 -0
  32. data/RufusApp/Frank/frank_static_resources.bundle/js/accessible_views_view.js +46 -0
  33. data/RufusApp/Frank/frank_static_resources.bundle/js/controller.coffee +134 -0
  34. data/RufusApp/Frank/frank_static_resources.bundle/js/controller.js +139 -0
  35. data/RufusApp/Frank/frank_static_resources.bundle/js/details_view.coffee +42 -0
  36. data/RufusApp/Frank/frank_static_resources.bundle/js/details_view.js +51 -0
  37. data/RufusApp/Frank/frank_static_resources.bundle/js/dropdown_control.coffee +64 -0
  38. data/RufusApp/Frank/frank_static_resources.bundle/js/dropdown_control.js +73 -0
  39. data/RufusApp/Frank/frank_static_resources.bundle/js/ersatz_model.coffee +46 -0
  40. data/RufusApp/Frank/frank_static_resources.bundle/js/ersatz_model.js +60 -0
  41. data/RufusApp/Frank/frank_static_resources.bundle/js/ersatz_view.coffee +167 -0
  42. data/RufusApp/Frank/frank_static_resources.bundle/js/ersatz_view.js +205 -0
  43. data/RufusApp/Frank/frank_static_resources.bundle/js/experiment_bar_model.coffee +10 -0
  44. data/RufusApp/Frank/frank_static_resources.bundle/js/experiment_bar_model.js +17 -0
  45. data/RufusApp/Frank/frank_static_resources.bundle/js/experiment_bar_view.coffee +44 -0
  46. data/RufusApp/Frank/frank_static_resources.bundle/js/experiment_bar_view.js +63 -0
  47. data/RufusApp/Frank/frank_static_resources.bundle/js/frank.coffee +96 -0
  48. data/RufusApp/Frank/frank_static_resources.bundle/js/frank.js +146 -0
  49. data/RufusApp/Frank/frank_static_resources.bundle/js/lib/backbone.js +1431 -0
  50. data/RufusApp/Frank/frank_static_resources.bundle/js/lib/coffee-script.js +8 -0
  51. data/RufusApp/Frank/frank_static_resources.bundle/js/lib/jquery-ui.min.js +405 -0
  52. data/RufusApp/Frank/frank_static_resources.bundle/js/lib/jquery.min.js +4 -0
  53. data/RufusApp/Frank/frank_static_resources.bundle/js/lib/jquery.treeview.js +251 -0
  54. data/RufusApp/Frank/frank_static_resources.bundle/js/lib/json2.js +481 -0
  55. data/RufusApp/Frank/frank_static_resources.bundle/js/lib/raphael.js +5815 -0
  56. data/RufusApp/Frank/frank_static_resources.bundle/js/lib/require.js +2053 -0
  57. data/RufusApp/Frank/frank_static_resources.bundle/js/lib/underscore.js +1059 -0
  58. data/RufusApp/Frank/frank_static_resources.bundle/js/main.coffee +27 -0
  59. data/RufusApp/Frank/frank_static_resources.bundle/js/main.js +29 -0
  60. data/RufusApp/Frank/frank_static_resources.bundle/js/tabs_controller.coffee +13 -0
  61. data/RufusApp/Frank/frank_static_resources.bundle/js/tabs_controller.js +22 -0
  62. data/RufusApp/Frank/frank_static_resources.bundle/js/toast_controller.coffee +15 -0
  63. data/RufusApp/Frank/frank_static_resources.bundle/js/toast_controller.js +28 -0
  64. data/RufusApp/Frank/frank_static_resources.bundle/js/transform_stack.coffee +59 -0
  65. data/RufusApp/Frank/frank_static_resources.bundle/js/transform_stack.js +78 -0
  66. data/RufusApp/Frank/frank_static_resources.bundle/js/tree_view.coffee +53 -0
  67. data/RufusApp/Frank/frank_static_resources.bundle/js/tree_view.js +64 -0
  68. data/RufusApp/Frank/frank_static_resources.bundle/js/view_hier_model.coffee +37 -0
  69. data/RufusApp/Frank/frank_static_resources.bundle/js/view_hier_model.js +48 -0
  70. data/RufusApp/Frank/frank_static_resources.bundle/js/view_model.coffee +39 -0
  71. data/RufusApp/Frank/frank_static_resources.bundle/js/view_model.js +62 -0
  72. data/RufusApp/Frank/frank_static_resources.bundle/pictos/index.html +329 -0
  73. data/RufusApp/Frank/frank_static_resources.bundle/pictos/pictos-web.eot +0 -0
  74. data/RufusApp/Frank/frank_static_resources.bundle/pictos/pictos-web.svg +114 -0
  75. data/RufusApp/Frank/frank_static_resources.bundle/pictos/pictos-web.ttf +0 -0
  76. data/RufusApp/Frank/frank_static_resources.bundle/pictos/pictos-web.woff +0 -0
  77. data/RufusApp/Frank/frank_static_resources.bundle/pictos/pictos.css +20 -0
  78. data/RufusApp/Frank/frank_static_resources.bundle/pictos/pictos_base64.css +18 -0
  79. data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/css/symbiote.css +1 -0
  80. data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_elements.scss +28 -0
  81. data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_header.scss +61 -0
  82. data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_inspect_tabs_list_tabs.scss +194 -0
  83. data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_jquery.treeview.scss +68 -0
  84. data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_jqui.scss +2 -0
  85. data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_layout.scss +13 -0
  86. data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_mixins.sass +137 -0
  87. data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_reset.scss +32 -0
  88. data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_selector_test_toolbar.scss +81 -0
  89. data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_solarized.scss +16 -0
  90. data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_typography.scss +11 -0
  91. data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_unicode.scss +3 -0
  92. data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/_z_index.scss +2 -0
  93. data/RufusApp/Frank/frank_static_resources.bundle/stylesheets/sass/symbiote.scss +26 -0
  94. data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/Default-568h@2x.png +0 -0
  95. data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/Default.png +0 -0
  96. data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/Default@2x.png +0 -0
  97. data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/Info.plist +0 -0
  98. data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/PkgInfo +1 -0
  99. data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/ResourceRules.plist +25 -0
  100. data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/RufusApp +0 -0
  101. data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/RufusPageViewController.nib +0 -0
  102. data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/_CodeSignature/CodeResources +60 -0
  103. data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/embedded.mobileprovision +0 -0
  104. data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/en.lproj/InfoPlist.strings +0 -0
  105. data/RufusApp/Frank/frankified_build/Applications/RufusApp.app/en.lproj/RUViewController.nib +0 -0
  106. data/RufusApp/Frank/frankified_build/Frankified.app/Default-568h@2x.png +0 -0
  107. data/RufusApp/Frank/frankified_build/Frankified.app/Default.png +0 -0
  108. data/RufusApp/Frank/frankified_build/Frankified.app/Default@2x.png +0 -0
  109. data/RufusApp/Frank/frankified_build/Frankified.app/Info.plist +51 -0
  110. data/RufusApp/Frank/frankified_build/Frankified.app/PkgInfo +1 -0
  111. data/RufusApp/Frank/frankified_build/Frankified.app/RufusApp +0 -0
  112. data/RufusApp/Frank/frankified_build/Frankified.app/RufusPageViewController.nib +0 -0
  113. data/RufusApp/Frank/frankified_build/Frankified.app/en.lproj/InfoPlist.strings +0 -0
  114. data/RufusApp/Frank/frankified_build/Frankified.app/en.lproj/RUViewController.nib +0 -0
  115. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/ViewAttributeMapping.plist +63 -0
  116. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/ViewAttributeMappingMac.plist +99 -0
  117. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/ajax-loader.gif +0 -0
  118. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/file.gif +0 -0
  119. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/folder-closed.gif +0 -0
  120. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/folder.gif +0 -0
  121. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/loader.gif +0 -0
  122. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/loader.png +0 -0
  123. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/minus.gif +0 -0
  124. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/plus.gif +0 -0
  125. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-black-line.gif +0 -0
  126. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-black.gif +0 -0
  127. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-default-line.gif +0 -0
  128. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-default.gif +0 -0
  129. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-famfamfam-line.gif +0 -0
  130. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-famfamfam.gif +0 -0
  131. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-gray-line.gif +0 -0
  132. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-gray.gif +0 -0
  133. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-red-line.gif +0 -0
  134. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/images/treeview-red.gif +0 -0
  135. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/index.html +86 -0
  136. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/index.html.haml +76 -0
  137. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/accessible_views_view.coffee +41 -0
  138. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/accessible_views_view.js +46 -0
  139. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/controller.coffee +134 -0
  140. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/controller.js +139 -0
  141. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/details_view.coffee +42 -0
  142. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/details_view.js +51 -0
  143. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/dropdown_control.coffee +64 -0
  144. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/dropdown_control.js +73 -0
  145. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/ersatz_model.coffee +46 -0
  146. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/ersatz_model.js +60 -0
  147. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/ersatz_view.coffee +167 -0
  148. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/ersatz_view.js +205 -0
  149. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/experiment_bar_model.coffee +10 -0
  150. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/experiment_bar_model.js +17 -0
  151. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/experiment_bar_view.coffee +44 -0
  152. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/experiment_bar_view.js +63 -0
  153. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/frank.coffee +96 -0
  154. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/frank.js +146 -0
  155. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/backbone.js +1431 -0
  156. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/coffee-script.js +8 -0
  157. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/jquery-ui.min.js +405 -0
  158. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/jquery.min.js +4 -0
  159. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/jquery.treeview.js +251 -0
  160. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/json2.js +481 -0
  161. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/raphael.js +5815 -0
  162. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/require.js +2053 -0
  163. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/lib/underscore.js +1059 -0
  164. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/main.coffee +27 -0
  165. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/main.js +29 -0
  166. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/tabs_controller.coffee +13 -0
  167. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/tabs_controller.js +22 -0
  168. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/toast_controller.coffee +15 -0
  169. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/toast_controller.js +28 -0
  170. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/transform_stack.coffee +59 -0
  171. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/transform_stack.js +78 -0
  172. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/tree_view.coffee +53 -0
  173. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/tree_view.js +64 -0
  174. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/view_hier_model.coffee +37 -0
  175. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/view_hier_model.js +48 -0
  176. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/view_model.coffee +39 -0
  177. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/js/view_model.js +62 -0
  178. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/pictos/index.html +329 -0
  179. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/pictos/pictos-web.eot +0 -0
  180. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/pictos/pictos-web.svg +114 -0
  181. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/pictos/pictos-web.ttf +0 -0
  182. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/pictos/pictos-web.woff +0 -0
  183. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/pictos/pictos.css +20 -0
  184. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/pictos/pictos_base64.css +18 -0
  185. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/css/symbiote.css +1 -0
  186. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_elements.scss +28 -0
  187. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_header.scss +61 -0
  188. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_inspect_tabs_list_tabs.scss +194 -0
  189. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_jquery.treeview.scss +68 -0
  190. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_jqui.scss +2 -0
  191. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_layout.scss +13 -0
  192. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_mixins.sass +137 -0
  193. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_reset.scss +32 -0
  194. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_selector_test_toolbar.scss +81 -0
  195. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_solarized.scss +16 -0
  196. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_typography.scss +11 -0
  197. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_unicode.scss +3 -0
  198. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/_z_index.scss +2 -0
  199. data/RufusApp/Frank/frankified_build/Frankified.app/frank_static_resources.bundle/stylesheets/sass/symbiote.scss +26 -0
  200. data/RufusApp/Frank/frankified_build/RufusApp.app/Default-568h@2x.png +0 -0
  201. data/RufusApp/Frank/frankified_build/RufusApp.app/Default.png +0 -0
  202. data/RufusApp/Frank/frankified_build/RufusApp.app/Default@2x.png +0 -0
  203. data/RufusApp/Frank/frankified_build/RufusApp.app/Info.plist +0 -0
  204. data/RufusApp/Frank/frankified_build/RufusApp.app/PkgInfo +1 -0
  205. data/RufusApp/Frank/frankified_build/RufusApp.app/ResourceRules.plist +25 -0
  206. data/RufusApp/Frank/frankified_build/RufusApp.app/RufusApp +0 -0
  207. data/RufusApp/Frank/frankified_build/RufusApp.app/RufusPageViewController.nib +0 -0
  208. data/RufusApp/Frank/frankified_build/RufusApp.app/_CodeSignature/CodeResources +60 -0
  209. data/RufusApp/Frank/frankified_build/RufusApp.app/embedded.mobileprovision +0 -0
  210. data/RufusApp/Frank/frankified_build/RufusApp.app/en.lproj/InfoPlist.strings +0 -0
  211. data/RufusApp/Frank/frankified_build/RufusApp.app/en.lproj/RUViewController.nib +0 -0
  212. data/RufusApp/Frank/frankify.xcconfig +6 -0
  213. data/RufusApp/Frank/libCocoaAsyncSocket.a +0 -0
  214. data/RufusApp/Frank/libCocoaAsyncSocketMac.a +0 -0
  215. data/RufusApp/Frank/libCocoaHTTPServer.a +0 -0
  216. data/RufusApp/Frank/libCocoaHTTPServerMac.a +0 -0
  217. data/RufusApp/Frank/libCocoaLumberjack.a +0 -0
  218. data/RufusApp/Frank/libCocoaLumberjackMac.a +0 -0
  219. data/RufusApp/Frank/libFrank.a +0 -0
  220. data/RufusApp/Frank/libFrankMac.a +0 -0
  221. data/RufusApp/Frank/libShelley.a +0 -0
  222. data/RufusApp/Frank/libShelleyMac.a +0 -0
  223. data/RufusApp/Rakefile +28 -0
  224. data/RufusApp/RufusApp/Default-568h@2x.png +0 -0
  225. data/RufusApp/RufusApp/Default.png +0 -0
  226. data/RufusApp/RufusApp/Default@2x.png +0 -0
  227. data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/Default-568h@2x.png +0 -0
  228. data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/Default.png +0 -0
  229. data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/Default@2x.png +0 -0
  230. data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/Info.plist +0 -0
  231. data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/PkgInfo +1 -0
  232. data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/ResourceRules.plist +25 -0
  233. data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/RufusApp +0 -0
  234. data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/RufusPageViewController.nib +0 -0
  235. data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/_CodeSignature/CodeResources +60 -0
  236. data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/embedded.mobileprovision +0 -0
  237. data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/en.lproj/InfoPlist.strings +0 -0
  238. data/RufusApp/RufusApp/Frank/Frankified_build/Applications/RufusApp.app/en.lproj/RUViewController.nib +0 -0
  239. data/RufusApp/RufusApp/RUAppDelegate.h +19 -0
  240. data/RufusApp/RufusApp/RUAppDelegate.m +53 -0
  241. data/RufusApp/RufusApp/RUViewController.h +16 -0
  242. data/RufusApp/RufusApp/RUViewController.m +34 -0
  243. data/RufusApp/RufusApp/RufusApp-Info.plist +39 -0
  244. data/RufusApp/RufusApp/RufusApp-Prefix.pch +14 -0
  245. data/RufusApp/RufusApp/RufusPageViewController.h +15 -0
  246. data/RufusApp/RufusApp/RufusPageViewController.m +45 -0
  247. data/RufusApp/RufusApp/RufusPageViewController.xib +372 -0
  248. data/RufusApp/RufusApp/en.lproj/InfoPlist.strings +2 -0
  249. data/RufusApp/RufusApp/en.lproj/RUViewController.xib +525 -0
  250. data/RufusApp/RufusApp/main.m +18 -0
  251. data/RufusApp/RufusApp.xcodeproj/project.pbxproj +493 -0
  252. data/RufusApp/RufusApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  253. data/RufusApp/RufusAppTests/RufusAppTests-Info.plist +22 -0
  254. data/RufusApp/RufusAppTests/RufusAppTests.h +13 -0
  255. data/RufusApp/RufusAppTests/RufusAppTests.m +32 -0
  256. data/RufusApp/RufusAppTests/en.lproj/InfoPlist.strings +2 -0
  257. data/features/driver.feature +6 -0
  258. data/features/step_definitions/driver_steps.rb +16 -0
  259. data/features/step_definitions/view_steps.rb +12 -0
  260. data/features/support/core_ext/string.rb +5 -0
  261. data/features/support/env.rb +15 -0
  262. data/features/support/screens/home_page.rb +13 -0
  263. data/features/support/screens/rufus_page.rb +12 -0
  264. data/features/view.feature +10 -0
  265. data/lib/rufus/accessors/accessors.rb +25 -0
  266. data/lib/rufus/accessors/view.rb +47 -0
  267. data/lib/rufus/driver.rb +120 -0
  268. data/lib/rufus/navigation.rb +23 -0
  269. data/lib/rufus.rb +11 -0
  270. data/rufus.gemspec +13 -0
  271. data/spec/accessors_spec.rb +85 -0
  272. data/spec/driver_spec.rb +152 -0
  273. data/spec/spec_helper.rb +16 -0
  274. data/spec/view_spec.rb +102 -0
  275. 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
@@ -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
@@ -0,0 +1,11 @@
1
+ require 'rufus/navigation'
2
+ require 'rufus/accessors/accessors'
3
+ require 'rufus/accessors/view'
4
+
5
+ module Rufus
6
+
7
+ def self.included(cls)
8
+ cls.extend Rufus::Accessors
9
+ end
10
+
11
+ end
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
+
@@ -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
@@ -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
+