4 #include "conversation.h"
5 #include "glibcompat.h"
8 #include "protocols/jabber/jutil.h"
11 test_jabber_util_get_resource_exists(void) {
12 PurpleTestStringData data
[] = {
13 { "foo@bar/baz", "baz" },
15 { "foo@bar/baz/bat", "baz/bat" },
16 { "bar/baz/bat", "baz/bat" },
20 purple_test_string_compare_free(jabber_get_resource
, data
);
24 test_jabber_util_get_resource_none(void) {
25 PurpleTestStringData data
[] = {
31 purple_test_string_compare_free(jabber_get_resource
, data
);
35 test_jabber_util_get_bare_jid(void) {
36 PurpleTestStringData data
[] = {
37 { "foo@bar", "foo@bar" },
38 { "foo@bar/baz", "foo@bar" },
44 purple_test_string_compare_free(jabber_get_bare_jid
, data
);
48 test_jabber_util_nodeprep_validate(void) {
49 const gchar
*data
[] = {
60 for(i
= 0; data
[i
]; i
++) {
61 g_assert_true(jabber_nodeprep_validate(data
[i
]));
64 longnode
= g_strnfill(1023, 'a');
65 g_assert_true(jabber_nodeprep_validate(longnode
));
68 longnode
= g_strnfill(1024, 'a');
69 g_assert_false(jabber_nodeprep_validate(longnode
));
74 test_jabber_util_nodeprep_validate_illegal_chars(void) {
75 const gchar
*data
[] = {
88 for(i
= 0; data
[i
]; i
++)
89 g_assert_false(jabber_nodeprep_validate(data
[i
]));
93 test_jabber_util_nodeprep_validate_too_long(void) {
94 gchar
*longnode
= g_strnfill(1024, 'a');
96 g_assert_false(jabber_nodeprep_validate(longnode
));
102 test_jabber_util_jabber_id_new_valid(void) {
103 const gchar
*jids
[] = {
108 "gmail.com/Test@alkjaweflkj",
110 "noone@example.com/Test12345",
111 "noone@example.com/Test@12345",
112 "noone@example.com/Te/st@12@//345",
113 "わいど@conference.jabber.org",
114 "まりるーむ@conference.jabber.org",
115 "noone@example.com/まりるーむ",
116 "noone@example/stuff.org",
117 "noone@nödåtXäYZ.example",
118 "noone@nödåtXäYZ.example/まりるーむ",
121 "noone@310.0.42.230/s",
122 "noone@[::1]", /* IPv6 */
123 "noone@[3001:470:1f05:d58::2]",
124 "noone@[3001:470:1f05:d58::2]/foo",
125 "no=one@310.0.42.230",
126 "no,one@310.0.42.230",
131 for(i
= 0; jids
[i
]; i
++) {
132 JabberID
*jid
= jabber_id_new(jids
[i
]);
134 g_assert_nonnull(jid
);
141 test_jabber_util_jabber_id_new_invalid(void) {
142 const gchar
*jids
[] = {
145 "noone@@example.com/Test12345",
146 "no@one@example.com/Test12345",
147 "@example.com/Test@12345",
151 "noone@gmail_stuff.org",
152 "noone@gmail[stuff.org",
153 "noone@gmail\\stuff.org",
155 "noone@2[::1]124/as",
156 "noone@まつ.おおかみ/\x01",
158 * RFC 3454 Section 6 reads, in part,
159 * "If a string contains any RandALCat character, the
160 * string MUST NOT contain any LCat character."
161 * The character is U+066D (ARABIC FIVE POINTED STAR).
163 "foo@example.com/٭simplexe٭",
168 for(i
= 0; jids
[i
]; i
++)
169 g_assert_null(jabber_id_new(jids
[i
]));
172 #define assert_jid_parts(expect_node, expect_domain, str) G_STMT_START { \
173 JabberID *jid = jabber_id_new(str); \
174 g_assert_nonnull(jid); \
175 g_assert_nonnull(jid->node); \
176 g_assert_nonnull(jid->domain); \
177 g_assert_null(jid->resource); \
178 g_assert_cmpstr(expect_node, ==, jid->node); \
179 g_assert_cmpstr(expect_domain, ==, jid->domain); \
180 jabber_id_free(jid); \
185 test_jabber_util_jid_parts(void) {
186 /* Ensure that jabber_id_new is properly lowercasing node and domains */
187 assert_jid_parts("noone", "example.com", "NoOne@example.com");
188 assert_jid_parts("noone", "example.com", "noone@ExaMPle.CoM");
190 /* These case-mapping tests culled from examining RFC3454 B.2 */
192 /* Cyrillic capital EF (U+0424) maps to lowercase EF (U+0444) */
193 assert_jid_parts("ф", "example.com", "Ф@example.com");
197 * These character (U+A664 and U+A665) are not mapped to anything in
198 * RFC3454 B.2. This first test *fails* when not using IDN because glib's
199 * case-folding/utf8_strdown improperly (for XMPP) lowercases the character.
201 * This is known, but not (very?) likely to actually cause a problem, so
202 * this test is commented out when using glib's functions.
204 assert_jid_parts("Ꙥ", "example.com", "Ꙥ@example.com");
205 assert_jid_parts("ꙥ", "example.com", "ꙥ@example.com");
208 /* U+04E9 to U+04E9 */
209 assert_jid_parts("noone", "өexample.com", "noone@Өexample.com");
213 partial_jabber_normalize(const gchar
*str
) {
214 return jabber_normalize(NULL
, str
);
218 test_jabber_util_jabber_normalize(void) {
219 PurpleTestStringData data
[] = {
224 "NoOnE@ExampLE.cOM/",
227 "NoONe@exAMPle.CoM/resource",
235 purple_test_string_compare(partial_jabber_normalize
, data
);
239 main(gint argc
, gchar
**argv
) {
240 g_test_init(&argc
, &argv
, NULL
);
242 g_test_add_func("/jabber/util/get_resource/exists",
243 test_jabber_util_get_resource_exists
);
244 g_test_add_func("/jabber/util/get_resource/none",
245 test_jabber_util_get_resource_none
);
247 g_test_add_func("/jabber/util/get_bare_jid",
248 test_jabber_util_get_bare_jid
);
250 g_test_add_func("/jabber/util/nodeprep/validate/valid",
251 test_jabber_util_nodeprep_validate
);
252 g_test_add_func("/jabber/util/nodeprep/validate/illegal_chars",
253 test_jabber_util_nodeprep_validate_illegal_chars
);
254 g_test_add_func("/jabber/util/nodeprep/validate/too_long",
255 test_jabber_util_nodeprep_validate_too_long
);
257 g_test_add_func("/jabber/util/id_new/valid",
258 test_jabber_util_jabber_id_new_valid
);
259 g_test_add_func("/jabber/util/id_new/invalid",
260 test_jabber_util_jabber_id_new_invalid
);
261 g_test_add_func("/jabber/util/id_new/jid_parts",
262 test_jabber_util_jid_parts
);
264 g_test_add_func("/jabber/util/normalize",
265 test_jabber_util_jabber_normalize
);