using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Developpez.Dotnet.Collections; using NUnit.Framework; namespace Developpez.Dotnet.Tests.Collections { [TestFixture(Description = "Tests unitaires pour la classe ReadOnlyDictionary")] public class ReadOnlyDictionaryTests { Dictionary _original; ReadOnlyDictionary _readOnly; [SetUp] public void Setup() { _original = new Dictionary(); _original.Add("test", "test"); _readOnly = new ReadOnlyDictionary(_original); } [Test] public void ReadOnlyDictionary_Contains_Should_Return_True_When_Exists() { Assert.IsTrue(_readOnly.Contains(new KeyValuePair("test", "test"))); Assert.IsFalse(_readOnly.Contains(new KeyValuePair("test1", "test"))); } [Test] public void ReadOnlyDictionary_ContainsKey_Should_Return_True_When_Key_Exists() { Assert.IsTrue(_readOnly.ContainsKey("test")); Assert.IsFalse(_readOnly.ContainsKey("test1")); } [Test] public void ReadOnlyDictionary_Item_Should_Return_Value_When_Key_Exists() { Assert.AreEqual("test", _readOnly["test"]); } [Test] public void ReadOnlyDictionary_Item_Should_Throw_KeyNotFoundException_When_Unexisting_Key() { string s = null; Assert.Throws( () => s = _readOnly["test1"]); } [Test] public void ReadOnlyDictionary_Count() { Assert.AreEqual(1, _readOnly.Count); } [Test] public void ReadOnlyDictionary_Keys() { Assert.AreEqual("test", _readOnly.Keys.ToArray()[0]); } [Test] public void ReadOnlyDictionary_Values() { Assert.AreEqual("test", _readOnly.Values.ToArray()[0]); } [Test] public void ReadOnlyDictionary_CopyTo() { KeyValuePair[] array = {new KeyValuePair()}; _readOnly.CopyTo(array, 0); Assert.AreEqual(1, array.Length); Assert.AreEqual("test", array[0].Key); Assert.AreEqual("test", array[0].Value); KeyValuePair[] array2 = { }; new ReadOnlyDictionary().CopyTo(array2, 0); Assert.AreEqual(0, array2.Length); } [Test] public void ReadOnlyDictionary_TryGetValue() { string result; bool found = _readOnly.TryGetValue("test", out result); Assert.AreEqual("test", result); Assert.IsTrue(found); found = _readOnly.TryGetValue("test1", out result); Assert.AreEqual(null, result); Assert.IsFalse(found); } [Test] public void ReadOnlyDictionary_IsReadOnly() { _readOnly = new ReadOnlyDictionary(); Assert.IsTrue(_readOnly.IsReadOnly); } [Test] public void ReadOnlyDictionary_ForEach() { _original.Add("test2", "test2"); string expected = ",test,test,test2,test2"; string actual = string.Empty; _readOnly = new ReadOnlyDictionary(_original); foreach (var item in _readOnly) { actual += "," + item.Value + "," + item.Key; } Assert.AreEqual(expected, actual); } [Test] public void ReadOnlyDictionary_Should_Throw_On_Add() { Assert.Throws( () => _readOnly.Add("titi", "toto")); } [Test] public void ReadOnlyDictionary_Should_Throw_On_Add_VeyValuePair() { Assert.Throws( () => _readOnly.Add(new KeyValuePair("titi", "toto"))); } [Test] public void ReadOnlyDictionary_Should_Throw_On_SetIndexer() { Assert.Throws( () => _readOnly["titi"] = "toto"); } [Test] public void ReadOnlyDictionary_Should_Throw_On_Remove() { Assert.Throws( () => _readOnly.Remove("test")); } [Test] public void ReadOnlyDictionary_Should_Throw_On_Remove_KeyValuePair() { Assert.Throws( () => _readOnly.Remove(new KeyValuePair("test", "test"))); } [Test] public void ReadOnlyDictionary_Should_Throw_On_Clear() { Assert.Throws( () => _readOnly.Clear()); } [Test] public void ReadOnlyDictionary_WithCopy() { var dic = new Dictionary(_original); var readOnlyDic = new ReadOnlyDictionary(dic, false); var readOnlyCopy = new ReadOnlyDictionary(dic, true); dic.Remove("test"); dic.Add("foo", "bar"); Assert.IsFalse(readOnlyDic.ContainsKey("test")); Assert.IsTrue(readOnlyDic.ContainsKey("foo")); Assert.IsTrue(readOnlyCopy.ContainsKey("test")); Assert.IsFalse(readOnlyCopy.ContainsKey("foo")); } [Test] public void Test_FromNonGenericDictionary() { var hashtable = new Hashtable(); hashtable.Add("foo", 42); var readOnlyDic = ReadOnlyDictionary.FromNonGenericDictionary(hashtable); Assert.IsTrue(readOnlyDic.IsReadOnly); Assert.IsTrue(readOnlyDic.ContainsKey("foo")); hashtable.Add(911, "bar"); Assert.Throws( () => readOnlyDic = ReadOnlyDictionary.FromNonGenericDictionary(hashtable)); } } }