jasmine-sauce 0.2.0.alpha1 → 0.2.0.alpha2
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.
- data/Rakefile +2 -0
- data/lib/generators/sauce/jasmine/jasmine_generator.rb +0 -1
- data/lib/sauce/jasmine/config.rb +4 -7
- data/lib/sauce/jasmine/jasmine-sauce.rake +4 -6
- data/lib/sauce/jasmine/runner.rb +93 -0
- data/lib/sauce/jasmine/selenium_driver.rb +12 -23
- data/lib/sauce/jasmine/server.rb +25 -0
- data/lib/sauce/jasmine.rb +2 -0
- metadata +10 -9
- data/lib/generators/sauce/jasmine/templates/spec/javascripts/support/jasmine_sauce_runner.rb +0 -64
data/Rakefile
CHANGED
@@ -8,10 +8,12 @@ Rake::TestTask.new(:test) do |test|
|
|
8
8
|
test.verbose = true
|
9
9
|
end
|
10
10
|
|
11
|
+
desc 'Build the gem'
|
11
12
|
task :build do
|
12
13
|
system "gem build jasmine-sauce.gemspec"
|
13
14
|
end
|
14
15
|
|
16
|
+
desc 'Push gem to rubygems.org'
|
15
17
|
task :push => :build do
|
16
18
|
system "gem push `ls *.gem | sort | tail -n 1`"
|
17
19
|
end
|
data/lib/sauce/jasmine/config.rb
CHANGED
@@ -4,18 +4,15 @@ require 'sauce/jasmine/selenium_driver'
|
|
4
4
|
module Sauce
|
5
5
|
module Jasmine
|
6
6
|
class Config < ::Jasmine::Config
|
7
|
-
attr_accessor :
|
8
|
-
attr_writer :base_url
|
7
|
+
attr_accessor :tunnel_domain
|
9
8
|
|
10
9
|
def initialize
|
11
10
|
sauce_connect = true
|
11
|
+
@tunnel_domain = "#{rand(10000)}.jasmine.test"
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
|
16
|
-
@client = Sauce::Jasmine::SeleniumDriver.new(browser, os, browser_version, jasmine_host,
|
17
|
-
@jasmine_server_port, sauce_connect, @base_url)
|
18
|
-
@client.connect
|
14
|
+
def quiet_tunnel?
|
15
|
+
true
|
19
16
|
end
|
20
17
|
end
|
21
18
|
end
|
@@ -1,13 +1,11 @@
|
|
1
|
-
require '
|
2
|
-
require 'rspec/core/rake_task'
|
1
|
+
require 'sauce/jasmine'
|
3
2
|
|
4
3
|
namespace :jasmine do
|
5
4
|
namespace :ci do
|
6
5
|
desc 'Run Jasmine tests in the cloud'
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
t.pattern = ['spec/javascripts/support/jasmine_sauce_runner.rb']
|
6
|
+
task :sauce do
|
7
|
+
runner = Sauce::Jasmine::Runner.new
|
8
|
+
runner.run
|
11
9
|
end
|
12
10
|
end
|
13
11
|
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module Sauce
|
2
|
+
module Jasmine
|
3
|
+
class Runner
|
4
|
+
def initialize
|
5
|
+
@config = Config.new
|
6
|
+
@server = Server.new(@config)
|
7
|
+
end
|
8
|
+
|
9
|
+
def run
|
10
|
+
setup
|
11
|
+
begin
|
12
|
+
run_tests
|
13
|
+
ensure
|
14
|
+
teardown
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def setup
|
19
|
+
@server.start
|
20
|
+
puts "Setting up Sauce Connect..."
|
21
|
+
@tunnel = Sauce::Connect.new(:domain => @config.tunnel_domain,
|
22
|
+
:host => @server.host,
|
23
|
+
:port => @server.port,
|
24
|
+
:quiet => @config.quiet_tunnel?)
|
25
|
+
@tunnel.wait_until_ready
|
26
|
+
puts "Sauce Connect ready"
|
27
|
+
end
|
28
|
+
|
29
|
+
def run_tests
|
30
|
+
puts "running tests..."
|
31
|
+
browsers = Sauce::Config.new.browsers
|
32
|
+
results = {}
|
33
|
+
|
34
|
+
threads = browsers.map do |browser_spec|
|
35
|
+
browser_string = browser_spec.join('/')
|
36
|
+
Thread.new do
|
37
|
+
begin
|
38
|
+
result = run_tests_in_browser(*browser_spec)
|
39
|
+
puts "Suite finished on #{browser_string}"
|
40
|
+
Thread.exclusive do
|
41
|
+
results[browser_string] << result
|
42
|
+
end
|
43
|
+
rescue => e
|
44
|
+
results[browser_string] = e
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
threads.each(&:join)
|
49
|
+
|
50
|
+
success = results.all? do |run_result|
|
51
|
+
if run_result.respond_to? :values
|
52
|
+
run_result.values.all? {|suite_result| suite_result['result'] == "passed"}
|
53
|
+
else # exception
|
54
|
+
false
|
55
|
+
end
|
56
|
+
end
|
57
|
+
if success
|
58
|
+
puts "Success!"
|
59
|
+
else
|
60
|
+
puts "Failure:"
|
61
|
+
results.each do |browser_string, result|
|
62
|
+
puts "#{browser_string}:"
|
63
|
+
p result
|
64
|
+
puts
|
65
|
+
puts
|
66
|
+
end
|
67
|
+
at_exit { exit!(1) }
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def teardown
|
72
|
+
puts "Shutting down Sauce Connect..."
|
73
|
+
@tunnel.disconnect
|
74
|
+
puts "Sauce Connect shut down"
|
75
|
+
end
|
76
|
+
|
77
|
+
def run_tests_in_browser(os, browser, browser_version)
|
78
|
+
driver = SeleniumDriver.new(os, browser, browser_version, @config.tunnel_domain)
|
79
|
+
driver.connect
|
80
|
+
begin
|
81
|
+
while !driver.tests_have_finished?
|
82
|
+
sleep 1.0
|
83
|
+
end
|
84
|
+
result = driver.test_results
|
85
|
+
ensure
|
86
|
+
driver.disconnect
|
87
|
+
return result
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
@@ -3,37 +3,26 @@ require 'jasmine/selenium_driver'
|
|
3
3
|
module Sauce
|
4
4
|
module Jasmine
|
5
5
|
class SeleniumDriver < ::Jasmine::SeleniumDriver
|
6
|
-
def initialize(
|
6
|
+
def initialize(os, browser, browser_version, domain)
|
7
7
|
host = host[7..-1] if host =~ /^http:\/\//
|
8
|
-
|
9
|
-
@port = port
|
10
|
-
@sauce_connect = sauce_connect
|
11
|
-
base_url ||= "#{rand(10000)}.jasmine.test"
|
8
|
+
base_url = "http://#{domain}"
|
12
9
|
@driver = Sauce::Selenium.new(:browser => browser,
|
13
10
|
:os => os,
|
14
|
-
:browser_version =>
|
11
|
+
:browser_version => browser_version,
|
15
12
|
:browser_url => base_url,
|
16
|
-
:job_name => "Jasmine"
|
17
|
-
:'record-video' => true,
|
18
|
-
:'record-screenshots' => true)
|
13
|
+
:job_name => "Jasmine")
|
19
14
|
end
|
20
15
|
|
21
|
-
def
|
22
|
-
|
23
|
-
puts "Setting up Sauce Connect..."
|
24
|
-
@connection = Sauce::Connect.new(:domain => @tunnel_domain,
|
25
|
-
:host => @host,
|
26
|
-
:port => @port,
|
27
|
-
:quiet => true)
|
28
|
-
@connection.wait_until_ready
|
29
|
-
puts "Sauce Connect ready."
|
30
|
-
end
|
31
|
-
super
|
16
|
+
def tests_have_finished?
|
17
|
+
eval_js("jsApiReporter && jsApiReporter.finished")
|
32
18
|
end
|
33
19
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
20
|
+
def test_suites
|
21
|
+
eval_js("var result = jsApiReporter.suites(); if (window.Prototype && Object.toJSON) { Object.toJSON(result) } else { JSON.stringify(result) }")
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_results
|
25
|
+
eval_js("var result = jsApiReporter.results(); if (window.Prototype && Object.toJSON) { Object.toJSON(result) } else { JSON.stringify(result) }")
|
37
26
|
end
|
38
27
|
end
|
39
28
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Sauce
|
2
|
+
module Jasmine
|
3
|
+
class Server
|
4
|
+
attr_reader :port, :host
|
5
|
+
|
6
|
+
def initialize(config)
|
7
|
+
@config = config
|
8
|
+
@host = "127.0.0.1"
|
9
|
+
end
|
10
|
+
|
11
|
+
def start
|
12
|
+
@port = ::Jasmine::find_unused_port
|
13
|
+
Thread.new do
|
14
|
+
handler = Rack::Handler.default
|
15
|
+
handler.run ::Jasmine.app(@config), :Port => @port, :AccessLog => []
|
16
|
+
end
|
17
|
+
::Jasmine::wait_for_listener(@port, "jasmine server")
|
18
|
+
end
|
19
|
+
|
20
|
+
def stop
|
21
|
+
# nothing, yet
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/sauce/jasmine.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jasmine-sauce
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: -
|
4
|
+
hash: -3702664328
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
9
|
- 0
|
10
10
|
- alpha
|
11
|
-
-
|
12
|
-
version: 0.2.0.
|
11
|
+
- 2
|
12
|
+
version: 0.2.0.alpha2
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Eric Allen
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2011-03-
|
20
|
+
date: 2011-03-24 00:00:00 -07:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
@@ -28,12 +28,12 @@ dependencies:
|
|
28
28
|
requirements:
|
29
29
|
- - ">="
|
30
30
|
- !ruby/object:Gem::Version
|
31
|
-
hash:
|
31
|
+
hash: 85
|
32
32
|
segments:
|
33
33
|
- 0
|
34
|
-
-
|
35
|
-
-
|
36
|
-
version: 0.
|
34
|
+
- 18
|
35
|
+
- 1
|
36
|
+
version: 0.18.1
|
37
37
|
type: :runtime
|
38
38
|
version_requirements: *id001
|
39
39
|
- !ruby/object:Gem::Dependency
|
@@ -67,10 +67,11 @@ files:
|
|
67
67
|
- Rakefile
|
68
68
|
- lib/generators/sauce/jasmine/jasmine_generator.rb
|
69
69
|
- lib/generators/sauce/jasmine/templates/lib/tasks/jasmine-sauce.rake
|
70
|
-
- lib/generators/sauce/jasmine/templates/spec/javascripts/support/jasmine_sauce_runner.rb
|
71
70
|
- lib/sauce/jasmine/config.rb
|
72
71
|
- lib/sauce/jasmine/jasmine-sauce.rake
|
72
|
+
- lib/sauce/jasmine/runner.rb
|
73
73
|
- lib/sauce/jasmine/selenium_driver.rb
|
74
|
+
- lib/sauce/jasmine/server.rb
|
74
75
|
- lib/sauce/jasmine.rb
|
75
76
|
has_rdoc: true
|
76
77
|
homepage: http://github.com/saucelabs/jasmine-sauce
|
data/lib/generators/sauce/jasmine/templates/spec/javascripts/support/jasmine_sauce_runner.rb
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'jasmine'
|
3
|
-
require 'sauce/jasmine'
|
4
|
-
|
5
|
-
jasmine_config_overrides = File.expand_path(File.join(File.dirname(__FILE__), 'jasmine_config.rb'))
|
6
|
-
require jasmine_config_overrides if File.exist?(jasmine_config_overrides)
|
7
|
-
|
8
|
-
$jasmine_config = Sauce::Jasmine::Config.new
|
9
|
-
$jasmine_config.sauce_connect = false
|
10
|
-
|
11
|
-
$tunnel_domain = "#{rand(10000)}.jasmine.test"
|
12
|
-
|
13
|
-
def start_server(port = 8888)
|
14
|
-
handler = Rack::Handler.default
|
15
|
-
handler.run Jasmine.app($jasmine_config), :Port => port, :AccessLog => []
|
16
|
-
end
|
17
|
-
|
18
|
-
def start_jasmine_server
|
19
|
-
jasmine_server_port = Jasmine::find_unused_port
|
20
|
-
Thread.new do
|
21
|
-
start_server(jasmine_server_port)
|
22
|
-
end
|
23
|
-
Jasmine::wait_for_listener(jasmine_server_port, "jasmine server")
|
24
|
-
puts "jasmine server started."
|
25
|
-
return jasmine_server_port
|
26
|
-
end
|
27
|
-
|
28
|
-
port = start_jasmine_server
|
29
|
-
|
30
|
-
|
31
|
-
puts "Setting up Sauce Connect..."
|
32
|
-
@connection = Sauce::Connect.new(:domain => $tunnel_domain,
|
33
|
-
:host => "127.0.0.1",
|
34
|
-
:port => port,
|
35
|
-
:quiet => true)
|
36
|
-
@connection.wait_until_ready
|
37
|
-
puts "Sauce Connect ready!"
|
38
|
-
|
39
|
-
builders = []
|
40
|
-
|
41
|
-
RSpec.configuration.after(:suite) do
|
42
|
-
builders.each do |builder|
|
43
|
-
builder.stop
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
Sauce::Config.new.browsers.each do |os, browser, browser_version|
|
48
|
-
config = Sauce::Jasmine::Config.new
|
49
|
-
config.sauce_connect = false
|
50
|
-
config.os = os
|
51
|
-
config.browser = browser
|
52
|
-
config.browser_version = browser_version
|
53
|
-
|
54
|
-
config.base_url = "http://#{$tunnel_domain}"
|
55
|
-
spec_builder = Jasmine::SpecBuilder.new(config)
|
56
|
-
builders << spec_builder
|
57
|
-
|
58
|
-
spec_builder.start
|
59
|
-
spec_builder.declare_suites
|
60
|
-
end
|
61
|
-
|
62
|
-
at_exit do
|
63
|
-
puts "\nShutting down Sauce Connect..."
|
64
|
-
end
|