PageRenderTime 51ms CodeModel.GetById 34ms app.highlight 14ms RepoModel.GetById 1ms app.codeStats 0ms

/test/System.Net.Http.Formatting.Test.Unit/Formatting/MediaTypeHeaderValueEqualityComparerTests.cs

https://bitbucket.org/mdavid/aspnetwebstack
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}