summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/ScrollViewIsEnabled.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/ScrollViewIsEnabled.cs')
-rw-r--r--Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/ScrollViewIsEnabled.cs138
1 files changed, 138 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/ScrollViewIsEnabled.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/ScrollViewIsEnabled.cs
new file mode 100644
index 00000000..563a3319
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/ScrollViewIsEnabled.cs
@@ -0,0 +1,138 @@
+using Xamarin.Forms.CustomAttributes;
+using Xamarin.Forms.Internals;
+
+#if UITEST
+using Xamarin.UITest;
+using NUnit.Framework;
+using Xamarin.Forms.Core.UITests;
+#endif
+
+namespace Xamarin.Forms.Controls.Issues
+{
+#if UITEST
+ [Category(UITestCategories.IsEnabled)]
+#endif
+
+ [Preserve(AllMembers = true)]
+ [Issue(IssueTracker.None, 0112358, "ScrollView set to disabled will still allow scrolling", PlatformAffected.All)]
+ public class ScrollViewIsEnabled : TestNavigationPage
+ {
+ const string InitiallyEnabled = "Initially Enabled";
+ const string InitiallyNotEnabled = "Initially Not Enabled";
+ const string ToggleButton = "ToggleButton";
+ const string ScrollView = "TheScrollView";
+ const string FirstItem = "FirstItem";
+ const string Success = "Success";
+
+ protected override void Init()
+ {
+ var initiallyEnabled = new Button { Text = InitiallyEnabled };
+ initiallyEnabled.Clicked += (sender, args) => { Navigation.PushAsync(ScrollViewTestPage(true)); };
+
+ var initiallyNotEnabled = new Button { Text = InitiallyNotEnabled };
+ initiallyNotEnabled.Clicked += (sender, args) => { Navigation.PushAsync(ScrollViewTestPage(false)); };
+
+ var layout = new StackLayout { Children = { initiallyNotEnabled, initiallyEnabled } };
+
+ var root = new ContentPage { Content = layout };
+
+ PushAsync(root);
+ }
+
+ static ContentPage ScrollViewTestPage(bool initiallyEnabled)
+ {
+ var scrollViewContents = new StackLayout();
+ scrollViewContents.Children.Add(new Label { Text = FirstItem });
+ for (int n = 0; n < 100; n++)
+ {
+ scrollViewContents.Children.Add(new Label { Text = n.ToString() });
+ }
+
+ var sv = new ScrollView { Content = scrollViewContents, IsEnabled = initiallyEnabled, AutomationId = ScrollView };
+ var layout = new StackLayout { Margin = new Thickness(5, 40, 5, 0) };
+
+ var toggleButton = new Button { Text = $"Toggle IsEnabled (currently {sv.IsEnabled})", AutomationId = ToggleButton };
+
+ toggleButton.Clicked += (sender, args) =>
+ {
+ sv.IsEnabled = !sv.IsEnabled;
+ toggleButton.Text = $"Toggle IsEnabled (currently {sv.IsEnabled})";
+ };
+
+ var instructions = new Label
+ {
+ Text = @"Attempt to scroll the ScrollView below.
+If 'IsEnabled' is false and the ScrollView scrolls, this test has failed.
+If 'IsEnabled' is true and the ScrollView does not scroll, this test has failed.
+Use the toggle button to check both values of 'IsEnabled'."
+ };
+
+ var success = new Label();
+
+ layout.Children.Add(instructions);
+ layout.Children.Add(toggleButton);
+ layout.Children.Add(success);
+ layout.Children.Add(sv);
+
+ sv.Scrolled += (sender, args) => success.Text = Success;
+
+ return new ContentPage { Content = layout };
+ }
+
+#if UITEST
+ [Test]
+ public void ScrollViewInitiallyEnabled()
+ {
+ RunningApp.WaitForElement(InitiallyEnabled);
+ RunningApp.Tap(InitiallyEnabled);
+ RunningApp.WaitForElement(FirstItem);
+ RunningApp.WaitForElement(ScrollView);
+ RunningApp.ScrollDown(ScrollView, ScrollStrategy.Gesture);
+ RunningApp.WaitForElement(Success); // If the ScrollView scrolled, the success label should be displayed
+ }
+
+ [Test]
+ public void ScrollViewInitiallyEnabledThenDisabled()
+ {
+ RunningApp.WaitForElement(InitiallyEnabled);
+ RunningApp.Tap(InitiallyEnabled);
+ RunningApp.WaitForElement(ToggleButton);
+ RunningApp.Tap(ToggleButton);
+
+ // Scrolling should now be IsEnabled = false
+
+ RunningApp.WaitForElement(FirstItem);
+ RunningApp.WaitForElement(ScrollView);
+ RunningApp.ScrollDown(ScrollView, ScrollStrategy.Gesture);
+ RunningApp.WaitForNoElement(Success); // Shouldn't have scrolled, so no success label should be displayed
+ }
+
+ [Test]
+ public void ScrollViewInitiallyNotEnabled()
+ {
+ RunningApp.WaitForElement(InitiallyNotEnabled);
+ RunningApp.Tap(InitiallyNotEnabled);
+ RunningApp.WaitForElement(FirstItem);
+ RunningApp.WaitForElement(ScrollView);
+ RunningApp.ScrollDown(ScrollView, ScrollStrategy.Gesture);
+ RunningApp.WaitForNoElement(Success); // Shouldn't have scrolled, so no success label should be displayed
+ }
+
+ [Test]
+ public void ScrollViewInitiallyNotEnabledThenEnabled()
+ {
+ RunningApp.WaitForElement(InitiallyNotEnabled);
+ RunningApp.Tap(InitiallyNotEnabled);
+ RunningApp.WaitForElement(ToggleButton);
+ RunningApp.Tap(ToggleButton);
+
+ // Scrolling should now be IsEnabled = true
+
+ RunningApp.WaitForElement(FirstItem);
+ RunningApp.WaitForElement(ScrollView);
+ RunningApp.ScrollDown(ScrollView, ScrollStrategy.Gesture);
+ RunningApp.WaitForElement(Success); // If the ScrollView scrolled, the success label should be displayed
+ }
+#endif
+ }
+} \ No newline at end of file