using System; using UnitTestSharp; namespace Clave.UnitTests { public class KeyboardSnapshotTests : TestFixture { public static readonly KeySpaceSnapshot PressedA = new KeySpaceSnapshot(new KeyState(KeyCode.A), new KeyState(KeyCode.A), default); public static readonly KeySpaceSnapshot HeldB = new KeySpaceSnapshot(new KeyState(KeyCode.B), default, default); public class SpaceCountTests : TestFixture { public void CountsEveryKeySpace() { CheckEqual(Enum.GetValues(typeof(KeySpace)).Length, KeyboardSnapshot.SpaceCount); } } public class SpaceAtTests : TestFixture { public void Zero_IsPhysical() { CheckEqual(KeySpace.Physical, KeyboardSnapshot.SpaceAt(0)); } public void One_IsLayout() { CheckEqual(KeySpace.Layout, KeyboardSnapshot.SpaceAt(1)); } public void ANegativeIndex_Throws() { CheckThrow(typeof(ArgumentOutOfRangeException)); KeyboardSnapshot.SpaceAt(-1); } public void TheSpaceCount_Throws() { CheckThrow(typeof(ArgumentOutOfRangeException)); KeyboardSnapshot.SpaceAt(KeyboardSnapshot.SpaceCount); } } public class IndexerTests : TestFixture { public void Physical_ReadsThePhysicalKeys() { CheckEqual(PressedA, new KeyboardSnapshot(PressedA, HeldB)[KeySpace.Physical]); } public void Layout_ReadsTheLayoutKeys() { CheckEqual(HeldB, new KeyboardSnapshot(PressedA, HeldB)[KeySpace.Layout]); } public void ADefaultSnapshot_HoldsNothingInEitherSpace() { CheckEqual(default(KeySpaceSnapshot), default(KeyboardSnapshot)[KeySpace.Physical]); CheckEqual(default(KeySpaceSnapshot), default(KeyboardSnapshot)[KeySpace.Layout]); } public void UndefinedSpace_Throws() { CheckThrow(typeof(ArgumentOutOfRangeException)); KeySpaceSnapshot unused = default(KeyboardSnapshot)[(KeySpace)2]; } } public class WithTests : TestFixture { public void Physical_ReplacesOnlyThePhysicalKeys() { var keyboard = new KeyboardSnapshot(PressedA, HeldB); CheckEqual(new KeyboardSnapshot(HeldB, HeldB), keyboard.With(KeySpace.Physical, HeldB)); } public void Layout_ReplacesOnlyTheLayoutKeys() { var keyboard = new KeyboardSnapshot(PressedA, HeldB); CheckEqual(new KeyboardSnapshot(PressedA, PressedA), keyboard.With(KeySpace.Layout, PressedA)); } public void UndefinedSpace_Throws() { CheckThrow(typeof(ArgumentOutOfRangeException)); default(KeyboardSnapshot).With((KeySpace)2, PressedA); } } public class IsConsistentTests : TestFixture { public void Nothing_IsConsistent() { Check(default(KeyboardSnapshot).IsConsistent()); } public void ConsistentSpaces_AreConsistent() { Check(new KeyboardSnapshot(PressedA, HeldB).IsConsistent()); } public void AnInconsistentPhysicalSpace_IsNotConsistent() { var pressedButNotHeld = new KeySpaceSnapshot(default, new KeyState(KeyCode.A), default); CheckFalse(new KeyboardSnapshot(pressedButNotHeld, HeldB).IsConsistent()); } public void AnInconsistentLayoutSpace_IsNotConsistent() { var pressedButNotHeld = new KeySpaceSnapshot(default, new KeyState(KeyCode.A), default); CheckFalse(new KeyboardSnapshot(PressedA, pressedButNotHeld).IsConsistent()); } } } }