Skip to content

Commit 8b58101

Browse files
adding cases for xml
1 parent a9919a8 commit 8b58101

File tree

1 file changed

+177
-0
lines changed

1 file changed

+177
-0
lines changed

code/tests/cases/test_xml.c

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
/*
2+
* -----------------------------------------------------------------------------
3+
* Project: Fossil Logic
4+
*
5+
* This file is part of the Fossil Logic project, which aims to develop high-
6+
* performance, cross-platform applications and libraries. The code contained
7+
* herein is subject to the terms and conditions defined in the project license.
8+
*
9+
* Author: Michael Gene Brockus (Dreamer)
10+
*
11+
* Copyright (C) 2024 Fossil Logic. All rights reserved.
12+
* -----------------------------------------------------------------------------
13+
*/
14+
#include <fossil/pizza/framework.h>
15+
#include "fossil/media/framework.h"
16+
17+
18+
// * * * * * * * * * * * * * * * * * * * * * * * *
19+
// * Fossil Logic Test Utilities
20+
// * * * * * * * * * * * * * * * * * * * * * * * *
21+
// Setup steps for things like test fixtures and
22+
// mock objects are set here.
23+
// * * * * * * * * * * * * * * * * * * * * * * * *
24+
25+
FOSSIL_TEST_SUITE(c_xml_fixture);
26+
27+
FOSSIL_SETUP(c_xml_fixture) {
28+
// Setup for XML tests
29+
}
30+
31+
FOSSIL_TEARDOWN(c_xml_fixture) {
32+
// Teardown for XML tests
33+
}
34+
35+
// * * * * * * * * * * * * * * * * * * * * * * * *
36+
// * Fossil Logic Test Cases
37+
// * * * * * * * * * * * * * * * * * * * * * * * *
38+
// The test cases below are provided as samples, inspired
39+
// by the Meson build system's approach of using test cases
40+
// as samples for library usage.
41+
// * * * * * * * * * * * * * * * * * * * * * * * *
42+
43+
FOSSIL_TEST_CASE(c_test_xml_new_element) {
44+
fossil_media_xml_node_t *node = fossil_media_xml_new_element("foo");
45+
ASSUME_NOT_CNULL(node);
46+
ASSUME_ITS_EQUAL_CSTR(node->name, "foo");
47+
ASSUME_ITS_EQUAL_CSTR(fossil_media_xml_type_name(node->type), "element");
48+
fossil_media_xml_free(node);
49+
}
50+
51+
FOSSIL_TEST_CASE(c_test_xml_new_text) {
52+
fossil_media_xml_node_t *node = fossil_media_xml_new_text("bar");
53+
ASSUME_NOT_CNULL(node);
54+
ASSUME_ITS_EQUAL_CSTR(node->content, "bar");
55+
ASSUME_ITS_EQUAL_CSTR(fossil_media_xml_type_name(node->type), "text");
56+
fossil_media_xml_free(node);
57+
}
58+
59+
FOSSIL_TEST_CASE(c_test_xml_new_comment) {
60+
fossil_media_xml_node_t *node = fossil_media_xml_new_comment("baz");
61+
ASSUME_NOT_CNULL(node);
62+
ASSUME_ITS_EQUAL_CSTR(node->content, "baz");
63+
ASSUME_ITS_EQUAL_CSTR(fossil_media_xml_type_name(node->type), "comment");
64+
fossil_media_xml_free(node);
65+
}
66+
67+
FOSSIL_TEST_CASE(c_test_xml_new_cdata) {
68+
fossil_media_xml_node_t *node = fossil_media_xml_new_cdata("cdata content");
69+
ASSUME_NOT_CNULL(node);
70+
ASSUME_ITS_EQUAL_CSTR(node->content, "cdata content");
71+
ASSUME_ITS_EQUAL_CSTR(fossil_media_xml_type_name(node->type), "cdata");
72+
fossil_media_xml_free(node);
73+
}
74+
75+
FOSSIL_TEST_CASE(c_test_xml_new_pi) {
76+
fossil_media_xml_node_t *node = fossil_media_xml_new_pi("xml-stylesheet", "type=\"text/xsl\" href=\"style.xsl\"");
77+
ASSUME_NOT_CNULL(node);
78+
ASSUME_ITS_EQUAL_CSTR(node->name, "xml-stylesheet");
79+
ASSUME_ITS_EQUAL_CSTR(node->content, "type=\"text/xsl\" href=\"style.xsl\"");
80+
ASSUME_ITS_EQUAL_CSTR(fossil_media_xml_type_name(node->type), "pi");
81+
fossil_media_xml_free(node);
82+
}
83+
84+
FOSSIL_TEST_CASE(c_test_xml_append_child_and_first_child) {
85+
fossil_media_xml_node_t *parent = fossil_media_xml_new_element("parent");
86+
fossil_media_xml_node_t *child = fossil_media_xml_new_element("child");
87+
int rc = fossil_media_xml_append_child(parent, child);
88+
ASSUME_ITS_EQUAL_I32(rc, 0);
89+
fossil_media_xml_node_t *first = fossil_media_xml_first_child(parent);
90+
ASSUME_NOT_CNULL(first);
91+
ASSUME_ITS_EQUAL_CSTR(first->name, "child");
92+
fossil_media_xml_free(parent);
93+
}
94+
95+
FOSSIL_TEST_CASE(c_test_xml_set_and_get_attribute) {
96+
fossil_media_xml_node_t *node = fossil_media_xml_new_element("item");
97+
int rc = fossil_media_xml_set_attribute(node, "id", "42");
98+
ASSUME_ITS_EQUAL_I32(rc, 0);
99+
const char *val = fossil_media_xml_get_attribute(node, "id");
100+
ASSUME_NOT_CNULL(val);
101+
ASSUME_ITS_EQUAL_CSTR(val, "42");
102+
fossil_media_xml_free(node);
103+
}
104+
105+
FOSSIL_TEST_CASE(c_test_xml_set_attribute_replace) {
106+
fossil_media_xml_node_t *node = fossil_media_xml_new_element("item");
107+
fossil_media_xml_set_attribute(node, "id", "42");
108+
fossil_media_xml_set_attribute(node, "id", "43");
109+
const char *val = fossil_media_xml_get_attribute(node, "id");
110+
ASSUME_NOT_CNULL(val);
111+
ASSUME_ITS_EQUAL_CSTR(val, "43");
112+
fossil_media_xml_free(node);
113+
}
114+
115+
FOSSIL_TEST_CASE(c_test_xml_stringify_simple) {
116+
fossil_media_xml_error_t err = FOSSIL_MEDIA_XML_OK;
117+
fossil_media_xml_node_t *node = fossil_media_xml_new_element("root");
118+
fossil_media_xml_set_attribute(node, "foo", "bar");
119+
char *xml = fossil_media_xml_stringify(node, 0, &err);
120+
ASSUME_NOT_CNULL(xml);
121+
ASSUME_ITS_EQUAL_I32(err, FOSSIL_MEDIA_XML_OK);
122+
ASSUME_ITS_TRUE(strstr(xml, "<root foo=\"bar\"/>") != NULL);
123+
free(xml);
124+
fossil_media_xml_free(node);
125+
}
126+
127+
FOSSIL_TEST_CASE(c_test_xml_stringify_pretty) {
128+
fossil_media_xml_error_t err = FOSSIL_MEDIA_XML_OK;
129+
fossil_media_xml_node_t *root = fossil_media_xml_new_element("root");
130+
fossil_media_xml_node_t *child = fossil_media_xml_new_element("child");
131+
fossil_media_xml_append_child(root, child);
132+
char *xml = fossil_media_xml_stringify(root, 1, &err);
133+
ASSUME_NOT_CNULL(xml);
134+
ASSUME_ITS_EQUAL_I32(err, FOSSIL_MEDIA_XML_OK);
135+
ASSUME_ITS_TRUE(strstr(xml, "<root>") != NULL);
136+
ASSUME_ITS_TRUE(strstr(xml, "<child/>") != NULL);
137+
free(xml);
138+
fossil_media_xml_free(root);
139+
}
140+
141+
FOSSIL_TEST_CASE(c_test_xml_parse_dummy) {
142+
fossil_media_xml_error_t err = FOSSIL_MEDIA_XML_OK;
143+
const char *xml = "<foo>bar</foo>";
144+
fossil_media_xml_node_t *node = fossil_media_xml_parse(xml, &err);
145+
ASSUME_NOT_CNULL(node);
146+
ASSUME_ITS_EQUAL_I32(err, FOSSIL_MEDIA_XML_OK);
147+
ASSUME_ITS_EQUAL_CSTR(node->name, "root"); // Dummy parser returns "root"
148+
fossil_media_xml_free(node);
149+
}
150+
151+
FOSSIL_TEST_CASE(c_test_xml_type_name) {
152+
ASSUME_ITS_EQUAL_CSTR(fossil_media_xml_type_name(FOSSIL_MEDIA_XML_ELEMENT), "element");
153+
ASSUME_ITS_EQUAL_CSTR(fossil_media_xml_type_name(FOSSIL_MEDIA_XML_TEXT), "text");
154+
ASSUME_ITS_EQUAL_CSTR(fossil_media_xml_type_name(FOSSIL_MEDIA_XML_COMMENT), "comment");
155+
ASSUME_ITS_EQUAL_CSTR(fossil_media_xml_type_name(FOSSIL_MEDIA_XML_PI), "pi");
156+
ASSUME_ITS_EQUAL_CSTR(fossil_media_xml_type_name(FOSSIL_MEDIA_XML_CDATA), "cdata");
157+
}
158+
159+
// * * * * * * * * * * * * * * * * * * * * * * * *
160+
// * Fossil Logic Test Pool
161+
// * * * * * * * * * * * * * * * * * * * * * * * *
162+
FOSSIL_TEST_GROUP(c_xml_tests) {
163+
FOSSIL_TEST_ADD(c_xml_fixture, c_test_xml_new_element);
164+
FOSSIL_TEST_ADD(c_xml_fixture, c_test_xml_new_text);
165+
FOSSIL_TEST_ADD(c_xml_fixture, c_test_xml_new_comment);
166+
FOSSIL_TEST_ADD(c_xml_fixture, c_test_xml_new_cdata);
167+
FOSSIL_TEST_ADD(c_xml_fixture, c_test_xml_new_pi);
168+
FOSSIL_TEST_ADD(c_xml_fixture, c_test_xml_append_child_and_first_child);
169+
FOSSIL_TEST_ADD(c_xml_fixture, c_test_xml_set_and_get_attribute);
170+
FOSSIL_TEST_ADD(c_xml_fixture, c_test_xml_set_attribute_replace);
171+
FOSSIL_TEST_ADD(c_xml_fixture, c_test_xml_stringify_simple);
172+
FOSSIL_TEST_ADD(c_xml_fixture, c_test_xml_stringify_pretty);
173+
FOSSIL_TEST_ADD(c_xml_fixture, c_test_xml_parse_dummy);
174+
FOSSIL_TEST_ADD(c_xml_fixture, c_test_xml_type_name);
175+
176+
FOSSIL_TEST_REGISTER(c_xml_fixture);
177+
} // end of tests

0 commit comments

Comments
 (0)