/** * Copyright (c) 2026 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #include "dusktest.h" #include "rpg/cutscene/cutscene.h" #include "util/memory.h" #include "util/string.h" // ============================================================ // cutsceneRemoveFront // ============================================================ static cutsceneitem_t MARKER_ITEM(const char_t *name) { cutsceneitem_t item; memoryZero(&item, sizeof(item)); item.type = CUTSCENE_ITEM_TYPE_MARKER; stringCopy(item.marker.name, name, CUTSCENE_MARKER_NAME_MAX - 1); return item; } static void test_cutsceneRemoveFrontShiftsRemainderToIndexZero( void **state ) { cutsceneitem_t items[4] = { MARKER_ITEM("a"), MARKER_ITEM("b"), MARKER_ITEM("c"), MARKER_ITEM("d") }; cutscene_t scene = { .items = items, .itemCount = 4, .itemsMax = 4 }; cutsceneRemoveFront(&scene, 2); assert_int_equal(scene.itemCount, 2); assert_string_equal(scene.items[0].marker.name, "c"); assert_string_equal(scene.items[1].marker.name, "d"); } static void test_cutsceneRemoveFrontAllItemsLeavesEmptyScene(void **state) { cutsceneitem_t items[3] = { MARKER_ITEM("a"), MARKER_ITEM("b"), MARKER_ITEM("c") }; cutscene_t scene = { .items = items, .itemCount = 3, .itemsMax = 3 }; cutsceneRemoveFront(&scene, 3); assert_int_equal(scene.itemCount, 0); } static void test_cutsceneRemoveFrontZeroIsNoop(void **state) { cutsceneitem_t items[2] = { MARKER_ITEM("a"), MARKER_ITEM("b") }; cutscene_t scene = { .items = items, .itemCount = 2, .itemsMax = 2 }; cutsceneRemoveFront(&scene, 0); assert_int_equal(scene.itemCount, 2); assert_string_equal(scene.items[0].marker.name, "a"); assert_string_equal(scene.items[1].marker.name, "b"); } static void test_cutsceneRemoveFrontAssertsWhenCountExceedsItemCount( void **state ) { cutsceneitem_t items[2] = { MARKER_ITEM("a"), MARKER_ITEM("b") }; cutscene_t scene = { .items = items, .itemCount = 2, .itemsMax = 2 }; expect_assert_failure(cutsceneRemoveFront(&scene, 3)); } int main(int argc, char** argv) { const struct CMUnitTest tests[] = { cmocka_unit_test(test_cutsceneRemoveFrontShiftsRemainderToIndexZero), cmocka_unit_test(test_cutsceneRemoveFrontAllItemsLeavesEmptyScene), cmocka_unit_test(test_cutsceneRemoveFrontZeroIsNoop), cmocka_unit_test(test_cutsceneRemoveFrontAssertsWhenCountExceedsItemCount), }; return cmocka_run_group_tests(tests, NULL, NULL); }