~bzr-pqm/bzr/bzr.dev

5557.1.15 by John Arbash Meinel
Merge bzr.dev 5597 to resolve NEWS, aka bzr-2.3.txt
1
# Copyright (C) 2009, 2011 Canonical Ltd
4290.1.11 by Jelmer Vernooij
Add some simple tests for the CHKRioSerializer to make sure the format doesn't change.
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
17
from bzrlib.chk_serializer import (
4290.1.12 by Jelmer Vernooij
Use bencode rather than rio in the new revision serialiszer.
18
    chk_bencode_serializer,
4290.1.11 by Jelmer Vernooij
Add some simple tests for the CHKRioSerializer to make sure the format doesn't change.
19
    )
20
from bzrlib.revision import (
21
    Revision,
22
    )
23
from bzrlib.tests import TestCase
24
4398.5.5 by John Arbash Meinel
Update the CHK Serializer to do lots more validation.
25
_working_revision_bencode1 = ('l'
26
    'l6:formati10ee'
27
    'l9:committer54:Canonical.com Patch Queue Manager <pqm@pqm.ubuntu.com>e'
28
    'l8:timezonei3600ee'
29
    'l10:propertiesd11:branch-nick6:+trunkee'
30
    'l9:timestamp14:1242300770.844e'
31
    'l11:revision-id50:pqm@pqm.ubuntu.com-20090514113250-jntkkpminfn3e0tze'
32
    'l10:parent-ids'
33
        'l'
4290.1.14 by Jelmer Vernooij
Review feedback from Aaron:
34
        '50:pqm@pqm.ubuntu.com-20090514104039-kggemn7lrretzpvc'
4398.5.5 by John Arbash Meinel
Update the CHK Serializer to do lots more validation.
35
        '48:jelmer@samba.org-20090510012654-jp9ufxquekaokbeo'
36
        'ee'
37
    'l14:inventory-sha140:4a2c7fb50e077699242cf6eb16a61779c7b680a7e'
38
    'l7:message35:(Jelmer) Move dpush to InterBranch.e'
39
    'e')
4290.1.13 by Jelmer Vernooij
Fix bencode-broken tests.
40
4398.5.5 by John Arbash Meinel
Update the CHK Serializer to do lots more validation.
41
_working_revision_bencode1_no_timezone = ('l'
42
    'l6:formati10ee'
43
    'l9:committer54:Canonical.com Patch Queue Manager <pqm@pqm.ubuntu.com>e'
44
    'l9:timestamp14:1242300770.844e'
45
    'l10:propertiesd11:branch-nick6:+trunkee'
46
    'l11:revision-id50:pqm@pqm.ubuntu.com-20090514113250-jntkkpminfn3e0tze'
47
    'l10:parent-ids'
48
        'l'
4290.1.14 by Jelmer Vernooij
Review feedback from Aaron:
49
        '50:pqm@pqm.ubuntu.com-20090514104039-kggemn7lrretzpvc'
4398.5.5 by John Arbash Meinel
Update the CHK Serializer to do lots more validation.
50
        '48:jelmer@samba.org-20090510012654-jp9ufxquekaokbeo'
51
        'ee'
52
    'l14:inventory-sha140:4a2c7fb50e077699242cf6eb16a61779c7b680a7e'
53
    'l7:message35:(Jelmer) Move dpush to InterBranch.e'
54
    'e')
4290.1.13 by Jelmer Vernooij
Fix bencode-broken tests.
55
4290.1.11 by Jelmer Vernooij
Add some simple tests for the CHKRioSerializer to make sure the format doesn't change.
56
4290.1.12 by Jelmer Vernooij
Use bencode rather than rio in the new revision serialiszer.
57
class TestBEncodeSerializer1(TestCase):
58
    """Test BEncode serialization"""
4290.1.11 by Jelmer Vernooij
Add some simple tests for the CHKRioSerializer to make sure the format doesn't change.
59
60
    def test_unpack_revision(self):
61
        """Test unpacking a revision"""
4290.1.12 by Jelmer Vernooij
Use bencode rather than rio in the new revision serialiszer.
62
        rev = chk_bencode_serializer.read_revision_from_string(
63
                _working_revision_bencode1)
4290.1.14 by Jelmer Vernooij
Review feedback from Aaron:
64
        self.assertEquals(rev.committer,
4290.1.11 by Jelmer Vernooij
Add some simple tests for the CHKRioSerializer to make sure the format doesn't change.
65
           "Canonical.com Patch Queue Manager <pqm@pqm.ubuntu.com>")
4290.1.14 by Jelmer Vernooij
Review feedback from Aaron:
66
        self.assertEquals(rev.inventory_sha1,
4290.1.11 by Jelmer Vernooij
Add some simple tests for the CHKRioSerializer to make sure the format doesn't change.
67
           "4a2c7fb50e077699242cf6eb16a61779c7b680a7")
4398.5.19 by John Arbash Meinel
Change parent_ids back to a list, because there are other tests that expect it.
68
        self.assertEquals(["pqm@pqm.ubuntu.com-20090514104039-kggemn7lrretzpvc",
69
            "jelmer@samba.org-20090510012654-jp9ufxquekaokbeo"],
4290.1.11 by Jelmer Vernooij
Add some simple tests for the CHKRioSerializer to make sure the format doesn't change.
70
            rev.parent_ids)
4290.1.14 by Jelmer Vernooij
Review feedback from Aaron:
71
        self.assertEquals("(Jelmer) Move dpush to InterBranch.", rev.message)
4398.5.5 by John Arbash Meinel
Update the CHK Serializer to do lots more validation.
72
        self.assertEquals("pqm@pqm.ubuntu.com-20090514113250-jntkkpminfn3e0tz",
4290.1.11 by Jelmer Vernooij
Add some simple tests for the CHKRioSerializer to make sure the format doesn't change.
73
           rev.revision_id)
4290.1.14 by Jelmer Vernooij
Review feedback from Aaron:
74
        self.assertEquals({"branch-nick": u"+trunk"}, rev.properties)
75
        self.assertEquals(3600, rev.timezone)
4290.1.11 by Jelmer Vernooij
Add some simple tests for the CHKRioSerializer to make sure the format doesn't change.
76
4398.5.5 by John Arbash Meinel
Update the CHK Serializer to do lots more validation.
77
    def test_written_form_matches(self):
78
        rev = chk_bencode_serializer.read_revision_from_string(
79
                _working_revision_bencode1)
80
        as_str = chk_bencode_serializer.write_revision_to_string(rev)
81
        self.assertEqualDiff(_working_revision_bencode1, as_str)
82
83
    def test_unpack_revision_no_timezone(self):
84
        rev = chk_bencode_serializer.read_revision_from_string(
85
            _working_revision_bencode1_no_timezone)
4290.1.11 by Jelmer Vernooij
Add some simple tests for the CHKRioSerializer to make sure the format doesn't change.
86
        self.assertEquals(None, rev.timezone)
87
88
    def assertRoundTrips(self, serializer, orig_rev):
89
        text = serializer.write_revision_to_string(orig_rev)
90
        new_rev = serializer.read_revision_from_string(text)
91
        self.assertEquals(orig_rev, new_rev)
92
93
    def test_roundtrips_non_ascii(self):
94
        rev = Revision("revid1")
95
        rev.message = u"\n\xe5me"
96
        rev.committer = u'Erik B\xe5gfors'
97
        rev.timestamp = 1242385452
98
        rev.inventory_sha1 = "4a2c7fb50e077699242cf6eb16a61779c7b680a7"
99
        rev.timezone = 3600
4290.1.12 by Jelmer Vernooij
Use bencode rather than rio in the new revision serialiszer.
100
        self.assertRoundTrips(chk_bencode_serializer, rev)
4290.1.11 by Jelmer Vernooij
Add some simple tests for the CHKRioSerializer to make sure the format doesn't change.
101
102
    def test_roundtrips_xml_invalid_chars(self):
103
        rev = Revision("revid1")
104
        rev.message = "\t\ue000"
105
        rev.committer = u'Erik B\xe5gfors'
106
        rev.timestamp = 1242385452
107
        rev.timezone = 3600
108
        rev.inventory_sha1 = "4a2c7fb50e077699242cf6eb16a61779c7b680a7"
4290.1.12 by Jelmer Vernooij
Use bencode rather than rio in the new revision serialiszer.
109
        self.assertRoundTrips(chk_bencode_serializer, rev)