Mocked version of IFwMetaDataCacheManaged for use in data migration tests.
Наследование: IFwMetaDataCacheManaged
		public void DataMigration7000060Test()
		{

			var projectFolder = Path.GetTempPath();
			var settingsFolder = Path.Combine(projectFolder, FdoFileHelper.ksConfigurationSettingsDir);
			var sampleLayout = Path.Combine(settingsFolder, "Test_Layouts.xml");
			var otherFile = Path.Combine(settingsFolder, "other.xml");
			var newLayoutPath = Path.Combine(settingsFolder, "Test.fwlayout");
			// Delete any leftover data from incomplete test (or previous test).
			if (Directory.Exists(settingsFolder))
				Directory.Delete(settingsFolder, true);

			Directory.CreateDirectory(settingsFolder);
			File.WriteAllText(sampleLayout, "nonsence", Encoding.UTF8);
			File.WriteAllText(otherFile, "rubbish", Encoding.UTF8);

			var mockMDC = new MockMDCForDataMigration(); // no classes to migrate here
			var dtos = new HashSet<DomainObjectDTO>(); // no objects to migrate
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000059, dtos, mockMDC, projectFolder, FwDirectoryFinder.FdoDirectories);
			// Do the migration.
			m_dataMigrationManager.PerformMigration(dtoRepos, 7000060, new DummyProgressDlg());

			Assert.That(File.Exists(newLayoutPath));
			Assert.That(File.Exists(otherFile));
			Assert.That(!File.Exists(sampleLayout));
			Directory.Delete(settingsFolder, true);

			Assert.AreEqual(7000060, dtoRepos.CurrentModelVersion, "Wrong updated version.");
		}
		private void TryThisProject(HashSet<DomainObjectDTO> dtos, MockMDCForDataMigration mockMDC, int numOfPubs)
		{
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000040, dtos, mockMDC,
				@"C:\Path\Not\Used", FwDirectoryFinder.FdoDirectories);
			// Do Migration
			m_dataMigrationManager.PerformMigration(dtoRepos, 7000041, new DummyProgressDlg());

			// Check that the version was updated.
			Assert.AreEqual(7000041, dtoRepos.CurrentModelVersion, "Wrong updated version.");

			// The LexEntry with ExcludeAsHeadword val="True" should be replaced by
			// DoNotShowMainEntryIn with the entire publist as objsur elements.
			VerifyReplace(dtoRepos, "7ecbb299-bf35-4795-a5cc-8d38ce8b891c", true, numOfPubs);

			// The LexEntry with no ExcludeAsHeadword should have no
			// DoNotShowMainEntryIn element.
			VerifyReplace(dtoRepos, "77b2397d-19c9-4321-b581-7a4ccfa9fc0e", false, numOfPubs);

			// The LexEntry with ExcludeAsHeadword val="False" should have no
			// DoNotShowMainEntryIn element.
			VerifyReplace(dtoRepos, "a78bb1d7-a86c-40c5-8ad1-8d75b71c4962", false, numOfPubs);

			// The LexEntry with ExcludeAsHeadword val="garbled" should have no
			// DoNotShowMainEntryIn element.
			VerifyReplace(dtoRepos, "1e4ae08a-2672-4df2-9e2d-980be367e893", false, numOfPubs);
		}
Пример #3
0
		public void DowngradeMigrationTest()
		{
			var mockMDC = new MockMDCForDataMigration();
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7100000,
				new HashSet<DomainObjectDTO>(), mockMDC, null, FwDirectoryFinder.FdoDirectories);
			m_dataMigrationManager.PerformMigration(dtoRepos, 7000000, null);
		}
		public void DataMigration7000040Test()
		{
			// Bring in data from xml file.
			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000040.xml");

			// Create all the Mock classes for the classes in my test data.
			var mockMDC = new MockMDCForDataMigration();
			mockMDC.AddClass(1, "CmObject", null, new List<string> { "LexEntryRef"});
			mockMDC.AddClass(2, "LexEntryRef", "CmObject", new List<string>());
			mockMDC.AddClass(3, "LexEntry", "CmObject", new List<string>());

			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000039, dtos, mockMDC,
				FileUtils.ChangePathToPlatform("C:\\WW\\DistFiles\\Projects\\TokPisin"), FwDirectoryFinder.FdoDirectories);
			// Do Migration
			m_dataMigrationManager.PerformMigration(dtoRepos, 7000040, new DummyProgressDlg());

			// Check that the version was updated.
			Assert.AreEqual(7000040, dtoRepos.CurrentModelVersion, "Wrong updated version.");

			// The empty element should have stayed that way.
			VerifyEntryRef(dtoRepos, "82CB0EC6-B542-4FB8-B5B6-41398790DDF9", 0, 0);

			// The one with no primary lexemes should have no ShowComplexFormsIn
			VerifyEntryRef(dtoRepos, "c1ecaa73-e382-11de-8a39-0800200c9a66", 1, 0);

			// The one with one primary lexemes should have one ShowComplexFormsIn (and ComponentLexemes and PrimaryLexemes unchanged)
			var osElements = VerifyEntryRef(dtoRepos, "BF274D15-406E-4816-A81F-9B8C70AEF8E5", 2, 1);
			Assert.That(osElements.Count(), Is.EqualTo(1));
			VerifyObjSur(osElements, 0, "BFC76313-B9E4-4A31-8408-F854D7709E68");

			// The one with two primary lexemes should have two in ShowComplexFormsIn (and ComponentLexemes and PrimaryLexemes unchanged)
			osElements = VerifyEntryRef(dtoRepos, "B854113C-4B99-46FF-A9F6-ED3F0245E259", 2, 2);
			VerifyObjSur(osElements, 0, "6704EB7A-EFEA-42E4-BFAA-9B99B1D45D6F");
			VerifyObjSur(osElements, 1, "BFC76313-B9E4-4A31-8408-F854D7709E68");
		}
		public void DataMigration7000028Test()
		{
			//Bring in data from xml file.
			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000028.xml");


			var mockMDC = new MockMDCForDataMigration();
			mockMDC.AddClass(1, "CmObject", null, new List<string> { "CmProject" });
			mockMDC.AddClass(2, "CmProject", "CmObject", new List<string> { "LangProject" });
			mockMDC.AddClass(3, "LangProject", "CmProject", new List<string>());
			mockMDC.AddClass(4, "LexDb", "CmObject", new List<string> ());
			mockMDC.AddClass(5, "LexEntry", "CmObject", new List<string>());

			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000027, dtos, mockMDC, null, FwDirectoryFinder.FdoDirectories);

			m_dataMigrationManager.PerformMigration(dtoRepos, 7000028, new DummyProgressDlg());

			// The Entries property of the LexDb should be gone.
			var lexDbDto = dtoRepos.AllInstancesSansSubclasses("LexDb").First();
			var lexDbElement = XElement.Parse(lexDbDto.Xml);
			var entriesElt = lexDbElement.Element("Entries");
			Assert.That(lexDbElement.Name.LocalName, Is.EqualTo("rt"));
			Assert.That(entriesElt, Is.Null);

			// LexEntries should no longer know owners.
			var entryDto = dtoRepos.AllInstancesSansSubclasses("LexEntry").First();
			var entryElt = XElement.Parse(entryDto.Xml);
			var ownerAttr = entryElt.Attribute("ownerguid");
			Assert.That(ownerAttr, Is.Null);

			Assert.AreEqual(7000028, dtoRepos.CurrentModelVersion, "Wrong updated version.");
		}
		public void DataMigration7000026Test()
		{
			//Bring in data from xml file.
			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000026Tests.xml");


			var mockMDC = new MockMDCForDataMigration();
			mockMDC.AddClass(1, "CmObject", null, new List<string> { "CmProject" });
			mockMDC.AddClass(2, "CmProject", "CmObject", new List<string> { "LangProject" });
			mockMDC.AddClass(3, "LangProject", "CmProject", new List<string>());

			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000025, dtos, mockMDC, null, FwDirectoryFinder.FdoDirectories);

			//Before the migration there should be a ExtLinkRootDir element in the project.
			var langProjDto = dtoRepos.AllInstancesSansSubclasses("LangProject").First();
			var langProjElement = XElement.Parse(langProjDto.Xml);
			var langProjExtLinkRootDir = langProjElement.XPathSelectElement("ExtLinkRootDir");
			Assert.That(langProjExtLinkRootDir, Is.Not.Null, "Before the migration we should have a 'ExtLinkRootDir' element on LangProj");

			m_dataMigrationManager.PerformMigration(dtoRepos, 7000026, new DummyProgressDlg());

			//This object should contain a 'LinkedFilesRootDir' property
			langProjDto = dtoRepos.AllInstancesSansSubclasses("LangProject").First();
			langProjElement = XElement.Parse(langProjDto.Xml);
			var langProjLinkedFilesRootDir = langProjElement.XPathSelectElement("LinkedFilesRootDir");
			Assert.That(langProjLinkedFilesRootDir, Is.Not.Null, "We should now have a 'LinkedFilesRootDir' element on LangProj");
			//This object should not contain an 'AnalysysStatus' property
			langProjExtLinkRootDir = langProjElement.XPathSelectElement("ExtLinkRootDir");
			Assert.That(langProjExtLinkRootDir, Is.Null, "LangProject ExtLinkRootDir Property should not exist any more");


			Assert.AreEqual(7000026, dtoRepos.CurrentModelVersion, "Wrong updated version.");
		}
		public void DataMigration7000058Test_SkipNonEmptyGlossAppend()
		{
			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000058_NonEmptyGlossAppend.xml");
			// Set up mock MDC.
			var mockMdc = new MockMDCForDataMigration();
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000057, dtos, mockMdc, null, FwDirectoryFinder.FdoDirectories);

			m_dataMigrationManager.PerformMigration(dtoRepos, 7000058, new DummyProgressDlg());
			Assert.AreEqual(7000058, dtoRepos.CurrentModelVersion, "Wrong updated version.");

			// Skip GlossAppend for Irregularly Inflected Form Type (Plural)
			{
				var iifPlural = dtoRepos.GetDTO(kguidLexTypPluralVar);
				var iifNewPluralElt = XElement.Parse(iifPlural.Xml);
				Assert.That(iifNewPluralElt.XPathSelectElement("GlossAppend/AUni[@ws='en']").Value,
					Is.EqualTo(".pL"));
			}

			//  Skip GlossAppend for Irregularly Inflected Form Type (Past)
			{
				var iifPast = dtoRepos.GetDTO(kguidLexTypPastVar);
				var iifNewPastElt = XElement.Parse(iifPast.Xml);
				Assert.That(iifNewPastElt.XPathSelectElement("GlossAppend/AUni[@ws='en']").Value,
					Is.EqualTo(".pST"));
			}
		}
Пример #8
0
        private static MockMDCForDataMigration SetupMdc()
        {
            var mockMdc = new MockMDCForDataMigration();

            mockMdc.AddClass(1, "CmObject", null, new List <string> {
                "PhContextOrVar", "PhTerminalUnit", "StText"
            });
            mockMdc.AddClass(2, "PhContextOrVar", "CmObject", new List <string> {
                "PhPhonContext"
            });
            mockMdc.AddClass(3, "PhPhonContext", "PhContextOrVar", new List <string> {
                "PhSimpleContext"
            });
            mockMdc.AddClass(4, "PhSimpleContext", "PhPhonContext", new List <string> {
                "PhSimpleContextBdry"
            });
            mockMdc.AddClass(5, "PhSimpleContextBdry", "PhSimpleContext", new List <string>());
            mockMdc.AddClass(6, "PhTerminalUnit", "CmObject", new List <string> {
                "PhBdryMarker"
            });
            mockMdc.AddClass(7, "PhBdryMarker", "PhTerminalUnit", new List <string>());
            mockMdc.AddClass(8, "StText", "CmObject", new List <string>());

            return(mockMdc);
        }
		public void DataMigration7000008Test()
		{
			// Add at least one ScrScriptureNote which has a null BeginObject prop.
			// This ScrScriptureNote should not be removed in this migration.

			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000008Tests.xml");

			// Set up mock MDC.
			var mockMDC = new MockMDCForDataMigration();
			mockMDC.AddClass(1, "CmObject", null, new List<string> { "CmBaseAnnotation", "LangProject" });
			mockMDC.AddClass(2, "LangProject", "CmObject", new List<string>());
			mockMDC.AddClass(3, "CmBaseAnnotation", "CmObject", new List<string> { "ScrScriptureNote" });
			mockMDC.AddClass(4, "ScrScriptureNote", "CmBaseAnnotation", new List<string>());
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000007, dtos, mockMDC, null, FwDirectoryFinder.FdoDirectories);

			m_dataMigrationManager.PerformMigration(dtoRepos, 7000008, new DummyProgressDlg());

			var goners = ((DomainObjectDtoRepository) dtoRepos).Goners;
			Assert.AreEqual(4, goners.Count, "Wrong number removed.");
			var gonerGuids = new List<string>
								{
									("54E4A881-23D7-48FC-BD05-14DD0CA86D5B").ToLower(), // Defective Discourse Chart ann.
									("22a8431f-f974-412f-a261-8bd1a4e1be1b").ToLower(),
									("155B8419-0A9B-44A4-A960-F78983C84768").ToLower(),
									("84FC5548-8AB2-4AA0-AFE5-72F64F567982").ToLower()
								};
			foreach (var goner in goners)
				Assert.Contains(goner.Guid.ToLower(), gonerGuids, "Goner guid not found.");
		}
		public void DataMigration7000065Test()
		{
			var mockMdc = new MockMDCForDataMigration();
			mockMdc.AddClass(1, "CmObject", null, new List<string> { "CmMajorObject", "CmPossibility" });
			mockMdc.AddClass(2, "CmMajorObject", "CmObject", new List<string>() { "LexDb", "CmPossibilityList", "ReversalIndex" });
			mockMdc.AddClass(3, "LexDb", "CmMajorObject", new List<string>());
			mockMdc.AddClass(4, "CmPossibilityList", "CmMajorObject", new List<string>());
			mockMdc.AddClass(5, "ReversalIndex", "CmMajorObject", new List<string>());
			mockMdc.AddClass(6, "CmPossibility", "CmObject", new List<string>() {"PartOfSpeech"});
			mockMdc.AddClass(7, "PartOfSpeech", "CmPossibility", new List<string>());

			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000065.xml");
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000064, dtos, mockMdc, null, FwDirectoryFinder.FdoDirectories);

			m_dataMigrationManager.PerformMigration(dtoRepos, 7000065, new DummyProgressDlg());

			var possListsList = dtoRepos.AllInstancesSansSubclasses("CmPossibilityList").ToArray();
			Assert.AreEqual(2, possListsList.Length, "Wrong number of Possibility Lists");
			var enPoslist = possListsList[0];
			var frPoslist = possListsList[1];
			var enPoslistElt = XElement.Parse(enPoslist.Xml);
			var frPoslistElt = XElement.Parse(frPoslist.Xml);

			// Check that English Parts of Speech list's Name didn't change
			var enName = enPoslistElt.Element("Name"); // this one shouldn't change
			var enNameStrings = enName.Elements("AUni");
			Assert.AreEqual(1, enNameStrings.Count(), "Changed number of Name strings.");
			var enNameStr = enNameStrings.First().Value;
			Assert.AreEqual("RandomEnglish", enNameStr, "Name of list changed");

			// Check that French Parts of Speech list's Name got created.
			var frName = frPoslistElt.Element("Name"); // should have been created
			var frNameStrings = frName.Elements("AUni");
			Assert.AreEqual(2, frNameStrings.Count(), "Should have created 2 Name strings.");
			var frNameStr1 = frNameStrings.First().Value;
			var frNameStr2 = frNameStrings.Last().Value;
			Assert.AreEqual(string.Format(Strings.ksReversalIndexPOSListName, "French"), frNameStr1,
				"Name1 was not created correctly.");
			Assert.AreEqual(string.Format(Strings.ksReversalIndexPOSListName, "German"), frNameStr2,
				"Name2 was not created correctly.");

			// Check that ItemClsId was added to French parts of speech list
			var frItemClsId = frPoslistElt.Element("ItemClsid").Attribute("val").Value;
			Assert.AreEqual("5049", frItemClsId, "Migration added wrong ItemClsid.");

			// Check that both IsSorted were changed to 'True'
			var enIsSorted = enPoslistElt.Element("IsSorted").Attribute("val").Value;
			Assert.AreEqual("True", enIsSorted, "English IsSorted didn't get changed.");
			var frIsSorted = frPoslistElt.Element("IsSorted").Attribute("val").Value;
			Assert.AreEqual("True", frIsSorted, "French IsSorted didn't get changed.");

			// Check that both Depths were changed to '127'
			var enDepth = enPoslistElt.Element("Depth").Attribute("val").Value;
			Assert.AreEqual("127", enDepth, "English Depth didn't get changed.");
			var frDepth = frPoslistElt.Element("Depth").Attribute("val").Value;
			Assert.AreEqual("127", frDepth, "French Depth didn't get changed.");

			Assert.AreEqual(7000065, dtoRepos.CurrentModelVersion, "Wrong updated version.");
		}
Пример #11
0
        public void DowngradeMigrationTest()
        {
            var mockMDC = new MockMDCForDataMigration();
            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7100000,
                                                                                new HashSet <DomainObjectDTO>(), mockMDC, null, FwDirectoryFinder.FdoDirectories);

            m_dataMigrationManager.PerformMigration(dtoRepos, 7000000, null);
        }
		public void DataMigration7000023Test()
		{
			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000023.xml");

			// Set up mock MDC.
			var mockMDC = new MockMDCForDataMigration();
			mockMDC.AddClass(1, "CmObject", null, new List<string> { "LangProject", "DsDiscourseData", "LexDb", "RnResearchNbk",
				"CmPossibilityList", "CmFilter", "UserView", "UserAppFeatAct", "CmResource", "ScrCheckRun" });
			mockMDC.AddClass(2, "LangProject", "CmObject", new List<string>());
			mockMDC.AddClass(3, "DsDiscourseData", "CmObject", new List<string>());
			mockMDC.AddClass(4, "LexDb", "CmObject", new List<string>());
			mockMDC.AddClass(5, "CmPossibilityList", "CmObject", new List<string>());
			mockMDC.AddClass(6, "CmFilter", "CmObject", new List<string>());
			mockMDC.AddClass(7, "UserView", "CmObject", new List<string>());
			mockMDC.AddClass(8, "UserAppFeatAct", "CmObject", new List<string>());
			mockMDC.AddClass(9, "CmResource", "CmObject", new List<string>());
			mockMDC.AddClass(10, "ScrCheckRun", "CmObject", new List<string>());
			mockMDC.AddClass(11, "RnResearchNbk", "CmObject", new List<string>());
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000022, dtos, mockMDC, null, FwDirectoryFinder.FdoDirectories);

			//SUT
			m_dataMigrationManager.PerformMigration(dtoRepos, 7000023, new DummyProgressDlg());

			// Verification section
			var dto = dtoRepos.GetDTO("c1ecaa73-e382-11de-8a39-0800200c9a66");
			var rtElement = XElement.Parse(dto.Xml);
			CheckGuid(rtElement.Element("LexDb").Element("objsur").Attribute("guid").Value);
			dto = dtoRepos.GetDTO("c1ec5c4c-e382-11de-8a39-0800200c9a66");
			rtElement = XElement.Parse(dto.Xml);
			CheckGuid(rtElement.Attribute("ownerguid").Value);
			dto = dtoRepos.GetDTO("c1Ecaa74-e382-11de-8a39-0800200c9a66");
			rtElement = XElement.Parse(dto.Xml);
			CheckGuid(rtElement.Attribute("guid").Value);
			dto = dtoRepos.GetDTO("AF26D792-EA5E-11DE-8F7E-0013722F8DEC");
			rtElement = XElement.Parse(dto.Xml);
			CheckGuid(rtElement.Attribute("guid").Value);
			dto = dtoRepos.GetDTO("1FBDC211-32E4-4203-9B7F-9CAACBF31DBD");
			rtElement = XElement.Parse(dto.Xml);
			CheckGuid(rtElement.Attribute("guid").Value);
			CheckGuid(rtElement.Element("ListVersion").Attribute("val").Value);
			dto = dtoRepos.GetDTO("c1ecaa77-e382-11de-8a39-0800200c9a66");
			rtElement = XElement.Parse(dto.Xml);
			CheckGuid(rtElement.Element("App").Attribute("val").Value);
			dto = dtoRepos.GetDTO("c1ecaa78-e382-11de-8a39-0800200c9a66");
			rtElement = XElement.Parse(dto.Xml);
			CheckGuid(rtElement.Element("App").Attribute("val").Value);
			dto = dtoRepos.GetDTO("c1ecaa79-e382-11de-8a39-0800200c9a66");
			rtElement = XElement.Parse(dto.Xml);
			CheckGuid(rtElement.Element("ApplicationId").Attribute("val").Value);
			dto = dtoRepos.GetDTO("c1ecaa7a-e382-11de-8a39-0800200c9a66");
			rtElement = XElement.Parse(dto.Xml);
			CheckGuid(rtElement.Element("Version").Attribute("val").Value);
			dto = dtoRepos.GetDTO("c1ecd170-e382-11de-8a39-0800200c9a66");
			rtElement = XElement.Parse(dto.Xml);
			CheckGuid(rtElement.Element("CheckId").Attribute("val").Value);

			Assert.AreEqual(7000023, dtoRepos.CurrentModelVersion, "Wrong updated version.");
		}
		public void DataMigration7000012_Unneeded_UserViewField_Removed_Test()
		{
			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000012_UserViewField.xml");

			// Set up mock MDC.
			var mockMDC = new MockMDCForDataMigration();
			mockMDC.AddClass(1, "CmObject", null, new List<string> { "UserViewField" });
			mockMDC.AddClass(2, "UserViewField", "CmObject", new List<string>());
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000011, dtos, mockMDC, null, FwDirectoryFinder.FdoDirectories);

			Assert.AreEqual(40, dtoRepos.AllInstancesWithSubclasses("UserViewField").Count());

			// Collect the UserViewField values.
			var userViewFieldDtos = new Dictionary<string, DomainObjectDTO>();
			foreach (var uvfDto in dtoRepos.AllInstancesWithSubclasses("UserViewField"))
				userViewFieldDtos.Add(uvfDto.Guid.ToUpper(), uvfDto);

			m_dataMigrationManager.PerformMigration(dtoRepos, 7000012, new DummyProgressDlg());

			// Counts for fields that should not have been removed.
			int countRequired = 0;
			int countStyle = 0;
			int countHelpString = 0;
			int countFlid = 0;
			int countType = 0;

			foreach (var userViewField in dtoRepos.AllInstancesSansSubclasses("UserViewField"))
			{
				var uvfElement = XElement.Parse(userViewField.Xml);

				// Confirm that needed fields are still present.
				// Increment counter for fields occurring in UserViewField (but some may not always be present).
				if (uvfElement.XPathSelectElement("UserViewField/Required") != null)
					countRequired++;
				if (uvfElement.XPathSelectElement("UserViewField/Style") != null)
					countStyle++;
				if (uvfElement.XPathSelectElement("UserViewField/HelpString") != null)
					countHelpString++;
				if (uvfElement.XPathSelectElement("UserViewField/Flid") != null)
					countFlid++;
				if (uvfElement.XPathSelectElement("UserViewField/Type") != null)
					countType++;

				// Try to get the unused elements in UserViewField (should be gone)
				Assert.IsNull(uvfElement.XPathSelectElement("UserViewField/Details"));
				Assert.IsNull(uvfElement.XPathSelectElement("UserViewField/Visibility"));
				Assert.IsNull(uvfElement.XPathSelectElement("UserViewField/SubfieldOf"));
				Assert.IsNull(uvfElement.XPathSelectElement("UserViewField/IsCustomField"));
			}

			// Expectations for occurrences of fields that should not have been removed from XML file
			Assert.AreEqual(1, countStyle, "Unexpected number of Style fields");
			Assert.AreEqual(3, countRequired, "Unexpected number of Required fields");
			Assert.AreEqual(36, countHelpString, "Unexpected number of HelpString fields");
			Assert.AreEqual(40, countFlid, "Unexpected number of Flid fields");
			Assert.AreEqual(40, countType, "Unexpected number of Type fields");
		}
		public void DataMigration7000009Test()
		{
			var dtos = new HashSet<DomainObjectDTO>();
			var sb = new StringBuilder();
			// 1. Add barebones LP.
			sb.Append("<rt class=\"LangProject\" guid=\"9719A466-2240-4DEA-9722-9FE0746A30A6\">");
			sb.Append("<LangProject>");
			sb.Append("<Texts>");
			var lpTextsGuids = new StTextAndParaInfo("9719A466-2240-4DEA-9722-9FE0746A30A6", "Normal");
			sb.Append("<objsur guid=\"" + lpTextsGuids.textGuid + "\" t=\"o\" />");
			sb.Append("</Texts>");
			sb.Append("<TranslatedScripture>");
			sb.Append("<objsur guid=\"2c5c1f5f-1f08-41d7-99fe-23893ee4ceef\" t=\"o\" />");
			sb.Append("</TranslatedScripture>");
			sb.Append("</LangProject>");
			sb.Append("</rt>");
			var expectedLp = sb.ToString();
			var lpDto = new DomainObjectDTO("9719A466-2240-4DEA-9722-9FE0746A30A6",
											"LangProject",
											expectedLp);
			dtos.Add(lpDto);

			// 2. Add Scripture
			sb = new StringBuilder();
			sb.Append(
				"<rt class=\"Scripture\" guid=\"2c5c1f5f-1f08-41d7-99fe-23893ee4ceef\" ownerguid=\"9719A466-2240-4DEA-9722-9FE0746A30A6\"");
			int index = sb.Length;
			sb.Append(">");
			sb.Append("<Scripture>");
			sb.Append("<Books>");
			sb.Append("<objsur guid=\"f213db11-7007-4a2f-9b94-06d6c96014ca\" t=\"o\" />");
			sb.Append("</Books>");
			sb.Append("</Scripture>");
			sb.Append("</rt>");
			string expected = sb.ToString();
			sb.Insert(index, " owningflid=\"6001040\" owningord=\"0\"");

			var scrDto = new DomainObjectDTO("2c5c1f5f-1f08-41d7-99fe-23893ee4ceef",
											 "Scripture",
											 sb.ToString());
			dtos.Add(scrDto);
			// Set up mock MDC.
			var mockMDC = new MockMDCForDataMigration();
			mockMDC.AddClass(1, "CmObject", null, new List<string> { "LangProject", "Scripture" });
			mockMDC.AddClass(2, "LangProject", "CmObject", new List<string>());
			mockMDC.AddClass(4, "Scripture", "CmObject", new List<string>());
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000008, dtos, mockMDC, null, FwDirectoryFinder.FdoDirectories);

			m_dataMigrationManager.PerformMigration(dtoRepos, 7000009, new DummyProgressDlg());

			Assert.AreEqual(expected, scrDto.Xml);
			Assert.AreEqual(expectedLp, lpDto.Xml);

			Assert.AreEqual(7000009, dtoRepos.CurrentModelVersion, "Wrong updated version.");

		}
        public void DataMigration7000037Test()
        {
            // Bring in data from xml file.
            var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000037.xml");

            // Create all the Mock classes for the classes in my test data.
            var mockMDC = new MockMDCForDataMigration();

            mockMDC.AddClass(1, "CmObject", null, new List <string> {
                "LexSense", "StPara"
            });
            mockMDC.AddClass(7, "LexSense", "CmObject", new List <string>());
            mockMDC.AddClass(15, "StPara", "CmObject", new List <string> {
                "StTxtPara"
            });
            mockMDC.AddClass(16, "StTxtPara", "StPara", new List <string>());

            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000036, dtos, mockMDC,
                                                                                FileUtils.ChangePathToPlatform("C:\\WW\\DistFiles\\Projects\\TokPisin"));

            // Check that the version is correct.
            Assert.AreEqual(7000036, dtoRepos.CurrentModelVersion, "Wrong original version.");
            // Collect the link values that shouldn't change.
            m_cLinks = 0;
            CollectionNonSilfwLinks(dtoRepos);
            int cLinksOrig = m_cLinks;

            Assert.AreEqual(12, m_cLinks, "Should have 12 externalLink attributes in the test data");

            // Do Migration
            m_dataMigrationManager.PerformMigration(dtoRepos, 7000037, new DummyProgressDlg());

            // Check that the version was updated.
            Assert.AreEqual(7000037, dtoRepos.CurrentModelVersion, "Wrong updated version.");

            // Check that all externalLink values are reasonable, and that we find the right
            // number of them.
            m_cLinks = 0;
            foreach (var dto in dtoRepos.AllInstancesWithValidClasses())
            {
                string xml = dto.Xml;
                Assert.IsTrue(xml.Contains("externalLink"), "Every object in the test has an externalLink");
                var dtoXML = XElement.Parse(xml);
                foreach (var run in dtoXML.XPathSelectElements("//Run"))
                {
                    var externalLinkAttr = run.Attribute("externalLink");
                    if (externalLinkAttr != null)
                    {
                        CheckForValidLinkValue(externalLinkAttr.Value);
                        ++m_cLinks;
                    }
                }
            }
            Assert.AreEqual(cLinksOrig, m_cLinks, "Migration should not change the number of externalLink attributes");
        }
        public void AllRegularBasicDataPropertiesExistAfterDataMigration66()
        {
            var mockMdc = new MockMDCForDataMigration();

            mockMdc.AddClass(1, "CmObject", null, new List <string> {
                "RegularPropertyMagnet"
            });
            mockMdc.AddClass(2, "RegularPropertyMagnet", "CmObject", new List <string>());

            // These are all present in the original data file and act as controls.
            // They should not be changed.
            var currentFlid = 2000;

            mockMdc.AddField(++currentFlid, "ExtantOwningAtomic", CellarPropertyType.OwningAtom, 2);
            mockMdc.AddField(++currentFlid, "ExtantBooleanProperty", CellarPropertyType.Boolean, 0);
            mockMdc.AddField(++currentFlid, "ExtantGenDateProperty", CellarPropertyType.GenDate, 0);
            mockMdc.AddField(++currentFlid, "ExtantGuidProperty", CellarPropertyType.Guid, 0);
            // Not used in model yet (as of 23 march 2013) mockMdc.AddField(++currentFlid, "ExtantFloatProperty", CellarPropertyType.Float, 0);
            mockMdc.AddField(++currentFlid, "ExtantIntegerProperty", CellarPropertyType.Integer, 0);
            // Not used in model yet (as of 23 march 2013) var mockMdc.AddField(++currentFlid, "ExtantNumericProperty", CellarPropertyType.Numeric, 0);
            mockMdc.AddField(++currentFlid, "ExtantTimeProperty", CellarPropertyType.Time, 0);

            // These are all missing in the original data file.
            // They should all end up with the default values for the given type of data.
            mockMdc.AddField(++currentFlid, "NewBooleanProperty", CellarPropertyType.Boolean, 0);
            mockMdc.AddField(++currentFlid, "NewGenDateProperty", CellarPropertyType.GenDate, 0);
            mockMdc.AddField(++currentFlid, "NewGuidProperty", CellarPropertyType.Guid, 0);
            // Not used in model yet (as of 23 march 2013) mockMdc.AddField(++currentFlid, "NewFloatProperty", CellarPropertyType.Float, 0);
            mockMdc.AddField(++currentFlid, "NewIntegerProperty", CellarPropertyType.Integer, 0);
            // Not used in model yet (as of 23 march 2013) mockMdc.AddField(++currentFlid, "NewNumericProperty", CellarPropertyType.Numeric, 0);
            mockMdc.AddField(++currentFlid, "NewTimeProperty", CellarPropertyType.Time, 0);

            var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000066_RegularPropertyMagnet.xml");
            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000065, dtos, mockMdc, null, FwDirectoryFinder.FdoDirectories);

            m_dataMigrationManager.PerformMigration(dtoRepos, 7000066, new DummyProgressDlg());

            var magnet = XElement.Parse(dtoRepos.AllInstancesSansSubclasses("RegularPropertyMagnet").First().Xml);

            // Check the 'control' props to make sure they were not changed.
            Assert.AreEqual("e268fe80-5d9d-4f6b-a68f-37db8218b15d", magnet.Element("ExtantOwningAtomic").Element("objsur").Attribute("guid").Value);
            Assert.AreEqual("True", GetRegularPropertyValue(magnet, "ExtantBooleanProperty"));
            Assert.AreEqual("-201303233", GetRegularPropertyValue(magnet, "ExtantGenDateProperty"));
            Assert.AreEqual("c1ee311b-e382-11de-8a39-0800200c9a66", GetRegularPropertyValue(magnet, "ExtantGuidProperty"));
            Assert.AreEqual("1", GetRegularPropertyValue(magnet, "ExtantIntegerProperty"));
            Assert.AreEqual("2006-3-12 18:19:46.87", GetRegularPropertyValue(magnet, "ExtantTimeProperty"));

            // Check the newly added props to make sure they are present and using default values.
            Assert.AreEqual("False", GetRegularPropertyValue(magnet, "NewBooleanProperty"));
            Assert.AreEqual("-000000000", GetRegularPropertyValue(magnet, "NewGenDateProperty"));
            Assert.AreEqual(Guid.Empty.ToString(), GetRegularPropertyValue(magnet, "NewGuidProperty"));
            Assert.AreEqual("0", GetRegularPropertyValue(magnet, "NewIntegerProperty"));
            Assert.IsNotNull(GetRegularPropertyValue(magnet, "NewTimeProperty"));
        }
		internal static MockMDCForDataMigration SetupMdc()
		{
			var mockMdc = new MockMDCForDataMigration();
			mockMdc.AddClass(0, "CmObject", null, new List<string> { "CmProject", "UserView", "UserViewRec", "UserViewField" });
			mockMdc.AddClass(1, "CmProject", "CmObject", new List<string> { "LangProject" });
			mockMdc.AddClass(6001, "LangProject", "CmProject", new List<string>());
			mockMdc.AddClass(18, "UserView", "CmObject", new List<string>());
			mockMdc.AddClass(19, "UserViewRec", "CmObject", new List<string>());
			mockMdc.AddClass(20, "UserViewField", "CmObject", new List<string>());
			return mockMdc;
		}
		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, FwDirectoryFinder.FdoDirectories);

			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, FwDirectoryFinder.FdoDirectories);
				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);

			}
		}
Пример #19
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, FwDirectoryFinder.FdoDirectories);

            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 FixtureSetup()
		{
			var mockMDC = new MockMDCForDataMigration();
			// Set it up for CmObject, LangProject, LexDb, and LexEntry.
			var clsid = 0;
			mockMDC.AddClass(++clsid, "CmObject", null, new List<string> { "LangProject", "LexDb", "LexEntry" });
			mockMDC.AddClass(++clsid, "LangProject", "CmObject", new List<string>());
			mockMDC.AddClass(++clsid, "LexDb", "CmObject", new List<string>());
			mockMDC.AddClass(++clsid, "LexEntry", "CmObject", new List<string>());

			m_mdc = mockMDC;
		}
        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, FwDirectoryFinder.FdoDirectories);

            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 DataMigration7000056Test()
        {
            var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000056.xml");
            // Set up mock MDC.
            var mockMDC = new MockMDCForDataMigration();
            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000055, dtos, mockMDC, null, FwDirectoryFinder.FdoDirectories);

            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, FwDirectoryFinder.FdoDirectories);
                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);
            }
        }
Пример #23
0
        public void DataMigration7000007Test()
        {
            var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000007Tests.xml");

            // Set up mock MDC.
            var mockMDC = new MockMDCForDataMigration();

            mockMDC.AddClass(1, "CmObject", null, new List <string> {
                "ScrImportSet", "StPara", "StText"
            });
            mockMDC.AddClass(2, "ScrImportSet", "CmObject", new List <string>());
            mockMDC.AddClass(4, "StPara", "CmObject", new List <string> {
                "StTxtPara"
            });
            mockMDC.AddClass(6, "StText", "CmObject", new List <string> {
                "StFootnote"
            });
            mockMDC.AddClass(7, "StTxtPara", "StPara", new List <string>());
            mockMDC.AddClass(9, "StFootnote", "StText", new List <string> {
                "ScrFootnote"
            });
            mockMDC.AddClass(10, "ScrFootnote", "StFootnote", new List <string>());
            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000006, dtos, mockMDC, null, FwDirectoryFinder.FdoDirectories);

            m_dataMigrationManager.PerformMigration(dtoRepos, 7000007, new DummyProgressDlg());

            var ScrInpDto     = dtoRepos.AllInstancesSansSubclasses("ScrImportSet").First();
            var ScrInpElement = XElement.Parse(ScrInpDto.Xml);

            Assert.AreEqual(7000007, dtoRepos.CurrentModelVersion, "Wrong updated version.");

            Assert.IsNull(ScrInpElement.XPathSelectElement("ScrImportSet/ImportSettings"));
            // Get the ImportSettings Element in ScrImportSet (should be gone)
            Assert.IsNotNull(ScrInpElement.XPathSelectElement("ScrImportSet/ImportType"));
            // Get the ImportType Element in ScrImportSet.

            var ScrFootDto     = dtoRepos.AllInstancesSansSubclasses("ScrFootnote").First();
            var ScrFootElement = XElement.Parse(ScrFootDto.Xml);

            Assert.IsNull(ScrFootElement.XPathSelectElement("StFootnote/DisplayFootnoteReference"));
            // Get the DisplayFootnoteReference Element in StFootnote (should be gone)
            Assert.IsNull(ScrFootElement.XPathSelectElement("StFootnote/DisplayFootnoteMarker"));
            // Get the DisplayFootnoteMarker Element in StFootnote (should be gone)

            var StTxtDto     = dtoRepos.AllInstancesSansSubclasses("StTxtPara").First();
            var StTxtElement = XElement.Parse(StTxtDto.Xml);

            Assert.IsNotNull(StTxtElement.XPathSelectElement("StPara/StyleRules"));
            // Get the StyleRules Element in StPara
            Assert.IsNull(StTxtElement.XPathSelectElement("StPara/StyleName"));
            // Get the StyleName Element in StPara (should be gone)
        }
		public void DataMigration7000059Test()
		{
			//Bring in data from xml file.
			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000059.xml");


			var mockMDC = new MockMDCForDataMigration();
			mockMDC.AddClass(1, "CmObject", null, new List<string> { "CmProject" });
			mockMDC.AddClass(2, "CmProject", "CmObject", new List<string> { "LangProject" });
			mockMDC.AddClass(3, "LangProject", "CmProject", new List<string>());
			mockMDC.AddClass(4, "CmMajorObject", "CmObject", new List<string>() { "RnResearchNbk", "Text" });
			mockMDC.AddClass(5, "RnResearchNbk", "CmMajorObject", new List<string>());
			mockMDC.AddClass(6, "Text", "CmMajorObject", new List<string>());
			mockMDC.AddClass(7, "RnGenericRec", "CmObject", new List<string> ());

			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000058, dtos, mockMDC, null, FwDirectoryFinder.FdoDirectories);

			m_dataMigrationManager.PerformMigration(dtoRepos, 7000059, new DummyProgressDlg());

			// The Texts property of the LangProject should be gone.
			var lp = dtoRepos.AllInstancesSansSubclasses("LangProject").First();
			var lpElement = XElement.Parse(lp.Xml);
			var textsElt = lpElement.Element("Texts");
			Assert.That(lpElement.Name.LocalName, Is.EqualTo("rt"));
			Assert.That(textsElt, Is.Null);

			// The Text property of the RnGenericRec should be Reference Atomic instead of owned.
			var rnRec = dtoRepos.AllInstancesSansSubclasses("RnGenericRec").First();
			var rnRecElement = XElement.Parse(rnRec.Xml);
			var textElt = rnRecElement.Element("Text");
			Assert.That(rnRecElement.Name.LocalName, Is.EqualTo("rt"));
			Assert.That(textElt, Is.Not.Null);
			var objsurType = GetObjsurType(textElt);
			Assert.AreEqual("r", objsurType, "Should have changed from owned to reference type");

			// Texts should no longer know owners.
			// First test the one that was owned by the LangProject
			var allTextDtos = dtoRepos.AllInstancesSansSubclasses("Text");
			var textDto = allTextDtos.First();
			textElt = XElement.Parse(textDto.Xml);
			var ownerAttr = textElt.Attribute("ownerguid");
			Assert.That(ownerAttr, Is.Null);

			// Then test the one that was owned by the DN record
			textDto = allTextDtos.Last();
			textElt = XElement.Parse(textDto.Xml);
			ownerAttr = textElt.Attribute("ownerguid");
			Assert.That(ownerAttr, Is.Null);

			Assert.AreEqual(7000059, dtoRepos.CurrentModelVersion, "Wrong updated version.");
		}
        public void DataMigration7000057Test_SubInflTypes()
        {
            var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000057_SubInflTypes.xml");
            // Set up mock MDC.
            var mockMdc = new MockMDCForDataMigration();
            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000056, dtos, mockMdc, null);

            m_dataMigrationManager.PerformMigration(dtoRepos, 7000057, new DummyProgressDlg());
            Assert.AreEqual(7000057, dtoRepos.CurrentModelVersion, "Wrong updated version.");

            const string guidNonStandard      = "1df6f9da-7b69-44e4-b98d-13a0cee17b77";
            const string guidNonStandardChild = "208cc589-f10f-485b-bdcc-843f046d4146";
            const string guidPluralChild      = "2bd3437f-8bde-495c-a12b-d0c8feb7c3e9";
            const string guidPastChild        = "7c607ea9-c1a0-4b7f-aee7-06ead42ac299";

            // test that non-standard (user created) Irregularly Inflected Form has the right class
            {
                var nonStandard = dtoRepos.GetDTO(guidNonStandard);
                Assert.That(nonStandard.Classname, Is.EqualTo(LexEntryInflTypeTags.kClassName));
                var nonStandardElt = XElement.Parse(nonStandard.Xml);
                Assert.That(nonStandardElt.XPathSelectElement("Name/AUni").Value,
                            Is.EqualTo("NonStandard"));
            }

            // test that non-standard child has correct class
            {
                var nonStandardChild = dtoRepos.GetDTO(guidNonStandardChild);
                Assert.That(nonStandardChild.Classname, Is.EqualTo(LexEntryInflTypeTags.kClassName));
                var nonStandardChildElt = XElement.Parse(nonStandardChild.Xml);
                Assert.That(nonStandardChildElt.XPathSelectElement("Name/AUni").Value,
                            Is.EqualTo("NonStandardChild"));
            }

            // test that plural child has correct class
            {
                var varTypePluralChild = dtoRepos.GetDTO(guidPluralChild);
                Assert.That(varTypePluralChild.Classname, Is.EqualTo(LexEntryInflTypeTags.kClassName));
                var varTypePluralChildElt = XElement.Parse(varTypePluralChild.Xml);
                Assert.That(varTypePluralChildElt.XPathSelectElement("Name/AUni").Value,
                            Is.EqualTo("PluralChild"));
            }

            // test that past child has correct class
            {
                var varTypePastChild = dtoRepos.GetDTO(guidPastChild);
                Assert.That(varTypePastChild.Classname, Is.EqualTo(LexEntryInflTypeTags.kClassName));
                var varTypePastChildElt = XElement.Parse(varTypePastChild.Xml);
                Assert.That(varTypePastChildElt.XPathSelectElement("Name/AUni").Value,
                            Is.EqualTo("PastChild"));
            }
        }
		private static MockMDCForDataMigration SetupMdc()
		{
			var mockMdc = new MockMDCForDataMigration();
			mockMdc.AddClass(1, "CmObject", null, new List<string> { "PhContextOrVar", "PhTerminalUnit", "StText" });
			mockMdc.AddClass(2, "PhContextOrVar", "CmObject", new List<string> { "PhPhonContext" });
			mockMdc.AddClass(3, "PhPhonContext", "PhContextOrVar", new List<string> { "PhSimpleContext" });
			mockMdc.AddClass(4, "PhSimpleContext", "PhPhonContext", new List<string> { "PhSimpleContextBdry" });
			mockMdc.AddClass(5, "PhSimpleContextBdry", "PhSimpleContext", new List<string>());
			mockMdc.AddClass(6, "PhTerminalUnit", "CmObject", new List<string> { "PhBdryMarker" });
			mockMdc.AddClass(7, "PhBdryMarker", "PhTerminalUnit", new List<string>());
			mockMdc.AddClass(8, "StText", "CmObject", new List<string>());

			return mockMdc;
		}
		public void AllRegularBasicDataPropertiesExistAfterDataMigration66()
		{
			var mockMdc = new MockMDCForDataMigration();
			mockMdc.AddClass(1, "CmObject", null, new List<string> { "RegularPropertyMagnet" });
			mockMdc.AddClass(2, "RegularPropertyMagnet", "CmObject", new List<string>());

			// These are all present in the original data file and act as controls.
			// They should not be changed.
			var currentFlid = 2000;
			mockMdc.AddField(++currentFlid, "ExtantOwningAtomic", CellarPropertyType.OwningAtom, 2);
			mockMdc.AddField(++currentFlid, "ExtantBooleanProperty", CellarPropertyType.Boolean, 0);
			mockMdc.AddField(++currentFlid, "ExtantGenDateProperty", CellarPropertyType.GenDate, 0);
			mockMdc.AddField(++currentFlid, "ExtantGuidProperty", CellarPropertyType.Guid, 0);
			// Not used in model yet (as of 23 march 2013) mockMdc.AddField(++currentFlid, "ExtantFloatProperty", CellarPropertyType.Float, 0);
			mockMdc.AddField(++currentFlid, "ExtantIntegerProperty", CellarPropertyType.Integer, 0);
			// Not used in model yet (as of 23 march 2013) var mockMdc.AddField(++currentFlid, "ExtantNumericProperty", CellarPropertyType.Numeric, 0);
			mockMdc.AddField(++currentFlid, "ExtantTimeProperty", CellarPropertyType.Time, 0);

			// These are all missing in the original data file.
			// They should all end up with the default values for the given type of data.
			mockMdc.AddField(++currentFlid, "NewBooleanProperty", CellarPropertyType.Boolean, 0);
			mockMdc.AddField(++currentFlid, "NewGenDateProperty", CellarPropertyType.GenDate, 0);
			mockMdc.AddField(++currentFlid, "NewGuidProperty", CellarPropertyType.Guid, 0);
			// Not used in model yet (as of 23 march 2013) mockMdc.AddField(++currentFlid, "NewFloatProperty", CellarPropertyType.Float, 0);
			mockMdc.AddField(++currentFlid, "NewIntegerProperty", CellarPropertyType.Integer, 0);
			// Not used in model yet (as of 23 march 2013) mockMdc.AddField(++currentFlid, "NewNumericProperty", CellarPropertyType.Numeric, 0);
			mockMdc.AddField(++currentFlid, "NewTimeProperty", CellarPropertyType.Time, 0);

			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000066_RegularPropertyMagnet.xml");
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000065, dtos, mockMdc, null, FwDirectoryFinder.FdoDirectories);

			m_dataMigrationManager.PerformMigration(dtoRepos, 7000066, new DummyProgressDlg());

			var magnet = XElement.Parse(dtoRepos.AllInstancesSansSubclasses("RegularPropertyMagnet").First().Xml);

			// Check the 'control' props to make sure they were not changed.
			Assert.AreEqual("e268fe80-5d9d-4f6b-a68f-37db8218b15d", magnet.Element("ExtantOwningAtomic").Element("objsur").Attribute("guid").Value);
			Assert.AreEqual("True", GetRegularPropertyValue(magnet, "ExtantBooleanProperty"));
			Assert.AreEqual("-201303233", GetRegularPropertyValue(magnet, "ExtantGenDateProperty"));
			Assert.AreEqual("c1ee311b-e382-11de-8a39-0800200c9a66", GetRegularPropertyValue(magnet, "ExtantGuidProperty"));
			Assert.AreEqual("1", GetRegularPropertyValue(magnet, "ExtantIntegerProperty"));
			Assert.AreEqual("2006-3-12 18:19:46.87", GetRegularPropertyValue(magnet, "ExtantTimeProperty"));

			// Check the newly added props to make sure they are present and using default values.
			Assert.AreEqual("False", GetRegularPropertyValue(magnet, "NewBooleanProperty"));
			Assert.AreEqual("-000000000", GetRegularPropertyValue(magnet, "NewGenDateProperty"));
			Assert.AreEqual(Guid.Empty.ToString(), GetRegularPropertyValue(magnet, "NewGuidProperty"));
			Assert.AreEqual("0", GetRegularPropertyValue(magnet, "NewIntegerProperty"));
			Assert.IsNotNull(GetRegularPropertyValue(magnet, "NewTimeProperty"));
		}
Пример #28
0
        private static MockMDCForDataMigration SetupMDC()
        {
            var mockMDC = new MockMDCForDataMigration();

            mockMDC.AddClass(1, "CmObject", null, new List <string> {
                "LangProject", "CmAgent", "WfiWordform",
                "WfiAnalysis", "CmAgentEvaluation"
            });
            mockMDC.AddClass(2, "CmAgent", "CmObject", new List <string>());
            mockMDC.AddClass(3, "LangProject", "CmObject", new List <string>());
            mockMDC.AddClass(4, "WfiWordform", "CmObject", new List <string>());
            mockMDC.AddClass(5, "WfiAnalysis", "CmObject", new List <string>());
            mockMDC.AddClass(6, "CmAgentEvaluation", "CmObject", new List <string>());
            return(mockMDC);
        }
Пример #29
0
        public void FixtureSetup()
        {
            var mockMDC = new MockMDCForDataMigration();
            // Set it up for CmObject, LangProject, LexDb, and LexEntry.
            var clsid = 0;

            mockMDC.AddClass(++clsid, "CmObject", null, new List <string> {
                "LangProject", "LexDb", "LexEntry"
            });
            mockMDC.AddClass(++clsid, "LangProject", "CmObject", new List <string>());
            mockMDC.AddClass(++clsid, "LexDb", "CmObject", new List <string>());
            mockMDC.AddClass(++clsid, "LexEntry", "CmObject", new List <string>());

            m_mdc = mockMDC;
        }
		public void DataMigration7000037Test()
		{
			// Bring in data from xml file.
			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000037.xml");

			// Create all the Mock classes for the classes in my test data.
			var mockMDC = new MockMDCForDataMigration();
			mockMDC.AddClass(1, "CmObject", null, new List<string> { "LexSense", "StPara" });
			mockMDC.AddClass(7, "LexSense", "CmObject", new List<string>());
			mockMDC.AddClass(15, "StPara", "CmObject", new List<string> { "StTxtPara" });
			mockMDC.AddClass(16, "StTxtPara", "StPara", new List<string>());

			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000036, dtos, mockMDC,
				FileUtils.ChangePathToPlatform("C:\\WW\\DistFiles\\Projects\\TokPisin"), FwDirectoryFinder.FdoDirectories);
			// Check that the version is correct.
			Assert.AreEqual(7000036, dtoRepos.CurrentModelVersion, "Wrong original version.");
			// Collect the link values that shouldn't change.
			m_cLinks = 0;
			CollectionNonSilfwLinks(dtoRepos);
			int cLinksOrig = m_cLinks;
			Assert.AreEqual(12, m_cLinks, "Should have 12 externalLink attributes in the test data");

			// Do Migration
			m_dataMigrationManager.PerformMigration(dtoRepos, 7000037, new DummyProgressDlg());

			// Check that the version was updated.
			Assert.AreEqual(7000037, dtoRepos.CurrentModelVersion, "Wrong updated version.");

			// Check that all externalLink values are reasonable, and that we find the right
			// number of them.
			m_cLinks = 0;
			foreach (var dto in dtoRepos.AllInstancesWithValidClasses())
			{
				string xml = dto.Xml;
				Assert.IsTrue(xml.Contains("externalLink"), "Every object in the test has an externalLink");
				var dtoXML = XElement.Parse(xml);
				foreach (var run in dtoXML.XPathSelectElements("//Run"))
				{
					var externalLinkAttr = run.Attribute("externalLink");
					if (externalLinkAttr != null)
					{
						CheckForValidLinkValue(externalLinkAttr.Value);
						++m_cLinks;
					}
				}
			}
			Assert.AreEqual(cLinksOrig, m_cLinks, "Migration should not change the number of externalLink attributes");
		}
        internal static MockMDCForDataMigration SetupMdc()
        {
            var mockMdc = new MockMDCForDataMigration();

            mockMdc.AddClass(0, "CmObject", null, new List <string> {
                "CmProject", "UserView", "UserViewRec", "UserViewField"
            });
            mockMdc.AddClass(1, "CmProject", "CmObject", new List <string> {
                "LangProject"
            });
            mockMdc.AddClass(6001, "LangProject", "CmProject", new List <string>());
            mockMdc.AddClass(18, "UserView", "CmObject", new List <string>());
            mockMdc.AddClass(19, "UserViewRec", "CmObject", new List <string>());
            mockMdc.AddClass(20, "UserViewField", "CmObject", new List <string>());
            return(mockMdc);
        }
		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, FwDirectoryFinder.FdoDirectories);

			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 DataMigration7000057Test_Normal()
		{
			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000057_Normal.xml");
			// Set up mock MDC.
			var mockMdc = new MockMDCForDataMigration();
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000056, dtos, mockMdc, null, FwDirectoryFinder.FdoDirectories);

			m_dataMigrationManager.PerformMigration(dtoRepos, 7000057, new DummyProgressDlg());
			Assert.AreEqual(7000057, dtoRepos.CurrentModelVersion, "Wrong updated version.");

			// check that Irregularly Inflected Form Type has new class
			{
				var iifNew = dtoRepos.GetDTO(kguidLexTypIrregInflectionVar);
				Assert.That(iifNew.Classname, Is.EqualTo(LexEntryInflTypeTags.kClassName));
				var iifNewElt = XElement.Parse(iifNew.Xml);
				Assert.That(iifNewElt.XPathSelectElement("Name/AUni").Value,
					Is.EqualTo("Irregularly Inflected Form"));
			}

			// check that we haven't changed another owned object class
			{
				// Discussion for Irregularly Inflected Form Type
				var iifDiscussion = dtoRepos.GetDTO("b6f4c056-ea5e-11de-8a9c-0013722f8dec");
				Assert.That(iifDiscussion.Classname, Is.EqualTo(StTextTags.kClassName));
			}

			// check that Irregularly Inflected Form Type (Plural) has new class
			{
				var iifNewPlural = dtoRepos.GetDTO(kguidLexTypPluralVar);
				Assert.That(iifNewPlural, Is.Not.Null);
				Assert.That(iifNewPlural.Classname, Is.EqualTo(LexEntryInflTypeTags.kClassName));
				var iifNewPluralElt = XElement.Parse(iifNewPlural.Xml);
				Assert.That(iifNewPluralElt.XPathSelectElement("Name/AUni").Value,
					Is.EqualTo("Plural"));
			}

			// check that Irregularly Inflected Form Type (Past) has new class
			{
				var iifNewPast = dtoRepos.GetDTO(kguidLexTypPastVar);
				Assert.That(iifNewPast, Is.Not.Null);
				Assert.That(iifNewPast.Classname, Is.EqualTo(LexEntryInflTypeTags.kClassName));
				var iifNewPastElt = XElement.Parse(iifNewPast.Xml);
				Assert.That(iifNewPastElt.XPathSelectElement("Name/AUni").Value,
					Is.EqualTo("Past"));
			}
		}
        public void DataMigration7000057Test_Normal()
        {
            var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000057_Normal.xml");
            // Set up mock MDC.
            var mockMdc = new MockMDCForDataMigration();
            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000056, dtos, mockMdc, null);

            m_dataMigrationManager.PerformMigration(dtoRepos, 7000057, new DummyProgressDlg());
            Assert.AreEqual(7000057, dtoRepos.CurrentModelVersion, "Wrong updated version.");

            // check that Irregularly Inflected Form Type has new class
            {
                var iifNew = dtoRepos.GetDTO(kguidLexTypIrregInflectionVar);
                Assert.That(iifNew.Classname, Is.EqualTo(LexEntryInflTypeTags.kClassName));
                var iifNewElt = XElement.Parse(iifNew.Xml);
                Assert.That(iifNewElt.XPathSelectElement("Name/AUni").Value,
                            Is.EqualTo("Irregularly Inflected Form"));
            }

            // check that we haven't changed another owned object class
            {
                // Discussion for Irregularly Inflected Form Type
                var iifDiscussion = dtoRepos.GetDTO("b6f4c056-ea5e-11de-8a9c-0013722f8dec");
                Assert.That(iifDiscussion.Classname, Is.EqualTo(StTextTags.kClassName));
            }

            // check that Irregularly Inflected Form Type (Plural) has new class
            {
                var iifNewPlural = dtoRepos.GetDTO(kguidLexTypPluralVar);
                Assert.That(iifNewPlural, Is.Not.Null);
                Assert.That(iifNewPlural.Classname, Is.EqualTo(LexEntryInflTypeTags.kClassName));
                var iifNewPluralElt = XElement.Parse(iifNewPlural.Xml);
                Assert.That(iifNewPluralElt.XPathSelectElement("Name/AUni").Value,
                            Is.EqualTo("Plural"));
            }

            // check that Irregularly Inflected Form Type (Past) has new class
            {
                var iifNewPast = dtoRepos.GetDTO(kguidLexTypPastVar);
                Assert.That(iifNewPast, Is.Not.Null);
                Assert.That(iifNewPast.Classname, Is.EqualTo(LexEntryInflTypeTags.kClassName));
                var iifNewPastElt = XElement.Parse(iifNewPast.Xml);
                Assert.That(iifNewPastElt.XPathSelectElement("Name/AUni").Value,
                            Is.EqualTo("Past"));
            }
        }
		public void DataMigration7000010_AnnotationDefns_Removed_Test()
		{
			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000010_AnnotationDefns.xml");
			dtos.UnionWith(DataMigrationTestServices.ParseProjectFile("DataMigration7000010_CommonData.xml"));

			// Set up mock MDC.
			var mockMDC = new MockMDCForDataMigration();
			mockMDC.AddClass(1, "CmObject", null, new List<string> { "CmPossibilityList", "CmAnnotationDefn", "StText", "StTxtPara" });
			mockMDC.AddClass(2, "CmPossibilityList", "CmObject", new List<string>());
			mockMDC.AddClass(3, "CmAnnotationDefn", "CmObject", new List<string>());
			mockMDC.AddClass(4, "StText", "CmObject", new List<string>());
			mockMDC.AddClass(5, "StTxtPara", "CmObject", new List<string>());
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000009, dtos, mockMDC, null, FwDirectoryFinder.FdoDirectories);

			// Collect the various annotation defns.
			var annDefnDtos = new Dictionary<string, DomainObjectDTO>();
			foreach (var annDto in dtoRepos.AllInstancesSansSubclasses("CmAnnotationDefn"))
				annDefnDtos.Add(annDto.Guid.ToUpper(), annDto);
			var stTextDtos = new Dictionary<string, DomainObjectDTO>();
			foreach (var annDto in dtoRepos.AllInstancesSansSubclasses("StText"))
				stTextDtos.Add(annDto.Guid.ToUpper(), annDto);
			var stTxtParaDtos = new Dictionary<string, DomainObjectDTO>();
			foreach (var annDto in dtoRepos.AllInstancesSansSubclasses("StTxtPara"))
				stTxtParaDtos.Add(annDto.Guid.ToUpper(), annDto);

			m_dataMigrationManager.PerformMigration(dtoRepos, 7000010, new DummyProgressDlg());

			Assert.AreEqual(16, dtoRepos.AllInstancesSansSubclasses("CmAnnotationDefn").Count(), "Wrong number of AnnDefns remaining.");
			Assert.AreEqual(1, dtoRepos.AllInstancesSansSubclasses("StText").Count(), "Wrong number of StTexts remaining.");
			Assert.AreEqual(1, dtoRepos.AllInstancesSansSubclasses("StTxtPara").Count(), "Wrong number of StTxtParas remaining.");

			// Make sure correct annDefns were removed.
			DataMigrationTestServices.CheckDtoRemoved(dtoRepos, annDefnDtos["B63F0702-32F7-4ABB-B005-C1D2265636AD"]);
			DataMigrationTestServices.CheckDtoRemoved(dtoRepos, annDefnDtos["9AC9637A-56B9-4F05-A0E1-4243FBFB57DB"]);
			DataMigrationTestServices.CheckDtoRemoved(dtoRepos, annDefnDtos["B0B1BB21-724D-470A-BE94-3D9A436008B8"]);
			DataMigrationTestServices.CheckDtoRemoved(dtoRepos, annDefnDtos["EB92E50F-BA96-4D1D-B632-057B5C274132"]);
			DataMigrationTestServices.CheckDtoRemoved(dtoRepos, annDefnDtos["CFECB1FE-037A-452D-A35B-59E06D15F4DF"]);
			DataMigrationTestServices.CheckDtoRemoved(dtoRepos, annDefnDtos["084A3AFE-0D00-41DA-BFCF-5D8DEAFA0296"]);
			DataMigrationTestServices.CheckDtoRemoved(dtoRepos, annDefnDtos["A39A1272-38A0-4354-BDAC-8636D64C1EEC"]);
			DataMigrationTestServices.CheckDtoRemoved(dtoRepos, annDefnDtos["50C1A53D-925D-4F55-8ED7-64A297905346"]);
			DataMigrationTestServices.CheckDtoRemoved(dtoRepos, annDefnDtos["EC0A4DAD-7E90-4E73-901A-21D25F0692E3"]);
			// Make sure owned StText and StTxtPara in deleted annDefn were removed.
			DataMigrationTestServices.CheckDtoRemoved(dtoRepos, stTextDtos["70CA84D7-211C-4548-8274-004640B3CA5D"]);
			DataMigrationTestServices.CheckDtoRemoved(dtoRepos, stTxtParaDtos["7C02332C-1F8D-4208-B15D-CA8AA89B9324"]);
		}
		public void DataMigration7000041Test()
		{
			// Bring in data from xml file.
			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000041.xml");

			// Create all the Mock classes for the classes in my test data.
			var mockMDC = new MockMDCForDataMigration();
			mockMDC.AddClass(1, "CmObject", null, new List<string> { "LexEntry", "CmMajorObject" });
			mockMDC.AddClass(2, "LexEntry", "CmObject", new List<string>());
			mockMDC.AddClass(3, "CmMajorObject", "CmObject", new List<string> { "CmPossibilityList" });
			mockMDC.AddClass(4, "CmPossibilityList", "CmMajorObject", new List<string>());

			TryThisProject(dtos, mockMDC, 3); // with Publications posibility list

			dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000041a.xml");

			TryThisProject(dtos, mockMDC, 1); // no Publications posibility list
		}
		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, FwDirectoryFinder.FdoDirectories);

			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 UniElementPropertiesAreRemoved()
        {
            var mockMdc = new MockMDCForDataMigration();

            mockMdc.AddClass(1, "CmObject", null, new List <string> {
                "ClassWithUnicodeProperties", "AbstractClassWithUnicodeProperties"
            });
            mockMdc.AddClass(2, "ClassWithUnicodeProperties", "CmObject", new List <string>());
            var currentFlid = 2000;

            mockMdc.AddField(++currentFlid, "UnicodePropWithAttrs", CellarPropertyType.Unicode, 0);
            mockMdc.AddField(++currentFlid, "UnicodePropWithoutAttrs", CellarPropertyType.Unicode, 0);

            mockMdc.AddClass(3, "AbstractClassWithUnicodeProperties", "CmObject", new List <string> {
                "ClassWithInheritedUnicodeProperties"
            });
            currentFlid = 3000;
            mockMdc.AddField(++currentFlid, "UnicodePropWithAttrs", CellarPropertyType.Unicode, 0);
            mockMdc.AddField(++currentFlid, "UnicodePropWithoutAttrs", CellarPropertyType.Unicode, 0);
            mockMdc.AddClass(4, "ClassWithInheritedUnicodeProperties", "AbstractClassWithUnicodeProperties", new List <string>());

            var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000067TestData.xml");
            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000066, dtos, mockMdc, null, FwDirectoryFinder.FdoDirectories);

            m_dataMigrationManager.PerformMigration(dtoRepos, 7000067, new DummyProgressDlg());

            var instance   = XElement.Parse(dtoRepos.AllInstancesSansSubclasses("ClassWithUnicodeProperties").First().Xml);
            var uniElement = instance.Element("UnicodePropWithAttrs").Element("Uni");

            Assert.IsFalse(uniElement.HasAttributes);
            Assert.AreEqual("With Attrs", uniElement.Value);
            uniElement = instance.Element("UnicodePropWithoutAttrs").Element("Uni");
            Assert.IsFalse(uniElement.HasAttributes);
            Assert.AreEqual("Without Attrs", uniElement.Value);

            instance   = XElement.Parse(dtoRepos.AllInstancesSansSubclasses("ClassWithInheritedUnicodeProperties").First().Xml);
            uniElement = instance.Element("UnicodePropWithAttrs").Element("Uni");
            Assert.IsFalse(uniElement.HasAttributes);
            Assert.AreEqual("Inherited With Attrs", uniElement.Value);
            uniElement = instance.Element("UnicodePropWithoutAttrs").Element("Uni");
            Assert.IsFalse(uniElement.HasAttributes);
            Assert.AreEqual("Inherited Without Attrs", uniElement.Value);
        }
Пример #39
0
        private static MockMDCForDataMigration SetupMdc()
        {
            var mockMdc = new MockMDCForDataMigration();

            mockMdc.AddClass(1, "CmObject", null, new List <string> {
                "CmProject", "CmMajorObject", "CmPossibility"
            });
            mockMdc.AddClass(2, "CmProject", "CmObject", new List <string> {
                "LangProject"
            });
            mockMdc.AddClass(3, "CmMajorObject", "CmObject", new List <string> {
                "RnResearchNbk", "CmPossibilityList"
            });
            mockMdc.AddClass(4, "CmPossibility", "CmObject", new List <string>());
            mockMdc.AddClass(5, "LangProject", "CmProject", new List <string>());
            mockMdc.AddClass(6, "RnResearchNbk", "CmMajorObject", new List <string>());
            mockMdc.AddClass(7, "CmPossibilityList", "CmMajorObject", new List <string>());

            return(mockMdc);
        }
		public void DataMigration7000006Test()
		{
			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000006Tests.xml");

			// Set up mock MDC.
			var mockMDC = new MockMDCForDataMigration();
			mockMDC.AddClass(1, "CmObject", null, new List<string> { "CmProject" });
			mockMDC.AddClass(2, "CmProject", "CmObject", new List<string> { "LangProject" });
			mockMDC.AddClass(3, "LangProject", "CmProject", new List<string>());
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000005, dtos, mockMDC, null, FwDirectoryFinder.FdoDirectories);
			m_dataMigrationManager.PerformMigration(dtoRepos, 7000006, new DummyProgressDlg());

			var cmProjDto = dtoRepos.AllInstancesSansSubclasses("LangProject").First();
			var cpElement = XElement.Parse(cmProjDto.Xml);
			Assert.AreEqual(7000006, dtoRepos.CurrentModelVersion, "Wrong updated version.");
			// Get the Description Element in cmProject
			Assert.IsNotNull(cpElement.XPathSelectElement("CmProject/Description"));
			// Get the Name Element in cmProject (should be gone)
			Assert.IsNull(cpElement.XPathSelectElement("CmProject/Name"));
		}
Пример #41
0
        private static MockMDCForDataMigration SetupMdc()
        {
            var mockMdc = new MockMDCForDataMigration();

            mockMdc.AddClass(0, "CmObject", null, new List <string> {
                "CmProject", "CmMajorObject", "CmPossibility", "RnGenericRec"
            });
            mockMdc.AddClass(CmProjectTags.kClassId, "CmProject", "CmObject", new List <string> {
                "LangProject"
            });
            mockMdc.AddClass(CmMajorObjectTags.kClassId, "CmMajorObject", "CmObject", new List <string> {
                "RnResearchNbk", "CmPossibilityList"
            });
            mockMdc.AddClass(CmPossibilityTags.kClassId, "CmPossibility", "CmObject", new List <string>());
            mockMdc.AddClass(LangProjectTags.kClassId, "LangProject", "CmProject", new List <string>());
            mockMdc.AddClass(RnResearchNbkTags.kClassId, "RnResearchNbk", "CmMajorObject", new List <string>());
            mockMdc.AddClass(CmPossibilityListTags.kClassId, "CmPossibilityList", "CmMajorObject", new List <string>());
            mockMdc.AddClass(RnGenericRecTags.kClassId, "RnGenericRec", "CmObject", new List <string>());

            return(mockMdc);
        }
Пример #42
0
        public void DataMigration7000040Test()
        {
            // Bring in data from xml file.
            var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000040.xml");

            // Create all the Mock classes for the classes in my test data.
            var mockMDC = new MockMDCForDataMigration();

            mockMDC.AddClass(1, "CmObject", null, new List <string> {
                "LexEntryRef"
            });
            mockMDC.AddClass(2, "LexEntryRef", "CmObject", new List <string>());
            mockMDC.AddClass(3, "LexEntry", "CmObject", new List <string>());

            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000039, dtos, mockMDC,
                                                                                FileUtils.ChangePathToPlatform("C:\\WW\\DistFiles\\Projects\\TokPisin"), FwDirectoryFinder.FdoDirectories);

            // Do Migration
            m_dataMigrationManager.PerformMigration(dtoRepos, 7000040, new DummyProgressDlg());

            // Check that the version was updated.
            Assert.AreEqual(7000040, dtoRepos.CurrentModelVersion, "Wrong updated version.");

            // The empty element should have stayed that way.
            VerifyEntryRef(dtoRepos, "82CB0EC6-B542-4FB8-B5B6-41398790DDF9", 0, 0);

            // The one with no primary lexemes should have no ShowComplexFormsIn
            VerifyEntryRef(dtoRepos, "c1ecaa73-e382-11de-8a39-0800200c9a66", 1, 0);

            // The one with one primary lexemes should have one ShowComplexFormsIn (and ComponentLexemes and PrimaryLexemes unchanged)
            var osElements = VerifyEntryRef(dtoRepos, "BF274D15-406E-4816-A81F-9B8C70AEF8E5", 2, 1);

            Assert.That(osElements.Count(), Is.EqualTo(1));
            VerifyObjSur(osElements, 0, "BFC76313-B9E4-4A31-8408-F854D7709E68");

            // The one with two primary lexemes should have two in ShowComplexFormsIn (and ComponentLexemes and PrimaryLexemes unchanged)
            osElements = VerifyEntryRef(dtoRepos, "B854113C-4B99-46FF-A9F6-ED3F0245E259", 2, 2);
            VerifyObjSur(osElements, 0, "6704EB7A-EFEA-42E4-BFAA-9B99B1D45D6F");
            VerifyObjSur(osElements, 1, "BFC76313-B9E4-4A31-8408-F854D7709E68");
        }
		public void DataMigration7000007Test()
		{
			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000007Tests.xml");

			// Set up mock MDC.
			var mockMDC = new MockMDCForDataMigration();
			mockMDC.AddClass(1, "CmObject", null, new List<string> { "ScrImportSet", "StPara", "StText"});
			mockMDC.AddClass(2, "ScrImportSet", "CmObject", new List<string>());
			mockMDC.AddClass(4, "StPara", "CmObject", new List<string> {"StTxtPara"});
			mockMDC.AddClass(6, "StText", "CmObject", new List<string> {"StFootnote"});
			mockMDC.AddClass(7, "StTxtPara", "StPara", new List<string>());
			mockMDC.AddClass(9, "StFootnote", "StText", new List<string> {"ScrFootnote"});
			mockMDC.AddClass(10, "ScrFootnote", "StFootnote", new List<string>());
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000006, dtos, mockMDC, null, FwDirectoryFinder.FdoDirectories);
			m_dataMigrationManager.PerformMigration(dtoRepos, 7000007, new DummyProgressDlg());

			var ScrInpDto = dtoRepos.AllInstancesSansSubclasses("ScrImportSet").First();
			var ScrInpElement = XElement.Parse(ScrInpDto.Xml);

			Assert.AreEqual(7000007, dtoRepos.CurrentModelVersion, "Wrong updated version.");

			Assert.IsNull(ScrInpElement.XPathSelectElement("ScrImportSet/ImportSettings"));
			// Get the ImportSettings Element in ScrImportSet (should be gone)
			Assert.IsNotNull(ScrInpElement.XPathSelectElement("ScrImportSet/ImportType"));
			// Get the ImportType Element in ScrImportSet.

			var ScrFootDto = dtoRepos.AllInstancesSansSubclasses("ScrFootnote").First();
			var ScrFootElement = XElement.Parse(ScrFootDto.Xml);
			Assert.IsNull(ScrFootElement.XPathSelectElement("StFootnote/DisplayFootnoteReference"));
			// Get the DisplayFootnoteReference Element in StFootnote (should be gone)
			Assert.IsNull(ScrFootElement.XPathSelectElement("StFootnote/DisplayFootnoteMarker"));
			// Get the DisplayFootnoteMarker Element in StFootnote (should be gone)

			var StTxtDto = dtoRepos.AllInstancesSansSubclasses("StTxtPara").First();
			var StTxtElement = XElement.Parse(StTxtDto.Xml);
			Assert.IsNotNull(StTxtElement.XPathSelectElement("StPara/StyleRules"));
			// Get the StyleRules Element in StPara
			Assert.IsNull(StTxtElement.XPathSelectElement("StPara/StyleName"));
			// Get the StyleName Element in StPara (should be gone)
		}
        public void DataMigration7000026Test()
        {
            //Bring in data from xml file.
            var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000026Tests.xml");


            var mockMDC = new MockMDCForDataMigration();

            mockMDC.AddClass(1, "CmObject", null, new List <string> {
                "CmProject"
            });
            mockMDC.AddClass(2, "CmProject", "CmObject", new List <string> {
                "LangProject"
            });
            mockMDC.AddClass(3, "LangProject", "CmProject", new List <string>());

            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000025, dtos, mockMDC, null, FwDirectoryFinder.FdoDirectories);

            //Before the migration there should be a ExtLinkRootDir element in the project.
            var langProjDto            = dtoRepos.AllInstancesSansSubclasses("LangProject").First();
            var langProjElement        = XElement.Parse(langProjDto.Xml);
            var langProjExtLinkRootDir = langProjElement.XPathSelectElement("ExtLinkRootDir");

            Assert.That(langProjExtLinkRootDir, Is.Not.Null, "Before the migration we should have a 'ExtLinkRootDir' element on LangProj");

            m_dataMigrationManager.PerformMigration(dtoRepos, 7000026, new DummyProgressDlg());

            //This object should contain a 'LinkedFilesRootDir' property
            langProjDto     = dtoRepos.AllInstancesSansSubclasses("LangProject").First();
            langProjElement = XElement.Parse(langProjDto.Xml);
            var langProjLinkedFilesRootDir = langProjElement.XPathSelectElement("LinkedFilesRootDir");

            Assert.That(langProjLinkedFilesRootDir, Is.Not.Null, "We should now have a 'LinkedFilesRootDir' element on LangProj");
            //This object should not contain an 'AnalysysStatus' property
            langProjExtLinkRootDir = langProjElement.XPathSelectElement("ExtLinkRootDir");
            Assert.That(langProjExtLinkRootDir, Is.Null, "LangProject ExtLinkRootDir Property should not exist any more");


            Assert.AreEqual(7000026, dtoRepos.CurrentModelVersion, "Wrong updated version.");
        }
        private static MockMDCForDataMigration SetupMDC()
        {
            var mockMDC = new MockMDCForDataMigration();

            mockMDC.AddClass(1, "CmObject", null, new List <string> {
                "LangProject", "DsDiscourseData", "DsConstChart",
                "ConstChartRow", "CmPossibility", "ConstituentChartCellPart"
            });
            mockMDC.AddClass(2, "CmPossibility", "CmObject", new List <string>());
            mockMDC.AddClass(3, "LangProject", "CmObject", new List <string>());
            mockMDC.AddClass(4, "DsDiscourseData", "CmObject", new List <string>());
            mockMDC.AddClass(5, "DsConstChart", "CmObject", new List <string>());
            mockMDC.AddClass(6, "ConstChartRow", "CmObject", new List <string>());
            mockMDC.AddClass(14, "ConstituentChartCellPart", "CmObject", new List <string> {
                "ConstChartWordGroup", "ConstChartMovedTextMarker", "ConstChartClauseMarker", "ConstChartTag"
            });
            mockMDC.AddClass(15, "ConstChartWordGroup", "ConstituentChartCellPart", new List <string>());
            mockMDC.AddClass(16, "ConstChartMovedTextMarker", "ConstituentChartCellPart", new List <string>());
            mockMDC.AddClass(17, "ConstChartClauseMarker", "ConstituentChartCellPart", new List <string>());
            mockMDC.AddClass(18, "ConstChartTag", "ConstituentChartCellPart", new List <string>());
            return(mockMDC);
        }
Пример #46
0
        public void DataMigration7000028Test()
        {
            //Bring in data from xml file.
            var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000028.xml");


            var mockMDC = new MockMDCForDataMigration();

            mockMDC.AddClass(1, "CmObject", null, new List <string> {
                "CmProject"
            });
            mockMDC.AddClass(2, "CmProject", "CmObject", new List <string> {
                "LangProject"
            });
            mockMDC.AddClass(3, "LangProject", "CmProject", new List <string>());
            mockMDC.AddClass(4, "LexDb", "CmObject", new List <string> ());
            mockMDC.AddClass(5, "LexEntry", "CmObject", new List <string>());

            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000027, dtos, mockMDC, null);

            m_dataMigrationManager.PerformMigration(dtoRepos, 7000028, new DummyProgressDlg());

            // The Entries property of the LexDb should be gone.
            var lexDbDto     = dtoRepos.AllInstancesSansSubclasses("LexDb").First();
            var lexDbElement = XElement.Parse(lexDbDto.Xml);
            var entriesElt   = lexDbElement.Element("Entries");

            Assert.That(lexDbElement.Name.LocalName, Is.EqualTo("rt"));
            Assert.That(entriesElt, Is.Null);

            // LexEntries should no longer know owners.
            var entryDto  = dtoRepos.AllInstancesSansSubclasses("LexEntry").First();
            var entryElt  = XElement.Parse(entryDto.Xml);
            var ownerAttr = entryElt.Attribute("ownerguid");

            Assert.That(ownerAttr, Is.Null);

            Assert.AreEqual(7000028, dtoRepos.CurrentModelVersion, "Wrong updated version.");
        }
        public void DataMigration7000008Test()
        {
            // Add at least one ScrScriptureNote which has a null BeginObject prop.
            // This ScrScriptureNote should not be removed in this migration.

            var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000008Tests.xml");

            // Set up mock MDC.
            var mockMDC = new MockMDCForDataMigration();

            mockMDC.AddClass(1, "CmObject", null, new List <string> {
                "CmBaseAnnotation", "LangProject"
            });
            mockMDC.AddClass(2, "LangProject", "CmObject", new List <string>());
            mockMDC.AddClass(3, "CmBaseAnnotation", "CmObject", new List <string> {
                "ScrScriptureNote"
            });
            mockMDC.AddClass(4, "ScrScriptureNote", "CmBaseAnnotation", new List <string>());
            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000007, dtos, mockMDC, null);

            m_dataMigrationManager.PerformMigration(dtoRepos, 7000008, new DummyProgressDlg());

            var goners = ((DomainObjectDtoRepository)dtoRepos).Goners;

            Assert.AreEqual(4, goners.Count, "Wrong number removed.");
            var gonerGuids = new List <string>
            {
                ("54E4A881-23D7-48FC-BD05-14DD0CA86D5B").ToLower(),                                                         // Defective Discourse Chart ann.
                ("22a8431f-f974-412f-a261-8bd1a4e1be1b").ToLower(),
                ("155B8419-0A9B-44A4-A960-F78983C84768").ToLower(),
                ("84FC5548-8AB2-4AA0-AFE5-72F64F567982").ToLower()
            };

            foreach (var goner in goners)
            {
                Assert.Contains(goner.Guid.ToLower(), gonerGuids, "Goner guid not found.");
            }
        }
        public void DataMigration7000041Test()
        {
            // Bring in data from xml file.
            var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000041.xml");

            // Create all the Mock classes for the classes in my test data.
            var mockMDC = new MockMDCForDataMigration();

            mockMDC.AddClass(1, "CmObject", null, new List <string> {
                "LexEntry", "CmMajorObject"
            });
            mockMDC.AddClass(2, "LexEntry", "CmObject", new List <string>());
            mockMDC.AddClass(3, "CmMajorObject", "CmObject", new List <string> {
                "CmPossibilityList"
            });
            mockMDC.AddClass(4, "CmPossibilityList", "CmMajorObject", new List <string>());

            TryThisProject(dtos, mockMDC, 3);             // with Publications posibility list

            dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000041a.xml");

            TryThisProject(dtos, mockMDC, 1);             // no Publications posibility list
        }
Пример #49
0
        private static MockMDCForDataMigration SetupMdc()
        {
            var mockMdc = new MockMDCForDataMigration();

            mockMdc.AddClass(1, "CmObject", null, new List <string> {
                "CmProject", "CmSortSpec", "CmMajorObject", "UserViewField", "CmAnnotation", "FsFeatDefn", "LgWritingSystem", "LgCollation", "ScrImportSource", "ScrMarkerMapping", "StStyle"
            });
            mockMdc.AddClass(2, "CmProject", "CmObject", new List <string> {
                "LangProject"
            });
            mockMdc.AddClass(3, "LangProject", "CmProject", new List <string>());
            mockMdc.AddClass(4, "CmSortSpec", "CmObject", new List <string>());
            mockMdc.AddClass(5, "CmMajorObject", "CmObject", new List <string> {
                "CmPossibilityList", "WordformLookupList", "ReversalIndex"
            });
            mockMdc.AddClass(6, "CmPossibilityList", "CmMajorObject", new List <string>());
            mockMdc.AddClass(7, "WordformLookupList", "CmMajorObject", new List <string>());
            mockMdc.AddClass(8, "ReversalIndex", "CmMajorObject", new List <string>());
            mockMdc.AddClass(9, "UserViewField", "CmObject", new List <string>());
            mockMdc.AddClass(10, "CmAnnotation", "CmObject", new List <string> {
                "CmBaseAnnotation"
            });
            mockMdc.AddClass(11, "CmBaseAnnotation", "CmAnnotation", new List <string>());
            mockMdc.AddClass(12, "FsFeatDefn", "CmObject", new List <string> {
                "FsOpenFeature"
            });
            mockMdc.AddClass(13, "FsOpenFeature", "FsFeatDefn", new List <string>());
            mockMdc.AddClass(14, "LgWritingSystem", "CmObject", new List <string>());
            mockMdc.AddClass(15, "LgCollation", "CmObject", new List <string>());
            mockMdc.AddClass(16, "ScrImportSource", "CmObject", new List <string> {
                "ScrImportSFFiles"
            });
            mockMdc.AddClass(17, "ScrImportSFFiles", "ScrImportSource", new List <string>());
            mockMdc.AddClass(18, "ScrMarkerMapping", "CmObject", new List <string>());
            mockMdc.AddClass(19, "StStyle", "CmObject", new List <string>());
            return(mockMdc);
        }
Пример #50
0
        public void DuplicatedListsAreMarkedAsCustom()
        {
            var mockMdc = new MockMDCForDataMigration();

            mockMdc.AddClass(1, "CmObject", null, new List <string> {
                "CmPossibilityList", "LanguageProject", "CmCustomItem", "LexDb", "LexEntryRef"
            });
            mockMdc.AddClass(2, "CmPossibilityList", "CmObject", new List <string>());
            mockMdc.AddClass(3, "CmCustomItem", "CmObject", new List <string>());
            mockMdc.AddClass(4, "LanguageProject", "CmObject", new List <string>());
            mockMdc.AddClass(5, "LexDb", "CmObject", new List <string>());
            mockMdc.AddClass(6, "LexEntryRef", "CmObject", new List <string>());

            var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000070_DoubledList.xml");
            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000069, dtos, mockMdc, null, FwDirectoryFinder.FdoDirectories);

            Assert.AreEqual(3, dtoRepos.AllInstancesWithSubclasses("CmPossibilityList").Count(), "The CmPossibilityList test data has changed");

            m_dataMigrationManager.PerformMigration(dtoRepos, 7000070, new DummyProgressDlg());             // SUT

            var resultingLists = dtoRepos.AllInstancesWithSubclasses("CmPossibilityList").ToList();

            Assert.AreEqual(3, resultingLists.Count, "The Custom list and new replacement should be all there is");
            // Make sure that the custom list got a custom name and the 'real' owned list kept the original name
            var custLanguages = XElement.Parse(resultingLists[0].Xml);
            var origLanguages = XElement.Parse(resultingLists[1].Xml);
            var notLanguages  = XElement.Parse(resultingLists[2].Xml);

            Assert.IsTrue(origLanguages.Attribute("ownerguid") != null, "Test data order has changed");
            var firstName = origLanguages.Element("Name").Elements("AUni").First().Value;

            Assert.That(firstName, Is.StringMatching("Languages"), "Built in list should not have changed the name");
            firstName = custLanguages.Element("Name").Elements("AUni").First().Value;
            Assert.That(firstName, Is.StringMatching("Languages-Custom"), "The custom Languages list did not have its name changed");
            firstName = notLanguages.Element("Name").Elements("AUni").First().Value;
            Assert.That(firstName, Is.StringMatching("Not Languages"), "The unrelated list should not have had its name changed");
        }
		public void UniElementPropertiesAreRemoved()
		{
			var mockMdc = new MockMDCForDataMigration();
			mockMdc.AddClass(1, "CmObject", null, new List<string> { "ClassWithUnicodeProperties", "AbstractClassWithUnicodeProperties" });
			mockMdc.AddClass(2, "ClassWithUnicodeProperties", "CmObject", new List<string>());
			var currentFlid = 2000;
			mockMdc.AddField(++currentFlid, "UnicodePropWithAttrs", CellarPropertyType.Unicode, 0);
			mockMdc.AddField(++currentFlid, "UnicodePropWithoutAttrs", CellarPropertyType.Unicode, 0);

			mockMdc.AddClass(3, "AbstractClassWithUnicodeProperties", "CmObject", new List<string> { "ClassWithInheritedUnicodeProperties" });
			currentFlid = 3000;
			mockMdc.AddField(++currentFlid, "UnicodePropWithAttrs", CellarPropertyType.Unicode, 0);
			mockMdc.AddField(++currentFlid, "UnicodePropWithoutAttrs", CellarPropertyType.Unicode, 0);
			mockMdc.AddClass(4, "ClassWithInheritedUnicodeProperties", "AbstractClassWithUnicodeProperties", new List<string>());

			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000067TestData.xml");
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000066, dtos, mockMdc, null, FwDirectoryFinder.FdoDirectories);

			m_dataMigrationManager.PerformMigration(dtoRepos, 7000067, new DummyProgressDlg());

			var instance = XElement.Parse(dtoRepos.AllInstancesSansSubclasses("ClassWithUnicodeProperties").First().Xml);
			var uniElement = instance.Element("UnicodePropWithAttrs").Element("Uni");
			Assert.IsFalse(uniElement.HasAttributes);
			Assert.AreEqual("With Attrs", uniElement.Value);
			uniElement = instance.Element("UnicodePropWithoutAttrs").Element("Uni");
			Assert.IsFalse(uniElement.HasAttributes);
			Assert.AreEqual("Without Attrs", uniElement.Value);

			instance = XElement.Parse(dtoRepos.AllInstancesSansSubclasses("ClassWithInheritedUnicodeProperties").First().Xml);
			uniElement = instance.Element("UnicodePropWithAttrs").Element("Uni");
			Assert.IsFalse(uniElement.HasAttributes);
			Assert.AreEqual("Inherited With Attrs", uniElement.Value);
			uniElement = instance.Element("UnicodePropWithoutAttrs").Element("Uni");
			Assert.IsFalse(uniElement.HasAttributes);
			Assert.AreEqual("Inherited Without Attrs", uniElement.Value);
		}
		public void DataMigration7000063Test()
		{
			var mockMdc = new MockMDCForDataMigration();
			mockMdc.AddClass(1, "CmObject", null, new List<string> { "LangProject" });
			mockMdc.AddClass(2, "LangProject", "CmObject", new List<string>());

			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000063.xml");
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000062, dtos, mockMdc, null, FwDirectoryFinder.FdoDirectories);

			m_dataMigrationManager.PerformMigration(dtoRepos, 7000063, new DummyProgressDlg());

			var wmbLangProjList = dtoRepos.AllInstancesSansSubclasses("LangProject");
			var wmbLangProj = wmbLangProjList.First();
			var wmbLangProjElt = XElement.Parse(wmbLangProj.Xml);
			// the homograph ws should have been added
			var homographWs = wmbLangProjElt.Element("HomographWs"); // has to be only one
			Assert.IsNotNull(homographWs, "Migration 7000063 failed to add HomographWs element to LangProject class");
			var homographWsUni = homographWs.Element("Uni"); // only one
			Assert.IsNotNull(homographWs, "Migration 7000063 failed to add HomographWs/Uni element to LangProject class");
			var homographWsTag = homographWsUni.Value; // only one
			Assert.AreEqual("fa", homographWsUni.Value, "HomographWs value in LangProject class is incorrect");

			Assert.AreEqual(7000063, dtoRepos.CurrentModelVersion, "Wrong updated version.");
		}
Пример #53
0
        public void DataMigration7000011Test()
        {
            var dtos = new HashSet <DomainObjectDTO>();
            var sb   = new StringBuilder();

            // 1. Add barebones Notebook.
            sb.Append("<rt class=\"RnResearchNbk\" guid=\"2E237D40-853C-49D5-AAC6-EFF01121AC25\">");
            sb.Append("<RnResearchNbk>");
            sb.Append("<RecTypes><objsur t=\"o\" guid=\"513B370D-8EFC-4C94-8192-7707677A6F98\" /></RecTypes>");
            sb.Append("<Records>");
            sb.Append("<objsur t=\"o\" guid=\"C84B721B-3617-43DE-A436-9E0538837A66\" />");
            sb.Append("</Records>");
            sb.Append("</RnResearchNbk>");
            sb.Append("</rt>");
            var nbkDto = new DomainObjectDTO("2E237D40-853C-49D5-AAC6-EFF01121AC25", "RnResearchNbk", sb.ToString());

            dtos.Add(nbkDto);

            sb = new StringBuilder();
            // 2. Add barebones RecTypes List
            sb.Append("<rt class=\"CmPossibilityList\" guid=\"513B370D-8EFC-4C94-8192-7707677A6F98\" ownerguid=\"2E237D40-853C-49D5-AAC6-EFF01121AC25\">");
            sb.Append("<CmPossibilityList>");
            sb.Append("<Possibilities>");
            sb.Append("<objsur t=\"o\" guid=\"27C32299-3B41-4FAD-A85C-F47657BCF95A\" />");
            sb.Append("<objsur t=\"o\" guid=\"5E3D9C56-404C-44C5-B3CB-99BF390E322E\" />");
            sb.Append("</Possibilities>");
            sb.Append("</CmPossibilityList>");
            sb.Append("</rt>");
            var recTypesDto = new DomainObjectDTO("513B370D-8EFC-4C94-8192-7707677A6F98", "CmPossibilityList", sb.ToString());

            dtos.Add(recTypesDto);

            sb = new StringBuilder();
            // 3. Add barebones Conversation
            sb.Append("<rt class=\"CmPossibility\" guid=\"27C32299-3B41-4FAD-A85C-F47657BCF95A\" ownerguid=\"513B370D-8EFC-4C94-8192-7707677A6F98\">");
            sb.Append("<CmPossibility>");
            sb.Append("<Abbreviation><AUni ws=\"en\">Con</AUni></Abbreviation>");
            sb.Append("</CmPossibility>");
            sb.Append("</rt>");
            var conDto = new DomainObjectDTO("27C32299-3B41-4FAD-A85C-F47657BCF95A", "CmPossibility", sb.ToString());

            dtos.Add(conDto);

            sb = new StringBuilder();
            // 4. Add barebones Observation
            sb.Append("<rt class=\"CmPossibility\" guid=\"5E3D9C56-404C-44C5-B3CB-99BF390E322E\" ownerguid=\"513B370D-8EFC-4C94-8192-7707677A6F98\">");
            sb.Append("<CmPossibility>");
            sb.Append("<Abbreviation><AUni ws=\"en\">Obs</AUni></Abbreviation>");
            sb.Append("<SubPossibilities>");
            sb.Append("<objsur t=\"o\" guid=\"9827CBE0-31F3-434E-80F7-5D5354C110B0\" />");
            sb.Append("</SubPossibilities>");
            sb.Append("</CmPossibility>");
            sb.Append("</rt>");
            var obsDto = new DomainObjectDTO("5E3D9C56-404C-44C5-B3CB-99BF390E322E", "CmPossibility", sb.ToString());

            dtos.Add(obsDto);

            sb = new StringBuilder();
            // 5. Add barebones Performance
            sb.Append("<rt class=\"CmPossibility\" guid=\"9827CBE0-31F3-434E-80F7-5D5354C110B0\" ownerguid=\"5E3D9C56-404C-44C5-B3CB-99BF390E322E\">");
            sb.Append("<CmPossibility>");
            sb.Append("<Abbreviation><AUni ws=\"en\">Per</AUni></Abbreviation>");
            sb.Append("</CmPossibility>");
            sb.Append("</rt>");
            var perDto = new DomainObjectDTO("9827CBE0-31F3-434E-80F7-5D5354C110B0", "CmPossibility", sb.ToString());

            dtos.Add(perDto);

            sb = new StringBuilder();
            // 6. Add barebones RnGenericRec
            sb.Append("<rt class=\"RnGenericRec\" guid=\"c84b721b-3617-43de-a436-9e0538837a66\" ownerguid=\"2E237D40-853C-49D5-AAC6-EFF01121AC25\">");
            sb.Append("<RnGenericRec>");
            sb.Append("<Type><objsur guid=\"27c32299-3b41-4fad-a85c-f47657bcf95a\" t=\"r\" /></Type>");
            sb.Append("</RnGenericRec>");
            sb.Append("</rt>");
            var recDto = new DomainObjectDTO("c84b721b-3617-43de-a436-9e0538837a66", "RnGenericRec", sb.ToString());

            dtos.Add(recDto);

            // Set up mock MDC.
            var mockMDC = new MockMDCForDataMigration();

            mockMDC.AddClass(1, "CmObject", null, new List <string> {
                "RnResearchNbk", "CmPossibilityList", "CmPossibility", "RnGenericRec"
            });
            mockMDC.AddClass(2, "RnResearchNbk", "CmObject", new List <string>());
            mockMDC.AddClass(3, "CmPossibilityList", "CmObject", new List <string>());
            mockMDC.AddClass(4, "CmPossibility", "CmObject", new List <string>());
            mockMDC.AddClass(5, "RnGenericRec", "CmObject", new List <string>());
            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000010, dtos, mockMDC, null);

            m_dataMigrationManager.PerformMigration(dtoRepos, 7000011, new DummyProgressDlg());

            XElement nbkElem = XElement.Parse(nbkDto.Xml);

            Assert.AreEqual("D9D55B12-EA5E-11DE-95EF-0013722F8DEC",
                            (string)nbkElem.XPathSelectElement("RnResearchNbk/RecTypes/objsur").Attribute("guid"));

            DataMigrationTestServices.CheckDtoRemoved(dtoRepos, recTypesDto);
            recTypesDto = dtoRepos.GetDTO("D9D55B12-EA5E-11DE-95EF-0013722F8DEC");
            XElement        recTypesElem = XElement.Parse(recTypesDto.Xml);
            List <XElement> objSurElems  = recTypesElem.XPathSelectElements("CmPossibilityList/Possibilities/objsur").ToList();

            Assert.AreEqual(2, objSurElems.Count);
            Assert.AreEqual("B7B37B86-EA5E-11DE-80E9-0013722F8DEC", (string)objSurElems[0].Attribute("guid"));
            Assert.AreEqual("B7EA5156-EA5E-11DE-9F9C-0013722F8DEC", (string)objSurElems[1].Attribute("guid"));

            DataMigrationTestServices.CheckDtoRemoved(dtoRepos, conDto);
            conDto = dtoRepos.GetDTO("B7B37B86-EA5E-11DE-80E9-0013722F8DEC");
            XElement conElem = XElement.Parse(conDto.Xml);

            Assert.AreEqual("Con", (string)conElem.XPathSelectElement("CmPossibility/Abbreviation/AUni[@ws='en']"));
            Assert.AreEqual("D9D55B12-EA5E-11DE-95EF-0013722F8DEC", (string)conElem.Attribute("ownerguid"));

            DataMigrationTestServices.CheckDtoRemoved(dtoRepos, obsDto);
            obsDto = dtoRepos.GetDTO("B7EA5156-EA5E-11DE-9F9C-0013722F8DEC");
            XElement obsElem = XElement.Parse(obsDto.Xml);

            Assert.AreEqual("Obs", (string)obsElem.XPathSelectElement("CmPossibility/Abbreviation/AUni[@ws='en']"));
            Assert.AreEqual("B7F63D0E-EA5E-11DE-9F02-0013722F8DEC",
                            (string)obsElem.XPathSelectElement("CmPossibility/SubPossibilities/objsur").Attribute("guid"));
            Assert.AreEqual("D9D55B12-EA5E-11DE-95EF-0013722F8DEC", (string)obsElem.Attribute("ownerguid"));

            DataMigrationTestServices.CheckDtoRemoved(dtoRepos, perDto);
            perDto = dtoRepos.GetDTO("B7F63D0E-EA5E-11DE-9F02-0013722F8DEC");
            XElement perElem = XElement.Parse(perDto.Xml);

            Assert.AreEqual("Per", (string)perElem.XPathSelectElement("CmPossibility/Abbreviation/AUni[@ws='en']"));
            Assert.AreEqual("B7EA5156-EA5E-11DE-9F9C-0013722F8DEC", (string)perElem.Attribute("ownerguid"));

            XElement recElem = XElement.Parse(recDto.Xml);

            Assert.AreEqual("B7B37B86-EA5E-11DE-80E9-0013722F8DEC", (string)recElem.XPathSelectElement("RnGenericRec/Type/objsur").Attribute("guid"));
        }
Пример #54
0
        public void DataMigration7000024Test1()
        {
            int count = 0;
            var dtos  = DataMigrationTestServices.ParseProjectFile("DataMigration7000024Tests1.xml");

            // Set up mock MDC.
            var mockMDC = new MockMDCForDataMigration();

            mockMDC.AddClass(1, "CmObject", null, new List <string>
            {
                "CmProject",
                "CmMajorObject",
                "RnGenericRec"
            });

            mockMDC.AddClass(2, "CmProject", "CmObject", new List <string> {
                "LangProject"
            });
            mockMDC.AddClass(3, "LangProject", "CmProject", new List <string>());
            mockMDC.AddClass(4, "CmMajorObject", "CmObject", new List <string> {
                "RnResearchNbk"
            });
            mockMDC.AddClass(5, "RnResearchNbk", "CmMajorObject", new List <string>());
            mockMDC.AddClass(6, "RnGenericRec", "CmObject", new List <string>());

            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000023, dtos, mockMDC, null);

            m_dataMigrationManager.PerformMigration(dtoRepos, 7000024, new DummyProgressDlg());

            //This object should contain a 'Status' property
            var langProjDto     = dtoRepos.AllInstancesSansSubclasses("LangProject").First();
            var langProjElement = XElement.Parse(langProjDto.Xml);
            var langProjStatus  = langProjElement.XPathSelectElement("Status/objsur");

            Assert.That(langProjStatus, Is.Not.Null, "We should now have a 'Status' element on LangProj");

            //This object should not contain an 'AnalysysStatus' property
            var langProjAnalysisStatus = langProjElement.XPathSelectElement("AnalysisStatus");

            Assert.That(langProjAnalysisStatus, Is.Null, "LangProject AnalysisStatus Property should not exist any more");

            var langPossListGuid    = langProjStatus.Attribute("guid").Value;
            var langPossListDto     = dtoRepos.GetDTO(langPossListGuid);
            var langPossListElement = XElement.Parse(langPossListDto.Xml);

            Assert.That(langPossListElement.Attribute("ownerguid").Value.ToLowerInvariant(),
                        Is.EqualTo("b5a90c21-d8b2-4d4a-94f6-1b1fbeac3388"),
                        "Status element should be owned by LangProject");

            //There should be 1 possibility in the status list; 'Confirmed'.
            var possibilities    = langPossListElement.XPathSelectElement("Possibilities");
            var possibilitiesDto = possibilities.Descendants();

            Assert.That(possibilitiesDto.Count(), Is.EqualTo(1), "We should have exactly one status item in the PL");

            // Verify that the RnGenericRec Entries are copied over (they won't have statuses).
            var rnGenericRecDto = dtoRepos.GetDirectlyOwnedDTOs("4e3802af-98cd-48c4-b6ff-3cb0a5fd1310");

            Assert.That(rnGenericRecDto.Count(), Is.EqualTo(7), "There should be exactly seven RnGeneric records");
            foreach (var rnRec in rnGenericRecDto)
            {
                var rnGenericRecElement = XElement.Parse(rnRec.Xml);
                var rnStatusElem        = rnGenericRecElement.XPathSelectElement("Status/objsur");
                Assert.That(rnStatusElem, Is.Null, "None of the RnGeneric records should have statuses");
            }
            Assert.AreEqual(7000024, dtoRepos.CurrentModelVersion, "Wrong updated version.");
        }
Пример #55
0
        public void DataMigration7000024Test()
        {
            int count = 0;
            var dtos  = DataMigrationTestServices.ParseProjectFile("DataMigration7000024Tests.xml");

            // Set up mock MDC.
            var mockMDC = new MockMDCForDataMigration();

            mockMDC.AddClass(1, "CmObject", null, new List <string>
            {
                "CmProject",
                "CmMajorObject",
                "RnGenericRec",
                "LexEntry",
                "LexSense",
                "CmPossibility"
            });
            mockMDC.AddClass(2, "CmProject", "CmObject", new List <string> {
                "LangProject"
            });
            mockMDC.AddClass(3, "LangProject", "CmProject", new List <string>());
            mockMDC.AddClass(4, "CmMajorObject", "CmObject", new List <string> {
                "RnResearchNbk", "CmPossibilityList", "LexDb"
            });
            mockMDC.AddClass(5, "RnResearchNbk", "CmMajorObject", new List <string>());
            mockMDC.AddClass(6, "RnGenericRec", "CmObject", new List <string>());
            mockMDC.AddClass(7, "CmPossibilityList", "CmMajorObject", new List <string>());
            mockMDC.AddClass(8, "LexDb", "CmMajorObject", new List <string> {
            });
            mockMDC.AddClass(9, "LexEntry", "CmObject", new List <string>());
            mockMDC.AddClass(10, "LexSense", "CmObject", new List <string>());
            mockMDC.AddClass(11, "CmPossibility", "CmObject", new List <string>());
            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000023, dtos, mockMDC, null);

            m_dataMigrationManager.PerformMigration(dtoRepos, 7000024, new DummyProgressDlg());

            //This object should contain a 'Status' property
            var langProjDto     = dtoRepos.AllInstancesSansSubclasses("LangProject").First();
            var langProjElement = XElement.Parse(langProjDto.Xml);
            var langProjStatus  = langProjElement.XPathSelectElement("Status/objsur");

            Assert.That(langProjStatus, Is.Not.Null, "We should now have a 'Status' element on LangProj");
            //This object should not contain an 'AnalysysStatus' property
            var langProjAnalysisStatus = langProjElement.XPathSelectElement("AnalysisStatus");

            Assert.That(langProjAnalysisStatus, Is.Null, "LangProject AnalysisStatus Property should not exist any more");

            Assert.That(langProjStatus.Attribute("guid").Value.ToLowerInvariant(),
                        Is.EqualTo("0084b4d9-6c1e-4d63-9c66-ff22764ef171"),
                        "Status element should preserve objsur guid of old Analysis Status");
            //This LexDb element should not contain a 'Status' property
            var lexDbDto     = dtoRepos.AllInstancesSansSubclasses("LexDb").First();
            var lexDbElement = XElement.Parse(lexDbDto.Xml);
            var lexDbStatus  = lexDbElement.XPathSelectElement("Status");

            Assert.That(lexDbStatus, Is.Null, "LexDb Status Property exists but should have been deleted");

            //The 5 resulting possibilities should be 'Confirmed', 'Disproved', 'Pending', ''Tentative', and 'Ann'.
            var possListDto = dtoRepos.GetDirectlyOwnedDTOs("0084B4D9-6C1E-4D63-9C66-FF22764EF171");

            Assert.That(possListDto.Count(), Is.EqualTo(6), "We should have exactly six status items in the PL");
            var names = new HashSet <string>();

            foreach (var possibility in possListDto)
            {
                var possElement = XElement.Parse(possibility.Xml);
                var nameElt     = possElement.XPathSelectElement("Name/AUni[@ws='en']");
                if (nameElt == null)
                {
                    nameElt = possElement.XPathSelectElement("Name/AUni[@ws='id']");
                }
                var ttype = nameElt.Value;
                names.Add(ttype);
                switch (ttype)
                {
                case "Confirmed":
                case "Tentative":
                case "Disproved":
                case "Pending":
                case "Ann":
                case "Foreign":
                    break;

                default:
                    Assert.Fail(ttype + " is in the CmPossibility List");
                    break;
                }
            }
            Assert.That(names, Has.Count.EqualTo(6), "One of the expected possibilities is missing!");

            // Verify that the LexSense Entries point to the new status entries.
            var lexSenseDto = dtoRepos.GetDirectlyOwnedDTOs("fd6bb890-bb84-4920-954d-40d1e987b683");

            Assert.That(lexSenseDto.Count(), Is.EqualTo(5), "There should be exactly five senses");
            foreach (var lexSense in lexSenseDto)
            {
                var lexSenseElement = XElement.Parse(lexSense.Xml);
                var ttype           = lexSenseElement.XPathSelectElement("Gloss/AUni[@ws='en']").Value;
                switch (ttype)
                {
                case "Aardvark":
                    //Make sure the Status's Guid this LexSense status is the one owned by LangProject.
                    Assert.That(lexSenseElement.XPathSelectElement("Status/objsur").Attribute("guid").Value,
                                Is.EqualTo("8D87FC8A-593E-4C84-A9ED-193879D08585"),
                                ttype + " doesn''t point to the correct possibility.");
                    break;

                case "Aardvark2":
                    //Make sure the ownerguid of the Possibility for this LexSense status is the cmPossibilityList owned by langProject
                    var aardDto           = dtoRepos.GetDTO(lexSenseElement.XPathSelectElement("Status/objsur").Attribute("guid").Value);
                    var aardStatusElement = XElement.Parse(aardDto.Xml);
                    Assert.That(aardStatusElement.Attribute("ownerguid").Value.ToUpperInvariant(),
                                Is.EqualTo("0084B4D9-6C1E-4D63-9C66-FF22764EF171"),
                                ttype + " ownerguid isn't correct.");
                    Assert.AreEqual(aardStatusElement.XPathSelectElement("Name/AUni[@ws='en']").Value,
                                    "Ann",
                                    ttype + " Possibility pointed to has the wrong name.");
                    break;

                case "Aardvark3":
                    //Make sure the Status's Guid this LexSense status is the one owned by LangProject.
                    Assert.That(lexSenseElement.XPathSelectElement("Status/objsur").Attribute("guid").Value.ToUpperInvariant,
                                Is.EqualTo("8D87FC8A-593E-4C84-A9ED-193879D08585"),
                                ttype + " doesn''t point to the correct possibility.");
                    break;

                case "Aardvark4":
                    //Make sure the Status's Guid this LexSense status is the one owned by LangProject.
                    Assert.That(lexSenseElement.XPathSelectElement("Status"), Is.Null,
                                ttype + " does have a status.");
                    break;

                default:
                    Assert.Pass(ttype + " is in the LexSense List");
                    break;
                }
            }
            // Verify that the RnGenericRec Entries point to the new status entries.
            var rnGenericRecDto = dtoRepos.GetDirectlyOwnedDTOs("4e3802af-98cd-48c4-b6ff-3cb0a5fd1310");

            Assert.That(rnGenericRecDto.Count(), Is.EqualTo(7), "There should be exactly seven RnGeneric records");
            foreach (var rnRec in rnGenericRecDto)
            {
                var rnGenericRecElement = XElement.Parse(rnRec.Xml);
                var rnStatusElem        = rnGenericRecElement.XPathSelectElement("Status/objsur");
                if (rnStatusElem == null)
                {
                    continue;
                }
                var rnStatusGuid = rnStatusElem.Attribute("guid").Value;

                var rnPossibilityDto       = dtoRepos.GetDTO(rnStatusGuid);
                var rnPossibilityElement   = XElement.Parse(rnPossibilityDto.Xml);
                var rnNameElem             = rnPossibilityElement.XPathSelectElement("Name/AUni[@ws='en']").Value;
                var rnPossibilityOwnerGuid = rnPossibilityElement.Attribute("ownerguid").Value;

                switch (rnGenericRecElement.Attribute("guid").Value.ToLowerInvariant())
                {
                case "611739fe-8fe2-4d16-8570-b9d46c339e6e":
                    VerifyOwnerguidAndStatus(rnPossibilityOwnerGuid, "RnGenericRec record 1 status record isn't owned by LangProj.",
                                             rnNameElem, "Pending", "RnGenericRec record 1 doesn''t point to a status of ''Pending''.");
                    break;

                case "612739fe-8fe2-4d16-8570-b9d46c339e6e":
                    VerifyOwnerguidAndStatus(rnPossibilityOwnerGuid, "RnGenericRec record 2 status record isn't owned by LangProj.",
                                             rnNameElem, "Confirmed",
                                             "RnGenericRec record 2 doesn''t point to a status of ''Confirmed''.");
                    break;

                case "613739fe-8fe2-4d16-8570-b9d46c339e6e":
                    VerifyOwnerguidAndStatus(rnPossibilityOwnerGuid, "RnGenericRec record 3 status record isn't owned by LangProj.",
                                             rnNameElem, "Tentative",
                                             "RnGenericRec record 3 doesn''t point to a status of ''Tentative''.");
                    break;

                case "614739fe-8fe2-4d16-8570-b9d46c339e6e":
                    VerifyOwnerguidAndStatus(rnPossibilityOwnerGuid, "RnGenericRec record 4 status record isn't owned by LangProj.",
                                             rnNameElem, "Confirmed",
                                             "RnGenericRec record 4 doesn''t point to a status of ''Approved''.");
                    break;

                case "615739fe-8fe2-4d16-8570-b9d46c339e6e":
                    VerifyOwnerguidAndStatus(rnPossibilityOwnerGuid, "RnGenericRec record 5 status record isn't owned by LangProj.",
                                             rnNameElem, "Disproved",
                                             "RnGenericRec record 5 doesn''t point to a status of ''Disproved''.");
                    break;

                case "616739fe-8fe2-4d16-8570-b9d46c339e6e":
                    VerifyOwnerguidAndStatus(rnPossibilityOwnerGuid, "RnGenericRec record 6 status record isn't owned by LangProj.",
                                             rnNameElem, "Disproved", "RnGenericRec record 6 doesn''t point to a status of ''Ann''.");
                    break;

                default:
                    Assert.Fail("There is no RnGenericRec with a guid of: " +
                                rnGenericRecElement.Attribute("guid").Value.ToLowerInvariant());
                    break;
                }
            }
            Assert.AreEqual(7000024, dtoRepos.CurrentModelVersion, "Wrong updated version.");
        }
Пример #56
0
        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);

            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 DataMigration7000044Test()
		{
			var projectFolder = Path.GetTempPath();
			var storePath = Path.Combine(projectFolder, FdoFileHelper.ksWritingSystemsDir);
			PrepareStore(storePath);
			var testDataPath = Path.Combine(FwDirectoryFinder.SourceDirectory, "FDO/FDOTests/TestData");
			var testEnglishPath = Path.Combine(storePath, "en.ldml");
			File.Copy(Path.Combine(testDataPath, "en_7000043.ldml"), testEnglishPath);
			File.SetAttributes(testEnglishPath, FileAttributes.Normal); // don't want to copy readonly property.
			var xkalPath = Path.Combine(storePath, "x-kal.ldml");
			File.Copy(Path.Combine(testDataPath, "x-kal_7000043.ldml"), xkalPath);
			File.SetAttributes(xkalPath, FileAttributes.Normal); // don't want to copy readonly property.
			var xkalFonipaPath = Path.Combine(storePath, "x-kal-fonipa.ldml");
			File.Copy(Path.Combine(testDataPath, "x-kal-fonipa_7000043.ldml"), xkalFonipaPath);
			File.SetAttributes(xkalFonipaPath, FileAttributes.Normal); // don't want to copy readonly property.

			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000044.xml");
			// Create all the Mock classes for the classes in my test data.
			var mockMDC = new MockMDCForDataMigration();
			mockMDC.AddClass(1, "CmObject", null, new List<string> { "LexEntry", "LangProject", "LexSense", "LexDb",
				"ReversalEntry", "StStyle", "CmPossibilityList", "CmBaseAnnotation" });
			mockMDC.AddClass(2, "LangProject", "CmObject", new List<string>());
			mockMDC.AddClass(3, "LexEntry", "CmObject", new List<string>());
			mockMDC.AddClass(4, "LexSense", "CmObject", new List<string>());
			mockMDC.AddClass(5, "LexDb", "CmObject", new List<string>());
			mockMDC.AddClass(6, "ReversalEntry", "CmObject", new List<string>());
			mockMDC.AddClass(7, "StStyle", "CmObject", new List<string>());
			mockMDC.AddClass(8, "CmPossibilityList", "CmObject", new List<string>());
			mockMDC.AddClass(9, "CmBaseAnnotation", "CmObject", new List<string>());

			var settingsFolder = Path.Combine(projectFolder, FdoFileHelper.ksConfigurationSettingsDir);
			Directory.CreateDirectory(settingsFolder);
			var sampleLayout = Path.Combine(settingsFolder, "Test_Layouts.xml");
			File.WriteAllText(sampleLayout, sampleLayoutData, Encoding.UTF8);
			var sampleSettings = Path.Combine(settingsFolder, "db$local$Settings.xml");
			File.WriteAllText(sampleSettings, sampleLocalSettingsData, Encoding.UTF8);

			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000043, dtos, mockMDC, projectFolder, FwDirectoryFinder.FdoDirectories);
			// Do the migration.
			m_dataMigrationManager.PerformMigration(dtoRepos, 7000044, new DummyProgressDlg());

			// Verification Phase
			Assert.AreEqual(7000044, dtoRepos.CurrentModelVersion, "Wrong updated version.");

			// Todo:
			// Verify that en.ldml is unchanged.
			Assert.That(File.Exists(testEnglishPath));
			// Verify that x-kal.ldml is renamed to qaa-x-kal and content changed
			Assert.That(File.Exists(Path.Combine(storePath, "qaa-x-kal.ldml")));
			// Verify that x-kal-fonipa.ldml is renamed to qaa-fonipa-x-kal and content changed
			Assert.That(File.Exists(Path.Combine(storePath, "qaa-x-kal-fonipa.ldml")));
			// Verify that AUni data in LexEntry" guid="7ecbb299-bf35-4795-a5cc-8d38ce8b891c tag is changed to qaa-x-kal
			var entry = XElement.Parse(dtoRepos.GetDTO("7ecbb299-bf35-4795-a5cc-8d38ce8b891c").Xml);
			Assert.That(entry.Element("CitationForm").Element("AUni").Attribute("ws").Value, Is.EqualTo("qaa-x-kal"));
			// Verify that AStr data in LexSense" guid="e3c2d179-3ccd-431e-ac2e-100bdb883680" tag is changed to qaa-x-kal
			var sense = XElement.Parse(dtoRepos.GetDTO("e3c2d179-3ccd-431e-ac2e-100bdb883680").Xml);
			Assert.That(sense.Element("Definition").Elements("AStr").Skip(1).First().Attribute("ws").Value, Is.EqualTo("qaa-x-kal"));
			Assert.That(sense.Element("Definition").Elements("AStr").Count(), Is.EqualTo(2), "french should be deleted because empty");
			// Verify that the empty alternatives get removed.
			Assert.That(sense.Element("Bibliography").Elements("AUni").First().Attribute("ws").Value, Is.EqualTo("en"));
			Assert.That(sense.Element("Bibliography").Elements("AUni").Count(), Is.EqualTo(1));
			// Verify that Run data in LexSense" guid="e3c2d179-3ccd-431e-ac2e-100bdb883680" tag is changed to qaa-x-kal
			Assert.That(sense.Element("Definition").Element("AStr").Elements("Run").Skip(1).First().Attribute("ws").Value, Is.EqualTo("qaa-x-kal"));
			// Check LiftResidue lang attributes are fixed; note that a result containing lang=&quot;qaa-x-kal&quot
			// would also be acceptable, perhaps even more to be expected, but converting the &quot; s here to " is acceptable.
			Assert.That(sense.Element("LiftResidue").Element("Uni").Value.Contains("lang=\"qaa-x-kal\""));
			// Verify that WsProp data in StStyle guid="4d312f11-439e-11d4-b5e7-00400543a266" is changed to qaa-x-kal
			var style = XElement.Parse(dtoRepos.GetDTO("4d312f11-439e-11d4-b5e7-00400543a266").Xml);
			Assert.That(style.Element("Rules").Element("Prop").Element("WsStyles9999").Elements("WsProp").Skip(1).First().Attribute("ws").Value, Is.EqualTo("qaa-x-kal"));
			// Verify that x-kal is changed to qaa-x-kal in xWss properties of LangProject b8bdad3d-9006-46f0-83e8-ae1d1726f2ad.
			var langProj = XElement.Parse(dtoRepos.GetDTO("b8bdad3d-9006-46f0-83e8-ae1d1726f2ad").Xml);
			Assert.That(langProj.Element("AnalysisWss").Element("Uni").Value, Is.EqualTo("en qaa-x-kal"));
			Assert.That(langProj.Element("CurVernWss").Element("Uni").Value, Is.EqualTo("seh qaa-x-kal fr"));
			Assert.That(langProj.Element("CurAnalysisWss").Element("Uni").Value, Is.EqualTo("en qaa-x-kal"));
			Assert.That(langProj.Element("CurPronunWss").Element("Uni").Value, Is.EqualTo("qaa-x-kal"));
			Assert.That(langProj.Element("VernWss").Element("Uni").Value, Is.EqualTo("qaa-x-kal"));
			// Verify that WritingSystem/Uni is changed to qaa-x-kal in ReversalIndex" guid="62105696-da6c-405e-b87f-a2a0294bb179
			var ri = XElement.Parse(dtoRepos.GetDTO("62105696-da6c-405e-b87f-a2a0294bb179").Xml);
			Assert.That(ri.Element("WritingSystem").Element("Uni").Value, Is.EqualTo("qaa-x-kal"));
			//	and CmPossibilityList" guid="b30aa28d-7510-49e6-b9ac-bc1902398ce6"
			var pl = XElement.Parse(dtoRepos.GetDTO("b30aa28d-7510-49e6-b9ac-bc1902398ce6").Xml);
			Assert.That(pl.Element("WritingSystem").Element("Uni").Value, Is.EqualTo("qaa-x-kal"));
			//  and CmBaseAnnotation" guid="dc747a85-ceb6-491e-8b54-7fc37d7b2f80"
			var cba = XElement.Parse(dtoRepos.GetDTO("dc747a85-ceb6-491e-8b54-7fc37d7b2f80").Xml);
			Assert.That(cba.Element("WritingSystem").Element("Uni").Value, Is.EqualTo("qaa-x-kal"));
			// Several other classes have WritingSystem, but we're checking ALL objects, so I think three test cases is plenty.

			// Check the layout
			var layoutElt = XElement.Parse(File.ReadAllText(sampleLayout, Encoding.UTF8));
			Assert.That(layoutElt.Element("layout").Element("part").Attribute("ws").Value, Is.EqualTo("qaa-x-kal"));
			Assert.That(layoutElt.Element("layout").Elements("part").Skip(1).First().Attribute("ws").Value, Is.EqualTo("vernacular"));
			Assert.That(layoutElt.Element("layout").Elements("part").Skip(2).First().Attribute("ws").Value, Is.EqualTo("$ws=all analysis"));
			Assert.That(layoutElt.Element("layout").Elements("part").Skip(3).First().Attribute("ws").Value, Is.EqualTo("$ws=qaa-x-kal"));
			Assert.That(layoutElt.Element("layout").Elements("part").Skip(4).First().Attribute("ws").Value, Is.EqualTo("qaa-x-kal-fonipa,qaa-x-kal"));
			Assert.That(layoutElt.Element("layout").Elements("part").Skip(4).First().Attribute("visibleWritingSystems").Value, Is.EqualTo("qaa-x-kal-fonipa,qaa-x-kal"));

			// Check the local settings.
			var propTable = XElement.Parse(File.ReadAllText(sampleSettings, Encoding.UTF8));
			Assert.That(propTable.Element("Property").Element("value").Value.Contains("5062001%qaa-x-kal"));
			Assert.That(propTable.Element("Property").Element("value").Value.Contains("5112002%qaa-x-kal"));
			Assert.That(propTable.Element("Property").Element("value").Value.Contains("103%qaa-x-kal"));
			Assert.That(propTable.Elements("Property").Skip(1).First().Element("value").Value.Contains("ws=\"qaa-x-kal\""));
			Assert.That(propTable.Elements("Property").Skip(2).First().Element("value").Value.Contains("ws=\"$ws=qaa-x-kal\""));
			Assert.That(propTable.Elements("Property").Skip(3).First().Element("value").Value.Contains("ws=\"$wsName\""));
			Assert.That(propTable.Elements("Property").Skip(4).First().Element("value").Value.Contains("ws=\"$ws=reversal\""));
			Assert.That(propTable.Elements("Property").Skip(5).First().Element("value").Value, Is.EqualTo("qaa-x-kal"));
			Assert.That(propTable.Elements("Property").Skip(6).First().Element("value").Value.Contains("ws=\"qaa-x-kal\""));
			Assert.That(propTable.Elements("Property").Skip(7).First().Element("value").Value.Contains("ws=\"$ws=qaa-x-kal\""));
		}
        public void DataMigration7000030Test()
        {
            //Bring in data from xml file.
            var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000030.xml");

            //Now create all the Mock classes for the classes in my test data.
            //eg LangProject base class is CmProject which has a base class of CmObject
            //eg LexEntry base class is CmObject
            var mockMDC = new MockMDCForDataMigration();

            mockMDC.AddClass(1, "CmObject", null, new List <string>
            {
                "CmProject",
                "CmMajorObject",
                "LexEntry",
                "LexSense",
                "CmPicture",
                "CmFolder",
                "CmFile",
                "CmPossibility",
                "StText",
                "StPara"
            });
            mockMDC.AddClass(2, "CmProject", "CmObject", new List <string> {
                "LangProject"
            });
            mockMDC.AddClass(3, "LangProject", "CmProject", new List <string>());

            //In the List, put each class in this test which derives from this class.
            mockMDC.AddClass(4, "CmMajorObject", "CmObject", new List <string> {
                "LexDb", "CmPossibilityList"
            });
            mockMDC.AddClass(5, "LexDb", "CmMajorObject", new List <string>());

            mockMDC.AddClass(6, "LexEntry", "CmObject", new List <string>());
            mockMDC.AddClass(7, "LexSense", "CmObject", new List <string>());
            mockMDC.AddClass(8, "CmPicture", "CmObject", new List <string>());
            mockMDC.AddClass(9, "CmFolder", "CmObject", new List <string>());
            mockMDC.AddClass(10, "CmFile", "CmObject", new List <string>());

            //This class CmPossibilityList needs to be in the List of the CmMajorObject class
            mockMDC.AddClass(11, "CmPossibilityList", "CmMajorObject", new List <string>());

            mockMDC.AddClass(12, "CmPossibility", "CmObject", new List <string> {
                "MoMorphType"
            });
            mockMDC.AddClass(13, "MoMorphType", "CmPossibility", new List <string>());

            mockMDC.AddClass(14, "StText", "CmObject", new List <string>());
            mockMDC.AddClass(15, "StPara", "CmObject", new List <string> {
                "StTxtPara"
            });
            mockMDC.AddClass(16, "StTxtPara", "StPara", new List <string>());

            //-------------------+++++++++++++++++++++++++=

            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000029, dtos, mockMDC, @"C:\FwWW\DistFiles\Projects\Sena 3", FwDirectoryFinder.FdoDirectories);


            //Get the Element <rt guid="b8bdad3d-9006-46f0-83e8-ae1d1726f2ad" class="LangProject">
            var langProjDto     = dtoRepos.AllInstancesSansSubclasses("LangProject").First();
            var langProjElement = XElement.Parse(langProjDto.Xml);

            var langProjLinkedFilesRootDir = langProjElement.XPathSelectElement("LinkedFilesRootDir");

            Assert.That(langProjLinkedFilesRootDir, Is.Not.Null, "Before the migration we should have a 'ExtLinkRootDir' element on LangProj");

            var langProjPictures = langProjElement.XPathSelectElement("Pictures");

            Assert.That(langProjPictures, Is.Not.Null, "Before the migration we should have a 'Pictures' element on LangProj");
            var langProjMedia = langProjElement.XPathSelectElement("Media");

            Assert.That(langProjMedia, Is.Not.Null, "Before the migration we should have a 'Media' element on LangProj");
            var langProjFilePathsInTsStrings = langProjElement.XPathSelectElement("FilePathsInTsStrings");

            Assert.That(langProjFilePathsInTsStrings, Is.Null, "Before the migration we should NOT have a 'FilePathsInTsStrings' element on LangProj");

            //Get the Elements  for class="CmFolder"
            var CmFolderDtos = dtoRepos.AllInstancesSansSubclasses("CmFolder");              //should we check for FilePathsInTsStrings CmFolder???

            Assert.True(CmFolderDtos.Count() == 2, "The number of CmFolders should be 2.");
            var CmFolders = new Dictionary <string, HashSet <String> >();

            GetCmFolderNamesAndObjsurs(CmFolderDtos, CmFolders);
            CheckCmFoldersAndCountsBeforeMigration(CmFolders);

            //Get the Elements  for class="CmFile"
            var CmFileDtosBeforeMigration = dtoRepos.AllInstancesSansSubclasses("CmFile");
            //Get all the file paths (as strings) for the CmFile's in the project
            var filesPathsBeforeMigration = new List <String>();

            foreach (var fileDto in CmFileDtosBeforeMigration)
            {
                filesPathsBeforeMigration.Add(GetCmFilePath(fileDto));
            }
            CheckCmFilePathsBeforeMigration(filesPathsBeforeMigration);


            var filesPathsInTsStringsBeforeMigration = GetAllExternalLinksInTsStrings(dtoRepos);

            CheckExternalLinksInTsStringsBeforeMigration(filesPathsInTsStringsBeforeMigration);

            //=====================================================================================================
            //Do Migration
            m_dataMigrationManager.PerformMigration(dtoRepos, 7000030, new DummyProgressDlg());
            //=====================================================================================================

            //make sure the version was updated.
            Assert.AreEqual(7000030, dtoRepos.CurrentModelVersion, "Wrong updated version.");


            //Make sure all file paths in TsStrings are now corrected if they are relative to LinkedFilesRootDir
            var filesPathsInTsStringsAfterMigration = GetAllExternalLinksInTsStrings(dtoRepos);

            CheckExternalLinksInTsStringsAfterMigration(filesPathsInTsStringsAfterMigration);

            //Now make sure we have a CmFolder called FilePathsInTsStrings as part of LangProject
            langProjDto     = dtoRepos.AllInstancesSansSubclasses("LangProject").First();
            langProjElement = XElement.Parse(langProjDto.Xml);

            langProjPictures = langProjElement.XPathSelectElement("Pictures");
            Assert.That(langProjPictures, Is.Not.Null, "After the migration we should have a 'Pictures' element on LangProj");
            langProjMedia = langProjElement.XPathSelectElement("Media");
            Assert.That(langProjMedia, Is.Not.Null, "After the migration we should have a 'Media' element on LangProj");
            langProjFilePathsInTsStrings = langProjElement.XPathSelectElement("FilePathsInTsStrings");
            Assert.That(langProjFilePathsInTsStrings, Is.Not.Null, "After the migration we should  have a 'FilePathsInTsStrings' element on LangProj");

            //Get the Elements  for class="CmFolder"
            CmFolderDtos = dtoRepos.AllInstancesSansSubclasses("CmFolder");              //should we check for FilePathsInTsStrings CmFolder???
            Assert.True(CmFolderDtos.Count() == 3, "The number of CmFolders should be 3.");


            CmFolders.Clear();
            GetCmFolderNamesAndObjsurs(CmFolderDtos, CmFolders);
            CheckCmFoldersAndCountsAfterMigration(CmFolders);

            //Now check that all the CmFile's have paths which are correct.
            //Get the Elements  for class="CmFile"
            var CmFileDtosAfterMigration = dtoRepos.AllInstancesSansSubclasses("CmFile");

            //Get all the file paths (as strings) for the CmFile's in the project
            var filesPathsAfterMigration  = new List <String>();
            var CmFileGuidsAfterMigration = new List <String>();

            foreach (var fileDto in CmFileDtosAfterMigration)
            {
                filesPathsAfterMigration.Add(GetCmFilePath(fileDto));
                CmFileGuidsAfterMigration.Add(GetCmFileGuid(fileDto));
            }
            CheckCmFilePathsAfterMigration(filesPathsAfterMigration);
            CheckThereIsACmFileForEachGuidInNewCmFolder(CmFolders, CmFileGuidsAfterMigration);
        }
Пример #59
0
        public void DataMigration7000023Test()
        {
            var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000023.xml");

            // Set up mock MDC.
            var mockMDC = new MockMDCForDataMigration();

            mockMDC.AddClass(1, "CmObject", null, new List <string> {
                "LangProject", "DsDiscourseData", "LexDb", "RnResearchNbk",
                "CmPossibilityList", "CmFilter", "UserView", "UserAppFeatAct", "CmResource", "ScrCheckRun"
            });
            mockMDC.AddClass(2, "LangProject", "CmObject", new List <string>());
            mockMDC.AddClass(3, "DsDiscourseData", "CmObject", new List <string>());
            mockMDC.AddClass(4, "LexDb", "CmObject", new List <string>());
            mockMDC.AddClass(5, "CmPossibilityList", "CmObject", new List <string>());
            mockMDC.AddClass(6, "CmFilter", "CmObject", new List <string>());
            mockMDC.AddClass(7, "UserView", "CmObject", new List <string>());
            mockMDC.AddClass(8, "UserAppFeatAct", "CmObject", new List <string>());
            mockMDC.AddClass(9, "CmResource", "CmObject", new List <string>());
            mockMDC.AddClass(10, "ScrCheckRun", "CmObject", new List <string>());
            mockMDC.AddClass(11, "RnResearchNbk", "CmObject", new List <string>());
            IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000022, dtos, mockMDC, null, FwDirectoryFinder.FdoDirectories);

            //SUT
            m_dataMigrationManager.PerformMigration(dtoRepos, 7000023, new DummyProgressDlg());

            // Verification section
            var dto       = dtoRepos.GetDTO("c1ecaa73-e382-11de-8a39-0800200c9a66");
            var rtElement = XElement.Parse(dto.Xml);

            CheckGuid(rtElement.Element("LexDb").Element("objsur").Attribute("guid").Value);
            dto       = dtoRepos.GetDTO("c1ec5c4c-e382-11de-8a39-0800200c9a66");
            rtElement = XElement.Parse(dto.Xml);
            CheckGuid(rtElement.Attribute("ownerguid").Value);
            dto       = dtoRepos.GetDTO("c1Ecaa74-e382-11de-8a39-0800200c9a66");
            rtElement = XElement.Parse(dto.Xml);
            CheckGuid(rtElement.Attribute("guid").Value);
            dto       = dtoRepos.GetDTO("AF26D792-EA5E-11DE-8F7E-0013722F8DEC");
            rtElement = XElement.Parse(dto.Xml);
            CheckGuid(rtElement.Attribute("guid").Value);
            dto       = dtoRepos.GetDTO("1FBDC211-32E4-4203-9B7F-9CAACBF31DBD");
            rtElement = XElement.Parse(dto.Xml);
            CheckGuid(rtElement.Attribute("guid").Value);
            CheckGuid(rtElement.Element("ListVersion").Attribute("val").Value);
            dto       = dtoRepos.GetDTO("c1ecaa77-e382-11de-8a39-0800200c9a66");
            rtElement = XElement.Parse(dto.Xml);
            CheckGuid(rtElement.Element("App").Attribute("val").Value);
            dto       = dtoRepos.GetDTO("c1ecaa78-e382-11de-8a39-0800200c9a66");
            rtElement = XElement.Parse(dto.Xml);
            CheckGuid(rtElement.Element("App").Attribute("val").Value);
            dto       = dtoRepos.GetDTO("c1ecaa79-e382-11de-8a39-0800200c9a66");
            rtElement = XElement.Parse(dto.Xml);
            CheckGuid(rtElement.Element("ApplicationId").Attribute("val").Value);
            dto       = dtoRepos.GetDTO("c1ecaa7a-e382-11de-8a39-0800200c9a66");
            rtElement = XElement.Parse(dto.Xml);
            CheckGuid(rtElement.Element("Version").Attribute("val").Value);
            dto       = dtoRepos.GetDTO("c1ecd170-e382-11de-8a39-0800200c9a66");
            rtElement = XElement.Parse(dto.Xml);
            CheckGuid(rtElement.Element("CheckId").Attribute("val").Value);

            Assert.AreEqual(7000023, dtoRepos.CurrentModelVersion, "Wrong updated version.");
        }
		public void DataMigration7000024Test()
		{
			int count = 0;
			var dtos = DataMigrationTestServices.ParseProjectFile("DataMigration7000024Tests.xml");

			// Set up mock MDC.
			var mockMDC = new MockMDCForDataMigration();

			mockMDC.AddClass(1, "CmObject", null, new List<string>
													{
														"CmProject",
														"CmMajorObject",
														"RnGenericRec",
														"LexEntry",
														"LexSense",
														"CmPossibility"
													});
			mockMDC.AddClass(2, "CmProject", "CmObject", new List<string> {"LangProject"});
			mockMDC.AddClass(3, "LangProject", "CmProject", new List<string>());
			mockMDC.AddClass(4, "CmMajorObject", "CmObject", new List<string> {"RnResearchNbk", "CmPossibilityList", "LexDb"});
			mockMDC.AddClass(5, "RnResearchNbk", "CmMajorObject", new List<string>());
			mockMDC.AddClass(6, "RnGenericRec", "CmObject", new List<string>());
			mockMDC.AddClass(7, "CmPossibilityList", "CmMajorObject", new List<string>());
			mockMDC.AddClass(8, "LexDb", "CmMajorObject", new List<string> {});
			mockMDC.AddClass(9, "LexEntry", "CmObject", new List<string>());
			mockMDC.AddClass(10, "LexSense", "CmObject", new List<string>());
			mockMDC.AddClass(11, "CmPossibility", "CmObject", new List<string>());
			IDomainObjectDTORepository dtoRepos = new DomainObjectDtoRepository(7000023, dtos, mockMDC, null, FwDirectoryFinder.FdoDirectories);
			m_dataMigrationManager.PerformMigration(dtoRepos, 7000024, new DummyProgressDlg());

			//This object should contain a 'Status' property
			var langProjDto = dtoRepos.AllInstancesSansSubclasses("LangProject").First();
			var langProjElement = XElement.Parse(langProjDto.Xml);
			var langProjStatus = langProjElement.XPathSelectElement("Status/objsur");
			Assert.That(langProjStatus, Is.Not.Null, "We should now have a 'Status' element on LangProj");
			//This object should not contain an 'AnalysysStatus' property
			var langProjAnalysisStatus = langProjElement.XPathSelectElement("AnalysisStatus");
			Assert.That(langProjAnalysisStatus, Is.Null, "LangProject AnalysisStatus Property should not exist any more");

			Assert.That(langProjStatus.Attribute("guid").Value.ToLowerInvariant(),
						Is.EqualTo("0084b4d9-6c1e-4d63-9c66-ff22764ef171"),
						"Status element should preserve objsur guid of old Analysis Status");
			//This LexDb element should not contain a 'Status' property
			var lexDbDto = dtoRepos.AllInstancesSansSubclasses("LexDb").First();
			var lexDbElement = XElement.Parse(lexDbDto.Xml);
			var lexDbStatus = lexDbElement.XPathSelectElement("Status");
			Assert.That(lexDbStatus, Is.Null, "LexDb Status Property exists but should have been deleted");

			//The 5 resulting possibilities should be 'Confirmed', 'Disproved', 'Pending', ''Tentative', and 'Ann'.
			var possListDto = dtoRepos.GetDirectlyOwnedDTOs("0084B4D9-6C1E-4D63-9C66-FF22764EF171");

			Assert.That(possListDto.Count(), Is.EqualTo(6), "We should have exactly six status items in the PL");
			var names = new HashSet<string>();
			foreach (var possibility in possListDto)
			{
				var possElement = XElement.Parse(possibility.Xml);
				var nameElt = possElement.XPathSelectElement("Name/AUni[@ws='en']");
				if (nameElt == null)
				{
					nameElt = possElement.XPathSelectElement("Name/AUni[@ws='id']");
				}
				var ttype = nameElt.Value;
				names.Add(ttype);
				switch (ttype)
				{
					case "Confirmed":
					case "Tentative":
					case "Disproved":
					case "Pending":
					case "Ann":
					case "Foreign":
						break;
					default:
						Assert.Fail(ttype + " is in the CmPossibility List");
						break;
				}
			}
			Assert.That(names, Has.Count.EqualTo(6), "One of the expected possibilities is missing!");

			// Verify that the LexSense Entries point to the new status entries.
			var lexSenseDto = dtoRepos.GetDirectlyOwnedDTOs("fd6bb890-bb84-4920-954d-40d1e987b683");

			Assert.That(lexSenseDto.Count(), Is.EqualTo(5), "There should be exactly five senses");
			foreach (var lexSense in lexSenseDto)
			{
				var lexSenseElement = XElement.Parse(lexSense.Xml);
				var ttype = lexSenseElement.XPathSelectElement("Gloss/AUni[@ws='en']").Value;
				switch (ttype)
				{
					case "Aardvark":
						//Make sure the Status's Guid this LexSense status is the one owned by LangProject.
						Assert.That(lexSenseElement.XPathSelectElement("Status/objsur").Attribute("guid").Value,
									Is.EqualTo("8D87FC8A-593E-4C84-A9ED-193879D08585"),
									ttype + " doesn''t point to the correct possibility.");
						break;
					case "Aardvark2":
						//Make sure the ownerguid of the Possibility for this LexSense status is the cmPossibilityList owned by langProject
						var aardDto = dtoRepos.GetDTO(lexSenseElement.XPathSelectElement("Status/objsur").Attribute("guid").Value);
						var aardStatusElement = XElement.Parse(aardDto.Xml);
						Assert.That(aardStatusElement.Attribute("ownerguid").Value.ToUpperInvariant(),
									Is.EqualTo("0084B4D9-6C1E-4D63-9C66-FF22764EF171"),
									ttype + " ownerguid isn't correct.");
						Assert.AreEqual(aardStatusElement.XPathSelectElement("Name/AUni[@ws='en']").Value,
										"Ann",
										ttype + " Possibility pointed to has the wrong name.");
						break;
					case "Aardvark3":
						//Make sure the Status's Guid this LexSense status is the one owned by LangProject.
						Assert.That(lexSenseElement.XPathSelectElement("Status/objsur").Attribute("guid").Value.ToUpperInvariant,
									Is.EqualTo("8D87FC8A-593E-4C84-A9ED-193879D08585"),
									ttype + " doesn''t point to the correct possibility.");
						break;
					case "Aardvark4":
						//Make sure the Status's Guid this LexSense status is the one owned by LangProject.
						Assert.That(lexSenseElement.XPathSelectElement("Status"), Is.Null,
									ttype + " does have a status.");
						break;
					default:
						Assert.Pass(ttype + " is in the LexSense List");
						break;
				}
			}
			// Verify that the RnGenericRec Entries point to the new status entries.
			var rnGenericRecDto = dtoRepos.GetDirectlyOwnedDTOs("4e3802af-98cd-48c4-b6ff-3cb0a5fd1310");

			Assert.That(rnGenericRecDto.Count(), Is.EqualTo(7), "There should be exactly seven RnGeneric records");
			foreach (var rnRec in rnGenericRecDto)
			{
				var rnGenericRecElement = XElement.Parse(rnRec.Xml);
				var rnStatusElem = rnGenericRecElement.XPathSelectElement("Status/objsur");
				if (rnStatusElem == null)
					continue;
				var rnStatusGuid = rnStatusElem.Attribute("guid").Value;

				var rnPossibilityDto = dtoRepos.GetDTO(rnStatusGuid);
				var rnPossibilityElement = XElement.Parse(rnPossibilityDto.Xml);
				var rnNameElem = rnPossibilityElement.XPathSelectElement("Name/AUni[@ws='en']").Value;
				var rnPossibilityOwnerGuid = rnPossibilityElement.Attribute("ownerguid").Value;

				switch (rnGenericRecElement.Attribute("guid").Value.ToLowerInvariant())
				{
					case "611739fe-8fe2-4d16-8570-b9d46c339e6e":
						VerifyOwnerguidAndStatus(rnPossibilityOwnerGuid, "RnGenericRec record 1 status record isn't owned by LangProj.",
												 rnNameElem, "Pending", "RnGenericRec record 1 doesn''t point to a status of ''Pending''.");
						break;
					case "612739fe-8fe2-4d16-8570-b9d46c339e6e":
						VerifyOwnerguidAndStatus(rnPossibilityOwnerGuid, "RnGenericRec record 2 status record isn't owned by LangProj.",
												 rnNameElem, "Confirmed",
												 "RnGenericRec record 2 doesn''t point to a status of ''Confirmed''.");
						break;
					case "613739fe-8fe2-4d16-8570-b9d46c339e6e":
						VerifyOwnerguidAndStatus(rnPossibilityOwnerGuid, "RnGenericRec record 3 status record isn't owned by LangProj.",
												 rnNameElem, "Tentative",
												 "RnGenericRec record 3 doesn''t point to a status of ''Tentative''.");
						break;
					case "614739fe-8fe2-4d16-8570-b9d46c339e6e":
						VerifyOwnerguidAndStatus(rnPossibilityOwnerGuid, "RnGenericRec record 4 status record isn't owned by LangProj.",
												 rnNameElem, "Confirmed",
												 "RnGenericRec record 4 doesn''t point to a status of ''Approved''.");
						break;
					case "615739fe-8fe2-4d16-8570-b9d46c339e6e":
						VerifyOwnerguidAndStatus(rnPossibilityOwnerGuid, "RnGenericRec record 5 status record isn't owned by LangProj.",
												 rnNameElem, "Disproved",
												 "RnGenericRec record 5 doesn''t point to a status of ''Disproved''.");
						break;
					case "616739fe-8fe2-4d16-8570-b9d46c339e6e":
						VerifyOwnerguidAndStatus(rnPossibilityOwnerGuid, "RnGenericRec record 6 status record isn't owned by LangProj.",
												 rnNameElem, "Disproved", "RnGenericRec record 6 doesn''t point to a status of ''Ann''.");
						break;
					default:
						Assert.Fail("There is no RnGenericRec with a guid of: " +
									rnGenericRecElement.Attribute("guid").Value.ToLowerInvariant());
						break;
				}
			}
			Assert.AreEqual(7000024, dtoRepos.CurrentModelVersion, "Wrong updated version.");
		}