晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/alt/ruby19/lib64/ruby/1.9.1/test/unit/ |
| Current File : //opt/alt/ruby19/lib64/ruby/1.9.1/test/unit/parallel.rb |
require 'test/unit'
module Test
module Unit
class Worker < Runner
class << self
undef autorun
end
alias orig_run_suite _run_suite
undef _run_suite
undef _run_suites
undef run
def increment_io(orig)
*rest, io = 32.times.inject([orig.dup]){|ios, | ios << ios.last.dup }
rest.each(&:close)
io
end
def _run_suites(suites, type)
suites.map do |suite|
_run_suite(suite, type)
end
end
def _run_suite(suite, type)
r = report.dup
orig_testout = MiniTest::Unit.output
i,o = IO.pipe
MiniTest::Unit.output = o
orig_stdin, orig_stdout = $stdin, $stdout
th = Thread.new do
begin
while buf = (self.verbose ? i.gets : i.read(5))
@stdout.puts "p #{[buf].pack("m").gsub("\n","")}"
end
rescue IOError
rescue Errno::EPIPE
end
end
e, f, s = @errors, @failures, @skips
begin
result = orig_run_suite(suite, type)
rescue Interrupt
@need_exit = true
result = [nil,nil]
end
MiniTest::Unit.output = orig_testout
$stdin = orig_stdin
$stdout = orig_stdout
o.close
begin
th.join
rescue IOError
raise unless ["stream closed","closed stream"].include? $!.message
end
i.close
result << (report - r)
result << [@errors-e,@failures-f,@skips-s]
result << ($: - @old_loadpath)
result << suite.name
begin
@stdout.puts "done #{[Marshal.dump(result)].pack("m").gsub("\n","")}"
rescue Errno::EPIPE; end
return result
ensure
MiniTest::Unit.output = orig_stdout
$stdin = orig_stdin
$stdout = orig_stdout
o.close if o && !o.closed?
i.close if i && !i.closed?
end
def run(args = [])
process_args args
@@stop_auto_run = true
@opts = @options.dup
@need_exit = false
@old_loadpath = []
begin
@stdout = increment_io(STDOUT)
@stdin = increment_io(STDIN)
@stdout.sync = true
@stdout.puts "ready"
while buf = @stdin.gets
case buf.chomp
when /^loadpath (.+?)$/
@old_loadpath = $:.dup
$:.push(*Marshal.load($1.unpack("m")[0].force_encoding("ASCII-8BIT"))).uniq!
when /^run (.+?) (.+?)$/
@stdout.puts "okay"
@options = @opts.dup
suites = MiniTest::Unit::TestCase.test_suites
begin
require $1
rescue LoadError
@stdout.puts "after #{[Marshal.dump([$1, $!])].pack("m").gsub("\n","")}"
@stdout.puts "ready"
next
end
_run_suites MiniTest::Unit::TestCase.test_suites-suites, $2.to_sym
if @need_exit
begin
@stdout.puts "bye"
rescue Errno::EPIPE; end
exit
else
@stdout.puts "ready"
end
when /^quit$/
begin
@stdout.puts "bye"
rescue Errno::EPIPE; end
exit
end
end
rescue Errno::EPIPE
rescue Exception => e
begin
@stdout.puts "bye #{[Marshal.dump(e)].pack("m").gsub("\n","")}"
rescue Errno::EPIPE;end
exit
ensure
@stdin.close
@stdout.close
end
end
end
end
end
if $0 == __FILE__
module Test
module Unit
class TestCase < MiniTest::Unit::TestCase
def on_parallel_worker?
true
end
end
end
end
require 'rubygems'
class Gem::TestCase < MiniTest::Unit::TestCase
@@project_dir = File.expand_path('../../../..', __FILE__)
end
Test::Unit::Worker.new.run(ARGV)
end
|