1 // 2 // Copyright (c) 2010-2018 Antmicro 3 // Copyright (c) 2011-2015 Realtime Embedded 4 // 5 // This file is licensed under the MIT License. 6 // Full license text is available in 'licenses/MIT.txt'. 7 // 8 using System; 9 using NUnit.Framework; 10 using System.Collections.Generic; 11 using Antmicro.Renode.Utilities.Collections; 12 using System.Linq; 13 14 namespace Antmicro.Renode.UnitTests.Collections 15 { 16 [TestFixture] 17 public class MultiValueDictionaryTests 18 { 19 readonly static string[] values1 = { "test1", "test2", "test3", "test4" }; 20 readonly static string[] values2 = { "dojpa1", "dojpa2", "dojpa3", "dojpa4" }; 21 22 [Test] ShouldAddRangeAndRetrieveViaIterator()23 public static void ShouldAddRangeAndRetrieveViaIterator() 24 { 25 var expected = values2.Concat(values1); 26 var multiDict = new MultiValueDictionary<string, string>(); 27 multiDict.AddRange("key2", values2); 28 multiDict.AddRange("key1", values1); 29 30 CollectionAssert.AreEqual(expected, multiDict); 31 } 32 33 [Test] ShouldAddAndTryGetValue()34 public static void ShouldAddAndTryGetValue() 35 { 36 var multiDict = new MultiValueDictionary<string, string>(); 37 multiDict.Add("key", "value"); 38 IReadOnlyCollection<string> values; 39 40 Assert.IsTrue(multiDict.TryGetValue("key", out values)); 41 Assert.AreSame("value", values.First()); 42 43 foreach(var value in values1) 44 { 45 multiDict.Add("key2", value); 46 } 47 48 Assert.IsTrue(multiDict.TryGetValue("key2", out values)); 49 CollectionAssert.AreEqual(values1, values); 50 } 51 52 [Test] ShouldNotGetValue()53 public static void ShouldNotGetValue() 54 { 55 var multiDict = new MultiValueDictionary<string, string>(); 56 multiDict.Add("key", "value"); 57 foreach(var value in values1) 58 { 59 multiDict.Add("key2", value); 60 } 61 IReadOnlyCollection<string> values; 62 Assert.IsFalse(multiDict.TryGetValue("海亀", out values)); 63 } 64 65 [Test] ShouldClear()66 public static void ShouldClear() 67 { 68 var multiDict = new MultiValueDictionary<string, string>(); 69 multiDict.AddRange("key2", values2); 70 multiDict.AddRange("key1", values1); 71 multiDict.Add("key3", "海亀"); 72 multiDict.Clear(); 73 IReadOnlyCollection<string> values; 74 Assert.IsFalse(multiDict.TryGetValue("海亀", out values)); 75 Assert.IsFalse(multiDict.TryGetValue("key1", out values)); 76 Assert.IsFalse(multiDict.TryGetValue("key2", out values)); 77 Assert.IsFalse(multiDict.TryGetValue("key3", out values)); 78 } 79 80 [Test] ShouldContainValue()81 public static void ShouldContainValue() 82 { 83 var multiDict = new MultiValueDictionary<int, string>(); 84 multiDict.AddRange(100, values2); 85 multiDict.AddRange(-5, values1); 86 multiDict.Add(1337, "海亀"); 87 88 Assert.IsTrue(multiDict.ContainsValue("dojpa2")); 89 Assert.IsTrue(multiDict.ContainsValue("海亀")); 90 Assert.IsTrue(multiDict.ContainsValue("test4")); 91 Assert.IsTrue(multiDict.Contains("海亀")); 92 Assert.IsTrue(multiDict.Contains("test1")); 93 Assert.IsTrue(multiDict.Contains("dojpa4")); 94 } 95 96 [Test] ShouldContainKey()97 public static void ShouldContainKey() 98 { 99 var multiDict = new MultiValueDictionary<string, string>(); 100 multiDict.AddRange("key2", values2); 101 multiDict.AddRange("key1", values1); 102 multiDict.Add("key3", "海亀"); 103 104 Assert.IsTrue(multiDict.ContainsKey("key1")); 105 Assert.IsTrue(multiDict.ContainsKey("key3")); 106 Assert.IsTrue(multiDict.ContainsKey("key2")); 107 Assert.IsTrue(multiDict.Contains("key1")); 108 Assert.IsTrue(multiDict.Contains("key2")); 109 Assert.IsTrue(multiDict.Contains("key3")); 110 } 111 112 [Test] ShouldContainKeyValue()113 public static void ShouldContainKeyValue() 114 { 115 var multiDict = new MultiValueDictionary<string, string>(); 116 multiDict.AddRange("key2", values2); 117 multiDict.AddRange("key1", values1); 118 multiDict.Add("key3", "海亀"); 119 120 Assert.IsTrue(multiDict.Contains("key2", "dojpa4")); 121 Assert.IsTrue(multiDict.Contains("key3", "海亀")); 122 Assert.IsTrue(multiDict.Contains("key1", "test1")); 123 } 124 } 125 } 126 127