operawatir 0.4-jruby → 0.4.1-jruby

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 (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