summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Core.UnitTests/ScrollViewUnitTests.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Core.UnitTests/ScrollViewUnitTests.cs')
-rw-r--r--Xamarin.Forms.Core.UnitTests/ScrollViewUnitTests.cs403
1 files changed, 403 insertions, 0 deletions
diff --git a/Xamarin.Forms.Core.UnitTests/ScrollViewUnitTests.cs b/Xamarin.Forms.Core.UnitTests/ScrollViewUnitTests.cs
new file mode 100644
index 00000000..066d4e5d
--- /dev/null
+++ b/Xamarin.Forms.Core.UnitTests/ScrollViewUnitTests.cs
@@ -0,0 +1,403 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+using NUnit.Framework;
+
+namespace Xamarin.Forms.Core.UnitTests
+{
+ [TestFixture]
+ public class ScrollViewUnitTests : BaseTestFixture
+ {
+ [SetUp]
+ public override void Setup()
+ {
+ base.Setup ();
+ Device.PlatformServices = new MockPlatformServices ();
+ }
+
+ [TearDown]
+ public override void TearDown()
+ {
+ base.TearDown ();
+ Device.PlatformServices = null;
+ }
+
+ [Test]
+ public void TestConstructor ()
+ {
+ ScrollView scrollView = new ScrollView ();
+
+ Assert.Null (scrollView.Content);
+
+ View view = new View ();
+ scrollView = new ScrollView {Content = view};
+
+ Assert.AreEqual (view, scrollView.Content);
+ }
+
+ [Test]
+ [TestCase (ScrollOrientation.Horizontal)]
+ [TestCase (ScrollOrientation.Both)]
+ public void GetsCorrectSizeRequestWithWrappingContent (ScrollOrientation orientation)
+ {
+ var scrollView = new ScrollView {
+ IsPlatformEnabled = true,
+ Orientation = orientation,
+ Platform = new UnitPlatform (null, true)
+ };
+
+ var hLayout = new StackLayout {
+ IsPlatformEnabled = true,
+ Orientation = StackOrientation.Horizontal,
+ Children = {
+ new Label {Text = "THIS IS A REALLY LONG STRING", IsPlatformEnabled = true},
+ new Label {Text = "THIS IS A REALLY LONG STRING", IsPlatformEnabled = true},
+ new Label {Text = "THIS IS A REALLY LONG STRING", IsPlatformEnabled = true},
+ new Label {Text = "THIS IS A REALLY LONG STRING", IsPlatformEnabled = true},
+ new Label {Text = "THIS IS A REALLY LONG STRING", IsPlatformEnabled = true},
+ }
+ };
+
+ scrollView.Content = hLayout;
+
+ var r = scrollView.GetSizeRequest (100, 100);
+
+ Assert.AreEqual (10, r.Request.Height);
+ }
+
+ [Test]
+ public void TestContentSizeChangedVertical ()
+ {
+ View view = new View {IsPlatformEnabled = true, WidthRequest = 100, HeightRequest = 100};
+
+ ScrollView scroll = new ScrollView {Content = view};
+ scroll.Platform = new UnitPlatform ();
+ scroll.Layout (new Rectangle (0, 0, 50, 50));
+
+ Assert.AreEqual (new Size (50, 100), scroll.ContentSize);
+
+ bool changed = false;
+ scroll.PropertyChanged += (sender, e) => {
+ switch (e.PropertyName) {
+ case "ContentSize":
+ changed = true;
+ break;
+ }
+ };
+
+ view.HeightRequest = 200;
+
+ Assert.True (changed);
+ Assert.AreEqual (new Size (50, 200), scroll.ContentSize);
+ }
+
+ [Test]
+ public void TestContentSizeChangedVerticalBidirectional ()
+ {
+ View view = new View { IsPlatformEnabled = true, WidthRequest = 100, HeightRequest = 100 };
+
+ ScrollView scroll = new ScrollView { Content = view, Orientation = ScrollOrientation.Both };
+ scroll.Platform = new UnitPlatform ();
+ scroll.Layout (new Rectangle (0, 0, 50, 50));
+
+ Assert.AreEqual (new Size (100, 100), scroll.ContentSize);
+
+ bool changed = false;
+ scroll.PropertyChanged += (sender, e) => {
+ switch (e.PropertyName) {
+ case "ContentSize":
+ changed = true;
+ break;
+ }
+ };
+
+ view.HeightRequest = 200;
+
+ Assert.True (changed);
+ Assert.AreEqual (new Size (100, 200), scroll.ContentSize);
+ }
+
+ [Test]
+ public void TestContentSizeChangedHorizontal ()
+ {
+ View view = new View {IsPlatformEnabled = true, WidthRequest = 100, HeightRequest = 100};
+
+ var scroll = new ScrollView {
+ Orientation = ScrollOrientation.Horizontal,
+ Content = view
+ };
+ scroll.Platform = new UnitPlatform ();
+ scroll.Layout (new Rectangle (0, 0, 50, 50));
+
+ Assert.AreEqual (new Size (100, 50), scroll.ContentSize);
+
+ bool changed = false;
+ scroll.PropertyChanged += (sender, e) => {
+ switch (e.PropertyName) {
+ case "ContentSize":
+ changed = true;
+ break;
+ }
+ };
+
+ view.WidthRequest = 200;
+
+ Assert.True (changed);
+ Assert.AreEqual (new Size (200, 50), scroll.ContentSize);
+ }
+
+ [Test]
+ public void TestContentSizeChangedHorizontalBidirectional ()
+ {
+ View view = new View { IsPlatformEnabled = true, WidthRequest = 100, HeightRequest = 100 };
+
+ var scroll = new ScrollView {
+ Orientation = ScrollOrientation.Both,
+ Content = view
+ };
+ scroll.Platform = new UnitPlatform ();
+ scroll.Layout (new Rectangle (0, 0, 50, 50));
+
+ Assert.AreEqual (new Size (100, 100), scroll.ContentSize);
+
+ bool changed = false;
+ scroll.PropertyChanged += (sender, e) => {
+ switch (e.PropertyName) {
+ case "ContentSize":
+ changed = true;
+ break;
+ }
+ };
+
+ view.WidthRequest = 200;
+
+ Assert.True (changed);
+ Assert.AreEqual (new Size (200, 100), scroll.ContentSize);
+ }
+
+ [Test]
+ public void TestContentSizeClamping ()
+ {
+ View view = new View {IsPlatformEnabled = true, WidthRequest = 100, HeightRequest = 100};
+
+ var scroll = new ScrollView {
+ Orientation = ScrollOrientation.Horizontal,
+ Content = view,
+ Platform = new UnitPlatform ()
+ };
+ scroll.Layout (new Rectangle (0, 0, 50, 50));
+
+ bool changed = false;
+ scroll.PropertyChanged += (sender, e) => {
+ switch (e.PropertyName) {
+ case "ContentSize":
+ changed = true;
+ break;
+ }
+ };
+
+ view.HeightRequest = 200;
+
+ Assert.False (changed);
+ Assert.AreEqual (new Size (100, 50), scroll.ContentSize);
+ }
+
+ [Test]
+ public void TestChildChanged ()
+ {
+ ScrollView scrollView = new ScrollView ();
+
+ bool changed = false;
+ scrollView.PropertyChanged += (sender, e) => {
+ switch (e.PropertyName) {
+ case "Content":
+ changed = true;
+ break;
+ }
+ };
+ View view = new View ();
+ scrollView.Content = view;
+
+ Assert.True (changed);
+ }
+
+ [Test]
+ public void TestChildDoubleSet ()
+ {
+ var scrollView = new ScrollView ();
+
+ bool changed = false;
+ scrollView.PropertyChanged += (sender, args) => {
+ if (args.PropertyName == "Content")
+ changed = true;
+ };
+
+ var child = new View ();
+ scrollView.Content = child;
+
+ Assert.True (changed);
+ Assert.AreEqual (child, scrollView.Content);
+
+ changed = false;
+
+ scrollView.Content = child;
+
+ Assert.False (changed);
+
+ scrollView.Content = null;
+
+ Assert.True (changed);
+ Assert.Null (scrollView.Content);
+ }
+
+ [Test]
+ public void TestOrientation ()
+ {
+ var scrollView = new ScrollView ();
+
+ Assert.AreEqual (ScrollOrientation.Vertical, scrollView.Orientation);
+
+ bool signaled = false;
+ scrollView.PropertyChanged += (sender, args) => {
+ if (args.PropertyName == "Orientation")
+ signaled = true;
+ };
+
+ scrollView.Orientation = ScrollOrientation.Horizontal;
+
+ Assert.AreEqual (ScrollOrientation.Horizontal, scrollView.Orientation);
+ Assert.True (signaled);
+
+ scrollView.Orientation = ScrollOrientation.Both;
+ Assert.AreEqual (ScrollOrientation.Both, scrollView.Orientation);
+ Assert.True (signaled);
+ }
+
+ [Test]
+ public void TestOrientationDoubleSet ()
+ {
+ var scrollView = new ScrollView ();
+
+ bool signaled = false;
+ scrollView.PropertyChanged += (sender, args) => {
+ if (args.PropertyName == "Orientation")
+ signaled = true;
+ };
+
+ scrollView.Orientation = scrollView.Orientation;
+
+ Assert.False (signaled);
+ }
+
+
+ [Test]
+ public void TestScrollTo()
+ {
+ var scrollView = new ScrollView ();
+ scrollView.Platform = new UnitPlatform ();
+
+ var item = new View { };
+ scrollView.Content = new StackLayout { Children = { item } };
+
+ bool requested = false;
+ ((IScrollViewController) scrollView).ScrollToRequested += (sender, args) => {
+ requested = true;
+ Assert.AreEqual(args.ScrollY,100);
+ Assert.AreEqual(args.ScrollX,0);
+ Assert.Null (args.Item);
+ Assert.That (args.ShouldAnimate, Is.EqualTo (true));
+ };
+
+ scrollView.ScrollToAsync (0,100, true);
+ Assert.That (requested, Is.True);
+ }
+
+ [Test]
+ public void TestScrollToNotAnimated()
+ {
+ var scrollView = new ScrollView ();
+ scrollView.Platform = new UnitPlatform ();
+
+ var item = new View { };
+ scrollView.Content = new StackLayout { Children = { item } };
+
+ bool requested = false;
+ ((IScrollViewController) scrollView).ScrollToRequested += (sender, args) => {
+ requested = true;
+ Assert.AreEqual(args.ScrollY,100);
+ Assert.AreEqual(args.ScrollX,0);
+ Assert.Null (args.Item);
+ Assert.That (args.ShouldAnimate, Is.EqualTo (false));
+ };
+
+ scrollView.ScrollToAsync (0,100, false);
+ Assert.That (requested, Is.True);
+ }
+
+ [Test]
+ public void TestScrollToElement ()
+ {
+ var scrollView = new ScrollView ();
+ scrollView.Platform = new UnitPlatform ();
+
+ var item = new Label { Text = "Test" };
+ scrollView.Content = new StackLayout { Children = { item } };
+
+ bool requested = false;
+ ((IScrollViewController) scrollView).ScrollToRequested += (sender, args) => {
+ requested = true;
+
+ Assert.That (args.Element, Is.SameAs (item));
+ Assert.That (args.Position, Is.EqualTo (ScrollToPosition.Center));
+ Assert.That (args.ShouldAnimate, Is.EqualTo (true));
+ };
+
+ scrollView.ScrollToAsync (item, ScrollToPosition.Center, true);
+ Assert.That (requested, Is.True);
+ }
+
+ [Test]
+ public void TestScrollToElementNotAnimated ()
+ {
+ var scrollView = new ScrollView ();
+ scrollView.Platform = new UnitPlatform ();
+
+ var item = new Label { Text = "Test" };
+ scrollView.Content = new StackLayout { Children = { item } };
+
+ bool requested = false;
+ ((IScrollViewController) scrollView).ScrollToRequested += (sender, args) => {
+ requested = true;
+
+ Assert.That (args.Element, Is.SameAs (item));
+ Assert.That (args.Position, Is.EqualTo (ScrollToPosition.Center));
+ Assert.That (args.ShouldAnimate, Is.EqualTo (false));
+ };
+
+ scrollView.ScrollToAsync (item, ScrollToPosition.Center, false);
+ Assert.That (requested, Is.True);
+ }
+
+ [Test]
+ public void TestScrollToInvalid ()
+ {
+ var scrollView = new ScrollView ();
+ scrollView.Platform = new UnitPlatform ();
+
+ Assert.That (() => scrollView.ScrollToAsync (new VisualElement(), ScrollToPosition.Center, true), Throws.ArgumentException);
+ Assert.That (() => scrollView.ScrollToAsync (null, (ScrollToPosition) 500, true), Throws.ArgumentException);
+ }
+
+ [Test]
+ public void SetScrollPosition ()
+ {
+ var scroll = new ScrollView();
+ IScrollViewController controller = scroll;
+ controller.SetScrolledPosition (100, 100);
+
+ Assert.That (scroll.ScrollX, Is.EqualTo (100));
+ Assert.That (scroll.ScrollY, Is.EqualTo (100));
+ }
+ }
+}