[NUI][TSACR-421] add CollectionView, GridLayouter, LinearLayouter, RecyclerViewITem... 97/258397/13
authorEverLEEst(SangHyeon Lee) <sh10233.lee@samsung.com>
Fri, 14 May 2021 11:00:34 +0000 (20:00 +0900)
committerEverLEEst(SangHyeon Lee) <sh10233.lee@samsung.com>
Mon, 28 Jun 2021 08:05:17 +0000 (17:05 +0900)
https://code.sec.samsung.net/jira/browse/TCSACR-421

Skipped Abstract class and internal method, constructors.
Layouter's public method is not intended for user call
(it only works with CollectionView)

Change-Id: I1daba0e8348919f6360026cc20f955516bf9fbe3

tct-suite-vs/Tizen.NUI.Components.Manual.Tests/testcase/TSCollectionView.cs [new file with mode: 0755]
tct-suite-vs/Tizen.NUI.Components.Manual.Tests/testcase/TSRecyclerViewItem.cs [new file with mode: 0755]
tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSCollectionView.cs [new file with mode: 0755]
tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSGridLayouter.cs [new file with mode: 0755]
tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSItemsLayouter.cs [new file with mode: 0755]
tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSLinearLayouter.cs [new file with mode: 0755]
tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSRecyclerView.cs [new file with mode: 0755]
tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSRecyclerViewItem.cs [new file with mode: 0755]
tct-suite-vs/Tizen.NUI.Tests/testcase/TSDataTemplate.cs [new file with mode: 0755]
tct-suite-vs/Tizen.NUI.Tests/testcase/TSDataTemplateSelector.cs [new file with mode: 0755]
tct-suite-vs/Tizen.NUI.Tests/testcase/TSElementTemplate.cs [new file with mode: 0755]

diff --git a/tct-suite-vs/Tizen.NUI.Components.Manual.Tests/testcase/TSCollectionView.cs b/tct-suite-vs/Tizen.NUI.Components.Manual.Tests/testcase/TSCollectionView.cs
new file mode 100755 (executable)
index 0000000..eb6561f
--- /dev/null
@@ -0,0 +1,420 @@
+/*
+ *  Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License
+ */
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Threading.Tasks;
+using NUnit.Framework;
+using NUnit.Framework.TUnit;
+using Tizen.NUI;
+using Tizen.NUI.Binding;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+
+namespace Tizen.NUI.Components.Tests
+{
+    [TestFixture]
+    [Description("Tizen.NUI.Components.CollectionView test")]
+    public class CollectionViewTests
+    {
+        private ManualTestComponents _testPage;
+        private WearableManualTestNUI _wearTestPage;
+        private View _view;
+        private CollectionView _colView;
+        private float _pointSize = 20.0f;
+        private TestItem _firstItem;
+        private TestItem _secondItem;
+        private TestItem _confirmItem;
+        private ItemSelectionMode _mode;
+        private bool _isMobile = false;
+        private bool _isWearable = false;
+
+        [SetUp]
+        public void Init()
+        {
+            LogUtils.Write(LogUtils.INFO, LogUtils.TAG, "Preconditions for each TEST");
+
+            _isMobile = ManualTest.IsMobile();
+            _isWearable = ManualTest.IsWearable();
+            if (_isWearable)
+            {
+                _pointSize = 2.0f;
+                _wearTestPage = WearableManualTestNUI.GetInstance();
+            }
+            else
+            {
+                _pointSize = ManualTest.GetPointSize();
+                _testPage = ManualTestComponents.GetInstance();
+            }
+
+            _view = new View();
+            _view.Focusable = true;
+            _view.Position = new Position(0, Window.Instance.Size.Height * 0.41f);
+            _view.Size = new Size(Window.Instance.Size.Width , Window.Instance.Size.Height * 0.26f);
+            _view.Layout = new LinearLayout() { LinearOrientation = LinearLayout.Orientation.Vertical };
+            _view.BackgroundColor = Color.LightGray;
+        }
+
+        [TearDown]
+        public void Destroy()
+        {
+            LogUtils.Write(LogUtils.INFO, LogUtils.TAG, "Postconditions for each TEST");
+        }
+
+        private CollectionView CreateMyCollectionView()
+        {
+            var colView = new CollectionView();
+            Assert.IsNotNull(colView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(colView, "Should return CollectionView instance");
+            var source = TestSource.GetSimpleSource(100);
+            Assert.IsNotNull(source, "Should be not null");
+
+            _firstItem = source[0];
+            _secondItem = source[1];
+            _confirmItem = source[2];
+
+            colView.ItemsSource = source;
+            var layouter = new LinearLayouter();
+            Assert.IsNotNull(layouter, "Should be not null");
+            colView.ItemsLayouter = layouter;
+            var template = new Binding.DataTemplate(() => {
+                var item = new DefaultLinearItem();
+                Assert.IsNotNull(item, "Should be not null");
+                item.Label.SetBinding(TextLabel.TextProperty, "Name");
+                item.WidthSpecification = LayoutParamPolicies.MatchParent;
+                item.Clicked += OnClicked;
+
+                return item;
+            });
+            Assert.IsNotNull(template, "Should be not null");
+            colView.ItemTemplate = template;
+            colView.ScrollingDirection = ScrollableBase.Direction.Vertical;
+            colView.WidthSpecification = LayoutParamPolicies.MatchParent;
+            colView.HeightSpecification = LayoutParamPolicies.MatchParent;
+
+            _view.Add(colView);
+
+            return colView;
+        }
+
+        public void OnSelectionChangedSingle(object sender, EventArgs e)
+        {
+            SelectionChangedEventArgs selEvt = e as SelectionChangedEventArgs;
+            Assert.IsNotNull(selEvt, "Should be not null");
+            TestItem prevSelection = null, curSelection = null;
+            //Get previous Selected Item.
+            if (selEvt.PreviousSelection.Count == 0) prevSelection = null;
+            else
+            {
+                foreach(var item in selEvt.PreviousSelection)
+                    prevSelection = item as TestItem;
+
+                if (prevSelection != null)
+                {
+                    if (_firstItem == prevSelection)
+                        prevSelection.Name = "First Item";
+                    if (_secondItem == prevSelection)
+                        prevSelection.Name = "Second Item";
+                    if (_confirmItem == prevSelection)
+                        prevSelection.Name = "Confirm";
+                    else
+                        prevSelection.Name = "Test Item";
+                }
+            }
+
+            //Get previous Selected Item.
+            if (selEvt.CurrentSelection.Count == 0) curSelection = null;
+            else
+            {
+                foreach(var item in selEvt.CurrentSelection)
+                    curSelection = item as TestItem;
+                if (curSelection != null)
+                {
+                    curSelection.Name = "Selected";
+
+                    if (_confirmItem == curSelection)
+                        ManualTest.Confirm();
+                }
+            }
+        }
+
+        public void OnSelectionChangedMultiple(object sender, EventArgs e)
+        {
+            SelectionChangedEventArgs selEvt = e as SelectionChangedEventArgs;
+            Assert.IsNotNull(selEvt, "Should be not null");
+            var prevSelection = new List<object>(selEvt.PreviousSelection);
+            var newSelection = new List<object>(selEvt.CurrentSelection);
+            prevSelection.Except(selEvt.CurrentSelection);
+            newSelection.Except(selEvt.CurrentSelection);
+            //Get previous Selected Item.
+            if (prevSelection.Count != 0)
+            {
+                foreach(TestItem item in prevSelection)
+                {
+                    if (item != null)
+                    {
+                        if (_firstItem == item)
+                            item.Name = "First Item";
+                        if (_secondItem == item)
+                            item.Name = "Second Item";
+                        if (_confirmItem == item)
+                            item.Name = "Confirm";
+                        else
+                            item.Name = "Test Item";
+                    }
+                }
+            }
+
+            //Get previous Selected Item.
+            if (newSelection.Count != 0)
+            {
+                foreach(TestItem item in newSelection)
+                {
+                    if (item != null)
+                    {
+                        if (_confirmItem == item) ManualTest.Confirm();
+                        item.Name = "Selected";
+                    }
+                }
+            }
+        }
+
+        public void OnSelectionChangedNone(object sender, EventArgs e)
+        {
+            Assert.Fail("Selection Should not be called in mode None!");
+        }
+
+        public void OnClicked(object sender, EventArgs e)
+        {
+            View clickedView = sender as View;
+            if (clickedView != null && clickedView.BindingContext == _confirmItem)
+                ManualTest.Confirm();
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test: Selection Single. Check whether the event will be triggered when user click the item and check Selection works properly as Single")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.SelectionChanged E")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "EVL")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        [Precondition(1, "If test on TV, prepare mouse and connect to TV.")]
+        [Step(1, "Click run TC")]
+        [Step(2, "Click(Touch) the first recyclerviewitem and check text is changed as selected.")]
+        [Step(3, "Click(Touch) the second recyclerviewitem and check text is changed selected and previous item is unselected")]
+        [Step(4, "Click(Touch) the same recyclerviewitem again and check item is unselected.")]
+        [Step(5, "Click(Touch) the confirm recyclerviewitem.")]
+        [Step(6, "TC will pass after touch or click.")]
+        [Postcondition(1, "NA")]
+        public async Task SelectionChanged_CB_Single()
+        {
+            _colView = CreateMyCollectionView();
+
+            _colView.SelectionMode = ItemSelectionMode.Single;
+            _colView.SelectionChanged += OnSelectionChangedSingle;
+            Tizen.Log.Fatal("NUI.Components", "CollectionView Single Created!");
+            if (_isWearable)
+            {
+                _wearTestPage.ExecuteTC(_view);
+            }
+            else
+            {
+                _testPage.ExecuteTC(_view);
+            }
+            await ManualTest.WaitForConfirm();
+            _colView.SelectionChanged -= OnSelectionChangedSingle;
+            if (_isWearable)
+            {
+                _wearTestPage.ClearTestCase(_view);
+            }
+            else
+            {
+                _testPage.ClearTestCase(_view);
+            }
+        }
+
+
+        [Test]
+        [Category("P1")]
+        [Description("Test: Selection SingleAlways. Check whether the event will be triggered when user click the item and check Selection works properly as SingleAlways")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.SelectionChanged E")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "EVL")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        [Precondition(1, "If test on TV, prepare mouse and connect to TV.")]
+        [Step(1, "Click run TC")]
+        [Step(2, "Click(Touch) the first recyclerviewitem and check text is changed as selected.")]
+        [Step(3, "Click(Touch) the second recyclerviewitem and check text is changed as selected and previous item is unselected.")]
+        [Step(4, "Click(Touch) the same recyclerviewitem again and check item is selected still.")]
+        [Step(5, "Click(Touch) the confirm recyclerviewitem.")]
+        [Step(6, "TC will pass after touch or click.")]
+        [Postcondition(1, "NA")]
+        public async Task SelectionChanged_CB_SingleAlways()
+        {
+            _colView = CreateMyCollectionView();
+
+            _colView.SelectionMode = ItemSelectionMode.SingleAlways;
+            _colView.SelectionChanged += OnSelectionChangedSingle;
+            if (_isWearable)
+            {
+                _wearTestPage.ExecuteTC(_view);
+            }
+            else
+            {
+                _testPage.ExecuteTC(_view);
+            }
+            await ManualTest.WaitForConfirm();
+            _colView.SelectionChanged -= OnSelectionChangedSingle;
+            if (_isWearable)
+            {
+                _wearTestPage.ClearTestCase(_view);
+            }
+            else
+            {
+                _testPage.ClearTestCase(_view);
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test: Selection Multiple. Check whether the event will be triggered when user click the item and check Selection works properly as Multiple")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.SelectionChanged E")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "EVL")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        [Precondition(1, "If test on TV, prepare mouse and connect to TV.")]
+        [Step(1, "Click run TC")]
+        [Step(2, "Click(Touch) the first recyclerviewitem and check text is changed as selected.")]
+        [Step(3, "Click(Touch) the second recyclerviewitem and check text is changed as selected and previous selected item still selected.")]
+        [Step(4, "Click(Touch) the same recyclerviewitem again and check item is unselected.")]
+        [Step(5, "Click(Touch) the confirm recyclerviewitem.")]
+        [Step(6, "TC will pass after touch or click.")]
+        [Postcondition(1, "NA")]
+        public async Task SelectionChanged_CB_Multiple()
+        {
+            _colView = CreateMyCollectionView();
+
+            _colView.SelectionMode = ItemSelectionMode.Multiple;
+            _colView.SelectionChanged += OnSelectionChangedMultiple;
+            if (_isWearable)
+            {
+                _wearTestPage.ExecuteTC(_view);
+            }
+            else
+            {
+                _testPage.ExecuteTC(_view);
+            }
+            await ManualTest.WaitForConfirm();
+            _colView.SelectionChanged -= OnSelectionChangedMultiple;
+            if (_isWearable)
+            {
+                _wearTestPage.ClearTestCase(_view);
+            }
+            else
+            {
+                _testPage.ClearTestCase(_view);
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test: Selection None. Check whether the event will not be triggered when user click the item and check Selection works properly as None")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.SelectionChanged E")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "EVL")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        [Precondition(1, "If test on TV, prepare mouse and connect to TV.")]
+        [Step(1, "Click run TC")]
+        [Step(2, "Click(Touch) the first recyclerviewitem and check selection is not happen.")]
+        [Step(3, "Click(Touch) the confirm recyclerviewitem.")]
+        [Step(4, "TC will pass after touch or click.")]
+        [Postcondition(1, "NA")]
+        public async Task SelectionChanged_CB_None()
+        {
+            _colView = CreateMyCollectionView();
+
+            _colView.SelectionMode = ItemSelectionMode.None;
+            _colView.SelectionChanged += OnSelectionChangedNone;
+            if (_isWearable)
+            {
+                _wearTestPage.ExecuteTC(_view);
+            }
+            else
+            {
+                _testPage.ExecuteTC(_view);
+            }
+            await ManualTest.WaitForConfirm();
+            _colView.SelectionChanged -= OnSelectionChangedNone;
+            if (_isWearable)
+            {
+                _wearTestPage.ClearTestCase(_view);
+            }
+            else
+            {
+                _testPage.ClearTestCase(_view);
+            }
+        }
+
+        public class TestItem : global::System.ComponentModel.INotifyPropertyChanged
+        {
+            int index;
+            string name;
+            public event global::System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+            private void OnPropertyChanged(string propertyName)
+            {
+                PropertyChanged?.Invoke(this, new global::System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+
+            public TestItem(int itemIndex, string itemName) {  Index = itemIndex; Name = itemName; }
+            public int Index {
+                get => index;
+                set
+                {
+                    index = value;
+                    OnPropertyChanged("Name");
+                }
+            }
+            public string Name {
+                get => name;
+                set
+                {
+                    name = value;
+                    OnPropertyChanged("Name");
+                }
+            }
+        }
+
+        static internal class TestSource
+        {
+            public static ObservableCollection<TestItem> GetSimpleSource(int count)
+            {
+                var result = new ObservableCollection<TestItem>();
+
+                result.Add(new TestItem(0, "First Item"));
+                result.Add(new TestItem(1, "Second Item"));
+                result.Add(new TestItem(2, "Confirm"));
+
+                for (int i = 3; i < count; i++)
+                    result.Add(new TestItem(i, "Test Item"));
+                return result;
+            }
+        }
+    }
+}
+
+
diff --git a/tct-suite-vs/Tizen.NUI.Components.Manual.Tests/testcase/TSRecyclerViewItem.cs b/tct-suite-vs/Tizen.NUI.Components.Manual.Tests/testcase/TSRecyclerViewItem.cs
new file mode 100755 (executable)
index 0000000..7cc65db
--- /dev/null
@@ -0,0 +1,193 @@
+/*
+ *  Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License
+ */
+
+using System;
+using System.Threading.Tasks;
+using NUnit.Framework;
+using NUnit.Framework.TUnit;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+
+namespace Tizen.NUI.Components.Tests
+{
+    [TestFixture]
+    [Description("Tizen.NUI.Components.RecyclerViewItem test")]
+    public class RecyclerViewItemTests
+    {
+        private ManualTestComponents _testPage;
+        private WearableManualTestNUI _wearTestPage;
+        private View _view;
+        private RecyclerViewItem _recyclerviewitem;
+        private TextLabel _label;
+        private float _pointSize = 20.0f;
+        private bool _isMobile = false;
+        private bool _isWearable = false;
+
+        [SetUp]
+        public void Init()
+        {
+            LogUtils.Write(LogUtils.INFO, LogUtils.TAG, "Preconditions for each TEST");
+            _isMobile = ManualTest.IsMobile();
+            _isWearable = ManualTest.IsWearable();
+            if (_isWearable)
+            {
+                _pointSize = 2.0f;
+                _wearTestPage = WearableManualTestNUI.GetInstance();
+            }
+            else
+            {
+                _pointSize = ManualTest.GetPointSize();
+                _testPage = ManualTestComponents.GetInstance();
+            }
+
+            _view = new View();
+            _view.Focusable = true;
+            _view.Position = new Position(Window.Instance.Size.Width * 0.45f, Window.Instance.Size.Height * 0.5f);
+            _view.Layout = new LinearLayout() { LinearOrientation = LinearLayout.Orientation.Horizontal };
+        }
+
+        [TearDown]
+        public void Destroy()
+        {
+            LogUtils.Write(LogUtils.INFO, LogUtils.TAG, "Postconditions for each TEST");
+        }
+
+        public class MyRecyclerViewItem : RecyclerViewItem
+        {
+            public MyRecyclerViewItem(RecyclerViewItemStyle st) : base(st) { }
+            public MyRecyclerViewItem() : base() { }
+
+            protected override void OnClicked(ClickedEventArgs eventArgs)
+            {
+                ManualTest.Confirm();
+            }
+        }
+
+        private void CreateMyRecyclerViewItem(RecyclerViewItem item)
+        {
+            Assert.IsNotNull(item, "Should be not null");
+            Assert.IsInstanceOf<Components.RecyclerViewItem>(item, "Should return RecyclerViewItem instance");
+            item.Focusable = true;
+            item.Size = new Size(Window.Instance.Size.Width * 0.1f, Window.Instance.Size.Height * 0.0462f);
+            item.BackgroundImage = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "/images/rectangle_toggle_item_normal.png";
+            item.BackgroundImageBorder = new Rectangle(5, 5, 5, 5);
+            _view.Add(item);
+        }
+
+        public void OnClicked(object sender, EventArgs e)
+        {
+            _label.Text = "Clicked";
+            ManualTest.Confirm();
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test: Click. Check whether the event will be triggered when user click the recyclerviewitem")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerViewItem.Clicked E")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "EVL")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        [Precondition(1, "If test on TV, prepare mouse and connect to TV.")]
+        [Step(1, "Click run TC")]
+        [Step(2, "Click(Touch) the recyclerviewitem.")]
+        [Step(3, "TC will pass after touch or click.")]
+        [Postcondition(1, "NA")]
+        public async Task Clicked_CB()
+        {
+            _recyclerviewitem = new RecyclerViewItem(new RecyclerViewItemStyle());
+            CreateMyRecyclerViewItem(_recyclerviewitem);
+
+            _label = new TextLabel{
+                PositionUsesPivotPoint = true,
+                ParentOrigin = NUI.ParentOrigin.Center,
+                PivotPoint = NUI.PivotPoint.Center,
+                Text = "Click me!",
+                PointSize = _pointSize
+            };
+            _recyclerviewitem.Add(_label);
+            if (_isWearable)
+            {
+                _wearTestPage.ExecuteTC(_view);
+            }
+            else
+            {
+                _testPage.ExecuteTC(_view);
+            }
+            FocusManager.Instance.SetCurrentFocusView(_recyclerviewitem);
+            _recyclerviewitem.Clicked += OnClicked;
+            await ManualTest.WaitForConfirm();
+            _recyclerviewitem.Clicked -= OnClicked;
+            if (_isWearable)
+            {
+                _wearTestPage.ClearTestCase(_view);
+            }
+            else
+            {
+                _testPage.ClearTestCase(_view);
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test: OnClick. Check whether function will be triggered when user click the recyclerviewitem")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerViewItem.OnClicked M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        [Precondition(1, "If test on TV, prepare mouse and connect to TV.")]
+        [Step(1, "Click run TC")]
+        [Step(2, "Click(Touch) the recyclerviewitem.")]
+        [Step(3, "TC will pass after touch or click.")]
+        [Postcondition(1, "NA")]
+        public async Task OnClicked_TEST()
+        {
+            _recyclerviewitem = new MyRecyclerViewItem();
+            CreateMyRecyclerViewItem(_recyclerviewitem);
+
+            _label = new TextLabel{
+                PositionUsesPivotPoint = true,
+                ParentOrigin = NUI.ParentOrigin.Center,
+                PivotPoint = NUI.PivotPoint.Center,
+                Text = "Click me!",
+                PointSize = _pointSize
+            };
+            _recyclerviewitem.Add(_label);
+            if (_isWearable)
+            {
+                _wearTestPage.ExecuteTC(_view);
+            }
+            else
+            {
+                _testPage.ExecuteTC(_view);
+            }
+            FocusManager.Instance.SetCurrentFocusView(_recyclerviewitem);
+            await ManualTest.WaitForConfirm();
+            if (_isWearable)
+            {
+                _wearTestPage.ClearTestCase(_view);
+            }
+            else
+            {
+                _testPage.ClearTestCase(_view);
+            }
+        }
+
+    }
+}
+
+
+
diff --git a/tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSCollectionView.cs b/tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSCollectionView.cs
new file mode 100755 (executable)
index 0000000..3f9f33f
--- /dev/null
@@ -0,0 +1,697 @@
+using NUnit.Framework;
+using NUnit.Framework.TUnit;
+using System;
+using System.Collections.Generic;
+using Tizen.NUI;
+using Tizen.NUI.Components;
+using System.Runtime.InteropServices;
+using System.Threading.Tasks;
+using Tizen.NUI.Components.Test;
+using Tizen.NUI.BaseComponents;
+using global::System.Resources;
+
+namespace Tizen.NUI.Components.Tests
+{
+    [TestFixture]
+    [Description("Tizen.NUI.Components.CollectionView Tests")]
+    public class CollectionViewTests
+    {
+        private const string TAG = "Components";
+        private string _image_path = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "picture.png";
+
+        [SetUp]
+        public void Init()
+        {
+            Tizen.Log.Info(TAG, "Init() is called!");
+        }
+
+        [TearDown]
+        public void Destroy()
+        {
+            Tizen.Log.Info(TAG, "Destroy() is called!");
+        }
+
+
+
+        [Test]
+        [Category("P1")]
+        [Description("Test CollectionView empty constructor. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.CollectionView C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void CollectionView_CHECK_VALUE()
+        {
+            /* TEST CODE */
+            var CollectionView = new Components.CollectionView();
+            Assert.IsNotNull(CollectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be an instance of CollectionView!");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test CollectionView constructor using IEnumerable. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.CollectionView C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("COVPARAM", "IEnumerable")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void CollectionView_INIT_WITH_ITEMSSOURCE()
+        {
+            /* TEST CODE */
+            var source =  TestSource.GetSimpleSource(10);
+            var CollectionView = new CollectionView(source);
+            Assert.IsNotNull(CollectionView, "Should be not null!");
+            Assert.IsInstanceOf<CollectionView>(CollectionView, "Should be an instance of CollectionView!");
+            Assert.IsNotNull(CollectionView.ItemsSource, "Should be not null!");
+            Assert.AreEqual(source, CollectionView.ItemsSource, "Should be equal!");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test CollectionView ItemsSource. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.ItemsSource A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRW")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void ItemsSource_SET_GET_VALUE()
+        {
+            /* TEST CODE */
+            var CollectionView = new Components.CollectionView();
+            Assert.IsNotNull(CollectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+            var source =  TestSource.GetSimpleSource(10);
+            Assert.IsNotNull(source, "Should be not null");
+            CollectionView.ItemsSource = source;
+            Assert.AreEqual(source, CollectionView.ItemsSource, "Should be equals to the set value");
+            CollectionView.ItemsSource = null;
+            Assert.AreEqual(null, CollectionView.ItemsSource, "Should be equals to the set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test CollectionView ItemsLayouter. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.ItemsLayouter A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRW")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void ItemsLayouter_SET_GET_VALUE()
+        {
+            /* TEST CODE */
+            var CollectionView = new Components.CollectionView();
+            Assert.IsNotNull(CollectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+            var Layouter = new Components.LinearLayouter();
+            Assert.IsNotNull(Layouter, "Should be not null");
+            Assert.IsInstanceOf<Components.LinearLayouter>(Layouter, "Should be LinearLayouter class");
+            CollectionView.ItemsLayouter = Layouter;
+            Assert.AreEqual(Layouter, CollectionView.ItemsLayouter, "Should be equals to the set value");
+            CollectionView.ItemsLayouter = null;
+            Assert.AreEqual(null, CollectionView.ItemsLayouter, "Should be equals to the set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test CollectionView ItemTemplate. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.ItemTemplate A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRW")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void ItemTemplate_SET_GET_VALUE()
+        {
+            /* TEST CODE */
+            var CollectionView = new Components.CollectionView();
+            Assert.IsNotNull(CollectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+            var itemTemplate = new Binding.DataTemplate(() => {
+                return new Components.DefaultLinearItem();
+            });
+            Assert.IsNotNull(itemTemplate, "Should be not null");
+            CollectionView.ItemTemplate = itemTemplate;
+            Assert.AreEqual(itemTemplate, CollectionView.ItemTemplate, "Should be equals to the set value");
+            CollectionView.ItemTemplate = null;
+            Assert.AreEqual(null, CollectionView.ItemTemplate, "Should be equals to the set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test CollectionView Header. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.Header A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRW")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void Header_SET_GET_VALUE()
+        {
+            /* TEST CODE */
+            var CollectionView = new Components.CollectionView();
+            Assert.IsNotNull(CollectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+            var header = new Components.DefaultTitleItem();
+            Assert.IsNotNull(header, "Should be not null");
+            CollectionView.Header = header;
+            Assert.AreEqual(header, CollectionView.Header, "Should be equals to the set value");
+            CollectionView.Header = null;
+            Assert.AreEqual(null, CollectionView.Header, "Should be equals to the set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test CollectionView Footer. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.Footer A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRW")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void Footer_SET_GET_VALUE()
+        {
+            /* TEST CODE */
+            var CollectionView = new Components.CollectionView();
+            Assert.IsNotNull(CollectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+            var footer = new Components.DefaultTitleItem();
+            Assert.IsNotNull(footer, "Should be not null");
+            CollectionView.Footer = footer;
+            Assert.AreEqual(footer, CollectionView.Footer, "Should be equals to the set value");
+            CollectionView.Footer = null;
+            Assert.AreEqual(null, CollectionView.Footer, "Should be equals to the set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test CollectionView ScrollingDirection. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.ScrollingDirection A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRW")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void ScrollingDirection_SET_GET_VALUE()
+        {
+            /* TEST CODE */
+            var CollectionView = new Components.CollectionView();
+            Assert.IsNotNull(CollectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+            CollectionView.ScrollingDirection = Components.ScrollableBase.Direction.Horizontal;
+            Assert.AreEqual(Components.ScrollableBase.Direction.Horizontal, CollectionView.ScrollingDirection, "Should be equals to the set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test CollectionView SelectionMode. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.SelectionMode A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRW")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void SelectionMode_GET_VALUE()
+        {
+            /* TEST CODE */
+            var CollectionView = new Components.CollectionView();
+            Assert.IsNotNull(CollectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+            CollectionView.SelectionMode = Components.ItemSelectionMode.Single;
+            Assert.AreEqual(Components.ItemSelectionMode.Single, CollectionView.SelectionMode, "Should be equals to the set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test CollectionView SelectedItem. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.SelectedItem A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRW")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void SelectedItem_SET_GET_VALUE()
+        {
+            /* TEST CODE */
+            var CollectionView = new Components.CollectionView();
+            Assert.IsNotNull(CollectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+            var source = TestSource.GetSimpleSource(10);
+            Assert.IsNotNull(source, "Should be not null");
+            CollectionView.ItemsSource = source;
+            var selectedItem = source[0];
+            Assert.IsNotNull(selectedItem, "Should be not null");
+            CollectionView.SelectedItem = selectedItem;
+            Assert.AreEqual(selectedItem, CollectionView.SelectedItem, "Should be equals to the set value");
+            CollectionView.SelectedItem = null;
+            Assert.AreEqual(null, CollectionView.SelectedItem, "Should be equals to the set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test CollectionView SelectedItems. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.SelectedItems A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRO")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void SelectedItems_GET_VALUE()
+        {
+            /* TEST CODE */
+            var CollectionView = new Components.CollectionView();
+            Assert.IsNotNull(CollectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+            CollectionView.SelectionMode = Components.ItemSelectionMode.Multiple;
+            var source = TestSource.GetSimpleSource(10);
+            Assert.IsNotNull(source, "Should be not null");
+            CollectionView.ItemsSource = source;
+            IList<object> newSelection = new List<object>();
+            for (int i = 0; i < 3; i++)
+            {
+                newSelection.Add(source[i]);
+            }
+            Assert.IsNotNull(newSelection, "Should be not null");
+            CollectionView.UpdateSelectedItems(newSelection);
+            Assert.IsNotNull(CollectionView.SelectedItems, "Should be not null");
+            var selectedItems = CollectionView.SelectedItems;
+            Assert.IsNotNull(selectedItems, "Should be not null");
+            for (int i = 0; i < 3; i++)
+            {
+                Assert.AreEqual(newSelection[i], selectedItems[i], "Should be equals");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test CollectionView UpdateSelectedItems. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.UpdateSelectedItems M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void UpdateSelectedItems_SET_VALUE()
+        {
+            /* TEST CODE */
+            var CollectionView = new Components.CollectionView();
+            Assert.IsNotNull(CollectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+            CollectionView.SelectionMode = Components.ItemSelectionMode.Multiple;
+            var source = TestSource.GetSimpleSource(10);
+            Assert.IsNotNull(source, "Should be not null");
+            CollectionView.ItemsSource = source;
+            IList<object> newSelection = new List<object>();
+            for (int i = 0; i < 3; i++)
+            {
+                newSelection.Add(source[i]);
+            }
+            Assert.IsNotNull(newSelection, "Should be not null");
+            CollectionView.UpdateSelectedItems(newSelection);
+            Assert.IsNotNull(CollectionView.SelectedItems, "Should be not null");
+            var selectedItems = CollectionView.SelectedItems;
+            Assert.IsNotNull(selectedItems, "Should be not null");
+            for (int i = 0; i < 3; i++)
+            {
+                Assert.AreEqual(newSelection[i], selectedItems[i], "Should be equals");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test ScrollTo. Check whether target position of ScrollTo is same as real result.")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.ScrollTo M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("COVPARAM", "Single, bool")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public async Task ScrollTo_TEST()
+        {
+            /* TEST CODE */
+            var CollectionView = new Components.CollectionView();
+            Assert.IsNotNull(CollectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+            CollectionView.Size = new Size(100, 100);
+            CollectionView.ScrollingDirection = ScrollableBase.Direction.Vertical;
+            var source = TestSource.GetSimpleSource(10);
+            Assert.IsNotNull(source, "Should be not null");
+            CollectionView.ItemsSource = source;
+            var template = new Binding.DataTemplate(() =>
+            {
+                var item = new RecyclerViewItem();
+                Assert.IsNotNull(item, "Should be not null");
+                item.WidthSpecification = LayoutParamPolicies.MatchParent;
+                item.HeightSpecification = 100;
+                return item;
+            });
+            Assert.IsNotNull(template, "Should be not null");
+            CollectionView.ItemTemplate = template;
+            var layouter = new LinearLayouter();
+            Assert.IsNotNull(layouter, "Should be not null");
+            CollectionView.ItemsLayouter = layouter;
+            Window.Instance.GetDefaultLayer().Add(CollectionView);
+            await Task.Delay(900);
+            CollectionView.ScrollTo(300.0f, false);
+            await Task.Delay(2000);
+            Assert.AreEqual(-300.0f, CollectionView.ContentContainer.PositionY, "Should be equals to the set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test ScrollTo Exception. Check Exception occurs when ItemsLayouter is null")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.ScrollTo M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MEX")]
+        [Property("COVPARAM", "Single, bool")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void ScrollTo_TEST_Exception()
+        {
+            /* TEST CODE */
+            try
+            {
+                var CollectionView = new Components.CollectionView();
+                Assert.IsNotNull(CollectionView, "Should be not null");
+                Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+                CollectionView.Size = new Size(100, 100);
+                CollectionView.ScrollingDirection = ScrollableBase.Direction.Vertical;
+                var source = TestSource.GetSimpleSource(10);
+                Assert.IsNotNull(source, "Should be not null");
+                CollectionView.ItemsSource = source;
+                var template = new Binding.DataTemplate(() =>
+                {
+                    var item = new RecyclerViewItem();
+                    Assert.IsNotNull(item, "Should be not null");
+                    item.WidthSpecification = LayoutParamPolicies.MatchParent;
+                    item.HeightSpecification = 100;
+                    return item;
+                });
+                Assert.IsNotNull(template, "Should be not null");
+                CollectionView.ItemTemplate = template;
+                Window.Instance.GetDefaultLayer().Add(CollectionView);
+                CollectionView.ScrollTo(300.0f, false);
+            }
+            catch(Exception e)
+            {
+                Assert.Pass("Exception: passed!");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test ScrollTo on Item Index. Check whether target position of ScrollTo is same as real result.")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.ScrollTo M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("COVPARAM", "int, bool, Tizen.NUI.Components.CollectionView.ItemScrollTo")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public async Task ScrollTo_TEST2()
+        {
+            /* TEST CODE */
+            var CollectionView = new Components.CollectionView();
+            Assert.IsNotNull(CollectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+            CollectionView.Size = new Size(100, 100);
+            CollectionView.ScrollingDirection = ScrollableBase.Direction.Vertical;
+            var source = TestSource.GetSimpleSource(10);
+            Assert.IsNotNull(source, "Should be not null");
+            CollectionView.ItemsSource = source;
+            var template = new Binding.DataTemplate(() =>
+            {
+                var item = new RecyclerViewItem();
+                Assert.IsNotNull(item, "Should be not null");
+                item.WidthSpecification = LayoutParamPolicies.MatchParent;
+                item.HeightSpecification = 100;
+                return item;
+            });
+            Assert.IsNotNull(template, "Should be not null");
+            CollectionView.ItemTemplate = template;
+            var layouter = new LinearLayouter();
+            Assert.IsNotNull(layouter, "Should be not null");
+            CollectionView.ItemsLayouter = layouter;
+            Window.Instance.GetDefaultLayer().Add(CollectionView);
+            await Task.Delay(900);
+            CollectionView.ScrollTo(3, false,  Components.CollectionView.ItemScrollTo.Start); // 100 * 3 = 300
+            await Task.Delay(2000);
+            Assert.AreEqual(-300.0f, CollectionView.ContentContainer.PositionY, "Should be equals to the set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test ScrollTo on Item Index. Check whether target position of ScrollTo is same as real result.")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.ScrollTo M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MEX")]
+        [Property("COVPARAM", "int, bool, Tizen.NUI.Components.CollectionView.ItemScrollTo")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void ScrollTo_TEST2_Exception()
+        {
+            /* TEST CODE */
+            try
+            {
+                var CollectionView = new Components.CollectionView();
+                Assert.IsNotNull(CollectionView, "Should be not null");
+                Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+                CollectionView.Size = new Size(100, 100);
+                CollectionView.ScrollingDirection = ScrollableBase.Direction.Vertical;
+                var source = TestSource.GetSimpleSource(10);
+                Assert.IsNotNull(source, "Should be not null");
+                CollectionView.ItemsSource = source;
+                var template = new Binding.DataTemplate(() =>
+                {
+                    var item = new RecyclerViewItem();
+                    Assert.IsNotNull(item, "Should be not null");
+                    item.WidthSpecification = LayoutParamPolicies.MatchParent;
+                    item.HeightSpecification = 100;
+                    return item;
+                });
+                Assert.IsNotNull(template, "Should be not null");
+                CollectionView.ItemTemplate = template;
+                Window.Instance.GetDefaultLayer().Add(CollectionView);
+                CollectionView.ScrollTo(3, false,  Components.CollectionView.ItemScrollTo.Start); // 100 * 3 = 300
+            }
+            catch(Exception e)
+            {
+                Assert.Pass("Exception: passed!");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test OnRelayout. Check whether OnRelayout is called.")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.OnRelayout M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public async Task OnRelayout_TEST()
+        {
+            /* TEST CODE */
+            var CollectionView = new MyCollectionView();
+            Assert.IsNotNull(CollectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+            CollectionView.Size = new Size(100, 100);
+            CollectionView.ScrollingDirection = ScrollableBase.Direction.Vertical;
+            var source = TestSource.GetSimpleSource(10);
+            Assert.IsNotNull(source, "Should be not null");
+            CollectionView.ItemsSource = source;
+            var template = new Binding.DataTemplate(() =>
+            {
+                var item = new RecyclerViewItem();
+                Assert.IsNotNull(item, "Should be not null");
+                item.WidthSpecification = LayoutParamPolicies.MatchParent;
+                item.HeightSpecification = 100;
+                return item;
+            });
+            Assert.IsNotNull(template, "Should be not null");
+            CollectionView.ItemTemplate = template;
+            var layouter = new LinearLayouter();
+            Assert.IsNotNull(layouter, "Should be not null");
+            CollectionView.ItemsLayouter = layouter;
+            Window.Instance.GetDefaultLayer().Add(CollectionView);
+            await Task.Delay(900);
+            Assert.AreEqual(true, CollectionView.IsOnRelayoutCalled, "Should be equals to the set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test OnScrolling. Check whether OnScrolling is called.")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.OnScrolling M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public async Task OnScrolling_TEST()
+        {
+            /* TEST CODE */
+            var CollectionView = new MyCollectionView();
+            Assert.IsNotNull(CollectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+            CollectionView.Size = new Size(100, 100);
+            CollectionView.ScrollingDirection = ScrollableBase.Direction.Vertical;
+            var source = TestSource.GetSimpleSource(10);
+            Assert.IsNotNull(source, "Should be not null");
+            CollectionView.ItemsSource = source;
+            var template = new Binding.DataTemplate(() =>
+            {
+                var item = new RecyclerViewItem();
+                Assert.IsNotNull(item, "Should be not null");
+                item.WidthSpecification = LayoutParamPolicies.MatchParent;
+                item.HeightSpecification = 100;
+                return item;
+            });
+            Assert.IsNotNull(template, "Should be not null");
+            CollectionView.ItemTemplate = template;
+            var layouter = new LinearLayouter();
+            Assert.IsNotNull(layouter, "Should be not null");
+            CollectionView.ItemsLayouter = layouter;
+            Window.Instance.GetDefaultLayer().Add(CollectionView);
+            await Task.Delay(900);
+            CollectionView.ScrollTo(3, true, Components.CollectionView.ItemScrollTo.Start); // 100 * 3 = 300
+            await Task.Delay(2000);
+            Assert.AreEqual(true, CollectionView.IsOnScrollingCalled, "Should be equals to the set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test OnSelectionChanged. Check whether OnSelectionChanged is called.")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.OnSelectionChanged M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public async Task OnSelectionChanged_TEST()
+        {
+            /* TEST CODE */
+            var CollectionView = new MyCollectionView();
+            Assert.IsNotNull(CollectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+            CollectionView.Size = new Size(100, 100);
+            CollectionView.ScrollingDirection = ScrollableBase.Direction.Vertical;
+            var source = TestSource.GetSimpleSource(10);
+            Assert.IsNotNull(source, "Should be not null");
+            CollectionView.ItemsSource = source;
+            var template = new Binding.DataTemplate(() =>
+            {
+                var item = new RecyclerViewItem();
+                Assert.IsNotNull(item, "Should be not null");
+                item.WidthSpecification = LayoutParamPolicies.MatchParent;
+                item.HeightSpecification = 100;
+                return item;
+            });
+            Assert.IsNotNull(template, "Should be not null");
+            CollectionView.ItemTemplate = template;
+            var layouter = new LinearLayouter();
+            Assert.IsNotNull(layouter, "Should be not null");
+            CollectionView.ItemsLayouter = layouter;
+            Window.Instance.GetDefaultLayer().Add(CollectionView);
+            var selectedItem = source[0];
+            await Task.Delay(900);
+            Assert.IsNotNull(selectedItem, "Should be not null");
+            CollectionView.SelectedItem = selectedItem;
+            Assert.AreEqual(selectedItem, CollectionView.SelectedItem, "Should be equals to the set value");
+            CollectionView.SelectedItem = null;
+            Assert.AreEqual(null, CollectionView.SelectedItem, "Should be equals to the set value");
+            Assert.AreEqual(true, CollectionView.IsOnSelectionChangedCalled, "Should be equals to the set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test Dispose, try to dispose the CollectionView.")]
+        [Property("SPEC", "Tizen.NUI.Components.CollectionView.Dispose M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MCST")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void Dispose_TEST()
+        {
+            /* TEST CODE */
+            try
+            {
+                var CollectionView = new CollectionView();
+                Assert.IsNotNull(CollectionView, "Should be not null");
+                Assert.IsInstanceOf<Components.CollectionView>(CollectionView, "Should be equal!");
+                CollectionView.Dispose();
+            }
+            catch (Exception e)
+            {
+                Tizen.Log.Error(TAG, "Caught Exception" + e.ToString());
+                LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Caught Exception" + e.ToString());
+                Assert.Fail("Caught Exception" + e.ToString());
+            }
+        }
+
+        public class MyCollectionView : CollectionView
+        {
+            public bool IsOnRelayoutCalled;
+            public bool IsOnSelectionChangedCalled;
+            public bool IsOnScrollingCalled;
+
+            public override void OnRelayout(Vector2 size, RelayoutContainer container)
+            {
+                base.OnRelayout(size, container);
+                IsOnRelayoutCalled = true;
+            }
+            protected override void OnSelectionChanged(SelectionChangedEventArgs args)
+            {
+                base.OnSelectionChanged(args);
+                IsOnSelectionChangedCalled = true;
+            }
+
+            protected override void OnScrolling(object source, ScrollEventArgs args)
+            {
+                base.OnScrolling(source, args);
+                IsOnScrollingCalled = true;
+            }
+        }
+
+        public class TestItem
+        {
+            string name;
+
+            public TestItem(string itemName)
+            {
+                Name = itemName;
+            }
+
+            public string Name
+            {
+                get
+                {
+                    return name;
+                }
+                set
+                {
+                    name = value;
+                }
+            }
+        }
+
+        public class TestGroup : List<TestItem>
+        {
+            string groupName;
+
+            public TestGroup(string name)
+            {
+                groupName = name;
+            }
+
+            public string GroupName
+            {
+                get
+                {
+                    return groupName;
+                }
+                set
+                {
+                    groupName = value;
+                }
+            }
+        }
+
+        internal class TestSource
+        {
+            public static List<TestItem> GetSimpleSource(int count)
+            {
+                var result = new List<TestItem>();
+                for (int i = 0; i < count; i++)
+                {
+                    result.Add(new TestItem(i.ToString()));
+                }
+                return result;
+            }
+
+            public static List<TestGroup> GetGroupSource(int groupCount)
+            {
+                var result = new List<TestGroup>();
+                for (int i = 0; i < groupCount; i++)
+                {
+                    var group = new TestGroup(i.ToString());
+                    for (int j = 0; j < 5; j++)
+                    {
+                        group.Add(new TestItem(j.ToString()));
+                    }
+                    result.Add(group);
+                }
+                return result;
+            }
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSGridLayouter.cs b/tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSGridLayouter.cs
new file mode 100755 (executable)
index 0000000..5e8c1ef
--- /dev/null
@@ -0,0 +1,218 @@
+using NUnit.Framework;
+using NUnit.Framework.TUnit;
+using System;
+using System.Collections.Generic;
+using Tizen.NUI;
+using Tizen.NUI.Components;
+using System.Runtime.InteropServices;
+using System.Threading.Tasks;
+using Tizen.NUI.Components.Test;
+using Tizen.NUI.BaseComponents;
+using global::System.Resources;
+
+namespace Tizen.NUI.Components.Tests
+{
+    [TestFixture]
+    [Description("Tizen.NUI.Components.GridLayouter Tests")]
+    public class GridLayouterTests
+    {
+        private const string TAG = "Components";
+        private string _image_path = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "picture.png";
+
+        [SetUp]
+        public void Init()
+        {
+            Tizen.Log.Info(TAG, "Init() is called!");
+        }
+
+        [TearDown]
+        public void Destroy()
+        {
+            Tizen.Log.Info(TAG, "Destroy() is called!");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test GridLayouter empty constructor. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.GridLayouter.GridLayouter C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void GridLayouter_CHECK_VALUE()
+        {
+            /* TEST CODE */
+            var GridLayouter = new Components.GridLayouter();
+            Assert.IsNotNull(GridLayouter, "Should be not null");
+            Assert.IsInstanceOf<Components.GridLayouter>(GridLayouter, "Should be an instance of GridLayouter!");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test Initialize. Check GridLayouter is being initalized properly.")]
+        [Property("SPEC", "Tizen.NUI.Components.GridLayouter.Initialize M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void Initialize_TEST()
+        {
+            /* TEST CODE */
+            var collectionView = new Components.CollectionView();
+            Assert.IsNotNull(collectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(collectionView, "Should be an instance of CollectionView!");
+            collectionView.Size = new Size(1000, 1000);
+
+            var source = TestSource.GetSimpleSource(50);
+            Assert.IsNotNull(source, "Should be not null");
+            collectionView.ItemsSource = source;
+
+            var template = new Binding.DataTemplate(() =>
+            {
+                var item = new RecyclerViewItem();
+                Assert.IsNotNull(item, "Should be not null");
+                item.WidthSpecification = 500;
+                item.HeightSpecification = 500;
+                return item;
+            });
+            Assert.IsNotNull(template, "Should be not null");
+            collectionView.ItemTemplate = template;
+            collectionView.ScrollingDirection = Components.ScrollableBase.Direction.Vertical;
+
+            var GridLayouter = new MyGridLayouter();
+            Assert.IsNotNull(GridLayouter, "Should be not null");
+            collectionView.ItemsLayouter = GridLayouter;
+
+            GridLayouter.Initialize(collectionView);
+            View parentView = GridLayouter.GetParentView();
+            Assert.AreEqual(parentView, collectionView, "Parent View must be same collectionView");
+            bool isInit = GridLayouter.GetIsInitalized();
+            Assert.AreEqual(isInit, true, "GridLayouter must be initialized!");
+        }
+
+        [Test]
+        [Category("P2")]
+        [Description("Test Initialize null input. check ArgumentException is occurs in Null input.")]
+        [Property("SPEC", "Tizen.NUI.Components.GridLayouter.Initialize M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MEX")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void Initialize_TEST_Exception()
+        {
+            /* TEST CODE */
+            try
+            {
+                var GridLayouter = new Components.GridLayouter();
+                Assert.IsNotNull(GridLayouter, "Should be not null");
+                Assert.IsInstanceOf<Components.GridLayouter>(GridLayouter, "Should be an instance of GridLayouter!");
+                GridLayouter.Initialize(null);
+                Assert.Fail("Should throw the ArgumentException!");
+            }
+            catch(ArgumentException e)
+            {
+                Assert.Pass("ArgumentException: passed!");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test RequestLayout. Check RequstLayout is done properly.")]
+        [Property("SPEC", "Tizen.NUI.Components.GridLayouter.RequestLayout M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void RequestLayout_TEST()
+        {
+            /* TEST CODE */
+            var collectionView = new Components.CollectionView();
+            Assert.IsNotNull(collectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(collectionView, "Should be an instance of CollectionView!");
+            collectionView.Size = new Size(1000, 1000);
+
+            var source = TestSource.GetSimpleSource(50);
+            Assert.IsNotNull(source, "Should be not null");
+            collectionView.ItemsSource = source;
+
+            var template = new Binding.DataTemplate(() =>
+            {
+                var item = new RecyclerViewItem();
+                Assert.IsNotNull(item, "Should be not null");
+                item.WidthSpecification = LayoutParamPolicies.MatchParent;
+                item.WidthSpecification = 500;
+                item.HeightSpecification = 500;
+                return item;
+            });
+            Assert.IsNotNull(template, "Should be not null");
+            collectionView.ItemTemplate = template;
+            collectionView.ScrollingDirection = Components.ScrollableBase.Direction.Vertical;
+
+            var GridLayouter = new MyGridLayouter();
+            Assert.IsNotNull(GridLayouter, "Should be not null");
+            collectionView.ItemsLayouter = GridLayouter;
+
+            GridLayouter.Initialize(collectionView);
+            View parentView = GridLayouter.GetParentView();
+            Assert.AreEqual(parentView, collectionView, "Parent View must be same collectionView");
+            bool isInit = GridLayouter.GetIsInitalized();
+            Assert.AreEqual(isInit, true, "GridLayouter must be initialized!");
+
+            GridLayouter.RequestLayout(0.0f);
+            (int first, int last) visible = GridLayouter.GetVisibleArea();
+            Assert.GreaterOrEqual(visible.first, 0, "Should be bigger or equal than 0");
+            Assert.GreaterOrEqual(visible.last, 0, "Should be bigger or equal than 0");
+        }
+
+
+        public class MyGridLayouter: Components.GridLayouter
+        {
+            internal RecyclerView GetParentView()
+            {
+                return ItemsView;
+            }
+
+            internal (int first, int last) GetVisibleArea()
+            {
+                return (FirstVisible, LastVisible);
+            }
+
+            internal bool GetIsInitalized()
+            {
+                return IsInitialized;
+            }
+        }
+
+
+        public class TestItem
+        {
+            string name;
+
+            public TestItem(string itemName)
+            {
+                Name = itemName;
+            }
+
+            public string Name
+            {
+                get
+                {
+                    return name;
+                }
+                set
+                {
+                    name = value;
+                }
+            }
+        }
+
+        static internal class TestSource
+        {
+            public static List<TestItem> GetSimpleSource(int count)
+            {
+                var result = new List<TestItem>();
+                for (int i = 0; i < count; i++)
+                {
+                    result.Add(new TestItem(i.ToString()));
+                }
+                return result;
+            }
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSItemsLayouter.cs b/tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSItemsLayouter.cs
new file mode 100755 (executable)
index 0000000..f075d31
--- /dev/null
@@ -0,0 +1,164 @@
+using NUnit.Framework;
+using NUnit.Framework.TUnit;
+using System;
+using System.Collections.Generic;
+using Tizen.NUI;
+using Tizen.NUI.Components;
+using System.Runtime.InteropServices;
+using System.Threading.Tasks;
+using Tizen.NUI.Components.Test;
+using Tizen.NUI.BaseComponents;
+using global::System.Resources;
+
+namespace Tizen.NUI.Components.Tests
+{
+    [TestFixture]
+    [Description("Tizen.NUI.Components.ItemsLayouter Tests")]
+    public class ItemsLayouterTests
+    {
+        private const string TAG = "Components";
+        private string _image_path = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "picture.png";
+
+        [SetUp]
+        public void Init()
+        {
+            Tizen.Log.Info(TAG, "Init() is called!");
+        }
+
+        [TearDown]
+        public void Destroy()
+        {
+            Tizen.Log.Info(TAG, "Destroy() is called!");
+        }
+
+
+        [Test]
+        [Category("P1")]
+        [Description("Test ItemsLayouter empty constructor. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.ItemsLayouter.ItemsLayouter C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void ItemsLayouter_CHECK_VALUE()
+        {
+            /* TEST CODE */
+            var itemsLayouter = new MyItemsLayouter();
+            Assert.IsNotNull(itemsLayouter, "Should be not null");
+            Assert.IsInstanceOf<Components.ItemsLayouter>(itemsLayouter, "Should be an instance of ItemsLayouter!");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test Initialize. Check ItemsLayouter is being initalized properly.")]
+        [Property("SPEC", "Tizen.NUI.Components.ItemsLayouter.Initialize M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void Initialize_TEST()
+        {
+            /* TEST CODE */
+            var itemsLayouter = new MyItemsLayouter();
+            Assert.IsNotNull(itemsLayouter, "Should be not null");
+                Assert.IsInstanceOf<Components.ItemsLayouter>(itemsLayouter, "Should be an instance of ItemsLayouter!");
+
+            var colView = new CollectionView();
+            Assert.IsNotNull(colView, "Should be not null");
+                Assert.IsInstanceOf<Components.RecyclerView>(colView, "Should be an instance of RecyclerView!");
+
+            itemsLayouter.Initialize(colView);
+            Assert.AreEqual(itemsLayouter.InitializeCalled, true, "ItemsLayouter must be initialized!");
+        }
+
+        [Test]
+        [Category("P2")]
+        [Description("Test Initialize null input. check ArgumentException is occurs in Null input.")]
+        [Property("SPEC", "Tizen.NUI.Components.ItemsLayouter.Initialize M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MEX")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void Initialize_TEST_Exception()
+        {
+            /* TEST CODE */
+            try
+                {
+                var itemsLayouter = new MyItemsLayouter();
+                Assert.IsNotNull(itemsLayouter, "Should be not null");
+                    Assert.IsInstanceOf<Components.ItemsLayouter>(itemsLayouter, "Should be an instance of ItemsLayouter!");
+                itemsLayouter.Initialize(null);
+                Assert.Fail("Should throw the ArgumentException!");
+            }
+            catch(ArgumentException e)
+            {
+                Assert.Pass("ArgumentException: passed!");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test RequestLayout. Check RequstLayout is done properly.")]
+        [Property("SPEC", "Tizen.NUI.Components.ItemsLayouter.RequestLayout M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void RequestLayout_TEST()
+        {
+            /* TEST CODE */
+            var itemsLayouter = new MyItemsLayouter();
+            Assert.IsNotNull(itemsLayouter, "Should be not null");
+                Assert.IsInstanceOf<Components.ItemsLayouter>(itemsLayouter, "Should be an instance of ItemsLayouter!");
+
+            var colView = new CollectionView();
+            Assert.IsNotNull(colView, "Should be not null");
+                Assert.IsInstanceOf<Components.RecyclerView>(colView, "Should be an instance of RecyclerView!");
+
+            itemsLayouter.Initialize(colView);
+            Assert.AreEqual(itemsLayouter.InitializeCalled, true, "ItemsLayouter must be initialized!");
+
+            itemsLayouter.RequestLayout(0.0f);
+            Assert.AreEqual(itemsLayouter.RequestLayoutCalled, true, "ItemsLayouter must be requested layout!");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test Clear. Check RequstLayout is done properly.")]
+        [Property("SPEC", "Tizen.NUI.Components.ItemsLayouter.Clear M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void Clear_TEST()
+        {
+            /* TEST CODE */
+            var itemsLayouter = new MyItemsLayouter();
+            Assert.IsNotNull(itemsLayouter, "Should be not null");
+                Assert.IsInstanceOf<Components.ItemsLayouter>(itemsLayouter, "Should be an instance of ItemsLayouter!");
+            itemsLayouter.Clear();
+            Assert.AreEqual(itemsLayouter.ClearCalled, true, "ItemsLayout must be cleared!");
+        }
+
+
+        public class MyItemsLayouter: Components.ItemsLayouter
+        {
+            public bool InitializeCalled;
+            public bool RequestLayoutCalled;
+            public bool ClearCalled;
+
+            public override void Initialize(RecyclerView view)
+            {
+                base.Initialize(view);
+                InitializeCalled = true;
+            }
+
+            public override void RequestLayout(float scrollPosition, bool force = false)
+            {
+                base.RequestLayout(scrollPosition, force);
+                RequestLayoutCalled = true;
+            }
+
+            public override void Clear()
+            {
+                base.Clear();
+                ClearCalled = true;
+            }
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSLinearLayouter.cs b/tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSLinearLayouter.cs
new file mode 100755 (executable)
index 0000000..f27d0e5
--- /dev/null
@@ -0,0 +1,217 @@
+using NUnit.Framework;
+using NUnit.Framework.TUnit;
+using System;
+using System.Collections.Generic;
+using Tizen.NUI;
+using Tizen.NUI.Components;
+using System.Runtime.InteropServices;
+using System.Threading.Tasks;
+using Tizen.NUI.Components.Test;
+using Tizen.NUI.BaseComponents;
+using global::System.Resources;
+
+namespace Tizen.NUI.Components.Tests
+{
+    [TestFixture]
+    [Description("Tizen.NUI.Components.LinearLayouter Tests")]
+    public class LinearLayouterTests
+    {
+        private const string TAG = "Components";
+        private string _image_path = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "picture.png";
+
+        [SetUp]
+        public void Init()
+        {
+            Tizen.Log.Info(TAG, "Init() is called!");
+        }
+
+        [TearDown]
+        public void Destroy()
+        {
+            Tizen.Log.Info(TAG, "Destroy() is called!");
+        }
+
+
+        [Test]
+        [Category("P1")]
+        [Description("Test LinearLayouter empty constructor. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.LinearLayouter.LinearLayouter C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void LinearLayouter_CHECK_VALUE()
+        {
+            /* TEST CODE */
+            var LinearLayouter = new Components.LinearLayouter();
+            Assert.IsNotNull(LinearLayouter, "Should be not null");
+            Assert.IsInstanceOf<Components.LinearLayouter>(LinearLayouter, "Should be an instance of LinearLayouter!");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test Initialize. Check LinearLayouter is being initalized properly.")]
+        [Property("SPEC", "Tizen.NUI.Components.LinearLayouter.Initialize M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void Initialize_TEST()
+        {
+            /* TEST CODE */
+            var collectionView = new Components.CollectionView();
+            Assert.IsNotNull(collectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(collectionView, "Should be an instance of CollectionView!");
+            collectionView.Size = new Size(1000, 1000);
+
+            var source = TestSource.GetSimpleSource(50);
+            Assert.IsNotNull(source, "Should be not null");
+            collectionView.ItemsSource = source;
+
+            var template = new Binding.DataTemplate(() =>
+            {
+                var item = new RecyclerViewItem();
+                Assert.IsNotNull(item, "Should be not null");
+                item.WidthSpecification = LayoutParamPolicies.MatchParent;
+                item.HeightSpecification = 100;
+                return item;
+            });
+            Assert.IsNotNull(template, "Should be not null");
+            collectionView.ItemTemplate = template;
+            collectionView.ScrollingDirection = Components.ScrollableBase.Direction.Vertical;
+
+            var LinearLayouter = new MyLinearLayouter();
+            Assert.IsNotNull(LinearLayouter, "Should be not null");
+            collectionView.ItemsLayouter = LinearLayouter;
+
+            LinearLayouter.Initialize(collectionView);
+            View parentView = LinearLayouter.GetParentView();
+            Assert.AreEqual(parentView, collectionView, "Parent View must be same collectionView");
+            bool isInit = LinearLayouter.GetIsInitalized();
+            Assert.AreEqual(isInit, true, "LinearLayouter must be initialized!");
+        }
+
+        [Test]
+        [Category("P2")]
+        [Description("Test Initialize null input. check ArgumentException is occurs in Null input.")]
+        [Property("SPEC", "Tizen.NUI.Components.LinearLayouter.Initialize M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MEX")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void Initialize_TEST_Exception()
+        {
+            /* TEST CODE */
+            try
+            {
+                var LinearLayouter = new Components.LinearLayouter();
+                Assert.IsNotNull(LinearLayouter, "Should be not null");
+                Assert.IsInstanceOf<Components.LinearLayouter>(LinearLayouter, "Should be an instance of LinearLayouter!");
+                LinearLayouter.Initialize(null);
+                Assert.Fail("Should throw the ArgumentException!");
+            }
+            catch(ArgumentException e)
+            {
+                Assert.Pass("ArgumentException: passed!");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test RequestLayout. Check RequstLayout is done properly.")]
+        [Property("SPEC", "Tizen.NUI.Components.LinearLayouter.RequestLayout M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void RequestLayout_TEST()
+        {
+            /* TEST CODE */
+            var collectionView = new Components.CollectionView();
+            Assert.IsNotNull(collectionView, "Should be not null");
+            Assert.IsInstanceOf<Components.CollectionView>(collectionView, "Should be an instance of CollectionView!");
+            collectionView.Size = new Size(1000, 1000);
+
+            var source = TestSource.GetSimpleSource(50);
+            Assert.IsNotNull(source, "Should be not null");
+            collectionView.ItemsSource = source;
+
+            var template = new Binding.DataTemplate(() =>
+            {
+                var item = new RecyclerViewItem();
+                Assert.IsNotNull(item, "Should be not null");
+                item.WidthSpecification = LayoutParamPolicies.MatchParent;
+                item.HeightSpecification = 100;
+                return item;
+            });
+            Assert.IsNotNull(template, "Should be not null");
+            collectionView.ItemTemplate = template;
+            collectionView.ScrollingDirection = Components.ScrollableBase.Direction.Vertical;
+
+            var LinearLayouter = new MyLinearLayouter();
+            Assert.IsNotNull(LinearLayouter, "Should be not null");
+            collectionView.ItemsLayouter = LinearLayouter;
+
+            LinearLayouter.Initialize(collectionView);
+            View parentView = LinearLayouter.GetParentView();
+            Assert.AreEqual(parentView, collectionView, "Parent View must be same collectionView");
+            bool isInit = LinearLayouter.GetIsInitalized();
+            Assert.AreEqual(isInit, true, "LinearLayouter must be initialized!");
+
+            LinearLayouter.RequestLayout(0.0f);
+            (int first, int last) visible = LinearLayouter.GetVisibleArea();
+            Assert.GreaterOrEqual(visible.first, 0, "Should be bigger or equal than 0");
+            Assert.GreaterOrEqual(visible.last, 0, "Should be bigger or equal than 0");
+        }
+
+        public class MyLinearLayouter: Components.LinearLayouter
+        {
+            internal RecyclerView GetParentView()
+            {
+                return ItemsView;
+            }
+
+            internal (int first, int last) GetVisibleArea()
+            {
+                return (FirstVisible, LastVisible);
+            }
+
+            internal bool GetIsInitalized()
+            {
+                return IsInitialized;
+            }
+        }
+
+
+        public class TestItem
+        {
+            string name;
+
+            public TestItem(string itemName)
+            {
+                Name = itemName;
+            }
+
+            public string Name
+            {
+                get
+                {
+                    return name;
+                }
+                set
+                {
+                    name = value;
+                }
+            }
+        }
+
+        static internal class TestSource
+        {
+            public static List<TestItem> GetSimpleSource(int count)
+            {
+                var result = new List<TestItem>();
+                for (int i = 0; i < count; i++)
+                {
+                    result.Add(new TestItem(i.ToString()));
+                }
+                return result;
+            }
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSRecyclerView.cs b/tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSRecyclerView.cs
new file mode 100755 (executable)
index 0000000..c7e7511
--- /dev/null
@@ -0,0 +1,276 @@
+using NUnit.Framework;
+using NUnit.Framework.TUnit;
+using System;
+using System.Collections.Generic;
+using Tizen.NUI;
+using Tizen.NUI.Components;
+using System.Runtime.InteropServices;
+using System.Threading.Tasks;
+using Tizen.NUI.Components.Test;
+using Tizen.NUI.BaseComponents;
+using global::System.Resources;
+
+namespace Tizen.NUI.Components.Tests
+{
+    [TestFixture]
+    [Description("Tizen.NUI.Components.RecyclerView Tests")]
+    public class RecyclerViewTests
+    {
+        private const string TAG = "Components";
+        private string _image_path = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "picture.png";
+
+        [SetUp]
+        public void Init()
+        {
+            Tizen.Log.Info(TAG, "Init() is called!");
+        }
+
+        [TearDown]
+        public void Destroy()
+        {
+            Tizen.Log.Info(TAG, "Destroy() is called!");
+        }
+
+
+        [Test]
+        [Category("P1")]
+        [Description("Test RecyclerView empty constructor. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerView.RecyclerView C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void RecyclerView_CHECK_VALUE()
+        {
+            /* TEST CODE */
+            var recView = new MyRecyclerView();
+            Assert.IsNotNull(recView, "Should be not null");
+            Assert.IsInstanceOf<Components.RecyclerView>(recView, "Should be an instance of RecyclerView!");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test RecyclerView ItemsSource. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerView.ItemsSource A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRW")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void ItemsSource_SET_GET_VALUE()
+        {
+            /* TEST CODE */
+            var recView = new MyRecyclerView();
+            Assert.IsNotNull(recView, "Should be not null");
+            Assert.IsInstanceOf<Components.RecyclerView>(recView, "Should be an instance of RecyclerView!");
+            var source =  TestSource.GetSimpleSource(10);
+            Assert.IsNotNull(source, "Should be not null");
+            recView.ItemsSource = source;
+            Assert.AreEqual(source, recView.ItemsSource, "Should be equals to the set value");
+            recView.ItemsSource = null;
+            Assert.AreEqual(null, recView.ItemsSource, "Should be equals to the set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test RecyclerView ItemTemplate. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerView.ItemTemplate A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRW")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void ItemTemplate_SET_GET_VALUE()
+        {
+            /* TEST CODE */
+            var recView = new MyRecyclerView();
+            Assert.IsNotNull(recView, "Should be not null");
+            Assert.IsInstanceOf<Components.RecyclerView>(recView, "Should be equal!");
+            var itemTemplate = new Binding.DataTemplate(() => {
+                return new Components.DefaultLinearItem();
+            });
+            Assert.IsNotNull(itemTemplate, "Should be not null");
+            recView.ItemTemplate = itemTemplate;
+            Assert.AreEqual(itemTemplate, recView.ItemTemplate, "Should be equals to the set value");
+            recView.ItemTemplate = null;
+            Assert.AreEqual(null, recView.ItemTemplate, "Should be equals to the set value");
+        }
+
+         [Test]
+        [Category("P1")]
+        [Description("Test OnRelayout. Check whether OnRelayout is called.")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerView.OnRelayout M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public async Task OnRelayout_TEST()
+        {
+            /* TEST CODE */
+            var recView = new MyRecyclerView();
+            Assert.IsNotNull(recView, "Should be not null");
+            Assert.IsInstanceOf<Components.RecyclerView>(recView, "Should be equal!");
+            recView.Size = new Size(100, 100);
+            Window.Instance.GetDefaultLayer().Add(recView);
+            await Task.Delay(900);
+            Assert.AreEqual(true, recView.IsOnRelayoutCalled, "Should be true");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test OnScrolling. Check whether OnScrolling is called.")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerView.OnScrolling M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public async Task OnScrolling_TEST()
+        {
+            /* TEST CODE */
+            var recView = new MyRecyclerView2();
+            Assert.IsNotNull(recView, "Should be not null");
+            Assert.IsInstanceOf<Components.RecyclerView>(recView, "Should be equal!");
+            recView.Size = new Size(100, 100);
+            recView.ScrollingDirection = ScrollableBase.Direction.Vertical;
+            var source = TestSource.GetSimpleSource(10);
+            Assert.IsNotNull(source, "Should be not null");
+            recView.ItemsSource = source;
+            var template = new Binding.DataTemplate(() =>
+            {
+                var item = new RecyclerViewItem();
+                Assert.IsNotNull(item, "Should be not null");
+                item.WidthSpecification = LayoutParamPolicies.MatchParent;
+                item.HeightSpecification = 100;
+                return item;
+            });
+            Assert.IsNotNull(template, "Should be not null");
+            recView.ItemTemplate = template;
+            var layouter = new LinearLayouter();
+            Assert.IsNotNull(layouter, "Should be not null");
+            recView.ItemsLayouter = layouter;
+            Window.Instance.GetDefaultLayer().Add(recView);
+            await Task.Delay(900);
+            recView.ScrollTo(300.0f, false);
+            await Task.Delay(2000);
+            Assert.AreEqual(true, recView.IsOnScrollingCalled, "Should be true");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test Dispose, try to dispose the RecyclerView.")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerView.Dispose M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MCST")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void Dispose_TEST()
+        {
+            /* TEST CODE */
+            try
+            {
+                var recView = new MyRecyclerView();
+                Assert.IsNotNull(recView, "Should be not null");
+                Assert.IsInstanceOf<Components.RecyclerView>(recView, "Should be equal!");
+                recView.Dispose();
+            }
+            catch (Exception e)
+            {
+                Tizen.Log.Error(TAG, "Caught Exception" + e.ToString());
+                LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Caught Exception" + e.ToString());
+                Assert.Fail("Caught Exception" + e.ToString());
+            }
+        }
+
+        public class MyRecyclerView : RecyclerView
+        {
+            public bool IsOnRelayoutCalled;
+            public override void OnRelayout(Vector2 size, RelayoutContainer container)
+            {
+                base.OnRelayout(size, container);
+                IsOnRelayoutCalled = true;
+            }
+        }
+
+        public class MyRecyclerView2 : CollectionView
+        {
+            public bool IsOnSelectionChangedCalled;
+            public bool IsOnScrollingCalled;
+
+            protected override void OnSelectionChanged(SelectionChangedEventArgs args)
+            {
+                base.OnSelectionChanged(args);
+                IsOnSelectionChangedCalled = true;
+            }
+
+            protected override void OnScrolling(object source, ScrollEventArgs args)
+            {
+                base.OnScrolling(source, args);
+                IsOnScrollingCalled = true;
+            }
+        }
+
+        public class TestItem
+        {
+            string name;
+
+            public TestItem(string itemName)
+            {
+                Name = itemName;
+            }
+
+            public string Name
+            {
+                get
+                {
+                    return name;
+                }
+                set
+                {
+                    name = value;
+                }
+            }
+        }
+
+        public class TestGroup : List<TestItem>
+        {
+            string groupName;
+
+            public TestGroup(string name)
+            {
+                groupName = name;
+            }
+
+            public string GroupName
+            {
+                get
+                {
+                    return groupName;
+                }
+                set
+                {
+                    groupName = value;
+                }
+            }
+        }
+
+        internal class TestSource
+        {
+            public static List<TestItem> GetSimpleSource(int count)
+            {
+                var result = new List<TestItem>();
+                for (int i = 0; i < count; i++)
+                {
+                    result.Add(new TestItem(i.ToString()));
+                }
+                return result;
+            }
+
+            public static List<TestGroup> GetGroupSource(int groupCount)
+            {
+                var result = new List<TestGroup>();
+                for (int i = 0; i < groupCount; i++)
+                {
+                    var group = new TestGroup(i.ToString());
+                    for (int j = 0; j < 5; j++)
+                    {
+                        group.Add(new TestItem(j.ToString()));
+                    }
+                    result.Add(group);
+                }
+                return result;
+            }
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSRecyclerViewItem.cs b/tct-suite-vs/Tizen.NUI.Components.Tests/testcase/TSRecyclerViewItem.cs
new file mode 100755 (executable)
index 0000000..fa45a93
--- /dev/null
@@ -0,0 +1,253 @@
+using NUnit.Framework;
+using NUnit.Framework.TUnit;
+using System;
+using Tizen.NUI;
+using Tizen.NUI.Components;
+using System.Runtime.InteropServices;
+using System.Threading.Tasks;
+using Tizen.NUI.Components.Test;
+using Tizen.NUI.BaseComponents;
+using global::System.Resources;
+
+namespace Tizen.NUI.Components.Tests
+{
+    [TestFixture]
+    [Description("Tizen.NUI.Components.RecyclerViewItem Tests")]
+    public class RecyclerViewItemTests
+    {
+        private const string TAG = "Components";
+        private string _image_path = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "picture.png";
+
+        [SetUp]
+        public void Init()
+        {
+            Tizen.Log.Info(TAG, "Init() is called!");
+        }
+
+        [TearDown]
+        public void Destroy()
+        {
+            Tizen.Log.Info(TAG, "Destroy() is called!");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test RecyclerViewItem empty constructor. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerViewItem.RecyclerViewItem C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void RecyclerViewItem_CHECK_VALUE()
+        {
+            /* TEST CODE */
+            var RecyclerViewItem = new Components.RecyclerViewItem();
+            Assert.IsNotNull(RecyclerViewItem, "Should be not null");
+            Assert.IsInstanceOf<Components.RecyclerViewItem>(RecyclerViewItem, "Should be an instance of RecyclerViewItem!");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test RecyclerViewItem constructor using string. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerViewItem.RecyclerViewItem C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("COVPARAM", "string")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void RecyclerViewItem_INIT_WITH_STRING()
+        {
+            /* TEST CODE */
+            StyleManager.Instance.Theme = "default";
+            StyleManager.Instance.RegisterStyle("defaultRecyclerViewItem", "default", typeof(DefaultRecyclerViewItemStyle));
+            var RecyclerViewItem = new RecyclerViewItem("defaultRecyclerViewItem");
+            Assert.IsNotNull(RecyclerViewItem, "Should be not null!");
+            Assert.IsInstanceOf<RecyclerViewItem>(RecyclerViewItem, "Should be an instance of RecyclerViewItem!");
+        }
+
+        [Test]
+        [Category("P2")]
+        [Description("Check exception when constructing a RecyclerViewItem with nonexistent style.")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerViewItem.RecyclerViewItem C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTX")]
+        [Property("COVPARAM", "string")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void RecyclerViewItem_INIT_WITH_STRING_Exception()
+        {
+            /* TEST CODE */
+            try
+            {
+                var RecyclerViewItem = new RecyclerViewItem("defaultRecyclerViewItemX");
+                Assert.Fail("Should throw the Exception: There is no style of defaultRecyclerViewItemX !");
+            }
+            catch(InvalidOperationException e)
+            {
+                Assert.Pass("InvalidOperationException: passed!");
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test RecyclerViewItem constructor using style. Check it has been triggered")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerViewItem.RecyclerViewItem C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("COVPARAM", "RecyclerViewItemStyle")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void RecyclerViewItem_INIT_WITH_STYLE()
+        {
+            /* TEST CODE */
+            var style = new RecyclerViewItemStyle();
+            Assert.IsNotNull(style, "Should be not null!");
+            Assert.IsInstanceOf<RecyclerViewItemStyle>(style, "Should be an instance of RecyclerViewItemStyle!");
+
+            var RecyclerViewItem = new RecyclerViewItem(style);
+            Assert.IsNotNull(RecyclerViewItem, "Should be not null!");
+            Assert.IsInstanceOf<RecyclerViewItem>(RecyclerViewItem, "Should be an instance of RecyclerViewItem!");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test IsSelectable. Check whether IsSelectable is readable and writable.")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerViewItem.IsSelectable A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRW")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void IsSelectable_SET_GET_VALUE()
+        {
+            /* TEST CODE */
+            var RecyclerViewItem = new Components.RecyclerViewItem();
+            Assert.IsNotNull(RecyclerViewItem, "Should be not null");
+            Assert.IsInstanceOf<Components.RecyclerViewItem>(RecyclerViewItem, "Should be equal!");
+            RecyclerViewItem.IsSelectable = true;
+            Assert.AreEqual(true, RecyclerViewItem.IsSelectable, "Should be equals to the set value");
+            RecyclerViewItem.IsSelectable = false;
+            Assert.AreEqual(false, RecyclerViewItem.IsSelectable, "Should be equals to the set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test IsSelected. Check whether IsSelected is readable and writable.")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerViewItem.IsSelected A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRW")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void IsSelected_SET_GET_VALUE()
+        {
+            /* TEST CODE */
+            var RecyclerViewItem = new Components.RecyclerViewItem();
+            Assert.IsNotNull(RecyclerViewItem, "Should be not null");
+            Assert.IsInstanceOf<Components.RecyclerViewItem>(RecyclerViewItem, "Should be equal!");
+
+            RecyclerViewItem.IsSelectable = true;
+            RecyclerViewItem.IsSelected = true;
+            Assert.AreEqual(true, RecyclerViewItem.IsSelected, "Retrieved IsSelected should be equal to set value");
+            RecyclerViewItem.IsSelected = false;
+            Assert.AreEqual(false, RecyclerViewItem.IsSelected, "Retrieved IsSelected should be equal to set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test IsEnabled. Check whether IsEnabled is readable and writable.")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerViewItem.IsEnabled A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRW")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void IsEnabled_SET_GET_VALUE()
+        {
+            /* TEST CODE */
+            var RecyclerViewItem = new Components.RecyclerViewItem();
+            Assert.IsNotNull(RecyclerViewItem, "Should be not null");
+            Assert.IsInstanceOf<Components.RecyclerViewItem>(RecyclerViewItem, "Should be equal!");
+
+            RecyclerViewItem.IsEnabled = true;
+            Assert.AreEqual(true, RecyclerViewItem.IsEnabled, "Retrieved IsEnabled should be equal to set value");
+            RecyclerViewItem.IsEnabled = false;
+            Assert.AreEqual(false, RecyclerViewItem.IsEnabled, "Retrieved IsEnabled should be equal to set value");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test Dispose, try to dispose the RecyclerViewItem.")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerViewItem.Dispose M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MCST")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void Dispose_TEST()
+        {
+            /* TEST CODE */
+            try
+            {
+                var RecyclerViewItem = new RecyclerViewItem();
+                Assert.IsNotNull(RecyclerViewItem, "Should be not null");
+                Assert.IsInstanceOf<Components.RecyclerViewItem>(RecyclerViewItem, "Should be equal!");
+                RecyclerViewItem.Dispose();
+            }
+            catch (Exception e)
+            {
+                Tizen.Log.Error(TAG, "Caught Exception" + e.ToString());
+                LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Caught Exception" + e.ToString());
+                Assert.Fail("Caught Exception" + e.ToString());
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test ApplyStyle. Check whether ApplyStyle works or not.")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerViewItem.ApplyStyle M")]
+        [Property("SPEC_URL", " - ")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void ApplyStyle_NO_RETURN_VALUE()
+        {
+            try
+            {
+                var RecyclerViewItem = new RecyclerViewItem();
+                var style = new RecyclerViewItemStyle();
+                RecyclerViewItem.ApplyStyle(style);
+            }
+            catch (Exception e)
+            {
+                Assert.Fail("Caught Exception" + e.ToString());
+            }
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test CreateViewStyle. Check whether CreateViewStyle works or not.")]
+        [Property("SPEC", "Tizen.NUI.Components.RecyclerViewItem.CreateViewStyle M")]
+        [Property("SPEC_URL", " - ")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void CreateViewStyle_CHECK_RETURN_VALUE()
+        {
+            try
+            {
+                var RecyclerViewItem = new MyRecyclerViewItem();
+                ViewStyle style = RecyclerViewItem.CreateMyViewStyle();
+                Assert.IsNotNull(style, "Should be not null");
+            }
+            catch (Exception e)
+            {
+                Assert.Fail("Caught Exception" + e.ToString());
+            }
+        }
+
+        public class MyRecyclerViewItem : RecyclerViewItem
+        {
+            public MyRecyclerViewItem() : base() {}
+
+            public ViewStyle CreateMyViewStyle()
+            {
+                return base.CreateViewStyle();
+            }
+        }
+
+        public class DefaultRecyclerViewItemStyle : StyleBase
+        {
+            protected override ViewStyle GetViewStyle()
+            {
+                return new RecyclerViewItemStyle();
+            }
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.NUI.Tests/testcase/TSDataTemplate.cs b/tct-suite-vs/Tizen.NUI.Tests/testcase/TSDataTemplate.cs
new file mode 100755 (executable)
index 0000000..d1a4f2a
--- /dev/null
@@ -0,0 +1,196 @@
+using NUnit.Framework;
+using NUnit.Framework.TUnit;
+using System;
+using Tizen.NUI;
+using Tizen.NUI.Test;
+
+namespace Tizen.NUI.Tests
+{
+
+    [TestFixture]
+    [Description("Tizen.NUI.Binding.DataTemplate Tests")]
+    public class DataTemplateTests
+    {
+        private string TAG = "NUI";
+
+        [SetUp]
+        public void Init()
+        {
+            Tizen.Log.Info(TAG, "Init() is called!");
+            App.MainTitleChangeText("DataTemplateTests");
+            App.MainTitleChangeBackgroundColor(null);
+
+        }
+
+        [TearDown]
+        public void Destroy()
+        {
+            Tizen.Log.Info(TAG, "Destroy() is called!");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("DataTemplate constructor test. Check whether object is successfully created or not.")]
+        [Property("SPEC", "Tizen.NUI.Binding.DataTemplate.DataTemplate C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void DataTemplate_INIT()
+        {
+            /* TEST CODE */
+            var DataTemplate = new Binding.DataTemplate();
+            Assert.IsNotNull(DataTemplate, "Should not null value.");
+            Assert.IsInstanceOf<Binding.DataTemplate>(DataTemplate, "Should return DataTemplate instance.");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("DataTemplate type constructor test. Check whether given type is properly created in CreateContent or not.")]
+        [Property("SPEC", "Tizen.NUI.Binding.DataTemplate.DataTemplate C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("COVPARAM", "Type")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void DataTemplate_INIT_WITH_TYPE()
+        {
+            /* TEST CODE */
+            var DataTemplate = new Binding.DataTemplate(typeof(TestType));
+            Assert.IsNotNull(DataTemplate, "Should not null value.");
+            Assert.IsInstanceOf<Binding.DataTemplate>(DataTemplate, "Should return DataTemplate instance.");
+            var newContent = DataTemplate.CreateContent();
+            Assert.IsInstanceOf<TestType>(newContent, "Should return TestType instance.");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("DataTemplate func constructor test. Check whether given LoadTemplate function is well constructed or not.")]
+        [Property("SPEC", "Tizen.NUI.Binding.DataTemplate.DataTemplate C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("COVPARAM", "Func<object>")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void DataTemplate_INIT_WITH_FUNC()
+        {
+            /* TEST CODE */
+            var DataTemplate = new Binding.DataTemplate(() => {
+                var content = new BaseComponents.TextLabel();
+                Assert.IsNotNull(content, "Should not null value.");
+                Assert.IsInstanceOf<BaseComponents.TextLabel>(content, "Should return TextLabel instance.");
+                return content;
+            });
+            Assert.IsNotNull(DataTemplate, "Should not null value.");
+            Assert.IsInstanceOf<Binding.DataTemplate>(DataTemplate, "Should return DataTemplate instance.");
+            var newContent = DataTemplate.CreateContent();
+            Assert.IsInstanceOf<BaseComponents.TextLabel>(newContent, "Should return TextLabel instance.");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test Bindings. Check whether binding is updated or not.")]
+        [Property("SPEC", "Tizen.NUI.Binding.DataTemplate.Bindings A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRO")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void Bindings_GET_VALUE()
+        {
+            /* TEST CODE */
+            var DataTemplate = new Binding.DataTemplate(() => {
+                var content = new BaseComponents.TextLabel();
+                Assert.IsNotNull(content, "Should not null value.");
+                Assert.IsInstanceOf<BaseComponents.TextLabel>(content, "Should return TextLabel instance.");
+                return content;
+            });
+            Assert.IsNotNull(DataTemplate, "Should not null value.");
+            Assert.IsInstanceOf<Binding.DataTemplate>(DataTemplate, "Should return DataTemplate instance.");
+            var binding = new Binding.Binding("Name");
+            Assert.IsNotNull(binding, "Should not null value.");
+            DataTemplate.SetBinding(BaseComponents.TextLabel.TextProperty, binding);
+            Assert.IsNotNull(DataTemplate.Bindings, "Should not null value.");
+            var val = DataTemplate.Bindings[BaseComponents.TextLabel.TextProperty];
+            Assert.AreEqual(binding, val, "Should be equal");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test Values. Check whether value is updated or not.")]
+        [Property("SPEC", "Tizen.NUI.Binding.DataTemplate.Values A")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "PRO")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void Values_GET_VALUE()
+        {
+            /* TEST CODE */
+            var DataTemplate = new Binding.DataTemplate(() => {
+                var content = new BaseComponents.TextLabel();
+                Assert.IsNotNull(content, "Should not null value.");
+                Assert.IsInstanceOf<BaseComponents.TextLabel>(content, "Should return TextLabel instance.");
+                return content;
+            });
+            Assert.IsNotNull(DataTemplate, "Should not null value.");
+            Assert.IsInstanceOf<Binding.DataTemplate>(DataTemplate, "Should return DataTemplate instance.");
+            var value = new object();
+            Assert.IsNotNull(value, "Should not null value.");
+            DataTemplate.SetValue(BaseComponents.TextLabel.TextProperty, value);
+            Assert.IsNotNull(DataTemplate.Values, "Should not null value.");
+            var val = DataTemplate.Values[BaseComponents.TextLabel.TextProperty];
+            Assert.AreEqual(value, val, "Should be equal");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test SetBinding. Check whether binding is updated or not.")]
+        [Property("SPEC", "Tizen.NUI.Binding.DataTemplate.SetBinding M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void SetBinding_TEST()
+        {
+            /* TEST CODE */
+            var DataTemplate = new Binding.DataTemplate(() => {
+                var content = new BaseComponents.TextLabel();
+                Assert.IsNotNull(content, "Should not null value.");
+                Assert.IsInstanceOf<BaseComponents.TextLabel>(content, "Should return TextLabel instance.");
+                return content;
+            });
+            Assert.IsNotNull(DataTemplate, "Should not null value.");
+            Assert.IsInstanceOf<Binding.DataTemplate>(DataTemplate, "Should return DataTemplate instance.");
+            var binding = new Binding.Binding("Name");
+            Assert.IsNotNull(binding, "Should not null value.");
+            DataTemplate.SetBinding(BaseComponents.TextLabel.TextProperty, binding);
+            Assert.IsNotNull(DataTemplate.Bindings, "Should not null value.");
+            var val = DataTemplate.Bindings[BaseComponents.TextLabel.TextProperty];
+            Assert.AreEqual(binding, val, "Should be equal");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test SetValue. Check whether value is updated or not.")]
+        [Property("SPEC", "Tizen.NUI.Binding.DataTemplate.SetValue M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void SetValue_TEST()
+        {
+            /* TEST CODE */
+            var DataTemplate = new Binding.DataTemplate(() => {
+                var content = new BaseComponents.TextLabel();
+                Assert.IsNotNull(content, "Should not null value.");
+                Assert.IsInstanceOf<BaseComponents.TextLabel>(content, "Should return TextLabel instance.");
+                return content;
+            });
+            Assert.IsNotNull(DataTemplate, "Should not null value.");
+            Assert.IsInstanceOf<Binding.DataTemplate>(DataTemplate, "Should return DataTemplate instance.");
+            var value = new object();
+            Assert.IsNotNull(value, "Should not null value.");
+            DataTemplate.SetValue(BaseComponents.TextLabel.TextProperty, value);
+            Assert.IsNotNull(DataTemplate.Values, "Should not null value.");
+            var val = DataTemplate.Values[BaseComponents.TextLabel.TextProperty];
+            Assert.AreEqual(value, val, "Should be equal");
+        }
+
+        public class TestType
+        {
+            public TestType() {}
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.NUI.Tests/testcase/TSDataTemplateSelector.cs b/tct-suite-vs/Tizen.NUI.Tests/testcase/TSDataTemplateSelector.cs
new file mode 100755 (executable)
index 0000000..0fe77cc
--- /dev/null
@@ -0,0 +1,159 @@
+using NUnit.Framework;
+using NUnit.Framework.TUnit;
+using System;
+using Tizen.NUI;
+using Tizen.NUI.Test;
+
+namespace Tizen.NUI.Tests
+{
+
+    [TestFixture]
+    [Description("Tizen.NUI.Binding.DataTemplateSelector Tests")]
+    public class DataTemplateSelectorTests
+    {
+        private string TAG = "NUI";
+
+        [SetUp]
+        public void Init()
+        {
+            Tizen.Log.Info(TAG, "Init() is called!");
+            App.MainTitleChangeText("DataTemplateSelectorTests");
+            App.MainTitleChangeBackgroundColor(null);
+
+        }
+
+        [TearDown]
+        public void Destroy()
+        {
+            Tizen.Log.Info(TAG, "Destroy() is called!");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("DataTemplateSelector constructor test. Check whether object is successfully created or not.")]
+        [Property("SPEC", "Tizen.NUI.Binding.DataTemplateSelector.DataTemplateSelector C")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "CONSTR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void DataTemplateSelector_INIT()
+        {
+            /* TEST CODE */
+            var DataTemplateSelector = new MyTemplateSelector();
+            Assert.IsNotNull(DataTemplateSelector, "Should not null value.");
+            Assert.IsInstanceOf<Binding.DataTemplateSelector>(DataTemplateSelector, "Should return DataTemplateSelector instance.");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test SelectTemplate. Check whether template returns properly as given item.")]
+        [Property("SPEC", "Tizen.NUI.Binding.DataTemplateSelector.SelectTemplate M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void SelectTemplate_RETURN_VALUE()
+        {
+            /* TEST CODE */
+            var TemplateSelector = new MyTemplateSelector();
+            Assert.IsNotNull(TemplateSelector, "Should not null value.");
+            var myView = new BaseComponents.View();
+            Assert.IsNotNull(myView, "Should not null value.");
+            var item1 = new TestItem1("test");
+            Assert.IsNotNull(item1, "Should not null value.");
+
+            var template1 = TemplateSelector.SelectTemplate(item1, myView);
+            Assert.IsNotNull(template1, "Should not null value.");
+            Assert.IsInstanceOf<MyTemplate1>(template1, "Should return MyTemplate1 instance.");
+
+            var item2 = new TestItem2("test", "second");
+            Assert.IsNotNull(item2, "Should not null value.");
+
+            var template2 = TemplateSelector.SelectTemplate(item2, myView);
+            Assert.IsNotNull(template2, "Should not null value.");
+            Assert.IsInstanceOf<MyTemplate2>(template2, "Should return MyTemplate2 instance.");
+        }
+
+
+        [Test]
+        [Category("P1")]
+        [Description("Test OnSelectTemplate. Check whether template returns properly as given item.")]
+        [Property("SPEC", "Tizen.NUI.Binding.DataTemplateSelector.OnSelectTemplate M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void OnSelectTemplate_RETURN_VALUE()
+        {
+            /* TEST CODE */
+            var TemplateSelector = new MyTemplateSelector();
+            Assert.IsNotNull(TemplateSelector, "Should not null value.");
+            var myView = new BaseComponents.View();
+            Assert.IsNotNull(myView, "Should not null value.");
+            var item1 = new TestItem1("test");
+            Assert.IsNotNull(item1, "Should not null value.");
+
+            var template1 = TemplateSelector.SelectTemplate(item1, myView);
+
+            Assert.IsNotNull(template1, "Should not null value.");
+            Assert.IsInstanceOf<MyTemplate1>(template1, "Should return MyTemplate1 instance.");
+
+            var item2 = new TestItem2("test", "second");
+            Assert.IsNotNull(item2, "Should not null value.");
+
+            var template2 = TemplateSelector.SelectTemplate(item2, myView);
+            Assert.IsNotNull(template2, "Should not null value.");
+            Assert.IsInstanceOf<MyTemplate2>(template2, "Should return MyTemplate2 instance.");
+        }
+
+        public class TestItem1
+        {
+            string name;
+            string Name { get => name; set => name = value; }
+            public TestItem1(string _name) { Name = _name; }
+        }
+
+        public class TestItem2
+        {
+            string name;
+            string subname;
+            string Name { get => name; set => name = value; }
+            string SubName { get => subname; set => subname = value; }
+
+            public TestItem2(string _name, string _subname) { Name = _name; SubName = _subname; }
+        }
+
+        public class MyTemplate1: Binding.DataTemplate
+        {
+            public MyTemplate1() : base(() => { BaseComponents.View myView = new BaseComponents.View(); return myView;}) {}
+        }
+
+        public class MyTemplate2: Binding.DataTemplate
+        {
+            public MyTemplate2() : base(() => { BaseComponents.View myView = new BaseComponents.View(); return myView;}) {}
+
+        }
+
+        public class MyTemplateSelector: Binding.DataTemplateSelector
+        {
+            MyTemplate1 template1;
+            MyTemplate2 template2;
+
+            public MyTemplateSelector() : base()
+            {
+                template1 = new MyTemplate1();
+                template2 = new MyTemplate2();
+            }
+
+            protected override Binding.DataTemplate OnSelectTemplate(object item, Binding.BindableObject container)
+            {
+                if (item is TestItem1)
+                {
+                    return template1;
+                }
+                else if (item is TestItem2)
+                {
+                    return template2;
+                }
+                else return null;
+            }
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.NUI.Tests/testcase/TSElementTemplate.cs b/tct-suite-vs/Tizen.NUI.Tests/testcase/TSElementTemplate.cs
new file mode 100755 (executable)
index 0000000..688f64e
--- /dev/null
@@ -0,0 +1,53 @@
+using NUnit.Framework;
+using NUnit.Framework.TUnit;
+using System;
+using Tizen.NUI;
+using Tizen.NUI.Test;
+
+namespace Tizen.NUI.Tests
+{
+
+    [TestFixture]
+    [Description("Tizen.NUI.Binding.ElementTemplate Tests")]
+    public class ElementTemplateTests
+    {
+        private string TAG = "NUI";
+
+        [SetUp]
+        public void Init()
+        {
+            Tizen.Log.Info(TAG, "Init() is called!");
+            App.MainTitleChangeText("ElementTemplateTests");
+            App.MainTitleChangeBackgroundColor(null);
+
+        }
+
+        [TearDown]
+        public void Destroy()
+        {
+            Tizen.Log.Info(TAG, "Destroy() is called!");
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Test CreateContent. Check whether content is successfully created or not.")]
+        [Property("SPEC", "Tizen.NUI.Binding.ElementTemplate.CreateContent M")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "MR")]
+        [Property("AUTHOR", "SangHyeon Lee, sh10233.lee@samsung.com")]
+        public void CreateContent_GET_VALUE()
+        {
+            /* TEST CODE */
+            var DataTemplate = new Binding.DataTemplate(() => {
+                var content = new BaseComponents.TextLabel();
+                Assert.IsNotNull(content, "Should not null value.");
+                Assert.IsInstanceOf<BaseComponents.TextLabel>(content, "Should return TextLabel instance.");
+                return content;
+            });
+            Assert.IsNotNull(DataTemplate, "Should not null value.");
+            Assert.IsInstanceOf<Binding.DataTemplate>(DataTemplate, "Should return DataTemplate instance.");
+            var newContent = DataTemplate.CreateContent();
+            Assert.IsInstanceOf<BaseComponents.TextLabel>(newContent, "Should return TextLabel instance.");
+        }
+    }
+}