Beispiel #1
0
		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);
		}
Beispiel #2
0
		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);
		}
Beispiel #3
0
		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"]);
		}
Beispiel #4
0
		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;
			}
		}
Beispiel #5
0
		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);
		}
Beispiel #6
0
		private void VerifyCustomFieldExample(ILexExampleSentence obj, CustomFieldData expectedData)
		{
			m_customFieldExampleSentencesIds = GetCustomFlidsOfObject(obj);
			VerifyCustomField(obj, expectedData, m_customFieldExampleSentencesIds[expectedData.CustomFieldname]);
		}
Beispiel #7
0
		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"]);
		}
Beispiel #8
0
		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));
		}
Beispiel #9
0
		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);
		}
Beispiel #10
0
		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"]);
		}