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