tests/check/: use the new macro
[platform/upstream/gstreamer.git] / tests / check / gst / gststructure.c
1 /* GStreamer
2  * Copyright (C) <2005> Thomas Vander Stichele <thomas at apestaart dot org>
3  *
4  * gststructure.c: Unit tests for GstStructure
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public
17  * License along with this library; if not, write to the
18  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19  * Boston, MA 02111-1307, USA.
20  */
21
22
23 #include <gst/check/gstcheck.h>
24
25
26 GST_START_TEST (test_from_string_int)
27 {
28   const char *strings[] = {
29     "video/x-raw-rgb, width = (int) 123456",
30     "video/x-raw-rgb, stride = (int) -123456",
31     "video/x-raw-rgb, red_mask = (int) 0xFFFF",
32     "video/x-raw-rgb, red_mask = (int) 0x0000FFFF",
33     "video/x-raw-rgb, red_mask = (int) 0x7FFFFFFF",
34     "video/x-raw-rgb, red_mask = (int) 0x80000000",
35     "video/x-raw-rgb, red_mask = (int) 0xFF000000",
36     /* result from
37      * gst-launch ... ! "video/x-raw-rgb, red_mask=(int)0xFF000000" ! ... */
38     "video/x-raw-rgb,\\ red_mask=(int)0xFF000000",
39   };
40   gint results[] = {
41     123456,
42     -123456,
43     0xFFFF,
44     0xFFFF,
45     0x7FFFFFFF,
46     0x80000000,
47     0xFF000000,
48     0xFF000000,
49   };
50   GstStructure *structure;
51   int i;
52
53   for (i = 0; i < G_N_ELEMENTS (strings); ++i) {
54     const char *s;
55     const gchar *name;
56     gint value;
57
58     s = strings[i];
59
60     structure = gst_structure_from_string (s, NULL);
61     fail_if (structure == NULL, "Could not get structure from string %s", s);
62     name = gst_structure_nth_field_name (structure, 0);
63     fail_unless (gst_structure_get_int (structure, name, &value));
64     fail_unless (value == results[i],
65         "Value %d is not the expected result %d for string %s",
66         value, results[i], s);
67
68     /* cleanup */
69     gst_structure_free (structure);
70   }
71 }
72
73 GST_END_TEST;
74
75 /* Test type conversions from string */
76 GST_START_TEST (test_from_string)
77 {
78   GstStructure *structure;
79   const gchar *s;
80   const GValue *val;
81
82   s = "test-string,value=1";
83   structure = gst_structure_from_string (s, NULL);
84   fail_if (structure == NULL, "Could not get structure from string %s", s);
85   fail_unless ((val = gst_structure_get_value (structure, "value")) != NULL);
86   fail_unless (G_VALUE_HOLDS_INT (val));
87   gst_structure_free (structure);
88
89   s = "test-string,value=1.0";
90   structure = gst_structure_from_string (s, NULL);
91   fail_if (structure == NULL, "Could not get structure from string %s", s);
92   fail_unless ((val = gst_structure_get_value (structure, "value")) != NULL);
93   fail_unless (G_VALUE_HOLDS_DOUBLE (val));
94   gst_structure_free (structure);
95
96   s = "test-string,value=1/1";
97   structure = gst_structure_from_string (s, NULL);
98   fail_if (structure == NULL, "Could not get structure from string %s", s);
99   fail_unless ((val = gst_structure_get_value (structure, "value")) != NULL);
100   fail_unless (GST_VALUE_HOLDS_FRACTION (val));
101   gst_structure_free (structure);
102
103   s = "test-string,value=bar";
104   structure = gst_structure_from_string (s, NULL);
105   fail_if (structure == NULL, "Could not get structure from string %s", s);
106   fail_unless ((val = gst_structure_get_value (structure, "value")) != NULL);
107   fail_unless (G_VALUE_HOLDS_STRING (val));
108   gst_structure_free (structure);
109 }
110
111 GST_END_TEST;
112
113 GST_START_TEST (test_complete_structure)
114 {
115   GstStructure *structure;
116   const gchar *s;
117
118   s = "GstEventSeek, rate=(double)1, format=(GstFormat)GST_FORMAT_TIME, flags=(GstSeekFlags)GST_SEEK_FLAGS_NONE, cur_type=(GstSeekType)GST_SEEK_TYPE_SET, cur=(gint64)1000000000, stop_type=(GstSeekType)GST_SEEK_TYPE_NONE, stop=(gint64)0";
119   structure = gst_structure_from_string (s, NULL);
120   fail_if (structure == NULL, "Could not get structure from string %s", s);
121   /* FIXME: TODO: add checks for correct serialization of members ? */
122   gst_structure_free (structure);
123 }
124
125 GST_END_TEST;
126
127 GST_START_TEST (test_structure_new)
128 {
129   GstStructure *s;
130   GError *e;
131   GQuark domain;
132
133   s = gst_structure_new ("name", "key", G_TYPE_STRING, "value", NULL);
134   fail_unless (strcmp (gst_structure_get_string (s, "key"), "value") == 0);
135   gst_structure_free (s);
136
137   domain = g_quark_from_string ("test");
138   e = g_error_new (domain, 0, "a test error");
139   s = gst_structure_new ("name", "key", GST_TYPE_G_ERROR, e, NULL);
140   g_error_free (e);
141   gst_structure_free (s);
142 }
143
144 GST_END_TEST;
145
146 Suite *
147 gst_structure_suite (void)
148 {
149   Suite *s = suite_create ("GstStructure");
150   TCase *tc_chain = tcase_create ("general");
151
152   suite_add_tcase (s, tc_chain);
153   tcase_add_test (tc_chain, test_from_string_int);
154   tcase_add_test (tc_chain, test_from_string);
155   tcase_add_test (tc_chain, test_complete_structure);
156   tcase_add_test (tc_chain, test_structure_new);
157   return s;
158 }
159
160 GST_CHECK_MAIN (gst_structure);