|
4 | 4 |
|
5 | 5 | package play.api.libs.json |
6 | 6 |
|
| 7 | +import java.math.BigInteger |
7 | 8 | import java.util.Calendar |
8 | 9 | import java.util.Date |
9 | 10 | import java.util.TimeZone |
@@ -477,6 +478,55 @@ class JsonSpec extends org.specs2.mutable.Specification { |
477 | 478 | fromJson[JsonNode](jsNum).map(_.toString).must_==(JsSuccess("12.345")) |
478 | 479 | } |
479 | 480 |
|
| 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 | + |
480 | 530 | "parse from InputStream" in { |
481 | 531 | val js = Json.obj( |
482 | 532 | "key1" -> "value1", |
|
0 commit comments