celerity 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. data/History.txt +36 -0
  2. data/Manifest.txt +82 -0
  3. data/README.rdoc +78 -0
  4. data/Rakefile +25 -10
  5. data/celerity.gemspec +40 -0
  6. data/lib/celerity.rb +36 -20
  7. data/lib/celerity/browser.rb +396 -189
  8. data/lib/celerity/clickable_element.rb +25 -5
  9. data/lib/celerity/collections.rb +2 -2
  10. data/lib/celerity/container.rb +74 -61
  11. data/lib/celerity/default_viewer.rb +8 -4
  12. data/lib/celerity/disabled_element.rb +5 -5
  13. data/lib/celerity/element.rb +57 -35
  14. data/lib/celerity/element_collection.rb +22 -21
  15. data/lib/celerity/element_locator.rb +25 -18
  16. data/lib/celerity/elements/button.rb +13 -11
  17. data/lib/celerity/elements/file_field.rb +8 -4
  18. data/lib/celerity/elements/form.rb +7 -5
  19. data/lib/celerity/elements/frame.rb +6 -4
  20. data/lib/celerity/elements/image.rb +4 -4
  21. data/lib/celerity/elements/label.rb +1 -1
  22. data/lib/celerity/elements/link.rb +5 -5
  23. data/lib/celerity/elements/meta.rb +2 -1
  24. data/lib/celerity/elements/non_control_elements.rb +3 -3
  25. data/lib/celerity/elements/option.rb +7 -7
  26. data/lib/celerity/elements/radio_check.rb +18 -18
  27. data/lib/celerity/elements/select_list.rb +55 -25
  28. data/lib/celerity/elements/table.rb +21 -18
  29. data/lib/celerity/elements/table_cell.rb +1 -1
  30. data/lib/celerity/elements/table_elements.rb +1 -1
  31. data/lib/celerity/elements/table_row.rb +5 -5
  32. data/lib/celerity/elements/text_field.rb +33 -28
  33. data/lib/celerity/exception.rb +11 -5
  34. data/lib/celerity/htmlunit.rb +24 -8
  35. data/lib/celerity/htmlunit/commons-codec-1.4.jar +0 -0
  36. data/lib/celerity/htmlunit/htmlunit-2.6.jar +0 -0
  37. data/lib/celerity/htmlunit/htmlunit-core-js-2.6.jar +0 -0
  38. data/lib/celerity/htmlunit/nekohtml-1.9.13.jar +0 -0
  39. data/lib/celerity/htmlunit/{xercesImpl-2.8.1.jar → xercesImpl-2.9.1.jar} +0 -0
  40. data/lib/celerity/ignoring_web_connection.rb +15 -0
  41. data/lib/celerity/input_element.rb +1 -1
  42. data/lib/celerity/listener.rb +23 -17
  43. data/lib/celerity/short_inspect.rb +20 -0
  44. data/lib/celerity/util.rb +5 -2
  45. data/lib/celerity/version.rb +3 -10
  46. data/lib/celerity/viewer_connection.rb +89 -0
  47. data/lib/celerity/watir_compatibility.rb +2 -5
  48. data/lib/celerity/xpath_support.rb +48 -0
  49. data/spec/browser_authentication_spec.rb +16 -0
  50. data/spec/browser_spec.rb +300 -0
  51. data/spec/clickable_element_spec.rb +39 -0
  52. data/spec/default_viewer_spec.rb +23 -0
  53. data/spec/element_spec.rb +51 -0
  54. data/spec/filefield_spec.rb +18 -0
  55. data/spec/htmlunit_spec.rb +56 -0
  56. data/spec/index_offset_spec.rb +24 -0
  57. data/spec/listener_spec.rb +142 -0
  58. data/spec/spec_helper.rb +8 -0
  59. data/tasks/benchmark.rake +4 -0
  60. data/tasks/deployment.rake +43 -0
  61. data/tasks/environment.rake +7 -0
  62. data/tasks/fix.rake +25 -0
  63. data/tasks/jar.rake +4 -6
  64. data/tasks/rspec.rake +43 -0
  65. data/tasks/simple_ci.rake +94 -0
  66. data/tasks/snapshot.rake +22 -0
  67. data/tasks/website.rake +17 -0
  68. data/tasks/yard.rake +9 -0
  69. metadata +59 -26
  70. data/README.txt +0 -69
  71. data/lib/celerity/extra/method_generator.rb +0 -170
  72. data/lib/celerity/htmlunit/commons-codec-1.3.jar +0 -0
  73. data/lib/celerity/htmlunit/htmlunit-2.5-SNAPSHOT.jar +0 -0
  74. data/lib/celerity/htmlunit/htmlunit-core-js-2.5-SNAPSHOT.jar +0 -0
  75. data/lib/celerity/htmlunit/nekohtml-1.9.12-20090308.130127-11.jar +0 -0
@@ -7,7 +7,7 @@ module Celerity
7
7
 
8
8
  def click
9
9
  assert_exists_and_enabled
10
- @container.update_page(@object.click)
10
+ rescue_status_code_exception { @object.click }
11
11
  end
12
12
 
13
13
  #
@@ -16,7 +16,7 @@ module Celerity
16
16
 
17
17
  def double_click
18
18
  assert_exists_and_enabled
19
- @container.update_page(@object.dblClick)
19
+ rescue_status_code_exception { @object.dblClick }
20
20
  end
21
21
 
22
22
  #
@@ -25,7 +25,7 @@ module Celerity
25
25
 
26
26
  def right_click
27
27
  assert_exists_and_enabled
28
- @container.update_page(@object.rightClick)
28
+ rescue_status_code_exception { @object.rightClick }
29
29
  end
30
30
 
31
31
  #
@@ -37,12 +37,32 @@ module Celerity
37
37
 
38
38
  def click_and_attach
39
39
  assert_exists_and_enabled
40
- browser = Browser.new(:log_level => @browser.log_level)
41
- browser.update_page(@object.click)
40
+ browser = Browser.new(@browser.options.dup)
41
+ browser.webclient.set_cookie_manager(
42
+ @browser.webclient.get_cookie_manager
43
+ ) # hirobumi: we do want cookies as well.
44
+
45
+ @browser.disable_event_listener do
46
+ rescue_status_code_exception { browser.page = @object.click }
47
+ end
42
48
 
43
49
  browser
44
50
  end
45
51
 
52
+ #
53
+ # Click the element and just return the content as IO. Current page stays unchanged.
54
+ # This can be used to download content that normally isn't rendered in a browser.
55
+ #
56
+ # @return [IO]
57
+ #
58
+
59
+ def download
60
+ assert_exists_and_enabled
61
+ @browser.disable_event_listener do
62
+ @object.click.getWebResponse.getContentAsStream.to_io
63
+ end
64
+ end
65
+
46
66
  private
47
67
 
48
68
  def assert_exists_and_enabled
@@ -51,7 +51,7 @@ module Celerity
51
51
  class Dts < ElementCollection
52
52
  def element_class; Dt; end
53
53
  end
54
-
54
+
55
55
  class Ems < ElementCollection
56
56
  def element_class; Em; end
57
57
  end
@@ -113,7 +113,7 @@ module Celerity
113
113
  class Spans < ElementCollection
114
114
  def element_class; Span; end
115
115
  end
116
-
116
+
117
117
  class Strongs < ElementCollection
118
118
  def element_class; Strong; end
119
119
  end
@@ -1,5 +1,5 @@
1
1
  module Celerity
2
-
2
+
3
3
  #
4
4
  # This class contains methods for accessing elements inside a container,
5
5
  # usually the Browser object, meaning the current page.
@@ -30,6 +30,7 @@ module Celerity
30
30
 
31
31
  module Container
32
32
  include Celerity::Exception
33
+ include Celerity::ShortInspect
33
34
 
34
35
  # Points back to the Browser instance that contains this element
35
36
  attr_reader :browser
@@ -39,8 +40,8 @@ module Celerity
39
40
  #
40
41
  # @param [String, Regexp] expected_text The text to look for.
41
42
  # @return [Fixnum, nil] The index of the matched text, or nil if it doesn't match.
42
- #
43
-
43
+ #
44
+
44
45
  def contains_text(expected_text)
45
46
  assert_exists
46
47
  return nil unless respond_to? :text
@@ -54,41 +55,26 @@ module Celerity
54
55
  raise TypeError, "expected String or Regexp, got #{expected_text.inspect}:#{expected_text.class}"
55
56
  end
56
57
  end
57
-
58
+
59
+ #
60
+ # Override inspect for readability
61
+ #
62
+
63
+ def inspect
64
+ short_inspect :include => %w[@conditions @object]
65
+ end
66
+
58
67
  #
59
68
  # Used internally to update the container object.
60
69
  # @api private
61
70
  #
62
-
71
+
63
72
  def container=(container)
64
73
  @container = container
65
74
  @browser = container.browser
66
75
  container
67
76
  end
68
77
 
69
- #
70
- # Used internally to update the page object.
71
- # @api private
72
- #
73
-
74
- def update_page(page)
75
- @browser.page = page
76
- end
77
-
78
- #
79
- # Used internally.
80
- #
81
- # @param [String] string The string to match against.
82
- # @param [Regexp, String, #to_s] what The match we're looking for.
83
- # @return [Fixnum, true, false, nil]
84
- #
85
- # @api private
86
- #
87
-
88
- def matches?(string, what)
89
- Regexp === what ? string =~ what : string == what.to_s
90
- end
91
-
92
78
  #--
93
79
  # below methods sorted alphabetically
94
80
  #++
@@ -96,23 +82,23 @@ module Celerity
96
82
  #
97
83
  # @return [Celerity::Area]
98
84
  #
99
-
85
+
100
86
  def area(*args)
101
87
  Area.new(self, *args)
102
88
  end
103
-
89
+
104
90
  #
105
91
  # @return [Celerity::Areas]
106
92
  #
107
-
93
+
108
94
  def areas
109
95
  Areas.new(self)
110
96
  end
111
-
97
+
112
98
  #
113
99
  # @return [Celerity::Button]
114
100
  #
115
-
101
+
116
102
  def button(*args)
117
103
  Button.new(self, *args)
118
104
  end
@@ -120,23 +106,23 @@ module Celerity
120
106
  #
121
107
  # @return [Celerity::Buttons]
122
108
  #
123
-
109
+
124
110
  def buttons
125
111
  Buttons.new(self)
126
112
  end
127
-
113
+
128
114
  #
129
115
  # @return [Celerity::TableCell]
130
116
  #
131
-
117
+
132
118
  def cell(*args)
133
119
  TableCell.new(self, *args)
134
120
  end
135
-
121
+
136
122
  #
137
123
  # @return [Celerity::TableCells]
138
124
  #
139
-
125
+
140
126
  def cells
141
127
  TableCells.new(self)
142
128
  end
@@ -172,7 +158,7 @@ module Celerity
172
158
  def dd(*args)
173
159
  Dd.new(self, *args)
174
160
  end
175
-
161
+
176
162
  #
177
163
  # @return [Celerity::Dds]
178
164
  #
@@ -180,7 +166,7 @@ module Celerity
180
166
  def dds
181
167
  Dds.new(self)
182
168
  end
183
-
169
+
184
170
  #
185
171
  # @return [Celerity::Div]
186
172
  #
@@ -188,7 +174,7 @@ module Celerity
188
174
  def div(*args)
189
175
  Div.new(self, *args)
190
176
  end
191
-
177
+
192
178
  #
193
179
  # @return [Celerity::Divs]
194
180
  #
@@ -196,7 +182,7 @@ module Celerity
196
182
  def divs
197
183
  Divs.new(self)
198
184
  end
199
-
185
+
200
186
  #
201
187
  # @return [Celerity::Dl]
202
188
  #
@@ -212,7 +198,7 @@ module Celerity
212
198
  def dls
213
199
  Dls.new(self)
214
200
  end
215
-
201
+
216
202
  #
217
203
  # @return [Celerity::Dt]
218
204
  #
@@ -228,19 +214,19 @@ module Celerity
228
214
  def dts
229
215
  Dts.new(self)
230
216
  end
231
-
217
+
232
218
  #
233
219
  # @return [Celerity::Em]
234
- #
235
-
220
+ #
221
+
236
222
  def em(*args)
237
223
  Em.new(self, *args)
238
224
  end
239
-
225
+
240
226
  #
241
227
  # @return [Celerity::Ems]
242
- #
243
-
228
+ #
229
+
244
230
  def ems
245
231
  Ems.new(self)
246
232
  end
@@ -284,7 +270,7 @@ module Celerity
284
270
  def frame(*args)
285
271
  Frame.new(self, *args)
286
272
  end
287
-
273
+
288
274
  #
289
275
  # @return [Celerity::Frames]
290
276
  #
@@ -300,7 +286,7 @@ module Celerity
300
286
  def h1(*args)
301
287
  H1.new(self, *args)
302
288
  end
303
-
289
+
304
290
  #
305
291
  # @return [Celerity::H1s]
306
292
  #
@@ -340,7 +326,7 @@ module Celerity
340
326
  def h3s
341
327
  H3s.new(self)
342
328
  end
343
-
329
+
344
330
  #
345
331
  # @return [Celerity::H4]
346
332
  #
@@ -356,7 +342,7 @@ module Celerity
356
342
  def h4s
357
343
  H4s.new(self)
358
344
  end
359
-
345
+
360
346
  #
361
347
  # @return [Celerity::H5]
362
348
  #
@@ -372,7 +358,7 @@ module Celerity
372
358
  def h5s
373
359
  H5s.new(self)
374
360
  end
375
-
361
+
376
362
  #
377
363
  # @return [Celerity::H6]
378
364
  #
@@ -568,7 +554,7 @@ module Celerity
568
554
  #
569
555
  # @return [Celerity::Radio]
570
556
  #
571
-
557
+
572
558
  def radio(*args)
573
559
  Radio.new(self, *args)
574
560
  end
@@ -612,7 +598,7 @@ module Celerity
612
598
  def select_lists
613
599
  SelectLists.new(self)
614
600
  end
615
-
601
+
616
602
  #
617
603
  # @return [Celerity::Span]
618
604
  #
@@ -676,7 +662,7 @@ module Celerity
676
662
  def tbodies
677
663
  TableBodies.new(self)
678
664
  end
679
-
665
+
680
666
  #
681
667
  # @return [Celerity::TextField]
682
668
  #
@@ -692,7 +678,7 @@ module Celerity
692
678
  def text_fields
693
679
  TextFields.new(self)
694
680
  end
695
-
681
+
696
682
  #
697
683
  # @return [Celerity::TableFooter]
698
684
  #
@@ -709,14 +695,14 @@ module Celerity
709
695
  TableFooters.new(self)
710
696
  end
711
697
  alias_method :tfeet, :tfoots # :-)
712
-
698
+
713
699
  #
714
700
  # Watir's cells() won't find <th> elements.
715
701
  # This is a workaround.
716
702
  #
717
703
  # @return [Celerity::Th]
718
704
  #
719
-
705
+
720
706
  def th(*args)
721
707
  Th.new(self, *args)
722
708
  end
@@ -729,7 +715,7 @@ module Celerity
729
715
  def ths
730
716
  raise NotImplementedError
731
717
  end
732
-
718
+
733
719
  #
734
720
  # @return [Celerity::TableHeader]
735
721
  #
@@ -762,5 +748,32 @@ module Celerity
762
748
  Uls.new(self)
763
749
  end
764
750
 
751
+ private
752
+
753
+ #
754
+ # Used internally.
755
+ #
756
+ # @param [String] string The string to match against.
757
+ # @param [Regexp, String, #to_s] what The match we're looking for.
758
+ # @return [Fixnum, true, false, nil]
759
+ #
760
+ # @api private
761
+ #
762
+
763
+ def matches?(string, what)
764
+ Regexp === what ? string =~ what : string == what.to_s
765
+ end
766
+
767
+ #
768
+ # Rescues HtmlUnit::FailingHttpStatusCodeException and re-raises as
769
+ # Celerity::NavigationException to avoid the huge JRuby backtrace
770
+ #
771
+
772
+ def rescue_status_code_exception(&blk)
773
+ yield
774
+ rescue HtmlUnit::FailingHttpStatusCodeException => e
775
+ raise NavigationException, e.message, caller
776
+ end
777
+
765
778
  end # Container
766
779
  end # Celerity
@@ -1,10 +1,14 @@
1
1
  module Celerity
2
2
  class DefaultViewer
3
3
  IMAGE = "#{Celerity::DIR}/resources/no_viewer.png"
4
-
5
- def self.save(path = nil)
6
- return unless path
7
- FileUtils.copy(IMAGE, path)
4
+
5
+ class << self
6
+ def save(path = nil)
7
+ return unless path
8
+ FileUtils.copy(IMAGE, path)
9
+ end
10
+
11
+ def close; end
8
12
  end
9
13
  end
10
14
  end
@@ -1,12 +1,12 @@
1
1
  module Celerity
2
-
2
+
3
3
  #
4
4
  # Mixed in to all elements that can have the 'disabled' attribute.
5
5
  #
6
6
 
7
7
  module DisabledElement
8
8
  include Celerity::Exception
9
-
9
+
10
10
  #
11
11
  # Returns false if the element is disabled.
12
12
  #
@@ -17,14 +17,14 @@ module Celerity
17
17
 
18
18
  #
19
19
  # Returns true if the element is disabled.
20
- #
21
-
20
+ #
21
+
22
22
  def disabled?
23
23
  assert_exists unless defined?(@object) && @object
24
24
  @object.isDisabled
25
25
  end
26
26
  alias_method :disabled, :disabled?
27
-
27
+
28
28
  #
29
29
  # Used internally.
30
30
  # @api private