const std = @import("std"); const string = []const u8; const RED = "\x1b[31;1m"; const GREEN = "\x1b[32;1m"; const CYAN = "\x1b[36;1m"; const WHITE = "\x1b[37;1m"; const DIM = "\x1b[2m"; const RESET = "\x1b[0m"; pub const Tester = struct { pass: std.ArrayList(Expectation), fail: std.ArrayList(Expectation), allocator: std.mem.Allocator, pub fn t(allocator: std.mem.Allocator) Tester { return Tester{ .allocator = allocator, .pass = std.ArrayList(Expectation).init(allocator), .fail = std.ArrayList(Expectation).init(allocator), }; } pub const Expectation = struct { expected: string, result: string, source: std.builtin.SourceLocation, pub fn init(expected: string, result: string, src: std.builtin.SourceLocation) Expectation { return Expectation{ .expected = expected, .result = result, .source = src, }; } const PADDING = 0; pub fn print(self: *const @This()) void { var pad = &([_]u8{' '} ** PADDING); var stderr = std.io.getStdErr(); stderr.writeAll(RESET) catch unreachable; stderr.writeAll(pad) catch unreachable; stderr.writeAll(DIM) catch unreachable; std.fmt.format(stderr.writer(), "{s}:{d}:{d}", .{ self.source.file, self.source.line, self.source.column }) catch unreachable; stderr.writeAll(RESET) catch unreachable; stderr.writeAll("\n") catch unreachable; stderr.writeAll(pad) catch unreachable; stderr.writeAll("Expected: ") catch unreachable; stderr.writeAll(RESET) catch unreachable; stderr.writeAll(GREEN) catch unreachable; std.fmt.format(stderr.writer(), "\"{s}\"", .{self.expected}) catch unreachable; stderr.writeAll(GREEN) catch unreachable; stderr.writeAll(RESET) catch unreachable; stderr.writeAll("\n") catch unreachable; stderr.writeAll(pad) catch unreachable; stderr.writeAll("Received: ") catch unreachable; stderr.writeAll(RESET) catch unreachable; stderr.writeAll(RED) catch unreachable; std.fmt.format(stderr.writer(), "\"{s}\"", .{self.result}) catch unreachable; stderr.writeAll(RED) catch unreachable; stderr.writeAll(RESET) catch unreachable; stderr.writeAll("\n") catch unreachable; } const strings = @import("../string_immutable.zig"); pub fn evaluate_outcome(self: *const @This()) Outcome { if (strings.eql(self.expected, self.result)) { return .pass; } else { return .fail; } } }; pub const Outcome = enum { pass, fail, }; pub inline fn expect(tester: *Tester, expected: string, result: string, src: std.builtin.SourceLocation) bool { var expectation = Expectation.init(expected, result, src); switch (expectation.evaluate_outcome()) { .pass => { tester.pass.append(expectation) catch unreachable; return true; }, .fail => { tester.fail.append(expectation) catch unreachable; return false; }, } } const ReportType = enum { none, pass, fail, some_fail, pub fn init(tester: *Tester) ReportType { if (tester.fail.items.len == 0 and tester.pass.items.len == 0) { return .none; } else if (tester.fail.items.len == 0) { return .pass; } else if (tester.pass.items.len == 0) { return .fail; } else { return .some_fail; } } }; pub fn report(tester: *Tester, src: std.builtin.SourceLocation) void { var stderr = std.io.getStdErr(); if (tester.fail.items.len > 0) { std.fmt.format(stderr.writer(), "\n\n", .{}) catch unreachable; } for (tester.fail.items) |item| { item.print(); std.fmt.format(stderr.writer(), "\n", .{}) catch unreachable; } switch (ReportType.init(tester)) { .none => { std.log.info("No expectations.\n\n", .{}); }, .pass => { std.fmt.format(stderr.writer(), "{s}All {d} expectations passed.{s}\n", .{ GREEN, tester.pass.items.len, GREEN }) catch unreachable; std.fmt.format(stderr.writer(), RESET, .{}) catch unreachable; std.testing.expect(true) catch std.debug.panic("Test failure", .{}); }, .fail => { std.fmt.format(stderr.writer(), "{s}All {d} expectations failed.{s}\n\n", .{ RED, tester.fail.items.len, RED }) catch unreachable; std.fmt.format(stderr.writer(), RESET, .{}) catch unreachable; std.testing.expect(false) catch std.debug.panic("Test failure", .{}); }, .some_fail => { std.fmt.format(stderr.writer(), "{s}{d} failed{s} and {s}{d} passed{s} of {d} expectations{s}\n\n", .{ RED, tester.fail.items.len, RED ++ RESET, GREEN, tester.pass.items.len, GREEN ++ RESET, tester.fail.items.len + tester.pass.items.len, RESET, }) catch unreachable; std.fmt.format(stderr.writer(), RESET, .{}) catch unreachable; std.testing.expect(false) catch std.debug.panic("Test failure in {s}: {s}:{d}:{d}", .{ src.fn_name, src.file, src.line, src.column }); }, } } }; red/brotli'>jarred/brotli Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/process-stdio-polyfill.js (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2023-10-17Remove ancient changelogGravatar Ashcon Partovi 1-11/+0
2023-10-17docs: fix ws.publish (#6558)Gravatar Aral Roca Gomez 1-1/+1
2023-10-17perf(bun-types): remove needless some call (#6550)Gravatar Mikhail 1-1/+1
2023-10-16fix(runtime): make some things more stable (partial jsc debug build) (#5881)Gravatar dave caruso 116-1446/+1830
2023-10-16fix(runtime): improve IPC reliability + organization pass on that code (#6475)Gravatar dave caruso 15-98/+266
2023-10-16Simplify getting Set of extentions (#4975)Gravatar Mikhail 1-3/+3
2023-10-16Fix formattingGravatar Ashcon Partovi 1-3/+1
2023-10-16fix(test): when tests run with --only the nested describe blocks `.on… (#5616)Gravatar Igor Shapiro 2-13/+45
2023-10-16perf(node:events): optimize `emit(...)` function (#5485)Gravatar Yannik Schröder 3-11/+132
2023-10-16fix: don't remove content-encoding header from header table (#5743)Gravatar Liz 2-2/+25
2023-10-16fix(sqlite) Insert .all() does not return an array #5872 (#5946)Gravatar Hugo Galan 2-7/+11
2023-10-16Fix formattingGravatar Ashcon Partovi 2-5/+4
2023-10-16Fix `Response.statusText` (#6151)Gravatar Chris Toshok 10-238/+269
2023-10-16fix-subprocess-argument-missing (#6407)Gravatar Nicolae-Rares Ailincai 4-2/+40
2023-10-16Add type parameter to `expect` (#6128)Gravatar Voldemat 1-3/+3
2023-10-16fix(node:worker_threads): ensure threadId property is exposed on worker_threa...Gravatar Jérôme Benoit 6-15/+75
2023-10-16Fix use before define bug in sqliteGravatar Ashcon Partovi 2-5/+5
2023-10-16fix(jest): fix toStrictEqual on same URLs (#6528)Gravatar João Alisson 2-13/+16
2023-10-16Fix `toHaveBeenCalled` having wrong error signatureGravatar Ashcon Partovi 1-2/+2
2023-10-16Fix formattingGravatar Ashcon Partovi 1-2/+1
2023-10-16Add `reusePort` to `Bun.serve` typesGravatar Ashcon Partovi 1-0/+9
2023-10-16Fix `request.url` having incorrect portGravatar Ashcon Partovi 4-1/+92
2023-10-16Remove uWebSockets header from Bun.serve responsesGravatar Ashcon Partovi 1-6/+6
2023-10-16Rename some testsGravatar Ashcon Partovi 3-0/+0
2023-10-16Fix #6467Gravatar Ashcon Partovi 2-3/+10
2023-10-16Update InternalModuleRegistryConstants.hGravatar Dylan Conway 1-3/+3
2023-10-16Development -> Contributing (#6538)Gravatar Colin McDonnell 2-1/+1
2023-10-14fix(net/tls) fix pg hang on end + hanging on query (#6487)Gravatar Ciro Spaciari 3-8/+36
2023-10-13fix installing dependencies that match workspace versions (#6494)Gravatar Dylan Conway 4-2/+64
2023-10-13fix lockfile struct padding (#6495)Gravatar Dylan Conway 3-3/+18