Ejemplo n.º 1
0
                /// <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;
                    }
                }
Ejemplo n.º 2
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);
  }
Ejemplo n.º 3
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);
  }