patch.py

来自「一款基于web的项目管理、bug跟踪系统。提供了与svn集成的操作界面、问题跟踪」· Python 代码 · 共 135 行

PY
135
字号
# -*- coding: utf-8 -*-## Copyright (C) 2006 Edgewall Software# All rights reserved.## This software is licensed as described in the file COPYING, which# you should have received as part of this distribution. The terms# are also available at http://trac.edgewall.org/wiki/TracLicense.## This software consists of voluntary contributions made by many# individuals. For the exact contribution history, see the revision# history and logs, available at http://trac.edgewall.org/log/.import htmlentitydefsimport osimport reimport unittestfrom genshi.core import Streamfrom genshi.input import HTMLParser, XMLfrom trac.mimeview.api import Mimeview, Contextfrom trac.mimeview.patch import PatchRendererfrom trac.test import EnvironmentStub, Mock, MockPermfrom trac.web.chrome import Chromefrom trac.web.href import Hrefclass PatchRendererTestCase(unittest.TestCase):    def setUp(self):        env = EnvironmentStub(enable=[Chrome, PatchRenderer])        req = Mock(base_path='',chrome={}, args={},                   abs_href=Href('/'), href=Href('/'),                   perm=MockPerm(), authname=None, tz=None)        self.context = Context.from_request(req)        self.patch = Mimeview(env).renderers[0]        patch_html = open(os.path.join(os.path.split(__file__)[0],                                       'patch.html'))        self.patch_html = Stream(list(HTMLParser(patch_html)))    def _expected(self, expected_id):        return self.patch_html.select('//div[@id="%s"]/div' % expected_id)    def _test(self, expected_id, result):        expected = str(self._expected(expected_id))        result = str(XML(result))        expected, result = expected.splitlines(), result.splitlines()        for exp, res in zip(expected, result):            self.assertEquals(exp, res)        self.assertEquals(len(expected), len(result))    def test_simple(self):        """        Simple patch rendering        """        result = self.patch.render(self.context, None, """--- README.orig 2006-10-27 14:42:04.062500000 +0200+++ README      2006-10-27 14:42:28.125000000 +0200@@ -1,5 +1,5 @@ -----base-base-base+be+the base+base modified .""")        self.assertTrue(result)        self._test('simple', result)    def test_no_newline_in_base(self):        """        Simple regression test for #4027 ("No newline at end of file")        """        result = self.patch.render(self.context, None, """--- nonewline   2006-10-27 08:36:48.453125000 +0200+++ newline     2006-10-27 08:36:57.187500000 +0200@@ -1 +1 @@-ONELINE\ No newline at end of file+ONELINE        """)        self.assertTrue(result)        self._test('no_newline_in_base', result)    def test_no_newline_in_changed(self):        """        Another simple regression test for #4027 ("No newline at end of file")        """        result = self.patch.render(self.context, None, """--- newline     2006-10-27 08:36:57.187500000 +0200+++ nonewline   2006-10-27 08:36:48.453125000 +0200@@ -1 +1 @@-ONELINE+ONELINE\ No newline at end of file""")        self.assertTrue(result)        self._test('no_newline_in_changed', result)    def test_diff_to_hdf_expandtabs(self):        """Regression test related to #4557"""        changes = self.patch._diff_to_hdf(            ['--- hello.c 1',             '+++ hello.c 2',             '@@ -1 +1 @@',             '-aa\tb',             '+aaxb'], 8)        self.assertEquals('aa<del>&nbsp; &nbsp; &nbsp; </del>b',                          str(changes[0]['diffs'][0][0]['base']['lines'][0]))        self.assertEquals('aa<ins>x</ins>b',                          str(changes[0]['diffs'][0][0]['changed']['lines'][0]))    def test_diff_to_hdf_leading_ws(self):        """Regression test related to #5795"""        changes = self.patch._diff_to_hdf(            ['--- hello.c 1',             '+++ hello.c 2',             '@@ -1 +1 @@',             '-*a',             '+ *a'], 8)        self.assertEquals('<del></del>*a',                          str(changes[0]['diffs'][0][0]['base']['lines'][0]))        self.assertEquals('<ins>&nbsp;</ins>*a',                          str(changes[0]['diffs'][0][0]['changed']['lines'][0]))def suite():    suite = unittest.TestSuite()    suite.addTest(unittest.makeSuite(PatchRendererTestCase, 'test'))    return suiteif __name__ == '__main__':    unittest.main(defaultTest='suite')

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?