File: Windows\Win32\System\Com\IDispatchTests.cs
Web Access
Project: src\src\System.Windows.Forms.Primitives\tests\UnitTests\System.Windows.Forms.Primitives.Tests.csproj (System.Windows.Forms.Primitives.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Drawing;
using Windows.Win32.System.Ole;
using Windows.Win32.System.Variant;
 
namespace Windows.Win32.System.Com.Tests;
 
[Collection("Sequential")]
public partial class IDispatchTests
{
    [StaFact]
    public unsafe void IDispatch_GetIDsOfNames_Invoke_Success()
    {
        using Bitmap image = new(16, 32);
        using var picture = IPictureDisp.CreateFromImage(image);
        Assert.False(picture.IsNull);
 
        Guid riid = Guid.Empty;
        fixed (char* width = "Width")
        fixed (char* other = "Other")
        {
            var rgszNames = new PWSTR[] { width, other };
            int[] rgDispId = new int[rgszNames.Length];
            fixed (int* pRgDispId = rgDispId)
            fixed (PWSTR* pRgszNames = rgszNames)
            {
                picture.Value->GetIDsOfNames(&riid, pRgszNames, (uint)rgszNames.Length, PInvokeCore.GetThreadLocale(), pRgDispId);
                Assert.Equal([width, other], rgszNames);
 
                Assert.Equal(new int[] { (int)PInvokeCore.DISPID_PICT_WIDTH, PInvokeCore.DISPID_UNKNOWN }, rgDispId);
            }
        }
    }
 
    [StaFact]
    public unsafe void IDispatch_GetTypeInfo_Invoke_Success()
    {
        using Bitmap image = new(16, 16);
        using var picture = IPictureDisp.CreateFromImage(image);
        Assert.False(picture.IsNull);
 
        using ComScope<ITypeInfo> typeInfo = new(null);
        picture.Value->GetTypeInfo(0, PInvokeCore.GetThreadLocale(), typeInfo);
    }
 
    [StaFact]
    public unsafe void IDispatch_GetTypeInfoCount_Invoke_Success()
    {
        using Bitmap image = new(16, 16);
        using var picture = IPictureDisp.CreateFromImage(image);
        Assert.False(picture.IsNull);
 
        uint ctInfo = uint.MaxValue;
        picture.Value->GetTypeInfoCount(&ctInfo);
        Assert.Equal(1u, ctInfo);
    }
 
    [StaFact]
    public unsafe void IDispatch_Invoke_Invoke_Success()
    {
        using Bitmap image = new(16, 32);
        using var picture = IPictureDisp.CreateFromImage(image);
        Assert.False(picture.IsNull);
 
        using VARIANT varResult = default;
        HRESULT hr = ((IDispatch*)picture.Value)->TryGetProperty(
            PInvokeCore.DISPID_PICT_WIDTH,
            &varResult,
            PInvokeCore.GetThreadLocale());
        Assert.Equal(HRESULT.S_OK, hr);
        Assert.Equal(VARENUM.VT_I4, varResult.vt);
        Assert.Equal(16, GdiHelper.HimetricToPixelY(varResult.data.intVal));
    }
}