summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzesimir Nowak <krnowak@openismus.com>2012-11-27 11:24:48 +0100
committerJens Georg <mail@jensge.org>2012-11-28 17:41:29 +0100
commitb6abeeccbc7f36c1f0da1741024d27351064538b (patch)
tree76ab4353768f6aecb04bb53c44645525ddec0020
parent8e87795b5d70e50049bd020dd1439c916ec784ce (diff)
downloadgupnp-av-b6abeeccbc7f36c1f0da1741024d27351064538b.tar.gz
Add a test for GUPnPLastChangeParser.
Fixes to some issues will follow, but the two-mutes test is going to fail anyways. https://bugzilla.gnome.org/show_bug.cgi?id=689141
-rw-r--r--tests/gtest/Makefile.am6
-rw-r--r--tests/gtest/test-last-change-parser.c258
2 files changed, 263 insertions, 1 deletions
diff --git a/tests/gtest/Makefile.am b/tests/gtest/Makefile.am
index 2525023..2b1b3b1 100644
--- a/tests/gtest/Makefile.am
+++ b/tests/gtest/Makefile.am
@@ -5,13 +5,17 @@ TESTS=$(check_PROGRAMS)
check_PROGRAMS = \
test-regression \
- test-media-collection
+ test-media-collection \
+ test-last-change-parser
test_regression_SOURCES = test-regression.c
test_media_collection_SOURCES = \
test-media-collection.c
+test_last_change_parser_SOURCES = \
+ test-last-change-parser.c
+
LDADD = \
$(top_builddir)/libgupnp-av/libgupnp-av-1.0.la \
$(LIBGUPNP_LIBS)
diff --git a/tests/gtest/test-last-change-parser.c b/tests/gtest/test-last-change-parser.c
new file mode 100644
index 0000000..58fb717
--- /dev/null
+++ b/tests/gtest/test-last-change-parser.c
@@ -0,0 +1,258 @@
+/*
+ * Copyright (C) 2012 Intel Corporation
+ *
+ * Author: Krzesimir Nowak <krnowak@openismus.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <libgupnp-av/gupnp-last-change-parser.h>
+
+#define TEST_GENERAL \
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?> " \
+"<Event " \
+"xmlns=\"urn:schemas-upnp-org:metadata-1-0/RCS/\" " \
+"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " \
+"xsi:schemaLocation=\" " \
+"urn:schemas-upnp-org:metadata-1-0/RCS/ " \
+"http://www.upnp.org/schemas/av/rcs-event-v1-20060531.xsd\"> " \
+"<InstanceID val=\"0\"> " \
+"<Foo val=\"-13\"/> " \
+"<Bar val=\"ajwaj\"/> " \
+"</InstanceID> " \
+"<InstanceID val=\"1\"> " \
+"<Baz val=\"true\"/> " \
+"<Qux val=\"42\"/> " \
+"</InstanceID> " \
+"</Event>"
+
+#define BOGUS_TEXT "This is not an XML document!"
+
+#define TEST_TWO_MUTES \
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?> " \
+"<Event " \
+"xmlns=\"urn:schemas-upnp-org:metadata-1-0/RCS/\" " \
+"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " \
+"xsi:schemaLocation=\" " \
+"urn:schemas-upnp-org:metadata-1-0/RCS/ " \
+"http://www.upnp.org/schemas/av/rcs-event-v1-20060531.xsd\"> " \
+"<InstanceID val=\"0\"> " \
+"<Mute channel=\"Master\" val=\"0\"/> " \
+"<Mute channel=\"CF\" val=\"1\"/> " \
+"</InstanceID> " \
+"</Event>"
+
+static void
+general (void)
+{
+ GUPnPLastChangeParser *parser = gupnp_last_change_parser_new ();
+ GError *error1 = NULL;
+ GError *error2 = NULL;
+ gboolean r1;
+ gboolean r2;
+ gint foo = -1;
+ gchar *bar = NULL;
+ gboolean baz = FALSE;
+ guint qux = G_MAXUINT;;
+
+ r1 = gupnp_last_change_parser_parse_last_change (parser,
+ 0,
+ TEST_GENERAL,
+ &error1,
+ "Foo",
+ G_TYPE_INT,
+ &foo,
+ "Bar",
+ G_TYPE_STRING,
+ &bar,
+ NULL);
+ r2 = gupnp_last_change_parser_parse_last_change (parser,
+ 1,
+ TEST_GENERAL,
+ &error2,
+ "Baz",
+ G_TYPE_BOOLEAN,
+ &baz,
+ "Qux",
+ G_TYPE_UINT,
+ &qux,
+ NULL);
+
+ g_object_unref (parser);
+
+ g_assert (r1 == TRUE);
+ g_assert_no_error (error1);
+ g_assert_cmpint (foo, ==, -13);
+ g_assert_cmpstr (bar, ==, "ajwaj");
+
+ g_free (bar);
+
+ g_assert (r2 == TRUE);
+ g_assert_no_error (error2);
+ g_assert (baz == TRUE);
+ g_assert_cmpuint (qux, ==, 42);
+}
+
+static void
+bogus_text (void)
+{
+ GUPnPLastChangeParser *parser = gupnp_last_change_parser_new ();
+ GError *error = NULL;
+ gboolean r;
+ int whatever = -1;
+
+ r = gupnp_last_change_parser_parse_last_change (parser,
+ 0,
+ BOGUS_TEXT,
+ &error,
+ "whatever",
+ G_TYPE_INT,
+ &whatever,
+ NULL);
+
+ g_object_unref (parser);
+
+ g_assert (r == FALSE);
+ g_assert_error (error, GUPNP_XML_ERROR, GUPNP_XML_ERROR_PARSE);
+ g_assert_cmpint (whatever, ==, -1);
+}
+
+static void
+nonexistent_instance (void)
+{
+ GUPnPLastChangeParser *parser = gupnp_last_change_parser_new ();
+ GError *error = NULL;
+ gboolean r;
+ gint foo = -1;
+ gchar *bar = NULL;
+ gboolean baz = FALSE;
+ guint qux = G_MAXUINT;;
+
+ r = gupnp_last_change_parser_parse_last_change (parser,
+ 42,
+ TEST_GENERAL,
+ &error,
+ "Foo",
+ G_TYPE_INT,
+ &foo,
+ "Bar",
+ G_TYPE_STRING,
+ &bar,
+ "Baz",
+ G_TYPE_BOOLEAN,
+ &baz,
+ "Qux",
+ G_TYPE_UINT,
+ &qux,
+ NULL);
+
+ g_object_unref (parser);
+
+ g_assert (r == FALSE);
+ g_assert_no_error (error);
+ g_assert_cmpint (foo, ==, -1);
+ g_assert_cmpstr (bar, ==, NULL);
+ g_assert (baz == FALSE);
+ g_assert_cmpuint (qux, ==, G_MAXUINT);
+}
+
+/* FIXME: We really have no way to test whether some variable does not
+ exist. In the test below I set baz to FALSE and qux to G_MAXUINT
+ and check whether those variables have still the same values after
+ parsing. It may happen that those variable existed in LastChange
+ document and had exactly those values. */
+static void
+nonexistent_variable (void)
+{
+ GUPnPLastChangeParser *parser = gupnp_last_change_parser_new ();
+ GError *error = NULL;
+ gboolean r;
+ gboolean baz = FALSE;
+ guint qux = G_MAXUINT;;
+
+ r = gupnp_last_change_parser_parse_last_change (parser,
+ 0,
+ TEST_GENERAL,
+ &error,
+ "Baz",
+ G_TYPE_BOOLEAN,
+ &baz,
+ "Qux",
+ G_TYPE_UINT,
+ &qux,
+ NULL);
+
+ g_object_unref (parser);
+
+ g_assert (r == TRUE);
+ g_assert_no_error (error);
+ g_assert (baz == FALSE);
+ g_assert_cmpuint (qux, ==, G_MAXUINT);
+}
+
+/* FIXME: There is no possibility for fine-grained selection of
+ variables we want to extract. There can be two "Mute" variables on
+ different "channel"s, but currently the code can only take the
+ first "Mute" variable ignoring "channel" attribute. */
+static void
+two_mutes (void)
+{
+ GUPnPLastChangeParser *parser = gupnp_last_change_parser_new ();
+ GError *error = NULL;
+ gint master_mute = -1;
+ gint cf_mute = -1;
+ gboolean r;
+
+ r = gupnp_last_change_parser_parse_last_change (parser,
+ 0,
+ TEST_TWO_MUTES,
+ &error,
+ "Mute",
+ G_TYPE_INT,
+ &master_mute,
+ "Mute",
+ G_TYPE_INT,
+ &cf_mute,
+ NULL);
+
+ g_object_unref (parser);
+
+ g_assert (r == TRUE);
+ g_assert_no_error (error);
+ g_assert_cmpint (master_mute, ==, 0);
+ g_message ("Omitting the check of \"Mute\" for \"CF\" channel as this test "
+ "fails, because of design issues.");
+ //g_assert_cmpint (cf_mute, ==, 1);
+}
+
+int
+main (int argc, char **argv)
+{
+#if !GLIB_CHECK_VERSION (2, 35, 0)
+ g_type_init ();
+#endif
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/last-change-parser/general", general);
+ g_test_add_func ("/last-change-parser/bogus-text", bogus_text);
+ g_test_add_func ("/last-change-parser/nonexistent-instance", nonexistent_instance);
+ g_test_add_func ("/last-change-parser/nonexistent-variable", nonexistent_variable);
+ g_test_add_func ("/last-change-parser/two-mutes", two_mutes);
+
+ g_test_run ();
+
+ return 0;
+}