gurke 1.0.1 → 2.0.0.dev.1.b17

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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
@@ -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
@@ -0,0 +1,14 @@
1
+ module Gurke
2
+ #
3
+ module VERSION
4
+ MAJOR = 2
5
+ MINOR = 0
6
+ PATCH = 0
7
+ STAGE = :dev
8
+ STRING = [MAJOR, MINOR, PATCH, STAGE].reject(&:nil?).join('.').freeze
9
+
10
+ def self.to_s
11
+ STRING
12
+ end
13
+ end
14
+ 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: 1.0.1
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-01-22 00:00:00.000000000 Z
11
+ date: 2014-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: cucumber
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: activesupport
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: bundler
42
+ name: colorize
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ! '>='
46
46
  - !ruby/object:Gem::Version
47
- version: '1.3'
48
- type: :development
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: '1.3'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rake
56
+ name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
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: '0'
69
- description: A 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
- - Rakefile
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/current.rb
84
- - lib/gurke/formatter.rb
85
- - lib/gurke/formatters/base.rb
86
- - lib/gurke/formatters/headless.rb
87
- - lib/gurke/hooks.rb
88
- - lib/gurke/patch/cucumber_cli_configuration.rb
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: '0'
122
+ version: 1.3.1
107
123
  requirements: []
108
124
  rubyforge_project:
109
- rubygems_version: 2.2.1
125
+ rubygems_version: 2.2.2
110
126
  signing_key:
111
127
  specification_version: 4
112
- summary: A 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
@@ -1,19 +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
18
- .idea
19
- *.iml
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in gurke-formatters-headless.gemspec
4
- gemspec
data/Rakefile DELETED
@@ -1 +0,0 @@
1
- require "bundler/gem_tasks"
@@ -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
@@ -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
-