⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svnmerge_test.py

📁 subversion-1.4.3-1.tar.gz 配置svn的源码
💻 PY
📖 第 1 页 / 共 3 页
字号:
#!/usr/bin/env python# -*- coding: utf-8 -*-# Copyright (c) 2005, Giovanni Bajo# All rights reserved.## This program is free software; you can redistribute it and/or# modify it under the terms of the GNU General Public License# as published by the Free Software Foundation; either version 2# of the License, or (at your option) any later version.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USAimport sys, osimport typesimport reimport unittestfrom cStringIO import StringIOimport shutilimport svnmergeimport statimport atexitimport getopt# True/False constants are Python 2.2+try:    True, Falseexcept NameError:    True, False = 1, 0class TestCase_kwextract(unittest.TestCase):    def test_basic(self):        self.assertEqual(svnmerge.kwextract("$Rev: 134 rasky $"), "134 rasky")        self.assertEqual(svnmerge.kwextract("$Date: 2005-09-25 13:45 CET+1$"),                         "2005-09-25 13:45 CET+1")    def test_failure(self):        self.assertEqual(svnmerge.kwextract("$Rev: $"), "<unknown>")        self.assertEqual(svnmerge.kwextract("$Date$"), "<unknown>")class TestCase_launch(unittest.TestCase):    if os.name == "nt":        cmd = "dir"    else:        cmd = "ls"    def test_basic(self):        out = svnmerge.launch(self.cmd)        self.assert_(out)        for o in out:            self.assertEqual(o[-1], "\n")    def test_failure(self):        self.assertRaises(svnmerge.LaunchError, svnmerge.launch, self.cmd*10)    def test_failurecode(self):        try:            svnmerge.launch(self.cmd*10)        except svnmerge.LaunchError, (ret, cmd, out):            self.assertNotEqual(ret, 0)            self.assertNotEqual(ret, None)            self.assert_(out)            self.assertEqual(cmd, self.cmd*10)        else:            self.fail("svnmerge.launch did not cause a LaunchError as expected")class TestCase_PrefixLines(unittest.TestCase):    def test_basic(self):        self.assertEqual("zz\n", svnmerge.prefix_lines("zz", "\n"))        self.assertEqual("zzfoo\n", svnmerge.prefix_lines("zz", "foo\n"))        self.assertEqual("zzfoo\nzzbar\n", svnmerge.prefix_lines("zz", "foo\nbar\n"))        self.assertEqual("zz\nzzfoo\n", svnmerge.prefix_lines("zz", "\nfoo\n"))        self.assertEqual("zz\nzzfoo\nzzbar\n", svnmerge.prefix_lines("zz", "\nfoo\nbar\n"))class TestCase_RevisionSet(unittest.TestCase):    def test_constr_string(self):        rs = svnmerge.RevisionSet("10- 15, 12-48,2 ")        self.assert_(17 in rs)        self.assert_(2 in rs)        self.assert_(9 not in rs)        rs = svnmerge.RevisionSet("10: 15, 12:48,2 ")        self.assert_(17 in rs)        self.assert_(2 in rs)        self.assert_(9 not in rs)    def test_constr_dict(self):        rs = svnmerge.RevisionSet({18:1, 24:1, 25:1, 43:1})        self.assert_(24 in rs)        self.assert_(18 in rs)        self.assert_(44 not in rs)    def test_constr_error(self):        self.assertRaises(ValueError, svnmerge.RevisionSet, "10-12-15")        self.assertRaises(ValueError, svnmerge.RevisionSet, "10;12-15")        self.assertRaises(ValueError, svnmerge.RevisionSet, "10,foo,3-15")        self.assertRaises(ValueError, svnmerge.RevisionSet, "10:12:15")        self.assertRaises(ValueError, svnmerge.RevisionSet, "10;12:15")        self.assertRaises(ValueError, svnmerge.RevisionSet, "10,foo,3:15")    def test_normalized(self):        rs = svnmerge.RevisionSet("8-15,16-18, 4-6, 9, 18, 1-1, 3-3")        self.assertEqual(rs.normalized(), [(1,1), (3,6), (8,18)])        self.assertEqual(str(rs), "1,3-6,8-18")        rs = svnmerge.RevisionSet("8:15,16:18, 4:6, 9, 18, 1:1, 3:3")        self.assertEqual(rs.normalized(), [(1,1), (3,6), (8,18)])        self.assertEqual(str(rs), "1,3-6,8-18")    def test_sorted(self):        "Test the sorted() function of the RevisionSet class."        rs = svnmerge.RevisionSet("8-15,16-18, 4-6, 9, 18, 1-1, 3-3")        self.assertEqual(rs.sorted(), [1, 3, 4, 5, 6, 8, 9, 10, 11,                                       12, 13, 14, 15, 16, 17, 18])        rs = svnmerge.RevisionSet("8:15,16:18, 4:6, 9, 18, 1:1, 3:3")        self.assertEqual(rs.sorted(), [1, 3, 4, 5, 6, 8, 9, 10, 11,                                       12, 13, 14, 15, 16, 17, 18])    def test_length(self):        rs = svnmerge.RevisionSet("3-8")        self.assertEqual(len(rs), 6)        rs = svnmerge.RevisionSet("3-8,4-10")        self.assertEqual(len(rs), 8)        rs = svnmerge.RevisionSet("1,3,5")        self.assertEqual(len(rs), 3)        rs = svnmerge.RevisionSet("3:8")        self.assertEqual(len(rs), 6)        rs = svnmerge.RevisionSet("3:8,4:10")        self.assertEqual(len(rs), 8)        rs = svnmerge.RevisionSet("1,3,5")        self.assertEqual(len(rs), 3)    def test_iter(self):        try:            iter        except NameError:            pass        else:            rs = svnmerge.RevisionSet("4-13,1-5,34,20-22,18-21")            self.assertEqual(list(iter(rs)), range(1,14)+range(18,23)+[34])            rs = svnmerge.RevisionSet("4:13,1:5,34,20:22,18:21")            self.assertEqual(list(iter(rs)), range(1,14)+range(18,23)+[34])    def test_union(self):        rs = svnmerge.RevisionSet("3-8,4-10") | svnmerge.RevisionSet("7-14,1")        self.assertEqual(str(rs), "1,3-14")        rs = svnmerge.RevisionSet("3:8,4:10") | svnmerge.RevisionSet("7:14,1")        self.assertEqual(str(rs), "1,3-14")    def test_subtraction(self):        rs = svnmerge.RevisionSet("3-8,4-10") - svnmerge.RevisionSet("7-14,1")        self.assertEqual(str(rs), "3-6")        rs = svnmerge.RevisionSet("3:8,4:10") - svnmerge.RevisionSet("7:14,1")        self.assertEqual(str(rs), "3-6")    def test_constr_empty(self):        rs = svnmerge.RevisionSet("")        self.assertEqual(str(rs), "")class TestCase_MinimalMergeIntervals(unittest.TestCase):    def test_basic(self):        rs = svnmerge.RevisionSet("4-8,12,18,24")        phantom = svnmerge.RevisionSet("8-11,13-16,19-23")        revs = svnmerge.minimal_merge_intervals(rs, phantom)        self.assertEqual(revs, [(4,12), (18,24)])class TestCase_SvnMerge(unittest.TestCase):    def svnmerge(self, cmds, *args, **kwargs):        return self.svnmerge2(cmds.split(), *args, **kwargs)    def svnmerge2(self, args, error=False, match=None, nonmatch=None):        out = StringIO()        sys.stdout = sys.stderr = out        try:            try:                # Clear svnmerge's internal cache before running any                # commands.                svnmerge._cache_svninfo = {}                ret = svnmerge.main(args)            except SystemExit, e:                ret = e.code        finally:            sys.stdout = sys.__stdout__            sys.stderr = sys.__stderr__        if ret is None:            ret = 0        if error:            self.assertNotEqual(ret, 0,                "svnmerge did not fail, with this output:\n%s" % out.getvalue())        else:            self.assertEqual(ret, 0,                "svnmerge failed, with this output:\n%s" % out.getvalue())        if match is not None:            self.assert_(re.search(match, out.getvalue()),                "pattern %r not found in output:\n%s" % (match, out.getvalue()))        if nonmatch is not None:            self.assert_(not re.search(nonmatch, out.getvalue()),                "pattern %r found in output:\n%s" % (nonmatch, out.getvalue()))        return out.getvalue()    def _parseoutput(self, ret, out, error=False, match=None, nonmatch=None):        if error:            self.assertNotEqual(ret,                                0,                                "svnmerge did not fail, with this output:\n%s" % out)        else:            self.assertEqual(ret,                             0,                             "svnmerge failed, with this output:\n%s" % out)        if match is not None:            self.assert_(re.search(match, out),                         "pattern %r not found in output:\n%s" % (match, out))        if nonmatch is not None:            self.assert_(not re.search(nonmatch, out),                         "pattern %r found in output:\n%s" % (nonmatch, out))        return out    def launch(self, cmd, **kwargs):        try:            out = svnmerge.launch(cmd, split_lines=False)        except svnmerge.LaunchError, (ret, cmd, out):            return self._parseoutput(ret, out, **kwargs)        return self._parseoutput(0, out, **kwargs)class TestCase_CommandLineOptions(TestCase_SvnMerge):    def test_empty(self):        self.svnmerge("")    def test_help_commands(self):        self.svnmerge("help")        self.svnmerge("--help")        self.svnmerge("-h")        for cmd in svnmerge.command_table.keys():            self.svnmerge("help %s" % cmd)            self.svnmerge("%s --help" % cmd)            self.svnmerge("%s -h" % cmd)    def test_wrong_commands(self):        self.svnmerge("asijdoiasjd", error=True)        self.svnmerge("help asijdoiasjd", error=True)    def test_wrong_option(self):        self.svnmerge("--asdsad", error=True)        self.svnmerge("help --asdsad", error=True)        self.svnmerge("init --asdsad", error=True)        self.svnmerge("--asdsad init", error=True)    def test_version(self):        out = self.svnmerge("--version")        self.assert_(out.find("Giovanni Bajo") >= 0)        out = self.svnmerge("-V")        self.assert_(out.find("Giovanni Bajo") >= 0)        out = self.svnmerge("init -V")        self.assert_(out.find("Giovanni Bajo") >= 0)    def testOptionOrder(self):        """Make sure you can intermix command name, arguments and        options in any order."""        self.svnmerge("--log avail",                      error=True,                      match=r"no integration info")  # accepted        self.svnmerge("-l avail",                      error=True,                      match=r"no integration info")  # accepted        self.svnmerge("-r123 merge",                      error=True,                      match=r"no integration info")  # accepted        self.svnmerge("-s -v -r92481 merge",                      error=True,                      match=r"no integration info")  # accepted        self.svnmerge("--log merge",                      error=True,                      match=r"option --log not recognized")        self.svnmerge("--diff foobar", error=True, match=r"foobar")        # This requires gnu_getopt support to be parsed        if hasattr(getopt, "gnu_getopt"):            self.svnmerge("-r123 merge . --log",                          error=True,                          match=r"option --log not recognized")def temp_path():    try:        return os.environ["TEMP"]    except KeyError:        pass    if os.name == "posix":        return "/tmp"    return "."def rmtree(path):    def onerror(func, path, excinfo):        if func in [os.remove, os.rmdir]:            if os.path.exists(path):                os.chmod(path, stat.S_IWRITE)                func(path)    if os.path.isdir(path):        shutil.rmtree(path, onerror=onerror)def get_template_path():    p = os.path.join(temp_path(), "__svnmerge_test_template")    return os.path.abspath(p)def get_test_path():    p = os.path.join(temp_path(), "__svnmerge_test")    return os.path.abspath(p)def abspath_to_url(path):    assert path == os.path.abspath(path)    path = path.replace("\\", "/")    if path[0] != '/':        path = '/' + path    return "file://" + pathclass TestCase_TestRepo(TestCase_SvnMerge):    def setUp(self):        """Creates a working copy of a branch at r13 with the        following structure, containing revisions (3-6, 13):          test-branch/           test1           test2           test3        ...from a repository with the following structure:          Path                        Created rev

⌨️ 快捷键说明

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