Eobj: Use xref.
[profile/ivi/eobj.git] / tests / eobj_test_class_errors.c
1 #ifdef HAVE_CONFIG_H
2 # include "config.h"
3 #endif
4
5 #include <stdio.h>
6
7 #include "eobj_suite.h"
8 #include "Eobj.h"
9
10 #include "class_simple.h"
11
12 START_TEST(eobj_incomplete_desc)
13 {
14    eobj_init();
15
16    const Eobj_Class *klass;
17    static Eobj_Op TMP_BASE_ID = EOBJ_NOOP;
18
19    enum {
20         TEST_SUB_ID_FOO,
21         TEST_SUB_ID_FOO2,
22         TEST_SUB_ID_LAST
23    };
24
25    static const Eobj_Op_Description op_desc[] = {
26         EOBJ_OP_DESCRIPTION(TEST_SUB_ID_FOO, "i", "Foo"),
27         EOBJ_OP_DESCRIPTION(TEST_SUB_ID_FOO2, "i", "Foo2"),
28         EOBJ_OP_DESCRIPTION_SENTINEL
29    };
30
31    static const Eobj_Op_Description op_desc_wrong[] = {
32         EOBJ_OP_DESCRIPTION(TEST_SUB_ID_FOO2, "i", "Foo2"),
33         EOBJ_OP_DESCRIPTION(TEST_SUB_ID_FOO, "i", "Foo"),
34         EOBJ_OP_DESCRIPTION_SENTINEL
35    };
36
37    /* XXX: In real life this should be const, this is just for testing. */
38    static Eobj_Class_Description class_desc = {
39         "Simple",
40         EOBJ_CLASS_TYPE_REGULAR,
41         EOBJ_CLASS_DESCRIPTION_OPS(NULL, op_desc, 1),
42         NULL,
43         0,
44         NULL,
45         NULL,
46         NULL,
47         NULL
48    };
49
50    klass = eobj_class_new(&class_desc, NULL, NULL);
51    fail_if(klass);
52
53    class_desc.ops.base_op_id = &TMP_BASE_ID;
54    class_desc.ops.descs = NULL;
55
56    klass = eobj_class_new(&class_desc, NULL, NULL);
57    fail_if(klass);
58
59    class_desc.ops.descs = op_desc;
60    class_desc.ops.count = TEST_SUB_ID_LAST + 1;
61
62    klass = eobj_class_new(&class_desc, NULL, NULL);
63    fail_if(klass);
64
65    class_desc.ops.count = 0;
66
67    klass = eobj_class_new(&class_desc, NULL, NULL);
68    fail_if(klass);
69
70    class_desc.ops.count = TEST_SUB_ID_LAST;
71    class_desc.ops.descs = op_desc_wrong;
72
73    klass = eobj_class_new(&class_desc, NULL, NULL);
74    fail_if(klass);
75
76    class_desc.ops.descs = op_desc;
77    class_desc.name = NULL;
78
79    klass = eobj_class_new(&class_desc, NULL, NULL);
80    fail_if(klass);
81
82    class_desc.name = "Simple";
83
84
85    klass = eobj_class_new(NULL, NULL, NULL);
86    fail_if(klass);
87
88    /* Should create a class. */
89    klass = eobj_class_new(&class_desc, NULL, NULL);
90    fail_if(!klass);
91
92    (void) klass;
93
94    eobj_shutdown();
95 }
96 END_TEST
97
98 START_TEST(eobj_inherit_errors)
99 {
100    eobj_init();
101
102    const Eobj_Class *klass;
103    const Eobj_Class *klass_mixin;
104    const Eobj_Class *klass_simple;
105
106    static const Eobj_Class_Description class_desc_simple = {
107         "Simple",
108         EOBJ_CLASS_TYPE_REGULAR,
109         EOBJ_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
110         NULL,
111         0,
112         NULL,
113         NULL,
114         NULL,
115         NULL
116    };
117
118    static const Eobj_Class_Description class_desc_mixin = {
119         "Mixin",
120         EOBJ_CLASS_TYPE_MIXIN,
121         EOBJ_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
122         NULL,
123         0,
124         NULL,
125         NULL,
126         NULL,
127         NULL
128    };
129
130    static Eobj_Class_Description class_desc = {
131         "General",
132         EOBJ_CLASS_TYPE_MIXIN,
133         EOBJ_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
134         NULL,
135         0,
136         NULL,
137         NULL,
138         NULL,
139         NULL
140    };
141
142    klass_mixin = eobj_class_new(&class_desc_mixin, NULL, NULL);
143    fail_if(!klass_mixin);
144
145    klass_simple = eobj_class_new(&class_desc_simple, NULL, NULL);
146    fail_if(!klass_simple);
147
148    klass = eobj_class_new(&class_desc, klass_simple, NULL);
149    fail_if(klass);
150
151    class_desc.type = EOBJ_CLASS_TYPE_REGULAR;
152
153    klass = eobj_class_new(&class_desc, klass_mixin, NULL);
154    fail_if(klass);
155
156    (void) klass;
157
158    eobj_shutdown();
159 }
160 END_TEST
161
162 void eobj_test_class_errors(TCase *tc)
163 {
164    tcase_add_test(tc, eobj_incomplete_desc);
165    tcase_add_test(tc, eobj_inherit_errors);
166 }