Revert "[Tizen] Move DevelHandle::GetCurrentProperty to public"
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-CameraActor.cpp
1 /*
2  * Copyright (c) 2017 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 #include <iostream>
19
20 #include <stdlib.h>
21 #include <cmath>
22 #include <dali/public-api/dali-core.h>
23 #include <dali/devel-api/object/handle-devel.h>
24
25 #include "dali-test-suite-utils/dali-test-suite-utils.h"
26
27 using namespace Dali;
28
29 void camera_actor_test_startup(void)
30 {
31   test_return_value = TET_UNDEF;
32 }
33
34 void camera_actor_test_cleanup(void)
35 {
36   test_return_value = TET_PASS;
37 }
38
39 namespace
40 {
41
42 const float FLOAT_EPSILON = 0.001f;
43 const float TEST_ASPECT_RATIO = 0.123f;
44 const float TEST_FIELD_OF_VIEW = Radian(Degree(40.0f));
45 const float TEST_NEAR_PLANE_DISTANCE = 0.23f;
46 const float TEST_FAR_PLANE_DISTANCE = 0.973f;
47
48 const std::string SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME( "uLightCameraProjectionMatrix" );
49 const std::string SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME( "uLightCameraViewMatrix" );
50 const char* const RENDER_SHADOW_VERTEX_SOURCE =
51   " uniform mediump mat4 uLightCameraProjectionMatrix;\n"
52   " uniform mediump mat4 uLightCameraViewMatrix;\n"
53   "\n"
54   "void main()\n"
55   "{\n"
56   "  gl_Position = uProjection * uModelView * vec4(aPosition,1.0);\n"
57   "  vec4 textureCoords = uLightCameraProjectionMatrix * uLightCameraViewMatrix * uModelMatrix  * vec4(aPosition,1.0);\n"
58   "  vTexCoord = 0.5 + 0.5 * (textureCoords.xy/textureCoords.w);\n"
59   "}\n";
60
61 const char* const RENDER_SHADOW_FRAGMENT_SOURCE =
62   "uniform lowp vec4 uShadowColor;\n"
63   "void main()\n"
64   "{\n"
65   "  lowp float alpha;\n"
66   "  alpha = texture2D(sTexture, vec2(vTexCoord.x, vTexCoord.y)).a;\n"
67   "  gl_FragColor = vec4(uShadowColor.rgb, uShadowColor.a * alpha);\n"
68   "}\n";
69
70 } // Anonymous namespace
71
72
73 int UtcDaliCameraActorConstructorP(void)
74 {
75   TestApplication application;
76   tet_infoline( "Testing Dali::CameraActor::CameraActor()" );
77
78   CameraActor actor;
79
80   DALI_TEST_CHECK( !actor );
81   END_TEST;
82 }
83
84 // Note: No negative test for UtcDaliCameraActorConstructor.
85
86 int UtcDaliCameraActorDestructorP(void)
87 {
88   TestApplication application;
89   tet_infoline( "Testing Dali::~CameraActor (P)" );
90   CameraActor* actor = new CameraActor();
91   delete actor;
92   actor = NULL;
93
94   DALI_TEST_CHECK( true );
95   END_TEST;
96 }
97
98 // Note: No negative test for UtcDaliCameraActorDestructor.
99
100 int UtcDaliCameraActorCopyConstructorP(void)
101 {
102   TestApplication application;
103   tet_infoline( "Testing Dali::CameraActor Copy Constructor (P)" );
104   CameraActor actor = CameraActor::New();
105
106   CameraActor copyActor( actor );
107
108   DALI_TEST_CHECK( copyActor );
109   DALI_TEST_CHECK( copyActor == actor );
110
111   END_TEST;
112 }
113
114 int UtcDaliCameraActorCopyConstructorN(void)
115 {
116   TestApplication application;
117   tet_infoline( "Testing Dali::CameraActor Copy Constructor (N)" );
118   CameraActor actor;
119
120   CameraActor copyActor( actor );
121
122   DALI_TEST_CHECK( !copyActor );
123
124   END_TEST;
125 }
126
127 int UtcDaliCameraActorAssignmentOperatorP(void)
128 {
129   TestApplication application;
130   tet_infoline( "Testing Dali::CameraActor Assignment Operator (P)" );
131   const CameraActor actor = CameraActor::New();
132
133   CameraActor copyActor = actor;
134
135   DALI_TEST_CHECK( copyActor );
136   DALI_TEST_CHECK( copyActor == actor );
137
138   END_TEST;
139 }
140
141 int UtcDaliCameraActorAssignmentOperatorN(void)
142 {
143   TestApplication application;
144   tet_infoline( "Testing Dali::CameraActor = (N)" );
145   CameraActor actor;
146
147   CameraActor copyActor = actor;
148
149   DALI_TEST_CHECK( !copyActor );
150
151   END_TEST;
152 }
153
154 int UtcDaliCameraActorNewP(void)
155 {
156   TestApplication application;
157   tet_infoline( "Testing Dali::CameraActor::New (P)" );
158
159   CameraActor actor = CameraActor::New();
160
161   DALI_TEST_CHECK( actor );
162
163   actor.Reset();
164
165   DALI_TEST_CHECK( !actor );
166   END_TEST;
167 }
168
169 // Note: No negative test for UtcDaliCameraActorNew.
170
171 int UtcDaliCameraActorDownCastP(void)
172 {
173   TestApplication application;
174   tet_infoline( "Testing Dali::CameraActor::DownCast (P)" );
175
176   CameraActor camera = CameraActor::New();
177   Actor anActor = Actor::New();
178   anActor.Add( camera );
179
180   Actor child = anActor.GetChildAt( 0 );
181   CameraActor cameraActor = CameraActor::DownCast( child );
182   DALI_TEST_CHECK( cameraActor );
183
184   cameraActor.Reset();
185   DALI_TEST_CHECK( !cameraActor );
186
187   cameraActor = DownCast< CameraActor >( child );
188   DALI_TEST_CHECK( cameraActor );
189   END_TEST;
190 }
191
192 int UtcDaliCameraActorDownCastN(void)
193 {
194   TestApplication application;
195   tet_infoline( "Testing Dali::CameraActor::DownCast (N)" );
196
197   Actor actor1 = Actor::New();
198   Actor anActor = Actor::New();
199   anActor.Add( actor1 );
200
201   Actor child = anActor.GetChildAt( 0 );
202   CameraActor cameraActor = CameraActor::DownCast( child );
203   DALI_TEST_CHECK( !cameraActor );
204
205   Actor unInitialzedActor;
206   cameraActor = CameraActor::DownCast( unInitialzedActor );
207   DALI_TEST_CHECK( !cameraActor );
208
209   cameraActor = DownCast< CameraActor >( unInitialzedActor );
210   DALI_TEST_CHECK( !cameraActor );
211   END_TEST;
212 }
213
214 // Note: SetType and GetType are tested within the same test cases.
215
216 int UtcDaliCameraActorSetGetTypeP(void)
217 {
218   TestApplication application;
219   tet_infoline( "Testing Dali::CameraActor GetType (P)" );
220
221   CameraActor actor = CameraActor::New();
222   DALI_TEST_EQUALS( actor.GetType(), Dali::Camera::FREE_LOOK, TEST_LOCATION );
223
224   actor.SetType( Dali::Camera::LOOK_AT_TARGET );
225   DALI_TEST_EQUALS( actor.GetType(), Dali::Camera::LOOK_AT_TARGET, TEST_LOCATION );
226
227   DALI_TEST_EQUALS( "LOOK_AT_TARGET", actor.GetProperty< std::string >( CameraActor::Property::TYPE ), TEST_LOCATION );
228   DALI_TEST_EQUALS( "LOOK_AT_TARGET", DevelHandle::GetCurrentProperty< std::string >( actor, CameraActor::Property::TYPE ), TEST_LOCATION );
229   END_TEST;
230 }
231
232 int UtcDaliCameraActorSetGetTypeN(void)
233 {
234   TestApplication application;
235   tet_infoline( "Testing Dali::CameraActor GetType (N)" );
236
237   CameraActor actor;
238
239   Dali::Camera::Type cameraType = Dali::Camera::FREE_LOOK;
240   try
241   {
242     cameraType = actor.GetType();
243   }
244   catch ( Dali::DaliException& e )
245   {
246     DALI_TEST_PRINT_ASSERT( e );
247     DALI_TEST_ASSERT( e, "camera", TEST_LOCATION );
248   }
249
250   const CameraActor aConstActor;
251
252   try
253   {
254     cameraType = aConstActor.GetType();
255   }
256   catch ( Dali::DaliException& e )
257   {
258     DALI_TEST_PRINT_ASSERT( e );
259     DALI_TEST_ASSERT( e, "camera", TEST_LOCATION );
260   }
261
262   DALI_TEST_EQUALS( cameraType, Dali::Camera::FREE_LOOK, TEST_LOCATION );
263   END_TEST;
264 }
265
266 int UtcDaliCameraActorSetFieldOfViewP(void)
267 {
268   TestApplication application;
269   tet_infoline( "Testing Dali::CameraActor Set Field of view (P)" );
270
271   CameraActor defaultCamera = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
272   const float defaultFieldOfView = defaultCamera.GetFieldOfView();
273
274   CameraActor actor = CameraActor::New();
275   DALI_TEST_EQUALS( actor.GetFieldOfView(), defaultFieldOfView, TEST_LOCATION );
276
277   float fieldOfView = Math::PI / 3.0f;
278   actor.SetFieldOfView( fieldOfView );
279   DALI_TEST_EQUALS( actor.GetFieldOfView(), fieldOfView, TEST_LOCATION );
280
281   float value;
282   actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
283   DALI_TEST_EQUALS( fieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
284   END_TEST;
285 }
286
287 int UtcDaliCameraActorSetFieldOfViewN(void)
288 {
289   TestApplication application;
290   tet_infoline( "Testing Dali::CameraActor Set Field of view (N)" );
291
292   CameraActor defaultCamera = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
293   const float defaultFieldOfView = defaultCamera.GetFieldOfView();
294
295   CameraActor actor = CameraActor::New();
296   DALI_TEST_EQUALS( actor.GetFieldOfView(), defaultFieldOfView, TEST_LOCATION );
297
298   float fieldOfView = Math::PI / 3.0f;
299   actor.SetFieldOfView( fieldOfView );
300   DALI_TEST_EQUALS( actor.GetFieldOfView(), fieldOfView, TEST_LOCATION );
301
302   float value;
303   actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
304   DALI_TEST_EQUALS( fieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
305   END_TEST;
306 }
307
308 int UtcDaliCameraActorGetFieldOfViewP(void)
309 {
310   TestApplication application;
311   tet_infoline( "Testing Dali::CameraActor Get Field of view (P)" );
312   const Vector2 size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT );
313
314   CameraActor defaultCamera = CameraActor::New( size );
315
316   const float cameraZ = 2.0f * std::max( size.width, size.height );
317   const float expectedFieldOfView = 2.0f * std::atan( size.height * 0.5f / cameraZ );
318
319   CameraActor actor = CameraActor::New();
320   DALI_TEST_EQUALS( actor.GetFieldOfView(), expectedFieldOfView, TEST_LOCATION );
321
322   float value;
323   actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
324   DALI_TEST_EQUALS( expectedFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
325   END_TEST;
326 }
327
328 int UtcDaliCameraActorGetFieldOfViewN(void)
329 {
330   TestApplication application;
331   tet_infoline( "Testing Dali::CameraActor Get Field of view (N)" );
332
333   CameraActor defaultCamera = CameraActor::New();
334
335   bool asserted = true;
336   try
337   {
338     defaultCamera.GetFieldOfView();
339   }
340   catch( Dali::DaliException& e )
341   {
342     DALI_TEST_PRINT_ASSERT( e );
343     DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
344     asserted = true;
345   }
346   DALI_TEST_CHECK( asserted );
347
348   END_TEST;
349 }
350
351 int UtcDaliCameraActorSetAspectRatioP(void)
352 {
353   TestApplication application;
354   tet_infoline( "Testing Dali::CameraActor Set Aspect Ratio (P)" );
355
356   CameraActor actor = CameraActor::New();
357   DALI_TEST_EQUALS( actor.GetAspectRatio(), static_cast<float>( TestApplication::DEFAULT_SURFACE_WIDTH ) / static_cast<float>( TestApplication::DEFAULT_SURFACE_HEIGHT ), TEST_LOCATION );
358
359   // Set an initial value to confirm a further set changes it.
360   float aspect = 4.0f / 3.0f;
361   actor.SetAspectRatio( aspect );
362   DALI_TEST_EQUALS( actor.GetAspectRatio(), aspect, TEST_LOCATION );
363
364   aspect = 16.0f / 9.0f;
365   actor.SetAspectRatio( aspect );
366   DALI_TEST_EQUALS( actor.GetAspectRatio(), aspect, TEST_LOCATION );
367
368   END_TEST;
369 }
370
371 int UtcDaliCameraActorSetAspectRatioN(void)
372 {
373   TestApplication application;
374   tet_infoline( "Testing Dali::CameraActor Set Aspect Ratio (N)" );
375
376   CameraActor actor;
377
378   bool asserted = true;
379   try
380   {
381     actor.SetAspectRatio( 16.0f / 9.0f );
382   }
383   catch( Dali::DaliException& e )
384   {
385     DALI_TEST_PRINT_ASSERT( e );
386     DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
387     asserted = true;
388   }
389   DALI_TEST_CHECK( asserted );
390
391   END_TEST;
392 }
393
394 int UtcDaliCameraActorGetAspectRatioP(void)
395 {
396   TestApplication application;
397   tet_infoline("Testing Dali::CameraActor Get Aspect Ratio");
398
399   CameraActor actor = CameraActor::New();
400   float defaultAspect = static_cast<float>( TestApplication::DEFAULT_SURFACE_WIDTH ) / static_cast<float>( TestApplication::DEFAULT_SURFACE_HEIGHT );
401
402   DALI_TEST_EQUALS( actor.GetAspectRatio(), defaultAspect, TEST_LOCATION );
403
404   float value = 0.0f;
405   actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
406   DALI_TEST_EQUALS( defaultAspect, value, FLOAT_EPSILON, TEST_LOCATION );
407
408   END_TEST;
409 }
410
411 int UtcDaliCameraActorGetAspectRatioN(void)
412 {
413   TestApplication application;
414   tet_infoline( "Testing Dali::CameraActor Get Aspect Ratio (N)" );
415
416   CameraActor actor;
417
418   bool asserted = true;
419   try
420   {
421     actor.GetAspectRatio();
422   }
423   catch( Dali::DaliException& e )
424   {
425     DALI_TEST_PRINT_ASSERT( e );
426     DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
427     asserted = true;
428   }
429
430   DALI_TEST_CHECK( asserted );
431
432   END_TEST;
433 }
434
435 int UtcDaliCameraActorSetNearClippingPlaneP(void)
436 {
437   TestApplication application;
438   tet_infoline( "Testing Dali::CameraActor Set Near clipping plane (P)" );
439
440   CameraActor actor = CameraActor::New();
441
442   // Set a value so we are not relying on a particular default for this test case.
443   actor.SetNearClippingPlane( 200.0f );
444   DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, TEST_LOCATION );
445
446   actor.SetNearClippingPlane( 400.0f );
447   DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 400.0f, TEST_LOCATION );
448
449   // Check setting the property.
450   actor.SetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE, Property::Value( 300.0f ) );
451   DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 300.0f, FLOAT_EPSILON, TEST_LOCATION );
452   END_TEST;
453 }
454
455 int UtcDaliCameraActorSetNearClippingPlaneN(void)
456 {
457   TestApplication application;
458   tet_infoline( "Testing Dali::CameraActor Set Near clipping plane (N)" );
459
460   CameraActor actor;
461
462   bool asserted = true;
463   try
464   {
465     actor.SetNearClippingPlane( 200.0f );
466   }
467   catch( Dali::DaliException& e )
468   {
469     DALI_TEST_PRINT_ASSERT( e );
470     DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
471     asserted = true;
472   }
473
474   DALI_TEST_CHECK( asserted );
475
476   END_TEST;
477 }
478
479 int UtcDaliCameraActorGetNearClippingPlaneP(void)
480 {
481   TestApplication application;
482   tet_infoline( "Testing Dali::CameraActor Get Near clipping plane (P)" );
483
484   // Check the default value.
485   CameraActor actor = CameraActor::New();
486   float defaultValue = 800.0f;
487   DALI_TEST_EQUALS( actor.GetNearClippingPlane(), defaultValue, TEST_LOCATION );
488
489   // Check getting the property.
490   float value;
491   actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
492   DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
493   END_TEST;
494 }
495
496 int UtcDaliCameraActorGetNearClippingPlaneN(void)
497 {
498   TestApplication application;
499   tet_infoline( "Testing Dali::CameraActor Get Near clipping plane (N)" );
500
501   CameraActor actor;
502   bool asserted = true;
503   try
504   {
505     actor.GetNearClippingPlane();
506   }
507   catch( Dali::DaliException& e )
508   {
509     DALI_TEST_PRINT_ASSERT( e );
510     DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
511     asserted = true;
512   }
513
514   DALI_TEST_CHECK( asserted );
515
516   END_TEST;
517 }
518
519 int UtcDaliCameraActorSetFarClippingPlaneP(void)
520 {
521   TestApplication application;
522   tet_infoline( "Testing Dali::CameraActor Set Far clipping plane (P)" );
523
524   CameraActor actor = CameraActor::New();
525
526   // Set a value so we are not relying on a particular default for this test case.
527   actor.SetFarClippingPlane( 2000.0f );
528   DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 2000.0f, TEST_LOCATION );
529
530   actor.SetFarClippingPlane( 4000.0f );
531   DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 4000.0f, TEST_LOCATION );
532
533   // Check setting the property.
534   actor.SetProperty( CameraActor::Property::FAR_PLANE_DISTANCE, 2000.0f );
535   DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 2000.0f, FLOAT_EPSILON, TEST_LOCATION );
536   END_TEST;
537 }
538
539 int UtcDaliCameraActorSetFarClippingPlaneN(void)
540 {
541   TestApplication application;
542   tet_infoline( "Testing Dali::CameraActor Set Far clipping plane (N)" );
543
544   CameraActor actor;
545
546   bool asserted = true;
547   try
548   {
549     actor.SetFarClippingPlane( 2000.0f );
550   }
551   catch( Dali::DaliException& e )
552   {
553     DALI_TEST_PRINT_ASSERT( e );
554     DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
555     asserted = true;
556   }
557
558   DALI_TEST_CHECK( asserted );
559
560   END_TEST;
561 }
562
563 int UtcDaliCameraActorGetFarClippingPlaneP(void)
564 {
565   TestApplication application;
566   tet_infoline( "Testing Dali::CameraActor Get Far clipping plane (P)" );
567
568   CameraActor actor = CameraActor::New();
569   float defaultValue = 800.0f + ( 0xFFFF >> 4 );
570   DALI_TEST_EQUALS( actor.GetFarClippingPlane(), defaultValue, TEST_LOCATION );
571
572   // Check getting the property.
573   float value;
574   actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
575   DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
576   END_TEST;
577 }
578
579 int UtcDaliCameraActorGetFarClippingPlaneN(void)
580 {
581   TestApplication application;
582   tet_infoline( "Testing Dali::CameraActor Get Far clipping plane (N)" );
583
584   CameraActor actor;
585
586   bool asserted = true;
587   try
588   {
589     actor.GetFarClippingPlane();
590   }
591   catch( Dali::DaliException& e )
592   {
593     DALI_TEST_PRINT_ASSERT( e );
594     DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
595     asserted = true;
596   }
597
598   DALI_TEST_CHECK( asserted );
599
600   END_TEST;
601 }
602
603 int UtcDaliCameraActorSetTargetPositionP(void)
604 {
605   TestApplication application;
606   tet_infoline( "Testing Dali::CameraActor Set Target Position (P)" );
607
608   CameraActor actor = CameraActor::New();
609
610   Vector3 target1( 10.0f, 20.0f, 30.0f );
611   Vector3 target2( 15.0f, 25.0f, 35.0f );
612
613   // Set a value so we are not relying on a particular default for this test case.
614   actor.SetTargetPosition( target1 );
615   DALI_TEST_EQUALS( actor.GetTargetPosition(), target1, TEST_LOCATION );
616
617   actor.SetTargetPosition( target2 );
618   DALI_TEST_EQUALS( actor.GetTargetPosition(), target2, TEST_LOCATION );
619
620   // Check setting the property.
621   actor.SetProperty( CameraActor::Property::TARGET_POSITION, target1 );
622   DALI_TEST_EQUALS( actor.GetTargetPosition(), target1, FLOAT_EPSILON, TEST_LOCATION );
623   END_TEST;
624 }
625
626 int UtcDaliCameraActorSetTargetPositionN(void)
627 {
628   TestApplication application;
629   tet_infoline( "Testing Dali::CameraActor Set Target Position (N)" );
630
631   CameraActor actor;
632
633   bool asserted = true;
634   try
635   {
636     actor.SetTargetPosition( Vector3( 10.0f, 20.0f, 30.0f ) );
637   }
638   catch( Dali::DaliException& e )
639   {
640     DALI_TEST_PRINT_ASSERT( e );
641     DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
642     asserted = true;
643   }
644   DALI_TEST_CHECK( asserted );
645
646   END_TEST;
647 }
648
649 int UtcDaliCameraActorGetTargetPositionP(void)
650 {
651   TestApplication application;
652   tet_infoline( "Testing Dali::CameraActor Get Target Position (P)" );
653
654   CameraActor actor = CameraActor::New();
655   Vector3 defaultValue( Vector3::ZERO );
656   DALI_TEST_EQUALS( actor.GetTargetPosition(), defaultValue, TEST_LOCATION );
657
658   // Check getting the property.
659   Vector3 value;
660   actor.GetProperty( CameraActor::Property::TARGET_POSITION ).Get( value );
661   DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
662   END_TEST;
663 }
664
665 int UtcDaliCameraActorGetTargetPositionN(void)
666 {
667   TestApplication application;
668   tet_infoline( "Testing Dali::CameraActor Get Target Position (N)" );
669
670   CameraActor actor;
671
672   bool asserted = true;
673   try
674   {
675     actor.GetTargetPosition();
676   }
677   catch( Dali::DaliException& e )
678   {
679     DALI_TEST_PRINT_ASSERT( e );
680     DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
681     asserted = true;
682   }
683   DALI_TEST_CHECK( asserted );
684
685   END_TEST;
686 }
687
688 int UtcDaliCameraActorSetInvertYAxisP(void)
689 {
690   TestApplication application;
691   tet_infoline( "Testing Dali::CameraActor Set InvertYAxis (P)" );
692
693   CameraActor actor = CameraActor::New();
694
695   // Set a value so we are not relying on a particular default for this test case.
696   actor.SetInvertYAxis( false );
697   DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
698
699   actor.SetInvertYAxis( true );
700   DALI_TEST_EQUALS( actor.GetInvertYAxis(), true, TEST_LOCATION );
701
702   actor.SetProperty( CameraActor::Property::INVERT_Y_AXIS, false );
703   DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
704   END_TEST;
705 }
706
707 int UtcDaliCameraActorSetInvertYAxisN(void)
708 {
709   TestApplication application;
710   tet_infoline( "Testing Dali::CameraActor Set InvertYAxis (N)" );
711
712   CameraActor actor;
713
714   bool asserted = true;
715   try
716   {
717     actor.SetInvertYAxis( false );
718   }
719   catch( Dali::DaliException& e )
720   {
721     DALI_TEST_PRINT_ASSERT( e );
722     DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
723     asserted = true;
724   }
725   DALI_TEST_CHECK( asserted );
726   END_TEST;
727 }
728
729 int UtcDaliCameraActorGetInvertYAxisP(void)
730 {
731   TestApplication application;
732   tet_infoline( "Testing Dali::CameraActor Get InvertYAxis (P)" );
733
734   // Check the default value.
735   CameraActor actor = CameraActor::New();
736   DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
737
738   // Check getting the property.
739   bool bValue;
740   actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
741   DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
742   END_TEST;
743 }
744
745 int UtcDaliCameraActorGetInvertYAxisN(void)
746 {
747   TestApplication application;
748   tet_infoline( "Testing Dali::CameraActor Get InvertYAxis (N)" );
749
750   CameraActor actor;
751
752   bool asserted = true;
753   try
754   {
755     actor.GetInvertYAxis();
756   }
757   catch( Dali::DaliException& e )
758   {
759     DALI_TEST_PRINT_ASSERT( e );
760     DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
761     asserted = true;
762   }
763   DALI_TEST_CHECK( asserted );
764   END_TEST;
765 }
766
767 int UtcDaliCameraActorSetPerspectiveProjectionP(void)
768 {
769   TestApplication application;
770   tet_infoline( "Testing Dali::CameraActor::SetPerspectiveProjection (P)" );
771
772   CameraActor actor = CameraActor::New();
773   actor.SetPerspectiveProjection( Size( 100.f, 150.f ) );
774
775   DALI_TEST_CHECK( actor );
776
777   float value;
778   actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
779   DALI_TEST_EQUALS( 0.666666f, value, FLOAT_EPSILON, TEST_LOCATION );
780   actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
781   DALI_TEST_EQUALS( 0.489957f, value, FLOAT_EPSILON, TEST_LOCATION );
782   actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
783   DALI_TEST_EQUALS( 150.f, value, FLOAT_EPSILON, TEST_LOCATION );
784   actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
785   DALI_TEST_EQUALS( 4245.f, value, FLOAT_EPSILON, TEST_LOCATION );
786
787   DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
788
789   END_TEST;
790 }
791
792 int UtcDaliCameraActorSetPerspectiveProjectionN(void)
793 {
794   TestApplication application;
795   tet_infoline( "Testing Dali::CameraActor::SetPerspectiveProjection (N)" );
796
797   Stage stage = Stage::GetCurrent();
798   Vector2 stageSize = stage.GetSize();
799
800   CameraActor actor = CameraActor::New();
801
802   // Check that setting perspective projection without a size (using zero size) uses the stages size.
803   actor.SetPerspectiveProjection( Size::ZERO );
804
805   float nearClippingPlane = std::max( stageSize.width, stageSize.height );
806   float farClippingPlane = nearClippingPlane + static_cast<float>( 0xFFFF >> 4 );
807
808   DALI_TEST_EQUALS( nearClippingPlane, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
809   DALI_TEST_EQUALS( farClippingPlane, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
810   DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
811
812   END_TEST;
813 }
814
815 int UtcDaliCameraActorSetOrthographicProjectionP1(void)
816 {
817   TestApplication application;
818   tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,1)" );
819
820   CameraActor actor = CameraActor::New( Size( 1080.0f, 1920.0f ) );
821   DALI_TEST_CHECK( actor );
822
823   Stage::GetCurrent().Add( actor );
824
825   actor.SetOrthographicProjection( Size( 1080.0f, 1920.0f ) );
826   application.SendNotification();
827   application.Render( 0 );
828   application.Render();
829   application.SendNotification();
830
831   float defaultAspectRatio;
832   float defaultFieldOfView;
833   float defaultNearPlaneDistance;
834   float defaultFarPlaneDistance;
835   actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
836   actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
837   actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
838   actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
839   Vector3 defaultPos = actor.GetCurrentPosition();
840
841   actor.SetOrthographicProjection( Size( 1080.0f, 1920.0f ) );
842
843   application.SendNotification();
844   application.Render( 0 );
845   application.Render();
846   application.SendNotification();
847
848   float value;
849   actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
850   DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
851   actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
852   DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
853   actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
854   DALI_TEST_EQUALS( defaultNearPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION );
855   actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
856   DALI_TEST_EQUALS( defaultFarPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION );
857
858   actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
859   DALI_TEST_EQUALS( -540.0f, value, FLOAT_EPSILON, TEST_LOCATION );
860   actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
861   DALI_TEST_EQUALS( 540.0f, value, FLOAT_EPSILON, TEST_LOCATION );
862   actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
863   DALI_TEST_EQUALS( 960.0f, value, FLOAT_EPSILON, TEST_LOCATION );
864   actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
865   DALI_TEST_EQUALS( -960.0f, value, FLOAT_EPSILON, TEST_LOCATION );
866
867   Vector3 pos = actor.GetCurrentPosition();
868   DALI_TEST_EQUALS( defaultPos.z, pos.z, 0.001f, TEST_LOCATION );
869
870   DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
871   END_TEST;
872 }
873
874 int UtcDaliCameraActorSetOrthographicProjectionN(void)
875 {
876   TestApplication application;
877   tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (N)" );
878
879   CameraActor actor;
880   bool asserted = true;
881   try
882   {
883     actor.GetProjectionMode();
884   }
885   catch( Dali::DaliException& e )
886   {
887     DALI_TEST_PRINT_ASSERT( e );
888     DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
889     asserted = true;
890   }
891   DALI_TEST_CHECK( asserted );
892   END_TEST;
893 }
894
895 int UtcDaliCameraActorSetOrthographicProjectionP2(void)
896 {
897   TestApplication application;
898   tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,2)" );
899
900   CameraActor actor = CameraActor::New();
901   DALI_TEST_CHECK( actor );
902
903   float defaultAspectRatio;
904   float defaultFieldOfView;
905   float defaultNearPlaneDistance;
906   float defaultFarPlaneDistance;
907   actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
908   actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
909   actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
910   actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
911
912   // Check setting with specific near and far plane distances.
913   actor.SetOrthographicProjection( -100.0f, 200.0f, -300.0f, 500.0f, 400.0f, 4000.0f );
914
915   float value;
916   actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
917   DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
918   actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
919   DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
920   actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
921   DALI_TEST_EQUALS( 400.0f, value, FLOAT_EPSILON, TEST_LOCATION );
922   actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
923   DALI_TEST_EQUALS( 4000.0f, value, FLOAT_EPSILON, TEST_LOCATION );
924
925   actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
926   DALI_TEST_EQUALS( -100.0f, value, FLOAT_EPSILON, TEST_LOCATION );
927   actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
928   DALI_TEST_EQUALS( 200.0f, value, FLOAT_EPSILON, TEST_LOCATION );
929   actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
930   DALI_TEST_EQUALS( -300.0f, value, FLOAT_EPSILON, TEST_LOCATION );
931   actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
932   DALI_TEST_EQUALS( 500.0f, value, FLOAT_EPSILON, TEST_LOCATION );
933
934   DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
935
936   END_TEST;
937 }
938
939 int UtcDaliCameraActorSetOrthographicProjectionP3(void)
940 {
941   TestApplication application;
942   tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,3)" );
943
944   CameraActor actor = CameraActor::New();
945   DALI_TEST_CHECK( actor );
946
947   float defaultAspectRatio;
948   float defaultFieldOfView;
949   float defaultNearPlaneDistance;
950   float defaultFarPlaneDistance;
951   actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
952   actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
953   actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
954   actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
955
956   actor.SetProjectionMode( Dali::Camera::ORTHOGRAPHIC_PROJECTION );
957
958   actor.SetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE, -100.0f );
959   actor.SetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE, 200.0f );
960   actor.SetProperty( CameraActor::Property::TOP_PLANE_DISTANCE, -300.0f );
961   actor.SetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE, 500.0f );
962   actor.SetNearClippingPlane( 400.0f );
963   actor.SetFarClippingPlane( 4000.0f );
964
965   float value;
966   actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
967   DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
968   actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
969   DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
970   actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
971   DALI_TEST_EQUALS( 400.0f, value, FLOAT_EPSILON, TEST_LOCATION );
972   actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
973   DALI_TEST_EQUALS( 4000.0f, value, FLOAT_EPSILON, TEST_LOCATION );
974
975   actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
976   DALI_TEST_EQUALS( -100.0f, value, FLOAT_EPSILON, TEST_LOCATION );
977   actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
978   DALI_TEST_EQUALS( 200.0f, value, FLOAT_EPSILON, TEST_LOCATION );
979   actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
980   DALI_TEST_EQUALS( -300.0f, value, FLOAT_EPSILON, TEST_LOCATION );
981   actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
982   DALI_TEST_EQUALS( 500.0f, value, FLOAT_EPSILON, TEST_LOCATION );
983
984   DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
985   std::string stringValue;
986   actor.GetProperty( CameraActor::Property::PROJECTION_MODE ).Get( stringValue );
987   DALI_TEST_EQUALS( stringValue, "ORTHOGRAPHIC_PROJECTION", TEST_LOCATION );
988   END_TEST;
989 }
990
991 int UtcDaliCameraActorSetProjectionModeP(void)
992 {
993   TestApplication application;
994   tet_infoline( "Testing Dali::CameraActor::SetProjectionModeP (P)" );
995
996   CameraActor actor = CameraActor::New();
997
998   // Check that changing the projection mode alone does not alter other presets.
999   actor.SetNearClippingPlane( 200.0f );
1000   actor.SetFarClippingPlane( 400.0f );
1001
1002   actor.SetProjectionMode( Dali::Camera::PERSPECTIVE_PROJECTION );
1003
1004   DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1005   DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, FLOAT_EPSILON, TEST_LOCATION );
1006   DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 400.0f, FLOAT_EPSILON, TEST_LOCATION );
1007
1008   actor.SetProjectionMode( Dali::Camera::ORTHOGRAPHIC_PROJECTION );
1009
1010   DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
1011   DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, FLOAT_EPSILON, TEST_LOCATION );
1012   DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 400.0f, FLOAT_EPSILON, TEST_LOCATION );
1013
1014   // Check setting the property.
1015   Property::Value setValue = "PERSPECTIVE_PROJECTION";
1016   actor.SetProperty( CameraActor::Property::PROJECTION_MODE, setValue );
1017   DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1018   END_TEST;
1019 }
1020
1021 int UtcDaliCameraActorSetProjectionModeN(void)
1022 {
1023   TestApplication application;
1024   tet_infoline( "Testing Dali::CameraActor::SetProjectionModeP (N)" );
1025
1026   CameraActor actor;
1027
1028   bool asserted = true;
1029   try
1030   {
1031     actor.SetProjectionMode( Dali::Camera::PERSPECTIVE_PROJECTION );
1032   }
1033   catch( Dali::DaliException& e )
1034   {
1035     DALI_TEST_PRINT_ASSERT( e );
1036     DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
1037     asserted = true;
1038   }
1039   DALI_TEST_CHECK( asserted );
1040   END_TEST;
1041 }
1042
1043 int UtcDaliCameraActorGetProjectionModeP(void)
1044 {
1045   TestApplication application;
1046   tet_infoline( "Testing Dali::CameraActor::GetPerspectiveProjection (P)" );
1047
1048   CameraActor actor = CameraActor::New();
1049
1050   actor.SetOrthographicProjection( Size::ONE );
1051   DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
1052
1053   actor.SetPerspectiveProjection( Size( 100.f, 150.f ) );
1054   DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1055
1056   // Check getting the property.
1057   std::string stringValue;
1058   actor.GetProperty( CameraActor::Property::PROJECTION_MODE ).Get( stringValue );
1059   DALI_TEST_EQUALS( stringValue, "PERSPECTIVE_PROJECTION", TEST_LOCATION );
1060   END_TEST;
1061 }
1062
1063 int UtcDaliCameraActorGetProjectionModeN(void)
1064 {
1065   TestApplication application;
1066   tet_infoline( "Testing Dali::CameraActor::GetProjectionMode (N)" );
1067
1068   CameraActor actor;
1069
1070   bool asserted = true;
1071   try
1072   {
1073     actor.GetProjectionMode();
1074   }
1075   catch( Dali::DaliException& e )
1076   {
1077     DALI_TEST_PRINT_ASSERT( e );
1078     DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
1079     asserted = true;
1080   }
1081   DALI_TEST_CHECK( asserted );
1082   END_TEST;
1083 }
1084
1085 int UtcDaliCameraActorSetCameraOffStage(void)
1086 {
1087   TestApplication application;
1088   tet_infoline( "Testing Dali::CameraActor::SetCamera()" );
1089
1090   CameraActor actor = CameraActor::New();
1091
1092   actor.SetType( Camera::FREE_LOOK );
1093   actor.SetFieldOfView( TEST_FIELD_OF_VIEW );
1094   actor.SetAspectRatio( TEST_ASPECT_RATIO );
1095   actor.SetNearClippingPlane( TEST_NEAR_PLANE_DISTANCE );
1096   actor.SetFarClippingPlane( TEST_FAR_PLANE_DISTANCE );
1097   actor.SetProjectionMode( Camera::PERSPECTIVE_PROJECTION );
1098
1099   actor.SetInvertYAxis( false );
1100
1101   DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );//change to machine epsilon
1102   DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1103   DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1104   DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1105   DALI_TEST_EQUALS( Camera::PERSPECTIVE_PROJECTION, actor.GetProjectionMode(), TEST_LOCATION );
1106   DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1107
1108   float value;
1109   std::string sValue;
1110   actor.GetProperty( CameraActor::Property::ASPECT_RATIO).Get( value );
1111   DALI_TEST_EQUALS( TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION );
1112   actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW).Get( value );
1113   DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION );
1114   actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE).Get( value );
1115   DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1116   actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE).Get( value );
1117   DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1118   actor.GetProperty( CameraActor::Property::PROJECTION_MODE).Get( sValue );
1119   DALI_TEST_EQUALS( "PERSPECTIVE_PROJECTION", sValue, TEST_LOCATION );
1120   bool bValue;
1121   actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS).Get( bValue );
1122   DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1123   END_TEST;
1124 }
1125
1126 int UtcDaliCameraActorSetCameraOnStage(void)
1127 {
1128   TestApplication application;
1129   tet_infoline( "Testing Dali::CameraActor::SetCamera()" );
1130
1131   CameraActor actor = CameraActor::New();
1132   Stage::GetCurrent().Add( actor );
1133   application.Render( 0 );
1134   application.SendNotification();
1135
1136   actor.SetType( Camera::LOOK_AT_TARGET );
1137   actor.SetFieldOfView( TEST_FIELD_OF_VIEW );
1138   actor.SetAspectRatio( TEST_ASPECT_RATIO );
1139   actor.SetNearClippingPlane( TEST_NEAR_PLANE_DISTANCE );
1140   actor.SetFarClippingPlane( TEST_FAR_PLANE_DISTANCE );
1141   actor.SetInvertYAxis( false );
1142
1143   DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1144
1145   // Will need 2 frames to ensure both buffers are set to same values:
1146   application.Render();
1147   application.SendNotification();
1148   application.Render();
1149   application.SendNotification();
1150
1151   DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );
1152   DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1153   DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1154   DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1155   DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1156
1157   std::string sValue;
1158   actor.GetProperty( CameraActor::Property::TYPE ).Get( sValue );
1159   DALI_TEST_EQUALS( sValue, "LOOK_AT_TARGET", TEST_LOCATION );
1160
1161   float value;
1162   actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
1163   DALI_TEST_EQUALS( TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION );
1164   actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
1165   DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION );
1166   actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
1167   DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1168   actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value);
1169   DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1170
1171   bool bValue;
1172   actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
1173   DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1174   END_TEST;
1175 }
1176
1177 int UtcDaliCameraActorGetCamera(void)
1178 {
1179   TestApplication application;
1180   tet_infoline( "Testing Dali::CameraActor::GetCamera()" );
1181
1182   CameraActor actor = CameraActor::New();
1183
1184   actor.SetAspectRatio( TEST_ASPECT_RATIO );
1185
1186   DALI_TEST_EQUALS( actor.GetAspectRatio(), TEST_ASPECT_RATIO, FLOAT_EPSILON, TEST_LOCATION );
1187
1188   actor.SetProperty( CameraActor::Property::TYPE, "FREE_LOOK" );
1189   actor.SetProperty( CameraActor::Property::ASPECT_RATIO, TEST_ASPECT_RATIO );
1190   actor.SetProperty( CameraActor::Property::FIELD_OF_VIEW, TEST_FIELD_OF_VIEW );
1191   actor.SetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE, TEST_NEAR_PLANE_DISTANCE );
1192   actor.SetProperty( CameraActor::Property::FAR_PLANE_DISTANCE, TEST_FAR_PLANE_DISTANCE );
1193
1194   DALI_TEST_EQUALS( Camera::FREE_LOOK, actor.GetType(), TEST_LOCATION );
1195   DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );
1196   DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1197   DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1198   DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1199   END_TEST;
1200 }
1201
1202 int UtcDaliCameraActorDefaultProperties(void)
1203 {
1204   TestApplication application;
1205   tet_infoline( "Testing Dali::CameraActor DefaultProperties" );
1206
1207   CameraActor actor = CameraActor::New();
1208   Stage stage = Stage::GetCurrent();
1209   stage.Add(actor);
1210   stage.GetRenderTaskList().GetTask(0).SetCameraActor( actor );
1211
1212   actor.SetAspectRatio( TEST_ASPECT_RATIO );
1213   Stage::GetCurrent().Add( actor );
1214   application.Render( 0 );
1215   application.SendNotification();
1216   bool bValue;
1217   actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
1218   DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1219
1220   std::vector<Property::Index> indices ;
1221   indices.push_back( CameraActor::Property::TYPE );
1222   indices.push_back( CameraActor::Property::PROJECTION_MODE );
1223   indices.push_back( CameraActor::Property::FIELD_OF_VIEW );
1224   indices.push_back( CameraActor::Property::ASPECT_RATIO );
1225   indices.push_back( CameraActor::Property::NEAR_PLANE_DISTANCE );
1226   indices.push_back( CameraActor::Property::FAR_PLANE_DISTANCE );
1227   indices.push_back( CameraActor::Property::LEFT_PLANE_DISTANCE );
1228   indices.push_back( CameraActor::Property::RIGHT_PLANE_DISTANCE );
1229   indices.push_back( CameraActor::Property::TOP_PLANE_DISTANCE );
1230   indices.push_back( CameraActor::Property::BOTTOM_PLANE_DISTANCE );
1231   indices.push_back( CameraActor::Property::TARGET_POSITION );
1232   indices.push_back( CameraActor::Property::PROJECTION_MATRIX );
1233   indices.push_back( CameraActor::Property::VIEW_MATRIX );
1234   indices.push_back( CameraActor::Property::INVERT_Y_AXIS );
1235
1236   DALI_TEST_CHECK( actor.GetPropertyCount() == ( Actor::New().GetPropertyCount() + indices.size() ) );
1237
1238   for( std::vector<Property::Index>::iterator iter = indices.begin(); iter != indices.end(); ++iter )
1239   {
1240     DALI_TEST_EQUALS( *iter, actor.GetPropertyIndex( actor.GetPropertyName( *iter ) ), TEST_LOCATION);
1241     DALI_TEST_CHECK( !actor.IsPropertyAnimatable( *iter ) );
1242
1243     if ( ( *iter == CameraActor::Property::PROJECTION_MATRIX ) ||
1244          ( *iter == CameraActor::Property::VIEW_MATRIX ) )
1245     {
1246       DALI_TEST_CHECK( !actor.IsPropertyWritable( *iter ) );
1247     }
1248     else
1249     {
1250       DALI_TEST_CHECK( actor.IsPropertyWritable( *iter ) );
1251     }
1252
1253     DALI_TEST_CHECK( actor.GetPropertyType( *iter ) == actor.GetPropertyType( *iter ) ); // just checking call succeeds
1254   }
1255
1256   // Set/Get one of them.
1257   const float newAspect = TEST_ASPECT_RATIO * 2.0f;
1258
1259   actor.SetProperty( CameraActor::Property::ASPECT_RATIO, Property::Value( newAspect ) );
1260   application.Render();
1261   application.SendNotification();
1262   application.Render();
1263   application.SendNotification();
1264
1265   DALI_TEST_EQUALS( actor.GetAspectRatio(), newAspect, TEST_LOCATION );
1266   END_TEST;
1267 }
1268
1269 int UtcDaliCameraActorModelView(void)
1270 {
1271   TestApplication application;
1272   tet_infoline( "Testing Dali::CameraActor Test view application" );
1273
1274   BufferImage image = CreateBufferImage();
1275
1276   Actor actor = CreateRenderableActor(image);
1277   actor.SetSize( 100.0f, 100.0f );
1278   actor.SetPosition( 20.0f, 30.0f, 40.0f );
1279   actor.SetParentOrigin( ParentOrigin::CENTER );
1280   Stage::GetCurrent().Add( actor );
1281
1282   application.SendNotification();
1283   application.Render( 0 );
1284   application.Render();
1285   application.SendNotification();
1286
1287   Matrix resultMatrix( true );
1288   resultMatrix.SetTransformComponents( Vector3::ONE, Quaternion::IDENTITY, actor.GetCurrentPosition() );
1289
1290   RenderTask task = Stage::GetCurrent().GetRenderTaskList().GetTask( 0 );
1291   CameraActor cameraActor = task.GetCameraActor();
1292
1293   Matrix viewMatrix( false );
1294   cameraActor.GetProperty( CameraActor::Property::VIEW_MATRIX ).Get( viewMatrix );
1295   Matrix::Multiply( resultMatrix, resultMatrix, viewMatrix );
1296
1297   DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( "uModelView", resultMatrix ) );
1298   END_TEST;
1299 }
1300
1301 int UtcDaliCameraActorReadProjectionMatrix(void)
1302 {
1303   TestApplication application;
1304   tet_infoline( "Testing Dali::CameraActor::ReadProjectionMatrix()" );
1305
1306   CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1307   application.SendNotification();
1308   application.Render( 0 );
1309   application.Render();
1310   application.SendNotification();
1311   Image image = CreateBufferImage();
1312   Actor actor = CreateRenderableActor( image, RENDER_SHADOW_VERTEX_SOURCE, RENDER_SHADOW_FRAGMENT_SOURCE );
1313   actor.SetSize( 100.0f, 100.0f );
1314   Stage::GetCurrent().Add( actor );
1315
1316   Matrix projectionMatrix;
1317   Matrix viewMatrix;
1318
1319   camera.GetProperty( CameraActor::CameraActor::Property::PROJECTION_MATRIX ).Get( projectionMatrix );
1320   camera.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( viewMatrix );
1321
1322   actor.RegisterProperty( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME, Matrix::IDENTITY );
1323   actor.RegisterProperty( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME, Matrix::IDENTITY );
1324
1325   Property::Index projectionMatrixPropertyIndex = actor.GetPropertyIndex( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME );
1326   Property::Index viewMatrixPropertyIndex = actor.GetPropertyIndex( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME );
1327
1328   Constraint projectionMatrixConstraint = Constraint::New<Dali::Matrix>( actor, projectionMatrixPropertyIndex, EqualToConstraint() );
1329   projectionMatrixConstraint.AddSource( Source( camera, CameraActor::Property::PROJECTION_MATRIX ) );
1330   Constraint viewMatrixConstraint = Constraint::New<Dali::Matrix>( actor, viewMatrixPropertyIndex, EqualToConstraint() );
1331   viewMatrixConstraint.AddSource( Source( camera, CameraActor::Property::VIEW_MATRIX ) );
1332
1333   projectionMatrixConstraint.Apply();
1334   viewMatrixConstraint.Apply();
1335
1336   application.SendNotification();
1337   application.Render();
1338
1339   // Test effects of Constraint.
1340   DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME.c_str(), projectionMatrix) );
1341
1342   DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME.c_str(), viewMatrix ) );
1343   END_TEST;
1344 }
1345
1346 int UtcDaliCameraActorAnimatedProperties(void)
1347 {
1348   TestApplication application;
1349   tet_infoline( "Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()" );
1350
1351   CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1352   Actor actor = Actor::New();
1353   actor.SetSize( 100.0f, 100.0f );
1354   Stage::GetCurrent().Add( actor );
1355
1356   Constraint constraint = Constraint::New<Dali::Vector3>( actor, Actor::Property::POSITION, EqualToConstraint() );
1357   constraint.AddSource( Source( camera, Actor::Property::POSITION ) );
1358   constraint.Apply();
1359
1360   camera.SetPosition( 100.0f, 200.0f, 300.0f );
1361   application.SendNotification();
1362   application.Render();
1363
1364   DALI_TEST_EQUALS( actor.GetCurrentPosition(), Vector3( 100.0f, 200.0f, 300.0f ), TEST_LOCATION);
1365   END_TEST;
1366 }
1367
1368 int UtcDaliCameraActorPropertyIndices(void)
1369 {
1370   TestApplication application;
1371   CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1372
1373   Actor basicActor = Actor::New();
1374   Property::IndexContainer indices;
1375   camera.GetPropertyIndices( indices );
1376   DALI_TEST_CHECK( indices.Size() > basicActor.GetPropertyCount() );
1377   DALI_TEST_EQUALS( indices.Size(), camera.GetPropertyCount(), TEST_LOCATION );
1378   END_TEST;
1379 }
1380
1381 int UtcDaliCameraActorCheckLookAtAndFreeLookViews01(void)
1382 {
1383   TestApplication application;
1384   Stage stage = Stage::GetCurrent();
1385   Vector2 stageSize = stage.GetSize();
1386
1387   CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1388   freeLookCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1389   freeLookCameraActor.SetType( Camera::FREE_LOOK );
1390
1391   Vector3 targetPosition( 30.0f, 240.0f, -256.0f );
1392   Actor target = Actor::New();
1393   target.SetParentOrigin( ParentOrigin::CENTER );
1394   target.SetPosition( targetPosition );
1395
1396   Constraint cameraOrientationConstraint = Constraint::New<Quaternion> ( freeLookCameraActor, Actor::Property::ORIENTATION, &LookAt );
1397   cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_POSITION ) );
1398   cameraOrientationConstraint.AddSource( Source( freeLookCameraActor,  Actor::Property::WORLD_POSITION ) );
1399   cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_ORIENTATION ) );
1400   cameraOrientationConstraint.Apply();
1401
1402   CameraActor lookAtCameraActor = CameraActor::New( stageSize );
1403   lookAtCameraActor.SetType( Camera::LOOK_AT_TARGET );
1404   lookAtCameraActor.SetTargetPosition( targetPosition );
1405   lookAtCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1406
1407   stage.Add( target );
1408   stage.Add( freeLookCameraActor );
1409   stage.Add( lookAtCameraActor );
1410
1411   // Create an arbitrary vector
1412   for( float x=-1.0f; x<=1.0f; x+=0.1f )
1413   {
1414     for( float y=-1.0f; y<1.0f; y+=0.1f )
1415     {
1416       for( float z=-1.0f; z<1.0f; z+=0.1f )
1417       {
1418         Vector3 position( x, y, z );
1419         position.Normalize();
1420         position *= 200.0f;
1421
1422         freeLookCameraActor.SetPosition( position );
1423         lookAtCameraActor.SetPosition( position );
1424
1425         application.SendNotification();
1426         application.Render();
1427         application.SendNotification();
1428         application.Render();
1429         Matrix freeLookViewMatrix;
1430         Matrix lookAtViewMatrix;
1431         freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1432         lookAtCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( lookAtViewMatrix );
1433
1434         DALI_TEST_EQUALS( freeLookViewMatrix, lookAtViewMatrix, 0.01, TEST_LOCATION );
1435       }
1436     }
1437   }
1438   END_TEST;
1439 }
1440
1441 int UtcDaliCameraActorCheckLookAtAndFreeLookViews02(void)
1442 {
1443   TestApplication application;
1444   Stage stage = Stage::GetCurrent();
1445   Vector2 stageSize = stage.GetSize();
1446
1447   CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1448   freeLookCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1449   freeLookCameraActor.SetType( Camera::FREE_LOOK );
1450
1451   Vector3 targetPosition( 30.0f, 240.0f, -256.0f );
1452   Actor target = Actor::New();
1453   target.SetParentOrigin( ParentOrigin::CENTER );
1454   target.SetPosition( targetPosition );
1455
1456   Constraint cameraOrientationConstraint = Constraint::New<Quaternion> ( freeLookCameraActor, Actor::Property::ORIENTATION, &LookAt );
1457   cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_POSITION ) );
1458   cameraOrientationConstraint.AddSource( Source( freeLookCameraActor,  Actor::Property::WORLD_POSITION ) );
1459   cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_ORIENTATION ) );
1460   cameraOrientationConstraint.Apply();
1461
1462   CameraActor lookAtCameraActor = CameraActor::New( stageSize );
1463   lookAtCameraActor.SetType( Camera::LOOK_AT_TARGET );
1464   lookAtCameraActor.SetTargetPosition( targetPosition );
1465   lookAtCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1466
1467   stage.Add( target );
1468   stage.Add( freeLookCameraActor );
1469   stage.Add( lookAtCameraActor );
1470   stage.GetRenderTaskList().GetTask(0).SetCameraActor( freeLookCameraActor );
1471
1472   // Create an arbitrary vector
1473   for( float x=-1.0f; x<=1.0f; x+=0.1f )
1474   {
1475     for( float y=-1.0f; y<1.0f; y+=0.1f )
1476     {
1477       for( float z=-1.0f; z<1.0f; z+=0.1f )
1478       {
1479         Vector3 position( x, y, z );
1480         position.Normalize();
1481         position *= 200.0f;
1482
1483         freeLookCameraActor.SetPosition( position );
1484         lookAtCameraActor.SetPosition( position );
1485
1486         application.SendNotification();
1487         application.Render();
1488         application.SendNotification();
1489         application.Render();
1490         Matrix freeLookViewMatrix;
1491         freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1492
1493         Matrix freeLookWorld = freeLookCameraActor.GetCurrentWorldMatrix();
1494
1495         Matrix freeLookTest( false );
1496         Matrix::Multiply( freeLookTest, freeLookViewMatrix, freeLookWorld );
1497         DALI_TEST_EQUALS( freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION );
1498       }
1499     }
1500   }
1501
1502   END_TEST;
1503 }
1504
1505 int UtcDaliCameraActorCheckLookAtAndFreeLookViews03(void)
1506 {
1507   TestApplication application;
1508   Stage stage = Stage::GetCurrent();
1509   Vector2 stageSize = stage.GetSize();
1510
1511   Vector3 targetPosition( Vector3::ZERO );
1512   Vector3 cameraOffset( 0.0f, 0.0f, 100.0f );
1513
1514   CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1515   freeLookCameraActor.SetType( Camera::FREE_LOOK );
1516   freeLookCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1517
1518   Quaternion cameraOrientation( Radian( Degree( 180.0f ) ), Vector3::YAXIS );
1519   freeLookCameraActor.SetPosition( cameraOffset );
1520   freeLookCameraActor.SetOrientation( cameraOrientation );
1521
1522   Actor cameraAnchor = Actor::New();
1523   cameraAnchor.Add( freeLookCameraActor );
1524   stage.Add( cameraAnchor );
1525   stage.GetRenderTaskList().GetTask(0).SetCameraActor( freeLookCameraActor );
1526
1527   for( float angle = 1.0f; angle <= 180.0f; angle += 1.0f )
1528   {
1529     Quaternion rotation( Radian( Degree( angle ) ), Vector3::YAXIS );
1530
1531     freeLookCameraActor.SetPosition( rotation.Rotate( cameraOffset ) );
1532     cameraAnchor.SetOrientation( rotation );
1533
1534     application.SendNotification();
1535     application.Render();
1536     application.SendNotification();
1537     application.Render();
1538
1539     Matrix freeLookViewMatrix;
1540     freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1541
1542     Matrix freeLookWorld = freeLookCameraActor.GetCurrentWorldMatrix();
1543
1544     Matrix freeLookTest( false );
1545     Matrix::Multiply( freeLookTest,  freeLookViewMatrix,  freeLookWorld );
1546     DALI_TEST_EQUALS( freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION );
1547   }
1548   END_TEST;
1549 }