|
Packit |
971217 |
/* GStreamer
|
|
Packit |
971217 |
*
|
|
Packit |
971217 |
* unit tests for the navigation interface library
|
|
Packit |
971217 |
*
|
|
Packit |
971217 |
* Copyright (C) 2009 Jan Schmidt <thaytan@noraisin.net>
|
|
Packit |
971217 |
*
|
|
Packit |
971217 |
* This library is free software; you can redistribute it and/or
|
|
Packit |
971217 |
* modify it under the terms of the GNU Library General Public
|
|
Packit |
971217 |
* License as published by the Free Software Foundation; either
|
|
Packit |
971217 |
* version 2 of the License, or (at your option) any later version.
|
|
Packit |
971217 |
*
|
|
Packit |
971217 |
* This library is distributed in the hope that it will be useful,
|
|
Packit |
971217 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
971217 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
971217 |
* Library General Public License for more details.
|
|
Packit |
971217 |
*
|
|
Packit |
971217 |
* You should have received a copy of the GNU Library General Public
|
|
Packit |
971217 |
* License along with this library; if not, write to the
|
|
Packit |
971217 |
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
|
Packit |
971217 |
* Boston, MA 02110-1301, USA.
|
|
Packit |
971217 |
*/
|
|
Packit |
971217 |
|
|
Packit |
971217 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
971217 |
#include "config.h"
|
|
Packit |
971217 |
#endif
|
|
Packit |
971217 |
|
|
Packit |
971217 |
#include <gst/check/gstcheck.h>
|
|
Packit |
971217 |
|
|
Packit |
971217 |
#include <gst/video/navigation.h>
|
|
Packit |
971217 |
|
|
Packit |
971217 |
#include <string.h>
|
|
Packit |
971217 |
|
|
Packit |
971217 |
#define TEST_ELEMENT_TYPE (test_element_get_type())
|
|
Packit |
971217 |
|
|
Packit |
971217 |
typedef struct TestElement TestElement;
|
|
Packit |
971217 |
typedef struct TestElementClass TestElementClass;
|
|
Packit |
971217 |
|
|
Packit |
971217 |
struct TestElement
|
|
Packit |
971217 |
{
|
|
Packit |
971217 |
GstElement parent;
|
|
Packit |
971217 |
|
|
Packit |
971217 |
GstNavigationEventType sent_type;
|
|
Packit |
971217 |
const gchar *sent_key;
|
|
Packit |
971217 |
gdouble sent_x, sent_y;
|
|
Packit |
971217 |
gint sent_button;
|
|
Packit |
971217 |
GstNavigationCommand sent_command;
|
|
Packit |
971217 |
};
|
|
Packit |
971217 |
|
|
Packit |
971217 |
struct TestElementClass
|
|
Packit |
971217 |
{
|
|
Packit |
971217 |
GstElementClass parent_class;
|
|
Packit |
971217 |
};
|
|
Packit |
971217 |
|
|
Packit |
971217 |
GType test_element_get_type (void);
|
|
Packit |
971217 |
|
|
Packit |
971217 |
static void init_interface (GType type);
|
|
Packit |
971217 |
static void nav_send_event (GstNavigation * navigation,
|
|
Packit |
971217 |
GstStructure * structure);
|
|
Packit |
971217 |
|
|
Packit |
971217 |
G_DEFINE_TYPE_WITH_CODE (TestElement, test_element, GST_TYPE_ELEMENT,
|
|
Packit |
971217 |
init_interface (g_define_type_id));
|
|
Packit |
971217 |
|
|
Packit |
971217 |
static void
|
|
Packit |
971217 |
test_element_navigation_interface_init (GstNavigationInterface * iface)
|
|
Packit |
971217 |
{
|
|
Packit |
971217 |
iface->send_event = nav_send_event;
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
|
|
Packit |
971217 |
static void
|
|
Packit |
971217 |
init_interface (GType type)
|
|
Packit |
971217 |
{
|
|
Packit |
971217 |
static const GInterfaceInfo navigation_iface_info = {
|
|
Packit |
971217 |
(GInterfaceInitFunc) test_element_navigation_interface_init,
|
|
Packit |
971217 |
NULL,
|
|
Packit |
971217 |
NULL,
|
|
Packit |
971217 |
};
|
|
Packit |
971217 |
|
|
Packit |
971217 |
g_type_add_interface_static (type, GST_TYPE_NAVIGATION,
|
|
Packit |
971217 |
&navigation_iface_info);
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
|
|
Packit |
971217 |
static void
|
|
Packit |
971217 |
test_element_class_init (TestElementClass * klass)
|
|
Packit |
971217 |
{
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
|
|
Packit |
971217 |
static void
|
|
Packit |
971217 |
test_element_init (TestElement * this)
|
|
Packit |
971217 |
{
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
|
|
Packit |
971217 |
static void
|
|
Packit |
971217 |
nav_send_event (GstNavigation * navigation, GstStructure * structure)
|
|
Packit |
971217 |
{
|
|
Packit |
971217 |
GstEvent *event = gst_event_new_navigation (structure);
|
|
Packit |
971217 |
GstNavigationEventType etype = gst_navigation_event_get_type (event);
|
|
Packit |
971217 |
TestElement *self = (TestElement *) (navigation);
|
|
Packit |
971217 |
|
|
Packit |
971217 |
fail_if (etype == GST_NAVIGATION_EVENT_INVALID,
|
|
Packit |
971217 |
"Received navigation event could not be parsed");
|
|
Packit |
971217 |
fail_unless (etype == self->sent_type,
|
|
Packit |
971217 |
"Received navigation event did not match sent");
|
|
Packit |
971217 |
|
|
Packit |
971217 |
switch (etype) {
|
|
Packit |
971217 |
case GST_NAVIGATION_EVENT_KEY_PRESS:
|
|
Packit |
971217 |
case GST_NAVIGATION_EVENT_KEY_RELEASE:{
|
|
Packit |
971217 |
const gchar *key;
|
|
Packit |
971217 |
fail_unless (gst_navigation_event_parse_key_event (event, &key));
|
|
Packit |
971217 |
fail_unless (strcmp (key, self->sent_key) == 0);
|
|
Packit |
971217 |
break;
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
case GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS:
|
|
Packit |
971217 |
case GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE:{
|
|
Packit |
971217 |
gint button;
|
|
Packit |
971217 |
gdouble x, y;
|
|
Packit |
971217 |
fail_unless (gst_navigation_event_parse_mouse_button_event (event,
|
|
Packit |
971217 |
&button, &x, &y);;
|
|
Packit |
971217 |
fail_unless (button == self->sent_button);
|
|
Packit |
971217 |
fail_unless (x == self->sent_x);
|
|
Packit |
971217 |
fail_unless (y == self->sent_y);
|
|
Packit |
971217 |
break;
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
case GST_NAVIGATION_EVENT_MOUSE_MOVE:{
|
|
Packit |
971217 |
gdouble x, y;
|
|
Packit |
971217 |
fail_unless (gst_navigation_event_parse_mouse_move_event (event, &x, &y);;
|
|
Packit |
971217 |
fail_unless (x == self->sent_x);
|
|
Packit |
971217 |
fail_unless (y == self->sent_y);
|
|
Packit |
971217 |
break;
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
case GST_NAVIGATION_EVENT_COMMAND:{
|
|
Packit |
971217 |
GstNavigationCommand cmd;
|
|
Packit |
971217 |
fail_unless (gst_navigation_event_parse_command (event, &cmd));
|
|
Packit |
971217 |
fail_unless (cmd == self->sent_command);
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
default:
|
|
Packit |
971217 |
break;
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
|
|
Packit |
971217 |
gst_event_unref (event);
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
|
|
Packit |
971217 |
GST_START_TEST (test_events)
|
|
Packit |
971217 |
{
|
|
Packit |
971217 |
/* Create an empty GstElement that has a GstNavigation interface and then
|
|
Packit |
971217 |
* send some navigation events and validate them */
|
|
Packit |
971217 |
TestElement *test_element =
|
|
Packit |
971217 |
(TestElement *) g_object_new (TEST_ELEMENT_TYPE, NULL);
|
|
Packit |
971217 |
GstNavigationCommand cmds[] = {
|
|
Packit |
971217 |
GST_NAVIGATION_COMMAND_MENU1, GST_NAVIGATION_COMMAND_MENU2,
|
|
Packit |
971217 |
GST_NAVIGATION_COMMAND_MENU3, GST_NAVIGATION_COMMAND_MENU4,
|
|
Packit |
971217 |
GST_NAVIGATION_COMMAND_MENU5, GST_NAVIGATION_COMMAND_MENU6,
|
|
Packit |
971217 |
GST_NAVIGATION_COMMAND_MENU7, GST_NAVIGATION_COMMAND_LEFT,
|
|
Packit |
971217 |
GST_NAVIGATION_COMMAND_RIGHT, GST_NAVIGATION_COMMAND_UP,
|
|
Packit |
971217 |
GST_NAVIGATION_COMMAND_DOWN, GST_NAVIGATION_COMMAND_ACTIVATE,
|
|
Packit |
971217 |
GST_NAVIGATION_COMMAND_PREV_ANGLE, GST_NAVIGATION_COMMAND_NEXT_ANGLE
|
|
Packit |
971217 |
};
|
|
Packit |
971217 |
gint i;
|
|
Packit |
971217 |
|
|
Packit |
971217 |
test_element->sent_type = GST_NAVIGATION_EVENT_KEY_PRESS;
|
|
Packit |
971217 |
test_element->sent_key = "1";
|
|
Packit |
971217 |
gst_navigation_send_key_event (GST_NAVIGATION (test_element), "key-press",
|
|
Packit |
971217 |
"1");
|
|
Packit |
971217 |
|
|
Packit |
971217 |
test_element->sent_type = GST_NAVIGATION_EVENT_KEY_RELEASE;
|
|
Packit |
971217 |
test_element->sent_key = "2";
|
|
Packit |
971217 |
gst_navigation_send_key_event (GST_NAVIGATION (test_element), "key-release",
|
|
Packit |
971217 |
"2");
|
|
Packit |
971217 |
|
|
Packit |
971217 |
test_element->sent_type = GST_NAVIGATION_EVENT_MOUSE_MOVE;
|
|
Packit |
971217 |
test_element->sent_x = 50;
|
|
Packit |
971217 |
test_element->sent_y = 100;
|
|
Packit |
971217 |
gst_navigation_send_mouse_event (GST_NAVIGATION (test_element), "mouse-move",
|
|
Packit |
971217 |
0, 50, 100);
|
|
Packit |
971217 |
|
|
Packit |
971217 |
test_element->sent_type = GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS;
|
|
Packit |
971217 |
test_element->sent_x = 10;
|
|
Packit |
971217 |
test_element->sent_y = 20;
|
|
Packit |
971217 |
test_element->sent_button = 1;
|
|
Packit |
971217 |
gst_navigation_send_mouse_event (GST_NAVIGATION (test_element),
|
|
Packit |
971217 |
"mouse-button-press", 1, 10, 20);
|
|
Packit |
971217 |
|
|
Packit |
971217 |
for (i = 0; i < G_N_ELEMENTS (cmds); i++) {
|
|
Packit |
971217 |
test_element->sent_type = GST_NAVIGATION_EVENT_COMMAND;
|
|
Packit |
971217 |
test_element->sent_command = cmds[i];
|
|
Packit |
971217 |
gst_navigation_send_command (GST_NAVIGATION (test_element), cmds[i]);
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
|
|
Packit |
971217 |
gst_object_unref (test_element);
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
|
|
Packit |
971217 |
GST_END_TEST;
|
|
Packit |
971217 |
|
|
Packit |
971217 |
GST_START_TEST (test_messages)
|
|
Packit |
971217 |
{
|
|
Packit |
971217 |
GstMessage *m;
|
|
Packit |
971217 |
/* GST_NAVIGATION_MESSAGE_MOUSE_OVER */
|
|
Packit |
971217 |
{
|
|
Packit |
971217 |
gboolean active;
|
|
Packit |
971217 |
m = gst_navigation_message_new_mouse_over (NULL, TRUE);
|
|
Packit |
971217 |
fail_if (m == NULL);
|
|
Packit |
971217 |
fail_unless (gst_navigation_message_get_type (m) ==
|
|
Packit |
971217 |
GST_NAVIGATION_MESSAGE_MOUSE_OVER);
|
|
Packit |
971217 |
fail_unless (GST_MESSAGE_SRC (m) == NULL);
|
|
Packit |
971217 |
fail_unless (gst_navigation_message_parse_mouse_over (m, &active));
|
|
Packit |
971217 |
fail_unless (active == TRUE);
|
|
Packit |
971217 |
gst_message_unref (m);
|
|
Packit |
971217 |
|
|
Packit |
971217 |
m = gst_navigation_message_new_mouse_over (NULL, FALSE);
|
|
Packit |
971217 |
fail_if (m == NULL);
|
|
Packit |
971217 |
fail_unless (GST_MESSAGE_SRC (m) == NULL);
|
|
Packit |
971217 |
fail_unless (gst_navigation_message_get_type (m) ==
|
|
Packit |
971217 |
GST_NAVIGATION_MESSAGE_MOUSE_OVER);
|
|
Packit |
971217 |
fail_unless (gst_navigation_message_parse_mouse_over (m, &active));
|
|
Packit |
971217 |
fail_unless (active == FALSE);
|
|
Packit |
971217 |
gst_message_unref (m);
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
|
|
Packit |
971217 |
/* GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED */
|
|
Packit |
971217 |
{
|
|
Packit |
971217 |
m = gst_navigation_message_new_commands_changed (NULL);
|
|
Packit |
971217 |
fail_if (m == NULL);
|
|
Packit |
971217 |
fail_unless (GST_MESSAGE_SRC (m) == NULL);
|
|
Packit |
971217 |
fail_unless (gst_navigation_message_get_type (m) ==
|
|
Packit |
971217 |
GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED);
|
|
Packit |
971217 |
gst_message_unref (m);
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
|
|
Packit |
971217 |
/* GST_NAVIGATION_MESSAGE_ANGLES_CHANGED */
|
|
Packit |
971217 |
{
|
|
Packit |
971217 |
guint angle, angles;
|
|
Packit |
971217 |
m = gst_navigation_message_new_angles_changed (NULL, 1, 5);
|
|
Packit |
971217 |
fail_if (m == NULL);
|
|
Packit |
971217 |
fail_unless (GST_MESSAGE_SRC (m) == NULL);
|
|
Packit |
971217 |
fail_unless (gst_navigation_message_get_type (m) ==
|
|
Packit |
971217 |
GST_NAVIGATION_MESSAGE_ANGLES_CHANGED);
|
|
Packit |
971217 |
fail_unless (gst_navigation_message_parse_angles_changed (m, &angle,
|
|
Packit |
971217 |
&angles));
|
|
Packit |
971217 |
fail_unless (angle == 1);
|
|
Packit |
971217 |
fail_unless (angles == 5);
|
|
Packit |
971217 |
gst_message_unref (m);
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
|
|
Packit |
971217 |
GST_END_TEST;
|
|
Packit |
971217 |
|
|
Packit |
971217 |
GST_START_TEST (test_queries)
|
|
Packit |
971217 |
{
|
|
Packit |
971217 |
GstQuery *q;
|
|
Packit |
971217 |
|
|
Packit |
971217 |
/* GST_NAVIGATION_QUERY_COMMANDS */
|
|
Packit |
971217 |
{
|
|
Packit |
971217 |
guint n;
|
|
Packit |
971217 |
GstNavigationCommand cmd;
|
|
Packit |
971217 |
|
|
Packit |
971217 |
q = gst_navigation_query_new_commands ();
|
|
Packit |
971217 |
fail_unless (q != NULL);
|
|
Packit |
971217 |
fail_unless (gst_navigation_query_get_type (q) ==
|
|
Packit |
971217 |
GST_NAVIGATION_QUERY_COMMANDS);
|
|
Packit |
971217 |
gst_navigation_query_set_commands (q, 3, GST_NAVIGATION_COMMAND_LEFT,
|
|
Packit |
971217 |
GST_NAVIGATION_COMMAND_MENU1, GST_NAVIGATION_COMMAND_MENU5);
|
|
Packit |
971217 |
fail_unless (gst_navigation_query_parse_commands_length (q, &n);;
|
|
Packit |
971217 |
fail_unless (n == 3);
|
|
Packit |
971217 |
fail_unless (gst_navigation_query_parse_commands_nth (q, 1, &cmd));
|
|
Packit |
971217 |
fail_unless (cmd == GST_NAVIGATION_COMMAND_MENU1);
|
|
Packit |
971217 |
|
|
Packit |
971217 |
fail_unless (gst_navigation_query_parse_commands_length (q, NULL));
|
|
Packit |
971217 |
fail_unless (gst_navigation_query_parse_commands_nth (q, 2, NULL));
|
|
Packit |
971217 |
|
|
Packit |
971217 |
gst_query_unref (q);
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
|
|
Packit |
971217 |
/* GST_NAVIGATION_QUERY_ANGLES */
|
|
Packit |
971217 |
{
|
|
Packit |
971217 |
guint angle, angles;
|
|
Packit |
971217 |
q = gst_navigation_query_new_angles ();
|
|
Packit |
971217 |
fail_unless (q != NULL);
|
|
Packit |
971217 |
fail_unless (gst_navigation_query_get_type (q) ==
|
|
Packit |
971217 |
GST_NAVIGATION_QUERY_ANGLES);
|
|
Packit |
971217 |
gst_navigation_query_set_angles (q, 4, 8);
|
|
Packit |
971217 |
fail_unless (gst_navigation_query_parse_angles (q, &angle, &angles));
|
|
Packit |
971217 |
fail_unless (angle == 4);
|
|
Packit |
971217 |
fail_unless (angles == 8);
|
|
Packit |
971217 |
|
|
Packit |
971217 |
fail_unless (gst_navigation_query_parse_angles (q, NULL, &angles));
|
|
Packit |
971217 |
fail_unless (gst_navigation_query_parse_angles (q, &angle, NULL));
|
|
Packit |
971217 |
fail_unless (gst_navigation_query_parse_angles (q, NULL, NULL));
|
|
Packit |
971217 |
|
|
Packit |
971217 |
gst_query_unref (q);
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
|
|
Packit |
971217 |
GST_END_TEST;
|
|
Packit |
971217 |
|
|
Packit |
971217 |
static Suite *
|
|
Packit |
971217 |
navigation_suite (void)
|
|
Packit |
971217 |
{
|
|
Packit |
971217 |
Suite *s = suite_create ("navigation interface");
|
|
Packit |
971217 |
TCase *tc_chain = tcase_create ("notifications");
|
|
Packit |
971217 |
|
|
Packit |
971217 |
suite_add_tcase (s, tc_chain);
|
|
Packit |
971217 |
tcase_add_test (tc_chain, test_events);
|
|
Packit |
971217 |
tcase_add_test (tc_chain, test_messages);
|
|
Packit |
971217 |
tcase_add_test (tc_chain, test_queries);
|
|
Packit |
971217 |
|
|
Packit |
971217 |
return s;
|
|
Packit |
971217 |
}
|
|
Packit |
971217 |
|
|
Packit |
971217 |
GST_CHECK_MAIN (navigation);
|