| ... | ... | @@ -387,14 +387,17 @@ pub const StreamingParser = struct { |
| 387 | 387 | token.* = Token.initMarker(Token.Id.ArrayBegin); |
| 388 | 388 | }, |
| 389 | 389 | '-' => { |
| 390 | p.number_is_integer = true; |
| 390 | 391 | p.state = State.Number; |
| 391 | 392 | p.count = 0; |
| 392 | 393 | }, |
| 393 | 394 | '0' => { |
| 395 | p.number_is_integer = true; |
| 394 | 396 | p.state = State.NumberMaybeDotOrExponent; |
| 395 | 397 | p.count = 0; |
| 396 | 398 | }, |
| 397 | 399 | '1'...'9' => { |
| 400 | p.number_is_integer = true; |
| 398 | 401 | p.state = State.NumberMaybeDigitOrDotOrExponent; |
| 399 | 402 | p.count = 0; |
| 400 | 403 | }, |
| ... | ... | @@ -453,14 +456,17 @@ pub const StreamingParser = struct { |
| 453 | 456 | token.* = Token.initMarker(Token.Id.ArrayBegin); |
| 454 | 457 | }, |
| 455 | 458 | '-' => { |
| 459 | p.number_is_integer = true; |
| 456 | 460 | p.state = State.Number; |
| 457 | 461 | p.count = 0; |
| 458 | 462 | }, |
| 459 | 463 | '0' => { |
| 464 | p.number_is_integer = true; |
| 460 | 465 | p.state = State.NumberMaybeDotOrExponent; |
| 461 | 466 | p.count = 0; |
| 462 | 467 | }, |
| 463 | 468 | '1'...'9' => { |
| 469 | p.number_is_integer = true; |
| 464 | 470 | p.state = State.NumberMaybeDigitOrDotOrExponent; |
| 465 | 471 | p.count = 0; |
| 466 | 472 | }, |
| ... | ... | @@ -1374,8 +1380,21 @@ test "write json then parse it" { |
| 1374 | 1380 | testing.expect(mem.eql(u8, tree.root.Object.get("str").?.value.String, "hello")); |
| 1375 | 1381 | } |
| 1376 | 1382 | |
| 1377 | | test "parsing empty string gives appropriate error" { |
| 1383 | fn test_parse(json_str: []const u8) !Value { |
| 1378 | 1384 | var p = Parser.init(debug.global_allocator, false); |
| 1379 | | defer p.deinit(); |
| 1380 | | testing.expectError(error.UnexpectedEndOfJson, p.parse("")); |
| 1385 | return (try p.parse(json_str)).root; |
| 1386 | } |
| 1387 | |
| 1388 | test "parsing empty string gives appropriate error" { |
| 1389 | testing.expectError(error.UnexpectedEndOfJson, test_parse("")); |
| 1390 | } |
| 1391 | |
| 1392 | test "integer after float has proper type" { |
| 1393 | const json = try test_parse( |
| 1394 | \\{ |
| 1395 | \\ "float": 3.14, |
| 1396 | \\ "ints": [1, 2, 3] |
| 1397 | \\} |
| 1398 | ); |
| 1399 | std.testing.expect(json.Object.getValue("ints").?.Array.at(0) == .Integer); |
| 1381 | 1400 | } |