Blame gcr/test-util.c

Packit b00eeb
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
Packit b00eeb
/*
Packit b00eeb
   Copyright (C) 2011 Collabora Ltd.
Packit b00eeb
Packit b00eeb
   The Gnome Keyring Library is free software; you can redistribute it and/or
Packit b00eeb
   modify it under the terms of the GNU Library General Public License as
Packit b00eeb
   published by the Free Software Foundation; either version 2 of the
Packit b00eeb
   License, or (at your option) any later version.
Packit b00eeb
Packit b00eeb
   The Gnome Keyring Library is distributed in the hope that it will be useful,
Packit b00eeb
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit b00eeb
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit b00eeb
   Library General Public License for more details.
Packit b00eeb
Packit b00eeb
   You should have received a copy of the GNU Library General Public
Packit b00eeb
   License along with the Gnome Library; see the file COPYING.LIB.  If not,
Packit b00eeb
   see <http://www.gnu.org/licenses/>.
Packit b00eeb
Packit b00eeb
   Author: Stef Walter <stefw@collabora.co.uk>
Packit b00eeb
*/
Packit b00eeb
Packit b00eeb
#include "config.h"
Packit b00eeb
Packit b00eeb
#include "gcr/gcr-base.h"
Packit b00eeb
#include "gcr/gcr-util.h"
Packit b00eeb
Packit b00eeb
#include <errno.h>
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
on_line_parsed_match_template (const gchar *line, gpointer user_data)
Packit b00eeb
{
Packit b00eeb
	const gchar ***matching = user_data;
Packit b00eeb
Packit b00eeb
	g_assert (matching);
Packit b00eeb
	g_assert (*matching);
Packit b00eeb
Packit b00eeb
	/* Must be another line to match */
Packit b00eeb
	g_assert ((*matching)[0]);
Packit b00eeb
Packit b00eeb
	/* Match this line against expected, and increment to next */
Packit b00eeb
	g_assert_cmpstr ((*matching)[0], ==, line);
Packit b00eeb
	(*matching)++;
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_lines (void)
Packit b00eeb
{
Packit b00eeb
	GString *string = g_string_new ("first line\nsecond line\n\nlast line");
Packit b00eeb
	const gchar *matches[] = { "first line", "second line", "", NULL };
Packit b00eeb
	const gchar **matching = matches;
Packit b00eeb
Packit b00eeb
	_gcr_util_parse_lines (string, FALSE, on_line_parsed_match_template, &matching);
Packit b00eeb
Packit b00eeb
	/* All lines should have matched */
Packit b00eeb
	g_assert (*matching == NULL);
Packit b00eeb
Packit b00eeb
	/* The last line should still be here */
Packit b00eeb
	g_assert_cmpstr (string->str, ==, "last line");
Packit b00eeb
	g_string_free (string, TRUE);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_lines_and_last (void)
Packit b00eeb
{
Packit b00eeb
	GString *string = g_string_new ("first line\nsecond line\n\nlast line");
Packit b00eeb
	const gchar *matches[] = { "first line", "second line", "", "last line", NULL };
Packit b00eeb
	const gchar **matching = matches;
Packit b00eeb
Packit b00eeb
	_gcr_util_parse_lines (string, FALSE, on_line_parsed_match_template, &matching);
Packit b00eeb
	_gcr_util_parse_lines (string, TRUE, on_line_parsed_match_template, &matching);
Packit b00eeb
Packit b00eeb
	/* All lines should have matched */
Packit b00eeb
	g_assert (*matching == NULL);
Packit b00eeb
Packit b00eeb
	/* No more data */
Packit b00eeb
	g_assert_cmpstr (string->str, ==, "");
Packit b00eeb
	g_assert_cmpuint (string->len, ==, 0);
Packit b00eeb
	g_string_free (string, TRUE);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_lines_dos (void)
Packit b00eeb
{
Packit b00eeb
	GString *string = g_string_new ("first line\r\nsecond line\r\n\r\nlast line");
Packit b00eeb
	const gchar *matches[] = { "first line", "second line", "", "last line", NULL };
Packit b00eeb
	const gchar **matching = matches;
Packit b00eeb
Packit b00eeb
	_gcr_util_parse_lines (string, FALSE, on_line_parsed_match_template, &matching);
Packit b00eeb
	_gcr_util_parse_lines (string, TRUE, on_line_parsed_match_template, &matching);
Packit b00eeb
Packit b00eeb
	/* All lines should have matched */
Packit b00eeb
	g_assert (*matching == NULL);
Packit b00eeb
Packit b00eeb
	/* No more data */
Packit b00eeb
	g_assert_cmpstr (string->str, ==, "");
Packit b00eeb
	g_assert_cmpuint (string->len, ==, 0);
Packit b00eeb
	g_string_free (string, TRUE);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
int
Packit b00eeb
main (int argc, char **argv)
Packit b00eeb
{
Packit b00eeb
	g_test_init (&argc, &argv, NULL);
Packit b00eeb
Packit b00eeb
	g_test_add_func ("/gcr/util/test_parse_lines", test_parse_lines);
Packit b00eeb
	g_test_add_func ("/gcr/util/test_parse_lines_and_last", test_parse_lines_and_last);
Packit b00eeb
	g_test_add_func ("/gcr/util/test_parse_lines_dos", test_parse_lines_dos);
Packit b00eeb
Packit b00eeb
	return g_test_run ();
Packit b00eeb
}