示例#1
0
        private ICallGraphNode CreateCallGraphNode(string name)
        {
            var info = CallInfo.CreateFake(
                new AssemblyInfo(UTF8String.Empty, AssemblyInfo.EmptyVersion),
                MethodUniqueSignature.Create(name));

            return(new CallInfoNode(info));
        }
示例#2
0
        public void MethodUniqueNameGenericTest()
        {
            var name = MethodUniqueSignature.Create(
                "YamlDotNet.Serialization.BuilderSkeleton`1<YamlDotNet.Serialization.DeserializerBuilder>::.ctor()");

            Assert.That(name.ToString(), Is.EqualTo("YamlDotNet.Serialization.BuilderSkeleton::.ctor()"));

            var name2 = MethodUniqueSignature.Create("System.Collections.Generic.IDictionary`2<System.String,System.Object> YamlDotNet.Serialization.Deserializer::Deserialize<System.Collections.Generic.IDictionary`2<System.String,System.Object>>(System.String)");

            Assert.That(name2.ToString(), Is.EqualTo("System.Collections.Generic.IDictionary YamlDotNet.Serialization.Deserializer::Deserialize(System.String)"));
        }
示例#3
0
        private CallGraphNode CreateCallGraphNode(string name)
        {
            var info = new CallInfo(
                new AssemblyInfo(UTF8String.Empty, AssemblyInfo.EmptyVersion),
                MethodUniqueSignature.Create(name),
                OpCodes.Call,
                true,
                new List <MethodUniqueSignature>(0));

            return(new CallGraphNode(info));
        }
示例#4
0
        //[Ignore("for debugging only, change type and methodName vars for your case")]
        public void SingleCase()
        {
            var type       = typeof(KnowledgeBase.Cases.XslCompiledTransformPatterns);
            var methodName = nameof(KnowledgeBase.Cases.XslCompiledTransformPatterns.XsltLoadWithPayload);

            var context = Context.CreateToAnalyze();
            var method  = type.GetMethod(methodName, BindingFlags.Public | BindingFlags.Instance);
            var errors  = Loader.ExecuteCase(context, type, new[] { method });

            //var patternGroup = Loader.GetPatternGroup(type, methodName);

            Assert.That(errors, Is.Empty);
            Assert.That(context.Patterns.Count, Is.GreaterThan(0));

            var builder = new CallGraphBuilder(index);
            var graph   = builder.CreateGraph(context.Patterns);

            Assert.That(graph.EntryNodes.Count, Is.GreaterThan(0));
            Assert.That(graph.EntryNodes.Keys
                        .Contains(MethodUniqueSignature.Create($"{type.FullName}::{methodName}()")));
        }
示例#5
0
        public void AllCases()
        {
            foreach (var type in Loader.GetCaseTypes())
            {
                Console.WriteLine($"{type}:");
                foreach (var method in Loader.GetCaseMethods(type))
                {
                    Console.WriteLine($"    {method}");

                    var context = Context.CreateToAnalyze();
                    var errors  = Loader.ExecuteCase(context, type, new[] { method });

                    Assert.That(errors, Is.Empty);
                    Assert.That(context.Patterns.Count, Is.GreaterThan(0));

                    var builder = new CallGraphBuilder(index);
                    var graph   = builder.CreateGraph(context.Patterns);

                    Assert.That(graph.EntryNodes.Count, Is.GreaterThan(0));
                    Assert.That(graph.EntryNodes.Keys
                                .Contains(MethodUniqueSignature.Create($"{type.FullName}::{method.Name}()")));
                }
            }
        }