|
Packit |
712bc5 |
/*
|
|
Packit |
712bc5 |
* Copyright (C) 2012 Intel Corporation
|
|
Packit |
712bc5 |
*
|
|
Packit |
712bc5 |
* Author: Krzesimir Nowak <krnowak@openismus.com>
|
|
Packit |
712bc5 |
*
|
|
Packit |
712bc5 |
* This library is free software; you can redistribute it and/or
|
|
Packit |
712bc5 |
* modify it under the terms of the GNU Library General Public
|
|
Packit |
712bc5 |
* License as published by the Free Software Foundation; either
|
|
Packit |
712bc5 |
* version 2 of the License, or (at your option) any later version.
|
|
Packit |
712bc5 |
*
|
|
Packit |
712bc5 |
* This library is distributed in the hope that it will be useful,
|
|
Packit |
712bc5 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
712bc5 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
712bc5 |
* Library General Public License for more details.
|
|
Packit |
712bc5 |
*
|
|
Packit |
712bc5 |
* You should have received a copy of the GNU Library General Public
|
|
Packit |
712bc5 |
* License along with this library; if not, write to the
|
|
Packit |
712bc5 |
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Packit |
712bc5 |
* Boston, MA 02110-1301, USA.
|
|
Packit |
712bc5 |
*/
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
#include <libgupnp-av/gupnp-last-change-parser.h>
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
#define TEST_GENERAL \
|
|
Packit |
712bc5 |
" " \
|
|
Packit |
712bc5 |
"
|
|
Packit |
712bc5 |
"xmlns=\"urn:schemas-upnp-org:metadata-1-0/RCS/\" " \
|
|
Packit |
712bc5 |
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " \
|
|
Packit |
712bc5 |
"xsi:schemaLocation=\" " \
|
|
Packit |
712bc5 |
"urn:schemas-upnp-org:metadata-1-0/RCS/ " \
|
|
Packit |
712bc5 |
"http://www.upnp.org/schemas/av/rcs-event-v1-20060531.xsd\"> " \
|
|
Packit |
712bc5 |
"<InstanceID val=\"0\"> " \
|
|
Packit |
712bc5 |
"<Foo val=\"-13\"/> " \
|
|
Packit |
712bc5 |
"<Bar val=\"ajwaj\"/> " \
|
|
Packit |
712bc5 |
"</InstanceID> " \
|
|
Packit |
712bc5 |
"<InstanceID val=\"1\"> " \
|
|
Packit |
712bc5 |
"<Baz val=\"true\"/> " \
|
|
Packit |
712bc5 |
"<Qux val=\"42\"/> " \
|
|
Packit |
712bc5 |
"</InstanceID> " \
|
|
Packit |
712bc5 |
"</Event>"
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
#define BOGUS_TEXT "This is not an XML document!"
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
#define TEST_TWO_MUTES \
|
|
Packit |
712bc5 |
" " \
|
|
Packit |
712bc5 |
"
|
|
Packit |
712bc5 |
"xmlns=\"urn:schemas-upnp-org:metadata-1-0/RCS/\" " \
|
|
Packit |
712bc5 |
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " \
|
|
Packit |
712bc5 |
"xsi:schemaLocation=\" " \
|
|
Packit |
712bc5 |
"urn:schemas-upnp-org:metadata-1-0/RCS/ " \
|
|
Packit |
712bc5 |
"http://www.upnp.org/schemas/av/rcs-event-v1-20060531.xsd\"> " \
|
|
Packit |
712bc5 |
"<InstanceID val=\"0\"> " \
|
|
Packit |
712bc5 |
"<Mute channel=\"Master\" val=\"0\"/> " \
|
|
Packit |
712bc5 |
"<Mute channel=\"CF\" val=\"1\"/> " \
|
|
Packit |
712bc5 |
"</InstanceID> " \
|
|
Packit |
712bc5 |
"</Event>"
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
static void
|
|
Packit |
712bc5 |
general (void)
|
|
Packit |
712bc5 |
{
|
|
Packit |
712bc5 |
GUPnPLastChangeParser *parser = gupnp_last_change_parser_new ();
|
|
Packit |
712bc5 |
GError *error1 = NULL;
|
|
Packit |
712bc5 |
GError *error2 = NULL;
|
|
Packit |
712bc5 |
gboolean r1;
|
|
Packit |
712bc5 |
gboolean r2;
|
|
Packit |
712bc5 |
gint foo = -1;
|
|
Packit |
712bc5 |
gchar *bar = NULL;
|
|
Packit |
712bc5 |
gboolean baz = FALSE;
|
|
Packit |
712bc5 |
guint qux = G_MAXUINT;;
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
r1 = gupnp_last_change_parser_parse_last_change (parser,
|
|
Packit |
712bc5 |
0,
|
|
Packit |
712bc5 |
TEST_GENERAL,
|
|
Packit |
712bc5 |
&error1,
|
|
Packit |
712bc5 |
"Foo",
|
|
Packit |
712bc5 |
G_TYPE_INT,
|
|
Packit |
712bc5 |
&foo,
|
|
Packit |
712bc5 |
"Bar",
|
|
Packit |
712bc5 |
G_TYPE_STRING,
|
|
Packit |
712bc5 |
&bar,
|
|
Packit |
712bc5 |
NULL);
|
|
Packit |
712bc5 |
r2 = gupnp_last_change_parser_parse_last_change (parser,
|
|
Packit |
712bc5 |
1,
|
|
Packit |
712bc5 |
TEST_GENERAL,
|
|
Packit |
712bc5 |
&error2,
|
|
Packit |
712bc5 |
"Baz",
|
|
Packit |
712bc5 |
G_TYPE_BOOLEAN,
|
|
Packit |
712bc5 |
&baz,
|
|
Packit |
712bc5 |
"Qux",
|
|
Packit |
712bc5 |
G_TYPE_UINT,
|
|
Packit |
712bc5 |
&qux,
|
|
Packit |
712bc5 |
NULL);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
g_object_unref (parser);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
g_assert (r1 == TRUE);
|
|
Packit |
712bc5 |
g_assert_no_error (error1);
|
|
Packit |
712bc5 |
g_assert_cmpint (foo, ==, -13);
|
|
Packit |
712bc5 |
g_assert_cmpstr (bar, ==, "ajwaj");
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
g_free (bar);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
g_assert (r2 == TRUE);
|
|
Packit |
712bc5 |
g_assert_no_error (error2);
|
|
Packit |
712bc5 |
g_assert (baz == TRUE);
|
|
Packit |
712bc5 |
g_assert_cmpuint (qux, ==, 42);
|
|
Packit |
712bc5 |
}
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
static void
|
|
Packit |
712bc5 |
bogus_text (void)
|
|
Packit |
712bc5 |
{
|
|
Packit |
712bc5 |
GUPnPLastChangeParser *parser = gupnp_last_change_parser_new ();
|
|
Packit |
712bc5 |
GError *error = NULL;
|
|
Packit |
712bc5 |
gboolean r;
|
|
Packit |
712bc5 |
int whatever = -1;
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
r = gupnp_last_change_parser_parse_last_change (parser,
|
|
Packit |
712bc5 |
0,
|
|
Packit |
712bc5 |
BOGUS_TEXT,
|
|
Packit |
712bc5 |
&error,
|
|
Packit |
712bc5 |
"whatever",
|
|
Packit |
712bc5 |
G_TYPE_INT,
|
|
Packit |
712bc5 |
&whatever,
|
|
Packit |
712bc5 |
NULL);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
g_object_unref (parser);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
g_assert (r == FALSE);
|
|
Packit |
712bc5 |
g_assert_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_PARSE);
|
|
Packit |
712bc5 |
g_assert_cmpint (whatever, ==, -1);
|
|
Packit |
712bc5 |
}
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
static void
|
|
Packit |
712bc5 |
nonexistent_instance (void)
|
|
Packit |
712bc5 |
{
|
|
Packit |
712bc5 |
GUPnPLastChangeParser *parser = gupnp_last_change_parser_new ();
|
|
Packit |
712bc5 |
GError *error = NULL;
|
|
Packit |
712bc5 |
gboolean r;
|
|
Packit |
712bc5 |
gint foo = -1;
|
|
Packit |
712bc5 |
gchar *bar = NULL;
|
|
Packit |
712bc5 |
gboolean baz = FALSE;
|
|
Packit |
712bc5 |
guint qux = G_MAXUINT;;
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
r = gupnp_last_change_parser_parse_last_change (parser,
|
|
Packit |
712bc5 |
42,
|
|
Packit |
712bc5 |
TEST_GENERAL,
|
|
Packit |
712bc5 |
&error,
|
|
Packit |
712bc5 |
"Foo",
|
|
Packit |
712bc5 |
G_TYPE_INT,
|
|
Packit |
712bc5 |
&foo,
|
|
Packit |
712bc5 |
"Bar",
|
|
Packit |
712bc5 |
G_TYPE_STRING,
|
|
Packit |
712bc5 |
&bar,
|
|
Packit |
712bc5 |
"Baz",
|
|
Packit |
712bc5 |
G_TYPE_BOOLEAN,
|
|
Packit |
712bc5 |
&baz,
|
|
Packit |
712bc5 |
"Qux",
|
|
Packit |
712bc5 |
G_TYPE_UINT,
|
|
Packit |
712bc5 |
&qux,
|
|
Packit |
712bc5 |
NULL);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
g_object_unref (parser);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
g_assert (r == FALSE);
|
|
Packit |
712bc5 |
g_assert_no_error (error);
|
|
Packit |
712bc5 |
g_assert_cmpint (foo, ==, -1);
|
|
Packit |
712bc5 |
g_assert_cmpstr (bar, ==, NULL);
|
|
Packit |
712bc5 |
g_assert (baz == FALSE);
|
|
Packit |
712bc5 |
g_assert_cmpuint (qux, ==, G_MAXUINT);
|
|
Packit |
712bc5 |
}
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
/* FIXME: We really have no way to test whether some variable does not
|
|
Packit |
712bc5 |
exist. In the test below I set baz to FALSE and qux to G_MAXUINT
|
|
Packit |
712bc5 |
and check whether those variables have still the same values after
|
|
Packit |
712bc5 |
parsing. It may happen that those variable existed in LastChange
|
|
Packit |
712bc5 |
document and had exactly those values. */
|
|
Packit |
712bc5 |
static void
|
|
Packit |
712bc5 |
nonexistent_variable (void)
|
|
Packit |
712bc5 |
{
|
|
Packit |
712bc5 |
GUPnPLastChangeParser *parser = gupnp_last_change_parser_new ();
|
|
Packit |
712bc5 |
GError *error = NULL;
|
|
Packit |
712bc5 |
gboolean r;
|
|
Packit |
712bc5 |
gboolean baz = FALSE;
|
|
Packit |
712bc5 |
guint qux = G_MAXUINT;;
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
r = gupnp_last_change_parser_parse_last_change (parser,
|
|
Packit |
712bc5 |
0,
|
|
Packit |
712bc5 |
TEST_GENERAL,
|
|
Packit |
712bc5 |
&error,
|
|
Packit |
712bc5 |
"Baz",
|
|
Packit |
712bc5 |
G_TYPE_BOOLEAN,
|
|
Packit |
712bc5 |
&baz,
|
|
Packit |
712bc5 |
"Qux",
|
|
Packit |
712bc5 |
G_TYPE_UINT,
|
|
Packit |
712bc5 |
&qux,
|
|
Packit |
712bc5 |
NULL);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
g_object_unref (parser);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
g_assert (r == TRUE);
|
|
Packit |
712bc5 |
g_assert_no_error (error);
|
|
Packit |
712bc5 |
g_assert (baz == FALSE);
|
|
Packit |
712bc5 |
g_assert_cmpuint (qux, ==, G_MAXUINT);
|
|
Packit |
712bc5 |
}
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
/* FIXME: There is no possibility for fine-grained selection of
|
|
Packit |
712bc5 |
variables we want to extract. There can be two "Mute" variables on
|
|
Packit |
712bc5 |
different "channel"s, but currently the code can only take the
|
|
Packit |
712bc5 |
first "Mute" variable ignoring "channel" attribute. */
|
|
Packit |
712bc5 |
static void
|
|
Packit |
712bc5 |
two_mutes (void)
|
|
Packit |
712bc5 |
{
|
|
Packit |
712bc5 |
GUPnPLastChangeParser *parser = gupnp_last_change_parser_new ();
|
|
Packit |
712bc5 |
GError *error = NULL;
|
|
Packit |
712bc5 |
gint master_mute = -1;
|
|
Packit |
712bc5 |
gint cf_mute = -1;
|
|
Packit |
712bc5 |
gboolean r;
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
r = gupnp_last_change_parser_parse_last_change (parser,
|
|
Packit |
712bc5 |
0,
|
|
Packit |
712bc5 |
TEST_TWO_MUTES,
|
|
Packit |
712bc5 |
&error,
|
|
Packit |
712bc5 |
"Mute",
|
|
Packit |
712bc5 |
G_TYPE_INT,
|
|
Packit |
712bc5 |
&master_mute,
|
|
Packit |
712bc5 |
"Mute",
|
|
Packit |
712bc5 |
G_TYPE_INT,
|
|
Packit |
712bc5 |
&cf_mute,
|
|
Packit |
712bc5 |
NULL);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
g_object_unref (parser);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
g_assert (r == TRUE);
|
|
Packit |
712bc5 |
g_assert_no_error (error);
|
|
Packit |
712bc5 |
g_assert_cmpint (master_mute, ==, 0);
|
|
Packit |
712bc5 |
g_message ("Omitting the check of \"Mute\" for \"CF\" channel as this test "
|
|
Packit |
712bc5 |
"fails, because of design issues.");
|
|
Packit |
712bc5 |
//g_assert_cmpint (cf_mute, ==, 1);
|
|
Packit |
712bc5 |
}
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
int
|
|
Packit |
712bc5 |
main (int argc, char **argv)
|
|
Packit |
712bc5 |
{
|
|
Packit |
712bc5 |
#if !GLIB_CHECK_VERSION (2, 35, 0)
|
|
Packit |
712bc5 |
g_type_init ();
|
|
Packit |
712bc5 |
#endif
|
|
Packit |
712bc5 |
g_test_init (&argc, &argv, NULL);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
g_test_add_func ("/last-change-parser/general", general);
|
|
Packit |
712bc5 |
g_test_add_func ("/last-change-parser/bogus-text", bogus_text);
|
|
Packit |
712bc5 |
g_test_add_func ("/last-change-parser/nonexistent-instance", nonexistent_instance);
|
|
Packit |
712bc5 |
g_test_add_func ("/last-change-parser/nonexistent-variable", nonexistent_variable);
|
|
Packit |
712bc5 |
g_test_add_func ("/last-change-parser/two-mutes", two_mutes);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
g_test_run ();
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
return 0;
|
|
Packit |
712bc5 |
}
|