cucumber 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|