]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/gstreamer0-10.git/blob - docs/random/omega/testing/gstobject.c
c179ebc7d7b745ad387a8bf90ced0dd54dc39370
[glsdk/gstreamer0-10.git] / docs / random / omega / testing / gstobject.c
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();
289   
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);