Switch to side-by-side view

--- a
+++ b/Allura/allura/tests/test_patience.py
@@ -0,0 +1,76 @@
+from os import path, environ
+from collections import defaultdict
+
+from allura.lib import patience
+
+def text2lines(text):
+    return [l + '\n' for l in text.split('\n')]
+
+def test_region():
+    r = patience.Region('foobar')
+    r2 = r.clone()
+    assert id(r) != id(r2)
+    assert '-'.join(r) == '-'.join(r2)
+    subr = r[1:5]
+    assert type(subr) is type(r)
+    assert ''.join(subr) == ''.join(r)[1:5]
+    repr(r)
+    repr(patience.Region('fffffffffffffffffffffffffffffffffffffffff'))
+
+def test_unified_diff():
+    text1 = '''\
+from paste.deploy import loadapp
+from paste.deploy import loadapp
+from paste.deploy import loadapp
+from paste.deploy import loadapp
+from paste.script.appinstall import SetupCommand
+from paste.script.appinstall import SetupCommand
+from paste.script.appinstall import SetupCommand
+from paste.script.appinstall import SetupCommand
+from paste.deploy import appconfig
+'''
+    text2 = '''\
+from paste.deploy import loadapp
+from paste.deploy import loadapp
+from paste.deploy import loadapp
+from paste.deploy import loadapp
+from paste.script.appinstall import SetupCommand2
+from paste.script.appinstall import SetupCommand3
+from paste.script.appinstall import SetupCommand4
+from paste.deploy import appconfig
+'''
+    line_uni_diff = '''\
+ from paste.deploy import loadapp
+ from paste.deploy import loadapp
+ from paste.deploy import loadapp
+-from paste.script.appinstall import SetupCommand
+-from paste.script.appinstall import SetupCommand
+-from paste.script.appinstall import SetupCommand
+-from paste.script.appinstall import SetupCommand
++from paste.script.appinstall import SetupCommand2
++from paste.script.appinstall import SetupCommand3
++from paste.script.appinstall import SetupCommand4
+ from paste.deploy import appconfig'''
+
+    line_diff = '''\
+ from paste.deploy import loadapp
+''' + line_uni_diff
+
+    lines1 = text2lines(text1)
+    lines2 = text2lines(text2)
+    diff = patience.unified_diff(lines1, lines2)
+    diff = ''.join(diff)
+    assert diff == '''\
+---  
++++  
+@@ -2,9 +2,8 @@
+%s
+ 
+''' % line_uni_diff, '=' + diff + '='
+
+    sm = patience.SequenceMatcher(None, lines1, lines2)
+    buf = ''
+    for prefix, line in patience.diff_gen(lines1, lines2, sm.get_opcodes()):
+        assert prefix[1] == ' '
+        buf += prefix[0] + line
+    assert buf == line_diff + '\n \n', '=' + buf + '='