@@ -195,7 +195,7 @@ public void testInvalidJsonInput() throws IOException {
195
195
} catch (IOException expected ) {
196
196
}
197
197
}
198
-
198
+
199
199
@ SuppressWarnings ("unused" )
200
200
public void testNulls () {
201
201
try {
@@ -311,21 +311,39 @@ public void testDoubles() throws IOException {
311
311
+ "1.7976931348623157E308,"
312
312
+ "4.9E-324,"
313
313
+ "0.0,"
314
+ + "0.00,"
314
315
+ "-0.5,"
315
316
+ "2.2250738585072014E-308,"
316
317
+ "3.141592653589793,"
317
- + "2.718281828459045]" ;
318
+ + "2.718281828459045,"
319
+ + "0,"
320
+ + "0.01,"
321
+ + "0e0,"
322
+ + "1e+0,"
323
+ + "1e-0,"
324
+ + "1e0000," // leading 0 is allowed for exponent
325
+ + "1e00001,"
326
+ + "1e+1]" ;
318
327
JsonReader reader = new JsonReader (reader (json ));
319
328
reader .beginArray ();
320
329
assertEquals (-0.0 , reader .nextDouble ());
321
330
assertEquals (1.0 , reader .nextDouble ());
322
331
assertEquals (1.7976931348623157E308 , reader .nextDouble ());
323
332
assertEquals (4.9E-324 , reader .nextDouble ());
324
333
assertEquals (0.0 , reader .nextDouble ());
334
+ assertEquals (0.0 , reader .nextDouble ());
325
335
assertEquals (-0.5 , reader .nextDouble ());
326
336
assertEquals (2.2250738585072014E-308 , reader .nextDouble ());
327
337
assertEquals (3.141592653589793 , reader .nextDouble ());
328
338
assertEquals (2.718281828459045 , reader .nextDouble ());
339
+ assertEquals (0.0 , reader .nextDouble ());
340
+ assertEquals (0.01 , reader .nextDouble ());
341
+ assertEquals (0.0 , reader .nextDouble ());
342
+ assertEquals (1.0 , reader .nextDouble ());
343
+ assertEquals (1.0 , reader .nextDouble ());
344
+ assertEquals (1.0 , reader .nextDouble ());
345
+ assertEquals (10.0 , reader .nextDouble ());
346
+ assertEquals (10.0 , reader .nextDouble ());
329
347
reader .endArray ();
330
348
assertEquals (JsonToken .END_DOCUMENT , reader .peek ());
331
349
}
@@ -474,6 +492,13 @@ public void testMalformedNumbers() throws IOException {
474
492
assertNotANumber ("-" );
475
493
assertNotANumber ("." );
476
494
495
+ // plus sign is not allowed for integer part
496
+ assertNotANumber ("+1" );
497
+
498
+ // leading 0 is not allowed for integer part
499
+ assertNotANumber ("00" );
500
+ assertNotANumber ("01" );
501
+
477
502
// exponent lacks digit
478
503
assertNotANumber ("e" );
479
504
assertNotANumber ("0e" );
@@ -508,12 +533,17 @@ public void testMalformedNumbers() throws IOException {
508
533
}
509
534
510
535
private void assertNotANumber (String s ) throws IOException {
511
- JsonReader reader = new JsonReader (reader ("[" + s + "]" ));
536
+ JsonReader reader = new JsonReader (reader (s ));
512
537
reader .setLenient (true );
513
- reader .beginArray ();
514
538
assertEquals (JsonToken .STRING , reader .peek ());
515
539
assertEquals (s , reader .nextString ());
516
- reader .endArray ();
540
+
541
+ JsonReader strictReader = new JsonReader (reader (s ));
542
+ try {
543
+ strictReader .nextDouble ();
544
+ fail ("Should have failed reading " + s + " as double" );
545
+ } catch (MalformedJsonException e ) {
546
+ }
517
547
}
518
548
519
549
public void testPeekingUnquotedStringsPrefixedWithIntegers () throws IOException {
@@ -568,17 +598,17 @@ public void testLongLargerThanMinLongThatWrapsAround() throws IOException {
568
598
} catch (NumberFormatException expected ) {
569
599
}
570
600
}
571
-
601
+
572
602
/**
573
603
* Issue 1053, negative zero.
574
604
* @throws Exception
575
605
*/
576
606
public void testNegativeZero () throws Exception {
577
- JsonReader reader = new JsonReader (reader ("[-0]" ));
578
- reader .setLenient (false );
579
- reader .beginArray ();
580
- assertEquals (NUMBER , reader .peek ());
581
- assertEquals ("-0" , reader .nextString ());
607
+ JsonReader reader = new JsonReader (reader ("[-0]" ));
608
+ reader .setLenient (false );
609
+ reader .beginArray ();
610
+ assertEquals (NUMBER , reader .peek ());
611
+ assertEquals ("-0" , reader .nextString ());
582
612
}
583
613
584
614
/**
0 commit comments