Esempio n. 1
0
        public void SlideEditRightRecursive()
        {
            // Slide edit right recursive.
            var diffs = new List <Diff>
            {
                Diff.Equal("x"),
                Diff.Delete("ca"),
                Diff.Equal("c"),
                Diff.Delete("b"),
                Diff.Equal("a")
            }.CleanupMerge().ToList();

            Assert.Equal(new List <Diff> {
                Diff.Equal("xca"), Diff.Delete("cba")
            }, diffs);
        }
        public void Text2_ReturnsText2()
        {
            // Compute the source and destination texts.
            var diffs = new List <Diff>
            {
                Diff.Equal("jump"),
                Diff.Delete("s"),
                Diff.Insert("ed"),
                Diff.Equal(" over "),
                Diff.Delete("the"),
                Diff.Insert("a"),
                Diff.Equal(" lazy")
            };

            Assert.Equal("jumped over a lazy", diffs.Text2());
        }
        public void SimpleElimination()
        {
            var diffs = new List <Diff>
            {
                Diff.Delete("a"),
                Diff.Equal("b"),
                Diff.Delete("c")
            };

            diffs.CleanupSemantic();
            CollectionAssert.AreEqual(new List <Diff>
            {
                Diff.Delete("abc"),
                Diff.Insert("b")
            }, diffs);
        }
        public void ReverseOverlapElimination()
        {
            var diffs = new List <Diff>
            {
                Diff.Delete("xxxabc"),
                Diff.Insert("defxxx")
            };

            diffs.CleanupSemantic();
            CollectionAssert.AreEqual(new List <Diff>
            {
                Diff.Insert("def"),
                Diff.Equal("xxx"),
                Diff.Delete("abc")
            }, diffs);
        }
Esempio n. 5
0
        public void HittingTheStart()
        {
            var diffs = new List <Diff>
            {
                Diff.Equal("a"),
                Diff.Delete("a"),
                Diff.Equal("ax")
            };

            diffs.CleanupSemanticLossless();
            CollectionAssert.AreEqual(new List <Diff>
            {
                Diff.Delete("a"),
                Diff.Equal("aax")
            }, diffs);
        }
        public void ThreeEditElimination()
        {
            var diffs = new List <Diff>
            {
                Diff.Insert("12"),
                Diff.Equal("x"),
                Diff.Delete("cd"),
                Diff.Insert("34")
            }.CleanupEfficiency();

            Assert.Equal(new List <Diff>
            {
                Diff.Delete("xcd"),
                Diff.Insert("12x34")
            }, diffs);
        }
Esempio n. 7
0
        public void WordBoundaries()
        {
            var diffs = new List <Diff>
            {
                Diff.Equal("The c"),
                Diff.Delete("ow and the c"),
                Diff.Equal("at.")
            }.CleanupSemantic();

            Assert.Equal(new List <Diff>
            {
                Diff.Equal("The "),
                Diff.Delete("cow and the "),
                Diff.Equal("cat.")
            }, diffs);
        }
        public void FourEditElimination()
        {
            var diffs = new List <Diff>
            {
                Diff.Delete("ab"),
                Diff.Insert("12"),
                Diff.Equal("xyz"),
                Diff.Delete("cd"),
                Diff.Insert("34")
            }.CleanupEfficiency();

            Assert.Equal(new List <Diff>
            {
                Diff.Delete("abxyzcd"),
                Diff.Insert("12xyz34")
            }, diffs);
        }
Esempio n. 9
0
        public void SlideEditLeftRecursive()
        {
            // Slide edit left recursive.
            var diffs = new List <Diff>
            {
                Diff.Equal("a"),
                Diff.Delete("b"),
                Diff.Equal("c"),
                Diff.Delete("ac"),
                Diff.Equal("x")
            };

            diffs.CleanupMerge();
            CollectionAssert.AreEqual(new List <Diff> {
                Diff.Delete("abc"), Diff.Equal("acx")
            }, diffs);
        }
Esempio n. 10
0
        public void InterweavedInsertDeletesAreMerged()
        {
            // Merge interweave.
            var diffs = new List <Diff>
            {
                Diff.Delete("a"),
                Diff.Insert("b"),
                Diff.Delete("c"),
                Diff.Insert("d"),
                Diff.Equal("e"),
                Diff.Equal("f")
            }.CleanupMerge().ToList();

            Assert.Equal(new List <Diff> {
                Diff.Delete("ac"), Diff.Insert("bd"), Diff.Equal("ef")
            }, diffs);
        }
        public void ToString_ReturnsExpectedString()
        {
            // Patch Object.
            var p = new Patch(20, 18, 21, 17, new[]
            {
                Diff.Equal("jump"),
                Diff.Delete("s"),
                Diff.Insert("ed"),
                Diff.Equal(" over "),
                Diff.Delete("the"),
                Diff.Insert("a"),
                Diff.Equal("\nlaz")
            }.ToImmutableList());
            var strp = "@@ -21,18 +22,17 @@\n jump\n-s\n+ed\n  over \n-the\n+a\n %0alaz\n";

            Assert.Equal(strp, p.ToString());
        }
Esempio n. 12
0
        public void PrefixSuffixDetectionWithEqualities()
        {
            // Prefix and suffix detection.
            var diffs = new List <Diff>
            {
                Diff.Equal("x"),
                Diff.Delete("a"),
                Diff.Insert("abc"),
                Diff.Delete("dc"),
                Diff.Equal("y")
            }.CleanupMerge().ToList();

            Assert.Equal(
                new List <Diff> {
                Diff.Equal("xa"), Diff.Delete("d"), Diff.Insert("b"), Diff.Equal("cy")
            }, diffs);
        }
Esempio n. 13
0
        public void BackpassElimination()
        {
            var diffs = new List <Diff>
            {
                Diff.Delete("ab"),
                Diff.Equal("cd"),
                Diff.Delete("e"),
                Diff.Equal("f"),
                Diff.Insert("g")
            }.CleanupSemantic();

            Assert.Equal(new List <Diff>
            {
                Diff.Delete("abcdef"),
                Diff.Insert("cdfg")
            }, diffs);
        }
        public void ThreeDiffs_WhenCleaned_Remains()
        {
            // Blank lines.
            var diffs = new List <Diff>
            {
                Diff.Equal("AAA"),
                Diff.Insert("BBB"),
                Diff.Delete("CCC"),
            }.CleanupSemanticLossless().ToList();

            Assert.Equal(new List <Diff>
            {
                Diff.Equal("AAA"),
                Diff.Insert("BBB"),
                Diff.Delete("CCC"),
            }, diffs);
        }
        public void ToDelta_GeneratesExpectedOutput()
        {
            var diffs = new List <Diff>
            {
                Diff.Equal("jump"),
                Diff.Delete("s"),
                Diff.Insert("ed"),
                Diff.Equal(" over "),
                Diff.Delete("the"),
                Diff.Insert("a"),
                Diff.Equal(" lazy"),
                Diff.Insert("old dog")
            };
            var delta = diffs.ToDelta();

            Assert.AreEqual("=4\t-1\t+ed\t=6\t-3\t+a\t=5\t+old dog", delta);
        }
        public void ToDelta_InputTooShort_Throws()
        {
            var diffs = new List <Diff>
            {
                Diff.Equal("jump"),
                Diff.Delete("s"),
                Diff.Insert("ed"),
                Diff.Equal(" over "),
                Diff.Delete("the"),
                Diff.Insert("a"),
                Diff.Equal(" lazy"),
                Diff.Insert("old dog")
            };
            var delta = diffs.ToDelta();
            var text1 = diffs.Text1().Substring(1);

            Assert.Throws <ArgumentException>(() => DiffList.FromDelta(text1, delta).ToList());
        }
        public void FromDelta_GeneratesExpectedDiffs()
        {
            var diffs = new List <Diff>
            {
                Diff.Equal("jump"),
                Diff.Delete("s"),
                Diff.Insert("ed"),
                Diff.Equal(" over "),
                Diff.Delete("the"),
                Diff.Insert("a"),
                Diff.Equal(" lazy"),
                Diff.Insert("old dog")
            };
            var delta  = diffs.ToDelta();
            var result = DiffList.FromDelta(diffs.Text1(), delta);

            CollectionAssert.AreEqual(diffs, result.ToList());
        }
Esempio n. 18
0
        public void NoElimination2()
        {
            var diffs = new List <Diff>
            {
                Diff.Delete("abc"),
                Diff.Insert("ABC"),
                Diff.Equal("1234"),
                Diff.Delete("wxyz")
            }.CleanupSemantic();

            Assert.Equal(new List <Diff>
            {
                Diff.Delete("abc"),
                Diff.Insert("ABC"),
                Diff.Equal("1234"),
                Diff.Delete("wxyz")
            }, diffs);
        }
Esempio n. 19
0
        public void NoEliminiation1()
        {
            var diffs = new List <Diff>
            {
                Diff.Delete("ab"),
                Diff.Insert("cd"),
                Diff.Equal("12"),
                Diff.Delete("e")
            }.CleanupSemantic();

            Assert.Equal(new List <Diff>
            {
                Diff.Delete("ab"),
                Diff.Insert("cd"),
                Diff.Equal("12"),
                Diff.Delete("e")
            }, diffs);
        }
        public void BackpassElimination()
        {
            var diffs = new List <Diff>
            {
                Diff.Delete("ab"),
                Diff.Insert("12"),
                Diff.Equal("xy"),
                Diff.Insert("34"),
                Diff.Equal("z"),
                Diff.Delete("cd"),
                Diff.Insert("56")
            }.CleanupEfficiency();

            Assert.Equal(new List <Diff>
            {
                Diff.Delete("abxyzcd"),
                Diff.Insert("12xy34z56")
            }, diffs);
        }
        public void HighCostElimination()
        {
            short highDiffEditCost = 5;

            var diffs = new List <Diff>
            {
                Diff.Delete("ab"),
                Diff.Insert("12"),
                Diff.Equal("wxyz"),
                Diff.Delete("cd"),
                Diff.Insert("34")
            }.CleanupEfficiency(highDiffEditCost);

            Assert.Equal(new List <Diff>
            {
                Diff.Delete("abwxyzcd"),
                Diff.Insert("12wxyz34")
            }, diffs);
        }
        public void DiffBisectTest_NoTimeout()
        {
            // Normal.
            var a = "cat";
            var b = "map";
            // Since the resulting diff hasn't been normalized, it would be ok if
            // the insertion and deletion pairs are swapped.
            // If the order changes, tweak this test as required.
            var diffs = new List <Diff>
            {
                Diff.Delete("c"),
                Diff.Insert("m"),
                Diff.Equal("a"),
                Diff.Delete("t"),
                Diff.Insert("p")
            };

            Assert.Equal(diffs, DiffAlgorithm.MyersDiffBisect(a, b, false, new CancellationToken()));
        }
Esempio n. 23
0
        public void FourEditElimination()
        {
            var diffs = new List <Diff>
            {
                Diff.Delete("ab"),
                Diff.Insert("12"),
                Diff.Equal("xyz"),
                Diff.Delete("cd"),
                Diff.Insert("34")
            }.CleanupMerge().ToList();

            Assert.Equal(new List <Diff>
            {
                Diff.Delete("ab"),
                Diff.Insert("12"),
                Diff.Equal("xyz"),
                Diff.Delete("cd"),
                Diff.Insert("34")
            }, diffs);
        }
        public void NoElimination()
        {
            var diffs = new List <Diff>
            {
                Diff.Delete("ab"),
                Diff.Insert("12"),
                Diff.Equal("wxyz"),
                Diff.Delete("cd"),
                Diff.Insert("34")
            };

            diffs.CleanupEfficiency();
            CollectionAssert.AreEqual(new List <Diff>
            {
                Diff.Delete("ab"),
                Diff.Insert("12"),
                Diff.Equal("wxyz"),
                Diff.Delete("cd"),
                Diff.Insert("34")
            }, diffs);
        }
Esempio n. 25
0
        public void MultipleEliminations()
        {
            var diffs = new List <Diff>
            {
                Diff.Insert("1"),
                Diff.Equal("A"),
                Diff.Delete("B"),
                Diff.Insert("2"),
                Diff.Equal("_"),
                Diff.Insert("1"),
                Diff.Equal("A"),
                Diff.Delete("B"),
                Diff.Insert("2")
            }.CleanupSemantic();

            Assert.Equal(new List <Diff>
            {
                Diff.Delete("AB_AB"),
                Diff.Insert("1A2_1A2")
            }, diffs);
        }
Esempio n. 26
0
        public void TwoOverlapEliminations()
        {
            var diffs = new List <Diff>
            {
                Diff.Delete("abcd1212"),
                Diff.Insert("1212efghi"),
                Diff.Equal("----"),
                Diff.Delete("A3"),
                Diff.Insert("3BC")
            }.CleanupSemantic();

            Assert.Equal(new List <Diff>
            {
                Diff.Delete("abcd"),
                Diff.Equal("1212"),
                Diff.Insert("efghi"),
                Diff.Equal("----"),
                Diff.Delete("A"),
                Diff.Equal("3"),
                Diff.Insert("BC")
            }, diffs);
        }
        public void Delta_SpecialCharacters_Works()
        {
            var zero   = (char)0;
            var one    = (char)1;
            var two    = (char)2;
            var diffs2 = new List <Diff>
            {
                Diff.Equal("\u0680 " + zero + " \t %"),
                Diff.Delete("\u0681 " + one + " \n ^"),
                Diff.Insert("\u0682 " + two + " \\ |")
            };
            var text1 = diffs2.Text1();

            Assert.AreEqual("\u0680 " + zero + " \t %\u0681 " + one + " \n ^", text1);

            var delta = diffs2.ToDelta();

            // Lowercase, due to UrlEncode uses lower.
            Assert.AreEqual("=7\t-7\t+%da%82 %02 %5c %7c", delta, "diff_toDelta: Unicode.");

            CollectionAssert.AreEqual(diffs2, DiffList.FromDelta(text1, delta).ToList(), "diff_fromDelta: Unicode.");
        }