| 
					
				 | 
			
			
				@@ -1,5 +1,11 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using System; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using System.Linq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using Avalonia.Controls; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using Avalonia.Controls.Presenters; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using Avalonia.Controls.Templates; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using Avalonia.Markup.Xaml.Templates; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using Avalonia.Markup.Xaml.UnitTests.MarkupExtensions; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using Avalonia.Metadata; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using Avalonia.UnitTests; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 using Xunit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -89,6 +95,93 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [Fact] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public void XDataType_Should_Be_Assigned_To_Clr_Property() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            using (UnitTestApplication.Start(TestServices.StyledWindow)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var xaml = @" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<Window xmlns='https://github.com/avaloniaui' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        xmlns:sys='clr-namespace:System;assembly=netstandard' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <Window.DataTemplates> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <DataTemplate x:DataType='sys:String'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <Canvas Name='foo'/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </DataTemplate> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    </Window.DataTemplates> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <ContentControl Name='target' Content='Foo'/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</Window>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var target = window.FindControl<ContentControl>("target"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var template = (DataTemplate)window.DataTemplates.First(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                window.ApplyTemplate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                target.ApplyTemplate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ((ContentPresenter)target.Presenter).UpdateChild(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Equal(typeof(string), template.DataType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.IsType<Canvas>(target.Presenter.Child); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [Fact] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public void XDataType_Should_Be_Ignored_If_DataType_Already_Set() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            using (UnitTestApplication.Start(TestServices.StyledWindow)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var xaml = @" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<Window xmlns='https://github.com/avaloniaui' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        xmlns:sys='clr-namespace:System;assembly=netstandard' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <Window.DataTemplates> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <DataTemplate DataType='sys:String' x:DataType='UserControl'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <Canvas Name='foo'/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </DataTemplate> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    </Window.DataTemplates> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <ContentControl Name='target' Content='Foo'/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</Window>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var target = window.FindControl<ContentControl>("target"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                window.ApplyTemplate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                target.ApplyTemplate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ((ContentPresenter)target.Presenter).UpdateChild(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.IsType<Canvas>(target.Presenter.Child); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [Fact] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public void XDataType_Should_Be_Ignored_If_DataType_Has_Non_Standard_Name() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // We don't want DataType to be mapped to FancyDataType, avoid possible confusion. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            using (UnitTestApplication.Start(TestServices.StyledWindow)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var xaml = @" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<Window xmlns='https://github.com/avaloniaui' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        xmlns:sys='clr-namespace:System;assembly=netstandard' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.MarkupExtensions;assembly=Avalonia.Markup.Xaml.UnitTests'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <ContentControl Name='target' Content='Foo'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <ContentControl.ContentTemplate> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <local:CustomDataTemplate x:DataType='local:TestDataContext'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <TextBlock Text='{CompiledBinding StringProperty}' Name='textBlock' /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </local:CustomDataTemplate> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </ContentControl.ContentTemplate> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    </ContentControl> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</Window>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var target = window.FindControl<ContentControl>("target"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                window.ApplyTemplate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                target.ApplyTemplate(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ((ContentPresenter)target.Presenter).UpdateChild(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var dataTemplate = (CustomDataTemplate)target.ContentTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Null(dataTemplate.FancyDataType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         [Fact] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public void Can_Set_DataContext_In_DataTemplate() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -132,5 +225,25 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Assert.Same(viewModel.Child.Child, canvas.DataContext); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [Fact] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public void DataTemplates_Without_Type_Should_Throw() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            using (UnitTestApplication.Start(TestServices.StyledWindow)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                var xaml = @" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<Window xmlns='https://github.com/avaloniaui' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        xmlns:sys='clr-namespace:System;assembly=netstandard' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <Window.DataTemplates> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <DataTemplate> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <Canvas Name='foo'/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </DataTemplate> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    </Window.DataTemplates> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <ContentControl Name='target' Content='Foo'/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</Window>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.Throws<InvalidOperationException>(() => (Window)AvaloniaRuntimeXamlLoader.Load(xaml)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |