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(registry.Get(0)); Assert.IsType(registry.Get(1)); Assert.IsType(registry.Get(2)); Assert.IsType(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); } }