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 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
@@ -10,7 +10,6 @@ module Sauce
10
10
  end
11
11
 
12
12
  def copy
13
- directory "spec"
14
13
  directory "lib"
15
14
  end
16
15
  end
@@ -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 :sauce_connect, :os, :browser, :browser_version
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 start
15
- start_jasmine_server if sauce_connect
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 'rspec'
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
- RSpec::Core::RakeTask.new(:sauce) do |t|
8
- t.rspec_opts = ["--colour", "--format", "progress"]
9
- t.verbose = true
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(browser, os, version, host, port, sauce_connect, base_url = nil)
6
+ def initialize(os, browser, browser_version, domain)
7
7
  host = host[7..-1] if host =~ /^http:\/\//
8
- @host = host
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 => 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 connect
22
- if @sauce_connect
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 disconnect
35
- @driver.stop
36
- @connection.disconnect if @connection
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
@@ -1 +1,3 @@
1
1
  require 'sauce/jasmine/config'
2
+ require 'sauce/jasmine/server'
3
+ require 'sauce/jasmine/runner'
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: -3702664322
4
+ hash: -3702664328
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
9
  - 0
10
10
  - alpha
11
- - 1
12
- version: 0.2.0.alpha1
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-23 00:00:00 -07:00
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: 91
31
+ hash: 85
32
32
  segments:
33
33
  - 0
34
- - 16
35
- - 2
36
- version: 0.16.2
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
@@ -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