diff --git a/lib/mu-message-flags.cc b/lib/mu-message-flags.cc index 0ac76e97..284d7001 100644 --- a/lib/mu-message-flags.cc +++ b/lib/mu-message-flags.cc @@ -53,70 +53,118 @@ validate_message_info_flags() return true; } -static_assert(AllMessageFlagInfos.size() == - __builtin_ctz(static_cast(MessageFlags::_final_))); -static_assert(validate_message_info_flags()); -static_assert(!!message_flag_info(MessageFlags::Encrypted)); -static_assert(!message_flag_info(MessageFlags::None)); -static_assert(!message_flag_info(static_cast(0))); -static_assert(!message_flag_info(static_cast(1<(MessageFlags::_final_))); + static_assert(validate_message_info_flags()); + + static_assert(!!message_flag_info(MessageFlags::Encrypted)); + static_assert(!message_flag_info(MessageFlags::None)); + static_assert(!message_flag_info(static_cast(0))); + static_assert(!message_flag_info(static_cast(1<flag == MessageFlags::Draft); -static_assert(message_flag_info('l')->flag == MessageFlags::MailingList); -static_assert(!message_flag_info('q')); +[[maybe_unused]] static void +test_message_flag_info() +{ + static_assert(message_flag_info('D')->flag == MessageFlags::Draft); + static_assert(message_flag_info('l')->flag == MessageFlags::MailingList); + static_assert(!message_flag_info('q')); -static_assert(message_flag_info("trashed")->flag == MessageFlags::Trashed); -static_assert(message_flag_info("attach")->flag == MessageFlags::HasAttachment); -static_assert(!message_flag_info("fnorb")); + static_assert(message_flag_info("trashed")->flag == MessageFlags::Trashed); + static_assert(message_flag_info("attach")->flag == MessageFlags::HasAttachment); + static_assert(!message_flag_info("fnorb")); -static_assert(message_flag_info('D')->shortcut_lower() == 'd'); -static_assert(message_flag_info('u')->shortcut_lower() == 'u'); + static_assert(message_flag_info('D')->shortcut_lower() == 'd'); + static_assert(message_flag_info('u')->shortcut_lower() == 'u'); +} /* * message_flags_from_expr */ -static_assert(message_flags_from_absolute_expr("SRP").value() == - (MessageFlags::Seen | MessageFlags::Replied | MessageFlags::Passed)); -static_assert(message_flags_from_absolute_expr("Faul").value() == - (MessageFlags::Flagged | MessageFlags::Unread | - MessageFlags::HasAttachment | MessageFlags::MailingList)); +[[maybe_unused]] static void +test_message_flags_from_expr() +{ + static_assert(message_flags_from_absolute_expr("SRP").value() == + (MessageFlags::Seen | MessageFlags::Replied | MessageFlags::Passed)); + static_assert(message_flags_from_absolute_expr("Faul").value() == + (MessageFlags::Flagged | MessageFlags::Unread | + MessageFlags::HasAttachment | MessageFlags::MailingList)); + + static_assert(!message_flags_from_absolute_expr("DRT?")); + static_assert(message_flags_from_absolute_expr("DRT?", true/*ignore invalid*/).value() == + (MessageFlags::Draft | MessageFlags::Replied | + MessageFlags::Trashed)); + static_assert(message_flags_from_absolute_expr("DFPNxulabcdef", true/*ignore invalid*/).value() == + (MessageFlags::Draft|MessageFlags::Flagged|MessageFlags::Passed| + MessageFlags::New | MessageFlags::Encrypted | + MessageFlags::Unread | MessageFlags::MailingList | + MessageFlags::HasAttachment)); +} -static_assert(!message_flags_from_absolute_expr("DRT?")); -static_assert(message_flags_from_absolute_expr("DRT?", true/*ignore invalid*/).value() == - (MessageFlags::Draft | MessageFlags::Replied | - MessageFlags::Trashed)); -static_assert(message_flags_from_absolute_expr("DFPNxulabcdef", true/*ignore invalid*/).value() == - (MessageFlags::Draft|MessageFlags::Flagged|MessageFlags::Passed| - MessageFlags::New | MessageFlags::Encrypted | - MessageFlags::Unread | MessageFlags::MailingList | - MessageFlags::HasAttachment)); /* * message_flags_from_delta_expr */ -static_assert(message_flags_from_delta_expr( - "+S-u-N", MessageFlags::New|MessageFlags::Unread).value() == - MessageFlags::Seen); -static_assert(message_flags_from_delta_expr("+R+P-F", MessageFlags::Seen).value() == - (MessageFlags::Seen|MessageFlags::Passed|MessageFlags::Replied)); -/* '-B' is invalid */ -static_assert(!message_flags_from_delta_expr("+R+P-B", MessageFlags::Seen)); -/* '-B' is invalid, but ignore invalid */ -static_assert(message_flags_from_delta_expr("+R+P-B", MessageFlags::Seen, true) == - (MessageFlags::Replied|MessageFlags::Passed|MessageFlags::Seen)); -static_assert(message_flags_from_delta_expr("+F+T-S", MessageFlags::None, true).value() == - (MessageFlags::Flagged|MessageFlags::Trashed)); +[[maybe_unused]] static void +test_message_flags_from_delta_expr() +{ + static_assert(message_flags_from_delta_expr( + "+S-u-N", MessageFlags::New|MessageFlags::Unread).value() == + MessageFlags::Seen); + static_assert(message_flags_from_delta_expr("+R+P-F", MessageFlags::Seen).value() == + (MessageFlags::Seen|MessageFlags::Passed|MessageFlags::Replied)); + /* '-B' is invalid */ + static_assert(!message_flags_from_delta_expr("+R+P-B", MessageFlags::Seen)); + /* '-B' is invalid, but ignore invalid */ + static_assert(message_flags_from_delta_expr("+R+P-B", MessageFlags::Seen, true) == + (MessageFlags::Replied|MessageFlags::Passed|MessageFlags::Seen)); + static_assert(message_flags_from_delta_expr("+F+T-S", MessageFlags::None, true).value() == + (MessageFlags::Flagged|MessageFlags::Trashed)); +} /* * message_flags_filter */ -static_assert(message_flags_filter(message_flags_from_absolute_expr( - "DFPNxulabcdef", true/*ignore invalid*/).value(), - MessageFlagCategory::Mailfile) == - (MessageFlags::Draft|MessageFlags::Flagged|MessageFlags::Passed)); +[[maybe_unused]] static void +test_message_flags_filter() +{ + static_assert(message_flags_filter(message_flags_from_absolute_expr( + "DFPNxulabcdef", true/*ignore invalid*/).value(), + MessageFlagCategory::Mailfile) == + (MessageFlags::Draft|MessageFlags::Flagged|MessageFlags::Passed)); +} + + +#ifdef BUILD_TESTS +int +main(int argc, char* argv[]) +{ + g_test_init(&argc, &argv, NULL); + + g_test_add_func("/message/flags/basic", test_basic); + g_test_add_func("/message/flags/flag-info", test_message_flag_info); + g_test_add_func("/message/flags/flags-from-absolute-expr", + test_message_flags_from_expr); + g_test_add_func("/message/flags/flags-from-delta-expr", + test_message_flags_from_delta_expr); + g_test_add_func("/message/flags/flags-filter", + test_message_flags_filter); + + return g_test_run(); +} +#endif /*BUILD_TESTS*/ diff --git a/lib/mu-message-priority.cc b/lib/mu-message-priority.cc index 09dc2eef..4f4aea46 100644 --- a/lib/mu-message-priority.cc +++ b/lib/mu-message-priority.cc @@ -30,19 +30,53 @@ Mu::to_string(MessagePriority prio) return std::string{message_priority_name(prio)}; } +/* + * tests... also build as runtime-tests, so we can get coverage info + */ +#ifdef BUILD_TESTS +#include +#define static_assert g_assert_true +#endif /*BUILD_TESTS*/ -static_assert(to_char(MessagePriority::Low) == 'l'); -static_assert(to_char(MessagePriority::Normal) == 'n'); -static_assert(to_char(MessagePriority::High) == 'h'); +[[maybe_unused]] static void +test_priority_to_char() +{ + static_assert(to_char(MessagePriority::Low) == 'l'); + static_assert(to_char(MessagePriority::Normal) == 'n'); + static_assert(to_char(MessagePriority::High) == 'h'); +} -static_assert(message_priority_from_char('l') == MessagePriority::Low); -static_assert(message_priority_from_char('n') == MessagePriority::Normal); -static_assert(message_priority_from_char('h') == MessagePriority::High); -static_assert(message_priority_from_char('x') == MessagePriority::Normal); +[[maybe_unused]] static void +test_priority_from_char() +{ + static_assert(message_priority_from_char('l') == MessagePriority::Low); + static_assert(message_priority_from_char('n') == MessagePriority::Normal); + static_assert(message_priority_from_char('h') == MessagePriority::High); + static_assert(message_priority_from_char('x') == MessagePriority::Normal); +} -static_assert(message_priority_name(MessagePriority::Low) == "low"); -static_assert(message_priority_name(MessagePriority::Normal) == "normal"); -static_assert(message_priority_name(MessagePriority::High) == "high"); +[[maybe_unused]] static void +test_priority_name() +{ + static_assert(message_priority_name(MessagePriority::Low) == "low"); + static_assert(message_priority_name(MessagePriority::Normal) == "normal"); + static_assert(message_priority_name(MessagePriority::High) == "high"); +} + + +#ifdef BUILD_TESTS +int +main(int argc, char* argv[]) +{ + g_test_init(&argc, &argv, NULL); + + g_test_add_func("/message/priority/to-char", test_priority_to_char); + g_test_add_func("/message/priority/from-char", test_priority_from_char); + g_test_add_func("/message/priority/name", test_priority_name); + + return g_test_run(); +} +#endif /*BUILD_TESTS*/ #endif /* MU_MESSAGE_PRIORITY_CC__ */ diff --git a/lib/tests/meson.build b/lib/tests/meson.build index 45c30b44..caf987a5 100644 --- a/lib/tests/meson.build +++ b/lib/tests/meson.build @@ -70,6 +70,23 @@ test('test-message-contact', dependencies: [glib_dep, gmime_dep, lib_mu_dep, lib_test_mu_common_dep])) + +test('test-message-flags', + executable('test-message-flags', + '../mu-message-flags.cc', + install: false, + cpp_args: ['-DBUILD_TESTS'], + dependencies: [glib_dep, gmime_dep, lib_mu_dep, + lib_test_mu_common_dep])) +test('test-message-priority', + executable('test-message-priority', + '../mu-message-priority.cc', + install: false, + cpp_args: ['-DBUILD_TESTS'], + dependencies: [glib_dep, gmime_dep, lib_mu_dep, + lib_test_mu_common_dep])) + + test('test-parser', executable('test-parser', 'test-parser.cc',