39
38
        f = store.get(fileid)
 
40
39
        self.assertEqual(f.read(), value)
 
 
41
    def test_add_str_deprecated(self):
 
 
43
        store = self.get_store('a')
 
 
44
        self.callDeprecated(['Passing a string to Store.add'
 
 
45
                             ' was deprecated in version 0.11.'],
 
 
46
                            store.add, 'foo', '1')
 
 
47
        self.assertEqual('foo', store.get('1').read())
 
42
49
    def fill_store(self, store):
 
43
50
        store.add(StringIO('hello'), 'a')
 
44
51
        store.add(StringIO('other'), 'b')
 
 
400
407
    def test_escaped_uppercase(self):
 
401
408
        """Uppercase letters are escaped for safety on Windows"""
 
402
 
        my_store = store.TransportStore(MemoryTransport(), prefixed=True,
 
 
409
        my_store = store.TransportStore(MemoryTransport(), escaped=True)
 
404
410
        # a particularly perverse file-id! :-)
 
405
 
        self.assertEquals(my_store._relpath('C:<>'), 'be/%2543%253a%253c%253e')
 
 
411
        self.assertEquals(my_store._escape_file_id('C:<>'), '%43%3a%3c%3e')
 
408
414
class TestVersionFileStore(TestCaseWithTransport):
 
411
 
        return self._transaction
 
414
417
        super(TestVersionFileStore, self).setUp()
 
415
418
        self.vfstore = store.versioned.VersionedFileStore(MemoryTransport())
 
416
 
        self.vfstore.get_scope = self.get_scope
 
417
 
        self._transaction = None
 
419
420
    def test_get_weave_registers_dirty_in_write(self):
 
420
 
        self._transaction = transactions.WriteTransaction()
 
421
 
        vf = self.vfstore.get_weave_or_empty('id', self._transaction)
 
422
 
        self._transaction.finish()
 
423
 
        self._transaction = None
 
424
 
        self.assertRaises(errors.OutSideTransaction, vf.add_lines, 'b', [], [])
 
425
 
        self._transaction = transactions.WriteTransaction()
 
426
 
        vf = self.vfstore.get_weave('id', self._transaction)
 
427
 
        self._transaction.finish()
 
428
 
        self._transaction = None
 
429
 
        self.assertRaises(errors.OutSideTransaction, vf.add_lines, 'b', [], [])
 
 
421
        transaction = transactions.WriteTransaction()
 
 
422
        vf = self.vfstore.get_weave_or_empty('id', transaction)
 
 
424
        self.assertRaises(errors.OutSideTransaction, vf.add_lines, 'b', [], [])
 
 
425
        transaction = transactions.WriteTransaction()
 
 
426
        vf = self.vfstore.get_weave('id', transaction)
 
 
428
        self.assertRaises(errors.OutSideTransaction, vf.add_lines, 'b', [], [])
 
 
430
    def test_get_weave_or_empty_readonly_fails(self):
 
 
431
        transaction = transactions.ReadOnlyTransaction()
 
 
432
        vf = self.assertRaises(errors.ReadOnlyError,
 
 
433
                               self.vfstore.get_weave_or_empty,
 
431
437
    def test_get_weave_readonly_cant_write(self):
 
432
 
        self._transaction = transactions.WriteTransaction()
 
433
 
        vf = self.vfstore.get_weave_or_empty('id', self._transaction)
 
434
 
        self._transaction.finish()
 
435
 
        self._transaction = transactions.ReadOnlyTransaction()
 
436
 
        vf = self.vfstore.get_weave_or_empty('id', self._transaction)
 
 
438
        transaction = transactions.WriteTransaction()
 
 
439
        vf = self.vfstore.get_weave_or_empty('id', transaction)
 
 
441
        transaction = transactions.ReadOnlyTransaction()
 
 
442
        vf = self.vfstore.get_weave_or_empty('id', transaction)
 
437
443
        self.assertRaises(errors.ReadOnlyError, vf.add_lines, 'b', [], [])
 
439
 
    def test___iter__escaped(self):
 
440
 
        self.vfstore = store.versioned.VersionedFileStore(MemoryTransport(),
 
441
 
            prefixed=True, escaped=True)
 
442
 
        self.vfstore.get_scope = self.get_scope
 
443
 
        self._transaction = transactions.WriteTransaction()
 
444
 
        vf = self.vfstore.get_weave_or_empty(' ', self._transaction)
 
445
 
        vf.add_lines('a', [], [])
 
447
 
        self._transaction.finish()
 
448
 
        self.assertEqual([' '], list(self.vfstore))