Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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;
            }
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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();
        }