(C#) Changed Rectangle to have float properties
[platform/core/uifw/dali-toolkit.git] / plugins / dali-swig / examples / dali-test.cs
old mode 100644 (file)
new mode 100755 (executable)
index ac4bc85..a4a3a1e
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,162 +21,700 @@ using Dali;
 
 namespace MyCSharpExample
 {
-  class Example
-  {
-    [UnmanagedFunctionPointer(CallingConvention.StdCall)]
-    delegate void CallbackDelegate(IntPtr appPtr); // void, void delgate
+    class MyView : View
+    {
+        private string _myOwnName;
+        public int _myCurrentValue;
+
+        public MyView()
+        {
+            _myCurrentValue = 0;
+        }
 
-    private Dali.Application _application;
+        public string MyOwnName
+        {
+            get
+            {
+                return _myOwnName;
+            }
+            set
+            {
+              _myOwnName = value;
+            }
+        }
+    }
 
-    public Example(Dali.Application application)
+    class MyButton : PushButton
     {
-      _application = application;
-      Console.WriteLine( "InitSignal connection count = " + _application.InitSignal().GetConnectionCount() );
+        private string _myOwnName;
+        public int _myCurrentValue;
+
+        public MyButton()
+        {
+            _myCurrentValue = 0;
+        }
 
-      _application.Initialized += Initialize;
-      Console.WriteLine( "InitSignal connection count = " + _application.InitSignal().GetConnectionCount() );
+        public string MyOwnName
+        {
+            get
+            {
+                return _myOwnName;
+            }
+            set
+            {
+              _myOwnName = value;
+            }
+        }
     }
 
-    public void Initialize(object source, AUIApplicationInitEventArgs e)
+    class MySpin : Spin
     {
-      Handle handle = new Handle();
-      int myPropertyIndex = handle.RegisterProperty("myProperty", new Property.Value(10.0f), Property.AccessMode.READ_WRITE);
-      float myProperty = 0.0f;
-      handle.GetProperty(myPropertyIndex).Get(ref myProperty);
-      Console.WriteLine( "myProperty value: " + myProperty );
-
-      int myPropertyIndex2 = handle.RegisterProperty("myProperty2", new Property.Value(new Vector2(5.0f, 5.0f)), Property.AccessMode.READ_WRITE);
-      Vector2 myProperty2 = new Vector2(0.0f, 0.0f);
-      handle.GetProperty(myPropertyIndex2).Get(myProperty2);
-      Console.WriteLine( "myProperty2 value: " + myProperty2.x + ", " + myProperty2.y );
-
-      Actor actor = new Actor();
-      actor.Size = new Vector3(200.0f, 200.0f, 0.0f);
-      actor.Name = "MyActor";
-      actor.Color = new Vector4(1.0f, 0.0f, 1.0f, 0.8f);
-      Console.WriteLine("Actor id: {0}", actor.GetId());
-      Console.WriteLine("Actor size: " + actor.Size.x + ", " + actor.Size.y);
-      Console.WriteLine("Actor name: " + actor.Name);
-
-      Stage stage = Stage.GetCurrent();
-      stage.BackgroundColor =  NDalic.WHITE ;
-
-      Vector2 stageSize = stage.Size;
-      Console.WriteLine("Stage size: " + stageSize.x + ", " + stageSize.y);
-      stage.Add(actor);
-
-      TextLabel text = new TextLabel("Hello Mono World");
-      text.ParentOrigin = NDalic.ParentOriginCenter;
-      text.AnchorPoint = NDalic.AnchorPointCenter;
-      text.HorizontalAlignment = "CENTER";
-      stage.Add(text);
-
-      Console.WriteLine( "Text label text:  " + text.Text );
-
-      Console.WriteLine( "Text label point size:  " + text.PointSize );
-      text.PointSize = 32.0f;
-      Console.WriteLine( "Text label new point size:  " + text.PointSize );
-
-      using (RectInteger ri = new RectInteger(02,05,20,30))
-      {
-        Console.WriteLine( "    Created " + ri );
-        Console.WriteLine( "    IsEmpty() =  " + ri.IsEmpty() );
-        Console.WriteLine( "    Left =  " + ri.Left() );
-        Console.WriteLine( "    Right =  " + ri.Right() );
-        Console.WriteLine( "    Top  = " + ri.Top() );
-        Console.WriteLine( "    Bottom  = " + ri.Bottom() );
-        Console.WriteLine( "    Area  = " + ri.Area() );
-      }
-      Console.WriteLine( " *************************" );
-      using (RectInteger ri2 = new RectInteger(02,05,20,30))
-      {
-        Console.WriteLine( "    Created " + ri2 );
-        ri2.Set(1,1,40,40);
-        Console.WriteLine( "    IsEmpty() =  " + ri2.IsEmpty() );
-        Console.WriteLine( "    Left =  " + ri2.Left() );
-        Console.WriteLine( "    Right =  " + ri2.Right() );
-        Console.WriteLine( "    Top  = " + ri2.Top() );
-        Console.WriteLine( "    Bottom  = " + ri2.Bottom() );
-        Console.WriteLine( "    Area  = " + ri2.Area() );
-      }
-      Console.WriteLine( " *************************" );
-      using (RectDouble rd = new RectDouble(02,05,20.5,30.5))
-      {
-        Console.WriteLine( "    Created " + rd );
-        Console.WriteLine( "    IsEmpty() =  " + rd.IsEmpty() );
-        Console.WriteLine( "    Left =  " + rd.Left() );
-        Console.WriteLine( "    Right =  " + rd.Right() );
-        Console.WriteLine( "    Top  = " + rd.Top() );
-        Console.WriteLine( "    Bottom  = " + rd.Bottom() );
-        Console.WriteLine( "    Area  = " + rd.Area() );
-      }
-      Console.WriteLine( " *************************" );
-      RectDouble rd2 = new RectDouble();
-      rd2.x = 10;
-      rd2.y = 10;
-      rd2.width = 20;
-      rd2.height = 20;
-      Console.WriteLine( "    Created " + rd2 );
-      Console.WriteLine( "    IsEmpty() =  " + rd2.IsEmpty() );
-      Console.WriteLine( "    Left =  " + rd2.Left() );
-      Console.WriteLine( "    Right =  " + rd2.Right() );
-      Console.WriteLine( "    Top  = " + rd2.Top() );
-      Console.WriteLine( "    Bottom  = " + rd2.Bottom() );
-      Console.WriteLine( "    Area  = " + rd2.Area() );
-
-      Console.WriteLine( " *************************" );
-      Vector2 vector2 = new Vector2(100, 50);
-      Console.WriteLine( "    Created " + vector2 );
-      Console.WriteLine( "    Vector2 x =  " + vector2.x + ", y = " + vector2.y );
-      vector2 += new Vector2(20, 20);
-      Console.WriteLine( "    Vector2 x =  " + vector2[0] + ", y = " + vector2[1] );
-      vector2.x += 10;
-      vector2.y += 10;
-      Console.WriteLine( "    Vector2 width =  " + vector2.width + ", height = " + vector2.height );
-      vector2 += new Vector2(15, 15);
-      Console.WriteLine( "    Vector2 width =  " + vector2[0] + ", height = " + vector2[1] );
-
-      Console.WriteLine( " *************************" );
-      Vector3 vector3 = new Vector3(20, 100, 50);
-      Console.WriteLine( "    Created " + vector3 );
-      Console.WriteLine( "    Vector3 x =  " + vector3.x + ", y = " + vector3.y + ", z = " + vector3.z );
-      vector3 += new Vector3(20, 20, 20);
-      Console.WriteLine( "    Vector3 x =  " + vector3[0] + ", y = " + vector3[1] + ", z = " + vector3[2] );
-      vector3.x += 10;
-      vector3.y += 10;
-      vector3.z += 10;
-      Console.WriteLine( "    Vector3 width =  " + vector3.width + ", height = " + vector3.height + ", depth = " + vector3.depth );
-      Vector3 parentOrigin = NDalic.ParentOriginBottomRight;
-      Console.WriteLine( "    parentOrigin x =  " + parentOrigin.x + ", y = " + parentOrigin.y + ", z = " + parentOrigin.z );
-
-      Console.WriteLine( " *************************" );
-      Vector4 vector4 = new Vector4(20, 100, 50, 200);
-      Console.WriteLine( "    Created " + vector4 );
-      Console.WriteLine( "    Vector4 x =  " + vector4.x + ", y = " + vector4.y + ", z = " + vector4.z + ", w = " + vector4.w );
-      vector4 += new Vector4(20, 20, 20, 20);
-      Console.WriteLine( "    Vector4 x =  " + vector4[0] + ", y = " + vector4[1] + ", z = " + vector4[2] + ", w = " + vector4[3] );
-      vector4.x += 10;
-      vector4.y += 10;
-      vector4.z += 10;
-      vector4.w += 10;
-      Console.WriteLine( "    Vector4 r =  " + vector4.r + ", g = " + vector4.g + ", b = " + vector4.b + ", a = " + vector4.a );
+        private string _myOwnName;
+        public int _myCurrentValue;
+
+        public MySpin()
+        {
+            _myCurrentValue = 0;
+        }
+
+        public string MyOwnName
+        {
+            get
+            {
+                return _myOwnName;
+            }
+            set
+            {
+              _myOwnName = value;
+            }
+        }
     }
 
-    public void MainLoop()
+    class Example
     {
-      _application.MainLoop ();
-    }
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        delegate void CallbackDelegate(IntPtr appPtr); // void, void delgate
+
+        private Dali.Application _application;
+
+        public Example(Dali.Application application)
+        {
+            _application = application;
+            Console.WriteLine( "InitSignal connection count = " + _application.InitSignal().GetConnectionCount() );
+
+            _application.Initialized += Initialize;
+            Console.WriteLine( "InitSignal connection count = " + _application.InitSignal().GetConnectionCount() );
+        }
+
+        public void Initialize(object source, NUIApplicationInitEventArgs e)
+        {
+            NavigationPropertiesTests();
+
+            OperatorTests();
+
+            CustomViewPropertyTest();
+
+            Handle handle = new Handle();
+            int myPropertyIndex = handle.RegisterProperty("myProperty", new Property.Value(10.0f), Property.AccessMode.READ_WRITE);
+            float myProperty = 0.0f;
+            handle.GetProperty(myPropertyIndex).Get(ref myProperty);
+            Console.WriteLine( "myProperty value: " + myProperty );
+
+            int myPropertyIndex2 = handle.RegisterProperty("myProperty2", new Property.Value(new Size(5.0f, 5.0f)), Property.AccessMode.READ_WRITE);
+            Size myProperty2 = new Size(0.0f, 0.0f);
+            handle.GetProperty(myPropertyIndex2).Get(myProperty2);
+            Console.WriteLine( "myProperty2 value: " + myProperty2.W + ", " + myProperty2.H );
+
+            Actor actor = new Actor();
+            actor.Size = new Position(200.0f, 200.0f, 0.0f);
+            actor.Name = "MyActor";
+
+            Console.WriteLine("Actor id: {0}", actor.GetId());
+            Console.WriteLine("Actor size: " + actor.Size.X + ", " + actor.Size.Y);
+            Console.WriteLine("Actor name: " + actor.Name);
+
+            Stage stage = Stage.GetCurrent();
+            stage.BackgroundColor = Color.White;
+            Size stageSize = stage.Size;
+            Console.WriteLine("Stage size: " + stageSize.W + ", " + stageSize.H);
+            stage.Add(actor);
+
+            TextLabel text = new TextLabel("Hello Mono World");
+            text.ParentOrigin = NDalic.ParentOriginCenter;
+            text.AnchorPoint = NDalic.AnchorPointCenter;
+            text.HorizontalAlignment = "CENTER";
+            stage.Add(text);
+
+            Console.WriteLine( "Text label text:  " + text.Text );
+
+            Console.WriteLine( "Text label point size:  " + text.PointSize );
+            text.PointSize = 32.0f;
+            Console.WriteLine( "Text label new point size:  " + text.PointSize );
+
+            RectanglePaddingClassTest();
+
+            Console.WriteLine( " *************************" );
+            Size Size = new Size(100, 50);
+            Console.WriteLine( "    Created " + Size );
+            Console.WriteLine( "    Size x =  " + Size.W + ", y = " + Size.H );
+            Size += new Size(20, 20);
+            Console.WriteLine( "    Size x =  " + Size.W + ", y = " + Size.H );
+            Size.W += 10;
+            Size.H += 10;
+            Console.WriteLine( "    Size width =  " + Size.W + ", height = " + Size.H );
+
+            Console.WriteLine( " *************************" );
+            Position Position = new Position(20, 100, 50);
+            Console.WriteLine( "    Created " + Position );
+            Console.WriteLine( "    Position x =  " + Position.X + ", y = " + Position.Y + ", z = " + Position.Z );
+            Position += new Position(20, 20, 20);
+            Console.WriteLine( "    Position x =  " + Position.X + ", y = " + Position.Y + ", z = " + Position.Z );
+            Position.X += 10;
+            Position.Y += 10;
+            Position.Z += 10;
+            Console.WriteLine( "    Position width =  " + Position.X + ", height = " + Position.Y + ", depth = " + Position.Z );
+            Position parentOrigin = new Dali.Position(NDalic.ParentOriginBottomRight);
+            Console.WriteLine( "    parentOrigin x =  " + parentOrigin.X + ", y = " + parentOrigin.Y + ", z = " + parentOrigin.Z );
+
+            Console.WriteLine( " *************************" );
+            Color color = new Color(20, 100, 50, 200);
+            Console.WriteLine( "    Created " + color );
+            Console.WriteLine( "    Color R =  " + color.R + ", G = " + color.G + ", B = " + color.B + ", A = " + color.A );
+            color += new Color(20, 20, 20, 20);
+            Console.WriteLine( "    Color R =  " + color.R + ", G = " + color.G + ", B = " + color.B + ", A = " + color.A );
+            color.R += 10;
+            color.G += 10;
+            color.B += 10;
+            color.A += 10;
+            Console.WriteLine( "    Color r =  " + color.R + ", g = " + color.G + ", b = " + color.B + ", a = " + color.A );
+
+            ViewDownCastTest();
+        }
+
+        public void RectanglePaddingClassTest()
+        {
+            using (Rectangle r1 = new Rectangle(2, 5, 20, 30))
+            {
+                Console.WriteLine( "    Created " + r1 );
+                Console.WriteLine( "    IsEmpty() =  " + r1.IsEmpty() );
+                Console.WriteLine( "    Left =  " + r1.Left() );
+                Console.WriteLine( "    Right =  " + r1.Right() );
+                Console.WriteLine( "    Top  = " + r1.Top() );
+                Console.WriteLine( "    Bottom  = " + r1.Bottom() );
+                Console.WriteLine( "    Area  = " + r1.Area() );
+            }
+
+            Console.WriteLine( " *************************" );
+
+            using (Rectangle r2 = new Rectangle(2, 5, 20.0f, 30.0f))
+            {
+                Console.WriteLine( "    Created " + r2 );
+                r2.Set(1,1,40,40);
+                Console.WriteLine( "    IsEmpty() =  " + r2.IsEmpty() );
+                Console.WriteLine( "    Left =  " + r2.Left() );
+                Console.WriteLine( "    Right =  " + r2.Right() );
+                Console.WriteLine( "    Top  = " + r2.Top() );
+                Console.WriteLine( "    Bottom  = " + r2.Bottom() );
+                Console.WriteLine( "    Area  = " + r2.Area() );
+            }
+
+            Console.WriteLine( " *************************" );
+
+            Rectangle r3 = new Rectangle(10, 10, 20, 20);
+            Rectangle r4 = new Rectangle(10, 10, 20, 20);
+
+            if (r3 == r4)
+            {
+                Console.WriteLine("r3 == r4");
+            }
+            else
+            {
+                Console.WriteLine("r3 != r4");
+            }
+
+            r4 = new Rectangle(12, 10, 20, 20);
+
+            if (r3 == r4)
+            {
+                Console.WriteLine("r3 == r4");
+            }
+            else
+            {
+                Console.WriteLine("r3 != r4");
+            }
+
+            PaddingType p1 = new PaddingType(10.5f, 10.7f, 20.8f, 20.8f);
+            PaddingType p2 = new PaddingType(10.5f, 10.7f, 20.8f, 20.8f);
+
+            if (p1 == p2)
+            {
+                Console.WriteLine("p1 == p2");
+            }
+            else
+            {
+                Console.WriteLine("p1 != p2");
+            }
+
+            p2 = new PaddingType(12.0f, 10.7f, 20.2f, 20.0f);
+
+            if (p1 == p2)
+            {
+                Console.WriteLine("p1 == p2");
+            }
+            else
+            {
+                Console.WriteLine("p1 != p2");
+            }
+        }
+
+        public void NavigationPropertiesTests()
+        {
+            View view = new View();
+            View leftView, rightView, upView, downView, tmpView;
+
+            leftView = new View();
+            leftView.Name = "leftView";
+            rightView = new View();
+            rightView.Name = "rightView";
+            upView = new View();
+            upView.Name = "upView";
+            downView = new View();
+            downView.Name = "downView";
+
+            Stage.Instance.Add(leftView);
+            Stage.Instance.Add(rightView);
+            Stage.Instance.Add(upView);
+            Stage.Instance.Add(downView);
+
+            view.LeftFocusableView = leftView;
+            tmpView = view.LeftFocusableView;
+            if (string.Compare(tmpView.Name, "leftView") == 0)
+            {
+                Console.WriteLine("Passed: LeftFocusedView = " + tmpView.Name);
+            }
+            else
+            {
+                Console.WriteLine("Failed: LeftFocusedView = " + tmpView.Name);
+            }
+
+            view.RightFocusableView = rightView;
+            tmpView = view.RightFocusableView;
+            if (string.Compare(tmpView.Name, "rightView") == 0)
+            {
+                Console.WriteLine("Passed: RightFocusedView = " + tmpView.Name);
+            }
+            else
+            {
+                Console.WriteLine("Failed: RightFocusedView = " + tmpView.Name);
+            }
+
+            Stage.Instance.Add(view);
+
+            view.UpFocusableView = upView;
+            tmpView = view.UpFocusableView;
+            if (string.Compare(tmpView.Name, "upView") == 0)
+            {
+                Console.WriteLine("Passed: UpFocusedView = " + tmpView.Name);
+            }
+            else
+            {
+                Console.WriteLine("Failed: UpFocusedView = " + tmpView.Name);
+            }
+
+            view.DownFocusableView = downView;
+            tmpView = view.DownFocusableView;
+            if (string.Compare(tmpView.Name, "downView") == 0)
+            {
+                Console.WriteLine("Passed: DownFocusedView = " + tmpView.Name);
+            }
+            else
+            {
+                Console.WriteLine("Failed: DownFocusedView = " + tmpView.Name);
+            }
+
+            Stage.Instance.Remove(leftView);
+            tmpView = view.LeftFocusableView;
+            if (!tmpView)
+            {
+                Console.WriteLine("Passed: NULL LeftFocusedView");
+            }
+            else
+            {
+                Console.WriteLine("Failed: LeftFocusedView = " + tmpView.Name);
+            }
+        }
+
+        public void OperatorTests()
+        {
+            Actor actor = new Actor();
+            Actor differentActor = new Actor();
+            Actor actorSame = actor;
+            Actor nullActor = null;
+
+            // test the true operator
+            if ( actor )
+            {
+                Console.WriteLine ("BaseHandle Operator true (actor) : test passed ");
+            }
+            else
+            {
+                Console.WriteLine ("BaseHandle Operator true (actor): test failed ");
+            }
 
-    /// <summary>
-    /// The main entry point for the application.
-    /// </summary>
-    [STAThread]
-      static void Main(string[] args)
-      {
-        Console.WriteLine ("Hello Mono World");
-
-        Example example = new Example(Application.NewApplication());
-        example.MainLoop ();
-      }
-  }
+            Actor parent = actor.GetParent ();
+
+            if ( parent )
+            {
+                Console.WriteLine ("Handle with Empty body  :failed ");
+            }
+            else
+            {
+                Console.WriteLine ("Valid with Empty body  :passed ");
+            }
+
+            actor.Add( differentActor );
+
+            // here we test two different C# objects, which on the native side have the same body/ ref-object
+            if ( actor == differentActor.GetParent() )
+            {
+                Console.WriteLine ("actor == differentActor.GetParent() :passed ");
+            }
+            else
+            {
+                Console.WriteLine ("actor == differentActor.GetParent() :failed ");
+            }
+
+            if ( differentActor == differentActor.GetParent() )
+            {
+                Console.WriteLine ("differentActor == differentActor.GetParent() :failed ");
+            }
+            else
+            {
+                Console.WriteLine ("differentActor == differentActor.GetParent() :passed ");
+            }
+
+            if ( nullActor )
+            {
+                Console.WriteLine ("BaseHandle Operator true (nullActor) : test failed ");
+            }
+            else
+            {
+                Console.WriteLine ("BaseHandle Operator true (nullActor): test passed ");
+            }
+
+            // ! operator
+            if ( !actor )
+            {
+                Console.WriteLine ("BaseHandle Operator !(actor) : test failed ");
+            }
+            else
+            {
+                Console.WriteLine ("BaseHandle Operator !(actor): test passed ");
+            }
+
+            if ( !nullActor )
+            {
+                Console.WriteLine ("BaseHandle Operator !(nullActor) : test passed ");
+            }
+            else
+            {
+                Console.WriteLine ("BaseHandle Operator !(nullActor): test failed ");
+            }
+
+            // Note: operator false only used inside & operator
+            // test equality operator ==
+            if ( actor == actorSame )
+            {
+                Console.WriteLine ("BaseHandle Operator  (actor == actorSame) : test passed");
+            }
+            else
+            {
+                Console.WriteLine ("BaseHandle Operator  (actor == actorSame) : test failed");
+            }
+
+            if ( actor == differentActor )
+            {
+                Console.WriteLine ("BaseHandle Operator (actor == differentActor) : test failed");
+            }
+            else
+            {
+                Console.WriteLine ("BaseHandle Operator (actor == differentActor) : test passed");
+            }
+
+            if ( actor == nullActor )
+            {
+                Console.WriteLine ("BaseHandle Operator (actor == nullActor) : test failed");
+            }
+            else
+            {
+                Console.WriteLine ("BaseHandle Operator (actor == nullActor) : test passed");
+            }
+
+            if ( nullActor == nullActor )
+            {
+                Console.WriteLine ("BaseHandle Operator (nullActor == nullActor) : test passed");
+            }
+            else
+            {
+                Console.WriteLine ("BaseHandle Operator (nullActor == nullActor) : test failed");
+            }
+
+            // test || operator
+            if ( actor || actorSame )
+            {
+                Console.WriteLine ("BaseHandle Operator (actor || actorSame) : test passed");
+            }
+            else
+            {
+                Console.WriteLine ("BaseHandle Operator (actor || actorSame) : test failed");
+            }
+
+            if ( actor || nullActor )
+            {
+                Console.WriteLine ("BaseHandle Operator (actor || nullActor) : test passed");
+            }
+            else
+            {
+                Console.WriteLine ("BaseHandle Operator (actor || nullActor) : test failed");
+            }
+
+            if ( nullActor || nullActor )
+            {
+                Console.WriteLine ("BaseHandle Operator (nullActor || nullActor) : test failed");
+            }
+            else
+            {
+                Console.WriteLine ("BaseHandle Operator (nullActor || nullActor) : test passed");
+            }
+
+            // test && operator
+            if ( actor && actorSame )
+            {
+                Console.WriteLine ("BaseHandle Operator (actor && actorSame) : test passed");
+            }
+            else
+            {
+                Console.WriteLine ("BaseHandle Operator (actor && actorSame) : test failed");
+            }
+
+            if ( actor && nullActor )
+            {
+                Console.WriteLine ("BaseHandle Operator (actor && nullActor) : test failed");
+            }
+            else
+            {
+                Console.WriteLine ("BaseHandle Operator (actor && nullActor) : test passed");
+            }
+
+            if ( nullActor && nullActor )
+            {
+                Console.WriteLine ("BaseHandle Operator (nullActor && nullActor) : test failed");
+            }
+            else
+            {
+                Console.WriteLine ("BaseHandle Operator (nullActor && nullActor) : test passed");
+            }
+        }
+
+        public void CustomViewPropertyTest()
+        {
+            // Create a Spin control
+            Spin spin = new Spin();
+
+            // Background property
+            Property.Map background = new Property.Map();
+            background.Add( Dali.Constants.Visual.Property.Type, new Property.Value((int)Dali.Constants.Visual.Type.Color) )
+                      .Add( Dali.Constants.ColorVisualProperty.MixColor, new Property.Value(Color.Red) );
+            spin.Background = background;
+
+            background = spin.Background;
+            Vector4 backgroundColor = new Vector4();
+            background.Find(Dali.Constants.ColorVisualProperty.MixColor).Get(backgroundColor);
+            if( backgroundColor == Color.Red )
+            {
+                Console.WriteLine ("Custom View Background property : test passed");
+            }
+            else
+            {
+                Console.WriteLine ("Custom View Background property : test failed");
+            }
+
+            // BackgroundColor property
+            spin.BackgroundColor = Color.Yellow;
+            if(spin.BackgroundColor == Color.Yellow)
+            {
+                Console.WriteLine ("Custom View BackgroundColor property : test passed");
+            }
+            else
+            {
+                Console.WriteLine ("Custom View BackgroundColor property : test failed");
+            }
+
+            // BackgroundImage property
+            spin.BackgroundImage = "background-image.jpg";
+            if(spin.BackgroundImage == "background-image.jpg")
+            {
+                Console.WriteLine ("Custom View BackgroundImage property : test passed");
+            }
+            else
+            {
+                Console.WriteLine ("Custom View BackgroundImage property : test failed");
+            }
+
+            // StyleName property
+            spin.StyleName = "MyCustomStyle";
+            if(spin.StyleName == "MyCustomStyle")
+            {
+                Console.WriteLine ("Custom View StyleName property : test passed");
+            }
+            else
+            {
+                Console.WriteLine ("Custom View StyleName property : test failed");
+            }
+        }
+
+        public void ViewDownCastTest()
+        {
+          View container = new View();
+          container.Position = new Position(-800.0f, -800.0f, 0.0f);
+          Stage.GetCurrent().Add(container);
+
+          // Test downcast for native control
+          TextLabel myLabel = new TextLabel();
+          myLabel.Name = "MyLabelName";
+          myLabel.Text = "MyText";
+
+          Console.WriteLine("myLabel.Name = " + myLabel.Name + ", Text = " + myLabel.Text);
+
+          container.Add(myLabel);
+
+          Actor myLabelActor  = container.FindChildByName("MyLabelName");
+          if(myLabelActor)
+          {
+            TextLabel newLabel = View.DownCast<TextLabel>(myLabelActor);
+            if(newLabel)
+            {
+              Console.WriteLine("Downcast to TextLabel successful: newLabel Name = " + newLabel.Name + ", Text = " + newLabel.Text);
+            }
+            else
+            {
+              Console.WriteLine("Downcast to TextLabel failed!");
+            }
+          }
+
+          // Test downcast for class directly inherited from View
+          MyView myView = new MyView();
+          myView.Name = "MyViewName";
+          myView.MyOwnName = "MyOwnViewName";
+          myView._myCurrentValue = 5;
+
+          Console.WriteLine("myView.Name = " + myView.Name + ", MyOwnName = " + myView.MyOwnName + ", myCurrentValue = " + myView._myCurrentValue);
+
+          container.Add(myView);
+
+          Actor myViewActor  = container.FindChildByName("MyViewName");
+          if(myViewActor)
+          {
+            MyView newView = View.DownCast<MyView>(myViewActor);
+            if(newView)
+            {
+              Console.WriteLine("Downcast to MyView successful: newView Name = " + newView.Name + ", MyOwnName = " + newView.MyOwnName + ", myCurrentValue = " + newView._myCurrentValue);
+            }
+            else
+            {
+              Console.WriteLine("Downcast to MyView failed!");
+            }
+          }
+
+          // Test downcast for class directly inherited from native control
+          MyButton myButton = new MyButton();
+          myButton.Name = "MyButtonName";
+          myButton.MyOwnName = "MyOwnViewName";
+          myButton.LabelText = "MyLabelText";
+          myButton._myCurrentValue = 5;
+
+          Console.WriteLine("myButton.Name = " + myButton.Name + ", MyOwnName = " + myButton.MyOwnName + ", LabelText = " + myButton.LabelText + ", myCurrentValue = " + myButton._myCurrentValue);
+
+          container.Add(myButton);
+
+          Actor myButtonActor  = container.FindChildByName("MyButtonName");
+          if(myButtonActor)
+          {
+            MyButton newButton = View.DownCast<MyButton>(myButtonActor);
+            if(newButton)
+            {
+              Console.WriteLine("Downcast to MyButton successful: newButton Name = " + newButton.Name + ", MyOwnName = " + newButton.MyOwnName + ", LabelText = " + myButton.LabelText + ", myCurrentValue = " + newButton._myCurrentValue);
+            }
+            else
+            {
+              Console.WriteLine("Downcast to MyButton failed!");
+            }
+          }
+
+          // Test downcast for a CustomView
+          Spin spin = new Spin();
+          spin.Name = "SpinName";
+          spin.MaxValue = 8888;
+
+          Console.WriteLine("spin.Name = " + spin.Name + ", MaxValue = " + spin.MaxValue);
+
+          container.Add(spin);
+
+          Actor spinActor  = container.FindChildByName("SpinName");
+          if(spinActor)
+          {
+            Spin newSpin = View.DownCast<Spin>(spinActor);
+            if(newSpin)
+            {
+              Console.WriteLine("Downcast to Spin successful: newSpin Name = " + newSpin.Name + ", MaxValue = " + newSpin.MaxValue);
+            }
+            else
+            {
+              Console.WriteLine("Downcast to Spin failed!");
+            }
+          }
+
+          // Test downcast for class inherited from a CustomView
+          MySpin mySpin = new MySpin();
+          mySpin.Name = "MySpinName";
+          mySpin.MyOwnName = "MyOwnSpinName";
+          mySpin.MaxValue = 8888;
+          mySpin._myCurrentValue = 5;
+
+          Console.WriteLine("mySpin.Name = " + mySpin.Name + ", MyOwnName = " + mySpin.MyOwnName + ", MaxValue = " + mySpin.MaxValue + ", currentValue = " + mySpin._myCurrentValue);
+
+          container.Add(mySpin);
+
+          Actor mySpinActor  = container.FindChildByName("MySpinName");
+          if(mySpinActor)
+          {
+            MySpin newSpin = View.DownCast<MySpin>(mySpinActor);
+            if(newSpin)
+            {
+              Console.WriteLine("Downcast to MySpin successful: newSpin Name = " + newSpin.Name + ", MyOwnName = " + newSpin.MyOwnName + ", MaxValue = " + newSpin.MaxValue + ", currentValue = " + newSpin._myCurrentValue);
+            }
+            else
+            {
+              Console.WriteLine("Downcast to MySpin failed!");
+            }
+          }
+        }
+
+        public void MainLoop()
+        {
+            _application.MainLoop ();
+        }
+
+        /// <summary>
+        /// The main entry point for the application.
+        /// </summary>
+        [STAThread]
+        static void Main(string[] args)
+        {
+            Console.WriteLine ("Hello Mono World");
+
+            Example example = new Example(Application.NewApplication());
+            example.MainLoop ();
+        }
+    }
 }