#177 Enable Copy to return non-read-only.

This commit is contained in:
Chris R 2015-06-26 14:34:22 -07:00
parent 5fe8037281
commit 40719b37f6
4 changed files with 39 additions and 10 deletions

View File

@ -273,11 +273,6 @@ namespace Microsoft.Net.Http.Headers
/// <returns>A deep copy.</returns>
public MediaTypeHeaderValue Copy()
{
if (IsReadOnly)
{
return this;
}
var other = new MediaTypeHeaderValue();
other._mediaType = _mediaType;

View File

@ -64,11 +64,6 @@ namespace Microsoft.Net.Http.Headers
/// <returns>A copy.</returns>
public NameValueHeaderValue Copy()
{
if (IsReadOnly)
{
return this;
}
return new NameValueHeaderValue()
{
_name = _name,

View File

@ -135,6 +135,29 @@ namespace Microsoft.Net.Http.Headers
Assert.Same(pair0.Value, pair1.Value);
}
[Fact]
public void CopyFromReadOnly_WithParameters_CopiedAsNonReadOnly()
{
var mediaType0 = new MediaTypeHeaderValue("text/plain");
mediaType0.Parameters.Add(new NameValueHeaderValue("name", "value"));
var mediaType1 = mediaType0.CopyAsReadOnly();
var mediaType2 = mediaType1.Copy();
Assert.NotSame(mediaType2, mediaType1);
Assert.Same(mediaType2.MediaType, mediaType1.MediaType);
Assert.True(mediaType1.IsReadOnly);
Assert.False(mediaType2.IsReadOnly);
Assert.NotSame(mediaType2.Parameters, mediaType1.Parameters);
Assert.Equal(mediaType2.Parameters.Count, mediaType1.Parameters.Count);
var pair2 = mediaType2.Parameters.First();
var pair1 = mediaType1.Parameters.First();
Assert.NotSame(pair2, pair1);
Assert.True(pair1.IsReadOnly);
Assert.False(pair2.IsReadOnly);
Assert.Same(pair2.Name, pair1.Name);
Assert.Same(pair2.Value, pair1.Value);
}
[Fact]
public void MediaType_SetAndGetMediaType_MatchExpectations()
{

View File

@ -127,6 +127,22 @@ namespace Microsoft.Net.Http.Headers
Assert.Throws<InvalidOperationException>(() => { pair1.Value = "othervalue"; });
}
[Fact]
public void CopyFromReadOnly_NameAndValue_CopiedAsNonReadOnly()
{
var pair0 = new NameValueHeaderValue("name", "value");
var pair1 = pair0.CopyAsReadOnly();
var pair2 = pair1.Copy();
Assert.NotSame(pair0, pair1);
Assert.Same(pair0.Name, pair1.Name);
Assert.Same(pair0.Value, pair1.Value);
// Change one value and verify the other is unchanged.
pair2.Value = "othervalue";
Assert.Equal("othervalue", pair2.Value);
Assert.Equal("value", pair1.Value);
}
[Fact]
public void Value_CallSetterWithInvalidValues_Throw()
{