[NUI][TEST] Update TCs of FlexibleView.
[platform/core/csapi/tizenfx.git] / test / Tizen.NUI.Tests / Tizen.NUI.Components.Devel.Tests / testcase / Controls / FlexibleView / TSFlexibleViewAdapter.cs
1 using NUnit.Framework;
2 using System;
3 using System.Collections.Generic;
4 using System.Text;
5 using System.Threading.Tasks;
6 using Tizen.NUI.BaseComponents;
7
8 namespace Tizen.NUI.Components.Devel.Tests
9 {
10     using tlog = Tizen.Log;
11
12     [TestFixture]
13     [Description("Controls/FlexibleView/FlexibleViewAdapter")]
14     public class FlexibleViewAdapterTest
15     {
16         private const string tag = "NUITEST";
17
18         private Vector2 scrnSize;
19         private ListBridge adapter;
20         private FlexibleView horizontalFlexibleView;
21         private LinearLayoutManager horizontalLayoutManager;
22
23         [SetUp]
24         public void Init()
25         {
26             tlog.Info(tag, "Init() is called!");
27             scrnSize = new Vector2(1920, 1080);
28         }
29
30         [TearDown]
31         public void Destroy()
32         {
33             scrnSize?.Dispose();
34             tlog.Info(tag, "Destroy() is called!");
35         }
36
37         public class ListItemData
38         {
39             private string str;
40
41             public ListItemData(int i)
42             {
43                 str = "Text" + i.ToString();
44             }
45
46             public string TextString
47             {
48                 get
49                 {
50                     return str;
51                 }
52             }
53         }
54
55         public class ListItemView : View
56         {
57             private TextLabel mText;
58
59             public ListItemView()
60             {
61                 mText = new TextLabel();
62                 mText.WidthResizePolicy = ResizePolicyType.FillToParent;
63                 mText.HeightResizePolicy = ResizePolicyType.FillToParent;
64                 mText.PointSize = 22;
65                 mText.HorizontalAlignment = HorizontalAlignment.Center;
66                 mText.VerticalAlignment = VerticalAlignment.Center;
67                 Add(mText);
68             }
69
70             public string MainText
71             {
72                 get
73                 {
74                     return mText.Text;
75                 }
76                 set
77                 {
78                     mText.Text = value;
79                 }
80             }
81         }
82
83         public class ListBridge : FlexibleViewAdapter
84         {
85             private List<ListItemData> mDatas;
86             public ListBridge(List<ListItemData> datas)
87             {
88                 mDatas = datas;
89             }
90
91             public void InsertData(int position)
92             {
93                 mDatas.Insert(position, new ListItemData(1000 + position));
94                 NotifyItemInserted(position);
95             }
96
97             public void RemoveData(int position)
98             {
99                 mDatas.RemoveAt(position);
100                 NotifyItemRemoved(position);
101             }
102
103             public override FlexibleViewViewHolder OnCreateViewHolder(int viewType)
104             {
105                 FlexibleViewViewHolder viewHolder = new FlexibleViewViewHolder(new ListItemView());
106                 return viewHolder;
107             }
108
109             public override void OnBindViewHolder(FlexibleViewViewHolder holder, int position)
110             {
111                 ListItemData listItemData = mDatas[position];
112
113                 ListItemView listItemView = holder.ItemView as ListItemView;
114                 listItemView.Name = "Item" + position;
115                 listItemView.SizeWidth = 150;
116                 listItemView.SizeHeight = 60;
117                 if (listItemView != null)
118                 {
119                     listItemView.MainText = String.Format("{0:D2}", position) + " : " + listItemData.TextString;
120                 }
121                 listItemView.Margin = new Extents(2, 2, 2, 2);
122                 if (position % 2 == 0)
123                     listItemView.BackgroundColor = Color.Cyan;
124                 else
125                     listItemView.BackgroundColor = Color.Yellow;
126             }
127
128             public override void OnDestroyViewHolder(FlexibleViewViewHolder holder)
129             {
130                 if (holder.ItemView != null)
131                 {
132                     holder.ItemView.Dispose();
133                 }
134             }
135
136             public override int GetItemCount()
137             {
138                 return mDatas.Count;
139             }
140
141             public override void OnFocusChange(FlexibleView flexibleView, int previousFocus, int currentFocus)
142             {
143                 FlexibleViewViewHolder previousFocusView = flexibleView.FindViewHolderForAdapterPosition(previousFocus);
144                 if (previousFocusView != null)
145                 {
146                     if (previousFocusView.AdapterPosition % 2 == 0)
147                         previousFocusView.ItemView.BackgroundColor = Color.Cyan;
148                     else
149                         previousFocusView.ItemView.BackgroundColor = Color.Yellow;
150                 }
151                 FlexibleViewViewHolder currentFocusView = flexibleView.FindViewHolderForAdapterPosition(currentFocus);
152                 if (currentFocusView != null)
153                 {
154                     currentFocusView.ItemView.BackgroundColor = Color.Magenta;
155                 }
156             }
157         }
158
159         private FlexibleView GetHorizontalFlexibleView()
160         {
161             horizontalFlexibleView = new FlexibleView();
162             Assert.IsNotNull(horizontalFlexibleView, "should be not null");
163             Assert.IsInstanceOf<FlexibleView>(horizontalFlexibleView, "should be an instance of testing target class!");
164
165             horizontalFlexibleView.Name = "FlexibleView";
166             horizontalFlexibleView.WidthSpecification = 400;
167             horizontalFlexibleView.HeightSpecification = 450;
168             horizontalFlexibleView.Padding = new Extents(10, 10, 10, 10);
169             horizontalFlexibleView.BackgroundColor = new Color(0.0f, 0.0f, 0.0f, 0.4f);
170
171             List<ListItemData> dataList = new List<ListItemData>();
172             for (int i = 0; i < 4; ++i)
173             {
174                 dataList.Add(new ListItemData(i));
175             }
176             adapter = new ListBridge(dataList);
177             horizontalFlexibleView.SetAdapter(adapter);
178             horizontalFlexibleView.OnRelayout(scrnSize, null);
179
180             horizontalLayoutManager = new LinearLayoutManager(LinearLayoutManager.HORIZONTAL);
181             horizontalFlexibleView.SetLayoutManager(horizontalLayoutManager);
182             horizontalFlexibleView.OnRelayout(scrnSize, null);
183
184             return horizontalFlexibleView;
185         }
186
187         [Test]
188         [Category("P1")]
189         [Description("FlexibleViewAdapter NotifyItemChanged.")]
190         [Property("SPEC", "Tizen.NUI.Components.FlexibleView.FlexibleViewAdapter.NotifyItemChanged M")]
191         [Property("SPEC_URL", "-")]
192         [Property("CRITERIA", "MR")]
193         [Property("COVPARAM", "")]
194         [Property("AUTHOR", "guowei.wang@samsung.com")]
195         public void FlexibleViewAdapterNotifyItemChanged()
196         {
197             tlog.Debug(tag, $"FlexibleViewAdapterNotifyItemChanged START");
198
199             var testingTarget = GetHorizontalFlexibleView();
200             Assert.IsNotNull(testingTarget, "should be not null");
201             Assert.IsInstanceOf<FlexibleView>(testingTarget, "should be an instance of testing target class!");
202
203             try
204             {
205                 testingTarget.GetAdapter().NotifyItemChanged(2);
206             }
207             catch (Exception e)
208             {
209                 tlog.Debug(tag, e.Message.ToString());
210                 Assert.Fail("Caught Exception : Failed!");
211             }
212
213             testingTarget.Dispose();
214             tlog.Debug(tag, $"FlexibleViewAdapterNotifyItemChanged END (OK)");
215         }
216
217         [Test]
218         [Category("P1")]
219         [Description("FlexibleViewAdapter NotifyItemRangeChanged.")]
220         [Property("SPEC", "Tizen.NUI.Components.FlexibleView.FlexibleViewAdapter.NotifyItemRangeChanged M")]
221         [Property("SPEC_URL", "-")]
222         [Property("CRITERIA", "MR")]
223         [Property("COVPARAM", "")]
224         [Property("AUTHOR", "guowei.wang@samsung.com")]
225         public void FlexibleViewAdapterNotifyItemRangeChanged()
226         {
227             tlog.Debug(tag, $"FlexibleViewAdapterNotifyItemRangeChanged START");
228
229             var testingTarget = GetHorizontalFlexibleView();
230             Assert.IsNotNull(testingTarget, "should be not null");
231             Assert.IsInstanceOf<FlexibleView>(testingTarget, "should be an instance of testing target class!");
232
233             try
234             {
235                 testingTarget.GetAdapter().NotifyItemRangeChanged(2, 2);
236             }
237             catch (Exception e)
238             {
239                 tlog.Debug(tag, e.Message.ToString());
240                 Assert.Fail("Caught Exception : Failed!");
241             }
242
243             testingTarget.Dispose();
244             tlog.Debug(tag, $"FlexibleViewAdapterNotifyItemRangeChanged END (OK)");
245         }
246     }
247 }