1 // -----------------------------------------------------------------------
\r
2 // Copyright (c) Microsoft Corporation. All rights reserved.
\r
3 // -----------------------------------------------------------------------
\r
5 using System.Collections;
\r
6 using System.Collections.Generic;
\r
7 using System.UnitTesting;
\r
8 using Microsoft.VisualStudio.TestTools.UnitTesting;
\r
10 namespace Microsoft.Internal.Collections
\r
13 public class ReadOnlyDictionaryTests
\r
16 public void Constructor_NullAsDictionaryArgument_ShouldCreateEmptyDictionary()
\r
18 var dictionary = new ReadOnlyDictionary<string, object>(null);
\r
20 EnumerableAssert.IsEmpty(dictionary);
\r
24 public void Constructor_WritableDictionaryAsDictionaryArgument_ShouldPopulateCollection()
\r
26 var dictionary = GetWritableDictionaryWithData();
\r
27 var readOnlyDictionary = new ReadOnlyDictionary<string, object>(dictionary);
\r
29 EnumerableAssert.AreEqual(dictionary, readOnlyDictionary);
\r
33 public void Add1_ShouldThrowNotSupported()
\r
35 var dictionary = GetReadOnlyDictionaryWithData();
\r
37 ExceptionAssert.Throws<NotSupportedException>(() =>
\r
39 dictionary.Add(new KeyValuePair<string, object>("Key", "Value"));
\r
44 public void Add2_ShouldThrowNotSupported()
\r
46 var dictionary = GetReadOnlyDictionaryWithData();
\r
48 ExceptionAssert.Throws<NotSupportedException>(() =>
\r
50 dictionary.Add("Key", "Value");
\r
55 public void Clear_ShouldThrowNotSupported()
\r
57 var dictionary = GetReadOnlyDictionaryWithData();
\r
59 ExceptionAssert.Throws<NotSupportedException>(() =>
\r
66 public void Remove1_ShouldThrowNotSupported()
\r
68 var dictionary = GetReadOnlyDictionaryWithData();
\r
70 ExceptionAssert.Throws<NotSupportedException>(() =>
\r
72 dictionary.Remove("Value");
\r
77 public void Remove2_ShouldThrowNotSupported()
\r
79 var dictionary = GetReadOnlyDictionaryWithData();
\r
81 ExceptionAssert.Throws<NotSupportedException>(() =>
\r
83 dictionary.Remove(new KeyValuePair<string, object>("Key", "Value"));
\r
88 public void ItemSet_ShouldThrowNotSupported()
\r
90 var dictionary = GetReadOnlyDictionaryWithData();
\r
92 ExceptionAssert.Throws<NotSupportedException>(() =>
\r
94 dictionary["Key"] = "Value";
\r
99 public void Keys_ShouldReturnWrappedDictionaryKeys()
\r
101 var dictionary = GetWritableDictionaryWithData();
\r
102 var readOnlyDictionary = GetReadOnlyDictionary(dictionary);
\r
104 EnumerableAssert.AreEqual(readOnlyDictionary.Keys, dictionary.Keys);
\r
108 public void Values_ShouldReturnWrappedDictionaryValues()
\r
110 var dictionary = GetWritableDictionaryWithData();
\r
111 var readOnlyDictionary = GetReadOnlyDictionary(dictionary);
\r
113 EnumerableAssert.AreEqual(readOnlyDictionary.Values, readOnlyDictionary.Values);
\r
117 public void IsReadOnly_ShouldAlwaysBeTrue()
\r
119 var dictionary = GetWritableDictionaryWithData();
\r
120 var readOnlyDictionary = GetReadOnlyDictionary(dictionary);
\r
122 Assert.IsFalse(dictionary.IsReadOnly);
\r
123 Assert.IsTrue(readOnlyDictionary.IsReadOnly);
\r
127 public void Count_ShouldReturnWrappedDictionaryCount()
\r
129 var dictionary = GetWritableDictionaryWithData();
\r
130 var readOnlyDictionary = GetReadOnlyDictionary(dictionary);
\r
132 Assert.AreEqual(dictionary.Count, readOnlyDictionary.Count);
\r
136 public void ContainsKey()
\r
138 var dictionary = GetWritableDictionaryWithData();
\r
139 var readOnlyDictionary = GetReadOnlyDictionary(dictionary);
\r
141 Assert.IsTrue(readOnlyDictionary.ContainsKey("Key1"));
\r
142 Assert.IsFalse(readOnlyDictionary.ContainsKey("InvalidKey"));
\r
146 public void Contains()
\r
148 var dictionary = GetWritableDictionaryWithData();
\r
149 var readOnlyDictionary = GetReadOnlyDictionary(dictionary);
\r
151 Assert.IsTrue(readOnlyDictionary.Contains(new KeyValuePair<string,object>("Key1", "Value1")));
\r
152 Assert.IsFalse(readOnlyDictionary.Contains(new KeyValuePair<string,object>("InvalidKey", "Value1")));
\r
153 Assert.IsFalse(readOnlyDictionary.Contains(new KeyValuePair<string,object>("Key1", "InvalidValue")));
\r
157 public void CopyTo()
\r
159 var dictionary = GetWritableDictionaryWithData();
\r
160 var readOnlyDictionary = GetReadOnlyDictionary(dictionary);
\r
161 KeyValuePair<string, object>[] destination = new KeyValuePair<string, object> [readOnlyDictionary.Count];
\r
162 readOnlyDictionary.CopyTo(destination, 0);
\r
163 EnumerableAssert.AreEqual(readOnlyDictionary, destination);
\r
167 public void GetEnumerator()
\r
169 var dictionary = GetWritableDictionaryWithData();
\r
170 var readOnlyDictionary = GetReadOnlyDictionary(dictionary);
\r
171 IEnumerable<KeyValuePair<string, object>> genericEnumerable = readOnlyDictionary;
\r
172 EnumerableAssert.AreEqual(genericEnumerable, dictionary);
\r
173 IEnumerable weakEnumerable = (IEnumerable)readOnlyDictionary;
\r
174 EnumerableAssert.AreEqual(weakEnumerable, dictionary);
\r
180 var dictionary = GetWritableDictionaryWithData();
\r
181 var readOnlyDictionary = GetReadOnlyDictionary(dictionary);
\r
182 Assert.AreEqual("Value1", readOnlyDictionary["Key1"], "Expecting to read wrapped value");
\r
186 public void TryGetValue()
\r
188 var dictionary = GetWritableDictionaryWithData();
\r
189 var readOnlyDictionary = GetReadOnlyDictionary(dictionary);
\r
191 bool ret = readOnlyDictionary.TryGetValue("Key1", out result);
\r
192 Assert.IsTrue(ret, "Expecting TryGetExportedValue to return true for wrapped key");
\r
193 Assert.AreEqual("Value1", result, "Expecting TryGetExportedValue to return wrapped value");
\r
196 private static IDictionary<String, object> GetReadOnlyDictionaryWithData()
\r
198 return GetReadOnlyDictionary(GetWritableDictionaryWithData());
\r
201 private static IDictionary<TKey, TValue> GetReadOnlyDictionary<TKey, TValue>(IDictionary<TKey, TValue> dictionary)
\r
203 return new ReadOnlyDictionary<TKey, TValue>(dictionary);
\r
206 private static IDictionary<String, object> GetWritableDictionaryWithData()
\r
208 IDictionary<String, object> dictionary = new Dictionary<String, object>();
\r
209 dictionary.Add("Key1", "Value1");
\r
210 dictionary.Add("Key2", 42);
\r