diff options
-rw-r--r-- | src/server_events.c | 32 | ||||
-rw-r--r-- | src/server_events.h | 5 | ||||
-rw-r--r-- | src/xmpp/message.c | 13 | ||||
-rw-r--r-- | tests/test_server_events.c | 9 | ||||
-rw-r--r-- | tests/test_server_events.h | 1 | ||||
-rw-r--r-- | tests/testsuite.c | 1 | ||||
-rw-r--r-- | tests/ui/mock_ui.c | 18 | ||||
-rw-r--r-- | tests/ui/mock_ui.h | 3 |
8 files changed, 52 insertions, 30 deletions
diff --git a/src/server_events.c b/src/server_events.c index e9dd7997..1e99383c 100644 --- a/src/server_events.c +++ b/src/server_events.c @@ -37,6 +37,7 @@ #include "otr.h" #endif +// TODO - replace with stanza error handlers void handle_error_message(const char *from, const char *err_msg) { @@ -52,25 +53,26 @@ handle_error_message(const char *from, const char *err_msg) } } +// handle message stanza errors void -handle_recipient_not_found(const char * const recipient, const char * const err_msg) +handle_message_error(const char * const from, const char * const type, + const char * const err_msg) { - ui_handle_recipient_not_found(recipient, err_msg); - if (prefs_get_boolean(PREF_STATES) && chat_session_exists(recipient)) { - chat_session_set_recipient_supports(recipient, FALSE); - } -} + // handle recipient not found ('from' contains a value and type is 'cancel') + if ((from != NULL) && ((type != NULL && (strcmp(type, "cancel") == 0)))) { + ui_handle_recipient_not_found(from, err_msg); + if (prefs_get_boolean(PREF_STATES) && chat_session_exists(from)) { + chat_session_set_recipient_supports(from, FALSE); + } -void -handle_recipient_error(const char * const recipient, const char * const err_msg) -{ - ui_handle_recipient_error(recipient, err_msg); -} + // handle any other error from recipient + } else if (from != NULL) { + ui_handle_recipient_error(from, err_msg); -void -handle_error(const char * const err_msg) -{ - ui_handle_error(err_msg); + // handle errors from no recipient + } else { + ui_handle_error(err_msg); + } } void diff --git a/src/server_events.h b/src/server_events.h index ab2e29fd..a0ea6d13 100644 --- a/src/server_events.h +++ b/src/server_events.h @@ -75,8 +75,7 @@ void handle_group_remove(const char * const contact, void handle_roster_remove(const char * const barejid); void handle_roster_add(const char * const barejid, const char * const name); void handle_autoping_cancel(void); -void handle_recipient_not_found(const char * const recipient, const char * const err_msg); -void handle_recipient_error(const char * const recipient, const char * const err_msg); -void handle_error(const char * const err_msg); +void handle_message_error(const char * const from, const char * const type, + const char * const err_msg); #endif diff --git a/src/xmpp/message.c b/src/xmpp/message.c index 5ea54f2d..5a7e9075 100644 --- a/src/xmpp/message.c +++ b/src/xmpp/message.c @@ -224,18 +224,7 @@ _message_error_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, g_string_free(log_msg, TRUE); - // handle recipient not found ('from' contains a value and type is 'cancel') - if ((from != NULL) && ((type != NULL && (strcmp(type, "cancel") == 0)))) { - handle_recipient_not_found(from, err_msg); - - // handle any other error from recipient - } else if (from != NULL) { - handle_recipient_error(from, err_msg); - - // handle errors from no recipient - } else { - handle_error(err_msg); - } + handle_message_error(from, type, err_msg); free(err_msg); diff --git a/tests/test_server_events.c b/tests/test_server_events.c index f800f4dc..e8a1de33 100644 --- a/tests/test_server_events.c +++ b/tests/test_server_events.c @@ -104,3 +104,12 @@ void console_shows_dnd_presence_when_set_all(void **state) roster_clear(); } + +void handle_message_stanza_error_when_no_from(void **state) +{ + char *err_msg = "Some error."; + mock_ui_handle_error(); + expect_ui_handle_error(err_msg); + + handle_message_error(NULL, "cancel", err_msg); +} diff --git a/tests/test_server_events.h b/tests/test_server_events.h index b6774456..c238bc07 100644 --- a/tests/test_server_events.h +++ b/tests/test_server_events.h @@ -4,3 +4,4 @@ void console_shows_online_presence_when_set_all(void **state); void console_doesnt_show_dnd_presence_when_set_none(void **state); void console_doesnt_show_dnd_presence_when_set_online(void **state); void console_shows_dnd_presence_when_set_all(void **state); +void handle_message_stanza_error_when_no_from(void **state); diff --git a/tests/testsuite.c b/tests/testsuite.c index 9cd35304..2e4b35cb 100644 --- a/tests/testsuite.c +++ b/tests/testsuite.c @@ -389,6 +389,7 @@ int main(int argc, char* argv[]) { unit_test_setup_teardown(console_shows_dnd_presence_when_set_all, init_preferences, close_preferences), + unit_test(handle_message_stanza_error_when_no_from) }; const UnitTest cmd_alias_tests[] = { diff --git a/tests/ui/mock_ui.c b/tests/ui/mock_ui.c index e03b77c5..5e2be5f6 100644 --- a/tests/ui/mock_ui.c +++ b/tests/ui/mock_ui.c @@ -93,6 +93,12 @@ char * _stub_ui_ask_password(void) } static +void _mock_ui_handle_error(const char * const err_msg) +{ + check_expected(err_msg); +} + +static void _stub_ui_chat_win_contact_online(PContact contact, Resource *resource, GDateTime *last_activity) { } @@ -160,6 +166,12 @@ stub_cons_show(void) } void +mock_ui_handle_error(void) +{ + ui_handle_error = _mock_ui_handle_error; +} + +void expect_cons_show(char *output) { expect_string(_mock_cons_show, output, output); @@ -213,3 +225,9 @@ mock_ui_ask_password_returns(char *password) { will_return(_mock_ui_ask_password, strdup(password)); } + +void +expect_ui_handle_error(char *err_msg) +{ + expect_string(_mock_ui_handle_error, err_msg, err_msg); +} diff --git a/tests/ui/mock_ui.h b/tests/ui/mock_ui.h index b0a5a80d..a7a53e53 100644 --- a/tests/ui/mock_ui.h +++ b/tests/ui/mock_ui.h @@ -18,6 +18,9 @@ void stub_ui_chat_win_contact_online(void); void mock_cons_show_error(void); void expect_cons_show_error(char *output); +void mock_ui_handle_error(void); +void expect_ui_handle_error(char *err_msg); + void mock_cons_show_account(void); void expect_cons_show_account(ProfAccount *account); |