summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla40173.cs
blob: 054a68c8a898a433c027e006186793f0e61e538d (plain)
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
´╗┐using Xamarin.Forms.CustomAttributes;
using Xamarin.Forms.Internals;

#if UITEST
using NUnit.Framework;
using Xamarin.Forms.Core.UITests;
#endif

namespace Xamarin.Forms.Controls.Issues
{
#if UITEST
	[Category(UITestCategories.BoxView)]
#endif

    [Preserve(AllMembers = true)]
    [Issue(IssueTracker.Bugzilla, 40173, "Android BoxView/Frame not clickthrough in ListView")]
	public class Bugzilla40173 : TestContentPage // or TestMasterDetailPage, etc ...
    {
        const string CantTouchButtonId = "CantTouchButtonId";
        const string CanTouchButtonId = "CanTouchButtonId";
        const string ListTapTarget = "ListTapTarget";
        const string CantTouchFailText = "Failed";
        const string CanTouchSuccessText = "ButtonTapped";
        const string ListTapSuccessText = "ItemTapped";

#if UITEST
        [Test]
        public void ButtonBlocked()
        {
            RunningApp.Tap(q => q.All().Marked(CantTouchButtonId));
            RunningApp.WaitForNoElement(q => q.All().Text(CantTouchFailText));

            RunningApp.Tap(q => q.All().Marked(CanTouchButtonId));
            RunningApp.WaitForElement(q => q.All().Text(CanTouchSuccessText));

            RunningApp.Tap(q => q.All().Marked(ListTapTarget));
            RunningApp.WaitForElement(q => q.All().Text(ListTapSuccessText));
        }
#endif

        protected override void Init()
        {
            var outputLabel = new Label();
            var testButton = new Button
            {
                Text = "Can't Touch This",
                AutomationId = CantTouchButtonId
            };

            testButton.Clicked += (sender, args) => outputLabel.Text = CantTouchFailText;

            var testGrid = new Grid
            {
                Children =
                {
                    testButton,
                    new BoxView
                    {
                        Color = Color.Pink.MultiplyAlpha(0.5)
                    }
                }
            };

            // BoxView over Button prevents Button click
            var testButtonOk = new Button
            {
                Text = "Can Touch This",
                AutomationId = CanTouchButtonId
            };

            testButtonOk.Clicked += (sender, args) => outputLabel.Text = CanTouchSuccessText;

            var testGridOk = new Grid
            {
                Children =
                {
                    testButtonOk,
                    new BoxView
                    {
                        Color = Color.Pink.MultiplyAlpha(0.5),
                        InputTransparent = true
                    }
                }
            };

            var testListView = new ListView();
            var items = new[] { "Foo" };
            testListView.ItemsSource = items;
            testListView.ItemTemplate = new DataTemplate(() =>
            {
                var result = new ViewCell
                {
                    View = new Grid
                    {
                        Children =
                        {
                            new BoxView
                            {
                                AutomationId = ListTapTarget,
                                Color = Color.Pink.MultiplyAlpha(0.5)
                            }
                        }
                    }
                };

                return result;
            });

            testListView.ItemSelected += (sender, args) => outputLabel.Text = ListTapSuccessText;

            Content = new StackLayout
            {
                Children = { outputLabel, testGrid, testGridOk, testListView }
            };
        }
    }
}