/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.64.282 by Jelmer Vernooij
Fix output stream to stdout for bzr fast-export.
1
# Copyright (C) 2010 Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
0.64.334 by Jelmer Vernooij
Remove old FSF address. Thanks Dan Callaghan.
14
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
0.64.282 by Jelmer Vernooij
Fix output stream to stdout for bzr fast-export.
15
16
"""Test the exporter."""
17
6628.1.2 by Jelmer Vernooij
Fix imports, move exporter.py, drop explorer metadata.
18
from __future__ import absolute_import
19
0.64.282 by Jelmer Vernooij
Fix output stream to stdout for bzr fast-export.
20
import os
21
import tempfile
22
import gzip
23
6628.1.2 by Jelmer Vernooij
Fix imports, move exporter.py, drop explorer metadata.
24
from .... import tests
0.64.282 by Jelmer Vernooij
Fix output stream to stdout for bzr fast-export.
25
6628.1.2 by Jelmer Vernooij
Fix imports, move exporter.py, drop explorer metadata.
26
from ..exporter import (
0.64.282 by Jelmer Vernooij
Fix output stream to stdout for bzr fast-export.
27
    _get_output_stream,
0.64.328 by Jelmer Vernooij
In "plain" mode, skip tags that contain characters not valid in Git.
28
    check_ref_format,
0.133.1 by Oleksandr Usov
Add function to rewrite refnames & tests for it
29
    sanitize_ref_name_for_git
0.64.282 by Jelmer Vernooij
Fix output stream to stdout for bzr fast-export.
30
    )
31
6628.1.2 by Jelmer Vernooij
Fix imports, move exporter.py, drop explorer metadata.
32
from . import (
0.64.282 by Jelmer Vernooij
Fix output stream to stdout for bzr fast-export.
33
    FastimportFeature,
34
    )
35
36
37
class TestOutputStream(tests.TestCase):
38
39
    _test_needs_features = [FastimportFeature]
40
41
    def test_get_output_stream_stdout(self):
42
        # - returns standard out
43
        self.assertIsNot(None, _get_output_stream("-"))
44
45
    def test_get_source_gz(self):
46
        fd, filename = tempfile.mkstemp(suffix=".gz")
47
        os.close(fd)
48
        stream = _get_output_stream(filename)
49
        stream.write("bla")
50
        stream.close()
51
        # files ending in .gz are automatically decompressed.
52
        f = gzip.GzipFile(filename)
53
        self.assertEquals("bla", f.read())
54
        f.close()
55
56
    def test_get_source_file(self):
57
        # other files are opened as regular files.
58
        fd, filename = tempfile.mkstemp()
59
        os.close(fd)
60
        stream = _get_output_stream(filename)
61
        stream.write("foo")
62
        stream.close()
63
        f = open(filename, 'r')
64
        self.assertEquals("foo", f.read())
65
        f.close()
0.64.328 by Jelmer Vernooij
In "plain" mode, skip tags that contain characters not valid in Git.
66
67
68
# from dulwich.tests.test_repository:
69
class CheckRefFormatTests(tests.TestCase):
70
    """Tests for the check_ref_format function.
71
72
    These are the same tests as in the git test suite.
73
    """
74
75
    def test_valid(self):
76
        self.assertTrue(check_ref_format('heads/foo'))
77
        self.assertTrue(check_ref_format('foo/bar/baz'))
78
        self.assertTrue(check_ref_format('refs///heads/foo'))
79
        self.assertTrue(check_ref_format('foo./bar'))
80
        self.assertTrue(check_ref_format('heads/foo@bar'))
81
        self.assertTrue(check_ref_format('heads/fix.lock.error'))
82
83
    def test_invalid(self):
84
        self.assertFalse(check_ref_format('foo'))
0.133.1 by Oleksandr Usov
Add function to rewrite refnames & tests for it
85
        self.assertFalse(check_ref_format('foo/.bar'))
0.64.328 by Jelmer Vernooij
In "plain" mode, skip tags that contain characters not valid in Git.
86
        self.assertFalse(check_ref_format('heads/foo/'))
0.133.1 by Oleksandr Usov
Add function to rewrite refnames & tests for it
87
        self.assertFalse(check_ref_format('heads/foo.'))
0.64.328 by Jelmer Vernooij
In "plain" mode, skip tags that contain characters not valid in Git.
88
        self.assertFalse(check_ref_format('./foo'))
89
        self.assertFalse(check_ref_format('.refs/foo'))
90
        self.assertFalse(check_ref_format('heads/foo..bar'))
91
        self.assertFalse(check_ref_format('heads/foo?bar'))
92
        self.assertFalse(check_ref_format('heads/foo.lock'))
93
        self.assertFalse(check_ref_format('heads/v@{ation'))
0.133.1 by Oleksandr Usov
Add function to rewrite refnames & tests for it
94
        self.assertFalse(check_ref_format('heads/foo\\bar'))
0.64.328 by Jelmer Vernooij
In "plain" mode, skip tags that contain characters not valid in Git.
95
        self.assertFalse(check_ref_format('heads/foo\bar'))
0.133.1 by Oleksandr Usov
Add function to rewrite refnames & tests for it
96
        self.assertFalse(check_ref_format('heads/foo bar'))
97
        self.assertFalse(check_ref_format('heads/foo\020bar'))
98
        self.assertFalse(check_ref_format('heads/foo\177bar'))
99
0.133.3 by Oleksandr Usov
Implement comments from patch review:
100
0.133.1 by Oleksandr Usov
Add function to rewrite refnames & tests for it
101
class CheckRefnameRewriting(tests.TestCase):
102
    """Tests for sanitize_ref_name_for_git function"""
103
104
    def test_passthrough_valid(self):
0.133.3 by Oleksandr Usov
Implement comments from patch review:
105
        self.assertEqual(sanitize_ref_name_for_git('heads/foo'), 'heads/foo')
106
        self.assertEqual(sanitize_ref_name_for_git('foo/bar/baz'), 'foo/bar/baz')
107
        self.assertEqual(sanitize_ref_name_for_git('refs///heads/foo'), 'refs///heads/foo')
108
        self.assertEqual(sanitize_ref_name_for_git('foo./bar'), 'foo./bar')
109
        self.assertEqual(sanitize_ref_name_for_git('heads/foo@bar'), 'heads/foo@bar')
110
        self.assertEqual(sanitize_ref_name_for_git('heads/fix.lock.error'), 'heads/fix.lock.error')
0.133.1 by Oleksandr Usov
Add function to rewrite refnames & tests for it
111
112
    def test_rewrite_invalid(self):
0.133.3 by Oleksandr Usov
Implement comments from patch review:
113
        self.assertTrue(check_ref_format(sanitize_ref_name_for_git('foo./bar')))
114
        self.assertTrue(check_ref_format(sanitize_ref_name_for_git('heads/foo/')))
115
        self.assertTrue(check_ref_format(sanitize_ref_name_for_git('heads/foo.')))
116
        self.assertTrue(check_ref_format(sanitize_ref_name_for_git('./foo')))
117
        self.assertTrue(check_ref_format(sanitize_ref_name_for_git('.refs/foo')))
118
        self.assertTrue(check_ref_format(sanitize_ref_name_for_git('heads/foo..bar')))
119
        self.assertTrue(check_ref_format(sanitize_ref_name_for_git('heads/foo?bar')))
120
        self.assertTrue(check_ref_format(sanitize_ref_name_for_git('heads/foo.lock')))
121
        self.assertTrue(check_ref_format(sanitize_ref_name_for_git('heads/v@{ation')))
122
        self.assertTrue(check_ref_format(sanitize_ref_name_for_git('heads/foo\bar')))
123
        self.assertTrue(check_ref_format(sanitize_ref_name_for_git('heads/foo\\bar')))
124
        self.assertTrue(check_ref_format(sanitize_ref_name_for_git('heads/foo bar')))
125
        self.assertTrue(check_ref_format(sanitize_ref_name_for_git('heads/foo\020bar')))
126
        self.assertTrue(check_ref_format(sanitize_ref_name_for_git('heads/foo\177bar')))