#include #include #include #include #include #include static void test_new_filename(void **state) { char const *filename = "Journal.2023-04-18T061507.01.log"; EDJournalFile *file = ed_journal_file_new(); EDErrorCode ret = 0; GError *error = NULL; assert_non_null(file); ret = ed_journal_file_peek(file, filename, &error); assert_int_equal(ret, ed_error_success); assert_null(error); g_clear_object(&file); } static void test_old_filename(void **state) { char const *filename = "Journal.230418061507.01.log"; EDJournalFile *file = ed_journal_file_new(); EDErrorCode ret = 0; GError *error = NULL; assert_non_null(file); ret = ed_journal_file_peek(file, filename, &error); assert_int_equal(ret, ed_error_success); assert_null(error); g_clear_object(&file); } static void test_new_datetime(void **state) { char const *filename = "Journal.2023-04-18T061507.01.log"; EDJournalFile *file = ed_journal_file_new(); EDErrorCode ret = 0; GError *error = NULL; assert_non_null(file); ret = ed_journal_file_peek(file, filename, &error); assert_int_equal(ret, ed_error_success); assert_null(error); GDateTime *dt = ed_journal_file_get_datetime(file); assert_non_null(dt); assert_int_equal(g_date_time_get_year(dt), 2023); assert_int_equal(g_date_time_get_month(dt), 04); assert_int_equal(g_date_time_get_day_of_month(dt), 18); assert_int_equal(g_date_time_get_hour(dt), 6); assert_int_equal(g_date_time_get_minute(dt), 15); assert_int_equal(g_date_time_get_second(dt), 7); g_clear_object(&file); } static void test_old_datetime(void **state) { char const *filename = "Journal.230418061507.01.log"; EDJournalFile *file = ed_journal_file_new(); EDErrorCode ret = 0; GError *error = NULL; assert_non_null(file); ret = ed_journal_file_peek(file, filename, &error); assert_int_equal(ret, ed_error_success); assert_null(error); GDateTime *dt = ed_journal_file_get_datetime(file); assert_non_null(dt); assert_int_equal(g_date_time_get_year(dt), 2023); assert_int_equal(g_date_time_get_month(dt), 04); assert_int_equal(g_date_time_get_day_of_month(dt), 18); assert_int_equal(g_date_time_get_hour(dt), 6); assert_int_equal(g_date_time_get_minute(dt), 15); assert_int_equal(g_date_time_get_second(dt), 7); g_clear_object(&file); } static void test_valid_load(void **state) { char const *filename = "Journal.2023-04-18T061507.01.log"; EDJournalFile *file = NULL; EDErrorCode ret = 0; GError *error = NULL; file = ed_journal_file_new(); assert_non_null(file); ret = ed_journal_file_peek(file, filename, &error); assert_null(error); assert_int_equal(ret, ed_error_success); g_clear_object(&file); } static void test_valid_peek(void **state) { char const *filename = "Journal.2023-04-18T061507.01.log"; EDJournalFile *file = NULL; EDErrorCode ret = 0; GError *error = NULL; file = ed_journal_file_new(); assert_non_null(file); ret = ed_journal_file_peek(file, filename, &error); assert_null(error); assert_int_equal(ret, ed_error_success); char const *sval = NULL; EDCommander *cmdr = NULL; cmdr = ed_journal_file_get_commander(file); assert_non_null(cmdr); sval = ed_commander_get_name(cmdr); assert_non_null(sval); assert_string_equal(sval, "DeiMuata"); sval = ed_journal_file_get_gameversion(file); assert_non_null(sval); assert_string_equal(sval, "4.0.0.1477"); g_clear_object(&file); } static void test_first_last(void **state) { char const *filename = "Journal.2024-04-18T061507.01.log"; EDJournalFile *file = NULL; EDErrorCode ret = 0; EDJournalEntry *e = NULL; GError *error = NULL; file = ed_journal_file_new(); assert_non_null(file); ret = ed_journal_file_peek(file, filename, &error); assert_null(error); assert_int_equal(ret, ed_error_success); e = ed_journal_file_get_first(file); assert_non_null(e); assert_true(ed_journal_entry_is(e, "Fileheader")); e = ed_journal_file_get_last(file); assert_non_null(e); assert_true(ed_journal_entry_is(e, "Shutdown")); g_clear_object(&file); } static void test_in_range(void **state) { char const *filename = "Journal.2024-04-18T061507.01.log"; EDJournalFile *file = NULL; EDErrorCode ret = 0; GError *error = NULL; GDateTime *start = NULL; GDateTime *end = NULL; gboolean b; file = ed_journal_file_new(); assert_non_null(file); ret = ed_journal_file_peek(file, filename, &error); assert_null(error); assert_int_equal(ret, ed_error_success); /* start in range */ start = g_date_time_new_from_iso8601("2024-04-18T04:15:39Z", NULL); end = g_date_time_new_from_iso8601("2024-04-19T04:15:39Z", NULL); b = ed_journal_file_has_entries_in_range(file, start, end); assert_true(b); g_date_time_unref(start); g_date_time_unref(end); /* end in range */ start = g_date_time_new_from_iso8601("2024-04-17T04:15:39Z", NULL); end = g_date_time_new_from_iso8601("2024-04-18T05:15:39Z", NULL); b = ed_journal_file_has_entries_in_range(file, start, end); assert_true(b); g_date_time_unref(start); g_date_time_unref(end); /* both outside */ start = g_date_time_new_from_iso8601("2023-04-17T04:15:39Z", NULL); end = g_date_time_new_from_iso8601("2025-04-18T05:15:39Z", NULL); b = ed_journal_file_has_entries_in_range(file, start, end); assert_true(b); g_date_time_unref(start); g_date_time_unref(end); /* too early */ start = g_date_time_new_from_iso8601("2023-04-17T04:15:39Z", NULL); end = g_date_time_new_from_iso8601("2023-04-18T05:15:39Z", NULL); b = ed_journal_file_has_entries_in_range(file, start, end); assert_false(b); g_date_time_unref(start); g_date_time_unref(end); /* too late */ start = g_date_time_new_from_iso8601("2025-04-17T04:15:39Z", NULL); end = g_date_time_new_from_iso8601("2025-04-18T05:15:39Z", NULL); b = ed_journal_file_has_entries_in_range(file, start, end); assert_false(b); g_date_time_unref(start); g_date_time_unref(end); g_clear_object(&file); } int main(int ac, char **av) { static const struct CMUnitTest tests[] = { cmocka_unit_test(test_new_filename), cmocka_unit_test(test_old_filename), cmocka_unit_test(test_valid_load), cmocka_unit_test(test_new_datetime), cmocka_unit_test(test_old_datetime), cmocka_unit_test(test_valid_peek), cmocka_unit_test(test_first_last), cmocka_unit_test(test_in_range), }; return cmocka_run_group_tests(tests, NULL, NULL); }