diff --git a/src/xmpp/jid.c b/src/xmpp/jid.c index 449e1c92..64425116 100644 --- a/src/xmpp/jid.c +++ b/src/xmpp/jid.c @@ -152,6 +152,13 @@ jid_is_valid(const gchar* const str) return (jid != NULL); } +gboolean +jid_is_valid_user_jid(const gchar* const str) +{ + auto_jid Jid* jid = jid_create(str); + return (jid != NULL && jid->localpart != NULL); +} + Jid* jid_create_from_bare_and_resource(const gchar* const barejid, const gchar* const resource) { diff --git a/src/xmpp/jid.h b/src/xmpp/jid.h index 2d1aa127..938b27aa 100644 --- a/src/xmpp/jid.h +++ b/src/xmpp/jid.h @@ -53,6 +53,7 @@ typedef struct jid_t Jid; Jid* jid_create(const gchar* const str); gboolean jid_is_valid(const gchar* const str); +gboolean jid_is_valid_user_jid(const gchar* const str); Jid* jid_create_from_bare_and_resource(const gchar* const barejid, const gchar* const resource); void jid_destroy(Jid* jid); void jid_ref(Jid* jid); diff --git a/tests/unittests/unittests.c b/tests/unittests/unittests.c index 2f1cce20..e2372745 100644 --- a/tests/unittests/unittests.c +++ b/tests/unittests/unittests.c @@ -154,6 +154,9 @@ main(int argc, char* argv[]) cmocka_unit_test(jid_create__returns__null_from_empty_parts), cmocka_unit_test(jid_create__returns__null_from_multiple_at_in_bare), cmocka_unit_test(jid_create__returns__correct_parts_with_at_in_resource_only), + cmocka_unit_test(jid_is_valid_user_jid__is__true_for_valid_user_jid), + cmocka_unit_test(jid_is_valid_user_jid__is__false_for_domain_jid), + cmocka_unit_test(jid_is_valid_user_jid__is__false_for_invalid_jid), cmocka_unit_test(jid_is_valid__is__true_for_valid_jid), cmocka_unit_test(jid_is_valid__is__false_for_invalid_jid), cmocka_unit_test(jid_is_valid__is__false_for_null), diff --git a/tests/unittests/xmpp/test_jid.c b/tests/unittests/xmpp/test_jid.c index 99bbd231..421a9321 100644 --- a/tests/unittests/xmpp/test_jid.c +++ b/tests/unittests/xmpp/test_jid.c @@ -306,6 +306,29 @@ jid_create__returns__correct_parts_with_at_in_resource_only(void** state) jid_destroy(result); } +void +jid_is_valid_user_jid__is__true_for_valid_user_jid(void** state) +{ + assert_true(jid_is_valid_user_jid("myuser@mydomain/laptop")); + assert_true(jid_is_valid_user_jid("myuser@mydomain")); +} + +void +jid_is_valid_user_jid__is__false_for_domain_jid(void** state) +{ + assert_false(jid_is_valid_user_jid("mydomain/laptop")); + assert_false(jid_is_valid_user_jid("mydomain")); +} + +void +jid_is_valid_user_jid__is__false_for_invalid_jid(void** state) +{ + assert_false(jid_is_valid_user_jid("@mydomain")); + assert_false(jid_is_valid_user_jid("/laptop")); + assert_false(jid_is_valid_user_jid(NULL)); + assert_false(jid_is_valid_user_jid("")); +} + void jid_is_valid__is__true_for_valid_jid(void** state) { diff --git a/tests/unittests/xmpp/test_jid.h b/tests/unittests/xmpp/test_jid.h index 92828758..8f582413 100644 --- a/tests/unittests/xmpp/test_jid.h +++ b/tests/unittests/xmpp/test_jid.h @@ -30,6 +30,9 @@ void jid_create__returns__null_from_invalid_localpart_chars(void** state); void jid_create__returns__null_from_empty_parts(void** state); void jid_create__returns__null_from_multiple_at_in_bare(void** state); void jid_create__returns__correct_parts_with_at_in_resource_only(void** state); +void jid_is_valid_user_jid__is__true_for_valid_user_jid(void** state); +void jid_is_valid_user_jid__is__false_for_domain_jid(void** state); +void jid_is_valid_user_jid__is__false_for_invalid_jid(void** state); void jid_is_valid__is__true_for_valid_jid(void** state); void jid_is_valid__is__false_for_invalid_jid(void** state); void jid_is_valid__is__false_for_null(void** state);