Class | Spec::Runner::SpecParser |
In: |
vendor/plugins/rspec/lib/spec/runner/spec_parser.rb
|
Parent: | Object |
Parses a spec file and finds the nearest example for a given line number.
# File vendor/plugins/rspec/lib/spec/runner/spec_parser.rb, line 7 7: def initialize 8: @best_match = {} 9: end
# File vendor/plugins/rspec/lib/spec/runner/spec_parser.rb, line 11 11: def spec_name_for(file, line_number) 12: best_match.clear 13: file = File.expand_path(file) 14: rspec_options.example_groups.each do |example_group| 15: consider_example_groups_for_best_match example_group, file, line_number 16: 17: example_group.examples.each do |example| 18: consider_example_for_best_match example, example_group, file, line_number 19: end 20: end 21: if best_match[:example_group] 22: if best_match[:example] 23: "#{best_match[:example_group].description} #{best_match[:example].description}" 24: else 25: best_match[:example_group].description 26: end 27: else 28: nil 29: end 30: end
# File vendor/plugins/rspec/lib/spec/runner/spec_parser.rb, line 45 45: def consider_example_for_best_match(example, example_group, file, line_number) 46: parsed_backtrace = parse_backtrace(example.implementation_backtrace) 47: parsed_backtrace.each do |example_file, example_line| 48: if is_best_match?(file, line_number, example_file, example_line) 49: best_match.clear 50: best_match[:example_group] = example_group 51: best_match[:example] = example 52: best_match[:line] = example_line 53: end 54: end 55: end
# File vendor/plugins/rspec/lib/spec/runner/spec_parser.rb, line 34 34: def consider_example_groups_for_best_match(example_group, file, line_number) 35: parsed_backtrace = parse_backtrace(example_group.registration_backtrace) 36: parsed_backtrace.each do |example_file, example_line| 37: if is_best_match?(file, line_number, example_file, example_line) 38: best_match.clear 39: best_match[:example_group] = example_group 40: best_match[:line] = example_line 41: end 42: end 43: end
# File vendor/plugins/rspec/lib/spec/runner/spec_parser.rb, line 57 57: def is_best_match?(file, line_number, example_file, example_line) 58: file == File.expand_path(example_file) && 59: example_line <= line_number && 60: example_line > best_match[:line].to_i 61: end