예제 #1
0
        public void ToString_ReturnsExpectedString()
        {
            // Patch Object.
            var p = new Patch
            {
                Start1  = 20,
                Start2  = 21,
                Length1 = 18,
                Length2 = 17
            };

            p.Diffs.AddRange(new[]
            {
                Diff.Equal("jump"),
                Diff.Delete("s"),
                Diff.Insert("ed"),
                Diff.Equal(" over "),
                Diff.Delete("the"),
                Diff.Insert("a"),
                Diff.Equal("\nlaz")
            });
            var strp = "@@ -21,18 +22,17 @@\n jump\n-s\n+ed\n  over \n-the\n+a\n %0alaz\n";

            Assert.AreEqual(strp, p.ToString(), "Patch: toString.");
        }
        static void Main(string[] args)
        {
            var diffs = new List <Diff>
            {
                Diff.Insert(" "),
                Diff.Equal("a"),
                Diff.Insert("nd"),
                Diff.Equal(" [[Pennsylvania]]"),
                Diff.Delete(" and [[New")
            };

            var patch1 = Patch.FromDiffs(diffs);

            Console.WriteLine(diffs.Text1());
            Console.WriteLine(diffs.Text2());

            var patch2 = Patch.Compute(diffs.Text1(), diffs.Text2(), 0, 4);

            Console.WriteLine(patch1.ToText());
            Console.WriteLine(patch2.ToText());

            //Debug.Assert(patch1.SequenceEqual(patch2));

            ImmutableList <int> someList = Enumerable.Range(0, 10).ToImmutableList();
            var record1 = new MyRecord(someList);
            var record2 = new MyRecord(someList);

            Console.WriteLine(record1 == record2);
        }
예제 #3
0
        public void SubsequentEqualitiesAreMerged()
        {
            var diffs = new List <Diff> {
                Diff.Equal("a"), Diff.Equal("b"), Diff.Equal("c")
            }.CleanupMerge().ToList();

            Assert.Equal(new List <Diff> {
                Diff.Equal("abc")
            }, diffs);
        }
예제 #4
0
        public void CleanupMerge_AlreadyCleaned_ReturnsSameList()
        {
            var result = new List <Diff> {
                Diff.Equal("a"), Diff.Delete("b"), Diff.Insert("c")
            }.CleanupMerge().ToList();

            var expected = new[] { Diff.Equal("a"), Diff.Delete("b"), Diff.Insert("c") };

            Assert.Equal(expected, result);
        }
        public void FindEquivalentLocation2_LocationOnDeletion_FindsLocation()
        {
            var diffs = new List <Diff>
            {
                Diff.Equal("a"),
                Diff.Delete("1234"),
                Diff.Equal("xyz")
            };

            Assert.Equal(1, diffs.FindEquivalentLocation2(3));
        }
예제 #6
0
        public void SlideEditRight()
        {
            // Slide edit right.
            var diffs = new List <Diff> {
                Diff.Equal("c"), Diff.Insert("ab"), Diff.Equal("a")
            }.CleanupMerge().ToList();

            Assert.Equal(new List <Diff> {
                Diff.Equal("ca"), Diff.Insert("ba")
            }, diffs);
        }
예제 #7
0
        public void FindEquivalentLocation2_LocationOnDeletion_FindsLocation()
        {
            var diffs = new List <Diff>
            {
                Diff.Equal("a"),
                Diff.Delete("1234"),
                Diff.Equal("xyz")
            };

            Assert.AreEqual(1, diffs.FindEquivalentLocation2(3), "diff_xIndex: Translation on deletion.");
        }
        public void Levenshtein_WithTrailingEquality()
        {
            var diffs = new List <Diff>
            {
                Diff.Delete("abc"),
                Diff.Insert("1234"),
                Diff.Equal("xyz")
            };

            Assert.Equal(4, diffs.Levenshtein());
        }
예제 #9
0
        public void Levenshtein_WithTrailingEquality()
        {
            var diffs = new List <Diff>
            {
                Diff.Delete("abc"),
                Diff.Insert("1234"),
                Diff.Equal("xyz")
            };

            Assert.AreEqual(4, diffs.Levenshtein(), "diff_levenshtein: Levenshtein with trailing equality.");
        }
예제 #10
0
        public void SubsequentEqualitiesAreMerged()
        {
            var diffs = new List <Diff> {
                Diff.Equal("a"), Diff.Equal("b"), Diff.Equal("c")
            };

            diffs.CleanupMerge();
            CollectionAssert.AreEqual(new List <Diff> {
                Diff.Equal("abc")
            }, diffs);
        }
예제 #11
0
        public void PrefixSuffixDetection()
        {
            // Prefix and suffix detection.
            var diffs = new List <Diff> {
                Diff.Delete("a"), Diff.Insert("abc"), Diff.Delete("dc")
            }.CleanupMerge().ToList();

            Assert.Equal(
                new List <Diff> {
                Diff.Equal("a"), Diff.Delete("d"), Diff.Insert("b"), Diff.Equal("c")
            }, diffs);
        }
예제 #12
0
        public void SlideEditRight()
        {
            // Slide edit right.
            var diffs = new List <Diff> {
                Diff.Equal("c"), Diff.Insert("ab"), Diff.Equal("a")
            };

            diffs.CleanupMerge();
            CollectionAssert.AreEqual(new List <Diff> {
                Diff.Equal("ca"), Diff.Insert("ba")
            }, diffs);
        }
        public void FindEquivalentLocation2_LocationInEquality_FindsLocation()
        {
            // Translate a location in text1 to text2.
            var diffs = new List <Diff>
            {
                Diff.Delete("a"),
                Diff.Insert("1234"),
                Diff.Equal("xyz")
            };

            Assert.Equal(5, diffs.FindEquivalentLocation2(2));
        }
        public void SingleDiff_WhenCleaned_Remains()
        {
            // Blank lines.
            var diffs = new List <Diff>
            {
                Diff.Equal("AAA"),
            }.CleanupSemanticLossless().ToList();

            Assert.Equal(new List <Diff>
            {
                Diff.Equal("AAA"),
            }, diffs);
        }
예제 #15
0
        public void EmptyMerge()
        {
            var diffs = new List <Diff>
            {
                Diff.Delete("b"),
                Diff.Insert("ab"),
                Diff.Equal("c")
            }.CleanupMerge().ToList();

            Assert.Equal(new List <Diff> {
                Diff.Insert("a"), Diff.Equal("bc")
            }, diffs);
        }
예제 #16
0
        public void EmptyEquality()
        {
            var diffs = new List <Diff>
            {
                Diff.Equal(""),
                Diff.Insert("a"),
                Diff.Equal("b")
            }.CleanupMerge().ToList();

            Assert.Equal(new List <Diff> {
                Diff.Insert("a"), Diff.Equal("b")
            }, diffs);
        }
예제 #17
0
        public void EmptyEquality()
        {
            var diffs = new List <Diff>
            {
                Diff.Equal(""),
                Diff.Insert("a"),
                Diff.Equal("b")
            };

            diffs.CleanupMerge();
            CollectionAssert.AreEqual(new List <Diff> {
                Diff.Insert("a"), Diff.Equal("b")
            }, diffs);
        }
        public void DiffPrettyHtmlTest()
        {
            // Pretty print.
            var diffs = new List <Diff>
            {
                Diff.Equal("a\n"),
                Diff.Delete("<B>b</B>"),
                Diff.Insert("c&d")
            };

            Assert.Equal(
                "<span>a&para;<br></span><del style=\"background:#ffe6e6;\">&lt;B&gt;b&lt;/B&gt;</del><ins style=\"background:#e6ffe6;\">c&amp;d</ins>",
                diffs.PrettyHtml());
        }
예제 #19
0
        public void ReverseOverlapElimination()
        {
            var diffs = new List <Diff>
            {
                Diff.Delete("xxxabc"),
                Diff.Insert("defxxx")
            }.CleanupSemantic();

            Assert.Equal(new List <Diff>
            {
                Diff.Insert("def"),
                Diff.Equal("xxx"),
                Diff.Delete("abc")
            }, diffs);
        }
        public void Text1_ReturnsText1()
        {
            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("jumps over the lazy", diffs.Text1());
        }
        public void HittingTheEnd()
        {
            var diffs = new List <Diff>
            {
                Diff.Equal("xa"),
                Diff.Delete("a"),
                Diff.Equal("a")
            }.CleanupSemanticLossless().ToList();

            Assert.Equal(new List <Diff>
            {
                Diff.Equal("xaa"),
                Diff.Delete("a")
            }, diffs);
        }
예제 #22
0
        public void SimpleElimination()
        {
            var diffs = new List <Diff>
            {
                Diff.Delete("a"),
                Diff.Equal("b"),
                Diff.Delete("c")
            }.CleanupSemantic();

            Assert.Equal(new List <Diff>
            {
                Diff.Delete("abc"),
                Diff.Insert("b")
            }, diffs);
        }
        public void LargeEquality()
        {
            var diffs = new List <Diff>
            {
                Diff.Insert(" "),
                Diff.Equal("a"),
                Diff.Insert("nd"),
                Diff.Equal(" [[Pennsylvania]]"),
                Diff.Delete(" and [[New")
            };

            var patch = Patch.FromDiffs(diffs);

            Assert.Equal(diffs,
                         Diff.Compute("a [[Pennsylvania]] and [[New", " and [[Pennsylvania]]", 0, false));
        }
        public void SentenceBoundaries()
        {
            var diffs = new List <Diff>
            {
                Diff.Equal("The xxx. The "),
                Diff.Insert("zzz. The "),
                Diff.Equal("yyy.")
            }.CleanupSemanticLossless().ToList();

            Assert.Equal(new List <Diff>
            {
                Diff.Equal("The xxx."),
                Diff.Insert(" The zzz."),
                Diff.Equal(" The yyy.")
            }, 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);
        }
        public void WordBoundaries()
        {
            var diffs = new List <Diff>
            {
                Diff.Equal("The c"),
                Diff.Insert("ow and the c"),
                Diff.Equal("at.")
            }.CleanupSemanticLossless().ToList();

            Assert.Equal(new List <Diff>
            {
                Diff.Equal("The "),
                Diff.Insert("cow and the "),
                Diff.Equal("cat.")
            }, diffs);
        }
예제 #27
0
        public void HittingTheEnd()
        {
            var diffs = new List <Diff>
            {
                Diff.Equal("xa"),
                Diff.Delete("a"),
                Diff.Equal("a")
            };

            diffs.CleanupSemanticLossless();
            CollectionAssert.AreEqual(new List <Diff>
            {
                Diff.Equal("xaa"),
                Diff.Delete("a")
            }, diffs);
        }
        public void OverlapElimination()
        {
            var diffs = new List <Diff>
            {
                Diff.Delete("abcxxx"),
                Diff.Insert("xxxdef")
            };

            diffs.CleanupSemantic();
            CollectionAssert.AreEqual(new List <Diff>
            {
                Diff.Delete("abc"),
                Diff.Equal("xxx"),
                Diff.Insert("def")
            }, 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());
        }
예제 #30
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);
        }