kosmas58-cucumber 0.1.16.6 → 0.1.99.21
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 +126 -2
- data/License.txt +1 -1
- data/Manifest.txt +0 -270
- data/Rakefile +1 -1
- data/bin/cucumber +2 -2
- data/config/hoe.rb +7 -2
- data/examples/cs/features/step_definitons/calculator_steps.rb +1 -1
- data/examples/i18n/README.textile +1 -1
- data/examples/i18n/Rakefile +3 -3
- data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +1 -6
- data/examples/i18n/da/features/step_definitons/kalkulator_steps.rb +1 -1
- data/examples/i18n/de/features/addition.feature +6 -6
- data/examples/i18n/de/features/step_definitons/calculator_steps.rb +2 -2
- data/examples/i18n/en/features/addition.feature +6 -6
- data/examples/i18n/en/features/step_definitons/calculator_steps.rb +2 -2
- data/examples/i18n/es/features/adicion.feature +11 -12
- data/examples/i18n/es/features/step_definitons/calculador_steps.rb +7 -10
- data/examples/i18n/es/lib/calculador.rb +4 -1
- data/examples/i18n/et/features/liitmine.feature +7 -6
- data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +1 -1
- data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +1 -1
- data/examples/i18n/fi/features/yhteenlasku.feature +2 -2
- data/examples/i18n/fr/features/addition.feature +2 -2
- data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +1 -1
- data/examples/i18n/id/features/addition.feature +6 -6
- data/examples/i18n/id/features/step_definitons/calculator_steps.rb +2 -2
- data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +1 -1
- data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +2 -3
- data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +1 -1
- data/examples/i18n/lt/features/addition.feature +7 -6
- data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +2 -2
- data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +7 -7
- data/examples/i18n/no/features/summering.feature +1 -0
- data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +1 -1
- data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +1 -1
- data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +1 -1
- data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +2 -2
- data/examples/java/src/cucumber/demo/Hello.java +16 -0
- data/examples/jbehave/README.textile +17 -0
- data/examples/jbehave/features/support/env.rb +7 -0
- data/examples/jbehave/features/trading.feature +24 -0
- data/examples/jbehave/pom.xml +48 -0
- data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/converters/TraderConverter.java +32 -0
- data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/model/Stock.java +42 -0
- data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/model/Trader.java +29 -0
- data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/persistence/TraderPersister.java +22 -0
- data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/scenarios/TraderSteps.java +65 -0
- data/examples/self_test/README.textile +4 -1
- data/examples/{calculator_ruby_features → self_test}/Rakefile +3 -3
- data/examples/self_test/features/background/failing_background.feature +10 -0
- data/examples/self_test/features/background/failing_background_after_success.feature +11 -0
- data/examples/self_test/features/background/multiline_args_background.feature +32 -0
- data/examples/self_test/features/background/passing_background.feature +10 -0
- data/examples/self_test/features/background/pending_background.feature +10 -0
- data/examples/self_test/features/background/scenario_outline_failing_background.feature +16 -0
- data/examples/self_test/features/background/scenario_outline_passing_background.feature +16 -0
- data/examples/self_test/features/call_undefined_step_from_step_def.feature +7 -0
- data/examples/self_test/features/lots_of_undefined.feature +8 -0
- data/examples/self_test/features/outline_sample.feature +11 -5
- data/examples/self_test/features/sample.feature +8 -3
- data/examples/self_test/features/step_definitions/sample_steps.rb +53 -4
- data/examples/self_test/features/support/env.rb +1 -0
- data/examples/self_test/features/support/tag_count_formatter.rb +25 -0
- data/examples/tickets/features/172.feature +28 -0
- data/examples/tickets/features/177/1.feature +29 -0
- data/examples/tickets/features/177/2.feature +21 -0
- data/examples/tickets/features/177/3.feature +18 -0
- data/examples/tickets/features/180.feature +7 -0
- data/examples/tickets/features/scenario_outline.feature +6 -1
- data/examples/tickets/features/step_definitons/tickets_steps.rb +27 -3
- data/examples/tickets/features/tickets.feature +4 -0
- data/features/background.feature +223 -0
- data/features/cucumber_cli.feature +218 -98
- data/features/cucumber_cli_outlines.feature +54 -37
- data/features/custom_formatter.feature +11 -0
- data/features/report_called_undefined_steps.feature +32 -0
- data/features/step_definitions/cucumber_steps.rb +7 -3
- data/features/step_definitions/extra_steps.rb +1 -1
- data/features/support/env.rb +2 -1
- data/gem_tasks/flog.rake +1 -1
- data/gem_tasks/gemspec.rake +2 -2
- data/gem_tasks/jar.rake +67 -0
- data/lib/autotest/cucumber_mixin.rb +17 -23
- data/lib/cucumber.rb +63 -11
- data/lib/cucumber/ast.rb +29 -0
- data/lib/cucumber/ast/background.rb +88 -0
- data/lib/cucumber/ast/comment.rb +26 -0
- data/lib/cucumber/ast/examples.rb +26 -0
- data/lib/cucumber/ast/feature.rb +66 -0
- data/lib/cucumber/ast/features.rb +39 -0
- data/lib/cucumber/ast/filter.rb +22 -0
- data/lib/cucumber/ast/outline_table.rb +49 -0
- data/lib/cucumber/ast/py_string.rb +52 -0
- data/lib/cucumber/ast/scenario.rb +103 -0
- data/lib/cucumber/ast/scenario_outline.rb +92 -0
- data/lib/cucumber/ast/step.rb +161 -0
- data/lib/cucumber/ast/steps.rb +13 -0
- data/lib/cucumber/ast/table.rb +218 -0
- data/lib/cucumber/ast/tags.rb +40 -0
- data/lib/cucumber/ast/visitor.rb +109 -0
- data/lib/cucumber/broadcaster.rb +1 -6
- data/lib/cucumber/cli/configuration.rb +339 -0
- data/lib/cucumber/cli/language_help_formatter.rb +59 -0
- data/lib/cucumber/cli/main.rb +100 -0
- data/lib/cucumber/core_ext/exception.rb +41 -8
- data/lib/cucumber/core_ext/instance_exec.rb +54 -0
- data/lib/cucumber/core_ext/proc.rb +29 -65
- data/lib/cucumber/core_ext/string.rb +19 -0
- data/lib/cucumber/formatter.rb +1 -0
- data/lib/cucumber/{formatters → formatter}/ansicolor.rb +14 -16
- data/lib/cucumber/formatter/color_io.rb +17 -0
- data/lib/cucumber/formatter/console.rb +119 -0
- data/lib/cucumber/formatter/cucumber.css +55 -0
- data/lib/cucumber/formatter/cucumber.sass +49 -0
- data/lib/cucumber/formatter/html.rb +121 -0
- data/lib/cucumber/formatter/pretty.rb +167 -0
- data/lib/cucumber/formatter/profile.rb +77 -0
- data/lib/cucumber/formatter/progress.rb +68 -0
- data/lib/cucumber/formatter/rerun.rb +35 -0
- data/lib/cucumber/formatter/unicode.rb +35 -0
- data/lib/cucumber/formatters/unicode.rb +2 -35
- data/lib/cucumber/jbehave.rb +102 -0
- data/lib/cucumber/languages.yml +128 -75
- data/lib/cucumber/parser.rb +43 -0
- data/lib/cucumber/parser/basic.rb +0 -0
- data/lib/cucumber/parser/feature.rb +1490 -0
- data/lib/cucumber/parser/feature.tt +188 -0
- data/lib/cucumber/parser/i18n.tt +31 -0
- data/lib/cucumber/parser/table.rb +402 -0
- data/lib/cucumber/parser/table.tt +59 -0
- data/lib/cucumber/parser/treetop_ext.rb +75 -0
- data/lib/cucumber/platform.rb +3 -17
- data/lib/cucumber/rails/rspec.rb +5 -2
- data/lib/cucumber/step_definition.rb +87 -0
- data/lib/cucumber/step_mother.rb +151 -66
- data/lib/cucumber/version.rb +2 -2
- data/rails_generators/cucumber/USAGE +3 -2
- data/rails_generators/cucumber/cucumber_generator.rb +33 -23
- data/rails_generators/cucumber/templates/cucumber +2 -1
- data/rails_generators/cucumber/templates/cucumber.rake +6 -1
- data/rails_generators/cucumber/templates/env.rb +1 -1
- data/rails_generators/feature/USAGE +3 -0
- data/rails_generators/feature/feature_generator.rb +30 -6
- data/spec/cucumber/ast/background_spec.rb +58 -0
- data/spec/cucumber/ast/feature_factory.rb +54 -0
- data/spec/cucumber/ast/feature_spec.rb +60 -0
- data/spec/cucumber/ast/py_string_spec.rb +40 -0
- data/spec/cucumber/ast/scenario_outline_spec.rb +64 -0
- data/spec/cucumber/ast/scenario_spec.rb +82 -0
- data/spec/cucumber/ast/step_spec.rb +45 -0
- data/spec/cucumber/ast/table_spec.rb +81 -0
- data/spec/cucumber/ast/tags_spec.rb +23 -0
- data/spec/cucumber/broadcaster_spec.rb +4 -17
- data/spec/cucumber/cli/configuration_spec.rb +239 -0
- data/spec/cucumber/cli/main_spec.rb +164 -0
- data/spec/cucumber/core_ext/proc_spec.rb +27 -35
- data/spec/cucumber/core_ext/string_spec.rb +8 -0
- data/spec/cucumber/{formatters → formatter}/ansicolor_spec.rb +2 -2
- data/spec/cucumber/formatter/html/cucumber.css +37 -0
- data/spec/cucumber/formatter/html/cucumber.js +13 -0
- data/spec/cucumber/formatter/html/index.html +45 -0
- data/spec/cucumber/formatter/html/jquery-1.3.min.js +19 -0
- data/spec/cucumber/formatter/html/jquery.uitableedit.js +100 -0
- data/spec/cucumber/formatters/profile_formatter_spec.rb +17 -16
- data/spec/cucumber/parser/feature_parser_spec.rb +281 -0
- data/spec/cucumber/parser/table_parser_spec.rb +48 -0
- data/spec/cucumber/step_definition_spec.rb +62 -0
- data/spec/cucumber/step_mother_spec.rb +50 -51
- data/spec/cucumber/treetop_parser/empty_feature.feature +1 -1
- data/spec/cucumber/treetop_parser/scenario_outline.feature +1 -1
- data/spec/cucumber/treetop_parser/spaces.feature +3 -1
- data/spec/cucumber/treetop_parser/with_comments.feature +1 -1
- data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
- data/spec/cucumber/world/pending_spec.rb +13 -12
- data/spec/spec_helper.rb +1 -1
- metadata +107 -79
- data/examples/calculator_ruby_features/features/addition.rb +0 -39
- data/examples/calculator_ruby_features/features/step_definitons/calculator_steps.rb +0 -43
- data/gem_tasks/treetop.rake +0 -41
- data/lib/cucumber/cli.rb +0 -355
- data/lib/cucumber/executor.rb +0 -205
- data/lib/cucumber/formatters.rb +0 -1
- data/lib/cucumber/formatters/autotest_formatter.rb +0 -23
- data/lib/cucumber/formatters/cucumber.css +0 -132
- data/lib/cucumber/formatters/cucumber.js +0 -11
- data/lib/cucumber/formatters/html_formatter.rb +0 -152
- data/lib/cucumber/formatters/jquery.js +0 -32
- data/lib/cucumber/formatters/pretty_formatter.rb +0 -285
- data/lib/cucumber/formatters/profile_formatter.rb +0 -92
- data/lib/cucumber/formatters/progress_formatter.rb +0 -61
- data/lib/cucumber/model.rb +0 -1
- data/lib/cucumber/model/table.rb +0 -32
- data/lib/cucumber/step_methods.rb +0 -49
- data/lib/cucumber/tree.rb +0 -16
- data/lib/cucumber/tree/feature.rb +0 -105
- data/lib/cucumber/tree/features.rb +0 -21
- data/lib/cucumber/tree/given_scenario.rb +0 -13
- data/lib/cucumber/tree/scenario.rb +0 -240
- data/lib/cucumber/tree/step.rb +0 -173
- data/lib/cucumber/tree/table.rb +0 -26
- data/lib/cucumber/tree/top_down_visitor.rb +0 -23
- data/lib/cucumber/treetop_parser/feature.treetop.erb +0 -254
- data/lib/cucumber/treetop_parser/feature_ar.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_cy.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_da.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_de.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_en-lol.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_en-tx.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_en.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_es.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_et.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_fi.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_fr.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_id.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_it.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_ja.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_ko.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_lt.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_nl.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_no.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_parser.rb +0 -36
- data/lib/cucumber/treetop_parser/feature_pl.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_pt.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_ro.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_ro2.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_ru.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_se.rb +0 -1951
- data/lib/cucumber/treetop_parser/feature_zh-CN.rb +0 -1951
- data/lib/cucumber/world.rb +0 -1
- data/lib/cucumber/world/pending.rb +0 -22
- data/setup.rb +0 -1585
- data/spec/cucumber/cli_spec.rb +0 -521
- data/spec/cucumber/executor_spec.rb +0 -382
- data/spec/cucumber/formatters/autotest_formatter_spec.rb +0 -26
- data/spec/cucumber/formatters/features.html +0 -269
- data/spec/cucumber/formatters/html_formatter_spec.rb +0 -110
- data/spec/cucumber/formatters/pretty_formatter_spec.rb +0 -410
- data/spec/cucumber/formatters/progress_formatter_spec.rb +0 -81
- data/spec/cucumber/model/table_spec.rb +0 -32
- data/spec/cucumber/tree/feature_spec.rb +0 -122
- data/spec/cucumber/tree/row_scenario_outline_spec.rb +0 -73
- data/spec/cucumber/tree/row_scenario_spec.rb +0 -55
- data/spec/cucumber/tree/row_step_outline_spec.rb +0 -38
- data/spec/cucumber/tree/scenario_outline_spec.rb +0 -50
- data/spec/cucumber/tree/scenario_spec.rb +0 -134
- data/spec/cucumber/tree/step_outline_spec.rb +0 -17
- data/spec/cucumber/tree/step_spec.rb +0 -59
- data/spec/cucumber/treetop_parser/feature_parser_spec.rb +0 -120
@@ -1,110 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
-
require 'stringio'
|
3
|
-
require 'cucumber/tree/top_down_visitor'
|
4
|
-
|
5
|
-
module Cucumber
|
6
|
-
module Formatters
|
7
|
-
class MiniExecutor < Cucumber::Tree::TopDownVisitor
|
8
|
-
def initialize(f)
|
9
|
-
@f = f
|
10
|
-
end
|
11
|
-
|
12
|
-
def visit_step(step)
|
13
|
-
if step.regexp == //
|
14
|
-
# Just make sure there are some params so we can get <span>s
|
15
|
-
proc = lambda do |_|
|
16
|
-
case(step.id % 3)
|
17
|
-
when 0
|
18
|
-
raise Pending
|
19
|
-
when 1
|
20
|
-
raise "This one failed"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
proc.extend(CoreExt::CallIn)
|
24
|
-
proc.name = "WHATEVER"
|
25
|
-
step.attach(/(\w+).*/, proc, ['xxx'])
|
26
|
-
o = Object.new
|
27
|
-
step.execute_in(o) rescue nil
|
28
|
-
else
|
29
|
-
@f.step_executed(step)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
describe HtmlFormatter do
|
35
|
-
SIMPLE_DIR = File.dirname(__FILE__) + '/../../../examples/simple'
|
36
|
-
|
37
|
-
def mock_row_step(stubs = {})
|
38
|
-
mock('row step', {:id => 1, :outline? => true, :regexp_args_proc => [nil, nil, nil], :visible_args => []}.merge(stubs))
|
39
|
-
end
|
40
|
-
|
41
|
-
def mock_step(stubs = {})
|
42
|
-
mock('step', {:id => 1, :keyword => 'Given', :format => '', :regexp_args_proc => [nil, nil, nil]}.merge(stubs))
|
43
|
-
end
|
44
|
-
|
45
|
-
def mock_scenario_outline(stubs = {})
|
46
|
-
mock('scenario outline', {:table_header => nil, :accept => nil}.merge(stubs))
|
47
|
-
end
|
48
|
-
|
49
|
-
before do
|
50
|
-
p = Cucumber::TreetopParser::FeatureParser.new
|
51
|
-
@features = Tree::Features.new
|
52
|
-
Dir["#{SIMPLE_DIR}/*.feature"].each do |f|
|
53
|
-
@features << p.parse_feature(f)
|
54
|
-
end
|
55
|
-
@io = StringIO.new
|
56
|
-
step_mother = mock('step mother')
|
57
|
-
@formatter = HtmlFormatter.new(@io, step_mother)
|
58
|
-
@me = MiniExecutor.new(@formatter)
|
59
|
-
end
|
60
|
-
|
61
|
-
xit "should render HTML" do
|
62
|
-
@me.visit_features(@features) # set regexp+proc+args and execute
|
63
|
-
@formatter.visit_features(@features)
|
64
|
-
@me.visit_features(@features) # output result of execution
|
65
|
-
@formatter.dump
|
66
|
-
expected_html = File.dirname(__FILE__) + '/features.html'
|
67
|
-
#File.open(expected_html, 'w') {|io| io.write(@io.string)}
|
68
|
-
@io.string.should eql(IO.read(expected_html))
|
69
|
-
end
|
70
|
-
|
71
|
-
it "should render FIT table headers" do
|
72
|
-
scenario = mock('scenario', :name => 'test', :accept => nil)
|
73
|
-
row_scenario = mock('row scenario', :name => 'test', :accept => nil)
|
74
|
-
scenario.stub!(:table_header).and_return(['test', 'fit', 'headers'])
|
75
|
-
|
76
|
-
@formatter.visit_regular_scenario(scenario)
|
77
|
-
@formatter.visit_row_scenario(row_scenario)
|
78
|
-
|
79
|
-
['test', 'fit' ,'headers'].each do |column_header|
|
80
|
-
@io.string.should include(column_header)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should only show arguments in a row step outline that are visible" do
|
85
|
-
@formatter.visit_row_step(mock_row_step(:outline? => true, :regexp_args_proc => [nil, ['mouse', 'monkey'], nil], :visible_args => ['mouse']))
|
86
|
-
|
87
|
-
@io.string.should_not =~ /monkey/
|
88
|
-
end
|
89
|
-
|
90
|
-
it "should escape placeholders in step outline" do
|
91
|
-
CGI.should_receive(:escapeHTML).with("I'm a <placeholder>")
|
92
|
-
|
93
|
-
@formatter.visit_step_outline(mock_step(:format => "I'm a <placeholder>"))
|
94
|
-
end
|
95
|
-
|
96
|
-
it "should show Scenario Outline keyword for scenario outline" do
|
97
|
-
@formatter.visit_scenario_outline(mock_scenario_outline(:name => "outline", :accept => nil))
|
98
|
-
|
99
|
-
@io.string.should =~ /Scenario Outline/
|
100
|
-
end
|
101
|
-
|
102
|
-
it "should flush the broadcaster after dumping" do
|
103
|
-
io = mock(File, {:puts => nil})
|
104
|
-
io.should_receive(:flush)
|
105
|
-
HtmlFormatter.new(io, nil).dump
|
106
|
-
end
|
107
|
-
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
@@ -1,410 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
-
|
3
|
-
module Cucumber
|
4
|
-
module Formatters
|
5
|
-
describe PrettyFormatter do
|
6
|
-
|
7
|
-
def mock_step(stubs={})
|
8
|
-
stub('step', {
|
9
|
-
:keyword => 'Given',
|
10
|
-
:format => 'formatted yes',
|
11
|
-
:name => 'example',
|
12
|
-
:error => nil,
|
13
|
-
:padding_length => 2,
|
14
|
-
:file => 'test',
|
15
|
-
:line => 1,
|
16
|
-
:row? => false,
|
17
|
-
:forced_to_pending? => false,
|
18
|
-
:regexp_args_proc => [nil, nil, mock_proc],
|
19
|
-
:outline? => false}.merge(stubs))
|
20
|
-
end
|
21
|
-
|
22
|
-
def mock_step_outline(stubs={})
|
23
|
-
mock_step({:outline? => true}.merge(stubs))
|
24
|
-
end
|
25
|
-
|
26
|
-
def mock_scenario(stubs={})
|
27
|
-
stub('scenario', {
|
28
|
-
:name => 'test',
|
29
|
-
:row? => false,
|
30
|
-
:pending? => false,
|
31
|
-
:file => 'file',
|
32
|
-
:line => 1,
|
33
|
-
:padding_length => 2,
|
34
|
-
:outline? => false,
|
35
|
-
:table_header => nil}.merge(stubs))
|
36
|
-
end
|
37
|
-
|
38
|
-
def mock_scenario_outline(stubs={})
|
39
|
-
mock_scenario({:outline? => true}.merge(stubs))
|
40
|
-
end
|
41
|
-
|
42
|
-
def mock_feature(stubs={})
|
43
|
-
stub("feature", stubs)
|
44
|
-
end
|
45
|
-
|
46
|
-
def mock_error(stubs={})
|
47
|
-
stub('error', {
|
48
|
-
:message => 'failed',
|
49
|
-
:backtrace => 'example backtrace'}.merge(stubs))
|
50
|
-
end
|
51
|
-
|
52
|
-
def mock_proc(stubs={})
|
53
|
-
stub(Proc, {:to_comment_line => '# steps/example_steps.rb:11'}.merge(stubs))
|
54
|
-
end
|
55
|
-
|
56
|
-
before do
|
57
|
-
::Term::ANSIColor.coloring = false
|
58
|
-
end
|
59
|
-
|
60
|
-
after do
|
61
|
-
::Term::ANSIColor.coloring = true
|
62
|
-
end
|
63
|
-
|
64
|
-
it "should print step file and line when passed" do
|
65
|
-
io = StringIO.new
|
66
|
-
formatter = PrettyFormatter.new io, StepMother.new
|
67
|
-
step = stub('step',
|
68
|
-
:error => nil, :row? => false, :keyword => 'Given', :format => 'formatted yes'
|
69
|
-
)
|
70
|
-
formatter.step_passed(step, nil, nil)
|
71
|
-
io.string.should == " Given formatted yes\n"
|
72
|
-
end
|
73
|
-
|
74
|
-
describe "scenario without any steps" do
|
75
|
-
before :each do
|
76
|
-
@io = StringIO.new
|
77
|
-
@formatter = PrettyFormatter.new(@io, StepMother.new)
|
78
|
-
@scenario = mock_scenario(:name => "title", :pending? => true)
|
79
|
-
end
|
80
|
-
|
81
|
-
it "should display as pending when executing" do
|
82
|
-
@formatter.should_receive(:pending).with(" Scenario: title")
|
83
|
-
@formatter.scenario_executing(@scenario)
|
84
|
-
end
|
85
|
-
|
86
|
-
it "should display as pending in the dump" do
|
87
|
-
@formatter.scenario_executing(@scenario)
|
88
|
-
@formatter.dump
|
89
|
-
@io.string.should include("1 scenario pending")
|
90
|
-
end
|
91
|
-
|
92
|
-
it "should display as pending in the dump (with two scenarios)" do
|
93
|
-
@formatter.scenario_executing(@scenario)
|
94
|
-
@formatter.scenario_executing(@scenario)
|
95
|
-
@formatter.dump
|
96
|
-
@io.string.should include("2 scenarios pending")
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
it "should put a line between last row scenario and new scenario" do
|
101
|
-
io = StringIO.new
|
102
|
-
formatter = PrettyFormatter.new io, mock('step_mother'), :source => true
|
103
|
-
scenario = mock_scenario(:row? => true)
|
104
|
-
|
105
|
-
formatter.scenario_executing(scenario)
|
106
|
-
formatter.scenario_executed(scenario)
|
107
|
-
formatter.scenario_executing(mock_scenario(:name => 'spacey', :row? => false))
|
108
|
-
|
109
|
-
io.string.should =~ /\n\n Scenario: spacey/
|
110
|
-
end
|
111
|
-
|
112
|
-
it "should distinguish a scenario outline from a scenario when displaying keywords" do
|
113
|
-
io = StringIO.new
|
114
|
-
formatter = PrettyFormatter.new(io, mock('step_mother'))
|
115
|
-
|
116
|
-
formatter.scenario_executing(mock_scenario_outline(:name => 'outliner'))
|
117
|
-
|
118
|
-
io.string.should =~ /Scenario Outline: outliner/
|
119
|
-
end
|
120
|
-
|
121
|
-
%w{passed pending failed skipped}.each do |result|
|
122
|
-
it "should only show visible placeholder values in #{result} step " do
|
123
|
-
io = StringIO.new
|
124
|
-
formatter = PrettyFormatter.new(io, mock('step_mother'))
|
125
|
-
formatter.instance_variable_set('@table_column_widths', [0])
|
126
|
-
|
127
|
-
formatter.send("step_#{result}".to_sym, mock_step_outline(:row? => true, :visible_args => ['monkey'], :padding_length => 2), nil, ['mouse'])
|
128
|
-
|
129
|
-
io.string.should =~ /monkey/
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
{'should' => true, 'should not' => false}.each do |should_or_should_not, show_snippet|
|
134
|
-
describe "snippets option #{show_snippet}" do
|
135
|
-
|
136
|
-
it "#{should_or_should_not} show snippet for pending step" do
|
137
|
-
@io = StringIO.new
|
138
|
-
step_mother = mock('step_mother', :has_step_definition? => false)
|
139
|
-
@formatter = PrettyFormatter.new @io, step_mother, :snippets => show_snippet
|
140
|
-
|
141
|
-
@formatter.step_pending(mock_step(:actual_keyword => 'Given', :name => 'pending step snippet'), nil, nil)
|
142
|
-
@formatter.dump
|
143
|
-
|
144
|
-
@io.string.send(should_or_should_not.gsub(' ','_').to_sym, include("Given /^pending step snippet$/ do"))
|
145
|
-
end
|
146
|
-
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
it "should escape snippets which have special regular expression characters" do
|
151
|
-
@io = StringIO.new
|
152
|
-
step_mother = mock('step_mother', :has_step_definition? => false)
|
153
|
-
@formatter = PrettyFormatter.new @io, step_mother, :snippets => true
|
154
|
-
|
155
|
-
@formatter.step_pending(mock_step(:actual_keyword => 'Given', :name => "$1 millon /'s"), nil, nil)
|
156
|
-
@formatter.dump
|
157
|
-
|
158
|
-
@io.string.should include("Given /^\\$1 millon \\/'s$/ do")
|
159
|
-
end
|
160
|
-
|
161
|
-
it "should not show the snippet for a step which already has a step definition" do
|
162
|
-
@io = StringIO.new
|
163
|
-
step_mother = mock('step_mother', :has_step_definition? => true)
|
164
|
-
@formatter = PrettyFormatter.new @io, step_mother, :snippets => true
|
165
|
-
|
166
|
-
@formatter.step_pending(mock_step(:actual_keyword => 'Given', :name => 'pending step snippet'), nil, nil)
|
167
|
-
@formatter.dump
|
168
|
-
|
169
|
-
@io.string.should_not include("Given /^pending step snippet$/ do")
|
170
|
-
end
|
171
|
-
|
172
|
-
describe "show source option true" do
|
173
|
-
|
174
|
-
before(:each) do
|
175
|
-
@io = StringIO.new
|
176
|
-
step_mother = mock('step_mother')
|
177
|
-
@formatter = PrettyFormatter.new @io, step_mother, :source => true
|
178
|
-
end
|
179
|
-
|
180
|
-
%w{passed failed skipped}.each do |result|
|
181
|
-
it "should display step source for #{result} step" do
|
182
|
-
@formatter.send("step_#{result}".to_sym, mock_step(:regexp_args_proc => [nil, nil, mock_proc], :error => StandardError.new, :padding_length => 2), nil, nil)
|
183
|
-
|
184
|
-
@io.string.should include("Given formatted yes # steps/example_steps.rb:11")
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
it "should display feature file and line for step outline" do
|
189
|
-
@formatter.step_traced(mock_step_outline(:file => "features/example.feature", :line => 11, :padding_length => 2), nil, nil)
|
190
|
-
|
191
|
-
@io.string.should include("Given formatted yes # features/example.feature:11")
|
192
|
-
end
|
193
|
-
|
194
|
-
it "should display feature file and line for pending step" do
|
195
|
-
@formatter.step_pending(mock_step(:name => 'test', :file => 'features/example.feature', :line => 5, :padding_length => 2), nil, nil)
|
196
|
-
|
197
|
-
@io.string.should include("Given test # features/example.feature:5")
|
198
|
-
end
|
199
|
-
|
200
|
-
it "should display file and line for scenario" do
|
201
|
-
@formatter.scenario_executing(mock_scenario(:name => "title", :file => 'features/example.feature', :line => 2 , :padding_length => 2, :pending? => false))
|
202
|
-
|
203
|
-
@io.string.should include("Scenario: title # features/example.feature:2")
|
204
|
-
end
|
205
|
-
|
206
|
-
it "should display file for feature" do
|
207
|
-
@formatter.feature_executing(mock_feature(:file => 'features/example.feature', :padding_length => 2))
|
208
|
-
@formatter.header_executing("Feature: test\n In order to ...\n As a ...\n I want to ...\n")
|
209
|
-
|
210
|
-
@io.string.should include("Feature: test # features/example.feature\n")
|
211
|
-
@io.string.should include("In order to ...\n")
|
212
|
-
@io.string.should include("As a ...\n")
|
213
|
-
@io.string.should include("I want to ...\n")
|
214
|
-
end
|
215
|
-
|
216
|
-
it "should align step comments" do
|
217
|
-
step_1 = mock_step(:regexp_args_proc => [nil, nil, mock_proc], :format => "1", :padding_length => 10)
|
218
|
-
step_4 = mock_step(:regexp_args_proc => [nil, nil, mock_proc], :format => "4444", :padding_length => 7)
|
219
|
-
step_9 = mock_step(:regexp_args_proc => [nil, nil, mock_proc], :format => "999999999", :padding_length => 2)
|
220
|
-
|
221
|
-
@formatter.step_passed(step_1, nil, nil)
|
222
|
-
@formatter.step_passed(step_4, nil, nil)
|
223
|
-
@formatter.step_passed(step_9, nil, nil)
|
224
|
-
|
225
|
-
@io.string.should include("Given 1 # steps/example_steps.rb:11")
|
226
|
-
@io.string.should include("Given 4444 # steps/example_steps.rb:11")
|
227
|
-
@io.string.should include("Given 999999999 # steps/example_steps.rb:11")
|
228
|
-
end
|
229
|
-
|
230
|
-
it "should align step comments with respect to their scenario's comment" do
|
231
|
-
step = mock_step(:regexp_args_proc => [nil, nil, mock_proc], :error => StandardError.new, :padding_length => 6)
|
232
|
-
|
233
|
-
@formatter.scenario_executing(mock_scenario(:name => "very long title", :file => 'features/example.feature', :line => 5, :steps => [step], :padding_length => 2, :pending? => false))
|
234
|
-
@formatter.step_passed(step, nil, nil)
|
235
|
-
|
236
|
-
@io.string.should include("Scenario: very long title # features/example.feature:5")
|
237
|
-
@io.string.should include(" Given formatted yes # steps/example_steps.rb:11")
|
238
|
-
end
|
239
|
-
|
240
|
-
end
|
241
|
-
|
242
|
-
it "should reset the column count correctly" do
|
243
|
-
io = StringIO.new
|
244
|
-
formatter = PrettyFormatter.new io, mock('step_mother'), :source => true
|
245
|
-
|
246
|
-
large_scenario = mock_scenario(:row? => false, :table_column_widths => [3,3,5,4,4], :table_header => %w(one two three four five))
|
247
|
-
formatter.scenario_executing(large_scenario)
|
248
|
-
formatter.scenario_executed(large_scenario)
|
249
|
-
|
250
|
-
small_scenario = mock_scenario(:row? => false, :table_column_widths => [3,3], :table_header => %w(one two))
|
251
|
-
formatter.scenario_executing(small_scenario)
|
252
|
-
lambda {
|
253
|
-
formatter.scenario_executed(small_scenario)
|
254
|
-
}.should_not raise_error(TypeError)
|
255
|
-
end
|
256
|
-
|
257
|
-
describe "pending messages" do
|
258
|
-
|
259
|
-
before(:each) do
|
260
|
-
@io = StringIO.new
|
261
|
-
@formatter = PrettyFormatter.new @io, mock('step_mother')
|
262
|
-
end
|
263
|
-
|
264
|
-
it "should show pending message for step" do
|
265
|
-
@formatter.step_pending(mock_step(:keyword => 'Given', :forced_to_pending? => true, :error => ForcedPending.new("please implement me")), /yatta/, nil)
|
266
|
-
|
267
|
-
@formatter.dump
|
268
|
-
|
269
|
-
@io.string.should include("Given /yatta/ (please implement me)")
|
270
|
-
end
|
271
|
-
|
272
|
-
it "should show pending step's file and line" do
|
273
|
-
@formatter.step_pending(mock_step(:forced_to_pending? => true, :error => ForcedPending.new("please implement me"),
|
274
|
-
:regexp_args_proc => [nil, nil, mock_proc(:to_comment_line => "steps/example_steps.rb:11")]), nil, nil)
|
275
|
-
|
276
|
-
@formatter.dump
|
277
|
-
|
278
|
-
@io.string.should include("steps/example_steps.rb:11")
|
279
|
-
end
|
280
|
-
|
281
|
-
it "should not show duplicates" do
|
282
|
-
@formatter.step_pending(mock_step(:keyword => 'Given', :forced_to_pending? => true, :error => ForcedPending.new("please implement me")), /yatta/, [])
|
283
|
-
@formatter.step_pending(mock_step(:forced_to_pending? => true, :error => ForcedPending.new("please implement me"), :row? => true), /yatta/, [])
|
284
|
-
|
285
|
-
@formatter.dump
|
286
|
-
|
287
|
-
@io.string.scan(/please implement me/).length.should_not == 2
|
288
|
-
end
|
289
|
-
|
290
|
-
it "should ignore messages from steps that where not forced to pending" do
|
291
|
-
@formatter.step_pending(mock_step(:keyword => 'Given', :forced_to_pending? => false, :error => Pending.new("do not show me")), nil, [])
|
292
|
-
|
293
|
-
@formatter.dump
|
294
|
-
|
295
|
-
@io.string.should_not include("do not show me")
|
296
|
-
end
|
297
|
-
|
298
|
-
end
|
299
|
-
|
300
|
-
describe "no pending messages" do
|
301
|
-
|
302
|
-
it "should not show any pending message information" do
|
303
|
-
io = StringIO.new
|
304
|
-
formatter = PrettyFormatter.new io, mock('step_mother')
|
305
|
-
|
306
|
-
formatter.dump
|
307
|
-
|
308
|
-
io.string.should_not include("Pending Notes:\n")
|
309
|
-
end
|
310
|
-
|
311
|
-
end
|
312
|
-
|
313
|
-
it "should show number of pending steps that have no step definition" do
|
314
|
-
io = StringIO.new
|
315
|
-
formatter = PrettyFormatter.new io, mock('step_mother')
|
316
|
-
|
317
|
-
formatter.step_pending(mock_step(:error => ForcedPending.new, :forced_to_pending? => true), nil, [])
|
318
|
-
formatter.step_pending(mock_step(:error => Pending.new, :forced_to_pending? => false), nil, [])
|
319
|
-
|
320
|
-
formatter.dump
|
321
|
-
|
322
|
-
io.string.should include("1 with no step definition")
|
323
|
-
end
|
324
|
-
|
325
|
-
it "should display the total number of scenarios executed (for 0 scenarios)" do
|
326
|
-
io = StringIO.new
|
327
|
-
formatter = PrettyFormatter.new io, mock('step_mother')
|
328
|
-
|
329
|
-
formatter.dump
|
330
|
-
|
331
|
-
io.string.should include("0 scenarios")
|
332
|
-
end
|
333
|
-
|
334
|
-
it "should display the total number of scenarios executed (for 1 scenario)" do
|
335
|
-
io = StringIO.new
|
336
|
-
formatter = PrettyFormatter.new io, mock('step_mother')
|
337
|
-
|
338
|
-
formatter.scenario_executing(mock_scenario)
|
339
|
-
formatter.scenario_executed(mock_scenario)
|
340
|
-
|
341
|
-
formatter.dump
|
342
|
-
|
343
|
-
io.string.should include("1 scenario")
|
344
|
-
end
|
345
|
-
|
346
|
-
it "should display the total number of scenarios executed (for 2 scenarios)" do
|
347
|
-
io = StringIO.new
|
348
|
-
formatter = PrettyFormatter.new io, mock('step_mother')
|
349
|
-
|
350
|
-
formatter.scenario_executing(mock_scenario)
|
351
|
-
formatter.scenario_executed(mock_scenario)
|
352
|
-
|
353
|
-
formatter.scenario_executing(mock_scenario)
|
354
|
-
formatter.scenario_executed(mock_scenario)
|
355
|
-
|
356
|
-
formatter.dump
|
357
|
-
|
358
|
-
io.string.should include("2 scenarios")
|
359
|
-
end
|
360
|
-
|
361
|
-
describe "colour" do
|
362
|
-
|
363
|
-
before(:each) do
|
364
|
-
::Term::ANSIColor.coloring = true
|
365
|
-
@io = StringIO.new
|
366
|
-
@formatter = PrettyFormatter.new @io, mock('step_mother')
|
367
|
-
end
|
368
|
-
|
369
|
-
it "should show the scenario outline keyword and title as pending blue" do
|
370
|
-
@formatter.scenario_executing(mock_scenario(:outline? => true, :name => 'blue'))
|
371
|
-
|
372
|
-
@io.string.should =~ /\e\[36m\s*Scenario Outline: blue\e\[0m/
|
373
|
-
end
|
374
|
-
|
375
|
-
it "should show passing steps as green" do
|
376
|
-
@formatter.scenario_executing(mock_scenario)
|
377
|
-
@formatter.step_passed(mock_step, nil, nil)
|
378
|
-
@formatter.dump
|
379
|
-
|
380
|
-
@io.string.should =~ /\e\[32m1 step passed\e/
|
381
|
-
end
|
382
|
-
|
383
|
-
it "should show pending steps as yellow" do
|
384
|
-
@formatter.scenario_executing(mock_scenario)
|
385
|
-
@formatter.step_pending(mock_step, nil, nil)
|
386
|
-
@formatter.dump
|
387
|
-
|
388
|
-
@io.string.should =~ /\e\[33m1 step pending\e/
|
389
|
-
end
|
390
|
-
|
391
|
-
it "should show failed steps as red" do
|
392
|
-
@formatter.scenario_executing(mock_scenario)
|
393
|
-
@formatter.step_failed(mock_step(:error => mock_error(:cucumber_backtrace => [])), nil, nil)
|
394
|
-
@formatter.dump
|
395
|
-
|
396
|
-
@io.string.should =~ /\e\[31m1 step failed\e/
|
397
|
-
end
|
398
|
-
|
399
|
-
it "should show skipped steps as cyan" do
|
400
|
-
@formatter.scenario_executing(mock_scenario)
|
401
|
-
@formatter.step_skipped(mock_step, nil, nil)
|
402
|
-
@formatter.dump
|
403
|
-
|
404
|
-
@io.string.should =~ /\e\[36m1 step skipped\e/
|
405
|
-
end
|
406
|
-
|
407
|
-
end
|
408
|
-
end
|
409
|
-
end
|
410
|
-
end
|