A modified region detected between two versions of roughly the same content. Regions should be specified using 0 based notation, so add 1 to the start and end marks for line numbers in a file. An edit where beginA == endA && beginB > endB is an insert edit, that is sequence B inserted the elements in region [beginB, endB) at beginA. An edit where beginA > endA && beginB > endB is a replace edit, that is sequence B has replaced the range of elements between [beginA, endA) with those found in [beginB, endB).
示例#1
0
        public void testAddTwo()
        {
            Edit e1 = new Edit(1, 2, 1, 1);
            Edit e2 = new Edit(8, 8, 8, 12);
            EditList l = new EditList();
            l.Add(e1);
            l.Add(e2);
            Assert.AreEqual(2, l.size());
            Assert.AreSame(e1, l.get(0));
            Assert.AreSame(e2, l.get(1));

            IEnumerator i = l.GetEnumerator();
            i.Reset();
            i.MoveNext();
            Assert.AreSame(e1, i.Current);
            i.MoveNext();
            Assert.AreSame(e2, i.Current);

            Assert.IsTrue(l.Equals(l));
            Assert.IsFalse(l.Equals(new EditList()));

            EditList l2 = new EditList();
            l2.Add(e1);
            l2.Add(e2);
            Assert.IsTrue(l.Equals(l2));
            Assert.IsTrue(l2.Equals(l));
            Assert.AreEqual(l.GetHashCode(), l2.GetHashCode());
        }
示例#2
0
 public void testCreateEmpty()
 {
     Edit e = new Edit(1, 3);
     Assert.AreEqual(1, e.BeginA);
     Assert.AreEqual(1, e.EndA);
     Assert.AreEqual(3, e.BeginB);
     Assert.AreEqual(3, e.EndB);
 }
示例#3
0
 public void testCreate()
 {
     Edit e = new Edit(1, 2, 3, 4);
     Assert.AreEqual(1, e.BeginA);
     Assert.AreEqual(2, e.EndA);
     Assert.AreEqual(3, e.BeginB);
     Assert.AreEqual(4, e.EndB);
 }
示例#4
0
        public void testEquals1()
        {
            Edit e1 = new Edit(1, 2, 3, 4);
            Edit e2 = new Edit(1, 2, 3, 4);

            Assert.IsTrue(e1.Equals(e1));
            Assert.IsTrue(e1.Equals(e2));
            Assert.IsTrue(e2.Equals(e1));
            Assert.AreEqual(e1.GetHashCode(), e2.GetHashCode());
            Assert.IsFalse(e1.Equals(""));
        }
示例#5
0
        public void testAddOne()
        {
            Edit e = new Edit(1, 2, 1, 1);
            EditList l = new EditList();
            l.Add(e);
            Assert.AreEqual(1, l.size());
            Assert.IsFalse(l.isEmpty());
            Assert.AreSame(e, l.get(0));
            IEnumerator i = l.GetEnumerator();
            i.Reset();
            i.MoveNext();
            Assert.AreSame(e, i.Current);

            Assert.IsTrue(l.Equals(l));
            Assert.IsFalse(l.Equals(new EditList()));

            EditList l2 = new EditList();
            l2.Add(e);
            Assert.IsTrue(l.Equals(l2));
            Assert.IsTrue(l2.Equals(l));
            Assert.AreEqual(l.GetHashCode(), l2.GetHashCode());
        }
示例#6
0
 private static bool End(Edit edit, int a, int b)
 {
     return edit.EndA <= a && edit.EndB <= b;
 }
示例#7
0
 private static bool End(Edit edit, int a, int b)
 {
     return(edit.EndA <= a && edit.EndB <= b);
 }
示例#8
0
        public void testExtendB()
        {
            Edit e = new Edit(1, 2, 1, 1);

            e.ExtendB();
            Assert.AreEqual(new Edit(1, 2, 1, 2), e);

            e.ExtendB();
            Assert.AreEqual(new Edit(1, 2, 1, 3), e);
        }
示例#9
0
 public void testType_Replace()
 {
     Edit e = new Edit(1, 2, 1, 4);
     Assert.AreEqual(Edit.Type.REPLACE, e.EditType);
 }
示例#10
0
 public void testType_Insert()
 {
     Edit e = new Edit(1, 1, 1, 2);
     Assert.AreEqual(Edit.Type.INSERT, e.EditType);
 }
示例#11
0
 public void testType_Delete()
 {
     Edit e = new Edit(1, 2, 1, 1);
     Assert.AreEqual(Edit.Type.DELETE, e.EditType);
 }
示例#12
0
 public void testToString()
 {
     Edit e = new Edit(1, 2, 1, 4);
     Assert.AreEqual("REPLACE(1-2,1-4)", e.ToString());
 }
示例#13
0
		/// <summary>
		/// Returns a list describing the content edits performed within the hunk.
		/// </summary>
		/// <returns></returns>
		public EditList ToEditList()
		{
			var r = new EditList();
			byte[] buf = _file.Buffer;
			int c = RawParseUtils.nextLF(buf, _startOffset);
			int oLine = _oldImage.StartLine;
			int nLine = NewStartLine;
			Edit inEdit = null;

			for (; c < EndOffset; c = RawParseUtils.nextLF(buf, c))
			{
				bool breakScan;

				switch (buf[c])
				{
					case (byte)' ':
					case (byte)'\n':
						inEdit = null;
						oLine++;
						nLine++;
						continue;

					case (byte)'-':
						if (inEdit == null)
						{
							inEdit = new Edit(oLine - 1, nLine - 1);
							r.Add(inEdit);
						}
						oLine++;
						inEdit.ExtendA();
						continue;

					case (byte)'+':
						if (inEdit == null)
						{
							inEdit = new Edit(oLine - 1, nLine - 1);
							r.Add(inEdit);
						}
						nLine++;
						inEdit.ExtendB();
						continue;

					case (byte)'\\': // Matches "\ No newline at end of file"
						continue;

					default:
						breakScan = true;
						break;
				}

				if (breakScan)
				{
					break;
				}
			}

			return r;
		}
示例#14
0
 public void testRemove()
 {
     Edit e1 = new Edit(1, 2, 1, 1);
     Edit e2 = new Edit(8, 8, 8, 12);
     EditList l = new EditList();
     l.Add(e1);
     l.Add(e2);
     l.Remove(e1);
     Assert.AreEqual(1, l.size());
     Assert.AreSame(e2, l.get(0));
 }
示例#15
0
 public void testSet()
 {
     Edit e1 = new Edit(1, 2, 1, 1);
     Edit e2 = new Edit(3, 4, 3, 3);
     EditList l = new EditList();
     l.Add(e1);
     Assert.AreSame(e1, l.get(0));
     Assert.AreSame(e1, l.set(0, e2));
     Assert.AreSame(e2, l.get(0));
 }