platform_is :windows do
  require 'win32ole'

  describe "WIN32OLE_TYPE.new" do
    it "raises ArgumentError with no argument" do
      -> { WIN32OLE_TYPE.new }.should raise_error ArgumentError
    end

    it "raises ArgumentError with invalid string" do
      -> { WIN32OLE_TYPE.new("foo") }.should raise_error ArgumentError
    end

    it "raises TypeError if second argument is not a String" do
      -> { WIN32OLE_TYPE.new(1,2) }.should raise_error TypeError
      -> { WIN32OLE_TYPE.new('Microsoft Shell Controls And Automation',2) }.
      should raise_error TypeError
    end

    it "raise WIN32OLERuntimeError if OLE object specified is not found" do
      -> { WIN32OLE_TYPE.new('Microsoft Shell Controls And Automation','foo') }.
      should raise_error WIN32OLERuntimeError
      -> { WIN32OLE_TYPE.new('Microsoft Shell Controls And Automation','Application') }.
      should raise_error WIN32OLERuntimeError
    end

    it "creates WIN32OLE_TYPE object from name and valid type" do
      ole_type = WIN32OLE_TYPE.new("Microsoft Shell Controls And Automation", "Shell")
      ole_type.should be_kind_of WIN32OLE_TYPE
    end

    it "creates WIN32OLE_TYPE object from CLSID and valid type" do
      ole_type2 = WIN32OLE_TYPE.new("{13709620-C279-11CE-A49E-444553540000}", "Shell")
      ole_type2.should be_kind_of WIN32OLE_TYPE
    end

  end
end
