16 START_TEST(eet_cxx_descriptors)
18 efl::eet::eet_init init;
20 auto d = efl::eet::make_descriptor
22 , efl::eet::type("i", &pod_type::i)
23 , efl::eet::type("c", &pod_type::c));
24 static_assert(std::is_same<efl::eet::descriptor<pod_type, int, char>, decltype(d)>::value, "");
26 Eet_File* file = eet_open("/tmp/eet_file_test.eet", EET_FILE_MODE_READ_WRITE);
29 pod_type pod = {1, 2};
31 int s = eet_data_write(file, d.native_handle(), "pod", &pod, true);
32 std::cout << "bytes written " << s << std::endl;
35 auto p = efl::eet::read_by_ptr(file, "pod", d);
44 int constructors_called = 0
45 , destructors_called = 0;
51 ++constructors_called;
53 non_pod(non_pod const& other)
56 ++constructors_called;
66 START_TEST(eet_cxx_descriptors_non_pod)
68 efl::eet::eet_init init;
70 auto d = efl::eet::make_descriptor
71 ("pod_type", EET_CXX_MEMBER(non_pod, i));
72 static_assert(std::is_same<efl::eet::descriptor<non_pod, int>, decltype(d)>::value, "");
75 Eet_File* file = eet_open("/tmp/eet_file_test.eet", EET_FILE_MODE_READ_WRITE);
80 int s = eet_data_write(file, d.native_handle(), "non_pod", &non_pod, true);
81 std::cout << "bytes written " << s << std::endl;
84 auto p = efl::eet::read_by_ptr(file, "non_pod", d);
86 ck_assert(p->i == 10);
88 auto v = efl::eet::read(file, "non_pod", d);
94 std::cout << "constructors called for non pod: " << constructors_called
95 << " destructors called for non pod: " << destructors_called << std::endl;
97 ck_assert(constructors_called == destructors_called);
101 struct pod_composited
106 struct pod_composited_with_non_pod
111 struct pod_value_composited
116 START_TEST(eet_cxx_descriptors_composition)
118 efl::eet::eet_init init;
120 auto pod_descriptor = efl::eet::make_descriptor
122 , efl::eet::type("i", &pod_type::i)
123 , efl::eet::type("c", &pod_type::c));
124 static_assert(std::is_same<efl::eet::descriptor<pod_type, int, char>
125 , decltype(pod_descriptor)>::value, "");
127 auto non_pod_descriptor = efl::eet::make_descriptor
129 , efl::eet::type("i", &non_pod::i));
130 static_assert(std::is_same<efl::eet::descriptor<non_pod, int>
131 , decltype(non_pod_descriptor)>::value, "");
134 auto d = efl::eet::make_descriptor
135 ("pod_composited", efl::eet::type("pod_composited", &pod_composited::member, pod_descriptor));
136 static_assert(std::is_same<efl::eet::descriptor<pod_composited, pod_type*>, decltype(d)>::value, "");
138 Eet_File* file = eet_open("/tmp/eet_file_test.eet", EET_FILE_MODE_READ_WRITE);
139 ck_assert(file != 0);
141 ::pod_composited pod_composited {new pod_type{5, 'a'}};
143 int s = eet_data_write(file, d.native_handle(), "foo", &pod_composited, false);
146 auto p = efl::eet::read_by_ptr(file, "foo", d);
148 ck_assert(p->member->i == 5);
149 ck_assert(p->member->c == 'a');
153 auto v = efl::eet::read(file, "foo", d);
154 ck_assert(v.member->i == 5);
155 ck_assert(v.member->c == 'a');
163 auto d = efl::eet::make_descriptor
164 ("pod_composited_with_non_pod", efl::eet::type("pod_composited_with_non_pod", &pod_composited_with_non_pod::member, non_pod_descriptor));
165 static_assert(std::is_same<efl::eet::descriptor<pod_composited_with_non_pod, non_pod*>, decltype(d)>::value, "");
167 Eet_File* file = eet_open("/tmp/eet_file_test.eet", EET_FILE_MODE_READ_WRITE);
168 ck_assert(file != 0);
170 ::pod_composited_with_non_pod pod_composited_with_non_pod {new non_pod};
172 int s = eet_data_write(file, d.native_handle(), "foo", &pod_composited_with_non_pod, false);
175 auto p = efl::eet::read_by_ptr(file, "foo", d);
177 ck_assert(p->member->i == 10);
181 auto v = efl::eet::read(file, "foo", d);
182 ck_assert(v.member->i == 10);
188 delete pod_composited_with_non_pod.member;
191 std::cout << "constructors called for non pod: " << constructors_called
192 << " destructors called for non pod: " << destructors_called << std::endl;
194 ck_assert(constructors_called == destructors_called);
197 auto d = efl::eet::make_descriptor
198 ("pod_value_composited", efl::eet::type("member"
199 , &pod_value_composited::member, pod_descriptor));
200 static_assert(std::is_same<efl::eet::descriptor<pod_value_composited, pod_type>, decltype(d)>::value, "");
202 Eet_File* file = eet_open("/tmp/eet_file_test.eet", EET_FILE_MODE_READ_WRITE);
203 ck_assert(file != 0);
205 ::pod_value_composited pod_value_composited {{5, 'a'}};
207 int s = eet_data_write(file, d.native_handle(), "foo", &pod_value_composited, false);
210 auto p = efl::eet::read_by_ptr(file, "foo", d);
212 ck_assert(p->member.i == 5);
213 ck_assert(p->member.c == 'a');
215 auto v = efl::eet::read(file, "foo", d);
216 ck_assert(v.member.i == 5);
217 ck_assert(v.member.c == 'a');
226 eet_test_descriptors(TCase* tc)
228 tcase_add_test(tc, eet_cxx_descriptors);
229 tcase_add_test(tc, eet_cxx_descriptors_non_pod);
230 tcase_add_test(tc, eet_cxx_descriptors_composition);