58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
import io
|
|
|
|
from util import Diff
|
|
|
|
|
|
class TestDiff:
|
|
def testDiff(self):
|
|
assert Diff.diff(
|
|
[],
|
|
["one", "two", "three"]
|
|
) == [("+", ["one", "two","three"])]
|
|
|
|
assert Diff.diff(
|
|
["one", "two", "three"],
|
|
["one", "two", "three", "four", "five"]
|
|
) == [("=", 11), ("+", ["four", "five"])]
|
|
|
|
assert Diff.diff(
|
|
["one", "two", "three", "six"],
|
|
["one", "two", "three", "four", "five", "six"]
|
|
) == [("=", 11), ("+", ["four", "five"]), ("=", 3)]
|
|
|
|
assert Diff.diff(
|
|
["one", "two", "three", "hmm", "six"],
|
|
["one", "two", "three", "four", "five", "six"]
|
|
) == [("=", 11), ("-", 3), ("+", ["four", "five"]), ("=", 3)]
|
|
|
|
assert Diff.diff(
|
|
["one", "two", "three"],
|
|
[]
|
|
) == [("-", 11)]
|
|
|
|
def testUtf8(self):
|
|
assert Diff.diff(
|
|
["one", "\xe5\xad\xa6\xe4\xb9\xa0\xe4\xb8\x8b", "two", "three"],
|
|
["one", "\xe5\xad\xa6\xe4\xb9\xa0\xe4\xb8\x8b", "two", "three", "four", "five"]
|
|
) == [("=", 20), ("+", ["four", "five"])]
|
|
|
|
def testDiffLimit(self):
|
|
old_f = io.BytesIO(b"one\ntwo\nthree\nhmm\nsix")
|
|
new_f = io.BytesIO(b"one\ntwo\nthree\nfour\nfive\nsix")
|
|
actions = Diff.diff(list(old_f), list(new_f), limit=1024)
|
|
assert actions
|
|
|
|
old_f = io.BytesIO(b"one\ntwo\nthree\nhmm\nsix")
|
|
new_f = io.BytesIO(b"one\ntwo\nthree\nfour\nfive\nsix"*1024)
|
|
actions = Diff.diff(list(old_f), list(new_f), limit=1024)
|
|
assert actions is False
|
|
|
|
def testPatch(self):
|
|
old_f = io.BytesIO(b"one\ntwo\nthree\nhmm\nsix")
|
|
new_f = io.BytesIO(b"one\ntwo\nthree\nfour\nfive\nsix")
|
|
actions = Diff.diff(
|
|
list(old_f),
|
|
list(new_f)
|
|
)
|
|
old_f.seek(0)
|
|
assert Diff.patch(old_f, actions).getvalue() == new_f.getvalue()
|