diff options
author | 2021-12-27 18:06:31 -0800 | |
---|---|---|
committer | 2021-12-27 18:06:31 -0800 | |
commit | 336a4b6ac2b4a8ee9a5c972f3d74bfff8eca13e6 (patch) | |
tree | f0d56c9f4ea3b318c9c9e635969de46b48d226d5 /src/json_parser.zig | |
parent | c9c7521f4f6763dac8c5910ffcf2451c4c2f60d8 (diff) | |
download | bun-336a4b6ac2b4a8ee9a5c972f3d74bfff8eca13e6.tar.gz bun-336a4b6ac2b4a8ee9a5c972f3d74bfff8eca13e6.tar.zst bun-336a4b6ac2b4a8ee9a5c972f3d74bfff8eca13e6.zip |
Prepare to run unit tests & remove some dead code (#92)
* Remove some dead code
* :skull: code
* Fix the zig tests
* [JS Printer] Print integers faster & less scientific notation on decimals
* :skull: dead code
* skip
* Run all the unit tests
Diffstat (limited to 'src/json_parser.zig')
-rw-r--r-- | src/json_parser.zig | 80 |
1 files changed, 27 insertions, 53 deletions
diff --git a/src/json_parser.zig b/src/json_parser.zig index e68796c29..f84619320 100644 --- a/src/json_parser.zig +++ b/src/json_parser.zig @@ -4,7 +4,6 @@ const js_lexer = @import("js_lexer.zig"); const importRecord = @import("import_record.zig"); const js_ast = @import("js_ast.zig"); const options = @import("options.zig"); -const alloc = @import("alloc.zig"); const fs = @import("fs.zig"); usingnamespace @import("global.zig"); @@ -625,34 +624,35 @@ const js_printer = @import("js_printer.zig"); const renamer = @import("renamer.zig"); const SymbolList = [][]Symbol; +const Bundler = @import("./bundler.zig").Bundler; +const ParseResult = @import("./bundler.zig").ParseResult; fn expectPrintedJSON(_contents: string, expected: string) !void { - var contents = alloc.dynamic.alloc(u8, _contents.len + 1) catch unreachable; + Expr.Data.Store.create(default_allocator); + Stmt.Data.Store.create(default_allocator); + defer { + Expr.Data.Store.reset(); + Stmt.Data.Store.reset(); + } + var contents = default_allocator.alloc(u8, _contents.len + 1) catch unreachable; std.mem.copy(u8, contents, _contents); contents[contents.len - 1] = ';'; - var log = logger.Log.init(alloc.dynamic); + var log = logger.Log.init(default_allocator); defer log.msgs.deinit(); var source = logger.Source.initPathString( "source.json", contents, ); - const expr = try ParseJSON(&source, &log, alloc.dynamic); - var stmt = Stmt.alloc(alloc.dynamic, S.SExpr{ .value = expr }, logger.Loc{ .start = 0 }); + const expr = try ParseJSON(&source, &log, default_allocator); - var part = js_ast.Part{ - .stmts = &([_]Stmt{stmt}), - }; - const tree = js_ast.Ast.initTest(&([_]js_ast.Part{part})); - var symbols: SymbolList = &([_][]Symbol{tree.symbols}); - var symbol_map = js_ast.Symbol.Map.initList(symbols); if (log.msgs.items.len > 0) { Global.panic("--FAIL--\nExpr {s}\nLog: {s}\n--FAIL--", .{ expr, log.msgs.items[0].data.text }); } - var linker = @import("linker.zig").Linker{}; - - const result = js_printer.printAst(alloc.dynamic, tree, symbol_map, &source, true, js_printer.Options{ .to_module_ref = Ref{ .inner_index = 0 } }, &linker) catch unreachable; - var js = result.js; + var buffer_writer = try js_printer.BufferWriter.init(default_allocator); + var writer = js_printer.BufferPrinter.init(buffer_writer); + const written = try js_printer.printJSON(@TypeOf(&writer), &writer, expr, &source); + var js = writer.ctx.buffer.list.items.ptr[0 .. written + 1]; if (js.len > 1) { while (js[js.len - 1] == '\n') { @@ -664,11 +664,10 @@ fn expectPrintedJSON(_contents: string, expected: string) !void { } } - std.testing.expectEqualStrings(expected, js); + try std.testing.expectEqualStrings(expected, js); } test "ParseJSON" { - try alloc.setup(default_allocator); try expectPrintedJSON("true", "true"); try expectPrintedJSON("false", "false"); try expectPrintedJSON("1", "1"); @@ -680,41 +679,16 @@ test "ParseJSON" { try expectPrintedJSON("3.4159820837456", "3.4159820837456"); try expectPrintedJSON("-10000.25", "-10000.25"); try expectPrintedJSON("\"hi\"", "\"hi\""); - try expectPrintedJSON("{\"hi\": 1, \"hey\": \"200\", \"boom\": {\"yo\": true}}", "({\"hi\": 1, \"hey\": \"200\", \"boom\": {\"yo\": true}})"); - try expectPrintedJSON("{\"hi\": \"hey\"}", "({hi: \"hey\"})"); - try expectPrintedJSON("{\"hi\": [\"hey\", \"yo\"]}", "({hi:[\"hey\",\"yo\"]})"); - // TODO: emoji? -} - -test "ParseJSON DuplicateKey warning" { - alloc.setup(std.heap.page_allocator) catch unreachable; - var log = logger.Log.init(alloc.dynamic); - - var source = logger.Source.initPathString( - "package.json", - duplicateKeyJson, + try expectPrintedJSON("{\"hi\": 1, \"hey\": \"200\", \"boom\": {\"yo\": true}}", "{\"hi\": 1, \"hey\": \"200\", \"boom\": {\"yo\": true } }"); + try expectPrintedJSON("{\"hi\": \"hey\"}", "{\"hi\": \"hey\" }"); + try expectPrintedJSON( + "{\"hi\": [\"hey\", \"yo\"]}", + \\{"hi": [ + \\ "hey", + \\ "yo" + \\] } + , ); - const expr = try ParseJSON(&source, &log, alloc.dynamic); - - const tag = @as(Expr.Tag, expr.data); - expect(tag == .e_object); - const object = expr.data.e_object; - std.testing.expectEqual(@as(usize, 2), object.properties.len); - const name1 = object.properties[0]; - expect(name1.key != null); - expect(name1.value != null); - expect(Expr.Tag.e_string == @as(Expr.Tag, name1.value.?.data)); - expect(Expr.Tag.e_string == @as(Expr.Tag, name1.key.?.data)); - expect(strings.eqlUtf16("name", name1.key.?.data.e_string.value)); - expect(strings.eqlUtf16("valid", name1.value.?.data.e_string.value)); - - const name2 = object.properties[1]; - expect(name2.key != null); - expect(name2.value != null); - expect(Expr.Tag.e_string == @as(Expr.Tag, name2.value.?.data)); - expect(Expr.Tag.e_string == @as(Expr.Tag, name2.key.?.data)); - expect(strings.eqlUtf16("name", name2.key.?.data.e_string.value)); - std.testing.expectEqualStrings("invalid", try name2.value.?.data.e_string.string(alloc.dynamic)); - - std.testing.expectEqual(@as(usize, 1), log.msgs.items.len); + + // TODO: emoji? } |