-Fixed JToken.ReadFrom creating a string value for a comment
This commit is contained in:
@@ -57,6 +57,23 @@ namespace Newtonsoft.Json.Tests.Linq
|
||||
[TestFixture]
|
||||
public class JObjectTests : TestFixtureBase
|
||||
{
|
||||
[Test]
|
||||
public void EmbedJValueStringInNewJObject()
|
||||
{
|
||||
string s = null;
|
||||
var v = new JValue(s);
|
||||
dynamic o = JObject.FromObject(new { title = v });
|
||||
|
||||
string output = o.ToString();
|
||||
|
||||
Assert.AreEqual(@"{
|
||||
""title"": null
|
||||
}", output);
|
||||
|
||||
Assert.AreEqual(null, v.Value);
|
||||
Assert.IsNull((string)o.title);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void JObjectWithComments()
|
||||
{
|
||||
|
||||
@@ -49,6 +49,81 @@ namespace Newtonsoft.Json.Tests.Linq
|
||||
[TestFixture]
|
||||
public class LinqToJsonTest : TestFixtureBase
|
||||
{
|
||||
[Test]
|
||||
public void CommentsAndReadFrom()
|
||||
{
|
||||
StringReader textReader = new StringReader(@"[
|
||||
// hi
|
||||
1,
|
||||
2,
|
||||
3
|
||||
]");
|
||||
|
||||
JsonTextReader jsonReader = new JsonTextReader(textReader);
|
||||
JArray a = (JArray)JToken.ReadFrom(jsonReader);
|
||||
|
||||
Assert.AreEqual(4, a.Count);
|
||||
Assert.AreEqual(JTokenType.Comment, a[0].Type);
|
||||
Assert.AreEqual(" hi", ((JValue)a[0]).Value);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void StartingCommentAndReadFrom()
|
||||
{
|
||||
StringReader textReader = new StringReader(@"
|
||||
// hi
|
||||
[
|
||||
1,
|
||||
2,
|
||||
3
|
||||
]");
|
||||
|
||||
JsonTextReader jsonReader = new JsonTextReader(textReader);
|
||||
JValue v = (JValue)JToken.ReadFrom(jsonReader);
|
||||
|
||||
Assert.AreEqual(JTokenType.Comment, v.Type);
|
||||
|
||||
IJsonLineInfo lineInfo = v;
|
||||
Assert.AreEqual(true, lineInfo.HasLineInfo());
|
||||
Assert.AreEqual(3, lineInfo.LineNumber);
|
||||
Assert.AreEqual(1, lineInfo.LinePosition);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void StartingUndefinedAndReadFrom()
|
||||
{
|
||||
StringReader textReader = new StringReader(@"
|
||||
undefined
|
||||
[
|
||||
1,
|
||||
2,
|
||||
3
|
||||
]");
|
||||
|
||||
JsonTextReader jsonReader = new JsonTextReader(textReader);
|
||||
JValue v = (JValue)JToken.ReadFrom(jsonReader);
|
||||
|
||||
Assert.AreEqual(JTokenType.Undefined, v.Type);
|
||||
|
||||
IJsonLineInfo lineInfo = v;
|
||||
Assert.AreEqual(true, lineInfo.HasLineInfo());
|
||||
Assert.AreEqual(2, lineInfo.LineNumber);
|
||||
Assert.AreEqual(10, lineInfo.LinePosition);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void StartingEndArrayAndReadFrom()
|
||||
{
|
||||
StringReader textReader = new StringReader(@"[]");
|
||||
|
||||
JsonTextReader jsonReader = new JsonTextReader(textReader);
|
||||
jsonReader.Read();
|
||||
jsonReader.Read();
|
||||
|
||||
ExceptionAssert.Throws<JsonReaderException>(@"Error reading JToken from JsonReader. Unexpected token: EndArray. Path '', line 1, position 2.",
|
||||
() => JToken.ReadFrom(jsonReader));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void JPropertyPath()
|
||||
{
|
||||
|
||||
@@ -1835,22 +1835,42 @@ namespace Newtonsoft.Json.Linq
|
||||
throw JsonReaderException.Create(reader, "Error reading JToken from JsonReader.");
|
||||
}
|
||||
|
||||
if (reader.TokenType == JsonToken.StartObject)
|
||||
return JObject.Load(reader);
|
||||
IJsonLineInfo lineInfo = reader as IJsonLineInfo;
|
||||
|
||||
if (reader.TokenType == JsonToken.StartArray)
|
||||
return JArray.Load(reader);
|
||||
|
||||
if (reader.TokenType == JsonToken.PropertyName)
|
||||
return JProperty.Load(reader);
|
||||
|
||||
if (reader.TokenType == JsonToken.StartConstructor)
|
||||
return JConstructor.Load(reader);
|
||||
|
||||
if (!JsonReader.IsStartToken(reader.TokenType))
|
||||
return new JValue(reader.Value);
|
||||
|
||||
throw JsonReaderException.Create(reader, "Error reading JToken from JsonReader. Unexpected token: {0}".FormatWith(CultureInfo.InvariantCulture, reader.TokenType));
|
||||
switch (reader.TokenType)
|
||||
{
|
||||
case JsonToken.StartObject:
|
||||
return JObject.Load(reader);
|
||||
case JsonToken.StartArray:
|
||||
return JArray.Load(reader);
|
||||
case JsonToken.StartConstructor:
|
||||
return JConstructor.Load(reader);
|
||||
case JsonToken.PropertyName:
|
||||
return JProperty.Load(reader);
|
||||
case JsonToken.String:
|
||||
case JsonToken.Integer:
|
||||
case JsonToken.Float:
|
||||
case JsonToken.Date:
|
||||
case JsonToken.Boolean:
|
||||
case JsonToken.Bytes:
|
||||
JValue v = new JValue(reader.Value);
|
||||
v.SetLineInfo(lineInfo);
|
||||
return v;
|
||||
case JsonToken.Comment:
|
||||
v = JValue.CreateComment(reader.Value.ToString());
|
||||
v.SetLineInfo(lineInfo);
|
||||
return v;
|
||||
case JsonToken.Null:
|
||||
v = new JValue(null, JTokenType.Null);
|
||||
v.SetLineInfo(lineInfo);
|
||||
return v;
|
||||
case JsonToken.Undefined:
|
||||
v = new JValue(null, JTokenType.Undefined);
|
||||
v.SetLineInfo(lineInfo);
|
||||
return v;
|
||||
default:
|
||||
throw JsonReaderException.Create(reader, "Error reading JToken from JsonReader. Unexpected token: {0}".FormatWith(CultureInfo.InvariantCulture, reader.TokenType));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user