2 * Copyright (c) 2015 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.
21 #include <dali/public-api/dali-core.h>
22 #include <dali-test-suite-utils.h>
23 #include <test-native-image.h>
27 void utc_dali_native_image_startup(void)
29 test_return_value = TET_UNDEF;
32 void utc_dali_native_image_cleanup(void)
34 test_return_value = TET_PASS;
37 int UtcDaliNativeImageNew(void)
39 TestApplication application;
41 tet_infoline("UtcDaliNativeImageNew - NativeImage::New(NativeImageInterface&)");
43 // invoke default handle constructor
45 TestNativeImagePointer nativeImage = TestNativeImage::New(16, 16);
47 DALI_TEST_CHECK( !image );
50 image = NativeImage::New(*(nativeImage.Get()));
52 DALI_TEST_CHECK( image );
56 int UtcDaliNativeImageCopyConstructor(void)
58 TestApplication application;
60 tet_infoline("UtcDaliNativeImageCopyConstructor - NativeImage::NativeImage( const NativeImage& )");
63 DALI_TEST_CHECK( !image1 );
65 TestNativeImagePointer nativeImage = TestNativeImage::New(16, 16);
66 image1 = NativeImage::New(*(nativeImage.Get()));
67 NativeImage image2( image1 );
69 DALI_TEST_CHECK( image2 );
70 DALI_TEST_EQUALS( image1, image2, TEST_LOCATION );
75 int UtcDaliNativeImageDownCast(void)
77 TestApplication application;
78 tet_infoline("Testing Dali::Image::DownCast()");
80 TestNativeImagePointer nativeImage = TestNativeImage::New(16, 16);
81 NativeImage image = NativeImage::New(*(nativeImage.Get()));
83 BaseHandle object(image);
85 NativeImage image2 = NativeImage::DownCast(object);
86 DALI_TEST_CHECK(image2);
88 NativeImage image3 = DownCast< NativeImage >(object);
89 DALI_TEST_CHECK(image3);
91 BaseHandle unInitializedObject;
92 NativeImage image4 = NativeImage::DownCast(unInitializedObject);
93 DALI_TEST_CHECK(!image4);
95 NativeImage image5 = DownCast< NativeImage >(unInitializedObject);
96 DALI_TEST_CHECK(!image5);
98 Image image6 = NativeImage::New(*(nativeImage.Get()));
99 NativeImage image7 = NativeImage::DownCast(image6);
100 DALI_TEST_CHECK(image7);
104 int UtcDaliNativeImageCreateGlTextureN(void)
106 TestApplication application;
107 tet_infoline( "Testing Dali::NativeImage::GenerateGlTexture()" );
112 image.CreateGlTexture();
113 tet_printf( "Assertion test failed - no Exception\n" );
114 tet_result( TET_FAIL );
116 catch( Dali::DaliException& e )
118 DALI_TEST_PRINT_ASSERT( e );
119 DALI_TEST_ASSERT( e, "image &&", TEST_LOCATION );
124 int UtcDaliNativeImageCreateGlTextureP(void)
126 TestApplication application;
127 tet_infoline( "Testing Dali::NativeImage::GenerateGlTexture()" );
129 TestNativeImagePointer imageInterface = TestNativeImage::New( 16, 16 );
130 NativeImage image = NativeImage::New( *(imageInterface.Get()) );
131 DALI_TEST_CHECK( image );
133 image.CreateGlTexture();
135 application.SendNotification();
136 application.Render(16);
138 DALI_TEST_EQUALS( imageInterface->mExtensionCreateCalls, 1, TEST_LOCATION );
139 DALI_TEST_EQUALS( imageInterface->mTargetTextureCalls, 1, TEST_LOCATION );
144 int UtcDaliNativeImageContextLoss(void)
146 TestApplication application;
147 tet_infoline( "Testing Dali::NativeImage behaviour through a context lost/regained cycle." );
149 // Build an image that is expected to have a GL texture created for it and
150 // recreated in a GL context recovery:
151 TestNativeImagePointer eagerImageInterface = TestNativeImage::New( 16, 16 );
152 NativeImage eagerImage = NativeImage::New( *(eagerImageInterface.Get()) );
153 DALI_TEST_CHECK( eagerImage );
155 // Build a regular lazy-allocated image for comparison:
156 TestNativeImagePointer lazyImageInterface = TestNativeImage::New( 16, 16 );
157 NativeImage lazyImage = NativeImage::New( *(lazyImageInterface.Get()) );
158 DALI_TEST_CHECK( lazyImage );
160 eagerImage.CreateGlTexture();
162 application.SendNotification();
163 application.Render(16);
165 // Cycle through a context loss and regain, asserting that the texture is
166 // not reallocated if it already existed before the cycle and is never allocated
167 // throughout the cycle if of the regular lazy kind:
169 // Call render thread context destroyed / created functions:
170 application.ResetContext();
172 // Call event thread function:
173 application.GetCore().RecoverFromContextLoss();
175 // Run update/render loop
176 application.SendNotification();
177 application.Render(16);
179 DALI_TEST_EQUALS( eagerImageInterface->mExtensionCreateCalls, 1, TEST_LOCATION );
180 DALI_TEST_EQUALS( eagerImageInterface->mTargetTextureCalls, 1, TEST_LOCATION );
182 DALI_TEST_EQUALS( lazyImageInterface->mExtensionCreateCalls, 0, TEST_LOCATION );
183 DALI_TEST_EQUALS( lazyImageInterface->mTargetTextureCalls, 0, TEST_LOCATION );