jarib-celerity 0.0.5

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 (69) hide show
  1. data/History.txt +42 -0
  2. data/License.txt +621 -0
  3. data/README.txt +64 -0
  4. data/Rakefile +12 -0
  5. data/lib/celerity.rb +59 -0
  6. data/lib/celerity/browser.rb +410 -0
  7. data/lib/celerity/clickable_element.rb +26 -0
  8. data/lib/celerity/collections.rb +148 -0
  9. data/lib/celerity/container.rb +488 -0
  10. data/lib/celerity/default_viewer.rb +10 -0
  11. data/lib/celerity/disabled_element.rb +27 -0
  12. data/lib/celerity/element.rb +241 -0
  13. data/lib/celerity/element_collections.rb +68 -0
  14. data/lib/celerity/element_locator.rb +167 -0
  15. data/lib/celerity/elements/button.rb +34 -0
  16. data/lib/celerity/elements/file_field.rb +17 -0
  17. data/lib/celerity/elements/form.rb +16 -0
  18. data/lib/celerity/elements/frame.rb +53 -0
  19. data/lib/celerity/elements/image.rb +57 -0
  20. data/lib/celerity/elements/label.rb +9 -0
  21. data/lib/celerity/elements/link.rb +12 -0
  22. data/lib/celerity/elements/meta.rb +6 -0
  23. data/lib/celerity/elements/non_control_elements.rb +93 -0
  24. data/lib/celerity/elements/option.rb +18 -0
  25. data/lib/celerity/elements/radio_check.rb +85 -0
  26. data/lib/celerity/elements/select_list.rb +81 -0
  27. data/lib/celerity/elements/table.rb +117 -0
  28. data/lib/celerity/elements/table_cell.rb +28 -0
  29. data/lib/celerity/elements/table_elements.rb +41 -0
  30. data/lib/celerity/elements/table_row.rb +36 -0
  31. data/lib/celerity/elements/text_field.rb +127 -0
  32. data/lib/celerity/exception.rb +40 -0
  33. data/lib/celerity/extra/method_generator.rb +158 -0
  34. data/lib/celerity/htmlunit.rb +41 -0
  35. data/lib/celerity/htmlunit/commons-codec-1.3.jar +0 -0
  36. data/lib/celerity/htmlunit/commons-collections-3.2.1.jar +0 -0
  37. data/lib/celerity/htmlunit/commons-httpclient-3.1.jar +0 -0
  38. data/lib/celerity/htmlunit/commons-io-1.4.jar +0 -0
  39. data/lib/celerity/htmlunit/commons-lang-2.4.jar +0 -0
  40. data/lib/celerity/htmlunit/commons-logging-1.1.1.jar +0 -0
  41. data/lib/celerity/htmlunit/cssparser-0.9.5.jar +0 -0
  42. data/lib/celerity/htmlunit/htmlunit-2.4-SNAPSHOT.jar +0 -0
  43. data/lib/celerity/htmlunit/htmlunit-core-js-2.4-SNAPSHOT.jar +0 -0
  44. data/lib/celerity/htmlunit/nekohtml-1.9.10-20081209.100757-4.jar +0 -0
  45. data/lib/celerity/htmlunit/sac-1.3.jar +0 -0
  46. data/lib/celerity/htmlunit/serializer-2.7.1.jar +0 -0
  47. data/lib/celerity/htmlunit/xalan-2.7.1.jar +0 -0
  48. data/lib/celerity/htmlunit/xercesImpl-2.8.1.jar +0 -0
  49. data/lib/celerity/htmlunit/xml-apis-1.3.04.jar +0 -0
  50. data/lib/celerity/identifier.rb +11 -0
  51. data/lib/celerity/input_element.rb +25 -0
  52. data/lib/celerity/listener.rb +106 -0
  53. data/lib/celerity/resources/no_viewer.png +0 -0
  54. data/lib/celerity/util.rb +79 -0
  55. data/lib/celerity/version.rb +9 -0
  56. data/lib/celerity/watir_compatibility.rb +85 -0
  57. data/tasks/benchmark.rake +4 -0
  58. data/tasks/deployment.rake +43 -0
  59. data/tasks/environment.rake +7 -0
  60. data/tasks/fix.rake +25 -0
  61. data/tasks/jar.rake +57 -0
  62. data/tasks/rdoc.rake +4 -0
  63. data/tasks/rspec.rake +30 -0
  64. data/tasks/simple_ci.rake +94 -0
  65. data/tasks/snapshot.rake +26 -0
  66. data/tasks/specserver.rake +21 -0
  67. data/tasks/website.rake +17 -0
  68. data/tasks/yard.rake +5 -0
  69. metadata +129 -0
@@ -0,0 +1,26 @@
1
+ module Celerity
2
+ module ClickableElement
3
+
4
+ # clicks the element
5
+ def click
6
+ assert_exists
7
+ assert_enabled if respond_to?(:assert_enabled)
8
+
9
+ @container.update_page(@object.click)
10
+ end
11
+
12
+ # Click the element and return a new Browser instance with the resulting page.
13
+ # This is useful for elements that trigger popups when clicked.
14
+ #
15
+ # @return [Celerity::Browser]
16
+ def click_and_attach
17
+ assert_exists
18
+ assert_enabled if respond_to?(:assert_enabled)
19
+
20
+ browser = Browser.new
21
+ browser.update_page(@object.click)
22
+
23
+ browser
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,148 @@
1
+ module Celerity
2
+
3
+ class Frames < ElementCollections
4
+ def element_class; Frame; end
5
+ end
6
+
7
+ class Buttons < ElementCollections
8
+ def element_class; Button; end
9
+ end
10
+
11
+ class FileFields < ElementCollections
12
+ def element_class; FileField; end
13
+ end
14
+
15
+ class CheckBoxes < ElementCollections
16
+ def element_class; CheckBox; end
17
+ end
18
+
19
+ class Radios < ElementCollections
20
+ def element_class; Radio; end
21
+ end
22
+
23
+ class SelectLists < ElementCollections
24
+ def element_class; SelectList; end
25
+ end
26
+
27
+ class Links < ElementCollections
28
+ def element_class; Link; end
29
+ end
30
+
31
+ class Uls < ElementCollections
32
+ def element_class; Ul; end
33
+ end
34
+
35
+ class Ols < ElementCollections
36
+ def element_class; Ol; end
37
+ end
38
+
39
+ class Lis < ElementCollections
40
+ def element_class; Li; end
41
+ end
42
+
43
+ class Dds < ElementCollections
44
+ def element_class; Dd; end
45
+ end
46
+
47
+ class Dls < ElementCollections
48
+ def element_class; Dl; end
49
+ end
50
+
51
+ class Dts < ElementCollections
52
+ def element_class; Dt; end
53
+ end
54
+
55
+ class Maps < ElementCollections
56
+ def element_class; Map; end
57
+ end
58
+
59
+ class Areas < ElementCollections
60
+ def element_class; Area; end
61
+ end
62
+
63
+ class Images < ElementCollections
64
+ def element_class; Image; end
65
+ end
66
+
67
+ class TextFields < ElementCollections
68
+ def element_class; TextField; end
69
+ end
70
+
71
+ class Hiddens < ElementCollections
72
+ def element_class; Hidden; end
73
+ end
74
+
75
+ class Tables < ElementCollections
76
+ def element_class; Table; end
77
+ end
78
+
79
+ class TableHeaders < ElementCollections
80
+ def element_class; TableHeader; end
81
+ end
82
+ class TableBodies < ElementCollections
83
+ def element_class; TableBody; end
84
+ end
85
+ class TableFooters < ElementCollections
86
+ def element_class; TableFooter; end
87
+ end
88
+
89
+ class TableRows < ElementCollections
90
+ def element_class; TableRow; end
91
+ end
92
+
93
+ class TableCells < ElementCollections
94
+ def element_class; TableCell; end
95
+ end
96
+
97
+ class Labels < ElementCollections
98
+ def element_class; Label; end
99
+ end
100
+
101
+ class Pres < ElementCollections
102
+ def element_class; Pre; end
103
+ end
104
+
105
+ class Ps < ElementCollections
106
+ def element_class; P; end
107
+ end
108
+
109
+ class Spans < ElementCollections
110
+ def element_class; Span; end
111
+ end
112
+
113
+ class Divs < ElementCollections
114
+ def element_class; Div; end
115
+ end
116
+
117
+ class Forms < ElementCollections
118
+ def element_class; Form; end
119
+ end
120
+
121
+ class Options < ElementCollections
122
+ def element_class; Option; end
123
+ end
124
+
125
+ class Metas < ElementCollections
126
+ def element_class; Meta; end
127
+ end
128
+
129
+ class H1s < ElementCollections
130
+ def element_class; H1; end
131
+ end
132
+ class H2s < ElementCollections
133
+ def element_class; H2; end
134
+ end
135
+ class H3s < ElementCollections
136
+ def element_class; H3; end
137
+ end
138
+ class H4s < ElementCollections
139
+ def element_class; H4; end
140
+ end
141
+ class H5s < ElementCollections
142
+ def element_class; H5; end
143
+ end
144
+ class H6s < ElementCollections
145
+ def element_class; H6; end
146
+ end
147
+
148
+ end
@@ -0,0 +1,488 @@
1
+ module Celerity
2
+
3
+ # This class contains methods for accessing elements inside a container,
4
+ # usually the Browser object, meaning the current page.
5
+ # The most common syntax is
6
+ # browser.elem(:attribute, 'value')
7
+ #
8
+ # Note that the element is located lazily, so no exceptions will be raised
9
+ # if the element doesn't exist until you call a method on the resulting object.
10
+ # To do this you would normally use Element#exists? or an action method,
11
+ # like ClickableElement#click.
12
+ # You can also pass in a hash:
13
+ #
14
+ # browser.link(:index => 1).click
15
+ #
16
+ # All elements support multiple attributes identification using the
17
+ # hash syntax (though this might not always be compatible with Watir):
18
+ #
19
+ # browser.span(:class_name => 'product', :index => 5).text
20
+ #
21
+ # Checkboxes and radio buttons support a special three-argument syntax:
22
+ #
23
+ # browser.check_box(:name, 'a_name', '1234').set
24
+ #
25
+ # You can also get all the elements of a certain type by using the plural form (@see Celerity::ElementCollections):
26
+ #
27
+ # browser.links # => #<Celerity::Links:0x7a1c2da2 ...>
28
+ #
29
+ module Container
30
+ include Celerity::Exception
31
+
32
+ # Points back to the Browser instance that contains this element
33
+ attr_reader :browser
34
+
35
+
36
+ # Check if the element contains the given text.
37
+ #
38
+ # @param [String, Regexp] expected_text The text to look for.
39
+ # @return [Fixnum, nil] The index of the matched text, or nil if it doesn't match.
40
+ def contains_text(expected_text)
41
+ assert_exists
42
+ return nil unless respond_to? :text
43
+
44
+ case expected_text
45
+ when Regexp
46
+ text() =~ expected_text
47
+ when String
48
+ text().index(expected_text)
49
+ else
50
+ raise TypeError, "expected String or Regexp, got #{expected_text.inspect}:#{expected_text.class}"
51
+ end
52
+ end
53
+
54
+ # Used internally to update the container object.
55
+ # @api private
56
+ def container=(container)
57
+ @container = container
58
+ @browser = container.browser
59
+ container
60
+ end
61
+
62
+ # Used internally to update the page object.
63
+ # @api private
64
+ def update_page(page)
65
+ @browser.page = page
66
+ end
67
+
68
+ # Used internally.
69
+ #
70
+ # @param [String] string The string to match against.
71
+ # @param [Regexp, String, #to_s] what The match we're looking for.
72
+ # @return [MatchData, true, false, nil]
73
+ #
74
+ # @api private
75
+ def matches?(string, what)
76
+ Regexp === what ? string =~ what : string == what.to_s
77
+ end
78
+
79
+ #
80
+ # below methods sorted alphabetically
81
+ #
82
+
83
+ # @return [Celerity::Area]
84
+ def area(*args)
85
+ Area.new(self, *args)
86
+ end
87
+
88
+ # @return [Celerity::Areas]
89
+ def areas
90
+ Areas.new(self)
91
+ end
92
+
93
+ # @return [Celerity::Button]
94
+ def button(*args)
95
+ Button.new(self, *args)
96
+ end
97
+
98
+ # @return [Celerity::Buttons]
99
+ def buttons
100
+ Buttons.new(self)
101
+ end
102
+
103
+ # @return [Celerity::TableCell]
104
+ def cell(*args)
105
+ TableCell.new(self, *args)
106
+ end
107
+
108
+ # @return [Celerity::TableCells]
109
+ def cells
110
+ TableCells.new(self)
111
+ end
112
+
113
+ # Since finding checkboxes by value is very common, you can use this shorthand:
114
+ #
115
+ # browser.check_box(:name, 'a_name', '1234').set
116
+ #
117
+ # or
118
+ #
119
+ # browser.check_box(:name => 'a_name', :value => '1234').set
120
+ #
121
+ # @return [Celerity::CheckBox]
122
+ def check_box(*args)
123
+ CheckBox.new(self, *args)
124
+ end
125
+
126
+ # @return [Celerity::CheckBoxes]
127
+ def checkboxes
128
+ CheckBoxes.new(self)
129
+ end
130
+
131
+ # @return [Celerity::Dd]
132
+ def dd(*args)
133
+ Dd.new(self, *args)
134
+ end
135
+
136
+ # @return [Celerity::Dds]
137
+ def dds
138
+ Dds.new(self)
139
+ end
140
+
141
+ # @return [Celerity::Div]
142
+ def div(*args)
143
+ Div.new(self, *args)
144
+ end
145
+
146
+ # @return [Celerity::Divs]
147
+ def divs
148
+ Divs.new(self)
149
+ end
150
+
151
+ # @return [Celerity::Dl]
152
+ def dl(*args)
153
+ Dl.new(self, *args)
154
+ end
155
+
156
+ # @return [Celerity::Dls]
157
+ def dls
158
+ Dls.new(self)
159
+ end
160
+
161
+ # @return [Celerity::Dt]
162
+ def dt(*args)
163
+ Dt.new(self, *args)
164
+ end
165
+
166
+ # @return [Celerity::Dts]
167
+ def dts
168
+ Dts.new(self)
169
+ end
170
+
171
+ # @return [Celerity::FileField]
172
+ def file_field(*args)
173
+ FileField.new(self, *args)
174
+ end
175
+
176
+ # @return [Celerity::FileFields]
177
+ def file_fields
178
+ FileFields.new(self)
179
+ end
180
+
181
+ # @return [Celerity::Form]
182
+ def form(*args)
183
+ Form.new(self, *args)
184
+ end
185
+
186
+ # @return [Celerity::Forms]
187
+ def forms
188
+ Forms.new(self)
189
+ end
190
+
191
+ # @return [Celerity::Frame]
192
+ def frame(*args)
193
+ Frame.new(self, *args)
194
+ end
195
+
196
+ # @return [Celerity::Frames]
197
+ def frames
198
+ Frames.new(self)
199
+ end
200
+
201
+ # @return [Celerity::H1]
202
+ def h1(*args)
203
+ H1.new(self, *args)
204
+ end
205
+
206
+ # @return [Celerity::H1s]
207
+ def h1s
208
+ H1s.new(self)
209
+ end
210
+
211
+ # @return [Celerity::H2]
212
+ def h2(*args)
213
+ H2.new(self, *args)
214
+ end
215
+
216
+ # @return [Celerity::H2s]
217
+ def h2s
218
+ H2s.new(self)
219
+ end
220
+
221
+ # @return [Celerity::H3]
222
+ def h3(*args)
223
+ H3.new(self, *args)
224
+ end
225
+
226
+ # @return [Celerity::H3s]
227
+ def h3s
228
+ H3s.new(self)
229
+ end
230
+
231
+ # @return [Celerity::H4]
232
+ def h4(*args)
233
+ H4.new(self, *args)
234
+ end
235
+
236
+ # @return [Celerity::H4s]
237
+ def h4s
238
+ H4s.new(self)
239
+ end
240
+
241
+ # @return [Celerity::H5]
242
+ def h5(*args)
243
+ H5.new(self, *args)
244
+ end
245
+
246
+ # @return [Celerity::H5s]
247
+ def h5s
248
+ H5s.new(self)
249
+ end
250
+
251
+ # @return [Celerity::H6]
252
+ def h6(*args)
253
+ H6.new(self, *args)
254
+ end
255
+
256
+ # @return [Celerity::H6s]
257
+ def h6s
258
+ H6s.new(self)
259
+ end
260
+
261
+ # @return [Celerity::Hidden]
262
+ def hidden(*args)
263
+ Hidden.new(self, *args)
264
+ end
265
+
266
+ # @return [Celerity::Hiddens]
267
+ def hiddens
268
+ Hiddens.new(self)
269
+ end
270
+
271
+ # @return [Celerity::Image]
272
+ def image(*args)
273
+ Image.new(self, *args)
274
+ end
275
+
276
+ # @return [Celerity::Images]
277
+ def images
278
+ Images.new(self)
279
+ end
280
+
281
+ # @return [Celerity::Label]
282
+ def label(*args)
283
+ Label.new(self, *args)
284
+ end
285
+
286
+ # @return [Celerity::Labels]
287
+ def labels
288
+ Labels.new(self)
289
+ end
290
+
291
+ # @return [Celerity::Li]
292
+ def li(*args)
293
+ Li.new(self, *args)
294
+ end
295
+
296
+ # @return [Celerity::Lis]
297
+ def lis
298
+ Lis.new(self)
299
+ end
300
+
301
+ # @return [Celerity::Link]
302
+ def link(*args)
303
+ Link.new(self, *args)
304
+ end
305
+
306
+ # @return [Celerity::Links]
307
+ def links
308
+ Links.new(self)
309
+ end
310
+
311
+ # @return [Celerity::Map]
312
+ def map(*args)
313
+ Map.new(self, *args)
314
+ end
315
+
316
+ # @return [Celerity::Maps]
317
+ def maps
318
+ Maps.new(self)
319
+ end
320
+
321
+ def meta(*args)
322
+ Meta.new(self, *args)
323
+ end
324
+
325
+ def metas(*args)
326
+ Metas.new(self, *args)
327
+ end
328
+
329
+ # @return [Celerity::Ol]
330
+ def ol(*args)
331
+ Ol.new(self, *args)
332
+ end
333
+
334
+ # @return [Celerity::Ols]
335
+ def ols
336
+ Ols.new(self)
337
+ end
338
+
339
+ # @return [Celerity::Option]
340
+ def option(*args)
341
+ Option.new(self, *args)
342
+ end
343
+
344
+ # @return [Celerity::P]
345
+ def p(*args)
346
+ P.new(self, *args)
347
+ end
348
+
349
+ # @return [Celerity::Ps]
350
+ def ps
351
+ Ps.new(self)
352
+ end
353
+
354
+ # @return [Celerity::Pre]
355
+ def pre(*args)
356
+ Pre.new(self, *args)
357
+ end
358
+
359
+ # @return [Celerity::Pres]
360
+ def pres
361
+ Pres.new(self)
362
+ end
363
+
364
+ # Since finding radios by value is very common, you can use this shorthand:
365
+ #
366
+ # browser.radio(:name, 'a_name', '1234').set
367
+ #
368
+ # or
369
+ #
370
+ # browser.radio(:name => 'a_name', :value => '1234').set
371
+ #
372
+ # @return [Celerity::Radio]
373
+ def radio(*args)
374
+ Radio.new(self, *args)
375
+ end
376
+
377
+ # @return [Celerity::Radios]
378
+ def radios
379
+ Radios.new(self)
380
+ end
381
+
382
+ # @return [Celerity::TableRow]
383
+ def row(*args)
384
+ TableRow.new(self, *args)
385
+ end
386
+
387
+ # @return [Celerity::TableRows]
388
+ def rows
389
+ TableRows.new(self)
390
+ end
391
+
392
+ # @return [Celerity::SelectList]
393
+ def select_list(*args)
394
+ SelectList.new(self, *args)
395
+ end
396
+
397
+ # @return [Celerity::SelectLists]
398
+ def select_lists
399
+ SelectLists.new(self)
400
+ end
401
+
402
+ # @return [Celerity::Span]
403
+ def span(*args)
404
+ Span.new(self, *args)
405
+ end
406
+
407
+ # @return [Celerity::Spans]
408
+ def spans
409
+ Spans.new(self)
410
+ end
411
+
412
+ # @return [Celerity::Table]
413
+ def table(*args)
414
+ Table.new(self, *args)
415
+ end
416
+
417
+ # @return [Celerity::Tables]
418
+ def tables
419
+ Tables.new(self)
420
+ end
421
+
422
+ # @return [Celerity::TableBody]
423
+ def tbody(*args)
424
+ TableBody.new(self, *args)
425
+ end
426
+
427
+ # @return [Celerity::TableBodies]
428
+ def tbodies
429
+ TableBodies.new(self)
430
+ end
431
+
432
+ # @return [Celerity::TextField]
433
+ def text_field(*args)
434
+ TextField.new(self, *args)
435
+ end
436
+
437
+ # @return [Celerity::TextFields]
438
+ def text_fields
439
+ TextFields.new(self)
440
+ end
441
+
442
+ # @return [Celerity::TableFooter]
443
+ def tfoot(*args)
444
+ TableFooter.new(self, *args)
445
+ end
446
+
447
+ # @return [Celerity::TableFooters]
448
+ def tfoots
449
+ TableFooters.new(self)
450
+ end
451
+ alias_method :tfeet, :tfoots # :-)
452
+
453
+ # Watir's cells() won't return <th> elements.
454
+ # This is a workaround.
455
+ #
456
+ # @return [Celerity::Th]
457
+ def th(*args)
458
+ Th.new(self, *args)
459
+ end
460
+
461
+ # TODO: implement or change api,
462
+ # @see th
463
+ def ths
464
+ raise NotImplementedError
465
+ end
466
+
467
+ # @return [Celerity::TableHeader]
468
+ def thead(*args)
469
+ TableHeader.new(self, *args)
470
+ end
471
+
472
+ # @return [Celerity::TableHeaders]
473
+ def theads
474
+ TableHeaders.new(self)
475
+ end
476
+
477
+ # @return [Celerity::Ul]
478
+ def ul(*args)
479
+ Ul.new(self, *args)
480
+ end
481
+
482
+ # @return [Celerity::Uls]
483
+ def uls
484
+ Uls.new(self)
485
+ end
486
+
487
+ end # Container
488
+ end # Celerity