ENV['MSPEC_RUNNER'] = '1' require 'fileutils' require 'spec/spec_helper' $VERBOSE=nil def exclude_dir(file, dir="D:/work/jruby-dev/jruby/build/rubyspec/code/spec/data") if dir[0] == ?/ m = file.match %r[.*spec/(.*)/.*_spec.rb] m ? File.join(dir, m[1]) : dir else File.join(File.dirname(file), dir) end end def exclude_name(file) File.join(exclude_dir(file), File.basename(file, '.*').sub(/_spec$/, '_excludes') + '.txt') end def create_exclude_file(file) File.open(exclude_name(file), "w") end def mk_exclude_dir(file) dir = exclude_dir(file) FileUtils.mkdir_p(dir) unless File.exist?(dir) end def read_excludes(file) begin File.open(file) do |f| return f.readlines.map { |l| Regexp.new(Regexp.escape(l.chomp)) } end rescue Errno::ENOENT [] end end all_excludes = read_excludes("spec/data/critical.txt") set_spec_runner(DottedFormatter) spec_runner.formatter.print_start ["spec/ruby/1.8/core/array/append_spec.rb", "spec/ruby/1.8/core/array/array_spec.rb", "spec/ruby/1.8/core/array/assoc_spec.rb", "spec/ruby/1.8/core/array/at_spec.rb", "spec/compiler/scopes_spec.rb", "spec/compiler/simple_spec.rb", "spec/compiler/variables_spec.rb", "spec/parser/sexp_spec.rb", "spec/parser/symbol_spec.rb"].each do |file| mk_exclude_dir(file) spec_runner.formatter.out = STDOUT excludes = read_excludes(exclude_name(file)) spec_runner.except(*all_excludes) spec_runner.except(*excludes) begin STDERR.print(nil || "\n#{file.ljust(60)}") if false load file unless :run == :invert && all_excludes.empty? && excludes.empty? rescue Exception => e puts "#{e} loading #{file}" ensure spec_runner.clear_filters if :run == :create exclude = exclude_name(file) File.delete exclude if File.zero?(exclude) end end end spec_runner.formatter.summary tally = spec_runner.formatter.tally exit(tally.failures + tally.errors)