Пример #1
0
        public void TestNamespaceIdentical()
        {
            var from = TreeHelper.SyntaxTreeFromString(" namespace test{  public class Foo1{}}");
            var to   = TreeHelper.SyntaxTreeFromString(" namespace test{  public class Foo1{}}");

            var foo = TreeComparison.FindBelongingThing(from, to);

            Assert.IsNotNull(foo);
            Assert.IsFalse(foo.wasModified);
            Assert.AreEqual(ModificationKind.noModification, foo.howModified);
        }
Пример #2
0
        public void TestClassIdentical()
        {
            var from = TreeHelper.SyntaxTreeFromString(" public class Foo1{}");
            var to   = TreeHelper.SyntaxTreeFromString(" public class Foo1{}");

            Assert.AreEqual(1, to.childs.Count);    // to and from should be compilation unit
            Assert.AreEqual(1, from.childs.Count);

            var foo = TreeComparison.FindBelongingThing(from.childs[0], to.childs[0]);

            Assert.IsNotNull(foo);
            Assert.IsFalse(foo.wasModified);
            Assert.AreEqual(ModificationKind.noModification, foo.howModified);
        }
        public void TestMethodIdentical()
        {
            var from = TreeHelper.SyntaxTreeFromString(" public void Print(){Console.WriteLine(\"HalloWelt\");}");
            var to   = TreeHelper.SyntaxTreeFromString(" public void Print(){Console.WriteLine(\"HalloWelt\");}");

            Assert.AreEqual(1, to.childs.Count);    // to and from should be compilation unit
            Assert.AreEqual(1, from.childs.Count);

            var foo = TreeComparison.FindBelongingThing(from.childs[0], to.childs[0]);

            Assert.IsNotNull(foo);
            Assert.IsFalse(foo.wasModified);
            Assert.AreEqual(ModificationKind.noModification, foo.howModified);
        }
Пример #4
0
        public void TestClassRenamed()
        {
            var from = TreeHelper.SyntaxTreeFromString(" public class Foo1{}");
            var to   = TreeHelper.SyntaxTreeFromString(" public class Foo2{}");

            Assert.AreEqual(1, to.childs.Count);    // to and from should be compilation unit
            Assert.AreEqual(1, from.childs.Count);

            var foo = TreeComparison.FindBelongingThing(from.childs[0], to.childs[0]);

            // gues that the namespace was renamed
            Assert.IsNotNull(foo);
            Assert.IsNotNull(foo.treeNode);
            Assert.IsTrue(foo.wasModified);
            Assert.AreEqual(ModificationKind.nameChanged, foo.howModified);
        }
Пример #5
0
        public void TestClassContentChanged()
        {
            var from = TreeHelper.SyntaxTreeFromString(" public class Foo1{}");
            var to   = TreeHelper.SyntaxTreeFromString(" public class Foo1{ public void test(){} }");

            Assert.AreEqual(1, to.childs.Count);    // to and from should be compilation unit
            Assert.AreEqual(1, from.childs.Count);

            var foo = TreeComparison.FindBelongingThing(from.childs[0], to.childs[0]);

            // should find the namespace declaration with Foo2 in it
            Assert.IsNotNull(foo);
            Assert.IsNotNull(foo.treeNode);
            Assert.IsTrue(foo.wasModified);
            Assert.AreEqual(ModificationKind.contentChanged, foo.howModified);
        }
        public void TestMethodRenamed()
        {
            var from = TreeHelper.SyntaxTreeFromString(" public void Print(){Console.WriteLine(\"HalloWelt\");}");;
            var to   = TreeHelper.SyntaxTreeFromString(" public void PrintHelloWorld(){Console.WriteLine(\"HalloWelt\");}");;

            Assert.AreEqual(1, to.childs.Count);    // to and from should be compilation unit
            Assert.AreEqual(1, from.childs.Count);

            var foo = TreeComparison.FindBelongingThing(from.childs[0], to.childs[0]);

            // gues that the namespace was renamed
            Assert.IsNotNull(foo);
            Assert.IsNotNull(foo.treeNode);
            Assert.IsTrue(foo.wasModified);
            Assert.AreEqual(ModificationKind.nameChanged, foo.howModified);
        }
Пример #7
0
        public void TestMethodAdded2()
        {
            var from = TreeHelper.SyntaxTreeFromString(" public void Print(){Console.WriteLine(\"HalloWelt\");}");;
            var to   = TreeHelper.SyntaxTreeFromString("public void Print2(){Console.WriteLine(\"blub blub\");}  public void Print(){Console.WriteLine(\"HalloWelt\");}  ");

            Assert.AreEqual(1, from.childs.Count);
            Assert.AreEqual(2, to.childs.Count);    // first level is compilation unit


            var foo = TreeComparison.FindBelongingThing(from.childs[0], to.childs);

            // gues that the namespace was renamed
            Assert.IsNotNull(foo);
            Assert.IsNotNull(foo.treeNode);
            Assert.IsFalse(foo.wasModified);
            Assert.AreEqual(ModificationKind.noModification, foo.howModified);
            Assert.IsTrue(foo.treeNode.node.ToFullString().Contains("Hallo"));
        }
Пример #8
0
        private static void CompareTressAndCreateEdges(SyntakTreeDecorator fromTree, SyntakTreeDecorator tooTree, List <Edge> transitionEdges)
        {
            if (fromTree == null || fromTree.childs == null)
            {
                return;
            }


            var thisLevelsEdges = new List <Edge>();

            var tooList  = new List <SyntakTreeDecorator>();
            var notFound = new List <SyntakTreeDecorator>();

            foreach (var from in fromTree.childs)
            {
                if (tooTree == null || tooTree.childs == null)
                {
                    notFound.Add(from);
                    continue;
                    // probally deleted
                }

                var to = TreeComparison.FindBelongingThing(from, tooTree.childs);
                if (to != null)
                {
                    if (tooList.Contains(to.treeNode))
                    {
                        // used twice ... potential Bug
                        DebugHelper.BreakIntoDebug();
                    }

                    tooList.Add(to.treeNode);
                    if (!to.wasModified)
                    {
                        transitionEdges.Add(new Edge(from.equivilantGraphNode, to.treeNode.equivilantGraphNode, Edge.EdgeType.NoCodeChange));
                        continue;
                    }
                    else
                    {
                        switch (to.howModified)
                        {
                        case ModificationKind.nameChanged:
                            transitionEdges.Add(new Edge(from.equivilantGraphNode, to.treeNode.equivilantGraphNode, Edge.EdgeType.CodeChangedRename));
                            break;

                        default:
                            transitionEdges.Add(new Edge(from.equivilantGraphNode, to.treeNode.equivilantGraphNode, Edge.EdgeType.CodeChanged));
                            break;
                        }
                    }

                    CompareTressAndCreateEdges(from, to.treeNode, transitionEdges);
                }
                else
                {
                    // probally deleted
                    notFound.Add(from);
                }
            }

            // track which kinds where found ... rest was probably  created
            // todo: I should realy unit-test this.
        }