public void CanWriteStrings(
        object value,
        bool useDeclaredTypeAsString)
    {
        // Arrange
        var expectedContentType = new StringSegment("text/plain");

        var formatter = new StringOutputFormatter();
        var type      = useDeclaredTypeAsString ? typeof(string) : typeof(object);

        var context = new OutputFormatterWriteContext(
            new DefaultHttpContext(),
            new TestHttpResponseStreamWriterFactory().CreateWriter,
            type,
            value);

        context.ContentType = new StringSegment("text/plain");

        // Act
        var result = formatter.CanWriteResult(context);

        // Assert
        Assert.True(result);
        Assert.Equal(expectedContentType, context.ContentType);
    }
    public async Task WriteAsync_DoesNotWriteNullStrings()
    {
        // Arrange
        Encoding encoding     = Encoding.UTF8;
        var      memoryStream = new MemoryStream();
        var      response     = new Mock <HttpResponse>();

        response.SetupProperty(o => o.ContentLength);
        response.SetupGet(r => r.Body).Returns(memoryStream);
        var httpContext = new Mock <HttpContext>();

        httpContext.Setup(o => o.Response).Returns(response.Object);

        var formatter = new StringOutputFormatter();
        var context   = new OutputFormatterWriteContext(
            httpContext.Object,
            new TestHttpResponseStreamWriterFactory().CreateWriter,
            typeof(string),
            @object: null);

        // Act
        await formatter.WriteResponseBodyAsync(context, encoding);

        // Assert
        Assert.Equal(0, memoryStream.Length);
        response.VerifySet(r => r.ContentLength = It.IsAny <long?>(), Times.Never());
    }
    public void CanWriteResult_DefaultContentType()
    {
        // Arrange
        var formatter = new StringOutputFormatter();
        var context   = new OutputFormatterWriteContext(
            new DefaultHttpContext(),
            new TestHttpResponseStreamWriterFactory().CreateWriter,
            typeof(string),
            "Thisisastring");

        // Act
        var result = formatter.CanWriteResult(context);

        // Assert
        Assert.True(result);
        Assert.Equal(new StringSegment("text/plain"), context.ContentType);
    }
    public void CannotWriteUnsupportedMediaType(string contentType)
    {
        // Arrange
        var formatter           = new StringOutputFormatter();
        var expectedContentType = new StringSegment(contentType);

        var context = new OutputFormatterWriteContext(
            new DefaultHttpContext(),
            new TestHttpResponseStreamWriterFactory().CreateWriter,
            typeof(string),
            "Thisisastring");

        context.ContentType = new StringSegment(contentType);

        // Act
        var result = formatter.CanWriteResult(context);

        // Assert
        Assert.False(result);
        Assert.Equal(expectedContentType, context.ContentType);
    }