[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-TextureManager.cpp
1 /*
2  * Copyright (c) 2023 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 #include <dali-toolkit-test-suite-utils.h>
18 #include <dali-toolkit/devel-api/image-loader/texture-manager.h>
19 #include <dali/public-api/rendering/texture-set.h>
20 #include <dali/public-api/rendering/texture.h>
21 #include <stdlib.h>
22 #include <iostream>
23
24 using namespace Dali;
25 using namespace Dali::Toolkit;
26
27 namespace
28 {
29 } // namespace
30
31 void dali_texture_manager_startup(void)
32 {
33   test_return_value = TET_UNDEF;
34 }
35
36 void dali_texture_manager_cleanup(void)
37 {
38   test_return_value = TET_PASS;
39 }
40
41 int UtcDaliTextureManagerAddRemoveP(void)
42 {
43   ToolkitTestApplication application;
44   tet_infoline("UtcDaliTextureManager");
45
46   std::string url;
47   std::string url2;
48   std::string url3;
49   std::string url4;
50   std::string url5;
51   std::string url6;
52   // scope to ensure texturesets are kept alive by texture manager
53   {
54     auto texture = Texture::New(Dali::TextureType::TEXTURE_2D, Pixel::RGBA8888, 88, 99);
55     url          = TextureManager::AddTexture(texture);
56     DALI_TEST_CHECK(url.size() > 0u);
57
58     auto textureSet = TextureSet::New();
59     textureSet.SetTexture(0u, texture);
60     url2 = TextureManager::AddTexture(textureSet);
61     DALI_TEST_CHECK(url2.size() > 0u);
62     DALI_TEST_CHECK(url2 != url);
63
64     // add same texture again, should give new Url
65     url3 = TextureManager::AddTexture(texture);
66     DALI_TEST_CHECK(url3.size() > 0u);
67     DALI_TEST_CHECK(url3 != url);
68     DALI_TEST_CHECK(url3 != url2);
69
70     textureSet = TextureSet::New();
71     url4       = TextureManager::AddTexture(textureSet);
72     DALI_TEST_CHECK(url4.size() > 0u);
73     DALI_TEST_CHECK(url4 != url);
74     DALI_TEST_CHECK(url4 != url2);
75     DALI_TEST_CHECK(url4 != url3);
76
77     // add same texture again with preMultiplied, should give new Url
78     url5 = TextureManager::AddTexture(texture, true);
79     DALI_TEST_CHECK(url5.size() > 0u);
80     DALI_TEST_CHECK(url5 != url);
81     DALI_TEST_CHECK(url5 != url2);
82     DALI_TEST_CHECK(url5 != url3);
83     DALI_TEST_CHECK(url5 != url4);
84
85     textureSet = TextureSet::New();
86     url6       = TextureManager::AddTexture(textureSet, true);
87     DALI_TEST_CHECK(url6.size() > 0u);
88     DALI_TEST_CHECK(url6 != url);
89     DALI_TEST_CHECK(url6 != url2);
90     DALI_TEST_CHECK(url6 != url3);
91     DALI_TEST_CHECK(url6 != url4);
92     DALI_TEST_CHECK(url6 != url5);
93   }
94
95   auto textureSet = TextureManager::RemoveTexture(url);
96   DALI_TEST_CHECK(textureSet && "Texture needs to be non empty handle");
97   auto texture = textureSet.GetTexture(0u);
98   DALI_TEST_EQUAL(texture.GetWidth(), 88u);
99   DALI_TEST_EQUAL(texture.GetHeight(), 99u);
100   textureSet = TextureManager::RemoveTexture(url);
101   DALI_TEST_CHECK(!textureSet && "Texture needs to be removed from texture manager");
102
103   textureSet = TextureManager::RemoveTexture(url2);
104   DALI_TEST_CHECK(textureSet && "Texture needs to be non empty handle");
105   texture = textureSet.GetTexture(0u);
106   DALI_TEST_EQUAL(texture.GetWidth(), 88u);
107   DALI_TEST_EQUAL(texture.GetHeight(), 99u);
108   textureSet = TextureManager::RemoveTexture(url2);
109   DALI_TEST_CHECK(!textureSet && "Texture needs to be removed from texture manager");
110
111   textureSet = TextureManager::RemoveTexture(url3);
112   DALI_TEST_CHECK(textureSet && "Texture needs to be non empty handle");
113   texture = textureSet.GetTexture(0u);
114   DALI_TEST_EQUAL(texture.GetWidth(), 88u);
115   DALI_TEST_EQUAL(texture.GetHeight(), 99u);
116   textureSet = TextureManager::RemoveTexture(url3);
117   DALI_TEST_CHECK(!textureSet && "Texture needs to be removed from texture manager");
118
119   textureSet = TextureManager::RemoveTexture(url4);
120   DALI_TEST_CHECK(textureSet && "Texture needs to be non empty handle");
121   textureSet = TextureManager::RemoveTexture(url4);
122   DALI_TEST_CHECK(!textureSet && "Texture needs to be removed from texture manager");
123
124   textureSet = TextureManager::RemoveTexture(url5);
125   DALI_TEST_CHECK(textureSet && "Texture needs to be non empty handle");
126   textureSet = TextureManager::RemoveTexture(url5);
127   DALI_TEST_CHECK(!textureSet && "Texture needs to be removed from texture manager");
128
129   textureSet = TextureManager::RemoveTexture(url6);
130   DALI_TEST_CHECK(textureSet && "Texture needs to be non empty handle");
131   textureSet = TextureManager::RemoveTexture(url6);
132   DALI_TEST_CHECK(!textureSet && "Texture needs to be removed from texture manager");
133
134   END_TEST;
135 }
136
137 int UtcDaliTextureManagerAddN(void)
138 {
139   ToolkitTestApplication application;
140   tet_infoline("UtcDaliTextureManager");
141
142   // empty texture is ok, though pointless from app point of view
143   TextureSet  empty;
144   std::string url = TextureManager::AddTexture(empty);
145   DALI_TEST_CHECK(url.size() > 0u);
146
147   END_TEST;
148 }
149
150 int UtcDaliTextureManagerRemoveN(void)
151 {
152   ToolkitTestApplication application;
153   tet_infoline("UtcDaliTextureManager");
154
155   // removing empty texture returns empty handle
156   auto texture = TextureManager::RemoveTexture("");
157   DALI_TEST_CHECK(!texture && "Texture should not be found");
158
159   // removing empty texture returns empty handle
160   texture = TextureManager::RemoveTexture("dali://");
161   DALI_TEST_CHECK(!texture && "Texture should not be found");
162
163   // empty texture is ok, though pointless from app point of view
164   TextureSet  empty;
165   std::string url = TextureManager::AddTexture(empty);
166   DALI_TEST_CHECK(url.size() > 0u);
167   // removing texture with wrong URL returns empty handle
168   texture = TextureManager::RemoveTexture("dali://");
169   DALI_TEST_CHECK(!texture && "Texture should not be found");
170
171   // removing ftp texture returns empty handle
172   texture = TextureManager::RemoveTexture("ftp://foobar");
173   DALI_TEST_CHECK(!texture && "Texture should not be found");
174
175   // add a texture
176   url     = TextureManager::AddTexture(texture);
177   texture = TextureManager::RemoveTexture(url + "foo");
178   DALI_TEST_CHECK(!texture && "Texture should not be found");
179
180   END_TEST;
181 }