[NUI.WindowSystem][TCSACR-326][Add WindowSystem QuickPanelClient's TCs] 98/238498/18
authorjeon <jhyuni.kang@samsung.com>
Tue, 14 Jul 2020 11:25:23 +0000 (20:25 +0900)
committerjeon <jhyuni.kang@samsung.com>
Wed, 16 Sep 2020 04:47:36 +0000 (13:47 +0900)
  - This is test for Tizen.NUI.WindowSystem module added since Tizen 6.0
  - TizenShell and QuickPanelClient classes are added.
  - TizenShell class is a control handle for this WindowSystem.Shell system.
  - QuickPanelClient class is controlling and getting status about  quickpanel service window.
  - Add
    - QuickPanelClient_INIT
      - Test a QuickPanelClient class is create well. QuickPanelClient class is created with
        three different types SystemDefault, ContextMenu, AppsMenu.
        So in this testcase tests QuickPanelClient class is created well with these types.
    - QuickPanelClient_INIT_FAILED
      - Test a QuickPanelClient class creates failed with serveral cases.
    - Visible_CHECK_RETURN_VALUE
      - Test a get Visible property value well.
    - Scrollable_CHECK_RETURN_VALUE
      - Test a get/set Scrollable property value well.
    - Orientation_CHECK_RETURN_VALUE
      - Test a get Orientation property value well.
    - Show_CHECK
      - Test a Show method works well
    - Hide_CHECK
      - Test a Hide method works well
    - VisibleChanged_EVENT
      - Test a VisibleChanged event callback is triggered well.
    - TizenShell_INIT
      - Test a TizenShell class is created well.
    - OrientationChanged_EVENT
      - Test a OrientationChanged event callback is triggered well. This is Manual Test

Change-Id: Ia9b265d12062858bf173f449972034f7c25dad96

23 files changed:
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.WindowSystem.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.WindowSystem.Tests-6.0.zip [new file with mode: 0644]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml
tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/ManualTestPage.cs [new file with mode: 0644]
tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/Program.cs [new file with mode: 0644]
tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/Tizen.NUI.WindowSystem.Manual.Tests.csproj [new file with mode: 0755]
tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/Tizen.NUI.WindowSystem.Manual.Tests.sln [new file with mode: 0644]
tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/Utils.cs [new file with mode: 0644]
tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/WearableManualTestPage.cs [new file with mode: 0644]
tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/res/images/controller_btn_check_on.png [new file with mode: 0644]
tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/res/images/rectangle_btn_shadow.png [new file with mode: 0644]
tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/res/images/rectangle_point_btn_normal.png [new file with mode: 0644]
tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/res/images/rectangle_toggle_btn_normal.png [new file with mode: 0644]
tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/shared/res/Tizen.NUI.WindowSystem.Manual.Tests.png [new file with mode: 0755]
tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/testcase/TSQuickPanelClient.cs [new file with mode: 0644]
tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/tizen-manifest.xml [new file with mode: 0755]
tct-suite-vs/Tizen.NUI.WindowSystem.Tests/Program.cs [new file with mode: 0644]
tct-suite-vs/Tizen.NUI.WindowSystem.Tests/Tizen.NUI.WindowSystem.Tests.csproj [new file with mode: 0644]
tct-suite-vs/Tizen.NUI.WindowSystem.Tests/Tizen.NUI.WindowSystem.Tests.sln [new file with mode: 0644]
tct-suite-vs/Tizen.NUI.WindowSystem.Tests/shared/res/Tizen.NUI.WindowSystem.Tests.png [new file with mode: 0755]
tct-suite-vs/Tizen.NUI.WindowSystem.Tests/testcase/TSQuickPanelClient.cs [new file with mode: 0644]
tct-suite-vs/Tizen.NUI.WindowSystem.Tests/testcase/TSTizenShell.cs [new file with mode: 0644]
tct-suite-vs/Tizen.NUI.WindowSystem.Tests/tizen-manifest.xml [new file with mode: 0755]

diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.WindowSystem.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.WindowSystem.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..fa1a16f
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.WindowSystem.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.WindowSystem.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.WindowSystem.Tests-6.0.zip
new file mode 100644 (file)
index 0000000..a894ac9
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.WindowSystem.Tests-6.0.zip differ
index 909a2c3ff2da6baee7432e740ddd69334159a206..b63e4efca6f76aca78f365ab48ee0419cb55c556 100755 (executable)
     <total_tcn>2096</total_tcn>
     <pkg_name>mobile/Tizen.NUI.Tests-6.0.zip</pkg_name>
   </suite>
+  <suite name="Tizen.NUI.WindowSystem.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>1</manual_tcn>
+    <total_tcn>1</total_tcn>
+    <pkg_name>mobile/Tizen.NUI.WindowSystem.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.NUI.WindowSystem.Tests" category="C# Device APIs">
+    <auto_tcn>12</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>12</total_tcn>
+    <pkg_name>mobile/Tizen.NUI.WindowSystem.Tests-6.0.zip</pkg_name>
+  </suite>
   <suite name="Tizen.Network.Stc.Tests" category="C# Device APIs">
     <auto_tcn>28</auto_tcn>
     <manual_tcn>0</manual_tcn>
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/ManualTestPage.cs b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/ManualTestPage.cs
new file mode 100644 (file)
index 0000000..9b757eb
--- /dev/null
@@ -0,0 +1,852 @@
+/*\r
+* Copyright (c) 2020 Samsung Electronics Co., Ltd.\r
+*\r
+* Licensed under the Apache License, Version 2.0 (the "License");\r
+* you may not use this file except in compliance with the License.\r
+* You may obtain a copy of the License at\r
+*\r
+* http://www.apache.org/licenses/LICENSE-2.0\r
+*\r
+* Unless required by applicable law or agreed to in writing, software\r
+* distributed under the License is distributed on an "AS IS" BASIS,\r
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+* See the License for the specific language governing permissions and\r
+* limitations under the License.\r
+*\r
+*/\r
+\r
+using System;\r
+using System.Runtime.InteropServices;\r
+using System.Collections.Generic;\r
+using NUnitLite.TUnit;\r
+using NUnit.Framework.Interfaces;\r
+using NUnit.Framework.TUnit;\r
+using System.Reflection;\r
+using Tizen.NUI.BaseComponents;\r
+using Tizen.NUI.Components;\r
+using Tizen.Applications;\r
+using System.Runtime.CompilerServices;\r
+\r
+namespace Tizen.NUI.WindowSystem.Tests\r
+{\r
+    class ManualTestNUI\r
+    {\r
+        class ListBridge : FlexibleViewAdapter\r
+        {\r
+            private List<string> _mDatas;\r
+            private List<ItemData> _mlistItem;\r
+\r
+            public ListBridge(List<string> datas, List<ItemData> item)\r
+            {\r
+                _mDatas = datas;\r
+                _mlistItem = item;\r
+            }\r
+\r
+            public void UpdateItemData(int position, List<ItemData> item)\r
+            {\r
+                _mlistItem = item;\r
+            }\r
+\r
+            public override FlexibleViewViewHolder OnCreateViewHolder(int viewType)\r
+            {\r
+                FlexibleViewViewHolder viewHolder = new FlexibleViewViewHolder(new Button());\r
+                return viewHolder;\r
+            }\r
+\r
+            public override void OnBindViewHolder(FlexibleViewViewHolder holder, int position)\r
+            {\r
+                string testcaseName = "#." + (position + 1).ToString() + _mDatas[position];\r
+                string resultText = "[" + _mlistItem[(int)position].Result + "]";\r
+                string text = testcaseName + resultText;\r
+\r
+                Button btn = holder.ItemView as Button;\r
+                if (btn)\r
+                {\r
+                    btn.Focusable = true;\r
+                    btn.Text = text;\r
+                    btn.Name = position.ToString();\r
+                    btn.PointSize = ManualTest.GetPointSize();\r
+                    btn.Size = new Size(Window.Instance.Size.Width, Window.Instance.Size.Height * 0.046f);\r
+                    btn.TextColor = new Color(0, 0, 0, 1);\r
+                    btn.ImageShadow = new ImageShadow\r
+                    {\r
+                        Url = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "/images/rectangle_btn_shadow.png",\r
+                        Border = new Rectangle(5, 5, 5, 5)\r
+                    };\r
+                    btn.BackgroundImage = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "/images/rectangle_toggle_btn_normal.png";\r
+                    btn.BackgroundImageBorder = new Rectangle(5, 5, 5, 5);\r
+                    btn.FocusGained += (obj, e) =>\r
+                    {\r
+                        btn.BackgroundImage = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "/images/rectangle_point_btn_normal.png";\r
+                    };\r
+                    btn.FocusLost += (obj, e) =>\r
+                    {\r
+                        btn.BackgroundImage = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "/images/rectangle_toggle_btn_normal.png";\r
+                    };\r
+                    btn.ParentOrigin = Position.ParentOriginTopLeft;\r
+                    btn.PivotPoint = PivotPoint.TopLeft;\r
+                    btn.TextAlignment = HorizontalAlignment.Begin;\r
+                    btn.CellIndex = new Vector2(position, 0);\r
+                }\r
+            }\r
+\r
+            public override void OnDestroyViewHolder(FlexibleViewViewHolder holder)\r
+            {\r
+                if (holder.ItemView != null)\r
+                {\r
+                    holder.ItemView.Dispose();\r
+                }\r
+            }\r
+\r
+            public override int GetItemCount()\r
+            {\r
+                return _mDatas.Count;\r
+            }\r
+        }\r
+\r
+        private List<string> _tcIDList;\r
+        private List<ItemData> _listItem;\r
+        private TSettings _tsettings;\r
+        private TRunner _tRunner;\r
+        private Button _passButton, _failButton, _blockButton, _homeButton, _preButton, _nextButton, _doneButton;\r
+        private TextLabel _notRun;\r
+        private const string STEP_ATTRIBUTE_NAME = "NUnit.Framework.StepAttribute";\r
+        private const string PRECONDITION_ATTRIBUTE_NAME = "NUnit.Framework.PreconditionAttribute";\r
+        private const string POSTCONDITION_ATTRIBUTE_NAME = "NUnit.Framework.PostconditionAttribute";\r
+        private List<string> _listNotPass;\r
+        private ToastMessage _toastMessage;\r
+        //For TV\r
+        private float _pointSize = 20.0f;\r
+\r
+        //Save the information of every single test case\r
+        private List<TestcaseInfo> _tcInfoList;\r
+        private List<string> _currentTCInfo;\r
+\r
+        private static ManualTestNUI _instance;\r
+        private static Object _lockObject = new object();\r
+\r
+        //Show the result of all the test case\r
+        private TextLabel _summaryLabel;\r
+        private View _initView;\r
+        private View _detailView;\r
+        private View _caseView;\r
+        private FlexibleView _initList;\r
+        private ListBridge _adapter;\r
+        private TableView _detailList;\r
+        private View _buttonContainer;\r
+        private View _buttonContainer2;\r
+        private TableView _firstPageContainer;\r
+        private Button _run;\r
+        private Button _runButton;\r
+\r
+        //Always save the current TC number;\r
+        private int _currentTCNum = 0;\r
+\r
+\r
+        public static ManualTestNUI GetInstance()\r
+        {\r
+            lock (_lockObject)\r
+            {\r
+                if (_instance == null)\r
+                {\r
+                    _instance = new ManualTestNUI();\r
+                }\r
+            }\r
+            return _instance;\r
+        }\r
+\r
+        private ManualTestNUI()\r
+        {\r
+            Initialize();\r
+        }\r
+        public void Initialize()\r
+        {\r
+            Tizen.Log.Fatal("NUI", "Initialize window's width is " + Window.Instance.Size.Width + " Dpi is " + Window.Instance.Dpi.Length());\r
+            Window.Instance.BackgroundColor = Color.White;\r
+\r
+            _toastMessage = new ToastMessage();\r
+            _pointSize = ManualTest.GetPointSize();\r
+            RunType.Value = RunType.MANUAL;\r
+            _tRunner = new TRunner();\r
+            _tRunner.LoadTestsuite();\r
+            _tRunner.SingleTestDone += OnSingleTestDone;\r
+            _tcIDList = new List<string>();\r
+            _listItem = new List<ItemData>();\r
+            _listNotPass = TSettings.GetInstance().GetNotPassListManual();\r
+            int count = 0;\r
+            if (_listNotPass.Count == 0)\r
+            {\r
+                foreach (KeyValuePair<string, ITest> pair in _tRunner.GetTestList())\r
+                {\r
+                    count++;\r
+                    _listItem.Add(new ItemData { No = count, TCName = pair.Key, Result = StrResult.NOTRUN });\r
+                    _tcIDList.Add(pair.Key);\r
+                }\r
+            }\r
+            else\r
+            {\r
+                foreach (var tc in _listNotPass)\r
+                {\r
+                    count++;\r
+                    _listItem.Add(new ItemData { No = count, TCName = tc, Result = StrResult.NOTRUN });\r
+                    _tcIDList.Add(tc);\r
+                }\r
+            }\r
+            Tizen.Log.Fatal("NUI", "TCT : count:" + count.ToString());\r
+            foreach (String nameTc in _tcIDList)\r
+            {\r
+                Tizen.Log.Fatal("NUI", "TCT : TCName:" + nameTc.ToString());\r
+            }\r
+\r
+            _tsettings = TSettings.GetInstance();\r
+            _tsettings.IsManual = true;\r
+\r
+            InitData();\r
+            _caseView = new View();\r
+\r
+            _summaryLabel = new TextLabel();\r
+            _summaryLabel.PointSize = _pointSize;\r
+            _summaryLabel.Size = new Size(Window.Instance.Size.Width, Window.Instance.Size.Height * 0.055f);\r
+            _summaryLabel.ParentOrigin = Position.ParentOriginTopLeft;\r
+            _summaryLabel.PivotPoint = PivotPoint.TopLeft;\r
+            _summaryLabel.HorizontalAlignment = HorizontalAlignment.Center;\r
+            _summaryLabel.VerticalAlignment = VerticalAlignment.Center;\r
+            Window.Instance.GetDefaultLayer().Add(_summaryLabel);\r
+            SetSummaryResult();\r
+\r
+            _initView = new View();\r
+            _initView.Size = new Size(Window.Instance.Size.Width, Window.Instance.Size.Height * 0.9f);\r
+            _initView.Position = new Position(0.0f, (int)(Window.Instance.Size.Height * 0.0648), 0.0f);\r
+            _initView.ParentOrigin = Position.ParentOriginTopLeft;\r
+            _initView.PivotPoint = PivotPoint.TopLeft;\r
+            InitializeFirstPage();\r
+            _initView.Show();\r
+            Window.Instance.GetDefaultLayer().Add(_initView);\r
+\r
+            _detailView = new View();\r
+            _detailView.Size = new Size(Window.Instance.Size.Width, Window.Instance.Size.Height * 0.9f);\r
+            _detailView.Position = new Position(0.0f, (int)(Window.Instance.Size.Height * 0.0648), 0.0f);\r
+            _detailView.ParentOrigin = Position.ParentOriginTopLeft;\r
+            _detailView.PivotPoint = PivotPoint.TopLeft;\r
+            InitializeDetailPage();\r
+            _detailView.Hide();\r
+            Window.Instance.GetDefaultLayer().Add(_detailView);\r
+\r
+            FocusManager.Instance.SetCurrentFocusView(_run);\r
+        }\r
+\r
+        void SetCommonButtonStyle(Button btn, string text)\r
+        {\r
+            if (!btn) return;\r
+            btn.Focusable = true;\r
+            btn.Text = text;\r
+            btn.PointSize = _pointSize;\r
+            float buttonWidth = ManualTest.IsMobile() ? Window.Instance.Size.Width * 0.18f : Window.Instance.Size.Width * 0.06f;\r
+            btn.Size = new Size(buttonWidth, Window.Instance.Size.Height * 0.046f);\r
+            btn.TextColor = new Color(0, 0, 0, 1);\r
+            btn.ImageShadow = new ImageShadow\r
+            {\r
+                Url = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "/images/rectangle_btn_shadow.png",\r
+                Border = new Rectangle(5, 5, 5, 5)\r
+            };\r
+            btn.BackgroundImage = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "/images/rectangle_toggle_btn_normal.png";\r
+            btn.BackgroundImageBorder = new Rectangle(5, 5, 5, 5);\r
+            btn.ParentOrigin = Position.ParentOriginTopLeft;\r
+            btn.PivotPoint = PivotPoint.TopLeft;\r
+            btn.FocusGained += (obj, e) =>\r
+            {\r
+                btn.BackgroundImage = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "/images/rectangle_point_btn_normal.png";\r
+            };\r
+            btn.FocusLost += (obj, e) =>\r
+            {\r
+                btn.BackgroundImage = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "/images/rectangle_toggle_btn_normal.png";\r
+            };\r
+        }\r
+\r
+        void InitializeFirstPage()\r
+        {\r
+            //Create Run Button, when you Click it, then the first test case will be executed.\r
+            _doneButton = new Button();\r
+            SetCommonButtonStyle(_doneButton, "Done");\r
+            _doneButton.Clicked += (obj, ee) =>\r
+            {\r
+                TSettings.GetInstance().SubmitManualResult();\r
+            };\r
+\r
+            _run = new Button();\r
+            SetCommonButtonStyle(_run, "Runner");\r
+            _run.Clicked += (obj, ee) =>\r
+            {\r
+                Tizen.Log.Fatal("NUI", "Check all the test case from the first one.");\r
+                _currentTCNum = 0;\r
+                _initView.Hide();\r
+                _caseView.Hide();\r
+                UpdateDetailPage();\r
+                _detailView.Show();\r
+                FocusManager.Instance.SetCurrentFocusView(_runButton);\r
+            };\r
+            _run.RightFocusableView = _doneButton;\r
+            _doneButton.LeftFocusableView = _run;\r
+\r
+            //To show all the test case information(Number _className._TCName  [result]).\r
+            _initList = new FlexibleView();\r
+            _initList.Position = new Position(0, Window.Instance.Size.Height * 0.0925f);\r
+            _initList.Size = new Size(Window.Instance.Size.Width, Window.Instance.Size.Height * 0.74f);\r
+            _adapter = new ListBridge(_tcIDList, _listItem);\r
+            _initList.SetAdapter(_adapter);\r
+            LinearLayoutManager layoutManager = new LinearLayoutManager(LinearLayoutManager.VERTICAL);\r
+            _initList.SetLayoutManager(layoutManager);\r
+            _initList.FocusedItemIndex = 0;\r
+            _initList.Focusable = true;\r
+            _initList.ItemClicked += (obj, e) =>\r
+            {\r
+                Button button = e.ClickedView.ItemView as Button;\r
+                if (button)\r
+                {\r
+                    Tizen.Log.Fatal("NUI", "Item clicked!!::" + button.Name);\r
+                    _currentTCNum = int.Parse(button.Name);\r
+                    _initView.Hide();\r
+                    UpdateDetailPage();\r
+                    _caseView.Hide();\r
+                    _detailView.Show();\r
+                    FocusManager.Instance.SetCurrentFocusView(_runButton);\r
+                }\r
+            };\r
+            _initList.FocusGained += (obj, e) =>\r
+            {\r
+                FlexibleViewViewHolder holder = _initList?.FindViewHolderForAdapterPosition(0);\r
+                if (holder != null && holder.ItemView != null)\r
+                {\r
+                    FocusManager.Instance.SetCurrentFocusView(holder.ItemView);\r
+                    _currentTCNum = 0;\r
+                }\r
+            };\r
+            _initList.FocusLost += (obj, e) =>\r
+            {\r
+                _currentTCNum = 0;\r
+            };\r
+            _initList.KeyEvent += (obj, e) =>\r
+            {\r
+                if (e.Key.State == Key.StateType.Down)\r
+                {\r
+                    Tizen.Log.Fatal("NUI", "KeyEvent~KeyPressedName = " + e.Key.KeyPressedName + ",KeyCode = " + e.Key.KeyCode);\r
+                    if (e.Key.KeyPressedName == "Up")\r
+                    {\r
+                        if (_currentTCNum == 0)\r
+                        {\r
+                            FocusManager.Instance.SetCurrentFocusView(_run);\r
+                        }\r
+                        else\r
+                        {\r
+                            FlexibleViewViewHolder holder = _initList?.FindViewHolderForAdapterPosition(_currentTCNum - 1);\r
+                            if (holder != null && holder.ItemView != null)\r
+                            {\r
+                                FocusManager.Instance.SetCurrentFocusView(holder.ItemView);\r
+                                _currentTCNum--;\r
+                            }\r
+                        }\r
+                    }\r
+                    else if (e.Key.KeyPressedName == "Down")\r
+                    {\r
+                        if (_currentTCNum == _initList.ChildCount - 1)\r
+                        {\r
+                            _currentTCNum = 0;\r
+                        }\r
+                        else\r
+                        {\r
+                            _currentTCNum++;\r
+                        }\r
+                        FlexibleViewViewHolder holder = _initList?.FindViewHolderForAdapterPosition(_currentTCNum);\r
+                        if (holder != null && holder.ItemView != null)\r
+                        {\r
+                            FocusManager.Instance.SetCurrentFocusView(holder.ItemView);\r
+                        }\r
+                    }\r
+                    else if (e.Key.KeyPressedName == "Return")\r
+                    {\r
+                        _initView.Hide();\r
+                        UpdateDetailPage();\r
+                        _caseView.Hide();\r
+                        _detailView.Show();\r
+                        FocusManager.Instance.SetCurrentFocusView(_runButton);\r
+                    }\r
+                }\r
+                return true;\r
+            };\r
+\r
+            _firstPageContainer = new TableView(1, 2);\r
+            _firstPageContainer.PivotPoint = Position.PivotPointTopLeft;\r
+            _firstPageContainer.ParentOrigin = Position.ParentOriginTopLeft;\r
+            _firstPageContainer.Size = new Size(Window.Instance.Size.Width, Window.Instance.Size.Height * 0.1f);\r
+            _firstPageContainer.Focusable = true;\r
+            _firstPageContainer.SetCellAlignment(new TableView.CellPosition(0, 0), HorizontalAlignmentType.Right, VerticalAlignmentType.Center);\r
+            _firstPageContainer.SetCellAlignment(new TableView.CellPosition(0, 1), HorizontalAlignmentType.Center, VerticalAlignmentType.Center);\r
+            _firstPageContainer.AddChild(_doneButton, new TableView.CellPosition(0, 0));\r
+            _firstPageContainer.AddChild(_run, new TableView.CellPosition(0, 1));\r
+            _run.DownFocusableView = _initList;\r
+            _doneButton.DownFocusableView = _initList;\r
+\r
+            _initView.Add(_firstPageContainer);\r
+            _initView.Add(_initList);\r
+            Tizen.Log.Fatal("NUI", "TCT : InitializeFirstPage:");\r
+            FocusManager.Instance.SetCurrentFocusView(_run);\r
+        }\r
+\r
+        //Update the Test Page before you want to show it(Click Run/Pre/nect Button, or Click on item in the List).\r
+        void UpdateDetailPage()\r
+        {\r
+            UpdateCurrentTCInfo();\r
+            Tizen.Log.Fatal("NUI", "UpdateDetailPage:");\r
+            CreateTestCase();\r
+        }\r
+\r
+        void InitializeDetailPage()\r
+        {\r
+            _detailList = new TableView(23, 1);\r
+            _detailList.Focusable = true;\r
+            _detailList.Size = new Size(Window.Instance.Size.Width * 0.9739f, Window.Instance.Size.Height * 0.4629f);\r
+            _detailList.ParentOrigin = Position.ParentOriginTopLeft;\r
+            _detailList.PivotPoint = PivotPoint.TopLeft;\r
+            _detailList.Position = new Position(0.0f, 0.0f, 0.0f);\r
+            CreateDetailList();\r
+            _detailView.Add(_detailList);\r
+\r
+            //To Place the function button, such as PASS, FAIL.....\r
+            _buttonContainer = new View();\r
+            _buttonContainer.PivotPoint = PivotPoint.TopLeft;\r
+            _buttonContainer.ParentOrigin = Position.ParentOriginTopLeft;\r
+            _buttonContainer.Position = new Position(0, Window.Instance.Size.Height * 0.68f, 0);\r
+            _buttonContainer.Size = new Size(Window.Instance.Size.Width * 0.8f, Window.Instance.Size.Height * 0.1f);\r
+            _buttonContainer.Focusable = true;\r
+\r
+            _buttonContainer2 = new View();\r
+            _buttonContainer2.PivotPoint = PivotPoint.TopLeft;\r
+            _buttonContainer2.ParentOrigin = Position.ParentOriginTopLeft;\r
+            _buttonContainer2.Position = new Position(0, Window.Instance.Size.Height * 0.8f, 0);\r
+            _buttonContainer2.Size = new Size(Window.Instance.Size.Width * 0.8f, Window.Instance.Size.Height * 0.1f);\r
+            _buttonContainer2.Focusable = true;\r
+\r
+            var flexlayout = new FlexLayout();\r
+            flexlayout.Direction = FlexLayout.FlexDirection.Row;\r
+            flexlayout.Justification = FlexLayout.FlexJustification.SpaceBetween;\r
+            _buttonContainer.Layout = flexlayout;\r
+            var flexlayout2 = new FlexLayout();\r
+            flexlayout2.Direction = FlexLayout.FlexDirection.Row;\r
+            flexlayout2.Justification = FlexLayout.FlexJustification.SpaceBetween;\r
+            _buttonContainer2.Layout = flexlayout2;\r
+            CreateButtons();\r
+            _detailView.Add(_buttonContainer);\r
+            _detailView.Add(_buttonContainer2);\r
+        }\r
+\r
+        //To show the detail information of the test case\r
+        //Preconditions\r
+        //Steps\r
+        //PostConditions\r
+        void CreateTestCase()\r
+        {\r
+            if (_detailList)\r
+            {\r
+                _detailView.Remove(_detailList);\r
+                _detailList.Dispose();\r
+            }\r
+            Tizen.Log.Fatal("NUI", "Print the CurrentTCNum here::" + _currentTCNum);\r
+            _detailList = new TableView(10, 1);\r
+            _detailList.Focusable = true;\r
+            _detailList.Size = new Size(Window.Instance.Size.Width * 0.9739f, Window.Instance.Size.Height * 0.3703f);\r
+            _detailList.ParentOrigin = Position.ParentOriginTopLeft;\r
+            _detailList.PivotPoint = PivotPoint.TopLeft;\r
+            _detailList.Position = new Position(0.0f, 0.0f, 0.0f);\r
+            CreateDetailList();\r
+            _detailView.Add(_detailList);\r
+            if (_notRun)\r
+            {\r
+                _notRun.Text = _listItem[_currentTCNum].Result;\r
+            }\r
+        }\r
+\r
+        public void ScreenChangedToHome()\r
+        {\r
+            Clear();\r
+            if (!ManualTest.IsConfirmed())\r
+            {\r
+                _tsettings.TCResult = StrResult.NOTRUN;\r
+                ManualTest.Confirm();\r
+            }\r
+            else\r
+            {\r
+                _detailView.Hide();\r
+                _initView.Show();\r
+                FocusManager.Instance.SetCurrentFocusView(_run);\r
+            }\r
+        }\r
+\r
+        //Create all the function buttons here, such as PASS, FAIL.....\r
+        void CreateButtons()\r
+        {\r
+            _notRun = new TextLabel();\r
+            _notRun.HorizontalAlignment = HorizontalAlignment.Center;\r
+            _notRun.VerticalAlignment = VerticalAlignment.Center;\r
+            _notRun.PointSize = _pointSize;\r
+            _notRun.Text = "Not Run";\r
+            float buttonWidth = ManualTest.IsMobile() ? Window.Instance.Size.Width * 0.18f : Window.Instance.Size.Width * 0.06f;\r
+            _notRun.Size = new Size(buttonWidth, Window.Instance.Size.Height * 0.046f);\r
+\r
+            _passButton = new Button();\r
+            SetCommonButtonStyle(_passButton, "Pass");\r
+            _passButton.Clicked += (obj, ee) =>\r
+            {\r
+                Clear();\r
+                if (!ManualTest.IsConfirmed())\r
+                {\r
+                    _tsettings.TCResult = StrResult.PASS;\r
+                    ManualTest.Confirm();\r
+                }\r
+                Tizen.Log.Fatal("TBT", "Pass Button clicked!");\r
+            };\r
+\r
+            _failButton = new Button();\r
+            SetCommonButtonStyle(_failButton, "Fail");\r
+            _failButton.Clicked += (obj, ee) =>\r
+            {\r
+                Clear();\r
+                if (!ManualTest.IsConfirmed())\r
+                {\r
+                    _tsettings.TCResult = StrResult.FAIL;\r
+                    ManualTest.Confirm();\r
+                }\r
+                Tizen.Log.Fatal("TBT", "Fail Button clicked!");\r
+            };\r
+\r
+            _blockButton = new Button();\r
+            SetCommonButtonStyle(_blockButton, "Block");\r
+            _blockButton.Clicked += (obj, ee) =>\r
+            {\r
+                Clear();\r
+                if (!ManualTest.IsConfirmed())\r
+                {\r
+                    _tsettings.TCResult = StrResult.BLOCK;\r
+                    ManualTest.Confirm();\r
+                }\r
+            };\r
+\r
+            _runButton = new Button();\r
+            SetCommonButtonStyle(_runButton, "Run");\r
+            _runButton.Clicked += (obj, ee) =>\r
+            {\r
+                Clear();\r
+                //should update the _caseView by the test case\r
+                _tsettings.Testcase_ID = _tcIDList[_currentTCNum];\r
+                _tsettings.TCResult = "";\r
+                _tRunner.Execute();\r
+            };\r
+\r
+            _homeButton = new Button();\r
+            SetCommonButtonStyle(_homeButton, "Home");\r
+            _homeButton.Clicked += (obj, ee) =>\r
+            {\r
+                ScreenChangedToHome();\r
+            };\r
+\r
+            _preButton = new Button();\r
+            SetCommonButtonStyle(_preButton, "<<");\r
+            _preButton.Clicked += (obj, ee) =>\r
+            {\r
+                Clear();\r
+                if (!ManualTest.IsConfirmed())\r
+                {\r
+                    _tsettings.TCResult = StrResult.NOTRUN;\r
+                    ManualTest.Confirm();\r
+                }\r
+                else\r
+                {\r
+                    if (_currentTCNum != 0)\r
+                    {\r
+                        _currentTCNum--;\r
+                        _notRun.Text = _listItem[_currentTCNum].Result;\r
+                        ManualTest.Confirm();\r
+                        UpdateDetailPage();\r
+                    }\r
+                    else if (_currentTCNum == 0)\r
+                    {\r
+                        _toastMessage.Message = "This is first testcase";\r
+                        _toastMessage.Post();\r
+                    }\r
+                }\r
+            };\r
+\r
+            _nextButton = new Button();\r
+            SetCommonButtonStyle(_nextButton, ">>");\r
+            _nextButton.Clicked += (obj, ee) =>\r
+            {\r
+                Clear();\r
+                if (!ManualTest.IsConfirmed())\r
+                {\r
+                    _tsettings.TCResult = StrResult.NOTRUN;\r
+                    ManualTest.Confirm();\r
+                }\r
+                if (_currentTCNum + 1 != ResultNumber.Total)\r
+                {\r
+                    Tizen.Log.Fatal("NUI", "Print the [not run] CurrentTCNum::" + _currentTCNum);\r
+                    _currentTCNum++;\r
+                    _notRun.Text = _listItem[_currentTCNum].Result;\r
+                    UpdateDetailPage();\r
+                }\r
+                else if (_currentTCNum + 1 == ResultNumber.Total)\r
+                {\r
+                    _toastMessage.Message = "This is last testcase";\r
+                    _toastMessage.Post();\r
+                }\r
+            };\r
+\r
+            _passButton.RightFocusableView = _failButton;\r
+            _passButton.DownFocusableView = _homeButton;\r
+            _failButton.LeftFocusableView = _passButton;\r
+            _failButton.RightFocusableView = _blockButton;\r
+            _blockButton.LeftFocusableView = _failButton;\r
+            _blockButton.RightFocusableView = _runButton;\r
+            _blockButton.DownFocusableView = _preButton;\r
+            _runButton.LeftFocusableView = _blockButton;\r
+            _runButton.DownFocusableView = _nextButton;\r
+            _homeButton.UpFocusableView = _passButton;\r
+            _homeButton.RightFocusableView = _preButton;\r
+            _preButton.UpFocusableView = _blockButton;\r
+            _preButton.LeftFocusableView = _homeButton;\r
+            _preButton.RightFocusableView = _nextButton;\r
+            _nextButton.UpFocusableView = _runButton;\r
+            _nextButton.LeftFocusableView = _preButton;\r
+\r
+            _buttonContainer.Add(_passButton);\r
+            _buttonContainer.Add(_failButton);\r
+            _buttonContainer.Add(_blockButton);\r
+            _buttonContainer.Add(_runButton);\r
+            _buttonContainer2.Add(_homeButton);\r
+            _buttonContainer2.Add(_notRun);\r
+            _buttonContainer2.Add(_preButton);\r
+            _buttonContainer2.Add(_nextButton);\r
+        }\r
+\r
+        public void ExecuteTC(View view)\r
+        {\r
+            Tizen.Log.Fatal("NUI", "Execute the manual test case!");\r
+\r
+            _caseView = view;\r
+            _caseView.ParentOrigin = Position.ParentOriginTopLeft;\r
+            _caseView.PivotPoint = PivotPoint.TopLeft;\r
+            _caseView.Position = new Position(Window.Instance.Size.Width * 0.01f, Window.Instance.Size.Height * 0.74f, 0.0f);\r
+            _detailView.Add(_caseView);\r
+            _caseView.KeyEvent += OnKeyPressed;\r
+            _caseView.Show();\r
+            FocusManager.Instance.SetCurrentFocusView(_caseView);\r
+        }\r
+\r
+        private bool OnKeyPressed(object source, View.KeyEventArgs e)\r
+        {\r
+            Tizen.Log.Fatal("NUI", "CaseView OnKeyPressed 1 Down..." + e.Key.KeyPressedName);\r
+\r
+            if (e.Key.State == Key.StateType.Down)\r
+            {\r
+                if (e.Key.KeyPressedName == "Down")\r
+                {\r
+                    FocusManager.Instance.SetCurrentFocusView(_passButton);\r
+\r
+                }\r
+            }\r
+            return false;\r
+        }\r
+\r
+        private bool OnRunnerKeyPressed(object source, View.KeyEventArgs e)\r
+        {\r
+            Tizen.Log.Fatal("NUI", "Runner OnKeyPressed Down..." + e.Key.KeyPressedName);\r
+\r
+            if (e.Key.State == Key.StateType.Down)\r
+            {\r
+                if (e.Key.KeyPressedName == "Up")\r
+                {\r
+                    Tizen.Log.Fatal("NUI", "Set current focus view :: doneButton");\r
+                    FocusManager.Instance.SetCurrentFocusView(_doneButton);\r
+                }\r
+            }\r
+            return false;\r
+        }\r
+\r
+        private bool OnDownButtonKeyPressed(object source, View.KeyEventArgs e)\r
+        {\r
+            Tizen.Log.Fatal("NUI", "DownButton OnKeyPressed Down..." + e.Key.KeyPressedName);\r
+\r
+            if (e.Key.State == Key.StateType.Down)\r
+            {\r
+                if (e.Key.KeyPressedName == "Down")\r
+                {\r
+                    Tizen.Log.Fatal("NUI", "Set current focus view :: run");\r
+                    FocusManager.Instance.SetCurrentFocusView(_run);\r
+                }\r
+            }\r
+            return false;\r
+        }\r
+\r
+        private void Clear()\r
+        {\r
+            if (_caseView.IsOnWindow == true)\r
+            {\r
+                _detailView.Remove(_caseView);\r
+            }\r
+        }\r
+\r
+        public void ClearTestCase(View view)\r
+        {\r
+            FocusManager.Instance.SetCurrentFocusView(_runButton);\r
+            Tizen.Log.Fatal("NUI", "Clear test case!");\r
+            _detailView.Remove(view);\r
+        }\r
+\r
+        //Use to update the _summaryLabel.\r
+        private void SetSummaryResult()\r
+        {\r
+            ResultNumber.NotRun = ResultNumber.Total - ResultNumber.Pass - ResultNumber.Fail - ResultNumber.Block;\r
+            _summaryLabel.Text = "Total : " + ResultNumber.Total + ", Pass : " + ResultNumber.Pass + ", Fail : " + ResultNumber.Fail + ", Block : " + ResultNumber.Block + ", Not Run : " + ResultNumber.NotRun;\r
+        }\r
+\r
+        private void CreateDetailList()\r
+        {\r
+            Tizen.Log.Fatal("NUI", "Print the CreateDetailList::");\r
+            int senNum = _currentTCInfo.Count;\r
+            for (int index = 0; index < senNum; index++)\r
+            {\r
+                TextLabel description = new TextLabel();\r
+                description.ParentOrigin = Position.ParentOriginTopLeft;\r
+                description.PivotPoint = PivotPoint.TopLeft;\r
+                description.Position = new Position(0.0f, 0.0f, 0.0f);\r
+                description.Size2D = new Size2D((int)(Window.Instance.Size.Width * 0.9895), (int)(Window.Instance.Size.Height * 0.0462));\r
+                description.HorizontalAlignment = HorizontalAlignment.Begin;\r
+                description.PointSize = _pointSize;\r
+                description.Text = _currentTCInfo[(int)index];\r
+                _detailList.AddChild(description, new TableView.CellPosition((uint)index, 0));\r
+            }\r
+        }\r
+\r
+        //Init all the data, should be offered by Test Framework\r
+        void InitData()\r
+        {\r
+            ResultNumber.Total = _tcIDList.Count;\r
+            ResultNumber.Pass = 0;\r
+            ResultNumber.Fail = 0;\r
+            ResultNumber.Block = 0;\r
+            _tcInfoList = new List<TestcaseInfo>();\r
+            foreach (var testcaseItem in _listItem)\r
+            {\r
+                foreach (KeyValuePair<string, ITest> pair in _tRunner.GetTestList())\r
+                {\r
+                    if (testcaseItem.TCName.Equals(pair.Key))\r
+                    {\r
+                        IEnumerator<CustomAttributeData> customAttributes = pair.Value.Method.MethodInfo.CustomAttributes.GetEnumerator();\r
+                        List<string> preconditions = new List<string>();\r
+                        preconditions.Add("Preconditions:");\r
+                        List<string> steps = new List<string>();\r
+                        steps.Add("Steps:");\r
+                        List<string> postconditions = new List<string>();\r
+                        postconditions.Add("Postconditions:\n");\r
+\r
+                        while (customAttributes.MoveNext())\r
+                        {\r
+                            if (customAttributes.Current.AttributeType.FullName.Equals(STEP_ATTRIBUTE_NAME))\r
+                            {\r
+                                steps.Add(customAttributes.Current.ConstructorArguments[0].Value + "." + customAttributes.Current.ConstructorArguments[1].Value);\r
+                            }\r
+                            else if (customAttributes.Current.AttributeType.FullName.Equals(PRECONDITION_ATTRIBUTE_NAME))\r
+                            {\r
+                                preconditions.Add(customAttributes.Current.ConstructorArguments[0].Value + "." + customAttributes.Current.ConstructorArguments[1].Value);\r
+                            }\r
+                            else if (customAttributes.Current.AttributeType.FullName.Equals(POSTCONDITION_ATTRIBUTE_NAME))\r
+                            {\r
+                                postconditions.Add(customAttributes.Current.ConstructorArguments[0].Value + "." + customAttributes.Current.ConstructorArguments[1].Value);\r
+                            }\r
+                        }\r
+\r
+                        _tcInfoList.Add(new TestcaseInfo\r
+                        {\r
+                            TestcaseName = pair.Key,\r
+                            Preconditions = preconditions,\r
+                            Steps = steps,\r
+                            Postconditions = postconditions,\r
+                        });\r
+                        break;\r
+                    }\r
+                }\r
+            }\r
+            UpdateCurrentTCInfo();\r
+        }\r
+\r
+        //The data in CurrentTCInfo list will be show in _detailList.\r
+        void UpdateCurrentTCInfo()\r
+        {\r
+            _currentTCInfo = new List<string>();\r
+            Tizen.Log.Fatal("NUI.Components", "Print the CurrentTCNum::" + _currentTCNum);\r
+            _currentTCInfo.Add("DESCRIPTION:#" + (_currentTCNum + 1));\r
+            string[] str = _tcInfoList[_currentTCNum].TestcaseName.Split('.');\r
+            _currentTCInfo.Add("CLASS:" + str[str.Length - 2]);\r
+            _currentTCInfo.Add("METHOD:" + str[str.Length - 1]);\r
+            for (int index = 0; index < _tcInfoList[_currentTCNum].Preconditions.Count; index++)\r
+            {\r
+                _currentTCInfo.Add(_tcInfoList[_currentTCNum].Preconditions[index]);\r
+            }\r
+            for (int index = 0; index < _tcInfoList[_currentTCNum].Steps.Count; index++)\r
+            {\r
+                _currentTCInfo.Add(_tcInfoList[_currentTCNum].Steps[index]);\r
+            }\r
+            for (int index = 0; index < _tcInfoList[_currentTCNum].Postconditions.Count; index++)\r
+            {\r
+                _currentTCInfo.Add(_tcInfoList[_currentTCNum].Postconditions[index]);\r
+            }\r
+            Tizen.Log.Fatal("NUI", "The CurrentTCNum::" + _currentTCNum);\r
+        }\r
+\r
+        private void OnSingleTestDone(object sender, SingleTestDoneEventArgs e)\r
+        {\r
+            //Test when will this event will be triggered\r
+            Tizen.Log.Fatal("NUI", "OnSingleTestDone has been triggered!");\r
+            // check old result\r
+            if (_listItem[_currentTCNum].Result.Contains(StrResult.FAIL))\r
+            {\r
+                ResultNumber.Fail = ResultNumber.Fail - 1;\r
+            }\r
+            else if (_listItem[_currentTCNum].Result.Contains(StrResult.PASS))\r
+            {\r
+                ResultNumber.Pass = ResultNumber.Pass - 1;\r
+            }\r
+            else if (_listItem[_currentTCNum].Result.Contains(StrResult.BLOCK))\r
+                ResultNumber.Block = ResultNumber.Block - 1;\r
+\r
+            // Update new result\r
+            _listItem[_currentTCNum].Result = e.Result;\r
+            if (e.Result.Contains(StrResult.PASS))\r
+            {\r
+                ResultNumber.Pass += 1;\r
+            }\r
+            else if (e.Result.Contains(StrResult.FAIL))\r
+            {\r
+                ResultNumber.Fail += 1;\r
+            }\r
+            else if (e.Result.Contains(StrResult.BLOCK))\r
+            {\r
+                ResultNumber.Block += 1;\r
+            }\r
+\r
+            FlexibleViewViewHolder holder = _initList?.FindViewHolderForAdapterPosition(_currentTCNum);\r
+            if (holder != null)\r
+            {\r
+                string testcaseName = "#." + (_currentTCNum + 1).ToString() + _tcIDList[_currentTCNum];\r
+                string resultText = "[" + _listItem[(int)_currentTCNum].Result + "]";\r
+                string text = testcaseName + resultText;\r
+                Button btn = holder.ItemView as Button;\r
+                btn.Text = text;\r
+                _adapter?.UpdateItemData(_currentTCNum, _listItem);\r
+            }\r
+\r
+            SetSummaryResult();\r
+            _notRun.Text = _listItem[_currentTCNum].Result;\r
+        }\r
+    }\r
+}\r
+\r
+\r
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/Program.cs b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/Program.cs
new file mode 100644 (file)
index 0000000..2b1a596
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ *  Copyright (c) 2020 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 NUnitLite.TUnit;
+using Tizen.NUI;
+
+namespace Tizen.NUI.WindowSystem.Tests
+{
+    public class App : Tizen.NUI.NUIApplication
+    {
+        protected override void OnCreate()
+        {
+            Window window = Window.Instance;
+            window.AddAvailableOrientation(Window.WindowOrientation.Landscape);
+            window.AddAvailableOrientation(Window.WindowOrientation.PortraitInverse);
+            window.AddAvailableOrientation(Window.WindowOrientation.LandscapeInverse);
+            window.AddAvailableOrientation(Window.WindowOrientation.Portrait);
+            if (ManualTest.IsWearable())\r
+                WearableManualTestNUI.GetInstance();
+            else\r
+                ManualTestNUI.GetInstance();
+        }
+
+        static void Main(string[] args)
+        {
+            Tizen.Log.Fatal("NUI", "Manual TCT for NUI.WindowSystem start!");
+            App example = new App();
+            example.Run(args);
+        }
+    };
+}
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/Tizen.NUI.WindowSystem.Manual.Tests.csproj b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/Tizen.NUI.WindowSystem.Manual.Tests.csproj
new file mode 100755 (executable)
index 0000000..9793845
--- /dev/null
@@ -0,0 +1,40 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <!-- Property Group for .NET Core Project -->
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>tizen80</TargetFramework>
+    <TargetFrameworkIdentifier>Tizen</TargetFrameworkIdentifier>
+  </PropertyGroup>
+
+  <!-- Property Group for Tizen Project -->
+  <PropertyGroup>
+    <TizenCreateTpkOnBuild>true</TizenCreateTpkOnBuild>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugType>portable</DebugType>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>None</DebugType>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Folder Include="lib\" />
+  </ItemGroup>
+
+  <Import Project="..\Common\dependencies.props" />
+
+  <ItemGroup>
+    <PackageReference Include="Tizen.NET" Version="$(TizenNETVersion)">
+      <ExcludeAssets>Runtime</ExcludeAssets>
+    </PackageReference>
+    <PackageReference Include="Tizen.NET.Sdk" Version="$(TizenNETSdkVersion)" />
+  </ItemGroup>
+
+  <!-- Include Nuget Package for Tizen Project building -->
+  <ItemGroup>
+    <ProjectReference Include="..\Template\ManualTemplate\ManualTemplate.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/Tizen.NUI.WindowSystem.Manual.Tests.sln b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/Tizen.NUI.WindowSystem.Manual.Tests.sln
new file mode 100644 (file)
index 0000000..c383343
--- /dev/null
@@ -0,0 +1,120 @@
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Visual Studio Version 16\r
+VisualStudioVersion = 16.0.29920.165\r
+MinimumVisualStudioVersion = 15.0.26124.0\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI.WindowSystem.Manual.Tests", "Tizen.NUI.WindowSystem.Manual.Tests.csproj", "{D92BEEAC-3B2A-45F8-8C53-53B92550404A}"\r
+EndProject\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunit.framework", "..\nunit.framework\nunit.framework.csproj", "{B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}"\r
+EndProject\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunitlite", "..\nunitlite\nunitlite.csproj", "{FDB8025A-C029-461F-895E-287B4C65939B}"\r
+EndProject\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ManualTemplate", "..\Template\ManualTemplate\ManualTemplate.csproj", "{269F89A7-E648-4811-8421-844E00ACF5F0}"\r
+EndProject\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ManualTemplateForWearable", "..\Template\ManualTemplateForWearable\ManualTemplateForWearable.csproj", "{D36CED01-29BD-4EB3-8903-62E0BF2A822D}"\r
+EndProject\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI.Wearable.Manual.Tests", "..\Tizen.NUI.Wearable.Manual.Tests\Tizen.NUI.Wearable.Manual.Tests.csproj", "{25619FDE-C80D-4A16-8D42-CCB06155E31D}"\r
+EndProject\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI.Manual.Tests", "..\Tizen.NUI.Manual.Tests\Tizen.NUI.Manual.Tests.csproj", "{951B597E-74C3-4698-8333-2A7CD59E4BB2}"\r
+EndProject\r
+Global\r
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+               Debug|Any CPU = Debug|Any CPU\r
+               Debug|x64 = Debug|x64\r
+               Debug|x86 = Debug|x86\r
+               Release|Any CPU = Release|Any CPU\r
+               Release|x64 = Release|x64\r
+               Release|x86 = Release|x86\r
+       EndGlobalSection\r
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x64.Build.0 = Release|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x86.Build.0 = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x64.Build.0 = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x86.Build.0 = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x64.Build.0 = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x86.Build.0 = Release|Any CPU\r
+               {269F89A7-E648-4811-8421-844E00ACF5F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {269F89A7-E648-4811-8421-844E00ACF5F0}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {269F89A7-E648-4811-8421-844E00ACF5F0}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {269F89A7-E648-4811-8421-844E00ACF5F0}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {269F89A7-E648-4811-8421-844E00ACF5F0}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {269F89A7-E648-4811-8421-844E00ACF5F0}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {269F89A7-E648-4811-8421-844E00ACF5F0}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {269F89A7-E648-4811-8421-844E00ACF5F0}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {269F89A7-E648-4811-8421-844E00ACF5F0}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {269F89A7-E648-4811-8421-844E00ACF5F0}.Release|x64.Build.0 = Release|Any CPU\r
+               {269F89A7-E648-4811-8421-844E00ACF5F0}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {269F89A7-E648-4811-8421-844E00ACF5F0}.Release|x86.Build.0 = Release|Any CPU\r
+               {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Release|x64.Build.0 = Release|Any CPU\r
+               {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {D36CED01-29BD-4EB3-8903-62E0BF2A822D}.Release|x86.Build.0 = Release|Any CPU\r
+               {25619FDE-C80D-4A16-8D42-CCB06155E31D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {25619FDE-C80D-4A16-8D42-CCB06155E31D}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {25619FDE-C80D-4A16-8D42-CCB06155E31D}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {25619FDE-C80D-4A16-8D42-CCB06155E31D}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {25619FDE-C80D-4A16-8D42-CCB06155E31D}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {25619FDE-C80D-4A16-8D42-CCB06155E31D}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {25619FDE-C80D-4A16-8D42-CCB06155E31D}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {25619FDE-C80D-4A16-8D42-CCB06155E31D}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {25619FDE-C80D-4A16-8D42-CCB06155E31D}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {25619FDE-C80D-4A16-8D42-CCB06155E31D}.Release|x64.Build.0 = Release|Any CPU\r
+               {25619FDE-C80D-4A16-8D42-CCB06155E31D}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {25619FDE-C80D-4A16-8D42-CCB06155E31D}.Release|x86.Build.0 = Release|Any CPU\r
+               {951B597E-74C3-4698-8333-2A7CD59E4BB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {951B597E-74C3-4698-8333-2A7CD59E4BB2}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {951B597E-74C3-4698-8333-2A7CD59E4BB2}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {951B597E-74C3-4698-8333-2A7CD59E4BB2}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {951B597E-74C3-4698-8333-2A7CD59E4BB2}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {951B597E-74C3-4698-8333-2A7CD59E4BB2}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {951B597E-74C3-4698-8333-2A7CD59E4BB2}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {951B597E-74C3-4698-8333-2A7CD59E4BB2}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {951B597E-74C3-4698-8333-2A7CD59E4BB2}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {951B597E-74C3-4698-8333-2A7CD59E4BB2}.Release|x64.Build.0 = Release|Any CPU\r
+               {951B597E-74C3-4698-8333-2A7CD59E4BB2}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {951B597E-74C3-4698-8333-2A7CD59E4BB2}.Release|x86.Build.0 = Release|Any CPU\r
+       EndGlobalSection\r
+       GlobalSection(SolutionProperties) = preSolution\r
+               HideSolutionNode = FALSE\r
+       EndGlobalSection\r
+       GlobalSection(ExtensibilityGlobals) = postSolution\r
+               SolutionGuid = {ED382B91-9930-40B6-B3D7-362304C78680}\r
+       EndGlobalSection\r
+EndGlobal\r
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/Utils.cs b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/Utils.cs
new file mode 100644 (file)
index 0000000..f4e1b51
--- /dev/null
@@ -0,0 +1,266 @@
+/*
+ *  Copyright (c) 2020 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 System.Runtime.InteropServices;
+using System.Collections.Generic;
+using System.ComponentModel;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI;
+
+namespace Tizen.NUI.WindowSystem.Tests
+{
+
+    public class ResultNumber
+    {
+        public static int Total { get; set; }
+        public static int Pass { get; set; }
+        public static int Fail { get; set; }
+        public static int NotRun { get; set; }
+        public static int Block { get; set; }
+    }
+
+    public class TestcaseInfo
+    {
+        private string _tescaseName;
+        public string TestcaseName
+        {
+            get
+            {
+                return _tescaseName;
+            }
+            set
+            {
+                _tescaseName = value;
+            }
+        }
+
+        private List<string> _preconditions;
+        public List<string> Preconditions
+        {
+            get
+            {
+                return _preconditions;
+            }
+            set
+            {
+                _preconditions = value;
+            }
+        }
+
+        private List<string> _steps;
+        public List<string> Steps
+        {
+            get
+            {
+                return _steps;
+            }
+            set
+            {
+                _steps = value;
+            }
+        }
+
+        private List<string> _postconditions;
+        public List<string> Postconditions
+        {
+            get
+            {
+                return _postconditions;
+            }
+            set
+            {
+                _postconditions = value;
+            }
+        }
+    }
+    public class ItemData : INotifyPropertyChanged
+    {
+        public event PropertyChangedEventHandler PropertyChanged;
+        private void OnPropertyChanged(object sender, string propertyName)
+        {
+            if (this.PropertyChanged != null)
+            {
+                PropertyChanged(sender, new PropertyChangedEventArgs(propertyName));
+            }
+        }
+        public int No { get; set; }
+
+        public string TCName { get; set; }
+
+        private string _result;
+        public string Result
+        {
+            get
+            {
+                return _result;
+            }
+            set
+            {
+                _result = value;
+                if (_result.Equals(StrResult.PASS))
+                {
+                    ResultColor = Color.Green;
+                }
+                else if (_result.Equals(StrResult.FAIL))
+                {
+                    ResultColor = Color.Red;
+                }
+                else if (_result.Equals(StrResult.BLOCK))
+                {
+                    ResultColor = Color.Red;
+                }
+                else
+                {
+                    ResultColor = Color.Black;
+                }
+                OnPropertyChanged(this, "Result");
+            }
+        }
+
+        private Color _resultColor;
+        public Color ResultColor
+        {
+            get { return _resultColor; }
+            set
+            {
+                _resultColor = value;
+                OnPropertyChanged(this, "ResultColor");
+            }
+        }
+    }
+
+    public class StrResult
+    {
+        public static string PASS = "PASS";
+        public static string FAIL = "FAIL";
+        public static string NOTRUN = "NOT RUN";
+        public static string BLOCK = "BLOCK";
+    }
+
+    public class RunType
+    {
+        public static string AUTO = "AUTO";
+        public static string MANUAL = "MANUAL";
+
+        public static string Value { get; set; }
+    }
+
+    public class ManualTest
+    {
+        private static bool Confirmed = true;
+
+        public static async Task WaitForConfirm()
+        {
+            Confirmed = false;
+            //ManualTestNUI.GetInstance().UnlockUIButton();
+            while (true)
+            {
+                await Task.Delay(200);
+                if (Confirmed)
+                    break;
+            }
+        }
+
+        public static bool IsConfirmed()
+        {
+            return Confirmed;
+        }
+
+        public static void Confirm()
+        {
+            Confirmed = true;
+        }
+
+        public static bool IsMobile()
+        {
+            string value;
+            var result = Tizen.System.Information.TryGetValue("tizen.org/feature/profile", out value);
+            if (result && value.Equals("mobile"))
+            {
+                return true;
+            }
+
+            return false;
+        }
+
+        public static bool IsWearable()
+        {
+            string value;
+            var result = Tizen.System.Information.TryGetValue("tizen.org/feature/profile", out value);
+            if (result && value.Equals("wearable"))
+            {
+                return true;
+            }
+
+            return false;
+        }
+
+        public static bool IsEmulator()
+        {
+            string value;
+            var result = Tizen.System.Information.TryGetValue("tizen.org/system/model_name", out value);
+            if (result && value.Equals("Emulator"))
+            {
+                return true;
+            }
+
+            return false;
+        }
+
+        public static float GetPointSize()
+        {
+            float retValue = 10.0f; //default
+            string value;
+            Tizen.System.Information.TryGetValue("tizen.org/feature/profile", out value);
+            switch (value)
+            {
+                case "wearable":
+                    retValue = 4.0f;
+                    break;
+                case "mobile":
+                    retValue = 5.0f;
+                    break;
+                case "tv":
+                    retValue = 20.0f;
+                    break;
+            }
+            return retValue;
+        }
+
+        public static TextLabel CreateLabel(string information)
+        {
+            TextLabel mLabel = new TextLabel();
+            mLabel.TextColor = Color.White;
+            mLabel.PointSize = 4.0f;
+            mLabel.VerticalAlignment = VerticalAlignment.Center;
+            mLabel.HorizontalAlignment = HorizontalAlignment.Begin;
+            mLabel.MultiLine = true;
+            mLabel.Text = information;
+            mLabel.Size2D = new Size2D(300, 50);
+            return mLabel;
+        }
+    }
+
+    enum NavigationButton
+    {
+        Next,
+        Previous,
+        Home,
+        NA
+    }
+}
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/WearableManualTestPage.cs b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/WearableManualTestPage.cs
new file mode 100644 (file)
index 0000000..7369aa9
--- /dev/null
@@ -0,0 +1,716 @@
+/*
+* Copyright (c) 2020 Samsung Electronics Co., Ltd.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* 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.Runtime.InteropServices;
+using System.Collections.Generic;
+using NUnitLite.TUnit;
+using NUnit.Framework.Interfaces;
+using NUnit.Framework.TUnit;
+using System.Reflection;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;\r
+\r
+namespace Tizen.NUI.WindowSystem.Tests
+{
+    class WearableManualTestNUI
+    {
+        class ListBridge : FlexibleViewAdapter
+        {
+            private List<string> _mDatas;
+            private List<ItemData> _mlistItem;
+
+            public ListBridge(List<string> datas, List<ItemData> item)
+            {
+                _mDatas = datas;
+                _mlistItem = item;
+            }
+
+            public void UpdateItemData(int position, List<ItemData> item)
+            {
+                _mlistItem = item;
+            }
+
+            public override FlexibleViewViewHolder OnCreateViewHolder(int viewType)
+            {
+                FlexibleViewViewHolder viewHolder = new FlexibleViewViewHolder(new Button(new ButtonStyle()));
+                return viewHolder;
+            }
+
+            public override void OnBindViewHolder(FlexibleViewViewHolder holder, int position)
+            {
+                string testcaseName = "#." + (position + 1).ToString() + _mDatas[position];
+                string resultText = "[" + _mlistItem[(int)position].Result + "]";
+                string text = testcaseName + resultText;
+
+                Button btn = holder.ItemView as Button;
+                if (btn)\r
+                {\r
+                    btn.Size = new Size(Window.Instance.Size.Width, 120);\r
+                    btn.Name = position.ToString();\r
+                    btn.Text = text;\r
+                    btn.PointSize = 4.0f;\r
+                    btn.TextAlignment = HorizontalAlignment.Begin;\r
+                    btn.TextColor = Color.White;\r
+                    btn.BackgroundImage = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "/images/controller_btn_check_on.png";\r
+                    btn.BackgroundImageBorder = new Rectangle(5, 5, 5, 5);\r
+                }
+            }
+
+            public override void OnDestroyViewHolder(FlexibleViewViewHolder holder)
+            {
+                if (holder.ItemView != null)
+                {
+                    holder.ItemView.Dispose();
+                }
+            }
+
+            public override int GetItemCount()
+            {
+                return _mDatas.Count;
+            }
+        }\r
+\r
+        class DetailListBridge : FlexibleViewAdapter
+        {
+            private List<string> _mDatas;
+
+            public DetailListBridge(List<string> datas)
+            {
+                _mDatas = datas;
+            }
+
+            public override FlexibleViewViewHolder OnCreateViewHolder(int viewType)
+            {
+                FlexibleViewViewHolder viewHolder = new FlexibleViewViewHolder(new TextLabel());
+                return viewHolder;
+            }
+
+            public override void OnBindViewHolder(FlexibleViewViewHolder holder, int position)
+            {
+                TextLabel label = holder.ItemView as TextLabel;
+                if (label)\r
+                {\r
+                    label.TextColor = Color.White;\r
+                    label.ParentOrigin = ParentOrigin.TopLeft;\r
+                    label.PivotPoint = PivotPoint.TopLeft;\r
+                    label.Position = new Position(0.0f, 0.0f, 0.0f);
+                    label.Size = new Size(Window.Instance.Size.Width - 100, _detailScrollHeight);\r
+                    label.HorizontalAlignment = HorizontalAlignment.Begin;\r
+                    label.VerticalAlignment = VerticalAlignment.Center;
+                    label.PointSize = 3.0f;
+                    label.MultiLine = true;
+                    label.Text = _mDatas[position];
+                }\r
+            }
+
+            public override void OnDestroyViewHolder(FlexibleViewViewHolder holder)
+            {
+                if (holder.ItemView != null)
+                {
+                    holder.ItemView.Dispose();
+                }
+            }
+
+            public override int GetItemCount()
+            {
+                return _mDatas.Count;
+            }
+        }
+
+        private List<string> _tcIDList;
+        private List<ItemData> _listItem;
+        private TSettings _tsettings;
+        private TRunner _tRunner;
+        private Button _passButton, _failButton, _blockButton, _homeButton, _preButton, _nextButton, _doneButton;
+        private TextLabel _notRun;
+        private const string STEP_ATTRIBUTE_NAME = "NUnit.Framework.StepAttribute";
+        private const string PRECONDITION_ATTRIBUTE_NAME = "NUnit.Framework.PreconditionAttribute";
+        private const string POSTCONDITION_ATTRIBUTE_NAME = "NUnit.Framework.PostconditionAttribute";
+        private List<string> _listNotPass;
+
+        //Save the information of every single test case
+        private List<TestcaseInfo> _tcInfoList;
+        private List<string> _currentTCInfo;
+
+        private static WearableManualTestNUI _instance;
+        private static Object _lockObject = new object();
+
+        //Show the result of all the test case
+        private TextLabel _summaryLabel1, _summaryLabel2, _description;
+        private View _initView;
+        private View _detailView;\r
+        private FlexibleView _initList;
+        private ListBridge _adapter;
+        private FlexibleView _detailList;
+        private DetailListBridge _adapter_detail;
+        private View _caseView;
+        private Button _run;
+        private Button _runButton;
+
+        //Always save the current TC number;
+        private int _currentTCNum = 0;
+        private static int _detailScrollHeight = 60;
+
+        public static WearableManualTestNUI GetInstance()
+        {
+            lock (_lockObject)
+            {
+                if (_instance == null)
+                {
+                    _instance = new WearableManualTestNUI();
+                }
+            }
+            return _instance;
+        }
+
+        private WearableManualTestNUI()
+        {
+            Initialize();
+        }
+        public void Initialize()
+        {
+            Window.Instance.BackgroundColor = new Color(0.1f, 0.1f, 0.1f, 1.0f);
+            Tizen.Log.Fatal("NUI", "Initialize=========================================");
+            RunType.Value = RunType.MANUAL;
+            _tRunner = new TRunner();
+            _tRunner.LoadTestsuite();
+            _tRunner.SingleTestDone += OnSingleTestDone;
+            _listNotPass = new List<string>();
+            _tcIDList = new List<string>();
+            _listItem = new List<ItemData>();
+            _listNotPass = TSettings.GetInstance().GetNotPassListManual();
+            int count = 0;
+            foreach (var tc in _listNotPass)
+            {
+                _listItem.Add(new ItemData { No = count, TCName = tc, Result = StrResult.NOTRUN });
+                _tcIDList.Add(tc);
+                count++;
+            }
+            Tizen.Log.Fatal("NUI", "TCT : count:" + count.ToString());
+            foreach (String nameTc in _tcIDList)
+            {
+                Tizen.Log.Fatal("NUI", "TCT : TCName:" + nameTc.ToString());
+            }
+
+
+            _tsettings = TSettings.GetInstance();
+            _tsettings.IsManual = true;
+
+            InitData();
+            _caseView = new View();
+            Window.Instance.GetDefaultLayer().Add(_caseView);
+            Window window = Window.Instance;
+
+            _summaryLabel1 = new TextLabel();
+            _summaryLabel1.TextColor = Color.White;
+            _summaryLabel1.PointSize = 5.0f;
+            _summaryLabel1.Size2D = new Size2D(200, 30);
+            _summaryLabel1.ParentOrigin = ParentOrigin.TopLeft;
+            _summaryLabel1.PivotPoint = PivotPoint.TopLeft;
+            _summaryLabel1.Position = new Position(70, 12, 0);
+            _summaryLabel1.HorizontalAlignment = HorizontalAlignment.Center;
+            _summaryLabel1.VerticalAlignment = VerticalAlignment.Center;
+
+            _summaryLabel2 = new TextLabel();
+            _summaryLabel2.TextColor = Color.White;
+            _summaryLabel2.PointSize = 5.0f;
+            _summaryLabel2.Size2D = new Size2D(300, 30);
+            _summaryLabel2.ParentOrigin = ParentOrigin.TopLeft;
+            _summaryLabel2.PivotPoint = PivotPoint.TopLeft;
+            _summaryLabel2.Position = new Position(20, 33, 0);
+            _summaryLabel2.HorizontalAlignment = HorizontalAlignment.Center;
+            _summaryLabel2.VerticalAlignment = VerticalAlignment.Center;
+
+            SetSummaryResult();
+            Window.Instance.GetDefaultLayer().Add(_summaryLabel1);
+            Window.Instance.GetDefaultLayer().Add(_summaryLabel2);
+
+            _initView = new View();
+
+            _initView.Size2D = new Size2D((int)Window.Instance.Size.Width, 200);
+            _initView.ParentOrigin = ParentOrigin.TopLeft;
+            _initView.PivotPoint = PivotPoint.TopLeft;
+            _initView.Position = new Position(0.0f, 60.0f, 0.0f);
+            InitializeFirstPage();
+            _initView.Show();
+
+            _detailView = new View();
+            _detailView.Size2D = new Size2D((int)Window.Instance.Size.Width, (int)Window.Instance.Size.Height - 65);
+            _detailView.ParentOrigin = ParentOrigin.TopLeft;
+            _detailView.PivotPoint = PivotPoint.TopLeft;
+            _detailView.Position = new Position(0.0f, 70.0f, 0.0f);
+            InitializeDetailPage();
+            _detailView.Hide();
+
+            window.GetDefaultLayer().Add(_initView);
+            window.GetDefaultLayer().Add(_detailView);
+        }\r
+\r
+        void SetCommonButtonStyle(Button btn, string text)
+        {
+            if (!btn) return;
+            btn.Text = text;
+            btn.PointSize = 4.0f;
+            btn.TextColor = new Color(0, 0, 0, 1);
+            btn.BackgroundImage = Tizen.Applications.Application.Current.DirectoryInfo.Resource + "/images/controller_btn_check_on.png";
+            btn.BackgroundImageBorder = new Rectangle(5, 5, 5, 5);
+            btn.TextColor = Color.White;
+        }
+
+        void InitializeFirstPage()
+        {
+            //Create Run Button, when you Click it, then the first test case will be executed.
+            _doneButton = new Button(new ButtonStyle());
+            _doneButton.Position = new Position(0, 0);\r
+            _doneButton.Size = new Size(120, 60);
+            SetCommonButtonStyle(_doneButton, "Done");\r
+            _doneButton.ClickEvent += (obj, ee) =>
+            {
+                TSettings.GetInstance().SubmitManualResult();
+            };
+
+            _run = new Button(new ButtonStyle());
+            _run.Position2D = new Position2D(150, 0);\r
+            _run.Size = new Size(120, 60);\r
+            SetCommonButtonStyle(_run, "Runner");
+            _run.ClickEvent += (obj, ee) =>
+            {
+                Tizen.Log.Fatal("NUI", "Check all the test case from the first one.");
+                _currentTCNum = 0;
+                _initView.Hide();
+                _caseView.Hide();
+                UpdateDetailPage();
+                _detailView.Show();
+            };
+
+            CreateInitList();
+
+            _initView.Add(_doneButton);
+            _initView.Add(_run);
+            _initView.Add(_initList);
+            Tizen.Log.Fatal("NUI", "TCT : InitializeFirstPage:");
+        }
+
+        //Update the Test Page before you want to show it(Click Run/Pre/nect Button, or Click on item in the List).
+        void UpdateDetailPage()
+        {
+            UpdateCurrentTCInfo();
+            Tizen.Log.Fatal("NUI", "UpdateDetailPage::::::::::::::::::::::");
+            CreateTestCase();
+        }
+
+        void InitializeDetailPage()
+        {
+            _description = new TextLabel();
+            _description.TextColor = Color.White;
+            _description.PointSize = 3.0f;
+            _description.ParentOrigin = ParentOrigin.TopLeft;
+            _description.PivotPoint = PivotPoint.TopLeft;
+            _description.Size2D = new Size2D(200, 20);
+            _description.Position2D = new Position2D(50, 0);
+            _detailView.Add(_description);
+
+            CreateDetailList();
+            //To Place the function button, such as PASS, FAIL.....
+            CreateButtons();
+        }
+
+        //To show the detail information of the test case
+        //Preconditions
+        //Steps
+        //PostConditions
+        void CreateTestCase()
+        {
+            if (_detailList)
+            {
+                _detailView.Remove(_detailList);
+                _detailList.Dispose();
+            }
+            Tizen.Log.Fatal("NUI", "Print the CurrentTCNum here::" + _currentTCNum);
+            CreateDetailList();
+            if (_notRun)
+            {
+                _notRun.Text = _listItem[_currentTCNum].Result;
+            }
+        }
+        private TextLabel CreateTextLabel(string textStr, int left)
+        {
+            TextLabel text = new TextLabel();
+            text.TextColor = Color.White;
+            text.ParentOrigin = ParentOrigin.TopLeft;
+            text.PivotPoint = PivotPoint.TopLeft;
+            text.Text = textStr;
+            text.PointSize = 5.0f;
+            text.VerticalAlignment = VerticalAlignment.Bottom;
+            text.HorizontalAlignment = HorizontalAlignment.Center;
+            text.Size2D = new Size2D(30, 30);
+            text.Position2D = new Position2D(left, 0);
+            return text;
+        }
+        //Create all the function buttons here, such as PASS, FAIL.....
+        void CreateButtons()
+        {
+            _notRun = new TextLabel();
+            _notRun.TextColor = Color.White;
+            _notRun.Size = new Size(40, 30);
+            _notRun.PointSize = 2.5f;
+            _notRun.Position = new Position(100, 32);
+            _notRun.HorizontalAlignment = HorizontalAlignment.Center;
+            _notRun.VerticalAlignment = VerticalAlignment.Center;
+            _notRun.MultiLine = true;
+            _notRun.Text = "Not Run";
+            _passButton = new Button(new ButtonStyle());
+            SetCommonButtonStyle(_passButton, "P");
+            _passButton.Size = new Size(70, 30);
+            _passButton.Position = new Position(0, 0);\r
+            _passButton.ClickEvent += (obj, ee) =>
+            {
+                Clear();
+                if (!ManualTest.IsConfirmed())
+                {
+                    _tsettings.TCResult = StrResult.PASS;
+                    ManualTest.Confirm();
+                }
+                Tizen.Log.Fatal("TBT", "Pass Button clicked!");
+            };
+
+            _failButton = new Button(new ButtonStyle());
+            SetCommonButtonStyle(_failButton, "F");
+            _failButton.Size = new Size(70, 30);
+            _failButton.Position = new Position(72, 0);
+            _failButton.ClickEvent += (obj, ee) =>
+            {
+                Clear();
+                if (!ManualTest.IsConfirmed())
+                {
+                    _tsettings.TCResult = StrResult.FAIL;
+                    ManualTest.Confirm();
+                }
+                Tizen.Log.Fatal("TBT", "Fail Button clicked!");
+            };
+
+            _blockButton = new Button(new ButtonStyle());
+            SetCommonButtonStyle(_blockButton, "B");
+            _blockButton.Size = new Size(70, 30);
+            _blockButton.Position = new Position(144, 0);
+            _blockButton.ClickEvent += (obj, ee) =>
+            {
+                Clear();
+                if (!ManualTest.IsConfirmed())
+                {
+                    _tsettings.TCResult = StrResult.BLOCK;
+                    ManualTest.Confirm();
+                }
+            };
+
+            _runButton = new Button(new ButtonStyle());
+            SetCommonButtonStyle(_runButton, "R");
+            _runButton.Size = new Size(70, 30);
+            _runButton.Position = new Position(216, 0);
+            _runButton.ClickEvent += (obj, ee) =>
+            {
+                Clear();
+                _tsettings.Testcase_ID = _tcIDList[_currentTCNum];
+                _tsettings.TCResult = "";
+                _tRunner.Execute();
+            };
+
+            _homeButton = new Button(new ButtonStyle());
+            SetCommonButtonStyle(_homeButton, "H");
+            _homeButton.Size = new Size(70, 30);
+            _homeButton.Position = new Position(0, 32);
+            _homeButton.ClickEvent += (obj, ee) =>
+            {
+                Clear();
+                if (!ManualTest.IsConfirmed())
+                {
+                    _tsettings.TCResult = StrResult.NOTRUN;
+                    ManualTest.Confirm();
+                }
+                else
+                {
+                    _detailView.Hide();
+                    _initView.Show();
+                }
+            };
+
+            _preButton = new Button(new ButtonStyle());\r
+            SetCommonButtonStyle(_preButton, "<<");
+            _preButton.Size = new Size(60, 30);
+            _preButton.Position = new Position(160, 32);
+            _preButton.ClickEvent += (obj, ee) =>
+            {
+                Clear();
+                if (!ManualTest.IsConfirmed())
+                {
+                    _tsettings.TCResult = StrResult.NOTRUN;
+                    ManualTest.Confirm();
+                }
+                else
+                {
+                    if (_currentTCNum != 0)
+                    {
+                        _currentTCNum--;
+                        _notRun.Text = _listItem[_currentTCNum].Result;
+                        ManualTest.Confirm();
+                        UpdateDetailPage();
+                    }
+                }
+            };
+
+            _nextButton = new Button(new ButtonStyle());
+            SetCommonButtonStyle(_nextButton, ">>");
+            _nextButton.Size = new Size(60, 30);
+            _nextButton.Position = new Position(222, 32);
+            _nextButton.ClickEvent += (obj, ee) =>
+            {
+                Clear();
+                if (!ManualTest.IsConfirmed())
+                {
+                    _tsettings.TCResult = StrResult.NOTRUN;
+                    ManualTest.Confirm();
+                }
+                if (_currentTCNum + 1 != ResultNumber.Total)
+                {
+                    Tizen.Log.Fatal("NUI", "Print the [not run] CurrentTCNum::" + _currentTCNum);
+                    _currentTCNum++;
+                    _notRun.Text = _listItem[_currentTCNum].Result;
+                    UpdateDetailPage();
+                }
+            };
+
+            View buttonView = new View();
+            buttonView.ParentOrigin = ParentOrigin.TopLeft;
+            buttonView.PivotPoint = PivotPoint.TopLeft;
+            buttonView.Size2D = new Size2D(Window.Instance.Size.Width, 80);
+            buttonView.Position2D = new Position2D(30, 170);
+
+            buttonView.Add(_passButton);
+            buttonView.Add(_failButton);
+            buttonView.Add(_blockButton);
+            buttonView.Add(_runButton);
+            buttonView.Add(_homeButton);
+            buttonView.Add(_notRun);
+            buttonView.Add(_preButton);
+            buttonView.Add(_nextButton);
+            _detailView.Add(buttonView);
+        }
+
+        public void ExecuteTC(View view)
+        {
+            Tizen.Log.Fatal("ManualTCT", "Execute the manual test case!");
+
+            _caseView = view;
+            _caseView.ParentOrigin = Position.ParentOriginTopLeft;
+            _caseView.PivotPoint = PivotPoint.TopLeft;
+            _caseView.Position = new Position(40.0f, 120.0f, 0.0f);
+            _detailView.Add(_caseView);
+            _caseView.Show();
+        }
+
+        private void Clear()
+        {
+            if (_caseView.IsOnWindow == true)
+            {
+                _detailView.Remove(_caseView);
+            }
+        }
+
+        public void ClearTestCase(View view)
+        {
+            Tizen.Log.Fatal("NUI", "Clear test case!");
+            _detailView.Remove(view);
+        }
+
+        //Use to update the _summaryLabel.
+        private void SetSummaryResult()
+        {
+            ResultNumber.NotRun = ResultNumber.Total - ResultNumber.Pass - ResultNumber.Fail - ResultNumber.Block;
+            _summaryLabel1.Text = "T : " + ResultNumber.Total + ", P : " + ResultNumber.Pass;
+            _summaryLabel2.Text = "F : " + ResultNumber.Fail + ", B : " + ResultNumber.Block + ", NR: " + ResultNumber.NotRun;
+            Tizen.Log.Fatal("ManualTCT", "Set the result Text");
+        }
+
+        private void CreateInitList()
+        {
+            Tizen.Log.Fatal("ManualTCT", "CreateInitList");\r
+            _initList = new FlexibleView();\r
+            _initList.ParentOrigin = ParentOrigin.TopLeft;
+            _initList.PivotPoint = PivotPoint.TopLeft;\r
+            _initList.Size = new Size(Window.Instance.Size.Width, 400);\r
+            _initList.Position = new Position(0, 80);\r
+            _initList.ClippingMode = ClippingModeType.ClipChildren;\r
+            _adapter = new ListBridge(_tcIDList, _listItem);\r
+            _initList.SetAdapter(_adapter);\r
+            LinearLayoutManager layoutManager = new LinearLayoutManager(LinearLayoutManager.VERTICAL);\r
+            _initList.SetLayoutManager(layoutManager);\r
+            _initList.FocusedItemIndex = 0;
+            _initList.ItemClicked += (obj, e) =>\r
+            {\r
+                Button button = e.ClickedView.ItemView as Button;\r
+                if (button)\r
+                {\r
+                    Tizen.Log.Fatal("TBT", "Item clicked!!::" + button.Name);\r
+                    _currentTCNum = int.Parse(button.Name);\r
+                    _initView.Hide();\r
+                    UpdateDetailPage();\r
+                    _caseView.Hide();\r
+                    _detailView.Show();\r
+                }\r
+            };
+        }
+
+        private void CreateDetailList()
+        {
+            Tizen.Log.Fatal("NUI", "Print the CreateDetailList::count: " + _currentTCInfo.Count);\r
+            _description.Text = _currentTCInfo[0];\r
+\r
+            _detailList = new FlexibleView();\r
+            _detailList.ParentOrigin = ParentOrigin.TopLeft;
+            _detailList.PivotPoint = PivotPoint.TopLeft;\r
+            _detailList.Size = new Size(Window.Instance.Size.Width - 100, _detailScrollHeight);\r
+            _detailList.Position = new Position(30, 20);\r
+            _detailList.BackgroundColor = Color.Black;\r
+            _detailList.ClippingMode = ClippingModeType.ClipChildren;\r
+            _adapter_detail = new DetailListBridge(_currentTCInfo);\r
+            _detailList.SetAdapter(_adapter_detail);\r
+            LinearLayoutManager layoutManager = new LinearLayoutManager(LinearLayoutManager.VERTICAL);\r
+            _detailList.SetLayoutManager(layoutManager);
+            _detailView.Add(_detailList);
+        }
+
+        //Init all the data, should be offered by Test Framework
+        void InitData()
+        {
+            ResultNumber.Total = _tcIDList.Count;
+            ResultNumber.Pass = 0;
+            ResultNumber.Fail = 0;
+            ResultNumber.Block = 0;
+            _tcInfoList = new List<TestcaseInfo>();
+            foreach (var testcaseItem in _listItem)
+            {
+                foreach (KeyValuePair<string, ITest> pair in _tRunner.GetTestList())
+                {
+                    if (testcaseItem.TCName.Equals(pair.Key))
+                    {
+                        List<string> preconditions = new List<string>();
+                        preconditions.Add("Preconditions:");
+                        List<string> steps = new List<string>();
+                        steps.Add("Steps:");
+                        List<string> postconditions = new List<string>();
+                        postconditions.Add("Postconditions:\n");
+                        IEnumerator<CustomAttributeData> customAttributes = pair.Value.Method.MethodInfo.CustomAttributes.GetEnumerator();
+                        while (customAttributes.MoveNext())
+                        {
+                            if (customAttributes.Current.AttributeType.FullName.Equals(STEP_ATTRIBUTE_NAME))
+                            {
+                                steps.Add(customAttributes.Current.ConstructorArguments[0].Value + "." + customAttributes.Current.ConstructorArguments[1].Value);
+                            }
+                            else if (customAttributes.Current.AttributeType.FullName.Equals(PRECONDITION_ATTRIBUTE_NAME))
+                            {
+                                preconditions.Add(customAttributes.Current.ConstructorArguments[0].Value + "." + customAttributes.Current.ConstructorArguments[1].Value);
+                            }
+                            else if (customAttributes.Current.AttributeType.FullName.Equals(POSTCONDITION_ATTRIBUTE_NAME))
+                            {
+                                postconditions.Add(customAttributes.Current.ConstructorArguments[0].Value + "." + customAttributes.Current.ConstructorArguments[1].Value);
+                            }
+                        }
+                        _tcInfoList.Add(new TestcaseInfo
+                        {
+                            TestcaseName = pair.Key,
+                            Preconditions = preconditions,
+                            Steps = steps,
+                            Postconditions = postconditions,
+                        });
+                        break;
+                    }
+                }
+                UpdateCurrentTCInfo();
+            }
+        }
+
+        //The data in CurrentTCInfo list will be show in _detailList.
+        void UpdateCurrentTCInfo()
+        {
+            _currentTCInfo = new List<string>();
+            Tizen.Log.Fatal("NUI", "Print the CurrentTCNum::" + _currentTCNum);
+            _currentTCInfo.Add("DESCRIPTION:#" + (_currentTCNum + 1));
+            string[] str = _tcInfoList[_currentTCNum].TestcaseName.Split('.');
+            _currentTCInfo.Add("CLASS:" + str[str.Length - 2]);
+            _currentTCInfo.Add("METHOD:" + str[str.Length - 1]);
+            for (int index = 0; index < _tcInfoList[_currentTCNum].Preconditions.Count; index++)
+            {
+                _currentTCInfo.Add(_tcInfoList[_currentTCNum].Preconditions[index]);
+            }
+            for (int index = 0; index < _tcInfoList[_currentTCNum].Steps.Count; index++)
+            {
+                _currentTCInfo.Add(_tcInfoList[_currentTCNum].Steps[index]);
+            }
+            for (int index = 0; index < _tcInfoList[_currentTCNum].Postconditions.Count; index++)
+            {
+                _currentTCInfo.Add(_tcInfoList[_currentTCNum].Postconditions[index]);
+            }
+            Tizen.Log.Fatal("NUI", "the CurrentTCNum::" + _currentTCNum);
+        }
+
+        private void OnSingleTestDone(object sender, SingleTestDoneEventArgs e)
+        {
+            //Test when will this event will be triggered
+            Tizen.Log.Fatal("NUI", "OnSingleTestDone has been triggered!");
+            // check old result
+            if (_listItem[_currentTCNum].Result.Contains(StrResult.FAIL))
+            {
+                ResultNumber.Fail = ResultNumber.Fail - 1;
+            }
+            else if (_listItem[_currentTCNum].Result.Contains(StrResult.PASS))
+            {
+                ResultNumber.Pass = ResultNumber.Pass - 1;
+            }
+            else if (_listItem[_currentTCNum].Result.Contains(StrResult.BLOCK))
+                ResultNumber.Block = ResultNumber.Block - 1;
+
+            // Update new result
+            _listItem[_currentTCNum].Result = e.Result;
+            if (e.Result.Contains(StrResult.PASS))
+            {
+                ResultNumber.Pass += 1;
+            }
+            else if (e.Result.Contains(StrResult.FAIL))
+            {
+                ResultNumber.Fail += 1;
+            }
+            else if (e.Result.Contains(StrResult.BLOCK))
+            {
+                ResultNumber.Block += 1;
+            }\r
+\r
+            FlexibleViewViewHolder holder = _initList?.FindViewHolderForAdapterPosition(_currentTCNum);\r
+            if (holder != null)\r
+            {\r
+                string testcaseName = "#." + (_currentTCNum + 1).ToString() + _tcIDList[_currentTCNum];\r
+                string resultText = "[" + _listItem[(int)_currentTCNum].Result + "]";\r
+                string text = testcaseName + resultText;\r
+                Button btn = holder.ItemView as Button;\r
+                btn.Text = text;\r
+                _adapter?.UpdateItemData(_currentTCNum, _listItem);\r
+            }
+            SetSummaryResult();
+            _notRun.Text = _listItem[_currentTCNum].Result;
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/res/images/controller_btn_check_on.png b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/res/images/controller_btn_check_on.png
new file mode 100644 (file)
index 0000000..9a3af3a
Binary files /dev/null and b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/res/images/controller_btn_check_on.png differ
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/res/images/rectangle_btn_shadow.png b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/res/images/rectangle_btn_shadow.png
new file mode 100644 (file)
index 0000000..df385f1
Binary files /dev/null and b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/res/images/rectangle_btn_shadow.png differ
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/res/images/rectangle_point_btn_normal.png b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/res/images/rectangle_point_btn_normal.png
new file mode 100644 (file)
index 0000000..6779639
Binary files /dev/null and b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/res/images/rectangle_point_btn_normal.png differ
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/res/images/rectangle_toggle_btn_normal.png b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/res/images/rectangle_toggle_btn_normal.png
new file mode 100644 (file)
index 0000000..a73694b
Binary files /dev/null and b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/res/images/rectangle_toggle_btn_normal.png differ
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/shared/res/Tizen.NUI.WindowSystem.Manual.Tests.png b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/shared/res/Tizen.NUI.WindowSystem.Manual.Tests.png
new file mode 100755 (executable)
index 0000000..9765b1b
Binary files /dev/null and b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/shared/res/Tizen.NUI.WindowSystem.Manual.Tests.png differ
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/testcase/TSQuickPanelClient.cs b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/testcase/TSQuickPanelClient.cs
new file mode 100644 (file)
index 0000000..18c7552
--- /dev/null
@@ -0,0 +1,69 @@
+using NUnit.Framework;
+using NUnit.Framework.TUnit;
+using System;
+using Tizen.NUI;
+using Tizen.NUI.UIComponents;
+using Tizen.NUI.BaseComponents;
+using System.Threading.Tasks;
+using Tizen.NUI.WindowSystem;
+using ElmSharp;\r
+using Microsoft.VisualBasic.FileIO;\r
+\r
+namespace Tizen.NUI.WindowSystem.Tests
+{
+    [TestFixture]
+    [Description("Tizen.NUI.WindowSystem.Shell.QuickPanelClient Tests")]
+    public class QuickPanelClientTests
+    {
+        private string TAG = "NUI";
+
+        [SetUp]
+        public void Init()
+        {
+            Tizen.Log.Info(TAG, "Init() is called!");
+        }
+
+        [TearDown]
+        public void Destroy()
+        {
+            Tizen.Log.Info(TAG, "Destroy() is called!");
+        }
+
+        public void OnOrientationEvent(object sender, Window.WindowOrientation state)
+        {
+            ManualTest.Confirm();
+        }
+
+        [Test]
+        [Category("P1")]
+        [Description("Check whether Orientation event handler add/remove successfully or not.")]
+        [Property("SPEC", "Tizen.NUI.WindowSystem.Shell.QuickPanelClient.OrientationChanged E")]
+        [Property("SPEC_URL", "-")]
+        [Property("CRITERIA", "EVL")]
+        [Property("AUTHOR", "JeongHyun Kang, jhyuni.kang@samsung.com")]
+        [Precondition(1, "Turn on the Auto Rotation option")]
+        [Precondition(2, "Currently this TC is only run in mobile profile. If not, this TC will be PASS.")]
+        [Step(1, "Click run TC")]
+        [Step(2, "Rotate Device")]
+        [Step(3, "Check the label on the right of the home button is changed to \"Pass\"")]
+        [Postcondition(1, "N/A")]
+        public async Task OrientationChanged_EVENT()
+        {
+            /* TEST CODE */
+            Shell.TizenShell tzsh = new Shell.TizenShell();
+            Window win = NUIApplication.GetDefaultWindow();
+            var qpClient = new Shell.QuickPanelClient(tzsh, win, Shell.QuickPanelClient.Types.SystemDefault);
+
+            if (!ManualTest.IsMobile())\r
+            {\r
+                ManualTest.Confirm();\r
+            }
+            else\r
+            {\r
+                qpClient.OrientationChanged += OnOrientationEvent;\r
+                await ManualTest.WaitForConfirm();\r
+                qpClient.OrientationChanged -= OnOrientationEvent;\r
+            }
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/tizen-manifest.xml b/tct-suite-vs/Tizen.NUI.WindowSystem.Manual.Tests/tizen-manifest.xml
new file mode 100755 (executable)
index 0000000..6cdf28b
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="8" package="Tizen.NUI.WindowSystem.Manual.Tests" version="1.0.0">
+    <profile name="common" />
+    <ui-application appid="Tizen.NUI.WindowSystem.Manual.Tests"
+                    exec="Tizen.NUI.WindowSystem.Manual.Tests.dll"
+                    type="dotnet"
+                    multiple="false"
+                    taskmanage="true"
+                    launch_mode="single">
+    <icon>Tizen.NUI.WindowSystem.Manual.Tests.png</icon>
+    <label>Tizen.NUI.WindowSystem.Manual.Tests</label>
+    </ui-application>
+    <privileges>
+        <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
+    </privileges>
+</manifest>
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Tests/Program.cs b/tct-suite-vs/Tizen.NUI.WindowSystem.Tests/Program.cs
new file mode 100644 (file)
index 0000000..f7bb57a
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ *  Copyright (c) 2018 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 NUnitLite.TUnit;
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+
+namespace Tizen.NUI.Test
+{
+    class Program : Tizen.NUI.NUIApplication
+    {
+        public static Window win;
+        static TextLabel MainTitle;
+        static readonly string Title = "Tizen.NUI.WindowSystem Auto TCT \n\n";
+        static readonly float TextSize = 10.0f;
+
+        protected override void OnCreate()
+        {
+            base.OnCreate();
+            Random rand = new Random();
+
+            Console.WriteLine("TCT : OnCreate()");
+            win = this.Window;
+            win.Title = "NUIWindowSystemTest";
+            win.BackgroundColor = Color.Red;
+
+            MainTitle = new TextLabel();
+            MainTitle.MultiLine = true;
+            MainTitle.Text = Title;
+            MainTitle.PixelSize = TextSize;
+            MainTitle.BackgroundColor = new Color(rand.Next(250) / 255.0f, rand.Next(250) / 255.0f, rand.Next(250) / 255.0f, 1.0f);
+            MainTitle.Size2D = new Size2D(win.WindowSize.Width / 2, win.WindowSize.Height / 2);
+            MainTitle.PositionUsesPivotPoint = true;
+            MainTitle.ParentOrigin = ParentOrigin.Center;
+            MainTitle.PivotPoint = PivotPoint.Center;
+            win.Add(MainTitle);
+        }
+
+        protected override void OnResume()
+        {
+            base.OnResume();
+
+            TRunner t = new TRunner();
+            t.LoadTestsuite();
+            t.Execute();
+        }
+
+        protected override void OnTerminate()
+        {
+            base.OnTerminate();
+            Exit();
+        }
+
+        static void Main(string[] args)
+        {
+            Console.WriteLine("TCT : Main()");
+            var app = new Program();
+            app.Run(args);
+        }
+    }
+}
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Tests/Tizen.NUI.WindowSystem.Tests.csproj b/tct-suite-vs/Tizen.NUI.WindowSystem.Tests/Tizen.NUI.WindowSystem.Tests.csproj
new file mode 100644 (file)
index 0000000..add5f5c
--- /dev/null
@@ -0,0 +1,41 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <!-- Property Group for .NET Core Project -->
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>tizen80</TargetFramework>
+    <TargetFrameworkIdentifier>Tizen</TargetFrameworkIdentifier>
+  </PropertyGroup>
+
+  <!-- Property Group for Tizen Project -->
+  <PropertyGroup>
+    <TizenCreateTpkOnBuild>true</TizenCreateTpkOnBuild>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugType>portable</DebugType>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>None</DebugType>
+  </PropertyGroup>
+
+  <ItemGroup>
+       <Folder Include="lib\" />
+  </ItemGroup>
+
+  <Import Project="..\Common\dependencies.props" />
+
+  <ItemGroup>
+    <PackageReference Include="Tizen.NET" Version="$(TizenNETVersion)">
+      <ExcludeAssets>Runtime</ExcludeAssets>
+    </PackageReference>
+    <PackageReference Include="Tizen.NET.Sdk" Version="$(TizenNETSdkVersion)" />
+  </ItemGroup>
+
+  <!-- Include Nuget Package for Tizen Project building -->
+  <ItemGroup>
+         <ProjectReference Include="..\nunit.framework\nunit.framework.csproj" />
+         <ProjectReference Include="..\nunitlite\nunitlite.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Tests/Tizen.NUI.WindowSystem.Tests.sln b/tct-suite-vs/Tizen.NUI.WindowSystem.Tests/Tizen.NUI.WindowSystem.Tests.sln
new file mode 100644 (file)
index 0000000..a7f307f
--- /dev/null
@@ -0,0 +1,78 @@
+Microsoft Visual Studio Solution File, Format Version 12.00\r
+# Visual Studio Version 16\r
+VisualStudioVersion = 16.0.29920.165\r
+MinimumVisualStudioVersion = 15.0.26124.0\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI.WindowSystem.Tests", "Tizen.NUI.WindowSystem.Tests.csproj", "{D92BEEAC-3B2A-45F8-8C53-53B92550404A}"\r
+EndProject\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunit.framework", "..\nunit.framework\nunit.framework.csproj", "{B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}"\r
+EndProject\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nunitlite", "..\nunitlite\nunitlite.csproj", "{FDB8025A-C029-461F-895E-287B4C65939B}"\r
+EndProject\r
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutoTemplate", "..\Template\AutoTemplate\AutoTemplate.csproj", "{B11ABB0C-C3C1-4B5C-8251-A15628A775F3}"\r
+EndProject\r
+Global\r
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+               Debug|Any CPU = Debug|Any CPU\r
+               Debug|x64 = Debug|x64\r
+               Debug|x86 = Debug|x86\r
+               Release|Any CPU = Release|Any CPU\r
+               Release|x64 = Release|x64\r
+               Release|x86 = Release|x86\r
+       EndGlobalSection\r
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x64.Build.0 = Release|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {D92BEEAC-3B2A-45F8-8C53-53B92550404A}.Release|x86.Build.0 = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x64.Build.0 = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {B9E7C1FD-CB38-42F7-AC43-7BD2E5B4D216}.Release|x86.Build.0 = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x64.Build.0 = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {FDB8025A-C029-461F-895E-287B4C65939B}.Release|x86.Build.0 = Release|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Debug|Any CPU.Build.0 = Debug|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Debug|x64.ActiveCfg = Debug|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Debug|x64.Build.0 = Debug|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Debug|x86.ActiveCfg = Debug|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Debug|x86.Build.0 = Debug|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Release|Any CPU.ActiveCfg = Release|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Release|Any CPU.Build.0 = Release|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Release|x64.ActiveCfg = Release|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Release|x64.Build.0 = Release|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Release|x86.ActiveCfg = Release|Any CPU\r
+               {B11ABB0C-C3C1-4B5C-8251-A15628A775F3}.Release|x86.Build.0 = Release|Any CPU\r
+       EndGlobalSection\r
+       GlobalSection(SolutionProperties) = preSolution\r
+               HideSolutionNode = FALSE\r
+       EndGlobalSection\r
+       GlobalSection(ExtensibilityGlobals) = postSolution\r
+               SolutionGuid = {ED382B91-9930-40B6-B3D7-362304C78680}\r
+       EndGlobalSection\r
+EndGlobal\r
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Tests/shared/res/Tizen.NUI.WindowSystem.Tests.png b/tct-suite-vs/Tizen.NUI.WindowSystem.Tests/shared/res/Tizen.NUI.WindowSystem.Tests.png
new file mode 100755 (executable)
index 0000000..9765b1b
Binary files /dev/null and b/tct-suite-vs/Tizen.NUI.WindowSystem.Tests/shared/res/Tizen.NUI.WindowSystem.Tests.png differ
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Tests/testcase/TSQuickPanelClient.cs b/tct-suite-vs/Tizen.NUI.WindowSystem.Tests/testcase/TSQuickPanelClient.cs
new file mode 100644 (file)
index 0000000..da4adfe
--- /dev/null
@@ -0,0 +1,409 @@
+using NUnit.Framework;\r
+using NUnit.Framework.TUnit;\r
+using System;\r
+using Tizen.NUI;\r
+using Tizen.NUI.UIComponents;\r
+using Tizen.NUI.BaseComponents;\r
+using System.Threading.Tasks;\r
+using Tizen.NUI.WindowSystem;\r
+\r
+namespace Tizen.NUI.WindowSystem.Tests\r
+{\r
+    [TestFixture]\r
+    [Description("Tizen.NUI.WindowSystem.Shell.QuickPanelClient Tests")]\r
+    public class QuickPanelClientTests\r
+    {\r
+        private string TAG = "NUI";\r
+        private bool _triggered = false;\r
+\r
+        [SetUp]\r
+        public void Init()\r
+        {\r
+            Tizen.Log.Info(TAG, "Init() is called!");\r
+        }\r
+\r
+        [TearDown]\r
+        public void Destroy()\r
+        {\r
+            Tizen.Log.Info(TAG, "Destroy() is called!");\r
+        }\r
+\r
+        [Test]\r
+        [Category("P1")]\r
+        [Description("Create a QuickPanelClient. Check whether QuickPanelClient is successfully created or not.")]\r
+        [Property("SPEC", "Tizen.NUI.WindowSystem.Shell.QuickPanelClient.QuickPanelClient C")]\r
+        [Property("SPEC_URL", "-")]\r
+        [Property("CRITERIA", "CONSTR")]\r
+        [Property("COVPARAM", "TizenShell, Window, Types")]\r
+        [Property("AUTHOR", "JeongHyun Kang, jhyuni.kang@samsung.com")]\r
+        public void QuickPanelClient_INIT()\r
+        {\r
+            /* TEST CODE */\r
+            Shell.TizenShell tzsh = new Shell.TizenShell();\r
+            Window win = NUIApplication.GetDefaultWindow();\r
+            var qpClientDefault = new Shell.QuickPanelClient(tzsh, win, Shell.QuickPanelClient.Types.SystemDefault);\r
+            Assert.IsNotNull(qpClientDefault, "The instance should be not null");\r
+            Assert.IsInstanceOf<Shell.QuickPanelClient>(qpClientDefault, "Should return QuickPanelClient instance.");\r
+\r
+            var qpClientContext = new Shell.QuickPanelClient(tzsh, win, Shell.QuickPanelClient.Types.ContextMenu);\r
+            Assert.IsNotNull(qpClientContext, "The instance should be not null");\r
+            Assert.IsInstanceOf<Shell.QuickPanelClient>(qpClientContext, "Should return QuickPanelClient instance.");\r
+\r
+            var qpClientApps = new Shell.QuickPanelClient(tzsh, win, Shell.QuickPanelClient.Types.AppsMenu);\r
+            Assert.IsNotNull(qpClientApps, "The instance should be not null");\r
+            Assert.IsInstanceOf<Shell.QuickPanelClient>(qpClientApps, "Should return QuickPanelClient instance.");\r
+        }\r
+\r
+        [Test]\r
+        [Category("P2")]\r
+        [Description("Create a QuickPanelClient. Check whether QuickPanelClient created failed with null TizenShell or not.")]\r
+        [Property("SPEC", "Tizen.NUI.WindowSystem.Shell.QuickPanelClient.QuickPanelClient C")]\r
+        [Property("SPEC_URL", "-")]\r
+        [Property("CRITERIA", "CONSTX")]\r
+        [Property("COVPARAM", "TizenShell, Window, Types")]\r
+        [Property("AUTHOR", "JeongHyun Kang, jhyuni.kang@samsung.com")]\r
+        public void QuickPanelClient_INIT_FAILED1()\r
+        {\r
+            /* TEST CODE */\r
+            Window win = NUIApplication.GetDefaultWindow();\r
+            try\r
+            {\r
+                var qpClientDefault = new Shell.QuickPanelClient(null, win, Shell.QuickPanelClient.Types.SystemDefault);\r
+            }\r
+            catch (ArgumentNullException e)\r
+            {\r
+                Assert.Pass("ArgumentException: passed.");\r
+            }\r
+        }\r
+\r
+        [Test]\r
+        [Category("P2")]\r
+        [Description("Create a QuickPanelClient. Check whether QuickPanelClient created failed with null Window or not.")]\r
+        [Property("SPEC", "Tizen.NUI.WindowSystem.Shell.QuickPanelClient.QuickPanelClient C")]\r
+        [Property("SPEC_URL", "-")]\r
+        [Property("CRITERIA", "CONSTX")]\r
+        [Property("COVPARAM", "TizenShell, Window, Types")]\r
+        [Property("AUTHOR", "JeongHyun Kang, jhyuni.kang@samsung.com")]\r
+        public void QuickPanelClient_INIT_FAILED2()\r
+        {\r
+            /* TEST CODE */\r
+            Shell.TizenShell tzsh = new Shell.TizenShell();\r
+            try\r
+            {\r
+                var qpClientDefault = new Shell.QuickPanelClient(tzsh, null, Shell.QuickPanelClient.Types.SystemDefault);\r
+            }\r
+            catch (ArgumentNullException e)\r
+            {\r
+                Assert.Pass("ArugumentNullException: passed.");\r
+            }\r
+        }\r
+\r
+        [Test]\r
+        [Category("P2")]\r
+        [Description("Create a QuickPanelClient. Check whether QuickPanelClient created failed with Unknown Type or not.")]\r
+        [Property("SPEC", "Tizen.NUI.WindowSystem.Shell.QuickPanelClient.QuickPanelClient C")]\r
+        [Property("SPEC_URL", "-")]\r
+        [Property("CRITERIA", "CONSTX")]\r
+        [Property("COVPARAM", "TizenShell, Window, Types")]\r
+        [Property("AUTHOR", "JeongHyun Kang, jhyuni.kang@samsung.com")]\r
+        public void QuickPanelClient_INIT_FAILED3()\r
+        {\r
+            /* TEST CODE */\r
+            Shell.TizenShell tzsh = new Shell.TizenShell();\r
+            Window win = NUIApplication.GetDefaultWindow();\r
+            try\r
+            {\r
+                var qpClientDefault = new Shell.QuickPanelClient(tzsh, win, Shell.QuickPanelClient.Types.Unknown);\r
+            }\r
+            catch (ArgumentException e)\r
+            {\r
+                Assert.Pass("ArugumentException: passed.");\r
+            }\r
+        }\r
+\r
+        [Test]\r
+        [Category("P1")]\r
+        [Description("Get a visible state of quickpanel service window. Check whether getting a visible state successfully or not.")]\r
+        [Property("SPEC", "Tizen.NUI.WindowSystem.Shell.QuickPanelClient.Visible A")]\r
+        [Property("SPEC_URL", "-")]\r
+        [Property("CRITERIA", "PRO")]\r
+        [Property("AUTHOR", "JeongHyun Kang, jhyuni.kang@samsung.com")]\r
+        public void Visible_CHECK_RETURN_VALUE()\r
+        {\r
+            /* TEST CODE */\r
+            Shell.TizenShell tzsh = new Shell.TizenShell();\r
+            Window win = NUIApplication.GetDefaultWindow();\r
+            var qpClient = new Shell.QuickPanelClient(tzsh, win, Shell.QuickPanelClient.Types.SystemDefault);\r
+            var visible = Shell.QuickPanelClient.VisibleState.Unknown;\r
+\r
+            try\r
+            {\r
+                visible = qpClient.Visible;\r
+                Assert.AreNotEqual(Shell.QuickPanelClient.VisibleState.Unknown, visible, "Get a invalid visible state");\r
+            }\r
+            catch (InvalidOperationException e)\r
+            {\r
+                Tizen.Log.Info(TAG, "This system has no quickpanel: " + e.ToString());\r
+                LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "This system has no quickpanel: " + e.ToString());\r
+                Assert.Pass("This system has no quickpanel");\r
+            }\r
+            catch (ArgumentException e)\r
+            {\r
+                Tizen.Log.Error(TAG, "Caught Exception" + e.ToString());\r
+                LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Caught Exception" + e.ToString());\r
+                Assert.Fail("Caught Exception" + e.ToString());\r
+            }\r
+            catch (Exception e)\r
+            {\r
+                Assert.True(false, "should not throw exception(" + e.Message + ")");\r
+            }\r
+        }\r
+\r
+        [Test]\r
+        [Category("P1")]\r
+        [Description("Get/set a scrollable state of quickpanel service window. Check whether getting/setting a scrollable state successfully or not.")]\r
+        [Property("SPEC", "Tizen.NUI.WindowSystem.Shell.QuickPanelClient.Scrollable A")]\r
+        [Property("SPEC_URL", "-")]\r
+        [Property("CRITERIA", "PRW")]\r
+        [Property("AUTHOR", "JeongHyun Kang, jhyuni.kang@samsung.com")]\r
+        public void Scrollable_CHECK_RETURN_VALUE()\r
+        {\r
+            /* TEST CODE */\r
+            Shell.TizenShell tzsh = new Shell.TizenShell();\r
+            Window win = NUIApplication.GetDefaultWindow();\r
+            var qpClient = new Shell.QuickPanelClient(tzsh, win, Shell.QuickPanelClient.Types.SystemDefault);\r
+            var scrollable = Shell.QuickPanelClient.ScrollableState.Unknown;\r
+\r
+            try\r
+            {\r
+                scrollable = Shell.QuickPanelClient.ScrollableState.Unset;\r
+                qpClient.Scrollable = scrollable;\r
+                Assert.AreEqual(qpClient.Scrollable, scrollable, "Scrollable property is invalid");\r
+\r
+                scrollable = Shell.QuickPanelClient.ScrollableState.Set;\r
+                qpClient.Scrollable = scrollable;\r
+                Assert.AreEqual(qpClient.Scrollable, scrollable, "Scrollable property is invalid");\r
+            }\r
+            catch (InvalidOperationException e)\r
+            {\r
+                Tizen.Log.Info(TAG, "This system has no quickpanel: " + e.ToString());\r
+                LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "This system has no quickpanel: " + e.ToString());\r
+                Assert.Pass("This system has no quickpanel");\r
+            }\r
+            catch (ArgumentException e)\r
+            {\r
+                Tizen.Log.Error(TAG, "Caught Exception" + e.ToString());\r
+                LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Caught Exception" + e.ToString());\r
+                Assert.Fail("Caught Exception" + e.ToString());\r
+            }\r
+            catch (Exception e)\r
+            {\r
+                Assert.True(false, "should not throw exception(" + e.Message + ")");\r
+            }\r
+        }\r
+\r
+        [Test]\r
+        [Category("P2")]\r
+        [Description("Set a scrollable state of quickpanel service window. Check whether setting a scrollable state failed with Unknown State.")]\r
+        [Property("SPEC", "Tizen.NUI.WindowSystem.Shell.QuickPanelClient.Scrollable A")]\r
+        [Property("SPEC_URL", "-")]\r
+        [Property("CRITERIA", "PEX")]\r
+        [Property("AUTHOR", "JeongHyun Kang, jhyuni.kang@samsung.com")]\r
+        public void Scrollable_CHECK_RETURN_VALUE_FAILED()\r
+        {\r
+            /* TEST CODE */\r
+            Shell.TizenShell tzsh = new Shell.TizenShell();\r
+            Window win = NUIApplication.GetDefaultWindow();\r
+            var qpClient = new Shell.QuickPanelClient(tzsh, win, Shell.QuickPanelClient.Types.SystemDefault);\r
+            var scrollable = Shell.QuickPanelClient.ScrollableState.Unknown;\r
+\r
+            try\r
+            {\r
+                qpClient.Scrollable = scrollable;\r
+                Assert.IsTrue(false, "This operation should raise ArgumentException");\r
+            }\r
+            catch (InvalidOperationException e)\r
+            {\r
+                Tizen.Log.Info(TAG, "This system has no quickpanel: " + e.ToString());\r
+                LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "This system has no quickpanel: " + e.ToString());\r
+                Assert.Pass("This system has no quickpanel");\r
+            }\r
+            catch (ArgumentException e)\r
+            {\r
+                Assert.Pass("ArugumentException: passed.");\r
+            }\r
+            catch (Exception e)\r
+            {\r
+                Assert.True(false, "should not throw exception(" + e.Message + ")");\r
+            }\r
+        }\r
+\r
+        [Test]\r
+        [Category("P1")]\r
+        [Description("Get a orientation state of quickpanel service window. Check whether getting a orientation state successfully or not.")]\r
+        [Property("SPEC", "Tizen.NUI.WindowSystem.Shell.QuickPanelClient.Orientation A")]\r
+        [Property("SPEC_URL", "-")]\r
+        [Property("CRITERIA", "PRO")]\r
+        [Property("AUTHOR", "JeongHyun Kang, jhyuni.kang@samsung.com")]\r
+        public void Orientation_CHECK_RETURN_VALUE()\r
+        {\r
+            /* TEST CODE */\r
+            Shell.TizenShell tzsh = new Shell.TizenShell();\r
+            Window win = NUIApplication.GetDefaultWindow();\r
+            var qpClient = new Shell.QuickPanelClient(tzsh, win, Shell.QuickPanelClient.Types.SystemDefault);\r
+            var orientation = Window.WindowOrientation.Portrait;\r
+\r
+            try\r
+            {\r
+                orientation = qpClient.Orientation;\r
+                Assert.IsInstanceOf<Window.WindowOrientation>(orientation, "Should return Window.WindowOrientation instance.");\r
+            }\r
+            catch (InvalidOperationException e)\r
+            {\r
+                Tizen.Log.Info(TAG, "This system has no quickpanel: " + e.ToString());\r
+                LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "This system has no quickpanel: " + e.ToString());\r
+                Assert.Pass("This system has no quickpanel");\r
+            }\r
+            catch (ArgumentException e)\r
+            {\r
+                Tizen.Log.Error(TAG, "Caught Exception" + e.ToString());\r
+                LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Caught Exception" + e.ToString());\r
+                Assert.Fail("Caught Exception" + e.ToString());\r
+            }\r
+            catch (Exception e)\r
+            {\r
+                Assert.True(false, "should not throw exception(" + e.Message + ")");\r
+            }\r
+        }\r
+\r
+        [Test]\r
+        [Category("P1")]\r
+        [Description("Show a quickpanel service window. Check whether show a quickpanel service window successfully or not.")]\r
+        [Property("SPEC", "Tizen.NUI.WindowSystem.Shell.QuickPanelClient.Show M")]\r
+        [Property("SPEC_URL", "-")]\r
+        [Property("CRITERIA", "MR")]\r
+        [Property("AUTHOR", "JeongHyun Kang, jhyuni.kang@samsung.com")]\r
+        public void Show_CHECK()\r
+        {\r
+            /* TEST CODE */\r
+            Shell.TizenShell tzsh = new Shell.TizenShell();\r
+            Window win = NUIApplication.GetDefaultWindow();\r
+            var qpClient = new Shell.QuickPanelClient(tzsh, win, Shell.QuickPanelClient.Types.SystemDefault);\r
+\r
+            try\r
+            {\r
+                qpClient.Show();\r
+            }\r
+            catch (InvalidOperationException e)\r
+            {\r
+                Tizen.Log.Info(TAG, "This system has no quickpanel: " + e.ToString());\r
+                LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "This system has no quickpanel: " + e.ToString());\r
+                Assert.Pass("This system has no quickpanel");\r
+            }\r
+            catch (ArgumentException e)\r
+            {\r
+                Tizen.Log.Error(TAG, "Caught Exception" + e.ToString());\r
+                LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Caught Exception" + e.ToString());\r
+                Assert.Fail("Caught Exception" + e.ToString());\r
+            }\r
+            catch (Exception e)\r
+            {\r
+                Assert.True(false, "should not throw exception(" + e.Message + ")");\r
+            }\r
+        }\r
+\r
+        [Test]\r
+        [Category("P1")]\r
+        [Description("Hide a quickpanel service window. Check whether hide a quickpanel service window successfully or not.")]\r
+        [Property("SPEC", "Tizen.NUI.WindowSystem.Shell.QuickPanelClient.Hide M")]\r
+        [Property("SPEC_URL", "-")]\r
+        [Property("CRITERIA", "MR")]\r
+        [Property("AUTHOR", "JeongHyun Kang, jhyuni.kang@samsung.com")]\r
+        public void Hide_CHECK()\r
+        {\r
+            /* TEST CODE */\r
+            Shell.TizenShell tzsh = new Shell.TizenShell();\r
+            Window win = NUIApplication.GetDefaultWindow();\r
+            var qpClient = new Shell.QuickPanelClient(tzsh, win, Shell.QuickPanelClient.Types.SystemDefault);\r
+\r
+            try\r
+            {\r
+                qpClient.Hide();\r
+            }\r
+            catch (InvalidOperationException e)\r
+            {\r
+                Tizen.Log.Info(TAG, "This system has no quickpanel: " + e.ToString());\r
+                LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "This system has no quickpanel: " + e.ToString());\r
+                Assert.Pass("This system has no quickpanel");\r
+            }\r
+            catch (ArgumentException e)\r
+            {\r
+                Tizen.Log.Error(TAG, "Caught Exception" + e.ToString());\r
+                LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Caught Exception" + e.ToString());\r
+                Assert.Fail("Caught Exception" + e.ToString());\r
+            }\r
+            catch (Exception e)\r
+            {\r
+                Assert.True(false, "should not throw exception(" + e.Message + ")");\r
+            }\r
+        }\r
+\r
+        public void OnVisibleEvent(object sender, Shell.QuickPanelClient.VisibleState state)\r
+        {\r
+            _triggered = true;\r
+        }\r
+\r
+        [Test]\r
+        [Category("P1")]\r
+        [Description("Check whether VisibleChanged event is triggered.")]\r
+        [Property("SPEC", "Tizen.NUI.WindowSystem.Shell.QuickPanelClient.VisibleChanged E")]\r
+        [Property("SPEC_URL", "-")]\r
+        [Property("CRITERIA", "EVL")]\r
+        [Property("AUTHOR", "JeongHyun Kang, jhyuni.kang@samsung.com")]\r
+        public async Task VisibleChanged_EVENT()\r
+        {\r
+            /* TEST CODE */\r
+            Shell.TizenShell tzsh = new Shell.TizenShell();\r
+            Window win = NUIApplication.GetDefaultWindow();\r
+            var qpClient = new Shell.QuickPanelClient(tzsh, win, Shell.QuickPanelClient.Types.SystemDefault);\r
+\r
+            qpClient.VisibleChanged += OnVisibleEvent;\r
+            _triggered = false;\r
+\r
+            try\r
+            {\r
+                qpClient.Show();\r
+            }\r
+            catch (InvalidOperationException e)\r
+            {\r
+                Tizen.Log.Info(TAG, "This system has no quickpanel: " + e.ToString());\r
+                LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "This system has no quickpanel: " + e.ToString());\r
+                Assert.Pass("This system has no quickpanel");\r
+            }\r
+            catch (Exception e)\r
+            {\r
+                Assert.True(false, "should not throw exception(" + e.Message + ")");\r
+            }\r
+\r
+            try\r
+            {\r
+                qpClient.Hide();\r
+            }\r
+            catch (InvalidOperationException e)\r
+            {\r
+                Tizen.Log.Info(TAG, "This system has no quickpanel: " + e.ToString());\r
+                LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "This system has no quickpanel: " + e.ToString());\r
+                Assert.Pass("This system has no quickpanel");\r
+            }\r
+            catch (Exception e)\r
+            {\r
+                Assert.True(false, "should not throw exception(" + e.Message + ")");\r
+            }\r
+\r
+            await Task.Delay(500);\r
+            Assert.AreEqual(true, _triggered, "Should be true");\r
+            qpClient.VisibleChanged -= OnVisibleEvent;\r
+            _triggered = false;\r
+        }\r
+    }\r
+}\r
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Tests/testcase/TSTizenShell.cs b/tct-suite-vs/Tizen.NUI.WindowSystem.Tests/testcase/TSTizenShell.cs
new file mode 100644 (file)
index 0000000..402faea
--- /dev/null
@@ -0,0 +1,45 @@
+using NUnit.Framework;\r
+using NUnit.Framework.TUnit;\r
+using System;\r
+using Tizen.NUI;\r
+using Tizen.NUI.UIComponents;\r
+using Tizen.NUI.BaseComponents;\r
+using System.Threading.Tasks;\r
+using Tizen.NUI.WindowSystem;\r
+\r
+namespace Tizen.NUI.WindowSystem.Tests\r
+{\r
+    [TestFixture]\r
+    [Description("Tizen.NUI.WindowSystem.Shell.TizenShell Tests")]\r
+    public class TizenShellTests\r
+    {\r
+        private string TAG = "NUI";\r
+\r
+        [SetUp]\r
+        public void Init()\r
+        {\r
+            Tizen.Log.Info(TAG, "Init() is called!");\r
+        }\r
+\r
+        [TearDown]\r
+        public void Destroy()\r
+        {\r
+            Tizen.Log.Info(TAG, "Destroy() is called!");\r
+        }\r
+\r
+        [Test]\r
+        [Category("P1")]\r
+        [Description("Create a TIzen Shell. Check whether tizen shell is successfully created or not.")]\r
+        [Property("SPEC", "Tizen.NUI.WindowSystem.Shell.TizenShell.TizenShell C")]\r
+        [Property("SPEC_URL", "-")]\r
+        [Property("CRITERIA", "CONSTR")]\r
+        [Property("AUTHOR", "JeongHyun Kang, jhyuni.kang@samsung.com")]\r
+        public void TizenShell_INIT()\r
+        {\r
+            /* TEST CODE */\r
+            var tzsh = new Shell.TizenShell();\r
+            Assert.IsNotNull(tzsh, "The instance should be not null");\r
+            Assert.IsInstanceOf<Shell.TizenShell>(tzsh, "Should return TizenShell instance.");\r
+        }\r
+    }\r
+}\r
diff --git a/tct-suite-vs/Tizen.NUI.WindowSystem.Tests/tizen-manifest.xml b/tct-suite-vs/Tizen.NUI.WindowSystem.Tests/tizen-manifest.xml
new file mode 100755 (executable)
index 0000000..dbb5aab
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="8" package="Tizen.NUI.WindowSystem.Tests" version="1.0.0">
+    <profile name="common" />
+    <ui-application appid="Tizen.NUI.WindowSystem.Tests"
+                    exec="Tizen.NUI.WindowSystem.Tests.dll"
+                    type="dotnet"
+                    multiple="false"
+                    taskmanage="true"
+                    launch_mode="single">
+    <icon>Tizen.NUI.WindowSystem.Tests.png</icon>
+    <label>Tizen.NUI.WindowSystem.Tests</label>
+    </ui-application>
+    <privileges>
+        <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
+    </privileges>
+</manifest>