mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
use MSXML.DOMDocument instead of InternetExplorer.Application
* spec/ruby/library/win32ole/fixtures/event.xml use MSXML.DOMDocument instead of InternetExplorer.Application. InternetExplorer.Application is not available on some environments. Thanks to MSP-Greg (Greg L). * spec/ruby/library/win32ole/win32ole_event/on_event_spec.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65414 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
7eda588d66
commit
d6f55c7d42
2 changed files with 61 additions and 49 deletions
4
spec/ruby/library/win32ole/fixtures/event.xml
Normal file
4
spec/ruby/library/win32ole/fixtures/event.xml
Normal file
|
@ -0,0 +1,4 @@
|
|||
<program>
|
||||
<name>Ruby</name>
|
||||
<version>trunk</version>
|
||||
</program>
|
|
@ -1,62 +1,70 @@
|
|||
require_relative '../fixtures/classes'
|
||||
|
||||
platform_is :windows do
|
||||
require 'win32ole'
|
||||
require_relative '../fixtures/classes'
|
||||
guard -> { WIN32OLESpecs::MSXML_AVAILABLE } do
|
||||
|
||||
def default_handler(event, *args)
|
||||
@event += event
|
||||
end
|
||||
|
||||
def alternate_handler(event, *args)
|
||||
@event2 = "alternate"
|
||||
end
|
||||
|
||||
def handler3(event, *args)
|
||||
@event3 += event
|
||||
end
|
||||
|
||||
|
||||
describe "WIN32OLE_EVENT#on_event with no argument" do
|
||||
before :each do
|
||||
@ie = WIN32OLESpecs.new_ole('InternetExplorer.Application')
|
||||
@ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents')
|
||||
@event = ''
|
||||
@event2 = ''
|
||||
@event3 = ''
|
||||
@ie.StatusBar = true
|
||||
def handler_global(event, *args)
|
||||
@event_global += event
|
||||
end
|
||||
|
||||
after :each do
|
||||
@ie.Quit
|
||||
def handler_specific(*args)
|
||||
@event_specific = "specific"
|
||||
end
|
||||
|
||||
it "sets event handler properly, and the handler is invoked by event loop" do
|
||||
@ev.on_event { |*args| default_handler(*args) }
|
||||
@ie.StatusText='hello'
|
||||
WIN32OLE_EVENT.message_loop
|
||||
@event.should =~ /StatusTextChange/
|
||||
def handler_spec_alt(*args)
|
||||
@event_spec_alt = "spec_alt"
|
||||
end
|
||||
|
||||
it "accepts a String argument, sets event handler properly, and the handler is invoked by event loop" do
|
||||
@ev.on_event("StatusTextChange") { |*args| @event = 'foo' }
|
||||
@ie.StatusText='hello'
|
||||
WIN32OLE_EVENT.message_loop
|
||||
@event.should =~ /foo/
|
||||
end
|
||||
describe "WIN32OLE_EVENT#on_event" do
|
||||
before :all do
|
||||
@fn_xml = File.absolute_path "../fixtures/event.xml", __dir__
|
||||
end
|
||||
|
||||
it "registers multiple event handlers for the same event" do
|
||||
@ev.on_event("StatusTextChange") { |*args| default_handler(*args) }
|
||||
@ev.on_event("StatusTextChange") { |*args| alternate_handler(*args) }
|
||||
@ie.StatusText= 'hello'
|
||||
WIN32OLE_EVENT.message_loop
|
||||
@event2.should == 'alternate'
|
||||
end
|
||||
before :each do
|
||||
@xml_dom = WIN32OLESpecs.new_ole 'MSXML.DOMDocument'
|
||||
@xml_dom.async = true
|
||||
@ev = WIN32OLE_EVENT.new @xml_dom
|
||||
@event_global = ''
|
||||
@event_specific = ''
|
||||
@event_spec_alt = ''
|
||||
end
|
||||
|
||||
it "accepts a Symbol argument, sets event handler properly, and the handler is invoked by event loop" do
|
||||
@ev.on_event(:StatusTextChange) { |*args| @event = 'foo' }
|
||||
@ie.StatusText='hello'
|
||||
WIN32OLE_EVENT.message_loop
|
||||
@event.should =~ /foo/
|
||||
after :each do
|
||||
@xml_dom = nil
|
||||
@ev = nil
|
||||
end
|
||||
|
||||
it "sets global event handler properly, and the handler is invoked by event loop" do
|
||||
@ev.on_event { |*args| handler_global(*args) }
|
||||
@xml_dom.loadXML "<program><name>Ruby</name><version>trunk</version></program>"
|
||||
WIN32OLE_EVENT.message_loop
|
||||
@event_global.should =~ /onreadystatechange/
|
||||
end
|
||||
|
||||
it "accepts a String argument and the handler is invoked by event loop" do
|
||||
@ev.on_event("onreadystatechange") { |*args| @event = 'foo' }
|
||||
@xml_dom.loadXML "<program><name>Ruby</name><version>trunk</version></program>"
|
||||
WIN32OLE_EVENT.message_loop
|
||||
@event.should =~ /foo/
|
||||
end
|
||||
|
||||
it "accepts a Symbol argument and the handler is invoked by event loop" do
|
||||
@ev.on_event(:onreadystatechange) { |*args| @event = 'bar' }
|
||||
@xml_dom.loadXML "<program><name>Ruby</name><version>trunk</version></program>"
|
||||
WIN32OLE_EVENT.message_loop
|
||||
@event.should =~ /bar/
|
||||
end
|
||||
|
||||
it "accepts a specific event handler and overrides a global event handler" do
|
||||
@ev.on_event { |*args| handler_global(*args) }
|
||||
@ev.on_event("onreadystatechange") { |*args| handler_specific(*args) }
|
||||
@ev.on_event("onreadystatechange") { |*args| handler_spec_alt(*args) }
|
||||
@xml_dom.load @fn_xml
|
||||
WIN32OLE_EVENT.message_loop
|
||||
@event_global.should == 'ondataavailable'
|
||||
@event_global.should_not =~ /onreadystatechange/
|
||||
@event_specific.should == ''
|
||||
@event_spec_alt.should == "spec_alt"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue