aboutsummaryrefslogtreecommitdiff
path: root/src/json_parser.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-12-27 18:06:31 -0800
committerGravatar GitHub <noreply@github.com> 2021-12-27 18:06:31 -0800
commit336a4b6ac2b4a8ee9a5c972f3d74bfff8eca13e6 (patch)
treef0d56c9f4ea3b318c9c9e635969de46b48d226d5 /src/json_parser.zig
parentc9c7521f4f6763dac8c5910ffcf2451c4c2f60d8 (diff)
downloadbun-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.zig80
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?
}