Updated and added tests for SAFEARRAY and PROPVARIANT changes

pull/217/head
dahall 2021-03-18 15:41:02 -06:00
parent a66390fe2b
commit 6c23b00a9c
2 changed files with 67 additions and 2 deletions

View File

@ -27,7 +27,7 @@ namespace Vanara.PInvoke.Tests
[Test]
public void SafeArrayCreateTest()
{
using (var psa = SafeArrayCreate(VARTYPE.VT_I8, 1, new SAFEARRAYBOUND(5)))
using (var psa = SafeArrayCreate(VARTYPE.VT_I8, 1, new[] { new SAFEARRAYBOUND(5) }))
SafeArrayMethodTest<long>(psa, 5);
}
@ -45,7 +45,7 @@ namespace Vanara.PInvoke.Tests
[Test]
public void SafeArrayCreateExTest()
{
using (var psa = SafeArrayCreateEx(VARTYPE.VT_I8, 1, new SAFEARRAYBOUND(5), IntPtr.Zero))
using (var psa = SafeArrayCreateEx(VARTYPE.VT_I8, 1, new[] { new SAFEARRAYBOUND(5) }, IntPtr.Zero))
SafeArrayMethodTest<long>(psa, 5);
}
@ -104,6 +104,45 @@ namespace Vanara.PInvoke.Tests
psa.Dispose();
}
[Test]
public void SafeSAFEARRAYConvert1DimTest()
{
// Setup SAFEARRAY
var array = new int[] { 1, 2, 3, 4 };
using var sa = SafeSAFEARRAY.CreateFromArray(array, VARTYPE.VT_I4);
Assert.That(sa.Length, Is.EqualTo(array.Length));
Assert.That(sa.Rank, Is.EqualTo(array.Rank));
var toarray = sa.ToArray();
Assert.That(toarray, Is.EquivalentTo(array));
var i = sa.GetValue<int>(3);
Assert.That(i, Is.EqualTo(array[3]));
sa.SetValue(i + 10, 3);
Assert.That(sa.GetValue<int>(3), Is.EqualTo(i + 10));
Assert.That(sa.GetValue(3), Is.EqualTo(i + 10));
}
[Test]
public void SafeSAFEARRAYConvertMultDimTest()
{
// Setup SAFEARRAY
var array = new int[2, 3, 4] { { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } }, { { 13, 14, 15, 16 }, { 17, 18, 19, 20 }, { 21, 22, 23, 24 } } };
using var sa = SafeSAFEARRAY.CreateFromArray(array, VARTYPE.VT_I4);
Assert.That(sa.Length, Is.EqualTo(array.Length));
Assert.That(sa.Rank, Is.EqualTo(array.Rank));
var toarray = sa.ToArray();
Assert.That(toarray, Is.EquivalentTo(array));
var i = sa.GetValue<int>(1, 2, 3);
Assert.That(i, Is.EqualTo(array[1, 2, 3]));
sa.SetValue(i + 10, 1, 2, 3);
Assert.That(sa.GetValue<int>(1, 2, 3), Is.EqualTo(i + 10));
Assert.That(sa.GetValue(1, 2, 3), Is.EqualTo(i + 10));
}
// TODO: [Test]
public void VariantClearTest()
{

View File

@ -102,6 +102,7 @@ namespace Vanara.PInvoke.Tests
[TestCase(VARTYPE.VT_CF, "pclipdata")]
[TestCase(VARTYPE.VT_ARRAY | VARTYPE.VT_VARIANT, "parray")]
[TestCase(VARTYPE.VT_ARRAY | VARTYPE.VT_I4, "parray")]
[TestCase(VARTYPE.VT_BLOB, "blob")]
[TestCase(VARTYPE.VT_BSTR, "bstrVal")]
[TestCase(VARTYPE.VT_BYREF | VARTYPE.VT_BSTR, "pbstrVal")]
@ -160,6 +161,23 @@ namespace Vanara.PInvoke.Tests
}, Throws.Nothing);
}
[Test]
public void PROPVARIANTArrayTest()
{
// Setup SAFEARRAY
var array = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
using var sa = SafeSAFEARRAY.CreateFromArray(array, VARTYPE.VT_I4);
// Add it to a PV
using var pv = new PROPVARIANT(sa, VarEnum.VT_ARRAY | VarEnum.VT_I4);
Assert.That(PropVariantGetElementCount(pv), Is.EqualTo(array.Length));
Assert.That(PropVariantGetInt32Elem(pv, 5, out var iVal), ResultIs.Successful);
Assert.That(iVal, Is.EqualTo(array[5]));
// Check GetValue func
Assert.That(pv.parray, Is.EquivalentTo(array));
}
[TestCase(true, VARTYPE.VT_BOOL, "boolVal")]
[TestCase((byte)255, VARTYPE.VT_UI1, "bVal")]
[TestCase((sbyte)-126, VARTYPE.VT_I1, "cVal")]
@ -241,6 +259,14 @@ namespace Vanara.PInvoke.Tests
{
case VARTYPE.VT_ARRAY | VARTYPE.VT_VARIANT:
return new object[] { 100, "100" };
case VARTYPE.VT_ARRAY | VARTYPE.VT_I4:
var sa = SafeArrayCreateVector(VARTYPE.VT_I4, 0, 4U);
for (int i = 0; i < 4U; i++)
{
using var p = new PinnedObject(i);
SafeArrayPutElement(sa, i, p);
}
return sa;
case VARTYPE.VT_BLOB:
return new BLOB { cbSize = 200, pBlobData = Marshal.AllocCoTaskMem(200) };
case VARTYPE.VT_CY: