sauce 3.3.0 → 3.3.1
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.
- checksums.yaml +9 -9
- data/lib/sauce/capybara.rb +1 -18
- data/lib/sauce/config.rb +8 -4
- data/lib/sauce/rspec.rb +22 -2
- data/lib/sauce/utilities/connect.rb +4 -0
- data/lib/sauce/version.rb +1 -1
- data/lib/tasks/parallel_testing.rb +23 -9
- data/spec/integration/connect/spec/start_tunnel_spec.rb +3 -1
- data/spec/sauce/cucumber_spec.rb +13 -6
- metadata +25 -23
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NTZiMDJiMzI4ZGY5ZTU0MTA0Njc2YzI4MGI1NDRiM2Q1NGIyZTVjZg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
7
|
-
|
6
|
+
ZmU3MGI1YmU3OTU0MGY4YWY2MDY3OGYzYWVkOTMxYjVhMzAxOGFiNA==
|
7
|
+
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MzYzNTAwN2YxNGMwMjAyNGQ5NzU0Njc3YzUwZmZjOGQ4Y2FjZWExZjJhODA3
|
10
|
+
MDM4NTlkMWE5ZmJhOTIwNjhhZTA4NWU2MTM4ZDkyZTE5OTA5NzJhOTFhOGFh
|
11
|
+
Y2IxMmYyYjI4NGJkZDVmMzYwMDdlODJlYzRiZDVjNWMxZTMyMDg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MWFmMjZjNWM1MGYxNTQxMzU2YjQyMzg0MjVhOTdhOTdjM2Y4YWUzYjBkODM1
|
14
|
+
NDI2OGJiMzdkZmZiMjcyMDcyNjA3OTFjYzEwMDdkMTI5NjFlMzFlOGVkZWIz
|
15
|
+
YzMxNDAwYTNmNTNmOTIxYzg0NjQ3NDAzMmVkMDU5MjZlYmJhNjI=
|
data/lib/sauce/capybara.rb
CHANGED
@@ -113,23 +113,6 @@ module Sauce
|
|
113
113
|
def render(path)
|
114
114
|
browser.save_screenshot path
|
115
115
|
end
|
116
|
-
|
117
|
-
# Overridden to deal with Capybara calling empty html file.
|
118
|
-
# Stolen from (And can be removed when superceeded by the merge of)
|
119
|
-
# https://github.com/jnicklas/capybara/pull/1215
|
120
|
-
def reset!
|
121
|
-
empty_html = "data:text/html,<html></html>"
|
122
|
-
# Use instance variable directly so we avoid starting the browser just to reset the session
|
123
|
-
if @browser
|
124
|
-
begin @browser.manage.delete_all_cookies
|
125
|
-
rescue Selenium::WebDriver::Error::UnhandledError
|
126
|
-
# delete_all_cookies fails when we've previously gone
|
127
|
-
# to about:blank, so we rescue this error and do nothing
|
128
|
-
# instead.
|
129
|
-
end
|
130
|
-
@browser.navigate.to(empty_html)
|
131
|
-
end
|
132
|
-
end
|
133
116
|
end
|
134
117
|
end
|
135
118
|
end
|
@@ -164,4 +147,4 @@ begin
|
|
164
147
|
end
|
165
148
|
rescue LoadError => e
|
166
149
|
# User is not using RSpec
|
167
|
-
end
|
150
|
+
end
|
data/lib/sauce/config.rb
CHANGED
@@ -60,7 +60,8 @@ module Sauce
|
|
60
60
|
}
|
61
61
|
|
62
62
|
BROWSERS = {
|
63
|
-
"iexplore" => "internet explorer"
|
63
|
+
"iexplore" => "internet explorer",
|
64
|
+
"ie" => "internet explorer"
|
64
65
|
}
|
65
66
|
|
66
67
|
SAUCE_OPTIONS = %w{record-video record-screenshots capture-html tags
|
@@ -104,6 +105,9 @@ module Sauce
|
|
104
105
|
end
|
105
106
|
|
106
107
|
def []=(key, value)
|
108
|
+
if(key == :browsers)
|
109
|
+
value = [value] unless value.first.instance_of?(Array)
|
110
|
+
end
|
107
111
|
@undefaulted_opts.merge!({key => value})
|
108
112
|
@opts[key] = value
|
109
113
|
end
|
@@ -121,12 +125,12 @@ module Sauce
|
|
121
125
|
warn "[DEPRECATED] This method (#{meth}) is deprecated, please use the [] and []= accessors instead"
|
122
126
|
end
|
123
127
|
if meth.to_s =~ /(.*)=$/
|
124
|
-
|
128
|
+
self[$1.to_sym] = args[0]
|
125
129
|
return args[0]
|
126
130
|
elsif meth.to_s =~ /(.*)\?$/
|
127
|
-
return
|
131
|
+
return self[$1.to_sym]
|
128
132
|
else
|
129
|
-
return
|
133
|
+
return self[meth]
|
130
134
|
end
|
131
135
|
end
|
132
136
|
|
data/lib/sauce/rspec.rb
CHANGED
@@ -84,6 +84,7 @@ begin
|
|
84
84
|
:browser_version => version,
|
85
85
|
:job_name => description})
|
86
86
|
Sauce.driver_pool[Thread.current.object_id] = @selenium
|
87
|
+
example.metadata[:sauce_public_link] = SauceWhisk.public_link(@selenium.session_id)
|
87
88
|
|
88
89
|
begin
|
89
90
|
the_test.run
|
@@ -131,7 +132,7 @@ begin
|
|
131
132
|
::RSpec.configuration.after :suite do
|
132
133
|
Sauce::Utilities::Connect.close
|
133
134
|
if (defined? @@server) && @@server
|
134
|
-
@@server.stop
|
135
|
+
@@server.stop
|
135
136
|
end
|
136
137
|
Sauce::Utilities.warn_if_suspect_misconfiguration
|
137
138
|
end
|
@@ -142,4 +143,23 @@ rescue LoadError, TypeError
|
|
142
143
|
# User doesn't have RSpec 2.x installed
|
143
144
|
rescue => e
|
144
145
|
STDERR.puts "Exception caught: #{e.to_s}"
|
145
|
-
end
|
146
|
+
end
|
147
|
+
|
148
|
+
begin
|
149
|
+
require 'rspec/core/formatters/base_text_formatter'
|
150
|
+
module RSpec
|
151
|
+
module Core
|
152
|
+
module Formatters
|
153
|
+
class BaseTextFormatter
|
154
|
+
def dump_failure(example, index)
|
155
|
+
output.puts "#{short_padding}#{index.next}) #{example.full_description}"
|
156
|
+
puts "#{short_padding}Sauce public job link: #{example.metadata[:sauce_public_link]}"
|
157
|
+
dump_failure_info(example)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
rescue LoadError
|
164
|
+
# User isn't using RSpec
|
165
|
+
end
|
data/lib/sauce/version.rb
CHANGED
@@ -5,15 +5,14 @@ require "parallel_tests/cli_patch"
|
|
5
5
|
|
6
6
|
|
7
7
|
namespace :sauce do
|
8
|
-
task :spec, :
|
8
|
+
task :spec, :files, :concurrency, :test_options, :parallel_options do |t, args|
|
9
9
|
::RSpec::Core::Runner.disable_autorun!
|
10
|
-
|
11
|
-
|
10
|
+
|
11
|
+
run_parallel_tests(t, args, :rspec)
|
12
12
|
end
|
13
13
|
|
14
14
|
task :features, :files, :concurrency, :test_options, :parallel_options do |t, args|
|
15
|
-
|
16
|
-
ParallelTests::CLI.new.run(parallel_arguments)
|
15
|
+
run_parallel_tests(t, args, :cucumber)
|
17
16
|
end
|
18
17
|
|
19
18
|
namespace :install do
|
@@ -66,6 +65,21 @@ namespace :sauce do
|
|
66
65
|
end
|
67
66
|
end
|
68
67
|
|
68
|
+
def run_parallel_tests(t, args, command)
|
69
|
+
username = ENV["SAUCE_USERNAME"].to_s
|
70
|
+
access_key = ENV["SAUCE_ACCESS_KEY"].to_s
|
71
|
+
if(!username.empty? && !access_key.empty?)
|
72
|
+
parallel_arguments = parse_task_args(command, args)
|
73
|
+
ParallelTests::CLI.new.run(parallel_arguments)
|
74
|
+
else
|
75
|
+
puts <<-ENDLINE
|
76
|
+
Your Sauce username and/or access key are unavailable. Please:
|
77
|
+
1. Set the SAUCE_USERNAME and SAUCE_ACCESS_KEY environment variables.
|
78
|
+
2. Rerun your tests.
|
79
|
+
ENDLINE
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
69
83
|
def parse_task_args(test_tool=:rspec, args)
|
70
84
|
default = {
|
71
85
|
:concurrency => [Sauce::TestBroker.concurrency, 20].min
|
@@ -90,7 +104,7 @@ def parse_task_args(test_tool=:rspec, args)
|
|
90
104
|
|
91
105
|
concurrency = args[:concurrency] || env_args[:concurrency] || default[:concurrency]
|
92
106
|
test_options = args[:test_options] || env_args[:test_options] || default[:test_options]
|
93
|
-
parallel_options = args[:parallel_options] || env_args[:parallel_options]
|
107
|
+
parallel_options = args[:parallel_options] || env_args[:parallel_options]
|
94
108
|
files = args[:files] || env_args[:files] || default[:files]
|
95
109
|
|
96
110
|
return_args = [
|
@@ -98,9 +112,9 @@ def parse_task_args(test_tool=:rspec, args)
|
|
98
112
|
'--type'
|
99
113
|
]
|
100
114
|
|
101
|
-
return_args.push 'saucerspec' if test_tool == :rspec
|
115
|
+
return_args.push 'saucerspec' if test_tool == :rspec
|
102
116
|
return_args.push 'saucecucumber' if test_tool == :cucumber
|
103
|
-
|
117
|
+
|
104
118
|
if test_options
|
105
119
|
return_args.push '-o'
|
106
120
|
return_args.push test_options
|
@@ -110,4 +124,4 @@ def parse_task_args(test_tool=:rspec, args)
|
|
110
124
|
return_args.push files
|
111
125
|
|
112
126
|
return return_args
|
113
|
-
end
|
127
|
+
end
|
@@ -2,6 +2,8 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe "Sauce::Config" do
|
4
4
|
it "should start Connect when start_tunnel is set" do
|
5
|
-
Sauce::
|
5
|
+
tunnel = Sauce::Utilities::Connect.tunnel
|
6
|
+
tunnel.should_not be_nil
|
7
|
+
tunnel.status.should eq "running"
|
6
8
|
end
|
7
9
|
end
|
data/spec/sauce/cucumber_spec.rb
CHANGED
@@ -61,6 +61,7 @@ module Sauce::Capybara
|
|
61
61
|
let(:session_id) { 'deadbeef' }
|
62
62
|
let(:driver) do
|
63
63
|
driver = double('Sauce::Selenium2 Driver')
|
64
|
+
driver.stub(:finish!)
|
64
65
|
driver.stub_chain(:browser, :quit)
|
65
66
|
driver.stub_chain(:browser, :session_id).and_return(session_id)
|
66
67
|
driver
|
@@ -71,6 +72,12 @@ module Sauce::Capybara
|
|
71
72
|
Capybara.stub_chain(:current_session, :driver).and_return(driver)
|
72
73
|
SauceWhisk::Job.stub(:new).and_return(nil)
|
73
74
|
Sauce::Selenium2.stub(:new).with(anything).and_return Object.new
|
75
|
+
Sauce.config do |c|
|
76
|
+
c[:browsers] = [
|
77
|
+
["OS X 10.8", "Safari", "6"],
|
78
|
+
["Linux", "Chrome", nil]
|
79
|
+
]
|
80
|
+
end
|
74
81
|
end
|
75
82
|
|
76
83
|
context 'with a scenario outline' do
|
@@ -92,7 +99,7 @@ module Sauce::Capybara
|
|
92
99
|
"""
|
93
100
|
end
|
94
101
|
|
95
|
-
it 'should have executed the scenario
|
102
|
+
it 'should have executed the scenario twice for each browser' do
|
96
103
|
define_steps do
|
97
104
|
Given /^a (\d+)$/ do |number|
|
98
105
|
$ran_scenario = $ran_scenario + 1
|
@@ -109,7 +116,7 @@ module Sauce::Capybara
|
|
109
116
|
end
|
110
117
|
|
111
118
|
run_defined_feature feature
|
112
|
-
$ran_scenario.should
|
119
|
+
$ran_scenario.should eq 4 # 2 browsers, two examples
|
113
120
|
end
|
114
121
|
|
115
122
|
end
|
@@ -174,15 +181,15 @@ module Sauce::Capybara
|
|
174
181
|
# Using this gnarly global just because it's easier to just use a
|
175
182
|
# global than try to fish the scenario results back out of the
|
176
183
|
# Cucumber bits
|
177
|
-
$ran_scenario =
|
184
|
+
$ran_scenario = 0
|
178
185
|
end
|
179
186
|
|
180
|
-
it 'should have executed the feature once' do
|
187
|
+
it 'should have executed the feature once for each browser' do
|
181
188
|
define_steps do
|
182
189
|
Given /^a scenario$/ do
|
183
190
|
end
|
184
191
|
When /^I raise no exceptions$/ do
|
185
|
-
$ran_scenario
|
192
|
+
$ran_scenario += 1
|
186
193
|
end
|
187
194
|
# Set up and invoke our defined Around hook
|
188
195
|
Around('@selenium') do |scenario, block|
|
@@ -196,7 +203,7 @@ module Sauce::Capybara
|
|
196
203
|
# Make sure we actually configure ourselves
|
197
204
|
Sauce.should_receive(:config)
|
198
205
|
run_defined_feature feature
|
199
|
-
$ran_scenario.should
|
206
|
+
$ran_scenario.should eq 2 # Two browsers
|
200
207
|
end
|
201
208
|
end
|
202
209
|
end
|
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: 3.3.
|
4
|
+
version: 3.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dylan Lacey
|
@@ -10,53 +10,54 @@ authors:
|
|
10
10
|
- Santiago Suarez Ordoñez
|
11
11
|
- Eric Allen
|
12
12
|
- Sean Grove
|
13
|
+
- Isaac Murchie
|
13
14
|
autorequire:
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
|
-
date: 2014-
|
17
|
+
date: 2014-02-05 00:00:00.000000000 Z
|
17
18
|
dependencies:
|
18
19
|
- !ruby/object:Gem::Dependency
|
19
|
-
name:
|
20
|
+
name: rspec
|
20
21
|
requirement: !ruby/object:Gem::Requirement
|
21
22
|
requirements:
|
22
23
|
- - ~>
|
23
24
|
- !ruby/object:Gem::Version
|
24
|
-
version: 2.
|
25
|
+
version: 2.14.0
|
25
26
|
type: :development
|
26
27
|
prerelease: false
|
27
28
|
version_requirements: !ruby/object:Gem::Requirement
|
28
29
|
requirements:
|
29
30
|
- - ~>
|
30
31
|
- !ruby/object:Gem::Version
|
31
|
-
version: 2.
|
32
|
+
version: 2.14.0
|
32
33
|
- !ruby/object:Gem::Dependency
|
33
|
-
name:
|
34
|
+
name: simplecov
|
34
35
|
requirement: !ruby/object:Gem::Requirement
|
35
36
|
requirements:
|
36
|
-
- -
|
37
|
+
- - ! '>='
|
37
38
|
- !ruby/object:Gem::Version
|
38
|
-
version:
|
39
|
+
version: '0'
|
39
40
|
type: :development
|
40
41
|
prerelease: false
|
41
42
|
version_requirements: !ruby/object:Gem::Requirement
|
42
43
|
requirements:
|
43
|
-
- -
|
44
|
+
- - ! '>='
|
44
45
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
46
|
+
version: '0'
|
46
47
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
48
|
+
name: capybara
|
48
49
|
requirement: !ruby/object:Gem::Requirement
|
49
50
|
requirements:
|
50
51
|
- - ! '>='
|
51
52
|
- !ruby/object:Gem::Version
|
52
|
-
version:
|
53
|
+
version: 2.2.1
|
53
54
|
type: :development
|
54
55
|
prerelease: false
|
55
56
|
version_requirements: !ruby/object:Gem::Requirement
|
56
57
|
requirements:
|
57
58
|
- - ! '>='
|
58
59
|
- !ruby/object:Gem::Version
|
59
|
-
version:
|
60
|
+
version: 2.2.1
|
60
61
|
- !ruby/object:Gem::Dependency
|
61
62
|
name: net-http-persistent
|
62
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -189,28 +190,28 @@ dependencies:
|
|
189
190
|
requirements:
|
190
191
|
- - '='
|
191
192
|
- !ruby/object:Gem::Version
|
192
|
-
version: 0.16.
|
193
|
+
version: 0.16.6
|
193
194
|
type: :runtime
|
194
195
|
prerelease: false
|
195
196
|
version_requirements: !ruby/object:Gem::Requirement
|
196
197
|
requirements:
|
197
198
|
- - '='
|
198
199
|
- !ruby/object:Gem::Version
|
199
|
-
version: 0.16.
|
200
|
+
version: 0.16.6
|
200
201
|
- !ruby/object:Gem::Dependency
|
201
202
|
name: sauce_whisk
|
202
203
|
requirement: !ruby/object:Gem::Requirement
|
203
204
|
requirements:
|
204
205
|
- - ~>
|
205
206
|
- !ruby/object:Gem::Version
|
206
|
-
version: 0.0.
|
207
|
+
version: 0.0.11
|
207
208
|
type: :runtime
|
208
209
|
prerelease: false
|
209
210
|
version_requirements: !ruby/object:Gem::Requirement
|
210
211
|
requirements:
|
211
212
|
- - ~>
|
212
213
|
- !ruby/object:Gem::Version
|
213
|
-
version: 0.0.
|
214
|
+
version: 0.0.11
|
214
215
|
description: A Ruby helper for running tests in Sauce Labs' browser testing cloud
|
215
216
|
service
|
216
217
|
email: help@saucelabs.com
|
@@ -219,30 +220,31 @@ executables:
|
|
219
220
|
extensions: []
|
220
221
|
extra_rdoc_files: []
|
221
222
|
files:
|
223
|
+
- bin/sauce
|
222
224
|
- lib/childprocess/process.rb
|
223
225
|
- lib/generators/sauce/install/install_generator.rb
|
224
226
|
- lib/parallel_tests/cli_patch.rb
|
225
227
|
- lib/parallel_tests/saucecucumber/runner.rb
|
226
228
|
- lib/parallel_tests/saucerspec/runner.rb
|
229
|
+
- lib/sauce.rb
|
227
230
|
- lib/sauce/capybara.rb
|
228
231
|
- lib/sauce/client.rb
|
229
232
|
- lib/sauce/config.rb
|
230
233
|
- lib/sauce/driver_pool.rb
|
231
234
|
- lib/sauce/heroku.rb
|
232
235
|
- lib/sauce/job.rb
|
236
|
+
- lib/sauce/parallel.rb
|
233
237
|
- lib/sauce/parallel/test_broker.rb
|
234
238
|
- lib/sauce/parallel/test_group.rb
|
235
|
-
- lib/sauce/parallel.rb
|
236
239
|
- lib/sauce/raketasks.rb
|
237
240
|
- lib/sauce/rspec.rb
|
238
241
|
- lib/sauce/selenium.rb
|
239
242
|
- lib/sauce/test_unit.rb
|
243
|
+
- lib/sauce/utilities.rb
|
240
244
|
- lib/sauce/utilities/connect.rb
|
241
245
|
- lib/sauce/utilities/rails_server.rb
|
242
246
|
- lib/sauce/utilities/rake.rb
|
243
|
-
- lib/sauce/utilities.rb
|
244
247
|
- lib/sauce/version.rb
|
245
|
-
- lib/sauce.rb
|
246
248
|
- lib/tasks/parallel_testing.rb
|
247
249
|
- spec/cucumber_helper.rb
|
248
250
|
- spec/integration/connect/spec/spec_helper.rb
|
@@ -275,9 +277,9 @@ files:
|
|
275
277
|
- spec/sauce/utilities/utilities_spec.rb
|
276
278
|
- spec/sauce_helper.rb
|
277
279
|
- spec/spec_helper.rb
|
278
|
-
- bin/sauce
|
279
280
|
homepage: http://github.com/sauce-labs/sauce_ruby
|
280
|
-
licenses:
|
281
|
+
licenses:
|
282
|
+
- Apache 2.0
|
281
283
|
metadata: {}
|
282
284
|
post_install_message:
|
283
285
|
rdoc_options: []
|
@@ -295,7 +297,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
295
297
|
version: '0'
|
296
298
|
requirements: []
|
297
299
|
rubyforge_project:
|
298
|
-
rubygems_version: 2.
|
300
|
+
rubygems_version: 2.2.1
|
299
301
|
signing_key:
|
300
302
|
specification_version: 4
|
301
303
|
summary: A Ruby helper for running tests in Sauce Labs
|