public void FromHandleTest() { // Arrange int type = 4; double[] parameters = new double[] { 2.4, 1.0 / 1.055, 0.055 / 1.055, 1.0 / 12.92, 0.04045 }; double gamma = 2.2; uint nItems = 0; string languageCode = "en"; string countryCode = "US"; string expectedText = "from-handle"; using (var context = Context.Create(IntPtr.Zero, IntPtr.Zero)) using (var ucr = ToneCurve.BuildParametric(context, type, parameters)) using (var bg = ToneCurve.BuildGamma(context, gamma)) using (var desc = MultiLocalizedUnicode.Create(context, nItems)) { desc.SetASCII(languageCode, countryCode, expectedText); var notExpectedUcr = IntPtr.Zero; var notExpectedBg = IntPtr.Zero; var notExpectedDesc = IntPtr.Zero; var target = new UcrBg(ucr, bg, desc); using (var profile = Profile.CreatePlaceholder(null)) { profile.WriteTag(TagSignature.UcrBg, target); IntPtr handle = profile.ReadTag(TagSignature.UcrBg); // Act var actual = UcrBg.FromHandle(handle); var actualUcr = actual.Ucr; var actualBg = actual.Bg; var actualDesc = actual.Desc; // Assert Assert.AreNotEqual(notExpectedUcr, actualUcr); Assert.AreNotEqual(notExpectedBg, actualBg); Assert.AreNotEqual(notExpectedDesc, actualDesc); var desc2 = MultiLocalizedUnicode.FromHandle(actualDesc); var actualText = desc2.GetASCII(languageCode, countryCode); Assert.AreEqual(expectedText, actualText); } } }
public void FromHandleTest() { // Arrange string expected = "sRGB IEC61966-2.1"; using (MemoryStream ms = Save(".Resources.sRGB.icc")) { using (var profile = Profile.Open(ms.GetBuffer())) using (var mlu = MultiLocalizedUnicode.FromHandle(profile.ReadTag(TagSignature.ProfileDescription))) { // Act string actual = mlu.GetASCII(MultiLocalizedUnicode.NoLanguage, MultiLocalizedUnicode.NoCountry); // Assert Assert.AreEqual(expected, actual); } } }
public void PluginTagWithDeciderTest() { // Arrange const TagSignature SignaturelNET = (TagSignature)0x6C4E4554; // 'lNET' // ensure delegates are not garbage collected from managed code var decide = new DecideType(Decide); PluginTag tag = new PluginTag { Base = new PluginBase { Magic = Cms.PluginMagicNumber, ExpectedVersion = (uint)Cms.EncodedCMMVersion, // >= 2.8 Type = PluginType.Tag, Next = IntPtr.Zero }, Signature = SignaturelNET, Descriptor = new TagDescriptor { ElemCount = 1, nSupportedTypes = 1, SupportedTypes = new TagTypeSignature[TagDescriptor.MAX_TYPES_IN_LCMS_PLUGIN], Decider = Marshal.GetFunctionPointerForDelegate(decide) } }; tag.Descriptor.SupportedTypes[0] = TagTypeSignature.Text; string expected = "PluginTagWithDeciderTest"; // Act int rawsize = Marshal.SizeOf(tag); IntPtr plugin = Marshal.AllocHGlobal(rawsize); Marshal.StructureToPtr(tag, plugin, false); try { using (var context = Context.Create(plugin, IntPtr.Zero)) using (var profile = Profile.CreatePlaceholder(context)) { using (var mlu = MultiLocalizedUnicode.Create(context)) { mlu.SetASCII(MultiLocalizedUnicode.NoLanguage, MultiLocalizedUnicode.NoCountry, expected); bool written = profile.WriteTag(SignaturelNET, mlu); Assert.IsTrue(written); } using (var mlu = profile.ReadTag <MultiLocalizedUnicode>(SignaturelNET)) { var actual = mlu.GetASCII(MultiLocalizedUnicode.NoLanguage, MultiLocalizedUnicode.NoCountry); // Assert Assert.AreEqual(expected, actual); } } } finally { Marshal.DestroyStructure(plugin, typeof(PluginTag)); Marshal.FreeHGlobal(plugin); } TagTypeSignature Decide(double iccVersion, IntPtr data) { TestContext.WriteLine($"iccVersion: {iccVersion}, data: 0x{data:X}"); using (var mlu = MultiLocalizedUnicode.FromHandle(data)) { var text = mlu.GetASCII(MultiLocalizedUnicode.NoLanguage, MultiLocalizedUnicode.NoCountry); TestContext.WriteLine($"text: {text}"); } return(TagTypeSignature.Text); } }