1
0
Fork 0
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:
suke 2018-10-28 06:11:30 +00:00
parent 7eda588d66
commit d6f55c7d42
2 changed files with 61 additions and 49 deletions

View file

@ -0,0 +1,4 @@
<program>
<name>Ruby</name>
<version>trunk</version>
</program>

View file

@ -1,62 +1,70 @@
require_relative '../fixtures/classes'
platform_is :windows do platform_is :windows do
require 'win32ole' require_relative '../fixtures/classes'
guard -> { WIN32OLESpecs::MSXML_AVAILABLE } do
def default_handler(event, *args) def handler_global(event, *args)
@event += event @event_global += event
end end
def alternate_handler(event, *args) def handler_specific(*args)
@event2 = "alternate" @event_specific = "specific"
end end
def handler3(event, *args) def handler_spec_alt(*args)
@event3 += event @event_spec_alt = "spec_alt"
end end
describe "WIN32OLE_EVENT#on_event" do
before :all do
@fn_xml = File.absolute_path "../fixtures/event.xml", __dir__
end
describe "WIN32OLE_EVENT#on_event with no argument" do
before :each do before :each do
@ie = WIN32OLESpecs.new_ole('InternetExplorer.Application') @xml_dom = WIN32OLESpecs.new_ole 'MSXML.DOMDocument'
@ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents') @xml_dom.async = true
@event = '' @ev = WIN32OLE_EVENT.new @xml_dom
@event2 = '' @event_global = ''
@event3 = '' @event_specific = ''
@ie.StatusBar = true @event_spec_alt = ''
end end
after :each do after :each do
@ie.Quit @xml_dom = nil
@ev = nil
end end
it "sets event handler properly, and the handler is invoked by event loop" do it "sets global event handler properly, and the handler is invoked by event loop" do
@ev.on_event { |*args| default_handler(*args) } @ev.on_event { |*args| handler_global(*args) }
@ie.StatusText='hello' @xml_dom.loadXML "<program><name>Ruby</name><version>trunk</version></program>"
WIN32OLE_EVENT.message_loop WIN32OLE_EVENT.message_loop
@event.should =~ /StatusTextChange/ @event_global.should =~ /onreadystatechange/
end end
it "accepts a String argument, sets event handler properly, and the handler is invoked by event loop" do it "accepts a String argument and the handler is invoked by event loop" do
@ev.on_event("StatusTextChange") { |*args| @event = 'foo' } @ev.on_event("onreadystatechange") { |*args| @event = 'foo' }
@ie.StatusText='hello' @xml_dom.loadXML "<program><name>Ruby</name><version>trunk</version></program>"
WIN32OLE_EVENT.message_loop WIN32OLE_EVENT.message_loop
@event.should =~ /foo/ @event.should =~ /foo/
end end
it "registers multiple event handlers for the same event" do it "accepts a Symbol argument and the handler is invoked by event loop" do
@ev.on_event("StatusTextChange") { |*args| default_handler(*args) } @ev.on_event(:onreadystatechange) { |*args| @event = 'bar' }
@ev.on_event("StatusTextChange") { |*args| alternate_handler(*args) } @xml_dom.loadXML "<program><name>Ruby</name><version>trunk</version></program>"
@ie.StatusText= 'hello'
WIN32OLE_EVENT.message_loop WIN32OLE_EVENT.message_loop
@event2.should == 'alternate' @event.should =~ /bar/
end end
it "accepts a Symbol argument, sets event handler properly, and the handler is invoked by event loop" do it "accepts a specific event handler and overrides a global event handler" do
@ev.on_event(:StatusTextChange) { |*args| @event = 'foo' } @ev.on_event { |*args| handler_global(*args) }
@ie.StatusText='hello' @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 WIN32OLE_EVENT.message_loop
@event.should =~ /foo/ @event_global.should == 'ondataavailable'
@event_global.should_not =~ /onreadystatechange/
@event_specific.should == ''
@event_spec_alt.should == "spec_alt"
end
end end
end end
end end