From d6f55c7d425bceb39fea5a362d50da40b8e2aabe Mon Sep 17 00:00:00 2001 From: suke Date: Sun, 28 Oct 2018 06:11:30 +0000 Subject: 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 | 104 +++++++++++---------- 2 files changed, 60 insertions(+), 48 deletions(-) create mode 100644 spec/ruby/library/win32ole/fixtures/event.xml (limited to 'spec/ruby') 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 handler_global(event, *args) + @event_global += event + end - def alternate_handler(event, *args) - @event2 = "alternate" - end + def handler_specific(*args) + @event_specific = "specific" + end - def handler3(event, *args) - @event3 += event - end + def handler_spec_alt(*args) + @event_spec_alt = "spec_alt" + 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 - @ie = WIN32OLESpecs.new_ole('InternetExplorer.Application') - @ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents') - @event = '' - @event2 = '' - @event3 = '' - @ie.StatusBar = true - 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 - after :each do - @ie.Quit - end + after :each do + @xml_dom = nil + @ev = nil + 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/ - 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, 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 + 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 "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 + 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 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/ + 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 -- cgit v1.2.3