operawatir 0.4-jruby → 0.4.1-jruby

Sign up to get free protection for your applications and to get access to all the features.
Files changed (222) hide show
  1. data/.gitmodules +3 -3
  2. data/AUTHORS +1 -0
  3. data/CHANGES +454 -0
  4. data/README.md +67 -50
  5. data/Rakefile +6 -10
  6. data/VERSION +1 -1
  7. data/bin/desktopwatir +52 -29
  8. data/bin/operawatir +50 -18
  9. data/lib/operadriver/client-combined-nodeps.jar +0 -0
  10. data/lib/operadriver/webdriver-opera.jar +0 -0
  11. data/lib/operawatir.rb +8 -1
  12. data/lib/operawatir/browser.rb +35 -15
  13. data/lib/operawatir/collection.rb +2 -2
  14. data/lib/operawatir/compat.rb +3 -2
  15. data/lib/operawatir/compat/browser.rb +0 -5
  16. data/lib/operawatir/compat/collection.rb +15 -0
  17. data/lib/operawatir/compat/element.rb +72 -21
  18. data/lib/operawatir/compat/element_finders.rb +6 -0
  19. data/lib/operawatir/compat/selector.rb +7 -0
  20. data/lib/operawatir/compat/window.rb +49 -0
  21. data/lib/operawatir/desktop_browser.rb +88 -14
  22. data/lib/operawatir/desktop_common.rb +0 -2
  23. data/lib/operawatir/desktop_container.rb +82 -29
  24. data/lib/operawatir/desktop_helper.rb +2 -0
  25. data/lib/operawatir/element.rb +49 -25
  26. data/lib/operawatir/helper.rb +5 -3
  27. data/lib/operawatir/keys.rb +19 -6
  28. data/lib/operawatir/preferences.rb +315 -78
  29. data/lib/operawatir/quickwidgets.rb +2 -1
  30. data/lib/operawatir/quickwidgets/quick_addressfield.rb +12 -0
  31. data/lib/operawatir/quickwidgets/quick_button.rb +8 -2
  32. data/lib/operawatir/quickwidgets/quick_checkbox.rb +5 -5
  33. data/lib/operawatir/quickwidgets/quick_editfield.rb +8 -5
  34. data/lib/operawatir/quickwidgets/quick_find.rb +11 -0
  35. data/lib/operawatir/quickwidgets/quick_griditem.rb +11 -0
  36. data/lib/operawatir/quickwidgets/quick_gridlayout.rb +11 -0
  37. data/lib/operawatir/quickwidgets/quick_searchfield.rb +7 -1
  38. data/lib/operawatir/quickwidgets/quick_tab.rb +0 -1
  39. data/lib/operawatir/quickwidgets/quick_treeitem.rb +22 -1
  40. data/lib/operawatir/quickwidgets/quick_widget.rb +62 -23
  41. data/lib/operawatir/quickwidgets/quick_window.rb +32 -2
  42. data/lib/operawatir/screenshot.rb +46 -0
  43. data/lib/operawatir/version.rb +6 -4
  44. data/lib/operawatir/window.rb +53 -67
  45. data/operawatir.gemspec +310 -245
  46. data/spec/operawatir/README.md +4 -0
  47. data/spec/operawatir/core/browser_spec.rb +82 -0
  48. data/spec/operawatir/core/element_spec.rb +88 -0
  49. data/spec/operawatir/core/preferences_spec.rb +438 -0
  50. data/spec/operawatir/core/screenshot_spec.rb +76 -0
  51. data/spec/{new_watirspec → operawatir/core}/spatnav_spec.rb +3 -3
  52. data/spec/operawatir/core/window_spec.rb +76 -0
  53. data/spec/operawatir/desktop/desktopbrowser_spec.rb +316 -0
  54. data/spec/operawatir/desktop/quickaddressfield_spec.rb +59 -0
  55. data/spec/operawatir/desktop/quickbutton_spec.rb +248 -0
  56. data/spec/operawatir/desktop/quickcheckbox_spec.rb +36 -0
  57. data/spec/operawatir/desktop/quickdialogtab_spec.rb +30 -0
  58. data/spec/operawatir/desktop/quickdropdown_spec.rb +39 -0
  59. data/spec/operawatir/desktop/quickeditfield_spec.rb +51 -0
  60. data/spec/operawatir/desktop/quickfind_spec.rb +30 -0
  61. data/spec/operawatir/desktop/quickgriditem_spec.rb +16 -0
  62. data/spec/operawatir/desktop/quickgridlayout_spec.rb +15 -0
  63. data/spec/operawatir/desktop/quicklabel_spec.rb +28 -0
  64. data/spec/operawatir/desktop/quickradiobutton_spec.rb +24 -0
  65. data/spec/operawatir/desktop/quicksearchfield_spec.rb +26 -0
  66. data/spec/operawatir/desktop/quicktab_spec.rb +86 -0
  67. data/spec/operawatir/desktop/quickthumbnail_spec.rb +37 -0
  68. data/spec/operawatir/desktop/quicktreeitem_spec.rb +135 -0
  69. data/spec/operawatir/desktop/quicktreeview_spec.rb +30 -0
  70. data/spec/operawatir/desktop/quickwidget_spec.rb +101 -0
  71. data/spec/operawatir/desktop/quickwindow_spec.rb +108 -0
  72. data/spec/operawatir/desktop/shared/shared.rb +138 -0
  73. data/spec/operawatir/fixtures/boxes.html +22 -0
  74. data/spec/operawatir/fixtures/browsers.svg +367 -0
  75. data/spec/operawatir/fixtures/frames.html +13 -0
  76. data/spec/operawatir/fixtures/grid.html +29 -0
  77. data/spec/operawatir/fixtures/input_fields_value.html +6 -0
  78. data/spec/operawatir/fixtures/onclick.html +20 -0
  79. data/spec/operawatir/fixtures/paragraphs.html +15 -0
  80. data/spec/operawatir/fixtures/two_input_fields.html +6 -0
  81. data/spec/{new_watirspec → operawatir}/guards.rb +0 -0
  82. data/spec/operawatir/matchers.rb +68 -0
  83. data/spec/{legacy_watirspec → operawatir}/server.rb +0 -0
  84. data/spec/operawatir/watirspec.rake +43 -0
  85. data/spec/operawatir/watirspec_desktophelper.rb +14 -0
  86. data/spec/operawatir/watirspec_helper.rb +62 -0
  87. data/spec/{legacy_watirspec → watir2}/area_spec.rb +0 -0
  88. data/spec/{legacy_watirspec → watir2}/areas_spec.rb +0 -0
  89. data/spec/{legacy_watirspec → watir2}/browser_spec.rb +2 -0
  90. data/spec/{legacy_watirspec → watir2}/button_spec.rb +0 -0
  91. data/spec/{legacy_watirspec → watir2}/buttons_spec.rb +0 -0
  92. data/spec/{legacy_watirspec → watir2}/checkbox_spec.rb +0 -0
  93. data/spec/{legacy_watirspec → watir2}/checkboxes_spec.rb +0 -0
  94. data/spec/{legacy_watirspec → watir2}/collections_spec.rb +0 -0
  95. data/spec/{legacy_watirspec → watir2}/dd_spec.rb +0 -0
  96. data/spec/{legacy_watirspec → watir2}/dds_spec.rb +0 -0
  97. data/spec/{legacy_watirspec → watir2}/del_spec.rb +0 -0
  98. data/spec/{legacy_watirspec → watir2}/dels_spec.rb +0 -0
  99. data/spec/{legacy_watirspec → watir2}/div_spec.rb +0 -0
  100. data/spec/{legacy_watirspec → watir2}/divs_spec.rb +0 -0
  101. data/spec/{legacy_watirspec → watir2}/dl_spec.rb +0 -0
  102. data/spec/{legacy_watirspec → watir2}/dls_spec.rb +0 -0
  103. data/spec/{legacy_watirspec → watir2}/dt_spec.rb +0 -0
  104. data/spec/{legacy_watirspec → watir2}/dts_spec.rb +0 -0
  105. data/spec/watir2/element_spec.rb +155 -0
  106. data/spec/{legacy_watirspec → watir2}/em_spec.rb +0 -0
  107. data/spec/{legacy_watirspec → watir2}/ems_spec.rb +0 -0
  108. data/spec/{legacy_watirspec → watir2}/filefield_spec.rb +0 -0
  109. data/spec/{legacy_watirspec → watir2}/filefields_spec.rb +0 -0
  110. data/spec/{legacy_watirspec → watir2}/fixtures/2000_spans.html +0 -0
  111. data/spec/{legacy_watirspec → watir2}/fixtures/bug_duplicate_attributes.html +0 -0
  112. data/spec/{legacy_watirspec → watir2}/fixtures/bug_javascript_001.html +0 -0
  113. data/spec/{legacy_watirspec → watir2}/fixtures/buttons_with_duplicate_ids.html +0 -0
  114. data/spec/{legacy_watirspec → watir2}/fixtures/collections.html +0 -0
  115. data/spec/{legacy_watirspec → watir2}/fixtures/definition_lists.html +0 -0
  116. data/spec/{legacy_watirspec → watir2}/fixtures/euc-jp_text.html +0 -0
  117. data/spec/{legacy_watirspec → watir2}/fixtures/forms_with_input_elements.html +0 -0
  118. data/spec/{legacy_watirspec → watir2}/fixtures/frame_1.html +0 -0
  119. data/spec/{legacy_watirspec → watir2}/fixtures/frame_2.html +0 -0
  120. data/spec/{legacy_watirspec → watir2}/fixtures/frames.html +0 -0
  121. data/spec/{legacy_watirspec → watir2}/fixtures/iframes.html +0 -0
  122. data/spec/{legacy_watirspec → watir2}/fixtures/images.html +0 -0
  123. data/spec/{legacy_watirspec → watir2}/fixtures/images/1.gif +0 -0
  124. data/spec/{legacy_watirspec → watir2}/fixtures/images/2.gif +0 -0
  125. data/spec/{legacy_watirspec → watir2}/fixtures/images/3.gif +0 -0
  126. data/spec/{legacy_watirspec → watir2}/fixtures/images/button.jpg +0 -0
  127. data/spec/{legacy_watirspec → watir2}/fixtures/images/circle.jpg +0 -0
  128. data/spec/{legacy_watirspec → watir2}/fixtures/images/map.gif +0 -0
  129. data/spec/{legacy_watirspec → watir2}/fixtures/images/map2.gif +0 -0
  130. data/spec/{legacy_watirspec → watir2}/fixtures/images/minus.gif +0 -0
  131. data/spec/{legacy_watirspec → watir2}/fixtures/images/originaltriangle.jpg +0 -0
  132. data/spec/{legacy_watirspec → watir2}/fixtures/images/plus.gif +0 -0
  133. data/spec/{legacy_watirspec → watir2}/fixtures/images/square.jpg +0 -0
  134. data/spec/{legacy_watirspec → watir2}/fixtures/images/triangle.jpg +0 -0
  135. data/spec/{legacy_watirspec → watir2}/fixtures/iso-2022-jp_text.html +0 -0
  136. data/spec/{legacy_watirspec → watir2}/fixtures/javascript/helpers.js +0 -0
  137. data/spec/{legacy_watirspec → watir2}/fixtures/jquery.html +0 -0
  138. data/spec/{legacy_watirspec → watir2}/fixtures/latin1_text.html +0 -0
  139. data/spec/{legacy_watirspec → watir2}/fixtures/multiple_ids.html +0 -0
  140. data/spec/{legacy_watirspec → watir2}/fixtures/non_control_elements.html +0 -0
  141. data/spec/{legacy_watirspec → watir2}/fixtures/parser_bug_001.html +0 -0
  142. data/spec/{legacy_watirspec → watir2}/fixtures/prevent_form_submit.html +0 -0
  143. data/spec/{legacy_watirspec → watir2}/fixtures/right_click.html +0 -0
  144. data/spec/{legacy_watirspec → watir2}/fixtures/shift_jis_text.html +0 -0
  145. data/spec/{legacy_watirspec → watir2}/fixtures/tables.html +0 -0
  146. data/spec/{legacy_watirspec → watir2}/fixtures/timeout.html +0 -0
  147. data/spec/{legacy_watirspec → watir2}/fixtures/timeout_window_location.html +0 -0
  148. data/spec/{legacy_watirspec → watir2}/fixtures/tiny_mce.html +0 -0
  149. data/spec/{legacy_watirspec → watir2}/fixtures/utf8_text.html +0 -0
  150. data/spec/{legacy_watirspec → watir2}/fixtures/watirspec.css +0 -0
  151. data/spec/{legacy_watirspec → watir2}/form_spec.rb +0 -0
  152. data/spec/{legacy_watirspec → watir2}/forms_spec.rb +0 -0
  153. data/spec/{legacy_watirspec → watir2}/frame_spec.rb +0 -0
  154. data/spec/{legacy_watirspec → watir2}/frames_spec.rb +0 -0
  155. data/spec/{legacy_watirspec → watir2}/guards.rb +0 -0
  156. data/spec/{legacy_watirspec → watir2}/hidden_spec.rb +0 -0
  157. data/spec/{legacy_watirspec → watir2}/hiddens_spec.rb +0 -0
  158. data/spec/{legacy_watirspec → watir2}/hn_spec.rb +0 -0
  159. data/spec/{legacy_watirspec → watir2}/hns_spec.rb +0 -0
  160. data/spec/{legacy_watirspec → watir2}/image_spec.rb +0 -0
  161. data/spec/{legacy_watirspec → watir2}/images_spec.rb +0 -0
  162. data/spec/{legacy_watirspec → watir2}/ins_spec.rb +0 -0
  163. data/spec/{legacy_watirspec → watir2}/inses_spec.rb +0 -0
  164. data/spec/{legacy_watirspec → watir2}/label_spec.rb +0 -0
  165. data/spec/{legacy_watirspec → watir2}/labels_spec.rb +0 -0
  166. data/spec/{legacy_watirspec → watir2}/li_spec.rb +0 -0
  167. data/spec/{legacy_watirspec → watir2}/link_spec.rb +0 -0
  168. data/spec/{legacy_watirspec → watir2}/links_spec.rb +0 -0
  169. data/spec/{legacy_watirspec → watir2}/lis_spec.rb +0 -0
  170. data/spec/{legacy_watirspec → watir2}/map_spec.rb +0 -0
  171. data/spec/{legacy_watirspec → watir2}/maps_spec.rb +0 -0
  172. data/spec/{legacy_watirspec → watir2}/meta_spec.rb +0 -0
  173. data/spec/{legacy_watirspec → watir2}/metas_spec.rb +0 -0
  174. data/spec/{legacy_watirspec → watir2}/ol_spec.rb +0 -0
  175. data/spec/{legacy_watirspec → watir2}/ols_spec.rb +0 -0
  176. data/spec/{legacy_watirspec → watir2}/option_spec.rb +0 -0
  177. data/spec/{legacy_watirspec → watir2}/p_spec.rb +0 -0
  178. data/spec/{legacy_watirspec → watir2}/pre_spec.rb +0 -0
  179. data/spec/{legacy_watirspec → watir2}/pres_spec.rb +0 -0
  180. data/spec/{legacy_watirspec → watir2}/ps_spec.rb +0 -0
  181. data/spec/{legacy_watirspec → watir2}/radio_spec.rb +0 -0
  182. data/spec/{legacy_watirspec → watir2}/radios_spec.rb +0 -0
  183. data/spec/{legacy_watirspec → watir2}/select_list_spec.rb +84 -71
  184. data/spec/{legacy_watirspec → watir2}/select_lists_spec.rb +0 -0
  185. data/spec/{new_watirspec → watir2}/server.rb +0 -0
  186. data/spec/{legacy_watirspec → watir2}/span_spec.rb +0 -0
  187. data/spec/{legacy_watirspec → watir2}/spans_spec.rb +0 -0
  188. data/spec/{legacy_watirspec → watir2}/spec_helper.rb +0 -0
  189. data/spec/{legacy_watirspec → watir2}/strong_spec.rb +0 -0
  190. data/spec/{legacy_watirspec → watir2}/strongs_spec.rb +0 -0
  191. data/spec/{legacy_watirspec → watir2}/table_bodies_spec.rb +0 -0
  192. data/spec/{legacy_watirspec → watir2}/table_body_spec.rb +0 -0
  193. data/spec/{legacy_watirspec → watir2}/table_cell_spec.rb +0 -0
  194. data/spec/{legacy_watirspec → watir2}/table_cells_spec.rb +0 -0
  195. data/spec/{legacy_watirspec → watir2}/table_footer_spec.rb +0 -0
  196. data/spec/{legacy_watirspec → watir2}/table_footers_spec.rb +0 -0
  197. data/spec/{legacy_watirspec → watir2}/table_header_spec.rb +0 -0
  198. data/spec/{legacy_watirspec → watir2}/table_headers_spec.rb +0 -0
  199. data/spec/{legacy_watirspec → watir2}/table_row_spec.rb +0 -0
  200. data/spec/{legacy_watirspec → watir2}/table_rows_spec.rb +0 -0
  201. data/spec/{legacy_watirspec → watir2}/table_spec.rb +0 -0
  202. data/spec/{legacy_watirspec → watir2}/tables_spec.rb +0 -0
  203. data/spec/{legacy_watirspec → watir2}/text_field_spec.rb +0 -0
  204. data/spec/{legacy_watirspec → watir2}/text_fields_spec.rb +0 -0
  205. data/spec/{legacy_watirspec → watir2}/ul_spec.rb +0 -0
  206. data/spec/{legacy_watirspec → watir2}/uls_spec.rb +0 -0
  207. data/spec/{legacy_watirspec → watir2}/watir_compatibility_spec.rb +0 -0
  208. data/spec/{legacy_watirspec → watir2}/watirspec_helper.rb +0 -0
  209. data/spec/{new_watirspec → watir3}/browser_spec.rb +11 -21
  210. data/spec/{new_watirspec → watir3}/clipboard_spec.rb +2 -2
  211. data/spec/{new_watirspec → watir3}/collection_spec.rb +0 -0
  212. data/spec/{new_watirspec → watir3}/element_spec.rb +30 -12
  213. data/spec/watir3/guards.rb +39 -0
  214. data/spec/{new_watirspec → watir3}/keys_spec.rb +0 -0
  215. data/spec/watir3/server.rb +91 -0
  216. data/spec/{new_watirspec → watir3}/watirspec_helper.rb +0 -0
  217. data/spec/{new_watirspec → watir3}/window_spec.rb +8 -83
  218. metadata +315 -280
  219. data/lib/operadriver/selenium-common.jar +0 -0
  220. data/spec/legacy_watirspec/element_spec.rb +0 -86
  221. data/spec/new_watirspec/preferences_spec.rb +0 -144
  222. data/spec/new_watirspec/screenshot_spec.rb +0 -34
@@ -0,0 +1,4 @@
1
+ OperaWatir Specification
2
+ ========================
3
+
4
+ This is the specification for Opera-only functionality which is not covered by the Watir 2 or 3 specifications.
@@ -0,0 +1,82 @@
1
+ require File.expand_path('../../watirspec_helper', __FILE__)
2
+
3
+ describe 'Browser' do
4
+
5
+ # Note: This method is deprecated, but still needs to be tested.
6
+ describe '#opera_action' do
7
+ it 'executes the specified action' do
8
+ browser.url = fixture('input_fields_value.html')
9
+ window.find_by_id('one').click
10
+ browser.opera_action('Select all')
11
+ window.eval_js('one = document.getElementById("one");')
12
+ window.eval_js('one.value.substr(one.selectionStart, one.selectionEnd - one.selectionStart)').to_s.should == 'foobar'
13
+ end
14
+ end
15
+
16
+ # Note: This method is deprecated, but still needs to be tested.
17
+ describe '#opera_action_list' do
18
+ it 'returns a list of available Opera actions' do
19
+ browser.url = 'about:blank'
20
+ browser.opera_action_list.should include 'Copy'
21
+ browser.opera_action_list.should include 'Paste'
22
+ end
23
+ end
24
+
25
+ # Note: This method is deprecated, but still needs to be tested.
26
+ describe '#key' do
27
+ it 'presses the specified key' do
28
+ browser.url = fixture('two_input_fields.html')
29
+ window.find_by_name('one').click
30
+ browser.key 'a'
31
+ window.find_by_name('one').value.should == 'a'
32
+ end
33
+ end
34
+
35
+ # Note: This method is deprecated, but still needs to be tested.
36
+ describe '#key_down' do
37
+ it 'holds down the specfied key' do
38
+ browser.url = fixture('grid.html')
39
+ browser.key_down 'Shift' # This invokes spatnav on desktop browsers
40
+ browser.key 'Down'
41
+ browser.key 'Down'
42
+ browser.key_up 'Shift'
43
+ window.execute_script("document.activeElement.text;").to_s.should == 'C2'
44
+ end
45
+ end
46
+
47
+ # Note: This method is deprecated, but still needs to be tested.
48
+ describe '#key_up' do
49
+ it 'releases the specfied key' do
50
+ browser.url = fixture('grid.html')
51
+ browser.key_down 'Shift' # This invokes spatnav on desktop browsers
52
+ browser.key 'Down'
53
+ browser.key 'Down'
54
+ browser.key_up 'Shift'
55
+ browser.key 'Down'
56
+ window.execute_script("document.activeElement.text;").to_s.should == 'C2'
57
+ end
58
+ end
59
+
60
+ # Note: This method is deprecated, but still needs to be tested.
61
+ describe '#type' do
62
+ it 'types a string of characters' do
63
+ browser.url = fixture('two_input_fields.html')
64
+ window.find_by_name('one').click
65
+ browser.type 'foobar'
66
+ window.find_by_name('one').value.should == 'foobar'
67
+ end
68
+ end
69
+
70
+ describe '#desktop?' do
71
+ it 'returns true or false' do
72
+ [true,false].should include browser.desktop?
73
+ end
74
+ end
75
+
76
+ describe '#version' do
77
+ it 'fetches the version number of the driver' do
78
+ browser.version.should match /\d{1,}\.\d{1,}\.\d{1,}/
79
+ end
80
+ end
81
+
82
+ end
@@ -0,0 +1,88 @@
1
+ require File.expand_path('../../watirspec_helper', __FILE__)
2
+ require 'tmpdir'
3
+
4
+ describe 'Element' do
5
+
6
+ describe '#triple_click' do
7
+ it 'clicks three times' do
8
+ browser.url = fixture('onclick.html')
9
+ window.find_by_tag('button').triple_click
10
+ window.find_by_id('clicks').text.should == '3'
11
+ end
12
+ end
13
+
14
+ describe '#quadruple_click' do
15
+ it 'clicks four times' do
16
+ browser.url = fixture('onclick.html')
17
+ window.find_by_tag('button').quadruple_click
18
+ window.find_by_id('clicks').text.should == '4'
19
+ end
20
+ end
21
+
22
+ # This method is deprecated, but needs to be tested anyway.
23
+ describe '#compare_hash' do
24
+
25
+ before :each do
26
+ browser.url = fixture('boxes.html')
27
+ @one = window.find_by_id('one');
28
+ @two = window.find_by_id('two');
29
+ @three = window.find_by_id('three');
30
+ end
31
+
32
+ it 'interprets two visually different elements as different' do
33
+ @one.compare_hash(@two).should be_false
34
+ end
35
+
36
+ it 'interprets two visually identical elements as identical' do
37
+ @one.compare_hash(@three).should be_true
38
+ end
39
+ end
40
+
41
+ describe '#screenshot' do
42
+ after (:each) do
43
+ File.delete(Dir.tmpdir + '/screenshot.png')
44
+ end
45
+
46
+ it 'takes a screenshot of the specified element' do
47
+ browser.url = fixture('boxes.html')
48
+ window.find_by_id('one').screenshot(Dir.tmpdir + '/screenshot.png', 1000).should be_true
49
+ end
50
+ end
51
+
52
+ describe '#visual_hash' do
53
+
54
+ before :each do
55
+ browser.url = fixture('boxes.html')
56
+ @one = window.find_by_id('one');
57
+ @two = window.find_by_id('two');
58
+ @three = window.find_by_id('three');
59
+ @four = window.find_by_id('four');
60
+ end
61
+
62
+ it 'returns a hash' do
63
+ @one.visual_hash.should =~ /^(0x)[a-f0-9]{32}$/
64
+ end
65
+
66
+ it 'returns identical hashes for visually identical elements' do
67
+ @one.visual_hash.should == @three.visual_hash
68
+ end
69
+
70
+ it 'returns different hashes for visually different elements' do
71
+ @one.visual_hash.should_not == @two.visual_hash
72
+ end
73
+
74
+ it 'returns correct hashes when querying several elements in sequence' do
75
+ @one.visual_hash.should == @three.visual_hash
76
+ @two.visual_hash.should == @four.visual_hash
77
+ @one.visual_hash.should_not == @two.visual_hash
78
+ @two.visual_hash.should_not == @three.visual_hash
79
+ end
80
+
81
+ it 'returns a hash of an SVG element' do
82
+ browser.url = fixture('browsers.svg')
83
+ window.find_by_tag('svg').visual_hash.should =~ /^(0x)[a-f0-9]{32}$/
84
+ end
85
+
86
+ end
87
+
88
+ end
@@ -0,0 +1,438 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.expand_path('../../watirspec_helper', __FILE__)
3
+
4
+ describe 'Preferences' do
5
+
6
+ before :all do
7
+ @prefs = browser.preferences
8
+ end
9
+
10
+ describe '#new' do
11
+ it 'constructs a new instance' do
12
+ @prefs.should exist
13
+ @prefs.should be_kind_of OperaWatir::Preferences
14
+ end
15
+ end
16
+
17
+ describe '#each' do
18
+ it 'contains a list of entries' do
19
+ @prefs.each do |p|
20
+ p.should be_kind_of OperaWatir::Preferences::Entry
21
+ end
22
+ end
23
+ end
24
+
25
+ describe '#length' do
26
+ it 'has a valid length' do
27
+ @prefs.length.should be_kind_of Integer
28
+ end
29
+
30
+ it 'has several sections' do
31
+ @prefs.length.should > 10
32
+ end
33
+
34
+ it 'responds to alias #size' do
35
+ @prefs.size.should == @prefs.length
36
+ end
37
+ end
38
+
39
+ describe '#first' do
40
+ it 'is a valid entry' do
41
+ @prefs.first.should be_kind_of OperaWatir::Preferences::Entry
42
+ end
43
+
44
+ it 'is a section' do
45
+ @prefs.first.should be_section
46
+ end
47
+
48
+ it 'has a key' do
49
+ @prefs.first.key.should_not be_empty
50
+ end
51
+
52
+ it 'has a method' do
53
+ @prefs.first.method.should match /^([a-z_]+)/
54
+ end
55
+ end
56
+
57
+ describe '#last' do
58
+ it 'is a valid entry' do
59
+ @prefs.last.should be_kind_of OperaWatir::Preferences::Entry
60
+ end
61
+
62
+ it 'is a section' do
63
+ @prefs.last.should be_section
64
+ end
65
+
66
+ it 'has a key' do
67
+ @prefs.last.key.should_not be_empty
68
+ end
69
+
70
+ it 'has a method' do
71
+ @prefs.last.method.should match /^([a-z_]+)/
72
+ end
73
+ end
74
+
75
+ describe '#empty?' do
76
+ it 'returns a valid type' do
77
+ @prefs.empty?.should be_kind_of FalseClass
78
+ end
79
+
80
+ it 'is not empty' do
81
+ @prefs.should_not be_empty
82
+ end
83
+ end
84
+
85
+ describe '#to_s' do
86
+ before :all do
87
+ @string = @prefs.to_s
88
+ end
89
+
90
+ it 'returns a string' do
91
+ @string.should be_kind_of String
92
+ end
93
+
94
+ it 'contains sections' do
95
+ @string.should match /^([a-z_]+)/
96
+ end
97
+
98
+ it 'contains keys' do
99
+ @string.should match /^\s{2}([a-z_]+)/
100
+ end
101
+
102
+ it 'contains values' do
103
+ @string.should match /^\s{4}value:.+\"(.+)\"/
104
+ end
105
+
106
+ it 'contains defaults' do
107
+ @string.should match /^\s{4}default:.+\"(.+)\"/
108
+ end
109
+ end
110
+
111
+ describe '#to_a' do
112
+ before :all do
113
+ @array = @prefs.to_a
114
+ end
115
+
116
+ it 'returns an array' do
117
+ @array.should be_kind_of Array
118
+ end
119
+
120
+ it 'returns entries of the type Preference::Entry' do
121
+ @array[0].should be_kind_of OperaWatir::Preferences::Entry
122
+ end
123
+
124
+ it 'has several entries' do
125
+ @array.size > 10
126
+ end
127
+
128
+ it 'contains keys' do
129
+ @array[0].key.should_not be_empty
130
+ @array[0].method.should match /([a-z_]+)/
131
+ end
132
+ end
133
+
134
+ describe 'Section' do # Preferences::Entry / Preferences#method_missing
135
+
136
+ before :all do
137
+ @section = @prefs.link
138
+ end
139
+
140
+ describe '#new' do
141
+ it 'constructs a new instance' do
142
+ @section.should exist
143
+ @section.should be_kind_of OperaWatir::Preferences::Entry
144
+ end
145
+ end
146
+
147
+ describe '#parent' do
148
+ it 'contains the parent class' do
149
+ @section.parent.should be_kind_of OperaWatir::Preferences
150
+ end
151
+ end
152
+
153
+ describe '#method' do
154
+ it 'has a valid method name' do
155
+ @section.method.should match /([a-z_]+)/
156
+ end
157
+ end
158
+
159
+ describe '#key' do
160
+ it 'has a key name' do
161
+ @section.key.should_not be_empty
162
+ end
163
+ end
164
+
165
+ describe '#value' do
166
+ it 'raises exception' do
167
+ lambda { @section.value }.should raise_error OperaWatir::Exceptions::PreferencesException
168
+ end
169
+ end
170
+
171
+ describe '#value=' do
172
+ it 'raises exception' do
173
+ lambda { @section.value = 'hoobaflooba' }.should raise_error OperaWatir::Exceptions::PreferencesException
174
+ end
175
+ end
176
+
177
+ describe '#default' do
178
+ it 'raises exception' do
179
+ lambda { @section.default }.should raise_error OperaWatir::Exceptions::PreferencesException
180
+ end
181
+ end
182
+
183
+ describe '#default!' do
184
+ it 'raises exception' do
185
+ lambda { @section.default! }.should raise_error OperaWatir::Exceptions::PreferencesException
186
+ end
187
+ end
188
+
189
+ describe '#section?' do
190
+ it 'returns a valid type' do
191
+ @section.section?.should be_kind_of TrueClass
192
+ end
193
+
194
+ it 'is a section' do
195
+ @section.section?.should be_true
196
+ end
197
+ end
198
+
199
+ describe '#exists?' do
200
+ it 'returns a valid type' do
201
+ @section.exists?.should be_kind_of TrueClass
202
+ end
203
+
204
+ it 'exists' do
205
+ @section.exists?.should be_true
206
+ end
207
+
208
+ it 'responds to alias #exist?' do
209
+ @section.exist?.should == @section.exists?
210
+ end
211
+ end
212
+
213
+ describe '#each' do
214
+ it 'contains a list of entries' do
215
+ @section.each do |k|
216
+ k.should be_kind_of OperaWatir::Preferences::Entry
217
+ end
218
+ end
219
+ end
220
+
221
+ describe '#length' do
222
+ it 'has a valid length' do
223
+ @section.length.should be_kind_of Integer
224
+ end
225
+
226
+ it 'has one or more keys' do
227
+ @section.length.should >= 1
228
+ end
229
+
230
+ it 'responds alias #size' do
231
+ @section.size.should == @section.length
232
+ end
233
+ end
234
+
235
+ describe '#first' do
236
+ it 'is a valid entry' do
237
+ @section.first.should be_kind_of OperaWatir::Preferences::Entry
238
+ end
239
+
240
+ it 'has a key' do
241
+ @section.first.key.should_not be_empty
242
+ end
243
+
244
+ it 'has a key which is not a section' do
245
+ @section.first.should_not be_section
246
+ end
247
+
248
+ it 'has a key with a method' do
249
+ @section.first.method.should match /^([a-z_]+)/
250
+ end
251
+ end
252
+
253
+ describe '#last' do
254
+ it 'is a valid entry' do
255
+ @section.last.should be_kind_of OperaWatir::Preferences::Entry
256
+ end
257
+
258
+ it 'has a key' do
259
+ @section.last.key.should_not be_empty
260
+ end
261
+
262
+ it 'is a key which is not section' do
263
+ @section.last.should_not be_section
264
+ end
265
+
266
+ it 'has a key with a method' do
267
+ @section.last.method.should match /^([a-z_]+)/
268
+ end
269
+ end
270
+
271
+ describe '#empty?' do
272
+ it 'returns a valid type' do
273
+ @section.empty?.should be_kind_of FalseClass
274
+ end
275
+
276
+ it 'is not empty' do
277
+ @section.should_not be_empty
278
+ end
279
+ end
280
+
281
+ describe 'Keys' do # Preferences::Entry / Entry#method_missing
282
+
283
+ before :all do
284
+ @key = @section.expiry
285
+ end
286
+
287
+ describe '#parent' do
288
+ it 'contains the parent class' do
289
+ @key.parent.should be_kind_of OperaWatir::Preferences::Entry
290
+ end
291
+ end
292
+
293
+ describe '#method' do
294
+ it 'has a valid method name' do
295
+ @key.method.should match /([a-z_]+)/
296
+ end
297
+ end
298
+
299
+ describe '#key' do
300
+ it 'has a key name' do
301
+ @section.key.should_not be_empty
302
+ end
303
+ end
304
+
305
+ describe '#type' do # TODO
306
+
307
+ # Note that the types aren't proper Ruby objects, but strings.
308
+
309
+ it '`expiry` is a type integer' do
310
+ @key.type.should include 'Integer'
311
+ end
312
+
313
+ it '`color` is a type boolean' do
314
+ @section.color.type.should include 'Boolean'
315
+ end
316
+
317
+ it '`opera_account.server_address` is a type string' do
318
+ @prefs.opera_account.server_address.type.should include 'String'
319
+ end
320
+ end
321
+
322
+ describe '#value' do
323
+ it 'returns a valid type' do
324
+ @key.value.should be_kind_of String
325
+ end
326
+
327
+ it 'is not empty' do
328
+ @key.value.should_not be_empty
329
+ end
330
+ end
331
+
332
+ describe '#value=' do
333
+ it 'is changed when set on a string preference' do
334
+ @key.value = '20'
335
+ @key.value.should == '20'
336
+ end
337
+
338
+ it 'is changed when set on an integer preference' do
339
+ @section.color.value = true
340
+ @section.color.value.should be_true
341
+ end
342
+
343
+ it 'has effect in the browser when changed' do
344
+ @section.strikethrough.value = '1' #true
345
+ window.url = fixture('../simple.html')
346
+ window.a.execute_script('this.currentStyle.textDecoration').should include /strike\-through/
347
+ end
348
+
349
+ # JRUBY-1127 makes it impossible to unwrap Java exceptions in JRuby.
350
+
351
+ # it 'does not allow setting an invalid value' do
352
+ # lambda { @section.color.value = 'foo' }.should raise_error NativeException
353
+ # end
354
+
355
+ after :each do
356
+ @key.default!
357
+ @section.color.default!
358
+ @section.strikethrough.default!
359
+ end
360
+ end
361
+
362
+ describe '#default' do
363
+ it 'returns the default value' do
364
+ @key.default.should == '10'
365
+ end
366
+ end
367
+
368
+ describe '#default!' do
369
+ before :each do
370
+ @key.value = '1337'
371
+ end
372
+
373
+ it 'returns and sets default value' do
374
+ @key.default!.should == @key.default
375
+ @key.value.should == @key.default
376
+ end
377
+
378
+ after :all do
379
+ @key.default!
380
+ end
381
+ end
382
+
383
+ describe '#section?' do
384
+ it 'returns a valid type' do
385
+ @key.section?.should be_kind_of FalseClass
386
+ end
387
+
388
+ it 'is not a section' do
389
+ @key.section?.should be_false
390
+ end
391
+ end
392
+
393
+ describe '#each' do
394
+ it 'raises error' do
395
+ lambda { @key.each { |e| } }.should raise_error OperaWatir::Exceptions::PreferencesException
396
+ end
397
+ end
398
+
399
+ describe '#length' do
400
+ it 'raises error' do
401
+ lambda { @key.length }.should raise_error OperaWatir::Exceptions::PreferencesException
402
+ end
403
+
404
+ it 'responds to alias #size' do
405
+ lambda { @key.size }.should raise_error OperaWatir::Exceptions::PreferencesException
406
+ end
407
+ end
408
+
409
+ describe '#first' do
410
+ it 'raises error' do
411
+ lambda { @key.first }.should raise_error OperaWatir::Exceptions::PreferencesException
412
+ end
413
+ end
414
+
415
+ describe '#last' do
416
+ it 'raises error' do
417
+ lambda { @key.last }.should raise_error OperaWatir::Exceptions::PreferencesException
418
+ end
419
+ end
420
+
421
+ describe '#empty?' do
422
+ it 'raises error' do
423
+ lambda { @key.empty? }.should raise_error OperaWatir::Exceptions::PreferencesException
424
+ end
425
+ end
426
+
427
+ end
428
+
429
+ end
430
+
431
+ describe '#cleanup' do; end # TODO
432
+ describe '#cleanup!' do; end # TODO
433
+
434
+ after :all do
435
+ @prefs.cleanup!
436
+ end
437
+
438
+ end