75
#define assert_valid_jid(str) { \
76
JabberID *jid = jabber_id_new(str); \
77
fail_if(jid == NULL, "JID '%s' is valid but jabber_id_new() rejected it", str); \
78
jabber_id_free(jid); \
81
#define assert_invalid_jid(str) { \
82
JabberID *jid = jabber_id_new(str); \
83
fail_if(jid != NULL, "JID '%s' is invalid but jabber_id_new() allowed it", str); \
84
jabber_id_free(jid); \
87
#define assert_jid_parts(expect_node, expect_domain, str) { \
88
JabberID *jid = jabber_id_new(str); \
89
fail_if(jid == NULL, "JID '%s' is valid but jabber_id_new() rejected it", str); \
90
fail_if(jid->node == NULL, "JID '%s' is valid but jabber_id_new() didn't return a node", str); \
91
fail_if(jid->domain == NULL, "JID '%s' is valid but jabber_id_new() didn't return a domain", str); \
92
fail_if(jid->resource != NULL, "JID '%s' doesn't contain a resource", str); \
93
assert_string_equal(expect_node, jid->node); \
94
assert_string_equal(expect_domain, jid->domain); \
95
jabber_id_free(jid); \
98
START_TEST(test_jabber_id_new)
100
assert_valid_jid("gmail.com");
101
assert_valid_jid("gmail.com/Test");
102
assert_valid_jid("gmail.com/Test@");
103
assert_valid_jid("gmail.com/@");
104
assert_valid_jid("gmail.com/Test@alkjaweflkj");
105
assert_valid_jid("mark.doliner@gmail.com");
106
assert_valid_jid("mark.doliner@gmail.com/Test12345");
107
assert_valid_jid("mark.doliner@gmail.com/Test@12345");
108
assert_valid_jid("mark.doliner@gmail.com/Te/st@12@//345");
109
assert_valid_jid("わいど@conference.jabber.org");
110
assert_valid_jid("まりるーむ@conference.jabber.org");
111
assert_valid_jid("mark.doliner@gmail.com/まりるーむ");
112
assert_valid_jid("mark.doliner@gmail/stuff.org");
113
assert_valid_jid("stuart@nödåtXäYZ.se");
114
assert_valid_jid("stuart@nödåtXäYZ.se/まりるーむ");
115
assert_valid_jid("mark.doliner@わいど.org");
116
assert_valid_jid("nick@まつ.おおかみ.net");
117
assert_valid_jid("paul@10.0.42.230/s");
118
assert_valid_jid("paul@[::1]"); /* IPv6 */
119
assert_valid_jid("paul@[2001:470:1f05:d58::2]");
120
assert_valid_jid("paul@[2001:470:1f05:d58::2]/foo");
122
assert_invalid_jid("@gmail.com");
123
assert_invalid_jid("@@gmail.com");
124
assert_invalid_jid("mark.doliner@@gmail.com/Test12345");
125
assert_invalid_jid("mark@doliner@gmail.com/Test12345");
126
assert_invalid_jid("@gmail.com/Test@12345");
127
assert_invalid_jid("/Test@12345");
128
assert_invalid_jid("mark.doliner@");
129
assert_invalid_jid("mark.doliner/");
130
assert_invalid_jid("mark.doliner@gmail_stuff.org");
131
assert_invalid_jid("mark.doliner@gmail[stuff.org");
132
assert_invalid_jid("mark.doliner@gmail\\stuff.org");
133
assert_invalid_jid("paul@[::1]124");
134
assert_invalid_jid("paul@2[::1]124/as");
136
/* Ensure that jabber_id_new is properly lowercasing node and domains */
137
assert_jid_parts("paul", "darkrain42.org", "PaUL@darkrain42.org");
138
assert_jid_parts("paul", "darkrain42.org", "paul@DaRkRaIn42.org");
140
/* These case-mapping tests culled from examining RFC3454 B.2 */
142
/* Cyrillic capital EF (U+0424) maps to lowercase EF (U+0444) */
143
assert_jid_parts("ф", "darkrain42.org", "Ф@darkrain42.org");
145
* These character (U+A664 and U+A665) are not mapped to anything in
146
* RFC3454 B.2. This first test *fails* when not using IDN because glib's
147
* case-folding/utf8_strdown improperly lowercases the character.
149
assert_jid_parts("Ꙥ", "darkrain42.org", "Ꙥ@darkrain42.org");
150
assert_jid_parts("ꙥ", "darkrain42.org", "ꙥ@darkrain42.org");
151
/* U+04E9 to U+04E9 */
152
assert_jid_parts("paul", "өarkrain42.org", "paul@Өarkrain42.org");
156
START_TEST(test_jabber_normalize)
158
assert_string_equal("paul@darkrain42.org", jabber_normalize(NULL, "PaUL@DaRkRain42.org"));
159
assert_string_equal("paul@darkrain42.org", jabber_normalize(NULL, "PaUL@DaRkRain42.org/"));
160
assert_string_equal("paul@darkrain42.org", jabber_normalize(NULL, "PaUL@DaRkRain42.org/resource"));
72
165
jabber_jutil_suite(void)