jasmine-sauce 0.2.0.alpha1 → 0.2.0.alpha2

Sign up to get free protection for your applications and to get access to all the features.
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