ALOT again

This commit is contained in:
2024-10-23 22:11:14 +02:00
parent a98a463531
commit e2c9116575
11 changed files with 499 additions and 266 deletions
+96 -13
View File
@@ -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
}
}
+2 -1
View File
@@ -6,7 +6,7 @@ namespace Snake.Tests.Persistance;
public class LevelLoaderTests
{
[Fact]
public void LoadLevelTest()
public async void LoadLevelTest()
{
// Preparre
string SaveFile =
@@ -41,6 +41,7 @@ public class LevelLoaderTests
File.WriteAllText(tempfile, SaveFile);
var loader = new SnakeLevelLoader(tempfile);
await loader.ReadAllDataAsync();
Assert.Equal(2, loader.StoredLevels.Count);
var current_level = loader.StoredLevels[0];