seleniumrc 0.0.1 → 0.0.2

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 (31) hide show
  1. data/CHANGES +4 -0
  2. data/README +38 -0
  3. data/Rakefile +1 -1
  4. data/lib/seleniumrc.rb +2 -4
  5. data/lib/seleniumrc/dsl/selenium_dsl.rb +8 -143
  6. data/lib/seleniumrc/extensions/testrunnermediator.rb +2 -2
  7. data/lib/seleniumrc/mongrel_selenium_server_runner.rb +9 -7
  8. data/lib/seleniumrc/selenium_configuration.rb +233 -40
  9. data/lib/seleniumrc/selenium_driver.rb +193 -0
  10. data/lib/seleniumrc/selenium_element.rb +31 -37
  11. data/lib/seleniumrc/selenium_page.rb +16 -16
  12. data/lib/seleniumrc/selenium_server_runner.rb +1 -1
  13. data/lib/seleniumrc/selenium_test_case.rb +2 -4
  14. data/lib/seleniumrc/wait_for.rb +3 -10
  15. data/lib/seleniumrc/webrick_selenium_server_runner.rb +11 -11
  16. data/spec/seleniumrc/mongrel_selenium_server_runner_spec.rb +31 -38
  17. data/spec/seleniumrc/selenese_interpreter_spec.rb +12 -12
  18. data/spec/seleniumrc/selenium_configuration_spec.rb +350 -12
  19. data/spec/seleniumrc/selenium_driver_spec.rb +104 -0
  20. data/spec/seleniumrc/selenium_element_spec.rb +78 -76
  21. data/spec/seleniumrc/selenium_page_spec.rb +39 -29
  22. data/spec/seleniumrc/selenium_test_case_spec.rb +631 -673
  23. data/spec/seleniumrc/selenium_test_case_spec_helper.rb +0 -7
  24. data/spec/seleniumrc/webrick_selenium_server_runner_spec.rb +14 -13
  25. data/spec/spec_helper.rb +7 -1
  26. metadata +4 -7
  27. data/lib/seleniumrc/app_server_checker.rb +0 -43
  28. data/lib/seleniumrc/extensions/selenium_driver.rb +0 -33
  29. data/lib/seleniumrc/selenium_context.rb +0 -226
  30. data/spec/seleniumrc/app_server_checker_spec.rb +0 -56
  31. data/spec/seleniumrc/selenium_context_spec.rb +0 -362
@@ -12,12 +12,5 @@ module SeleniumTestCaseSpec
12
12
  end
13
13
  def test_nothing
14
14
  end
15
-
16
- def base_selenium
17
- @selenium
18
- end
19
- def base_selenium=(value)
20
- @selenium = value
21
- end
22
15
  end
23
16
  end
@@ -2,6 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
2
 
3
3
  module Seleniumrc
4
4
  describe WebrickSeleniumServerRunner do
5
+ attr_reader :configuration
5
6
  before(:each) do
6
7
  Object.const_set(:RAILS_ROOT, "foobar")
7
8
  end
@@ -28,8 +29,8 @@ describe WebrickSeleniumServerRunner do
28
29
  it "start method should require the environment and dispatcher" do
29
30
  runner = create_runner_that_is_stubbed_so_start_method_works
30
31
 
31
- mock(runner).require.with("foobar")
32
- mock(runner).require.with("dispatcher")
32
+ mock(runner).require("foobar")
33
+ mock(runner).require("dispatcher")
33
34
 
34
35
  runner.environment_path = "foobar"
35
36
  runner.start
@@ -66,8 +67,8 @@ describe WebrickSeleniumServerRunner do
66
67
  end
67
68
 
68
69
  def create_runner_that_is_stubbed_so_start_method_works()
69
- @context = Seleniumrc::SeleniumContext.new
70
- runner = @context.create_webrick_runner
70
+ configuration = Seleniumrc::SeleniumConfiguration.new
71
+ runner = configuration.create_webrick_runner
71
72
  class << runner; public :start_server; end
72
73
 
73
74
  def runner.require(*args)
@@ -78,28 +79,28 @@ describe WebrickSeleniumServerRunner do
78
79
  stub(mock_socket).do_not_reverse_lookup=(true)
79
80
 
80
81
  @mock_server = mock_server = "mock_server"
81
- (class << @context; self; end).class_eval do
82
+ (class << configuration; self; end).class_eval do
82
83
  define_method :create_webrick_server do
83
84
  mock_server
84
85
  end
85
86
  end
86
87
 
87
- @context.internal_app_server_port = 4000
88
- @context.internal_app_server_host = "localhost"
89
- @context.rails_env = "test"
88
+ configuration.internal_app_server_port = 4000
89
+ configuration.internal_app_server_host = "localhost"
90
+ configuration.rails_env = "test"
90
91
  stub(@mock_server).mount('/')
91
92
  mock(@mock_server).mount(
92
93
  '/',
93
94
  DispatchServlet,
94
95
  {
95
- :port => @context.internal_app_server_port,
96
- :ip => @context.internal_app_server_host,
97
- :environment => @context.rails_env,
98
- :server_root => File.expand_path("#{@context.rails_root}/public/"),
96
+ :port => configuration.internal_app_server_port,
97
+ :ip => configuration.internal_app_server_host,
98
+ :environment => configuration.rails_env,
99
+ :server_root => File.expand_path("#{configuration.rails_root}/public/"),
99
100
  :server_type => WEBrick::SimpleServer,
100
101
  :charset => "UTF-8",
101
102
  :mime_types => WEBrick::HTTPUtils::DefaultMimeTypes,
102
- :working_directory => File.expand_path(@context.rails_root.to_s)
103
+ :working_directory => File.expand_path(configuration.rails_root.to_s)
103
104
  }
104
105
  )
105
106
 
@@ -54,4 +54,10 @@ class FakeTimeClass
54
54
  def now
55
55
  @now += 1
56
56
  end
57
- end
57
+ end
58
+
59
+ describe "Selenium", :shared => true do
60
+ def result(response_text=nil)
61
+ "OK,#{response_text }"
62
+ end
63
+ end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.3
3
3
  specification_version: 1
4
4
  name: seleniumrc
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.1
7
- date: 2007-10-26 00:00:00 -07:00
6
+ version: 0.0.2
7
+ date: 2007-10-30 00:00:00 -07:00
8
8
  summary: Selenium RC with enhanced assertions that also runs your rails app.
9
9
  require_paths:
10
10
  - lib
@@ -32,7 +32,6 @@ files:
32
32
  - Rakefile
33
33
  - CHANGES
34
34
  - README
35
- - lib/seleniumrc/app_server_checker.rb
36
35
  - lib/seleniumrc/mongrel_selenium_server_runner.rb
37
36
  - lib/seleniumrc/selenium_helper.rb
38
37
  - lib/seleniumrc/wait_for.rb
@@ -40,11 +39,10 @@ files:
40
39
  - lib/seleniumrc/selenium_server_runner.rb
41
40
  - lib/seleniumrc/dsl/selenium_dsl.rb
42
41
  - lib/seleniumrc/dsl/test_unit_dsl.rb
42
+ - lib/seleniumrc/selenium_driver.rb
43
43
  - lib/seleniumrc/selenium_element.rb
44
44
  - lib/seleniumrc/webrick_selenium_server_runner.rb
45
- - lib/seleniumrc/selenium_context.rb
46
45
  - lib/seleniumrc/tasks/selenium_test_task.rb
47
- - lib/seleniumrc/extensions/selenium_driver.rb
48
46
  - lib/seleniumrc/extensions/testrunnermediator.rb
49
47
  - lib/seleniumrc/selenium_configuration.rb
50
48
  - lib/seleniumrc/selenium_page.rb
@@ -55,13 +53,12 @@ files:
55
53
  - spec/seleniumrc/selenium_server_runner_spec.rb
56
54
  - spec/seleniumrc/selenium_element_spec.rb
57
55
  - spec/seleniumrc/selenium_test_case_spec.rb
58
- - spec/seleniumrc/selenium_context_spec.rb
59
- - spec/seleniumrc/app_server_checker_spec.rb
60
56
  - spec/seleniumrc/selenium_test_case_spec_helper.rb
61
57
  - spec/seleniumrc/webrick_selenium_server_runner_spec.rb
62
58
  - spec/seleniumrc/mongrel_selenium_server_runner_spec.rb
63
59
  - spec/seleniumrc/selenium_configuration_spec.rb
64
60
  - spec/seleniumrc/selenium_test_case_class_method_spec.rb
61
+ - spec/seleniumrc/selenium_driver_spec.rb
65
62
  - spec/seleniumrc/selenese_interpreter_spec.rb
66
63
  test_files: []
67
64
 
@@ -1,43 +0,0 @@
1
- module Seleniumrc
2
- class AppServerChecker
3
-
4
- attr_accessor :tcp_socket_class
5
- attr_accessor :context
6
-
7
- def is_server_started?
8
- @host = @context.internal_app_server_host
9
- @port = @context.internal_app_server_port
10
- if (@host == '0.0.0.0')
11
- @host = '127.0.0.1'
12
- end
13
- if (@host == '127.0.0.1' || @host == 'localhost')
14
- return is_started?
15
- end
16
-
17
- # must be remote
18
- return true if @context.verify_remote_app_server_is_running == false
19
-
20
- # should be verified
21
- return true if is_started?
22
- # is not started but should be verified, so throw exception
23
- error_message = "The 'verify_remote_app_server_is_running flag' was true, but the server was not accessible at '#{@host}:#{@port}'. " \
24
- "You should either start the server, or set the environment variable 'verify_remote_app_server_is_running' to false " \
25
- "(IF you are SURE that the server is actually running, but just not accessible from this box)."
26
- raise RuntimeError.new(error_message)
27
- end
28
-
29
- def is_started?
30
- begin
31
- @socket = @tcp_socket_class.new(@host, @port)
32
- rescue SocketError
33
- return false
34
- rescue Errno::EBADF
35
- return false
36
- rescue Errno::ECONNREFUSED
37
- return false
38
- end
39
- @socket.close unless @socket.nil?
40
- return true
41
- end
42
- end
43
- end
@@ -1,33 +0,0 @@
1
- module Selenium
2
- class SeleniumDriver
3
- attr_reader :server_host, :server_port
4
-
5
- def browser_start_command
6
- @browserStartCommand
7
- end
8
-
9
- def browser_url
10
- @browserURL
11
- end
12
-
13
- def timeout_in_milliseconds
14
- @timeout
15
- end
16
-
17
- alias_method :confirm, :get_confirmation
18
-
19
- def insert_javascript_file(uri)
20
- js = <<-USEREXTENSIONS
21
- var headTag = document.getElementsByTagName("head").item(0);
22
- var scriptTag = document.createElement("script");
23
- scriptTag.src = "#{uri}";
24
- headTag.appendChild( scriptTag );
25
- USEREXTENSIONS
26
- get_eval(js)
27
- end
28
-
29
- def insert_user_extensions
30
- insert_javascript_file("/selenium/user-extensions.js")
31
- end
32
- end
33
- end
@@ -1,226 +0,0 @@
1
- module Seleniumrc
2
- # The application state and Dependency Injection container of the Seleniumrc objects.
3
- # All objects are created through the SeleniumContext. All global state is encapsulated here.
4
- class SeleniumContext
5
- attr_accessor :configuration,
6
- :env,
7
- :rails_env,
8
- :rails_root,
9
- :browsers,
10
- :current_browser,
11
- :interpreter,
12
- :browser_mode,
13
- :selenium_server_host,
14
- :selenium_server_port,
15
- :app_server_engine,
16
- :internal_app_server_host,
17
- :internal_app_server_port,
18
- :external_app_server_host,
19
- :external_app_server_port,
20
- :server_engine,
21
- :keep_browser_open_on_failure,
22
- :verify_remote_app_server_is_running
23
-
24
- def initialize
25
- self.verify_remote_app_server_is_running = true
26
- @before_suite_listeners = []
27
- @after_selenese_interpreter_started_listeners = []
28
- end
29
-
30
- # A callback hook that gets run before the suite is run.
31
- def before_suite(&block)
32
- @before_suite_listeners << block
33
- end
34
-
35
- # Notify all before_suite callbacks.
36
- def notify_before_suite
37
- for listener in @before_suite_listeners
38
- listener.call
39
- end
40
- end
41
-
42
- # A callback hook that gets run after the Selenese Interpreter is started.
43
- def after_selenese_interpreter_started(&block)
44
- @after_selenese_interpreter_started_listeners << block
45
- end
46
-
47
- # Notify all after_selenese_interpreter_started callbacks.
48
- def notify_after_selenese_interpreter_started(interpreter)
49
- for listener in @after_selenese_interpreter_started_listeners
50
- listener.call(interpreter)
51
- end
52
- end
53
-
54
- # The browser formatted for the Selenese interpreter.
55
- def formatted_browser
56
- return "*#{@current_browser}"
57
- end
58
-
59
- # Has a failure occurred in the tests?
60
- def failure_has_occurred?
61
- @failure_has_occurred = true
62
- end
63
-
64
- # Sets the failure state to true
65
- def failure_has_occurred!
66
- @failure_has_occurred = true
67
- end
68
-
69
- # Sets the failure state to false
70
- def failure_has_not_occurred!
71
- @failure_has_occurred = false
72
- end
73
-
74
- # The http host name and port to be entered into the browser address bar
75
- def browser_url
76
- "http://#{external_app_server_host}:#{external_app_server_port}"
77
- end
78
-
79
- # The root directory (public) of the Rails application
80
- def server_root
81
- File.expand_path("#{rails_root}/public/")
82
- end
83
-
84
- # Sets the Test Suite to open a new browser instance for each TestCase
85
- def test_browser_mode!
86
- @browser_mode = SeleniumConfiguration::BrowserMode::Test
87
- end
88
-
89
- # Are we going to open a new browser instance for each TestCase?
90
- def test_browser_mode?
91
- @browser_mode == SeleniumConfiguration::BrowserMode::Test
92
- end
93
-
94
- # Sets the Test Suite to use one browser instance
95
- def suite_browser_mode!
96
- @browser_mode = SeleniumConfiguration::BrowserMode::Suite
97
- end
98
-
99
- # Does the Test Suite to use one browser instance?
100
- def suite_browser_mode?
101
- @browser_mode == SeleniumConfiguration::BrowserMode::Suite
102
- end
103
-
104
- def run_each_browser # nodoc
105
- browsers.each do |browser|
106
- self.current_browser = browser
107
- yield
108
- break if @failure_has_occurred
109
- end
110
- end
111
-
112
- # The Selenese Interpreter object. This is the Interpreter provided by the Selenium RC (http://openqa.org/selenium-rc/) project.
113
- def selenese_interpreter
114
- return nil unless suite_browser_mode?
115
- unless @interpreter
116
- @interpreter = create_and_initialize_interpreter
117
- end
118
- @interpreter
119
- end
120
-
121
- def stop_interpreter_if_necessary(suite_passed) # nodoc
122
- failure_has_occurred! unless suite_passed
123
- if @interpreter && stop_selenese_interpreter?(suite_passed)
124
- @interpreter.stop
125
- @interpreter = nil
126
- end
127
- end
128
-
129
- def stop_selenese_interpreter?(passed) # nodoc
130
- return true if passed
131
- return !keep_browser_open_on_failure
132
- end
133
-
134
- def create_app_server_checker # nodoc
135
- app_server_checker = AppServerChecker.new()
136
- app_server_checker.context = self
137
- app_server_checker.tcp_socket_class = TCPSocket
138
- return app_server_checker
139
- end
140
-
141
- def create_and_initialize_interpreter # nodoc
142
- interpreter = create_interpreter
143
- interpreter.start
144
- notify_after_selenese_interpreter_started(interpreter)
145
- interpreter
146
- end
147
-
148
- def create_interpreter # nodoc
149
- return Selenium::SeleneseInterpreter.new(
150
- selenium_server_host,
151
- selenium_server_port,
152
- formatted_browser,
153
- browser_url,
154
- 15000
155
- )
156
- end
157
-
158
- def create_server_runner # nodoc
159
- case @app_server_engine.to_sym
160
- when :mongrel
161
- create_mongrel_runner
162
- when :webrick
163
- create_webrick_runner
164
- else
165
- raise "Invalid server type: #{selenium_context.app_server_type}"
166
- end
167
- end
168
-
169
- def create_webrick_runner # nodoc
170
- require 'webrick_server'
171
- runner = WebrickSeleniumServerRunner.new
172
- runner.context = self
173
- runner.thread_class = Thread
174
- runner.socket = Socket
175
- runner.dispatch_servlet = DispatchServlet
176
- runner.environment_path = File.expand_path("#{@rails_root}/config/environment")
177
- runner
178
- end
179
-
180
- def create_webrick_server # nodoc
181
- WEBrick::HTTPServer.new({
182
- :Port => @internal_app_server_port,
183
- :BindAddress => @internal_app_server_host,
184
- :ServerType => WEBrick::SimpleServer,
185
- :MimeTypes => WEBrick::HTTPUtils::DefaultMimeTypes,
186
- :Logger => new_logger,
187
- :AccessLog => []
188
- })
189
- end
190
-
191
- def new_logger
192
- Logger.new(StringIO.new)
193
- end
194
-
195
- def create_mongrel_runner # nodoc
196
- runner = MongrelSeleniumServerRunner.new
197
- runner.context = self
198
- runner.thread_class = Thread
199
- runner
200
- end
201
-
202
- def create_mongrel_configurator # nodoc
203
- dir = File.dirname(__FILE__)
204
- require 'mongrel/rails'
205
- settings = {
206
- :host => internal_app_server_host,
207
- :port => internal_app_server_port,
208
- :cwd => @rails_root,
209
- :log_file => "#{@rails_root}/log/mongrel.log",
210
- :pid_file => "#{@rails_root}/log/mongrel.pid",
211
- :environment => @rails_env,
212
- :docroot => "public",
213
- :mime_map => nil,
214
- :daemon => false,
215
- :debug => false,
216
- :includes => ["mongrel"],
217
- :config_script => nil
218
- }
219
-
220
- configurator = Mongrel::Rails::RailsConfigurator.new(settings) do
221
- log "Starting Mongrel in #{defaults[:environment]} mode at #{defaults[:host]}:#{defaults[:port]}"
222
- end
223
- configurator
224
- end
225
- end
226
- end
@@ -1,56 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
-
3
- module Seleniumrc
4
- describe AppServerChecker, "on local host" do
5
- before(:each) do
6
- @context = Seleniumrc::SeleniumContext.new
7
- @host = "0.0.0.0"
8
- @context.internal_app_server_host = @host
9
- @port = 4000
10
- @context.internal_app_server_port = @port
11
- @app_server_checker = @context.create_app_server_checker
12
- @mock_tcp_socket_class = 'mock_tcp_socket_class'
13
- @app_server_checker.tcp_socket_class = @mock_tcp_socket_class
14
- @expected_translated_local_host_address = "127.0.0.1"
15
- end
16
-
17
- it "returns true for is_server_started? if server is running" do
18
- mock(@mock_tcp_socket_class).new(@expected_translated_local_host_address, @port)
19
- @app_server_checker.is_server_started?.should == (true)
20
- end
21
-
22
- it "returns false for is_server_started? if server is NOT running" do
23
- mock(@mock_tcp_socket_class).new.with(@expected_translated_local_host_address, @port) {raise SocketError}
24
- @app_server_checker.is_server_started?.should == (false)
25
- end
26
- end
27
-
28
- describe AppServerChecker, "on remote host" do
29
- before(:each) do
30
- @context = Seleniumrc::SeleniumContext.new
31
- @host = "some-remote-host"
32
- @context.internal_app_server_host = @host
33
- @port = 4000
34
- @context.internal_app_server_port = @port
35
- @app_server_checker = @context.create_app_server_checker
36
- @mock_tcp_socket_class = 'mock_tcp_socket_class'
37
- @app_server_checker.tcp_socket_class = @mock_tcp_socket_class
38
- end
39
-
40
- it "returns true for is_server_started? if verify_remote_app_server_is_running_flag is false" do
41
- @context.verify_remote_app_server_is_running = false
42
- @app_server_checker.is_server_started?.should == (true)
43
- end
44
-
45
- it "returns true for is_server_started? if server is running" do
46
- mock(@mock_tcp_socket_class).new.with(@host, @port)
47
- @app_server_checker.is_server_started?.should == (true)
48
- end
49
-
50
- it "raises exception if server is NOT running and verify_remote_app_server_is_running_flag is true" do
51
- @context.verify_remote_app_server_is_running = true
52
- mock(@mock_tcp_socket_class).new.with(@host, @port) {raise SocketError}
53
- lambda {@app_server_checker.is_server_started?}.should raise_error(RuntimeError)
54
- end
55
- end
56
- end