All pastes #885344 Raw Edit

Untitled

public text v1 · immutable
#885344 ·published 2008-01-30 21:34 UTC
rendered paste body
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)