class Rails::TestUnit::TestParser
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)
Public Class Methods
Helper to translate a method object into the path and line range where the method was defined.
# File railties/lib/rails/test_unit/test_parser.rb, line 19 def self.definition_for(method) filepath, start_line = method.source_location @begins_to_ends[filepath] ||= ranges(filepath) return unless end_line = @begins_to_ends[filepath][start_line] [filepath, start_line..end_line] end
# File railties/lib/rails/test_unit/test_parser.rb, line 27 def self.ranges(filepath) queue = [Prism.parse_file(filepath).value] begins_to_ends = {} while (node = queue.shift) case node.type when :def_node begins_to_ends[node.location.start_line] = node.location.end_line when :call_node begins_to_ends[node.location.start_line] = node.location.end_line end queue.concat(node.compact_child_nodes) end begins_to_ends end