lib/testrbl.rb in testrbl-0.1.2 vs lib/testrbl.rb in testrbl-0.1.3

- old
+ new

@@ -1,21 +1,22 @@ require 'testrbl/version' module Testrbl PATTERNS = [ - /^\s+(?:should|context)\s+['"](.*)['"]\s+do\s*$/, - /^\s+def\s+test_([a-z_\d]+)\s*$/ + /^(\s+)(?:should|context|test)\s+['"](.*)['"]\s+do\s*$/, + /^(\s+)def\s+test_([a-z_\d]+)\s*$/ ] def self.run_from_cli(argv) # we only work with 1 file with line-number, everything else gets passed thourgh if argv.join(" ") !~ /^\S+:\d+$/ run "testrb #{argv.map{|a| a.include?(' ') ? "'#{a}'" : a }.join(' ')}" end file, line = argv.first.split(':') - run "testrb #{file} #{pattern_from_file(file, line)}" + file = "./#{file}" if file =~ /^[a-z]/ # fix 1.9 not being able to load local files + run "testrb #{file} -n '/#{pattern_from_file(file, line)}/'" end def self.run(command) safe_to_bundle_exec = (File.exist?('Gemfile.lock') and File.read('Gemfile.lock').include?(" test-unit ")) command = "#{"bundle exec " if safe_to_bundle_exec}#{command} --use-color" @@ -26,14 +27,26 @@ private def self.pattern_from_file(file, line) content = File.readlines(file) search = content[0..(line.to_i-1)].reverse - search.each do |line| - PATTERNS.each do |r| - return "-n '/#{Regexp.escape($1.gsub('\'',"."))}/'" if line =~ r - end + + last_spaces = " " * 100 + found = search.map{|line| pattern_from_line(line) }.compact + puts found.inspect + + found.select! do |spaces, name| + last_spaces = spaces if spaces.size < last_spaces.size end + return found.reverse.map(&:last).join(".*") if found.size > 0 + raise "no test found before line #{line}" + end + + def self.pattern_from_line(line) + PATTERNS.each do |r| + return [$1, Regexp.escape($2).gsub("'",".").gsub("\\ "," ")] if line =~ r + end + nil end end