summaryrefslogtreecommitdiff
path: root/test/inlinetest.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/inlinetest.rb')
-rw-r--r--test/inlinetest.rb52
1 files changed, 52 insertions, 0 deletions
diff --git a/test/inlinetest.rb b/test/inlinetest.rb
new file mode 100644
index 0000000000..cd1ee0c683
--- /dev/null
+++ b/test/inlinetest.rb
@@ -0,0 +1,52 @@
+module InlineTest
+ def loadtest(libname)
+ in_critical do
+ in_progname(libpath(libname)) do
+ Kernel.load(libname)
+ end
+ end
+ end
+ module_function :loadtest
+
+ def loadtest__END__part(libname)
+ program = File.open(libpath(libname)) { |f| f.read }
+ mainpart, endpart = program.split(/^__END__$/)
+ if endpart.nil?
+ raise RuntimeError.new("No __END__ part in the library '#{filename}'")
+ end
+ require(libname)
+ eval(endpart)
+ end
+ module_function :loadtest__END__part
+
+ def self.in_critical
+ th_criticality = Thread.critical
+ Thread.critical = true
+ begin
+ yield
+ ensure
+ Thread.critical = th_criticality
+ end
+ end
+
+ def self.in_progname(progname)
+ progname_backup = $0.dup
+ $0.replace(progname)
+ begin
+ yield
+ ensure
+ $0.replace(progname_backup)
+ 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