| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- commit 05fd382b93cb51668d1d8858e79292601ca71b18
- Author: Chris Ross (ASP.NET) <[email protected]>
- Date: Wed Nov 8 11:10:07 2017 -0800
- #1256 Check HasStarted for StatusCode and ReasonPhrase
- diff --git a/src/Microsoft.AspNetCore.TestHost/ResponseFeature.cs b/src/Microsoft.AspNetCore.TestHost/ResponseFeature.cs
- index 2fb691619a1..c6c7b47e18d 100644
- --- a/src/Microsoft.AspNetCore.TestHost/ResponseFeature.cs
- +++ b/src/Microsoft.AspNetCore.TestHost/ResponseFeature.cs
- @@ -14,6 +14,8 @@ namespace Microsoft.AspNetCore.TestHost
- private Func<Task> _responseStartingAsync = () => Task.FromResult(true);
- private Func<Task> _responseCompletedAsync = () => Task.FromResult(true);
- private HeaderDictionary _headers = new HeaderDictionary();
- + private int _statusCode;
- + private string _reasonPhrase;
-
- public ResponseFeature()
- {
- @@ -25,9 +27,37 @@ namespace Microsoft.AspNetCore.TestHost
- StatusCode = 200;
- }
-
- - public int StatusCode { get; set; }
- + public int StatusCode
- + {
- + get => _statusCode;
- + set
- + {
- + if (HasStarted)
- + {
- + throw new InvalidOperationException("The status code cannot be set, the response has already started.");
- + }
- + if (value < 100)
- + {
- + throw new ArgumentOutOfRangeException(nameof(value), value, "The status code cannot be set to a value less than 100");
- + }
- +
- + _statusCode = value;
- + }
- + }
- +
- + public string ReasonPhrase
- + {
- + get => _reasonPhrase;
- + set
- + {
- + if (HasStarted)
- + {
- + throw new InvalidOperationException("The reason phrase cannot be set, the response has already started.");
- + }
-
- - public string ReasonPhrase { get; set; }
- + _reasonPhrase = value;
- + }
- + }
-
- public IHeaderDictionary Headers { get; set; }
-
- diff --git a/test/Microsoft.AspNetCore.TestHost.Tests/ResponseFeatureTests.cs b/test/Microsoft.AspNetCore.TestHost.Tests/ResponseFeatureTests.cs
- index 8081f092a84..f8af4cf64d2 100644
- --- a/test/Microsoft.AspNetCore.TestHost.Tests/ResponseFeatureTests.cs
- +++ b/test/Microsoft.AspNetCore.TestHost.Tests/ResponseFeatureTests.cs
- @@ -41,5 +41,28 @@ namespace Microsoft.AspNetCore.TestHost
- }, state: "string");
- });
- }
- +
- + [Fact]
- + public void StatusCode_ThrowsWhenHasStarted()
- + {
- + var responseInformation = new ResponseFeature();
- + responseInformation.HasStarted = true;
- +
- + Assert.Throws<InvalidOperationException>(() => responseInformation.StatusCode = 400);
- + Assert.Throws<InvalidOperationException>(() => responseInformation.ReasonPhrase = "Hello World");
- + }
- +
- + [Fact]
- + public void StatusCode_MustBeGreaterThan99()
- + {
- + var responseInformation = new ResponseFeature();
- +
- + Assert.Throws<ArgumentOutOfRangeException>(() => responseInformation.StatusCode = 99);
- + Assert.Throws<ArgumentOutOfRangeException>(() => responseInformation.StatusCode = 0);
- + Assert.Throws<ArgumentOutOfRangeException>(() => responseInformation.StatusCode = -200);
- + responseInformation.StatusCode = 100;
- + responseInformation.StatusCode = 200;
- + responseInformation.StatusCode = 1000;
- + }
- }
- }
- \ No newline at end of file
|