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