Skip to content
This repository was archived by the owner on Nov 20, 2018. It is now read-only.

Commit 40719b3

Browse files
committed
#177 Enable Copy to return non-read-only.
1 parent 5fe8037 commit 40719b3

File tree

4 files changed

+39
-10
lines changed

4 files changed

+39
-10
lines changed

src/Microsoft.Net.Http.Headers/MediaTypeHeaderValue.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -273,11 +273,6 @@ public bool IsSubsetOf(MediaTypeHeaderValue otherMediaType)
273273
/// <returns>A deep copy.</returns>
274274
public MediaTypeHeaderValue Copy()
275275
{
276-
if (IsReadOnly)
277-
{
278-
return this;
279-
}
280-
281276
var other = new MediaTypeHeaderValue();
282277
other._mediaType = _mediaType;
283278

src/Microsoft.Net.Http.Headers/NameValueHeaderValue.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,6 @@ public string Value
6464
/// <returns>A copy.</returns>
6565
public NameValueHeaderValue Copy()
6666
{
67-
if (IsReadOnly)
68-
{
69-
return this;
70-
}
71-
7267
return new NameValueHeaderValue()
7368
{
7469
_name = _name,

test/Microsoft.Net.Http.Headers.Tests/MediaTypeHeaderValueTest.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,29 @@ public void CopyAsReadOnly_WithParameters_CopiedAndReadOnly()
135135
Assert.Same(pair0.Value, pair1.Value);
136136
}
137137

138+
[Fact]
139+
public void CopyFromReadOnly_WithParameters_CopiedAsNonReadOnly()
140+
{
141+
var mediaType0 = new MediaTypeHeaderValue("text/plain");
142+
mediaType0.Parameters.Add(new NameValueHeaderValue("name", "value"));
143+
var mediaType1 = mediaType0.CopyAsReadOnly();
144+
var mediaType2 = mediaType1.Copy();
145+
146+
Assert.NotSame(mediaType2, mediaType1);
147+
Assert.Same(mediaType2.MediaType, mediaType1.MediaType);
148+
Assert.True(mediaType1.IsReadOnly);
149+
Assert.False(mediaType2.IsReadOnly);
150+
Assert.NotSame(mediaType2.Parameters, mediaType1.Parameters);
151+
Assert.Equal(mediaType2.Parameters.Count, mediaType1.Parameters.Count);
152+
var pair2 = mediaType2.Parameters.First();
153+
var pair1 = mediaType1.Parameters.First();
154+
Assert.NotSame(pair2, pair1);
155+
Assert.True(pair1.IsReadOnly);
156+
Assert.False(pair2.IsReadOnly);
157+
Assert.Same(pair2.Name, pair1.Name);
158+
Assert.Same(pair2.Value, pair1.Value);
159+
}
160+
138161
[Fact]
139162
public void MediaType_SetAndGetMediaType_MatchExpectations()
140163
{

test/Microsoft.Net.Http.Headers.Tests/NameValueHeaderValueTest.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,22 @@ public void CopyAsReadOnly_NameAndValue_CopiedAndReadOnly()
127127
Assert.Throws<InvalidOperationException>(() => { pair1.Value = "othervalue"; });
128128
}
129129

130+
[Fact]
131+
public void CopyFromReadOnly_NameAndValue_CopiedAsNonReadOnly()
132+
{
133+
var pair0 = new NameValueHeaderValue("name", "value");
134+
var pair1 = pair0.CopyAsReadOnly();
135+
var pair2 = pair1.Copy();
136+
Assert.NotSame(pair0, pair1);
137+
Assert.Same(pair0.Name, pair1.Name);
138+
Assert.Same(pair0.Value, pair1.Value);
139+
140+
// Change one value and verify the other is unchanged.
141+
pair2.Value = "othervalue";
142+
Assert.Equal("othervalue", pair2.Value);
143+
Assert.Equal("value", pair1.Value);
144+
}
145+
130146
[Fact]
131147
public void Value_CallSetterWithInvalidValues_Throw()
132148
{

0 commit comments

Comments
 (0)