Added pixel format to fix bug with ktx loader
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-scene-loader / utc-Dali-KtxLoader.cpp
1 /*
2  * Copyright (c) 2021 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
18 // Enable debug log for test coverage
19 #define DEBUG_ENABLED 1
20
21 #include "dali-scene-loader/public-api/ktx-loader.h"
22 #include <dali-test-suite-utils.h>
23 #include <string_view>
24
25 #include <fstream>
26
27 using namespace Dali;
28 using namespace Dali::SceneLoader;
29
30 int UtcDaliKtxLoaderFailNonexistent(void)
31 {
32   CubeData data;
33   DALI_TEST_CHECK(!LoadCubeMapData("non-existent.ktx", data));
34   END_TEST;
35 }
36
37 int UtcDaliKtxLoaderFailInvalid1(void)
38 {
39   CubeData data;
40   DALI_TEST_CHECK(!LoadCubeMapData(TEST_RESOURCE_DIR "/invalid.svg", data)); // file smaller than KTX header
41   END_TEST;
42 }
43
44 int UtcDaliKtxLoaderFailInvalid2(void)
45 {
46   CubeData data;
47   DALI_TEST_CHECK(!LoadCubeMapData(TEST_RESOURCE_DIR "/anim.gif", data)); // not a KTX
48   END_TEST;
49 }
50
51 int UtcDaliKtxLoaderFailTruncated(void)
52 {
53   CubeData data;
54   DALI_TEST_CHECK(!LoadCubeMapData(TEST_RESOURCE_DIR "/truncated.ktx", data));
55   END_TEST;
56 }
57
58 int UtcDaliKtxLoaderSuccess(void)
59 {
60   CubeData cubeData;
61   auto path = TEST_RESOURCE_DIR "/forest_radiance.ktx";
62   DALI_TEST_CHECK(LoadCubeMapData(path, cubeData));
63
64   DALI_TEST_EQUAL(6u, cubeData.data.size());
65   for (auto& face: cubeData.data)
66   {
67     uint32_t size = 64;
68     for (auto& mipData: face)
69     {
70       DALI_TEST_EQUAL(size, mipData.GetWidth());
71       DALI_TEST_EQUAL(size, mipData.GetHeight());
72       DALI_TEST_EQUAL(Pixel::Format::RGB888, mipData.GetPixelFormat());
73       size /= 2;
74     }
75   }
76
77   END_TEST;
78 }
79
80 int UtcDaliKtxLoaderFormats(void)
81 {
82   auto resPath = TEST_RESOURCE_DIR "/";
83 #define FORMAT_PATH(x) { #x, Pixel::x }
84 #define FORMAT_COMPRESSED_PATH(x) { #x, Pixel::COMPRESSED_ ## x ## _KHR }
85   std::pair<std::string, Pixel::Format> pathFormats[] {
86     FORMAT_COMPRESSED_PATH(RGBA_ASTC_4x4),
87     FORMAT_COMPRESSED_PATH(RGBA_ASTC_5x4),
88     FORMAT_COMPRESSED_PATH(RGBA_ASTC_5x5),
89     FORMAT_COMPRESSED_PATH(RGBA_ASTC_6x5),
90     FORMAT_COMPRESSED_PATH(RGBA_ASTC_6x6),
91     FORMAT_COMPRESSED_PATH(RGBA_ASTC_8x5),
92     FORMAT_COMPRESSED_PATH(RGBA_ASTC_8x6),
93     FORMAT_COMPRESSED_PATH(RGBA_ASTC_8x8),
94     FORMAT_COMPRESSED_PATH(RGBA_ASTC_10x5),
95     FORMAT_COMPRESSED_PATH(RGBA_ASTC_10x6),
96     FORMAT_COMPRESSED_PATH(RGBA_ASTC_10x10),
97     FORMAT_COMPRESSED_PATH(RGBA_ASTC_12x10),
98     FORMAT_COMPRESSED_PATH(RGBA_ASTC_12x12),
99     FORMAT_PATH(RGB16F),
100     FORMAT_PATH(RGB32F),
101     FORMAT_PATH(RGBA8888),
102   };
103   for (auto i : pathFormats)
104   {
105     CubeData cubeData;
106     DALI_TEST_CHECK(LoadCubeMapData(resPath + i.first + ".ktx", cubeData));
107     DALI_TEST_EQUAL(cubeData.data[0][0].GetPixelFormat(), i.second);
108   }
109
110   END_TEST;
111 }
112
113 int UtcDaliKtxLoaderCubeDataCreateTexture1(void)
114 {
115   uint32_t pixelBufferSize = 3;
116   uint8_t* pixelBuffer = new uint8_t[pixelBufferSize];
117
118   CubeData cubeData;
119   cubeData.data.push_back({});
120
121   auto pixelData = PixelData::New(pixelBuffer, pixelBufferSize, 1, 1, Pixel::Format::RGB888, PixelData::DELETE_ARRAY);
122   cubeData.data[0].push_back(pixelData);
123
124   TestApplication app;
125   auto texture = cubeData.CreateTexture();
126
127   DALI_TEST_CHECK(texture);
128   DALI_TEST_EQUAL(1u, texture.GetWidth());
129   DALI_TEST_EQUAL(1u, texture.GetHeight());
130
131   END_TEST;
132 }
133
134 int UtcDaliKtxLoaderCubeDataCreateTexture2(void)
135 {
136   CubeData cubeData;
137   auto path = TEST_RESOURCE_DIR "/forest_radiance.ktx";
138   DALI_TEST_CHECK(LoadCubeMapData(path, cubeData));
139
140   TestApplication app;
141   auto texture = cubeData.CreateTexture();
142
143   DALI_TEST_CHECK(texture);
144   DALI_TEST_EQUAL(64u, texture.GetWidth());
145   DALI_TEST_EQUAL(64u, texture.GetHeight());
146
147   END_TEST;
148 }
149
150 int UtcDaliKtxLoaderCubeDataCreateTexture3(void)
151 {
152   CubeData cubeData;
153   auto path = TEST_RESOURCE_DIR "/papermill_E_diffuse-64.ktx";
154   DALI_TEST_CHECK(LoadCubeMapData(path, cubeData));
155
156   TestApplication app;
157   auto texture = cubeData.CreateTexture();
158
159   DALI_TEST_CHECK(texture);
160   DALI_TEST_EQUAL(64u, texture.GetWidth());
161   DALI_TEST_EQUAL(64u, texture.GetHeight());
162
163   END_TEST;
164
165 }