using Blacklight.Core.Drawables; using System; using System.Drawing; using UnitTestSharp; namespace Blacklight.Core.UnitTests.Drawables { public class SpriteBatchEntrySetTests : TestFixture { public static readonly SpriteBatch.Varying[] EachProperty = { SpriteBatch.Varying.Tiling, SpriteBatch.Varying.TintColor, SpriteBatch.Varying.ClipWindow, SpriteBatch.Varying.CoverageGamma, SpriteBatch.Varying.Additiveness, }; public class CtorTests : TestFixture { public void Parameterless_HasNoEntriesOrColumns() { var set = new SpriteBatch.EntrySet(); CheckEqual(0, set.Capacity); CheckEqual(SpriteBatch.Varying.None, set.Columns); } public void SizesTheEntriesAndAddsTheNamedColumns() { SpriteBatch.Varying columns = SpriteBatch.Varying.Tiling | SpriteBatch.Varying.ClipWindow; var set = new SpriteBatch.EntrySet(capacity: 3, columns); CheckEqual(3, set.Entries.Length); CheckEqual(columns, set.Columns); CheckEqual(3, set.TilingX.Length); CheckEqual(3, set.ClipWindows.Length); } } public class CapacityTests : TestFixture { public void IsHowManyEntriesFit() { CheckEqual(5, new SpriteBatch.EntrySet(capacity: 5, SpriteBatch.Varying.None).Capacity); } } public class ColumnsTests : TestFixture { public void EachColumn_IsReportedOnItsOwn() { foreach (SpriteBatch.Varying property in EachProperty) { CheckEqual(property, new SpriteBatch.EntrySet(capacity: 1, property).Columns); } } } public class EnsureCapacityTests : TestFixture { public void AlreadyBigEnough_LeavesTheArraysAlone() { var set = new SpriteBatch.EntrySet(capacity: 4, SpriteBatch.Varying.Tiling); SpriteBatch.Entry[] entries = set.Entries; TilingBehavior[] tilingX = set.TilingX; set.EnsureCapacity(4); CheckTrue(ReferenceEquals(entries, set.Entries)); CheckTrue(ReferenceEquals(tilingX, set.TilingX)); } public void Growing_KeepsTheEntriesAndEveryColumn() { var set = new SpriteBatch.EntrySet(capacity: 1, SpriteBatch.Varying.Tiling | SpriteBatch.Varying.TintColor | SpriteBatch.Varying.ClipWindow | SpriteBatch.Varying.CoverageGamma | SpriteBatch.Varying.Additiveness); set.Entries[0].SourceOrigin = new Point(9, 0); set.TilingX[0] = TilingBehavior.Tile; set.TilingY[0] = TilingBehavior.StretchAndTile; set.TintColors[0] = new TintColor(0.5, 0.5, 0.5, 0.5); set.ClipWindows[0] = Annulus.Rect.FromPositionAndSize(Azimuth.Vector.Zero, new Azimuth.Vector(2, 3)); set.CoverageGammas[0] = 1.5; set.Additivenesses[0] = 0.25; set.EnsureCapacity(10); CheckEqual(9, set.Entries[0].SourceOrigin.X); CheckEqual(TilingBehavior.Tile, set.TilingX[0]); CheckEqual(TilingBehavior.StretchAndTile, set.TilingY[0]); CheckEqual(new TintColor(0.5, 0.5, 0.5, 0.5), set.TintColors[0]); CheckEqual(new Azimuth.Vector(2, 3), set.ClipWindows[0].Value.Size); CheckEqual((Azimuth.Scalar)1.5, set.CoverageGammas[0]); CheckEqual((Azimuth.Scalar)0.25, set.Additivenesses[0]); CheckEqual(set.Entries.Length, set.TilingX.Length); CheckEqual(set.Entries.Length, set.Additivenesses.Length); } public void Growing_AtLeastDoubles() { var set = new SpriteBatch.EntrySet(capacity: 4, SpriteBatch.Varying.None); set.EnsureCapacity(5); CheckEqual(8, set.Capacity); } public void GrowingPastDouble_FitsTheRequestExactly() { var set = new SpriteBatch.EntrySet(capacity: 2, SpriteBatch.Varying.None); set.EnsureCapacity(9); CheckEqual(9, set.Capacity); } public void Growing_LeavesMissingColumnsMissing() { var set = new SpriteBatch.EntrySet(capacity: 1, SpriteBatch.Varying.Tiling); set.EnsureCapacity(10); CheckEqual(SpriteBatch.Varying.Tiling, set.Columns); } } public class AddColumnsTests : TestFixture { public void ExistingColumns_AreKept() { var set = new SpriteBatch.EntrySet(capacity: 2, SpriteBatch.Varying.Tiling); TilingBehavior[] tilingX = set.TilingX; set.AddColumns(SpriteBatch.Varying.Tiling | SpriteBatch.Varying.TintColor); CheckTrue(ReferenceEquals(tilingX, set.TilingX)); CheckEqual(SpriteBatch.Varying.Tiling | SpriteBatch.Varying.TintColor, set.Columns); } public void NewColumns_MatchTheEntries() { var set = new SpriteBatch.EntrySet(capacity: 6, SpriteBatch.Varying.None); set.AddColumns(SpriteBatch.Varying.CoverageGamma); CheckEqual(6, set.CoverageGammas.Length); } public void Tiling_AddsBothAxes() { var set = new SpriteBatch.EntrySet(); set.AddColumns(SpriteBatch.Varying.Tiling); CheckNotNull(set.TilingX); CheckNotNull(set.TilingY); } } } }