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