def unit_test(gem_spec)
start_dir = Dir.pwd
Dir.chdir(gem_spec.full_gem_path)
$: << File.join(Gem.dir, "gems", gem_spec.full_name)
test_files = gem_spec.test_files
if test_files.empty?
say "There are no unit tests to run for #{gem_spec.full_name}"
require 'test/unit/ui/console/testrunner'
return Test::Unit::TestResult.new
end
gem gem_spec.name, "= #{gem_spec.version.version}"
test_files.each do |f| require f end
suite = Test::Unit::TestSuite.new("#{gem_spec.name}-#{gem_spec.version}")
ObjectSpace.each_object(Class) do |klass|
suite << klass.suite if (klass < Test::Unit::TestCase)
end
result = TestRunner.run(suite, ui())
unless result.passed?
alert_error(result.to_s)
end
result
ensure
Dir.chdir(start_dir)
end