/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.64.1 by Ian Clatworthy
1st cut: gfi parser + --info processing method
1
# Copyright (C) 2008 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
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
"""Test the Import parsing"""
18
19
import StringIO
20
21
from bzrlib import tests
22
23
from bzrlib.plugins.fastimport import (
24
    errors,
25
    parser,
26
    )
27
28
29
class TestLineBasedParser(tests.TestCase):
30
31
    def test_push_line(self):
32
        s = StringIO.StringIO("foo\nbar\nbaz\n")
33
        p = parser.LineBasedParser(s)
34
        self.assertEqual('foo', p.next_line())
35
        self.assertEqual('bar', p.next_line())
36
        p.push_line('bar')
37
        self.assertEqual('bar', p.next_line())
38
        self.assertEqual('baz', p.next_line())
39
        self.assertEqual(None, p.next_line())
40
41
    def test_read_bytes(self):
42
        s = StringIO.StringIO("foo\nbar\nbaz\n")
43
        p = parser.LineBasedParser(s)
44
        self.assertEqual('fo', p.read_bytes(2))
45
        self.assertEqual('o\nb', p.read_bytes(3))
46
        self.assertEqual('ar', p.next_line())
47
        # Test that the line buffer is ignored
48
        p.push_line('bar')
49
        self.assertEqual('baz', p.read_bytes(3))
50
        # Test missing bytes
51
        self.assertRaises(errors.MissingBytes, p.read_bytes, 10)
52
53
    def test_read_until(self):
54
        # TODO
55
        return
56
        s = StringIO.StringIO("foo\nbar\nbaz\nabc\ndef\nghi\n")
57
        p = parser.LineBasedParser(s)
58
        self.assertEqual('foo\nbar', p.read_until('baz'))
59
        self.assertEqual('abc', p.next_line())
60
        # Test that the line buffer is ignored
61
        p.push_line('abc')
62
        self.assertEqual('def', p.read_until('ghi'))
63
        # Test missing terminator
64
        self.assertRaises(errors.MissingTerminator, p.read_until('>>>'))
65
66
67
# Sample text
68
_sample_import_text = """
69
progress completed
70
# Test blob formats
71
blob
72
mark :1
73
data 4
0.65.5 by James Westby
Make the parser handle multiple words in the committer name.
74
aaaablob
0.64.1 by Ian Clatworthy
1st cut: gfi parser + --info processing method
75
data 5
76
bbbbb
77
# Commit formats
0.65.5 by James Westby
Make the parser handle multiple words in the committer name.
78
commit refs/heads/master
79
mark :2
80
committer bugs bunny <bugs@bunny.org> now
0.64.1 by Ian Clatworthy
1st cut: gfi parser + --info processing method
81
data 14
82
initial import
83
M 644 inline README
84
data 18
85
Welcome from bugs
0.65.5 by James Westby
Make the parser handle multiple words in the committer name.
86
commit refs/heads/master
0.65.2 by James Westby
The space between the author and email is optional in committer.
87
committer <bugs@bunny.org> now
88
data 13
89
second commit
0.65.5 by James Westby
Make the parser handle multiple words in the committer name.
90
from :2
0.65.2 by James Westby
The space between the author and email is optional in committer.
91
M 644 inline README
0.65.5 by James Westby
Make the parser handle multiple words in the committer name.
92
data 23
0.65.2 by James Westby
The space between the author and email is optional in committer.
93
Welcome from bugs, etc.
0.64.1 by Ian Clatworthy
1st cut: gfi parser + --info processing method
94
# Miscellaneous
95
checkpoint
96
progress completed
97
"""
98
99
100
class TestImportParser(tests.TestCase):
101
102
    def test_iter_commands(self):
103
        s = StringIO.StringIO(_sample_import_text)
104
        p = parser.ImportParser(s)
0.64.10 by Ian Clatworthy
1st cut are dequoting paths
105
        result = []
0.64.1 by Ian Clatworthy
1st cut: gfi parser + --info processing method
106
        for cmd in p.iter_commands():
0.64.10 by Ian Clatworthy
1st cut are dequoting paths
107
            result.append(cmd)
0.64.1 by Ian Clatworthy
1st cut: gfi parser + --info processing method
108
            if cmd.name == 'commit':
109
                for fc in cmd.file_iter():
0.64.10 by Ian Clatworthy
1st cut are dequoting paths
110
                    result.append(fc)
0.65.5 by James Westby
Make the parser handle multiple words in the committer name.
111
        self.assertEqual(len(result), 9)
0.64.10 by Ian Clatworthy
1st cut are dequoting paths
112
        cmd1 = result[0]
113
        self.assertEqual('progress', cmd1.name)
0.65.5 by James Westby
Make the parser handle multiple words in the committer name.
114
        self.assertEqual('completed', cmd1.message)
115
        cmd2 = result[1]
116
        self.assertEqual('blob', cmd2.name)
117
        self.assertEqual('1', cmd2.mark)
118
        self.assertEqual(':1', cmd2.id)
119
        self.assertEqual('aaaa', cmd2.data)
120
        self.assertEqual(4, cmd2.lineno)
121
        cmd3 = result[2]
122
        self.assertEqual('blob', cmd3.name)
123
        self.assertEqual('@7', cmd3.id)
124
        self.assertEqual(None, cmd3.mark)
125
        self.assertEqual('bbbbb', cmd3.data)
126
        self.assertEqual(7, cmd3.lineno)
127
        cmd4 = result[3]
128
        self.assertEqual('commit', cmd4.name)
129
        self.assertEqual('2', cmd4.mark)
130
        self.assertEqual(':2', cmd4.id)
131
        self.assertEqual('initial import', cmd4.message)
132
        self.assertEqual('bugs bunny', cmd4.committer[0])
133
        self.assertEqual('bugs@bunny.org', cmd4.committer[1])
134
        # FIXME: check timestamp and timezone as well
135
        self.assertEqual(None, cmd4.author)
136
        self.assertEqual(11, cmd4.lineno)
137
        self.assertEqual('refs/heads/master', cmd4.ref)
0.64.71 by Ian Clatworthy
fix tests to use new CommitCommand constructor
138
        self.assertEqual(None, cmd4.from_)
139
        self.assertEqual([], cmd4.merges)
0.65.5 by James Westby
Make the parser handle multiple words in the committer name.
140
        file_cmd1 = result[4]
141
        self.assertEqual('filemodify', file_cmd1.name)
142
        self.assertEqual('README', file_cmd1.path)
143
        self.assertEqual('file', file_cmd1.kind)
144
        self.assertEqual(False, file_cmd1.is_executable)
145
        self.assertEqual('Welcome from bugs\n', file_cmd1.data)
146
        cmd5 = result[5]
147
        self.assertEqual('commit', cmd5.name)
148
        self.assertEqual(None, cmd5.mark)
149
        self.assertEqual('@19', cmd5.id)
150
        self.assertEqual('second commit', cmd5.message)
151
        self.assertEqual('', cmd5.committer[0])
152
        self.assertEqual('bugs@bunny.org', cmd5.committer[1])
153
        # FIXME: check timestamp and timezone as well
154
        self.assertEqual(None, cmd5.author)
155
        self.assertEqual(19, cmd5.lineno)
156
        self.assertEqual('refs/heads/master', cmd5.ref)
0.64.71 by Ian Clatworthy
fix tests to use new CommitCommand constructor
157
        self.assertEqual(':2', cmd5.from_)
158
        self.assertEqual([], cmd5.merges)
0.65.5 by James Westby
Make the parser handle multiple words in the committer name.
159
        file_cmd2 = result[6]
160
        self.assertEqual('filemodify', file_cmd2.name)
161
        self.assertEqual('README', file_cmd2.path)
162
        self.assertEqual('file', file_cmd2.kind)
163
        self.assertEqual(False, file_cmd2.is_executable)
164
        self.assertEqual('Welcome from bugs, etc.', file_cmd2.data)
165
        cmd6 = result[7]
166
        self.assertEqual(cmd6.name, 'checkpoint')
167
        cmd7 = result[8]
168
        self.assertEqual('progress', cmd7.name)
169
        self.assertEqual('completed', cmd7.message)
0.64.10 by Ian Clatworthy
1st cut are dequoting paths
170
171
172
class TestStringParsing(tests.TestCase):
173
174
    def test_unquote(self):
175
        s = r'hello \"sweet\" wo\\r\tld'
176
        self.assertEquals(r'hello "sweet" wo\r' + "\tld",
177
            parser._unquote_c_string(s))