public void EqualsReturnsFalseIfMediaType1IsSuperset()
        {
            string[] parameters = new string[]
            {
                ";name=value",
                ";q=1.0",
                ";version=1",
            };

            MediaTypeHeaderValueEqualityComparer comparer = MediaTypeHeaderValueEqualityComparer.EqualityComparer;

            foreach (string parameter in parameters)
            {
                MediaTypeHeaderValue mediaType1 = MediaTypeHeaderValue.Parse("text/xml" + parameter);
                MediaTypeHeaderValue mediaType2 = new MediaTypeHeaderValue("TEXT/xml");
                Assert.NotEqual(mediaType1, mediaType2, comparer);

                mediaType1 = MediaTypeHeaderValue.Parse("text/*" + parameter);
                mediaType2 = new MediaTypeHeaderValue("TEXT/*");
                Assert.NotEqual(mediaType1, mediaType2, comparer);

                mediaType1 = MediaTypeHeaderValue.Parse("*/*" + parameter);
                mediaType2 = new MediaTypeHeaderValue("*/*");
                Assert.NotEqual(mediaType1, mediaType2, comparer);
            }
        }
        public void ApiControllerCannotBeReused()
        {
            // Arrange
            var config = new HttpConfiguration();
            var singletonController = new Mock <ApiController> {
                CallBase = true
            }.Object;
            var mockDescriptor = new Mock <HttpControllerDescriptor>(config, "MyMock", singletonController.GetType())
            {
                CallBase = true
            };

            mockDescriptor.Setup(d => d.CreateController(It.IsAny <HttpRequestMessage>())).Returns(singletonController);
            var mockSelector = new Mock <DefaultHttpControllerSelector>(config)
            {
                CallBase = true
            };

            mockSelector.Setup(s => s.SelectController(It.IsAny <HttpRequestMessage>())).Returns(mockDescriptor.Object);
            config.Routes.MapHttpRoute("default", "", new { controller = "MyMock" });
            config.Services.Replace(typeof(IHttpControllerSelector), mockSelector.Object);
            var server  = new HttpServer(config);
            var invoker = new HttpMessageInvoker(server);

            // Act
            HttpResponseMessage response1 = invoker.SendAsync(new HttpRequestMessage(HttpMethod.Get, "http://localhost/"), CancellationToken.None).Result;
            HttpResponseMessage response2 = invoker.SendAsync(new HttpRequestMessage(HttpMethod.Get, "http://localhost/"), CancellationToken.None).Result;

            // Assert
            Assert.NotEqual(HttpStatusCode.InternalServerError, response1.StatusCode);
            Assert.Equal(HttpStatusCode.InternalServerError, response2.StatusCode);
            Assert.Contains("Cannot reuse an 'ApiController' instance. 'ApiController' has to be constructed per incoming message.", response2.Content.ReadAsStringAsync().Result);
        }
        public void EqualsReturnsFalseIfMediaTypesDifferByMoreThanCase()
        {
            MediaTypeHeaderValueEqualityComparer comparer = MediaTypeHeaderValueEqualityComparer.EqualityComparer;

            MediaTypeHeaderValue mediaType1 = new MediaTypeHeaderValue("text/xml");
            MediaTypeHeaderValue mediaType2 = new MediaTypeHeaderValue("TEST/xml");

            Assert.NotEqual(mediaType1, mediaType2, comparer);

            mediaType1         = new MediaTypeHeaderValue("text/*");
            mediaType1.CharSet = "someCharset";
            mediaType2         = new MediaTypeHeaderValue("TEXT/*");
            mediaType2.CharSet = "SOMEOTHERCHARSET";
            Assert.NotEqual(mediaType1, mediaType2, comparer);
        }
        public void GetHashCodeReturnsDifferentHashCodeForDifferentMediaType()
        {
            MediaTypeHeaderValueEqualityComparer comparer = MediaTypeHeaderValueEqualityComparer.EqualityComparer;

            MediaTypeHeaderValue mediaType1 = new MediaTypeHeaderValue("text/*");
            MediaTypeHeaderValue mediaType2 = new MediaTypeHeaderValue("TEXT/xml");

            Assert.NotEqual(comparer.GetHashCode(mediaType1), comparer.GetHashCode(mediaType2));

            mediaType1 = new MediaTypeHeaderValue("application/*");
            mediaType2 = new MediaTypeHeaderValue("TEXT/*");
            Assert.NotEqual(comparer.GetHashCode(mediaType1), comparer.GetHashCode(mediaType2));

            mediaType1 = new MediaTypeHeaderValue("application/*");
            mediaType2 = new MediaTypeHeaderValue("*/*");
            Assert.NotEqual(comparer.GetHashCode(mediaType1), comparer.GetHashCode(mediaType2));
        }