| import unittest |
| import pygame |
| from snake import Snake, Apple |
| from settings import * |
|
|
| class TestSnakeGame(unittest.TestCase): |
| |
| def setUp(self): |
| pygame.init() |
| self.snake = Snake() |
| self.apple = Apple() |
|
|
| def tearDown(self): |
| pygame.quit() |
|
|
| def test_initial_state(self): |
| |
| self.assertEqual(self.snake.head.x, 0) |
| self.assertEqual(self.snake.head.y, 0) |
| |
| self.assertEqual(len(self.snake.body), 0) |
|
|
| def test_movement(self): |
| |
| self.snake.pos = [1, 0] |
| self.snake.drawSnake() |
| self.assertEqual(self.snake.head.x, BLOCK_SIZE) |
| self.assertEqual(self.snake.head.y, 0) |
|
|
| |
| self.snake.pos = [-1, 0] |
| self.snake.drawSnake() |
| self.assertEqual(self.snake.head.x, 0) |
| self.assertEqual(self.snake.head.y, 0) |
|
|
| |
| self.snake.pos = [0, -1] |
| self.snake.drawSnake() |
| self.assertEqual(self.snake.head.x, 0) |
| self.assertEqual(self.snake.head.y, -50) |
|
|
| |
| self.snake.pos = [0, 1] |
| self.snake.drawSnake() |
| self.assertEqual(self.snake.head.x, 0) |
| self.assertEqual(self.snake.head.y, 0) |
|
|
| def test_apple_spawn(self): |
| |
| self.apple.spawn() |
| self.assertTrue(0 <= self.apple.apple.x < WIDTH) |
| self.assertTrue(0 <= self.apple.apple.y < HEIGHT) |
| self.assertEqual(self.apple.apple.width, BLOCK_SIZE) |
| self.assertEqual(self.apple.apple.height, BLOCK_SIZE) |
|
|
| def test_eating_apple(self): |
| |
| self.apple.apple.x = self.snake.head.x + BLOCK_SIZE |
| self.apple.apple.y = self.snake.head.y |
| self.snake.pos = [1, 0] |
| self.snake.drawSnake() |
|
|
| |
| if self.snake.head.colliderect(self.apple.apple): |
| self.snake.body.append(pygame.Rect(self.snake.head.x, self.snake.head.y, BLOCK_SIZE, BLOCK_SIZE)) |
| self.apple.spawn() |
|
|
| self.assertEqual(len(self.snake.body), 1) |
| self.assertNotEqual((self.apple.apple.x, self.apple.apple.y), (self.snake.head.x, self.snake.head.y)) |
|
|
| def test_collision_with_wall(self): |
| |
| self.snake.pos = [-1, 0] |
| self.snake.drawSnake() |
| self.snake.pos = [-1, 0] |
| self.snake.drawSnake() |
| self.assertTrue(self.snake.dead) |
|
|
| def test_collision_with_self(self): |
| |
| self.snake.body = [ |
| pygame.Rect(WIDTH / 2, HEIGHT / 2, BLOCK_SIZE, BLOCK_SIZE), |
| pygame.Rect(WIDTH / 2 - BLOCK_SIZE, HEIGHT / 2, BLOCK_SIZE, BLOCK_SIZE), |
| pygame.Rect(WIDTH / 2 - 2 * BLOCK_SIZE, HEIGHT / 2, BLOCK_SIZE, BLOCK_SIZE) |
| ] |
| self.snake.pos = [1, 0] |
| self.snake.drawSnake() |
| self.snake.pos = [0, -1] |
| self.snake.drawSnake() |
| self.snake.pos = [-1, 0] |
| self.snake.drawSnake() |
| self.assertTrue(self.snake.dead) |
|
|
| if __name__ == '__main__': |
| unittest.main() |
|
|