From d6f55c7d425bceb39fea5a362d50da40b8e2aabe Mon Sep 17 00:00:00 2001 From: suke Date: Sun, 28 Oct 2018 06:11:30 +0000 Subject: [PATCH] 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 --- spec/ruby/library/win32ole/fixtures/event.xml | 4 + .../win32ole/win32ole_event/on_event_spec.rb | 106 ++++++++++-------- 2 files changed, 61 insertions(+), 49 deletions(-) create mode 100644 spec/ruby/library/win32ole/fixtures/event.xml diff --git a/spec/ruby/library/win32ole/fixtures/event.xml b/spec/ruby/library/win32ole/fixtures/event.xml new file mode 100644 index 0000000000..23f3d2b126 --- /dev/null +++ b/spec/ruby/library/win32ole/fixtures/event.xml @@ -0,0 +1,4 @@ + + Ruby + trunk + diff --git a/spec/ruby/library/win32ole/win32ole_event/on_event_spec.rb b/spec/ruby/library/win32ole/win32ole_event/on_event_spec.rb index 00b8fcc035..feb26b0637 100644 --- a/spec/ruby/library/win32ole/win32ole_event/on_event_spec.rb +++ b/spec/ruby/library/win32ole/win32ole_event/on_event_spec.rb @@ -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 "Rubytrunk" + 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 "Rubytrunk" + 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 "Rubytrunk" + 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