// ----------------------------------------------------------------------- // // Copyright 2014 MIT Licence. See licence.md for more information. // // ----------------------------------------------------------------------- namespace Perspex.UnitTests.Controls { using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using Perspex.Controls; using Perspex.Layout; using Perspex.Styling; using Perspex.Themes.Default; using Splat; [TestClass] public class ContentControlTests { [TestMethod] public void Template_Should_Be_Instantiated() { var target = new ContentControl(); target.Content = "Foo"; target.Template = this.GetTemplate(); var child = ((IVisual)target).VisualChildren.Single(); Assert.IsInstanceOfType(child, typeof(Border)); child = child.VisualChildren.Single(); Assert.IsInstanceOfType(child, typeof(ContentPresenter)); child = child.VisualChildren.Single(); Assert.IsInstanceOfType(child, typeof(TextBlock)); } [TestMethod] public void Templated_Children_Should_Be_Styled() { using (Locator.CurrentMutable.WithResolver()) { var root = new TestRoot(); var target = new ContentControl(); var styler = new Mock(); Locator.CurrentMutable.Register(() => styler.Object, typeof(IStyler)); target.Content = "Foo"; target.Template = this.GetTemplate(); root.Content = target; this.ApplyTemplate(target); styler.Verify(x => x.ApplyStyles(It.IsAny()), Times.Once()); styler.Verify(x => x.ApplyStyles(It.IsAny()), Times.Once()); styler.Verify(x => x.ApplyStyles(It.IsAny()), Times.Once()); styler.Verify(x => x.ApplyStyles(It.IsAny()), Times.Once()); } } private void ApplyTemplate(IVisual visual) { foreach (IVisual child in visual.VisualChildren) { this.ApplyTemplate(child); } } private ControlTemplate GetTemplate() { return new ControlTemplate(parent => { Border border = new Border(); border.Background = new Perspex.Media.SolidColorBrush(0xffffffff); ContentPresenter contentPresenter = new ContentPresenter(); contentPresenter.TemplateBinding(parent, ContentPresenter.ContentProperty); border.Content = contentPresenter; return border; }); } } }