class TestCompositeCheckpoint(unittest.TestCase):
    def setUp(self):
        self._checkpoint = CompositeCheckpoint()
        cp1 = DataCheckpoint()
        cp1.append('abc')
        cp2 = DataCheckpoint()
        cp2.append('def')
        self._checkpoint.add_checkpoint(cp1)
        self._checkpoint.add_checkpoint(cp2)

    def test_iter(self):
        a = [ i for i in self._checkpoint ]
        self.assertEqual(len(a), 2)
        self.assertEqual(a[0].data, 'abc')
        self.assertEqual(a[1].data, 'def')

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

    def test_get_slice(self):
        self.assertEqual( [ c.data for c in self._checkpoint[0:2] ], ['abc','def'])

    def test_attribute_data(self):
        self.assertEqual( self._checkpoint.data, ['abc','def'])

    def test_clear(self):
        self._checkpoint.clear()
        self.assertEqual(self._checkpoint.data, [None, None])

    def test_replace(self):
        self.assertEqual( self._checkpoint.data, ['abc','def'])
        self._checkpoint.replace(['ABC','DEF'])
        self.assertEqual( self._checkpoint.data, ['ABC','DEF'])

    def test_append(self):
        self.assertEqual( self._checkpoint.data, ['abc','def'])
        self._checkpoint.append(['ABC','DEF'])
        self.assertEqual( self._checkpoint.data, ['abcABC','defDEF'])