summaryrefslogtreecommitdiff
path: root/jni/ruby/test/win32ole/test_err_in_callback.rb
diff options
context:
space:
mode:
Diffstat (limited to 'jni/ruby/test/win32ole/test_err_in_callback.rb')
-rw-r--r--jni/ruby/test/win32ole/test_err_in_callback.rb55
1 files changed, 55 insertions, 0 deletions
diff --git a/jni/ruby/test/win32ole/test_err_in_callback.rb b/jni/ruby/test/win32ole/test_err_in_callback.rb
new file mode 100644
index 0000000..cae6d49
--- /dev/null
+++ b/jni/ruby/test/win32ole/test_err_in_callback.rb
@@ -0,0 +1,55 @@
+#
+# test Win32OLE avoids cfp consistency error when the exception raised
+# in WIN32OLE_EVENT handler block. [ruby-dev:35450]
+#
+
+begin
+ require 'win32ole'
+rescue LoadError
+end
+if defined?(WIN32OLE)
+ require 'mkmf'
+ require 'pathname'
+ require 'test/unit'
+ require 'tmpdir'
+ class TestErrInCallBack < Test::Unit::TestCase
+ def setup
+ @ruby = nil
+ if File.exist?("./" + CONFIG["RUBY_INSTALL_NAME"] + CONFIG["EXEEXT"])
+ sep = File::ALT_SEPARATOR || "/"
+ @ruby = "." + sep + CONFIG["RUBY_INSTALL_NAME"]
+ cwd = Pathname.new(File.expand_path('.'))
+ @iopt = $:.map {|e|
+ " -I " + (Pathname.new(e).relative_path_from(cwd).to_s rescue e)
+ }.join("")
+ script = File.join(File.dirname(__FILE__), "err_in_callback.rb")
+ @script = Pathname.new(script).relative_path_from(cwd).to_s rescue script
+ end
+ end
+
+ def available_adodb?
+ begin
+ WIN32OLE.new('ADODB.Connection')
+ rescue WIN32OLERuntimeError
+ return false
+ end
+ return true
+ end
+
+ def test_err_in_callback
+ skip "'ADODB.Connection' is not available" unless available_adodb?
+ if @ruby
+ Dir.mktmpdir do |tmpdir|
+ logfile = File.join(tmpdir, "test_err_in_callback.log")
+ cmd = "#{@ruby} -v #{@iopt} #{@script} > #{logfile.gsub(%r(/), '\\')} 2>&1"
+ system(cmd)
+ str = ""
+ open(logfile) {|ifs|
+ str = ifs.read
+ }
+ assert_match(/NameError/, str)
+ end
+ end
+ end
+ end
+end