2 * Copyright (c) 2023 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include <dali-toolkit-test-suite-utils.h>
19 #include <dali-toolkit/dali-toolkit.h>
23 #include <dali-toolkit/devel-api/focus-manager/keyboard-focus-manager-devel.h>
24 #include <dali/integration-api/events/touch-event-integ.h>
25 #include <toolkit-event-thread-callback.h>
27 #include <dali-scene3d/public-api/controls/model/model.h>
29 #include <dali/devel-api/actors/camera-actor-devel.h>
32 using namespace Dali::Toolkit;
34 void model_startup(void)
36 test_return_value = TET_UNDEF;
39 void model_cleanup(void)
41 test_return_value = TET_PASS;
46 const bool DEFAULT_MODEL_CHILDREN_SENSITIVE = false;
47 const bool DEFAULT_MODEL_CHILDREN_FOCUSABLE = false;
49 * For the AnimatedCube.gltf and its Assets
50 * Donated by Norbert Nopper for glTF testing.
51 * Take from https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/AnimatedCube
53 const char* TEST_GLTF_FILE_NAME = TEST_RESOURCE_DIR "/AnimatedCube.gltf";
54 const char* TEST_GLTF_ANIMATION_TEST_FILE_NAME = TEST_RESOURCE_DIR "/animationTest.gltf";
55 const char* TEST_GLTF_MULTIPLE_PRIMITIVE_FILE_NAME = TEST_RESOURCE_DIR "/simpleMultiplePrimitiveTest.gltf";
56 const char* TEST_DLI_FILE_NAME = TEST_RESOURCE_DIR "/arc.dli";
57 const char* TEST_DLI_EXERCISE_FILE_NAME = TEST_RESOURCE_DIR "/exercise.dli";
59 * For the diffuse and specular cube map texture.
60 * These textures are based off version of Wave engine sample
61 * Take from https://github.com/WaveEngine/Samples
63 * Copyright (c) 2023 Wave Coorporation
65 * Permission is hereby granted, free of charge, to any person obtaining a copy
66 * of this software and associated documentation files (the "Software"), to
67 * deal in the Software without restriction, including without limitation the
68 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
69 * sell copies of the Software, and to permit persons to whom the Software is
70 * furnished to do so, subject to the following conditions:
72 * The above copyright notice and this permission notice shall be included in
73 * all copies or substantial portions of the Software.
75 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
76 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
77 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
78 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
79 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
80 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
83 const char* TEST_DIFFUSE_TEXTURE = TEST_RESOURCE_DIR "/forest_irradiance.ktx";
84 const char* TEST_SPECULAR_TEXTURE = TEST_RESOURCE_DIR "/forest_radiance.ktx";
86 bool gTouchCallBackCalled = false;
87 bool TestTouchCallback(Actor, const TouchEvent&)
89 gTouchCallBackCalled = true;
93 bool gFocusChangedCallBackCalled = false;
94 void TestFocusChangedCallback(Actor, Actor)
96 gFocusChangedCallBackCalled = true;
100 static bool gOnRelayoutCallBackCalled = false;
101 void OnRelayoutCallback(Actor actor)
103 gOnRelayoutCallBackCalled = true;
106 static bool gResourceReadyCalled = false;
107 void OnResourceReady(Control control)
109 gResourceReadyCalled = true;
114 // Negative test case for a method
115 int UtcDaliModelUninitialized(void)
117 ToolkitTestApplication application;
118 tet_infoline(" UtcDaliModelUninitialized");
120 Scene3D::Model model;
124 // New() must be called to create a Model or it wont be valid.
125 Actor a = Actor::New();
127 DALI_TEST_CHECK(false);
129 catch(Dali::DaliException& e)
131 // Tests that a negative test of an assertion succeeds
132 DALI_TEST_PRINT_ASSERT(e);
133 DALI_TEST_CHECK(!model);
138 // Positive test case for a method
139 int UtcDaliModelNew(void)
141 ToolkitTestApplication application;
142 tet_infoline(" UtcDaliModelNew");
144 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
145 DALI_TEST_CHECK(model);
149 // Positive test case for a method
150 int UtcDaliModelDownCast(void)
152 ToolkitTestApplication application;
153 tet_infoline(" UtcDaliModelDownCast");
155 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
156 BaseHandle handle(model);
158 Scene3D::Model model2 = Scene3D::Model::DownCast(handle);
159 DALI_TEST_CHECK(model);
160 DALI_TEST_CHECK(model2);
161 DALI_TEST_CHECK(model2 == model);
165 int UtcDaliModelTypeRegistry(void)
167 ToolkitTestApplication application;
169 TypeRegistry typeRegistry = TypeRegistry::Get();
170 DALI_TEST_CHECK(typeRegistry);
172 TypeInfo typeInfo = typeRegistry.GetTypeInfo("Model");
173 DALI_TEST_CHECK(typeInfo);
175 BaseHandle handle = typeInfo.CreateInstance();
176 DALI_TEST_CHECK(handle);
178 Scene3D::Model model = Scene3D::Model::DownCast(handle);
179 DALI_TEST_CHECK(model);
184 // Positive test case for a method
185 int UtcDaliModelAddRemove(void)
187 ToolkitTestApplication application;
188 tet_infoline(" UtcDaliModelAddRemove");
190 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
191 DALI_TEST_CHECK(model);
193 Actor actor = Actor::New();
194 DALI_TEST_CHECK(!actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
196 model.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
197 model.SetProperty(Actor::Property::SIZE, application.GetScene().GetSize());
199 application.GetScene().Add(model);
201 DALI_TEST_CHECK(actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
205 DALI_TEST_CHECK(!actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE));
209 int UtcDaliModelCopyAndAssignment(void)
211 ToolkitTestApplication application;
213 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
214 DALI_TEST_CHECK(model);
216 Scene3D::Model copy(model);
217 DALI_TEST_CHECK(model == copy);
219 Scene3D::Model assign;
220 DALI_TEST_CHECK(!assign);
223 DALI_TEST_CHECK(assign == model);
228 int UtcDaliModelMoveConstructor(void)
230 ToolkitTestApplication application;
232 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
233 DALI_TEST_EQUALS(1, model.GetBaseObject().ReferenceCount(), TEST_LOCATION);
234 model.SetProperty(Actor::Property::SENSITIVE, false);
235 DALI_TEST_CHECK(false == model.GetProperty<bool>(Actor::Property::SENSITIVE));
237 Scene3D::Model moved = std::move(model);
238 DALI_TEST_CHECK(moved);
239 DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
240 DALI_TEST_CHECK(false == moved.GetProperty<bool>(Actor::Property::SENSITIVE));
241 DALI_TEST_CHECK(!model);
246 int UtcDaliModelMoveAssignment(void)
248 ToolkitTestApplication application;
250 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
251 DALI_TEST_EQUALS(1, model.GetBaseObject().ReferenceCount(), TEST_LOCATION);
252 model.SetProperty(Actor::Property::SENSITIVE, false);
253 DALI_TEST_CHECK(false == model.GetProperty<bool>(Actor::Property::SENSITIVE));
255 Scene3D::Model moved;
256 moved = std::move(model);
257 DALI_TEST_CHECK(moved);
258 DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
259 DALI_TEST_CHECK(false == moved.GetProperty<bool>(Actor::Property::SENSITIVE));
260 DALI_TEST_CHECK(!model);
265 int UtcDaliModelOnScene01(void)
267 ToolkitTestApplication application;
269 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
270 application.GetScene().Add(model);
272 gResourceReadyCalled = false;
273 model.ResourceReadySignal().Connect(&OnResourceReady);
274 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
276 application.SendNotification();
277 application.Render();
279 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
280 application.SendNotification();
281 application.Render();
283 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
285 uint32_t modelCount = model.GetModelRoot().GetChildCount();
286 DALI_TEST_EQUALS(1, modelCount, TEST_LOCATION);
290 int UtcDaliModelOnScene02(void)
292 ToolkitTestApplication application;
294 Scene3D::Model model = Scene3D::Model::New(TEST_DLI_FILE_NAME);
295 application.GetScene().Add(model);
297 gResourceReadyCalled = false;
298 model.ResourceReadySignal().Connect(&OnResourceReady);
299 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
301 application.SendNotification();
302 application.Render();
304 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
305 application.SendNotification();
306 application.Render();
308 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
310 uint32_t modelCount = model.GetModelRoot().GetChildCount();
311 DALI_TEST_EQUALS(1, modelCount, TEST_LOCATION);
313 Actor rootActor = model.GetModelRoot();
314 Vector3 rootSize = rootActor.GetProperty<Vector3>(Dali::Actor::Property::SIZE);
315 DALI_TEST_EQUALS(Vector3(2, 2, 1), rootSize, TEST_LOCATION);
320 int UtcDaliModelOnSizeSet(void)
322 ToolkitTestApplication application;
324 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
326 application.GetScene().Add(model);
328 application.SendNotification();
329 application.Render();
331 Vector2 size(200.0f, 300.0f);
332 model.SetProperty(Actor::Property::SIZE, size);
334 application.SendNotification();
335 application.Render();
337 DALI_TEST_EQUALS(model.GetCurrentProperty<Vector2>(Actor::Property::SIZE), size, TEST_LOCATION);
342 int UtcDaliModelGetNaturalSize(void)
344 ToolkitTestApplication application;
346 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
348 Vector3 naturalSize = model.GetNaturalSize();
349 DALI_TEST_EQUALS(Vector3::ZERO, naturalSize, TEST_LOCATION);
351 application.GetScene().Add(model);
353 gResourceReadyCalled = false;
354 model.ResourceReadySignal().Connect(&OnResourceReady);
355 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
357 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
358 application.SendNotification();
360 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
362 naturalSize = model.GetNaturalSize();
363 DALI_TEST_EQUALS(Vector3(2, 2, 2), naturalSize, TEST_LOCATION);
365 Actor root = model.GetModelRoot();
366 DALI_TEST_CHECK(root);
371 int UtcDaliModelSetImageBasedLightSource01(void)
373 ToolkitTestApplication application;
375 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
376 application.GetScene().Add(model);
378 gResourceReadyCalled = false;
379 model.ResourceReadySignal().Connect(&OnResourceReady);
380 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
382 application.SendNotification();
383 application.Render();
385 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
386 application.SendNotification();
387 application.Render();
389 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
391 Actor meshActor = model.FindChildByName("AnimatedCube");
392 DALI_TEST_CHECK(meshActor);
394 Renderer renderer = meshActor.GetRendererAt(0u);
395 DALI_TEST_CHECK(renderer);
397 TextureSet textureSet = renderer.GetTextures();
398 DALI_TEST_EQUALS(textureSet.GetTextureCount(), 9u, TEST_LOCATION);
400 Texture diffuseTexture = textureSet.GetTexture(7u);
401 Texture specularTexture = textureSet.GetTexture(8u);
403 gResourceReadyCalled = false;
404 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
405 model.SetImageBasedLightSource(TEST_DIFFUSE_TEXTURE, TEST_SPECULAR_TEXTURE);
407 application.SendNotification();
408 application.Render();
410 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
411 application.SendNotification();
412 application.Render();
414 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
416 Texture newDiffuseTexture = textureSet.GetTexture(7u);
417 Texture newSpecularTexture = textureSet.GetTexture(8u);
419 DALI_TEST_NOT_EQUALS(diffuseTexture, newDiffuseTexture, 0.0f, TEST_LOCATION);
420 DALI_TEST_NOT_EQUALS(specularTexture, newSpecularTexture, 0.0f, TEST_LOCATION);
427 int UtcDaliModelSetImageBasedLightSource02(void)
429 ToolkitTestApplication application;
431 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
432 application.GetScene().Add(model);
434 gResourceReadyCalled = false;
435 model.ResourceReadySignal().Connect(&OnResourceReady);
436 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
438 application.SendNotification();
439 application.Render();
441 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
442 application.SendNotification();
443 application.Render();
445 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
447 Actor meshActor = model.FindChildByName("AnimatedCube");
448 DALI_TEST_CHECK(meshActor);
450 Renderer renderer = meshActor.GetRendererAt(0u);
451 DALI_TEST_CHECK(renderer);
453 TextureSet textureSet = renderer.GetTextures();
454 DALI_TEST_EQUALS(textureSet.GetTextureCount(), 9u, TEST_LOCATION);
456 Texture diffuseTexture = textureSet.GetTexture(7u);
457 Texture specularTexture = textureSet.GetTexture(8u);
459 // if url is empty, loading is not requested.
460 model.SetImageBasedLightSource("", "");
462 Texture newDiffuseTexture = textureSet.GetTexture(7u);
463 Texture newSpecularTexture = textureSet.GetTexture(8u);
465 DALI_TEST_EQUALS(diffuseTexture, newDiffuseTexture, TEST_LOCATION);
466 DALI_TEST_EQUALS(specularTexture, newSpecularTexture, TEST_LOCATION);
471 int UtcDaliModelSetImageBasedLightSource03(void)
473 ToolkitTestApplication application;
475 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
476 application.GetScene().Add(model);
478 gResourceReadyCalled = false;
479 model.ResourceReadySignal().Connect(&OnResourceReady);
480 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
482 application.SendNotification();
483 application.Render();
485 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
486 application.SendNotification();
487 application.Render();
489 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
491 Actor meshActor = model.FindChildByName("AnimatedCube");
492 DALI_TEST_CHECK(meshActor);
494 Renderer renderer = meshActor.GetRendererAt(0u);
495 DALI_TEST_CHECK(renderer);
497 TextureSet textureSet = renderer.GetTextures();
498 DALI_TEST_EQUALS(textureSet.GetTextureCount(), 9u, TEST_LOCATION);
500 Texture diffuseTexture = textureSet.GetTexture(7u);
501 Texture specularTexture = textureSet.GetTexture(8u);
503 gResourceReadyCalled = false;
504 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
505 model.SetImageBasedLightSource("dummy.ktx", "dummy.ktx");
507 application.SendNotification();
508 application.Render();
510 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
511 application.SendNotification();
512 application.Render();
514 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
516 Texture newDiffuseTexture = textureSet.GetTexture(7u);
517 Texture newSpecularTexture = textureSet.GetTexture(8u);
519 DALI_TEST_EQUALS(diffuseTexture, newDiffuseTexture, TEST_LOCATION);
520 DALI_TEST_EQUALS(specularTexture, newSpecularTexture, TEST_LOCATION);
525 int UtcDaliModelSetImageBasedLightSource04(void)
527 ToolkitTestApplication application;
529 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
530 model.SetImageBasedLightSource(TEST_DIFFUSE_TEXTURE, TEST_SPECULAR_TEXTURE);
531 application.GetScene().Add(model);
533 gResourceReadyCalled = false;
534 model.ResourceReadySignal().Connect(&OnResourceReady);
535 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
537 application.SendNotification();
538 application.Render();
540 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
541 application.SendNotification();
542 application.Render();
544 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
548 int UtcDaliModelImageBasedFactor(void)
550 ToolkitTestApplication application;
552 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
554 DALI_TEST_EQUALS(model.GetImageBasedLightScaleFactor(), 1.0f, TEST_LOCATION);
556 model.SetImageBasedLightScaleFactor(0.5f);
557 DALI_TEST_EQUALS(model.GetImageBasedLightScaleFactor(), 0.5f, TEST_LOCATION);
561 int UtcDaliModelChildrenSensitive01(void)
563 ToolkitTestApplication application;
565 Scene3D::Model view = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
566 view.SetProperty(Dali::Actor::Property::SIZE, Vector3(100, 100, 100));
567 view.SetProperty(Dali::Actor::Property::POSITION, Vector3(0, 0, 0));
568 view.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
569 view.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
571 // Get default vaule.
572 DALI_TEST_EQUALS(view.GetChildrenSensitive(), DEFAULT_MODEL_CHILDREN_SENSITIVE, TEST_LOCATION);
574 // Allow children actor's event before on scene.
575 view.SetChildrenSensitive(true);
576 DALI_TEST_EQUALS(view.GetChildrenSensitive(), true, TEST_LOCATION);
577 application.GetScene().Add(view);
579 gResourceReadyCalled = false;
580 view.ResourceReadySignal().Connect(&OnResourceReady);
581 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
583 application.SendNotification();
584 application.Render();
586 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
587 application.SendNotification();
588 application.Render();
590 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
592 Actor meshActor = view.FindChildByName("AnimatedCube");
593 DALI_TEST_CHECK(meshActor);
595 // connect hit-test signal
596 gTouchCallBackCalled = false;
597 meshActor.TouchedSignal().Connect(TestTouchCallback);
599 Vector2 sceneSize = application.GetScene().GetSize();
601 // Try to touch center of scene.
602 Dali::Integration::Point point;
603 point.SetState(PointState::DOWN);
604 point.SetScreenPosition(sceneSize * 0.5f);
605 Dali::Integration::TouchEvent event;
606 event.AddPoint(point);
608 // flush the queue and render once
609 application.SendNotification();
610 application.Render();
613 DALI_TEST_CHECK(!gTouchCallBackCalled);
614 application.ProcessEvent(event);
616 DALI_TEST_CHECK(gTouchCallBackCalled);
619 gTouchCallBackCalled = false;
621 // Block children actor's event
622 view.SetChildrenSensitive(false);
623 DALI_TEST_EQUALS(view.GetChildrenSensitive(), false, TEST_LOCATION);
625 // flush the queue and render once
626 application.SendNotification();
627 application.Render();
630 DALI_TEST_CHECK(!gTouchCallBackCalled);
631 application.ProcessEvent(event);
633 DALI_TEST_CHECK(!gTouchCallBackCalled);
636 gTouchCallBackCalled = false;
639 view.SetChildrenSensitive(true);
640 DALI_TEST_EQUALS(view.GetChildrenSensitive(), true, TEST_LOCATION);
642 // flush the queue and render once
643 application.SendNotification();
644 application.Render();
647 DALI_TEST_CHECK(!gTouchCallBackCalled);
648 application.ProcessEvent(event);
650 DALI_TEST_CHECK(gTouchCallBackCalled);
653 gTouchCallBackCalled = false;
658 int UtcDaliModelChildrenSensitive02(void)
660 ToolkitTestApplication application;
662 Scene3D::Model view = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
663 view.SetProperty(Dali::Actor::Property::SIZE, Vector3(100, 100, 100));
664 view.SetProperty(Dali::Actor::Property::POSITION, Vector3(0, 0, 0));
665 view.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
666 view.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
669 DALI_TEST_EQUALS(view.GetChildrenSensitive(), DEFAULT_MODEL_CHILDREN_SENSITIVE, TEST_LOCATION);
671 // Block children actor's event before on scene.
672 view.SetChildrenSensitive(false);
673 DALI_TEST_EQUALS(view.GetChildrenSensitive(), false, TEST_LOCATION);
674 application.GetScene().Add(view);
676 gResourceReadyCalled = false;
677 view.ResourceReadySignal().Connect(&OnResourceReady);
678 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
680 application.SendNotification();
681 application.Render();
683 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
684 application.SendNotification();
685 application.Render();
687 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
689 Actor meshActor = view.FindChildByName("AnimatedCube");
690 DALI_TEST_CHECK(meshActor);
692 // connect hit-test signal
693 gTouchCallBackCalled = false;
694 meshActor.TouchedSignal().Connect(TestTouchCallback);
696 Vector2 sceneSize = application.GetScene().GetSize();
698 // Try to touch center of scene.
699 Dali::Integration::Point point;
700 point.SetState(PointState::DOWN);
701 point.SetScreenPosition(sceneSize * 0.5f);
702 Dali::Integration::TouchEvent event;
703 event.AddPoint(point);
705 // flush the queue and render once
706 application.SendNotification();
707 application.Render();
710 DALI_TEST_CHECK(!gTouchCallBackCalled);
711 application.ProcessEvent(event);
713 DALI_TEST_CHECK(!gTouchCallBackCalled);
716 gTouchCallBackCalled = false;
719 view.SetChildrenSensitive(true);
720 DALI_TEST_EQUALS(view.GetChildrenSensitive(), true, TEST_LOCATION);
722 // flush the queue and render once
723 application.SendNotification();
724 application.Render();
727 DALI_TEST_CHECK(!gTouchCallBackCalled);
728 application.ProcessEvent(event);
730 DALI_TEST_CHECK(gTouchCallBackCalled);
733 gTouchCallBackCalled = false;
738 int UtcDaliModelChildrenFocusable01(void)
740 ToolkitTestApplication application;
742 Scene3D::Model view = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
743 view.SetProperty(Dali::Actor::Property::SIZE, Vector3(100, 100, 100));
744 view.SetProperty(Dali::Actor::Property::POSITION, Vector3(0, 0, 0));
745 view.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
746 view.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
748 // Get vaule. Default is false.
749 DALI_TEST_EQUALS(view.GetChildrenFocusable(), DEFAULT_MODEL_CHILDREN_FOCUSABLE, TEST_LOCATION);
751 // Allow children actor's focus before on scene.
752 view.SetChildrenFocusable(true);
753 DALI_TEST_EQUALS(view.GetChildrenFocusable(), true, TEST_LOCATION);
754 application.GetScene().Add(view);
756 gResourceReadyCalled = false;
757 view.ResourceReadySignal().Connect(&OnResourceReady);
758 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
760 application.SendNotification();
761 application.Render();
763 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
764 application.SendNotification();
765 application.Render();
767 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
769 Actor meshActor = view.FindChildByName("AnimatedCube");
770 DALI_TEST_CHECK(meshActor);
772 // Enable the default algorithm
773 KeyboardFocusManager manager = KeyboardFocusManager::Get();
774 DALI_TEST_CHECK(manager);
775 Dali::Toolkit::DevelKeyboardFocusManager::EnableDefaultAlgorithm(manager, true);
777 // connect focusable signal
778 gFocusChangedCallBackCalled = false;
779 meshActor.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
780 manager.FocusChangedSignal().Connect(TestFocusChangedCallback);
782 // Initialize with some left-positioned actor
783 Control focusStartActor = Control::New();
784 focusStartActor.SetProperty(Dali::Actor::Property::SIZE, Vector3(100, 100, 100));
785 focusStartActor.SetProperty(Dali::Actor::Property::POSITION, Vector3(-200, 0, 0));
786 focusStartActor.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
787 focusStartActor.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
788 focusStartActor.SetProperty(Dali::Actor::Property::KEYBOARD_FOCUSABLE, true);
789 application.GetScene().Add(focusStartActor);
792 manager.ClearFocus();
793 manager.SetCurrentFocusActor(focusStartActor);
794 gFocusChangedCallBackCalled = false;
796 // flush the queue and render once
797 application.SendNotification();
798 application.Render();
800 // Focusable view find success
801 DALI_TEST_CHECK(manager.MoveFocus(Control::KeyboardFocus::RIGHT) == true);
802 DALI_TEST_CHECK(gFocusChangedCallBackCalled);
805 manager.ClearFocus();
806 manager.SetCurrentFocusActor(focusStartActor);
807 gFocusChangedCallBackCalled = false;
809 // Block children actor's focus
810 view.SetChildrenFocusable(false);
811 DALI_TEST_EQUALS(view.GetChildrenFocusable(), false, TEST_LOCATION);
813 // flush the queue and render once
814 application.SendNotification();
815 application.Render();
817 // Focusable view find failed
818 DALI_TEST_CHECK(manager.MoveFocus(Control::KeyboardFocus::RIGHT) == false);
819 DALI_TEST_CHECK(!gFocusChangedCallBackCalled);
822 manager.ClearFocus();
823 manager.SetCurrentFocusActor(focusStartActor);
824 gFocusChangedCallBackCalled = false;
827 view.SetChildrenFocusable(true);
828 DALI_TEST_EQUALS(view.GetChildrenFocusable(), true, TEST_LOCATION);
830 // flush the queue and render once
831 application.SendNotification();
832 application.Render();
834 // Focusable view find success
835 DALI_TEST_CHECK(manager.MoveFocus(Control::KeyboardFocus::RIGHT) == true);
836 DALI_TEST_CHECK(gFocusChangedCallBackCalled);
839 manager.ClearFocus();
840 manager.SetCurrentFocusActor(focusStartActor);
841 gFocusChangedCallBackCalled = false;
846 int UtcDaliModelModelChildrenFocusable02(void)
848 ToolkitTestApplication application;
850 Scene3D::Model view = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
851 view.SetProperty(Dali::Actor::Property::SIZE, Vector3(100, 100, 100));
852 view.SetProperty(Dali::Actor::Property::POSITION, Vector3(0, 0, 0));
853 view.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
854 view.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
856 // Get vaule. Default is true.
857 DALI_TEST_EQUALS(view.GetChildrenFocusable(), DEFAULT_MODEL_CHILDREN_FOCUSABLE, TEST_LOCATION);
859 // Block children actor's focus before on scene.
860 view.SetChildrenFocusable(false);
861 DALI_TEST_EQUALS(view.GetChildrenFocusable(), false, TEST_LOCATION);
862 application.GetScene().Add(view);
864 gResourceReadyCalled = false;
865 view.ResourceReadySignal().Connect(&OnResourceReady);
866 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
868 application.SendNotification();
869 application.Render();
871 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
872 application.SendNotification();
873 application.Render();
875 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
877 Actor meshActor = view.FindChildByName("AnimatedCube");
878 DALI_TEST_CHECK(meshActor);
880 // Enable the default algorithm
881 KeyboardFocusManager manager = KeyboardFocusManager::Get();
882 DALI_TEST_CHECK(manager);
883 Dali::Toolkit::DevelKeyboardFocusManager::EnableDefaultAlgorithm(manager, true);
885 // connect focusable signal
886 gFocusChangedCallBackCalled = false;
887 meshActor.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
888 manager.FocusChangedSignal().Connect(TestFocusChangedCallback);
890 // Initialize with some left-positioned actor
891 Control focusStartActor = Control::New();
892 focusStartActor.SetProperty(Dali::Actor::Property::SIZE, Vector3(100, 100, 100));
893 focusStartActor.SetProperty(Dali::Actor::Property::POSITION, Vector3(-200, 0, 0));
894 focusStartActor.SetProperty(Dali::Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
895 focusStartActor.SetProperty(Dali::Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
896 focusStartActor.SetProperty(Dali::Actor::Property::KEYBOARD_FOCUSABLE, true);
897 application.GetScene().Add(focusStartActor);
900 manager.ClearFocus();
901 manager.SetCurrentFocusActor(focusStartActor);
902 gFocusChangedCallBackCalled = false;
904 // flush the queue and render once
905 application.SendNotification();
906 application.Render();
908 // Focusable view find failed
909 DALI_TEST_CHECK(manager.MoveFocus(Control::KeyboardFocus::RIGHT) == false);
910 DALI_TEST_CHECK(!gFocusChangedCallBackCalled);
913 manager.ClearFocus();
914 manager.SetCurrentFocusActor(focusStartActor);
915 gFocusChangedCallBackCalled = false;
918 view.SetChildrenFocusable(true);
919 DALI_TEST_EQUALS(view.GetChildrenFocusable(), true, TEST_LOCATION);
921 // flush the queue and render once
922 application.SendNotification();
923 application.Render();
925 // Focusable view find success
926 DALI_TEST_CHECK(manager.MoveFocus(Control::KeyboardFocus::RIGHT) == true);
927 DALI_TEST_CHECK(gFocusChangedCallBackCalled);
930 manager.ClearFocus();
931 manager.SetCurrentFocusActor(focusStartActor);
932 gFocusChangedCallBackCalled = false;
937 int UtcDaliModelAnimation01(void)
939 ToolkitTestApplication application;
941 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
942 model.SetProperty(Dali::Actor::Property::SIZE, Vector2(50, 50));
943 application.GetScene().Add(model);
945 gResourceReadyCalled = false;
946 model.ResourceReadySignal().Connect(&OnResourceReady);
947 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
949 application.SendNotification();
950 application.Render();
952 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
953 application.SendNotification();
954 application.Render();
956 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
958 uint32_t animationCount = model.GetAnimationCount();
959 DALI_TEST_EQUALS(1, animationCount, TEST_LOCATION);
961 Animation animationByIndex = model.GetAnimation(0u);
962 DALI_TEST_CHECK(animationByIndex);
964 Animation animationByName = model.GetAnimation("animation_AnimatedCube");
965 DALI_TEST_CHECK(animationByName);
966 DALI_TEST_EQUALS(animationByIndex, animationByName, TEST_LOCATION);
971 int UtcDaliModelAnimation02(void)
973 ToolkitTestApplication application;
975 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_ANIMATION_TEST_FILE_NAME);
976 model.SetProperty(Dali::Actor::Property::SIZE, Vector2(50, 50));
977 application.GetScene().Add(model);
979 gResourceReadyCalled = false;
980 model.ResourceReadySignal().Connect(&OnResourceReady);
981 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
983 application.SendNotification();
984 application.Render();
986 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
987 application.SendNotification();
988 application.Render();
990 uint32_t animationCount = model.GetAnimationCount();
991 DALI_TEST_EQUALS(9, animationCount, TEST_LOCATION);
993 Animation animation1 = model.GetAnimation("Step Scale");
994 DALI_TEST_CHECK(animation1);
995 DALI_TEST_EQUALS(1.66667f, animation1.GetDuration(), 0.001f, TEST_LOCATION);
997 Animation animation2 = model.GetAnimation("CubicSpline Scale");
998 DALI_TEST_CHECK(animation2);
999 DALI_TEST_EQUALS(1.66667f, animation2.GetDuration(), 0.001f, TEST_LOCATION);
1001 DALI_TEST_NOT_EQUALS(animation1, animation2, 0.0f, TEST_LOCATION);
1006 int UtcDaliModelAnimation03(void)
1008 ToolkitTestApplication application;
1010 Scene3D::Model model = Scene3D::Model::New(TEST_DLI_EXERCISE_FILE_NAME);
1011 model.SetProperty(Dali::Actor::Property::SIZE, Vector2(50, 50));
1012 application.GetScene().Add(model);
1014 gResourceReadyCalled = false;
1015 model.ResourceReadySignal().Connect(&OnResourceReady);
1016 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
1018 application.SendNotification();
1019 application.Render();
1021 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1022 application.SendNotification();
1023 application.Render();
1025 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
1027 uint32_t animationCount = model.GetAnimationCount();
1028 DALI_TEST_EQUALS(18, animationCount, TEST_LOCATION);
1030 Animation animationByIndex = model.GetAnimation(0u);
1031 DALI_TEST_CHECK(animationByIndex);
1033 Animation animationByName = model.GetAnimation("idleClip");
1034 DALI_TEST_CHECK(animationByName);
1035 DALI_TEST_EQUALS(animationByIndex, animationByName, TEST_LOCATION);
1040 int UtcDaliModelCameraGenerate01(void)
1042 ToolkitTestApplication application;
1044 Scene3D::Model model = Scene3D::Model::New(TEST_DLI_EXERCISE_FILE_NAME);
1045 model.SetProperty(Dali::Actor::Property::SIZE, Vector2(50, 50));
1046 application.GetScene().Add(model);
1048 gResourceReadyCalled = false;
1049 model.ResourceReadySignal().Connect(&OnResourceReady);
1050 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
1052 application.SendNotification();
1053 application.Render();
1055 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1056 application.SendNotification();
1057 application.Render();
1059 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
1061 uint32_t cameraCount = model.GetCameraCount();
1062 DALI_TEST_EQUALS(1, cameraCount, TEST_LOCATION);
1064 CameraActor generatedCamera = model.GenerateCamera(0u);
1065 DALI_TEST_CHECK(generatedCamera);
1067 generatedCamera = model.GenerateCamera(1u); // Fail to generate camera
1068 DALI_TEST_CHECK(!generatedCamera);
1073 int UtcDaliModelCameraGenerate02(void)
1075 ToolkitTestApplication application;
1077 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
1078 model.SetProperty(Dali::Actor::Property::SIZE, Vector2(50, 50));
1079 application.GetScene().Add(model);
1081 gResourceReadyCalled = false;
1082 model.ResourceReadySignal().Connect(&OnResourceReady);
1083 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
1085 application.SendNotification();
1086 application.Render();
1088 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1089 application.SendNotification();
1090 application.Render();
1092 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);
1094 uint32_t cameraCount = model.GetCameraCount();
1095 DALI_TEST_EQUALS(6, cameraCount, TEST_LOCATION);
1097 CameraActor generatedCamera0 = model.GenerateCamera(0u);
1098 DALI_TEST_CHECK(generatedCamera0);
1099 CameraActor generatedCamera1 = model.GenerateCamera(1u);
1100 DALI_TEST_CHECK(generatedCamera1);
1101 CameraActor generatedCamera2 = model.GenerateCamera(2u);
1102 DALI_TEST_CHECK(generatedCamera2);
1103 CameraActor generatedCamera3 = model.GenerateCamera(3u); // Infinity far camera
1104 DALI_TEST_CHECK(generatedCamera3);
1105 CameraActor generatedCamera4 = model.GenerateCamera(4u); // Broken camera 1
1106 DALI_TEST_CHECK(!generatedCamera4);
1107 CameraActor generatedCamera5 = model.GenerateCamera(5u); // Broken camera 2
1108 DALI_TEST_CHECK(!generatedCamera5);
1109 CameraActor generatedCamera6 = model.GenerateCamera(6u); // Out of bound
1110 DALI_TEST_CHECK(!generatedCamera6);
1112 CameraActor appliedCamera;
1113 DALI_TEST_EQUALS(model.ApplyCamera(0u, appliedCamera), false, TEST_LOCATION); // Cannot apply into empty camera.
1115 auto CompareCameraProperties = [](CameraActor lhs, CameraActor rhs, const char* location) {
1116 DALI_TEST_EQUALS(lhs.GetProperty<int>(Dali::CameraActor::Property::PROJECTION_MODE), rhs.GetProperty<int>(Dali::CameraActor::Property::PROJECTION_MODE), TEST_LOCATION);
1117 DALI_TEST_EQUALS(lhs.GetProperty<float>(Dali::CameraActor::Property::NEAR_PLANE_DISTANCE), rhs.GetProperty<float>(Dali::CameraActor::Property::NEAR_PLANE_DISTANCE), TEST_LOCATION);
1119 if(lhs.GetProperty<int>(Dali::CameraActor::Property::PROJECTION_MODE) == static_cast<int>(Dali::Camera::ProjectionMode::PERSPECTIVE_PROJECTION))
1121 DALI_TEST_EQUALS(lhs.GetProperty<float>(Dali::CameraActor::Property::FIELD_OF_VIEW), rhs.GetProperty<float>(Dali::CameraActor::Property::FIELD_OF_VIEW), TEST_LOCATION);
1122 // TODO : Open this test when infinity far projection implement.
1123 //DALI_TEST_EQUALS(lhs.GetProperty<float>(Dali::CameraActor::Property::FAR_PLANE_DISTANCE), rhs.GetProperty<float>(Dali::CameraActor::Property::FAR_PLANE_DISTANCE), TEST_LOCATION);
1127 DALI_TEST_EQUALS(lhs.GetProperty<float>(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), rhs.GetProperty<float>(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), TEST_LOCATION);
1128 DALI_TEST_EQUALS(lhs.GetProperty<float>(Dali::CameraActor::Property::FAR_PLANE_DISTANCE), rhs.GetProperty<float>(Dali::CameraActor::Property::FAR_PLANE_DISTANCE), TEST_LOCATION);
1132 appliedCamera = CameraActor::New();
1133 DALI_TEST_EQUALS(model.ApplyCamera(0u, appliedCamera), true, TEST_LOCATION);
1134 CompareCameraProperties(generatedCamera0, appliedCamera, TEST_LOCATION);
1135 DALI_TEST_EQUALS(model.ApplyCamera(1u, appliedCamera), true, TEST_LOCATION);
1136 CompareCameraProperties(generatedCamera1, appliedCamera, TEST_LOCATION);
1137 DALI_TEST_EQUALS(model.ApplyCamera(2u, appliedCamera), true, TEST_LOCATION);
1138 CompareCameraProperties(generatedCamera2, appliedCamera, TEST_LOCATION);
1139 DALI_TEST_EQUALS(model.ApplyCamera(3u, appliedCamera), true, TEST_LOCATION);
1140 CompareCameraProperties(generatedCamera3, appliedCamera, TEST_LOCATION);
1141 DALI_TEST_EQUALS(model.ApplyCamera(4u, appliedCamera), false, TEST_LOCATION); // Broken camera 1
1142 DALI_TEST_EQUALS(model.ApplyCamera(5u, appliedCamera), false, TEST_LOCATION); // Broken camera 2
1143 DALI_TEST_EQUALS(model.ApplyCamera(6u, appliedCamera), false, TEST_LOCATION); // Cannot apply over the index.
1148 int UtcDaliModelMultiplePrimitives(void)
1150 ToolkitTestApplication application;
1152 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_MULTIPLE_PRIMITIVE_FILE_NAME);
1153 model.SetProperty(Dali::Actor::Property::SIZE, Vector2(50, 50));
1154 application.GetScene().Add(model);
1156 gResourceReadyCalled = false;
1157 model.ResourceReadySignal().Connect(&OnResourceReady);
1158 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
1160 application.SendNotification();
1161 application.Render();
1163 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1164 application.SendNotification();
1165 application.Render();
1167 Actor actor = model.FindChildByName("rootNode");
1169 DALI_TEST_EQUALS(0, actor.GetChildCount(), TEST_LOCATION);
1170 DALI_TEST_EQUALS(2, actor.GetRendererCount(), TEST_LOCATION);
1175 int UtcDaliModelColorMode(void)
1177 ToolkitTestApplication application;
1179 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_FILE_NAME);
1180 model.SetProperty(Dali::Actor::Property::SIZE, Vector2(50, 50));
1181 model.SetProperty(Dali::Actor::Property::COLOR, Color::RED);
1182 application.GetScene().Add(model);
1184 gResourceReadyCalled = false;
1185 model.ResourceReadySignal().Connect(&OnResourceReady);
1186 DALI_TEST_EQUALS(gResourceReadyCalled, false, TEST_LOCATION);
1188 application.SendNotification();
1189 application.Render();
1191 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1192 application.SendNotification();
1193 application.Render();
1195 Actor actor = model.FindChildByName("AnimatedCube");
1196 Vector4 childColor = actor[Dali::Actor::Property::COLOR];
1197 Vector4 childWorldColor = actor[Dali::Actor::Property::WORLD_COLOR];
1199 DALI_TEST_EQUALS(childColor, Color::WHITE, TEST_LOCATION);
1200 DALI_TEST_EQUALS(childWorldColor, Color::RED, TEST_LOCATION);
1204 int UtcDaliModelResourceReady(void)
1206 ToolkitTestApplication application;
1208 gOnRelayoutCallBackCalled = false;
1209 gResourceReadyCalled = false;
1210 Scene3D::Model model = Scene3D::Model::New(TEST_GLTF_ANIMATION_TEST_FILE_NAME);
1211 model.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
1212 model.OnRelayoutSignal().Connect(OnRelayoutCallback);
1213 model.ResourceReadySignal().Connect(OnResourceReady);
1214 DALI_TEST_EQUALS(model.IsResourceReady(), false, TEST_LOCATION);
1217 DALI_TEST_CHECK(!gOnRelayoutCallBackCalled);
1218 DALI_TEST_CHECK(!gResourceReadyCalled);
1220 application.GetScene().Add(model);
1222 application.SendNotification();
1223 application.Render();
1225 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1226 application.SendNotification();
1227 application.Render();
1229 DALI_TEST_EQUALS(gOnRelayoutCallBackCalled, false, TEST_LOCATION);
1230 DALI_TEST_EQUALS(model.IsResourceReady(), true, TEST_LOCATION);
1231 DALI_TEST_EQUALS(gResourceReadyCalled, true, TEST_LOCATION);