Files
VoxelEngine/VoxelEngine.Tests/BlockRegistryTests.cs

107 lines
3.3 KiB
C#

using VoxelEngine.World;
using VoxelEngine.World.Blocks;
using Xunit;
namespace VoxelEngine.Tests;
public class BlockRegistryTests
{
[Fact]
public void Get_ReturnsRegisteredBlockById()
{
var registry = new BlockRegistry();
Assert.IsType<AirBlock>(registry.Get(0));
Assert.IsType<StoneBlock>(registry.Get(1));
Assert.IsType<DirtBlock>(registry.Get(2));
Assert.IsType<GrassBlock>(registry.Get(3));
}
[Fact]
public void Air_IsNotOpaqueOrSolid_OthersAre()
{
var registry = new BlockRegistry();
Assert.False(registry.Get(0).IsOpaque);
Assert.False(registry.Get(0).IsSolid);
Assert.True(registry.Get(1).IsOpaque);
Assert.True(registry.Get(1).IsSolid);
}
[Fact]
public void Grass_HasDifferentTexturesPerFace()
{
var registry = new BlockRegistry();
IBlock grass = registry.Get(3);
Assert.Equal(new TileCoord(0, 1), grass.GetTextureTile(BlockFace.Top));
Assert.Equal(new TileCoord(0, 0), grass.GetTextureTile(BlockFace.Bottom));
Assert.Equal(new TileCoord(1, 1), grass.GetTextureTile(BlockFace.North));
}
[Fact]
public void NamedAccessors_MatchIds()
{
var registry = new BlockRegistry();
Assert.Equal((ushort)0, registry.Air.Id);
Assert.Equal((ushort)1, registry.Stone.Id);
Assert.Equal((ushort)2, registry.Dirt.Id);
Assert.Equal((ushort)3, registry.Grass.Id);
}
[Fact]
public void SandAndSnow_AreOpaque_WaterIsOpaque()
{
var registry = new BlockRegistry();
Assert.True(registry.Get(4).IsOpaque); // Sand
Assert.True(registry.Get(5).IsOpaque); // Snow
Assert.True(registry.Get(6).IsOpaque); // Water (single-pass renderer => opaque)
}
[Fact]
public void Registry_ResolvesAllSevenBlocks()
{
var registry = new BlockRegistry();
Assert.Equal("Air", registry.Get(0).Name);
Assert.Equal("Stone", registry.Get(1).Name);
Assert.Equal("Dirt", registry.Get(2).Name);
Assert.Equal("Grass", registry.Get(3).Name);
Assert.Equal("Sand", registry.Get(4).Name);
Assert.Equal("Snow Block", registry.Get(5).Name);
Assert.Equal("Water", registry.Get(6).Name);
}
[Fact]
public void Registry_ResolvesOreBlocks_ByStableIds()
{
var registry = new BlockRegistry();
Assert.Equal("Coal Ore", registry.Get(7).Name);
Assert.Equal("Iron Ore", registry.Get(8).Name);
Assert.Equal("Gold Ore", registry.Get(9).Name);
Assert.Equal("Diamond Ore", registry.Get(10).Name);
}
[Fact]
public void Ores_AreOpaqueAndSolid()
{
var registry = new BlockRegistry();
foreach (ushort id in new ushort[] { 7, 8, 9, 10 })
{
Assert.True(registry.Get(id).IsOpaque, $"ore id {id} should be opaque");
Assert.True(registry.Get(id).IsSolid, $"ore id {id} should be solid");
}
}
[Fact]
public void NamedOreAccessors_MatchIds()
{
var registry = new BlockRegistry();
Assert.Equal((ushort)7, registry.CoalOre.Id);
Assert.Equal((ushort)8, registry.IronOre.Id);
Assert.Equal((ushort)9, registry.GoldOre.Id);
Assert.Equal((ushort)10, registry.DiamondOre.Id);
}
}