def test_traverse_with_parent_and_children(self): mop = self.moc.add(1, 'my_class', 1234, children=[5,6,7], parent_list=[8,9,10], value='test str') # While in the moc, the Collection manages the references self.assertEqual([self.moc], _scanner.get_referents(mop)) # But once gone, we refer to everything directly del self.moc[1] self.assertEqual([self.moc, mop.address, mop.type_str, mop.value, 5, 6, 7, 8, 9, 10], _scanner.get_referents(mop))
def test_traverse(self): # When a Proxied object is removed from its Collection, it becomes # owned by the Proxy itself, and should be returned from tp_traverse mop = self.moc[0] # At this point, moc still controls the _MemObject self.assertEqual([self.moc], _scanner.get_referents(mop)) # But now, it references everything else, too del self.moc[0] self.assertEqual([self.moc, mop.address, mop.type_str, mop.value], _scanner.get_referents(mop))
def test_traverse_multiple_and_parents_and_children(self): moc = _loader.MemObjectCollection() moc.add(1, 'foo', 100) moc.add(2, 'bar', 200, children=[8, 9], parent_list=[10, 11], value='test val') self.assertEqual([1, 'foo', None, 2, 'bar', 'test val', 8, 9, 10, 11], _scanner.get_referents(moc))
def test_traverse_simple_item(self): moc = _loader.MemObjectCollection() moc.add(1234, 'foo', 100) self.assertEqual([1234, 'foo', None], _scanner.get_referents(moc))
def test_traverse_empty(self): # With nothing present, we return no referents moc = _loader.MemObjectCollection() self.assertEqual([], _scanner.get_referents(moc))
def test_list_referents(self): l = ['one', 2, object(), 4.0] self.assertEqual(gc.get_referents(l), _scanner.get_referents(l))