tests/test-parser.c
author Mikael Hallendal <micke@imendio.com>
Sun, 10 Jun 2007 18:14:31 +0200
changeset 268 7eb1cedb3241
parent 171 118ca6c4520e
child 397 5e2ad0e0704a
permissions -rw-r--r--
Run application handlers on stream error. Patch from Owen Taylor that fixes LM-104 where application handlers weren't run on stream error. It also fixes a problem where a variable is incorrectly overwritten.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
170
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
     1
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
     2
/*
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
     3
 * Copyright (C) 2006 Imendio AB
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
     4
 *
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
     6
 * modify it under the terms of the GNU Lesser General Public License as
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
     7
 * published by the Free Software Foundation; either version 2 of the
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
     8
 * License, or (at your option) any later version.
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
     9
 *
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    13
 * Lesser General Public License for more details.
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    14
 *
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    15
 * You should have received a copy of the GNU Lesser General Public
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    16
 * License along with this program; if not, write to the
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    17
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    18
 * Boston, MA 02111-1307, USA.
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    19
 */
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    20
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    21
#include <stdlib.h>
171
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    22
#include <check.h> 
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    23
#include <glib.h>
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    24
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    25
#include "loudmouth/lm-parser.h"
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    26
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    27
static GSList *
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    28
get_files (const gchar *prefix) 
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    29
{
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    30
	GSList      *list = NULL;
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    31
	GError      *error = NULL;
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    32
	GDir        *dir;
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    33
	const gchar *name;
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    34
	
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    35
	dir = g_dir_open (PARSER_TEST_DIR, 0, &error);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    36
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    37
	if (!dir) {
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    38
		g_error ("Failed to open test file directory '%s' due to: %s",
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    39
			 PARSER_TEST_DIR, error->message);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    40
		g_clear_error (&error);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    41
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    42
		return NULL;
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    43
	}
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    44
	
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    45
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    46
	while ((name = g_dir_read_name (dir))) {
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    47
		/* Find *.xml */
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    48
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    49
		if (g_str_has_prefix (name, prefix) &&
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    50
		    g_str_has_suffix (name, ".xml")) {
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    51
			gchar *file_path;
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    52
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    53
			file_path = g_strconcat (PARSER_TEST_DIR, "/", name, 
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    54
						 NULL);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    55
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    56
			list = g_slist_prepend (list, file_path);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    57
		}
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    58
	}
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    59
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    60
	g_dir_close (dir);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    61
	g_clear_error (&error);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    62
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    63
	return list;
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    64
}
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    65
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    66
static void
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    67
test_parser_with_file (const gchar *file_path, gboolean is_valid)
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    68
{
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    69
	LmParser *parser;
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    70
	gchar    *file_contents;
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    71
	GError   *error = NULL;
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    72
	gsize     length;
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    73
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    74
	parser = lm_parser_new (NULL, NULL, NULL);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    75
	if (!g_file_get_contents (file_path,
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    76
				  &file_contents, &length, 
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    77
				  &error)) {
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    78
		g_error ("Couldn't read file '%s': %s",
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    79
			 file_path, error->message);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    80
		g_clear_error (&error);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    81
		return;
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    82
	}
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    83
	    
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    84
	lm_parser_parse (parser, file_contents);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    85
	lm_parser_free (parser);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    86
	g_free (file_contents);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    87
}
170
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    88
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    89
static Suite *
171
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    90
create_lm_parser_valid_suite ()
170
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    91
{
171
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    92
	Suite  *suite;
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    93
	GSList *list, *l;
170
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    94
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    95
	suite = suite_create ("LmParser");
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
    96
171
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    97
	list = get_files ("valid");
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    98
	for (l = list; l; l = l->next) {
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
    99
		g_print ("VALID: %s\n", (const gchar *) l->data);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   100
		test_parser_with_file ((const gchar *) l->data, TRUE);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   101
		g_free (l->data);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   102
	}
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   103
	g_slist_free (list);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   104
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   105
	return suite;
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   106
}
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   107
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   108
static Suite *
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   109
create_lm_parser_invalid_suite ()
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   110
{
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   111
	Suite  *suite;
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   112
	GSList *list, *l;
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   113
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   114
	suite = suite_create ("LmParser");
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   115
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   116
	list = get_files ("invalid");
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   117
	for (l = list; l; l = l->next) {
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   118
		g_print ("INVALID: %s\n", (const gchar *) l->data);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   119
		g_free (l->data);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   120
	}
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   121
	g_slist_free (list);
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   122
170
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
   123
	return suite;
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
   124
}
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
   125
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
   126
int 
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
   127
main (int argc, char **argv)
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
   128
{
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
   129
	SRunner *srunner;
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
   130
	int      nf;
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
   131
171
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   132
	srunner = srunner_create (create_lm_parser_valid_suite ());
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   133
118ca6c4520e 2006-09-10 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents: 170
diff changeset
   134
	srunner_add_suite (srunner, create_lm_parser_invalid_suite ());
170
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
   135
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
   136
	srunner_run_all (srunner, CK_NORMAL);
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
   137
	nf = srunner_ntests_failed (srunner);
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
   138
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
   139
	return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
   140
}
bba590bac876 2006-09-08 Mikael Hallendal <micke@imendio.com>
hallski <hallski>
parents:
diff changeset
   141