summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-09-26 09:35:44 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-09-26 09:35:44 -0400
commit5e27b4799853161ebf8e056e6d842fc5eda1e92c (patch)
tree5a11e71dd95d75ae91dacfd3548623d3202b2614 /tests
parenteb48a3affea5514811eed488f8c87aba066b062c (diff)
pke: deserialize empty string
Diffstat (limited to 'tests')
-rw-r--r--tests/pke-test-serialization.cpp159
-rw-r--r--tests/pke-test.cpp18
2 files changed, 174 insertions, 3 deletions
diff --git a/tests/pke-test-serialization.cpp b/tests/pke-test-serialization.cpp
index 0d97174..3c77ff9 100644
--- a/tests/pke-test-serialization.cpp
+++ b/tests/pke-test-serialization.cpp
@@ -411,7 +411,7 @@ FontRenderUUID:01010101-0101-0101-0101-010101010101
UIBox:00000000!00000003
ChildId:00000000!00000002
UUID:02020202-0202-0202-0202-020202020202
-Flags:0x3
+Flags:0x84
PosTopLeft:0.100000;0.100000
MaxSize:0.800000;0.800000
Type:0x32
@@ -736,8 +736,153 @@ int pke_test_deserialization_104() {
return 0;
}
+/* Test empty FontRender text */
+const char *const test_005_str = R"VOGON(:PKFB:
+:0:
+
+FontRenderSettings:00000000!00000000
+CharScale:1.000000
+LineHeightScale:1.000000
+CharSpacingScale:1.000000
+SurfaceAreaSize:250;250
+SurfaceAreaPos:0;0
+SurfaceAreaFlags:0x03
+ColorForeground:0.400000;0.900000;0.500000;0.800000
+ColorBackground:0.000000;0.000000;0.000000;0.000000
+
+FontRender:00000000!00000001
+ChildId:00000000!00000000
+UUID:01010101-0101-0101-0101-010101010101
+FontTypeTitle:fnt_mquin_7y
+TextBegin::
+
+:MULTILINE_END:
+
+:PKFE:)VOGON";
+int pke_test_serialization_005() {
+ int64_t err_index = 0;
+ uint32_t i, k;
+ srlztn_serialize_helper *h = nullptr;
+ pke_kve *kve = nullptr;
+ std::stringstream ss;
+ try {
+ h = pke_serialize_init(bkt);
+
+ uint64_t idx_unused;
+ FontRenderSettings frs;
+ frs.char_scale = 1.0;
+ frs.char_spacing_scale = 1.0;
+ frs.line_height_scale = 1.0;
+ frs.surface_area_size = glm::ivec2(250, 250);
+ frs.surface_area_pos = glm::ivec2(0, 0);
+ frs.surface_area_type_flags = FONT_RENDER_SURFACE_AREA_TYPE_FLAGS_CENTER_BOTH;
+ FontRenderHandle fr_handle = FontType_AddStringRender(FontType_GetFonts(idx_unused)[0].index_ft, cstring_to_pk_cstr(""), &frs, nullptr, uuid_n[1]);
+
+ pke_serialize_scene(h);
+ pke_serialize_scene_to_stream(ss, h);
+ std::string s = ss.str();
+
+ PKE_TEST_ASSERT(h->bkt == bkt, err_index);
+ PKE_TEST_ASSERT(h->kvp_containers.bkt == bkt, err_index);
+ PKE_TEST_ASSERT(h->kvp_containers.next == 2, err_index);
+ // FontRenderSettings
+ PKE_TEST_ASSERT(h->kvp_containers[0].child_handles.next == 0, err_index);
+ PKE_TEST_ASSERT(h->kvp_containers[0].arr.next == 8, err_index);
+ // FontRender
+ PKE_TEST_ASSERT(h->kvp_containers[1].child_handles.next == 1, err_index);
+ PKE_TEST_ASSERT(h->kvp_containers[1].arr.next == 3, err_index);
+
+ // 8
+ for (k = 0; k < h->kvp_containers.next; ++k) {
+ for (i = 0; i < h->kvp_containers[k].arr.next; ++i) {
+ // 8 + (3 * (8 + 3))
+ kve = &h->kvp_containers[k].arr[i];
+ PKE_TEST_ASSERT(kve->key != nullptr, err_index);
+ PKE_TEST_ASSERT(kve->val != nullptr, err_index);
+ PKE_TEST_ASSERT(kve->end != nullptr, err_index);
+ }
+ }
+
+ // 41
+ PKE_TEST_ASSERT(strstr(test_005_str, s.c_str()) != nullptr, err_index);
+
+ pke_serialize_teardown(h);
+
+ } catch (const std::exception &ex) {
+ throw;
+ }
+ return 0;
+}
+
+int pke_test_deserialization_105() {
+ int64_t err_index = 0;
+ uint32_t i, k;
+ pke_kve *kve;
+ srlztn_deserialize_helper *h;
+ std::stringstream ss(test_005_str);
+ try {
+ h = pke_deserialize_init(test_level, bkt);
+
+ pke_deserialize_scene_from_stream(ss, h);
+
+ PKE_TEST_ASSERT(h->bkt == bkt, err_index);
+ PKE_TEST_ASSERT(h->kvp_containers.bkt == bkt, err_index);
+ PKE_TEST_ASSERT(h->kvp_containers.next == 2, err_index);
+ // FontRenderSettings
+ PKE_TEST_ASSERT(h->kvp_containers[0].child_handles.next == 0, err_index);
+ PKE_TEST_ASSERT(h->kvp_containers[0].arr.next == 8, err_index);
+ // FontRender
+ PKE_TEST_ASSERT(h->kvp_containers[1].child_handles.next == 1, err_index);
+ PKE_TEST_ASSERT(h->kvp_containers[1].arr.next == 3, err_index);
+
+ // 8
+ for (k = 0; k < h->kvp_containers.next; ++k) {
+ for (i = 0; i < h->kvp_containers[k].arr.next; ++i) {
+ // 8 + (3 * (8 + 3))
+ kve = &h->kvp_containers[k].arr[i];
+ PKE_TEST_ASSERT(kve->key != nullptr, err_index);
+ PKE_TEST_ASSERT(kve->val != nullptr, err_index);
+ PKE_TEST_ASSERT(kve->end != nullptr, err_index);
+ }
+ }
+
+ pke_deserialize_scene(h);
+
+ uint64_t idx_unused;
+ FontType *fonts = FontType_GetFonts(idx_unused);
+ // 41
+ PKE_TEST_ASSERT(fonts != nullptr, err_index);
+ PKE_TEST_ASSERT(idx_unused != 0xFFFFFFFFFFFFFFFF, err_index);
+ PKE_TEST_ASSERT(fonts->n_render > FontRenderIndex{0}, err_index);
+ FontRender *fr = &fonts[0].renders[0];
+
+ // 44
+ PKE_TEST_ASSERT(fr->settings.char_scale == 1.f, err_index);
+ PKE_TEST_ASSERT(fr->settings.line_height_scale == 1.f, err_index);
+ PKE_TEST_ASSERT(fr->settings.char_spacing_scale == 1.f, err_index);
+ PKE_TEST_ASSERT(fr->settings.surface_area_size == glm::ivec2(250,250), err_index);
+ PKE_TEST_ASSERT(fr->settings.surface_area_pos == glm::ivec2(0,0), err_index);
+ PKE_TEST_ASSERT(fr->settings.surface_area_type_flags == FONT_RENDER_SURFACE_AREA_TYPE_FLAGS_CENTER_BOTH, err_index);
+ // auto equal_4 = glm::epsilonEqual(fr->settings.color_foreground, glm::vec4(0.4, 0.9, 0.5, 0.8), epsilon_4);
+ // PKE_TEST_ASSERT(equal_4 == bool_4, err_index);
+ PKE_TEST_ASSERT(fr->settings.color_foreground == glm::vec4(0.4, 0.9, 0.5, 0.8), err_index);
+ PKE_TEST_ASSERT(fr->settings.color_background == glm::vec4(0.0, 0.0, 0.0, 0.0), err_index);
+
+ // 52
+ PKE_TEST_ASSERT(fr->uuid == uuid_n[1], err_index);
+ PKE_TEST_ASSERT(fr->text.val != nullptr, err_index);
+ PKE_TEST_ASSERT(fr->text.val[0] == '\0', err_index);
+
+ pke_deserialize_teardown(h);
+
+ } catch (const std::exception &ex) {
+ throw;
+ }
+ return 0;
+}
+
struct pke_test_group *pke_test_serialization_get_group() {
- static const uint64_t test_count = 9;
+ static const uint64_t test_count = 11;
static struct pke_test tests[test_count] = {
{
.title = "test 999",
@@ -784,6 +929,16 @@ struct pke_test_group *pke_test_serialization_get_group() {
.func = pke_test_deserialization_104,
.expected_result = 0,
},
+ {
+ .title = "test 005",
+ .func = pke_test_serialization_005,
+ .expected_result = 0,
+ },
+ {
+ .title = "test 105",
+ .func = pke_test_deserialization_105,
+ .expected_result = 0,
+ },
};
static struct pke_test_group group = {};
group.title = "de/serialization";
diff --git a/tests/pke-test.cpp b/tests/pke-test.cpp
index 5508394..7a314b5 100644
--- a/tests/pke-test.cpp
+++ b/tests/pke-test.cpp
@@ -34,10 +34,12 @@ int main(int argc, char *argv[])
(void)argv;
int i = 0;
int result;
- uint32_t k, pass_count;
+ uint32_t k, pass_count, test_group_count, test_group_pass_count;
double elapsed_ms;
double group_ms;
+ double total_ms;
pk_tmr func_tmr;
+ pk_tmr total_tmr;
pke_test_get_group *group_fns[] = {
pke_test_dummy_get_group,
@@ -50,9 +52,14 @@ int main(int argc, char *argv[])
NULL,
};
+ total_ms = 0;
+ test_group_count = 0;
+ test_group_pass_count = 0;
+ pk_tmr_start(total_tmr);
fprintf(stdout, "\r\n");
pke_test_get_group *fn = group_fns[i];
while (fn != NULL) {
+ test_group_count += 1;
pass_count = 0;
group_ms = 0;
struct pke_test_group *group = (fn)();
@@ -68,6 +75,7 @@ int main(int argc, char *argv[])
pk_tmr_stop(func_tmr);
elapsed_ms = pk_tmr_duration_dbl_mili(func_tmr);
group_ms += elapsed_ms;
+ total_ms += elapsed_ms;
if (result == group->tests[k].expected_result){
pass_count += 1;
fprintf(stdout, "[pke-test]:[%s]:[%s] %sPassed.%s\n", group->title, group->tests[k].title, CLR_GREEN, CLR_WHITE);
@@ -81,9 +89,17 @@ int main(int argc, char *argv[])
if (group->group_teardown != NULL) (group->group_teardown)();
fprintf(stdout, "[pke-test]:[%s] End. ( %s%03d%s / %03d ) Tests Completed.\n", group->title, pass_count == group->n_tests ? CLR_GREEN : CLR_RED, pass_count, CLR_WHITE, group->n_tests);
fprintf(stdout, "[pke-test]:[%s] End. Elapsed ms: '%f'.\n\n", group->title, group_ms);
+ if (pass_count == group->n_tests) {
+ test_group_pass_count += 1;
+ }
i += 1;
fn = group_fns[i];
}
+ pk_tmr_stop(total_tmr);
+
+ fprintf(stdout, "[pke-test] End. ( %s%03d%s / %03d ) Test Groups Completed.\n", test_group_count == test_group_pass_count ? CLR_GREEN : CLR_RED, test_group_pass_count, CLR_WHITE, test_group_count);
+ fprintf(stdout, "[pke-test] End. Elapsed ms: '%f' (test fn sum).\n", total_ms);
+ fprintf(stdout, "[pke-test] End. Elapsed ms: '%f' (actual).\n\n", pk_tmr_duration_dbl_mili(total_tmr));
return 0;
}