OSDN Git Service

C#7.0で追加されたout変数宣言の構文を使用する
[opentween/open-tween.git] / OpenTween.Tests / LRUCacheDictionaryTest.cs
index 99aef9f..02fb9a9 100644 (file)
 // Boston, MA 02110-1301, USA.
 
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
-using NUnit.Framework;
-using System.Collections;
+using Xunit;
+using Xunit.Extensions;
 
 namespace OpenTween
 {
-    [TestFixture]
-    class LRUCacheDictionaryTest
+    public class LRUCacheDictionaryTest
     {
-        [Test]
+        private static AnyOrderComparer<string> collComparer = AnyOrderComparer<string>.Instance;
+
+        [Fact]
         public void InnerListTest()
         {
             var dict = new LRUCacheDictionary<string, string>
             {
-                {"key1", "value1"},
-                {"key2", "value2"},
-                {"key3", "value3"},
+                ["key1"] = "value1",
+                ["key2"] = "value2",
+                ["key3"] = "value3",
             };
 
             var node = dict.innerList.First;
-            Assert.That(node.Value.Key, Is.EqualTo("key3"));
+            Assert.Equal("key3", node.Value.Key);
             node = node.Next;
-            Assert.That(node.Value.Key, Is.EqualTo("key2"));
+            Assert.Equal("key2", node.Value.Key);
             node = node.Next;
-            Assert.That(node.Value.Key, Is.EqualTo("key1"));
+            Assert.Equal("key1", node.Value.Key);
 
             // 2 -> 3 -> 1 の順に値を参照
             var x = dict["key2"];
@@ -55,21 +57,26 @@ namespace OpenTween
 
             // 直近に参照した順で並んでいるかテスト
             node = dict.innerList.First;
-            Assert.That(node.Value.Key, Is.EqualTo("key1"));
+            Assert.Equal("key1", node.Value.Key);
             node = node.Next;
-            Assert.That(node.Value.Key, Is.EqualTo("key3"));
+            Assert.Equal("key3", node.Value.Key);
             node = node.Next;
-            Assert.That(node.Value.Key, Is.EqualTo("key2"));
+            Assert.Equal("key2", node.Value.Key);
         }
 
-        [Test]
-        public void TrimLimitTest([Range(1, 5)] int trimLimit)
+        [Theory]
+        [InlineData(1)]
+        [InlineData(2)]
+        [InlineData(3)]
+        [InlineData(4)]
+        [InlineData(5)]
+        public void TrimLimitTest(int trimLimit)
         {
             var dict = new LRUCacheDictionary<string, string>()
             {
-                {"key1", "value1"},
-                {"key2", "value2"},
-                {"key3", "value3"},
+                ["key1"] = "value1",
+                ["key2"] = "value2",
+                ["key3"] = "value3",
             };
 
             dict.TrimLimit = trimLimit;
@@ -78,26 +85,26 @@ namespace OpenTween
             if (trimLimit >= 3)
             {
                 // trimLimit がアイテムの件数より大きい場合、Trim メソッドは動作せずに false を返す。
-                Assert.That(ret, Is.False);
-                Assert.That(dict.Count, Is.EqualTo(3));
+                Assert.False(ret);
+                Assert.Equal(3, dict.Count);
             }
             else
             {
-                Assert.That(ret, Is.True);
-                Assert.That(dict.Count, Is.EqualTo(trimLimit));
+                Assert.True(ret);
+                Assert.Equal(trimLimit, dict.Count);
             }
         }
 
-        [Test]
+        [Fact]
         public void TrimOrderTest()
         {
             var dict = new LRUCacheDictionary<string, string>()
             {
-                {"key1", "value1"},
-                {"key2", "value2"},
-                {"key3", "value3"},
-                {"key4", "value4"},
-                {"key5", "value5"},
+                ["key1"] = "value1",
+                ["key2"] = "value2",
+                ["key3"] = "value3",
+                ["key4"] = "value4",
+                ["key5"] = "value5",
             };
 
             // 4 -> 2 -> 3 -> 1 -> 5 の順で参照
@@ -112,14 +119,14 @@ namespace OpenTween
             dict.Trim();
 
             // 直近に参照された 3 -> 1 -> 5 のみ残っているはず
-            Assert.That(dict.ContainsKey("key1"), Is.True);
-            Assert.That(dict.ContainsKey("key2"), Is.False);
-            Assert.That(dict.ContainsKey("key3"), Is.True);
-            Assert.That(dict.ContainsKey("key4"), Is.False);
-            Assert.That(dict.ContainsKey("key5"), Is.True);
+            Assert.True(dict.ContainsKey("key1"));
+            Assert.False(dict.ContainsKey("key2"));
+            Assert.True(dict.ContainsKey("key3"));
+            Assert.False(dict.ContainsKey("key4"));
+            Assert.True(dict.ContainsKey("key5"));
         }
 
-        [Test]
+        [Fact]
         public void AutoTrimTest()
         {
             var dict = new LRUCacheDictionary<string, string>();
@@ -133,7 +140,7 @@ namespace OpenTween
             dict["key4"] = "value4"; // 4アクセス目 (この直後にTrim)
 
             // 1 -> 2 -> 3 -> 4 の順にアクセスしたため、直近 3 件の 2, 3, 4 だけが残る
-            Assert.That(dict.innerDict.Keys, Is.EquivalentTo(new[] { "key2", "key3", "key4" }));
+            Assert.Equal(new[] { "key2", "key3", "key4" }, dict.innerDict.Keys, collComparer);
 
             dict["key5"] = "value5";         // 5アクセス目
             dict.Add("key6", "value6");      // 6アクセス目
@@ -141,10 +148,10 @@ namespace OpenTween
             dict.TryGetValue("key4", out x); // 8アクセス目 (この直後にTrim)
 
             // 5 -> 6 -> 2 -> 4 の順でアクセスしたため、直近 3 件の 6, 2, 4 だけが残る
-            Assert.That(dict.innerDict.Keys, Is.EquivalentTo(new[] { "key6", "key2", "key4" }));
+            Assert.Equal(new[] { "key6", "key2", "key4" }, dict.innerDict.Keys, collComparer);
         }
 
-        [Test]
+        [Fact]
         public void CacheRemovedEventTest()
         {
             var dict = new LRUCacheDictionary<string, string>();
@@ -166,270 +173,268 @@ namespace OpenTween
             dict.Trim();
 
             // 直近に参照された 3, 4 以外のアイテムに対してイベントが発生しているはず
-            Assert.That(removedList, Is.EquivalentTo(new[] { "key1", "key2" }));
+            Assert.Equal(new[] { "key1", "key2" }, removedList, collComparer);
         }
 
         // ここから下は IDictionary としての機能が正しく動作するかのテスト
 
-        [Test]
+        [Fact]
         public void AddTest()
         {
             var dict = new LRUCacheDictionary<string, string>();
 
             dict.Add("key1", "value1");
 
-            Assert.That(dict.innerDict.Count, Is.EqualTo(1));
-            Assert.That(dict.innerDict.ContainsKey("key1"), Is.True);
+            Assert.Equal(1, dict.innerDict.Count);
+            Assert.True(dict.innerDict.ContainsKey("key1"));
             var internalNode = dict.innerDict["key1"];
-            Assert.That(internalNode.Value.Key, Is.EqualTo("key1"));
-            Assert.That(internalNode.Value.Value, Is.EqualTo("value1"));
+            Assert.Equal("key1", internalNode.Value.Key);
+            Assert.Equal("value1", internalNode.Value.Value);
 
             dict.Add("key2", "value2");
 
-            Assert.That(dict.innerDict.Count, Is.EqualTo(2));
-            Assert.That(dict.innerDict.ContainsKey("key2"), Is.True);
+            Assert.Equal(2, dict.innerDict.Count);
+            Assert.True(dict.innerDict.ContainsKey("key2"));
             internalNode = dict.innerDict["key2"];
-            Assert.That(internalNode.Value.Key, Is.EqualTo("key2"));
-            Assert.That(internalNode.Value.Value, Is.EqualTo("value2"));
+            Assert.Equal("key2", internalNode.Value.Key);
+            Assert.Equal("value2", internalNode.Value.Value);
         }
 
-        [Test]
+        [Fact]
         public void ContainsKeyTest()
         {
             var dict = new LRUCacheDictionary<string, string>
             {
-                {"key1", "value1"},
-                {"key2", "value2"},
-                {"key3", "value3"},
+                ["key1"] = "value1",
+                ["key2"] = "value2",
+                ["key3"] = "value3",
             };
 
-            Assert.That(dict.ContainsKey("key1"), Is.True);
-            Assert.That(dict.ContainsKey("key3"), Is.True);
-            Assert.That(dict.ContainsKey("value1"), Is.False);
-            Assert.That(dict.ContainsKey("hogehoge"), Is.False);
+            Assert.True(dict.ContainsKey("key1"));
+            Assert.True(dict.ContainsKey("key3"));
+            Assert.False(dict.ContainsKey("value1"));
+            Assert.False(dict.ContainsKey("hogehoge"));
         }
 
-        [Test]
+        [Fact]
         public void ContainsTest()
         {
             var dict = new LRUCacheDictionary<string, string>
             {
-                {"key1", "value1"},
-                {"key2", "value2"},
-                {"key3", "value3"},
+                ["key1"] = "value1",
+                ["key2"] = "value2",
+                ["key3"] = "value3",
             };
 
-            Assert.That(dict.Contains(new KeyValuePair<string, string>("key1", "value1")), Is.True);
-            Assert.That(dict.Contains(new KeyValuePair<string, string>("key3", "value2")), Is.False);
-            Assert.That(dict.Contains(new KeyValuePair<string, string>("value3", "key3")), Is.False);
-            Assert.That(dict.Contains(new KeyValuePair<string, string>("hogehoge", "hogehoge")), Is.False);
+            Assert.True(dict.Contains(new KeyValuePair<string, string>("key1", "value1")));
+            Assert.False(dict.Contains(new KeyValuePair<string, string>("key3", "value2")));
+            Assert.False(dict.Contains(new KeyValuePair<string, string>("value3", "key3")));
+            Assert.False(dict.Contains(new KeyValuePair<string, string>("hogehoge", "hogehoge")));
         }
 
-        [Test]
+        [Fact]
         public void RemoveTest()
         {
             var dict = new LRUCacheDictionary<string, string>
             {
-                {"key1", "value1"},
-                {"key2", "value2"},
-                {"key3", "value3"},
+                ["key1"] = "value1",
+                ["key2"] = "value2",
+                ["key3"] = "value3",
             };
 
             var ret = dict.Remove("key1");
 
-            Assert.That(ret, Is.True);
-            Assert.That(dict.innerDict.Count, Is.EqualTo(2));
-            Assert.That(dict.innerList.Count, Is.EqualTo(2));
-            Assert.That(dict.innerDict.ContainsKey("key1"), Is.False);
-            Assert.That(dict.innerDict.ContainsKey("key2"), Is.True);
-            Assert.That(dict.innerDict.ContainsKey("key3"), Is.True);
+            Assert.True(ret);
+            Assert.Equal(2, dict.innerDict.Count);
+            Assert.Equal(2, dict.innerList.Count);
+            Assert.False(dict.innerDict.ContainsKey("key1"));
+            Assert.True(dict.innerDict.ContainsKey("key2"));
+            Assert.True(dict.innerDict.ContainsKey("key3"));
 
             dict.Remove("key2");
             dict.Remove("key3");
 
-            Assert.That(dict.innerDict, Is.Empty);
-            Assert.That(dict.innerList, Is.Empty);
+            Assert.Empty(dict.innerDict);
+            Assert.Empty(dict.innerList);
 
             ret = dict.Remove("hogehoge");
-            Assert.That(ret, Is.False);
+            Assert.False(ret);
         }
 
-        [Test]
+        [Fact]
         public void Remove2Test()
         {
             var dict = new LRUCacheDictionary<string, string>
             {
-                {"key1", "value1"},
-                {"key2", "value2"},
-                {"key3", "value3"},
+                ["key1"] = "value1",
+                ["key2"] = "value2",
+                ["key3"] = "value3",
             };
 
             var ret = dict.Remove(new KeyValuePair<string, string>("key1", "value1"));
 
-            Assert.That(ret, Is.True);
-            Assert.That(dict.innerDict.Count, Is.EqualTo(2));
-            Assert.That(dict.innerList.Count, Is.EqualTo(2));
-            Assert.That(dict.innerDict.ContainsKey("key1"), Is.False);
-            Assert.That(dict.innerDict.ContainsKey("key2"), Is.True);
-            Assert.That(dict.innerDict.ContainsKey("key3"), Is.True);
+            Assert.True(ret);
+            Assert.Equal(2, dict.innerDict.Count);
+            Assert.Equal(2, dict.innerList.Count);
+            Assert.False(dict.innerDict.ContainsKey("key1"));
+            Assert.True(dict.innerDict.ContainsKey("key2"));
+            Assert.True(dict.innerDict.ContainsKey("key3"));
 
             ret = dict.Remove(new KeyValuePair<string, string>("key2", "hogehoge"));
-            Assert.That(ret, Is.False);
+            Assert.False(ret);
 
             dict.Remove(new KeyValuePair<string, string>("key2", "value2"));
             dict.Remove(new KeyValuePair<string, string>("key3", "value3"));
 
-            Assert.That(dict.innerDict, Is.Empty);
-            Assert.That(dict.innerList, Is.Empty);
+            Assert.Empty(dict.innerDict);
+            Assert.Empty(dict.innerList);
 
             ret = dict.Remove(new KeyValuePair<string, string>("hogehoge", "hogehoge"));
-            Assert.That(ret, Is.False);
+            Assert.False(ret);
         }
 
-        [Test]
         public void GetterTest()
         {
             var dict = new LRUCacheDictionary<string, string>
             {
-                {"key1", "value1"},
-                {"key2", "value2"},
-                {"key3", "value3"},
+                ["key1"] = "value1",
+                ["key2"] = "value2",
+                ["key3"] = "value3",
             };
 
-            Assert.That(dict["key1"], Is.EqualTo("value1"));
-            Assert.That(dict["key2"], Is.EqualTo("value2"));
-            Assert.That(dict["key3"], Is.EqualTo("value3"));
+            Assert.Equal("value1", dict["key1"]);
+            Assert.Equal("value2", dict["key2"]);
+            Assert.Equal("value3", dict["key3"]);
 
             Assert.Throws<KeyNotFoundException>(() => { var x = dict["hogehoge"]; });
         }
 
-        [Test]
+        [Fact]
         public void SetterTest()
         {
             var dict = new LRUCacheDictionary<string, string>
             {
-                {"key1", "value1"},
-                {"key2", "value2"},
-                {"key3", "value3"},
+                ["key1"] = "value1",
+                ["key2"] = "value2",
+                ["key3"] = "value3",
             };
 
             dict["key1"] = "foo";
-            Assert.That(dict.innerDict["key1"].Value.Value, Is.EqualTo("foo"));
+            Assert.Equal("foo", dict.innerDict["key1"].Value.Value);
 
             dict["hogehoge"] = "bar";
-            Assert.That(dict.innerDict.ContainsKey("hogehoge"), Is.True);
-            Assert.That(dict.innerDict["hogehoge"].Value.Value, Is.EqualTo("bar"));
+            Assert.True(dict.innerDict.ContainsKey("hogehoge"));
+            Assert.Equal("bar", dict.innerDict["hogehoge"].Value.Value);
         }
 
-        [Test]
+        [Fact]
         public void TryGetValueTest()
         {
             var dict = new LRUCacheDictionary<string, string>
             {
-                {"key1", "value1"},
-                {"key2", "value2"},
-                {"key3", "value3"},
+                ["key1"] = "value1",
+                ["key2"] = "value2",
+                ["key3"] = "value3",
             };
 
-            string value;
-            var ret = dict.TryGetValue("key1", out value);
-            Assert.That(ret, Is.True);
-            Assert.That(value, Is.EqualTo("value1"));
+            var ret = dict.TryGetValue("key1", out var value);
+            Assert.True(ret);
+            Assert.Equal("value1", value);
 
             ret = dict.TryGetValue("hogehoge", out value);
-            Assert.That(ret, Is.False);
-            Assert.That(value, Is.Null);
+            Assert.False(ret);
+            Assert.Null(value);
         }
 
-        [Test]
+        [Fact]
         public void KeysTest()
         {
             var dict = new LRUCacheDictionary<string, string>
             {
-                {"key1", "value1"},
-                {"key2", "value2"},
-                {"key3", "value3"},
+                ["key1"] = "value1",
+                ["key2"] = "value2",
+                ["key3"] = "value3",
             };
 
-            Assert.That(dict.Keys, Is.EquivalentTo(new[] { "key1", "key2", "key3" }));
+            Assert.Equal(new[] { "key1", "key2", "key3" }, dict.Keys, collComparer);
 
             dict.Add("foo", "bar");
-            Assert.That(dict.Keys, Is.EquivalentTo(new[] { "key1", "key2", "key3", "foo" }));
+            Assert.Equal(new[] { "key1", "key2", "key3", "foo" }, dict.Keys, collComparer);
 
             dict.Remove("key2");
-            Assert.That(dict.Keys, Is.EquivalentTo(new[] { "key1", "key3", "foo" }));
+            Assert.Equal(new[] { "key1", "key3", "foo" }, dict.Keys, collComparer);
 
             dict.Clear();
-            Assert.That(dict.Keys, Is.Empty);
+            Assert.Empty(dict.Keys);
         }
 
-        [Test]
+        [Fact]
         public void ValuesTest()
         {
             var dict = new LRUCacheDictionary<string, string>
             {
-                {"key1", "value1"},
-                {"key2", "value2"},
-                {"key3", "value3"},
+                ["key1"] = "value1",
+                ["key2"] = "value2",
+                ["key3"] = "value3",
             };
 
-            Assert.That(dict.Values, Is.EquivalentTo(new[] { "value1", "value2", "value3" }));
+            Assert.Equal(new[] { "value1", "value2", "value3" }, dict.Values, collComparer);
 
             dict.Add("foo", "bar");
-            Assert.That(dict.Values, Is.EquivalentTo(new[] { "value1", "value2", "value3", "bar" }));
+            Assert.Equal(new[] { "value1", "value2", "value3", "bar" }, dict.Values, collComparer);
 
             dict.Remove("key2");
-            Assert.That(dict.Values, Is.EquivalentTo(new[] { "value1", "value3", "bar" }));
+            Assert.Equal(new[] { "value1", "value3", "bar" }, dict.Values, collComparer);
 
             dict.Clear();
-            Assert.That(dict.Values, Is.Empty);
+            Assert.Empty(dict.Values);
         }
 
-        [Test]
+        [Fact]
         public void CountTest()
         {
             var dict = new LRUCacheDictionary<string, string>();
 
-            Assert.That(dict.Count, Is.EqualTo(0));
+            Assert.Equal(0, dict.Count);
 
             dict.Add("key1", "value1");
-            Assert.That(dict.Count, Is.EqualTo(1));
+            Assert.Equal(1, dict.Count);
 
             dict.Add("key2", "value2");
-            Assert.That(dict.Count, Is.EqualTo(2));
+            Assert.Equal(2, dict.Count);
 
             dict.Remove("key1");
-            Assert.That(dict.Count, Is.EqualTo(1));
+            Assert.Equal(1, dict.Count);
 
             dict.Clear();
-            Assert.That(dict.Count, Is.EqualTo(0));
+            Assert.Equal(0, dict.Count);
         }
 
-        [Test]
+        [Fact]
         public void CopyToTest()
         {
             var dict = new LRUCacheDictionary<string, string>
             {
-                {"key1", "value1"},
-                {"key2", "value2"},
-                {"key3", "value3"},
+                ["key1"] = "value1",
+                ["key2"] = "value2",
+                ["key3"] = "value3",
             };
 
             var array = new KeyValuePair<string, string>[5];
             dict.CopyTo(array, 0);
-            Assert.That(array[0], Is.EqualTo(new KeyValuePair<string, string>("key1", "value1")));
-            Assert.That(array[1], Is.EqualTo(new KeyValuePair<string, string>("key2", "value2")));
-            Assert.That(array[2], Is.EqualTo(new KeyValuePair<string, string>("key3", "value3")));
-            Assert.That(array[3], Is.EqualTo(new KeyValuePair<string, string>()));
-            Assert.That(array[4], Is.EqualTo(new KeyValuePair<string, string>()));
+            Assert.Equal(new KeyValuePair<string, string>("key1", "value1"), array[0]);
+            Assert.Equal(new KeyValuePair<string, string>("key2", "value2"), array[1]);
+            Assert.Equal(new KeyValuePair<string, string>("key3", "value3"), array[2]);
+            Assert.Equal(new KeyValuePair<string, string>(), array[3]);
+            Assert.Equal(new KeyValuePair<string, string>(), array[4]);
 
             array = new KeyValuePair<string, string>[5];
             dict.CopyTo(array, 1);
-            Assert.That(array[0], Is.EqualTo(new KeyValuePair<string, string>()));
-            Assert.That(array[1], Is.EqualTo(new KeyValuePair<string, string>("key1", "value1")));
-            Assert.That(array[2], Is.EqualTo(new KeyValuePair<string, string>("key2", "value2")));
-            Assert.That(array[3], Is.EqualTo(new KeyValuePair<string, string>("key3", "value3")));
-            Assert.That(array[4], Is.EqualTo(new KeyValuePair<string, string>()));
+            Assert.Equal(new KeyValuePair<string, string>(), array[0]);
+            Assert.Equal(new KeyValuePair<string, string>("key1", "value1"), array[1]);
+            Assert.Equal(new KeyValuePair<string, string>("key2", "value2"), array[2]);
+            Assert.Equal(new KeyValuePair<string, string>("key3", "value3"), array[3]);
+            Assert.Equal(new KeyValuePair<string, string>(), array[4]);
 
             array = new KeyValuePair<string, string>[5];
             Assert.Throws<ArgumentException>(() => dict.CopyTo(array, 3));
@@ -438,54 +443,54 @@ namespace OpenTween
             Assert.Throws<ArgumentNullException>(() => dict.CopyTo(null, 0));
         }
 
-        [Test]
+        [Fact]
         public void IsReadOnlyTest()
         {
             var dict = new LRUCacheDictionary<string, string>();
 
-            Assert.That(dict.IsReadOnly, Is.False);
+            Assert.False(dict.IsReadOnly);
         }
 
-        [Test]
+        [Fact]
         public void EnumeratorTest()
         {
             var dict = new LRUCacheDictionary<string, string>
             {
-                {"key1", "value1"},
-                {"key2", "value2"},
-                {"key3", "value3"},
+                ["key1"] = "value1",
+                ["key2"] = "value2",
+                ["key3"] = "value3",
             };
 
             var enumerator = dict.GetEnumerator();
 
-            Assert.That(enumerator.MoveNext(), Is.True);
-            Assert.That(enumerator.Current, Is.EqualTo(new KeyValuePair<string, string>("key1", "value1")));
-            Assert.That(enumerator.MoveNext(), Is.True);
-            Assert.That(enumerator.Current, Is.EqualTo(new KeyValuePair<string, string>("key2", "value2")));
-            Assert.That(enumerator.MoveNext(), Is.True);
-            Assert.That(enumerator.Current, Is.EqualTo(new KeyValuePair<string, string>("key3", "value3")));
-            Assert.That(enumerator.MoveNext(), Is.False);
+            Assert.True(enumerator.MoveNext());
+            Assert.Equal(new KeyValuePair<string, string>("key1", "value1"), enumerator.Current);
+            Assert.True(enumerator.MoveNext());
+            Assert.Equal(new KeyValuePair<string, string>("key2", "value2"), enumerator.Current);
+            Assert.True(enumerator.MoveNext());
+            Assert.Equal(new KeyValuePair<string, string>("key3", "value3"), enumerator.Current);
+            Assert.False(enumerator.MoveNext());
         }
 
-        [Test]
+        [Fact]
         public void Enumerator2Test()
         {
             var dict = new LRUCacheDictionary<string, string>
             {
-                {"key1", "value1"},
-                {"key2", "value2"},
-                {"key3", "value3"},
+                ["key1"] = "value1",
+                ["key2"] = "value2",
+                ["key3"] = "value3",
             };
 
             var enumerator = ((IEnumerable)dict).GetEnumerator();
 
-            Assert.That(enumerator.MoveNext(), Is.True);
-            Assert.That(enumerator.Current, Is.EqualTo(new KeyValuePair<string, string>("key1", "value1")));
-            Assert.That(enumerator.MoveNext(), Is.True);
-            Assert.That(enumerator.Current, Is.EqualTo(new KeyValuePair<string, string>("key2", "value2")));
-            Assert.That(enumerator.MoveNext(), Is.True);
-            Assert.That(enumerator.Current, Is.EqualTo(new KeyValuePair<string, string>("key3", "value3")));
-            Assert.That(enumerator.MoveNext(), Is.False);
+            Assert.True(enumerator.MoveNext());
+            Assert.Equal(new KeyValuePair<string, string>("key1", "value1"), enumerator.Current);
+            Assert.True(enumerator.MoveNext());
+            Assert.Equal(new KeyValuePair<string, string>("key2", "value2"), enumerator.Current);
+            Assert.True(enumerator.MoveNext());
+            Assert.Equal(new KeyValuePair<string, string>("key3", "value3"), enumerator.Current);
+            Assert.False(enumerator.MoveNext());
         }
     }
 }