using System; using UnitTestSharp; using static Glass.UnitTests.MessageBoxTests; namespace Glass.UnitTests { public class MessageBoxMaterialTests : TestFixture { public class BitIndexOfTests : TestFixture { public void ASingleBit_IsItsPositionCountingFromTheLowest() { CheckEqual(0, MessageBoxMaterial.BitIndexOf(TestAnswer.Yes)); CheckEqual(1, MessageBoxMaterial.BitIndexOf(TestAnswer.No)); CheckEqual(2, MessageBoxMaterial.BitIndexOf(TestAnswer.Cancel)); } public void TheTopBitOfAWideEnum_Is63() { CheckEqual(63, MessageBoxMaterial.BitIndexOf(WideAnswer.High)); } public void TheSignBitOfASignedEnum_IsItsPositionInTheEnumsWidth() { CheckEqual(7, MessageBoxMaterial.BitIndexOf(SignedAnswer.Sign)); } public void NoBits_Throws() { CheckThrow(typeof(ArgumentException)); MessageBoxMaterial.BitIndexOf((TestAnswer)0); } public void SeveralBits_Throws() { CheckThrow(typeof(ArgumentException)); MessageBoxMaterial.BitIndexOf(TestAnswer.Yes | TestAnswer.No); } } public class BitsOfTests : TestFixture { public void Always_IsTheBitsTheValueSets() { CheckEqual(5UL, MessageBoxMaterial.BitsOf(TestAnswer.Yes | TestAnswer.Cancel)); } public void AnEnumWithNoBitsSet_IsZero() { CheckEqual(0UL, MessageBoxMaterial.BitsOf((TestAnswer)0)); } public void AWideEnum_KeepsItsTopBit() { CheckEqual(1UL << 63, MessageBoxMaterial.BitsOf(WideAnswer.High)); } public void ANegativeSignedEnum_StaysWithinItsOwnWidth() { CheckEqual(0x80UL, MessageBoxMaterial.BitsOf(SignedAnswer.Sign)); CheckEqual(0x81UL, MessageBoxMaterial.BitsOf(SignedAnswer.Sign | SignedAnswer.Low)); } } public class WithButtonTests : TestFixture { public void Always_GivesTheAnswersBitTheLook() { ButtonMaterial look = DropdownTests.Arrow(1, 1); MessageBoxMaterial material = new MessageBoxMaterial().WithButton(TestAnswer.No, look); CheckEqual(2, material.Buttons.Length); CheckEqual(look, material.Buttons[1]); CheckEqual(default(ButtonMaterial), material.Buttons[0]); } public void ALaterOne_KeepsTheEarlierLooksAndGrowsTheArray() { ButtonMaterial yes = DropdownTests.Arrow(1, 1); ButtonMaterial cancel = DropdownTests.Arrow(3, 3); MessageBoxMaterial material = new MessageBoxMaterial() .WithButton(TestAnswer.Yes, yes) .WithButton(TestAnswer.Cancel, cancel); CheckEqual(3, material.Buttons.Length); CheckEqual(yes, material.Buttons[0]); CheckEqual(cancel, material.Buttons[2]); } public void ForABitAlreadySet_ReplacesItsLookAndKeepsTheLength() { ButtonMaterial replacement = DropdownTests.Arrow(5, 5); MessageBoxMaterial material = new MessageBoxMaterial() .WithButton(TestAnswer.No, DropdownTests.Arrow(1, 1)) .WithButton(TestAnswer.Cancel, DropdownTests.Arrow(3, 3)); material = material.WithButton(TestAnswer.No, replacement); CheckEqual(3, material.Buttons.Length); CheckEqual(replacement, material.Buttons[1]); } public void Always_LeavesTheOriginalAlone() { MessageBoxMaterial original = Measurements; ButtonMaterial[] looks = original.Buttons; ButtonMaterial first = looks[0]; original.WithButton(TestAnswer.Yes, DropdownTests.Arrow(9, 9)); CheckTrue(ReferenceEquals(looks, original.Buttons)); CheckEqual(first, original.Buttons[0]); } public void Always_KeepsTheOtherFields() { MessageBoxMaterial material = Measurements with { Spacing = 7 }; MessageBoxMaterial changed = material.WithButton(TestAnswer.Yes, DropdownTests.Arrow(9, 9)); CheckEqual(7, changed.Spacing); CheckTrue(ReferenceEquals(material.TextStyle, changed.TextStyle)); } public void ForSeveralBits_Throws() { CheckThrow(typeof(ArgumentException)); new MessageBoxMaterial().WithButton(TestAnswer.Yes | TestAnswer.No, DropdownTests.Arrow(1, 1)); } } } }