Module: Rails::TestUnit::TestParser
| Relationships & Source Files | |
| 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
-
.definition_for(method)
Helper to translate a method object into the path and line range where the method was defined.
- .ranges(filepath) private
Class Method Details
.definition_for(method)
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 13
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
.ranges(filepath) (private)
[ GitHub ]# File 'railties/lib/rails/test_unit/test_parser.rb', line 21
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