import difflib
|
f |
import difflib
|
from test import test_support
|
|
from test import test_support
|
import unittest
|
|
import unittest
|
import doctest
|
|
import doctest
|
|
|
|
class TestSFbugs(unittest.TestCase):
|
|
class TestSFbugs(unittest.TestCase):
|
|
|
|
def test_ratio_for_null_seqn(self):
|
|
def test_ratio_for_null_seqn(self):
|
# Check clearing of SF bug 763023
|
|
# Check clearing of SF bug 763023
|
s = difflib.SequenceMatcher(None, [], [])
|
|
s = difflib.SequenceMatcher(None, [], [])
|
self.assertEqual(s.ratio(), 1)
|
|
self.assertEqual(s.ratio(), 1)
|
self.assertEqual(s.quick_ratio(), 1)
|
|
self.assertEqual(s.quick_ratio(), 1)
|
self.assertEqual(s.real_quick_ratio(), 1)
|
|
self.assertEqual(s.real_quick_ratio(), 1)
|
|
|
|
def test_comparing_empty_lists(self):
|
|
def test_comparing_empty_lists(self):
|
# Check fix for bug #979794
|
|
# Check fix for bug #979794
|
group_gen = difflib.SequenceMatcher(None, [], []).get_grouped_opcodes()
|
|
group_gen = difflib.SequenceMatcher(None, [], []).get_grouped_opcodes()
|
self.assertRaises(StopIteration, group_gen.next)
|
|
self.assertRaises(StopIteration, group_gen.next)
|
diff_gen = difflib.unified_diff([], [])
|
|
diff_gen = difflib.unified_diff([], [])
|
self.assertRaises(StopIteration, diff_gen.next)
|
|
self.assertRaises(StopIteration, diff_gen.next)
|
|
|
|
|
n |
patch914575_from = '''
|
|
|
1. Beautiful is beTTer than ugly.
|
|
|
2. Explicit is better than implicit.
|
|
|
3. Simple is better than complex.
|
|
|
4. Complex is better than complicated.
|
|
|
'''
|
|
|
|
|
|
patch914575_to = '''
|
|
|
1. Beautiful is better than ugly.
|
|
|
3. Simple is better than complex.
|
|
|
4. Complicated is better than complex.
|
|
|
5. Flat is better than nested.
|
|
|
'''
|
|
|
|
|
|
patch914575_full_expectation = '''
|
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
|
<html>
|
|
|
<head>
|
|
|
<meta http-equiv="Content-Type"
|
|
|
content="text/html; charset=ISO-8859-1" />
|
|
|
<title>Full Side by Side Difference</title>
|
|
|
<style type="text/css">
|
|
|
.diff_header {background-color:#e0e0e0}
|
|
|
td.diff_header {text-align:right}
|
|
|
.diff_next {background-color:#c0c0c0}
|
|
|
.diff_add {background-color:#aaffaa}
|
|
|
.diff_chg {background-color:#ffff77}
|
|
|
.diff_sub {background-color:#ffaaaa}
|
|
|
</style>
|
|
|
</head>
|
|
|
<body>
|
|
|
<h2>full</h2>
|
|
|
|
|
|
<table summary="s_full" id="difflib_chg_to1__top" border="3"
|
|
|
cellspacing="0" cellpadding="0" rules="groups"
|
|
|
style="font-family:Courier">
|
|
|
<colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup>
|
|
|
<colgroup></colgroup> <colgroup></colgroup>
|
|
|
<thead><tr><th colspan="2" class="diff_header">from</th><th class="diff_next"><br /></th><th colspan="2" class="diff_header">to</th></tr></thead><tbody><tr><td class="diff_header" id="from1_1">1</td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
<td class="diff_next" id="difflib_chg_to1__0"><a href="#difflib_chg_to1__0">f</a></td>
|
|
|
<td class="diff_header" id="to1_1">1</td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_2">2</td><td nowrap="nowrap"> 1. Beautiful is be<span class="diff_chg">TT</span>er than ugly.
|
|
|
</td>
|
|
|
<td class="diff_next"><a href="#difflib_chg_to1__1">n</a></td>
|
|
|
<td class="diff_header" id="to1_2">2</td><td nowrap="nowrap"> 1. Beautiful is be<span class="diff_chg">tt</span>er than ugly.
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_3">3</td><td nowrap="nowrap"><span class="diff_sub"> 2. Explicit is better than implicit.
|
|
|
</span></td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header"></td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_4">4</td><td nowrap="nowrap"> 3. Simple is better than complex.
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_3">3</td><td nowrap="nowrap"> 3.<span class="diff_add"> </span> Simple is better than complex.
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_5">5</td><td nowrap="nowrap"><span class="diff_sub"> 4. Complex is better than complicated.
|
|
|
</span></td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_4">4</td><td nowrap="nowrap"><span class="diff_add"> 4. Complicated is better than complex.
|
|
|
</span></td>
|
|
|
</tr><tr><td class="diff_header"></td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_5">5</td><td nowrap="nowrap"><span class="diff_add"> 5. Flat is better than nested.
|
|
|
</span></td>
|
|
|
</tr><tr><td class="diff_header" id="from1_6">6</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_6">6</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_7">7</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_7">7</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_8">8</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_8">8</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_9">9</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_9">9</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_10">10</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_10">10</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_11">11</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_11">11</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_12">12</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next" id="difflib_chg_to1__1"></td>
|
|
|
<td class="diff_header" id="to1_12">12</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_13">13</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_13">13</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_14">14</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_14">14</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_15">15</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_15">15</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_16">16</td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_16">16</td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_17">17</td><td nowrap="nowrap"> 1. Beautiful is be<span class="diff_chg">TT</span>er than ugly.
|
|
|
</td>
|
|
|
<td class="diff_next"><a href="#difflib_chg_to1__2">n</a></td>
|
|
|
<td class="diff_header" id="to1_17">17</td><td nowrap="nowrap"> 1. Beautiful is be<span class="diff_chg">tt</span>er than ugly.
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_18">18</td><td nowrap="nowrap"><span class="diff_sub"> 2. Explicit is better than implicit.
|
|
|
</span></td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header"></td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_19">19</td><td nowrap="nowrap"> 3. Simple is better than complex.
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_18">18</td><td nowrap="nowrap"> 3.<span class="diff_add"> </span> Simple is better than complex.
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_20">20</td><td nowrap="nowrap"><span class="diff_sub"> 4. Complex is better than complicated.
|
|
|
</span></td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_19">19</td><td nowrap="nowrap"><span class="diff_add"> 4. Complicated is better than complex.
|
|
|
</span></td>
|
|
|
</tr><tr><td class="diff_header"></td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_20">20</td><td nowrap="nowrap"><span class="diff_add"> 5. Flat is better than nested.
|
|
|
</span></td>
|
|
|
</tr><tr><td class="diff_header" id="from1_21">21</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_21">21</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_22">22</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_22">22</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_23">23</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_23">23</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_24">24</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_24">24</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_25">25</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_25">25</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_26">26</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_26">26</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_27">27</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next" id="difflib_chg_to1__2"></td>
|
|
|
<td class="diff_header" id="to1_27">27</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_28">28</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_28">28</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_29">29</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_29">29</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_30">30</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_30">30</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_31">31</td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_31">31</td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_32">32</td><td nowrap="nowrap"> 1. Beautiful is be<span class="diff_chg">TT</span>er than ugly.
|
|
|
</td>
|
|
|
<td class="diff_next"><a href="#difflib_chg_to1__top">t</a></td>
|
|
|
<td class="diff_header" id="to1_32">32</td><td nowrap="nowrap"> 1. Beautiful is be<span class="diff_chg">tt</span>er than ugly.
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_33">33</td><td nowrap="nowrap"><span class="diff_sub"> 2. Explicit is better than implicit.
|
|
|
</span></td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header"></td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_34">34</td><td nowrap="nowrap"> 3. Simple is better than complex.
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_33">33</td><td nowrap="nowrap"> 3.<span class="diff_add"> </span> Simple is better than complex.
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_35">35</td><td nowrap="nowrap"><span class="diff_sub"> 4. Complex is better than complicated.
|
|
|
</span></td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_34">34</td><td nowrap="nowrap"><span class="diff_add"> 4. Complicated is better than complex.
|
|
|
</span></td>
|
|
|
</tr><tr><td class="diff_header"></td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_35">35</td><td nowrap="nowrap"><span class="diff_add"> 5. Flat is better than nested.
|
|
|
</span></td>
|
|
|
</tr><tr><td class="diff_header" id="from1_36">36</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_36">36</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_37">37</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_37">37</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_38">38</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_38">38</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_39">39</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_39">39</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_40">40</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_40">40</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_41">41</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_41">41</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_42">42</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_42">42</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_43">43</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_43">43</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_44">44</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_44">44</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_45">45</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_45">45</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr></tbody>
|
|
|
</table>
|
|
|
<table summary="Legends" style="font-family:Courier">
|
|
|
<tr> <th colspan="2"> Legends </th> </tr>
|
|
|
<tr> <td> <table border="" summary="Colors">
|
|
|
<tr><th> Colors </th> </tr>
|
|
|
<tr><td class="diff_add"> Added </td></tr>
|
|
|
<tr><td class="diff_chg">Changed</td> </tr>
|
|
|
<tr><td class="diff_sub">Deleted</td> </tr>
|
|
|
</table></td>
|
|
|
<td> <table border="" summary="Links">
|
|
|
<tr><th colspan="2"> Links </th> </tr>
|
|
|
<tr><td>(f)irst change</td> </tr>
|
|
|
<tr><td>(n)ext change</td> </tr>
|
|
|
<tr><td>(t)op</td> </tr>
|
|
|
</table></td> </tr>
|
|
|
</table>
|
|
|
</body>
|
|
|
</html>'''
|
|
|
|
|
|
patch914575_context_expectation = '''
|
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
|
<html>
|
|
|
<head>
|
|
|
<meta http-equiv="Content-Type"
|
|
|
content="text/html; charset=ISO-8859-1" />
|
|
|
<title>Context Side by Side Difference</title>
|
|
|
<style type="text/css">
|
|
|
.diff_header {background-color:#e0e0e0}
|
|
|
td.diff_header {text-align:right}
|
|
|
.diff_next {background-color:#c0c0c0}
|
|
|
.diff_add {background-color:#aaffaa}
|
|
|
.diff_chg {background-color:#ffff77}
|
|
|
.diff_sub {background-color:#ffaaaa}
|
|
|
</style>
|
|
|
</head>
|
|
|
<body>
|
|
|
<h1>context</h1>
|
|
|
|
|
|
<table summary="s_context" id="difflib_chg_to1__top" border="3"
|
|
|
cellspacing="0" cellpadding="0" rules="groups"
|
|
|
style="font-family:Courier">
|
|
|
<colgroup></colgroup> <colgroup></colgroup> <colgroup></colgroup>
|
|
|
<colgroup></colgroup> <colgroup></colgroup>
|
|
|
<thead><tr><th colspan="2" class="diff_header">from</th><th class="diff_next"><br /></th><th colspan="2" class="diff_header">to</th></tr></thead><tbody><tr><td class="diff_header" id="from1_1">1</td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
<td class="diff_next" id="difflib_chg_to1__0"><a href="#difflib_chg_to1__0">f</a></td>
|
|
|
<td class="diff_header" id="to1_1">1</td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_2">2</td><td nowrap="nowrap"> 1. Beautiful is be<span class="diff_chg">TT</span>er than ugly.
|
|
|
</td>
|
|
|
<td class="diff_next"><a href="#difflib_chg_to1__1">n</a></td>
|
|
|
<td class="diff_header" id="to1_2">2</td><td nowrap="nowrap"> 1. Beautiful is be<span class="diff_chg">tt</span>er than ugly.
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_3">3</td><td nowrap="nowrap"><span class="diff_sub"> 2. Explicit is better than implicit.
|
|
|
</span></td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header"></td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_4">4</td><td nowrap="nowrap"> 3. Simple is better than complex.
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_3">3</td><td nowrap="nowrap"> 3.<span class="diff_add"> </span> Simple is better than complex.
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_5">5</td><td nowrap="nowrap"><span class="diff_sub"> 4. Complex is better than complicated.
|
|
|
</span></td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_4">4</td><td nowrap="nowrap"><span class="diff_add"> 4. Complicated is better than complex.
|
|
|
</span></td>
|
|
|
</tr><tr><td class="diff_header"></td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_5">5</td><td nowrap="nowrap"><span class="diff_add"> 5. Flat is better than nested.
|
|
|
</span></td>
|
|
|
</tr><tr><td class="diff_header" id="from1_6">6</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_6">6</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_7">7</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_7">7</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_8">8</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_8">8</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_9">9</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_9">9</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr></tbody><tbody>
|
|
|
<tr><td class="diff_header" id="from1_14">14</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next" id="difflib_chg_to1__1"></td>
|
|
|
<td class="diff_header" id="to1_14">14</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_15">15</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_15">15</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_16">16</td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_16">16</td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_17">17</td><td nowrap="nowrap"> 1. Beautiful is be<span class="diff_chg">TT</span>er than ugly.
|
|
|
</td>
|
|
|
<td class="diff_next"><a href="#difflib_chg_to1__2">n</a></td>
|
|
|
<td class="diff_header" id="to1_17">17</td><td nowrap="nowrap"> 1. Beautiful is be<span class="diff_chg">tt</span>er than ugly.
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_18">18</td><td nowrap="nowrap"><span class="diff_sub"> 2. Explicit is better than implicit.
|
|
|
</span></td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header"></td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_19">19</td><td nowrap="nowrap"> 3. Simple is better than complex.
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_18">18</td><td nowrap="nowrap"> 3.<span class="diff_add"> </span> Simple is better than complex.
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_20">20</td><td nowrap="nowrap"><span class="diff_sub"> 4. Complex is better than complicated.
|
|
|
</span></td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_19">19</td><td nowrap="nowrap"><span class="diff_add"> 4. Complicated is better than complex.
|
|
|
</span></td>
|
|
|
</tr><tr><td class="diff_header"></td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_20">20</td><td nowrap="nowrap"><span class="diff_add"> 5. Flat is better than nested.
|
|
|
</span></td>
|
|
|
</tr><tr><td class="diff_header" id="from1_21">21</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_21">21</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_22">22</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_22">22</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_23">23</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_23">23</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_24">24</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_24">24</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr></tbody><tbody>
|
|
|
<tr><td class="diff_header" id="from1_29">29</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next" id="difflib_chg_to1__2"></td>
|
|
|
<td class="diff_header" id="to1_29">29</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_30">30</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_30">30</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_31">31</td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_31">31</td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_32">32</td><td nowrap="nowrap"> 1. Beautiful is be<span class="diff_chg">TT</span>er than ugly.
|
|
|
</td>
|
|
|
<td class="diff_next"><a href="#difflib_chg_to1__top">t</a></td>
|
|
|
<td class="diff_header" id="to1_32">32</td><td nowrap="nowrap"> 1. Beautiful is be<span class="diff_chg">tt</span>er than ugly.
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_33">33</td><td nowrap="nowrap"><span class="diff_sub"> 2. Explicit is better than implicit.
|
|
|
</span></td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header"></td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_34">34</td><td nowrap="nowrap"> 3. Simple is better than complex.
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_33">33</td><td nowrap="nowrap"> 3.<span class="diff_add"> </span> Simple is better than complex.
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_35">35</td><td nowrap="nowrap"><span class="diff_sub"> 4. Complex is better than complicated.
|
|
|
</span></td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_34">34</td><td nowrap="nowrap"><span class="diff_add"> 4. Complicated is better than complex.
|
|
|
</span></td>
|
|
|
</tr><tr><td class="diff_header"></td><td nowrap="nowrap">
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_35">35</td><td nowrap="nowrap"><span class="diff_add"> 5. Flat is better than nested.
|
|
|
</span></td>
|
|
|
</tr><tr><td class="diff_header" id="from1_36">36</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_36">36</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_37">37</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_37">37</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_38">38</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_38">38</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr><tr><td class="diff_header" id="from1_39">39</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
<td class="diff_next"></td>
|
|
|
<td class="diff_header" id="to1_39">39</td><td nowrap="nowrap">123
|
|
|
</td>
|
|
|
</tr></tbody>
|
|
|
</table>
|
|
|
<table summary="Legends" style="font-family:Courier">
|
|
|
<tr> <th colspan="2"> Legends </th> </tr>
|
|
|
<tr> <td> <table border="" summary="Colors">
|
|
|
<tr><th> Colors </th> </tr>
|
|
|
<tr><td class="diff_add"> Added </td></tr>
|
|
|
<tr><td class="diff_chg">Changed</td> </tr>
|
|
|
<tr><td class="diff_sub">Deleted</td> </tr>
|
|
|
</table></td>
|
|
|
<td> <table border="" summary="Links">
|
|
|
<tr><th colspan="2"> Links </th> </tr>
|
|
|
<tr><td>(f)irst change</td> </tr>
|
|
|
<tr><td>(n)ext change</td> </tr>
|
|
|
<tr><td>(t)op</td> </tr>
|
|
|
</table></td> </tr>
|
|
|
</table>
|
|
|
</body>
|
|
|
</html>'''
|
|
|
|
|
|
class TestSFpatches(unittest.TestCase):
|
|
|
|
|
|
def test_html_diff(self):
|
|
|
# Check SF patch 914575 for generating HTML differences
|
|
|
a = patch914575_from + '123\n'*10
|
|
|
a = a * 3
|
|
|
a = a.splitlines(1)
|
|
|
b = patch914575_to + '123\n'*10
|
|
|
b = b * 3
|
|
|
b = b.splitlines(1)
|
|
|
i = difflib.HtmlDiff(prefix=['from1_','to1_'])
|
|
|
full = i.make_file(a,b,'from','to',context=False,
|
|
|
numlines=5,title='Full Side by Side Difference',header='<h2>full</h2>',summary='s_full')
|
|
|
context = i.make_file(a,b,'from','to',context=True,
|
|
|
numlines=3,title='Context Side by Side Difference',header='<h1>context</h1>',summary='s_context')
|
|
|
# Save following two lines for baselining test
|
|
|
#open('full.html','w').write(full)
|
|
|
#open('context.html','w').write(context)
|
|
|
|
|
|
self.assertEqual(patch914575_full_expectation,full)
|
|
|
self.assertEqual(patch914575_context_expectation,context)
|
|
|
|
Doctests = doctest.DocTestSuite(difflib)
|
|
Doctests = doctest.DocTestSuite(difflib)
|
|
|
|
test_support.run_unittest(TestSFbugs, Doctests)
|
t |
test_support.run_unittest(TestSFpatches, TestSFbugs, Doctests)
|