summaryrefslogtreecommitdiff
path: root/test/win32ole
diff options
context:
space:
mode:
authorsuke <suke@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-11-02 13:22:42 +0000
committersuke <suke@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-11-02 13:22:42 +0000
commit2d45869c7623b166d02fa07cbb6cf8a39cc81a8b (patch)
treeae1c58e5dfaf31748df098ba0a6601a1d60f5595 /test/win32ole
parent510d2a7d2e6030a489409c76fd49273214e2e2c2 (diff)
* ext/win32ole/win32ole.c (ole_event_free): invoke IConnectionPoint::Unadvise
before invoking IConnectionPoint::Release. * test/win32ole/test_win32ole_event.rb, test/win32ole/err_in_callback.rb, test/win32ole/test_err_in_callback.rb: Use ActiveX Data Object Library instead of InternetExplorer. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20089 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/win32ole')
-rw-r--r--test/win32ole/err_in_callback.rb18
-rw-r--r--test/win32ole/test_err_in_callback.rb46
-rw-r--r--test/win32ole/test_win32ole_event.rb569
3 files changed, 292 insertions, 341 deletions
diff --git a/test/win32ole/err_in_callback.rb b/test/win32ole/err_in_callback.rb
index 6a0b711..fabb7be 100644
--- a/test/win32ole/err_in_callback.rb
+++ b/test/win32ole/err_in_callback.rb
@@ -1,15 +1,9 @@
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('NavigateComplete2') {|*args|
+db = WIN32OLE.new('ADODB.Connection')
+db.connectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=.;"
+ev = WIN32OLE_EVENT.new(db)
+ev.on_event('WillConnect') {|*args|
foo
}
-ie.navigate(ARGV.shift)
-while ie.readystate != 4
- WIN32OLE_EVENT.message_loop
- sleep 0.2
-end
+db.open
+WIN32OLE_EVENT.message_loop
diff --git a/test/win32ole/test_err_in_callback.rb b/test/win32ole/test_err_in_callback.rb
index c223804..d686aa2 100644
--- a/test/win32ole/test_err_in_callback.rb
+++ b/test/win32ole/test_err_in_callback.rb
@@ -21,27 +21,12 @@ if defined?(WIN32OLE)
" -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
- @f = @dummy_file
- dummy_path = cfolder.path + "\\" + @dummy_file
- dummy_path
- end
-
def test_err_in_callback
if @ruby
- cmd = "#{@ruby} -v #{@iopt} #{@script} #{@param} > test_err_in_callback.log 2>&1"
+ cmd = "#{@ruby} -v #{@iopt} #{@script} > test_err_in_callback.log 2>&1"
system(cmd)
str = ""
open("test_err_in_callback.log") {|ifs|
@@ -51,34 +36,5 @@ if defined?(WIN32OLE)
end
end
- def ie_quit
- WIN32OLE_EVENT.message_loop
- sh = WIN32OLE.new('Shell.Application')
- sh.windows.each do |w|
- i = 0
- begin
- i = i + 1
- next if i > 100
- WIN32OLE_EVENT.message_loop
- sleep 0.1
- next if /#{@dummy_file}/ !~ w.locationURL
- e = w.document.all.item("str")
- if e && e.innerHTML == @str
- w.quit
- WIN32OLE_EVENT.message_loop
- sleep 0.2
- break
- end
- rescue
- retry
- end
- end
- end
-
- def teardown
- ie_quit
- File.unlink(@f)
- File.unlink("test_err_in_callback.log")
- end
end
end
diff --git a/test/win32ole/test_win32ole_event.rb b/test/win32ole/test_win32ole_event.rb
index 5b2a1af..84d1e00 100644
--- a/test/win32ole/test_win32ole_event.rb
+++ b/test/win32ole/test_win32ole_event.rb
@@ -4,330 +4,331 @@ rescue LoadError
end
require 'test/unit'
-if defined?(WIN32OLE_EVENT)
- class TestWIN32OLE_EVENT < Test::Unit::TestCase
- module IE
- end
- def create_temp_html
- fso = WIN32OLE.new('Scripting.FileSystemObject')
- dummy_file = fso.GetTempName + ".html"
- cfolder = fso.getFolder(".")
- f = cfolder.CreateTextFile(dummy_file)
- f.writeLine("<html><body>This is test HTML file for Win32OLE.</body></html>")
- f.close
- dummy_path = cfolder.path + "\\" + dummy_file
- dummy_path
+def ado_installed?
+ installed = false
+ if defined?(WIN32OLE)
+ db = nil
+ begin
+ db = WIN32OLE.new('ADODB.Connection')
+ db.connectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=.;"
+ db.open
+ db.close
+ db = nil
+ installed = true
+ rescue
end
+ end
+ installed
+end
- def message_loop
- WIN32OLE_EVENT.message_loop
- sleep 0.1
- end
+if defined?(WIN32OLE_EVENT)
+ dotest = ado_installed?
+ if !dotest
+ STDERR.puts("\n#{__FILE__} skipped(ActiveX Data Object Library not found.)")
+ end
+ if dotest
+ class TestWIN32OLE_EVENT_ADO < Test::Unit::TestCase
+ CONNSTR="Driver={Microsoft Text Driver (*.txt; *.csv)};DefaultDir=.;"
+ module ADO
+ end
+ def message_loop
+ WIN32OLE_EVENT.message_loop
+ end
- def wait_ie
- while @ie.readyState != IE::READYSTATE_COMPLETE
- message_loop
+ def default_handler(event, *args)
+ @event += event
end
- end
- def setup
- WIN32OLE_EVENT.message_loop
- @ie = WIN32OLE.new("InternetExplorer.Application")
- if !defined?(IE::READYSTATE_COMPLETE)
- WIN32OLE.const_load(@ie, IE)
- end
- @ie.visible = true
- message_loop
- @event = ""
- @event2 = ""
- @event3 = ""
- @f = create_temp_html
- end
+ def setup
+ @db = WIN32OLE.new('ADODB.Connection')
+ if !defined?(ADO::AdStateOpen)
+ WIN32OLE.const_load(@db, ADO)
+ end
+ @db.connectionString = CONNSTR
+ @event = ""
+ @event2 = ""
+ @event3 = ""
+ end
- def default_handler(event, *args)
- @event += event
- end
+ def test_s_new
+ assert_raise(TypeError) {
+ ev = WIN32OLE_EVENT.new("A")
+ }
+ end
- def test_s_new
- assert_raise(TypeError) {
- ev = WIN32OLE_EVENT.new("A")
- }
- end
+ def test_s_new_without_itf
+ ev = WIN32OLE_EVENT.new(@db)
+ ev.on_event {|*args| default_handler(*args)}
+ @db.open
+ @db.close
+ 10.times do |i|
+ WIN32OLE_EVENT.new(@db)
+ GC.start
+ message_loop
+ @db.open
+ message_loop
+ @db.close
+ end
+ assert_match(/WillConnect/, @event)
+ end
- def test_s_new_without_itf
- ev = WIN32OLE_EVENT.new(@ie)
- ev.on_event {|*args| default_handler(*args)}
- @ie.navigate("file:///#{@f}")
- while @ie.busy
- WIN32OLE_EVENT.new(@ie)
- GC.start
+ def test_on_event
+ ev = WIN32OLE_EVENT.new(@db, 'ConnectionEvents')
+ ev.on_event {|*args| default_handler(*args)}
+ @db.open
message_loop
+ assert_match(/WillConnect/, @event)
end
- assert_match(/BeforeNavigate/, @event)
- assert_match(/NavigateComplete/, @event)
- end
-
- def test_on_event
- ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents')
- ev.on_event {|*args| default_handler(*args)}
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert_match(/BeforeNavigate/, @event)
- assert_match(/NavigateComplete/, @event)
- end
- def test_on_event_symbol
- ev = WIN32OLE_EVENT.new(@ie)
- ev.on_event(:BeforeNavigate2) {|*args|
- handler1
- }
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert_equal("handler1", @event2)
- end
-
- def test_on_event2
- ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents')
- ev.on_event('BeforeNavigate') {|*args| handler1}
- ev.on_event('BeforeNavigate') {|*args| handler2}
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert_equal("handler2", @event2)
- end
+ def test_on_event_symbol
+ ev = WIN32OLE_EVENT.new(@db)
+ ev.on_event(:WillConnect) {|*args|
+ handler1
+ }
+ @db.open
+ message_loop
+ assert_equal("handler1", @event2)
+ end
- def test_on_event3
- ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents')
- ev.on_event {|*args| handler1}
- ev.on_event {|*args| handler2}
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert_equal("handler2", @event2)
- end
+ def test_on_event2
+ ev = WIN32OLE_EVENT.new(@db, 'ConnectionEvents')
+ ev.on_event('WillConnect') {|*args| handler1}
+ ev.on_event('WillConnect') {|*args| handler2}
+ @db.open
+ message_loop
+ assert_equal("handler2", @event2)
+ end
- def test_on_event4
- ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents')
- ev.on_event{|*args| handler1}
- ev.on_event{|*args| handler2}
- ev.on_event('NavigateComplete'){|*args| handler3(*args)}
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert(@event3!="")
- assert("handler2", @event2)
- end
+ def test_on_event3
+ ev = WIN32OLE_EVENT.new(@db, 'ConnectionEvents')
+ ev.on_event('WillConnect') {|*args| handler1}
+ ev.on_event('WillConnect') {|*args| handler2}
+ @db.open
+ message_loop
+ assert_equal("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.navigate("file:///#{@f}")
- wait_ie
- assert_match(/BeforeNavigate/, @event)
- assert(/NavigateComplete/ !~ @event)
- assert(@event!="")
- end
+ def test_on_event4
+ ev = WIN32OLE_EVENT.new(@db, 'ConnectionEvents')
+ ev.on_event{|*args| handler1}
+ ev.on_event{|*args| handler2}
+ ev.on_event('WillConnect'){|*args| handler3(*args)}
+ @db.open
+ message_loop
+ assert_equal(CONNSTR, @event3)
+ assert("handler2", @event2)
+ end
- def test_unadvise
- ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents')
- ev.on_event {|*args| default_handler(*args)}
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert_match(/BeforeNavigate/, @event)
- ev.unadvise
- @event = ""
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert_equal("", @event);
- assert_raise(WIN32OLERuntimeError) {
+ def test_on_event5
+ ev = WIN32OLE_EVENT.new(@db, 'ConnectionEvents')
ev.on_event {|*args| default_handler(*args)}
- }
- end
-
- def test_non_exist_event
- assert_raise(RuntimeError) {
- ev = WIN32OLE_EVENT.new(@ie, 'XXXX')
- }
- dict = WIN32OLE.new('Scripting.Dictionary')
- assert_raise(RuntimeError) {
- ev = WIN32OLE_EVENT.new(dict)
- }
- end
+ ev.on_event('WillConnect'){|*args| handler3(*args)}
+ @db.open
+ message_loop
+ assert_match(/ConnectComplete/, @event)
+ assert(/WillConnect/ !~ @event)
+ assert_equal(CONNSTR, @event3)
+ end
- def test_on_event_with_outargs
- ev = WIN32OLE_EVENT.new(@ie)
- # ev.on_event_with_outargs('BeforeNavigate'){|*args|
- # args.last[5] = true # Cancel = true
- # }
- ev.on_event_with_outargs('BeforeNavigate2'){|*args|
- args.last[6] = true # Cancel = true
- }
- bl = @ie.locationURL
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert_equal(bl, @ie.locationURL)
- end
+ def test_unadvise
+ ev = WIN32OLE_EVENT.new(@db, 'ConnectionEvents')
+ ev.on_event {|*args| default_handler(*args)}
+ @db.open
+ message_loop
+ assert_match(/WillConnect/, @event)
+ ev.unadvise
+ @event = ""
+ @db.close
+ @db.open
+ message_loop
+ assert_equal("", @event);
+ assert_raise(WIN32OLERuntimeError) {
+ ev.on_event {|*args| default_handler(*args)}
+ }
+ end
- def test_on_event_hash_return
- ev = WIN32OLE_EVENT.new(@ie)
- ev.on_event('BeforeNavigate2'){|*args|
- {:return => 1, :Cancel => true}
- }
- bl = @ie.locationURL
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert_equal(bl, @ie.locationURL)
- end
+ def test_non_exist_event
+ assert_raise(RuntimeError) {
+ ev = WIN32OLE_EVENT.new(@db, 'XXXX')
+ }
+ dict = WIN32OLE.new('Scripting.Dictionary')
+ assert_raise(RuntimeError) {
+ ev = WIN32OLE_EVENT.new(dict)
+ }
+ end
- def test_on_event_hash_return2
- ev = WIN32OLE_EVENT.new(@ie)
- ev.on_event('BeforeNavigate2'){|*args|
- {:Cancel => true}
- }
- bl = @ie.locationURL
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert_equal(bl, @ie.locationURL)
- end
+ def test_on_event_with_outargs
+ ev = WIN32OLE_EVENT.new(@db)
+ @db.connectionString = 'XXX' # set illegal connection string
+ assert_raise(WIN32OLERuntimeError) {
+ @db.open
+ }
+ ev.on_event_with_outargs('WillConnect'){|*args|
+ args.last[0] = CONNSTR # ConnectionString = CONNSTR
+ }
+ @db.open
+ message_loop
+ assert(true)
+ end
- def test_on_event_hash_return3
- ev = WIN32OLE_EVENT.new(@ie)
- ev.on_event('BeforeNavigate2'){|*args|
- {'Cancel' => true}
- }
- bl = @ie.locationURL
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert_equal(bl, @ie.locationURL)
- end
-
- def test_on_event_hash_return4
- ev = WIN32OLE_EVENT.new(@ie)
- ev.on_event('BeforeNavigate2'){|*args|
- {'return' => 2, 'Cancel' => true}
- }
- bl = @ie.locationURL
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert_equal(bl, @ie.locationURL)
- end
+ def test_on_event_hash_return
+ ev = WIN32OLE_EVENT.new(@db)
+ ev.on_event('WillConnect'){|*args|
+ {:return => 1, :ConnectionString => CONNSTR}
+ }
+ @db.connectionString = 'XXX'
+ @db.open
+ assert(true)
+ end
- def test_on_event_hash_return5
- ev = WIN32OLE_EVENT.new(@ie)
- ev.on_event('BeforeNavigate2'){|*args|
- {6 => true}
- }
- bl = @ie.locationURL
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert_equal(bl, @ie.locationURL)
- end
+ def test_on_event_hash_return2
+ ev = WIN32OLE_EVENT.new(@db)
+ ev.on_event('WillConnect'){|*args|
+ {:ConnectionString => CONNSTR}
+ }
+ @db.connectionString = 'XXX'
+ @db.open
+ assert(true)
+ end
- def test_off_event
- ev = WIN32OLE_EVENT.new(@ie)
- ev.on_event{handler1}
- ev.off_event
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert_equal("", @event2)
- end
+ def test_on_event_hash_return3
+ ev = WIN32OLE_EVENT.new(@db)
+ ev.on_event('WillConnect'){|*args|
+ {'ConnectionString' => CONNSTR}
+ }
+ @db.connectionString = 'XXX'
+ @db.open
+ assert(true)
+ end
- def test_off_event_arg
- ev = WIN32OLE_EVENT.new(@ie)
- ev.on_event('BeforeNavigate2'){handler1}
- ev.off_event('BeforeNavigate2')
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert_equal("", @event2)
- end
+ def test_on_event_hash_return4
+ ev = WIN32OLE_EVENT.new(@db)
+ ev.on_event('WillConnect'){|*args|
+ {'return' => 1, 'ConnectionString' => CONNSTR}
+ }
+ @db.connectionString = 'XXX'
+ @db.open
+ assert(true)
+ end
- def test_off_event_sym_arg
- ev = WIN32OLE_EVENT.new(@ie)
- ev.on_event('BeforeNavigate2'){handler1}
- ev.off_event(:BeforeNavigate2)
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert_equal("", @event2)
- end
+ def test_on_event_hash_return5
+ ev = WIN32OLE_EVENT.new(@db)
+ ev.on_event('WillConnect'){|*args|
+ {0 => CONNSTR}
+ }
+ @db.connectionString = 'XXX'
+ @db.open
+ assert(true)
+ end
- def handler1
- @event2 = "handler1"
- end
+ def test_off_event
+ ev = WIN32OLE_EVENT.new(@db)
+ ev.on_event{handler1}
+ ev.off_event
+ @db.open
+ message_loop
+ assert_equal("", @event2)
+ end
- def handler2
- @event2 = "handler2"
- end
+ def test_off_event_arg
+ ev = WIN32OLE_EVENT.new(@db)
+ ev.on_event('WillConnect'){handler1}
+ ev.off_event('WillConnect')
+ @db.open
+ message_loop
+ assert_equal("", @event2)
+ end
- def handler3(url)
- @event3 += url
- end
+ def test_off_event_arg2
+ ev = WIN32OLE_EVENT.new(@db)
+ ev.on_event('WillConnect'){handler1}
+ ev.on_event('ConnectComplete'){handler1}
+ ev.off_event('WillConnect')
+ @db.open
+ message_loop
+ assert_equal("handler1", @event2)
+ end
- def teardown
- @ie.quit
- message_loop
- @ie = nil
- i = 0
- begin
- i += 1
- File.unlink(@f) if i < 10
- rescue Errno::EACCES
+ def test_off_event_sym_arg
+ ev = WIN32OLE_EVENT.new(@db)
+ ev.on_event('WillConnect'){handler1}
+ ev.off_event(:WillConnect)
+ @db.open
message_loop
- retry
+ assert_equal("", @event2)
end
- message_loop
- GC.start
- message_loop
- end
- class Handler1
- attr_reader :val1, :val2, :val3, :val4
- def initialize
- @val1 = nil
- @val2 = nil
- @val3 = nil
- @val4 = nil
+ def handler1
+ @event2 = "handler1"
end
- def onStatusTextChange(t)
- @val1 = t
+
+ def handler2
+ @event2 = "handler2"
end
- def onProgressChange(p, pmax)
- @val2 = p
- @val3 = pmax
+
+ def handler3(*arg)
+ @event3 += arg[0]
end
- def onPropertyChange(p)
- @val4 = p
+
+ def teardown
+ if @db && @db.state == ADO::AdStateOpen
+ @db.close
+ end
+ message_loop
+ @db = nil
end
- end
- class Handler2
- attr_reader :ev
- def initialize
- @ev = ""
+ class Handler1
+ attr_reader :val1, :val2, :val3, :val4
+ def initialize
+ @val1 = nil
+ @val2 = nil
+ @val3 = nil
+ @val4 = nil
+ end
+ def onWillConnect(conn, uid, pwd, opts, stat, pconn)
+ @val1 = conn
+ end
+ def onConnectComplete(err, stat, pconn)
+ @val2 = err
+ @val3 = stat
+ end
+ def onInfoMessage(err, stat, pconn)
+ @val4 = stat
+ end
end
- def method_missing(ev, *arg)
- @ev += ev
+
+ class Handler2
+ attr_reader :ev
+ def initialize
+ @ev = ""
+ end
+ def method_missing(ev, *arg)
+ @ev += ev
+ end
end
- end
- def test_handler1
- ev = WIN32OLE_EVENT.new(@ie)
- h1 = Handler1.new
- ev.handler = h1
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert(h1.val1)
- assert_equal(h1.val1, ev.handler.val1)
- assert(h1.val2)
- assert(h1.val3)
- assert(h1.val4)
- end
+ def test_handler1
+ ev = WIN32OLE_EVENT.new(@db)
+ h1 = Handler1.new
+ ev.handler = h1
+ @db.open
+ message_loop
+ assert_equal(CONNSTR, h1.val1)
+ assert_equal(h1.val1, ev.handler.val1)
+ assert_equal(nil, h1.val2)
+ assert_equal(ADO::AdStateOpen, h1.val3)
+ assert_equal(ADO::AdStateOpen, h1.val4)
+ end
- def test_handler2
- ev = WIN32OLE_EVENT.new(@ie)
- h2 = Handler2.new
- ev.handler = h2
- @ie.navigate("file:///#{@f}")
- wait_ie
- assert(h2.ev != "")
+ def test_handler2
+ ev = WIN32OLE_EVENT.new(@db)
+ h2 = Handler2.new
+ ev.handler = h2
+ @db.open
+ message_loop
+ assert(h2.ev != "")
+ end
end
-
end
end