summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Xaml.UnitTests/NameScopeTests.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Xaml.UnitTests/NameScopeTests.cs')
-rw-r--r--Xamarin.Forms.Xaml.UnitTests/NameScopeTests.cs110
1 files changed, 110 insertions, 0 deletions
diff --git a/Xamarin.Forms.Xaml.UnitTests/NameScopeTests.cs b/Xamarin.Forms.Xaml.UnitTests/NameScopeTests.cs
new file mode 100644
index 00000000..b622da27
--- /dev/null
+++ b/Xamarin.Forms.Xaml.UnitTests/NameScopeTests.cs
@@ -0,0 +1,110 @@
+using NUnit.Framework;
+
+using Xamarin.Forms.Core.UnitTests;
+
+namespace Xamarin.Forms.Xaml.UnitTests
+{
+
+ [TestFixture]
+ public class NameScopeTests : BaseTestFixture
+ {
+ [Test]
+ public void TopLevelObjectsHaveANameScope ()
+ {
+ var xaml = @"
+ <View
+ xmlns=""http://xamarin.com/schemas/2014/forms""
+ xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" />";
+
+ var view = new CustomView ().LoadFromXaml (xaml);
+
+ Assert.IsNotNull (Forms.Internals.NameScope.GetNameScope (view));
+ Assert.That (Forms.Internals.NameScope.GetNameScope (view), Is.TypeOf<Forms.Internals.NameScope> ());
+ }
+
+ [Test]
+ public void NameScopeAreSharedWithChildren ()
+ {
+ var xaml = @"
+ <StackLayout
+ xmlns=""http://xamarin.com/schemas/2014/forms""
+ xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" >
+ <Label />
+ <Label />
+ </StackLayout>";
+
+ var layout = new StackLayout ().LoadFromXaml (xaml);
+
+ Assert.IsNotNull (Forms.Internals.NameScope.GetNameScope (layout));
+ Assert.That (Forms.Internals.NameScope.GetNameScope (layout), Is.TypeOf<Forms.Internals.NameScope> ());
+
+ foreach (var child in layout.Children) {
+ Assert.IsNotNull (Forms.Internals.NameScope.GetNameScope (child));
+ Assert.That (Forms.Internals.NameScope.GetNameScope (child), Is.TypeOf<Forms.Internals.NameScope> ());
+ Assert.AreSame (Forms.Internals.NameScope.GetNameScope (layout), Forms.Internals.NameScope.GetNameScope (child));
+ }
+ }
+
+ [Test]
+ public void DataTemplateChildrenDoesNotParticipateToParentNameScope ()
+ {
+ var xaml = @"
+ <ListView
+ xmlns=""http://xamarin.com/schemas/2014/forms""
+ xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""
+ x:Name=""listview"">
+ <ListView.ItemTemplate>
+ <DataTemplate>
+ <TextCell Text=""{Binding name}"" x:Name=""textcell""/>
+ </DataTemplate>
+ </ListView.ItemTemplate>
+ </ListView>";
+
+ var listview = new ListView ();
+ listview.LoadFromXaml (xaml);
+
+ Assert.AreSame (listview, ((Forms.Internals.INameScope)listview).FindByName ("listview"));
+ Assert.IsNull (((Forms.Internals.INameScope)listview).FindByName ("textcell"));
+ }
+
+ [Test]
+ public void ElementsCreatedFromDataTemplateHaveTheirOwnNameScope ()
+ {
+ var xaml = @"
+ <ListView
+ xmlns=""http://xamarin.com/schemas/2014/forms""
+ xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""
+ x:Name=""listview"">
+ <ListView.ItemTemplate>
+ <DataTemplate>
+ <TextCell Text=""{Binding name}"" x:Name=""textcell""/>
+ </DataTemplate>
+ </ListView.ItemTemplate>
+ </ListView>";
+
+ var listview = new ListView ();
+ listview.LoadFromXaml (xaml);
+ Assert.IsNotNull (Forms.Internals.NameScope.GetNameScope (listview));
+ Assert.That (Forms.Internals.NameScope.GetNameScope (listview), Is.TypeOf<Forms.Internals.NameScope> ());
+
+ var cell0 = listview.ItemTemplate.CreateContent () as Element;
+ var cell1 = listview.ItemTemplate.CreateContent () as Element;
+
+ Assert.IsNotNull (Forms.Internals.NameScope.GetNameScope (cell0));
+ Assert.That (Forms.Internals.NameScope.GetNameScope (cell0), Is.TypeOf<Forms.Internals.NameScope> ());
+ Assert.IsNotNull (Forms.Internals.NameScope.GetNameScope (cell1));
+ Assert.That (Forms.Internals.NameScope.GetNameScope (cell1), Is.TypeOf<Forms.Internals.NameScope> ());
+
+ Assert.AreNotSame (Forms.Internals.NameScope.GetNameScope (listview), Forms.Internals.NameScope.GetNameScope (cell0));
+ Assert.AreNotSame (Forms.Internals.NameScope.GetNameScope (listview), Forms.Internals.NameScope.GetNameScope (cell1));
+ Assert.AreNotSame (Forms.Internals.NameScope.GetNameScope (cell0), Forms.Internals.NameScope.GetNameScope (cell1));
+
+ Assert.IsNull (((Forms.Internals.INameScope)listview).FindByName ("textcell"));
+ Assert.NotNull (((Forms.Internals.INameScope)cell0).FindByName ("textcell"));
+ Assert.NotNull (((Forms.Internals.INameScope)cell1).FindByName ("textcell"));
+
+ Assert.AreNotSame (((Forms.Internals.INameScope)cell0).FindByName ("textcell"), ((Forms.Internals.INameScope)cell1).FindByName ("textcell"));
+
+ }
+ }
+}