/test/System.Net.Http.Formatting.Test.Unit/Formatting/MediaTypeHeaderValueEqualityComparerTests.cs
C# | 199 lines | 163 code | 36 blank | 0 comment | 0 complexity | fb5550ab232fea6bd221594b18e3f907 MD5 | raw file
1using System.Net.Http.Formatting.DataSets;
2using System.Net.Http.Headers;
3using Microsoft.TestCommon;
4using Xunit;
5using Xunit.Extensions;
6using Assert = Microsoft.TestCommon.AssertEx;
7
8namespace System.Net.Http.Formatting
9{
10 public class MediaTypeHeaderValueEqualityComparerTests
11 {
12
13 [Fact]
14 [Trait("Description", "MediaTypeHeaderValueEqualityComparer is internal, concrete, and not sealed.")]
15 public void TypeIsCorrect()
16 {
17 Assert.Type.HasProperties(typeof(MediaTypeHeaderValueEqualityComparer), TypeAssert.TypeProperties.IsClass);
18 }
19
20 [Fact]
21 [Trait("Description", "EqualityComparer returns same MediaTypeHeadeValueEqualityComparer instance each time.")]
22 public void EqualityComparerReturnsMediaTypeHeadeValueEqualityComparer()
23 {
24 MediaTypeHeaderValueEqualityComparer comparer1 = MediaTypeHeaderValueEqualityComparer.EqualityComparer;
25 MediaTypeHeaderValueEqualityComparer comparer2 = MediaTypeHeaderValueEqualityComparer.EqualityComparer;
26
27 Assert.NotNull(comparer1);
28 Assert.Same(comparer1, comparer2);
29 }
30
31 [Fact]
32 [Trait("Description", "GetHashCode(MediaTypeHeaderValue) returns the same hash code for media types that differe only be case.")]
33 public void GetHashCodeReturnsSameHashCodeRegardlessOfCase()
34 {
35 MediaTypeHeaderValueEqualityComparer comparer = MediaTypeHeaderValueEqualityComparer.EqualityComparer;
36
37 MediaTypeHeaderValue mediaType1 = new MediaTypeHeaderValue("text/xml");
38 MediaTypeHeaderValue mediaType2 = new MediaTypeHeaderValue("TEXT/xml");
39 Assert.Equal(comparer.GetHashCode(mediaType1), comparer.GetHashCode(mediaType2));
40
41 mediaType1 = new MediaTypeHeaderValue("text/*");
42 mediaType2 = new MediaTypeHeaderValue("TEXT/*");
43 Assert.Equal(comparer.GetHashCode(mediaType1), comparer.GetHashCode(mediaType2));
44
45 mediaType1 = new MediaTypeHeaderValue("*/*");
46 mediaType2 = new MediaTypeHeaderValue("*/*");
47 Assert.Equal(comparer.GetHashCode(mediaType1), comparer.GetHashCode(mediaType2));
48 }
49
50
51 [Fact]
52 [Trait("Description", "GetHashCode(MediaTypeHeaderValue) returns different hash codes if the media types are different.")]
53 public void GetHashCodeReturnsDifferentHashCodeForDifferentMediaType()
54 {
55 MediaTypeHeaderValueEqualityComparer comparer = MediaTypeHeaderValueEqualityComparer.EqualityComparer;
56
57 MediaTypeHeaderValue mediaType1 = new MediaTypeHeaderValue("text/*");
58 MediaTypeHeaderValue mediaType2 = new MediaTypeHeaderValue("TEXT/xml");
59 Assert.NotEqual(comparer.GetHashCode(mediaType1), comparer.GetHashCode(mediaType2));
60
61 mediaType1 = new MediaTypeHeaderValue("application/*");
62 mediaType2 = new MediaTypeHeaderValue("TEXT/*");
63 Assert.NotEqual(comparer.GetHashCode(mediaType1), comparer.GetHashCode(mediaType2));
64
65 mediaType1 = new MediaTypeHeaderValue("application/*");
66 mediaType2 = new MediaTypeHeaderValue("*/*");
67 Assert.NotEqual(comparer.GetHashCode(mediaType1), comparer.GetHashCode(mediaType2));
68 }
69
70
71 [Fact]
72 [Trait("Description", "Equals(MediaTypeHeaderValue, MediaTypeHeaderValue) returns true if media type 1 is a subset of 2.")]
73 public void EqualsReturnsTrueIfMediaType1IsSubset()
74 {
75 string[] parameters = new string[]
76 {
77 ";name=value",
78 ";q=1.0",
79 ";version=1",
80 };
81
82 MediaTypeHeaderValueEqualityComparer comparer = MediaTypeHeaderValueEqualityComparer.EqualityComparer;
83
84 MediaTypeHeaderValue mediaType1 = new MediaTypeHeaderValue("text/*");
85 mediaType1.CharSet = "someCharset";
86 MediaTypeHeaderValue mediaType2 = new MediaTypeHeaderValue("TEXT/*");
87 mediaType2.CharSet = "SOMECHARSET";
88 Assert.Equal(mediaType1, mediaType2, comparer);
89
90 mediaType1 = new MediaTypeHeaderValue("application/*");
91 mediaType1.CharSet = "";
92 mediaType2 = new MediaTypeHeaderValue("application/*");
93 mediaType2.CharSet = null;
94 Assert.Equal(mediaType1, mediaType2, comparer);
95
96 foreach (string parameter in parameters)
97 {
98 mediaType1 = new MediaTypeHeaderValue("text/xml");
99 mediaType2 = MediaTypeHeaderValue.Parse("TEXT/xml" + parameter);
100 Assert.Equal(mediaType1, mediaType2, comparer);
101
102 mediaType1 = new MediaTypeHeaderValue("text/*");
103 mediaType2 = MediaTypeHeaderValue.Parse("TEXT/*" + parameter);
104 Assert.Equal(mediaType1, mediaType2, comparer);
105
106 mediaType1 = new MediaTypeHeaderValue("*/*");
107 mediaType2 = MediaTypeHeaderValue.Parse("*/*" + parameter);
108 Assert.Equal(mediaType1, mediaType2, comparer);
109 }
110 }
111
112 [Fact]
113 [Trait("Description", "Equals(MediaTypeHeaderValue, MediaTypeHeaderValue) returns false if media type 1 is a superset of 2.")]
114 public void EqualsReturnsFalseIfMediaType1IsSuperset()
115 {
116 string[] parameters = new string[]
117 {
118 ";name=value",
119 ";q=1.0",
120 ";version=1",
121 };
122
123 MediaTypeHeaderValueEqualityComparer comparer = MediaTypeHeaderValueEqualityComparer.EqualityComparer;
124
125 foreach (string parameter in parameters)
126 {
127 MediaTypeHeaderValue mediaType1 = MediaTypeHeaderValue.Parse("text/xml" + parameter);
128 MediaTypeHeaderValue mediaType2 = new MediaTypeHeaderValue("TEXT/xml");
129 Assert.NotEqual(mediaType1, mediaType2, comparer);
130
131 mediaType1 = MediaTypeHeaderValue.Parse("text/*" + parameter);
132 mediaType2 = new MediaTypeHeaderValue("TEXT/*");
133 Assert.NotEqual(mediaType1, mediaType2, comparer);
134
135 mediaType1 = MediaTypeHeaderValue.Parse("*/*" + parameter);
136 mediaType2 = new MediaTypeHeaderValue("*/*");
137 Assert.NotEqual(mediaType1, mediaType2, comparer);
138 }
139 }
140
141 [Fact]
142 [Trait("Description", "Equals(MediaTypeHeaderValue, MediaTypeHeaderValue) returns true if media types and charsets differ only by case.")]
143 public void Equals1ReturnsTrueIfMediaTypesDifferOnlyByCase()
144 {
145 MediaTypeHeaderValueEqualityComparer comparer = MediaTypeHeaderValueEqualityComparer.EqualityComparer;
146
147 MediaTypeHeaderValue mediaType1 = new MediaTypeHeaderValue("text/xml");
148 MediaTypeHeaderValue mediaType2 = new MediaTypeHeaderValue("TEXT/xml");
149 Assert.Equal(mediaType1, mediaType2, comparer);
150
151 mediaType1 = new MediaTypeHeaderValue("text/*");
152 mediaType2 = new MediaTypeHeaderValue("TEXT/*");
153 Assert.Equal(mediaType1, mediaType2, comparer);
154
155 mediaType1 = new MediaTypeHeaderValue("*/*");
156 mediaType2 = new MediaTypeHeaderValue("*/*");
157 Assert.Equal(mediaType1, mediaType2, comparer);
158
159 mediaType1 = new MediaTypeHeaderValue("text/*");
160 mediaType1.CharSet = "someCharset";
161 mediaType2 = new MediaTypeHeaderValue("TEXT/*");
162 mediaType2.CharSet = "SOMECHARSET";
163 Assert.Equal(mediaType1, mediaType2, comparer);
164
165 mediaType1 = new MediaTypeHeaderValue("application/*");
166 mediaType1.CharSet = "";
167 mediaType2 = new MediaTypeHeaderValue("application/*");
168 mediaType2.CharSet = null;
169 Assert.Equal(mediaType1, mediaType2, comparer);
170 }
171
172 [Fact]
173 [Trait("Description", "Equals(MediaTypeHeaderValue, MediaTypeHeaderValue) returns false if media types and charsets differ by more than case.")]
174 public void EqualsReturnsFalseIfMediaTypesDifferByMoreThanCase()
175 {
176 MediaTypeHeaderValueEqualityComparer comparer = MediaTypeHeaderValueEqualityComparer.EqualityComparer;
177
178 MediaTypeHeaderValue mediaType1 = new MediaTypeHeaderValue("text/xml");
179 MediaTypeHeaderValue mediaType2 = new MediaTypeHeaderValue("TEST/xml");
180 Assert.NotEqual(mediaType1, mediaType2, comparer);
181
182 mediaType1 = new MediaTypeHeaderValue("text/*");
183 mediaType1.CharSet = "someCharset";
184 mediaType2 = new MediaTypeHeaderValue("TEXT/*");
185 mediaType2.CharSet = "SOMEOTHERCHARSET";
186 Assert.NotEqual(mediaType1, mediaType2, comparer);
187 }
188
189 [Theory]
190 [TestDataSet(typeof(HttpUnitTestDataSets), "StandardMediaTypesWithQuality")]
191 [Trait("Description", "Equals(MediaTypeHeaderValue, MediaTypeHeaderValue) returns true if media types differ only in quality.")]
192 public void EqualsReturnsTrueIfMediaTypesDifferOnlyByQuality(MediaTypeWithQualityHeaderValue mediaType1)
193 {
194 MediaTypeHeaderValueEqualityComparer comparer = MediaTypeHeaderValueEqualityComparer.EqualityComparer;
195 MediaTypeHeaderValue mediaType2 = new MediaTypeHeaderValue(mediaType1.MediaType);
196 Assert.Equal(mediaType2, mediaType1, comparer);
197 }
198 }
199}