|
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() |
|
|