Index: tests/Makefile
===================================================================
--- tests/Makefile	(revision 2799ff94059f496b59420d04ec4f41f67aab2b9d)
+++ tests/Makefile	(revision ca605509d0b49e6012d10ae5d1553ced007e6ce7)
@@ -11,7 +11,7 @@
 distclean: clean
 
-main_objs = account.o bitlbee.o conf.o crypting.o help.o ipc.o irc.o irc_commands.o log.o nick.o query.o root_commands.o set.o storage.o storage_xml.o storage_text.o user.o 
+main_objs = account.o bitlbee.o conf.o crypting.o help.o ipc.o irc.o irc_commands.o log.o nick.o query.o root_commands.o set.o storage.o storage_xml.o storage_text.o user.o
 
-test_objs = check.o check_util.o check_nick.o check_md5.o check_arc.o check_irc.o check_help.o check_user.o check_crypting.o check_set.o
+test_objs = check.o check_util.o check_nick.o check_md5.o check_arc.o check_irc.o check_help.o check_user.o check_crypting.o check_set.o check_jabber_sasl.o
 
 check: $(test_objs) $(addprefix ../, $(main_objs)) ../protocols/protocols.o ../lib/lib.o
Index: tests/check.c
===================================================================
--- tests/check.c	(revision 2799ff94059f496b59420d04ec4f41f67aab2b9d)
+++ tests/check.c	(revision ca605509d0b49e6012d10ae5d1553ced007e6ce7)
@@ -66,4 +66,7 @@
 Suite *set_suite(void);
 
+/* From check_jabber_sasl.c */
+Suite *jabber_sasl_suite(void);
+
 int main (int argc, char **argv)
 {
@@ -111,4 +114,5 @@
 	srunner_add_suite(sr, crypting_suite());
 	srunner_add_suite(sr, set_suite());
+	srunner_add_suite(sr, jabber_sasl_suite());
 	if (no_fork)
 		srunner_set_fork_status(sr, CK_NOFORK);
Index: tests/check_jabber_sasl.c
===================================================================
--- tests/check_jabber_sasl.c	(revision ca605509d0b49e6012d10ae5d1553ced007e6ce7)
+++ tests/check_jabber_sasl.c	(revision ca605509d0b49e6012d10ae5d1553ced007e6ce7)
@@ -0,0 +1,117 @@
+#include <stdlib.h>
+#include <glib.h>
+#include <gmodule.h>
+#include <check.h>
+#include <string.h>
+#include <stdio.h>
+#include "arc.h"
+
+char *sasl_get_part( char *data, char *field );
+
+#define challenge1 "nonce=\"1669585310\",qop=\"auth\",charset=utf-8,algorithm=md5-sess," \
+                   "something=\"Not \\\"standardized\\\"\""
+#define challenge2 "realm=\"quadpoint.org\", nonce=\"NPotlQpQf9RNYodOwierkQ==\", " \
+                   "qop=\"auth, auth-int\", charset=utf-8, algorithm=md5-sess"
+#define challenge3 ", realm=\"localhost\", nonce=\"LlBV2txnO8RbB5hgs3KgiQ==\", " \
+                   "qop=\"auth, auth-int, \", ,\n, charset=utf-8, algorithm=md5-sess,"
+
+struct
+{
+	const char *challenge;
+	char *key;
+	char *value;
+} get_part_tests[] = {
+	{
+		challenge1,
+		"nonce",
+		"1669585310"
+	},
+	{
+		challenge1,
+		"charset",
+		"utf-8"
+	},
+	{
+		challenge1,
+		"harset",
+		NULL
+	},
+	{
+		challenge1,
+		"something",
+		"Not \"standardized\""
+	},
+	{
+		challenge1,
+		"something_else",
+		NULL
+	},
+	{
+		challenge2,
+		"realm",
+		"quadpoint.org",
+	},
+	{
+		challenge2,
+		"real",
+		NULL
+	},
+	{
+		challenge2,
+		"qop",
+		"auth, auth-int"
+	},
+	{
+		challenge3,
+		"realm",
+		"localhost"
+	},
+	{
+		challenge3,
+		"qop",
+		"auth, auth-int, "
+	},
+	{
+		challenge3,
+		"charset",
+		"utf-8"
+	},
+	{ NULL, NULL, NULL }
+};
+
+static void check_get_part(int l)
+{
+	int i;
+	
+	for( i = 0; get_part_tests[i].key; i++ )
+	{
+  		tcase_fn_start( get_part_tests[i].key, __FILE__, i );
+		char *res;
+		int len;
+		
+		res = sasl_get_part( get_part_tests[i].challenge,
+		                     get_part_tests[i].key );
+		
+		if( get_part_tests[i].value == NULL )
+			fail_if( res != NULL, "Found key %s in %s while it shouldn't be there!",
+			         get_part_tests[i].key, get_part_tests[i].challenge );
+		else if( res )
+			fail_unless( strcmp( res, get_part_tests[i].value ) == 0,
+			             "Incorrect value for key %s in %s: %s",
+			             get_part_tests[i].key, get_part_tests[i].challenge, res );
+		else
+			fail( "Could not find key %s in %s",
+			      get_part_tests[i].key, get_part_tests[i].challenge );
+		
+		g_free( res );
+	}
+}
+
+Suite *jabber_sasl_suite (void)
+{
+	Suite *s = suite_create("jabber/sasl");
+	TCase *tc_core = tcase_create("Core");
+	suite_add_tcase (s, tc_core);
+	tcase_add_test (tc_core, check_get_part);
+	return s;
+}
