using System.Reflection; using Annulus; using Blacklight.Core; using UnitTestSharp; using DrawingPoint = System.Drawing.Point; using DrawingSize = System.Drawing.Size; namespace Glass.Blacklight.UnitTests { // CursorSheet.png is 8 by 4, red in its left four columns and blue in its right four. public class SpriteCursorTests : TestFixture { private const string Sheet = "Glass.Blacklight.UnitTests.CursorSheet.png"; [SpriteSheet(spriteSizeX: 4, spriteSizeY: 4, borderSize: 0, Sheet)] public sealed class FlatSheet { } [SpriteSheet(spriteSizeX: 4, spriteSizeY: 4, borderSize: 0, Sheet, gridOriginX: 4)] public sealed class OffsetSheet { } [SpriteSheet(spriteSizeX: 2, spriteSizeY: 4, borderSize: 2, Sheet)] public sealed class BorderedSheet { } private static readonly Assembly Art = typeof(SpriteCursorTests).Assembly; [IgnoreTest] private static DrawingPoint FirstPixel(CursorImage image) { return new DrawingPoint(image.Rgba[0], image.Rgba[2]); } public class ImageForTests : TestFixture { public void ACellOfAFlatSheet_CropsThatCell() { SpriteMaterial sprite = MaterialLibrary.CreateSprite(new Point(1, 0)); CursorImage image = SpriteCursor.ImageFor(sprite, new Point(1, 2), scale: 1, Art); CheckEqual(new DrawingSize(4, 4), image.Size); CheckEqual(new DrawingPoint(0, 255), FirstPixel(image)); } public void AGridOrigin_ShiftsTheCropIntoTheSheet() { SpriteMaterial sprite = MaterialLibrary.CreateSprite(new Point(0, 0)); CursorImage image = SpriteCursor.ImageFor(sprite, new Point(0, 0), scale: 1, Art); CheckEqual(new DrawingPoint(0, 255), FirstPixel(image)); } public void ABorderBetweenCells_PushesLaterCellsAlongByItsWidth() { SpriteMaterial first = MaterialLibrary.CreateSprite(new Point(0, 0)); SpriteMaterial second = MaterialLibrary.CreateSprite(new Point(1, 0)); CheckEqual( new DrawingPoint(255, 0), FirstPixel(SpriteCursor.ImageFor(first, new Point(0, 0), 1, Art))); CheckEqual( new DrawingPoint(0, 255), FirstPixel(SpriteCursor.ImageFor(second, new Point(0, 0), 1, Art))); } public void AScale_EnlargesThePixelsAndTheHotspot() { SpriteMaterial sprite = MaterialLibrary.CreateSprite(new Point(0, 0)); CursorImage image = SpriteCursor.ImageFor(sprite, new Point(1, 2), scale: 3, Art); CheckEqual(new DrawingSize(12, 12), image.Size); CheckEqual(new DrawingPoint(3, 6), image.Hotspot); } } public class InstanceImageForTests : TestFixture { public void UsesTheCursorsOwnSpriteAndHotspot() { SpriteMaterial sprite = MaterialLibrary.CreateSprite(new Point(1, 0)); var cursor = new SpriteCursor(sprite, new Point(1, 2)); CursorImage image = cursor.ImageFor(scale: 2, Art); CheckEqual(new DrawingSize(8, 8), image.Size); CheckEqual(new DrawingPoint(2, 4), image.Hotspot); CheckEqual(new DrawingPoint(0, 255), FirstPixel(image)); } } public class CtorTests : TestFixture { public void KeepsTheSpriteAndHotspot() { SpriteMaterial sprite = MaterialLibrary.CreateSprite(new Point(0, 0)); var cursor = new SpriteCursor(sprite, new Point(5, 6)); CheckEqual(sprite, cursor.Sprite); CheckEqual(new Point(5, 6), cursor.Hotspot); } } } }