";
1053 | var fixed_reader: std.Io.Reader = .fixed(buf);
1054 |
1055 | var diagnostics = Diagnostics.init(std.testing.allocator);
1056 | defer diagnostics.deinit();
1057 |
1058 | const parsed = try fromReaderDiagnostics(std.testing.allocator, &fixed_reader, &diagnostics);
1059 | defer parsed.deinit();
1060 |
1061 | try std.testing.expectEqual(diagnostics.defects.items.len, 1);
1062 | }
1063 |
1064 | test fromSliceComptime {
1065 | @setEvalBranchQuota(8192);
1066 | const tree = try fromSliceComptime(test_buf);
1067 | try expectTestTreeValid(tree);
1068 | }
1069 |
1070 | test Tree {
1071 | const tree: Tree = .{
1072 | .children = &.{
1073 | .{ .elem = .{
1074 | .tag_name = "person",
1075 | .attributes = &.{
1076 | .{ .name = "name", .value = "Jonas" },
1077 | .{ .name = "age", .value = "18" },
1078 | },
1079 | .tree = null,
1080 | } },
1081 | .{ .text = .{ .contents = "\n this is a gap!!! \n \n \n " } },
1082 | .{ .elem = .{
1083 | .tag_name = "goat",
1084 | .attributes = &.{},
1085 | .tree = null,
1086 | } },
1087 | .{ .elem = .{
1088 | .tag_name = "person",
1089 | .attributes = &.{
1090 | .{ .name = "name", .value = "Kyle" },
1091 | .{ .name = "age", .value = "24" },
1092 | },
1093 | .tree = null,
1094 | } },
1095 | },
1096 | };
1097 |
1098 | const jonas = tree.elementByTagName("person");
1099 | const jonas_alias = tree.elem("person");
1100 | const kyle = tree.elementByAttributeValue("name", "Kyle");
1101 | const kyle_alias = tree.elemByAttr("name", "Kyle");
1102 |
1103 | try std.testing.expect(jonas != null);
1104 | try std.testing.expect(jonas_alias != null);
1105 | try std.testing.expect(kyle != null);
1106 | try std.testing.expect(kyle_alias != null);
1107 | try std.testing.expectEqualSlices(u8, "person", jonas.?.tag_name);
1108 | try std.testing.expectEqualSlices(u8, "person", jonas_alias.?.tag_name);
1109 | try std.testing.expectEqualSlices(u8, "person", kyle.?.tag_name);
1110 | try std.testing.expectEqualSlices(u8, "person", kyle_alias.?.tag_name);
1111 | try std.testing.expectEqualSlices(u8, "Jonas", jonas.?.attributes[0].value.?);
1112 | try std.testing.expectEqualSlices(u8, "Jonas", jonas_alias.?.attributes[0].value.?);
1113 | try std.testing.expectEqualSlices(u8, "Kyle", kyle.?.attributes[0].value.?);
1114 | try std.testing.expectEqualSlices(u8, "Kyle", kyle_alias.?.attributes[0].value.?);
1115 |
1116 | const jonas_name = tree.children[0].elem.attributeValueByName("name");
1117 | const jonas_name_alias = tree.children[0].elem.attrValue("name");
1118 | try std.testing.expect(jonas_name != null);
1119 | try std.testing.expect(jonas_name_alias != null);
1120 | try std.testing.expectEqualSlices(u8, "Jonas", jonas_name.?);
1121 | try std.testing.expectEqualSlices(u8, "Jonas", jonas_name_alias.?);
1122 |
1123 | const all_people = try tree.elementsByTagNameAlloc(std.testing.allocator, "person");
1124 | defer std.testing.allocator.free(all_people);
1125 |
1126 | try std.testing.expectEqual(2, all_people.len);
1127 | try std.testing.expectEqualDeep(jonas.?, all_people[0]);
1128 | try std.testing.expectEqualDeep(kyle.?, all_people[1]);
1129 |
1130 | const text = try tree.concatTextAlloc(std.testing.allocator);
1131 | defer std.testing.allocator.free(text);
1132 | const text2 = try tree.concatTextTrimmedAlloc(std.testing.allocator);
1133 | defer std.testing.allocator.free(text2);
1134 |
1135 | try std.testing.expectEqualSlices(u8, "\n this is a gap!!! \n \n \n ", text);
1136 | try std.testing.expectEqualSlices(u8, "this is a gap!!!", text2);
1137 | }
1138 |
1139 | test "parsing CDATA" {
1140 | const payload =
1141 | \\
-
1142 | \\ Title #1
1143 | \\ foobar]]
]]>
1144 | \\
1145 | ;
1146 |
1147 | const result = try fromSlice(std.testing.allocator, payload);
1148 | defer result.deinit();
1149 |
1150 | const item_tag = result.tree.elementByTagName("item").?;
1151 | const data_tag = item_tag.tree.?.elementByTagName("data").?;
1152 | try std.testing.expectEqualStrings("
foobar]]
", data_tag.tree.?.children[0].cdata.contents);
1153 | }
1154 |
--------------------------------------------------------------------------------