From 87f80a7dd7ab801e6645a22a33d3a818daa861e4 Mon Sep 17 00:00:00 2001 From: suke Date: Fri, 25 Jul 2008 11:59:53 +0000 Subject: * test/win32ole/err_in_callback.rb : add test of raising exception in WIN32OLE_EVENT callback. * test/win32ole/test_err_in_callback.rb : ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18215 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/win32ole/err_in_callback.rb | 11 ++++++ test/win32ole/test_err_in_callback.rb | 73 +++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 test/win32ole/err_in_callback.rb create mode 100644 test/win32ole/test_err_in_callback.rb (limited to 'test') diff --git a/test/win32ole/err_in_callback.rb b/test/win32ole/err_in_callback.rb new file mode 100644 index 0000000000..03888697e8 --- /dev/null +++ b/test/win32ole/err_in_callback.rb @@ -0,0 +1,11 @@ +require 'win32ole' +ie = WIN32OLE.new('InternetExplorer.Application') +ie.visible = true +WIN32OLE_EVENT.message_loop +sleep 0.2 +ev = WIN32OLE_EVENT.new(ie) + +ev.on_event('BeforeNavigate2') {|*args| + foo +} +ie.navigate(ARGV.shift) diff --git a/test/win32ole/test_err_in_callback.rb b/test/win32ole/test_err_in_callback.rb new file mode 100644 index 0000000000..c8c9c44e81 --- /dev/null +++ b/test/win32ole/test_err_in_callback.rb @@ -0,0 +1,73 @@ +# +# test Win32OLE avoids cfp consistency error when the exception raised +# in WIN32OLE_EVENT handler block. [ruby-dev:35450] +# + +begin + require 'win32ole' +rescue LoadError +end +require 'rbconfig' +require 'mkmf' +require 'test/unit' +if defined?(WIN32OLE) + class TestErrInCallBack < Test::Unit::TestCase + def setup + @ruby = nil + if File.exist?("./" + CONFIG["RUBY_INSTALL_NAME"] + CONFIG["EXEEXT"]) + @ruby = "./" + CONFIG["RUBY_INSTALL_NAME"] + @iopt = $:.map {|e| + " -I " + e + }.join("") + @script = File.dirname(__FILE__) + "/err_in_callback.rb" + @param = create_temp_html + @param = "file:///" + @param.gsub(/\\/, '/') + end + end + + def create_temp_html + fso = WIN32OLE.new('Scripting.FileSystemObject') + dummy_file = fso.GetTempName + ".html" + cfolder = fso.getFolder(".") + @str = "This is test HTML file for Win32OLE (#{Time.now})" + f = cfolder.CreateTextFile(dummy_file) + f.writeLine("
#{@str}
") + f.close + dummy_path = cfolder.path + "\\" + dummy_file + dummy_path + end + + def test_err_in_callback + if @ruby + r = `#{@ruby} #{@iopt} #{@script} #{@param}` + assert_match(/NameError/, r) + end + end + + def ie_quit + sh = WIN32OLE.new('Shell.Application') + sh.windows.each do |w| + if w.ole_type.name == 'IWebBrowser2' + 20.times do |i| + if w.locationURL != "" && w.document + break + end + WIN32OLE_EVENT.message_loop + sleep 1 + end + e = w.document.getElementById("str") + if e && e.innerHTML == @str + w.quit + WIN32OLE_EVENT.message_loop + sleep 0.2 + end + end + end + end + + def teardown + WIN32OLE_EVENT.message_loop + ie_quit + end + end +end -- cgit v1.2.3