sauce-cucumber 2.1.0
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/.gitignore +17 -0
- data/README.md +29 -0
- data/Rakefile +2 -0
- data/lib/sauce/cucumber.rb +122 -0
- data/sauce-cucumber.gemspec +17 -0
- metadata +70 -0
data/.gitignore
ADDED
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
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
|
data/Rakefile
ADDED
@@ -0,0 +1,122 @@
|
|
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.browser.quit
|
100
|
+
driver.instance_variable_set(:@browser, nil)
|
101
|
+
|
102
|
+
unless job.nil?
|
103
|
+
job.passed = !scenario.failed?
|
104
|
+
job.save
|
105
|
+
end
|
106
|
+
end
|
107
|
+
module_function :around_hook
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
begin
|
114
|
+
Before('@selenium') do
|
115
|
+
Sauce::Capybara::Cucumber.before_hook
|
116
|
+
end
|
117
|
+
|
118
|
+
Around('@selenium') do |scenario, block|
|
119
|
+
Sauce::Capybara::Cucumber.around_hook(scenario, block)
|
120
|
+
end
|
121
|
+
rescue NoMethodError # This makes me sad
|
122
|
+
end
|
@@ -0,0 +1,17 @@
|
|
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}.0"
|
17
|
+
end
|
metadata
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sauce-cucumber
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 11
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 2
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 2.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- R. Tyler Croy
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-08-15 00:00:00 Z
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: ""
|
22
|
+
email:
|
23
|
+
- tyler@monkeypox.org
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- .gitignore
|
32
|
+
- README.md
|
33
|
+
- Rakefile
|
34
|
+
- lib/sauce/cucumber.rb
|
35
|
+
- sauce-cucumber.gemspec
|
36
|
+
homepage: ""
|
37
|
+
licenses: []
|
38
|
+
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
|
42
|
+
require_paths:
|
43
|
+
- lib
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
none: false
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
hash: 3
|
50
|
+
segments:
|
51
|
+
- 0
|
52
|
+
version: "0"
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 3
|
59
|
+
segments:
|
60
|
+
- 0
|
61
|
+
version: "0"
|
62
|
+
requirements: []
|
63
|
+
|
64
|
+
rubyforge_project:
|
65
|
+
rubygems_version: 1.8.10
|
66
|
+
signing_key:
|
67
|
+
specification_version: 3
|
68
|
+
summary: ""
|
69
|
+
test_files: []
|
70
|
+
|