ALOT again
This commit is contained in:
@@ -1,9 +1,4 @@
|
||||
using Snake.Model;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Time.Testing;
|
||||
|
||||
@@ -11,25 +6,39 @@ namespace tests.Model
|
||||
{
|
||||
public class SnakeLevelTest
|
||||
{
|
||||
#region Level constants
|
||||
private const int Size = 10;
|
||||
private const int SnakeStartLength = 5;
|
||||
private const int NewEggRound = 3;
|
||||
private const int EggLimit = 2;
|
||||
Point[] obstacles = [(0, 4), (3, 3)];
|
||||
#endregion
|
||||
|
||||
#region Test objects
|
||||
FakeTimeProvider timeProvider = new FakeTimeProvider();
|
||||
SnakeLevel level;
|
||||
Point[] obstacles = [(3, 3), (4, 4)];
|
||||
#endregion
|
||||
|
||||
#region Constructor and initializazion
|
||||
public SnakeLevelTest()
|
||||
{
|
||||
level = new SnakeLevel(
|
||||
10, obstacles,
|
||||
5, 3, 2, timeProvider
|
||||
size: Size, obstacles: obstacles,
|
||||
snake_start_length: SnakeStartLength, new_egg_round: NewEggRound,
|
||||
egg_limit: EggLimit, time_provider: timeProvider
|
||||
);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Tests
|
||||
[Fact]
|
||||
public void SnakeInitialValuesTests()
|
||||
{
|
||||
level.SnakeHeadDirection.Should().Be(SnakeLevel.SnakeDirection.Down);
|
||||
level.SnakeLength.Should().Be(5);
|
||||
level.EggLimit.Should().Be(2);
|
||||
level.NewEggRound.Should().Be(3);
|
||||
level.Size.Should().Be(10);
|
||||
level.SnakeLength.Should().Be(SnakeStartLength);
|
||||
level.EggLimit.Should().Be(EggLimit);
|
||||
level.NewEggRound.Should().Be(NewEggRound);
|
||||
level.Size.Should().Be(Size);
|
||||
level.State.Should().Be(SnakeLevel.GameState.Paused);
|
||||
foreach(Point p in obstacles)
|
||||
{
|
||||
@@ -40,6 +49,7 @@ namespace tests.Model
|
||||
[Fact]
|
||||
public void SnakeOutOfBoundsTest()
|
||||
{
|
||||
level._disable_egg_generation = true;
|
||||
bool game_state_changed_raised = false;
|
||||
level.GameStateUpdate += (s, e) =>
|
||||
{
|
||||
@@ -50,7 +60,7 @@ namespace tests.Model
|
||||
|
||||
game_state_changed_raised.Should().Be(true);
|
||||
game_state_changed_raised = false;
|
||||
for(int i=0; i<5; i++)
|
||||
for(int i=0; i<Size - SnakeStartLength; i++)
|
||||
{
|
||||
timeProvider.Advance(SnakeLevel.TickTimeSpan);
|
||||
}
|
||||
@@ -61,5 +71,78 @@ namespace tests.Model
|
||||
game_state_changed_raised.Should().Be(true);
|
||||
level.State.Should().Be(SnakeLevel.GameState.Dead);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SnakeObstacleTest()
|
||||
{
|
||||
// Check the test constants
|
||||
obstacles.Should().Contain((0, SnakeStartLength - 1), "There must be an obstacle on the left-most block next to the snake head for the obstacle test.");
|
||||
for (int i = 1; i < Size / 2; i++)
|
||||
{
|
||||
obstacles.Should().NotContain((i, SnakeStartLength - 1), "There must not be an obstacle on the left of the snake head except for the one on the left-most position for the obstacle test.");
|
||||
}
|
||||
|
||||
level._disable_egg_generation = true;
|
||||
|
||||
bool game_state_changed_raised = false;
|
||||
level.GameStateUpdate += (s, e) =>
|
||||
{
|
||||
game_state_changed_raised = true;
|
||||
};
|
||||
|
||||
level.Start();
|
||||
game_state_changed_raised.Should().Be(true);
|
||||
game_state_changed_raised = false;
|
||||
level.SnakeHeadDirection = SnakeLevel.SnakeDirection.Left;
|
||||
for(int i=0; i < Size/2 - 1; i++)
|
||||
{
|
||||
timeProvider.Advance(SnakeLevel.TickTimeSpan);
|
||||
}
|
||||
|
||||
game_state_changed_raised.Should().Be(false);
|
||||
timeProvider.Advance(SnakeLevel.TickTimeSpan);
|
||||
game_state_changed_raised.Should().Be(true);
|
||||
level.State.Should().Be(SnakeLevel.GameState.Dead);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EggPickupTest()
|
||||
{
|
||||
// check test constants
|
||||
obstacles.Should().NotContain((Size / 2, SnakeStartLength), "There must be no eggs upto two blocks below the snake for egg pickup test");
|
||||
obstacles.Should().NotContain((Size / 2, SnakeStartLength + 1), "There must be no eggs upto two blocks below the snake for egg pickup test");
|
||||
|
||||
level._disable_egg_generation = true;
|
||||
Point test_egg = (Size / 2, SnakeStartLength + 1);
|
||||
level.AddEgg(test_egg);
|
||||
level.Start();
|
||||
timeProvider.Advance(SnakeLevel.TickTimeSpan);
|
||||
level.Eggs.Should().Contain(test_egg);
|
||||
level.SnakeLength.Should().Be(SnakeStartLength);
|
||||
timeProvider.Advance(SnakeLevel.TickTimeSpan);
|
||||
level.Eggs.Should().NotContain(test_egg);
|
||||
level.Score.Should().Be(1);
|
||||
level.SnakeLength.Should().Be(SnakeStartLength + 1);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EggGenerationTest()
|
||||
{
|
||||
level._disable_snake_movement = true;
|
||||
level.Start();
|
||||
for(int i=0; i<EggLimit+1; i++)
|
||||
{
|
||||
level.Eggs.Should().HaveCount(i);
|
||||
for(int j=0; j<NewEggRound; j++)
|
||||
{
|
||||
timeProvider.Advance(SnakeLevel.TickTimeSpan);
|
||||
}
|
||||
}
|
||||
|
||||
timeProvider.Advance(SnakeLevel.TickTimeSpan);
|
||||
level.Eggs.Should().HaveCount(EggLimit);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user