tests/test-parser.c
changeset 171 118ca6c4520e
parent 170 bba590bac876
child 397 5e2ad0e0704a
--- a/tests/test-parser.c	Fri Sep 08 12:29:54 2006 +0000
+++ b/tests/test-parser.c	Sun Sep 10 12:24:09 2006 +0000
@@ -19,15 +19,107 @@
  */
 
 #include <stdlib.h>
-#include <check.h>
+#include <check.h> 
+#include <glib.h>
+
+#include "loudmouth/lm-parser.h"
+
+static GSList *
+get_files (const gchar *prefix) 
+{
+	GSList      *list = NULL;
+	GError      *error = NULL;
+	GDir        *dir;
+	const gchar *name;
+	
+	dir = g_dir_open (PARSER_TEST_DIR, 0, &error);
+
+	if (!dir) {
+		g_error ("Failed to open test file directory '%s' due to: %s",
+			 PARSER_TEST_DIR, error->message);
+		g_clear_error (&error);
+
+		return NULL;
+	}
+	
+
+	while ((name = g_dir_read_name (dir))) {
+		/* Find *.xml */
+
+		if (g_str_has_prefix (name, prefix) &&
+		    g_str_has_suffix (name, ".xml")) {
+			gchar *file_path;
+
+			file_path = g_strconcat (PARSER_TEST_DIR, "/", name, 
+						 NULL);
+
+			list = g_slist_prepend (list, file_path);
+		}
+	}
+
+	g_dir_close (dir);
+	g_clear_error (&error);
+
+	return list;
+}
+
+static void
+test_parser_with_file (const gchar *file_path, gboolean is_valid)
+{
+	LmParser *parser;
+	gchar    *file_contents;
+	GError   *error = NULL;
+	gsize     length;
+
+	parser = lm_parser_new (NULL, NULL, NULL);
+	if (!g_file_get_contents (file_path,
+				  &file_contents, &length, 
+				  &error)) {
+		g_error ("Couldn't read file '%s': %s",
+			 file_path, error->message);
+		g_clear_error (&error);
+		return;
+	}
+	    
+	lm_parser_parse (parser, file_contents);
+	lm_parser_free (parser);
+	g_free (file_contents);
+}
 
 static Suite *
-create_lm_parser_suite ()
+create_lm_parser_valid_suite ()
 {
-	Suite *suite;
+	Suite  *suite;
+	GSList *list, *l;
 
 	suite = suite_create ("LmParser");
 
+	list = get_files ("valid");
+	for (l = list; l; l = l->next) {
+		g_print ("VALID: %s\n", (const gchar *) l->data);
+		test_parser_with_file ((const gchar *) l->data, TRUE);
+		g_free (l->data);
+	}
+	g_slist_free (list);
+
+	return suite;
+}
+
+static Suite *
+create_lm_parser_invalid_suite ()
+{
+	Suite  *suite;
+	GSList *list, *l;
+
+	suite = suite_create ("LmParser");
+
+	list = get_files ("invalid");
+	for (l = list; l; l = l->next) {
+		g_print ("INVALID: %s\n", (const gchar *) l->data);
+		g_free (l->data);
+	}
+	g_slist_free (list);
+
 	return suite;
 }
 
@@ -37,7 +129,9 @@
 	SRunner *srunner;
 	int      nf;
 
-	srunner = srunner_create (create_lm_parser_suite ());
+	srunner = srunner_create (create_lm_parser_valid_suite ());
+
+	srunner_add_suite (srunner, create_lm_parser_invalid_suite ());
 
 	srunner_run_all (srunner, CK_NORMAL);
 	nf = srunner_ntests_failed (srunner);