celerity 0.0.3 → 0.0.4

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 (136) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +14 -0
  3. data/Manifest.txt +127 -151
  4. data/README.txt +15 -20
  5. data/lib/celerity.rb +13 -5
  6. data/lib/celerity/browser.rb +296 -0
  7. data/lib/celerity/clickable_element.rb +1 -0
  8. data/lib/celerity/collections.rb +4 -0
  9. data/lib/celerity/container.rb +69 -2
  10. data/lib/celerity/disabled_element.rb +1 -0
  11. data/lib/celerity/element.rb +103 -38
  12. data/lib/celerity/element_collections.rb +14 -8
  13. data/lib/celerity/element_locator.rb +61 -50
  14. data/lib/celerity/element_map.rb +51 -0
  15. data/lib/celerity/elements/button.rb +1 -0
  16. data/lib/celerity/elements/file_field.rb +3 -2
  17. data/lib/celerity/elements/form.rb +1 -0
  18. data/lib/celerity/elements/frame.rb +16 -1
  19. data/lib/celerity/elements/image.rb +15 -13
  20. data/lib/celerity/elements/link.rb +4 -1
  21. data/lib/celerity/elements/option.rb +1 -0
  22. data/lib/celerity/elements/radio_check.rb +19 -7
  23. data/lib/celerity/elements/select_list.rb +17 -2
  24. data/lib/celerity/elements/table.rb +34 -20
  25. data/lib/celerity/elements/table_body.rb +2 -2
  26. data/lib/celerity/elements/table_cell.rb +3 -1
  27. data/lib/celerity/elements/table_footer.rb +2 -2
  28. data/lib/celerity/elements/table_header.rb +2 -2
  29. data/lib/celerity/elements/table_row.rb +4 -2
  30. data/lib/celerity/elements/text_field.rb +20 -9
  31. data/lib/celerity/exception.rb +11 -18
  32. data/lib/celerity/extra/method_generator.rb +13 -8
  33. data/lib/celerity/htmlunit/download.sh +23 -0
  34. data/lib/celerity/htmlunit/htmlunit-2.2.jar +0 -0
  35. data/lib/celerity/htmlunit/htmlunit-core-js-2.2.jar +0 -0
  36. data/lib/celerity/htmlunit/{nekohtml-1.9.7.jar → nekohtml-1.9.8.jar} +0 -0
  37. data/lib/celerity/input_element.rb +1 -1
  38. data/lib/celerity/version.rb +1 -1
  39. data/lib/celerity/watir_compatibility.rb +37 -23
  40. data/spec/area_spec.rb +19 -4
  41. data/spec/areas_spec.rb +2 -3
  42. data/spec/{ie_spec.rb → browser_spec.rb} +66 -15
  43. data/spec/button_spec.rb +36 -3
  44. data/spec/buttons_spec.rb +2 -3
  45. data/spec/checkbox_spec.rb +43 -8
  46. data/spec/checkboxes_spec.rb +2 -3
  47. data/spec/div_spec.rb +31 -4
  48. data/spec/divs_spec.rb +2 -3
  49. data/spec/element_spec.rb +36 -6
  50. data/spec/filefield_spec.rb +28 -13
  51. data/spec/filefields_spec.rb +2 -3
  52. data/spec/form_spec.rb +6 -3
  53. data/spec/forms_spec.rb +2 -3
  54. data/spec/frame_spec.rb +14 -5
  55. data/spec/frames_spec.rb +71 -0
  56. data/spec/hidden_spec.rb +21 -3
  57. data/spec/hiddens_spec.rb +2 -3
  58. data/spec/hn_spec.rb +30 -12
  59. data/spec/hns_spec.rb +14 -10
  60. data/spec/html/form_js_bug.html +11 -0
  61. data/spec/html/forms_with_input_elements.html +2 -1
  62. data/spec/html/invalid_js.html +11 -0
  63. data/spec/html/latin1_text.html +1 -0
  64. data/spec/html/non_control_elements.html +8 -4
  65. data/spec/html/simple_ajax.html +22 -0
  66. data/spec/htmlunit_spec.rb +4 -5
  67. data/spec/image_spec.rb +33 -3
  68. data/spec/images_spec.rb +2 -3
  69. data/spec/label_spec.rb +16 -3
  70. data/spec/labels_spec.rb +2 -3
  71. data/spec/li_spec.rb +25 -3
  72. data/spec/link_spec.rb +35 -3
  73. data/spec/links_spec.rb +2 -3
  74. data/spec/lis_spec.rb +2 -3
  75. data/spec/map_spec.rb +19 -3
  76. data/spec/maps_spec.rb +2 -3
  77. data/spec/meta_spec.rb +3 -1
  78. data/spec/ol_spec.rb +17 -3
  79. data/spec/ols_spec.rb +2 -3
  80. data/spec/option_spec.rb +28 -3
  81. data/spec/p_spec.rb +30 -2
  82. data/spec/pre_spec.rb +25 -3
  83. data/spec/pres_spec.rb +2 -3
  84. data/spec/ps_spec.rb +2 -3
  85. data/spec/radio_spec.rb +47 -3
  86. data/spec/radios_spec.rb +2 -3
  87. data/spec/select_list_spec.rb +42 -3
  88. data/spec/select_lists_spec.rb +2 -3
  89. data/spec/span_spec.rb +32 -7
  90. data/spec/spans_spec.rb +2 -4
  91. data/spec/spec_helper.rb +5 -25
  92. data/spec/table_bodies_spec.rb +7 -5
  93. data/spec/table_body_spec.rb +11 -4
  94. data/spec/table_cell_spec.rb +15 -4
  95. data/spec/table_cells_spec.rb +3 -4
  96. data/spec/table_footer_spec.rb +11 -4
  97. data/spec/table_footers_spec.rb +7 -5
  98. data/spec/table_header_spec.rb +11 -4
  99. data/spec/table_headers_spec.rb +7 -5
  100. data/spec/table_row_spec.rb +31 -7
  101. data/spec/table_rows_spec.rb +5 -4
  102. data/spec/table_spec.rb +36 -7
  103. data/spec/tables_spec.rb +2 -3
  104. data/spec/text_field_spec.rb +51 -13
  105. data/spec/text_fields_spec.rb +2 -3
  106. data/spec/ul_spec.rb +18 -3
  107. data/spec/uls_spec.rb +2 -3
  108. data/spec/{watir_compatability_spec.rb → watir_compatibility_spec.rb} +42 -35
  109. data/support/spec_server.rb +9 -0
  110. metadata +167 -161
  111. metadata.gz.sig +0 -0
  112. data/benchmark/bm_2000_spans.rb +0 -48
  113. data/benchmark/bm_digg.rb +0 -26
  114. data/benchmark/bm_google_images.rb +0 -36
  115. data/benchmark/bm_input_locator.rb +0 -69
  116. data/benchmark/loader.rb +0 -9
  117. data/config/hoe.rb +0 -68
  118. data/config/requirements.rb +0 -15
  119. data/lib/celerity/htmlunit/htmlunit-2.2-SNAPSHOT.jar +0 -0
  120. data/lib/celerity/htmlunit/js-1.7R1.jar +0 -0
  121. data/lib/celerity/ie.rb +0 -195
  122. data/setup.rb +0 -1583
  123. data/support/celerity_viewer/rubycocoa/CelerityViewer.icns +0 -0
  124. data/support/celerity_viewer/rubycocoa/English.lproj/Main.nib/classes.nib +0 -37
  125. data/support/celerity_viewer/rubycocoa/English.lproj/Main.nib/info.nib +0 -19
  126. data/support/celerity_viewer/rubycocoa/English.lproj/Main.nib/keyedobjects.nib +0 -0
  127. data/support/celerity_viewer/rubycocoa/Info.plist.erb +0 -28
  128. data/support/celerity_viewer/rubycocoa/MainController.rb +0 -23
  129. data/support/celerity_viewer/rubycocoa/README +0 -94
  130. data/support/celerity_viewer/rubycocoa/Rakefile +0 -100
  131. data/support/celerity_viewer/rubycocoa/distributed_viewer.rb +0 -86
  132. data/support/celerity_viewer/rubycocoa/main.m +0 -7
  133. data/support/celerity_viewer/rubycocoa/main.rb +0 -27
  134. data/tasks/benchmark.rake +0 -4
  135. data/tasks/environment.rake +0 -7
  136. data/tasks/simple_ci.rake +0 -94
@@ -1,25 +1,28 @@
1
1
  module Celerity
2
- # this class is the super class for the iterator classes (buttons, links, spans etc
3
- # it would normally only be accessed by the iterator methods (spans, links etc) of IE
2
+ # This class is the superclass for the iterator classes (Buttons, Links, Spans etc.)
3
+ # It would normally only be accessed by the iterator methods (Browser#spans, Browser#links, ...).
4
4
  class ElementCollections
5
5
  include Enumerable
6
6
 
7
+ # @api internal
7
8
  def initialize(container, how = nil, what = nil)
8
9
  @container = container
9
10
  @object = (how == :object ? what : nil)
10
11
  @length = length
11
12
  end
12
-
13
+
14
+ # @return [Fixnum] The number of elements in this collection.
13
15
  def length
14
16
  if @object
15
17
  @object.length
16
18
  else
17
- @elements = ElementLocator.new(@container.object, element_class).elements_by_idents
19
+ @elements ||= ElementLocator.new(@container.object, element_class).elements_by_idents
18
20
  @elements.size
19
21
  end
20
22
  end
21
23
  alias_method :size, :length
22
24
 
25
+ # @yield [element] Iterate through the elements in this collection.
23
26
  def each
24
27
  if @elements
25
28
  @elements.each { |e| yield(element_class.new(@container, :object, e)) }
@@ -29,19 +32,22 @@ module Celerity
29
32
  end
30
33
  end
31
34
 
35
+ # Get the element at the given index.
36
+ # NB! This is 1-indexed to keep compatibility with Watir. Subject to change.
37
+ #
38
+ # @return [Celerity::Element]
32
39
  def [](n)
33
- @elements ? element_class.new(@container, :object, @elements[n - 1]) : iterator_object(n - 1)
40
+ @elements ? element_class.new(@container, :object, @elements[n-1]) : iterator_object(n-1)
34
41
  end
35
42
 
36
43
  def to_s
37
- return self.collect { |i| i.to_s }.join("\n")
44
+ map { |e| e.to_s }.join("\n")
38
45
  end
39
46
 
40
47
  private
41
48
 
42
- # this method creates an object of the correct type that the iterators use
43
49
  def iterator_object(i)
44
- element_class.new(@container, :index, i + 1)
50
+ element_class.new(@container, :index, i+1)
45
51
  end
46
52
 
47
53
  end # ElementCollections
@@ -1,9 +1,6 @@
1
1
  module Celerity
2
2
 
3
- # What we essentially want is the ability to perform a fast SQLish 'select' against the DOM.
4
- # Instead of iterating twice through a lot of elements, we could modify the Identifier objects to contain
5
- # everything in our 'query'.
6
- # Jari - 2008-05-11
3
+ # Used internally to locate elements on the page.
7
4
  class ElementLocator
8
5
  include Celerity::Exception
9
6
  attr_accessor :idents
@@ -23,55 +20,53 @@ module Celerity
23
20
  index = 0 # by default, return the first matching element
24
21
  text = nil
25
22
 
26
- begin
27
- conditions.each do |how, what|
28
- case how
29
- when :object
30
- return what
31
- when :id
32
- return find_by_id(what)
33
- when :xpath
34
- return find_by_xpath(what)
35
- when :class_name
36
- how = :class
37
- when :url
38
- how = :href
39
- when :caption
40
- how = :text
41
- end
42
-
43
- if @attributes.include?(how)
44
- attributes[how] << what
45
- elsif how == :index
46
- index = what.to_i - 1
47
- elsif how == :text
48
- text = what
49
- else
50
- raise MissingWayOfFindingObjectException, "No how #{how.inspect}"
51
- end
52
-
23
+ conditions.each do |how, what|
24
+ case how
25
+ when :object
26
+ return what
27
+ when :id
28
+ return find_by_id(what)
29
+ when :xpath
30
+ return find_by_xpath(what)
31
+ when :class_name
32
+ how = :class
33
+ when :url
34
+ how = :href
35
+ when :caption
36
+ how = :text
53
37
  end
54
-
55
- @idents.each do |ident|
56
- merged = attributes.merge(ident.attributes) do |key, v1, v2|
57
- attributes[key] = v1 | v2
58
- end
59
-
60
- id = Identifier.new(ident.tag, merged)
61
- # «original» identifier takes precedence for :text
62
- id.text = ident.text || text
63
- @condition_idents << id
64
- end
65
-
66
- if index == 0
67
- element_by_idents(@condition_idents)
38
+
39
+ if @attributes.include?(how)
40
+ attributes[how] << what
41
+ elsif how == :index
42
+ index = what.to_i - 1
43
+ elsif how == :text
44
+ text = what
68
45
  else
69
- elements_by_idents(@condition_idents)[index]
46
+ raise MissingWayOfFindingObjectException, "No how #{how.inspect}"
70
47
  end
71
48
 
72
- rescue HtmlUnit::ElementNotFoundException
73
- nil # for rcov
74
49
  end
50
+
51
+ @idents.each do |ident|
52
+ merged = attributes.merge(ident.attributes) do |key, v1, v2|
53
+ v1 | v2
54
+ end
55
+
56
+ id = Identifier.new(ident.tag, merged)
57
+ # «original» identifier takes precedence for :text
58
+ id.text = ident.text || text
59
+ @condition_idents << id
60
+ end
61
+
62
+ if index == 0
63
+ element_by_idents(@condition_idents)
64
+ else
65
+ elements_by_idents(@condition_idents)[index]
66
+ end
67
+
68
+ rescue HtmlUnit::ElementNotFoundException
69
+ nil # for rcov
75
70
  end
76
71
 
77
72
  def find_by_id(what)
@@ -79,7 +74,13 @@ module Celerity
79
74
  when Regexp
80
75
  elements_by_tag_names.find { |elem| elem.getIdAttribute =~ what }
81
76
  when String
82
- @object.getHtmlElementById(what)
77
+ obj = @object.getHtmlElementById(what)
78
+ if @tags.include?(obj.getTagName)
79
+ obj
80
+ else
81
+ $stderr.puts "warning: multiple elements with identical id (#{what.inspect})? " if $VERBOSE
82
+ elements_by_tag_names.find { |elem| elem.getIdAttribute == what }
83
+ end
83
84
  else
84
85
  raise ArgumentError, "Argument #{what.inspect} should be a String or Regexp"
85
86
  end
@@ -105,6 +106,7 @@ module Celerity
105
106
  if @tags.include?(e.getTagName)
106
107
  idents.any? do |ident|
107
108
  next unless ident.tag == e.getTagName
109
+
108
110
  attr_result = ident.attributes.all? do |key, value|
109
111
  value.any? { |val| matches?(e.getAttributeValue(key.to_s), val) }
110
112
  end
@@ -114,7 +116,6 @@ module Celerity
114
116
  else
115
117
  attr_result
116
118
  end
117
-
118
119
  end
119
120
  end
120
121
  end
@@ -125,10 +126,20 @@ module Celerity
125
126
  end
126
127
 
127
128
  def elements_by_tag_names
129
+ tries = 0
128
130
  # HtmlUnit's getHtmlElementsByTagNames won't get elements in the correct order, making :index fail
129
131
  @object.getAllHtmlChildElements.iterator.to_a.select do |elem|
130
132
  @tags.include?(elem.getTagName)
131
133
  end
134
+ # workaround for HtmlUnit bug?
135
+ rescue java.lang.NullPointerException => e
136
+ $stderr.puts "warning: celerity caught #{e}"
137
+ if tries < 2
138
+ tries += 1
139
+ retry
140
+ else
141
+ raise e
142
+ end
132
143
  end
133
144
 
134
145
 
@@ -0,0 +1,51 @@
1
+ module Celerity
2
+ module ElementMap
3
+ # Some HtmlUnit classes are missing equivalents in Celerity. Shouldn't be too hard to fix.
4
+ # This is mostly used to implement Element#parent easily.
5
+ HtmlUnit2CelerityElement = {
6
+ HtmlUnit::Html::HtmlAnchor => Celerity::Link,
7
+ HtmlUnit::Html::HtmlArea => Celerity::Area,
8
+ HtmlUnit::Html::HtmlButton => Celerity::Button,
9
+ HtmlUnit::Html::HtmlButtonInput => Celerity::Button,
10
+ HtmlUnit::Html::HtmlCaption => Celerity::Button, # ?
11
+ HtmlUnit::Html::HtmlCheckBoxInput => Celerity::CheckBox,
12
+ HtmlUnit::Html::HtmlDivision => Celerity::Div,
13
+ HtmlUnit::Html::HtmlFileInput => Celerity::FileField,
14
+ HtmlUnit::Html::HtmlForm => Celerity::Form,
15
+ HtmlUnit::Html::HtmlFrame => Celerity::Frame,
16
+ HtmlUnit::Html::HtmlHeading1 => Celerity::H1,
17
+ HtmlUnit::Html::HtmlHeading2 => Celerity::H2,
18
+ HtmlUnit::Html::HtmlHeading3 => Celerity::H3,
19
+ HtmlUnit::Html::HtmlHeading4 => Celerity::H4,
20
+ HtmlUnit::Html::HtmlHeading5 => Celerity::H5,
21
+ HtmlUnit::Html::HtmlHeading6 => Celerity::H6,
22
+ HtmlUnit::Html::HtmlHiddenInput => Celerity::Hidden,
23
+ HtmlUnit::Html::HtmlImage => Celerity::Image,
24
+ HtmlUnit::Html::HtmlLabel => Celerity::Label,
25
+ HtmlUnit::Html::HtmlLink => Celerity::Link,
26
+ HtmlUnit::Html::HtmlListItem => Celerity::Li,
27
+ HtmlUnit::Html::HtmlMap => Celerity::Map,
28
+ HtmlUnit::Html::HtmlOption => Celerity::Option,
29
+ HtmlUnit::Html::HtmlOrderedList => Celerity::Ol,
30
+ HtmlUnit::Html::HtmlParagraph => Celerity::P,
31
+ HtmlUnit::Html::HtmlPasswordInput => Celerity::TextField,
32
+ HtmlUnit::Html::HtmlPreformattedText => Celerity::Pre,
33
+ HtmlUnit::Html::HtmlRadioButtonInput => Celerity::Radio,
34
+ HtmlUnit::Html::HtmlSelect => Celerity::SelectList,
35
+ HtmlUnit::Html::HtmlSpan => Celerity::Span,
36
+ HtmlUnit::Html::HtmlTable => Celerity::Table,
37
+ HtmlUnit::Html::HtmlTableBody => Celerity::TableBody,
38
+ HtmlUnit::Html::HtmlTableCell => Celerity::TableCell,
39
+ HtmlUnit::Html::HtmlTableFooter => Celerity::TableFooter,
40
+ HtmlUnit::Html::HtmlTableHeader => Celerity::TableHeader,
41
+ HtmlUnit::Html::HtmlTableRow => Celerity::TableRow,
42
+ HtmlUnit::Html::HtmlTextArea => Celerity::Area,
43
+ HtmlUnit::Html::HtmlTextInput => Celerity::TextField,
44
+ HtmlUnit::Html::HtmlUnorderedList => Celerity::Ul
45
+ }
46
+ end
47
+ end
48
+
49
+ class Celerity::Element
50
+ include Celerity::ElementMap
51
+ end
@@ -13,6 +13,7 @@ module Celerity
13
13
 
14
14
  def locate
15
15
  # ugly..
16
+ # this is done to make <button> and <input>-buttons look similar
16
17
  if (val = @conditions[:value])
17
18
  locator = ElementLocator.new(@container.object, self.class)
18
19
  button_ident = Identifier.new('button')
@@ -4,9 +4,10 @@ module Celerity
4
4
  TAGS = [ Identifier.new('input', :type => %w(file)) ]
5
5
  DEFAULT_HOW = :name
6
6
 
7
- def set(value)
7
+ # Set the file field to the given path
8
+ def set(path)
8
9
  assert_exists
9
- @object.setValueAttribute(value.to_s)
10
+ @object.setValueAttribute(path.to_s)
10
11
  end
11
12
  end
12
13
  end
@@ -6,6 +6,7 @@ module Celerity
6
6
  ATTRIBUTES = BASE_ATTRIBUTES | [:action, :method, :enctype, :accept, :name, :onsubmit, :onreset, :target, :'accept-charset']
7
7
  DEFAULT_HOW = :name
8
8
 
9
+ # Submits the form.
9
10
  def submit
10
11
  assert_exists
11
12
  @container.update_page @object.submit(nil)
@@ -7,6 +7,8 @@ module Celerity
7
7
  ATTRIBUTES = BASE_ATTRIBUTES | [:longdesc, :name, :src, :frameborder, :marginwidth, :marginheight, :noresize, :scrolling]
8
8
  DEFAULT_HOW = :name
9
9
 
10
+ # Override the default locate to handle frame and inline frames.
11
+ # @api internal
10
12
  def locate
11
13
  super
12
14
  if @object
@@ -17,6 +19,8 @@ module Celerity
17
19
  end
18
20
  end
19
21
 
22
+ # Override assert_exists to raise UnknownFrameException (for Watir compatibility)
23
+ # @api internal
20
24
  def assert_exists
21
25
  locate unless @object
22
26
  unless @object
@@ -25,7 +29,7 @@ module Celerity
25
29
  end
26
30
 
27
31
  def update_page(value)
28
- @page_container.set_page(value.getEnclosingWindow.getTopWindow.getEnclosedPage)
32
+ @page_container.page = value.getEnclosingWindow.getTopWindow.getEnclosedPage
29
33
  end
30
34
 
31
35
  def to_s
@@ -33,6 +37,17 @@ module Celerity
33
37
  create_string(@inline_frame_object)
34
38
  end
35
39
 
40
+ def method_missing(meth, *args, &blk)
41
+ meth = selector_to_attribute(meth)
42
+ if self.class::ATTRIBUTES.include?(meth)
43
+ assert_exists
44
+ @inline_frame_object.getAttributeValue(meth.to_s)
45
+ else
46
+ Log.warn "Element\#method_missing calling super with #{meth.inspect}"
47
+ super
48
+ end
49
+ end
50
+
36
51
  end
37
52
 
38
53
  end
@@ -1,10 +1,5 @@
1
1
  module Celerity
2
2
 
3
- # This class is the means of accessing an image on a page.
4
- # Normally a user would not need to create this object as it is returned by the Watir::Container#image method
5
- #
6
- # many of the methods available to this object are inherited from the Element class
7
- #
8
3
  class Image < Element
9
4
  include ClickableElement
10
5
  include DisabledElement
@@ -13,18 +8,18 @@ module Celerity
13
8
  ATTRIBUTES = BASE_ATTRIBUTES | [:src, :alt, :longdesc, :name, :height, :width, :usemap, :ismap, :align, :border, :hspace, :vspace]
14
9
  DEFAULT_HOW = :src
15
10
 
16
- # this method returns the file created date of the image
11
+ # returns the file created date of the image
17
12
  def file_created_date
18
13
  assert_exists
19
14
  web_response = @object.getWebResponse(true)
20
- return Time.parse(web_response.getResponseHeaderValue("Last-Modified").to_s)
15
+ Time.parse(web_response.getResponseHeaderValue("Last-Modified").to_s)
21
16
  end
22
17
 
23
- # this method returns the filesize of the image
18
+ # returns the filesize of the image
24
19
  def file_size
25
20
  assert_exists
26
21
  web_response = @object.getWebResponse(true)
27
- return web_response.getResponseBody().length
22
+ web_response.getResponseBody.length
28
23
  end
29
24
 
30
25
  # returns the width in pixels of the image, as a string
@@ -38,23 +33,30 @@ module Celerity
38
33
  assert_exists
39
34
  @object.getHeight
40
35
  end
41
-
36
+
37
+ # returns true if the image is loaded
42
38
  def loaded?
43
39
  assert_exists
44
40
  begin
45
41
  @object.getImageReader
46
- return true
42
+ true
47
43
  rescue
48
- return false
44
+ false
49
45
  end
50
46
  end
51
47
 
48
+ def click
49
+ assert_exists
50
+ @container.update_page(@object.click)
51
+ end
52
+
53
+ # Saves the image to the given file
52
54
  def save(filename)
53
55
  assert_exists
54
56
  image_reader = @object.getImageReader
55
57
  file = java.io.File.new(filename)
56
58
  buffered_image = image_reader.read(0);
57
- return javax.imageio.ImageIO.write(buffered_image, image_reader.getFormatName(), file);
59
+ javax.imageio.ImageIO.write(buffered_image, image_reader.getFormatName(), file);
58
60
  end
59
61
  end
60
62
 
@@ -2,9 +2,12 @@ module Celerity
2
2
  class Link < Element
3
3
 
4
4
  TAGS = [ Identifier.new('a') ]
5
- ATTRIBUTES = BASE_ATTRIBUTES | [:charset, :type, :name, :href, :hreflang, :target, :rel, :rev, :accesskey, :shape, :coords, :tabindex, :onfocus, :onblur]
5
+ ATTRIBUTES = BASE_ATTRIBUTES | [:charset, :type, :name, :href, :hreflang,
6
+ :target, :rel, :rev, :accesskey, :shape,
7
+ :coords, :tabindex, :onfocus, :onblur]
6
8
  DEFAULT_HOW = :href
7
9
 
10
+ # clicks the link
8
11
  def click
9
12
  assert_exists
10
13
  @container.update_page @object.click
@@ -1,4 +1,5 @@
1
1
  module Celerity
2
+ # Represents a select list option.
2
3
  class Option < Element
3
4
  include ClickableElement
4
5
  include DisabledElement
@@ -1,13 +1,10 @@
1
1
  module Celerity
2
- # This class is the class for radio buttons and check boxes.
3
- # It contains methods common to both.
4
- # Normally a user would not need to create this object as it is returned by the Watir::Container#checkbox or Watir::Container#radio methods
5
- #
6
- # most of the methods available to this element are inherited from the Element class
7
- #
2
+ # Common superclass for radios and check boxes.
8
3
  class RadioCheckCommon < InputElement
9
4
  DEFAULT_HOW = :name
10
-
5
+
6
+ # these can optionally take a value parameter as a third arg, so needs
7
+ # to be special-handled.
11
8
  def initialize(container, type, *args)
12
9
  @type = type
13
10
  case args.size
@@ -20,6 +17,7 @@ module Celerity
20
17
  end
21
18
  end
22
19
 
20
+ # returns true if the element is checked
23
21
  def set?
24
22
  assert_exists
25
23
  @object.isChecked
@@ -39,6 +37,13 @@ module Celerity
39
37
  super(container, ['radio'], *args)
40
38
  end
41
39
 
40
+ # Sets the radio button.
41
+ #
42
+ # radio.set? # => false
43
+ # radio.set
44
+ # radio.set? # => true
45
+ # radio.set(false)
46
+ # radio.set? # => false
42
47
  def set(value = true)
43
48
  assert_exists
44
49
  assert_enabled
@@ -55,6 +60,13 @@ module Celerity
55
60
  super(container, ['checkbox'], *args)
56
61
  end
57
62
 
63
+ # Sets the checkbox button.
64
+ #
65
+ # checkbox.set? # => false
66
+ # checkbox.set
67
+ # checkbox.set? # => true
68
+ # checkbox.set(false)
69
+ # checkbox.set? # => false
58
70
  def set(value = true)
59
71
  assert_exists
60
72
  assert_enabled