-Fixed reading NaN, Infinity, -Infinity with ReadAsDouble and ReadAsString
This commit is contained in:
@@ -61,6 +61,95 @@ namespace Newtonsoft.Json.Tests
|
||||
[TestFixture]
|
||||
public class JsonTextReaderTest : TestFixtureBase
|
||||
{
|
||||
[Test]
|
||||
public void Float_NaN_Read()
|
||||
{
|
||||
const string testJson = "{float: NaN}";
|
||||
|
||||
JsonTextReader reader = new JsonTextReader(new StringReader(testJson));
|
||||
|
||||
Assert.IsTrue(reader.Read());
|
||||
Assert.IsTrue(reader.Read());
|
||||
Assert.IsTrue(reader.Read());
|
||||
|
||||
Assert.AreEqual(JsonToken.Float, reader.TokenType);
|
||||
Assert.AreEqual(double.NaN, reader.Value);
|
||||
|
||||
Assert.IsTrue(reader.Read());
|
||||
Assert.IsFalse(reader.Read());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Float_NaN_ReadAsInt32()
|
||||
{
|
||||
const string testJson = "{float: NaN}";
|
||||
|
||||
JsonTextReader reader = new JsonTextReader(new StringReader(testJson));
|
||||
|
||||
Assert.IsTrue(reader.Read());
|
||||
Assert.IsTrue(reader.Read());
|
||||
|
||||
ExceptionAssert.Throws<JsonReaderException>(() => reader.ReadAsInt32(), "Cannot read NaN value. Path 'float', line 1, position 11.");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Float_NaNAndInifinity_ReadAsDouble()
|
||||
{
|
||||
const string testJson = @"[
|
||||
NaN,
|
||||
Infinity,
|
||||
-Infinity
|
||||
]"; ;
|
||||
|
||||
JsonTextReader reader = new JsonTextReader(new StringReader(testJson));
|
||||
|
||||
Assert.IsTrue(reader.Read());
|
||||
|
||||
Assert.AreEqual(double.NaN, reader.ReadAsDouble());
|
||||
Assert.AreEqual(JsonToken.Float, reader.TokenType);
|
||||
Assert.AreEqual(double.NaN, reader.Value);
|
||||
|
||||
Assert.AreEqual(double.PositiveInfinity, reader.ReadAsDouble());
|
||||
Assert.AreEqual(JsonToken.Float, reader.TokenType);
|
||||
Assert.AreEqual(double.PositiveInfinity, reader.Value);
|
||||
|
||||
Assert.AreEqual(double.NegativeInfinity, reader.ReadAsDouble());
|
||||
Assert.AreEqual(JsonToken.Float, reader.TokenType);
|
||||
Assert.AreEqual(double.NegativeInfinity, reader.Value);
|
||||
|
||||
Assert.IsTrue(reader.Read());
|
||||
Assert.IsFalse(reader.Read());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Float_NaNAndInifinity_ReadAsString()
|
||||
{
|
||||
const string testJson = @"[
|
||||
NaN,
|
||||
Infinity,
|
||||
-Infinity
|
||||
]"; ;
|
||||
|
||||
JsonTextReader reader = new JsonTextReader(new StringReader(testJson));
|
||||
|
||||
Assert.IsTrue(reader.Read());
|
||||
|
||||
Assert.AreEqual(JsonConvert.NaN, reader.ReadAsString());
|
||||
Assert.AreEqual(JsonToken.String, reader.TokenType);
|
||||
Assert.AreEqual(JsonConvert.NaN, reader.Value);
|
||||
|
||||
Assert.AreEqual(JsonConvert.PositiveInfinity, reader.ReadAsString());
|
||||
Assert.AreEqual(JsonToken.String, reader.TokenType);
|
||||
Assert.AreEqual(JsonConvert.PositiveInfinity, reader.Value);
|
||||
|
||||
Assert.AreEqual(JsonConvert.NegativeInfinity, reader.ReadAsString());
|
||||
Assert.AreEqual(JsonToken.String, reader.TokenType);
|
||||
Assert.AreEqual(JsonConvert.NegativeInfinity, reader.Value);
|
||||
|
||||
Assert.IsTrue(reader.Read());
|
||||
Assert.IsFalse(reader.Read());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FloatParseHandling_ReadAsString()
|
||||
{
|
||||
@@ -486,7 +575,7 @@ third line", jsonTextReader.Value);
|
||||
Assert.IsTrue(reader.Read());
|
||||
Assert.AreEqual(JsonToken.StartArray, reader.TokenType);
|
||||
|
||||
ExceptionAssert.Throws<JsonReaderException>(() => reader.Read(), "Cannot read NaN as a decimal.");
|
||||
ExceptionAssert.Throws<JsonReaderException>(() => reader.Read(), "Cannot read NaN value. Path '', line 1, position 4.");
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
Reference in New Issue
Block a user