This commit is contained in:
Karl Seguin
2025-02-01 15:38:08 +08:00
parent fc0ec860b0
commit 3d66758507
2 changed files with 12 additions and 27 deletions

View File

@@ -123,7 +123,7 @@ fn isVoid(elem: *parser.Element) !bool {
fn writeEscapedTextNode(writer: anytype, value: []const u8) !void {
var v = value;
while (v.len > 0) {
const index = std.mem.indexOfAnyPos(u8, v, 0, &.{'&', '<', '>'}) orelse {
const index = std.mem.indexOfAnyPos(u8, v, 0, &.{ '&', '<', '>' }) orelse {
return writer.writeAll(v);
};
try writer.writeAll(v[0..index]);
@@ -133,14 +133,14 @@ fn writeEscapedTextNode(writer: anytype, value: []const u8) !void {
'>' => try writer.writeAll("&gt;"),
else => unreachable,
}
v = v[index+1..];
v = v[index + 1 ..];
}
}
fn writeEscapedAttributeValue(writer: anytype, value: []const u8) !void {
var v = value;
while (v.len > 0) {
const index = std.mem.indexOfAnyPos(u8, v, 0, &.{'&', '<', '>', '"'}) orelse {
const index = std.mem.indexOfAnyPos(u8, v, 0, &.{ '&', '<', '>', '"' }) orelse {
return writer.writeAll(v);
};
try writer.writeAll(v[0..index]);
@@ -151,40 +151,26 @@ fn writeEscapedAttributeValue(writer: anytype, value: []const u8) !void {
'"' => try writer.writeAll("&quot;"),
else => unreachable,
}
v = v[index+1..];
v = v[index + 1 ..];
}
}
const testing = std.testing;
test "dump.writeHTML" {
try testWriteHTML(
"<div id=\"content\">Over 9000!</div>",
"<div id=\"content\">Over 9000!</div>"
);
try testWriteHTML("<div id=\"content\">Over 9000!</div>", "<div id=\"content\">Over 9000!</div>");
try testWriteHTML(
"<root><!-- a comment --></root>",
"<root><!-- a comment --></root>"
);
try testWriteHTML("<root><!-- a comment --></root>", "<root><!-- a comment --></root>");
try testWriteHTML(
"<p>&lt; &gt; &amp;</p>",
"<p>&lt; &gt; &amp;</p>"
);
try testWriteHTML("<p>&lt; &gt; &amp;</p>", "<p>&lt; &gt; &amp;</p>");
try testWriteHTML(
"<p id=\"&quot;&gt;&lt;&amp;&quot;''\">wat?</p>",
"<p id='\">&lt;&amp;&quot;&#39;&apos;'>wat?</p>"
);
try testWriteHTML("<p id=\"&quot;&gt;&lt;&amp;&quot;''\">wat?</p>", "<p id='\">&lt;&amp;&quot;&#39;&apos;'>wat?</p>");
try testWriteFullHTML(
\\<!DOCTYPE html>
\\<html><head><title>It's over what?</title><meta name="a" value="b">
\\</head><body>9000</body></html>
\\
,
"<html><title>It's over what?</title><meta name=a value=\"b\">\n<body>9000"
);
, "<html><title>It's over what?</title><meta name=a value=\"b\">\n<body>9000");
}
fn testWriteHTML(comptime expected: []const u8, src: []const u8) !void {

View File

@@ -173,7 +173,7 @@ test "generate.Union" {
value: u8 = 0,
};
const value = Union(.{ Astruct, Bstruct, .{ Cstruct } });
const value = Union(.{ Astruct, Bstruct, .{Cstruct} });
const ti = @typeInfo(value).Union;
try std.testing.expectEqual(3, ti.fields.len);
try std.testing.expectEqualStrings("*generate.test.generate.Union.Astruct.Other", @typeName(ti.fields[0].type));
@@ -185,8 +185,7 @@ test "generate.Union" {
}
test "generate.Tuple" {
const Astruct = struct {
};
const Astruct = struct {};
const Bstruct = struct {
value: u8 = 0,
@@ -207,7 +206,7 @@ test "generate.Tuple" {
{
// dedupe
const tuple = Tuple(.{ Cstruct, Astruct, .{ Astruct }, Bstruct, .{ Astruct, .{ Astruct, Bstruct } } }){};
const tuple = Tuple(.{ Cstruct, Astruct, .{Astruct}, Bstruct, .{ Astruct, .{ Astruct, Bstruct } } }){};
const ti = @typeInfo(@TypeOf(tuple)).Struct;
try std.testing.expectEqual(true, ti.is_tuple);
try std.testing.expectEqual(3, ti.fields.len);