Merge pull request #1128 from voxik/patch-1
[rubygems] / .autotest
1 # -*- ruby -*-
2
3 Gem.refresh
4
5 require 'autotest/restart'
6 require 'autotest/isolate'
7
8 Autotest.add_hook :run_command do |_, cmd|
9   cmd.sub! ' -e ', ' -we '
10 end
11
12 Autotest.add_hook :initialize do |at|
13   at.testlib = ''
14
15   at.failed_results_re = /^\s+\d+\) (?:Failure|Error):\n(.*?):/
16   at.completed_re = /\d+ tests, \d+ assertions, \d+ failures, \d+ errors/
17
18   at.add_exception %r%/\.git/%
19   at.add_exception %r%\.rbc$%
20   at.add_exception %r%test/rubygems/rubygems%
21
22   at.find_directories.clear
23   at.find_directories.push 'lib', 'test'
24
25   at.add_mapping %r%^lib/rubygems.rb$% do |_, m|
26     "test/rubygems/test_gem.rb"
27   end
28
29   at.add_mapping %r%^lib/rubygems/(.*).rb$% do |_, m|
30     "test/rubygems/test_gem_#{m[1].gsub '/', '_'}.rb"
31   end
32
33   args = ARGV.reject { |a| a =~ /^-/ }
34   at.find_directories = args unless args.empty?
35
36   def at.handle_results results
37     results = results.gsub(/\e\[\d+m/, '') # strip ascii color
38     failed = results.scan(self.failed_results_re).map { |m, k|
39       /(?<k>\w+)#(?<m>\w+)/ =~ m
40       [m, k]
41     }
42
43     completed = results[self.completed_re]
44
45     if completed then
46       completed = completed.scan(/(\d+) (\w+)/).map { |v, k| [k, v.to_i] }
47
48       self.latest_results = Hash[*completed.flatten]
49       self.files_to_test  = consolidate_failures failed
50
51       color = failed.empty? ? :green : :red
52       hook color unless $TESTING
53     else
54       self.latest_results = nil
55     end
56
57     self.tainted = true unless self.files_to_test.empty?
58   end
59
60   def at.path_to_classname s
61     sep = File::SEPARATOR
62
63     f = s.sub(/^test#{sep}rubygems#{sep}/, '').sub(/\.rb$/, '').split sep
64
65     f = f.map { |path| path.split(/_|(\d+)/).map { |seg| seg.capitalize }.join }
66
67     f.join('::').
68       gsub('Rdoc', 'RDoc').
69       gsub('GemDependencyApi', 'GemDependencyAPI')
70   end
71 end