Exemple #1
0
        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.");
        }
Exemple #3
0
        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&amp;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&amp;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);
            }
        }