summaryrefslogtreecommitdiff
path: root/test/inlinetest.rb
diff options
context:
space:
mode:
authorAnas Nashif <anas.nashif@intel.com>2012-11-06 11:57:02 -0800
committerAnas Nashif <anas.nashif@intel.com>2012-11-06 11:57:02 -0800
commit3b35de2a90e26b99e2a6d4f61dc56d6ce7ded748 (patch)
treef66334a0ad8cf59590dd682d95d6244e8b454853 /test/inlinetest.rb
downloadruby-3b35de2a90e26b99e2a6d4f61dc56d6ce7ded748.tar.gz
ruby-3b35de2a90e26b99e2a6d4f61dc56d6ce7ded748.tar.bz2
ruby-3b35de2a90e26b99e2a6d4f61dc56d6ce7ded748.zip
Imported Upstream version 1.9.3.p194upstream/1.9.3.p194
Diffstat (limited to 'test/inlinetest.rb')
-rw-r--r--test/inlinetest.rb55
1 files changed, 55 insertions, 0 deletions
diff --git a/test/inlinetest.rb b/test/inlinetest.rb
new file mode 100644
index 0000000..4628736
--- /dev/null
+++ b/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