123456789_123456789_123456789_123456789_123456789_

Class: Rails::TestUnit::TestParser

Do not use. This class is for internal use only.
Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Ripper
Instance Chain:
self, Ripper
Inherits: Ripper
  • ::Object
Defined in: railties/lib/rails/test_unit/test_parser.rb

Overview

Parse a test file to extract the line ranges of all tests in both method-style (def test_foo) and declarative-style (test “foo” do)

Class Method Summary

Instance Method Summary

Constructor Details

.newTestParser

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 67

def initialize(*)
  # A hash mapping the 1-indexed line numbers that tests start on to where they end.
  @begins_to_ends = {}
  super
end

Instance Method Details

#first_arg(arg) Also known as: #on_method_add_arg, #on_command, #on_stmts_add, #on_arg_paren, #on_bodystmt

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 104

def first_arg(arg, *)
  arg
end

#just_lineno Also known as: #on_ident, #on_do_block, #on_stmts_new, #on_brace_block

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 108

def just_lineno(*)
  lineno
end

#on_arg_paren(arg)

Alias for #first_arg.

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 115

alias on_arg_paren first_arg

#on_args_add(parts, part)

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 127

def on_args_add(parts, part)
  parts << part
end

#on_args_add_block(args, *rest)

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 131

def on_args_add_block(args, *rest)
  args.first
end

#on_args_new

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 123

def on_args_new
  []
end

#on_bodystmt(arg)

Alias for #first_arg.

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 116

alias on_bodystmt first_arg

#on_brace_block

Alias for #just_lineno.

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 121

alias on_brace_block just_lineno

#on_command(arg)

Alias for #first_arg.

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 113

alias on_command first_arg

#on_command_call(begin_lineno, _args)

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 100

def on_command_call(*, begin_lineno, _args)
  begin_lineno
end

#on_def(begin_line)

method test e.g. def test_some_description This event’s first argument gets the ident node containing the method name, which we have overridden to return the line number of the ident instead.

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 82

def on_def(begin_line, *)
  @begins_to_ends[begin_line] = lineno
end

#on_do_block

Alias for #just_lineno.

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 119

alias on_do_block just_lineno

#on_ident

Alias for #just_lineno.

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 118

alias on_ident just_lineno

#on_method_add_arg(arg)

Alias for #first_arg.

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 112

alias on_method_add_arg first_arg

#on_method_add_block(begin_line, end_line)

Everything past this point is to support declarative tests, which require more work to get right because of the many different ways methods can be invoked in ruby, all of which are parsed differently.

The approach is just to store the current line number when the “test” method is called and pass it up the tree so it’s available at the point when we also know the line where the associated block ends.

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 94

def on_method_add_block(begin_line, end_line)
  if begin_line && end_line
    @begins_to_ends[begin_line] = end_line
  end
end

#on_stmts_add(arg)

Alias for #first_arg.

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 114

alias on_stmts_add first_arg

#on_stmts_new

Alias for #just_lineno.

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 120

alias on_stmts_new just_lineno

#parse

[ GitHub ]

  
# File 'railties/lib/rails/test_unit/test_parser.rb', line 73

def parse
  super
  @begins_to_ends
end