using Azimuth; using UnitTestSharp; namespace Glass.UnitTests { public class DropdownMaterialTests : TestFixture { public static DropdownMaterial With(ButtonMaterial arrow = default, Material background = null, Scalar arrowGap = default) { return new DropdownMaterial { ArrowButton = arrow, Background = background, ArrowGap = arrowGap }; } public class ArrowSizeTests : TestFixture { public void Always_IsTheArrowsPreferredSize() { CheckEqual(new Vector(20, 16), With(DropdownTests.Arrow(20, 16)).ArrowSize); } public void NoArrowMaterial_IsZero() { CheckEqual(Vector.Zero, With().ArrowSize); } public void ArrowThatFillsWhatItIsGiven_IsZero() { CheckEqual(Vector.Zero, With(new Material()).ArrowSize); } } public class BoundsSizeForTests : TestFixture { public void NoBackgroundAndNoArrow_IsTheLabelSize() { CheckEqual(new Vector(100, 16), With().BoundsSizeFor(new Vector(100, 16))); } public void Always_PutsTheArrowBesideTheLabel() { CheckEqual(new Vector(120, 20), With(DropdownTests.Arrow(20, 20)).BoundsSizeFor(new Vector(100, 16))); } public void LabelTallerThanTheArrow_KeepsTheLabelsHeight() { CheckEqual(new Vector(120, 30), With(DropdownTests.Arrow(20, 20)).BoundsSizeFor(new Vector(100, 30))); } public void Background_AddsItsBorder() { DropdownMaterial material = With(DropdownTests.Arrow(20, 20), DropdownTests.Bordered3); CheckEqual(new Vector(126, 26), material.BoundsSizeFor(new Vector(100, 16))); } public void WithAnArrow_AddsTheGapBetweenItAndTheLabel() { DropdownMaterial material = With(DropdownTests.Arrow(20, 20), arrowGap: 8); CheckEqual(new Vector(128, 20), material.BoundsSizeFor(new Vector(100, 16))); } public void NoArrow_IgnoresTheGap() { DropdownMaterial material = With(arrowGap: 8); CheckEqual(new Vector(100, 16), material.BoundsSizeFor(new Vector(100, 16))); } } public class LabelSizeForTests : TestFixture { public void NoBackgroundAndNoArrow_IsTheBoundsSize() { CheckEqual(new Vector(200, 40), With().LabelSizeFor(new Vector(200, 40))); } public void Always_TakesTheArrowOffTheWidth() { CheckEqual(new Vector(180, 40), With(DropdownTests.Arrow(20, 20)).LabelSizeFor(new Vector(200, 40))); } public void Background_TakesItsBorderOffBothAxes() { DropdownMaterial material = With(DropdownTests.Arrow(20, 20), DropdownTests.Bordered3); CheckEqual(new Vector(174, 34), material.LabelSizeFor(new Vector(200, 40))); } public void ArrowWiderThanTheBounds_LeavesNoWidth() { CheckEqual(new Vector(0, 40), With(DropdownTests.Arrow(20, 20)).LabelSizeFor(new Vector(15, 40))); } public void WithAnArrow_TakesTheGapOffTheWidthToo() { DropdownMaterial material = With(DropdownTests.Arrow(20, 20), arrowGap: 8); CheckEqual(new Vector(172, 40), material.LabelSizeFor(new Vector(200, 40))); } public void NoArrow_IgnoresTheGap() { DropdownMaterial material = With(arrowGap: 8); CheckEqual(new Vector(200, 40), material.LabelSizeFor(new Vector(200, 40))); } public void ArrowAndGapWiderThanTheBounds_LeavesNoWidth() { DropdownMaterial material = With(DropdownTests.Arrow(20, 20), arrowGap: 8); CheckEqual(new Vector(0, 40), material.LabelSizeFor(new Vector(15, 40))); } public void Always_InvertsBoundsSizeFor() { DropdownMaterial material = With(DropdownTests.Arrow(20, 20), DropdownTests.Bordered3, arrowGap: 8); var labelSize = new Vector(100, 30); CheckEqual(labelSize, material.LabelSizeFor(material.BoundsSizeFor(labelSize))); } } } }