summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Core.UnitTests/AbsoluteLayoutTests.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Core.UnitTests/AbsoluteLayoutTests.cs')
-rw-r--r--Xamarin.Forms.Core.UnitTests/AbsoluteLayoutTests.cs265
1 files changed, 265 insertions, 0 deletions
diff --git a/Xamarin.Forms.Core.UnitTests/AbsoluteLayoutTests.cs b/Xamarin.Forms.Core.UnitTests/AbsoluteLayoutTests.cs
new file mode 100644
index 00000000..3faec22e
--- /dev/null
+++ b/Xamarin.Forms.Core.UnitTests/AbsoluteLayoutTests.cs
@@ -0,0 +1,265 @@
+using System;
+using NUnit.Framework;
+using NUnit.Framework.Constraints;
+
+namespace Xamarin.Forms.Core.UnitTests
+{
+ [TestFixture]
+ public class AbsoluteLayoutTests : BaseTestFixture
+ {
+
+ [Test]
+ public void Constructor ()
+ {
+ var abs = new AbsoluteLayout {
+ Platform = new UnitPlatform (),
+ IsPlatformEnabled = true
+ };
+
+ Assert.That (abs.Children, Is.Empty);
+
+ var sizeReq = abs.GetSizeRequest (double.PositiveInfinity, double.PositiveInfinity);
+ Assert.AreEqual (Size.Zero, sizeReq.Request);
+ Assert.AreEqual (Size.Zero, sizeReq.Minimum);
+ }
+
+ [Test]
+ public void AbsolutePositionAndSize ()
+ {
+ var abs = new AbsoluteLayout {
+ Platform = new UnitPlatform (),
+ IsPlatformEnabled = true
+ };
+
+ var child = new View {IsPlatformEnabled = true};
+
+ abs.Children.Add (child, new Rectangle (10, 20, 30, 40));
+
+ abs.Layout (new Rectangle (0, 0, 100, 100));
+
+ Assert.AreEqual (new Rectangle (10, 20, 30, 40), child.Bounds);
+ }
+
+ [Test]
+ public void AbsolutePositionRelativeSize ()
+ {
+ var abs = new AbsoluteLayout {
+ Platform = new UnitPlatform (),
+ IsPlatformEnabled = true
+ };
+
+ var child = new View {IsPlatformEnabled = true};
+
+
+ abs.Children.Add (child, new Rectangle (10, 20, 0.4, 0.5), AbsoluteLayoutFlags.SizeProportional);
+
+ abs.Layout (new Rectangle (0, 0, 100, 100));
+
+ Assert.That (child.X, Is.EqualTo (10));
+ Assert.That (child.Y, Is.EqualTo (20));
+ Assert.That (child.Width, Is.EqualTo (40).Within (0.0001));
+ Assert.That (child.Height, Is.EqualTo (50).Within (0.0001));
+ }
+
+ [TestCase (30, 40, 0.2, 0.3)]
+ [TestCase (35, 45, 0.5, 0.5)]
+ [TestCase (35, 45, 0, 0)]
+ [TestCase (35, 45, 1, 1)]
+ public void RelativePositionAbsoluteSize (double width, double height, double relX, double relY)
+ {
+ var abs = new AbsoluteLayout {
+ Platform = new UnitPlatform (),
+ IsPlatformEnabled = true
+ };
+
+ var child = new View {IsPlatformEnabled = true};
+
+ abs.Children.Add (child, new Rectangle (relX, relY, width, height), AbsoluteLayoutFlags.PositionProportional);
+
+ abs.Layout (new Rectangle (0, 0, 100, 100));
+
+ double expectedX = Math.Round ((100 - width) * relX);
+ double expectedY = Math.Round ((100 - height) * relY);
+ Assert.That (child.X, Is.EqualTo (expectedX).Within (0.0001));
+ Assert.That (child.Y, Is.EqualTo (expectedY).Within (0.0001));
+ Assert.That (child.Width, Is.EqualTo (width));
+ Assert.That (child.Height, Is.EqualTo (height));
+ }
+
+ [Test]
+ public void RelativePositionRelativeSize ([Values (0.0, 0.2, 0.5, 1.0)] double relX, [Values (0.0, 0.2, 0.5, 1.0)] double relY, [Values (0.0, 0.2, 0.5, 1.0)] double relHeight, [Values (0.0, 0.2, 0.5, 1.0)] double relWidth)
+ {
+ var abs = new AbsoluteLayout {
+ Platform = new UnitPlatform (),
+ IsPlatformEnabled = true
+ };
+
+ var child = new View {
+ IsPlatformEnabled = true
+ };
+ abs.Children.Add (child, new Rectangle(relX, relY, relWidth, relHeight), AbsoluteLayoutFlags.All);
+ abs.Layout (new Rectangle(0, 0, 100, 100));
+
+ double expectedWidth = Math.Round (100 * relWidth);
+ double expectedHeight = Math.Round (100 * relHeight);
+ double expectedX = Math.Round ((100 - expectedWidth) * relX);
+ double expectedY = Math.Round ((100 - expectedHeight) * relY);
+ Assert.That (child.X, Is.EqualTo (expectedX).Within (0.0001));
+ Assert.That (child.Y, Is.EqualTo (expectedY).Within (0.0001));
+ Assert.That (child.Width, Is.EqualTo (expectedWidth).Within (0.0001));
+ Assert.That (child.Height, Is.EqualTo (expectedHeight).Within (0.0001));
+ }
+
+ [Test]
+ public void SizeRequestWithNormalChild ()
+ {
+ var abs = new AbsoluteLayout {
+ Platform = new UnitPlatform (),
+ IsPlatformEnabled = true
+ };
+
+ var child = new View ();
+
+ // ChildSizeReq == 100x20
+ abs.Children.Add (child, new Rectangle (10, 20, 30, 40));
+
+ var sizeReq = abs.GetSizeRequest (double.PositiveInfinity, double.PositiveInfinity);
+
+ Assert.AreEqual (new Size (40, 60), sizeReq.Request);
+ Assert.AreEqual (new Size (40, 60), sizeReq.Minimum);
+ }
+
+ [Test]
+ public void SizeRequestWithRelativePositionChild ()
+ {
+ var abs = new AbsoluteLayout {
+ Platform = new UnitPlatform (),
+ IsPlatformEnabled = true
+ };
+
+ var child = new View ();
+
+ // ChildSizeReq == 100x20
+ abs.Children.Add (child, new Rectangle(0.5, 0.5, 30, 40), AbsoluteLayoutFlags.PositionProportional);
+
+ var sizeReq = abs.GetSizeRequest (double.PositiveInfinity, double.PositiveInfinity);
+
+ Assert.AreEqual (new Size (30, 40), sizeReq.Request);
+ Assert.AreEqual (new Size (30, 40), sizeReq.Minimum);
+ }
+
+ [Test]
+ public void SizeRequestWithRelativeChild ()
+ {
+ var abs = new AbsoluteLayout {
+ Platform = new UnitPlatform (),
+ IsPlatformEnabled = true
+ };
+
+ var child = new View {
+ Platform = new UnitPlatform (),
+ IsPlatformEnabled = true
+ };
+
+ // ChildSizeReq == 100x20
+ abs.Children.Add (child, new Rectangle(0.5, 0.5, 0.5, 0.5), AbsoluteLayoutFlags.All);
+
+ var sizeReq = abs.GetSizeRequest (double.PositiveInfinity, double.PositiveInfinity);
+
+ Assert.AreEqual (new Size (200, 40), sizeReq.Request);
+ Assert.AreEqual (new Size (0, 0), sizeReq.Minimum);
+ }
+
+ [Test]
+ public void SizeRequestWithRelativeSizeChild ()
+ {
+ var abs = new AbsoluteLayout {
+ Platform = new UnitPlatform (),
+ IsPlatformEnabled = true
+ };
+
+ var child = new View {
+ Platform = new UnitPlatform (),
+ IsPlatformEnabled = true
+ };
+
+ // ChildSizeReq == 100x20
+ abs.Children.Add (child, new Rectangle(10, 20, 0.5, 0.5), AbsoluteLayoutFlags.SizeProportional);
+
+ var sizeReq = abs.GetSizeRequest (double.PositiveInfinity, double.PositiveInfinity);
+
+ Assert.AreEqual (new Size (210, 60), sizeReq.Request);
+ Assert.AreEqual (new Size (10, 20), sizeReq.Minimum);
+ }
+
+ [Test]
+ public void MeasureInvalidatedFiresWhenFlagsChanged ()
+ {
+ var abs = new AbsoluteLayout {
+ Platform = new UnitPlatform (),
+ IsPlatformEnabled = true
+ };
+
+ var child = new View {
+ Platform = new UnitPlatform (),
+ IsPlatformEnabled = true
+ };
+
+ abs.Children.Add (child, new Rectangle (1, 1, 100, 100));
+
+ bool fired = false;
+ abs.MeasureInvalidated += (sender, args) => fired = true;
+
+ AbsoluteLayout.SetLayoutFlags (child, AbsoluteLayoutFlags.PositionProportional);
+
+ Assert.True (fired);
+ }
+
+ [Test]
+ public void MeasureInvalidatedFiresWhenBoundsChanged ()
+ {
+ var abs = new AbsoluteLayout {
+ Platform = new UnitPlatform (),
+ IsPlatformEnabled = true
+ };
+
+ var child = new View {
+ Platform = new UnitPlatform (),
+ IsPlatformEnabled = true
+ };
+
+ abs.Children.Add (child, new Rectangle (1, 1, 100, 100));
+
+ bool fired = false;
+ abs.MeasureInvalidated += (sender, args) => fired = true;
+
+ AbsoluteLayout.SetLayoutBounds (child, new Rectangle (2, 2, 200, 200));
+
+ Assert.True (fired);
+ }
+
+ [Test]
+ public void TestBoundsTypeConverter ()
+ {
+ var converter = new BoundsTypeConverter ();
+
+ Assert.IsTrue (converter.CanConvertFrom (typeof(string)));
+ Assert.AreEqual (new Rectangle (3, 4, AbsoluteLayout.AutoSize, AbsoluteLayout.AutoSize), converter.ConvertFromInvariantString ("3, 4"));
+ Assert.AreEqual (new Rectangle (3, 4, 20, 30), converter.ConvertFromInvariantString ("3, 4, 20, 30"));
+ Assert.AreEqual (new Rectangle (3, 4, AbsoluteLayout.AutoSize, AbsoluteLayout.AutoSize), converter.ConvertFromInvariantString ("3, 4, AutoSize, AutoSize"));
+ Assert.AreEqual (new Rectangle (3, 4, AbsoluteLayout.AutoSize, 30), converter.ConvertFromInvariantString ("3, 4, AutoSize, 30"));
+ Assert.AreEqual (new Rectangle (3, 4, 20, AbsoluteLayout.AutoSize), converter.ConvertFromInvariantString ("3, 4, 20, AutoSize"));
+ }
+
+ [Test]
+ public void TurkeyTestBoundsTypeConverter ()
+ {
+ var converter = new BoundsTypeConverter ();
+
+ var autoSize = "AutoSize";
+
+ Assert.AreEqual (new Rectangle (3.3, 4.4, AbsoluteLayout.AutoSize, AbsoluteLayout.AutoSize), converter.ConvertFromInvariantString ("3.3, 4.4, " + autoSize + ", AutoSize"));
+ Assert.AreEqual (new Rectangle (3.3, 4.4, 5.5, 6.6), converter.ConvertFromInvariantString ("3.3, 4.4, 5.5, 6.6"));
+ }
+ }
+}