eva_bead_1/tests/Model/SnakeLevelTest.cs

66 lines
1.8 KiB
C#

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;
namespace tests.Model
{
public class SnakeLevelTest
{
FakeTimeProvider timeProvider = new FakeTimeProvider();
SnakeLevel level;
Point[] obstacles = [(3, 3), (4, 4)];
public SnakeLevelTest()
{
level = new SnakeLevel(
10, obstacles,
5, 3, 2, timeProvider
);
}
[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.State.Should().Be(SnakeLevel.GameState.Paused);
foreach(Point p in obstacles)
{
level[p].Should().Be(SnakeLevel.LevelBlock.Obstacle);
}
}
[Fact]
public void SnakeOutOfBoundsTest()
{
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;
for(int i=0; i<5; 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);
}
}
}