Esempio n. 1
0
class BlocksTests(TestCase):
    def setUp(self):
        self.blocks = Blocks()
        
    def test_get_set(self):
        self.blocks.set(box)
        self.assertEqual(self.blocks.get(), box)

    def test_get_set_with_moving(self):
        self.blocks.set(box_drop_after)
        self.assertEqual(self.blocks.get(), box_drop_after)

    def test_insert_new(self):
        self.blocks.set(box)
        self.blocks.insert_block("AE")
        self.assertEqual(self.blocks.get(), box_new_block)

    def test_insert_diamond(self):
        self.blocks.set(box)
        self.blocks.insert_diamond(1)
        self.assertEqual(self.blocks.get(), box_new_diamond)

    def test_drop(self):
        self.blocks.set(box_drop_before)
        self.blocks.drop()
        self.assertEqual(self.blocks.get(), box_drop_after)

    def test_drop_partial(self):
        self.blocks.set(box_drop_independent_before)
        self.blocks.drop()
        self.assertEqual(self.blocks.get(), box_drop_independent_after)

    def test_drop_result(self):
        self.blocks.set(box_drop_before)
        r = self.blocks.drop()
        self.assertEqual(r,[(3,0,'a',DOWN),(4,0,'e',DOWN)])
    
    def test_settle(self):
        self.blocks.set(box_settle_before)
        self.blocks.drop()
        self.assertEqual(self.blocks.get(), box_settle_after)

    def test_leftshift(self):
        self.blocks.set(box_shift_before)
        result = self.blocks.left_shift()
        self.assertEqual(self.blocks.get(), box_leftshift)
        self.assertTrue(result)
        
    def test_rightshift(self):
        self.blocks.set(box_shift_before)
        result = self.blocks.right_shift()
        self.assertEqual(self.blocks.get(), box_rightshift)
        self.assertTrue(result)

    def test_leftshift_return(self):
        self.blocks.set(box_shift_before)
        result = self.blocks.left_shift()
        self.assertEqual(result,[(3,1,'a',LEFT),(4,1,'e',LEFT)])

    def test_rightshift_return(self):
        self.blocks.set(box_shift_before)
        result = self.blocks.right_shift()
        self.assertEqual(result,[(3,1,'a',RIGHT),(4,1,'e',RIGHT)])

    def test_cannot_shift_without_moving(self):
        self.blocks.set(box)
        result = self.blocks.left_shift()
        self.assertFalse(result)
        self.assertEqual(self.blocks.get(), box)
        result = self.blocks.right_shift()
        self.assertFalse(result)
        self.assertEqual(self.blocks.get(), box)

    def test_cannot_leftshift(self):
        self.blocks.set(box_cannot_leftshift)
        result = self.blocks.left_shift()
        self.assertEqual(self.blocks.get(), box_cannot_leftshift)
        self.assertFalse(result)

    def test_cannot_rightshift(self):
        self.blocks.set(box_cannot_rightshift1)
        result = self.blocks.right_shift()
        self.assertEqual(self.blocks.get(), box_cannot_rightshift1)
        self.assertFalse(result)
        self.blocks.set(box_cannot_rightshift2)
        result = self.blocks.right_shift()
        self.assertFalse(result)
        self.assertEqual(self.blocks.get(), box_cannot_rightshift2)

    def test_rotate(self):
        self.blocks.set(box_rotate_1)
        for after in [box_rotate_2, box_rotate_3, box_rotate_4]:
            self.blocks.rotate()
            self.assertEqual(self.blocks.get(), after)

    def test_rotate_return(self):
        self.blocks.set(box_rotate_1)
        result = self.blocks.rotate()
        self.assertEqual(result, [(4,1,'e',DOWNLEFT)])

    def test_cannot_rotate(self):
        self.blocks.set(box_cannot_rotate)
        self.blocks.rotate()
        self.assertEqual(self.blocks.get(), box_cannot_rotate)

    def test_remove_single(self):
        self.blocks.set(box_remove_single_before)
        self.blocks.remove_multiplets()
        self.assertEqual(self.blocks.get(), box_remove_single_after)

    def test_remove_multi(self):
        self.blocks.set(box_remove_multi_before)
        self.blocks.remove_multiplets()
        self.assertEqual(self.blocks.get(), box_remove_multi_after)

    def test_drop_bricks(self):
        self.blocks.set(box_drop_bricks_before)
        result = self.blocks.drop_bricks()
        expected = [(2,2,'a',DOWN*2),(4,3,'b',DOWN*1),
                    (5,1,'e',DOWN*4),(5,0,'e',DOWN*4),
                    (6,4,'c',DOWN*1),(6,3,'d',DOWN*1)]
        self.assertEqual(self.blocks.get(), box_drop_bricks_after)
        for r,e in zip(result,expected):
            self.assertEqual(r[0],e[0])
            self.assertEqual(r[1],e[1])
            self.assertEqual(r[2],e[2])
            self.assertEqual(sum(r[3]==e[3]),2)
            

    def test_remove_and_drop(self):
        self.blocks.set(box_drop_remove_before)
        self.blocks.remove_multiplets()
        self.blocks.drop_bricks()
        self.assertEqual(self.blocks.get(), box_drop_remove_after)

    def test_remove_consecutive(self):
        self.blocks.set(box_remove_consecutive_before)
        self.blocks.remove_consecutive()
        self.assertEqual(self.blocks.get(), box_remove_consecutive_after)

    def test_box_overflow(self):
        self.blocks.set(box_game_over)
        self.assertTrue(self.blocks.box_overflow())
        self.blocks.set(box_not_game_over)
        self.assertFalse(self.blocks.box_overflow())

    def test_get_stack_size(self):
        """returns height of the pile"""
        self.blocks.set(box)
        self.assertEqual(self.blocks.get_stack_size(),5)
        self.blocks.set(box_drop_after)
        self.assertEqual(self.blocks.get_stack_size(),5)
        self.blocks.set(box_remove_multi_after)
        self.assertEqual(self.blocks.get_stack_size(),3)