blob: e7bcee9783cdb7e31f3688ab9ba4480a295e2b11 [file] [log] [blame]
Pekka Paalanenf5b74f72015-03-25 12:50:31 +02001/*
2 * Copyright © 2012 Intel Corporation
3 * Copyright © 2013 DENSO CORPORATION
4 * Copyright © 2015 Collabora, Ltd.
5 *
Bryce Harrington2cc92972015-06-11 15:39:40 -07006 * Permission is hereby granted, free of charge, to any person obtaining
7 * a copy of this software and associated documentation files (the
8 * "Software"), to deal in the Software without restriction, including
9 * without limitation the rights to use, copy, modify, merge, publish,
10 * distribute, sublicense, and/or sell copies of the Software, and to
11 * permit persons to whom the Software is furnished to do so, subject to
12 * the following conditions:
Pekka Paalanenf5b74f72015-03-25 12:50:31 +020013 *
Bryce Harrington2cc92972015-06-11 15:39:40 -070014 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial
16 * portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
22 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
23 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25 * SOFTWARE.
Pekka Paalanenf5b74f72015-03-25 12:50:31 +020026 */
27
28#include "config.h"
29
30#include <unistd.h>
31#include <signal.h>
32#include <string.h>
Nobuhiko Tanibataa10352e2015-06-22 15:35:49 +090033#include <assert.h>
Pekka Paalanenf5b74f72015-03-25 12:50:31 +020034
Jon Cruz4678bab2015-06-15 15:37:07 -070035#include "src/compositor.h"
Pekka Paalanenf5b74f72015-03-25 12:50:31 +020036#include "weston-test-server-protocol.h"
37#include "ivi-test.h"
Jon Cruz4678bab2015-06-15 15:37:07 -070038#include "ivi-shell/ivi-layout-export.h"
Jon Cruz867d50e2015-06-15 15:37:10 -070039#include "shared/helpers.h"
Pekka Paalanenf5b74f72015-03-25 12:50:31 +020040
41struct test_context;
42
43struct runner_test {
44 const char *name;
45 void (*run)(struct test_context *);
46} __attribute__ ((aligned (32)));
47
48#define RUNNER_TEST(name) \
49 static void runner_func_##name(struct test_context *); \
50 \
51 const struct runner_test runner_test_##name \
52 __attribute__ ((section ("test_section"))) = \
53 { \
54 #name, runner_func_##name \
55 }; \
56 \
57 static void runner_func_##name(struct test_context *ctx)
58
59extern const struct runner_test __start_test_section;
60extern const struct runner_test __stop_test_section;
61
62static const struct runner_test *
63find_runner_test(const char *name)
64{
65 const struct runner_test *t;
66
67 for (t = &__start_test_section; t < &__stop_test_section; t++) {
68 if (strcmp(t->name, name) == 0)
69 return t;
70 }
71
72 return NULL;
73}
74
75struct test_launcher {
76 struct weston_compositor *compositor;
77 char exe[2048];
78 struct weston_process process;
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +000079 const struct ivi_layout_interface *layout_interface;
Pekka Paalanenf5b74f72015-03-25 12:50:31 +020080};
81
Nobuhiko Tanibataa10352e2015-06-22 15:35:49 +090082struct test_context {
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +000083 const struct ivi_layout_interface *layout_interface;
Nobuhiko Tanibataa10352e2015-06-22 15:35:49 +090084 struct wl_resource *runner_resource;
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +090085 uint32_t user_flags;
Nobuhiko Tanibataa10352e2015-06-22 15:35:49 +090086};
87
88static struct test_context static_context;
89
90static void
91destroy_runner(struct wl_resource *resource)
92{
93 assert(static_context.runner_resource == NULL ||
94 static_context.runner_resource == resource);
95
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +000096 static_context.layout_interface = NULL;
Nobuhiko Tanibataa10352e2015-06-22 15:35:49 +090097 static_context.runner_resource = NULL;
98}
99
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200100static void
101runner_destroy_handler(struct wl_client *client, struct wl_resource *resource)
102{
103 wl_resource_destroy(resource);
104}
105
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200106static void
107runner_run_handler(struct wl_client *client, struct wl_resource *resource,
108 const char *test_name)
109{
110 struct test_launcher *launcher;
111 const struct runner_test *t;
Nobuhiko Tanibataa10352e2015-06-22 15:35:49 +0900112
113 assert(static_context.runner_resource == NULL ||
114 static_context.runner_resource == resource);
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200115
116 launcher = wl_resource_get_user_data(resource);
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000117 static_context.layout_interface = launcher->layout_interface;
Nobuhiko Tanibataa10352e2015-06-22 15:35:49 +0900118 static_context.runner_resource = resource;
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200119
120 t = find_runner_test(test_name);
121 if (!t) {
122 weston_log("Error: runner test \"%s\" not found.\n",
123 test_name);
124 wl_resource_post_error(resource,
125 WESTON_TEST_RUNNER_ERROR_UNKNOWN_TEST,
126 "weston_test_runner: unknown: '%s'",
127 test_name);
128 return;
129 }
130
131 weston_log("weston_test_runner.run(\"%s\")\n", test_name);
132
Nobuhiko Tanibataa10352e2015-06-22 15:35:49 +0900133 t->run(&static_context);
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200134
135 weston_test_runner_send_finished(resource);
136}
137
138static const struct weston_test_runner_interface runner_implementation = {
139 runner_destroy_handler,
140 runner_run_handler
141};
142
143static void
144bind_runner(struct wl_client *client, void *data,
145 uint32_t version, uint32_t id)
146{
147 struct test_launcher *launcher = data;
148 struct wl_resource *resource;
149
150 resource = wl_resource_create(client, &weston_test_runner_interface,
151 1, id);
152 if (!resource) {
153 wl_client_post_no_memory(client);
154 return;
155 }
156
157 wl_resource_set_implementation(resource, &runner_implementation,
Nobuhiko Tanibataa10352e2015-06-22 15:35:49 +0900158 launcher, destroy_runner);
159
160 if (static_context.runner_resource != NULL) {
161 weston_log("test FATAL: "
162 "attempting to run several tests in parallel.\n");
163 wl_resource_post_error(resource,
164 WESTON_TEST_RUNNER_ERROR_TEST_FAILED,
165 "attempt to run parallel tests");
166 }
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200167}
168
169static void
170test_client_sigchld(struct weston_process *process, int status)
171{
172 struct test_launcher *launcher =
173 container_of(process, struct test_launcher, process);
174 struct weston_compositor *c = launcher->compositor;
175
176 /* Chain up from weston-test-runner's exit code so that automake
177 * knows the exit status and can report e.g. skipped tests. */
178 if (WIFEXITED(status))
179 weston_compositor_exit_with_code(c, WEXITSTATUS(status));
180 else
181 weston_compositor_exit_with_code(c, EXIT_FAILURE);
182}
183
184static void
185idle_launch_client(void *data)
186{
187 struct test_launcher *launcher = data;
188 pid_t pid;
189 sigset_t allsigs;
190
191 pid = fork();
192 if (pid == -1) {
193 weston_log("fatal: failed to fork '%s': %m\n", launcher->exe);
194 weston_compositor_exit_with_code(launcher->compositor,
195 EXIT_FAILURE);
196 return;
197 }
198
199 if (pid == 0) {
200 sigfillset(&allsigs);
201 sigprocmask(SIG_UNBLOCK, &allsigs, NULL);
202 execl(launcher->exe, launcher->exe, NULL);
203 weston_log("compositor: executing '%s' failed: %m\n",
204 launcher->exe);
205 _exit(EXIT_FAILURE);
206 }
207
208 launcher->process.pid = pid;
209 launcher->process.cleanup = test_client_sigchld;
210 weston_watch_process(&launcher->process);
211}
212
213int
214controller_module_init(struct weston_compositor *compositor,
215 int *argc, char *argv[],
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000216 const struct ivi_layout_interface *iface,
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200217 size_t iface_version);
218
219WL_EXPORT int
220controller_module_init(struct weston_compositor *compositor,
221 int *argc, char *argv[],
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000222 const struct ivi_layout_interface *iface,
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200223 size_t iface_version)
224{
225 struct wl_event_loop *loop;
226 struct test_launcher *launcher;
227 const char *path;
228
229 /* strict check, since this is an internal test module */
230 if (iface_version != sizeof(*iface)) {
231 weston_log("fatal: controller interface mismatch\n");
232 return -1;
233 }
234
235 path = getenv("WESTON_BUILD_DIR");
236 if (!path) {
237 weston_log("test setup failure: WESTON_BUILD_DIR not set\n");
238 return -1;
239 }
240
241 launcher = zalloc(sizeof *launcher);
242 if (!launcher)
243 return -1;
244
245 launcher->compositor = compositor;
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000246 launcher->layout_interface = iface;
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200247 snprintf(launcher->exe, sizeof launcher->exe,
248 "%s/ivi-layout.ivi", path);
249
250 if (wl_global_create(compositor->wl_display,
251 &weston_test_runner_interface, 1,
252 launcher, bind_runner) == NULL)
253 return -1;
254
255 loop = wl_display_get_event_loop(compositor->wl_display);
256 wl_event_loop_add_idle(loop, idle_launch_client, launcher);
257
258 return 0;
259}
260
261static void
262runner_assert_fail(const char *cond, const char *file, int line,
263 const char *func, struct test_context *ctx)
264{
265 weston_log("Assert failure in %s:%d, %s: '%s'\n",
266 file, line, func, cond);
Nobuhiko Tanibataa10352e2015-06-22 15:35:49 +0900267
268 assert(ctx->runner_resource);
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200269 wl_resource_post_error(ctx->runner_resource,
270 WESTON_TEST_RUNNER_ERROR_TEST_FAILED,
271 "Assert failure in %s:%d, %s: '%s'\n",
272 file, line, func, cond);
273}
274
275#define runner_assert(cond) ({ \
276 bool b_ = (cond); \
277 if (!b_) \
278 runner_assert_fail(#cond, __FILE__, __LINE__, \
279 __func__, ctx); \
280 b_; \
281})
282
283#define runner_assert_or_return(cond) do { \
284 bool b_ = (cond); \
285 if (!b_) { \
286 runner_assert_fail(#cond, __FILE__, __LINE__, \
287 __func__, ctx); \
288 return; \
289 } \
290} while (0)
291
292
293/*************************** tests **********************************/
294
295/*
296 * This is a controller module: a plugin to ivi-shell.so, i.e. a sub-plugin.
297 * This module is specially written to execute tests that target the
298 * ivi_layout API.
299 *
300 * This module is listed in TESTS in Makefile.am. weston-tests-env handles
301 * this module specially by loading it in ivi-shell.
302 *
303 * Once Weston init completes, this module launches one test program:
304 * ivi-layout.ivi (ivi_layout-test.c). That program uses the weston-test-runner
305 * framework to fork and exec each TEST() in ivi_layout-test.c with a fresh
306 * connection to the single compositor instance.
307 *
308 * Each TEST() in ivi_layout-test.c will bind to weston_test_runner global
309 * interface. A TEST() will set up the client state, and issue
310 * weston_test_runner.run request to execute the compositor-side of the test.
311 *
312 * The compositor-side parts of the tests are in this file. They are specified
313 * by RUNNER_TEST() macro, where the name argument matches the name string
314 * passed to weston_test_runner.run.
315 *
316 * A RUNNER_TEST() function simply returns when it succeeds. If it fails,
317 * a fatal protocol error is sent to the client from runner_assert() or
318 * runner_assert_or_return(). This module catches the test program exit
319 * code and passes it out of Weston to the test harness.
320 *
321 * A single TEST() in ivi_layout-test.c may use multiple RUNNER_TEST()s to
322 * achieve multiple test points over a client action sequence.
323 */
324
325RUNNER_TEST(surface_create_p1)
326{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000327 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200328 struct ivi_layout_surface *ivisurf[2];
329 uint32_t ivi_id;
330
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000331 ivisurf[0] = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900332 runner_assert(ivisurf[0]);
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200333
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000334 ivisurf[1] = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(1));
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900335 runner_assert(ivisurf[1]);
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200336
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000337 ivi_id = lyt->get_id_of_surface(ivisurf[0]);
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900338 runner_assert(ivi_id == IVI_TEST_SURFACE_ID(0));
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200339
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000340 ivi_id = lyt->get_id_of_surface(ivisurf[1]);
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900341 runner_assert(ivi_id == IVI_TEST_SURFACE_ID(1));
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200342}
343
344RUNNER_TEST(surface_create_p2)
345{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000346 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200347 struct ivi_layout_surface *ivisurf;
348
349 /* the ivi_surface was destroyed by the client */
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000350 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900351 runner_assert(ivisurf == NULL);
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200352}
353
354RUNNER_TEST(surface_visibility)
355{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000356 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200357 struct ivi_layout_surface *ivisurf;
358 int32_t ret;
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200359 const struct ivi_layout_surface_properties *prop;
360
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000361 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900362 runner_assert(ivisurf);
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200363
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000364 ret = lyt->surface_set_visibility(ivisurf, true);
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900365 runner_assert(ret == IVI_SUCCEEDED);
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200366
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000367 lyt->commit_changes();
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200368
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000369 prop = lyt->get_properties_of_surface(ivisurf);
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900370 runner_assert(prop->visibility == true);
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200371}
372
373RUNNER_TEST(surface_opacity)
374{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000375 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200376 struct ivi_layout_surface *ivisurf;
377 int32_t ret;
378 wl_fixed_t opacity;
379 const struct ivi_layout_surface_properties *prop;
380
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000381 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900382 runner_assert(ivisurf);
383
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000384 runner_assert(lyt->surface_get_opacity(ivisurf) ==
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900385 wl_fixed_from_double(1.0));
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200386
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000387 ret = lyt->surface_set_opacity(ivisurf, wl_fixed_from_double(0.5));
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900388 runner_assert(ret == IVI_SUCCEEDED);
389
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000390 runner_assert(lyt->surface_get_opacity(ivisurf) ==
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900391 wl_fixed_from_double(1.0));
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200392
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000393 lyt->commit_changes();
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200394
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000395 opacity = lyt->surface_get_opacity(ivisurf);
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900396 runner_assert(opacity == wl_fixed_from_double(0.5));
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200397
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000398 prop = lyt->get_properties_of_surface(ivisurf);
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900399 runner_assert(prop->opacity == wl_fixed_from_double(0.5));
400}
401
402RUNNER_TEST(surface_orientation)
403{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000404 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900405 struct ivi_layout_surface *ivisurf;
406 const struct ivi_layout_surface_properties *prop;
407
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000408 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900409 runner_assert(ivisurf != NULL);
410
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000411 runner_assert(lyt->surface_get_orientation(ivisurf) ==
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900412 WL_OUTPUT_TRANSFORM_NORMAL);
413
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000414 runner_assert(lyt->surface_set_orientation(
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900415 ivisurf, WL_OUTPUT_TRANSFORM_90) == IVI_SUCCEEDED);
416
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000417 runner_assert(lyt->surface_get_orientation(ivisurf) ==
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900418 WL_OUTPUT_TRANSFORM_NORMAL);
419
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000420 lyt->commit_changes();
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900421
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000422 runner_assert(lyt->surface_get_orientation(
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900423 ivisurf) == WL_OUTPUT_TRANSFORM_90);
424
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000425 prop = lyt->get_properties_of_surface(ivisurf);
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900426 runner_assert_or_return(prop);
427 runner_assert(prop->orientation == WL_OUTPUT_TRANSFORM_90);
428}
429
430RUNNER_TEST(surface_dimension)
431{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000432 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900433 struct ivi_layout_surface *ivisurf;
434 const struct ivi_layout_surface_properties *prop;
435 int32_t dest_width;
436 int32_t dest_height;
437
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000438 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900439 runner_assert(ivisurf != NULL);
440
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000441 runner_assert(lyt->surface_get_dimension(
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900442 ivisurf, &dest_width, &dest_height) == IVI_SUCCEEDED);
443 runner_assert(dest_width == 1);
444 runner_assert(dest_height == 1);
445
446 runner_assert(IVI_SUCCEEDED ==
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000447 lyt->surface_set_dimension(ivisurf, 200, 300));
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900448
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000449 runner_assert(lyt->surface_get_dimension(
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900450 ivisurf, &dest_width, &dest_height) == IVI_SUCCEEDED);
451 runner_assert(dest_width == 1);
452 runner_assert(dest_height == 1);
453
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000454 lyt->commit_changes();
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900455
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000456 runner_assert(lyt->surface_get_dimension(
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900457 ivisurf, &dest_width, &dest_height) == IVI_SUCCEEDED);
458 runner_assert(dest_width == 200);
459 runner_assert(dest_height == 300);
460
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000461 prop = lyt->get_properties_of_surface(ivisurf);
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900462 runner_assert_or_return(prop);
463 runner_assert(prop->dest_width == 200);
464 runner_assert(prop->dest_height == 300);
465}
466
467RUNNER_TEST(surface_position)
468{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000469 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900470 struct ivi_layout_surface *ivisurf;
471 const struct ivi_layout_surface_properties *prop;
472 int32_t dest_x;
473 int32_t dest_y;
474
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000475 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900476 runner_assert(ivisurf != NULL);
477
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000478 runner_assert(lyt->surface_get_position(
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900479 ivisurf, &dest_x, &dest_y) == IVI_SUCCEEDED);
480 runner_assert(dest_x == 0);
481 runner_assert(dest_y == 0);
482
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000483 runner_assert(lyt->surface_set_position(
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900484 ivisurf, 20, 30) == IVI_SUCCEEDED);
485
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000486 runner_assert(lyt->surface_get_position(
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900487 ivisurf, &dest_x, &dest_y) == IVI_SUCCEEDED);
488 runner_assert(dest_x == 0);
489 runner_assert(dest_y == 0);
490
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000491 lyt->commit_changes();
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900492
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000493 runner_assert(lyt->surface_get_position(
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900494 ivisurf, &dest_x, &dest_y) == IVI_SUCCEEDED);
495 runner_assert(dest_x == 20);
496 runner_assert(dest_y == 30);
497
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000498 prop = lyt->get_properties_of_surface(ivisurf);
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900499 runner_assert_or_return(prop);
500 runner_assert(prop->dest_x == 20);
501 runner_assert(prop->dest_y == 30);
502}
503
504RUNNER_TEST(surface_destination_rectangle)
505{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000506 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900507 struct ivi_layout_surface *ivisurf;
508 const struct ivi_layout_surface_properties *prop;
509 int32_t dest_width;
510 int32_t dest_height;
511 int32_t dest_x;
512 int32_t dest_y;
513
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000514 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900515 runner_assert(ivisurf != NULL);
516
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000517 prop = lyt->get_properties_of_surface(ivisurf);
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900518 runner_assert_or_return(prop);
519 runner_assert(prop->dest_width == 1);
520 runner_assert(prop->dest_height == 1);
521 runner_assert(prop->dest_x == 0);
522 runner_assert(prop->dest_y == 0);
523
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000524 runner_assert(lyt->surface_set_destination_rectangle(
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900525 ivisurf, 20, 30, 200, 300) == IVI_SUCCEEDED);
526
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000527 prop = lyt->get_properties_of_surface(ivisurf);
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900528 runner_assert_or_return(prop);
529 runner_assert(prop->dest_width == 1);
530 runner_assert(prop->dest_height == 1);
531 runner_assert(prop->dest_x == 0);
532 runner_assert(prop->dest_y == 0);
533
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000534 lyt->commit_changes();
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900535
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000536 runner_assert(lyt->surface_get_dimension(
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900537 ivisurf, &dest_width, &dest_height) == IVI_SUCCEEDED);
538 runner_assert(dest_width == 200);
539 runner_assert(dest_height == 300);
540
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000541 runner_assert(lyt->surface_get_position(ivisurf, &dest_x, &dest_y) == IVI_SUCCEEDED);
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900542 runner_assert(dest_x == 20);
543 runner_assert(dest_y == 30);
544
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000545 prop = lyt->get_properties_of_surface(ivisurf);
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900546 runner_assert_or_return(prop);
547 runner_assert(prop->dest_width == 200);
548 runner_assert(prop->dest_height == 300);
549 runner_assert(prop->dest_x == 20);
550 runner_assert(prop->dest_y == 30);
551}
552
553RUNNER_TEST(surface_source_rectangle)
554{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000555 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900556 struct ivi_layout_surface *ivisurf;
557 const struct ivi_layout_surface_properties *prop;
558
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000559 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900560 runner_assert(ivisurf != NULL);
561
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000562 prop = lyt->get_properties_of_surface(ivisurf);
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900563 runner_assert_or_return(prop);
564 runner_assert(prop->source_width == 0);
565 runner_assert(prop->source_height == 0);
566 runner_assert(prop->source_x == 0);
567 runner_assert(prop->source_y == 0);
568
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000569 runner_assert(lyt->surface_set_source_rectangle(
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900570 ivisurf, 20, 30, 200, 300) == IVI_SUCCEEDED);
571
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000572 prop = lyt->get_properties_of_surface(ivisurf);
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900573 runner_assert_or_return(prop);
574 runner_assert(prop->source_width == 0);
575 runner_assert(prop->source_height == 0);
576 runner_assert(prop->source_x == 0);
577 runner_assert(prop->source_y == 0);
578
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000579 lyt->commit_changes();
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900580
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000581 prop = lyt->get_properties_of_surface(ivisurf);
Nobuhiko Tanibata23d95822015-06-22 15:33:17 +0900582 runner_assert_or_return(prop);
583 runner_assert(prop->source_width == 200);
584 runner_assert(prop->source_height == 300);
585 runner_assert(prop->source_x == 20);
586 runner_assert(prop->source_y == 30);
Pekka Paalanenf5b74f72015-03-25 12:50:31 +0200587}
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900588
589RUNNER_TEST(surface_bad_opacity)
590{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000591 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900592 struct ivi_layout_surface *ivisurf;
593 wl_fixed_t opacity;
594
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000595 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900596 runner_assert(ivisurf != NULL);
597
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000598 runner_assert(lyt->surface_set_opacity(
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900599 NULL, wl_fixed_from_double(0.3)) == IVI_FAILED);
600
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000601 runner_assert(lyt->surface_set_opacity(
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900602 ivisurf, wl_fixed_from_double(0.3)) == IVI_SUCCEEDED);
603
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000604 runner_assert(lyt->surface_set_opacity(
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900605 ivisurf, wl_fixed_from_double(-1)) == IVI_FAILED);
606
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000607 lyt->commit_changes();
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900608
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000609 opacity = lyt->surface_get_opacity(ivisurf);
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900610 runner_assert(opacity == wl_fixed_from_double(0.3));
611
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000612 runner_assert(lyt->surface_set_opacity(
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900613 ivisurf, wl_fixed_from_double(1.1)) == IVI_FAILED);
614
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000615 lyt->commit_changes();
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900616
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000617 opacity = lyt->surface_get_opacity(ivisurf);
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900618 runner_assert(opacity == wl_fixed_from_double(0.3));
619
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000620 runner_assert(lyt->surface_set_opacity(
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900621 NULL, wl_fixed_from_double(0.5)) == IVI_FAILED);
622
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000623 lyt->commit_changes();
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900624
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000625 opacity = lyt->surface_get_opacity(NULL);
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900626 runner_assert(opacity == wl_fixed_from_double(0.0));
627}
628
629RUNNER_TEST(ivi_layout_commit_changes)
630{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000631 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900632
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000633 lyt->commit_changes();
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900634}
635
636RUNNER_TEST(commit_changes_after_visibility_set_surface_destroy)
637{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000638 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900639 struct ivi_layout_surface *ivisurf;
640
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000641 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900642 runner_assert(ivisurf != NULL);
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000643 runner_assert(lyt->surface_set_visibility(
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900644 ivisurf, true) == IVI_SUCCEEDED);
645}
646
647RUNNER_TEST(commit_changes_after_opacity_set_surface_destroy)
648{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000649 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900650 struct ivi_layout_surface *ivisurf;
651
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000652 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900653 runner_assert(ivisurf != NULL);
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000654 runner_assert(lyt->surface_set_opacity(
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900655 ivisurf, wl_fixed_from_double(0.5)) == IVI_SUCCEEDED);
656}
657
658RUNNER_TEST(commit_changes_after_orientation_set_surface_destroy)
659{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000660 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900661 struct ivi_layout_surface *ivisurf;
662
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000663 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900664 runner_assert(ivisurf != NULL);
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000665 runner_assert(lyt->surface_set_orientation(
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900666 ivisurf, WL_OUTPUT_TRANSFORM_90) == IVI_SUCCEEDED);
667}
668
669RUNNER_TEST(commit_changes_after_dimension_set_surface_destroy)
670{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000671 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900672 struct ivi_layout_surface *ivisurf;
673
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000674 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900675 runner_assert(ivisurf != NULL);
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000676 runner_assert(lyt->surface_set_dimension(
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900677 ivisurf, 200, 300) == IVI_SUCCEEDED);
678}
679
680RUNNER_TEST(commit_changes_after_position_set_surface_destroy)
681{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000682 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900683 struct ivi_layout_surface *ivisurf;
684
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000685 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900686 runner_assert(ivisurf != NULL);
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000687 runner_assert(lyt->surface_set_position(
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900688 ivisurf, 20, 30) == IVI_SUCCEEDED);
689}
690
691RUNNER_TEST(commit_changes_after_source_rectangle_set_surface_destroy)
692{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000693 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900694 struct ivi_layout_surface *ivisurf;
695
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000696 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900697 runner_assert(ivisurf != NULL);
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000698 runner_assert(lyt->surface_set_source_rectangle(
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900699 ivisurf, 20, 30, 200, 300) == IVI_SUCCEEDED);
700}
701
702RUNNER_TEST(commit_changes_after_destination_rectangle_set_surface_destroy)
703{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000704 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900705 struct ivi_layout_surface *ivisurf;
706
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000707 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900708 runner_assert(ivisurf != NULL);
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000709 runner_assert(lyt->surface_set_destination_rectangle(
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900710 ivisurf, 20, 30, 200, 300) == IVI_SUCCEEDED);
711}
712
713RUNNER_TEST(get_surface_after_destroy_surface)
714{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000715 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900716 struct ivi_layout_surface *ivisurf;
717
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000718 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibatac74bafa2015-06-22 15:33:26 +0900719 runner_assert(ivisurf == NULL);
720}
721
Nobuhiko Tanibatad3643932015-06-22 15:34:09 +0900722RUNNER_TEST(layer_render_order)
723{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000724 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibatad3643932015-06-22 15:34:09 +0900725 struct ivi_layout_layer *ivilayer;
726 struct ivi_layout_surface *ivisurfs[IVI_TEST_SURFACE_COUNT] = {};
727 struct ivi_layout_surface **array;
728 int32_t length = 0;
729 uint32_t i;
730
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000731 ivilayer = lyt->layer_create_with_dimension(IVI_TEST_LAYER_ID(0), 200, 300);
Nobuhiko Tanibatad3643932015-06-22 15:34:09 +0900732
733 for (i = 0; i < IVI_TEST_SURFACE_COUNT; i++)
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000734 ivisurfs[i] = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(i));
Nobuhiko Tanibatad3643932015-06-22 15:34:09 +0900735
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000736 runner_assert(lyt->layer_set_render_order(
Nobuhiko Tanibatad3643932015-06-22 15:34:09 +0900737 ivilayer, ivisurfs, IVI_TEST_SURFACE_COUNT) == IVI_SUCCEEDED);
738
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000739 lyt->commit_changes();
Nobuhiko Tanibatad3643932015-06-22 15:34:09 +0900740
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000741 runner_assert(lyt->get_surfaces_on_layer(
Nobuhiko Tanibatad3643932015-06-22 15:34:09 +0900742 ivilayer, &length, &array) == IVI_SUCCEEDED);
743 runner_assert(IVI_TEST_SURFACE_COUNT == length);
744 for (i = 0; i < IVI_TEST_SURFACE_COUNT; i++)
745 runner_assert(array[i] == ivisurfs[i]);
746
747 if (length > 0)
748 free(array);
749
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000750 runner_assert(lyt->layer_set_render_order(
Nobuhiko Tanibatad3643932015-06-22 15:34:09 +0900751 ivilayer, NULL, 0) == IVI_SUCCEEDED);
752
753 array = NULL;
754
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000755 lyt->commit_changes();
Nobuhiko Tanibatad3643932015-06-22 15:34:09 +0900756
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000757 runner_assert(lyt->get_surfaces_on_layer(
Nobuhiko Tanibatad3643932015-06-22 15:34:09 +0900758 ivilayer, &length, &array) == IVI_SUCCEEDED);
759 runner_assert(length == 0 && array == NULL);
760
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000761 lyt->layer_destroy(ivilayer);
Nobuhiko Tanibatad3643932015-06-22 15:34:09 +0900762}
763
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900764RUNNER_TEST(test_layer_render_order_destroy_one_surface_p1)
765{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000766 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900767 struct ivi_layout_layer *ivilayer;
768 struct ivi_layout_surface *ivisurfs[IVI_TEST_SURFACE_COUNT] = {};
769 struct ivi_layout_surface **array;
770 int32_t length = 0;
771 int32_t i;
772
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000773 ivilayer = lyt->layer_create_with_dimension(IVI_TEST_LAYER_ID(0), 200, 300);
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900774
775 for (i = 0; i < IVI_TEST_SURFACE_COUNT; i++)
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000776 ivisurfs[i] = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(i));
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900777
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000778 runner_assert(lyt->layer_set_render_order(
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900779 ivilayer, ivisurfs, IVI_TEST_SURFACE_COUNT) == IVI_SUCCEEDED);
780
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000781 lyt->commit_changes();
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900782
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000783 runner_assert(lyt->get_surfaces_on_layer(
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900784 ivilayer, &length, &array) == IVI_SUCCEEDED);
785 runner_assert(IVI_TEST_SURFACE_COUNT == length);
786 for (i = 0; i < length; i++)
787 runner_assert(array[i] == ivisurfs[i]);
788
789 if (length > 0)
790 free(array);
791}
792
793RUNNER_TEST(test_layer_render_order_destroy_one_surface_p2)
794{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000795 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900796 struct ivi_layout_layer *ivilayer;
797 struct ivi_layout_surface *ivisurfs[2] = {};
798 struct ivi_layout_surface **array;
799 int32_t length = 0;
800 int32_t i;
801
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000802 ivilayer = lyt->get_layer_from_id(IVI_TEST_LAYER_ID(0));
803 ivisurfs[0] = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
804 ivisurfs[1] = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(2));
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900805
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000806 runner_assert(lyt->get_surfaces_on_layer(
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900807 ivilayer, &length, &array) == IVI_SUCCEEDED);
808 runner_assert(2 == length);
809 for (i = 0; i < length; i++)
810 runner_assert(array[i] == ivisurfs[i]);
811
812 if (length > 0)
813 free(array);
814
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000815 lyt->layer_destroy(ivilayer);
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900816}
817
818RUNNER_TEST(layer_bad_render_order)
819{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000820 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900821 struct ivi_layout_layer *ivilayer;
822 struct ivi_layout_surface *ivisurfs[IVI_TEST_SURFACE_COUNT] = {};
823 struct ivi_layout_surface **array = NULL;
824 int32_t length = 0;
825 uint32_t i;
826
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000827 ivilayer = lyt->layer_create_with_dimension(IVI_TEST_LAYER_ID(0), 200, 300);
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900828
829 for (i = 0; i < IVI_TEST_SURFACE_COUNT; i++)
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000830 ivisurfs[i] = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(i));
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900831
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000832 runner_assert(lyt->layer_set_render_order(
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900833 NULL, ivisurfs, IVI_TEST_SURFACE_COUNT) == IVI_FAILED);
834
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000835 lyt->commit_changes();
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900836
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000837 runner_assert(lyt->get_surfaces_on_layer(
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900838 NULL, &length, &array) == IVI_FAILED);
839 runner_assert(length == 0 && array == NULL);
840
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000841 runner_assert(lyt->get_surfaces_on_layer(
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900842 ivilayer, NULL, &array) == IVI_FAILED);
843 runner_assert(array == NULL);
844
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000845 runner_assert(lyt->get_surfaces_on_layer(
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900846 ivilayer, &length, NULL) == IVI_FAILED);
847 runner_assert(length == 0);
848
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000849 lyt->layer_destroy(ivilayer);
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900850}
851
852RUNNER_TEST(commit_changes_after_render_order_set_surface_destroy)
853{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000854 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900855 struct ivi_layout_layer *ivilayer;
856 struct ivi_layout_surface *ivisurfs[IVI_TEST_SURFACE_COUNT] = {};
857 int i;
858
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000859 ivilayer = lyt->layer_create_with_dimension(IVI_TEST_LAYER_ID(0), 200, 300);
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900860
861 for (i = 0; i < IVI_TEST_SURFACE_COUNT; i++)
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000862 ivisurfs[i] = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(i));
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900863
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000864 runner_assert(lyt->layer_set_render_order(
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900865 ivilayer, ivisurfs, IVI_TEST_SURFACE_COUNT) == IVI_SUCCEEDED);
866}
867
868RUNNER_TEST(cleanup_layer)
869{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000870 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900871 struct ivi_layout_layer *ivilayer;
872
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000873 ivilayer = lyt->get_layer_from_id(IVI_TEST_LAYER_ID(0));
874 lyt->layer_destroy(ivilayer);
Nobuhiko Tanibata0671b4d2015-06-22 15:34:42 +0900875}
876
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900877static void
878test_surface_properties_changed_notification_callback(struct ivi_layout_surface *ivisurf,
879 const struct ivi_layout_surface_properties *prop,
880 enum ivi_layout_notification_mask mask,
881 void *userdata)
882{
883 struct test_context *ctx = userdata;
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000884 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900885
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000886 runner_assert_or_return(lyt->get_id_of_surface(ivisurf) == IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900887
888 ctx->user_flags = 1;
889}
890
891RUNNER_TEST(surface_properties_changed_notification)
892{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000893 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900894 const uint32_t id_surface = IVI_TEST_SURFACE_ID(0);
895 struct ivi_layout_surface *ivisurf;
896
897 ctx->user_flags = 0;
898
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000899 ivisurf = lyt->get_surface_from_id(id_surface);
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900900 runner_assert(ivisurf != NULL);
901
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000902 runner_assert(lyt->surface_add_notification(
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900903 ivisurf, test_surface_properties_changed_notification_callback, ctx) == IVI_SUCCEEDED);
904
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000905 lyt->commit_changes();
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900906
907 runner_assert(ctx->user_flags == 0);
908
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000909 runner_assert(lyt->surface_set_destination_rectangle(
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900910 ivisurf, 20, 30, 200, 300) == IVI_SUCCEEDED);
911
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000912 lyt->commit_changes();
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900913
914 runner_assert(ctx->user_flags == 1);
915
916 ctx->user_flags = 0;
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000917 runner_assert(lyt->surface_set_destination_rectangle(
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900918 ivisurf, 20, 30, 200, 300) == IVI_SUCCEEDED);
919
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000920 lyt->commit_changes();
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900921
922 runner_assert(ctx->user_flags == 0);
923
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000924 lyt->surface_remove_notification(ivisurf);
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900925 ctx->user_flags = 0;
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000926 runner_assert(lyt->surface_set_destination_rectangle(
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900927 ivisurf, 40, 50, 400, 500) == IVI_SUCCEEDED);
928
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000929 lyt->commit_changes();
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900930
931 runner_assert(ctx->user_flags == 0);
932}
933
934static void
935test_surface_configure_notification_callback(struct ivi_layout_surface *ivisurf,
936 void *userdata)
937{
938 struct test_context *ctx = userdata;
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000939 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900940
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000941 runner_assert_or_return(lyt->get_id_of_surface(ivisurf) == IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900942
943 ctx->user_flags = 1;
944}
945
946RUNNER_TEST(surface_configure_notification_p1)
947{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000948 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900949
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000950 runner_assert(IVI_SUCCEEDED == lyt->add_notification_configure_surface(test_surface_configure_notification_callback, ctx));
951 lyt->commit_changes();
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900952
953 ctx->user_flags = 0;
954}
955
956RUNNER_TEST(surface_configure_notification_p2)
957{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000958 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900959
960 runner_assert(ctx->user_flags == 1);
961
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000962 lyt->remove_notification_configure_surface(test_surface_configure_notification_callback, ctx);
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900963 ctx->user_flags = 0;
964}
965
966RUNNER_TEST(surface_configure_notification_p3)
967{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000968 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900969
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000970 lyt->commit_changes();
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900971 runner_assert(ctx->user_flags == 0);
972}
973
974static void
975test_surface_create_notification_callback(struct ivi_layout_surface *ivisurf,
976 void *userdata)
977{
978 struct test_context *ctx = userdata;
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000979 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900980
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000981 runner_assert_or_return(lyt->get_id_of_surface(ivisurf) == IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900982
983 ctx->user_flags = 1;
984}
985
986RUNNER_TEST(surface_create_notification_p1)
987{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000988 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900989
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000990 runner_assert(lyt->add_notification_create_surface(
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900991 test_surface_create_notification_callback, ctx) == IVI_SUCCEEDED);
992
993 ctx->user_flags = 0;
994}
995
996RUNNER_TEST(surface_create_notification_p2)
997{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +0000998 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +0900999
1000 runner_assert(ctx->user_flags == 1);
1001
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +00001002 lyt->remove_notification_create_surface(
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +09001003 test_surface_create_notification_callback, ctx);
1004 ctx->user_flags = 0;
1005}
1006
1007RUNNER_TEST(surface_create_notification_p3)
1008{
1009 runner_assert(ctx->user_flags == 0);
1010}
1011
1012static void
1013test_surface_remove_notification_callback(struct ivi_layout_surface *ivisurf,
1014 void *userdata)
1015{
1016 struct test_context *ctx = userdata;
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +00001017 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +09001018
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +00001019 runner_assert_or_return(lyt->get_id_of_surface(ivisurf) == IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +09001020
1021 ctx->user_flags = 1;
1022}
1023
1024RUNNER_TEST(surface_remove_notification_p1)
1025{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +00001026 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +09001027
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +00001028 runner_assert(lyt->add_notification_remove_surface(
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +09001029 test_surface_remove_notification_callback, ctx) == IVI_SUCCEEDED);
1030
1031 ctx->user_flags = 0;
1032}
1033
1034RUNNER_TEST(surface_remove_notification_p2)
1035{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +00001036 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +09001037
1038 runner_assert(ctx->user_flags == 1);
1039
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +00001040 lyt->remove_notification_remove_surface(test_surface_remove_notification_callback, ctx);
Nobuhiko Tanibata915303a2015-06-22 15:35:58 +09001041 ctx->user_flags = 0;
1042}
1043
1044RUNNER_TEST(surface_remove_notification_p3)
1045{
1046 runner_assert(ctx->user_flags == 0);
1047}
Nobuhiko Tanibata0af22d42015-06-22 15:36:21 +09001048
1049static void
1050test_surface_bad_properties_changed_notification_callback(struct ivi_layout_surface *ivisurf,
1051 const struct ivi_layout_surface_properties *prop,
1052 enum ivi_layout_notification_mask mask,
1053 void *userdata)
1054{
1055}
1056
1057RUNNER_TEST(surface_bad_properties_changed_notification)
1058{
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +00001059 const struct ivi_layout_interface *lyt = ctx->layout_interface;
Nobuhiko Tanibata0af22d42015-06-22 15:36:21 +09001060 struct ivi_layout_surface *ivisurf;
1061
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +00001062 ivisurf = lyt->get_surface_from_id(IVI_TEST_SURFACE_ID(0));
Nobuhiko Tanibata0af22d42015-06-22 15:36:21 +09001063 runner_assert(ivisurf != NULL);
1064
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +00001065 runner_assert(lyt->surface_add_notification(
Nobuhiko Tanibata0af22d42015-06-22 15:36:21 +09001066 NULL, test_surface_bad_properties_changed_notification_callback, NULL) == IVI_FAILED);
Ucan, Emre \(ADITG/SW1\)0c0e51e2015-10-15 14:51:41 +00001067 runner_assert(lyt->surface_add_notification(
Nobuhiko Tanibata0af22d42015-06-22 15:36:21 +09001068 ivisurf, NULL, NULL) == IVI_FAILED);
1069}