Vanara/UnitTests/PInvoke/Usp10/Usp10Tests.cs

215 lines
6.2 KiB
C#

using NUnit.Framework;
using NUnit.Framework.Internal;
using System;
using System.Linq;
using static Vanara.PInvoke.Gdi32;
using static Vanara.PInvoke.Usp10;
namespace Vanara.PInvoke.Tests
{
[TestFixture]
public class Usp10Tests
{
private const string str = "Hello, world!\u064A\u064F\u0633\u0627\u0648\u0650\u064A How are you?";
private SafeHDC dc;
private SafeHFONT fnt;
private SafeSCRIPT_CACHE sc;
[OneTimeSetUp]
public void _Setup()
{
sc = new SafeSCRIPT_CACHE();
dc = CreateCompatibleDC();
fnt = CreateFont(20, iQuality: OutputQuality.PROOF_QUALITY, iPitchAndFamily: PitchAndFamily.DEFAULT_PITCH | PitchAndFamily.FF_ROMAN, pszFaceName: "Times New Roman");
dc.SelectObject(fnt);
}
[OneTimeTearDown]
public void _TearDown()
{
fnt.Dispose();
dc.Dispose();
sc.Dispose();
}
[Test]
public void SafeSCRIPT_CACHETest()
{
SafeSCRIPT_CACHE lsc = new();
Assert.That(lsc.IsInvalid, Is.True);
Assert.That(ScriptCacheGetHeight(dc, lsc, out _), ResultIs.Successful);
Assert.That(lsc.IsInvalid, Is.False);
lsc.Dispose();
Assert.That(lsc.IsInvalid, Is.True);
}
[Test]
public void ScriptBreakTest()
{
SCRIPT_LOGATTR[] array = new SCRIPT_LOGATTR[str.Length];
Assert.That(ScriptBreak(str, str.Length, new(), array), ResultIs.Successful);
Assert.That(array.Select(i => i.fWordStop), Has.Some.True);
foreach (SCRIPT_LOGATTR la in array)
{
la.WriteValues();
}
}
[Test]
public void ScriptCacheGetHeightTest()
{
Assert.That(ScriptCacheGetHeight(dc, sc, out int h), ResultIs.Successful);
Assert.That(h, Is.GreaterThan(0));
}
[Test]
public void ScriptGetCMapTest()
{
ushort[] gl = new ushort[str.Length];
Assert.That(ScriptGetCMap(dc, sc, str, str.Length, 0, gl), ResultIs.Successful);
Assert.That(gl[str.Length - 1], Is.Not.Zero);
gl.WriteValues();
}
[Test]
public void ScriptGetFontAlternateGlyphsTest()
{
const int max = 50;
ushort[] pItems = new ushort[max];
Assert.That(ScriptGetFontAlternateGlyphs(dc, sc, default, "DFLT", "latn", "afrc", 7961, max, pItems, out int c), ResultIs.Successful);
foreach (ushort i in pItems.Take(c))
{
i.WriteValues();
}
}
[Test]
public void ScriptGetFontFeatureTagsTest()
{
const int max = 50;
OPENTYPE_TAG[] pItems = new OPENTYPE_TAG[max];
Assert.That(ScriptGetFontFeatureTags(dc, sc, default, "DFLT", "latn", max, pItems, out int c), ResultIs.Successful);
foreach (OPENTYPE_TAG i in pItems.Take(c))
{
i.WriteValues();
}
}
[Test]
public void ScriptGetFontLanguageTagsTest()
{
const int max = 50;
OPENTYPE_TAG[] pItems = new OPENTYPE_TAG[max];
Assert.That(ScriptGetFontLanguageTags(dc, sc, default, "DFLT", max, pItems, out int c), ResultIs.Successful);
foreach (OPENTYPE_TAG i in pItems.Take(c))
{
i.WriteValues();
}
}
[Test]
public void ScriptGetFontPropertiesTest()
{
var fp = SCRIPT_FONTPROPERTIES.Default;
Assert.That(ScriptGetFontProperties(dc, sc, ref fp), ResultIs.Successful);
Assert.That(fp.cBytes, Is.GreaterThan(0));
fp.WriteValues();
}
[Test]
public void ScriptGetFontScriptTagsTest()
{
const int max = 50;
OPENTYPE_TAG[] pItems = new OPENTYPE_TAG[max];
Assert.That(ScriptGetFontScriptTags(dc, sc, default, max, pItems, out int c), ResultIs.Successful);
foreach (OPENTYPE_TAG i in pItems.Take(c))
{
i.WriteValues();
}
}
[Test]
public void ScriptGetGlyphABCWidthTest()
{
Assert.That(ScriptGetGlyphABCWidth(dc, sc, 7961, out var abc), ResultIs.Successful);
abc.WriteValues();
}
[Test]
public void ScriptGetPropertiesTest()
{
Assert.That(ScriptGetProperties(out SCRIPT_PROPERTIES[] sp), ResultIs.Successful);
sp.WriteValues();
}
[Test]
public void ScriptIsComplexTest() => Assert.That(ScriptIsComplex(str, str.Length, SIC.SIC_COMPLEX), ResultIs.Successful);
[Test]
public void ScriptItemizeTest()
{
const int max = 50;
Assert.That(ScriptGetProperties(out SCRIPT_PROPERTIES[] sp), ResultIs.Successful);
SCRIPT_ITEM[] pItems = new SCRIPT_ITEM[max];
Assert.That(ScriptItemize(str, str.Length, pItems.Length, default, default, pItems, out int cItems), ResultIs.Successful);
Assert.That(pItems.Take(cItems).Select(i => i.a.eScript).Select(s => sp[s].fComplex), Has.Some.True);
foreach (SCRIPT_ITEM i in pItems.Take(cItems))
{
i.WriteValues();
}
}
[Test]
public void ScriptItemizeTest2()
{
const int max = 50;
Assert.That(ScriptGetProperties(out SCRIPT_PROPERTIES[] sp), ResultIs.Successful);
Assert.That(ScriptRecordDigitSubstitution(LCID.LOCALE_CUSTOM_DEFAULT, out SCRIPT_DIGITSUBSTITUTE sub), ResultIs.Successful);
sub.WriteValues();
Assert.That(ScriptApplyDigitSubstitution(sub, out SCRIPT_CONTROL sc, out SCRIPT_STATE ss), ResultIs.Successful);
sc.WriteValues();
ss.WriteValues();
SCRIPT_ITEM[] pItems = new SCRIPT_ITEM[max];
Assert.That(ScriptItemize(str, str.Length, pItems.Length, sc, ss, pItems, out int cItems), ResultIs.Successful);
Assert.That(pItems.Take(cItems).Select(i => i.a.eScript).Select(s => sp[s].fComplex), Has.Some.True);
foreach (SCRIPT_ITEM i in pItems.Take(cItems))
{
i.WriteValues();
}
}
[Test]
public void ScriptShapeTest()
{
var max = (int)Math.Round(str.Length * 1.5m + 16);
var sa = new SCRIPT_ANALYSIS();
var glfs = new ushort[max];
var log = new ushort[str.Length];
var sva = new SCRIPT_VISATTR[max];
Assert.That(ScriptShape(dc, sc, str, str.Length, max, ref sa, glfs, log, sva, out var c), ResultIs.Successful);
c.WriteValues();
sa.WriteValues();
Array.Resize(ref glfs, c);
glfs.WriteValues();
log.WriteValues();
Array.Resize(ref sva, c);
sva.WriteValues();
}
[Test]
public void ScriptStringAnalyseTest()
{
using SafeSCRIPT_STRING_ANALYSIS ssa = ScriptStringAnalyse(dc, str, SSA.SSA_FALLBACK | SSA.SSA_GLYPHS | SSA.SSA_LINK);
Assert.That(ssa.IsInvalid, Is.False);
Assert.That(ssa.Size.HasValue, Is.True);
Assert.That(ssa.OutChars, Is.EqualTo(33));
ssa.WriteValues();
Assert.That(ssa.Out(POINT.Empty), ResultIs.Successful);
Assert.That(ssa.CPtoX(5, true), Is.GreaterThan(0));
Assert.That(ssa.XtoCP(ssa.Size.Value.Width).cp, Is.GreaterThan(30));
}
}
}