def test_parse_no_version(self):
     deserializer = inventory_delta.InventoryDeltaDeserializer()
     err = self.assertRaises(
         InventoryDeltaError, deserializer.parse_text_bytes,
         'format: bzr inventory delta v1 (bzr 1.14)\n'
         'parent: null:\n')
     self.assertContainsRe(str(err), 'missing version: marker')
 def test_parse_last_line_not_empty(self):
     """newpath must start with / if it is not None."""
     # Trim the trailing newline from a valid serialization
     lines = root_only_lines[:-1]
     deserializer = inventory_delta.InventoryDeltaDeserializer()
     err = self.assertRaises(InventoryDeltaError,
                             deserializer.parse_text_bytes, lines)
     self.assertContainsRe(str(err), 'last line not empty')
 def test_parse_invalid_oldpath(self):
     """oldpath must start with / if it is not None."""
     lines = root_only_lines
     lines += "bad\x00/new\x00file-id\x00\x00version\x00dir\n"
     deserializer = inventory_delta.InventoryDeltaDeserializer()
     err = self.assertRaises(InventoryDeltaError,
                             deserializer.parse_text_bytes, lines)
     self.assertContainsRe(str(err), 'oldpath invalid')
 def test_parse_versioned_root_only(self):
     deserializer = inventory_delta.InventoryDeltaDeserializer()
     parse_result = deserializer.parse_text_bytes(root_only_lines)
     expected_entry = inventory.make_entry('directory', u'', None, 'an-id')
     expected_entry.revision = 'a@e\xc3\xa5ample.com--2004'
     self.assertEqual(('null:', 'entry-version', True, True, [
         (None, '', 'an-id', expected_entry)
     ]), parse_result)
 def test_parse_invalid_newpath(self):
     """newpath must start with / if it is not None."""
     lines = empty_lines
     lines += "None\x00bad\x00TREE_ROOT\x00\x00version\x00dir\n"
     deserializer = inventory_delta.InventoryDeltaDeserializer()
     err = self.assertRaises(InventoryDeltaError,
                             deserializer.parse_text_bytes, lines)
     self.assertContainsRe(str(err), 'newpath invalid')
 def test_parse_delete(self):
     lines = root_only_lines
     lines += (
         "/old-file\x00None\x00deleted-id\x00\x00null:\x00deleted\x00\x00\n"
     )
     deserializer = inventory_delta.InventoryDeltaDeserializer()
     parse_result = deserializer.parse_text_bytes(lines)
     delta = parse_result[4]
     self.assertEqual((u'old-file', None, 'deleted-id', None), delta[-1])
 def test_parse_unversioned_root_versioning_enabled(self):
     deserializer = inventory_delta.InventoryDeltaDeserializer()
     parse_result = deserializer.parse_text_bytes(root_only_unversioned)
     expected_entry = inventory.make_entry('directory', u'', None,
                                           'TREE_ROOT')
     expected_entry.revision = 'entry-version'
     self.assertEqual(('null:', 'entry-version', False, False, [
         (None, u'', 'TREE_ROOT', expected_entry)
     ]), parse_result)
    def test_parse_unique_root_id_root_versioned_disabled(self):
        deserializer = inventory_delta.InventoryDeltaDeserializer()
        root_only_lines = """format: bzr inventory delta v1 (bzr 1.14)
parent: parent-id
version: a@e\xc3\xa5ample.com--2004
versioned_root: false
tree_references: true
None\x00/\x00an-id\x00\x00parent-id\x00dir\x00\x00
"""
        err = self.assertRaises(InventoryDeltaError,
                                deserializer.parse_text_bytes, root_only_lines)
        self.assertContainsRe(str(err), 'Versioned root found')
    def test_parse_special_revid_not_valid_last_mod(self):
        deserializer = inventory_delta.InventoryDeltaDeserializer()
        root_only_lines = """format: bzr inventory delta v1 (bzr 1.14)
parent: null:
version: null:
versioned_root: false
tree_references: true
None\x00/\x00TREE_ROOT\x00\x00null:\x00dir\x00\x00
"""
        err = self.assertRaises(InventoryDeltaError,
                                deserializer.parse_text_bytes, root_only_lines)
        self.assertContainsRe(str(err), 'special revisionid found')
    def test_parse_duplicate_key_errors(self):
        deserializer = inventory_delta.InventoryDeltaDeserializer()
        double_root_lines = \
"""format: bzr inventory delta v1 (bzr 1.14)
parent: null:
version: null:
versioned_root: true
tree_references: true
None\x00/\x00an-id\x00\x00a@e\xc3\xa5ample.com--2004\x00dir\x00\x00
None\x00/\x00an-id\x00\x00a@e\xc3\xa5ample.com--2004\x00dir\x00\x00
"""
        err = self.assertRaises(InventoryDeltaError,
                                deserializer.parse_text_bytes,
                                double_root_lines)
        self.assertContainsRe(str(err), 'duplicate file id')
    def test_parse_tree_when_header_disallows(self):
        # A deserializer that allows tree_references to be set or unset.
        deserializer = inventory_delta.InventoryDeltaDeserializer()
        # A serialised inventory delta with a header saying no tree refs, but
        # that has a tree ref in its content.
        lines = """format: bzr inventory delta v1 (bzr 1.14)
parent: null:
version: entry-version
versioned_root: false
tree_references: false
None\x00/foo\x00id\x00TREE_ROOT\x00changed\x00tree\x00subtree-version
"""
        err = self.assertRaises(InventoryDeltaError,
                                deserializer.parse_text_bytes, lines)
        self.assertContainsRe(str(err), 'Tree reference found')
    def test_parse_versioned_root_when_header_disallows(self):
        # A deserializer that allows tree_references to be set or unset.
        deserializer = inventory_delta.InventoryDeltaDeserializer()
        # A serialised inventory delta with a header saying no tree refs, but
        # that has a tree ref in its content.
        lines = """format: bzr inventory delta v1 (bzr 1.14)
parent: null:
version: entry-version
versioned_root: false
tree_references: false
None\x00/\x00TREE_ROOT\x00\x00a@e\xc3\xa5ample.com--2004\x00dir
"""
        err = self.assertRaises(InventoryDeltaError,
                                deserializer.parse_text_bytes, lines)
        self.assertContainsRe(str(err), 'Versioned root found')
 def test_parse_new_file(self):
     """a new file is parsed correctly"""
     lines = root_only_lines
     fake_sha = "deadbeef" * 5
     lines += (
         "None\x00/new\x00file-id\x00an-id\x00version\x00file\x00123\x00" +
         "\x00" + fake_sha + "\n")
     deserializer = inventory_delta.InventoryDeltaDeserializer()
     parse_result = deserializer.parse_text_bytes(lines)
     expected_entry = inventory.make_entry('file', u'new', 'an-id',
                                           'file-id')
     expected_entry.revision = 'version'
     expected_entry.text_size = 123
     expected_entry.text_sha1 = fake_sha
     delta = parse_result[4]
     self.assertEqual((None, u'new', 'file-id', expected_entry), delta[-1])
 def test_unversioned_root(self):
     old_inv = Inventory(None)
     new_inv = Inventory(None)
     root = new_inv.make_entry('directory', '', None, 'TREE_ROOT')
     # Implicit roots are considered modified in every revision.
     root.revision = 'entry-version'
     new_inv.add(root)
     delta = new_inv._make_delta(old_inv)
     serializer = inventory_delta.InventoryDeltaSerializer(
         versioned_root=False, tree_references=False)
     serialized_lines = serializer.delta_to_lines(NULL_REVISION,
                                                  'entry-version', delta)
     self.assertEqual(
         StringIO(root_only_unversioned).readlines(), serialized_lines)
     deserializer = inventory_delta.InventoryDeltaDeserializer()
     self.assertEqual(
         (NULL_REVISION, 'entry-version', False, False, delta),
         deserializer.parse_text_bytes(''.join(serialized_lines)))
 def test_parse_bad_format(self):
     deserializer = inventory_delta.InventoryDeltaDeserializer()
     err = self.assertRaises(InventoryDeltaError,
                             deserializer.parse_text_bytes, 'format: foo\n')
     self.assertContainsRe(str(err), 'unknown format')
 def test_parse_no_bytes(self):
     deserializer = inventory_delta.InventoryDeltaDeserializer()
     err = self.assertRaises(InventoryDeltaError,
                             deserializer.parse_text_bytes, '')
     self.assertContainsRe(str(err), 'last line not empty')
 def test_parse_versioned_root_when_disabled(self):
     deserializer = inventory_delta.InventoryDeltaDeserializer(
         allow_versioned_root=False)
     err = self.assertRaises(inventory_delta.IncompatibleInventoryDelta,
                             deserializer.parse_text_bytes, root_only_lines)
     self.assertEqual("versioned_root not allowed", str(err))
 def test_parse_tree_when_disabled(self):
     deserializer = inventory_delta.InventoryDeltaDeserializer(
         allow_tree_references=False)
     err = self.assertRaises(inventory_delta.IncompatibleInventoryDelta,
                             deserializer.parse_text_bytes, reference_lines)
     self.assertEqual("Tree reference not allowed", str(err))