diff options
author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:02:05 +0000 |
---|---|---|
committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:02:05 +0000 |
commit | 0dc342de848a642ecce8db697b8fecd83a63e117 (patch) | |
tree | 2b7ed4724aff1f86073e4740134bda9c4aac1a39 /trunk/test/inlinetest.rb | |
parent | ef70cf7138ab8034b5b806f466e4b484b24f0f88 (diff) |
added tag v1_9_0_4
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_9_0_4@18845 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'trunk/test/inlinetest.rb')
-rw-r--r-- | trunk/test/inlinetest.rb | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/trunk/test/inlinetest.rb b/trunk/test/inlinetest.rb new file mode 100644 index 0000000000..46287364a9 --- /dev/null +++ b/trunk/test/inlinetest.rb @@ -0,0 +1,55 @@ +module InlineTest + def eval_part(libname, sep, part) + path = libpath(libname) + program = File.open(path) { |f| f.read } + mainpart, endpart = program.split(sep) + if endpart.nil? + raise RuntimeError.new("No #{part} part in the library '#{path}'") + end + eval(endpart, TOPLEVEL_BINDING, path, mainpart.count("\n")+1) + end + module_function :eval_part + + def loadtest(libname) + require(libname) + in_critical do + in_progname(libpath(libname)) do + eval_part(libname, /^(?=if\s+(?:\$0\s*==\s*__FILE__|__FILE__\s*==\s*\$0)(?:[\#\s]|$))/, '$0 == __FILE__') + end + end + end + module_function :loadtest + + def loadtest__END__part(libname) + require(libname) + eval_part(libname, /^__END__\r?$/, '__END__') + end + module_function :loadtest__END__part + + @mutex = Mutex.new + + def self.in_critical(&block) + @mutex.synchronize(&block) + end + + def self.in_progname(progname) + $program_name = progname + alias $0 $program_name + begin + yield + ensure + alias $0 $PROGRAM_NAME + end + end + + def self.libpath(libname) + libpath = nil + $:.find do |path| + File.file?(testname = File.join(path, libname)) && libpath = testname + end + if libpath.nil? + raise RuntimeError.new("'#{libname}' not found") + end + libpath + end +end |