public EvoX.Model.Project ConvertToEvoXProject(string fileName) { XmlDeserializatorBase deserializator; if (XmlDeserializatorVersions.UsesVersions(fileName)) { deserializator = new XmlDeserializatorVersions(); } else { deserializator = new XmlDeserializator(); } // First, validates if the file is a valid XCase XML file // TODO: it would be better to have two separate schemas rather than one choice schema string msg = null; if (!deserializator.ValidateXML(fileName, ref msg)) { throw new XCaseException("File cannot be opened. Not a valid XCase XML file"); } // version check string v1; string v2; if (!XmlDeserializatorBase.VersionsEqual(fileName, out v1, out v2)) { throw new XCaseException("Project is obsolete. Project is obsolete and must be converted to a new version before opening. \r\nDo you want to convert it now? "); } Project deserializedProject = deserializator.RestoreProject(fileName); EvoX.Model.Project convertedProject = ConvertToEvoXProject(deserializedProject); return(convertedProject); }
public void Test(string filename) { XmlDeserializatorBase deserializator; if (XmlDeserializatorVersions.UsesVersions(filename)) { deserializator = new XmlDeserializatorVersions(); } else { deserializator = new XmlDeserializator(); } Project xcaseProject = deserializator.RestoreProject(filename); EvoXExport evoXExport = new EvoXExport(); EvoX.Model.Project evoxProject = evoXExport.ConvertToEvoXProject(xcaseProject); string resultPath = TEST_BASE_DIR + Path.GetFileNameWithoutExtension(filename) + ".EvoX"; projectSerializationManager.SaveProject(evoxProject, resultPath); }
/// <summary> /// Opens a project from a <see cref="Filename">file</see>. /// </summary> /// <param name="parameter">ignored</param> /// <exception cref="Exception">When exception occurs, new project is created and exception is rethrown.</exception> public override void Execute(object parameter) { OpenFileDialog dlg = new OpenFileDialog { DefaultExt = ".XCase", Filter = "XCase files (*.XCase)|*.XCase|XML files (*.xml)|*.xml|All files (*.*)|*.*||" }; bool?result = null; if (!NoDialogs && !NoOpenFileDialog) { result = dlg.ShowDialog(); } else { dlg.FileName = Filename; } if (NoDialogs || NoOpenFileDialog || result == true) { String msg = string.Empty; XmlDeserializatorBase deserializator; if (XmlDeserializatorVersions.UsesVersions(dlg.FileName)) { deserializator = new XmlDeserializatorVersions(); } else { deserializator = new XmlDeserializator(); } // First, validates if the file is a valid XCase XML file // TODO: it would be better to have two separate schemas rather than one choice schema if (!deserializator.ValidateXML(dlg.FileName, ref msg)) { Dialogs.ErrMsgBox.Show("File cannot be opened", "Not a valid XCase XML file"); return; } // version check string v1; string v2; if (!XmlDeserializatorBase.VersionsEqual(dlg.FileName, out v1, out v2)) { fProjectConverter projectConverter = new fProjectConverter(); if (projectConverter.CanConvert(v1, v2)) { MessageBoxResult yn = XCaseYesNoBox.Show("Project is obsolete. ", "Project is obsolete and must be converted to a new version before opening. \r\nDo you want to convert it now? "); if (yn == MessageBoxResult.Yes) { projectConverter.SetFile(dlg.FileName); projectConverter.DialogMode = true; projectConverter.ShowDialog(); } } else { Dialogs.ErrMsgBox.Show(string.Format("Can not open file {0}. Project version is {1}, needed version is {2}.", dlg.FileName, v1, v2), ""); } if (!XmlDeserializatorBase.VersionsEqual(dlg.FileName, out v1, out v2)) { Dialogs.ErrMsgBox.Show(string.Format("Can not open file {0}. Project version is {1}, needed version is {2}. \r\nUse project converter to convert the file to new version.", dlg.FileName, v1, v2), ""); return; } } // Closes existing project if (CurrentProject != null) { // Save existing project if there are some unsaved changes if (MainWindow.HasUnsavedChanges && !NoDialogs) { MessageBoxResult r = XCaseYesNoBox.Show("Current project is not saved", "Do you want to save it?"); if (r == MessageBoxResult.Yes) { new cmdSaveProject(MainWindow, null).Execute(); } else if (r == MessageBoxResult.Cancel) { return; } } //new cmdCloseProject(MainWindow, null).Execute(); MainWindow.CloseProject(); } //try { BusyState.SetBusy(); if (deserializator is XmlDeserializator) { Project p = deserializator.RestoreProject(dlg.FileName); p.FilePath = dlg.FileName; p.CreateModelController(); // HACK (SEVERE) - this should be somewhere else ... p.GetModelController().getUndoStack().ItemsChanged += MainWindow.UndoStack_ItemsChanged; MainWindow.CurrentProject = p; MainWindow.Title = "XCase editor - " + p.FilePath; MainWindow.HasUnsavedChanges = false; //It is this way so that when the CurrentProject is set, ModelController is present MainWindow.projectsWindow.BindToProject(CurrentProject); MainWindow.navigatorWindow.BindToProject(CurrentProject); MainWindow.propertiesWindow.BindDiagram(ref MainWindow.dockManager); MainWindow.InitializeMainMenu(); MainWindow.HasUnsavedChanges = false; MainWindow.OpenProjectDiagrams(); } else { VersionManager versionManager = ((XmlDeserializatorVersions)deserializator).RestoreVersionedProject(dlg.FileName); versionManager.FilePath = dlg.FileName; foreach (Project project in versionManager.VersionedProjects.Values) { project.FilePath = dlg.FileName; project.CreateModelController(); } MainWindow.projectsWindow.BindToVersionManager(versionManager); Project latestProjectVersion = versionManager.LatestVersion; MainWindow.projectsWindow.SwitchToVersion(latestProjectVersion.Version); MainWindow.navigatorWindow.BindToProject(latestProjectVersion); MainWindow.InitializeMainMenu(); MainWindow.OpenProjectDiagrams(); MainWindow.HasUnsavedChanges = false; MainWindow.Title = "XCase editor - " + versionManager.FilePath; #if DEBUG foreach (KeyValuePair <Version, Project> kvp in versionManager.VersionedProjects) { Tests.ModelIntegrity.ModelConsistency.CheckEverything(kvp.Value); } Tests.ModelIntegrity.VersionsConsistency.CheckVersionsConsistency(versionManager); #endif } } //catch //{ // new cmdNewProject(MainWindow, null).Execute(); // throw; //} //finally //{ // BusyState.SetNormalState(); //} } }
public void TestByCompare(string filename) { //string filename = "Attributes\\Attributes5.XCase"; XmlDeserializatorVersions deserializator = new XmlDeserializatorVersions(); VersionManager versionManager = deserializator.RestoreVersionedProject(TEST_BASE_DIR + filename); Assert.IsTrue(versionManager != null && versionManager.VersionedProjects.Count == 2 && versionManager.Versions.Count == 2); Version oldVersion = versionManager.Versions[0]; Version newVersion = versionManager.Versions[1]; PSMDiagram diagramNewVersion = versionManager.VersionedProjects[newVersion].PSMDiagrams[0]; PSMDiagram diagramOldVersion = versionManager.VersionedProjects[oldVersion].PSMDiagrams[0]; ChangesDetector detector = new ChangesDetector(); List <EvolutionChange> evolutionChanges = detector.Translate(diagramOldVersion, diagramNewVersion); XsltTemplateGenerator xsltGenerator = new XsltTemplateGenerator(diagramNewVersion); string xsltTransformation = xsltGenerator.Generate(evolutionChanges, oldVersion, newVersion); string inputFileDir = TEST_BASE_DIR + Path.GetDirectoryName(filename) + "\\" + Path.GetFileNameWithoutExtension(filename) + "-in"; string outputFileDir = TEST_BASE_DIR + Path.GetDirectoryName(filename) + "\\" + Path.GetFileNameWithoutExtension(filename) + "-out"; if (!Directory.Exists(inputFileDir)) { Console.WriteLine("No input files. "); Assert.Inconclusive(string.Format("Input file directory does not exist : {0}", inputFileDir)); } if (!Directory.Exists(outputFileDir)) { Console.WriteLine("No reference files. "); Assert.Inconclusive(string.Format("Output file directory does not exist: {0}", outputFileDir)); } DirectoryInfo dir = new DirectoryInfo(inputFileDir); FileInfo[] files = dir.GetFiles("*.xml"); bool fail = false; int failedFiles = 0; foreach (FileInfo fileInfo in files) { Console.WriteLine(string.Format("File: {0}", fileInfo.Name)); string input = File.ReadAllText(fileInfo.FullName); string result = XsltProcessing.Transform(input, xsltTransformation, TEST_BASE_DIR); File.WriteAllText(outputFileDir + "//" + fileInfo, result); DocumentValidator validator = new DocumentValidator { SilentMode = true }; bool inputInvalid = false; bool resultInvalid = false; bool compareFail = false; if (!validator.ValidateDocument(diagramOldVersion, input)) { inputInvalid = true; } if (!validator.ValidateDocument(diagramNewVersion, result)) { Console.WriteLine("Result document INVALID: " + validator.ErrorMessage); resultInvalid = true; } string referenceFile = outputFileDir + "//" + Path.GetFileNameWithoutExtension(fileInfo.Name) + "-reference.xml"; Assert.IsTrue(File.Exists(referenceFile), "Reference output file does not exist for: " + fileInfo.Name); string referenceOutput = File.ReadAllText(referenceFile); File.WriteAllText(outputFileDir + "//" + "last-stylesheet.xslt", xsltTransformation); if ((!inputInvalid && !resultInvalid) && result != referenceOutput) { Console.WriteLine("Output and REFERENCE output DIFFERS for: " + fileInfo.Name); compareFail = true; Console.WriteLine("Input file: "); Console.WriteLine(input); Console.WriteLine("Result file: "); Console.WriteLine(result); Console.WriteLine("Reference file: "); Console.WriteLine(referenceOutput); } else if (!inputInvalid && !resultInvalid && result == referenceOutput) { Console.WriteLine("Comparison succeeded."); File.WriteAllText(outputFileDir + "//" + "last-working-stylesheet.xslt", xsltTransformation); } if (inputInvalid) { Console.WriteLine("Input document INVALID: " + validator.ErrorMessage); Console.WriteLine("Input file: "); Console.WriteLine(input); fail = true; failedFiles++; } if (resultInvalid) { Console.WriteLine("Result document INVALID: " + validator.ErrorMessage); Console.WriteLine("Result file: "); Console.WriteLine(result); fail = true; failedFiles++; } if (compareFail) { Console.WriteLine("Result of {0} DIFFERS from expected result.", fileInfo.Name); fail = true; failedFiles++; } } if (files.Length == 0) { Console.WriteLine("No input files. "); Assert.Inconclusive("No input files. "); } if (fail) { Console.WriteLine("{0} out of {1} files FAILED. ", failedFiles, files.Length); Assert.Fail("{0} out of {1} files FAILED. ", failedFiles, files.Length); } Console.WriteLine("Altogether tested on {0} files.", files.Length); }
public void TestValidationOnRandomFiles(string filename) { Console.WriteLine("Testing file {0}.", filename); //string filename = "Attributes\\Attributes5.XCase"; XmlDeserializatorVersions deserializator = new XmlDeserializatorVersions(); VersionManager versionManager = deserializator.RestoreVersionedProject(TEST_BASE_DIR + filename); Assert.IsTrue(versionManager != null && versionManager.VersionedProjects.Count == 2 && versionManager.Versions.Count == 2); Version oldVersion = versionManager.Versions[0]; Version newVersion = versionManager.Versions[1]; PSMDiagram diagramNewVersion = versionManager.VersionedProjects[newVersion].PSMDiagrams[0]; PSMDiagram diagramOldVersion = versionManager.VersionedProjects[oldVersion].PSMDiagrams[0]; ChangesDetector detector = new ChangesDetector(); List <EvolutionChange> evolutionChanges = detector.Translate(diagramOldVersion, diagramNewVersion); XsltTemplateGenerator xsltGenerator = new XsltTemplateGenerator(diagramNewVersion); string xsltTransformation = xsltGenerator.Generate(evolutionChanges, oldVersion, newVersion); SampleDataGenerator g = new SampleDataGenerator(); DocumentValidator validator = new DocumentValidator { SilentMode = true }; string outputFileDir = TEST_BASE_DIR + Path.GetDirectoryName(filename) + "\\" + Path.GetFileNameWithoutExtension(filename) + "-error"; int fails = 0; for (int i = 0; i < RANDOM_FILE_COUNT; i++) { string input = g.Translate(diagramOldVersion); if (!validator.ValidateDocument(diagramOldVersion, input)) { if (!Directory.Exists(outputFileDir)) { Directory.CreateDirectory(outputFileDir); } File.WriteAllText(string.Format("{0}\\i{1}.xml", outputFileDir, i), input); Console.WriteLine("Input document INVALID: " + validator.ErrorMessage); fails++; continue; } string result = XsltProcessing.Transform(input, xsltTransformation, TEST_BASE_DIR); if (!validator.ValidateDocument(diagramNewVersion, result)) { if (!Directory.Exists(outputFileDir)) { Directory.CreateDirectory(outputFileDir); } File.WriteAllText(string.Format("{0}\\i{1}.xml", outputFileDir, i), input); File.WriteAllText(string.Format("{0}\\o{1}.xml", outputFileDir, i), result); Console.WriteLine("Result document INVALID: " + validator.ErrorMessage); fails++; continue; } Console.WriteLine("Test passed on file {0}/{1}", i, RANDOM_FILE_COUNT); } Console.WriteLine("Altogether tested on {0} random files. ", RANDOM_FILE_COUNT); if (fails != 0) { Console.WriteLine("{0} out of {1} files failed to pass. ", fails, RANDOM_FILE_COUNT); Assert.Fail("{0} out of {1} files failed to pass. ", fails, RANDOM_FILE_COUNT); } else { Console.WriteLine("All {0} files passed. ", RANDOM_FILE_COUNT); } }