cucumber 1.2.1 → 1.2.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.
Files changed (172) hide show
  1. data/.rvmrc +1 -1
  2. data/.travis.yml +3 -2
  3. data/DEVELOPERS.md +48 -0
  4. data/History.md +22 -3
  5. data/README.md +13 -31
  6. data/Rakefile +1 -0
  7. data/cucumber.gemspec +18 -17
  8. data/cucumber.yml +3 -2
  9. data/examples/i18n/cs/Rakefile +6 -0
  10. data/examples/i18n/cs/features/addition.feature +17 -0
  11. data/examples/i18n/cs/features/division.feature +11 -0
  12. data/examples/i18n/cs/features/step_definitons/calculator_steps.rb +24 -0
  13. data/examples/i18n/cs/lib/calculator.rb +14 -0
  14. data/examples/i18n/hi/Rakefile +6 -0
  15. data/examples/i18n/hi/features/addition.feature +16 -0
  16. data/examples/i18n/hi/features/division.feature +10 -0
  17. data/examples/i18n/hi/features/step_definitons/calculator_steps.rb +24 -0
  18. data/examples/i18n/hi/lib/calculator.rb +15 -0
  19. data/examples/python/README.textile +2 -1
  20. data/examples/ruby2python/README.textile +2 -1
  21. data/features/.cucumber/stepdefs.json +1688 -445
  22. data/features/assertions.feature +69 -0
  23. data/features/formatter_callbacks.feature +189 -0
  24. data/features/html_formatter.feature +19 -0
  25. data/features/json_formatter.feature +8 -4
  26. data/features/nested_steps_with_second_arg.feature +73 -0
  27. data/features/step_definitions.feature +65 -0
  28. data/features/step_definitions/cucumber_steps.rb +18 -3
  29. data/fixtures/self_test/features/support/env.rb +1 -1
  30. data/gem_tasks/cucumber.rake +5 -3
  31. data/gem_tasks/downloads.rb +3 -3
  32. data/gem_tasks/stats +4 -2
  33. data/gem_tasks/yard.rake +31 -13
  34. data/legacy_features/default_snippets.feature +3 -3
  35. data/legacy_features/language_help.feature +4 -0
  36. data/legacy_features/report_called_undefined_steps.feature +1 -1
  37. data/legacy_features/snippet.feature +3 -3
  38. data/legacy_features/snippets_when_using_star_keyword.feature +1 -1
  39. data/legacy_features/step_definitions/cucumber_steps.rb +4 -3
  40. data/legacy_features/support/env.rb +1 -1
  41. data/legacy_features/support/fake_wire_server.rb +9 -9
  42. data/lib/autotest/cucumber_mixin.rb +14 -14
  43. data/lib/autotest/discover.rb +2 -0
  44. data/lib/cucumber.rb +2 -2
  45. data/lib/cucumber/ast.rb +1 -1
  46. data/lib/cucumber/ast/background.rb +11 -7
  47. data/lib/cucumber/ast/comment.rb +2 -2
  48. data/lib/cucumber/ast/doc_string.rb +1 -1
  49. data/lib/cucumber/ast/examples.rb +1 -1
  50. data/lib/cucumber/ast/feature.rb +2 -2
  51. data/lib/cucumber/ast/feature_element.rb +1 -1
  52. data/lib/cucumber/ast/multiline_argument.rb +2 -2
  53. data/lib/cucumber/ast/names.rb +2 -2
  54. data/lib/cucumber/ast/outline_table.rb +4 -5
  55. data/lib/cucumber/ast/scenario.rb +14 -14
  56. data/lib/cucumber/ast/scenario_outline.rb +4 -4
  57. data/lib/cucumber/ast/step.rb +3 -3
  58. data/lib/cucumber/ast/step_collection.rb +5 -5
  59. data/lib/cucumber/ast/step_invocation.rb +8 -8
  60. data/lib/cucumber/ast/table.rb +40 -27
  61. data/lib/cucumber/ast/tree_walker.rb +9 -8
  62. data/lib/cucumber/ast/visitor.rb +1 -1
  63. data/lib/cucumber/cli/configuration.rb +10 -10
  64. data/lib/cucumber/cli/drb_client.rb +1 -1
  65. data/lib/cucumber/cli/main.rb +3 -3
  66. data/lib/cucumber/cli/options.rb +3 -2
  67. data/lib/cucumber/cli/profile_loader.rb +1 -1
  68. data/lib/cucumber/configuration.rb +12 -12
  69. data/lib/cucumber/constantize.rb +11 -2
  70. data/lib/cucumber/core_ext/disable_mini_and_test_unit_autorun.rb +1 -1
  71. data/lib/cucumber/core_ext/instance_exec.rb +4 -4
  72. data/lib/cucumber/core_ext/proc.rb +3 -3
  73. data/lib/cucumber/errors.rb +1 -1
  74. data/lib/cucumber/feature_file.rb +1 -1
  75. data/lib/cucumber/formatter/ansicolor.rb +36 -23
  76. data/lib/cucumber/formatter/console.rb +45 -25
  77. data/lib/cucumber/formatter/debug.rb +7 -7
  78. data/lib/cucumber/formatter/duration.rb +1 -1
  79. data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +7 -0
  80. data/lib/cucumber/formatter/gpretty.rb +1 -1
  81. data/lib/cucumber/formatter/html.rb +52 -53
  82. data/lib/cucumber/formatter/interceptor.rb +2 -2
  83. data/lib/cucumber/formatter/json.rb +1 -1
  84. data/lib/cucumber/formatter/json_pretty.rb +2 -1
  85. data/lib/cucumber/formatter/junit.rb +1 -1
  86. data/lib/cucumber/formatter/ordered_xml_markup.rb +1 -1
  87. data/lib/cucumber/formatter/pretty.rb +12 -12
  88. data/lib/cucumber/formatter/progress.rb +5 -5
  89. data/lib/cucumber/formatter/rerun.rb +5 -5
  90. data/lib/cucumber/formatter/stepdefs.rb +1 -1
  91. data/lib/cucumber/formatter/steps.rb +6 -6
  92. data/lib/cucumber/formatter/summary.rb +6 -6
  93. data/lib/cucumber/formatter/unicode.rb +18 -18
  94. data/lib/cucumber/formatter/usage.rb +7 -7
  95. data/lib/cucumber/js_support/js_dsl.js +1 -1
  96. data/lib/cucumber/language_support.rb +1 -1
  97. data/lib/cucumber/parser/gherkin_builder.rb +33 -33
  98. data/lib/cucumber/platform.rb +3 -2
  99. data/lib/cucumber/py_support/py_dsl.py +2 -2
  100. data/lib/cucumber/py_support/py_language.py +2 -2
  101. data/lib/cucumber/py_support/py_language.rb +2 -2
  102. data/lib/cucumber/rake/task.rb +4 -3
  103. data/lib/cucumber/rb_support/rb_dsl.rb +10 -10
  104. data/lib/cucumber/rb_support/rb_language.rb +27 -19
  105. data/lib/cucumber/rb_support/rb_step_definition.rb +39 -11
  106. data/lib/cucumber/rb_support/rb_transform.rb +3 -3
  107. data/lib/cucumber/rb_support/rb_world.rb +15 -15
  108. data/lib/cucumber/rb_support/regexp_argument_matcher.rb +1 -1
  109. data/lib/cucumber/rspec/disable_option_parser.rb +1 -1
  110. data/lib/cucumber/rspec/doubles.rb +1 -1
  111. data/lib/cucumber/runtime.rb +11 -10
  112. data/lib/cucumber/runtime/features_loader.rb +6 -6
  113. data/lib/cucumber/runtime/for_programming_languages.rb +8 -15
  114. data/lib/cucumber/runtime/results.rb +6 -6
  115. data/lib/cucumber/runtime/support_code.rb +37 -28
  116. data/lib/cucumber/runtime/user_interface.rb +4 -4
  117. data/lib/cucumber/step_definition_light.rb +4 -4
  118. data/lib/cucumber/step_definitions.rb +2 -3
  119. data/lib/cucumber/step_match.rb +6 -6
  120. data/lib/cucumber/step_mother.rb +1 -1
  121. data/lib/cucumber/term/ansicolor.rb +22 -22
  122. data/lib/cucumber/wire_support/configuration.rb +11 -14
  123. data/lib/cucumber/wire_support/connection.rb +10 -9
  124. data/lib/cucumber/wire_support/request_handler.rb +3 -3
  125. data/lib/cucumber/wire_support/wire_exception.rb +3 -3
  126. data/lib/cucumber/wire_support/wire_language.rb +11 -11
  127. data/lib/cucumber/wire_support/wire_packet.rb +7 -5
  128. data/lib/cucumber/wire_support/wire_protocol.rb +6 -6
  129. data/lib/cucumber/wire_support/wire_protocol/requests.rb +20 -20
  130. data/lib/cucumber/wire_support/wire_step_definition.rb +4 -4
  131. data/spec/cucumber/ast/background_spec.rb +4 -4
  132. data/spec/cucumber/ast/doc_string_spec.rb +8 -8
  133. data/spec/cucumber/ast/feature_factory.rb +4 -4
  134. data/spec/cucumber/ast/feature_spec.rb +18 -18
  135. data/spec/cucumber/ast/outline_table_spec.rb +3 -3
  136. data/spec/cucumber/ast/step_spec.rb +4 -4
  137. data/spec/cucumber/ast/table_spec.rb +50 -29
  138. data/spec/cucumber/ast/tree_walker_spec.rb +12 -4
  139. data/spec/cucumber/broadcaster_spec.rb +1 -1
  140. data/spec/cucumber/cli/configuration_spec.rb +10 -4
  141. data/spec/cucumber/cli/drb_client_spec.rb +1 -1
  142. data/spec/cucumber/cli/main_spec.rb +28 -7
  143. data/spec/cucumber/cli/options_spec.rb +3 -3
  144. data/spec/cucumber/configuration_spec.rb +4 -4
  145. data/spec/cucumber/constantize_spec.rb +2 -0
  146. data/spec/cucumber/core_ext/proc_spec.rb +7 -7
  147. data/spec/cucumber/formatter/ansicolor_spec.rb +2 -2
  148. data/spec/cucumber/formatter/duration_spec.rb +2 -2
  149. data/spec/cucumber/formatter/html_spec.rb +31 -31
  150. data/spec/cucumber/formatter/interceptor_spec.rb +10 -0
  151. data/spec/cucumber/formatter/progress_spec.rb +1 -1
  152. data/spec/cucumber/formatter/spec_helper.rb +7 -7
  153. data/spec/cucumber/rake/forked_spec.rb +15 -2
  154. data/spec/cucumber/rake/rcov_spec.rb +2 -2
  155. data/spec/cucumber/rb_support/rb_language_spec.rb +34 -17
  156. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +45 -35
  157. data/spec/cucumber/rb_support/rb_transform_spec.rb +3 -3
  158. data/spec/cucumber/runtime/for_programming_languages_spec.rb +31 -0
  159. data/spec/cucumber/runtime/results_spec.rb +5 -5
  160. data/spec/cucumber/runtime/support_code_spec.rb +13 -2
  161. data/spec/cucumber/runtime_spec.rb +7 -7
  162. data/spec/cucumber/step_match_spec.rb +2 -2
  163. data/spec/cucumber/wire_support/configuration_spec.rb +16 -6
  164. data/spec/cucumber/wire_support/connection_spec.rb +25 -11
  165. data/spec/cucumber/wire_support/wire_exception_spec.rb +3 -3
  166. data/spec/cucumber/wire_support/wire_language_spec.rb +3 -3
  167. data/spec/cucumber/wire_support/wire_packet_spec.rb +4 -4
  168. data/spec/cucumber/wire_support/wire_step_definition_spec.rb +1 -1
  169. data/spec/spec_helper.rb +2 -2
  170. metadata +98 -128
  171. data/legacy_features/html_formatter.feature +0 -8
  172. data/legacy_features/html_formatter/a.html +0 -561
@@ -2,16 +2,31 @@ When /^I run cucumber "(.+)"$/ do |cmd|
2
2
  run_simple(unescape("cucumber #{cmd}"), false)
3
3
  end
4
4
 
5
+ Then 'it should pass' do
6
+ assert_exit_status 0
7
+ end
8
+
5
9
  Then /^it should (pass|fail) with JSON:$/ do |pass_fail, json|
6
10
  # Need to store it in a variable. With JRuby we can only do this once it seems :-/
7
11
  stdout = all_stdout
8
-
12
+
9
13
  # JRuby has weird traces sometimes (?)
10
- stdout = stdout.gsub(/ `\(root\)':in/, '')
14
+ stdout = stdout.gsub(/ `\(root\)':in/, '')
11
15
 
12
16
  actual = JSON.parse(stdout)
13
17
  expected = JSON.parse(json)
14
-
18
+
19
+ #make sure duration was captured (should be >= 0)
20
+ #then set it to what is "expected" since duration is dynamic
21
+ actual.each do |feature|
22
+ feature['elements'].each do |scenario|
23
+ scenario['steps'].each do |step|
24
+ step['result']['duration'].should be >= 0
25
+ step['result']['duration'] = 1
26
+ end
27
+ end
28
+ end
29
+
15
30
  actual.should == expected
16
31
  assert_success(pass_fail == 'pass')
17
32
  end
@@ -1,6 +1,6 @@
1
1
  require 'base64'
2
2
  begin require 'rspec/expectations'; rescue LoadError; require 'spec/expectations'; end
3
- $KCODE = 'u' unless Cucumber::RUBY_1_9
3
+ $KCODE = 'u' if Cucumber::RUBY_1_8_7
4
4
 
5
5
  Before('@not_used') do
6
6
  raise "Should never run"
@@ -3,12 +3,14 @@ require 'cucumber/platform'
3
3
 
4
4
  class Cucumber::Rake::Task
5
5
  def set_profile_for_current_ruby
6
- self.profile = if(Cucumber::JRUBY)
6
+ self.profile = if Cucumber::JRUBY
7
7
  Cucumber::WINDOWS ? 'jruby_win' : 'jruby'
8
- elsif(Cucumber::WINDOWS_MRI)
8
+ elsif Cucumber::WINDOWS_MRI
9
9
  'windows_mri'
10
- elsif(Cucumber::RUBY_1_9)
10
+ elsif Cucumber::RUBY_1_9
11
11
  'ruby_1_9'
12
+ elsif Cucumber::RUBY_2_0
13
+ 'ruby_2_0'
12
14
  end
13
15
  end
14
16
  end
@@ -1,7 +1,7 @@
1
- require 'json'
2
1
  require 'httparty'
2
+ require 'multi_json'
3
3
 
4
4
  IO.read(File.dirname(__FILE__) + '/versions.txt').each_line do |version|
5
5
  json = HTTParty.get("http://rubygems.org/api/v1/downloads/cucumber-#{version.strip}.json")
6
- puts JSON.parse(json.body)['version_downloads']
7
- end
6
+ puts MultiJson.load(json.body)['version_downloads']
7
+ end
@@ -1,3 +1,5 @@
1
+ #!/usr/bin/env sh
2
+
1
3
  echo 'Commits'
2
4
  git log --pretty=format:'' | wc -l
3
5
 
@@ -8,7 +10,7 @@ echo 'Resolved bugs/feature requests'
8
10
  egrep -e '^\*' History.md | wc -l
9
11
 
10
12
  echo 'Open tickets'
11
- curl -s http://github.com/api/v2/json/issues/list/cucumber/cucumber/open | ruby -e "require 'json'; puts JSON.parse(STDIN.read)['issues'].length"
13
+ curl -s https://api.github.com/repos/cucumber/cucumber/issues?state=open | ruby -e "require 'multi_json'; puts MultiJson.load(STDIN.read).length"
12
14
 
13
15
  echo 'Group members'
14
- curl -s http://groups.google.com/group/cukes | grep Members
16
+ curl -s http://groups.google.com/group/cukes | grep Members
@@ -1,18 +1,36 @@
1
1
  require 'yard'
2
2
  require 'yard/rake/yardoc_task'
3
- require 'cucumber/platform'
3
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/cucumber/platform')
4
4
 
5
- YARD::Templates::Engine.register_template_path(File.expand_path(File.join(File.dirname(__FILE__), 'yard')))
6
- YARD::Rake::YardocTask.new(:yard) do |t|
7
- t.options = %w{--no-private --title Cucumber}
8
- t.files = %w{lib - README.md History.md LICENSE}
9
- end
5
+ SITE_DIR = File.expand_path(File.dirname(__FILE__) + '/../../cucumber.github.com')
6
+ API_DIR = File.join(SITE_DIR, 'api', 'cucumber', 'ruby', 'yardoc')
10
7
 
11
- desc "Push yardoc to http://cukes.info/cucumber/api/#{Cucumber::VERSION}"
12
- task :push_yard => :yard do
13
- sh("tar czf api-#{Cucumber::VERSION}.tgz -C doc .")
14
- sh("scp api-#{Cucumber::VERSION}.tgz cukes.info:/var/www/cucumber/api/ruby")
15
- sh("ssh cukes.info 'cd /var/www/cucumber/api/ruby && rm -rf #{Cucumber::VERSION} && mkdir #{Cucumber::VERSION} && tar xzf api-#{Cucumber::VERSION}.tgz -C #{Cucumber::VERSION} && rm -f latest && ln -s #{Cucumber::VERSION} latest'")
16
- end
8
+ namespace :api do
9
+ file :dir do
10
+ unless File.directory?(SITE_DIR)
11
+ raise "You need to git clone git@github.com:cucumber/cucumber.github.com.git #{SITE_DIR}"
12
+ end
13
+ sh('git pull -u')
14
+ mkdir_p API_DIR
15
+ end
16
+
17
+ template_path = File.expand_path(File.join(File.dirname(__FILE__), 'yard'))
18
+ YARD::Templates::Engine.register_template_path(template_path)
19
+ YARD::Rake::YardocTask.new(:yard) do |yard|
20
+ dir = API_DIR
21
+ mkdir_p dir
22
+ yard.options = ["--out", dir]
23
+ end
24
+ task :yard => :dir
17
25
 
18
- #task :release => :push_yard
26
+ task :release do
27
+ Dir.chdir(SITE_DIR) do
28
+ sh('git add .')
29
+ sh("git commit -m 'Update API docs for Cucumber-Ruby v#{Cucumber::VERSION}'")
30
+ sh('git push')
31
+ end
32
+ end
33
+
34
+ desc "Generate YARD docs for Cucumber's API"
35
+ task :doc => [:yard, :release]
36
+ end
@@ -26,11 +26,11 @@ Feature: Print snippets
26
26
 
27
27
  You can implement step definitions for undefined steps with these snippets:
28
28
 
29
- Given /^Z$/ do
29
+ Given(/^Z$/) do
30
30
  pending # express the regexp above with the code you wish you had
31
31
  end
32
32
 
33
- Given /^Q$/ do
33
+ Given(/^Q$/) do
34
34
  pending # express the regexp above with the code you wish you had
35
35
  end
36
36
 
@@ -40,4 +40,4 @@ Feature: Print snippets
40
40
 
41
41
 
42
42
  """
43
-
43
+
@@ -46,9 +46,11 @@ Feature: Language help
46
46
  | eo | Esperanto | Esperanto |
47
47
  | es | Spanish | español |
48
48
  | et | Estonian | eesti keel |
49
+ | fa | Persian | فارسی |
49
50
  | fi | Finnish | suomi |
50
51
  | fr | French | français |
51
52
  | he | Hebrew | עברית |
53
+ | hi | Hindi | हिंदी |
52
54
  | hr | Croatian | hrvatski |
53
55
  | hu | Hungarian | magyar |
54
56
  | id | Indonesian | Bahasa Indonesia |
@@ -69,7 +71,9 @@ Feature: Language help
69
71
  | sr-Cyrl | Serbian | Српски |
70
72
  | sr-Latn | Serbian (Latin) | Srpski (Latinica) |
71
73
  | sv | Swedish | Svenska |
74
+ | tl | Telugu | తెలుగు |
72
75
  | tr | Turkish | Türkçe |
76
+ | tt | Tatar | Татарча |
73
77
  | uk | Ukrainian | Українська |
74
78
  | uz | Uzbek | Узбекча |
75
79
  | vi | Vietnamese | Tiếng Việt |
@@ -25,7 +25,7 @@ Feature: Cucumber command line
25
25
 
26
26
  You can implement step definitions for undefined steps with these snippets:
27
27
 
28
- Given /^this does not exist$/ do
28
+ Given(/^this does not exist$/) do
29
29
  pending # express the regexp above with the code you wish you had
30
30
  end
31
31
 
@@ -7,7 +7,7 @@ Feature: Snippets
7
7
  When I run cucumber features/undefined_multiline_args.feature:3 -s
8
8
  Then the output should contain
9
9
  """
10
- Given /^a pystring$/ do |string|
10
+ Given(/^a pystring$/) do |string|
11
11
  pending # express the regexp above with the code you wish you had
12
12
  end
13
13
  """
@@ -16,8 +16,8 @@ Feature: Snippets
16
16
  When I run cucumber features/undefined_multiline_args.feature:9 -s
17
17
  Then the output should contain
18
18
  """
19
- Given /^a table$/ do |table|
19
+ Given(/^a table$/) do |table|
20
20
  # table is a Cucumber::Ast::Table
21
21
  pending # express the regexp above with the code you wish you had
22
22
  end
23
- """
23
+ """
@@ -25,7 +25,7 @@ Feature: Use * keywords and still get snippets
25
25
 
26
26
  You can implement step definitions for undefined steps with these snippets:
27
27
 
28
- Given /^I have some cukes$/ do
28
+ Given(/^I have some cukes$/) do
29
29
  pending # express the regexp above with the code you wish you had
30
30
  end
31
31
 
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ require 'multi_json'
2
3
  require 'tempfile'
3
4
 
4
5
  Given /^I am in (.*)$/ do |example_dir_relative_path|
@@ -95,7 +96,7 @@ Then /^the output should be$/ do |text|
95
96
  end
96
97
 
97
98
  Then /^it should (fail|pass) with JSON$/ do |success, text|
98
- JSON.parse(last_stdout).should == JSON.parse(text)
99
+ MultiJson.load(last_stdout).should == MultiJson.load(text)
99
100
  Then("it should #{success}")
100
101
  end
101
102
 
@@ -105,7 +106,7 @@ end
105
106
 
106
107
  Then /^"([^"]*)" with junit duration "([^"]*)" should contain$/ do |actual_file, duration_replacement, text|
107
108
  actual = IO.read(actual_file)
108
- actual = replace_junit_duration(actual, duration_replacement)
109
+ actual = replace_junit_duration(actual, duration_replacement)
109
110
  actual = strip_ruby186_extra_trace(actual)
110
111
  actual.should == text
111
112
  end
@@ -168,5 +169,5 @@ Then /^print output$/ do
168
169
  end
169
170
 
170
171
  Then /^the output should contain the following JSON:$/ do |json_string|
171
- JSON.parse(last_stdout).should == JSON.parse(json_string)
172
+ MultiJson.load(last_stdout).should == MultiJson.load(json_string)
172
173
  end
@@ -101,7 +101,7 @@ class CucumberWorld
101
101
  stderr_file = Tempfile.new('cucumber')
102
102
  stderr_file.close
103
103
  in_current_dir do
104
- mode = Cucumber::RUBY_1_9 ? {:external_encoding=>"UTF-8"} : 'r'
104
+ mode = Cucumber::RUBY_1_8_7 ? 'r' : {:external_encoding=>"UTF-8"}
105
105
  IO.popen("#{command} 2> #{stderr_file.path}", mode) do |io|
106
106
  @last_stdout = io.read
107
107
  end
@@ -1,5 +1,5 @@
1
+ require 'multi_json'
1
2
  require 'socket'
2
- require 'json'
3
3
 
4
4
  class FakeWireServer
5
5
  def initialize(port, protocol_table)
@@ -11,7 +11,7 @@ class FakeWireServer
11
11
  @server = TCPServer.open(@port)
12
12
  loop { handle_connections }
13
13
  end
14
-
14
+
15
15
  def delay_response(message, delay)
16
16
  @delays[message] = delay
17
17
  end
@@ -31,7 +31,7 @@ class FakeWireServer
31
31
  socket.close
32
32
  end
33
33
  end
34
-
34
+
35
35
  class SocketSession
36
36
  def initialize(socket, protocol, delays)
37
37
  @socket = socket
@@ -46,7 +46,7 @@ class FakeWireServer
46
46
  end
47
47
 
48
48
  private
49
-
49
+
50
50
  def handle(data)
51
51
  if protocol_entry = response_to(data.strip)
52
52
  sleep delay(data)
@@ -60,18 +60,18 @@ class FakeWireServer
60
60
  end
61
61
 
62
62
  def response_to(data)
63
- @protocol.detect do |entry|
64
- JSON.parse(entry['request']) == JSON.parse(data)
63
+ @protocol.detect do |entry|
64
+ MultiJson.load(entry['request']) == MultiJson.load(data)
65
65
  end
66
66
  end
67
67
 
68
68
  def send_response(response)
69
69
  @socket.puts response + "\n"
70
70
  end
71
-
71
+
72
72
  def delay(data)
73
- message = JSON.parse(data.strip)[0]
73
+ message = MultiJson.load(data.strip)[0]
74
74
  @delays[message.to_sym] || 0
75
75
  end
76
76
  end
77
- end
77
+ end
@@ -7,14 +7,14 @@ module Autotest::CucumberMixin
7
7
  def self.included(receiver)
8
8
  receiver::ALL_HOOKS << [:run_features, :ran_features]
9
9
  end
10
-
10
+
11
11
  attr_accessor :features_to_run
12
-
12
+
13
13
  def initialize
14
14
  super
15
15
  reset_features
16
16
  end
17
-
17
+
18
18
  def run
19
19
  hook :initialize
20
20
  reset
@@ -44,11 +44,11 @@ module Autotest::CucumberMixin
44
44
  end
45
45
  hook :quit
46
46
  end
47
-
47
+
48
48
  def all_features_good
49
49
  features_to_run == ""
50
50
  end
51
-
51
+
52
52
  def get_to_green
53
53
  begin
54
54
  super
@@ -56,16 +56,16 @@ module Autotest::CucumberMixin
56
56
  wait_for_changes unless all_features_good
57
57
  end until all_features_good
58
58
  end
59
-
59
+
60
60
  def rerun_all_features
61
61
  reset_features
62
62
  run_features
63
63
  end
64
-
64
+
65
65
  def reset_features
66
66
  self.features_to_run = :all
67
67
  end
68
-
68
+
69
69
  def run_features
70
70
  hook :run_features
71
71
  Tempfile.open('autotest-cucumber') do |dirty_features_file|
@@ -104,16 +104,16 @@ module Autotest::CucumberMixin
104
104
  end
105
105
  hook :ran_features
106
106
  end
107
-
107
+
108
108
  def make_cucumber_cmd(features_to_run, dirty_features_filename)
109
109
  return '' if features_to_run == ''
110
-
110
+
111
111
  profile_loader = Cucumber::Cli::ProfileLoader.new
112
-
112
+
113
113
  profile ||= "autotest-all" if profile_loader.has_profile?("autotest-all") && features_to_run == :all
114
114
  profile ||= "autotest" if profile_loader.has_profile?("autotest")
115
115
  profile ||= nil
116
-
116
+
117
117
  if profile
118
118
  args = ["--profile", profile]
119
119
  else
@@ -122,12 +122,12 @@ module Autotest::CucumberMixin
122
122
  # No --color option as some IDEs (Netbeans) don't output them very well (1 failed step)
123
123
  args += %w{--format rerun --out} << dirty_features_filename
124
124
  args << (features_to_run == :all ? "" : features_to_run)
125
-
125
+
126
126
  # Unless I do this, all the steps turn up undefined during the rerun...
127
127
  unless features_to_run == :all
128
128
  args << 'features/step_definitions' << 'features/support'
129
129
  end
130
-
130
+
131
131
  args = args.join(' ')
132
132
 
133
133
  return "#{Cucumber::RUBY_BINARY} #{Cucumber::BINARY} #{args}"
@@ -2,6 +2,8 @@ Autotest.add_discovery do
2
2
  if File.directory?('features')
3
3
  if ENV['AUTOFEATURE'] =~ /true/i
4
4
  "cucumber"
5
+ elsif ENV['AUTOFEATURE'] =~ /false/i
6
+ # noop
5
7
  else
6
8
  puts "(Not running features. To run features in autotest, set AUTOFEATURE=true.)"
7
9
  end
@@ -13,14 +13,14 @@ require 'cucumber/term/ansicolor'
13
13
  module Cucumber
14
14
  class << self
15
15
  attr_accessor :wants_to_quit
16
-
16
+
17
17
  def logger
18
18
  return @log if @log
19
19
  @log = Logger.new(STDOUT)
20
20
  @log.level = Logger::INFO
21
21
  @log
22
22
  end
23
-
23
+
24
24
  def logger=(logger)
25
25
  @log = logger
26
26
  end
@@ -27,4 +27,4 @@ module Cucumber
27
27
  # for an example.
28
28
  module Ast
29
29
  end
30
- end
30
+ end
@@ -22,7 +22,7 @@ module Cucumber
22
22
 
23
23
  def step_collection(step_invocations)
24
24
  init
25
- unless(@first_collection_created)
25
+ unless((defined? @first_collection_created) and @first_collection_created)
26
26
  @first_collection_created = true
27
27
  @step_invocations.dup(step_invocations)
28
28
  else
@@ -36,14 +36,14 @@ module Cucumber
36
36
  visitor.visit_comment(@comment) unless @comment.empty?
37
37
  visitor.visit_background_name(@keyword, name, file_colon_line(@line), source_indent(first_line_length))
38
38
  with_visitor(hook_context, visitor) do
39
- visitor.step_mother.before(hook_context)
39
+ visitor.runtime.before(hook_context)
40
40
  skip_invoke! if failed?
41
41
  visitor.visit_steps(@step_invocations)
42
42
  @failed = @step_invocations.detect{|step_invocation| step_invocation.exception || step_invocation.status != :passed }
43
- visitor.step_mother.after(hook_context) if @failed || @feature_elements.empty?
43
+ visitor.runtime.after(hook_context) if @failed || @feature_elements.empty?
44
44
  end
45
45
  end
46
-
46
+
47
47
  def with_visitor(scenario, visitor)
48
48
  @current_visitor = visitor
49
49
  init
@@ -55,7 +55,7 @@ module Cucumber
55
55
  yield
56
56
  end
57
57
  end
58
-
58
+
59
59
  def accept_hook?(hook)
60
60
  init
61
61
  if hook_context != self
@@ -71,7 +71,11 @@ module Cucumber
71
71
  end
72
72
 
73
73
  def failed?
74
- @failed
74
+ if defined? @failed
75
+ return @failed
76
+ else
77
+ return nil
78
+ end
75
79
  end
76
80
 
77
81
  def hook_context
@@ -92,7 +96,7 @@ module Cucumber
92
96
  def fail!(exception)
93
97
  @failed = true
94
98
  @exception = exception
95
- @current_visitor.visit_exception(@exception, :failed)
99
+ @current_visitor.visit_exception(@exception, :failed)
96
100
  end
97
101
 
98
102