using TileServer.Domain; using TileServer.Domain.Tiles; namespace TileServer.UnitTests; public sealed class TileCoordinateTests { [Fact] public void Ancestor_ShiftsToParentZoom() { var child = new TileCoordinate(3, 5, 6); Assert.Equal(new TileCoordinate(1, 1, 1), child.Ancestor(1)); Assert.Equal(child, child.Ancestor(3)); } [Fact] public void ToTmsY_FlipsXyzOrigin() { var tile = new TileCoordinate(3, 1, 0); Assert.Equal(7, tile.ToTmsY()); } [Fact] public void ClampMaxZoom_CapsAtPlanetilerLimit() { Assert.Equal(15, PlanetilerLimits.ClampMaxZoom(18)); Assert.Equal(15, PlanetilerLimits.ClampMaxZoom(15)); Assert.Equal(0, PlanetilerLimits.ClampMaxZoom(-1)); } [Theory] [InlineData(0, 0, 0, true)] [InlineData(1, 2, 0, false)] [InlineData(-1, 0, 0, false)] public void IsValid_RespectsZoomBounds(int z, int x, int y, bool expected) => Assert.Equal(expected, new TileCoordinate(z, x, y).IsValid); } public sealed class ResourceNameTests { [Theory] [InlineData("central-fed-district", true)] [InlineData("osm-bright", true)] [InlineData("Dark", false)] [InlineData("1south", false)] [InlineData("", false)] public void IsValid_AcceptsLowercaseIds(string value, bool expected) => Assert.Equal(expected, ResourceName.IsValid(value)); }