Skip to content

Commit 8e6812b

Browse files
authored
Merge pull request #1077 from pjfanning/num-tests
add number serialization tests
2 parents 8b641bb + 641f9b5 commit 8e6812b

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

play-json/jvm/src/test/scala/play/api/libs/json/JsonSpec.scala

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
package play.api.libs.json
66

7+
import java.math.BigInteger
78
import java.util.Calendar
89
import java.util.Date
910
import java.util.TimeZone
@@ -477,6 +478,55 @@ class JsonSpec extends org.specs2.mutable.Specification {
477478
fromJson[JsonNode](jsNum).map(_.toString).must_==(JsSuccess("12.345"))
478479
}
479480

481+
"Serialize JsNumbers with integers correctly" in {
482+
val numStrings = Seq(
483+
"0",
484+
"1",
485+
"-1",
486+
Int.MaxValue.toString,
487+
Int.MinValue.toString,
488+
Long.MaxValue.toString,
489+
Long.MinValue.toString,
490+
BigInteger.valueOf(Long.MaxValue).add(BigInteger.ONE).toString,
491+
BigInteger.valueOf(Long.MinValue).add(BigInteger.valueOf(-1)).toString
492+
)
493+
numStrings.map { numString =>
494+
val bigDec = new java.math.BigDecimal(numString)
495+
Json.stringify(JsNumber(bigDec)).must_==(bigDec.toString)
496+
}
497+
}
498+
499+
"Serialize JsNumbers with decimal points correctly" in {
500+
val numStrings = Seq(
501+
"0.123",
502+
"1.23456789",
503+
"-1.23456789",
504+
Float.MaxValue.toString,
505+
Float.MinValue.toString,
506+
Double.MaxValue.toString,
507+
Double.MinValue.toString,
508+
java.math.BigDecimal.valueOf(Double.MaxValue).add(java.math.BigDecimal.valueOf(1)).toString,
509+
java.math.BigDecimal.valueOf(Double.MinValue).add(java.math.BigDecimal.valueOf(-1)).toString
510+
)
511+
numStrings.map { numString =>
512+
val bigDec = new java.math.BigDecimal(numString)
513+
Json.stringify(JsNumber(bigDec)).must_==(bigDec.toString)
514+
}
515+
}
516+
517+
"Serialize JsNumbers with e notation correctly" in {
518+
val numStrings = Seq(
519+
"1.23456789012345679012345679e999",
520+
"-1.23456789012345679012345679e999",
521+
"1.23456789012345679012345679e-999",
522+
"-1.23456789012345679012345679e-999"
523+
)
524+
numStrings.map { numString =>
525+
val bigDec = new java.math.BigDecimal(numString)
526+
Json.stringify(JsNumber(bigDec)).must_==(bigDec.toString)
527+
}
528+
}
529+
480530
"parse from InputStream" in {
481531
val js = Json.obj(
482532
"key1" -> "value1",

0 commit comments

Comments
 (0)