~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to testknit.py

  • Committer: Martin Pool
  • Date: 2005-06-06 05:55:19 UTC
  • Revision ID: mbp@sourcefrog.net-20050606055519-2fa201b47cefec08
- fix permissions on exported tar/zip files

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 by 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
 
 
18
 
 
19
 
 
20
 
"""test case for knit/weave algorithm"""
21
 
 
22
 
 
23
 
from testsweet import TestBase
24
 
from knit import Knit, VerInfo
25
 
 
26
 
 
27
 
# texts for use in testing
28
 
TEXT_0 = ["Hello world"]
29
 
TEXT_1 = ["Hello world",
30
 
          "A second line"]
31
 
 
32
 
 
33
 
class Easy(TestBase):
34
 
    def runTest(self):
35
 
        k = Knit()
36
 
 
37
 
 
38
 
class StoreText(TestBase):
39
 
    """Store and retrieve a simple text."""
40
 
    def runTest(self):
41
 
        k = Knit()
42
 
        idx = k.add([], TEXT_0)
43
 
        self.assertEqual(k.get(idx), TEXT_0)
44
 
        self.assertEqual(idx, 0)
45
 
 
46
 
 
47
 
 
48
 
class AnnotateOne(TestBase):
49
 
    def runTest(self):
50
 
        k = Knit()
51
 
        k.add([], TEXT_0)
52
 
        self.assertEqual(k.annotate(0),
53
 
                         [(0, TEXT_0[0])])
54
 
 
55
 
 
56
 
class StoreTwo(TestBase):
57
 
    def runTest(self):
58
 
        k = Knit()
59
 
 
60
 
        idx = k.add([], TEXT_0)
61
 
        self.assertEqual(idx, 0)
62
 
 
63
 
        idx = k.add([], TEXT_1)
64
 
        self.assertEqual(idx, 1)
65
 
 
66
 
        self.assertEqual(k.get(0), TEXT_0)
67
 
        self.assertEqual(k.get(1), TEXT_1)
68
 
 
69
 
        k.dump(self.TEST_LOG)
70
 
 
71
 
 
72
 
 
73
 
class Delta1(TestBase):
74
 
    """Detection of changes prior to inserting new revision."""
75
 
    def runTest(self):
76
 
        from pprint import pformat
77
 
 
78
 
        k = Knit()
79
 
        k.add([], ['line 1'])
80
 
 
81
 
        changes = list(k._delta(set([0]),
82
 
                                ['line 1',
83
 
                                 'new line']))
84
 
 
85
 
        self.log('raw changes: ' + pformat(changes))
86
 
 
87
 
        # should be one inserted line after line 0q
88
 
        self.assertEquals(changes,
89
 
                          [(1, 1, ['new line'])])
90
 
 
91
 
        changes = k._delta(set([0]),
92
 
                           ['top line',
93
 
                            'line 1'])
94
 
        
95
 
        self.assertEquals(list(changes),
96
 
                          [(0, 0, ['top line'])])
97
 
 
98
 
 
99
 
 
100
 
class InvalidAdd(TestBase):
101
 
    """Try to use invalid version number during add."""
102
 
    def runTest(self):
103
 
        k = Knit()
104
 
 
105
 
        self.assertRaises(IndexError,
106
 
                          k.add,
107
 
                          [69],
108
 
                          ['new text!'])
109
 
 
110
 
 
111
 
class InsertLines(TestBase):
112
 
    """Store a revision that adds one line to the original.
113
 
 
114
 
    Look at the annotations to make sure that the first line is matched
115
 
    and not stored repeatedly."""
116
 
    def runTest(self):
117
 
        k = Knit()
118
 
 
119
 
        k.add([], ['line 1'])
120
 
        k.add([0], ['line 1', 'line 2'])
121
 
 
122
 
        self.assertEqual(k.annotate(0),
123
 
                         [(0, 'line 1')])
124
 
 
125
 
        self.assertEqual(k.get(1),
126
 
                         ['line 1',
127
 
                          'line 2'])
128
 
 
129
 
        self.assertEqual(k.annotate(1),
130
 
                         [(0, 'line 1'),
131
 
                          (1, 'line 2')])
132
 
 
133
 
        k.add([0], ['line 1', 'diverged line'])
134
 
 
135
 
        self.assertEqual(k.annotate(2),
136
 
                         [(0, 'line 1'),
137
 
                          (2, 'diverged line')])
138
 
 
139
 
        k.add([0, 1],
140
 
              ['line 1', 'middle line', 'line 2'])
141
 
 
142
 
        self.assertEqual(k.annotate(3),
143
 
                         [(0, 'line 1'),
144
 
                          (3, 'middle line'),
145
 
                          (1, 'line 2')])
146
 
 
147
 
 
148
 
 
149
 
class IncludeVersions(TestBase):
150
 
    """Check texts that are stored across multiple revisions.
151
 
 
152
 
    Here we manually create a knit with particular encoding and make
153
 
    sure it unpacks properly.
154
 
 
155
 
    Text 0 includes nothing; text 1 includes text 0 and adds some
156
 
    lines.
157
 
    """
158
 
 
159
 
    def runTest(self):
160
 
        k = Knit()
161
 
 
162
 
        k._v = [VerInfo(), VerInfo(included=[0])]
163
 
        k._l = [(0, "first line"),
164
 
                (1, "second line")]
165
 
 
166
 
        self.assertEqual(k.get(1),
167
 
                         ["first line",
168
 
                          "second line"])
169
 
 
170
 
        self.assertEqual(k.get(0),
171
 
                         ["first line"])
172
 
 
173
 
        k.dump(self.TEST_LOG)
174
 
 
175
 
 
176
 
class DivergedIncludes(TestBase):
177
 
    """Knit with two diverged texts based on version 0.
178
 
    """
179
 
    def runTest(self):
180
 
        k = Knit()
181
 
 
182
 
        k._v = [VerInfo(),
183
 
                VerInfo(included=[0]),
184
 
                VerInfo(included=[0]),
185
 
                ]
186
 
        k._l = [(0, "first line"),
187
 
                (1, "second line"),
188
 
                (2, "alternative second line"),]
189
 
 
190
 
        self.assertEqual(k.get(0),
191
 
                         ["first line"])
192
 
 
193
 
        self.assertEqual(k.get(1),
194
 
                         ["first line",
195
 
                          "second line"])
196
 
 
197
 
        self.assertEqual(k.get(2),
198
 
                         ["first line",
199
 
                          "alternative second line"])
200
 
 
201
 
def testknit():
202
 
    import testsweet
203
 
    from unittest import TestSuite, TestLoader
204
 
    import testknit
205
 
 
206
 
    tl = TestLoader()
207
 
    suite = TestSuite()
208
 
    suite.addTest(tl.loadTestsFromModule(testknit))
209
 
    
210
 
    return int(not testsweet.run_suite(suite)) # for shell 0=true
211
 
 
212
 
 
213
 
if __name__ == '__main__':
214
 
    import sys
215
 
    sys.exit(testknit())
216