From 87f80a7dd7ab801e6645a22a33d3a818daa861e4 Mon Sep 17 00:00:00 2001 From: suke Date: Fri, 25 Jul 2008 11:59:53 +0000 Subject: [PATCH] * 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 --- ChangeLog | 9 +++- test/win32ole/err_in_callback.rb | 11 ++++ test/win32ole/test_err_in_callback.rb | 73 +++++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 test/win32ole/err_in_callback.rb create mode 100644 test/win32ole/test_err_in_callback.rb diff --git a/ChangeLog b/ChangeLog index 3f70215c80..e6f88e7c5f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,17 @@ +Fri Jul 25 20:52:44 2008 Masaki Suketa + + * test/win32ole/err_in_callback.rb : add test of raising + exception in WIN32OLE_EVENT callback. + + * test/win32ole/test_err_in_callback.rb : ditto. + Fri Jul 25 20:43:57 2008 Masaki Suketa * ext/win32ole/win32ole.c (Init_win32ole): add WIN32OLE_EVENT#off_event. * test/win32ole/test_win32ole_event.rb: ditto. - + * test/win32ole/test_win32ole_event.rb: some refactoring. Fri Jul 25 19:50:49 2008 Nobuyoshi Nakada 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