using Clave; using System; using UnitTestSharp; namespace Glass.UnitTests { public class SliderBehaviorTests : TestFixture { public static ChordSet Pressing(KeyCode key) { return ChordSet.Of(Chord.PressOrRepeat(key)); } public class DefaultTests : TestFixture { public void IsSharedAcrossReads() { CheckTrue(ReferenceEquals(SliderBehavior.Default, SliderBehavior.Default)); } public void ArrowsStep() { CheckEqual(2, SliderBehavior.Default.DecreaseChords.Count); CheckEqual(2, SliderBehavior.Default.IncreaseChords.Count); } public void PageKeysAndHomeAndEndEachHaveOneChord() { CheckEqual(1, SliderBehavior.Default.BigDecreaseChords.Count); CheckEqual(1, SliderBehavior.Default.BigIncreaseChords.Count); CheckEqual(1, SliderBehavior.Default.ToMinChords.Count); CheckEqual(1, SliderBehavior.Default.ToMaxChords.Count); } public void KeyChordsHoldEveryChord() { CheckEqual(8, SliderBehavior.Default.KeyChords.Count); } } public class ChordSetTests : TestFixture { public void EachSetGivenIsKept() { ChordSet decrease = Pressing(KeyCode.Q); ChordSet increase = Pressing(KeyCode.E); ChordSet bigDecrease = Pressing(KeyCode.A); ChordSet bigIncrease = Pressing(KeyCode.D); ChordSet toMin = Pressing(KeyCode.Z); ChordSet toMax = Pressing(KeyCode.C); var behavior = new SliderBehavior { DecreaseChords = decrease, IncreaseChords = increase, BigDecreaseChords = bigDecrease, BigIncreaseChords = bigIncrease, ToMinChords = toMin, ToMaxChords = toMax, }; CheckTrue(ReferenceEquals(decrease, behavior.DecreaseChords)); CheckTrue(ReferenceEquals(increase, behavior.IncreaseChords)); CheckTrue(ReferenceEquals(bigDecrease, behavior.BigDecreaseChords)); CheckTrue(ReferenceEquals(bigIncrease, behavior.BigIncreaseChords)); CheckTrue(ReferenceEquals(toMin, behavior.ToMinChords)); CheckTrue(ReferenceEquals(toMax, behavior.ToMaxChords)); } public void SetsLeftOut_KeepTheDefaultKeys() { var behavior = new SliderBehavior { DecreaseChords = Pressing(KeyCode.Q) }; CheckEqual(2, behavior.IncreaseChords.Count); CheckEqual(1, behavior.BigDecreaseChords.Count); CheckEqual(1, behavior.BigIncreaseChords.Count); CheckEqual(1, behavior.ToMinChords.Count); CheckEqual(1, behavior.ToMaxChords.Count); } public void Null_Throws() { CheckThrow(typeof(ArgumentNullException)); new SliderBehavior { DecreaseChords = null }; } public void TheSetItAlreadyHas_IsAccepted() { var behavior = new SliderBehavior { DecreaseChords = SliderBehavior.Default.DecreaseChords }; CheckEqual(8, behavior.KeyChords.Count); } public void OneSetInTwoSlots_Throws() { ChordSet shared = Pressing(KeyCode.Q); CheckThrow(typeof(ArgumentException)); new SliderBehavior { DecreaseChords = shared, IncreaseChords = shared }; } } public class KeyChordsTests : TestFixture { public void CoverOnlyTheChordsInPlace() { var behavior = new SliderBehavior { DecreaseChords = Pressing(KeyCode.Q), IncreaseChords = Pressing(KeyCode.E), }; // Q and E, then Page Down, Page Up, Home and End. CheckEqual(6, behavior.KeyChords.Count); } public void FollowAChordSetChangedWithWith() { SliderBehavior changed = SliderBehavior.Default with { ToMinChords = Pressing(KeyCode.Q) }; CheckEqual(8, changed.KeyChords.Count); CheckFalse(ReferenceEquals(SliderBehavior.Default.KeyChords, changed.KeyChords)); } public void LeaveTheOriginalAloneWhenCopiedWithWith() { SliderBehavior original = SliderBehavior.Default; SliderBehavior unused = original with { ToMinChords = Pressing(KeyCode.Q) }; CheckEqual(8, original.KeyChords.Count); CheckEqual(1, original.ToMinChords.Count); } } } }