/* Copyright (c) 2010 Daniel Doubrovkine, All Rights Reserved * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package com.sun.jna.platform.win32; import junit.framework.TestCase; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Guid.GUID; import com.sun.jna.platform.win32.WinNT.HRESULT; import com.sun.jna.ptr.PointerByReference; /** * @author dblock[at]dblock[dot]org */ public class Ole32Test extends TestCase { public static void main(String[] args) { junit.textui.TestRunner.run(Ole32Test.class); } public void testCoCreateGUID() { GUID.ByReference pguid = new GUID.ByReference(); assertEquals(W32Errors.S_OK, Ole32.INSTANCE.CoCreateGuid(pguid)); assertTrue(pguid.Data1 != 0 || pguid.Data2 != 0 || pguid.Data3 != 0 && pguid.Data4 != null); } public void testIIDFromString() { GUID.ByReference lpiid = new GUID.ByReference(); assertEquals(W32Errors.S_OK, Ole32.INSTANCE.IIDFromString( "{13709620-C279-11CE-A49E-444553540000}", lpiid)); // Shell.Application.1 assertEquals(0x13709620, lpiid.Data1); assertEquals(0xFFFFC279, lpiid.Data2); assertEquals(0x11CE, lpiid.Data3); assertEquals(0xFFFFFFA4, lpiid.Data4[0]); assertEquals(0xFFFFFF9E, lpiid.Data4[1]); assertEquals(0x44, lpiid.Data4[2]); assertEquals(0x45, lpiid.Data4[3]); assertEquals(0x53, lpiid.Data4[4]); assertEquals(0x54, lpiid.Data4[5]); assertEquals(0, lpiid.Data4[6]); assertEquals(0, lpiid.Data4[7]); } public void testStringFromGUID2() { GUID.ByReference pguid = new GUID.ByReference(); pguid.Data1 = 0; pguid.Data2 = 0; pguid.Data3 = 0; for (int i = 0; i < pguid.Data4.length; i++) { pguid.Data4[i] = 0; } int max = 39; char[] lpsz = new char[max]; int len = Ole32.INSTANCE.StringFromGUID2(pguid, lpsz, max); assertTrue(len > 1); lpsz[len - 1] = 0; assertEquals("{00000000-0000-0000-0000-000000000000}", Native.toString(lpsz)); } public void testCoInitializeEx() { HRESULT hr = Ole32.INSTANCE.CoInitializeEx(null, 0); assertTrue(W32Errors.SUCCEEDED(hr.intValue()) || hr.intValue() == W32Errors.RPC_E_CHANGED_MODE); if (W32Errors.SUCCEEDED(hr.intValue())) Ole32.INSTANCE.CoUninitialize(); } public void testCoCreateInstance() { HRESULT hrCI = Ole32.INSTANCE.CoInitializeEx(null, 0); GUID guid = Ole32Util.getGUIDFromString("{13709620-C279-11CE-A49E-444553540000}"); //Shell object GUID riid = Ole32Util.getGUIDFromString("{D8F015C0-C278-11CE-A49E-444553540000}"); //IShellDispatch PointerByReference iUnknown = new PointerByReference(); HRESULT hr = Ole32.INSTANCE.CoCreateInstance( guid, null, // pOuter = null, no aggregation ObjBase.CLSCTX_ALL, riid, iUnknown); assertTrue(W32Errors.SUCCEEDED(hr.intValue())); assertTrue(!iUnknown.getValue().equals(Pointer.NULL)); // We leak this iUnknown reference because we don't have the JNACOM lib // here to wrap the native iUnknown pointer and call iUnknown.release() if (W32Errors.SUCCEEDED(hrCI.intValue())) Ole32.INSTANCE.CoUninitialize(); } }