From 2bdd9d6eba7f2088e017ae80e0029c236eeb47e0 Mon Sep 17 00:00:00 2001 From: suke Date: Mon, 1 May 2006 09:05:08 +0000 Subject: ext/win32ole/win32ole.c (add_event_call_back): should not delete event handler when the event name is not entried. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@10125 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/win32ole/test_folderitem2_invokeverb.rb | 80 +++++++++++++++++++++++ test/win32ole/test_nil2vtempty.rb | 32 +++++++++ test/win32ole/test_win32ole_event.rb | 98 ++++++++++++++++++++++++++++ 3 files changed, 210 insertions(+) create mode 100644 test/win32ole/test_folderitem2_invokeverb.rb create mode 100644 test/win32ole/test_nil2vtempty.rb create mode 100644 test/win32ole/test_win32ole_event.rb (limited to 'test') diff --git a/test/win32ole/test_folderitem2_invokeverb.rb b/test/win32ole/test_folderitem2_invokeverb.rb new file mode 100644 index 0000000000..0707684681 --- /dev/null +++ b/test/win32ole/test_folderitem2_invokeverb.rb @@ -0,0 +1,80 @@ +# +# This script check that Win32OLE can execute InvokeVerb method of FolderItem2. +# + +begin + require 'win32ole' +rescue +end + +require 'test/unit' + +if defined?(WIN32OLE) + class TestInvokeVerb < Test::Unit::TestCase + def setup + # + # make dummy.txt file for InvokeVerb test. + # + + @fso = WIN32OLE.new('Scripting.FileSystemObject') + @dummy_path = @fso.GetTempName + @cfolder = @fso.getFolder(".") + f = @cfolder.CreateTextFile(@dummy_path) + f.close + @dummy_path = @cfolder.path + "\\" + @dummy_path + + @shell=WIN32OLE.new('Shell.Application') + @fi2 = @shell.NameSpace(@dummy_path).ParentFolder.ParseName(@shell.NameSpace(@dummy_path).Title) + @shortcut = nil + + # + # Search the 'Create Shortcut (&S)' string. + # Yes, I know the string in the Windows 2000 Japanese Edition. + # But I do not know about the string in any other Windows. + # + verbs = @fi2.verbs + verbs.extend(Enumerable) + @shortcut = verbs.collect{|verb| + verb.name + }.find {|name| + /.*\(\&S\)$/ =~ name + } + end + + def find_link(path) + arlink = [] + @cfolder.files.each do |f| + if /\.lnk$/ =~ f.path + linkinfo = @shell.NameSpace(f.path).self.getlink + arlink.push f if linkinfo.path == path + end + end + arlink + end + + def test_invokeverb + links = find_link(@dummy_path) + assert(0, links.size) + + # Now create shortcut to @dummy_path + assert(@shortcut) + arg = WIN32OLE_VARIANT.new(@shortcut) + @fi2.InvokeVerb(arg) + + # Now search shortcut to @dummy_path + links = find_link(@dummy_path) + assert(1, links.size) + @lpath = links[0].path + end + + def teardown + if @lpath + @fso.deleteFile(@lpath) + end + if @dummy_path + @fso.deleteFile(@dummy_path) + end + end + + end +end diff --git a/test/win32ole/test_nil2vtempty.rb b/test/win32ole/test_nil2vtempty.rb new file mode 100644 index 0000000000..2576415a8d --- /dev/null +++ b/test/win32ole/test_nil2vtempty.rb @@ -0,0 +1,32 @@ +# This is test script to check that WIN32OLE should convert nil to VT_EMPTY in second try. +# [ruby-talk:137054] +begin + require 'win32ole' +rescue LoadError +end + +require 'test/unit' +if defined?(WIN32OLE) + class TestNIL2VT_EMPTY < Test::Unit::TestCase + def setup + fs = WIN32OLE.new('Scripting.FileSystemObject') + @path = fs.GetFolder(".").path + end + def test_openSchema + con = nil + begin + con = WIN32OLE.new('ADODB.Connection') + con.connectionString = "Provider=MSDASQL;Extended Properties=" + con.connectionString +="\"DRIVER={Microsoft Text Driver (*.txt; *.csv)};DBQ=#{@path}\"" + con.open + rescue + con = nil + end + if con + rs = con.openSchema(4, [nil,nil,"DUMMY", "TABLE"]) + assert(rs) + assert_equal("_Recordset", rs.ole_type.name) + end + end + end +end diff --git a/test/win32ole/test_win32ole_event.rb b/test/win32ole/test_win32ole_event.rb new file mode 100644 index 0000000000..1b0285cb58 --- /dev/null +++ b/test/win32ole/test_win32ole_event.rb @@ -0,0 +1,98 @@ +begin + require 'win32ole' +rescue +end +require 'test/unit' +if defined?(WIN32OLE_EVENT) + class TestWIN32OLE_EVENT < Test::Unit::TestCase + def setup + @ie = WIN32OLE.new("InternetExplorer.Application") + @ie.visible = true + @event = "" + @event2 = "" + @event3 = "" + end + + def default_handler(event, *args) + @event += event + end + + def test_on_event + ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents') + ev.on_event {|*args| default_handler(*args)} + @ie.gohome + while @ie.busy + WIN32OLE_EVENT.message_loop + end + assert_match(/BeforeNavigate/, @event) + assert_match(/NavigateComplete/, @event) + end + + def test_on_event2 + ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents') + ev.on_event('BeforeNavigate') {|*args| handler1} + ev.on_event('BeforeNavigate') {|*args| handler2} + @ie.gohome + while @ie.busy + WIN32OLE_EVENT.message_loop + end + assert_equal("handler2", @event2) + end + + def test_on_event3 + ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents') + ev.on_event {handler1} + ev.on_event {handler2} + @ie.gohome + while @ie.busy + WIN32OLE_EVENT.message_loop + end + assert_equal("handler2", @event2) + end + + def test_on_event4 + ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents') + ev.on_event{handler1} + ev.on_event{handler2} + ev.on_event('NavigateComplete'){|*args| handler3(*args)} + @ie.gohome + while @ie.busy + WIN32OLE_EVENT.message_loop + end + assert(@event3!="") + assert("handler2", @event2) + end + + def test_on_event5 + ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents') + ev.on_event {|*args| default_handler(*args)} + ev.on_event('NavigateComplete'){|*args| handler3(*args)} + @ie.gohome + while @ie.busy + WIN32OLE_EVENT.message_loop + end + assert_match(/BeforeNavigate/, @event) + assert(/NavigateComplete/ !~ @event) + assert(@event!="") + end + + def handler1 + @event2 = "handler1" + end + + def handler2 + @event2 = "handler2" + end + + def handler3(url) + @event3 += url + end + + def teardown + @ie.quit + @ie = nil + GC.start + sleep 1 + end + end +end -- cgit v1.2.3