c179ebc7d7b745ad387a8bf90ced0dd54dc39370
1 #include <gst/gst.h>
3 static gchar *_subject, *_category;
4 static gint _testnum = 0;
5 static gboolean _passed;
6 static gint _total_tests = 0,_passed_tests = 0;
7 static gint _random_size;
9 void tabpad(gchar *str,gint width) {
10 int i;
11 for (i=0;i<width-strlen(str);i++)
12 fprintf(stderr," ");
13 }
15 #define TEST_SUBJECT(subject) fprintf(stderr,"Subject: %s\n",subject),_subject = subject
16 #define TEST_CATEGORY(category) fprintf(stderr,"\n\nCategory: %s\n",category)
18 #define TEST(test) fprintf(stderr,"Test %d: %s...\n",_testnum,test),_passed = TRUE
19 #define ASSERT(expr) G_STMT_START{ \
20 fprintf(stderr,"\t%s:",#expr);tabpad(#expr,50); \
21 if (!(expr)) { \
22 fprintf(stderr,"FAILED\n"); \
23 _passed = FALSE; \
24 } else { \
25 fprintf(stderr,"passed\n"); \
26 } \
27 }G_STMT_END;
28 #define ENDTEST() G_STMT_START{ \
29 _testnum++; \
30 if (_passed) { \
31 fprintf(stderr,"\tpassed.\n"); \
32 _passed_tests++; \
33 } else { \
34 fprintf(stderr,"\tFAILED.\n"); \
35 } \
36 _total_tests++; \
37 }G_STMT_END;
39 void SETUP_RANDOM_SIZE(void *random,gint size) {
40 int i;
41 if (random) g_free(random);
42 _random_size = size;
43 random = g_malloc(_random_size);
44 for (i=0;i<_random_size;i++)
45 ((unsigned char *)random)[i] = i;
46 }
48 #define SETUP_RANDOM(random,type) SETUP_RANDOM_SIZE(random,sizeof(type))
50 gboolean RANDOM_OK(void *random) {
51 int i;
52 for (i=0;i<_random_size;i++) {
53 if (((unsigned char *)random)[i] != i) {
54 SETUP_RANDOM_SIZE(random,_random_size);
55 return FALSE;
56 }
57 }
58 return TRUE;
59 }
61 int main(int argc,char *argv[]) {
62 GstObject *object;
63 GstObject *parent;
64 GstObject *newparent;
65 GtkObject *gtkobject;
66 GstObject *curparent;
68 gst_init(&argc,&argv);
70 TEST_SUBJECT("GstObject");
73 TEST_CATEGORY("Creation");
75 TEST("create object");
76 /* setup */
77 /* action */
78 object = gst_object_new();
79 /* assertions */
80 ASSERT(object != NULL);
81 ASSERT(GST_IS_OBJECT(object));
82 /* cleanup */
83 g_free(object);
84 ENDTEST();
87 /* new category */
88 TEST_CATEGORY("Refcounting");
89 /* category setup */
90 object = gst_object_new();
92 TEST("new object");
93 /* setup */
94 /* action */
95 /* assertions */
96 ASSERT(object->refcount == 1);
97 ASSERT(GTK_OBJECT_FLOATING(object) == TRUE);
98 /* cleanup */
99 ENDTEST();
101 TEST("increment refcount");
102 /* setup */
103 /* action */
104 gst_object_ref(object);
105 /* assertions */
106 ASSERT(object->refcount == 2);
107 ASSERT(GTK_OBJECT_FLOATING(object) == TRUE);
108 /* cleanup */
109 ENDTEST();
111 TEST("sink object");
112 /* setup */
113 /* action */
114 gst_object_sink(object);
115 /* assertions */
116 ASSERT(object->refcount == 1);
117 ASSERT(GTK_OBJECT_FLOATING(object) == FALSE);
118 /* cleanup */
119 ENDTEST();
121 TEST("increment refcount after sink");
122 /* setup */
123 /* action */
124 gst_object_ref(object);
125 /* assertions */
126 ASSERT(object->refcount == 2);
127 ASSERT(GTK_OBJECT_FLOATING(object) == FALSE);
128 /* cleanup */
129 ENDTEST();
131 TEST("decrement refcount after sink");
132 /* setup */
133 /* action */
134 gst_object_unref(object);
135 /* assertions */
136 ASSERT(object->refcount == 1);
137 ASSERT(GTK_OBJECT_FLOATING(object) == FALSE);
138 /* cleanup */
139 ENDTEST();
141 /* category cleanup */
142 g_free(object);
146 /* new category */
147 TEST_CATEGORY("Parentage");
148 /* category setup */
149 object = gst_object_new();
150 parent = gst_object_new();
151 newparent = gst_object_new();
152 gtkobject = gtk_type_new(gtk_object_get_type());
153 /* category assertions */
154 ASSERT(object != NULL);
155 ASSERT(object->refcount == 1);
156 ASSERT(object->parent == NULL);
157 ASSERT(parent != NULL);
158 ASSERT(newparent != NULL);
159 ASSERT(gtkobject != NULL);
160 ASSERT(!GST_IS_OBJECT(gtkobject));
162 TEST("gst_object_set_parent: null object");
163 /* setup */
164 /* action */
165 gst_object_set_parent(NULL,NULL);
166 /* assertions */
167 ASSERT(object->parent == NULL);
168 /* cleanup */
169 ENDTEST();
171 TEST("gst_object_set_parent: invalid object");
172 /* setup */
173 /* action */
174 gst_object_set_parent((GstObject*)gtkobject,NULL);
175 /* assertions */
176 ASSERT(object->parent == NULL);
177 /* cleanup */
178 ENDTEST();
180 TEST("gst_object_set_parent: null parent");
181 /* setup */
182 /* action */
183 gst_object_set_parent(object,NULL);
184 /* assertions */
185 ASSERT(object->parent == NULL);
186 /* cleanup */
187 ENDTEST();
189 TEST("gst_object_set_parent: invalid parent");
190 /* setup */
191 /* action */
192 gst_object_set_parent(object,(GstObject*)gtkobject);
193 /* assertions */
194 ASSERT(object->parent == NULL);
195 /* cleanup */
196 ENDTEST();
198 TEST("gst_object_set_parent: valid object, parent is object");
199 /* setup */
200 /* action */
201 gst_object_set_parent(object,object);
202 /* assertions */
203 ASSERT(object->parent == NULL);
204 /* cleanup */
205 ENDTEST();
207 TEST("gst_object_set_parent: valid object and parent");
208 /* setup */
209 /* action */
210 gst_object_set_parent(object,parent);
211 /* assertions */
212 ASSERT(object->parent == parent);
213 /* cleanup */
214 ENDTEST();
216 TEST("gst_object_set_parent: parent already set");
217 /* setup */
218 /* action */
219 gst_object_set_parent(object,newparent);
220 /* assertions */
221 ASSERT(object->parent != newparent);
222 ASSERT(object->parent == parent);
223 /* cleanup */
224 g_free(object);
225 ENDTEST();
228 TEST("gst_object_get_parent: null object");
229 /* setup */
230 /* action */
231 curparent = gst_object_get_parent(NULL);
232 /* assertions */
233 ASSERT(curparent == NULL);
234 /* cleanup */
235 ENDTEST();
237 TEST("gst_object_get_parent: invalid object");
238 /* setup */
239 /* action */
240 curparent = gst_object_get_parent((GstObject*)gtkobject);
241 /* assertions */
242 ASSERT(curparent == NULL);
243 /* cleanup */
244 ENDTEST();
246 TEST("gst_object_get_parent: no parent");
247 /* setup */
248 object = gst_object_new();
249 /* action */
250 curparent = gst_object_get_parent(object);
251 /* assertions */
252 ASSERT(curparent == NULL);
253 /* cleanup */
254 ENDTEST();
256 TEST("gst_object_get_parent: valid parent");
257 /* setup */
258 gst_object_set_parent(object,parent);
259 /* action */
260 curparent = gst_object_get_parent(object);
261 /* assertions */
262 ASSERT(curparent == parent);
263 /* cleanup */
264 g_free(object);
265 ENDTEST();
268 TEST("gst_object_unparent: null object");
269 /* setup */
270 /* action */
271 gst_object_unparent(NULL);
272 /* assertions */
273 /* NONE - FIXME! */
274 /* cleanup */
275 ENDTEST();
277 TEST("gst_object_unparent: invalid object");
278 /* setup */
279 /* action */
280 gst_object_unparent((GstObject*)gtkobject);
281 /* assertions */
282 /* NONE - FIXME! */
283 /* cleanup */
284 ENDTEST();
286 TEST("gst_object_unparent: no parent");
287 /* setup */
288 object = gst_object_new();
291 /* category cleanup */
292 g_free(object);
293 g_free(parent);
294 g_free(newparent);
295 g_free(gtkobject);
299 fprintf(stderr,"\n\nTotal tests:\t%d\n",_total_tests);
300 fprintf(stderr,"Total passed:\t%d\n",_passed_tests);
301 fprintf(stderr,"Total FAILED:\t%d\n",_total_tests-_passed_tests);
302 }