Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions src/browser/loader.zig
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,19 @@ pub const Loader = struct {
}
};

test "basic url get" {
test "loader: get" {
const alloc = std.testing.allocator;
var loader = Loader.init(alloc);
defer loader.deinit();

var result = try loader.get(alloc, "https://en.wikipedia.org/wiki/Main_Page");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would like to keep a test using TLS also...
But I agree having something locally is really better.

Maybe we could imagine an optional slower test suite for these kind of test we could run in CI.
But It's not a blocker for now.

const uri = try std.Uri.parse("http://localhost:9582/loader");
var result = try loader.get(alloc, uri);
defer result.deinit();

try std.testing.expect(result.req.response.status == std.http.Status.ok);
try std.testing.expectEqual(.ok, result.req.response.status);

var res: [128]u8 = undefined;
const size = try result.req.readAll(&res);
try std.testing.expectEqual(6, size);
try std.testing.expectEqualStrings("Hello!", res[0..6]);
}
78 changes: 56 additions & 22 deletions src/unit_tests.zig
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ const builtin = @import("builtin");

const Allocator = std.mem.Allocator;

pub const std_options = std.Options{
.http_disable_tls = true,
};

const BORDER = "=" ** 80;

// use in custom panic handler
Expand All @@ -43,6 +47,12 @@ pub fn main() !void {
var skip: usize = 0;
var leak: usize = 0;

const address = try std.net.Address.parseIp("127.0.0.1", 9582);
var listener = try address.listen(.{.reuse_address = true});
defer listener.deinit();
const http_thread = try std.Thread.spawn(.{}, serverHTTP, .{&listener});
defer http_thread.join();

const printer = Printer.init();
printer.fmt("\r\x1b[0K", .{}); // beginning of line and clear to end of line

Expand Down Expand Up @@ -314,31 +324,55 @@ fn isTeardown(t: std.builtin.TestFn) bool {
return std.mem.endsWith(u8, t.name, "tests:afterAll");
}

test {
const msgTest = @import("msg.zig");
std.testing.refAllDecls(msgTest);

const dumpTest = @import("browser/dump.zig");
std.testing.refAllDecls(dumpTest);

const mimeTest = @import("browser/mime.zig");
std.testing.refAllDecls(mimeTest);

const cssTest = @import("css/css.zig");
std.testing.refAllDecls(cssTest);

const cssParserTest = @import("css/parser.zig");
std.testing.refAllDecls(cssParserTest);
fn serverHTTP(listener: *std.net.Server) !void {
var read_buffer: [1024]u8 = undefined;
ACCEPT: while (true) {
var conn = try listener.accept();
defer conn.stream.close();
var server = std.http.Server.init(conn, &read_buffer);

while (server.state == .ready) {
var request = server.receiveHead() catch |err| switch (err) {
error.HttpConnectionClosing => continue :ACCEPT,
else => {
std.debug.print("Test HTTP Server error: {}\n", .{err});
return err;
}
};

const cssMatchTest = @import("css/match_test.zig");
std.testing.refAllDecls(cssMatchTest);
const path = request.head.target;
if (std.mem.eql(u8, path, "/loader")) {
try writeResponse(&request, .{
.body = "Hello!",
});
}
}
}
}

const cssLibdomTest = @import("css/libdom_test.zig");
std.testing.refAllDecls(cssLibdomTest);
const Response = struct {
body: []const u8 = "",
status: std.http.Status = .ok,
};

const queryTest = @import("url/query.zig");
std.testing.refAllDecls(queryTest);
fn writeResponse(req: *std.http.Server.Request, res: Response) !void {
try req.respond(res.body, .{
.status = res.status
});
}

std.testing.refAllDecls(@import("generate.zig"));
test {
std.testing.refAllDecls( @import("url/query.zig"));
std.testing.refAllDecls(@import("browser/dump.zig"));
std.testing.refAllDecls(@import("browser/loader.zig"));
std.testing.refAllDecls(@import("browser/mime.zig"));
std.testing.refAllDecls(@import("cdp/msg.zig"));
std.testing.refAllDecls(@import("css/css.zig"));
std.testing.refAllDecls(@import("css/libdom_test.zig"));
std.testing.refAllDecls(@import("css/match_test.zig"));
std.testing.refAllDecls(@import("css/parser.zig"));
std.testing.refAllDecls(@import("generate.zig"));
std.testing.refAllDecls(@import("http/Client.zig"));
std.testing.refAllDecls(@import("msg.zig"));
std.testing.refAllDecls(@import("storage/storage.zig"));
}