146
146
    def test_object(self):
 
147
147
        self.assertRaises(TypeError, RevisionSpec.from_string, object())
 
150
 
class TestRevisionSpec_dwim(TestRevisionSpec):
 
152
 
    # Don't need to test revno's explicitly since TRS_revno already
 
153
 
    # covers that well for us
 
154
 
    def test_dwim_spec_revno(self):
 
155
 
        self.assertInHistoryIs(2, 'r2', '2')
 
156
 
        self.assertAsRevisionId('alt_r2', '1.1.1')
 
158
 
    def test_dwim_spec_revid(self):
 
159
 
        self.assertInHistoryIs(2, 'r2', 'r2')
 
161
 
    def test_dwim_spec_tag(self):
 
162
 
        self.tree.branch.tags.set_tag('footag', 'r1')
 
163
 
        self.assertAsRevisionId('r1', 'footag')
 
164
 
        self.tree.branch.tags.delete_tag('footag')
 
165
 
        self.assertRaises(errors.InvalidRevisionSpec,
 
166
 
                          self.get_in_history, 'footag')
 
168
 
    def test_dwim_spec_tag_that_looks_like_revno(self):
 
169
 
        # Test that we slip past revno with things that look like revnos,
 
170
 
        # but aren't.  Tags are convenient for testing this since we can
 
171
 
        # make them look however we want.
 
172
 
        self.tree.branch.tags.set_tag('3', 'r2')
 
173
 
        self.assertAsRevisionId('r2', '3')
 
174
 
        self.build_tree(['tree/b'])
 
176
 
        self.tree.commit('b', rev_id='r3')
 
177
 
        self.assertAsRevisionId('r3', '3')
 
179
 
    def test_dwim_spec_date(self):
 
180
 
        self.assertAsRevisionId('r1', 'today')
 
182
 
    def test_dwim_spec_branch(self):
 
183
 
        self.assertInHistoryIs(None, 'alt_r2', 'tree2')
 
185
 
    def test_dwim_spec_nonexistent(self):
 
186
 
        self.assertInvalid('somethingrandom', invalid_as_revision_id=False)
 
187
 
        self.assertInvalid('-1.1', invalid_as_revision_id=False)
 
188
 
        self.assertInvalid('.1', invalid_as_revision_id=False)
 
189
 
        self.assertInvalid('1..1', invalid_as_revision_id=False)
 
190
 
        self.assertInvalid('1.2..1', invalid_as_revision_id=False)
 
191
 
        self.assertInvalid('1.', invalid_as_revision_id=False)
 
 
149
    def test_unregistered_spec(self):
 
 
150
        self.assertRaises(errors.NoSuchRevisionSpec,
 
 
151
                          RevisionSpec.from_string, 'foo')
 
 
152
        self.assertRaises(errors.NoSuchRevisionSpec,
 
 
153
                          RevisionSpec.from_string, '123a')
 
 
157
class TestRevnoFromString(TestCase):
 
 
159
    def test_from_string_dotted_decimal(self):
 
 
160
        self.assertRaises(errors.NoSuchRevisionSpec, RevisionSpec.from_string, '-1.1')
 
 
161
        self.assertRaises(errors.NoSuchRevisionSpec, RevisionSpec.from_string, '.1')
 
 
162
        self.assertRaises(errors.NoSuchRevisionSpec, RevisionSpec.from_string, '1..1')
 
 
163
        self.assertRaises(errors.NoSuchRevisionSpec, RevisionSpec.from_string, '1.2..1')
 
 
164
        self.assertRaises(errors.NoSuchRevisionSpec, RevisionSpec.from_string, '1.')
 
 
165
        self.assertIsInstance(RevisionSpec.from_string('1.1'), RevisionSpec_revno)
 
 
166
        self.assertIsInstance(RevisionSpec.from_string('1.1.3'), RevisionSpec_revno)
 
194
169
class TestRevisionSpec_revno(TestRevisionSpec):