diff --git a/Tests/Perspex.Styling.UnitTests/SelectorTests_Template.cs b/Tests/Perspex.Styling.UnitTests/SelectorTests_Template.cs index 57cd5176f3..828fd5ab2e 100644 --- a/Tests/Perspex.Styling.UnitTests/SelectorTests_Template.cs +++ b/Tests/Perspex.Styling.UnitTests/SelectorTests_Template.cs @@ -9,98 +9,105 @@ namespace Perspex.Styling.UnitTests using System.Linq; using System.Reactive.Linq; using Moq; + using Perspex.Controls; using Perspex.Styling; - - ////[TestFixture] - ////public class SelectorTests_Template - ////{ - //// [Fact] - //// public void Control_In_Template_Is_Matched_With_Template_Selector() - //// { - //// var templatedControl = new Mock(); - //// var styleable = templatedControl.As(); - //// this.BuildVisualTree(templatedControl); - - //// var border = (Border)templatedControl.Object.VisualChildren.Single(); - - //// var selector = new Selector().Template().OfType(); - - //// Assert.True(ActivatorValue(selector, border)); - //// } - - //// [Fact] - //// public void Nested_Control_In_Template_Is_Matched_With_Template_Selector() - //// { - //// var templatedControl = new Mock(); - //// var styleable = templatedControl.As(); - //// this.BuildVisualTree(templatedControl); - - //// var textBlock = (TextBlock)templatedControl.Object.VisualChildren.Single().VisualChildren.Single(); - - //// var selector = new Selector().Template().OfType(); - - //// Assert.True(ActivatorValue(selector, textBlock)); - //// } - - //// [Fact] - //// public void Control_In_Template_Is_Matched_With_TypeOf_TemplatedControl() - //// { - //// var templatedControl = new Mock(); - //// this.BuildVisualTree(templatedControl); - - //// var border = (Border)templatedControl.Object.VisualChildren.Single(); - - //// var selector = new Selector().OfType(templatedControl.Object.GetType()).Template().OfType(); - - //// Assert.True(ActivatorValue(selector,border)); - //// } - - //// [Fact] - //// public void Control_In_Template_Is_Matched_With_Correct_TypeOf_And_Class_Of_TemplatedControl() - //// { - //// var templatedControl = new Mock(); - //// this.BuildVisualTree(templatedControl); - - //// templatedControl.Setup(x => x.Classes).Returns(new Classes("foo")); - //// var border = (Border)templatedControl.Object.VisualChildren.Single(); - - //// var selector = new Selector().OfType(templatedControl.Object.GetType()).Class("foo").Template().OfType(); - - //// Assert.True(ActivatorValue(selector, border)); - //// } - - //// [Fact] - //// public void Control_In_Template_Is_Not_Matched_With_Correct_TypeOf_And_Wrong_Class_Of_TemplatedControl() - //// { - //// var templatedControl = new Mock(); - //// this.BuildVisualTree(templatedControl); - - //// templatedControl.Setup(x => x.Classes).Returns(new Classes("bar")); - //// var border = (Border)templatedControl.Object.VisualChildren.Single(); - - //// var selector = new Selector().OfType(templatedControl.Object.GetType()).Class("foo").Template().OfType(); - - //// Assert.False(ActivatorValue(selector, border)); - //// } - - //// private static bool ActivatorValue(Selector selector, IStyleable control) - //// { - //// return selector.GetActivator(control).Take(1).ToEnumerable().Single(); - //// } - - //// private void BuildVisualTree(Mock templatedControl) where T : class, ITemplatedControl - //// { - //// templatedControl.Setup(x => x.VisualChildren).Returns(new[] - //// { - //// new Border - //// { - //// TemplatedParent = templatedControl.Object, - //// Content = new TextBlock - //// { - //// TemplatedParent = templatedControl.Object, - //// }, - //// }, - //// }); - //// } - ////} + using Perspex.VisualTree; + using Xunit; + + public class SelectorTests_Template + { + [Fact] + public void Control_In_Template_Is_Matched_With_Template_Selector() + { + var target = new Mock(); + var templatedControl = target.As(); + this.BuildVisualTree(target); + + var border = (Border)target.Object.GetVisualChildren().Single(); + + var selector = new Selector().Template().OfType(); + + Assert.True(ActivatorValue(selector, border)); + } + + [Fact] + public void Nested_Control_In_Template_Is_Matched_With_Template_Selector() + { + var target = new Mock(); + var templatedControl = target.As(); + this.BuildVisualTree(target); + + var textBlock = (TextBlock)target.Object.VisualChildren.Single().VisualChildren.Single(); + + var selector = new Selector().Template().OfType(); + + Assert.True(ActivatorValue(selector, textBlock)); + } + + [Fact] + public void Control_In_Template_Is_Matched_With_TypeOf_TemplatedControl() + { + var target = new Mock(); + var templatedControl = target.As(); + this.BuildVisualTree(target); + + var border = (Border)target.Object.VisualChildren.Single(); + + var selector = new Selector().OfType(templatedControl.Object.GetType()).Template().OfType(); + + Assert.True(ActivatorValue(selector, border)); + } + + [Fact] + public void Control_In_Template_Is_Matched_With_Correct_TypeOf_And_Class_Of_TemplatedControl() + { + var target = new Mock(); + var templatedControl = target.As(); + var styleable = target.As(); + this.BuildVisualTree(target); + + styleable.Setup(x => x.Classes).Returns(new Classes("foo")); + var border = (Border)target.Object.VisualChildren.Single(); + + var selector = new Selector().OfType(templatedControl.Object.GetType()).Class("foo").Template().OfType(); + + Assert.True(ActivatorValue(selector, border)); + } + + [Fact] + public void Control_In_Template_Is_Not_Matched_With_Correct_TypeOf_And_Wrong_Class_Of_TemplatedControl() + { + var target = new Mock(); + var templatedControl = target.As(); + var styleable = target.As(); + this.BuildVisualTree(target); + + styleable.Setup(x => x.Classes).Returns(new Classes("bar")); + var border = (Border)target.Object.VisualChildren.Single(); + + var selector = new Selector().OfType(templatedControl.Object.GetType()).Class("foo").Template().OfType(); + + Assert.False(ActivatorValue(selector, border)); + } + + private static bool ActivatorValue(Selector selector, IStyleable control) + { + return selector.GetActivator(control).Take(1).ToEnumerable().Single(); + } + + private void BuildVisualTree(Mock templatedControl) where T : class, IVisual + { + templatedControl.Setup(x => x.VisualChildren).Returns(new Controls + { + new Border + { + [Border.TemplatedParentProperty] = templatedControl.Object, + Content = new TextBlock + { + [Border.TemplatedParentProperty] = templatedControl.Object, + }, + }, + }); + } + } }