cucumber 0.3.1 → 0.3.2
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/History.txt +16 -0
- data/Manifest.txt +6 -0
- data/examples/i18n/he/Rakefile +6 -0
- data/examples/i18n/he/features/addition.feature +16 -0
- data/examples/i18n/he/features/division.feature +9 -0
- data/examples/i18n/he/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/he/lib/calculator.rb +14 -0
- data/examples/self_test/features/search_sample.feature +10 -0
- data/examples/watir/features/search.feature +4 -1
- data/examples/watir/features/step_definitons/search_steps.rb +2 -4
- data/features/background.feature +30 -35
- data/features/cucumber_cli.feature +78 -68
- data/features/cucumber_cli_diff_disabled.feature +4 -4
- data/features/cucumber_cli_outlines.feature +43 -53
- data/features/multiline_names.feature +10 -10
- data/features/rake_task.feature +104 -86
- data/features/report_called_undefined_steps.feature +2 -2
- data/features/step_definitions/cucumber_steps.rb +8 -0
- data/features/usage.feature +1 -0
- data/lib/cucumber/ast/outline_table.rb +5 -0
- data/lib/cucumber/ast/scenario.rb +5 -0
- data/lib/cucumber/ast/step_collection.rb +7 -2
- data/lib/cucumber/ast/table.rb +1 -1
- data/lib/cucumber/formatter/console.rb +15 -9
- data/lib/cucumber/formatter/pretty.rb +3 -3
- data/lib/cucumber/formatter/progress.rb +8 -9
- data/lib/cucumber/languages.yml +16 -1
- data/lib/cucumber/parser/feature.rb +9 -2
- data/lib/cucumber/parser/feature.tt +13 -5
- data/lib/cucumber/parser/treetop_ext.rb +9 -0
- data/lib/cucumber/rails/world.rb +7 -1
- data/lib/cucumber/rake/task.rb +2 -0
- data/lib/cucumber/step_mother.rb +6 -1
- data/lib/cucumber/version.rb +1 -1
- data/spec/cucumber/ast/table_spec.rb +1 -1
- data/spec/cucumber/formatter/progress_spec.rb +35 -0
- data/spec/cucumber/parser/feature_parser_spec.rb +12 -0
- metadata +8 -2
@@ -55,11 +55,16 @@ module Cucumber
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def failed?
|
58
|
-
|
58
|
+
status == :failed
|
59
59
|
end
|
60
60
|
|
61
61
|
def passed?
|
62
|
-
|
62
|
+
status == :passed
|
63
|
+
end
|
64
|
+
|
65
|
+
def status
|
66
|
+
@steps.each{|step_invocation| return step_invocation.status if step_invocation.status != :passed}
|
67
|
+
:passed
|
63
68
|
end
|
64
69
|
|
65
70
|
def to_sexp
|
data/lib/cucumber/ast/table.rb
CHANGED
@@ -51,17 +51,15 @@ module Cucumber
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def print_counts
|
54
|
-
@io.
|
54
|
+
@io.print dump_count(step_mother.scenarios.length, "scenario")
|
55
|
+
print_status_counts{|status| step_mother.scenarios(status)}
|
55
56
|
|
56
|
-
|
57
|
-
|
58
|
-
count_string = dump_count(step_mother.steps(status).length, "step", status.to_s)
|
59
|
-
@io.puts format_string(count_string, status)
|
60
|
-
@io.flush
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
57
|
+
@io.print dump_count(step_mother.steps.length, "step")
|
58
|
+
print_status_counts{|status| step_mother.steps(status)}
|
64
59
|
|
60
|
+
@io.flush
|
61
|
+
end
|
62
|
+
|
65
63
|
def print_exception(e, status, indent)
|
66
64
|
if @options[:strict] || !(Undefined === e) || e.nested?
|
67
65
|
@io.puts(format_string("#{e.message} (#{e.class})\n#{e.backtrace.join("\n")}".indent(indent), status))
|
@@ -95,6 +93,14 @@ module Cucumber
|
|
95
93
|
|
96
94
|
private
|
97
95
|
|
96
|
+
def print_status_counts
|
97
|
+
counts = [:failed, :skipped, :undefined, :pending, :passed].map do |status|
|
98
|
+
elements = yield status
|
99
|
+
elements.any? ? format_string("#{elements.length} #{status.to_s}", status) : nil
|
100
|
+
end
|
101
|
+
@io.puts(" (#{counts.compact.join(', ')})")
|
102
|
+
end
|
103
|
+
|
98
104
|
def dump_count(count, what, state=nil)
|
99
105
|
[count, state, "#{what}#{count == 1 ? '' : 's'}"].compact.join(" ")
|
100
106
|
end
|
@@ -96,10 +96,10 @@ module Cucumber
|
|
96
96
|
|
97
97
|
def visit_examples_name(keyword, name)
|
98
98
|
names = name.empty? ? [name] : name.split("\n")
|
99
|
-
@io.puts("\n
|
100
|
-
names[1..-1].each {|s| @io.puts "
|
99
|
+
@io.puts("\n #{keyword} #{names[0]}")
|
100
|
+
names[1..-1].each {|s| @io.puts " #{s}" }
|
101
101
|
@io.flush
|
102
|
-
@indent =
|
102
|
+
@indent = 6
|
103
103
|
end
|
104
104
|
|
105
105
|
def visit_scenario_name(keyword, name, file_colon_line, source_indent)
|
@@ -18,18 +18,14 @@ module Cucumber
|
|
18
18
|
print_summary
|
19
19
|
end
|
20
20
|
|
21
|
-
def
|
22
|
-
|
23
|
-
|
24
|
-
@multiline_arg = false
|
25
|
-
end
|
26
|
-
|
27
|
-
def visit_step_name(keyword, step_match, status, source_indent, background)
|
28
|
-
progress(status) unless status == :outline
|
21
|
+
def visit_step_result(keyword, step_match, multiline_arg, status, exception, source_indent, background)
|
22
|
+
progress(status)
|
23
|
+
@status = status
|
29
24
|
end
|
30
25
|
|
31
26
|
def visit_table_cell_value(value, width, status)
|
32
|
-
|
27
|
+
status ||= @status
|
28
|
+
progress(status) unless table_header_cell?(status)
|
33
29
|
end
|
34
30
|
|
35
31
|
private
|
@@ -55,6 +51,9 @@ module Cucumber
|
|
55
51
|
@io.flush
|
56
52
|
end
|
57
53
|
|
54
|
+
def table_header_cell?(status)
|
55
|
+
status == :skipped_param
|
56
|
+
end
|
58
57
|
end
|
59
58
|
end
|
60
59
|
end
|
data/lib/cucumber/languages.yml
CHANGED
@@ -206,6 +206,21 @@
|
|
206
206
|
and: Et
|
207
207
|
but: Mais
|
208
208
|
space_after_keyword: true
|
209
|
+
"he":
|
210
|
+
name: Hebrew
|
211
|
+
native: עברית
|
212
|
+
encoding: UTF-8
|
213
|
+
feature: תכונה
|
214
|
+
background: רקע
|
215
|
+
scenario: תרחיש
|
216
|
+
scenario_outline: תבנית תרחיש
|
217
|
+
examples: דוגמאות
|
218
|
+
given: בהינתן
|
219
|
+
when: כאשר
|
220
|
+
then: אז|אזי
|
221
|
+
and: וגם
|
222
|
+
but: אבל
|
223
|
+
space_after_keyword: true
|
209
224
|
"hu":
|
210
225
|
name: Hungarian
|
211
226
|
native: magyar
|
@@ -482,4 +497,4 @@
|
|
482
497
|
then: То
|
483
498
|
and: И
|
484
499
|
but: Но
|
485
|
-
space_after_keyword: true
|
500
|
+
space_after_keyword: true
|
@@ -827,6 +827,10 @@ module Cucumber
|
|
827
827
|
end
|
828
828
|
|
829
829
|
def matches_name?(regexp_to_match)
|
830
|
+
outline_matches_name?(regexp_to_match) || examples_sections.matches_name?(regexp_to_match)
|
831
|
+
end
|
832
|
+
|
833
|
+
def outline_matches_name?(regexp_to_match)
|
830
834
|
name.build =~ regexp_to_match
|
831
835
|
end
|
832
836
|
|
@@ -1088,9 +1092,13 @@ module Cucumber
|
|
1088
1092
|
elements.detect { |e| e.at_line?(line) }
|
1089
1093
|
end
|
1090
1094
|
|
1095
|
+
def matches_name?(regexp_to_match)
|
1096
|
+
elements.detect { |e| e.matches_name?(regexp_to_match) }
|
1097
|
+
end
|
1098
|
+
|
1091
1099
|
def build(filter, scenario_outline)
|
1092
1100
|
elements.map do |e|
|
1093
|
-
if(filter.nil? || filter.
|
1101
|
+
if(filter.nil? || filter.accept_example?(e, scenario_outline))
|
1094
1102
|
e.build(filter, scenario_outline)
|
1095
1103
|
end
|
1096
1104
|
end.compact
|
@@ -1474,7 +1482,6 @@ module Cucumber
|
|
1474
1482
|
end
|
1475
1483
|
|
1476
1484
|
module LinesToKeyword0
|
1477
|
-
|
1478
1485
|
def build
|
1479
1486
|
elements.map{|s| s.build}.join("\n")
|
1480
1487
|
end
|
@@ -165,6 +165,10 @@ module Cucumber
|
|
165
165
|
end
|
166
166
|
|
167
167
|
def matches_name?(regexp_to_match)
|
168
|
+
outline_matches_name?(regexp_to_match) || examples_sections.matches_name?(regexp_to_match)
|
169
|
+
end
|
170
|
+
|
171
|
+
def outline_matches_name?(regexp_to_match)
|
168
172
|
name.build =~ regexp_to_match
|
169
173
|
end
|
170
174
|
|
@@ -218,9 +222,13 @@ module Cucumber
|
|
218
222
|
elements.detect { |e| e.at_line?(line) }
|
219
223
|
end
|
220
224
|
|
225
|
+
def matches_name?(regexp_to_match)
|
226
|
+
elements.detect { |e| e.matches_name?(regexp_to_match) }
|
227
|
+
end
|
228
|
+
|
221
229
|
def build(filter, scenario_outline)
|
222
230
|
elements.map do |e|
|
223
|
-
if(filter.nil? || filter.
|
231
|
+
if(filter.nil? || filter.accept_example?(e, scenario_outline))
|
224
232
|
e.build(filter, scenario_outline)
|
225
233
|
end
|
226
234
|
end.compact
|
@@ -270,10 +278,10 @@ module Cucumber
|
|
270
278
|
end
|
271
279
|
|
272
280
|
rule lines_to_keyword
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
281
|
+
line_to_keyword* {
|
282
|
+
def build
|
283
|
+
elements.map{|s| s.build}.join("\n")
|
284
|
+
end
|
277
285
|
}
|
278
286
|
end
|
279
287
|
|
@@ -26,6 +26,11 @@ module Cucumber
|
|
26
26
|
matches_names?(syntax_node)
|
27
27
|
end
|
28
28
|
|
29
|
+
def accept_example?(syntax_node, outline)
|
30
|
+
(at_line?(syntax_node) || outline_at_line?(outline)) &&
|
31
|
+
(matches_names?(syntax_node) || outline_matches_names?(outline))
|
32
|
+
end
|
33
|
+
|
29
34
|
def at_line?(syntax_node)
|
30
35
|
@lines.nil? || @lines.empty? || @lines.detect{|line| syntax_node.at_line?(line)}
|
31
36
|
end
|
@@ -47,6 +52,10 @@ module Cucumber
|
|
47
52
|
@exclude_tags.any? && syntax_node.has_tags?(@exclude_tags)
|
48
53
|
end
|
49
54
|
|
55
|
+
def outline_matches_names?(syntax_node)
|
56
|
+
@name_regexps.nil? || @name_regexps.empty? || @name_regexps.detect{|name_regexp| syntax_node.outline_matches_name?(name_regexp)}
|
57
|
+
end
|
58
|
+
|
50
59
|
def matches_names?(syntax_node)
|
51
60
|
@name_regexps.nil? || @name_regexps.empty? || @name_regexps.detect{|name_regexp| syntax_node.matches_name?(name_regexp)}
|
52
61
|
end
|
data/lib/cucumber/rails/world.rb
CHANGED
@@ -7,8 +7,14 @@ else
|
|
7
7
|
require 'action_controller/test_process'
|
8
8
|
require 'action_controller/integration'
|
9
9
|
end
|
10
|
-
require 'test/unit/testresult'
|
11
10
|
|
11
|
+
begin
|
12
|
+
require 'test/unit/testresult'
|
13
|
+
rescue LoadError => e
|
14
|
+
e.message << "\nYou must gem install test-unit. For more info see https://rspec.lighthouseapp.com/projects/16211/tickets/292"
|
15
|
+
e.message << "\nAlso make sure you have rack 1.0.0 or higher."
|
16
|
+
raise e
|
17
|
+
end
|
12
18
|
|
13
19
|
# So that Test::Unit doesn't launch at the end - makes it think it has already been run.
|
14
20
|
Test::Unit.run = true if Test::Unit.respond_to?(:run=)
|
data/lib/cucumber/rake/task.rb
CHANGED
@@ -62,6 +62,8 @@ module Cucumber
|
|
62
62
|
def profile=(profile)
|
63
63
|
@profile = profile
|
64
64
|
unless feature_list
|
65
|
+
# TODO: remove once we completely remove these from the rake task.
|
66
|
+
@step_list = []
|
65
67
|
@feature_list = [] # Don't use accessor to avoid deprecation warning.
|
66
68
|
end
|
67
69
|
end
|
data/lib/cucumber/step_mother.rb
CHANGED
@@ -105,8 +105,13 @@ module Cucumber
|
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
|
-
def scenarios
|
108
|
+
def scenarios(status = nil)
|
109
109
|
@scenarios ||= []
|
110
|
+
if(status)
|
111
|
+
@scenarios.select{|scenario| scenario.status == status}
|
112
|
+
else
|
113
|
+
@scenarios
|
114
|
+
end
|
110
115
|
end
|
111
116
|
|
112
117
|
# Registers a new StepDefinition. This method is aliased
|
data/lib/cucumber/version.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
module Cucumber
|
4
|
+
module Formatter
|
5
|
+
describe Progress do
|
6
|
+
|
7
|
+
before(:all) do
|
8
|
+
Term::ANSIColor.coloring = false
|
9
|
+
end
|
10
|
+
|
11
|
+
before(:each) do
|
12
|
+
@out = StringIO.new
|
13
|
+
@progress = Progress.new(mock("step mother"), @out, {})
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "visiting a table cell value without a status" do
|
17
|
+
it "should take the status from the last run step" do
|
18
|
+
@progress.visit_step_result('', '', nil, :failed, nil, 10, nil)
|
19
|
+
@progress.visit_table_cell_value('value', 10, nil)
|
20
|
+
|
21
|
+
@out.string.should == "FF"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "visiting a table cell which is a table header" do
|
26
|
+
it "should not output anything" do
|
27
|
+
@progress.visit_table_cell_value('value', 10, :skipped_param)
|
28
|
+
|
29
|
+
@out.string.should == ""
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -304,6 +304,18 @@ Examples: I'm a multiline name
|
|
304
304
|
[:row, 8,
|
305
305
|
[:cell, "5"]]]]]]
|
306
306
|
end
|
307
|
+
|
308
|
+
it "should allow Examples to have multiline names" do
|
309
|
+
pending('https://rspec.lighthouseapp.com/projects/16211/tickets/307-031-step-mother-parses-scenario-titles') do
|
310
|
+
parse(%{Feature: Hi
|
311
|
+
Scenario: When I have when in scenario
|
312
|
+
Given I am a step
|
313
|
+
}).to_sexp.should ==
|
314
|
+
[:feature, nil, "Feature: Hi",
|
315
|
+
[:scenario, 2, "Scenario:", "When I have when in scenario",
|
316
|
+
[:step, 3, "Given", "I am a step"]]]
|
317
|
+
end
|
318
|
+
end
|
307
319
|
end
|
308
320
|
|
309
321
|
describe "Syntax" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Aslak Helles\xC3\xB8y"
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-05-03 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -144,6 +144,11 @@ files:
|
|
144
144
|
- examples/i18n/fr/features/addition.feature
|
145
145
|
- examples/i18n/fr/features/step_definitions/calculatrice_steps.rb
|
146
146
|
- examples/i18n/fr/lib/calculatrice.rb
|
147
|
+
- examples/i18n/he/Rakefile
|
148
|
+
- examples/i18n/he/features/addition.feature
|
149
|
+
- examples/i18n/he/features/division.feature
|
150
|
+
- examples/i18n/he/features/step_definitons/calculator_steps.rb
|
151
|
+
- examples/i18n/he/lib/calculator.rb
|
147
152
|
- examples/i18n/hu/Rakefile
|
148
153
|
- examples/i18n/hu/features/addition.feature
|
149
154
|
- examples/i18n/hu/features/division.feature
|
@@ -418,6 +423,7 @@ files:
|
|
418
423
|
- spec/cucumber/formatter/html/index.html
|
419
424
|
- spec/cucumber/formatter/html/jquery-1.3.min.js
|
420
425
|
- spec/cucumber/formatter/html/jquery.uitableedit.js
|
426
|
+
- spec/cucumber/formatter/progress_spec.rb
|
421
427
|
- spec/cucumber/parser/feature_parser_spec.rb
|
422
428
|
- spec/cucumber/parser/table_parser_spec.rb
|
423
429
|
- spec/cucumber/rails/stubs/mini_rails.rb
|