diff options
Diffstat (limited to 'test/inlinetest.rb')
-rw-r--r-- | test/inlinetest.rb | 52 |
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 |