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
@@ -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