1 // Licensed to the .NET Foundation under one or more agreements. 2 // The .NET Foundation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using System.Linq; 6 using Xunit; 7 8 namespace System.Collections.Specialized.Tests 9 { 10 public class NameValueCollectionAddNameValueCollectionTests 11 { 12 [Theory] 13 [InlineData(0, 0)] 14 [InlineData(0, 5)] 15 [InlineData(5, 0)] 16 [InlineData(5, 5)] Add(int count1, int count2)17 public void Add(int count1, int count2) 18 { 19 NameValueCollection nameValueCollection1 = Helpers.CreateNameValueCollection(count1); 20 NameValueCollection nameValueCollection2 = Helpers.CreateNameValueCollection(count2, count1); 21 22 nameValueCollection2.Add(nameValueCollection1); 23 Assert.Equal(count1 + count2, nameValueCollection2.Count); 24 Assert.Equal(count1 + count2, nameValueCollection2.AllKeys.Length); 25 Assert.Equal(count1 + count2, nameValueCollection2.Keys.Count); 26 27 for (int i = 0; i < count1; i++) 28 { 29 string name = nameValueCollection1.GetKey(i); 30 string value = nameValueCollection1.Get(i); 31 Assert.Contains(name, nameValueCollection2.AllKeys); 32 Assert.Contains(name, nameValueCollection2.Keys.Cast<string>()); 33 34 Assert.Equal(value, nameValueCollection2.Get(name)); 35 Assert.Equal(value, nameValueCollection2[name]); 36 37 Assert.Equal(value, nameValueCollection2.Get(i + count2)); 38 Assert.Equal(value, nameValueCollection2[i + count2]); 39 40 Assert.Equal(name, nameValueCollection2.GetKey(i + count2)); 41 42 Assert.Equal(new string[] { value }, nameValueCollection2.GetValues(name)); 43 Assert.Equal(new string[] { value }, nameValueCollection2.GetValues(i + count2)); 44 } 45 } 46 47 [Fact] Add_ExistingKeys()48 public void Add_ExistingKeys() 49 { 50 NameValueCollection nameValueCollection1 = new NameValueCollection(); 51 NameValueCollection nameValueCollection2 = new NameValueCollection(); 52 53 string name = "name"; 54 string value1 = "value1"; 55 string value2 = "value2"; 56 nameValueCollection1.Add(name, value1); 57 nameValueCollection2.Add(name, value2); 58 59 nameValueCollection2.Add(nameValueCollection1); 60 Assert.Equal(1, nameValueCollection2.Count); 61 Assert.Equal(value2 + "," + value1, nameValueCollection2[name]); 62 Assert.Equal(new string[] { value2, value1 }, nameValueCollection2.GetValues(name)); 63 } 64 65 [Fact] Add_MultipleValues()66 public void Add_MultipleValues() 67 { 68 NameValueCollection nameValueCollection1 = new NameValueCollection(); 69 NameValueCollection nameValueCollection2 = new NameValueCollection(); 70 71 string name = "name"; 72 string value1 = "value1"; 73 string value2 = "value2"; 74 nameValueCollection1.Add(name, value1); 75 nameValueCollection1.Add(name, value2); 76 77 nameValueCollection2.Add(nameValueCollection1); 78 Assert.Equal(1, nameValueCollection2.Count); 79 Assert.Equal(value1 + "," + value2, nameValueCollection2[name]); 80 Assert.Equal(new string[] { value1, value2 }, nameValueCollection2.GetValues(name)); 81 82 } 83 84 [Fact] Add_NameValueCollection_WithNullKeys()85 public void Add_NameValueCollection_WithNullKeys() 86 { 87 NameValueCollection nameValueCollection1 = new NameValueCollection(); 88 NameValueCollection nameValueCollection2 = new NameValueCollection(); 89 NameValueCollection nameValueCollection3 = new NameValueCollection(); 90 91 92 string nullKeyValue1 = "value"; 93 string nullKeyValue2 = "value"; 94 nameValueCollection1.Add(null, nullKeyValue1); 95 nameValueCollection2.Add(null, nullKeyValue2); 96 97 nameValueCollection3.Add(nameValueCollection1); 98 99 Assert.Equal(1, nameValueCollection2.Count); 100 Assert.Contains(null, nameValueCollection3.AllKeys); 101 Assert.Equal(nullKeyValue1, nameValueCollection3[null]); 102 103 nameValueCollection3.Add(nameValueCollection2); 104 Assert.Contains(null, nameValueCollection3.AllKeys); 105 Assert.Equal(nullKeyValue1 + "," + nullKeyValue2, nameValueCollection3[null]); 106 } 107 108 [Fact] Add_NameValueCollection_WithNullValues()109 public void Add_NameValueCollection_WithNullValues() 110 { 111 NameValueCollection nameValueCollection1 = new NameValueCollection(); 112 NameValueCollection nameValueCollection2 = new NameValueCollection(); 113 114 string nullValueName = "name"; 115 nameValueCollection1.Add(nullValueName, null); 116 nameValueCollection2.Add(nameValueCollection1); 117 118 Assert.Equal(1, nameValueCollection2.Count); 119 Assert.Contains(nullValueName, nameValueCollection2.AllKeys); 120 Assert.Null(nameValueCollection2[nullValueName]); 121 } 122 123 [Fact] Add_NullNameValueCollection_ThrowsArgumentNullException()124 public void Add_NullNameValueCollection_ThrowsArgumentNullException() 125 { 126 AssertExtensions.Throws<ArgumentNullException>("c", () => new NameValueCollection().Add(null)); 127 } 128 } 129 } 130