Ejemplo 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);
        }
Ejemplo n.º 2
0
 private void generateGraph()
 {
     try
     {
         generator.LoadAssembly(assemblyFileName);
         generator.GenerateEpa(typeFullName);
     }
     catch (ThreadAbortException)
     {
         this.Invoke(new Action <TypeAnalysisResult>(updateAnalysisEnd), (object)null);
     }
     catch (Exception ex)
     {
         this.Invoke(new Action <Exception>(HandleException), ex);
         this.Invoke(new Action <TypeAnalysisResult>(updateAnalysisEnd), (object)null);
     }
 }
Ejemplo n.º 3
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));
        }
Ejemplo 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);
        }