1 /***************************************************************************
3 * Copyright 2010,2011 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 /* METHODS THAT ARE CURRENTLY NOT TESTED:
23 * ilm_surfaceInvalidateRectangle
24 * ilm_layerSetChromaKey
25 * ilm_getNumberOfHardwareLayers
26 * ilm_layerGetType(t_ilm_layer layerId,ilmLayerType* layerType);
27 ilm_layerGetCapabilities(t_ilm_layer layerId, t_ilm_layercapabilities *capabilities);
28 ilm_layerTypeGetCapabilities(ilmLayerType layerType, t_ilm_layercapabilities *capabilities);
32 #include <gtest/gtest.h>
36 #include "ilm_client.h"
37 #include "ilm_control.h"
40 class IlmCommandTest : public ::testing::Test {
45 static void SetUpTestCase() {
48 static void TearDownTestCase() {
57 t_ilm_layer* layers = NULL;
59 ilm_getLayerIDs(&numLayer, &layers);
60 for (t_ilm_int i=0; i<numLayer; i++ ){
61 ilm_layerRemove(layers[i]);
64 t_ilm_surface* surfaces = NULL;
65 t_ilm_int numSurfaces=0;
66 ilm_getSurfaceIDs(&numSurfaces, &surfaces);
67 for (t_ilm_int i=0; i<numSurfaces; i++ ){
68 ilm_surfaceRemove(surfaces[i]);
76 TEST_F(IlmCommandTest, SetGetSurfaceDimension) {
79 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface);
81 t_ilm_uint dim[2] = {15,25};
82 ilm_surfaceSetDimension(surface,dim);
85 t_ilm_uint dimreturned[2];
86 ilm_surfaceGetDimension(surface,dimreturned);
87 ASSERT_EQ(dim[0],dimreturned[0]);
88 ASSERT_EQ(dim[1],dimreturned[1]);
91 TEST_F(IlmCommandTest, SetGetLayerDimension) {
94 ilm_layerCreateWithDimension(&layer, 800, 480);
96 t_ilm_uint dim[2] = {115,125};
97 ilm_layerSetDimension(layer,dim);
100 t_ilm_uint dimreturned[2];
101 ilm_layerGetDimension(layer,dimreturned);
102 ASSERT_EQ(dim[0],dimreturned[0]);
103 ASSERT_EQ(dim[1],dimreturned[1]);
106 TEST_F(IlmCommandTest, SetGetSurfacePosition) {
109 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface);
111 t_ilm_uint pos[2] = {15,25};
112 ilm_surfaceSetPosition(surface,pos);
115 t_ilm_uint posreturned[2];
116 ilm_surfaceGetPosition(surface,posreturned);
117 ASSERT_EQ(pos[0],posreturned[0]);
118 ASSERT_EQ(pos[1],posreturned[1]);
121 TEST_F(IlmCommandTest, SetGetLayerPosition) {
124 ilm_layerCreateWithDimension(&layer, 800, 480);
126 t_ilm_uint pos[2] = {115,125};
127 ilm_layerSetPosition(layer,pos);
130 t_ilm_uint posreturned[2];
131 ilm_layerGetPosition(layer,posreturned);
132 ASSERT_EQ(pos[0],posreturned[0]);
133 ASSERT_EQ(pos[1],posreturned[1]);
136 TEST_F(IlmCommandTest, SetGetSurfaceOrientation) {
138 ilmOrientation returned;
139 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface);
141 ilm_surfaceSetOrientation(surface,ILM_NINETY);
143 ilm_surfaceGetOrientation(surface,&returned);
144 ASSERT_EQ(ILM_NINETY,returned);
146 ilm_surfaceSetOrientation(surface,ILM_ONEHUNDREDEIGHTY);
148 ilm_surfaceGetOrientation(surface,&returned);
149 ASSERT_EQ(ILM_ONEHUNDREDEIGHTY,returned);
151 ilm_surfaceSetOrientation(surface,ILM_TWOHUNDREDSEVENTY);
153 ilm_surfaceGetOrientation(surface,&returned);
154 ASSERT_EQ(ILM_TWOHUNDREDSEVENTY,returned);
156 ilm_surfaceSetOrientation(surface,ILM_ZERO);
158 ilm_surfaceGetOrientation(surface,&returned);
159 ASSERT_EQ(ILM_ZERO,returned);
162 TEST_F(IlmCommandTest, SetGetLayerOrientation) {
164 ilm_layerCreateWithDimension(&layer, 800, 480);
166 ilmOrientation returned;
168 ilm_layerSetOrientation(layer,ILM_NINETY);
170 ilm_layerGetOrientation(layer,&returned);
171 ASSERT_EQ(ILM_NINETY,returned);
173 ilm_layerSetOrientation(layer,ILM_ONEHUNDREDEIGHTY);
175 ilm_layerGetOrientation(layer,&returned);
176 ASSERT_EQ(ILM_ONEHUNDREDEIGHTY,returned);
178 ilm_layerSetOrientation(layer,ILM_TWOHUNDREDSEVENTY);
180 ilm_layerGetOrientation(layer,&returned);
181 ASSERT_EQ(ILM_TWOHUNDREDSEVENTY,returned);
183 ilm_layerSetOrientation(layer,ILM_ZERO);
185 ilm_layerGetOrientation(layer,&returned);
186 ASSERT_EQ(ILM_ZERO,returned);
189 TEST_F(IlmCommandTest, SetGetSurfaceOpacity) {
194 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface1);
195 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface2);
197 ilm_surfaceSetOpacity(surface1,0.88);
199 ilm_surfaceGetOpacity(surface1,&opacity);
200 ASSERT_DOUBLE_EQ(0.88, opacity);
202 ilm_surfaceSetOpacity(surface2,0.001);
204 ilm_surfaceGetOpacity(surface2,&opacity);
205 ASSERT_DOUBLE_EQ(0.001, opacity);
208 TEST_F(IlmCommandTest, SetGetLayerOpacity) {
213 ilm_layerCreateWithDimension(&layer1, 800, 480);
214 ilm_layerCreateWithDimension(&layer2, 800, 480);
216 ilm_layerSetOpacity(layer1,0.88);
218 ilm_layerGetOpacity(layer1,&opacity);
219 ASSERT_DOUBLE_EQ(0.88, opacity);
221 ilm_layerSetOpacity(layer2,0.001);
223 ilm_layerGetOpacity(layer2,&opacity);
224 ASSERT_DOUBLE_EQ(0.001, opacity);
227 TEST_F(IlmCommandTest, SetGetSurfaceVisibility) {
229 t_ilm_bool visibility;
231 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface1);
233 ilm_surfaceSetVisibility(surface1,ILM_TRUE);
235 ilm_surfaceGetVisibility(surface1,&visibility);
236 ASSERT_EQ(ILM_TRUE, visibility);
238 ilm_surfaceSetVisibility(surface1,ILM_FALSE);
240 ilm_surfaceGetVisibility(surface1,&visibility);
241 ASSERT_EQ(ILM_FALSE, visibility);
243 ilm_surfaceSetVisibility(surface1,ILM_TRUE);
245 ilm_surfaceGetVisibility(surface1,&visibility);
246 ASSERT_EQ(ILM_TRUE, visibility);
249 TEST_F(IlmCommandTest, SetGetLayerVisibility) {
251 t_ilm_bool visibility;
253 ilm_layerCreateWithDimension(&layer1, 800, 480);
255 ilm_layerSetVisibility(layer1,ILM_TRUE);
257 ilm_layerGetVisibility(layer1,&visibility);
258 ASSERT_EQ(ILM_TRUE, visibility);
260 ilm_layerSetVisibility(layer1,ILM_FALSE);
262 ilm_layerGetVisibility(layer1,&visibility);
263 ASSERT_EQ(ILM_FALSE, visibility);
265 ilm_layerSetVisibility(layer1,ILM_TRUE);
267 ilm_layerGetVisibility(layer1,&visibility);
268 ASSERT_EQ(ILM_TRUE, visibility);
271 TEST_F(IlmCommandTest, ilm_getScreenIDs) {
272 t_ilm_uint numberOfScreens = 0;
273 t_ilm_uint* screenIDs = NULL;
274 ilm_getScreenIDs(&numberOfScreens,&screenIDs);
275 ASSERT_GT(numberOfScreens,0u);
278 TEST_F(IlmCommandTest, ilm_getScreenResolution) {
279 t_ilm_uint numberOfScreens = 0;
280 t_ilm_uint* screenIDs = NULL;
281 ilm_getScreenIDs(&numberOfScreens,&screenIDs);
282 ASSERT_TRUE(numberOfScreens>0);
284 uint firstScreen = screenIDs[0];
285 t_ilm_uint width = 0, height = 0;
286 ilm_getScreenResolution(firstScreen, &width, &height);
288 ASSERT_GT(height,0u);
291 TEST_F(IlmCommandTest, ilm_getLayerIDs) {
295 ilm_layerCreateWithDimension(&layer1, 800, 480);
296 ilm_layerCreateWithDimension(&layer2, 800, 480);
301 ilm_getLayerIDs(&length,&IDs);
303 ASSERT_EQ(layer1,IDs[0]);
304 ASSERT_EQ(layer2,IDs[1]);
307 TEST_F(IlmCommandTest, ilm_getLayerIDsOfScreen) {
308 t_ilm_layer layer1 = 3246;
309 t_ilm_layer layer2 = 46586;
310 t_ilm_uint roLength = 2;
311 t_ilm_layer idRenderOrder[2] = {layer1,layer2};
312 ilm_layerCreateWithDimension(&layer1, 800, 480);
313 ilm_layerCreateWithDimension(&layer2, 800, 480);
314 ilm_displaySetRenderOrder(0,idRenderOrder,roLength);
317 t_ilm_int length = 0;
319 ilm_getLayerIDsOnScreen(0,&length,&IDs);
322 ASSERT_EQ(layer1,IDs[0]);
323 ASSERT_EQ(layer2,IDs[1]);
326 TEST_F(IlmCommandTest, ilm_getSurfaceIDs) {
327 uint surface1 = 3246;
328 uint surface2 = 46586;
330 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface1);
331 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface2);
336 ilm_getSurfaceIDs(&length,&IDs);
338 ASSERT_EQ(surface1,IDs[0]);
339 ASSERT_EQ(surface2,IDs[1]);
342 TEST_F(IlmCommandTest, ilm_surfaceCreate_Remove) {
343 uint surface1 = 3246;
344 uint surface2 = 46586;
345 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface1);
346 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface2);
351 ilm_getSurfaceIDs(&length,&IDs);
354 ASSERT_EQ(surface1,IDs[0]);
355 ASSERT_EQ(surface2,IDs[1]);
357 ilm_surfaceRemove(surface1);
359 ilm_getSurfaceIDs(&length,&IDs);
361 ASSERT_EQ(surface2,IDs[0]);
363 ilm_surfaceRemove(surface2);
365 ilm_getSurfaceIDs(&length,&IDs);
369 TEST_F(IlmCommandTest, ilm_layerCreate_Remove) {
372 ilm_layerCreateWithDimension(&layer1, 800, 480);
373 ilm_layerCreateWithDimension(&layer2, 800, 480);
378 ilm_getLayerIDs(&length,&IDs);
381 ASSERT_EQ(layer1,IDs[0]);
382 ASSERT_EQ(layer2,IDs[1]);
384 ilm_layerRemove(layer1);
386 ilm_getLayerIDs(&length,&IDs);
388 ASSERT_EQ(layer2,IDs[0]);
390 ilm_layerRemove(layer2);
392 ilm_getLayerIDs(&length,&IDs);
396 TEST_F(IlmCommandTest, ilm_surface_initialize) {
397 uint surface_10 = 10;
398 uint surface_20 = 20;
399 ilm_surfaceInitialize(&surface_10);
400 ilm_surfaceInitialize(&surface_20);
404 ilm_getSurfaceIDs(&length,&IDs);
407 ASSERT_EQ(surface_10,IDs[0]);
408 ASSERT_EQ(surface_20,IDs[1]);
412 TEST_F(IlmCommandTest, ilm_layerAddSurface_ilm_layerRemoveSurface_ilm_getSurfaceIDsOnLayer) {
414 ilm_layerCreateWithDimension(&layer, 800, 480);
415 uint surface1 = 3246;
416 uint surface2 = 46586;
417 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface1);
418 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface2);
423 ilm_getSurfaceIDsOnLayer(layer,&length,&IDs);
426 ilm_layerAddSurface(layer,surface1);
428 ilm_getSurfaceIDsOnLayer(layer,&length,&IDs);
430 ASSERT_EQ(surface1,IDs[0]);
432 ilm_layerAddSurface(layer,surface2);
434 ilm_getSurfaceIDsOnLayer(layer,&length,&IDs);
436 ASSERT_EQ(surface1,IDs[0]);
437 ASSERT_EQ(surface2,IDs[1]);
439 ilm_layerRemoveSurface(layer,surface1);
441 ilm_getSurfaceIDsOnLayer(layer,&length,&IDs);
443 ASSERT_EQ(surface2,IDs[0]);
445 ilm_layerRemoveSurface(layer,surface2);
447 ilm_getSurfaceIDsOnLayer(layer,&length,&IDs);
451 TEST_F(IlmCommandTest, ilm_getPropertiesOfSurface_ilm_surfaceSetSourceRectangle_ilm_surfaceSetDestinationRectangle_ilm_surfaceSetChromaKey) {
453 t_ilm_int chromaKey[3] = {3, 22, 111};
454 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface);
457 ilm_surfaceSetOpacity(surface,0.8765);
458 ilm_surfaceSetSourceRectangle(surface,89,6538,638,4);
459 ilm_surfaceSetDestinationRectangle(surface,54,47,947,9);
460 ilm_surfaceSetOrientation(surface,ILM_NINETY);
461 ilm_surfaceSetVisibility(surface,true);
462 ilm_surfaceSetChromaKey(surface,&chromaKey[0]);
465 ilmSurfaceProperties surfaceProperties;
466 ilm_getPropertiesOfSurface(surface, &surfaceProperties);
467 ASSERT_EQ(0.8765, surfaceProperties.opacity);
468 ASSERT_EQ(89u, surfaceProperties.sourceX);
469 ASSERT_EQ(6538u, surfaceProperties.sourceY);
470 ASSERT_EQ(638u, surfaceProperties.sourceWidth);
471 ASSERT_EQ(4u, surfaceProperties.sourceHeight);
472 ASSERT_EQ(54u, surfaceProperties.destX);
473 ASSERT_EQ(47u, surfaceProperties.destY);
474 ASSERT_EQ(947u, surfaceProperties.destWidth);
475 ASSERT_EQ(9u, surfaceProperties.destHeight);
476 ASSERT_EQ(ILM_NINETY, surfaceProperties.orientation);
477 ASSERT_TRUE( surfaceProperties.visibility);
478 ASSERT_TRUE( surfaceProperties.chromaKeyEnabled);
479 ASSERT_EQ(3u, surfaceProperties.chromaKeyRed);
480 ASSERT_EQ(22u, surfaceProperties.chromaKeyGreen);
481 ASSERT_EQ(111u, surfaceProperties.chromaKeyBlue);
483 ilm_surfaceSetOpacity(surface,0.436);
484 ilm_surfaceSetSourceRectangle(surface,784,546,235,78);
485 ilm_surfaceSetDestinationRectangle(surface,536,5372,3,4316);
486 ilm_surfaceSetOrientation(surface,ILM_TWOHUNDREDSEVENTY);
487 ilm_surfaceSetVisibility(surface,false);
488 ilm_surfaceSetChromaKey(surface,NULL);
491 ilmSurfaceProperties surfaceProperties2;
492 ilm_getPropertiesOfSurface(surface, &surfaceProperties2);
493 ASSERT_EQ(0.436, surfaceProperties2.opacity);
494 ASSERT_EQ(784u, surfaceProperties2.sourceX);
495 ASSERT_EQ(546u, surfaceProperties2.sourceY);
496 ASSERT_EQ(235u, surfaceProperties2.sourceWidth);
497 ASSERT_EQ(78u, surfaceProperties2.sourceHeight);
498 ASSERT_EQ(536u, surfaceProperties2.destX);
499 ASSERT_EQ(5372u, surfaceProperties2.destY);
500 ASSERT_EQ(3u, surfaceProperties2.destWidth);
501 ASSERT_EQ(4316u, surfaceProperties2.destHeight);
502 ASSERT_EQ(ILM_TWOHUNDREDSEVENTY, surfaceProperties2.orientation);
503 ASSERT_FALSE(surfaceProperties2.visibility);
504 ASSERT_FALSE(surfaceProperties2.chromaKeyEnabled);
507 TEST_F(IlmCommandTest, ilm_getPropertiesOfLayer_ilm_layerSetSourceRectangle_ilm_layerSetDestinationRectangle_ilm_layerSetChromaKey) {
509 t_ilm_int chromaKey[3] = {3, 22, 111};
510 ilm_layerCreateWithDimension(&layer, 800, 480);
513 ilm_layerSetOpacity(layer,0.8765);
514 ilm_layerSetSourceRectangle(layer,89,6538,638,4);
515 ilm_layerSetDestinationRectangle(layer,54,47,947,9);
516 ilm_layerSetOrientation(layer,ILM_NINETY);
517 ilm_layerSetVisibility(layer,true);
518 ilm_layerSetChromaKey(layer,chromaKey);
521 ilmLayerProperties layerProperties1;
522 ilm_getPropertiesOfLayer(layer, &layerProperties1);
523 ASSERT_EQ(0.8765, layerProperties1.opacity);
524 ASSERT_EQ(89u, layerProperties1.sourceX);
525 ASSERT_EQ(6538u, layerProperties1.sourceY);
526 ASSERT_EQ(638u, layerProperties1.sourceWidth);
527 ASSERT_EQ(4u, layerProperties1.sourceHeight);
528 ASSERT_EQ(54u, layerProperties1.destX);
529 ASSERT_EQ(47u, layerProperties1.destY);
530 ASSERT_EQ(947u, layerProperties1.destWidth);
531 ASSERT_EQ(9u, layerProperties1.destHeight);
532 ASSERT_EQ(ILM_NINETY, layerProperties1.orientation);
533 ASSERT_TRUE( layerProperties1.visibility);
534 ASSERT_TRUE(layerProperties1.chromaKeyEnabled);
535 ASSERT_EQ(3u, layerProperties1.chromaKeyRed);
536 ASSERT_EQ(22u, layerProperties1.chromaKeyGreen);
537 ASSERT_EQ(111u, layerProperties1.chromaKeyBlue);
539 ilm_layerSetOpacity(layer,0.436);
540 ilm_layerSetSourceRectangle(layer,784,546,235,78);
541 ilm_layerSetDestinationRectangle(layer,536,5372,3,4316);
542 ilm_layerSetOrientation(layer,ILM_TWOHUNDREDSEVENTY);
543 ilm_layerSetVisibility(layer,false);
544 ilm_layerSetChromaKey(layer,NULL);
547 ilmLayerProperties layerProperties2;
548 ilm_getPropertiesOfLayer(layer, &layerProperties2);
549 ASSERT_EQ(0.436, layerProperties2.opacity);
550 ASSERT_EQ(784u, layerProperties2.sourceX);
551 ASSERT_EQ(546u, layerProperties2.sourceY);
552 ASSERT_EQ(235u, layerProperties2.sourceWidth);
553 ASSERT_EQ(78u, layerProperties2.sourceHeight);
554 ASSERT_EQ(536u, layerProperties2.destX);
555 ASSERT_EQ(5372u, layerProperties2.destY);
556 ASSERT_EQ(3u, layerProperties2.destWidth);
557 ASSERT_EQ(4316u, layerProperties2.destHeight);
558 ASSERT_EQ(ILM_TWOHUNDREDSEVENTY, layerProperties2.orientation);
559 ASSERT_FALSE(layerProperties2.visibility);
560 ASSERT_FALSE(layerProperties2.chromaKeyEnabled);
563 TEST_F(IlmCommandTest, ilm_takeScreenshot) {
564 // make sure the file is not there before
565 FILE* f = fopen("/tmp/test.bmp","r");
568 int result = remove("/tmp/test.bmp");
572 ilm_takeScreenshot(0, "/tmp/test.bmp");
575 f = fopen("/tmp/test.bmp","r");
576 ASSERT_TRUE(f!=NULL);
580 TEST_F(IlmCommandTest, ilm_surfaceGetPixelformat) {
581 t_ilm_uint surface1=0;
582 t_ilm_uint surface2=1;
583 t_ilm_uint surface3=2;
584 t_ilm_uint surface4=3;
585 t_ilm_uint surface5=4;
586 t_ilm_uint surface6=5;
587 t_ilm_uint surface7=6;
589 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_4444,&surface1);
590 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_5551,&surface2);
591 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_6661,&surface3);
592 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface4);
593 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGB_565,&surface5);
594 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGB_888,&surface6);
595 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_R_8,&surface7);
598 ilmPixelFormat p1,p2,p3,p4,p5,p6,p7;
600 ilm_surfaceGetPixelformat(surface1,&p1);
601 ilm_surfaceGetPixelformat(surface2,&p2);
602 ilm_surfaceGetPixelformat(surface3,&p3);
603 ilm_surfaceGetPixelformat(surface4,&p4);
604 ilm_surfaceGetPixelformat(surface5,&p5);
605 ilm_surfaceGetPixelformat(surface6,&p6);
606 ilm_surfaceGetPixelformat(surface7,&p7);
608 ASSERT_EQ(ILM_PIXELFORMAT_RGBA_4444,p1);
609 ASSERT_EQ(ILM_PIXELFORMAT_RGBA_5551,p2);
610 ASSERT_EQ(ILM_PIXELFORMAT_RGBA_6661,p3);
611 ASSERT_EQ(ILM_PIXELFORMAT_RGBA_8888,p4);
612 ASSERT_EQ(ILM_PIXELFORMAT_RGB_565,p5);
613 ASSERT_EQ(ILM_PIXELFORMAT_RGB_888,p6);
614 ASSERT_EQ(ILM_PIXELFORMAT_R_8,p7);
617 TEST_F(IlmCommandTest, ilm_keyboard_focus)
623 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface1);
624 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface2);
626 ilm_GetKeyboardFocusSurfaceId(&surface);
627 EXPECT_EQ(0xFFFFFFFF, surface);
629 ilm_SetKeyboardFocusOn(surface1);
630 ilm_GetKeyboardFocusSurfaceId(&surface);
631 EXPECT_EQ(surface1, surface);
635 TEST_F(IlmCommandTest, ilm_input_event_acceptance)
640 ilmSurfaceProperties surfaceProperties;
642 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface1);
643 ilm_surfaceCreate(0,0,0,ILM_PIXELFORMAT_RGBA_8888,&surface2);
645 ilm_getPropertiesOfSurface(surface1, &surfaceProperties);
646 EXPECT_EQ(ILM_INPUT_DEVICE_ALL, surfaceProperties.inputDevicesAcceptance);
648 ilm_UpdateInputEventAcceptanceOn(surface1, (ilmInputDevice) (ILM_INPUT_DEVICE_KEYBOARD | ILM_INPUT_DEVICE_POINTER), false);
652 ilm_getPropertiesOfSurface(surface1, &surfaceProperties);
653 EXPECT_FALSE(surfaceProperties.inputDevicesAcceptance & ILM_INPUT_DEVICE_KEYBOARD);
654 EXPECT_FALSE(surfaceProperties.inputDevicesAcceptance & ILM_INPUT_DEVICE_POINTER);
655 EXPECT_TRUE(surfaceProperties.inputDevicesAcceptance & ILM_INPUT_DEVICE_TOUCH);
657 ilm_SetKeyboardFocusOn(surface1);
658 ilm_GetKeyboardFocusSurfaceId(&surface);
659 EXPECT_NE(surface1, surface);
664 void calculateTimeout(struct timeval* currentTime, int giventimeout, struct timespec* timeout);
667 TEST(Calc, TimeCalcTestWith1SecondOverflow)
669 struct timeval currentTime;
670 struct timespec timeAdded;
671 currentTime.tv_usec = 456000;
672 currentTime.tv_sec = 3;
673 calculateTimeout(¤tTime, 544, &timeAdded);
674 ASSERT_EQ(4, timeAdded.tv_sec);
675 ASSERT_EQ(0, timeAdded.tv_nsec);
678 TEST(Calc, TimeCalcTestWithMultipleSecondsOverflow)
680 struct timeval currentTime;
681 struct timespec timeAdded;
682 currentTime.tv_usec = 123456;
683 currentTime.tv_sec = 3;
684 calculateTimeout(¤tTime, 3500, &timeAdded);
685 ASSERT_EQ(6, timeAdded.tv_sec);
686 ASSERT_EQ(623456000, timeAdded.tv_nsec);
689 TEST(Calc, TimeCalcTestWithoutOverflow)
691 struct timeval currentTime;
692 struct timespec timeAdded;
693 currentTime.tv_usec = 123456;
694 currentTime.tv_sec = 3;
695 calculateTimeout(¤tTime, 544, &timeAdded);
696 ASSERT_EQ(3, timeAdded.tv_sec);
697 ASSERT_EQ(667456000, timeAdded.tv_nsec);
700 TEST_F(IlmCommandTest, SetGetOptimizationMode) {
702 ilmOptimizationMode mode;
703 ilmOptimizationMode retmode;
705 id = ILM_OPT_MULTITEXTURE;
706 mode = ILM_OPT_MODE_FORCE_OFF;
707 ilm_SetOptimizationMode(id, mode);
709 ilm_GetOptimizationMode(id, &retmode);
710 ASSERT_EQ(mode, retmode);
712 id = ILM_OPT_SKIP_CLEAR;
713 mode = ILM_OPT_MODE_TOGGLE;
714 ilm_SetOptimizationMode(id, mode);
716 ilm_GetOptimizationMode(id, &retmode);
717 ASSERT_EQ(mode, retmode);
719 id = ILM_OPT_MULTITEXTURE;
720 mode = ILM_OPT_MODE_HEURISTIC;
721 ilm_SetOptimizationMode(id, mode);
723 ilm_GetOptimizationMode(id, &retmode);
724 ASSERT_EQ(mode, retmode);
727 TEST_F(IlmCommandTest, ilm_getPropertiesOfScreen) {
728 t_ilm_uint numberOfScreens = 0;
729 t_ilm_uint* screenIDs = NULL;
730 ilm_getScreenIDs(&numberOfScreens,&screenIDs);
731 ASSERT_TRUE(numberOfScreens>0);
733 t_ilm_display screen = screenIDs[0];
734 ilmScreenProperties screenProperties;
736 t_ilm_layer layerIds[3] = {100, 200, 300};//t_ilm_layer layerIds[3] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
737 ilm_layerCreateWithDimension(layerIds, 800, 480);
738 ilm_layerCreateWithDimension(layerIds + 1, 800, 480);
739 ilm_layerCreateWithDimension(layerIds + 2, 800, 480);
743 ilm_displaySetRenderOrder(screen, layerIds, 3);
748 ilm_getPropertiesOfScreen(screen, &screenProperties);
749 ASSERT_EQ(3, screenProperties.layerCount);
750 ASSERT_EQ(layerIds[0], screenProperties.layerIds[0]);
751 ASSERT_EQ(layerIds[1], screenProperties.layerIds[1]);
752 ASSERT_EQ(layerIds[2], screenProperties.layerIds[2]);
754 ASSERT_GT(screenProperties.screenWidth, 0u);
755 ASSERT_GT(screenProperties.screenHeight, 0u);
757 t_ilm_uint numberOfHardwareLayers;
758 ilm_getNumberOfHardwareLayers(screen, &numberOfHardwareLayers);
759 ASSERT_EQ(numberOfHardwareLayers, screenProperties.harwareLayerCount);
762 TEST_F(IlmCommandTest, DisplaySetRenderOrder_growing) {
763 //prepare needed layers
764 t_ilm_layer renderOrder[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
765 t_ilm_uint layerCount = sizeof(renderOrder) / sizeof(renderOrder[0]);
767 for (unsigned int i = 0; i < layerCount; ++i)
769 ilm_layerCreateWithDimension(renderOrder + i, 300, 300);
773 t_ilm_display* screenIDs;
774 t_ilm_uint screenCount;
775 ilm_getScreenIDs(&screenCount, &screenIDs);
777 for(unsigned int i = 0; i < screenCount; ++i)
779 t_ilm_display screen = screenIDs[i];
780 ilmScreenProperties screenProps;
782 //trying different render orders with increasing sizes
783 for (unsigned int j = layerCount; j <= layerCount; --j) // note: using overflow here
785 //put them from end to beginning, so that in each loop iteration the order of layers change
786 ilm_displaySetRenderOrder(screen, renderOrder + j, layerCount - j);
788 ilm_getPropertiesOfScreen(screen, &screenProps);
790 ASSERT_EQ(layerCount - j, screenProps.layerCount);
791 for(unsigned int k = 0; k < layerCount - j; ++k)
793 ASSERT_EQ(renderOrder[j + k], screenProps.layerIds[k]);
799 TEST_F(IlmCommandTest, DisplaySetRenderOrder_shrinking) {
800 //prepare needed layers
801 t_ilm_layer renderOrder[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
802 t_ilm_uint layerCount = sizeof(renderOrder) / sizeof(renderOrder[0]);
804 for (unsigned int i = 0; i < layerCount; ++i)
806 ilm_layerCreateWithDimension(renderOrder + i, 300, 300);
810 t_ilm_display* screenIDs;
811 t_ilm_uint screenCount;
812 ilm_getScreenIDs(&screenCount, &screenIDs);
814 for(unsigned int i = 0; i < screenCount; ++i)
816 t_ilm_display screen = screenIDs[i];
817 ilmScreenProperties screenProps;
819 //trying different render orders with decreasing sizes
820 for (unsigned int j = 0; j <= layerCount; ++j)
822 //put them from end to beginning, so that in each loop iteration the order of layers change
823 ilm_displaySetRenderOrder(screen, renderOrder + j, layerCount - j);
825 ilm_getPropertiesOfScreen(screen, &screenProps);
827 ASSERT_EQ(layerCount - j, screenProps.layerCount);
828 for(unsigned int k = 0; k < layerCount - j; ++k)
830 ASSERT_EQ(renderOrder[j + k], screenProps.layerIds[k]);
836 TEST_F(IlmCommandTest, LayerSetRenderOrder_growing) {
837 //prepare needed layers and surfaces
838 t_ilm_layer renderOrder[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
839 t_ilm_uint surfaceCount = sizeof(renderOrder) / sizeof(renderOrder[0]);
841 for (unsigned int i = 0; i < surfaceCount; ++i)
843 ilm_surfaceCreate(0,100,100,ILM_PIXELFORMAT_RGBA_8888, renderOrder + i);
847 t_ilm_layer layerIDs[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
848 t_ilm_uint layerCount = sizeof(layerIDs) / sizeof(layerIDs[0]);
850 for (unsigned int i = 0; i < layerCount; ++i)
852 ilm_layerCreateWithDimension(layerIDs + i, 300, 300);
856 t_ilm_display* screenIDs;
857 t_ilm_uint screenCount;
858 ilm_getScreenIDs(&screenCount, &screenIDs);
860 for(unsigned int i = 0; i < layerCount; ++i)
862 t_ilm_layer layer = layerIDs[i];
864 t_ilm_int layerSurfaceCount;
865 t_ilm_surface* layerSurfaceIDs;
867 //trying different render orders with increasing sizes
868 for (unsigned int j = surfaceCount; j <= surfaceCount; --j) // note: using overflow here
870 //put them from end to beginning, so that in each loop iteration the order of surafces change
871 ilm_layerSetRenderOrder(layer, renderOrder + j, surfaceCount - j);
873 ilm_getSurfaceIDsOnLayer(layer, &layerSurfaceCount, &layerSurfaceIDs);
875 ASSERT_EQ(surfaceCount - j, layerSurfaceCount);
876 for(unsigned int k = 0; k < surfaceCount - j; ++k)
878 ASSERT_EQ(renderOrder[j + k], layerSurfaceIDs[k]);
882 //set empty render order again
883 ilm_layerSetRenderOrder(layer, renderOrder, 0);
888 TEST_F(IlmCommandTest, LayerSetRenderOrder_shrinking) {
889 //prepare needed layers and surfaces
890 t_ilm_layer renderOrder[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
891 t_ilm_uint surfaceCount = sizeof(renderOrder) / sizeof(renderOrder[0]);
893 for (unsigned int i = 0; i < surfaceCount; ++i)
895 ilm_surfaceCreate(0,100,100,ILM_PIXELFORMAT_RGBA_8888, renderOrder + i);
899 t_ilm_layer layerIDs[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
900 t_ilm_uint layerCount = sizeof(layerIDs) / sizeof(layerIDs[0]);
902 for (unsigned int i = 0; i < layerCount; ++i)
904 ilm_layerCreateWithDimension(layerIDs + i, 300, 300);
908 t_ilm_display* screenIDs;
909 t_ilm_uint screenCount;
910 ilm_getScreenIDs(&screenCount, &screenIDs);
912 for(unsigned int i = 0; i < layerCount; ++i)
914 t_ilm_layer layer = layerIDs[i];
916 t_ilm_int layerSurfaceCount;
917 t_ilm_surface* layerSurfaceIDs;
919 //trying different render orders with decreasing sizes
920 for (unsigned int j = 0; j <= layerCount; ++j)
922 //put them from end to beginning, so that in each loop iteration the order of surafces change
923 ilm_layerSetRenderOrder(layer, renderOrder + j, surfaceCount - j);
925 ilm_getSurfaceIDsOnLayer(layer, &layerSurfaceCount, &layerSurfaceIDs);
927 ASSERT_EQ(surfaceCount - j, layerSurfaceCount);
928 for(unsigned int k = 0; k < surfaceCount - j; ++k)
930 ASSERT_EQ(renderOrder[j + k], layerSurfaceIDs[k]);
934 //set empty render order again
935 ilm_layerSetRenderOrder(layer, renderOrder, 0);
940 TEST_F(IlmCommandTest, LayerSetRenderOrder_duplicates) {
941 //prepare needed layers and surfaces
942 t_ilm_layer renderOrder[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
943 t_ilm_uint surfaceCount = sizeof(renderOrder) / sizeof(renderOrder[0]);
945 for (unsigned int i = 0; i < surfaceCount; ++i)
947 ilm_surfaceCreate(0,100,100,ILM_PIXELFORMAT_RGBA_8888, renderOrder + i);
951 t_ilm_surface duplicateRenderOrder[] = {renderOrder[0], renderOrder[1], renderOrder[0], renderOrder[1], renderOrder[0]};
952 t_ilm_int duplicateSurfaceCount = sizeof(duplicateRenderOrder) / sizeof(duplicateRenderOrder[0]);
955 ilm_layerCreateWithDimension(&layer, 300, 300);
958 t_ilm_display* screenIDs;
959 t_ilm_uint screenCount;
960 ilm_getScreenIDs(&screenCount, &screenIDs);
962 t_ilm_int layerSurfaceCount;
963 t_ilm_surface* layerSurfaceIDs;
966 ilm_layerSetRenderOrder(layer, duplicateRenderOrder, duplicateSurfaceCount);
968 ilm_getSurfaceIDsOnLayer(layer, &layerSurfaceCount, &layerSurfaceIDs);
970 ASSERT_EQ(2, layerSurfaceCount);
973 TEST_F(IlmCommandTest, LayerSetRenderOrder_empty) {
974 //prepare needed layers and surfaces
975 t_ilm_layer renderOrder[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
976 t_ilm_uint surfaceCount = sizeof(renderOrder) / sizeof(renderOrder[0]);
978 for (unsigned int i = 0; i < surfaceCount; ++i)
980 ilm_surfaceCreate(0,100,100,ILM_PIXELFORMAT_RGBA_8888, renderOrder + i);
985 ilm_layerCreateWithDimension(&layer, 300, 300);
989 t_ilm_display* screenIDs;
990 t_ilm_uint screenCount;
991 ilm_getScreenIDs(&screenCount, &screenIDs);
993 t_ilm_int layerSurfaceCount;
994 t_ilm_surface* layerSurfaceIDs;
997 ilm_layerSetRenderOrder(layer, renderOrder, surfaceCount);
1000 //set empty render order
1001 ilm_layerSetRenderOrder(layer, renderOrder, 0);
1002 ilm_commitChanges();
1003 ilm_getSurfaceIDsOnLayer(layer, &layerSurfaceCount, &layerSurfaceIDs);
1005 ASSERT_EQ(0, layerSurfaceCount);