operawatir 0.3.2-jruby → 0.3.7.pre1-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 (53) hide show
  1. data/.gitmodules +3 -0
  2. data/.yardopts +0 -3
  3. data/Gemfile +5 -6
  4. data/Rakefile +7 -2
  5. data/VERSION +1 -1
  6. data/bin/desktopwatir +86 -93
  7. data/bin/operawatir +3 -18
  8. data/lib/operadriver/commons-io-2.0.1.jar +0 -0
  9. data/lib/operadriver/selenium-common.jar +0 -0
  10. data/lib/operadriver/webdriver-opera.jar +0 -0
  11. data/lib/operawatir/browser.rb +93 -77
  12. data/lib/operawatir/compat/browser.rb +5 -0
  13. data/lib/operawatir/compat/element.rb +10 -17
  14. data/lib/operawatir/compat.rb +0 -1
  15. data/lib/operawatir/desktop-waiter.rb +1 -143
  16. data/lib/operawatir/desktop_browser.rb +80 -33
  17. data/lib/operawatir/desktop_enums.rb +3 -3
  18. data/lib/operawatir/desktop_helper.rb +84 -0
  19. data/lib/operawatir/element.rb +23 -4
  20. data/lib/operawatir/exceptions.rb +3 -0
  21. data/lib/operawatir/helper.rb +4 -1
  22. data/lib/operawatir/platform.rb +0 -38
  23. data/lib/operawatir/preferences.rb +164 -0
  24. data/lib/operawatir/quickwidgets/quick_addressfield.rb +14 -0
  25. data/lib/operawatir/quickwidgets/quick_button.rb +7 -1
  26. data/lib/operawatir/quickwidgets/quick_checkbox.rb +5 -4
  27. data/lib/operawatir/quickwidgets/quick_dialogtab.rb +1 -1
  28. data/lib/operawatir/quickwidgets/quick_editfield.rb +9 -4
  29. data/lib/operawatir/quickwidgets/quick_thumbnail.rb +1 -1
  30. data/lib/operawatir/quickwidgets/quick_treeitem.rb +2 -2
  31. data/lib/operawatir/quickwidgets/quick_treeview.rb +2 -1
  32. data/lib/operawatir/quickwidgets/quick_widget.rb +51 -21
  33. data/lib/operawatir/quickwidgets/quick_window.rb +34 -19
  34. data/lib/operawatir/spatnav.rb +38 -0
  35. data/lib/operawatir/window.rb +76 -12
  36. data/lib/operawatir.rb +20 -4
  37. data/operawatir.gemspec +48 -28
  38. data/spec/new_watirspec/browser_spec.rb +5 -84
  39. data/spec/new_watirspec/clipboard_spec.rb +41 -56
  40. data/spec/new_watirspec/collection_spec.rb +2 -2
  41. data/spec/new_watirspec/element_spec.rb +8 -8
  42. data/spec/new_watirspec/keys_spec.rb +8 -10
  43. data/spec/new_watirspec/preferences_spec.rb +144 -0
  44. data/spec/new_watirspec/screenshot_spec.rb +34 -0
  45. data/spec/new_watirspec/spatnav_spec.rb +62 -0
  46. data/utils/formatters/operahelper_formatter.rb +50 -0
  47. data/utils/formatters/spartan_formatter.rb +29 -0
  48. metadata +126 -61
  49. data/lib/operawatir/compat/deprecation.rb +0 -46
  50. data/utils/launchers/launcher-linux-i686 +0 -0
  51. data/utils/launchers/launcher-linux-x86_64 +0 -0
  52. data/utils/launchers/launcher-mac +0 -0
  53. data/utils/launchers/launcher-win32-i86pc.exe +0 -0
@@ -1,79 +1,64 @@
1
- # encoding: utf-8
2
1
  require File.expand_path('../watirspec_helper', __FILE__)
3
2
 
4
- # These tests use the clipboard gem. On Linux, this gem requires
5
- # the xclip package to be installed.
3
+ # These tests use the clipboard gem. On GNU/Linux, this gem requires
4
+ # the xclip package to be installed. On Windows and Mac, it should
5
+ # work out of the box.
6
6
  require 'clipboard'
7
7
 
8
+ describe 'Browser' do
8
9
 
9
- # Clipboard API
10
- # ---------------
11
- describe '#select_all' do
12
- it 'selects the value of an input field' do
13
- browser.url = fixture('input_fields_value.html')
14
- window.find_by_name('one').click!
15
- browser.select_all
16
- window.eval_js('window.getSelection()').to_s should == 'foobar'
17
- end
18
- end
19
-
20
- describe '#copy' do
21
10
  before :each do
22
11
  Clipboard.clear
23
12
  browser.url = fixture('input_fields_value.html')
24
- window.find_by_name('one').click!
13
+ window.find_by_id('one').click
25
14
  browser.select_all
26
15
  end
27
16
 
28
- it 'copies a string to the keyboard' do
29
- browser.copy
30
- Clipboard.paste.should == 'foobar'
17
+ describe '#select_all' do
18
+ it 'selects the value of an input field' do
19
+ window.eval_js('one = document.getElementById("one");')
20
+ window.eval_js('one.value.substr(one.selectionStart, one.selectionEnd - one.selectionStart)').to_s.should == 'foobar'
21
+ end
31
22
  end
32
23
 
33
- it 'leaves the copied string alone' do
34
- browser.copy
35
- window.find_by_name('one').value.should == 'foobar'
36
- end
37
- end
24
+ describe '#copy' do
25
+ it 'copies a string to the keyboard' do
26
+ browser.copy
27
+ Clipboard.paste.should == 'foobar'
28
+ end
38
29
 
39
- describe '#cut!' do
40
- before :each do
41
- Clipboard.clear
42
- browser.url = fixture('input_fields_value.html')
43
- window.find_by_name('one').click!
44
- browser.select_all
30
+ it 'leaves the copied string alone' do
31
+ browser.copy
32
+ window.find_by_id('one').value.should == 'foobar'
33
+ end
45
34
  end
46
35
 
47
- it 'copies a string to the keyboard' do
48
- browser.cut!
49
- Clipboard.paste.should == 'foobar'
50
- end
36
+ describe '#cut' do
37
+ it 'copies a string to the keyboard' do
38
+ browser.cut
39
+ Clipboard.paste.should == 'foobar'
40
+ end
51
41
 
52
- it 'removes the cut string' do
53
- browser.cut!
54
- window.find_by_name('one').value.should == ''
42
+ it 'removes the cut string' do
43
+ browser.cut
44
+ window.find_by_id('one').value.should == ''
45
+ end
55
46
  end
56
- end
57
47
 
58
- describe '#paste' do
59
- before :each do
60
- Clipboard.clear
61
- browser.url = fixture('input_fields_value.html')
62
- window.find_by_name('one').click!
63
- browser.select_all
64
- end
48
+ describe '#paste' do
49
+ it 'pastes a copied string' do
50
+ browser.copy
51
+ window.find_by_id('two').click
52
+ browser.paste
53
+ window.find_by_id('two').value.should == 'foobar'
54
+ end
65
55
 
66
- it 'pastes a copied string' do
67
- browser.copy
68
- window.find_by_name('two').click!
69
- browser.paste
70
- window.find_by_name('two').value.should == 'foobar'
56
+ it 'pastes a cut string' do
57
+ browser.cut
58
+ window.find_by_id('two').click
59
+ browser.paste
60
+ window.find_by_id('two').value.should == 'foobar'
61
+ end
71
62
  end
72
63
 
73
- it 'pastes a cut string' do
74
- browser.cut
75
- window.find_by_name('two').click!
76
- browser.paste
77
- window.find_by_name('two').value.should == 'foobar'
78
- end
79
64
  end
@@ -251,10 +251,10 @@ describe 'Collection' do
251
251
  # states
252
252
  # ------
253
253
 
254
- describe '#click!' do
254
+ describe '#click' do
255
255
  it 'clicks all the elements in this collection' do
256
256
  collection = window.find_by_class('footer')
257
- collection.click!
257
+ collection.click
258
258
  collection.all? do |element|
259
259
  element.text.match(/Javascript/) != nil
260
260
  end.should be_true
@@ -264,16 +264,16 @@ describe 'Element' do
264
264
  end
265
265
  end
266
266
 
267
- # click!([x, y]) , x,y relative to element top left
268
- describe '#click!' do
267
+ # click([x, y]) , x,y relative to element top left
268
+ describe '#click' do
269
269
  it 'follows links' do
270
- window.find_by_id('link_3').first.click!
270
+ window.find_by_id('link_3').first.click
271
271
  window.url.should match /forms_with_input_elements\.html$/
272
272
  end
273
273
 
274
274
  it 'triggers onclick handlers' do
275
275
  div = window.find_by_id('best_language').first
276
- div.click!
276
+ div.click
277
277
  div.text.should == 'Ruby!'
278
278
  end
279
279
 
@@ -281,9 +281,9 @@ describe 'Element' do
281
281
  browser.url = fixture('forms_with_input_elements.html')
282
282
  checkbox = window.find_by_id('new_user_interests_cars').first
283
283
  checkbox.checked?.should be_false
284
- checkbox.click!
284
+ checkbox.click
285
285
  checkbox.checked?.should be_true
286
- checkbox.click!
286
+ checkbox.click
287
287
  checkbox.checked?.should be_false
288
288
  end
289
289
 
@@ -293,8 +293,8 @@ describe 'Element' do
293
293
  browser.url = fixture('forms_with_input_elements.html')
294
294
 
295
295
  select = window.find_by_id('new_user_country')
296
- select.click!
297
- select.option[0].click!
296
+ select.click
297
+ select.option[0].click
298
298
  select.option[0].selected?.should be_true
299
299
  end
300
300
  end
@@ -1,10 +1,9 @@
1
- # encoding: utf-8
1
+ # -*- coding: utf-8 -*-
2
2
  require File.expand_path('../watirspec_helper', __FILE__)
3
3
 
4
4
  # keyboard input
5
5
  # ---------------
6
- describe '#keys' do
7
-
6
+ describe 'Keys' do
8
7
  after :each do
9
8
  browser.keys.release
10
9
  end
@@ -14,7 +13,7 @@ describe '#keys' do
14
13
  browser.url = fixture('two_input_fields.html')
15
14
  @one = window.find_by_name('one')
16
15
  @two = window.find_by_name('two')
17
- @one.click!
16
+ @one.click
18
17
  end
19
18
 
20
19
  it 'types a single character' do
@@ -69,7 +68,6 @@ describe '#keys' do
69
68
  end
70
69
 
71
70
  it 'presses an invalid key' do
72
- p browser.driver.key('hoobaflooba')
73
71
  browser.keys.send(:hoobaflooba).should raise_error InvalidKeyException
74
72
  end
75
73
  end
@@ -77,7 +75,7 @@ describe '#keys' do
77
75
  describe '#down' do
78
76
  it 'types a mixed-case string by holding shift' do
79
77
  browser.url = fixture('two_input_fields.html')
80
- window.find_by_name('one').click!
78
+ window.find_by_name('one').click
81
79
  browser.keys.send 'a'
82
80
  browser.keys.down :shift
83
81
  browser.keys.send 'b'
@@ -87,7 +85,7 @@ describe '#keys' do
87
85
 
88
86
  it 'holds down a non-modifier key for one second' do
89
87
  browser.url = fixture('two_input_fields.html')
90
- window.find_by_name('one').click!
88
+ window.find_by_name('one').click
91
89
  browser.keys.down 'a'
92
90
  sleep 1
93
91
  browser.keys.up 'a'
@@ -129,7 +127,7 @@ describe '#keys' do
129
127
  describe '#up' do
130
128
  it 'types a mixed-case string by holding shift' do
131
129
  browser.url = fixture('two_input_fields.html')
132
- window.find_by_name('one').click!
130
+ window.find_by_name('one').click
133
131
  browser.keys.down :shift
134
132
  browser.keys.send 'a'
135
133
  browser.keys.send 'b' # Testing that we do not release prematurely
@@ -140,7 +138,7 @@ describe '#keys' do
140
138
 
141
139
  it 'holds down a non-modifier key for one second (but no longer)' do
142
140
  browser.url = fixture('two_input_fields.html')
143
- window.find_by_name('one').click!
141
+ window.find_by_name('one').click
144
142
  browser.keys.down 'a'
145
143
  sleep 1
146
144
  browser.keys.up 'a'
@@ -186,7 +184,7 @@ describe '#keys' do
186
184
  describe '#release' do
187
185
  it 'releases one button' do
188
186
  browser.url = fixture('two_input_fields.html')
189
- window.find_by_name('one').click!
187
+ window.find_by_name('one').click
190
188
  browser.keys.down :shift
191
189
  browser.keys.send 'a'
192
190
  browser.keys.release
@@ -0,0 +1,144 @@
1
+ require File.expand_path('../watirspec_helper', __FILE__)
2
+
3
+ describe 'Preferences' do
4
+
5
+ before :all do
6
+ @prefs = browser.preferences
7
+ end
8
+
9
+ describe '#new' do
10
+ it 'constructs a new instance' do
11
+ @prefs.exist?.should be_true
12
+ end
13
+ end
14
+
15
+ describe '#to_s' do; end
16
+
17
+ describe '#each_section' do # #each is an alias
18
+ it 'contains a list' do
19
+ @prefs.each_section do |p|
20
+ p.kind_of?(OperaWatir::Preferences::Entry).should be_true
21
+ end
22
+ end
23
+ end
24
+
25
+ describe '#length' do; end # #size is an alias
26
+ describe '#last' do; end
27
+ describe '#empty?' do; end
28
+
29
+ describe 'Section' do # Entry / Preferences#method_missing
30
+
31
+ before :all do
32
+ @section = @prefs.link
33
+ end
34
+
35
+ describe '#new' do
36
+ it 'constructs a new instance' do
37
+ @section.exist?.should be_true
38
+ end
39
+ end
40
+
41
+ describe '#value' do; end
42
+ describe '#value=' do; end
43
+ describe '#default' do; end
44
+ describe '#default!' do; end
45
+ describe '#each_key' do; end # #each is an alias
46
+
47
+ describe '#is_section?' do
48
+ it 'is a section' do
49
+ @section.is_section?.should be_true
50
+ end
51
+ end
52
+
53
+ describe 'Keys' do # Entry / Entry#method_missing
54
+
55
+ before :all do
56
+ @key = @section.expiry
57
+ end
58
+
59
+ describe '#type' do
60
+ it '`expiry` is a type integer' do
61
+ @key.type.should include 'Integer'
62
+ end
63
+
64
+ it '`color` is a type boolean' do
65
+ @section.color.type.should include 'Boolean'
66
+ end
67
+
68
+ it '`opera_account.server_address` is a type string' do
69
+ @prefs.opera_account.server_address.should include 'String'
70
+ end
71
+ end
72
+
73
+ describe '#value' do
74
+ it 'is not empty' do
75
+ @key.value.should_not be_empty
76
+ end
77
+
78
+ it 'is numeric' do
79
+ @key.value.should be_numeric
80
+ end
81
+ end
82
+
83
+ describe '#value=' do
84
+ it 'is changed when set' do
85
+ @key.value = '20'
86
+ @key.value.should == '20'
87
+ end
88
+
89
+ it 'has effect in the browser when changed' do
90
+ @section.strike_through.value = true
91
+ window.url = fixture('simple.html')
92
+ window.a.eval_js('this.currentStyle.textDecoration').should include /strike\-through/
93
+ end
94
+
95
+ it 'does not allow setting an invalid value' do
96
+ old_value = @section.color.value
97
+ @section.color.value = 'foo'
98
+ @section.color.value.should_not == 'foo'
99
+ @section.color.value.should == old_value
100
+ end
101
+ end
102
+
103
+ describe '#default' do
104
+ it 'returns the default value' do
105
+ @key.default == '10'
106
+ end
107
+ end
108
+
109
+ describe '#default!' do
110
+ before :each do
111
+ @default_value = @key.default
112
+ @key.value = '1337'
113
+ end
114
+
115
+ it 'returns and sets default value' do
116
+ @key.default!.should == @default_value
117
+ @key.value.should == @default_value
118
+ end
119
+
120
+ after :all do
121
+ @key.value = @default_value
122
+ end
123
+ end
124
+
125
+ describe '#each_key' do; end # #each is an alias
126
+
127
+ describe '#is_section?' do
128
+ it 'is not a section' do
129
+ @key.is_section?.should be_false
130
+ end
131
+ end
132
+
133
+ end
134
+
135
+ end
136
+
137
+ describe '#cleanup' do; end
138
+ describe '#cleanup!' do; end
139
+
140
+ after :all do
141
+ @prefs.cleanup!
142
+ end
143
+
144
+ end
@@ -0,0 +1,34 @@
1
+ require File.expand_path('../watirspec_helper', __FILE__)
2
+
3
+ describe 'Element' do
4
+
5
+ before :each do
6
+ browser.url = fixture('boxes.html')
7
+ @one = window.find_by_id('one');
8
+ @two = window.find_by_id('two');
9
+ @three = window.find_by_id('three');
10
+ @four = window.find_by_id('four');
11
+ end
12
+
13
+ describe '#visual_hash' do
14
+ it 'returns a hash' do
15
+ @one.visual_hash.length.should == 34
16
+ end
17
+
18
+ it 'returns identical hashes for visually identical elements' do
19
+ @one.visual_hash.should == @three.visual_hash
20
+ end
21
+
22
+ it 'returns different hashes for visually different elements' do
23
+ @one.visual_hash.should_not == @two.visual_hash
24
+ end
25
+
26
+ it 'returns correct hashes when querying several elements in sequence' do
27
+ @one.visual_hash.should == @three.visual_hash
28
+ @two.visual_hash.should == @four.visual_hash
29
+ @one.visual_hash.should_not == @two.visual_hash
30
+ @two.visual_hash.should_not == @three.visual_hash
31
+ end
32
+ end
33
+ end
34
+
@@ -0,0 +1,62 @@
1
+ require File.expand_path('../watirspec_helper', __FILE__)
2
+
3
+ describe 'Spatnav' do
4
+
5
+ before :each do
6
+ browser.url = fixture('grid.html')
7
+ end
8
+
9
+ describe '#up' do
10
+ it 'selects the correct links when navigating up' do
11
+ browser.spatnav.up
12
+ window.execute_script("document.activeElement.text;").to_s.should == 'C1'
13
+ browser.spatnav.up
14
+ window.execute_script("document.activeElement.text;").to_s.should == 'C2'
15
+ browser.spatnav.up
16
+ window.execute_script("document.activeElement.text;").to_s.should == 'C3'
17
+ end
18
+ end
19
+
20
+ describe '#down' do
21
+ it 'selects the correct links when navigating down' do
22
+ browser.spatnav.down
23
+ window.execute_script("document.activeElement.text;").to_s.should == 'C3'
24
+ browser.spatnav.down
25
+ window.execute_script("document.activeElement.text;").to_s.should == 'C2'
26
+ browser.spatnav.down
27
+ window.execute_script("document.activeElement.text;").to_s.should == 'C1'
28
+ end
29
+ end
30
+
31
+ describe '#left' do
32
+ it 'selects the correct links when navigating left' do
33
+ browser.spatnav.left
34
+ window.execute_script("document.activeElement.text;").to_s.should == 'C1'
35
+ browser.spatnav.left
36
+ window.execute_script("document.activeElement.text;").to_s.should == 'B1'
37
+ browser.spatnav.left
38
+ window.execute_script("document.activeElement.text;").to_s.should == 'A1'
39
+ end
40
+ end
41
+
42
+ describe '#right' do
43
+ it 'selects the correct links when navigating right' do
44
+ browser.spatnav.right
45
+ window.execute_script("document.activeElement.text;").to_s.should == 'A1'
46
+ browser.spatnav.right
47
+ window.execute_script("document.activeElement.text;").to_s.should == 'B1'
48
+ browser.spatnav.right
49
+ window.execute_script("document.activeElement.text;").to_s.should == 'C1'
50
+ end
51
+ end
52
+
53
+ describe '#activate!' do
54
+ it 'activates the focused link' do
55
+ browser.spatnav.down
56
+ browser.spatnav.activate
57
+ window.url.should include 'C3'
58
+ end
59
+ end
60
+
61
+
62
+ end
@@ -0,0 +1,50 @@
1
+ # OperaHelperFormatter is intended for use with OperaHelper, which can
2
+ # be loaded using
3
+ #
4
+ # require "operawatir/helper"
5
+ #
6
+ # in your RSpec test suite.
7
+
8
+ class OperaHelperFormatter < Spec::Runner::Formatter::BaseTextFormatter
9
+ def example_failed (example, counter, failure)
10
+ output.puts message example, colorize_failure("FAILED", failure)
11
+ output.flush
12
+ end
13
+
14
+ def example_passed (example)
15
+ output.puts message example, green("PASSED")
16
+ output.flush
17
+ end
18
+
19
+ def example_pending (example, message)
20
+ output.puts message example, blue("PENDING")
21
+ output.flush
22
+ end
23
+
24
+ def example_group_started (example_group_proxy)
25
+ message = line +
26
+ example_group_proxy.description + " (" + example_group_proxy.examples.size.to_s + " examples)\n" +
27
+ line
28
+
29
+ output.puts(message)
30
+ output.flush
31
+ end
32
+
33
+ def message (example, text)
34
+ example.description.ljust(OperaWatir::Helper.terminal_size[0] - 7) + text
35
+ end
36
+
37
+ def line
38
+ message = ""
39
+ i = 0
40
+
41
+ begin
42
+ message += "-"
43
+ i += 1
44
+ end while i < OperaWatir::Helper.terminal_size[0]
45
+
46
+ message += "\n"
47
+ return message
48
+ end
49
+ end
50
+
@@ -0,0 +1,29 @@
1
+ # SpartanFormatter is intended for use with Opera's internal testing
2
+ # environment SPARTAN.
3
+
4
+ require 'rspec/core/formatters/base_text_formatter'
5
+
6
+ class SpartanFormatter < RSpec::Core::Formatters::BaseTextFormatter
7
+ def example_failed(example)
8
+ message = "#{example.description}\tFAILED\n"
9
+ output.print message
10
+ end
11
+
12
+ def example_passed(example)
13
+ message = "#{example.description}\tPASSED\n"
14
+ output.print message
15
+ end
16
+
17
+ def example_pending(example)
18
+ message = "#{example.description}\tPENDING\n"
19
+ output.print message
20
+ end
21
+
22
+ def start_dump
23
+ output.puts
24
+ end
25
+
26
+ # def dump_summary(duration, example_count, failure_count, pending_count); end
27
+ # def dump_pending; end
28
+ # def dump_failure(counter, failure); end
29
+ end