17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
18 * Boston, MA 02111-1307, USA. |
18 * Boston, MA 02111-1307, USA. |
19 */ |
19 */ |
20 |
20 |
21 #include <stdlib.h> |
21 #include <stdlib.h> |
22 #include <check.h> |
22 #include <check.h> |
|
23 #include <glib.h> |
|
24 |
|
25 #include "loudmouth/lm-parser.h" |
|
26 |
|
27 static GSList * |
|
28 get_files (const gchar *prefix) |
|
29 { |
|
30 GSList *list = NULL; |
|
31 GError *error = NULL; |
|
32 GDir *dir; |
|
33 const gchar *name; |
|
34 |
|
35 dir = g_dir_open (PARSER_TEST_DIR, 0, &error); |
|
36 |
|
37 if (!dir) { |
|
38 g_error ("Failed to open test file directory '%s' due to: %s", |
|
39 PARSER_TEST_DIR, error->message); |
|
40 g_clear_error (&error); |
|
41 |
|
42 return NULL; |
|
43 } |
|
44 |
|
45 |
|
46 while ((name = g_dir_read_name (dir))) { |
|
47 /* Find *.xml */ |
|
48 |
|
49 if (g_str_has_prefix (name, prefix) && |
|
50 g_str_has_suffix (name, ".xml")) { |
|
51 gchar *file_path; |
|
52 |
|
53 file_path = g_strconcat (PARSER_TEST_DIR, "/", name, |
|
54 NULL); |
|
55 |
|
56 list = g_slist_prepend (list, file_path); |
|
57 } |
|
58 } |
|
59 |
|
60 g_dir_close (dir); |
|
61 g_clear_error (&error); |
|
62 |
|
63 return list; |
|
64 } |
|
65 |
|
66 static void |
|
67 test_parser_with_file (const gchar *file_path, gboolean is_valid) |
|
68 { |
|
69 LmParser *parser; |
|
70 gchar *file_contents; |
|
71 GError *error = NULL; |
|
72 gsize length; |
|
73 |
|
74 parser = lm_parser_new (NULL, NULL, NULL); |
|
75 if (!g_file_get_contents (file_path, |
|
76 &file_contents, &length, |
|
77 &error)) { |
|
78 g_error ("Couldn't read file '%s': %s", |
|
79 file_path, error->message); |
|
80 g_clear_error (&error); |
|
81 return; |
|
82 } |
|
83 |
|
84 lm_parser_parse (parser, file_contents); |
|
85 lm_parser_free (parser); |
|
86 g_free (file_contents); |
|
87 } |
23 |
88 |
24 static Suite * |
89 static Suite * |
25 create_lm_parser_suite () |
90 create_lm_parser_valid_suite () |
26 { |
91 { |
27 Suite *suite; |
92 Suite *suite; |
|
93 GSList *list, *l; |
28 |
94 |
29 suite = suite_create ("LmParser"); |
95 suite = suite_create ("LmParser"); |
|
96 |
|
97 list = get_files ("valid"); |
|
98 for (l = list; l; l = l->next) { |
|
99 g_print ("VALID: %s\n", (const gchar *) l->data); |
|
100 test_parser_with_file ((const gchar *) l->data, TRUE); |
|
101 g_free (l->data); |
|
102 } |
|
103 g_slist_free (list); |
|
104 |
|
105 return suite; |
|
106 } |
|
107 |
|
108 static Suite * |
|
109 create_lm_parser_invalid_suite () |
|
110 { |
|
111 Suite *suite; |
|
112 GSList *list, *l; |
|
113 |
|
114 suite = suite_create ("LmParser"); |
|
115 |
|
116 list = get_files ("invalid"); |
|
117 for (l = list; l; l = l->next) { |
|
118 g_print ("INVALID: %s\n", (const gchar *) l->data); |
|
119 g_free (l->data); |
|
120 } |
|
121 g_slist_free (list); |
30 |
122 |
31 return suite; |
123 return suite; |
32 } |
124 } |
33 |
125 |
34 int |
126 int |
35 main (int argc, char **argv) |
127 main (int argc, char **argv) |
36 { |
128 { |
37 SRunner *srunner; |
129 SRunner *srunner; |
38 int nf; |
130 int nf; |
39 |
131 |
40 srunner = srunner_create (create_lm_parser_suite ()); |
132 srunner = srunner_create (create_lm_parser_valid_suite ()); |
|
133 |
|
134 srunner_add_suite (srunner, create_lm_parser_invalid_suite ()); |
41 |
135 |
42 srunner_run_all (srunner, CK_NORMAL); |
136 srunner_run_all (srunner, CK_NORMAL); |
43 nf = srunner_ntests_failed (srunner); |
137 nf = srunner_ntests_failed (srunner); |
44 |
138 |
45 return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE; |
139 return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE; |