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.
Files changed (248) hide show
  1. data/History.txt +126 -2
  2. data/License.txt +1 -1
  3. data/Manifest.txt +0 -270
  4. data/Rakefile +1 -1
  5. data/bin/cucumber +2 -2
  6. data/config/hoe.rb +7 -2
  7. data/examples/cs/features/step_definitons/calculator_steps.rb +1 -1
  8. data/examples/i18n/README.textile +1 -1
  9. data/examples/i18n/Rakefile +3 -3
  10. data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +1 -6
  11. data/examples/i18n/da/features/step_definitons/kalkulator_steps.rb +1 -1
  12. data/examples/i18n/de/features/addition.feature +6 -6
  13. data/examples/i18n/de/features/step_definitons/calculator_steps.rb +2 -2
  14. data/examples/i18n/en/features/addition.feature +6 -6
  15. data/examples/i18n/en/features/step_definitons/calculator_steps.rb +2 -2
  16. data/examples/i18n/es/features/adicion.feature +11 -12
  17. data/examples/i18n/es/features/step_definitons/calculador_steps.rb +7 -10
  18. data/examples/i18n/es/lib/calculador.rb +4 -1
  19. data/examples/i18n/et/features/liitmine.feature +7 -6
  20. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +1 -1
  21. data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +1 -1
  22. data/examples/i18n/fi/features/yhteenlasku.feature +2 -2
  23. data/examples/i18n/fr/features/addition.feature +2 -2
  24. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +1 -1
  25. data/examples/i18n/id/features/addition.feature +6 -6
  26. data/examples/i18n/id/features/step_definitons/calculator_steps.rb +2 -2
  27. data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +1 -1
  28. data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +2 -3
  29. data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +1 -1
  30. data/examples/i18n/lt/features/addition.feature +7 -6
  31. data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +2 -2
  32. data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +7 -7
  33. data/examples/i18n/no/features/summering.feature +1 -0
  34. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +1 -1
  35. data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +1 -1
  36. data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +1 -1
  37. data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +2 -2
  38. data/examples/java/src/cucumber/demo/Hello.java +16 -0
  39. data/examples/jbehave/README.textile +17 -0
  40. data/examples/jbehave/features/support/env.rb +7 -0
  41. data/examples/jbehave/features/trading.feature +24 -0
  42. data/examples/jbehave/pom.xml +48 -0
  43. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/converters/TraderConverter.java +32 -0
  44. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/model/Stock.java +42 -0
  45. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/model/Trader.java +29 -0
  46. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/persistence/TraderPersister.java +22 -0
  47. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/scenarios/TraderSteps.java +65 -0
  48. data/examples/self_test/README.textile +4 -1
  49. data/examples/{calculator_ruby_features → self_test}/Rakefile +3 -3
  50. data/examples/self_test/features/background/failing_background.feature +10 -0
  51. data/examples/self_test/features/background/failing_background_after_success.feature +11 -0
  52. data/examples/self_test/features/background/multiline_args_background.feature +32 -0
  53. data/examples/self_test/features/background/passing_background.feature +10 -0
  54. data/examples/self_test/features/background/pending_background.feature +10 -0
  55. data/examples/self_test/features/background/scenario_outline_failing_background.feature +16 -0
  56. data/examples/self_test/features/background/scenario_outline_passing_background.feature +16 -0
  57. data/examples/self_test/features/call_undefined_step_from_step_def.feature +7 -0
  58. data/examples/self_test/features/lots_of_undefined.feature +8 -0
  59. data/examples/self_test/features/outline_sample.feature +11 -5
  60. data/examples/self_test/features/sample.feature +8 -3
  61. data/examples/self_test/features/step_definitions/sample_steps.rb +53 -4
  62. data/examples/self_test/features/support/env.rb +1 -0
  63. data/examples/self_test/features/support/tag_count_formatter.rb +25 -0
  64. data/examples/tickets/features/172.feature +28 -0
  65. data/examples/tickets/features/177/1.feature +29 -0
  66. data/examples/tickets/features/177/2.feature +21 -0
  67. data/examples/tickets/features/177/3.feature +18 -0
  68. data/examples/tickets/features/180.feature +7 -0
  69. data/examples/tickets/features/scenario_outline.feature +6 -1
  70. data/examples/tickets/features/step_definitons/tickets_steps.rb +27 -3
  71. data/examples/tickets/features/tickets.feature +4 -0
  72. data/features/background.feature +223 -0
  73. data/features/cucumber_cli.feature +218 -98
  74. data/features/cucumber_cli_outlines.feature +54 -37
  75. data/features/custom_formatter.feature +11 -0
  76. data/features/report_called_undefined_steps.feature +32 -0
  77. data/features/step_definitions/cucumber_steps.rb +7 -3
  78. data/features/step_definitions/extra_steps.rb +1 -1
  79. data/features/support/env.rb +2 -1
  80. data/gem_tasks/flog.rake +1 -1
  81. data/gem_tasks/gemspec.rake +2 -2
  82. data/gem_tasks/jar.rake +67 -0
  83. data/lib/autotest/cucumber_mixin.rb +17 -23
  84. data/lib/cucumber.rb +63 -11
  85. data/lib/cucumber/ast.rb +29 -0
  86. data/lib/cucumber/ast/background.rb +88 -0
  87. data/lib/cucumber/ast/comment.rb +26 -0
  88. data/lib/cucumber/ast/examples.rb +26 -0
  89. data/lib/cucumber/ast/feature.rb +66 -0
  90. data/lib/cucumber/ast/features.rb +39 -0
  91. data/lib/cucumber/ast/filter.rb +22 -0
  92. data/lib/cucumber/ast/outline_table.rb +49 -0
  93. data/lib/cucumber/ast/py_string.rb +52 -0
  94. data/lib/cucumber/ast/scenario.rb +103 -0
  95. data/lib/cucumber/ast/scenario_outline.rb +92 -0
  96. data/lib/cucumber/ast/step.rb +161 -0
  97. data/lib/cucumber/ast/steps.rb +13 -0
  98. data/lib/cucumber/ast/table.rb +218 -0
  99. data/lib/cucumber/ast/tags.rb +40 -0
  100. data/lib/cucumber/ast/visitor.rb +109 -0
  101. data/lib/cucumber/broadcaster.rb +1 -6
  102. data/lib/cucumber/cli/configuration.rb +339 -0
  103. data/lib/cucumber/cli/language_help_formatter.rb +59 -0
  104. data/lib/cucumber/cli/main.rb +100 -0
  105. data/lib/cucumber/core_ext/exception.rb +41 -8
  106. data/lib/cucumber/core_ext/instance_exec.rb +54 -0
  107. data/lib/cucumber/core_ext/proc.rb +29 -65
  108. data/lib/cucumber/core_ext/string.rb +19 -0
  109. data/lib/cucumber/formatter.rb +1 -0
  110. data/lib/cucumber/{formatters → formatter}/ansicolor.rb +14 -16
  111. data/lib/cucumber/formatter/color_io.rb +17 -0
  112. data/lib/cucumber/formatter/console.rb +119 -0
  113. data/lib/cucumber/formatter/cucumber.css +55 -0
  114. data/lib/cucumber/formatter/cucumber.sass +49 -0
  115. data/lib/cucumber/formatter/html.rb +121 -0
  116. data/lib/cucumber/formatter/pretty.rb +167 -0
  117. data/lib/cucumber/formatter/profile.rb +77 -0
  118. data/lib/cucumber/formatter/progress.rb +68 -0
  119. data/lib/cucumber/formatter/rerun.rb +35 -0
  120. data/lib/cucumber/formatter/unicode.rb +35 -0
  121. data/lib/cucumber/formatters/unicode.rb +2 -35
  122. data/lib/cucumber/jbehave.rb +102 -0
  123. data/lib/cucumber/languages.yml +128 -75
  124. data/lib/cucumber/parser.rb +43 -0
  125. data/lib/cucumber/parser/basic.rb +0 -0
  126. data/lib/cucumber/parser/feature.rb +1490 -0
  127. data/lib/cucumber/parser/feature.tt +188 -0
  128. data/lib/cucumber/parser/i18n.tt +31 -0
  129. data/lib/cucumber/parser/table.rb +402 -0
  130. data/lib/cucumber/parser/table.tt +59 -0
  131. data/lib/cucumber/parser/treetop_ext.rb +75 -0
  132. data/lib/cucumber/platform.rb +3 -17
  133. data/lib/cucumber/rails/rspec.rb +5 -2
  134. data/lib/cucumber/step_definition.rb +87 -0
  135. data/lib/cucumber/step_mother.rb +151 -66
  136. data/lib/cucumber/version.rb +2 -2
  137. data/rails_generators/cucumber/USAGE +3 -2
  138. data/rails_generators/cucumber/cucumber_generator.rb +33 -23
  139. data/rails_generators/cucumber/templates/cucumber +2 -1
  140. data/rails_generators/cucumber/templates/cucumber.rake +6 -1
  141. data/rails_generators/cucumber/templates/env.rb +1 -1
  142. data/rails_generators/feature/USAGE +3 -0
  143. data/rails_generators/feature/feature_generator.rb +30 -6
  144. data/spec/cucumber/ast/background_spec.rb +58 -0
  145. data/spec/cucumber/ast/feature_factory.rb +54 -0
  146. data/spec/cucumber/ast/feature_spec.rb +60 -0
  147. data/spec/cucumber/ast/py_string_spec.rb +40 -0
  148. data/spec/cucumber/ast/scenario_outline_spec.rb +64 -0
  149. data/spec/cucumber/ast/scenario_spec.rb +82 -0
  150. data/spec/cucumber/ast/step_spec.rb +45 -0
  151. data/spec/cucumber/ast/table_spec.rb +81 -0
  152. data/spec/cucumber/ast/tags_spec.rb +23 -0
  153. data/spec/cucumber/broadcaster_spec.rb +4 -17
  154. data/spec/cucumber/cli/configuration_spec.rb +239 -0
  155. data/spec/cucumber/cli/main_spec.rb +164 -0
  156. data/spec/cucumber/core_ext/proc_spec.rb +27 -35
  157. data/spec/cucumber/core_ext/string_spec.rb +8 -0
  158. data/spec/cucumber/{formatters → formatter}/ansicolor_spec.rb +2 -2
  159. data/spec/cucumber/formatter/html/cucumber.css +37 -0
  160. data/spec/cucumber/formatter/html/cucumber.js +13 -0
  161. data/spec/cucumber/formatter/html/index.html +45 -0
  162. data/spec/cucumber/formatter/html/jquery-1.3.min.js +19 -0
  163. data/spec/cucumber/formatter/html/jquery.uitableedit.js +100 -0
  164. data/spec/cucumber/formatters/profile_formatter_spec.rb +17 -16
  165. data/spec/cucumber/parser/feature_parser_spec.rb +281 -0
  166. data/spec/cucumber/parser/table_parser_spec.rb +48 -0
  167. data/spec/cucumber/step_definition_spec.rb +62 -0
  168. data/spec/cucumber/step_mother_spec.rb +50 -51
  169. data/spec/cucumber/treetop_parser/empty_feature.feature +1 -1
  170. data/spec/cucumber/treetop_parser/scenario_outline.feature +1 -1
  171. data/spec/cucumber/treetop_parser/spaces.feature +3 -1
  172. data/spec/cucumber/treetop_parser/with_comments.feature +1 -1
  173. data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
  174. data/spec/cucumber/world/pending_spec.rb +13 -12
  175. data/spec/spec_helper.rb +1 -1
  176. metadata +107 -79
  177. data/examples/calculator_ruby_features/features/addition.rb +0 -39
  178. data/examples/calculator_ruby_features/features/step_definitons/calculator_steps.rb +0 -43
  179. data/gem_tasks/treetop.rake +0 -41
  180. data/lib/cucumber/cli.rb +0 -355
  181. data/lib/cucumber/executor.rb +0 -205
  182. data/lib/cucumber/formatters.rb +0 -1
  183. data/lib/cucumber/formatters/autotest_formatter.rb +0 -23
  184. data/lib/cucumber/formatters/cucumber.css +0 -132
  185. data/lib/cucumber/formatters/cucumber.js +0 -11
  186. data/lib/cucumber/formatters/html_formatter.rb +0 -152
  187. data/lib/cucumber/formatters/jquery.js +0 -32
  188. data/lib/cucumber/formatters/pretty_formatter.rb +0 -285
  189. data/lib/cucumber/formatters/profile_formatter.rb +0 -92
  190. data/lib/cucumber/formatters/progress_formatter.rb +0 -61
  191. data/lib/cucumber/model.rb +0 -1
  192. data/lib/cucumber/model/table.rb +0 -32
  193. data/lib/cucumber/step_methods.rb +0 -49
  194. data/lib/cucumber/tree.rb +0 -16
  195. data/lib/cucumber/tree/feature.rb +0 -105
  196. data/lib/cucumber/tree/features.rb +0 -21
  197. data/lib/cucumber/tree/given_scenario.rb +0 -13
  198. data/lib/cucumber/tree/scenario.rb +0 -240
  199. data/lib/cucumber/tree/step.rb +0 -173
  200. data/lib/cucumber/tree/table.rb +0 -26
  201. data/lib/cucumber/tree/top_down_visitor.rb +0 -23
  202. data/lib/cucumber/treetop_parser/feature.treetop.erb +0 -254
  203. data/lib/cucumber/treetop_parser/feature_ar.rb +0 -1951
  204. data/lib/cucumber/treetop_parser/feature_cy.rb +0 -1951
  205. data/lib/cucumber/treetop_parser/feature_da.rb +0 -1951
  206. data/lib/cucumber/treetop_parser/feature_de.rb +0 -1951
  207. data/lib/cucumber/treetop_parser/feature_en-lol.rb +0 -1951
  208. data/lib/cucumber/treetop_parser/feature_en-tx.rb +0 -1951
  209. data/lib/cucumber/treetop_parser/feature_en.rb +0 -1951
  210. data/lib/cucumber/treetop_parser/feature_es.rb +0 -1951
  211. data/lib/cucumber/treetop_parser/feature_et.rb +0 -1951
  212. data/lib/cucumber/treetop_parser/feature_fi.rb +0 -1951
  213. data/lib/cucumber/treetop_parser/feature_fr.rb +0 -1951
  214. data/lib/cucumber/treetop_parser/feature_id.rb +0 -1951
  215. data/lib/cucumber/treetop_parser/feature_it.rb +0 -1951
  216. data/lib/cucumber/treetop_parser/feature_ja.rb +0 -1951
  217. data/lib/cucumber/treetop_parser/feature_ko.rb +0 -1951
  218. data/lib/cucumber/treetop_parser/feature_lt.rb +0 -1951
  219. data/lib/cucumber/treetop_parser/feature_nl.rb +0 -1951
  220. data/lib/cucumber/treetop_parser/feature_no.rb +0 -1951
  221. data/lib/cucumber/treetop_parser/feature_parser.rb +0 -36
  222. data/lib/cucumber/treetop_parser/feature_pl.rb +0 -1951
  223. data/lib/cucumber/treetop_parser/feature_pt.rb +0 -1951
  224. data/lib/cucumber/treetop_parser/feature_ro.rb +0 -1951
  225. data/lib/cucumber/treetop_parser/feature_ro2.rb +0 -1951
  226. data/lib/cucumber/treetop_parser/feature_ru.rb +0 -1951
  227. data/lib/cucumber/treetop_parser/feature_se.rb +0 -1951
  228. data/lib/cucumber/treetop_parser/feature_zh-CN.rb +0 -1951
  229. data/lib/cucumber/world.rb +0 -1
  230. data/lib/cucumber/world/pending.rb +0 -22
  231. data/setup.rb +0 -1585
  232. data/spec/cucumber/cli_spec.rb +0 -521
  233. data/spec/cucumber/executor_spec.rb +0 -382
  234. data/spec/cucumber/formatters/autotest_formatter_spec.rb +0 -26
  235. data/spec/cucumber/formatters/features.html +0 -269
  236. data/spec/cucumber/formatters/html_formatter_spec.rb +0 -110
  237. data/spec/cucumber/formatters/pretty_formatter_spec.rb +0 -410
  238. data/spec/cucumber/formatters/progress_formatter_spec.rb +0 -81
  239. data/spec/cucumber/model/table_spec.rb +0 -32
  240. data/spec/cucumber/tree/feature_spec.rb +0 -122
  241. data/spec/cucumber/tree/row_scenario_outline_spec.rb +0 -73
  242. data/spec/cucumber/tree/row_scenario_spec.rb +0 -55
  243. data/spec/cucumber/tree/row_step_outline_spec.rb +0 -38
  244. data/spec/cucumber/tree/scenario_outline_spec.rb +0 -50
  245. data/spec/cucumber/tree/scenario_spec.rb +0 -134
  246. data/spec/cucumber/tree/step_outline_spec.rb +0 -17
  247. data/spec/cucumber/tree/step_spec.rb +0 -59
  248. 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