예제 #1
0
        private static void ExecuteDuplicationDetection(Result expectedResult, string codeText, string msgFromCodeComment)
        {
            TestLog.EmbedPlainText("The code", codeText);

            CompilationUnit cu = AstMatchHelper.ParseToCompilationUnit(codeText);

            // We require the first class in the file to have the Foo & Bar methods.
            var classes = cu.FindAllClasses();

            Assert.That(classes.Count(), Is.GreaterThan(0), "Expected at least one class to be in the test cs file.");

            // Expect two methods, Foo & Bar.
            IndexableMethodFinderVisitor visitor = new IndexableMethodFinderVisitor();

            classes.First().AcceptVisitor(visitor, null);

            Assert.AreEqual(visitor.FooMethod.Name, "Foo", "Expected a method named Foo.");
            Assert.AreEqual(visitor.BarMethod.Name, "Bar", "Expected a method named Bar.");

            AstComparisonVisitor cv = new AstComparisonVisitor();

            visitor.BarMethod.AcceptVisitor(cv, visitor.FooMethod);


            if (expectedResult == Result.Match)
            {
                Assert.IsTrue(cv.Match, "Expected Foo & Bar to match: " + msgFromCodeComment);
                Assert.That(visitor.BarMethod.Body.Matches2(visitor.FooMethod.Body));
            }
            else
            {
                Assert.IsFalse(cv.Match, "Expected Foo & Bar to not match: " + msgFromCodeComment);
                Assert.That(visitor.BarMethod.Matches2(visitor.FooMethod), Is.False);
            }
        }
예제 #2
0
        public static bool Matches(this INode left, INode right)
        {
            AstComparisonVisitor cv = new AstComparisonVisitor();

            left.AcceptVisitor(cv, right);
            return(cv.Match);
        }
예제 #3
0
        public static bool Matches(this MethodDeclaration md_this, MethodDeclaration md)
        {
            AstComparisonVisitor cv = new AstComparisonVisitor();

            md.AcceptVisitor(cv, md_this);
            return(cv.Match);
        }
예제 #4
0
 private bool AcceptChildren(AstComparisonVisitor visitor, object data)
 {
     foreach (INode n in nodes)
     {
         if (!n.AcceptVisitor(visitor, data))
         {
             return(false);
         }
     }
     return(true);
 }
예제 #5
0
        public virtual bool AcceptChildren(AstComparisonVisitor visitor, object data)
        {
            AbstractNode d = (AbstractNode)data;

            for (int i = 0; i < children.Count; i++)
            {
                INode child = Children[i];
                if (child == null)
                {
                    return(false);
                }
                if (!child.AcceptVisitor(visitor, d.Children[i]))
                {
                    return(false);
                }
            }
            return(true);
        }
예제 #6
0
 public override bool AcceptVisitor(AstComparisonVisitor visitor, object data)
 {
     return(visitor.VisitPrimitiveExpression(this, data));
 }
예제 #7
0
 public bool AcceptVisitor(AstComparisonVisitor visitor, object data)
 {
     return(AcceptChildren(visitor, data));
 }
예제 #8
0
 public abstract bool AcceptVisitor(AstComparisonVisitor visitor, object data);
예제 #9
0
 public override bool AcceptVisitor(AstComparisonVisitor visitor, object data)
 {
     return(true);
 }
예제 #10
0
 public override bool AcceptVisitor(AstComparisonVisitor visitor, object data)
 {
     return(visitor.VisitBlockStatement(this, data));
 }
예제 #11
0
 public override bool AcceptVisitor(AstComparisonVisitor visitor, object data)
 {
     return(visitor.VisitTypeReference(this, data));
 }
 public override bool AcceptVisitor(AstComparisonVisitor visitor, object data)
 {
     return(visitor.VisitLocalVariableDeclaration(this, data));
 }
예제 #13
0
 public override bool AcceptVisitor(AstComparisonVisitor visitor, object data)
 {
     return(visitor.VisitCompilationUnit(this, data));
 }