Skip to content

NilClass exception when steps contain docstrings #1

Description

@lancejjohnson

Using 'Slowhandcuke::Formatter' when steps include docstrings results in a NilClass exception.

I've included one example. I've tested this with other docstrings (e.g. """Hello world""", and other json) and the result is the same. I've also tested this using -f pretty without slowhandcuke and the exception does not occur.

Example (from The Cucumber Book):

Feature: Fruit List

  Scenario: List fruit
    Given the system knows about fruit
    When the client request GET /fruits
    Then the response should be JSON:
      """
      [
        {"name": "banana", "color": "yellow"},
        {"name": "strawberry", "color": "red"}
      ]
      """

Run cucumber

cucumber features/fruit_list.feature -f 'Slowhandcuke::Formatter'

Results in:

undefined method `status' for nil:NilClass (NoMethodError)
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/formatter/pretty.rb:164:in `doc_string'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:181:in `block in send_to_all'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:179:in `each'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:179:in `send_to_all'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:173:in `broadcast'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:133:in `visit_doc_string'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/doc_string.rb:39:in `accept'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:124:in `block in visit_multiline_arg'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:170:in `broadcast'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:123:in `visit_multiline_arg'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:113:in `block in visit_step_result'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:170:in `broadcast'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:111:in `visit_step_result'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/step_invocation.rb:43:in `visit_step_result'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/step_invocation.rb:39:in `accept'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:106:in `block in visit_step'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:170:in `broadcast'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:105:in `visit_step'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/step_collection.rb:19:in `block in accept'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/step_collection.rb:18:in `each'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/step_collection.rb:18:in `accept'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:100:in `block in visit_steps'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:170:in `broadcast'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:99:in `visit_steps'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:15:in `block in execute'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/runtime.rb:82:in `block (2 levels) in with_hooks'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/runtime.rb:98:in `before_and_after'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/runtime.rb:81:in `block in with_hooks'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/runtime/support_code.rb:123:in `call'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/runtime/support_code.rb:123:in `around'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/runtime.rb:93:in `around'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/runtime.rb:80:in `with_hooks'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:13:in `execute'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/scenario.rb:32:in `block in accept'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/scenario.rb:79:in `with_visitor'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/scenario.rb:31:in `accept'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:58:in `block in visit_feature_element'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:170:in `broadcast'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:57:in `visit_feature_element'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/feature.rb:38:in `block in accept'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/feature.rb:37:in `each'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/feature.rb:37:in `accept'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:27:in `block in visit_feature'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:170:in `broadcast'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:26:in `visit_feature'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/features.rb:28:in `block in accept'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/features.rb:17:in `each'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/features.rb:17:in `each'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/features.rb:27:in `accept'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:21:in `block in visit_features'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:170:in `broadcast'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/ast/tree_walker.rb:20:in `visit_features'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/runtime.rb:48:in `run!'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/lib/cucumber/cli/main.rb:47:in `execute!'
/usr/local/var/rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/cucumber-1.3.8/bin/cucumber:13:in `<top (required)>'
/usr/local/var/rbenv/versions/2.0.0-p247/bin/cucumber:23:in `load'
/usr/local/var/rbenv/versions/2.0.0-p247/bin/cucumber:23:in `<main>'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions