public void DataMigration7000062Test() { var mockMdc = new MockMDCForDataMigration(); mockMdc.AddClass(1, "CmObject", null, new List <string> { "LangProject", "StStyle", "CmResource" }); mockMdc.AddClass(2, "LangProject", "CmObject", new List <string>()); mockMdc.AddClass(3, "StStyle", "CmObject", new List <string>()); mockMdc.AddClass(4, "CmResource", "CmObject", new List <string>()); var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000062.xml"); IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000061, dtos, mockMdc, null, TestDirectoryFinder.LcmDirectories); m_dataMigrationManager.PerformMigration(dtoRepos, 7000062, new DummyProgressDlg()); // Check Step 1.A. // <rt class="StStyle" guid ="bb68f6bc-f233-4cd4-8894-c33b4b4c43ba"> DomainObjectDTO dto; dtoRepos.TryGetValue("bb68f6bc-f233-4cd4-8894-c33b4b4c43ba", out dto); Assert.IsNull(dto); // Step 1.A. Control // <rt class="StStyle" guid ="9d28219c-6185-416e-828b-b9e304de141c" ownerguid="88ddebd1-dfad-4033-8b1c-896081469f66"> dtoRepos.TryGetValue("9d28219c-6185-416e-828b-b9e304de141c", out dto); Assert.IsNotNull(dto); // Check Step 1.B. (Real + control) foreach (var resourceDto in dtoRepos.AllInstancesSansSubclasses("CmResource")) { var resourceElement = XElement.Parse(resourceDto.Xml); var name = resourceElement.Element("Name").Element("Uni").Value; var actualVersion = resourceElement.Element("Version").Attribute("val").Value; var expectedVersion = ""; switch (name) { case "TeStyles": expectedVersion = "700176e1-4f42-4abd-8fb5-3c586670085d"; break; case "FlexStyles": expectedVersion = "13c213b9-e409-41fc-8782-7ca0ee983b2c"; break; case "ControlResource": expectedVersion = "c1ede2e2-e382-11de-8a39-0800200c9a66"; break; } Assert.AreEqual(expectedVersion, actualVersion); } Assert.AreEqual(7000062, dtoRepos.CurrentModelVersion, "Wrong updated version."); }
public void TryGetValueTests() { var dtos = new HashSet <DomainObjectDTO>(); // 1. Add barebones LP. const string lpGuid = "9719A466-2240-4DEA-9722-9FE0746A30A6"; CreatoDTO(dtos, lpGuid, "LangProject", null); IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(1, dtos, m_mdc, null, TestDirectoryFinder.LcmDirectories); DomainObjectDTO dto; var retval = dtoRepos.TryGetValue(Guid.NewGuid().ToString().ToLower(), out dto); Assert.IsNull(dto, "Oops.It does exist."); Assert.IsFalse(retval, "Reportedly, it does exist."); retval = dtoRepos.TryGetValue("9719A466-2240-4DEA-9722-9FE0746A30A6", out dto); Assert.IsNotNull(dto, "LP does not exist???"); Assert.IsTrue(retval, "Reportedly, it does not exist."); }
public void DataMigration7000051Test() { var dtos = new HashSet <DomainObjectDTO>(); var sb = new StringBuilder(); // Add Lang Project dto. const string sLpGuid = "9719A466-2240-4DEA-9722-9FE0746A30A6"; const string afxCatGuid = "60ab6c6c-43f3-4a7f-af61-96b4b77648a5"; sb.AppendFormat("<rt class=\"LangProject\" guid=\"{0}\">", sLpGuid); sb.Append("<AffixCategories>"); sb.AppendFormat("<objsur guid=\"{0}\" t=\"o\" />", afxCatGuid); sb.Append("</AffixCategories>"); sb.Append("</rt>"); var oldDto = new DomainObjectDTO(sLpGuid, "LangProject", sb.ToString()); dtos.Add(oldDto); sb.Length = 0; sb.AppendFormat("<rt class=\"CmPossibilityList\" guid=\"{0}\" ownerguid=\"{1}\" />", afxCatGuid, sLpGuid); var afxCatDto = new DomainObjectDTO(afxCatGuid, "CmPossibilityList", sb.ToString()); dtos.Add(afxCatDto); // Set up mock MDC. var mockMDC = new MockMDCForDataMigration(); mockMDC.AddClass(1, "CmObject", null, new List <string> { "LangProject", "CmPossibilityList" }); // Not true, but no matter. mockMDC.AddClass(2, "LangProject", "CmObject", new List <string>()); mockMDC.AddClass(3, "CmPossibilityList", "CmObject", new List <string>()); IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000050, dtos, mockMDC, null, TestDirectoryFinder.LcmDirectories); m_dataMigrationManager.PerformMigration(dtoRepos, 7000051, new DummyProgressDlg()); Assert.AreEqual(7000051, dtoRepos.CurrentModelVersion, "Wrong updated version."); // Check that the old LP is not present. DomainObjectDTO gonerDto; Assert.IsFalse(dtoRepos.TryGetValue(sLpGuid, out gonerDto)); Assert.IsTrue(((DomainObjectDtoRepository)dtoRepos).Goners.Contains(oldDto)); var newDto = dtoRepos.AllInstancesSansSubclasses("LangProject").FirstOrDefault(); Assert.IsNotNull(newDto); Assert.AreNotSame(oldDto, newDto); var newDtoGuid = newDto.Guid.ToLowerInvariant(); Assert.AreNotEqual(sLpGuid.ToLowerInvariant(), newDtoGuid); // Check that ownerguid was changed on afxCatDto. var afxCatElm = XElement.Parse(afxCatDto.Xml); Assert.AreEqual(newDtoGuid, afxCatElm.Attribute("ownerguid").Value.ToLowerInvariant()); }
public void DataMigration7000056Test() { var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000056.xml"); // Set up mock MDC. var mockMDC = new MockMDCForDataMigration(); IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000055, dtos, mockMDC, null, TestDirectoryFinder.LcmDirectories); m_dataMigrationManager.PerformMigration(dtoRepos, 7000056, new DummyProgressDlg()); Assert.AreEqual(7000056, dtoRepos.CurrentModelVersion, "Wrong updated version."); // check that PhPhonData has the PhonRuleFeats possibility list { var dtosList = dtoRepos.AllInstancesSansSubclasses("PhPhonData"); DomainObjectDTO dtoPhPhonDataTest = dtosList.First(); CheckPhPhonData(dtoPhPhonDataTest, dtoRepos); } // In the extremely unlikely event that there is no PhPhonData yet, check that we add it { dtos = new HashSet <DomainObjectDTO>(); var sb = new StringBuilder(); // Add WfiMorphBundle that already has a form. const string sGuid_wmbLangProj = "00b35f9f-86ce-4f07-bde7-b65c28503641"; sb.AppendFormat("<rt class=\"LangProj\" guid=\"{0}\">", sGuid_wmbLangProj); sb.Append("</rt>"); var dtoLangProj = new DomainObjectDTO(sGuid_wmbLangProj, "LangProj", sb.ToString()); dtos.Add(dtoLangProj); sb.Length = 0; mockMDC = new MockMDCForDataMigration(); dtoRepos = new DomainObjectDtoRepository(7000055, dtos, mockMDC, null, TestDirectoryFinder.LcmDirectories); m_dataMigrationManager.PerformMigration(dtoRepos, 7000056, new DummyProgressDlg()); Assert.AreEqual(7000056, dtoRepos.CurrentModelVersion, "Wrong updated version."); var dtosList = dtoRepos.AllInstancesSansSubclasses("LangProj"); DomainObjectDTO dtoLangProjTest = dtosList.First(); var eltWmbLangProjTest = XElement.Parse(dtoLangProjTest.Xml); // get phon rule feats var eltPhonologicalDataTest = eltWmbLangProjTest.Element("PhonologicalData"); Assert.IsNotNull(eltPhonologicalDataTest); var eltObjsurTest = eltPhonologicalDataTest.Element("objsur"); Assert.IsNotNull(eltObjsurTest); // get possibility list itself var guidPhPhonDataTest = eltObjsurTest.Attribute("guid").Value; Assert.IsNotNull(guidPhPhonDataTest); DomainObjectDTO dtoPhPhonDataTest; dtoRepos.TryGetValue(guidPhPhonDataTest, out dtoPhPhonDataTest); Assert.IsNotNull(dtoPhPhonDataTest); CheckPhPhonData(dtoPhPhonDataTest, dtoRepos); } }
public void DataMigration7000061Test() { var mockMdc = new MockMDCForDataMigration(); mockMdc.AddClass(1, "CmObject", null, new List <string> { "LangProject", "StStyle", "CmResource", "LexEntry", "MoStemAllomorph", "MoStemName", "MoStemMsa", "CmIndirectAnnotation", "CmBaseAnnotation", "MoMorphAdhocProhib", "StText", "StTxtPara" }); mockMdc.AddClass(2, "LangProject", "CmObject", new List <string>()); mockMdc.AddClass(3, "StStyle", "CmObject", new List <string>()); mockMdc.AddClass(4, "CmResource", "CmObject", new List <string>()); mockMdc.AddClass(5, "LexEntry", "CmObject", new List <string>()); mockMdc.AddClass(6, "MoStemAllomorph", "CmObject", new List <string>()); mockMdc.AddClass(7, "MoStemName", "CmObject", new List <string>()); mockMdc.AddClass(8, "MoStemMsa", "CmObject", new List <string>()); mockMdc.AddClass(9, "CmIndirectAnnotation", "CmObject", new List <string>()); mockMdc.AddClass(10, "CmBaseAnnotation", "CmObject", new List <string>()); mockMdc.AddClass(11, "MoMorphAdhocProhib", "CmObject", new List <string>()); mockMdc.AddClass(12, "StText", "CmObject", new List <string>()); mockMdc.AddClass(13, "StTxtPara", "CmObject", new List <string>()); mockMdc.AddField(1001, "Name", CellarPropertyType.Unicode, 0); mockMdc.AddField(5001, "LexemeForm", CellarPropertyType.OwningAtomic, 6); mockMdc.AddField(6001, "StemName", CellarPropertyType.ReferenceAtomic, 7); var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000061.xml"); IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000060, dtos, mockMdc, null, TestDirectoryFinder.LcmDirectories); m_dataMigrationManager.PerformMigration(dtoRepos, 7000061, new DummyProgressDlg()); // Check Step 1.A. // <rt class="StStyle" guid ="bb68f6bc-f233-4cd4-8894-c33b4b4c43ba"> DomainObjectDTO dto; dtoRepos.TryGetValue("bb68f6bc-f233-4cd4-8894-c33b4b4c43ba", out dto); Assert.IsNull(dto); // Step 1.A. Control // <rt class="StStyle" guid ="9d28219c-6185-416e-828b-b9e304de141c" ownerguid="88ddebd1-dfad-4033-8b1c-896081469f66"> dtoRepos.TryGetValue("9d28219c-6185-416e-828b-b9e304de141c", out dto); Assert.IsNotNull(dto); // Check Step 1.B. (Real + control) foreach (var resourceDto in dtoRepos.AllInstancesSansSubclasses("CmResource")) { var resourceElement = XElement.Parse(resourceDto.Xml); var name = resourceElement.Element("Name").Element("Uni").Value; var actualVersion = resourceElement.Element("Version").Attribute("val").Value; var expectedVersion = ""; switch (name) { case "TeStyles": expectedVersion = "700176e1-4f42-4abd-8fb5-3c586670085d"; break; case "FlexStyles": expectedVersion = "13c213b9-e409-41fc-8782-7ca0ee983b2c"; break; case "ControlResource": expectedVersion = "c1ede2e2-e382-11de-8a39-0800200c9a66"; break; } Assert.AreEqual(expectedVersion, actualVersion); } // Step 2. (atomic owning and ref props with multiple elements) dto = dtoRepos.AllInstancesSansSubclasses("LexEntry").First(); var element = XElement.Parse(dto.Xml); // Atomic owning prop var propertyElement = element.Element("LexemeForm"); Assert.AreEqual(1, propertyElement.Elements().Count()); Assert.AreEqual("c1ede2e7-e382-11de-8a39-0800200c9a66", propertyElement.Element("objsur").Attribute("guid").Value); Assert.Throws <ArgumentException>(() => dtoRepos.GetDTO("5aedaa5f-6f71-4859-953b-a9bb1b78a813")); // Atomic reference prop dto = dtoRepos.GetDTO("c1ede2e7-e382-11de-8a39-0800200c9a66"); element = XElement.Parse(dto.Xml); propertyElement = element.Element("StemName"); Assert.AreEqual(1, propertyElement.Elements().Count()); Assert.AreEqual("c1ede2e4-e382-11de-8a39-0800200c9a66", propertyElement.Element("objsur").Attribute("guid").Value); // Step 3. Assert.Throws <ArgumentException>(() => dtoRepos.GetDTO("003018c0-eba6-43b7-b6e2-5a71ac049f6a")); Assert.Throws <ArgumentException>(() => dtoRepos.GetDTO("d06d329f-9dc5-4c1c-aecd-b447cd010bdb")); Assert.Throws <ArgumentException>(() => dtoRepos.GetDTO("968caa2b-fae0-479a-9f4a-45d2c6827aa5")); Assert.Throws <ArgumentException>(() => dtoRepos.GetDTO("7a62eb69-4738-4514-a94e-b29237d5c188")); // Step 4. dto = dtoRepos.AllInstancesSansSubclasses("LexEntry").First(); element = XElement.Parse(dto.Xml); propertyElement = element.Element("MorphoSyntaxAnalyses"); Assert.AreEqual(1, propertyElement.Elements().Count()); Assert.AreEqual("c1ede2e5-e382-11de-8a39-0800200c9a66", propertyElement.Element("objsur").Attribute("guid").Value); Assert.Throws <ArgumentException>(() => dtoRepos.GetDTO("c1ede2e6-e382-11de-8a39-0800200c9a66")); Assert.Throws <ArgumentException>(() => dtoRepos.GetDTO("304b0aea-dccd-4865-9fad-923e89871b7e")); Assert.AreEqual(7000061, dtoRepos.CurrentModelVersion, "Wrong updated version."); }
public void DataMigration7000052Test() { var dtos = new HashSet <DomainObjectDTO>(); var sb = new StringBuilder(); // Add WfiMorphBundle that already has a form. const string sGuid_wmbWithForm = "00b35f9f-86ce-4f07-bde7-b65c28503641"; sb.AppendFormat("<rt class=\"WfiMorphBundle\" guid=\"{0}\">", sGuid_wmbWithForm); sb.Append("<Form>"); sb.Append("<AStr ws=\"wsForm0\">"); sb.AppendFormat("<Run ws=\"wsForm0\">{0}</Run>", "form1"); sb.Append("</AStr>"); sb.Append("</Form>"); sb.Append("</rt>"); var dtoWithForm = new DomainObjectDTO(sGuid_wmbWithForm, "WfiMorphBundle", sb.ToString()); dtos.Add(dtoWithForm); sb.Length = 0; const string sGuid_moAffixAllomorph = "f2f9a52f-b07e-4a09-9259-5f6333445eb9"; sb.AppendFormat("<rt class=\"MoAffixAllomorph\" guid=\"{0}\">", sGuid_moAffixAllomorph); sb.Append("<Form>"); sb.AppendFormat("<AUni ws=\"wsMorph0\">{0}</AUni>", "morphForm&0"); sb.AppendFormat("<AUni ws=\"wsMorph1\">{0}</AUni>", "morphForm1"); sb.Append("</Form>"); sb.Append("</rt>"); var dtoMoAffix = new DomainObjectDTO(sGuid_moAffixAllomorph, "MoAffixAllomorph", sb.ToString()); dtos.Add(dtoMoAffix); sb.Length = 0; const string sGuid_wmbNoForm = "0110541a-c93e-4f01-8eec-9d24e1b08d3a"; sb.AppendFormat("<rt class=\"WfiMorphBundle\" guid=\"{0}\">", sGuid_wmbNoForm); sb.Append("<Form>"); sb.Append("<AStr ws=\"wsMorphPrexisting\">"); sb.AppendFormat("<Run ws=\"wsMorphPrexisting\">{0}</Run>", "morphFormPrexisting&0"); sb.Append("</AStr>"); sb.Append("</Form>"); sb.Append("<Morph>"); sb.AppendFormat("<objsur guid=\"{0}\" t=\"r\" />", sGuid_moAffixAllomorph); sb.Append("</Morph>"); sb.Append("</rt>"); var dtoNoForm = new DomainObjectDTO(sGuid_wmbNoForm, "WfiMorphBundle", sb.ToString()); dtos.Add(dtoNoForm); sb.Length = 0; // Set up mock MDC. var mockMDC = new MockMDCForDataMigration(); mockMDC.AddClass(1, "CmObject", null, new List <string> { "WfiMorphBundle", "MoAffixAllomorph" }); // Not true, but no matter. mockMDC.AddClass(2, "WfiMorphBundle", "CmObject", new List <string>()); mockMDC.AddClass(3, "MoAffixAllomorph", "CmObject", new List <string>()); IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000051, dtos, mockMDC, null, TestDirectoryFinder.LcmDirectories); m_dataMigrationManager.PerformMigration(dtoRepos, 7000052, new DummyProgressDlg()); Assert.AreEqual(7000052, dtoRepos.CurrentModelVersion, "Wrong updated version."); // check that MorphBundle with form still has its form. { DomainObjectDTO dtoWithFormTest; dtoRepos.TryGetValue(sGuid_wmbWithForm, out dtoWithFormTest); var eltWmbWithFormTest = XElement.Parse(dtoWithFormTest.Xml); var eltFormTest = eltWmbWithFormTest.Element("Form"); // get form Assert.IsNotNull(eltFormTest); var eltRunTest = eltFormTest.Element("AStr").Element("Run"); Assert.AreEqual("form1", eltRunTest.Value); // now check that ws of the new Form matches the Morph Form ws. var eltWsTest = eltFormTest.Element("AStr").Attribute("ws"); Assert.AreEqual("wsForm0", eltWsTest.Value); eltWsTest = eltFormTest.Element("AStr").Element("Run").Attribute("ws"); Assert.AreEqual("wsForm0", eltWsTest.Value); } // check that MorphBundle without form now has a new alternative forms, // identical to the Morph alternative Form. { DomainObjectDTO dtoNewFormTest; dtoRepos.TryGetValue(sGuid_wmbNoForm, out dtoNewFormTest); var eltWmbNewFormTest = XElement.Parse(dtoNewFormTest.Xml); var eltFormTest = eltWmbNewFormTest.Element("Form"); // get form Assert.IsNotNull(eltFormTest); var eltRunTest = eltFormTest.Element("AStr").Element("Run"); Assert.AreEqual("morphForm&0", eltRunTest.Value); // now check that ws of the new Form matches the Morph Form ws. var eltWsTest = eltFormTest.Element("AStr").Attribute("ws"); Assert.AreEqual("wsMorph0", eltWsTest.Value); eltWsTest = eltFormTest.Element("AStr").Element("Run").Attribute("ws"); Assert.AreEqual("wsMorph0", eltWsTest.Value); // prexisting form should have been deleted. should only have two ws strings now. Assert.AreEqual(2, eltFormTest.Elements("AStr").Count()); var aStrTest = eltFormTest.Elements("AStr").ToList()[1]; eltRunTest = aStrTest.Element("Run"); Assert.AreEqual("morphForm1", eltRunTest.Value); eltWsTest = aStrTest.Attribute("ws"); Assert.AreEqual("wsMorph1", eltWsTest.Value); eltWsTest = aStrTest.Element("Run").Attribute("ws"); Assert.AreEqual("wsMorph1", eltWsTest.Value); } }