gurke 1.0.1 → 2.0.0.dev.1.b17
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.
- checksums.yaml +13 -5
- data/README.md +85 -38
- data/bin/gurke +5 -0
- data/features/gurke.feature +47 -0
- data/features/gurke.rb +12 -0
- data/features/gurke/backtrace_filtering.feature +36 -0
- data/features/gurke/filter_by_tags.feature +70 -0
- data/features/gurke/step_specific_definitions.feature +41 -0
- data/features/support/steps/cli_steps.rb +50 -0
- data/features/support/steps/file_steps.rb +32 -0
- data/gurke.gemspec +11 -7
- data/lib/gurke.rb +43 -16
- data/lib/gurke/background.rb +33 -0
- data/lib/gurke/builder.rb +107 -0
- data/lib/gurke/capybara.rb +28 -0
- data/lib/gurke/cli.rb +67 -0
- data/lib/gurke/configuration.rb +118 -0
- data/lib/gurke/dsl.rb +45 -0
- data/lib/gurke/feature.rb +55 -0
- data/lib/gurke/reporter.rb +98 -0
- data/lib/gurke/rspec.rb +5 -0
- data/lib/gurke/runner.rb +156 -0
- data/lib/gurke/scenario.rb +84 -0
- data/lib/gurke/step.rb +41 -0
- data/lib/gurke/step_definition.rb +31 -0
- data/lib/gurke/steps.rb +36 -0
- data/lib/gurke/tag.rb +41 -0
- data/lib/gurke/version.rb +14 -0
- metadata +59 -36
- data/.gitignore +0 -19
- data/Gemfile +0 -4
- data/Rakefile +0 -1
- data/lib/gurke/current.rb +0 -39
- data/lib/gurke/formatter.rb +0 -180
- data/lib/gurke/formatters/base.rb +0 -21
- data/lib/gurke/formatters/headless.rb +0 -108
- data/lib/gurke/hooks.rb +0 -42
- data/lib/gurke/patch/cucumber_cli_configuration.rb +0 -16
data/lib/gurke/step.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
module Gurke
|
2
|
+
#
|
3
|
+
class Step
|
4
|
+
#
|
5
|
+
# Return path to file containing this scenario.
|
6
|
+
#
|
7
|
+
# @return [String] File path.
|
8
|
+
#
|
9
|
+
attr_reader :file
|
10
|
+
|
11
|
+
# Return line number where the scenario is defined.
|
12
|
+
#
|
13
|
+
# @return [Fixnum] Line number.
|
14
|
+
#
|
15
|
+
attr_reader :line
|
16
|
+
|
17
|
+
attr_reader :type
|
18
|
+
|
19
|
+
# @api private
|
20
|
+
attr_reader :raw
|
21
|
+
|
22
|
+
# @api private
|
23
|
+
def initialize(file, line, type, raw)
|
24
|
+
@file, @line = file, line
|
25
|
+
@type, @raw = type, raw
|
26
|
+
end
|
27
|
+
|
28
|
+
def name
|
29
|
+
raw.name
|
30
|
+
end
|
31
|
+
alias_method :to_s, :name
|
32
|
+
|
33
|
+
def keyword
|
34
|
+
raw.keyword
|
35
|
+
end
|
36
|
+
|
37
|
+
def doc_string
|
38
|
+
raw.doc_string.value if raw.doc_string
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Gurke
|
2
|
+
#
|
3
|
+
class StepDefinition
|
4
|
+
#
|
5
|
+
attr_reader :pattern, :method_name, :opts
|
6
|
+
|
7
|
+
def initialize(pattern, opts = {})
|
8
|
+
@pattern = pattern
|
9
|
+
@opts = opts
|
10
|
+
end
|
11
|
+
|
12
|
+
def method_name
|
13
|
+
"#{type.to_s.capitalize} #{pattern}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def type
|
17
|
+
opts[:type] || :any
|
18
|
+
end
|
19
|
+
|
20
|
+
def match(name, type = :any)
|
21
|
+
match = pattern.match(name)
|
22
|
+
|
23
|
+
return unless match
|
24
|
+
return if self.type != :any && self.type != type
|
25
|
+
|
26
|
+
Match.new(method_name, match.to_a[1..-1])
|
27
|
+
end
|
28
|
+
|
29
|
+
class Match < Struct.new(:method_name, :params); end
|
30
|
+
end
|
31
|
+
end
|
data/lib/gurke/steps.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
module Gurke
|
2
|
+
#
|
3
|
+
module Steps
|
4
|
+
#
|
5
|
+
# rubocop:disable MethodName
|
6
|
+
def Given(step)
|
7
|
+
rst = self.class.find_step(step, self, :given)
|
8
|
+
send rst.method_name
|
9
|
+
end
|
10
|
+
|
11
|
+
def When(step)
|
12
|
+
rst = self.class.find_step(step, self, :when)
|
13
|
+
send rst.method_name
|
14
|
+
end
|
15
|
+
|
16
|
+
def Then(step)
|
17
|
+
rst = self.class.find_step(step, self, :then)
|
18
|
+
send rst.method_name
|
19
|
+
end
|
20
|
+
|
21
|
+
class << self
|
22
|
+
def find_step(step, world, type)
|
23
|
+
matches = world.methods.map do |method|
|
24
|
+
next unless method.to_s.start_with?('match: ')
|
25
|
+
world.send(method.to_s, step.to_s, type)
|
26
|
+
end.compact
|
27
|
+
|
28
|
+
case matches.size
|
29
|
+
when 0 then raise Gurke::StepPending.new step.to_s
|
30
|
+
when 1 then matches.first
|
31
|
+
else raise Gurke::StepAmbiguous.new step.to_s
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/gurke/tag.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
module Gurke
|
2
|
+
#
|
3
|
+
class Tag
|
4
|
+
#
|
5
|
+
# Return path to file containing this feature.
|
6
|
+
#
|
7
|
+
# @return [String] File path.
|
8
|
+
#
|
9
|
+
attr_reader :file
|
10
|
+
|
11
|
+
# Return line number where this feature is defined.
|
12
|
+
#
|
13
|
+
# @return [Fixnum] Line number.
|
14
|
+
#
|
15
|
+
attr_reader :line
|
16
|
+
|
17
|
+
# @api private
|
18
|
+
attr_reader :raw
|
19
|
+
|
20
|
+
# @api private
|
21
|
+
def initialize(file, line, raw)
|
22
|
+
@file, @line, @raw = file, line, raw
|
23
|
+
end
|
24
|
+
|
25
|
+
def name
|
26
|
+
raw.name[1..-1]
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_s
|
30
|
+
name
|
31
|
+
end
|
32
|
+
|
33
|
+
def match?(rule)
|
34
|
+
p rule
|
35
|
+
p name
|
36
|
+
negated = rule[0] == '~'
|
37
|
+
name = negated ? rule[1..-1] : rule
|
38
|
+
negated != (self.name == name)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
metadata
CHANGED
@@ -1,91 +1,107 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gurke
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.dev.1.b17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Graichen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: trollop
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ! '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: gherkin
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ! '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: colorize
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ! '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
48
|
-
type: :
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ! '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '1.3'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
69
|
-
description:
|
68
|
+
version: '1.3'
|
69
|
+
description: An alternative gherkin feature runner inspired by rspec and turnip.
|
70
70
|
email:
|
71
71
|
- jg@altimos.de
|
72
|
-
executables:
|
72
|
+
executables:
|
73
|
+
- gurke
|
73
74
|
extensions: []
|
74
75
|
extra_rdoc_files: []
|
75
76
|
files:
|
76
|
-
- ".gitignore"
|
77
|
-
- Gemfile
|
78
77
|
- LICENSE.txt
|
79
78
|
- README.md
|
80
|
-
-
|
79
|
+
- bin/gurke
|
80
|
+
- features/gurke.feature
|
81
|
+
- features/gurke.rb
|
82
|
+
- features/gurke/backtrace_filtering.feature
|
83
|
+
- features/gurke/filter_by_tags.feature
|
84
|
+
- features/gurke/step_specific_definitions.feature
|
85
|
+
- features/support/steps/cli_steps.rb
|
86
|
+
- features/support/steps/file_steps.rb
|
81
87
|
- gurke.gemspec
|
82
88
|
- lib/gurke.rb
|
83
|
-
- lib/gurke/
|
84
|
-
- lib/gurke/
|
85
|
-
- lib/gurke/
|
86
|
-
- lib/gurke/
|
87
|
-
- lib/gurke/
|
88
|
-
- lib/gurke/
|
89
|
+
- lib/gurke/background.rb
|
90
|
+
- lib/gurke/builder.rb
|
91
|
+
- lib/gurke/capybara.rb
|
92
|
+
- lib/gurke/cli.rb
|
93
|
+
- lib/gurke/configuration.rb
|
94
|
+
- lib/gurke/dsl.rb
|
95
|
+
- lib/gurke/feature.rb
|
96
|
+
- lib/gurke/reporter.rb
|
97
|
+
- lib/gurke/rspec.rb
|
98
|
+
- lib/gurke/runner.rb
|
99
|
+
- lib/gurke/scenario.rb
|
100
|
+
- lib/gurke/step.rb
|
101
|
+
- lib/gurke/step_definition.rb
|
102
|
+
- lib/gurke/steps.rb
|
103
|
+
- lib/gurke/tag.rb
|
104
|
+
- lib/gurke/version.rb
|
89
105
|
homepage: https://github.com/jgraichen/gurke
|
90
106
|
licenses:
|
91
107
|
- MIT
|
@@ -96,18 +112,25 @@ require_paths:
|
|
96
112
|
- lib
|
97
113
|
required_ruby_version: !ruby/object:Gem::Requirement
|
98
114
|
requirements:
|
99
|
-
- -
|
115
|
+
- - ! '>='
|
100
116
|
- !ruby/object:Gem::Version
|
101
117
|
version: '0'
|
102
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
119
|
requirements:
|
104
|
-
- -
|
120
|
+
- - ! '>'
|
105
121
|
- !ruby/object:Gem::Version
|
106
|
-
version:
|
122
|
+
version: 1.3.1
|
107
123
|
requirements: []
|
108
124
|
rubyforge_project:
|
109
|
-
rubygems_version: 2.2.
|
125
|
+
rubygems_version: 2.2.2
|
110
126
|
signing_key:
|
111
127
|
specification_version: 4
|
112
|
-
summary:
|
113
|
-
test_files:
|
128
|
+
summary: An alternative gherkin feature runner inspired by rspec and turnip.
|
129
|
+
test_files:
|
130
|
+
- features/gurke.feature
|
131
|
+
- features/gurke.rb
|
132
|
+
- features/gurke/backtrace_filtering.feature
|
133
|
+
- features/gurke/filter_by_tags.feature
|
134
|
+
- features/gurke/step_specific_definitions.feature
|
135
|
+
- features/support/steps/cli_steps.rb
|
136
|
+
- features/support/steps/file_steps.rb
|
data/.gitignore
DELETED
data/Gemfile
DELETED
data/Rakefile
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
data/lib/gurke/current.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
module Gurke
|
2
|
-
class Current
|
3
|
-
attr_accessor :scenario, :step, :feature
|
4
|
-
|
5
|
-
class << self
|
6
|
-
def instance
|
7
|
-
@instance ||= new
|
8
|
-
end
|
9
|
-
|
10
|
-
def scenario
|
11
|
-
instance.scenario
|
12
|
-
end
|
13
|
-
|
14
|
-
def feature
|
15
|
-
instance.feature
|
16
|
-
end
|
17
|
-
|
18
|
-
def step
|
19
|
-
instance.step
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
class Formatter < Gurke::Formatters::Base
|
24
|
-
def before_scenario(scenario)
|
25
|
-
Current.instance.scenario = scenario
|
26
|
-
end
|
27
|
-
|
28
|
-
def before_step(step)
|
29
|
-
Current.instance.step = step
|
30
|
-
end
|
31
|
-
|
32
|
-
def before_feature(feature)
|
33
|
-
Current.instance.feature = feature
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
::Gurke::Formatter.use Formatter
|
38
|
-
end
|
39
|
-
end
|
data/lib/gurke/formatter.rb
DELETED
@@ -1,180 +0,0 @@
|
|
1
|
-
require 'active_support/core_ext/string/inflections'
|
2
|
-
require 'gurke/formatters/base'
|
3
|
-
|
4
|
-
module Gurke
|
5
|
-
class Formatter
|
6
|
-
attr_reader :runtime, :options
|
7
|
-
attr_reader :current_feature, :current_step
|
8
|
-
|
9
|
-
def initialize(runtime, path_or_io, options)
|
10
|
-
@runtime, @path_or_io, @options = runtime, path_or_io, options
|
11
|
-
|
12
|
-
self.class.formatters.each do |klass, opts|
|
13
|
-
if klass.respond_to?(:gurkig?) && klass.gurkig?
|
14
|
-
formatters << klass.new(self, opts)
|
15
|
-
else
|
16
|
-
legacy << klass.new(runtime, path_or_io, options)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
at_exit { invoke :after, :all }
|
21
|
-
|
22
|
-
self.class.instance = self
|
23
|
-
end
|
24
|
-
|
25
|
-
def formatters
|
26
|
-
@formatters ||= []
|
27
|
-
end
|
28
|
-
|
29
|
-
def legacy
|
30
|
-
@legacy ||= []
|
31
|
-
end
|
32
|
-
|
33
|
-
## -- Before callbacks --
|
34
|
-
|
35
|
-
def before_features(features)
|
36
|
-
invoke :before, :all
|
37
|
-
invoke :before, :features, [features]
|
38
|
-
end
|
39
|
-
|
40
|
-
def before_feature(feature)
|
41
|
-
invoke :before, :feature, [feature]
|
42
|
-
end
|
43
|
-
|
44
|
-
def before_tags(tags)
|
45
|
-
invoke :before, :tags, [tags]
|
46
|
-
end
|
47
|
-
|
48
|
-
def before_background(background)
|
49
|
-
invoke :before, :background, [background]
|
50
|
-
end
|
51
|
-
|
52
|
-
def before_steps(steps)
|
53
|
-
invoke :before, :steps, [steps]
|
54
|
-
end
|
55
|
-
|
56
|
-
def before_step(step)
|
57
|
-
invoke :before, :step, [step]
|
58
|
-
end
|
59
|
-
|
60
|
-
def before_step_result(keyword, step_match, multiline_arg, status, exception, source_indent, background, file_colon_line)
|
61
|
-
invoke :before, :step_result, [keyword, step_match, multiline_arg, status, exception, source_indent, background, file_colon_line]
|
62
|
-
end
|
63
|
-
|
64
|
-
def before_feature_element(element)
|
65
|
-
invoke :before, :feature_element, [element]
|
66
|
-
invoke :before, :scenario, args: [element]
|
67
|
-
end
|
68
|
-
|
69
|
-
## -- Element callbacks --
|
70
|
-
|
71
|
-
def manual_step(step, opts)
|
72
|
-
invoke nil, :manual_step, args: [step, opts]
|
73
|
-
end
|
74
|
-
|
75
|
-
def feature_name(name, description)
|
76
|
-
invoke nil, :feature_name, [name, description]
|
77
|
-
end
|
78
|
-
|
79
|
-
def tag_name(name)
|
80
|
-
invoke nil, :tag_name, [name]
|
81
|
-
end
|
82
|
-
|
83
|
-
def background_name(keyword, name, file_colon_line, source_indent)
|
84
|
-
invoke nil, :background_name, [keyword, name, file_colon_line, source_indent]
|
85
|
-
end
|
86
|
-
|
87
|
-
def scenario_name(keyword, name, file_colon_line, source_indent)
|
88
|
-
invoke nil, :scenario_name, [keyword, name, file_colon_line, source_indent]
|
89
|
-
end
|
90
|
-
|
91
|
-
def step_name(keyword, step_match, status, source_indent, background, file_colon_line)
|
92
|
-
invoke nil, :step_name, [keyword, step_match, status, source_indent, background, file_colon_line]
|
93
|
-
end
|
94
|
-
|
95
|
-
def exception(exception, status)
|
96
|
-
invoke nil, :exception, [exception, status]
|
97
|
-
end
|
98
|
-
|
99
|
-
## -- After callbacks --
|
100
|
-
|
101
|
-
def after_feature_element(element)
|
102
|
-
invoke :after, :feature_element, [element]
|
103
|
-
invoke :after, :scenario, args: [element]
|
104
|
-
end
|
105
|
-
|
106
|
-
def after_step_result(keyword, step_match, multiline_arg, status, exception, source_indent, background, file_colon_line)
|
107
|
-
invoke :after, :step_result, [keyword, step_match, multiline_arg, status, exception, source_indent, background, file_colon_line]
|
108
|
-
end
|
109
|
-
|
110
|
-
def after_step(step)
|
111
|
-
invoke :after, :step, [step]
|
112
|
-
end
|
113
|
-
|
114
|
-
def after_steps(steps)
|
115
|
-
invoke :after, :steps, [steps]
|
116
|
-
end
|
117
|
-
|
118
|
-
def after_background(background)
|
119
|
-
invoke :after, :background, [background]
|
120
|
-
end
|
121
|
-
|
122
|
-
def after_tags(tags)
|
123
|
-
invoke :after, :tags, [tags]
|
124
|
-
end
|
125
|
-
|
126
|
-
def after_feature(feature)
|
127
|
-
invoke :after, :feature, [feature]
|
128
|
-
end
|
129
|
-
|
130
|
-
def after_features(features)
|
131
|
-
invoke :after, :features, [features]
|
132
|
-
end
|
133
|
-
|
134
|
-
private
|
135
|
-
def invoke(type, name, args = {})
|
136
|
-
args = { args: args, legacy: args } if Array === args
|
137
|
-
|
138
|
-
if args[:args]
|
139
|
-
(type == :after ? formatters.reverse : formatters).each do |fmt|
|
140
|
-
mth = type.nil? ? name : "#{type}_#{name}"
|
141
|
-
fmt.send mth, *args[:args] if fmt.respond_to? mth
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
if args[:legacy]
|
146
|
-
legacy.each do |fmt|
|
147
|
-
mth = type.nil? ? name : "#{type}_#{name}"
|
148
|
-
fmt.send mth, *args[:legacy] if fmt.respond_to? mth
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
class << self
|
154
|
-
attr_reader :legacy_formatter
|
155
|
-
attr_accessor :instance
|
156
|
-
|
157
|
-
def formatters
|
158
|
-
@formatters ||= {}
|
159
|
-
end
|
160
|
-
|
161
|
-
def config(&block)
|
162
|
-
instance_eval &block
|
163
|
-
end
|
164
|
-
|
165
|
-
def use(formatter, options = {})
|
166
|
-
klass = lookup_formatter(formatter)
|
167
|
-
raise InvalidArgument.new 'Cannot find formatters `#{formatters}\'.' unless klass
|
168
|
-
|
169
|
-
formatters[klass] = options
|
170
|
-
end
|
171
|
-
|
172
|
-
private
|
173
|
-
def lookup_formatter(formatter)
|
174
|
-
return formatter if formatter.is_a? Class
|
175
|
-
formatter.camelize.safe_constantize
|
176
|
-
end
|
177
|
-
end
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|