1 /***************************************************************************
3 * Copyright 2010-2014 BMW Car IT GmbH
4 * Copyright (C) 2012 DENSO CORPORATION and Robert Bosch Car Multimedia Gmbh
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 ****************************************************************************/
21 #include <gtest/gtest.h>
26 #include "ilm_client.h"
27 #include "ilm_control.h"
30 class IlmCommandTest : public TestBase, public ::testing::Test {
34 ASSERT_EQ(ILM_SUCCESS, ilm_initWithNativedisplay((t_ilm_nativedisplay)wlDisplay));
39 //print_lmc_get_scene();
40 t_ilm_layer* layers = NULL;
42 EXPECT_EQ(ILM_SUCCESS, ilm_getLayerIDs(&numLayer, &layers));
43 for (t_ilm_int i=0; i<numLayer; i++)
45 EXPECT_EQ(ILM_SUCCESS, ilm_layerRemove(layers[i]));
49 t_ilm_surface* surfaces = NULL;
50 t_ilm_int numSurfaces=0;
51 EXPECT_EQ(ILM_SUCCESS, ilm_getSurfaceIDs(&numSurfaces, &surfaces));
52 for (t_ilm_int i=0; i<numSurfaces; i++)
54 EXPECT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surfaces[i]));
57 EXPECT_EQ(ILM_SUCCESS, ilm_commitChanges());
58 EXPECT_EQ(ILM_SUCCESS, ilm_destroy());
62 TEST_F(IlmCommandTest, SetGetSurfaceDimension) {
65 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 10, 10, ILM_PIXELFORMAT_RGBA_8888, &surface));
67 t_ilm_uint dim[2] = {15, 25};
68 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetDimension(surface, dim));
69 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
71 t_ilm_uint dimreturned[2];
72 EXPECT_EQ(ILM_SUCCESS, ilm_surfaceGetDimension(surface, dimreturned));
73 EXPECT_EQ(dim[0], dimreturned[0]);
74 EXPECT_EQ(dim[1], dimreturned[1]);
77 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface));
80 TEST_F(IlmCommandTest, SetGetLayerDimension) {
83 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(&layer, 800, 480));
85 t_ilm_uint dim[2] = {115, 125};
86 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetDimension(layer, dim));
87 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
89 t_ilm_uint dimreturned[2];
90 ASSERT_EQ(ILM_SUCCESS, ilm_layerGetDimension(layer, dimreturned));
91 EXPECT_EQ(dim[0], dimreturned[0]);
92 EXPECT_EQ(dim[1], dimreturned[1]);
95 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layer));
98 TEST_F(IlmCommandTest, SetGetSurfacePosition) {
101 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 10, 10, ILM_PIXELFORMAT_RGBA_8888, &surface));
103 t_ilm_uint pos[2] = {15, 25};
104 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetPosition(surface, pos));
105 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
107 t_ilm_uint posreturned[2];
108 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetPosition(surface, posreturned));
109 EXPECT_EQ(pos[0], posreturned[0]);
110 EXPECT_EQ(pos[1], posreturned[1]);
113 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface));
116 TEST_F(IlmCommandTest, SetGetLayerPosition) {
119 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(&layer, 800, 480));
121 t_ilm_uint pos[2] = {115, 125};
122 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetPosition(layer, pos));
123 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
125 t_ilm_uint posreturned[2];
126 ASSERT_EQ(ILM_SUCCESS, ilm_layerGetPosition(layer, posreturned));
127 ASSERT_EQ(pos[0], posreturned[0]);
128 ASSERT_EQ(pos[1], posreturned[1]);
131 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layer));
134 TEST_F(IlmCommandTest, SetGetSurfaceOrientation) {
136 ilmOrientation returned;
137 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_8888, &surface));
139 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetOrientation(surface, ILM_NINETY));
140 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
141 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetOrientation(surface, &returned));
142 ASSERT_EQ(ILM_NINETY, returned);
144 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetOrientation(surface, ILM_ONEHUNDREDEIGHTY));
145 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
146 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetOrientation(surface, &returned));
147 ASSERT_EQ(ILM_ONEHUNDREDEIGHTY, returned);
149 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetOrientation(surface, ILM_TWOHUNDREDSEVENTY));
150 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
151 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetOrientation(surface, &returned));
152 ASSERT_EQ(ILM_TWOHUNDREDSEVENTY, returned);
154 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetOrientation(surface, ILM_ZERO));
155 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
156 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetOrientation(surface, &returned));
157 ASSERT_EQ(ILM_ZERO, returned);
160 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface));
163 TEST_F(IlmCommandTest, SetGetLayerOrientation) {
165 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(&layer, 800, 480));
166 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
167 ilmOrientation returned;
169 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetOrientation(layer, ILM_NINETY));
170 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
171 ASSERT_EQ(ILM_SUCCESS, ilm_layerGetOrientation(layer, &returned));
172 ASSERT_EQ(ILM_NINETY, returned);
174 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetOrientation(layer, ILM_ONEHUNDREDEIGHTY));
175 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
176 ASSERT_EQ(ILM_SUCCESS, ilm_layerGetOrientation(layer, &returned));
177 ASSERT_EQ(ILM_ONEHUNDREDEIGHTY, returned);
179 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetOrientation(layer, ILM_TWOHUNDREDSEVENTY));
180 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
181 ASSERT_EQ(ILM_SUCCESS, ilm_layerGetOrientation(layer, &returned));
182 ASSERT_EQ(ILM_TWOHUNDREDSEVENTY, returned);
184 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetOrientation(layer, ILM_ZERO));
185 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
186 ASSERT_EQ(ILM_SUCCESS, ilm_layerGetOrientation(layer, &returned));
187 ASSERT_EQ(ILM_ZERO, returned);
190 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layer));
193 TEST_F(IlmCommandTest, SetGetSurfaceOpacity) {
198 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_8888, &surface1));
199 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_8888, &surface2));
201 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetOpacity(surface1, 0.88));
202 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
203 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetOpacity(surface1, &opacity));
204 EXPECT_FLOAT_EQ(0.88, opacity);
206 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetOpacity(surface2, 0.001));
207 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
208 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetOpacity(surface2, &opacity));
209 EXPECT_FLOAT_EQ(0.001, opacity);
212 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface1));
213 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface2));
216 TEST_F(IlmCommandTest, SetGetLayerOpacity) {
221 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(&layer1, 800, 480));
222 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(&layer2, 800, 480));
224 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetOpacity(layer1, 0.88));
225 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
226 ASSERT_EQ(ILM_SUCCESS, ilm_layerGetOpacity(layer1, &opacity));
227 EXPECT_FLOAT_EQ(0.88, opacity);
229 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetOpacity(layer2, 0.001));
230 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
231 ASSERT_EQ(ILM_SUCCESS, ilm_layerGetOpacity(layer2, &opacity));
232 EXPECT_FLOAT_EQ(0.001, opacity);
235 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layer1));
236 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layer2));
239 TEST_F(IlmCommandTest, SetGetSurfaceVisibility) {
241 t_ilm_bool visibility;
243 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_8888, &surface1));
245 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetVisibility(surface1, ILM_TRUE));
246 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
247 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetVisibility(surface1, &visibility));
248 ASSERT_EQ(ILM_TRUE, visibility);
250 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetVisibility(surface1, ILM_FALSE));
251 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
252 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetVisibility(surface1, &visibility));
253 ASSERT_EQ(ILM_FALSE, visibility);
255 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetVisibility(surface1, ILM_TRUE));
256 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
257 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetVisibility(surface1, &visibility));
258 ASSERT_EQ(ILM_TRUE, visibility);
261 TEST_F(IlmCommandTest, SetGetLayerVisibility) {
263 t_ilm_bool visibility;
265 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(&layer1, 800, 480));
267 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetVisibility(layer1, ILM_TRUE));
268 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
269 ASSERT_EQ(ILM_SUCCESS, ilm_layerGetVisibility(layer1, &visibility));
270 ASSERT_EQ(ILM_TRUE, visibility);
272 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetVisibility(layer1, ILM_FALSE));
273 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
274 ASSERT_EQ(ILM_SUCCESS, ilm_layerGetVisibility(layer1, &visibility));
275 ASSERT_EQ(ILM_FALSE, visibility);
277 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetVisibility(layer1, ILM_TRUE));
278 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
279 ASSERT_EQ(ILM_SUCCESS, ilm_layerGetVisibility(layer1, &visibility));
280 ASSERT_EQ(ILM_TRUE, visibility);
283 TEST_F(IlmCommandTest, ilm_getScreenIDs) {
284 t_ilm_uint numberOfScreens = 0;
285 t_ilm_uint* screenIDs = NULL;
286 ASSERT_EQ(ILM_SUCCESS, ilm_getScreenIDs(&numberOfScreens, &screenIDs));
287 ASSERT_GT(numberOfScreens, 0u);
290 TEST_F(IlmCommandTest, ilm_getScreenResolution_SingleScreen) {
291 t_ilm_uint numberOfScreens = 0;
292 t_ilm_uint* screenIDs = NULL;
293 ASSERT_EQ(ILM_SUCCESS, ilm_getScreenIDs(&numberOfScreens, &screenIDs));
294 ASSERT_TRUE(numberOfScreens>0);
296 uint firstScreen = screenIDs[0];
297 t_ilm_uint width = 0, height = 0;
298 ASSERT_EQ(ILM_SUCCESS, ilm_getScreenResolution(firstScreen, &width, &height));
299 ASSERT_GT(width, 0u);
300 ASSERT_GT(height, 0u);
303 TEST_F(IlmCommandTest, ilm_getScreenResolution_MultiScreen) {
304 t_ilm_uint numberOfScreens = 0;
305 t_ilm_uint* screenIDs = NULL;
306 ASSERT_EQ(ILM_SUCCESS, ilm_getScreenIDs(&numberOfScreens, &screenIDs));
307 ASSERT_TRUE(numberOfScreens>0);
309 for (uint screenIndex = 0; screenIndex < numberOfScreens; ++screenIndex)
311 uint screen = screenIDs[screenIndex];
312 t_ilm_uint width = 0, height = 0;
313 ASSERT_EQ(ILM_SUCCESS, ilm_getScreenResolution(screen, &width, &height));
314 ASSERT_GT(width, 0u);
315 ASSERT_GT(height, 0u);
319 TEST_F(IlmCommandTest, ilm_getLayerIDs) {
323 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(&layer1, 800, 480));
324 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(&layer2, 800, 480));
325 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
329 ASSERT_EQ(ILM_SUCCESS, ilm_getLayerIDs(&length, &IDs));
331 ASSERT_EQ(layer1, IDs[0]);
332 ASSERT_EQ(layer2, IDs[1]);
336 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layer1));
337 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layer2));
340 TEST_F(IlmCommandTest, ilm_getLayerIDsOfScreen) {
341 t_ilm_layer layer1 = 3246;
342 t_ilm_layer layer2 = 46586;
343 t_ilm_uint roLength = 2;
344 t_ilm_layer idRenderOrder[2] = {layer1, layer2};
345 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(&layer1, 800, 480));
346 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(&layer2, 800, 480));
347 ASSERT_EQ(ILM_SUCCESS, ilm_displaySetRenderOrder(0, idRenderOrder, roLength));
348 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
350 t_ilm_int length = 0;
351 t_ilm_layer* IDs = 0;
352 ASSERT_EQ(ILM_SUCCESS, ilm_getLayerIDsOnScreen(0, &length, &IDs));
354 ASSERT_EQ(2, length);
355 EXPECT_EQ(layer1, IDs[0]);
356 EXPECT_EQ(layer2, IDs[1]);
359 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layer1));
360 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layer2));
363 TEST_F(IlmCommandTest, ilm_getSurfaceIDs) {
364 uint surface1 = 3246;
365 uint surface2 = 46586;
367 t_ilm_int old_length;
369 ASSERT_EQ(ILM_SUCCESS, ilm_getSurfaceIDs(&old_length, &IDs));
370 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_8888, &surface1));
371 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_8888, &surface2));
372 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
376 ASSERT_EQ(ILM_SUCCESS, ilm_getSurfaceIDs(&length, &IDs));
378 ASSERT_EQ(old_length+2, length);
379 ASSERT_EQ(surface1, IDs[old_length]);
380 ASSERT_EQ(surface2, IDs[old_length+1]);
384 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface1));
385 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface2));
388 TEST_F(IlmCommandTest, ilm_surfaceCreate_Remove) {
389 uint surface1 = 3246;
390 uint surface2 = 46586;
391 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_8888, &surface1));
392 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_8888, &surface2));
393 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
397 ASSERT_EQ(ILM_SUCCESS, ilm_getSurfaceIDs(&length, &IDs));
399 ASSERT_EQ(length, 2);
400 ASSERT_EQ(surface1, IDs[0]);
401 ASSERT_EQ(surface2, IDs[1]);
403 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface1));
404 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
405 ASSERT_EQ(ILM_SUCCESS, ilm_getSurfaceIDs(&length, &IDs));
406 ASSERT_EQ(length, 1);
407 ASSERT_EQ(surface2, IDs[0]);
409 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface2));
410 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
411 ASSERT_EQ(ILM_SUCCESS, ilm_getSurfaceIDs(&length, &IDs));
412 ASSERT_EQ(length, 0);
415 TEST_F(IlmCommandTest, ilm_layerCreate_Remove) {
418 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(&layer1, 800, 480));
419 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(&layer2, 800, 480));
420 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
424 ASSERT_EQ(ILM_SUCCESS, ilm_getLayerIDs(&length, &IDs));
426 ASSERT_EQ(length, 2);
427 ASSERT_EQ(layer1, IDs[0]);
428 ASSERT_EQ(layer2, IDs[1]);
431 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layer1));
432 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
433 ASSERT_EQ(ILM_SUCCESS, ilm_getLayerIDs(&length, &IDs));
434 ASSERT_EQ(length, 1);
435 ASSERT_EQ(layer2, IDs[0]);
438 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layer2));
439 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
440 ASSERT_EQ(ILM_SUCCESS, ilm_getLayerIDs(&length, &IDs));
441 ASSERT_EQ(length, 0);
445 TEST_F(IlmCommandTest, ilm_surface_initialize) {
446 uint surface_10 = 10;
447 uint surface_20 = 20;
448 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceInitialize(&surface_10));
449 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceInitialize(&surface_20));
453 ASSERT_EQ(ILM_SUCCESS, ilm_getSurfaceIDs(&length, &IDs));
455 ASSERT_EQ(length, 2);
456 ASSERT_EQ(surface_10, IDs[0]);
457 ASSERT_EQ(surface_20, IDs[1]);
460 TEST_F(IlmCommandTest, ilm_layerAddSurface_ilm_layerRemoveSurface_ilm_getSurfaceIDsOnLayer) {
462 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(&layer, 800, 480));
463 uint surface1 = 3246;
464 uint surface2 = 46586;
465 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_8888, &surface1));
466 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_8888, &surface2));
467 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
471 ASSERT_EQ(ILM_SUCCESS, ilm_getSurfaceIDsOnLayer(layer, &length, &IDs));
472 ASSERT_EQ(length, 0);
475 ASSERT_EQ(ILM_SUCCESS, ilm_layerAddSurface(layer, surface1));
476 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
477 ASSERT_EQ(ILM_SUCCESS, ilm_getSurfaceIDsOnLayer(layer, &length, &IDs));
478 ASSERT_EQ(length, 1);
479 ASSERT_EQ(surface1, IDs[0]);
482 ASSERT_EQ(ILM_SUCCESS, ilm_layerAddSurface(layer, surface2));
483 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
484 ASSERT_EQ(ILM_SUCCESS, ilm_getSurfaceIDsOnLayer(layer, &length, &IDs));
485 ASSERT_EQ(length, 2);
486 ASSERT_EQ(surface1, IDs[0]);
487 ASSERT_EQ(surface2, IDs[1]);
490 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemoveSurface(layer, surface1));
491 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
492 ASSERT_EQ(ILM_SUCCESS, ilm_getSurfaceIDsOnLayer(layer, &length, &IDs));
493 ASSERT_EQ(length, 1);
494 ASSERT_EQ(surface2, IDs[0]);
497 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemoveSurface(layer, surface2));
498 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
499 ASSERT_EQ(ILM_SUCCESS, ilm_getSurfaceIDsOnLayer(layer, &length, &IDs));
500 ASSERT_EQ(length, 0);
504 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface1));
505 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface2));
506 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layer));
509 TEST_F(IlmCommandTest, ilm_getPropertiesOfSurface_ilm_surfaceSetSourceRectangle_ilm_surfaceSetDestinationRectangle_ilm_surfaceSetChromaKey) {
510 t_ilm_uint surface = 0xbeef;
511 t_ilm_int chromaKey[3] = {3, 22, 111};
512 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_8888, &surface));
513 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
515 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetOpacity(surface, 0.8765));
516 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetSourceRectangle(surface, 89, 6538, 638, 4));
517 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetDestinationRectangle(surface, 54, 47, 947, 9));
518 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetOrientation(surface, ILM_NINETY));
519 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetVisibility(surface, true));
520 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetChromaKey(surface, &chromaKey[0]));
521 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
523 ilmSurfaceProperties surfaceProperties;
524 ASSERT_EQ(ILM_SUCCESS, ilm_getPropertiesOfSurface(surface, &surfaceProperties));
525 ASSERT_EQ(0.8765, surfaceProperties.opacity);
526 ASSERT_EQ(89u, surfaceProperties.sourceX);
527 ASSERT_EQ(6538u, surfaceProperties.sourceY);
528 ASSERT_EQ(638u, surfaceProperties.sourceWidth);
529 ASSERT_EQ(4u, surfaceProperties.sourceHeight);
530 ASSERT_EQ(54u, surfaceProperties.destX);
531 ASSERT_EQ(47u, surfaceProperties.destY);
532 ASSERT_EQ(947u, surfaceProperties.destWidth);
533 ASSERT_EQ(9u, surfaceProperties.destHeight);
534 ASSERT_EQ(ILM_NINETY, surfaceProperties.orientation);
535 ASSERT_TRUE( surfaceProperties.visibility);
536 ASSERT_TRUE( surfaceProperties.chromaKeyEnabled);
537 ASSERT_EQ(3u, surfaceProperties.chromaKeyRed);
538 ASSERT_EQ(22u, surfaceProperties.chromaKeyGreen);
539 ASSERT_EQ(111u, surfaceProperties.chromaKeyBlue);
541 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetOpacity(surface, 0.436));
542 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetSourceRectangle(surface, 784, 546, 235, 78));
543 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetDestinationRectangle(surface, 536, 5372, 3, 4316));
544 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetOrientation(surface, ILM_TWOHUNDREDSEVENTY));
545 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetVisibility(surface, false));
546 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceSetChromaKey(surface, NULL));
547 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
549 ilmSurfaceProperties surfaceProperties2;
550 ASSERT_EQ(ILM_SUCCESS, ilm_getPropertiesOfSurface(surface, &surfaceProperties2));
551 ASSERT_EQ(0.436, surfaceProperties2.opacity);
552 ASSERT_EQ(784u, surfaceProperties2.sourceX);
553 ASSERT_EQ(546u, surfaceProperties2.sourceY);
554 ASSERT_EQ(235u, surfaceProperties2.sourceWidth);
555 ASSERT_EQ(78u, surfaceProperties2.sourceHeight);
556 ASSERT_EQ(536u, surfaceProperties2.destX);
557 ASSERT_EQ(5372u, surfaceProperties2.destY);
558 ASSERT_EQ(3u, surfaceProperties2.destWidth);
559 ASSERT_EQ(4316u, surfaceProperties2.destHeight);
560 ASSERT_EQ(ILM_TWOHUNDREDSEVENTY, surfaceProperties2.orientation);
561 ASSERT_FALSE(surfaceProperties2.visibility);
562 ASSERT_FALSE(surfaceProperties2.chromaKeyEnabled);
565 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface));
568 TEST_F(IlmCommandTest, ilm_getPropertiesOfLayer_ilm_layerSetSourceRectangle_ilm_layerSetDestinationRectangle_ilm_layerSetChromaKey) {
569 t_ilm_uint layer = 0xbeef;
570 t_ilm_int chromaKey[3] = {3, 22, 111};
571 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(&layer, 800, 480));
572 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
574 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetOpacity(layer, 0.8765));
575 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetSourceRectangle(layer, 89, 6538, 638, 4));
576 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetDestinationRectangle(layer, 54, 47, 947, 9));
577 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetOrientation(layer, ILM_NINETY));
578 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetVisibility(layer, true));
579 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetChromaKey(layer, chromaKey));
580 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
582 ilmLayerProperties layerProperties1;
583 ASSERT_EQ(ILM_SUCCESS, ilm_getPropertiesOfLayer(layer, &layerProperties1));
584 ASSERT_EQ(0.8765, layerProperties1.opacity);
585 ASSERT_EQ(89u, layerProperties1.sourceX);
586 ASSERT_EQ(6538u, layerProperties1.sourceY);
587 ASSERT_EQ(638u, layerProperties1.sourceWidth);
588 ASSERT_EQ(4u, layerProperties1.sourceHeight);
589 ASSERT_EQ(54u, layerProperties1.destX);
590 ASSERT_EQ(47u, layerProperties1.destY);
591 ASSERT_EQ(947u, layerProperties1.destWidth);
592 ASSERT_EQ(9u, layerProperties1.destHeight);
593 ASSERT_EQ(ILM_NINETY, layerProperties1.orientation);
594 ASSERT_TRUE( layerProperties1.visibility);
595 ASSERT_TRUE(layerProperties1.chromaKeyEnabled);
596 ASSERT_EQ(3u, layerProperties1.chromaKeyRed);
597 ASSERT_EQ(22u, layerProperties1.chromaKeyGreen);
598 ASSERT_EQ(111u, layerProperties1.chromaKeyBlue);
600 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetOpacity(layer, 0.436));
601 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetSourceRectangle(layer, 784, 546, 235, 78));
602 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetDestinationRectangle(layer, 536, 5372, 3, 4316));
603 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetOrientation(layer, ILM_TWOHUNDREDSEVENTY));
604 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetVisibility(layer, false));
605 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetChromaKey(layer, NULL));
606 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
608 ilmLayerProperties layerProperties2;
609 ASSERT_EQ(ILM_SUCCESS, ilm_getPropertiesOfLayer(layer, &layerProperties2));
610 ASSERT_EQ(0.436, layerProperties2.opacity);
611 ASSERT_EQ(784u, layerProperties2.sourceX);
612 ASSERT_EQ(546u, layerProperties2.sourceY);
613 ASSERT_EQ(235u, layerProperties2.sourceWidth);
614 ASSERT_EQ(78u, layerProperties2.sourceHeight);
615 ASSERT_EQ(536u, layerProperties2.destX);
616 ASSERT_EQ(5372u, layerProperties2.destY);
617 ASSERT_EQ(3u, layerProperties2.destWidth);
618 ASSERT_EQ(4316u, layerProperties2.destHeight);
619 ASSERT_EQ(ILM_TWOHUNDREDSEVENTY, layerProperties2.orientation);
620 ASSERT_FALSE(layerProperties2.visibility);
621 ASSERT_FALSE(layerProperties2.chromaKeyEnabled);
624 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layer));
627 TEST_F(IlmCommandTest, ilm_takeScreenshot) {
628 // make sure the file is not there before
629 FILE* f = fopen("/tmp/test.bmp", "r");
632 int result = remove("/tmp/test.bmp");
633 ASSERT_EQ(0, result);
636 ASSERT_EQ(ILM_SUCCESS, ilm_takeScreenshot(0, "/tmp/test.bmp"));
639 f = fopen("/tmp/test.bmp", "r");
640 ASSERT_TRUE(f!=NULL);
644 TEST_F(IlmCommandTest, ilm_surfaceGetPixelformat) {
645 t_ilm_uint surface1=0;
646 t_ilm_uint surface2=1;
647 t_ilm_uint surface3=2;
648 t_ilm_uint surface4=3;
649 t_ilm_uint surface5=4;
650 t_ilm_uint surface6=5;
651 t_ilm_uint surface7=6;
653 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_4444, &surface1));
654 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_5551, &surface2));
655 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_6661, &surface3));
656 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_8888, &surface4));
657 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGB_565, &surface5));
658 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGB_888, &surface6));
659 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_R_8, &surface7));
660 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
662 ilmPixelFormat p1, p2, p3, p4, p5, p6, p7;
664 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetPixelformat(surface1, &p1));
665 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetPixelformat(surface2, &p2));
666 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetPixelformat(surface3, &p3));
667 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetPixelformat(surface4, &p4));
668 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetPixelformat(surface5, &p5));
669 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetPixelformat(surface6, &p6));
670 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceGetPixelformat(surface7, &p7));
672 ASSERT_EQ(ILM_PIXELFORMAT_RGBA_4444, p1);
673 ASSERT_EQ(ILM_PIXELFORMAT_RGBA_5551, p2);
674 ASSERT_EQ(ILM_PIXELFORMAT_RGBA_6661, p3);
675 ASSERT_EQ(ILM_PIXELFORMAT_RGBA_8888, p4);
676 ASSERT_EQ(ILM_PIXELFORMAT_RGB_565, p5);
677 ASSERT_EQ(ILM_PIXELFORMAT_RGB_888, p6);
678 ASSERT_EQ(ILM_PIXELFORMAT_R_8, p7);
681 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface1));
682 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface2));
683 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface3));
684 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface4));
685 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface5));
686 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface6));
687 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface7));
690 TEST_F(IlmCommandTest, ilm_keyboard_focus)
696 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_8888, &surface1));
697 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_8888, &surface2));
699 ASSERT_EQ(ILM_SUCCESS, ilm_GetKeyboardFocusSurfaceId(&surface));
700 EXPECT_EQ(0xFFFFFFFF, surface);
702 ASSERT_EQ(ILM_SUCCESS, ilm_SetKeyboardFocusOn(surface1));
703 ASSERT_EQ(ILM_SUCCESS, ilm_GetKeyboardFocusSurfaceId(&surface));
704 EXPECT_EQ(surface1, surface);
707 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface1));
708 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface2));
711 TEST_F(IlmCommandTest, ilm_input_event_acceptance) {
715 ilmSurfaceProperties surfaceProperties;
717 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_8888, &surface1));
718 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 0, 0, ILM_PIXELFORMAT_RGBA_8888, &surface2));
720 ASSERT_EQ(ILM_SUCCESS, ilm_getPropertiesOfSurface(surface1, &surfaceProperties));
721 EXPECT_EQ(ILM_INPUT_DEVICE_ALL, surfaceProperties.inputDevicesAcceptance);
723 ASSERT_EQ(ILM_SUCCESS, ilm_UpdateInputEventAcceptanceOn(surface1, (ilmInputDevice) (ILM_INPUT_DEVICE_KEYBOARD | ILM_INPUT_DEVICE_POINTER), false));
724 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
727 ASSERT_EQ(ILM_SUCCESS, ilm_getPropertiesOfSurface(surface1, &surfaceProperties));
728 EXPECT_FALSE(surfaceProperties.inputDevicesAcceptance & ILM_INPUT_DEVICE_KEYBOARD);
729 EXPECT_FALSE(surfaceProperties.inputDevicesAcceptance & ILM_INPUT_DEVICE_POINTER);
730 EXPECT_TRUE(surfaceProperties.inputDevicesAcceptance & ILM_INPUT_DEVICE_TOUCH);
732 ASSERT_EQ(ILM_SUCCESS, ilm_SetKeyboardFocusOn(surface1));
733 ASSERT_EQ(ILM_SUCCESS, ilm_GetKeyboardFocusSurfaceId(&surface));
734 EXPECT_NE(surface1, surface);
737 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface1));
738 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surface2));
741 TEST_F(IlmCommandTest, SetGetOptimizationMode) {
743 ilmOptimizationMode mode;
744 ilmOptimizationMode retmode;
746 id = ILM_OPT_MULTITEXTURE;
747 mode = ILM_OPT_MODE_FORCE_OFF;
748 ASSERT_EQ(ILM_SUCCESS, ilm_SetOptimizationMode(id, mode));
749 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
750 ASSERT_EQ(ILM_SUCCESS, ilm_GetOptimizationMode(id, &retmode));
751 ASSERT_EQ(mode, retmode);
753 id = ILM_OPT_SKIP_CLEAR;
754 mode = ILM_OPT_MODE_TOGGLE;
755 ASSERT_EQ(ILM_SUCCESS, ilm_SetOptimizationMode(id, mode));
756 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
757 ASSERT_EQ(ILM_SUCCESS, ilm_GetOptimizationMode(id, &retmode));
758 ASSERT_EQ(mode, retmode);
760 id = ILM_OPT_MULTITEXTURE;
761 mode = ILM_OPT_MODE_HEURISTIC;
762 ASSERT_EQ(ILM_SUCCESS, ilm_SetOptimizationMode(id, mode));
763 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
764 ASSERT_EQ(ILM_SUCCESS, ilm_GetOptimizationMode(id, &retmode));
765 ASSERT_EQ(mode, retmode);
768 TEST_F(IlmCommandTest, ilm_getPropertiesOfScreen) {
769 t_ilm_uint numberOfScreens = 0;
770 t_ilm_uint* screenIDs = NULL;
771 ASSERT_EQ(ILM_SUCCESS, ilm_getScreenIDs(&numberOfScreens, &screenIDs));
772 ASSERT_TRUE(numberOfScreens>0);
774 t_ilm_display screen = screenIDs[0];
775 ilmScreenProperties screenProperties;
777 t_ilm_layer layerIds[3] = {100, 200, 300};//t_ilm_layer layerIds[3] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
778 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(layerIds, 800, 480));
779 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(layerIds + 1, 800, 480));
780 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(layerIds + 2, 800, 480));
782 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
784 ASSERT_EQ(ILM_SUCCESS, ilm_displaySetRenderOrder(screen, layerIds, 3));
786 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
789 ASSERT_EQ(ILM_SUCCESS, ilm_getPropertiesOfScreen(screen, &screenProperties));
790 ASSERT_EQ(3, screenProperties.layerCount);
791 ASSERT_EQ(layerIds[0], screenProperties.layerIds[0]);
792 ASSERT_EQ(layerIds[1], screenProperties.layerIds[1]);
793 ASSERT_EQ(layerIds[2], screenProperties.layerIds[2]);
795 ASSERT_GT(screenProperties.screenWidth, 0u);
796 ASSERT_GT(screenProperties.screenHeight, 0u);
798 t_ilm_uint numberOfHardwareLayers;
799 ASSERT_EQ(ILM_SUCCESS, ilm_getNumberOfHardwareLayers(screen, &numberOfHardwareLayers));
800 ASSERT_EQ(numberOfHardwareLayers, screenProperties.harwareLayerCount);
803 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layerIds[0]));
804 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layerIds[1]));
805 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layerIds[2]));
808 TEST_F(IlmCommandTest, DisplaySetRenderOrder_growing) {
809 //prepare needed layers
810 t_ilm_layer renderOrder[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
811 t_ilm_uint layerCount = sizeof(renderOrder) / sizeof(renderOrder[0]);
813 for (unsigned int i = 0; i < layerCount; ++i)
815 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(renderOrder + i, 300, 300));
816 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
819 t_ilm_display* screenIDs;
820 t_ilm_uint screenCount;
821 ASSERT_EQ(ILM_SUCCESS, ilm_getScreenIDs(&screenCount, &screenIDs));
823 for(unsigned int i = 0; i < screenCount; ++i)
825 t_ilm_display screen = screenIDs[i];
826 ilmScreenProperties screenProps;
828 //trying different render orders with increasing sizes
829 for (unsigned int j = layerCount; j <= layerCount; --j) // note: using overflow here
831 //put them from end to beginning, so that in each loop iteration the order of layers change
832 ASSERT_EQ(ILM_SUCCESS, ilm_displaySetRenderOrder(screen, renderOrder + j, layerCount - j));
833 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
834 ASSERT_EQ(ILM_SUCCESS, ilm_getPropertiesOfScreen(screen, &screenProps));
836 ASSERT_EQ(layerCount - j, screenProps.layerCount);
837 for(unsigned int k = 0; k < layerCount - j; ++k)
839 ASSERT_EQ(renderOrder[j + k], screenProps.layerIds[k]);
845 for (unsigned int i = 0; i < layerCount; ++i)
847 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(renderOrder[i]));
851 TEST_F(IlmCommandTest, DisplaySetRenderOrder_shrinking) {
852 //prepare needed layers
853 t_ilm_layer renderOrder[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
854 t_ilm_uint layerCount = sizeof(renderOrder) / sizeof(renderOrder[0]);
856 for (unsigned int i = 0; i < layerCount; ++i)
858 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(renderOrder + i, 300, 300));
859 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
862 t_ilm_display* screenIDs;
863 t_ilm_uint screenCount;
864 ASSERT_EQ(ILM_SUCCESS, ilm_getScreenIDs(&screenCount, &screenIDs));
866 for(unsigned int i = 0; i < screenCount; ++i)
868 t_ilm_display screen = screenIDs[i];
869 ilmScreenProperties screenProps;
871 //trying different render orders with decreasing sizes
872 for (unsigned int j = 0; j <= layerCount; ++j)
874 //put them from end to beginning, so that in each loop iteration the order of layers change
875 ASSERT_EQ(ILM_SUCCESS, ilm_displaySetRenderOrder(screen, renderOrder + j, layerCount - j));
876 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
877 ASSERT_EQ(ILM_SUCCESS, ilm_getPropertiesOfScreen(screen, &screenProps));
879 ASSERT_EQ(layerCount - j, screenProps.layerCount);
880 for(unsigned int k = 0; k < layerCount - j; ++k)
882 ASSERT_EQ(renderOrder[j + k], screenProps.layerIds[k]);
888 for (unsigned int i = 0; i < layerCount; ++i)
890 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(renderOrder[i]));
894 TEST_F(IlmCommandTest, LayerSetRenderOrder_growing) {
895 //prepare needed layers and surfaces
896 t_ilm_layer renderOrder[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
897 t_ilm_uint surfaceCount = sizeof(renderOrder) / sizeof(renderOrder[0]);
899 for (unsigned int i = 0; i < surfaceCount; ++i)
901 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 100, 100, ILM_PIXELFORMAT_RGBA_8888, renderOrder + i));
902 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
905 t_ilm_layer layerIDs[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
906 t_ilm_uint layerCount = sizeof(layerIDs) / sizeof(layerIDs[0]);
908 for (unsigned int i = 0; i < layerCount; ++i)
910 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(layerIDs + i, 300, 300));
911 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
914 t_ilm_display* screenIDs;
915 t_ilm_uint screenCount;
916 ASSERT_EQ(ILM_SUCCESS, ilm_getScreenIDs(&screenCount, &screenIDs));
918 for(unsigned int i = 0; i < layerCount; ++i)
920 t_ilm_layer layer = layerIDs[i];
922 t_ilm_int layerSurfaceCount;
923 t_ilm_surface* layerSurfaceIDs;
925 //trying different render orders with increasing sizes
926 for (unsigned int j = surfaceCount; j <= surfaceCount; --j) // note: using overflow here
928 //put them from end to beginning, so that in each loop iteration the order of surafces change
929 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetRenderOrder(layer, renderOrder + j, surfaceCount - j));
930 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
931 ASSERT_EQ(ILM_SUCCESS, ilm_getSurfaceIDsOnLayer(layer, &layerSurfaceCount, &layerSurfaceIDs));
933 ASSERT_EQ(surfaceCount - j, layerSurfaceCount);
934 for(unsigned int k = 0; k < surfaceCount - j; ++k)
936 ASSERT_EQ(renderOrder[j + k], layerSurfaceIDs[k]);
940 //set empty render order again
941 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetRenderOrder(layer, renderOrder, 0));
942 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
946 for (unsigned int i = 0; i < surfaceCount; ++i)
948 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(renderOrder[i]));
950 for (unsigned int i = 0; i < layerCount; ++i)
952 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layerIDs[i]));
956 TEST_F(IlmCommandTest, LayerSetRenderOrder_shrinking) {
957 //prepare needed layers and surfaces
958 t_ilm_layer renderOrder[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
959 t_ilm_uint surfaceCount = sizeof(renderOrder) / sizeof(renderOrder[0]);
961 for (unsigned int i = 0; i < surfaceCount; ++i)
963 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 100, 100, ILM_PIXELFORMAT_RGBA_8888, renderOrder + i));
964 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
967 t_ilm_layer layerIDs[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
968 t_ilm_uint layerCount = sizeof(layerIDs) / sizeof(layerIDs[0]);
970 for (unsigned int i = 0; i < layerCount; ++i)
972 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(layerIDs + i, 300, 300));
973 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
976 t_ilm_display* screenIDs;
977 t_ilm_uint screenCount;
978 ASSERT_EQ(ILM_SUCCESS, ilm_getScreenIDs(&screenCount, &screenIDs));
980 for(unsigned int i = 0; i < layerCount; ++i)
982 t_ilm_layer layer = layerIDs[i];
984 t_ilm_int layerSurfaceCount;
985 t_ilm_surface* layerSurfaceIDs;
987 //trying different render orders with decreasing sizes
988 for (unsigned int j = 0; j <= layerCount; ++j)
990 //put them from end to beginning, so that in each loop iteration the order of surafces change
991 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetRenderOrder(layer, renderOrder + j, surfaceCount - j));
992 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
993 ASSERT_EQ(ILM_SUCCESS, ilm_getSurfaceIDsOnLayer(layer, &layerSurfaceCount, &layerSurfaceIDs));
995 ASSERT_EQ(surfaceCount - j, layerSurfaceCount);
996 for(unsigned int k = 0; k < surfaceCount - j; ++k)
998 ASSERT_EQ(renderOrder[j + k], layerSurfaceIDs[k]);
1002 //set empty render order again
1003 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetRenderOrder(layer, renderOrder, 0));
1004 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
1008 for (unsigned int i = 0; i < surfaceCount; ++i)
1010 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(renderOrder[i]));
1012 for (unsigned int i = 0; i < layerCount; ++i)
1014 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layerIDs[i]));
1018 TEST_F(IlmCommandTest, LayerSetRenderOrder_duplicates) {
1019 //prepare needed layers and surfaces
1020 t_ilm_layer renderOrder[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
1021 t_ilm_uint surfaceCount = sizeof(renderOrder) / sizeof(renderOrder[0]);
1023 for (unsigned int i = 0; i < surfaceCount; ++i)
1025 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 100, 100, ILM_PIXELFORMAT_RGBA_8888, renderOrder + i));
1026 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
1029 t_ilm_surface duplicateRenderOrder[] = {renderOrder[0], renderOrder[1], renderOrder[0], renderOrder[1], renderOrder[0]};
1030 t_ilm_int duplicateSurfaceCount = sizeof(duplicateRenderOrder) / sizeof(duplicateRenderOrder[0]);
1033 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(&layer, 300, 300));
1034 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
1036 t_ilm_display* screenIDs;
1037 t_ilm_uint screenCount;
1038 ASSERT_EQ(ILM_SUCCESS, ilm_getScreenIDs(&screenCount, &screenIDs));
1040 t_ilm_int layerSurfaceCount;
1041 t_ilm_surface* layerSurfaceIDs;
1044 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetRenderOrder(layer, duplicateRenderOrder, duplicateSurfaceCount));
1045 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
1046 ASSERT_EQ(ILM_SUCCESS, ilm_getSurfaceIDsOnLayer(layer, &layerSurfaceCount, &layerSurfaceIDs));
1048 ASSERT_EQ(2, layerSurfaceCount);
1051 for (unsigned int i = 0; i < surfaceCount; ++i)
1053 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(renderOrder[i]));
1055 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layer));
1058 TEST_F(IlmCommandTest, LayerSetRenderOrder_empty) {
1059 //prepare needed layers and surfaces
1060 t_ilm_layer renderOrder[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
1061 t_ilm_uint surfaceCount = sizeof(renderOrder) / sizeof(renderOrder[0]);
1063 for (unsigned int i = 0; i < surfaceCount; ++i)
1065 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceCreate((t_ilm_nativehandle)wlSurface, 100, 100, ILM_PIXELFORMAT_RGBA_8888, renderOrder + i));
1066 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
1070 ASSERT_EQ(ILM_SUCCESS, ilm_layerCreateWithDimension(&layer, 300, 300));
1071 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
1074 t_ilm_display* screenIDs;
1075 t_ilm_uint screenCount;
1076 ASSERT_EQ(ILM_SUCCESS, ilm_getScreenIDs(&screenCount, &screenIDs));
1078 t_ilm_int layerSurfaceCount;
1079 t_ilm_surface* layerSurfaceIDs;
1082 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetRenderOrder(layer, renderOrder, surfaceCount));
1083 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
1085 //set empty render order
1086 ASSERT_EQ(ILM_SUCCESS, ilm_layerSetRenderOrder(layer, renderOrder, 0));
1087 ASSERT_EQ(ILM_SUCCESS, ilm_commitChanges());
1088 ASSERT_EQ(ILM_SUCCESS, ilm_getSurfaceIDsOnLayer(layer, &layerSurfaceCount, &layerSurfaceIDs));
1090 ASSERT_EQ(0, layerSurfaceCount);
1093 for (unsigned int i = 0; i < surfaceCount; ++i)
1095 ASSERT_EQ(ILM_SUCCESS, ilm_surfaceRemove(renderOrder[i]));
1097 ASSERT_EQ(ILM_SUCCESS, ilm_layerRemove(layer));