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