summaryrefslogtreecommitdiff
path: root/test/win32ole
diff options
context:
space:
mode:
authorsuke <suke@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-07-25 11:59:53 +0000
committersuke <suke@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-07-25 11:59:53 +0000
commit87f80a7dd7ab801e6645a22a33d3a818daa861e4 (patch)
tree55b8e4ea6073b41da89ae1509abdf21b35a6bf29 /test/win32ole
parent4aec73e1edfdd743828c0172a66f655223100c38 (diff)
* 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
Diffstat (limited to 'test/win32ole')
-rw-r--r--test/win32ole/err_in_callback.rb11
-rw-r--r--test/win32ole/test_err_in_callback.rb73
2 files changed, 84 insertions, 0 deletions
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("<html><body><div id='str'>#{@str}</div></body></html>")
+ 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