def test_serializable(self): # tree at the given commit contains a submodule as well roottree = self.rorepo.tree('6c1faef799095f3990e9970bc2cb10aa0221cf9c') for item in roottree.traverse(ignore_self=False): if item.type != Tree.type: continue # END skip non-trees tree = item # trees have no dict self.failUnlessRaises(AttributeError, setattr, tree, 'someattr', 1) orig_data = tree.data_stream.read() orig_cache = tree._cache stream = BytesIO() tree._serialize(stream) assert stream.getvalue() == orig_data stream.seek(0) testtree = Tree(self.rorepo, Tree.NULL_BIN_SHA, 0, '') testtree._deserialize(stream) assert testtree._cache == orig_cache # replaces cache, but we make sure of it del(testtree._cache) testtree._deserialize(stream)
def test_serializable(self): # tree at the given commit contains a submodule as well roottree = self.rorepo.tree('6c1faef799095f3990e9970bc2cb10aa0221cf9c') for item in roottree.traverse(ignore_self=False): if item.type != Tree.type: continue # END skip non-trees tree = item # trees have no dict self.failUnlessRaises(AttributeError, setattr, tree, 'someattr', 1) orig_data = tree.data_stream.read() orig_cache = tree._cache stream = BytesIO() tree._serialize(stream) assert stream.getvalue() == orig_data stream.seek(0) testtree = Tree(self.rorepo, Tree.NULL_BIN_SHA, 0, '') testtree._deserialize(stream) assert testtree._cache == orig_cache # replaces cache, but we make sure of it del (testtree._cache) testtree._deserialize(stream)
def test_serializable(self): # tree at the given commit contains a submodule as well roottree = self.rorepo.tree('6c1faef799095f3990e9970bc2cb10aa0221cf9c') for item in roottree.traverse(ignore_self=False): if item.type != Tree.type: continue # END skip non-trees tree = item # trees have no dict self.failUnlessRaises(AttributeError, setattr, tree, 'someattr', 1) orig_data = tree.data_stream.read() orig_cache = tree._cache stream = BytesIO() tree._serialize(stream) assert stream.getvalue() == orig_data stream.seek(0) testtree = Tree(self.rorepo, Tree.NULL_BIN_SHA, 0, '') testtree._deserialize(stream) assert testtree._cache == orig_cache # TEST CACHE MUTATOR mod = testtree.cache self.failUnlessRaises(ValueError, mod.add, "invalid sha", 0, "name") self.failUnlessRaises(ValueError, mod.add, Tree.NULL_HEX_SHA, 0, "invalid mode") self.failUnlessRaises(ValueError, mod.add, Tree.NULL_HEX_SHA, tree.mode, "invalid/name") # add new item name = "fake_dir" mod.add(testtree.NULL_HEX_SHA, tree.mode, name) assert name in testtree # its available in the tree immediately assert isinstance(testtree[name], Tree) # adding it again will not cause multiple of them to be presents cur_count = len(testtree) mod.add(testtree.NULL_HEX_SHA, tree.mode, name) assert len(testtree) == cur_count # fails with a different sha - name exists hexsha = "1" * 40 self.failUnlessRaises(ValueError, mod.add, hexsha, tree.mode, name) # force it - replace existing one mod.add(hexsha, tree.mode, name, force=True) assert testtree[name].hexsha == hexsha assert len(testtree) == cur_count # unchecked addition always works, even with invalid items invalid_name = "hi/there" mod.add_unchecked(hexsha, 0, invalid_name) assert len(testtree) == cur_count + 1 del(mod[invalid_name]) assert len(testtree) == cur_count # del again, its fine del(mod[invalid_name]) # have added one item, we are done mod.set_done() mod.set_done() # multiple times are okay # serialize, its different now stream = BytesIO() testtree._serialize(stream) stream.seek(0) assert stream.getvalue() != orig_data # replaces cache, but we make sure of it del(testtree._cache) testtree._deserialize(stream) assert name in testtree assert invalid_name not in testtree