using Annulus; using Azimuth; using System; using UnitTestSharp; namespace Glass.UnitTests { public class BandsMaterialTests : TestFixture { public static readonly Material Band = new SolidColorMaterial { DebugName = "band" }; public static Rect RectAt(Scalar x, Scalar y, Scalar width, Scalar height) { return Rect.FromPositionAndSize(new Vector(x, y), new Vector(width, height)); } public class CtorTests : TestFixture { public void KeepsTheBandMaterial() { CheckEqual(Band, new BandsMaterial(Band).BandMaterial); } public void ReportsTheBandMaterialAsItsOnlyChild() { var material = new BandsMaterial(Band); CheckEqual(1, material.ChildMaterials.Count); CheckEqual(Band, material.ChildMaterials[0]); } public void StartsWithNoBands() { CheckEqual(0, new BandsMaterial(Band).Count); } public void NoBandMaterial_Throws() { CheckThrow(typeof(ArgumentNullException)); new BandsMaterial(null); } } public class AddTests : TestFixture { public void KeepsTheBandsInTheOrderAdded() { var material = new BandsMaterial(Band); material.Add(RectAt(1, 2, 3, 4)); material.Add(RectAt(5, 6, 7, 8)); CheckEqual(2, material.Count); CheckEqual(RectAt(1, 2, 3, 4), material[0]); CheckEqual(RectAt(5, 6, 7, 8), material[1]); } public void MoreThanTheStartingRoomForIsKept() { var material = new BandsMaterial(Band); for (int i = 0; i < 20; ++i) { material.Add(RectAt(i, 0, 1, 1)); } CheckEqual(20, material.Count); CheckEqual(RectAt(0, 0, 1, 1), material[0]); CheckEqual(RectAt(19, 0, 1, 1), material[19]); } } public class ClearTests : TestFixture { public void TakesAwayEveryBand() { var material = new BandsMaterial(Band); material.Add(RectAt(1, 2, 3, 4)); material.Add(RectAt(5, 6, 7, 8)); material.Clear(); CheckEqual(0, material.Count); } public void LeavesRoomToAddAgain() { var material = new BandsMaterial(Band); material.Add(RectAt(1, 2, 3, 4)); material.Clear(); material.Add(RectAt(5, 6, 7, 8)); CheckEqual(1, material.Count); CheckEqual(RectAt(5, 6, 7, 8), material[0]); } } public class CopyTests : TestFixture { public void HoldsTheBandsTheOriginalHad() { var original = new BandsMaterial(Band); original.Add(RectAt(1, 2, 3, 4)); BandsMaterial copy = original with { DebugName = "copy" }; CheckEqual(1, copy.Count); CheckEqual(RectAt(1, 2, 3, 4), copy[0]); CheckEqual(Band, copy.BandMaterial); } public void AddingToTheCopy_LeavesTheOriginalAlone() { var original = new BandsMaterial(Band); BandsMaterial copy = original with { DebugName = "copy" }; copy.Add(RectAt(1, 2, 3, 4)); CheckEqual(0, original.Count); } public void ClearingTheOriginal_LeavesTheCopyAlone() { var original = new BandsMaterial(Band); original.Add(RectAt(1, 2, 3, 4)); BandsMaterial copy = original with { DebugName = "copy" }; original.Clear(); CheckEqual(1, copy.Count); } } } }