#region CPL License /* Nuclex Framework Copyright (C) 2002-2010 Nuclex Development Labs This library is free software; you can redistribute it and/or modify it under the terms of the IBM Common Public License as published by the IBM Corporation; either version 1.0 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the IBM Common Public License for more details. You should have received a copy of the IBM Common Public License along with this library */ #endregion #if UNITTEST using System; using System.Collections.Generic; using NUnit.Framework; using NMock; namespace Nuclex.Support.Collections { /// Unit tests for the multi dictionary [TestFixture] public class MultiDictionaryTest { /// /// Verifies that new instances of the multi dictionary can be created /// [Test] public void CanConstructNewDictionary() { var dictionary = new MultiDictionary(); Assert.IsNotNull(dictionary); // nonsense, prevents compiler warning } /// /// Verifies that a new multi dictionary based on a read-only dictionary is /// also read-only /// [Test] public void IsReadOnlyWhenBasedOnReadOnlyContainer() { var readOnly = new ReadOnlyDictionary>( new Dictionary>() ); var dictionary = new MultiDictionary(readOnly); Assert.IsTrue(dictionary.IsReadOnly); } /// /// Ensures that the multi dictionary can contain the same key multiple times /// (or in other words, multiple values on the same key) /// [Test] public void CanContainKeyMultipleTimes() { var dictionary = new MultiDictionary(); dictionary.Add(123, "one two three"); dictionary.Add(123, "eins zwei drei"); Assert.AreEqual(2, dictionary.Count); CollectionAssert.AreEquivalent( new KeyValuePair[] { new KeyValuePair(123, "one two three"), new KeyValuePair(123, "eins zwei drei") }, dictionary ); } /// /// Verifies that adding values through the indexer still updates the item count /// [Test] public void AddingValuesFromIndexerUpdatesCount() { var dictionary = new MultiDictionary(); dictionary.Add(42, "the answer to everything"); dictionary[42].Add("21x2"); Assert.AreEqual(2, dictionary.Count); CollectionAssert.AreEquivalent( new KeyValuePair[] { new KeyValuePair(42, "the answer to everything"), new KeyValuePair(42, "21x2") }, dictionary ); } /// /// Tests whether the collection can count the number of values stored /// under a key /// [Test] public void ValuesWithSameKeyCanBeCounted() { var dictionary = new MultiDictionary(); dictionary.Add(10, "ten"); dictionary.Add(20, "twenty"); dictionary.Add(30, "thirty"); dictionary.Add(10, "zehn"); dictionary.Add(20, "zwanzig"); dictionary.Add(10, "dix"); Assert.AreEqual(6, dictionary.Count); Assert.AreEqual(3, dictionary.CountValues(10)); Assert.AreEqual(2, dictionary.CountValues(20)); Assert.AreEqual(1, dictionary.CountValues(30)); } /// /// Ensures that its possible to remove values individually without affecting /// other values stored under the same key /// [Test] public void ValuesCanBeRemovedIndividually() { var dictionary = new MultiDictionary(); dictionary.Add(10, "ten"); dictionary.Add(10, "zehn"); dictionary.Add(10, "dix"); dictionary.Remove(10, "zehn"); Assert.AreEqual(2, dictionary.Count); CollectionAssert.AreEquivalent( new KeyValuePair[] { new KeyValuePair(10, "ten"), new KeyValuePair(10, "dix") }, dictionary ); } } } // namespace Nuclex.Support.Collections #endif // UNITTEST