sauce 2.3.4 → 2.3.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/generators/sauce/install/install_generator.rb +4 -4
- data/lib/sauce.rb +6 -0
- data/lib/sauce/capybara.rb +28 -9
- data/lib/sauce/integrations.rb +8 -5
- data/spec/integration/rspec/spec/selenium/selenium_directory_spec.rb +24 -0
- data/spec/integration/rspec/spec/selenium/selenium_with_capybara_spec.rb +36 -0
- data/spec/integration/rspec/spec/spec_helper.rb +2 -0
- data/spec/sauce/capybara_spec.rb +78 -0
- data/spec/sauce/config_spec.rb +4 -4
- data/spec/sauce/driver_pool_spec.rb +8 -0
- metadata +12 -4
@@ -40,12 +40,12 @@ module Sauce
|
|
40
40
|
require 'sauce'
|
41
41
|
|
42
42
|
Sauce.config do |conf|
|
43
|
-
conf
|
43
|
+
conf[:browsers] = [
|
44
44
|
["Windows 2003", "firefox", "3.6."]
|
45
45
|
]
|
46
|
-
conf
|
47
|
-
conf
|
48
|
-
conf
|
46
|
+
conf[:application_host] = "127.0.0.1"
|
47
|
+
conf[:application_port] = "3001"
|
48
|
+
conf[:browser_url] = "http://localhost:3001/"
|
49
49
|
end
|
50
50
|
CONFIG
|
51
51
|
end
|
data/lib/sauce.rb
CHANGED
data/lib/sauce/capybara.rb
CHANGED
@@ -85,21 +85,40 @@ module Sauce
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def browser
|
88
|
-
unless
|
89
|
-
|
90
|
-
Sauce
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
88
|
+
unless existing_browser?
|
89
|
+
unless @browser = rspec_browser
|
90
|
+
if Sauce.get_config[:start_tunnel]
|
91
|
+
Sauce::Capybara.connect_tunnel(:quiet => true)
|
92
|
+
end
|
93
|
+
|
94
|
+
@browser = Sauce::Selenium2.new
|
95
|
+
at_exit do
|
96
|
+
finish!
|
97
|
+
end
|
96
98
|
end
|
97
99
|
end
|
98
100
|
@browser
|
99
101
|
end
|
100
102
|
|
103
|
+
def rspec_browser
|
104
|
+
if browser = Sauce.driver_pool[Thread.current.object_id]
|
105
|
+
@using_rspec_browser = true
|
106
|
+
else
|
107
|
+
@using_rspec_browser = false
|
108
|
+
end
|
109
|
+
browser
|
110
|
+
end
|
111
|
+
|
112
|
+
def existing_browser?
|
113
|
+
if @using_rspec_browser
|
114
|
+
@browser == Sauce.driver_pool[Thread.current.object_id]
|
115
|
+
else
|
116
|
+
@browser
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
101
120
|
def finish!
|
102
|
-
@browser.quit if
|
121
|
+
@browser.quit if existing_browser?
|
103
122
|
@browser = nil
|
104
123
|
$sauce_tunnel.disconnect if $sauce_tunnel
|
105
124
|
end
|
data/lib/sauce/integrations.rb
CHANGED
@@ -17,7 +17,7 @@ begin
|
|
17
17
|
before :suite do
|
18
18
|
config = Sauce::Config.new
|
19
19
|
if @@need_tunnel
|
20
|
-
if config
|
20
|
+
if config[:application_host]
|
21
21
|
@@tunnel = Sauce::Connect.new(:host => config.application_host, :port => config.application_port || 80)
|
22
22
|
@@tunnel.connect
|
23
23
|
@@tunnel.wait_until_ready
|
@@ -37,7 +37,7 @@ begin
|
|
37
37
|
def execute(*args)
|
38
38
|
config = Sauce::Config.new
|
39
39
|
description = [self.class.description, self.description].join(" ")
|
40
|
-
config
|
40
|
+
config[:browsers].each do |os, browser, version|
|
41
41
|
@selenium = Sauce::Selenium2.new({:os => os, :browser => browser,
|
42
42
|
:browser_version => version,
|
43
43
|
:job_name => description})
|
@@ -77,10 +77,13 @@ begin
|
|
77
77
|
:browser => browser,
|
78
78
|
:browser_version => version,
|
79
79
|
:job_name => description})
|
80
|
+
Sauce.driver_pool[Thread.current.object_id] = @selenium
|
81
|
+
|
80
82
|
begin
|
81
83
|
the_test.run
|
82
84
|
ensure
|
83
85
|
@selenium.stop
|
86
|
+
Sauce.driver_pool.delete Thread.current.object_id
|
84
87
|
end
|
85
88
|
end
|
86
89
|
end
|
@@ -94,7 +97,7 @@ begin
|
|
94
97
|
config = Sauce::Config.new
|
95
98
|
files_to_run = ::RSpec.configuration.respond_to?(:files_to_run) ? ::RSpec.configuration.files_to_run :
|
96
99
|
::RSpec.configuration.settings[:files_to_run]
|
97
|
-
if config
|
100
|
+
if config[:application_host]
|
98
101
|
need_tunnel = files_to_run.any? {|file| file =~ /spec\/selenium\//}
|
99
102
|
end
|
100
103
|
if need_tunnel
|
@@ -138,7 +141,7 @@ module Sauce
|
|
138
141
|
end
|
139
142
|
unless my_name =~ /^default_test/
|
140
143
|
config = Sauce::Config.new
|
141
|
-
if config
|
144
|
+
if config[:application_host]
|
142
145
|
unless ENV['TEST_ENV_NUMBER'].to_i > 1
|
143
146
|
Sauce::Connect.ensure_connected(:host => config.application_host, :port => config.application_port || 80)
|
144
147
|
end
|
@@ -156,7 +159,7 @@ module Sauce
|
|
156
159
|
end
|
157
160
|
end
|
158
161
|
|
159
|
-
config
|
162
|
+
config[:browsers].each do |os, browser, version|
|
160
163
|
options = self.class.sauce_config
|
161
164
|
options.merge!({:os => os, :browser => browser,
|
162
165
|
:browser_version => version,
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "sauce"
|
3
|
+
|
4
|
+
Sauce.config do |c|
|
5
|
+
c.browsers = [
|
6
|
+
["Windows 2008", "iexplore", "9"],
|
7
|
+
["Linux", "opera", 12]
|
8
|
+
]
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "Specs in the Selenium Directory" do
|
12
|
+
|
13
|
+
before :all do
|
14
|
+
$EXECUTIONS = 0
|
15
|
+
end
|
16
|
+
|
17
|
+
after :all do
|
18
|
+
$EXECUTIONS.should be 2
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should get run on every defined browser" do
|
22
|
+
$EXECUTIONS += 1
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "rspec"
|
2
|
+
require "rspec/mocks"
|
3
|
+
require "spec_helper"
|
4
|
+
require "sauce/capybara"
|
5
|
+
|
6
|
+
class MyRackApp
|
7
|
+
def self.call(env)
|
8
|
+
[200, {}, ["Hello"]]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
Sauce.config do |c|
|
13
|
+
c.browsers = [
|
14
|
+
["Windows 2008", "iexplore", "9"],
|
15
|
+
["Linux", "opera", 12]
|
16
|
+
]
|
17
|
+
end
|
18
|
+
|
19
|
+
Capybara.app = MyRackApp
|
20
|
+
|
21
|
+
describe "The Selenium Directory with Capybara", :js => true do
|
22
|
+
|
23
|
+
include Capybara::DSL
|
24
|
+
it "should get run on every defined browser", :js => true do
|
25
|
+
visit "http://www.google.com"
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should have the same driver as stock webdriver", :js => true do
|
29
|
+
Capybara.current_session.driver.browser.should eq @selenium
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should not create a new driver" do
|
33
|
+
::Sauce::Selenium2.should_not_receive(:new)
|
34
|
+
visit "http://wwww.google.com"
|
35
|
+
end
|
36
|
+
end
|
data/spec/sauce/capybara_spec.rb
CHANGED
@@ -103,6 +103,72 @@ describe Sauce::Capybara do
|
|
103
103
|
end
|
104
104
|
end
|
105
105
|
|
106
|
+
describe '#rspec_browser' do
|
107
|
+
let(:driver) { Sauce::Capybara::Driver.new(app) }
|
108
|
+
|
109
|
+
before :each do
|
110
|
+
Sauce::Selenium2.stub(:new).and_return(nil)
|
111
|
+
end
|
112
|
+
|
113
|
+
context "with no rspec driver" do
|
114
|
+
|
115
|
+
before :each do
|
116
|
+
Sauce.stub(:driver_pool).and_return({})
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should return nil" do
|
120
|
+
driver.rspec_browser.should be nil
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should set the rspec_driver flag to false" do
|
124
|
+
driver.rspec_browser
|
125
|
+
driver.instance_variable_get(:@using_rspec_browser).should be_false
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
129
|
+
|
130
|
+
context "with an rspec driver" do
|
131
|
+
let(:mock_driver) {Object.new}
|
132
|
+
before :each do
|
133
|
+
Sauce.stub(:driver_pool).and_return({Thread.current.object_id => mock_driver})
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should return the driver" do
|
137
|
+
driver.rspec_browser.should be mock_driver
|
138
|
+
end
|
139
|
+
|
140
|
+
it "should set the rspec_driver flag to true" do
|
141
|
+
driver.rspec_browser
|
142
|
+
driver.instance_variable_get(:@using_rspec_browser).should be_true
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
context "called after a driver_pool change" do
|
147
|
+
|
148
|
+
context "with no driver present" do
|
149
|
+
let(:mock_driver) {Object.new}
|
150
|
+
|
151
|
+
before (:each) do
|
152
|
+
Sauce.stub(:driver_pool).and_return(
|
153
|
+
{Thread.current.object_id => mock_driver},
|
154
|
+
{Thread.current.object_id => nil}
|
155
|
+
)
|
156
|
+
end
|
157
|
+
|
158
|
+
it "should return nil" do
|
159
|
+
driver.rspec_browser.should eq mock_driver
|
160
|
+
driver.rspec_browser.should be nil
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should set rspec_browser flag false" do
|
164
|
+
driver.rspec_browser
|
165
|
+
driver.rspec_browser
|
166
|
+
driver.instance_variable_get(:@using_rspec_browser).should be_false
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
106
172
|
describe '#browser' do
|
107
173
|
let(:driver) { Sauce::Capybara::Driver.new(app) }
|
108
174
|
|
@@ -110,6 +176,18 @@ describe Sauce::Capybara do
|
|
110
176
|
# Stub out the selenium driver startup
|
111
177
|
Sauce::Selenium2.stub(:new).and_return(nil)
|
112
178
|
end
|
179
|
+
|
180
|
+
context "when there is a driver in the driver pool" do
|
181
|
+
let(:mock_browser) {Object.new}
|
182
|
+
before :each do
|
183
|
+
Sauce.driver_pool[Thread.current.object_id] = mock_browser
|
184
|
+
end
|
185
|
+
|
186
|
+
it "should use the driver_pools browser" do
|
187
|
+
driver.browser.should eq mock_browser
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
113
191
|
context 'when tunneling is disabled' do
|
114
192
|
it 'should not call #connect_tunnel' do
|
115
193
|
Sauce::Capybara.should_receive(:connect_tunnel).never
|
data/spec/sauce/config_spec.rb
CHANGED
@@ -57,11 +57,11 @@ describe Sauce::Config do
|
|
57
57
|
describe '#os' do
|
58
58
|
it 'should return the value set in the config block' do
|
59
59
|
Sauce.config do |config|
|
60
|
-
config
|
60
|
+
config[:os] = 'TEST_OS'
|
61
61
|
end
|
62
62
|
|
63
63
|
c = Sauce::Config.new
|
64
|
-
c
|
64
|
+
c[:os].should == 'TEST_OS'
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
@@ -206,7 +206,7 @@ describe Sauce::Config do
|
|
206
206
|
describe 'browsers=' do
|
207
207
|
it 'should default the config to the first item' do
|
208
208
|
Sauce.config do |config|
|
209
|
-
config
|
209
|
+
config[:browsers] = [['TEST_OS', 'TEST_BROWSER', 'TEST_BROWSER_VERSION']]
|
210
210
|
end
|
211
211
|
|
212
212
|
c = Sauce::Config.new
|
@@ -228,7 +228,7 @@ describe Sauce::Config do
|
|
228
228
|
|
229
229
|
it 'should allow overrides as constructor options' do
|
230
230
|
Sauce.config do |config|
|
231
|
-
config
|
231
|
+
config[:browsers] = [['OS1', 'BROWSER1', 'BROWSER_VERSION1']]
|
232
232
|
end
|
233
233
|
|
234
234
|
c = Sauce::Config.new(:os => 'OS2', :browser => 'BROWSER2',
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sauce
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3.
|
4
|
+
version: 2.3.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2013-
|
17
|
+
date: 2013-04-02 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: net-http-persistent
|
@@ -183,9 +183,13 @@ files:
|
|
183
183
|
- lib/sauce.rb
|
184
184
|
- spec/cucumber_helper.rb
|
185
185
|
- spec/integration/connect_integration_spec.rb
|
186
|
+
- spec/integration/rspec/spec/selenium/selenium_directory_spec.rb
|
187
|
+
- spec/integration/rspec/spec/selenium/selenium_with_capybara_spec.rb
|
188
|
+
- spec/integration/rspec/spec/spec_helper.rb
|
186
189
|
- spec/sauce/capybara_spec.rb
|
187
190
|
- spec/sauce/config_spec.rb
|
188
191
|
- spec/sauce/cucumber_spec.rb
|
192
|
+
- spec/sauce/driver_pool_spec.rb
|
189
193
|
- spec/sauce/jasmine_spec.rb
|
190
194
|
- spec/sauce/selenium_spec.rb
|
191
195
|
- spec/spec_helper.rb
|
@@ -204,7 +208,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
204
208
|
version: '0'
|
205
209
|
segments:
|
206
210
|
- 0
|
207
|
-
hash: -
|
211
|
+
hash: -1836059849841492535
|
208
212
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
209
213
|
none: false
|
210
214
|
requirements:
|
@@ -213,7 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
213
217
|
version: '0'
|
214
218
|
segments:
|
215
219
|
- 0
|
216
|
-
hash: -
|
220
|
+
hash: -1836059849841492535
|
217
221
|
requirements: []
|
218
222
|
rubyforge_project:
|
219
223
|
rubygems_version: 1.8.25
|
@@ -223,9 +227,13 @@ summary: A Ruby helper for running tests in Sauce Labs
|
|
223
227
|
test_files:
|
224
228
|
- spec/cucumber_helper.rb
|
225
229
|
- spec/integration/connect_integration_spec.rb
|
230
|
+
- spec/integration/rspec/spec/selenium/selenium_directory_spec.rb
|
231
|
+
- spec/integration/rspec/spec/selenium/selenium_with_capybara_spec.rb
|
232
|
+
- spec/integration/rspec/spec/spec_helper.rb
|
226
233
|
- spec/sauce/capybara_spec.rb
|
227
234
|
- spec/sauce/config_spec.rb
|
228
235
|
- spec/sauce/cucumber_spec.rb
|
236
|
+
- spec/sauce/driver_pool_spec.rb
|
229
237
|
- spec/sauce/jasmine_spec.rb
|
230
238
|
- spec/sauce/selenium_spec.rb
|
231
239
|
- spec/spec_helper.rb
|