public void GeneratesEmptyEpa() { var emptyTypeDefinition = A.Fake <ITypeDefinition>(); A.CallTo(() => emptyTypeDefinition.Constructors()) .Returns(A.Dummy <ISet <Action> >()); A.CallTo(() => emptyTypeDefinition.Actions()) .Returns(A.Dummy <ISet <Action> >()); var dummyAnalyzer = A.Dummy <IAnalyzerFactory>(); var epaGenerator = new EpaGenerator(dummyAnalyzer, -1); var epaGenerationTask = epaGenerator.GenerateEpa(emptyTypeDefinition, A.Dummy <IEpaBuilder>()); epaGenerationTask.Wait(); Assert.False(epaGenerationTask.IsFaulted); Assert.False(epaGenerationTask.IsCanceled); var epa = epaGenerationTask.Result.Epa; //Assert.AreEqual(emptyTypeDefinition, epa.Type); //TODO: reemplazar por objetos que sean iguales al resultado. No romper el encapsulamiento usando .Count Assert.Equal(1, epa.States.Count); Assert.Equal(0, epa.Initial.EnabledActions.Count); Assert.Equal(0, epa.Initial.DisabledActions.Count); Assert.Equal(0, epa.Transitions.Count); }
public async Task <TypeAnalysisResult> Start(AnalysisEventArgs analysisEventArgs) { cancellationSource = new CancellationTokenSource(); var analyzer = GetAnalyzerFactory(analysisEventArgs.TypeToAnalyze, analysisEventArgs.Engine, cancellationSource.Token); var epaGenerator = new EpaGenerator(analyzer, -1); var selectedMethods = from m in analysisEventArgs.SelectedMethods select m.ToString(); var epaBuilder = new EpaBuilder(analysisEventArgs.TypeToAnalyze); OnInitialStateAdded(this, epaBuilder); var epaBuilderObservable = new ObservableEpaBuilder(epaBuilder); epaBuilderObservable.TransitionAdded += OnTransitionAdded; return(await epaGenerator.GenerateEpa(analysisEventArgs.TypeToAnalyze, selectedMethods, epaBuilderObservable)); }
private void solutionEvents_AfterClosing() { stopAnalysis(); treeviewTypes.Nodes.Clear(); graphViewer.Graph = null; graphViewer.Enabled = false; cmdExportGraph.Enabled = false; cmdGenerateOutputAssembly.Enabled = false; cmdPan.Enabled = false; cmdResetLayout.Enabled = false; cmdZoomBestFit.Enabled = false; cmdZoomIn.Enabled = false; cmdZoomOut.Enabled = false; cmdRedo.Enabled = false; cmdUndo.Enabled = false; if (generator != null) { generator.Dispose(); generator = null; } }
protected static TypeAnalysisResult GenerateEpa(CciAssembly inputAssembly, ITypeDefinition typeToAnalyze, Options options) { System.Console.WriteLine("Starting analysis for type {0}", typeToAnalyze); var cancellationSource = new CancellationTokenSource(); var workingDir = CreateOrCleanupWorkingDirectory(); var queryGenerator = new CciQueryGenerator(); IAnalyzerFactory analyzerFactory; switch (options.Backend) { case "CodeContracts": var codeContracts = Environment.GetEnvironmentVariable("CodeContractsInstallDir"); if (string.IsNullOrEmpty(codeContracts)) { var msg = new StringBuilder(); msg.AppendLine("The environment variable %CodeContractsInstallDir% does not exist."); msg.AppendLine("Please make sure that Code Contracts is installed correctly."); msg.AppendLine("This might be because the system was not restarted after Code Contracts installation."); throw new DirectoryNotFoundException(msg.ToString()); } var cccheckArgs = ConfigurationManager.AppSettings["CccheckArgs"]; Contract.Assert(cccheckArgs != null); var cccheck = new FileInfo(ConfigurationManager.AppSettings["CccheckFullName"]); Contract.Assert(cccheck.Exists); analyzerFactory = new CodeContractsAnalyzerFactory(workingDir, cccheckArgs, string.Empty, queryGenerator, inputAssembly, options.InputAssembly, typeToAnalyze, cancellationSource.Token); break; case "Corral": var corralDefaultArgs = ConfigurationManager.AppSettings["CorralDefaultArgs"]; Contract.Assert(corralDefaultArgs != null); analyzerFactory = new CorralAnalyzerFactory(corralDefaultArgs, workingDir, queryGenerator, inputAssembly, options.InputAssembly, typeToAnalyze, cancellationSource.Token); break; default: throw new NotSupportedException(); } var generator = new EpaGenerator(analyzerFactory, options.Cutter); var epaBuilder = new EpaBuilder(typeToAnalyze); var epaBuilderObservable = new ObservableEpaBuilder(epaBuilder); epaBuilderObservable.TransitionAdded += OnTransitionAdded; TypeAnalysisResult analysisResult; if (!options.Methods.Equals("All")) { var selectedMethods = options.Methods.Split(';'); analysisResult = generator.GenerateEpa(typeToAnalyze, selectedMethods, epaBuilderObservable).Result; } else { analysisResult = generator.GenerateEpa(typeToAnalyze, epaBuilderObservable).Result; } return(analysisResult); }
private void treeviewTypes_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { var type = e.Node.Tag as CodeClass; if (type == null) { return; } stopAnalysis(); var prj = type.ProjectItem.ContainingProject; var fullPath = prj.Properties.Item("FullPath").Value.ToString(); var outputFileName = prj.Properties.Item("OutputFileName").Value.ToString(); var outputPath = prj.ConfigurationManager.ActiveConfiguration.Properties.Item("OutputPath").Value.ToString(); var cfgName = dte.Solution.SolutionBuild.ActiveConfiguration.Name; dte.Solution.SolutionBuild.BuildProject(cfgName, prj.UniqueName, true); if (dte.ToolWindows.ErrorList.ErrorItems.Count > 0) { var msg = string.Format("Build for project {0} failed.", prj.Name); MessageBox.Show(msg, Resources.ToolWindowTitle, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } exportGraphDialog.FileName = string.Format("{0}.png", type.FullName); generateOutputDialog.FileName = outputFileName; //Obtenemos el output original por si code contracts le borra los contratos var outputWithContractsFileName = Path.Combine(fullPath, outputPath.Replace("bin", "obj"), "Decl", outputFileName); outputFileName = Path.Combine(fullPath, outputPath, outputFileName); if (File.Exists(outputWithContractsFileName)) { outputFileName = outputWithContractsFileName; } if (!File.Exists(outputFileName)) { var msg = string.Format("Can not find the assembly:\n{0}", outputFileName); MessageBox.Show(msg, Resources.ToolWindowTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } assemblyFileName = outputFileName; typeFullName = type.FullName; if (generator != null) { generator.Dispose(); } generator = new EpaGenerator(); generator.TypeAnalysisStarted += typeAnalysisStarted; generator.TypeAnalysisDone += typeAnalysisDone; generator.StateAdded += stateAdded; generator.TransitionAdded += transitionAdded; thread = new System.Threading.Thread(generateGraph); thread.Name = "generateGraph"; thread.IsBackground = true; thread.Start(); }