sauce 2.2.2 → 2.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,17 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
@@ -1,29 +0,0 @@
1
- # Sauce::Cucumber
2
-
3
- TODO: Write a gem description
4
-
5
- ## Installation
6
-
7
- Add this line to your application's Gemfile:
8
-
9
- gem 'sauce-cucumber'
10
-
11
- And then execute:
12
-
13
- $ bundle
14
-
15
- Or install it yourself as:
16
-
17
- $ gem install sauce-cucumber
18
-
19
- ## Usage
20
-
21
- TODO: Write usage instructions here
22
-
23
- ## Contributing
24
-
25
- 1. Fork it
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Added some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create new Pull Request
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
@@ -1,121 +0,0 @@
1
- require 'capybara'
2
- require 'cucumber'
3
- require 'sauce/job'
4
- require 'sauce/capybara'
5
-
6
- module Sauce
7
- module Capybara
8
- module Cucumber
9
- def use_sauce_driver
10
- ::Capybara.current_driver = :sauce
11
- end
12
- module_function :use_sauce_driver
13
-
14
- def name_from_scenario(scenario)
15
- # Special behavior to handle Scenario Outlines
16
- if scenario.instance_of? ::Cucumber::Ast::OutlineTable::ExampleRow
17
- table = scenario.instance_variable_get(:@table)
18
- outline = table.instance_variable_get(:@scenario_outline)
19
- return "#{outline.feature.file} - #{outline.title} - #{table.headers} -> #{scenario.name}"
20
- end
21
- scenario, feature = _scenario_and_feature_name(scenario)
22
- return "#{feature} - #{scenario}"
23
- end
24
- module_function :name_from_scenario
25
-
26
- def jenkins_name_from_scenario(scenario)
27
- # Special behavior to handle Scenario Outlines
28
- if scenario.instance_of? ::Cucumber::Ast::OutlineTable::ExampleRow
29
- table = scenario.instance_variable_get(:@table)
30
- outline = table.instance_variable_get(:@scenario_outline)
31
- return "#{outline.feature.short_name}.#{outline.title}.#{outline.title} (outline example: #{scenario.name})"
32
- end
33
- scenario, feature = _scenario_and_feature_name(scenario)
34
- return "#{feature}.#{scenario}.#{scenario}"
35
- end
36
- module_function :jenkins_name_from_scenario
37
-
38
- def _scenario_and_feature_name(scenario)
39
- scenario_name = scenario.name.split("\n").first
40
- feature_name = scenario.feature.short_name
41
- return scenario_name, feature_name
42
- end
43
- module_function :_scenario_and_feature_name
44
-
45
- def before_hook
46
- Sauce::Capybara::Cucumber.use_sauce_driver
47
- end
48
- module_function :before_hook
49
-
50
- def using_jenkins?
51
- # JENKINS_SERVER_COOKIE seems to be as good as any sentinel value to
52
- # determine whether we're running under Jenkins or not.
53
- ENV['JENKINS_SERVER_COOKIE']
54
- end
55
- module_function :using_jenkins?
56
-
57
- def around_hook(scenario, block)
58
- ::Capybara.current_driver = :sauce
59
- driver = ::Capybara.current_session.driver
60
- # This session_id is the job ID used by Sauce Labs, we're pulling it
61
- # off of the driver now to make sure we have it after `block.call`
62
- session_id = driver.browser.session_id
63
- job_name = Sauce::Capybara::Cucumber.name_from_scenario(scenario)
64
- custom_data = {}
65
-
66
- if using_jenkins?
67
- custom_data.merge!({:commit => ENV['GIT_COMMIT'] || ENV['SVN_COMMIT'],
68
- :jenkins_node => ENV['NODE_NAME'],
69
- :jenkins_job => ENV['JOB_NAME']})
70
- end
71
-
72
- job = Sauce::Job.new('id' => session_id,
73
- 'name' => job_name,
74
- 'custom-data' => custom_data)
75
- job.save unless job.nil?
76
-
77
- Sauce.config do |c|
78
- c[:name] = Sauce::Capybara::Cucumber.name_from_scenario(scenario)
79
- end
80
-
81
- if using_jenkins?
82
- # If we're running under Jenkins, we should dump the
83
- # `SauceOnDemandSessionID` into the Console Output for the Sauce OnDemand
84
- # Jenkins plugin.
85
- # See: <https://github.com/saucelabs/sauce_ruby/issues/48>
86
- output = []
87
- output << "\nSauceOnDemandSessionID=#{session_id}"
88
- # The duplication in the scenario_name comes from the fact that the
89
- # JUnit formatter seems to do the same, so in order to get the sauce
90
- # OnDemand plugin for Jenkins to co-operate, we need to double it up as
91
- # well
92
- output << "job-name=#{Sauce::Capybara::Cucumber.jenkins_name_from_scenario(scenario)}"
93
- puts output.join(' ')
94
- end
95
-
96
- block.call
97
-
98
- # Quit the driver to allow for the generation of a new session_id
99
- driver.finish!
100
-
101
- unless job.nil?
102
- job.passed = !scenario.failed?
103
- job.save
104
- end
105
- end
106
- module_function :around_hook
107
- end
108
- end
109
- end
110
-
111
-
112
- begin
113
- Before('@selenium') do
114
- Sauce::Capybara::Cucumber.before_hook
115
- end
116
-
117
- Around('@selenium') do |scenario, block|
118
- Sauce::Capybara::Cucumber.around_hook(scenario, block)
119
- end
120
- rescue NoMethodError # This makes me sad
121
- end
@@ -1,20 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path(File.dirname(__FILE__) + '/../../lib/sauce/version')
3
-
4
- Gem::Specification.new do |gem|
5
- gem.authors = ["R. Tyler Croy"]
6
- gem.email = ["tyler@monkeypox.org"]
7
- gem.description = ''
8
- gem.summary = ''
9
- gem.homepage = ""
10
-
11
- gem.files = `git ls-files`.split($\)
12
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
- gem.name = "sauce-cucumber"
15
- gem.require_paths = ["lib"]
16
- gem.version = "#{Sauce::MAJOR_VERSION}.1"
17
-
18
- gem.add_dependency('sauce', ">= #{Sauce::MAJOR_VERSION}.0")
19
- gem.add_dependency('cucumber', '>= 1.2.0')
20
- end
@@ -1,17 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
@@ -1,29 +0,0 @@
1
- # Sauce::Jasmine
2
-
3
- TODO: Write a gem description
4
-
5
- ## Installation
6
-
7
- Add this line to your application's Gemfile:
8
-
9
- gem 'sauce-jasmine'
10
-
11
- And then execute:
12
-
13
- $ bundle
14
-
15
- Or install it yourself as:
16
-
17
- $ gem install sauce-jasmine
18
-
19
- ## Usage
20
-
21
- TODO: Write usage instructions here
22
-
23
- ## Contributing
24
-
25
- 1. Fork it
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Added some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create new Pull Request
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
@@ -1,35 +0,0 @@
1
- require 'jasmine'
2
-
3
- module Sauce
4
- module Jasmine
5
- class Driver < ::Jasmine::SeleniumDriver
6
- attr_reader :http_address, :driver, :browser
7
-
8
- def initialize(browser, http_address)
9
- @browser = browser
10
- @http_address = http_address
11
- @driver = Sauce::Selenium2.new(:browser => browser, :job_name => job_name)
12
- puts "Starting job named: #{job_name}"
13
- end
14
-
15
- def job_name
16
- "Jasmine Test Run #{Time.now.utc.to_i}"
17
- end
18
- end
19
- end
20
- end
21
-
22
- module Jasmine
23
- class Config
24
- def jasmine_port
25
- '3001'
26
- end
27
-
28
- def start
29
- @client = Sauce::Jasmine::Driver.new(browser, "#{jasmine_host}:#{jasmine_port}/")
30
- @client.connect
31
- end
32
- end
33
- end
34
-
35
-
@@ -1,47 +0,0 @@
1
- require 'jasmine'
2
- require 'rspec/core/rake_task'
3
-
4
- namespace :jasmine do
5
- def run_jasmine_server
6
- ENV['JASMINE_PORT'] = '3001'
7
- Jasmine::Config.new.start_jasmine_server
8
- end
9
-
10
- desc "Execute Jasmine tests in a Chrome browser on Sauce Labs"
11
- task :sauce do
12
- run_jasmine_server
13
- Rake::Task['jasmine:sauce:chrome'].execute
14
- end
15
-
16
- namespace :sauce do
17
- desc "Execute Jasmine tests in Chrome, Firefox and Internet Explorer on Sauce Labs"
18
- task :all do
19
- run_jasmine_server
20
- threads = []
21
- [:firefox, :chrome, :iexplore].each do |browser|
22
- t = Thread.new do
23
- Rake::Task["jasmine:sauce:#{browser}"].invoke
24
- end
25
- t.abort_on_exception = true
26
- threads << t
27
- end
28
-
29
- threads.each do |t|
30
- t.join
31
- end
32
- end
33
-
34
- [[:firefox, 8], [:chrome, nil], [:iexplore, 8]].each do |browser, version|
35
- desc "Execute Jasmine tests in #{browser}"
36
- RSpec::Core::RakeTask.new(browser) do |t|
37
- ENV['SAUCE_BROWSER'] = browser.to_s
38
- unless version.nil?
39
- ENV['SAUCE_BROWSER_VERSION'] = version.to_s
40
- end
41
- t.rspec_opts = '--color'
42
- t.pattern = [File.expand_path(File.dirname(__FILE__) + '/runner.rb')]
43
- end
44
- end
45
- end
46
- end
47
-
@@ -1,4 +0,0 @@
1
- require 'sauce'
2
- require 'sauce/jasmine'
3
- ENV['JASMINE_PORT'] = '3001'
4
- require 'jasmine/runner'
@@ -1,21 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path(File.dirname(__FILE__) + '/../../lib/sauce/version')
3
-
4
- Gem::Specification.new do |gem|
5
- gem.authors = ["R. Tyler Croy"]
6
- gem.email = ["tyler@monkeypox.org"]
7
- gem.description = ''
8
- gem.summary = ''
9
- gem.homepage = ""
10
-
11
- gem.files = `git ls-files`.split($\)
12
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
- gem.name = "sauce-jasmine"
15
- gem.require_paths = ["lib"]
16
- gem.version = "#{Sauce::MAJOR_VERSION}.1"
17
-
18
-
19
- gem.add_dependency('sauce', ">= #{Sauce::MAJOR_VERSION}.0")
20
- gem.add_dependency('jasmine', '>= 1.2.0')
21
- end
@@ -1,57 +0,0 @@
1
- require 'sauce/config'
2
-
3
- # This generator bootstraps a Rails project for use with Sauce OnDemand
4
- class SauceGenerator < Rails::Generator::Base
5
- def initialize(runtime_args, runtime_options = {})
6
- config = Sauce::Config.new
7
- if config.username.nil? || config.access_key.nil?
8
- if runtime_args.size < 2
9
- puts "No username or API key specified. Assuming you're using Heroku Sauce"
10
- else
11
- system("sauce config #{runtime_args[0]} #{runtime_args[1]}")
12
- end
13
- end
14
- super
15
- end
16
-
17
- def manifest
18
- record do |m|
19
- if File.directory? 'spec'
20
- m.directory File.join('spec', 'selenium') if File.directory? 'spec'
21
- m.setup_helper(File.join('spec', 'spec_helper.rb')) if File.directory? 'spec'
22
- end
23
-
24
- m.directory File.join('lib', 'tasks')
25
- m.directory File.join('test', 'selenium') if File.directory? 'test'
26
- m.file 'sauce.rake', File.join('lib', 'tasks', 'sauce.rake')
27
- m.setup_helper(File.join('test', 'test_helper.rb')) if File.directory? 'test'
28
- end
29
- end
30
-
31
- def setup_helper(file)
32
- contents = File.read(file)
33
- if contents !~ /Sauce.config/
34
- File.open(file, "a") do |file|
35
- file.write <<-CONFIG
36
-
37
- require 'sauce'
38
-
39
- Sauce.config do |conf|
40
- conf.browser_url = "http://#{rand(100000)}.test/"
41
- conf.browsers = [
42
- ["Windows 2003", "firefox", "3.6."]
43
- ]
44
- conf.application_host = "127.0.0.1"
45
- conf.application_port = "3001"
46
- end
47
- CONFIG
48
- end
49
- end
50
- end
51
-
52
- protected
53
-
54
- def banner
55
- "Usage: #{$0} sauce [<USERNAME> <ACCESS_KEY>]"
56
- end
57
- end
@@ -1 +0,0 @@
1
- require 'sauce/raketasks'
@@ -1 +0,0 @@
1
- require 'sauce/raketasks'
data/lib/sauce/connect.rb DELETED
@@ -1,112 +0,0 @@
1
- require 'sauce/config'
2
-
3
- module Sauce
4
- class Connect
5
- TIMEOUT = 90
6
-
7
- attr_reader :status, :error
8
-
9
- def initialize(options={})
10
- @ready = false
11
- @status = "uninitialized"
12
- @error = nil
13
- @quiet = options[:quiet]
14
- host = options[:host] || '127.0.0.1'
15
- port = options[:port] || '3000'
16
- tunnel_port = options[:tunnel_port] || '80'
17
- options.delete(:host)
18
- options.delete(:port)
19
- options.delete(:tunnel_port)
20
- @config = Sauce::Config.new(options)
21
- if @config.username.nil?
22
- raise ArgumentError, "Username required to launch Sauce Connect. Please set the environment variable $SAUCE_USERNAME"
23
- end
24
- if @config.access_key.nil?
25
- raise ArgumentError, "Access key required to launch Sauce Connect. Please set the environment variable $SAUCE_ACCESS_KEY"
26
- end
27
- end
28
-
29
- def connect
30
- puts "[Connecting to Sauce OnDemand...]"
31
- @pipe = IO.popen("exec #{Sauce::Connect.connect_command} #{@config.username} #{@config.access_key} 2>&1")
32
- @process_status = $?
33
- at_exit do
34
- Process.kill("INT", @pipe.pid)
35
- while @ready
36
- sleep 1
37
- end
38
- end
39
- Thread.new {
40
- while( (line = @pipe.gets) )
41
- if line =~ /Tunnel remote VM is (.*) (\.\.|at)/
42
- @status = $1
43
- end
44
- if line =~/You may start your tests\./
45
- @ready = true
46
- end
47
- if line =~ /- (Problem.*)$/
48
- @error = $1
49
- end
50
- if line =~ /== Missing requirements ==/
51
- @error = "Missing requirements"
52
- @quiet = false
53
- end
54
- $stderr.puts line unless @quiet
55
- end
56
- @ready = false
57
- }
58
- end
59
-
60
- def wait_until_ready
61
- start = Time.now
62
- while !@ready and (Time.now-start) < TIMEOUT and @error != "Missing requirements"
63
- sleep 0.5
64
- end
65
-
66
- if @error == "Missing requirements"
67
- raise "Missing requirements"
68
- end
69
-
70
- if !@ready
71
- raise "Sauce Connect failed to connect after #{TIMEOUT} seconds"
72
- end
73
- end
74
-
75
- def disconnect
76
- if @ready
77
- Process.kill("INT", @pipe.pid)
78
- while @ready
79
- sleep 1
80
- end
81
- end
82
- end
83
-
84
- def self.find_sauce_connect
85
- File.expand_path(File.dirname(__FILE__) + '/../../support/Sauce-Connect.jar')
86
- end
87
-
88
- def self.connect_command
89
- "java -jar #{Sauce::Connect.find_sauce_connect}"
90
- end
91
-
92
- # Global Sauce Connect-ness
93
- @connection = nil
94
-
95
- def self.connect!(*args)
96
- @connection = self.new(*args)
97
- @connection.connect
98
- @connection.wait_until_ready
99
- at_exit do
100
- @connection.disconnect
101
- end
102
- end
103
-
104
- def self.ensure_connected(*args)
105
- if @connection
106
- @connection.wait_until_ready
107
- else
108
- connect!(*args)
109
- end
110
- end
111
- end
112
- end