using Annulus; using Azimuth; using System; using UnitTestSharp; namespace Glass.UnitTests { public class TextBoxRenderMaterialTests : TestFixture { public static readonly Material Padded = new SolidColorMaterial { BorderSize = new Rect.BorderSize { Left = 4, Top = 3, Right = 2, Bottom = 1 }, }; public static readonly Material Look = new SolidColorMaterial(); public static Rect RectAt(Scalar x, Scalar y, Scalar width, Scalar height) { return Rect.FromPositionAndSize(new Vector(x, y), new Vector(width, height)); } public static TextBox.RenderState NewState() { return new TextBox.RenderState(new BakedTextMaterial(new TextMaterialStyle(), "ab")); } public class RequiredStateTypeTests : TestFixture { public void IsTheTextBoxRenderState() { CheckEqual(typeof(TextBox.RenderState), new TextBoxRenderMaterial().RequiredStateType); } } public class InitTests : TestFixture { public void StartsWithNoBackgroundAndNoCaret() { var material = new TextBoxRenderMaterial(); CheckNull(material.Background); CheckNull(material.Caret); } public void KeepsTheBackgroundAndTheCaret() { var material = new TextBoxRenderMaterial { Background = Padded, Caret = Look }; CheckEqual(Padded, material.Background); CheckEqual(Look, material.Caret); } } public class ViewportRectTests : TestFixture { public void IsTheBackgroundsViewport() { var material = new TextBoxRenderMaterial { Background = Padded }; CheckEqual(RectAt(14, 23, 94, 46), material.ViewportRect(RectAt(10, 20, 100, 50))); } public void WithNoBackground_IsTheWholeRect() { var material = new TextBoxRenderMaterial(); CheckEqual(RectAt(10, 20, 100, 50), material.ViewportRect(RectAt(10, 20, 100, 50))); } public void Scaled_ScalesTheBackgroundsBorderWithTheMaterial() { var material = new TextBoxRenderMaterial { Background = Padded, Scale = 2 }; CheckEqual(RectAt(18, 26, 88, 42), material.ViewportRect(RectAt(10, 20, 100, 50))); } public void ScaledWithNoBackground_IsTheWholeRect() { var material = new TextBoxRenderMaterial { Scale = 2 }; CheckEqual(RectAt(10, 20, 100, 50), material.ViewportRect(RectAt(10, 20, 100, 50))); } } public class TextRectTests : TestFixture { public void WithNothingReserved_IsTheViewportRect() { var material = new TextBoxRenderMaterial { Background = Padded }; CheckEqual(RectAt(14, 23, 94, 46), material.TextRect(RectAt(10, 20, 100, 50), NewState())); } public void LeavesTheReservedWidthClearAtTheRight() { var material = new TextBoxRenderMaterial { Background = Padded }; TextBox.RenderState state = NewState(); state.ReservedRight = 20; CheckEqual(RectAt(14, 23, 74, 46), material.TextRect(RectAt(10, 20, 100, 50), state)); } public void MoreThanTheWidthReserved_LeavesNoWidth() { var material = new TextBoxRenderMaterial { Background = Padded }; TextBox.RenderState state = NewState(); state.ReservedRight = 500; CheckEqual(RectAt(14, 23, 0, 46), material.TextRect(RectAt(10, 20, 100, 50), state)); } public void LeavesTheReservedHeightClearAtTheBottom() { var material = new TextBoxRenderMaterial { Background = Padded }; TextBox.RenderState state = NewState(); state.ReservedBottom = 20; CheckEqual(RectAt(14, 23, 94, 26), material.TextRect(RectAt(10, 20, 100, 50), state)); } public void MoreThanTheHeightReserved_LeavesNoHeight() { var material = new TextBoxRenderMaterial { Background = Padded }; TextBox.RenderState state = NewState(); state.ReservedBottom = 500; CheckEqual(RectAt(14, 23, 94, 0), material.TextRect(RectAt(10, 20, 100, 50), state)); } public void Scale_LeavesTheRectItIsHandedInItsOwnSpaceAlone() { var material = new TextBoxRenderMaterial { Background = Padded, Scale = 2 }; CheckEqual(RectAt(14, 23, 94, 46), material.TextRect(RectAt(10, 20, 100, 50), NewState())); } public void LeavesTheViewportRectAlone() { var material = new TextBoxRenderMaterial { Background = Padded }; CheckEqual(RectAt(14, 23, 94, 46), material.ViewportRect(RectAt(10, 20, 100, 50))); } } public class BoundsSizeForTests : TestFixture { public void IsTheBackgroundsSizeForThatViewport() { var material = new TextBoxRenderMaterial { Background = Padded }; CheckEqual(new Vector(106, 54), material.BoundsSizeFor(new Vector(100, 50))); } public void WithNoBackground_IsTheViewportSize() { var material = new TextBoxRenderMaterial(); CheckEqual(new Vector(100, 50), material.BoundsSizeFor(new Vector(100, 50))); } public void Scaled_ScalesTheBackgroundsBorderWithTheMaterial() { var material = new TextBoxRenderMaterial { Background = Padded, Scale = 2 }; CheckEqual(new Vector(112, 58), material.BoundsSizeFor(new Vector(100, 50))); } public void InvertsViewportRectWhenScaled() { var material = new TextBoxRenderMaterial { Background = Padded, Scale = 2 }; Rect bounds = RectAt(0, 0, 112, 58); CheckEqual(bounds.Size, material.BoundsSizeFor(material.ViewportRect(bounds).Size)); } } public class CopyTests : TestFixture { public void HoldsWhatTheOriginalHeld() { var original = new TextBoxRenderMaterial { Background = Padded, Caret = Look }; TextBoxRenderMaterial copy = original with { DebugName = "copy" }; CheckEqual(Padded, copy.Background); CheckEqual(Look, copy.Caret); } } } }