summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Xamarin.Forms.Core.UnitTests/ContentFormUnitTests.cs17
-rw-r--r--Xamarin.Forms.Core.UnitTests/ContentViewUnitTest.cs17
-rw-r--r--Xamarin.Forms.Core.UnitTests/TemplatedPageUnitTests.cs31
-rw-r--r--Xamarin.Forms.Core.UnitTests/TemplatedViewUnitTests.cs31
-rw-r--r--Xamarin.Forms.Core.UnitTests/Xamarin.Forms.Core.UnitTests.csproj2
-rw-r--r--Xamarin.Forms.Core/TemplateUtilities.cs8
6 files changed, 101 insertions, 5 deletions
diff --git a/Xamarin.Forms.Core.UnitTests/ContentFormUnitTests.cs b/Xamarin.Forms.Core.UnitTests/ContentFormUnitTests.cs
index 5b6f3e60..e52b5dbf 100644
--- a/Xamarin.Forms.Core.UnitTests/ContentFormUnitTests.cs
+++ b/Xamarin.Forms.Core.UnitTests/ContentFormUnitTests.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
@@ -64,5 +65,21 @@ namespace Xamarin.Forms.Core.UnitTests
Assert.AreEqual (context, toolbarItem.BindingContext);
}
+
+ [Test]
+ public void ContentPage_should_have_the_InternalChildren_correctly_when_Content_changed()
+ {
+ var sut = new ContentPage();
+ IList<Element> internalChildren = ((IControlTemplated)sut).InternalChildren;
+ internalChildren.Add(new VisualElement());
+ internalChildren.Add(new VisualElement());
+ internalChildren.Add(new VisualElement());
+
+ var expected = new View();
+ sut.Content = expected;
+
+ Assert.AreEqual(1, internalChildren.Count);
+ Assert.AreSame(expected, internalChildren[0]);
+ }
}
}
diff --git a/Xamarin.Forms.Core.UnitTests/ContentViewUnitTest.cs b/Xamarin.Forms.Core.UnitTests/ContentViewUnitTest.cs
index 73bb531b..5d7dd651 100644
--- a/Xamarin.Forms.Core.UnitTests/ContentViewUnitTest.cs
+++ b/Xamarin.Forms.Core.UnitTests/ContentViewUnitTest.cs
@@ -388,6 +388,21 @@ namespace Xamarin.Forms.Core.UnitTests
Assert.AreEqual ("Foo", child.BindingContext);
}
- }
+ [Test]
+ public void ContentView_should_have_the_InternalChildren_correctly_when_Content_changed()
+ {
+ var sut = new ContentView();
+ IList<Element> internalChildren = ((IControlTemplated)sut).InternalChildren;
+ internalChildren.Add(new VisualElement());
+ internalChildren.Add(new VisualElement());
+ internalChildren.Add(new VisualElement());
+
+ var expected = new View();
+ sut.Content = expected;
+
+ Assert.AreEqual(1, internalChildren.Count);
+ Assert.AreSame(expected, internalChildren[0]);
+ }
+ }
}
diff --git a/Xamarin.Forms.Core.UnitTests/TemplatedPageUnitTests.cs b/Xamarin.Forms.Core.UnitTests/TemplatedPageUnitTests.cs
new file mode 100644
index 00000000..306abf0d
--- /dev/null
+++ b/Xamarin.Forms.Core.UnitTests/TemplatedPageUnitTests.cs
@@ -0,0 +1,31 @@
+using System.Collections.Generic;
+using NUnit.Framework;
+
+namespace Xamarin.Forms.Core.UnitTests
+{
+ [TestFixture]
+ public class TemplatedPageUnitTests : BaseTestFixture
+ {
+ [Test]
+ public void TemplatedPage_should_have_the_InternalChildren_correctly_when_ControlTemplate_changed()
+ {
+ var sut = new TemplatedPage();
+ IList<Element> internalChildren = ((IControlTemplated)sut).InternalChildren;
+ internalChildren.Add(new VisualElement());
+ internalChildren.Add(new VisualElement());
+ internalChildren.Add(new VisualElement());
+
+ sut.ControlTemplate = new ControlTemplate(typeof(ExpectedView));
+
+ Assert.AreEqual(1, internalChildren.Count);
+ Assert.IsInstanceOf<ExpectedView>(internalChildren[0]);
+ }
+
+ private class ExpectedView : View
+ {
+ public ExpectedView()
+ {
+ }
+ }
+ }
+}
diff --git a/Xamarin.Forms.Core.UnitTests/TemplatedViewUnitTests.cs b/Xamarin.Forms.Core.UnitTests/TemplatedViewUnitTests.cs
new file mode 100644
index 00000000..6255edaf
--- /dev/null
+++ b/Xamarin.Forms.Core.UnitTests/TemplatedViewUnitTests.cs
@@ -0,0 +1,31 @@
+using System.Collections.Generic;
+using NUnit.Framework;
+
+namespace Xamarin.Forms.Core.UnitTests
+{
+ [TestFixture]
+ public class TemplatedViewUnitTests : BaseTestFixture
+ {
+ [Test]
+ public void TemplatedView_should_have_the_InternalChildren_correctly_when_ControlTemplate_changed()
+ {
+ var sut = new TemplatedView();
+ IList<Element> internalChildren = ((IControlTemplated)sut).InternalChildren;
+ internalChildren.Add(new VisualElement());
+ internalChildren.Add(new VisualElement());
+ internalChildren.Add(new VisualElement());
+
+ sut.ControlTemplate = new ControlTemplate(typeof(ExpectedView));
+
+ Assert.AreEqual(1, internalChildren.Count);
+ Assert.IsInstanceOf<ExpectedView>(internalChildren[0]);
+ }
+
+ private class ExpectedView : View
+ {
+ public ExpectedView()
+ {
+ }
+ }
+ }
+}
diff --git a/Xamarin.Forms.Core.UnitTests/Xamarin.Forms.Core.UnitTests.csproj b/Xamarin.Forms.Core.UnitTests/Xamarin.Forms.Core.UnitTests.csproj
index 243cbce3..8727b984 100644
--- a/Xamarin.Forms.Core.UnitTests/Xamarin.Forms.Core.UnitTests.csproj
+++ b/Xamarin.Forms.Core.UnitTests/Xamarin.Forms.Core.UnitTests.csproj
@@ -80,6 +80,8 @@
<Compile Include="ColorUnitTests.cs" />
<Compile Include="CommandSourceTests.cs" />
<Compile Include="CommandTests.cs" />
+ <Compile Include="TemplatedViewUnitTests.cs" />
+ <Compile Include="TemplatedPageUnitTests.cs" />
<Compile Include="ContentFormUnitTests.cs" />
<Compile Include="ContraintTypeConverterTests.cs" />
<Compile Include="ControlTemplateTests.cs" />
diff --git a/Xamarin.Forms.Core/TemplateUtilities.cs b/Xamarin.Forms.Core/TemplateUtilities.cs
index 4a8d21b9..e78f4836 100644
--- a/Xamarin.Forms.Core/TemplateUtilities.cs
+++ b/Xamarin.Forms.Core/TemplateUtilities.cs
@@ -58,9 +58,9 @@ namespace Xamarin.Forms
var newElement = (Element)newValue;
if (self.ControlTemplate == null)
{
- for (var i = 0; i < self.InternalChildren.Count; i++)
+ while (self.InternalChildren.Count > 0)
{
- self.InternalChildren.Remove(self.InternalChildren[i]);
+ self.InternalChildren.RemoveAt(self.InternalChildren.Count - 1);
}
if (newValue != null)
@@ -104,9 +104,9 @@ namespace Xamarin.Forms
}
// Now remove all remnants of any other children just to be sure
- for (var i = 0; i < self.InternalChildren.Count; i++)
+ while (self.InternalChildren.Count > 0)
{
- self.InternalChildren.Remove(self.InternalChildren[i]);
+ self.InternalChildren.RemoveAt(self.InternalChildren.Count - 1);
}
ControlTemplate template = self.ControlTemplate;