/// <summary> /// manages input history browsing based on user key press, /// encapsulated by <paramref name="consoleKeyInfo"/>. /// </summary> /// <remarks> /// <para> /// this method should be called each time user presses a key, /// in order for browsing mechanism to be responsive. /// </para> /// <para> /// if user selects a particular entry, either by hitting an end-of-input key ('Enter' by default) /// or by editing the entry, all entries up to (i.e less recent than) selected entry /// are removed from the history. /// </para> /// </remarks> /// <param name="consoleKeyInfo">user-pressed key</param> public void HandleInputHistoryBrowsing(ConsoleKeyInfo consoleKeyInfo) { if (isBrowsingKey(consoleKeyInfo)) // pressed key was a browsing key { handleBrowsingKey(consoleKeyInfo); } // pressed key is a textual key (i.e it changes the input), // and browsing procedure is active else if (ConsoleIOUtils.IsTextualKey(consoleKeyInfo) && browsingActive) { // set browsing procedure state to inactive browsingActive = false; // pop original user input (from before browsing started) recentInputEntries.Pop(); // reset selected entry index selectedEntryIndex = 0; } }
static void ReversedDequeue(IndexableStack<int> queue, List<int> items) { Assert.AreEqual(items.Count, queue.Count); items.Reverse(); // the queue will return items in reverse order // first test using the enumerator int index = 0; foreach(int i in queue) { Assert.IsTrue(index < items.Count); Assert.AreEqual(items[index], i); index++; } // then actually dequeue the items foreach(int i in items) Assert.AreEqual(i, queue.Pop()); Assert.AreEqual(queue.Count, 0); }
public void Test() { int[] numbers = new int[] { 8, 4, 0, 2, 5, 7, 1, 8, 6, 3, 8, 9 }; IndexableStack<int> queue; TestHelpers.TestException<ArgumentOutOfRangeException>(delegate() { queue = new IndexableStack<int>(-10); }); queue = new IndexableStack<int>(4); // use a small capacity to force a resize Assert.IsFalse(queue.IsReadOnly); TestHelpers.TestException<InvalidOperationException>(delegate() { queue.Pop(); }); TestHelpers.TestException<InvalidOperationException>(delegate() { queue.Peek(); }); TestHelpers.TestEnumerator(queue); // test basic addition and removal List<int> list = new List<int>(numbers); AddItems(queue, numbers); Assert.AreEqual(queue.Peek(), 9); ReversedDequeue(queue, list); // test Count AddItems(queue, numbers); Assert.AreEqual(queue.Count, numbers.Length); // test CopyTo list = new List<int>(numbers); list.Reverse(); int[] array = new int[queue.Count+5]; queue.CopyTo(array, 0); for(int i=0; i<list.Count; i++) Assert.AreEqual(array[i], list[i]); queue.CopyTo(array, 5); for(int i=0; i<list.Count; i++) Assert.AreEqual(array[i+5], list[i]); // test indexer for(int i=0; i<numbers.Length; i++) Assert.AreEqual(numbers[i], queue[i]); int original = queue.Peek(); queue[queue.Count-1] = ~original; Assert.AreEqual(~original, queue.Peek()); TestHelpers.TestException<ArgumentOutOfRangeException>(delegate() { int x = queue[-1]; }); TestHelpers.TestException<ArgumentOutOfRangeException>(delegate() { int x = queue[queue.Count]; }); TestHelpers.TestException<ArgumentOutOfRangeException>(delegate() { queue[-1] = 0; }); TestHelpers.TestException<ArgumentOutOfRangeException>(delegate() { queue[queue.Count] = 0; }); // test Capacity queue.Capacity = 20; Assert.AreEqual(20, queue.Capacity); TestHelpers.TestException<ArgumentOutOfRangeException>(delegate() { queue.Capacity = 1; }); // test TrimExcess queue.TrimExcess(); Assert.AreEqual(numbers.Length, queue.Capacity); // test Contains queue.Clear(); AddItems(queue, numbers); foreach(int i in numbers) Assert.IsTrue(queue.Contains(i)); Assert.IsFalse(queue.Contains(20)); // test Remove list = new List<int>(numbers); TestRemove(queue, list, 7, 8, 9); Assert.IsFalse(((ICollection<int>)queue).Remove(20)); // test Clear queue.Clear(); Assert.AreEqual(0, queue.Count); }