Esempio n. 1
0
        public async Task ExecuteResult_UsesEncoderIfSpecified()
        {
            // Arrange
            var expected = Enumerable.Concat(Encoding.UTF8.GetPreamble(), _abcdUTF8Bytes);
            var memoryStream = new MemoryStream();
            var response = new Mock<HttpResponse>();
            response.SetupGet(r => r.Body)
                   .Returns(memoryStream);
            var context = new Mock<HttpContext>();
            context.SetupGet(c => c.Response)
                   .Returns(response.Object);
            var actionContext = new ActionContext(context.Object,
                                                  new RouteData(),
                                                  new ActionDescriptor());
            var result = new JsonResult(new { foo = "abcd" })
            {
                Encoding = Encoding.UTF8
            };

            // Act
            await result.ExecuteResultAsync(actionContext);

            // Assert
            Assert.Equal(expected, memoryStream.ToArray());
        }
Esempio n. 2
0
        public async Task ExecuteResultAsync_UsesPassedInFormatter()
        {
            // Arrange
            var expected = Enumerable.Concat(Encoding.UTF8.GetPreamble(), _abcdUTF8Bytes);

            var context       = GetHttpContext();
            var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());

            var formatter = new JsonOutputFormatter();

            formatter.SupportedEncodings.Clear();

            // This is UTF-8 WITH BOM
            formatter.SupportedEncodings.Add(Encoding.UTF8);

            var result = new JsonResult(new { foo = "abcd" }, formatter);

            // Act
            await result.ExecuteResultAsync(actionContext);

            var written = GetWrittenBytes(context);

            // Assert
            Assert.Equal(expected, written);
            Assert.Equal("application/json; charset=utf-8", context.Response.ContentType);
        }
Esempio n. 3
0
        public async Task ExecuteResultAsync_Null()
        {
            // Arrange
            var expected = _abcdUTF8Bytes;

            var optionsFormatters = new List <IOutputFormatter>()
            {
                Mock.Of <IOutputFormatter>(), // This won't be used
                new JsonOutputFormatter(),
            };

            var context       = GetHttpContext(optionsFormatters);
            var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());

            var result = new JsonResult(new { foo = "abcd" });

            // Act
            await result.ExecuteResultAsync(actionContext);

            var written = GetWrittenBytes(context);

            // Assert
            Assert.Equal(expected, written);
            Assert.Equal("application/json; charset=utf-8", context.Response.ContentType);
        }
Esempio n. 4
0
        public async Task ExecuteResult_UsesEncoderIfSpecified()
        {
            // Arrange
            var expected     = Enumerable.Concat(Encoding.UTF8.GetPreamble(), _abcdUTF8Bytes);
            var memoryStream = new MemoryStream();
            var response     = new Mock <HttpResponse>();

            response.SetupGet(r => r.Body)
            .Returns(memoryStream);
            var context = new Mock <HttpContext>();

            context.SetupGet(c => c.Response)
            .Returns(response.Object);
            var actionContext = new ActionContext(context.Object,
                                                  new RouteData(),
                                                  new ActionDescriptor());
            var result = new JsonResult(new { foo = "abcd" })
            {
                Encoding = Encoding.UTF8
            };

            // Act
            await result.ExecuteResultAsync(actionContext);

            // Assert
            Assert.Equal(expected, memoryStream.ToArray());
        }
Esempio n. 5
0
        public async Task ExecuteResult_IfNoMatchFoundUsesPassedInFormatter()
        {
            // Arrange
            var expected     = Enumerable.Concat(Encoding.UTF8.GetPreamble(), _abcdUTF8Bytes);
            var memoryStream = new MemoryStream();
            var response     = new Mock <HttpResponse>();

            response.SetupGet(r => r.Body)
            .Returns(memoryStream);
            var context       = GetHttpContext(response.Object, registerDefaultFormatter: false);
            var actionContext = new ActionContext(context,
                                                  new RouteData(),
                                                  new ActionDescriptor());
            var testFormatter = new TestJsonFormatter()
            {
                Encoding = Encoding.UTF8
            };

            var result = new JsonResult(new { foo = "abcd" }, testFormatter);

            // Act
            await result.ExecuteResultAsync(actionContext);

            // Assert
            Assert.Equal(expected, memoryStream.ToArray());
        }
Esempio n. 6
0
        public async Task ExecuteResultAsync_UsesPassedInFormatter_ContentTypeSpecified()
        {
            // Arrange
            var expected = _abcdUTF8Bytes;

            var context       = GetHttpContext();
            var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());

            var formatter = new JsonOutputFormatter();

            formatter.SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("application/hal+json"));

            var result = new JsonResult(new { foo = "abcd" }, formatter);

            result.ContentTypes.Add(MediaTypeHeaderValue.Parse("application/hal+json"));

            // Act
            await result.ExecuteResultAsync(actionContext);

            var written = GetWrittenBytes(context);

            // Assert
            Assert.Equal(expected, written);
            Assert.Equal("application/hal+json; charset=utf-8", context.Response.ContentType);
        }
Esempio n. 7
0
        public async Task ExecuteResultAsync_OptionsFormatter_Conneg()
        {
            // Arrange
            var expected = _abcdUTF8Bytes;

            var optionsFormatters = new List<IOutputFormatter>()
            {
                new XmlDataContractSerializerOutputFormatter(), // This won't be used
                new JsonOutputFormatter(),
            };

            var context = GetHttpContext(optionsFormatters);
            context.Request.Headers["Accept"] = "text/json";

            var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());

            var result = new JsonResult(new { foo = "abcd" });

            // Act
            await result.ExecuteResultAsync(actionContext);
            var written = GetWrittenBytes(context);

            // Assert
            Assert.Equal(expected, written);
            Assert.Equal("text/json; charset=utf-8", context.Response.ContentType);
        }
Esempio n. 8
0
        public override Task ExecuteResultAsync(ActionContext context)
        {
            if (StatusCode.HasValue)
            {
                context.HttpContext.Response.StatusCode = StatusCode.Value;
            }

            var json = new JsonResult(this);
            return json.ExecuteResultAsync(context);
        }
Esempio n. 9
0
        public override Task ExecuteResultAsync(ActionContext context)
        {
            if (StatusCode.HasValue)
            {
                context.HttpContext.Response.StatusCode = StatusCode.Value;
            }

            var json = new JsonResult(this);

            return(json.ExecuteResultAsync(context));
        }
Esempio n. 10
0
        public async Task ExecuteAsync_WritesJsonContent()
        {
            // Arrange
            var value = new { foo = "abcd" };
            var expected = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value));

            var context = GetActionContext();

            var result = new JsonResult(value);

            // Act
            await result.ExecuteResultAsync(context);

            // Assert
            var written = GetWrittenBytes(context.HttpContext);
            Assert.Equal(expected, written);
            Assert.Equal("application/json; charset=utf-8", context.HttpContext.Response.ContentType);
        }
Esempio n. 11
0
        public async Task ExecuteResultAsync_UsesDefaultContentType_IfNoContentTypeSpecified()
        {
            // Arrange
            var expected = _abcdUTF8Bytes;

            var context = GetHttpContext();
            var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());

            var result = new JsonResult(new { foo = "abcd" });

            // Act
            await result.ExecuteResultAsync(actionContext);
            var written = GetWrittenBytes(context);

            // Assert
            Assert.Equal(expected, written);
            Assert.Equal("application/json; charset=utf-8", context.Response.ContentType);
        }
Esempio n. 12
0
        public async Task ExecuteResultAsync_UsesGlobalFormatter_IfNoFormatterIsConfigured()
        {
            // Arrange
            var expected = _abcdUTF8Bytes;

            var context = GetHttpContext(enableFallback: true);
            var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());

            var result = new JsonResult(new { foo = "abcd" });

            // Act
            await result.ExecuteResultAsync(actionContext);
            var written = GetWrittenBytes(context);

            // Assert
            Assert.Equal(expected, written);
            Assert.Equal("application/json; charset=utf-8", context.Response.ContentType);
        }
Esempio n. 13
0
        public async Task ExecuteAsync_WritesJsonContent()
        {
            // Arrange
            var value    = new { foo = "abcd" };
            var expected = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value));

            var context = GetActionContext();

            var result = new JsonResult(value);

            // Act
            await result.ExecuteResultAsync(context);

            // Assert
            var written = GetWrittenBytes(context.HttpContext);

            Assert.Equal(expected, written);
            Assert.Equal("application/json; charset=utf-8", context.HttpContext.Response.ContentType);
        }
Esempio n. 14
0
        public async Task ExecuteResultAsync_UsesDefaultContentType_IfNoContentTypeSpecified()
        {
            // Arrange
            var expected = _abcdUTF8Bytes;

            var context       = GetHttpContext();
            var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());

            var result = new JsonResult(new { foo = "abcd" });

            // Act
            await result.ExecuteResultAsync(actionContext);

            var written = GetWrittenBytes(context);

            // Assert
            Assert.Equal(expected, written);
            Assert.Equal("application/json; charset=utf-8", context.Response.ContentType);
        }
Esempio n. 15
0
        public async Task ExecuteResultAsync_NullEncoding_SetsContentTypeAndDefaultEncoding()
        {
            // Arrange
            var expected = _abcdUTF8Bytes;

            var context = GetHttpContext();
            var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());

            var result = new JsonResult(new { foo = "abcd" });
            result.ContentType = new MediaTypeHeaderValue("text/json");

            // Act
            await result.ExecuteResultAsync(actionContext);
            var written = GetWrittenBytes(context);

            // Assert
            Assert.Equal(expected, written);
            Assert.Equal("text/json; charset=utf-8", context.Response.ContentType);
        }
Esempio n. 16
0
        public async Task ExecuteResult_UsesDefaultFormatter_IfNoneIsRegistered_AndNoneIsPassed()
        {
            // Arrange
            var expected     = _abcdUTF8Bytes;
            var memoryStream = new MemoryStream();
            var response     = new Mock <HttpResponse>();

            response.SetupGet(r => r.Body)
            .Returns(memoryStream);
            var context       = GetHttpContext(response.Object, registerDefaultFormatter: false);
            var actionContext = new ActionContext(context,
                                                  new RouteData(),
                                                  new ActionDescriptor());
            var result = new JsonResult(new { foo = "abcd" });

            // Act
            await result.ExecuteResultAsync(actionContext);

            // Assert
            Assert.Equal(expected, memoryStream.ToArray());
        }
Esempio n. 17
0
        public async Task ExecuteResult_GeneratesResultsWithoutBOMByDefault()
        {
            // Arrange
            var expected     = _abcdUTF8Bytes;
            var memoryStream = new MemoryStream();
            var response     = new Mock <HttpResponse>();

            response.SetupGet(r => r.Body)
            .Returns(memoryStream);
            var context       = GetHttpContext(response.Object);
            var actionContext = new ActionContext(context,
                                                  new RouteData(),
                                                  new ActionDescriptor());
            var result = new JsonResult(new { foo = "abcd" });

            // Act
            await result.ExecuteResultAsync(actionContext);

            // Assert
            Assert.Equal(expected, memoryStream.ToArray());
        }
Esempio n. 18
0
        public async Task ExecuteResultAsync_NullEncoding_SetsContentTypeAndDefaultEncoding()
        {
            // Arrange
            var expected = _abcdUTF8Bytes;

            var context       = GetHttpContext();
            var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());

            var result = new JsonResult(new { foo = "abcd" });

            result.ContentType = new MediaTypeHeaderValue("text/json");

            // Act
            await result.ExecuteResultAsync(actionContext);

            var written = GetWrittenBytes(context);

            // Assert
            Assert.Equal(expected, written);
            Assert.Equal("text/json; charset=utf-8", context.Response.ContentType);
        }
Esempio n. 19
0
        public async Task ExecuteResult_GeneratesResultsWithoutBOMByDefault()
        {
            // Arrange
            var expected = _abcdUTF8Bytes;
            var memoryStream = new MemoryStream();
            var response = new Mock<HttpResponse>();
            response.SetupGet(r => r.Body)
                   .Returns(memoryStream);
            var context = new Mock<HttpContext>();
            context.SetupGet(c => c.Response)
                   .Returns(response.Object);
            var actionContext = new ActionContext(context.Object,
                                                  new RouteData(),
                                                  new ActionDescriptor());
            var result = new JsonResult(new { foo = "abcd" });

            // Act
            await result.ExecuteResultAsync(actionContext);

            // Assert
            Assert.Equal(expected, memoryStream.ToArray());
        }
Esempio n. 20
0
        public async Task ExecuteResultAsync_UsesPassedInSerializerSettings()
        {
            // Arrange
            var expected = AbcdIndentedUTF8Bytes;

            var context       = GetHttpContext();
            var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());

            var serializerSettings = new JsonSerializerSettings();

            serializerSettings.Formatting = Formatting.Indented;

            var result = new JsonResult(new { foo = "abcd" }, serializerSettings);

            // Act
            await result.ExecuteResultAsync(actionContext);

            var written = GetWrittenBytes(context);

            // Assert
            Assert.Equal(expected, written);
            Assert.Equal("application/json; charset=utf-8", context.Response.ContentType);
        }
Esempio n. 21
0
        public async Task ExecuteResultAsync_Null()
        {
            // Arrange
            var expected = _abcdUTF8Bytes;

            var optionsFormatters = new List<IOutputFormatter>()
            {
                new XmlDataContractSerializerOutputFormatter(), // This won't be used
                new JsonOutputFormatter(),
            };

            var context = GetHttpContext(optionsFormatters);
            var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());

            var result = new JsonResult(new { foo = "abcd" });

            // Act
            await result.ExecuteResultAsync(actionContext);
            var written = GetWrittenBytes(context);

            // Assert
            Assert.Equal(expected, written);
            Assert.Equal("application/json; charset=utf-8", context.Response.ContentType);
        }
Esempio n. 22
0
        public async Task ExecuteResultAsync_UsesGlobalFormatter_IfNoFormatterIsConfigured()
        {
            // Arrange
            var expected = _abcdUTF8Bytes;

            var context = GetHttpContext(enableFallback: true);
            var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());

            var result = new JsonResult(new { foo = "abcd" });

            // Act
            await result.ExecuteResultAsync(actionContext);
            var written = GetWrittenBytes(context);

            // Assert
            Assert.Equal(expected, written);
            Assert.Equal("application/json; charset=utf-8", context.Response.ContentType);
        }
Esempio n. 23
0
        public async Task ExecuteResultAsync_UsesPassedInSerializerSettings()
        {
            // Arrange
            var expected = AbcdIndentedUTF8Bytes;

            var context = GetHttpContext();
            var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());

            var serializerSettings = new JsonSerializerSettings();
            serializerSettings.Formatting = Formatting.Indented;

            var result = new JsonResult(new { foo = "abcd" }, serializerSettings);

            // Act
            await result.ExecuteResultAsync(actionContext);
            var written = GetWrittenBytes(context);

            // Assert
            Assert.Equal(expected, written);
            Assert.Equal("application/json; charset=utf-8", context.Response.ContentType);
        }
Esempio n. 24
0
        public async Task ExecuteResultAsync_UsesPassedInFormatter_ContentTypeSpecified()
        {
            // Arrange
            var expected = _abcdUTF8Bytes;

            var context = GetHttpContext();
            var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());

            var formatter = new JsonOutputFormatter();
            formatter.SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("application/hal+json"));

            var result = new JsonResult(new { foo = "abcd" }, formatter);
            result.ContentTypes.Add(MediaTypeHeaderValue.Parse("application/hal+json"));

            // Act
            await result.ExecuteResultAsync(actionContext);
            var written = GetWrittenBytes(context);

            // Assert
            Assert.Equal(expected, written);
            Assert.Equal("application/hal+json; charset=utf-8", context.Response.ContentType);
        }
Esempio n. 25
0
        public async Task ExecuteResultAsync_UsesPassedInFormatter()
        {
            // Arrange
            var expected = _abcdUTF8Bytes;

            var context = GetHttpContext();
            var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());

            var formatter = new JsonOutputFormatter();
            formatter.SupportedEncodings.Clear();

            // This is UTF-8 WITH BOM
            formatter.SupportedEncodings.Add(Encoding.UTF8);

            var result = new JsonResult(new { foo = "abcd" }, formatter);

            // Act
            await result.ExecuteResultAsync(actionContext);
            var written = GetWrittenBytes(context);

            // Assert
            Assert.Equal(expected, written);
            Assert.Equal("application/json; charset=utf-8", context.Response.ContentType);
        }
Esempio n. 26
0
        public async Task ExecuteResultAsync_OptionsFormatter_Conneg()
        {
            // Arrange
            var expected = _abcdUTF8Bytes;

            var optionsFormatters = new List<IOutputFormatter>()
            {
                Mock.Of<IOutputFormatter>(), // This won't be used
                new JsonOutputFormatter(),
            };

            var context = GetHttpContext(optionsFormatters);
            context.Request.Headers["Accept"] = "text/json";

            var actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());

            var result = new JsonResult(new { foo = "abcd" });

            // Act
            await result.ExecuteResultAsync(actionContext);
            var written = GetWrittenBytes(context);

            // Assert
            Assert.Equal(expected, written);
            Assert.Equal("text/json; charset=utf-8", context.Response.ContentType);
        }