celerity 0.0.6 → 0.0.7

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 (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
@@ -1,170 +0,0 @@
1
- require "rubygems"
2
- require "uri"
3
- require "active_support"
4
-
5
- #--
6
- # http://api.rubyonrails.com/classes/Inflector.html#M001621
7
- #++
8
- class String # :nodoc:
9
- def underscore
10
- gsub(/::/, '/').
11
- gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
12
- gsub(/([a-z\d])([A-Z])/,'\1_\2').
13
- tr("-", "_").
14
- downcase
15
- end
16
- end
17
-
18
- module Celerity
19
-
20
- #
21
- # Experimental - generate a method definition for accessing elements on the current page.
22
- #
23
- # Usage:
24
- #
25
- # MethodGenerator.new(browser, opts).parse
26
- #
27
- #
28
- class MethodGenerator
29
-
30
- ELEMENTS = %w[text_field select_list radio checkbox button].map { |e| e.to_sym }
31
- BUGGY_ELEMENTS = %w[radio checkbox].map { |e| e.to_sym }
32
-
33
- def initialize(ie, opts = {})
34
- @ie = ie
35
- @opts = opts
36
- @browser = @opts[:browser] || '@ie'
37
-
38
- @docs = " # Fills in the page at #{@ie.url}\n #\n"
39
- @docs << " # Parameters:\n #\n"
40
- @doc_elements = []
41
-
42
- @method = " def #{@opts[:method_name] || 'generated_method'}(opts = {})\n\n"
43
- end
44
-
45
- def parse
46
- ELEMENTS.each do |elem|
47
- @method << " # buggy!\n" if BUGGY_ELEMENTS.include?(elem)
48
- add_elements(elem)
49
- end
50
- add_elements(:link) if @opts[:include_links]
51
- @method << " end\n\n"
52
-
53
- # fix docs
54
- max = @doc_elements.map { |symbol, _| symbol.to_s.size }.max
55
- @doc_elements.each do |sym, desc|
56
- @docs << " # #{sym.to_s.ljust(max)} => #{desc}\n"
57
- end
58
- @docs << " #\n"*2
59
- @docs + @method
60
- end
61
-
62
- private
63
-
64
- def add_elements(symbol)
65
- symbol = symbol.to_sym
66
- symbol_pluralized = symbol.to_s.pluralize.to_sym
67
- @ie.send(symbol_pluralized).each_with_index do |elem, idx|
68
- self.send("add_#{symbol}".to_sym, elem, idx)
69
- end
70
-
71
- @method << "\n"
72
- end
73
-
74
- def add_text_field(elem, idx)
75
- how, what = find_identifier(elem) || [:index, (idx + 1).to_s]
76
- @method << " #{@browser}.text_field(#{how.inspect}, #{what.inspect}).value = "
77
- symbol = (how == :index) ? ":text_field_#{what.underscore}" : ":#{what.underscore}"
78
- @method << "opts[#{symbol}]\n"
79
- @doc_elements << [symbol, "value for text field #{what.inspect}"]
80
- end
81
-
82
- def add_select_list(elem, idx)
83
- how, what = find_identifier(elem) || [:index, (idx + 1).to_s]
84
- @method << " #{@browser}.select_list(#{how.inspect}, #{what.inspect}).select("
85
- symbol = (how == :index) ? ":select_list_#{what.underscore}" : ":#{what.underscore}"
86
- @method << "opts[#{symbol}])\n"
87
- @doc_elements << [symbol, "option to select for select list #{what.inspect}"]
88
- end
89
-
90
- def add_radio(elem, idx)
91
- how, what = find_identifier(elem) || [:index, (idx + 1).to_s]
92
- @method << " #{@browser}.radio(#{how.inspect}, #{what.inspect}, "
93
-
94
- if (value = elem.value).empty?
95
- symbol = (how == :index) ? ":radio_#{what.underscore}" : ":#{what.underscore}"
96
- else
97
- symbol = ":#{what.underscore}_#{value.underscore}"
98
- @method << "#{value.inspect}).set if opts[#{symbol}]\n"
99
- end
100
-
101
- @doc_elements << [symbol, "set the radio with id/value #{what.inspect}"]
102
- end
103
-
104
- def add_checkbox(elem, idx)
105
- how, what = find_identifier(elem) || [:index, (idx + 1).to_s]
106
- @method << " #{@browser}.checkbox(#{how.inspect}, #{what.inspect}, "
107
- symbol = (how == :index) ? ":checkbox_#{what.underscore}" : ":#{what.underscore}"
108
- @method << "#{elem.value.inspect}).set if opts[#{symbol}]\n"
109
-
110
- @doc_elements << [symbol, "set the checkbox with id/value #{what.inspect}"]
111
- end
112
-
113
- def add_button(elem, idx)
114
- how, what = find_identifier(elem) || [:index, (idx + 1).to_s]
115
- @method << " #{@browser}.button(#{how.inspect}, #{what.inspect}).click\n"
116
- end
117
-
118
- def add_link(elem, idx)
119
- if (href = elem.href) =~ /javascript/
120
- how, what = :index, (idx + 1).to_s
121
- else
122
- how = :url
123
-
124
- begin
125
- uri = URI.parse(href)
126
- what = Regexp.new(Regexp.escape(uri.to_s.sub(/.*#{uri.host}\//, '')))
127
- rescue URI::InvalidURIError
128
- what = href
129
- end
130
- end
131
- @method << " #{@browser}.link(#{how.inspect}, #{what.inspect}).click\n"
132
- end
133
-
134
- def find_identifier(element)
135
- # could use ATTRIBUTES if they were 'weighted' somehow?
136
- attrs = element.class::ATTRIBUTES
137
- [:id, :name].each do |attribute|
138
- return [attribute, element.send(attribute)] if attrs.include?(attribute) && !element.send(attribute).empty?
139
- end
140
- nil
141
- end
142
-
143
- end # MethodGenerator
144
-
145
- class Browser
146
-
147
- #
148
- # Experimental - generate a method definition for accessing elements on the current page
149
- # Not loaded by default - need to require 'celerity/extra/method_generator'
150
- #
151
-
152
- def generate_method(opts = {})
153
- MethodGenerator.new(self, opts).parse
154
- end
155
-
156
- end # Browser
157
- end # Celerity
158
-
159
-
160
-
161
- # if __FILE__ == $0
162
- # require File.dirname(__FILE__) + "/../spec/spec_helper"
163
- # $stdout.sync = true
164
- # @ie = Browser.new
165
- # @ie.goto(HTML_DIR + "/forms_with_input_elements.html")
166
- #
167
- # puts MethodGenerator.new(@ie).parse
168
- # @ie.goto(HTML_DIR + "/forms3.html")
169
- # puts MethodGenerator.new(@ie).parse
170
- # end