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))