Revert "License conversion from Flora to Apache 2.0"
[platform/core/uifw/dali-toolkit.git] / automated-tests / TET / dali-test-suite / shader-effects / utc-Dali-BendyEffect.cpp
1 //
2 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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 <iostream>
18
19 #include <stdlib.h>
20 #include <tet_api.h>
21
22 #include <dali/public-api/dali-core.h>
23 #include <dali-toolkit/dali-toolkit.h>
24
25 #include <dali-toolkit-test-suite-utils.h>
26
27 using namespace Dali;
28
29 static void Startup();
30 static void Cleanup();
31
32 extern "C" {
33   void (*tet_startup)() = Startup;
34   void (*tet_cleanup)() = Cleanup;
35 }
36
37 enum {
38   POSITIVE_TC_IDX = 0x01,
39   NEGATIVE_TC_IDX,
40 };
41
42 #define MAX_NUMBER_OF_TESTS 10000
43 extern "C" {
44   struct tet_testlist tet_testlist[MAX_NUMBER_OF_TESTS];
45 }
46
47 // Add test functionality for all APIs in the class (Positive and Negative)
48 TEST_FUNCTION( UtcDaliBendyUninitializedEffect, NEGATIVE_TC_IDX );
49 TEST_FUNCTION( UtcDaliBendyPropertyNamesEffect, POSITIVE_TC_IDX );
50 TEST_FUNCTION( UtcDaliBendyDefaultValuesEffect, POSITIVE_TC_IDX );
51 TEST_FUNCTION( UtcDaliBendyCustomValuesEffect, POSITIVE_TC_IDX );
52
53 // Called only once before first test is run.
54 static void Startup()
55 {
56 }
57
58 // Called only once after last test is run
59 static void Cleanup()
60 {
61 }
62
63 // Create bitmap image
64 BitmapImage CreateBitmapImage()
65 {
66   BitmapImage image = BitmapImage::New(4,4,Pixel::RGBA8888);
67
68   PixelBuffer* pixbuf = image.GetBuffer();
69
70   // Using a 4x4 image gives a better blend with the GL implementation
71   // than a 3x3 image
72   for(size_t i=0; i<16; i++)
73   {
74     pixbuf[i*4+0] = 0xFF;
75     pixbuf[i*4+1] = 0xFF;
76     pixbuf[i*4+2] = 0xFF;
77     pixbuf[i*4+3] = 0xFF;
78   }
79
80   return image;
81 }
82
83 static void UtcDaliBendyUninitializedEffect()
84 {
85   ToolkitTestApplication application;
86
87   Toolkit::BendyEffect effect;
88
89   try
90   {
91     // New() must be called to create a BendyEffect or it wont be valid.
92     effect.SetRadius( 2.0f );
93     DALI_TEST_CHECK( false );
94   }
95   catch (Dali::DaliException& e)
96   {
97     // Tests that a negative test of an assertion succeeds
98     tet_printf("Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
99     DALI_TEST_CHECK(!effect);
100   }
101 }
102
103 static void UtcDaliBendyPropertyNamesEffect()
104 {
105   ToolkitTestApplication application;
106
107   Toolkit::BendyEffect effect = Toolkit::BendyEffect::New();
108
109   // Check the names, this names are used in the shaders code,
110   // if they change the shader code has to be updated
111   DALI_TEST_EQUALS( effect.GetCenterPropertyName(), "uCenter", TEST_LOCATION );
112   DALI_TEST_EQUALS( effect.GetDirectionPropertyName(), "uDirection", TEST_LOCATION );
113   DALI_TEST_EQUALS( effect.GetRadiusPropertyName(), "uRadius", TEST_LOCATION );
114 }
115
116 static void UtcDaliBendyDefaultValuesEffect()
117 {
118   ToolkitTestApplication application;
119
120   Toolkit::BendyEffect effect = Toolkit::BendyEffect::New();
121   DALI_TEST_CHECK( effect );
122
123   BitmapImage image = CreateBitmapImage();
124
125   ImageActor actor = ImageActor::New( image );
126   actor.SetSize( 100.0f, 100.0f );
127   actor.SetShaderEffect( effect );
128   Stage::GetCurrent().Add( actor );
129
130   application.SendNotification();
131   application.Render();
132
133   Vector2 topLeft( Stage::GetCurrent().GetSize() * 0.5f );
134   topLeft.y = -topLeft.y;
135
136   // Gets converted to opengl view space
137   DALI_TEST_CHECK(
138       application.GetGlAbstraction().CheckUniformValue(
139           effect.GetCenterPropertyName().c_str(),
140           topLeft ) );
141
142   DALI_TEST_CHECK(
143       application.GetGlAbstraction().CheckUniformValue(
144           effect.GetDirectionPropertyName().c_str(),
145           Vector2(0.0f, 0.0f) ) );
146
147   DALI_TEST_CHECK(
148       application.GetGlAbstraction().CheckUniformValue(
149           effect.GetRadiusPropertyName().c_str(),
150           0.0f ) );
151 }
152
153 static void UtcDaliBendyCustomValuesEffect()
154 {
155   ToolkitTestApplication application;
156
157   Toolkit::BendyEffect effect = Toolkit::BendyEffect::New();
158   DALI_TEST_CHECK( effect );
159
160   BitmapImage image = CreateBitmapImage();
161
162   ImageActor actor = ImageActor::New( image );
163   actor.SetSize( 100.0f, 100.0f );
164
165   Vector2 direction(1.0f, 1.0f);
166   effect.SetCenter( Vector2(480.0f, 800.0f) );
167   effect.SetDirection( direction );
168   effect.SetRadius( 2.0f );
169
170   actor.SetShaderEffect(effect);
171   Stage::GetCurrent().Add(actor);
172
173   application.SendNotification();
174   application.Render();
175
176   Vector2 bottomRight( Stage::GetCurrent().GetSize() * 0.5f );
177   bottomRight.x = -bottomRight.x;
178
179   // Gets converted to opengl viewport coordinates
180   DALI_TEST_CHECK(
181       application.GetGlAbstraction().CheckUniformValue(
182           effect.GetCenterPropertyName().c_str(),
183           bottomRight ) );
184
185   direction.Normalize();
186   direction.x *= -1.0f;
187   DALI_TEST_CHECK(
188       application.GetGlAbstraction().CheckUniformValue(
189           effect.GetDirectionPropertyName().c_str(),
190           direction ) );
191
192   DALI_TEST_CHECK(
193       application.GetGlAbstraction().CheckUniformValue(
194           effect.GetRadiusPropertyName().c_str(),
195           2.0f ) );
196 }