class TestCompositeCheckpointDefaultInit(unittest.TestCase):
    def setUp(self):
        self._checkpoint = CompositeCheckpoint()

    def test_len(self):
        self.assertEqual(len(self._checkpoint), 0)

    def test_get_item(self):
        cp = DataCheckpoint()
        cp.append('abc')
        self._checkpoint.add_checkpoint(cp)
        self.assertEqual(self._checkpoint[0].data, 'abc')

    def test_set_item(self):
        cp1 = DataCheckpoint()
        cp1.append('abc')
        cp2 = DataCheckpoint()
        cp2.append('def')
        self._checkpoint.add_checkpoint(cp1)
        self.assertEqual(self._checkpoint[0].data, 'abc')
        self._checkpoint[0] = cp2
        self.assertEqual(self._checkpoint[0].data, 'def')

    def test_del_item(self):
        self._checkpoint.add_checkpoint(DataCheckpoint())
        self.assertEqual(len(self._checkpoint), 1)
        del self._checkpoint[0]
        self.assertEqual(len(self._checkpoint), 0)

    def test_del_slice(self):
        self._checkpoint.add_checkpoint(DataCheckpoint())
        self.assertEqual(len(self._checkpoint), 1)
        del self._checkpoint[0:1]
        self.assertEqual(len(self._checkpoint), 0)

    def test_add_checkpoint(self):
        self._checkpoint.add_checkpoint(DataCheckpoint())
        self.assertEqual(len(self._checkpoint), 1)
        self._checkpoint.add_checkpoint(DataCheckpoint())
        self.assertEqual(len(self._checkpoint), 2)

    def test_remove_checkpoint(self):
        self._checkpoint.add_checkpoint(DataCheckpoint())
        self._checkpoint.add_checkpoint(DataCheckpoint())
        self._checkpoint.remove_checkpoint(0)
        self.assertEqual(len(self._checkpoint), 1)
        self._checkpoint.remove_checkpoint(0)
        self.assertEqual(len(self._checkpoint), 0)