-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
Bugzilla42277.cs
130 lines (114 loc) · 3.21 KB
/
Bugzilla42277.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using System;
using System.Linq;
using Xamarin.Forms.CustomAttributes;
using Xamarin.Forms.Internals;
using System.Collections.Generic;
#if UITEST
using Xamarin.UITest;
using NUnit.Framework;
#endif
namespace Xamarin.Forms.Controls.Issues
{
#if UITEST
[NUnit.Framework.Category(Core.UITests.UITestCategories.Bugzilla)]
#endif
[Preserve(AllMembers = true)]
[Issue(IssueTracker.Bugzilla, 42277, "DataTemplate System.InvalidCastException crash in 2.3.1-pre1")]
public class Bugzilla42277 : TestContentPage
{
const string Success1 = "Success1";
const string Success2 = "Success2";
const string Success3 = "GroupedSuccess3";
const string Success4 = "GroupedSuccess4";
const string Success5 = "GroupedSuccess5";
const string Success6 = "GroupedSuccess6";
class MyDataTemplateSelector : DataTemplateSelector
{
DataTemplate _1Template;
DataTemplate _2Template;
DataTemplate _3Template;
DataTemplate _4Template;
DataTemplate _5Template;
DataTemplate _6Template;
public MyDataTemplateSelector()
{
_1Template = new DataTemplate(() =>
{
return new TextCell { Text = Success1 };
});
_2Template = new DataTemplate(() =>
{
return new TextCell { Text = Success2 };
});
_3Template = new DataTemplate(() =>
{
return new TextCell { Text = Success3 };
});
_4Template = new DataTemplate(() =>
{
return new TextCell { Text = Success4 };
});
_5Template = new DataTemplate(() =>
{
return new TextCell { Text = Success5 };
});
_6Template = new DataTemplate(() =>
{
return new TextCell { Text = Success6 };
});
}
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
int number = (int)item;
switch (number)
{
default:
case 0:
return _1Template;
case 1:
return _2Template;
case 2:
return _3Template;
case 3:
return _4Template;
case 4:
return _5Template;
case 5:
return _6Template;
}
}
}
protected override void Init()
{
//test non-grouped DTS
ListView listView = new ListView(ListViewCachingStrategy.RecycleElement)
{
ItemsSource = Enumerable.Range(0, 2),
ItemTemplate = new MyDataTemplateSelector()
};
//test grouped DTS
ListView groupedListView = new ListView(ListViewCachingStrategy.RecycleElement)
{
ItemsSource = new List<List<int>> { Enumerable.Range(2, 2).ToList(), Enumerable.Range(4, 2).ToList() },
IsGroupingEnabled = true,
ItemTemplate = new MyDataTemplateSelector()
};
Content = new StackLayout { Children = { listView, groupedListView } };
//test collection changed
listView.ItemsSource = Enumerable.Range(0, 2);
groupedListView.ItemsSource = new List<List<int>> { Enumerable.Range(2, 2).ToList(), Enumerable.Range(4, 2).ToList() };
}
#if UITEST
[Test]
public void Bugzilla42277Test()
{
RunningApp.WaitForElement(q => q.Marked(Success1));
RunningApp.WaitForElement(q => q.Marked(Success2));
RunningApp.WaitForElement(q => q.Marked(Success3));
RunningApp.WaitForElement(q => q.Marked(Success4));
RunningApp.WaitForElement(q => q.Marked(Success5));
RunningApp.WaitForElement(q => q.Marked(Success6));
}
#endif
}
}