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