public void LiftImport_ExampleCustomFieldUpdatedDuringMerge() { var rangesWithStatusList = new[] { @"<?xml version=""1.0"" encoding=""UTF-8"" ?>", @"<lift-ranges>", @"<range id=""status"">", @"<range-element id=""Confirmed"" guid=""bd80cd3e-ea5e-11de-9871-0013722f8dec"">", @"<label>", @"<form lang=""en""><text>Confirmed</text></form>", @"</label>", @"<abbrev>", @"<form lang=""en""><text>Conf</text></form>", @"</abbrev>", @"</range-element>", @"<range-element id=""Pending"" guid=""bd964254-ea5e-11de-8cdf-0013722f8dec"">", @"<label>", @"<form lang=""en""><text>Pending</text></form>", @"</label>", @"<abbrev>", @"<form lang=""en""><text>Pend</text></form>", @"</abbrev>", @"</range-element>", @"</range>", @"</lift-ranges>" }; var lifDataWithExampleWithPendingStatus = new[] { @"<?xml version=""1.0"" encoding=""UTF-8"" ?>", @"<lift producer=""SIL.FLEx 8.0.10.41829"" version=""0.13"">", @"<header>", @"<ranges>", @"<range id=""status"" href=""file://*****:*****@"</ranges>", @"<fields>", @"<field tag=""EntryStatus"">", @"<form lang=""en""><text></text></form>", @"<form lang=""qaa-x-spec""><text>Class=LexEntry; Type=ReferenceAtom; WsSelector=kwsAnal; DstCls=CmPossibility; range=status</text></form>", @"</field>", @"<field tag=""CustomExampleStatus"">", @"<form lang=""en""><text></text></form>", @"<form lang=""qaa-x-spec""><text>Class=LexExampleSentence; Type=ReferenceAtom; WsSelector=kwsAnal; DstCls=CmPossibility; range=status</text></form>", @"</field>", @"</fields>", @"</header>", @"<entry dateCreated=""2013-07-14T21:32:58Z"" dateModified=""2013-07-14T21:46:21Z"" id=""tester_edae30f5-49f0-4025-97ce-3a2022bf7fa3"" guid=""edae30f5-49f0-4025-97ce-3a2022bf7fa3"">", @"<lexical-unit>", @"<form lang=""fr""><text>tester</text></form>", @"</lexical-unit>", @"<trait name=""morph-type"" value=""stem""/>", @"<trait name=""EntryStatus"" value=""Pending""/>", @"<sense id=""c1811b5c-aec1-42f7-87c2-6bbb4b76ff60"">", @"<example source=""A reference"">", @"<form lang=""fr""><text>An example sentence</text></form>", @"<translation type=""Free translation"">", @"<form lang=""en""><text>A translation</text></form>", @"</translation>", @"<note type=""reference"">", @"<form lang=""en""><text>A reference</text></form>", @"</note>", @"<trait name=""CustomExampleStatus"" value=""Pending""/>", @"</example>", @"</sense>", @"</entry>", @"</lift>" }; var lifDataWithExampleWithConfirmedStatus = new[] { @"<?xml version=""1.0"" encoding=""UTF-8"" ?>", @"<lift producer=""SIL.FLEx 8.0.10.41829"" version=""0.13"">", @"<header>", @"<ranges>", @"<range id=""status"" href=""file://*****:*****@"</ranges>", @"<fields>", @"<field tag=""EntryStatus"">", @"<form lang=""en""><text></text></form>", @"<form lang=""qaa-x-spec""><text>Class=LexEntry; Type=ReferenceAtom; WsSelector=kwsAnal; DstCls=CmPossibility; range=status</text></form>", @"</field>", @"<field tag=""CustomExampleStatus"">", @"<form lang=""en""><text></text></form>", @"<form lang=""qaa-x-spec""><text>Class=LexExampleSentence; Type=ReferenceAtom; WsSelector=kwsAnal; DstCls=CmPossibility; range=status</text></form>", @"</field>", @"</fields>", @"</header>", @"<entry dateCreated=""2014-07-14T21:32:58Z"" dateModified=""2014-07-14T21:46:21Z"" id=""tester_edae30f5-49f0-4025-97ce-3a2022bf7fa3"" guid=""edae30f5-49f0-4025-97ce-3a2022bf7fa3"">", @"<lexical-unit>", @"<form lang=""fr""><text>tester</text></form>", @"</lexical-unit>", @"<trait name=""morph-type"" value=""stem""/>", @"<trait name=""EntryStatus"" value=""Confirmed""/>", @"<sense id=""c1811b5c-aec1-42f7-87c2-6bbb4b76ff60"">", @"<example source=""A reference"">", @"<form lang=""fr""><text>An example sentence</text></form>", @"<translation type=""Free translation"">", @"<form lang=""en""><text>A translation</text></form>", @"</translation>", @"<note type=""reference"">", @"<form lang=""en""><text>A reference</text></form>", @"</note>", @"<trait name=""CustomExampleStatus"" value=""Confirmed""/>", @"</example>", @"</sense>", @"</entry>", @"</lift>" }; var wsEn = Cache.WritingSystemFactory.GetWsFromStr("en"); var statusList = Cache.ServiceLocator.GetInstance<ICmPossibilityListFactory>().CreateUnowned("status", wsEn); var confirmed = Cache.ServiceLocator.GetInstance<ICmPossibilityFactory>().Create(new Guid("bd80cd3e-ea5e-11de-9871-0013722f8dec"), statusList); confirmed.Name.set_String(wsEn, Cache.TsStrFactory.MakeString("Confirmed", wsEn)); var pending = Cache.ServiceLocator.GetInstance<ICmPossibilityFactory>().Create(new Guid("bd964254-ea5e-11de-8cdf-0013722f8dec"), statusList); pending.Name.set_String(wsEn, Cache.TsStrFactory.MakeString("Pending", wsEn)); var entryNew = new FieldDescription(Cache) { Type = CellarPropertyType.ReferenceAtomic, Class = LexEntryTags.kClassId, Name = "EntryStatus", ListRootId = statusList.Guid }; var exampleNew = new FieldDescription(Cache) { Type = CellarPropertyType.ReferenceAtomic, Class = LexExampleSentenceTags.kClassId, Name = "CustomExampleStatus", ListRootId = statusList.Guid }; entryNew.UpdateCustomField(); exampleNew.UpdateCustomField(); var repoEntry = Cache.ServiceLocator.GetInstance<ILexEntryRepository>(); var repoSense = Cache.ServiceLocator.GetInstance<ILexSenseRepository>(); Assert.AreEqual(0, repoEntry.Count); var rangeFile = CreateInputFile(rangesWithStatusList); var pendingLiftFile = CreateInputFile(lifDataWithExampleWithPendingStatus); // Verify basic import of custom field data matching existing custom list and items TryImport(pendingLiftFile, rangeFile, FlexLiftMerger.MergeStyle.MsKeepBoth, 1); Assert.AreEqual(1, repoEntry.Count); Assert.AreEqual(1, repoSense.Count); var entry = repoEntry.AllInstances().First(); var sense = repoSense.AllInstances().First(); Assert.AreEqual(1, sense.ExamplesOS.Count); var example = sense.ExamplesOS[0]; var entryCustomData = new CustomFieldData() { CustomFieldname = "EntryStatus", CustomFieldType = CellarPropertyType.ReferenceAtom, cmPossibilityNameRA = "Pending" }; var exampleCustomData = new CustomFieldData() { CustomFieldname = "CustomExampleStatus", CustomFieldType = CellarPropertyType.ReferenceAtom, cmPossibilityNameRA = "Pending" }; VerifyCustomField(entry, entryCustomData, entryNew.Id); VerifyCustomField(example, exampleCustomData, exampleNew.Id); // SUT - Verify merging of changes to custom field data var confirmedLiftFile = CreateInputFile(lifDataWithExampleWithConfirmedStatus); TryImport(confirmedLiftFile, rangeFile, FlexLiftMerger.MergeStyle.MsKeepBoth, 1); entry = repoEntry.AllInstances().First(); sense = repoSense.AllInstances().First(); Assert.AreEqual(1, sense.ExamplesOS.Count); example = sense.ExamplesOS[0]; entryCustomData.cmPossibilityNameRA = "Confirmed"; exampleCustomData.cmPossibilityNameRA = "Confirmed"; Assert.AreEqual(1, repoEntry.Count); Assert.AreEqual(1, repoSense.Count); VerifyCustomField(entry, entryCustomData, entryNew.Id); VerifyCustomField(example, exampleCustomData, exampleNew.Id); }
public void TestLiftImport7_CustomLists_and_CustomFieldsWithListData() { SetWritingSystems("fr"); var repoEntry = Cache.ServiceLocator.GetInstance<ILexEntryRepository>(); var repoSense = Cache.ServiceLocator.GetInstance<ILexSenseRepository>(); Cache.LangProject.StatusOA = Cache.ServiceLocator.GetInstance<ICmPossibilityListFactory>().Create(); Assert.AreEqual(0, repoEntry.Count); Assert.AreEqual(0, repoSense.Count); //Create the LIFT data file var sOrigFile = CreateInputFile(s_LiftData7); //Create the LIFT ranges file var sOrigRangesFile = CreateInputRangesFile(s_LiftRangeData7); var logFile = TryImportWithRanges(sOrigFile, sOrigRangesFile, 1); File.Delete(sOrigFile); File.Delete(sOrigRangesFile); Assert.IsNotNull(logFile); File.Delete(logFile); Assert.AreEqual(1, repoEntry.Count); Assert.AreEqual(1, repoSense.Count); ILexEntry entry; Assert.IsTrue(repoEntry.TryGetObject(new Guid("aef5e807-c841-4f35-9591-c8a998dc2465"), out entry)); Assert.AreEqual(1, entry.SensesOS.Count); var sense0 = entry.SensesOS[0]; Assert.AreEqual(sense0.Guid, new Guid("5741255b-0563-49e0-8839-98bdb8c73f48")); //=================================================================================== Assert.IsNotNull(entry.LexemeFormOA); Assert.IsNotNull(entry.LexemeFormOA.MorphTypeRA); Assert.AreEqual("stem", entry.LexemeFormOA.MorphTypeRA.Name.AnalysisDefaultWritingSystem.Text); Assert.AreEqual("Baba", entry.LexemeFormOA.Form.VernacularDefaultWritingSystem.Text); Assert.IsNotNull(sense0.MorphoSyntaxAnalysisRA as IMoStemMsa); // ReSharper disable PossibleNullReferenceException Assert.IsNotNull((sense0.MorphoSyntaxAnalysisRA as IMoStemMsa).PartOfSpeechRA); Assert.AreEqual("NounFamily", (sense0.MorphoSyntaxAnalysisRA as IMoStemMsa).PartOfSpeechRA.Name.AnalysisDefaultWritingSystem.Text); // ReSharper restore PossibleNullReferenceException Assert.AreEqual("Papi", sense0.Gloss.AnalysisDefaultWritingSystem.Text); // Verify example was imported Assert.AreEqual(1, sense0.ExamplesOS.Count, "Example not imported correctly."); VerifyCmPossibilityLists(); VerifyCmPossibilityCustomFields(entry); VerifyCmPossibilityCustomFieldsData(entry); var customData = new CustomFieldData() { CustomFieldname = "ExampleStatus", CustomFieldType = CellarPropertyType.ReferenceAtomic, cmPossibilityNameRA = "Pending" }; VerifyCustomFieldExample(sense0.ExamplesOS[0], customData); }
private void VerifyCmPossibilityCustomFieldsData(ILexEntry entry) { //<trait name="CustomFld ListSingle" value="Reptile"/> m_customFieldEntryIds = GetCustomFlidsOfObject(entry); var customData = new CustomFieldData() { CustomFieldname = "CustomFld ListSingle", CustomFieldType = CellarPropertyType.ReferenceAtomic, cmPossibilityNameRA = "Reptile" }; VerifyCustomField(entry, customData, m_customFieldEntryIds["CustomFld ListSingle"]); //<trait name="CustomFld ListMulti" value="Universe, creation"/> //<trait name="CustomFld ListMulti" value="Sun"/> customData = new CustomFieldData() { CustomFieldname = "CustomFld ListMulti", CustomFieldType = CellarPropertyType.ReferenceCollection }; customData.cmPossibilityNamesRS.Add("Universe, creation"); customData.cmPossibilityNamesRS.Add("Sun"); VerifyCustomField(entry, customData, m_customFieldEntryIds["CustomFld ListMulti"]); //<trait name="CustomFld CmPossibilityCustomList" value="list item 1"/> customData = new CustomFieldData() { CustomFieldname = "CustomFld CmPossibilityCustomList", CustomFieldType = CellarPropertyType.ReferenceAtomic, cmPossibilityNameRA = "list item 1" }; VerifyCustomField(entry, customData, m_customFieldEntryIds["CustomFld CmPossibilityCustomList"]); //<trait name="CustomFld CustomList2" value="cstm list item 2"/> customData = new CustomFieldData() { CustomFieldname = "CustomFld CustomList2", CustomFieldType = CellarPropertyType.ReferenceAtomic, cmPossibilityNameRA = "cstm list item 2" }; VerifyCustomField(entry, customData, m_customFieldEntryIds["CustomFld CustomList2"]); }
private void VerifyCustomField(ICmObject obj, CustomFieldData fieldData, int flid) { if(obj is ILexEntry) { var entry = (ILexEntry)obj; Assert.That(entry.LiftResidue, Is.Not.StringContaining(fieldData.CustomFieldname)); } if(obj is ILexSense) { var sense = (ILexSense)obj; Assert.That(sense.LiftResidue, Is.Not.StringContaining(fieldData.CustomFieldname)); } if(obj is ILexExampleSentence) { var example = (ILexExampleSentence)obj; Assert.That(example.LiftResidue, Is.Not.StringContaining(fieldData.CustomFieldname)); } var mdc = Cache.MetaDataCacheAccessor as IFwMetaDataCacheManaged; Assert.IsNotNull(mdc); var sda = Cache.DomainDataByFlid as ISilDataAccessManaged; Assert.IsNotNull(sda); var fieldName = mdc.GetFieldName(flid); Assert.AreEqual(fieldData.CustomFieldname, fieldName); var type = (CellarPropertyType)mdc.GetFieldType(flid); Assert.AreEqual(fieldData.CustomFieldType, type); int ws; ITsString tssString; switch (fieldData.CustomFieldType) { case CellarPropertyType.MultiUnicode: //"<field type=\"CustomFldAllomorf\">", // "<form lang=\"fr\"><text>Allomorph multi French</text></form>", // "<form lang=\"es\"><text>Allomorph multi Spanish</text></form>", // "<form lang=\"en\"><text>Allomorph multi English</text></form>", //</field> var tssMultiString = Cache.DomainDataByFlid.get_MultiStringProp(obj.Hvo, flid); Assert.IsNotNull(tssMultiString); //Assert.IsTrue(tssMultiString.StringCount >0); for (var i = 0; i < tssMultiString.StringCount; ++i) { tssString = tssMultiString.GetStringFromIndex(i, out ws); Assert.AreEqual(fieldData.MultiUnicodeStrings[i], tssString.Text); Assert.AreEqual(fieldData.MultiUnicodeWss[i], Cache.WritingSystemFactory.GetStrFromWs(ws)); } Assert.That(tssMultiString.StringCount, Is.EqualTo(fieldData.MultiUnicodeStrings.Count)); break; case CellarPropertyType.MultiString: break; case CellarPropertyType.ReferenceAtomic: //"<trait name=\"CustomFld ListSingle\" value=\"Reptile\"/>", //"<trait name=\"CustomFld CmPossibilityCustomList\" value=\"list item 1\"/>", //"<trait name=\"CustomFld CustomList2\" value=\"cstm list item 2\"/>", //"<trait name=\"CustomFldEntry ListSingleItem\" value=\"graphology\"/>", var possibilityHvo = Cache.DomainDataByFlid.get_ObjectProp(obj.Hvo, flid); if (possibilityHvo != 0) { if (possibilityHvo == 0) return; var tss = GetPossibilityBestAlternative(possibilityHvo, Cache); Assert.AreEqual(fieldData.cmPossibilityNameRA, tss.ToString()); } break; case CellarPropertyType.ReferenceCollection: case CellarPropertyType.ReferenceSequence: //"<trait name=\"CustomFld ListMulti\" value=\"Universe, creation\"/>", //"<trait name=\"CustomFld ListMulti\" value=\"Sun\"/>", var hvos = sda.VecProp(obj.Hvo, flid); int count = hvos.Length; Assert.AreEqual(fieldData.cmPossibilityNamesRS.Count, count); foreach (var hvo in hvos) { var tss = GetPossibilityBestAlternative(hvo, Cache); Assert.True(fieldData.cmPossibilityNamesRS.Contains(tss.ToString())); } break; case CellarPropertyType.String: //<field type=\"CustomField1\"> //<form lang=\"en\"> // <text>CustomField1text.</text> //</form> //</field> tssString = Cache.DomainDataByFlid.get_StringProp(obj.Hvo, flid); Assert.AreEqual(fieldData.StringFieldText, tssString.Text); ws = tssString.get_WritingSystem(0); Assert.AreEqual(fieldData.StringFieldWs, Cache.WritingSystemFactory.GetStrFromWs(ws)); break; case CellarPropertyType.GenDate: //"<trait name=\"CustomFldEntry GenDate\" value=\"201105232\"/>", var genDate = sda.get_GenDateProp(obj.Hvo, flid); VerifyGenDate(fieldData, genDate); break; case CellarPropertyType.Integer: //<trait name="CustomField2-LexSense Integer" value="5"></trait> var intVal = Cache.DomainDataByFlid.get_IntProp(obj.Hvo, flid); if (intVal != 0) Assert.AreEqual(fieldData.IntegerValue, intVal); break; default: break; } }
private static void VerifyGenDate(CustomFieldData fieldData, GenDate genDate) { //"<trait name=\"CustomFldEntry GenDate\" value=\"201105232\"/>", // '-'(BC and ''AD) 2011 05(May) 11(Day) 2(GenDate.PrecisionType (Before, Exact, Approximate, After) var sValue = fieldData.GenDateLiftFormat; Assert.IsNotNull(sValue); var liftGenDate = LiftExporter.GetGenDateFromInt(Convert.ToInt32(sValue)); Assert.AreEqual(liftGenDate.Precision, genDate.Precision); Assert.AreEqual(liftGenDate.IsAD, genDate.IsAD); Assert.AreEqual(liftGenDate.Year, genDate.Year); Assert.AreEqual(liftGenDate.Month, genDate.Month); Assert.AreEqual(liftGenDate.Day, genDate.Day); }
private void VerifyCustomFieldExample(ILexExampleSentence obj, CustomFieldData expectedData) { m_customFieldExampleSentencesIds = GetCustomFlidsOfObject(obj); VerifyCustomField(obj, expectedData, m_customFieldExampleSentencesIds[expectedData.CustomFieldname]); }
private void VerifyCustomFieldsAllomorph(ICmObject obj) { m_customFieldAllomorphsIds = GetCustomFlidsOfObject(obj); var customData = new CustomFieldData() { CustomFieldname = "CustmFldAllomorph Int", CustomFieldType = CellarPropertyType.Integer, IntegerValue = 175 }; VerifyCustomField(obj, customData, m_customFieldAllomorphsIds["CustmFldAllomorph Int"]); }
private void VerifyCustomFieldsEntry(ICmObject obj) { m_customFieldEntryIds = GetCustomFlidsOfObject(obj); var customData = new CustomFieldData() { CustomFieldname = "CustomFldEntry Number", CustomFieldType = CellarPropertyType.Integer, IntegerValue = 13 }; VerifyCustomField(obj, customData, m_customFieldEntryIds["CustomFldEntry Number"]); customData = new CustomFieldData() { CustomFieldname = "CustomFldEntry GenDate", CustomFieldType = CellarPropertyType.GenDate, GenDateLiftFormat = "201105232" }; VerifyCustomField(obj, customData, m_customFieldEntryIds["CustomFldEntry GenDate"]); var mdc = Cache.MetaDataCacheAccessor as IFwMetaDataCacheManaged; var stringFlid = m_customFieldEntryIds["CustomFldEntry String"]; var wsSpec = mdc.GetFieldWs(stringFlid); Assert.That(wsSpec, Is.EqualTo(WritingSystemServices.kwsVern)); }
public void TestLiftImport6_CustomFieldsNumberGenDate() { SetWritingSystems("fr"); var repoEntry = Cache.ServiceLocator.GetInstance<ILexEntryRepository>(); var repoSense = Cache.ServiceLocator.GetInstance<ILexSenseRepository>(); Assert.AreEqual(0, repoEntry.Count); Assert.AreEqual(0, repoSense.Count); var sOrigFile = CreateInputFile(s_LiftData6); var logFile = TryImport(sOrigFile, 1); File.Delete(sOrigFile); Assert.IsNotNull(logFile); File.Delete(logFile); Assert.AreEqual(1, repoEntry.Count); Assert.AreEqual(1, repoSense.Count); ILexEntry entry; Assert.IsTrue(repoEntry.TryGetObject(new Guid("c78f68b9-79d0-4ce9-8b76-baa68a5c8444"), out entry)); Assert.AreEqual(1, entry.SensesOS.Count); var sense0 = entry.SensesOS[0]; Assert.AreEqual(sense0.Guid, new Guid("9d6c600b-192a-4eec-980b-a605173ba5e3")); //=================================================================================== Assert.IsNotNull(entry.LexemeFormOA); Assert.IsNotNull(entry.LexemeFormOA.MorphTypeRA); Assert.AreEqual("stem", entry.LexemeFormOA.MorphTypeRA.Name.AnalysisDefaultWritingSystem.Text); Assert.AreEqual("Baba", entry.LexemeFormOA.Form.VernacularDefaultWritingSystem.Text); Assert.IsNotNull(sense0.MorphoSyntaxAnalysisRA as IMoStemMsa); // ReSharper disable PossibleNullReferenceException Assert.IsNotNull((sense0.MorphoSyntaxAnalysisRA as IMoStemMsa).PartOfSpeechRA); Assert.AreEqual("NounPerson", (sense0.MorphoSyntaxAnalysisRA as IMoStemMsa).PartOfSpeechRA.Name.AnalysisDefaultWritingSystem.Text); // ReSharper restore PossibleNullReferenceException Assert.AreEqual("Pops", sense0.Gloss.AnalysisDefaultWritingSystem.Text); //=================================================================================== VerifyCustomFieldsEntry(entry); //=================================================================================== VerifyCustomFieldsSense(sense0); //=================================================================================== var example = sense0.ExamplesOS[0]; var customData = new CustomFieldData() { CustomFieldname = "CustmFldExample Int", CustomFieldType = CellarPropertyType.Integer, IntegerValue = 24 }; VerifyCustomFieldExample(example, customData); //==================================Allomorph Custom Field Test===== MultiString var form = entry.AlternateFormsOS[0]; VerifyCustomFieldsAllomorph(form); }
public void TestLiftImport5_CustomFieldsStringsAndMultiUnicode() { SetWritingSystems("fr"); var repoEntry = Cache.ServiceLocator.GetInstance<ILexEntryRepository>(); var repoSense = Cache.ServiceLocator.GetInstance<ILexSenseRepository>(); Assert.AreEqual(0, repoEntry.Count); Assert.AreEqual(0, repoSense.Count); // One custom field is defined in FW but not in the file var fdNew = new FieldDescription(Cache) { Type = CellarPropertyType.MultiUnicode, Class = LexEntryTags.kClassId, Name = "UndefinedCustom", Userlabel = "UndefinedCustom", HelpString = "some help", WsSelector = WritingSystemServices.kwsAnalVerns, DstCls = 0, ListRootId = Guid.Empty }; fdNew.UpdateCustomField(); var sOrigFile = CreateInputFile(s_LiftData5); var logFile = TryImport(sOrigFile, 2); File.Delete(sOrigFile); Assert.IsNotNull(logFile); File.Delete(logFile); Assert.AreEqual(2, repoEntry.Count); Assert.AreEqual(2, repoSense.Count); ILexEntry entry; Assert.IsTrue(repoEntry.TryGetObject(new Guid("7e4e4484-d691-4ffa-8fb1-10cf4941ac14"), out entry)); Assert.AreEqual(1, entry.SensesOS.Count); var sense0 = entry.SensesOS[0]; Assert.AreEqual(sense0.Guid, new Guid("29b7913f-0d28-4ee9-a57e-177f68a96654")); var customData = new CustomFieldData() { CustomFieldname = "CustomFldSense", CustomFieldType = CellarPropertyType.String, StringFieldText = "Sense custom fiield in English", StringFieldWs = "en" }; m_customFieldSenseIds = GetCustomFlidsOfObject(sense0); VerifyCustomField(sense0, customData, m_customFieldSenseIds["CustomFldSense"]); //=================================================================================== Assert.IsNotNull(entry.LexemeFormOA); Assert.IsNotNull(entry.LexemeFormOA.MorphTypeRA); Assert.AreEqual("stem", entry.LexemeFormOA.MorphTypeRA.Name.AnalysisDefaultWritingSystem.Text); Assert.AreEqual("Babababa", entry.LexemeFormOA.Form.VernacularDefaultWritingSystem.Text); Assert.IsNotNull(sense0.MorphoSyntaxAnalysisRA as IMoStemMsa); // ReSharper disable PossibleNullReferenceException Assert.IsNotNull((sense0.MorphoSyntaxAnalysisRA as IMoStemMsa).PartOfSpeechRA); Assert.AreEqual("Noun", (sense0.MorphoSyntaxAnalysisRA as IMoStemMsa).PartOfSpeechRA.Name.AnalysisDefaultWritingSystem.Text); // ReSharper restore PossibleNullReferenceException Assert.AreEqual("Papi", sense0.Gloss.AnalysisDefaultWritingSystem.Text); m_customFieldEntryIds = GetCustomFlidsOfObject(entry); customData = new CustomFieldData() { CustomFieldname = "UndefinedCustom", CustomFieldType = CellarPropertyType.MultiUnicode, }; customData.MultiUnicodeStrings.Add("Undefined custom field"); customData.MultiUnicodeWss.Add("en"); VerifyCustomField(entry, customData, m_customFieldEntryIds["UndefinedCustom"]); customData = new CustomFieldData() { CustomFieldname = "CustomFldEntry", CustomFieldType = CellarPropertyType.String, StringFieldText = "Entry custom field", StringFieldWs = "en" }; VerifyCustomField(entry, customData, m_customFieldEntryIds["CustomFldEntry"]); //"<field type=\"CustomFldEntryMulti\">", // "<form lang=\"fr\"><text>Entry Multi Frn</text></form>", // "<form lang=\"es\"><text>Entry Multi Spn</text></form>", // "<form lang=\"en\"><text>Entry Multi Eng</text></form>", // "</field>", customData = new CustomFieldData() { CustomFieldname = "CustomFldEntryMulti", CustomFieldType = CellarPropertyType.MultiUnicode, }; customData.MultiUnicodeStrings.Add("Entry Multi Frn"); customData.MultiUnicodeStrings.Add("Entry Multi Spn"); customData.MultiUnicodeStrings.Add("Entry Multi Eng"); customData.MultiUnicodeWss.Add("fr"); customData.MultiUnicodeWss.Add("es"); customData.MultiUnicodeWss.Add("en"); VerifyCustomField(entry, customData, m_customFieldEntryIds["CustomFldEntryMulti"]); foreach (var example in sense0.ExamplesOS) { m_customFieldExampleSentencesIds = GetCustomFlidsOfObject(example); customData = new CustomFieldData() { CustomFieldname = "CustomFldExample", CustomFieldType = CellarPropertyType.String, StringFieldText = "example sentence custom field", StringFieldWs = "fr" }; VerifyCustomField(example, customData, m_customFieldExampleSentencesIds["CustomFldExample"]); } //==================================Allomorph Custom Field Test===== MultiString var form = entry.AlternateFormsOS[0]; m_customFieldAllomorphsIds = GetCustomFlidsOfObject(form); customData = new CustomFieldData() { CustomFieldname = "CustomFldAllomorf", CustomFieldType = CellarPropertyType.MultiUnicode, }; customData.MultiUnicodeStrings.Add("Allomorph multi French"); customData.MultiUnicodeStrings.Add("Allomorph multi Spanish"); customData.MultiUnicodeStrings.Add("Allomorph multi English"); customData.MultiUnicodeWss.Add("fr"); customData.MultiUnicodeWss.Add("es"); customData.MultiUnicodeWss.Add("en"); VerifyCustomField(form, customData, m_customFieldAllomorphsIds["CustomFldAllomorf"]); //"<field type=\"CustomFldAllomorphSingle\">", //"<form lang=\"fr\"><text>Allomorph single Vernacular</text></form>", //"</field>", customData = new CustomFieldData() { CustomFieldname = "CustomFldAllomorphSingle", CustomFieldType = CellarPropertyType.String, StringFieldText = "Allomorph single Vernacular", StringFieldWs = "fr" }; VerifyCustomField(form, customData, m_customFieldAllomorphsIds["CustomFldAllomorphSingle"]); }