| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- // -----------------------------------------------------------------------
- // <copyright file="TemplatedControlTests.cs" company="Steven Kirk">
- // Copyright 2013 MIT Licence. See licence.md for more information.
- // </copyright>
- // -----------------------------------------------------------------------
- namespace Perspex.Controls.UnitTests
- {
- using System.Linq;
- using Moq;
- using Perspex.Controls;
- using Perspex.Controls.Presenters;
- using Perspex.Controls.Primitives;
- using Perspex.Controls.Templates;
- using Perspex.Styling;
- using Perspex.VisualTree;
- using Splat;
- using Xunit;
- public class TemplatedControlTests
- {
- [Fact]
- public void Template_Doesnt_Get_Executed_On_Set()
- {
- bool executed = false;
- var template = new ControlTemplate(_ =>
- {
- executed = true;
- return new Control();
- });
- var target = new TemplatedControl
- {
- Template = template,
- };
- Assert.False(executed);
- }
- [Fact]
- public void Template_Gets_Executed_On_Measure()
- {
- bool executed = false;
- var template = new ControlTemplate(_ =>
- {
- executed = true;
- return new Control();
- });
- var target = new TemplatedControl
- {
- Template = template,
- };
- target.Measure(new Size(100, 100));
- Assert.True(executed);
- }
- [Fact]
- public void Template_Result_Becomes_Visual_Child()
- {
- Control templateResult = new Control();
- var template = new ControlTemplate(_ =>
- {
- return templateResult;
- });
- var target = new TemplatedControl
- {
- Template = template,
- };
- target.Measure(new Size(100, 100));
- var children = target.GetVisualChildren().ToList();
- Assert.Equal(new[] { templateResult }, children);
- }
- [Fact]
- public void TemplatedParent_Is_Set_On_Generated_Template()
- {
- Control templateResult = new Control();
- var template = new ControlTemplate(_ =>
- {
- return templateResult;
- });
- var target = new TemplatedControl
- {
- Template = template,
- };
- target.Measure(new Size(100, 100));
- Assert.Equal(target, templateResult.TemplatedParent);
- }
- [Fact]
- public void OnTemplateApplied_Is_Called()
- {
- var target = new TestTemplatedControl
- {
- Template = new ControlTemplate(_ =>
- {
- return new Control();
- })
- };
- target.Measure(new Size(100, 100));
- Assert.True(target.OnTemplateAppliedCalled);
- }
- [Fact]
- public void Template_Should_Be_Instantated()
- {
- var target = new TestTemplatedControl
- {
- Template = new ControlTemplate(_ =>
- {
- return new StackPanel
- {
- Children = new Controls
- {
- new TextBlock
- {
- }
- }
- };
- }),
- };
- target.ApplyTemplate();
- var child = target.GetVisualChildren().Single();
- Assert.IsType<StackPanel>(child);
- child = child.VisualChildren.Single();
- Assert.IsType<TextBlock>(child);
- }
- [Fact]
- public void Templated_Children_Should_Be_Styled()
- {
- using (Locator.Current.WithResolver())
- {
- var styler = new Mock<IStyler>();
- Locator.CurrentMutable.Register(() => styler.Object, typeof(IStyler));
- TestTemplatedControl target;
- var root = new TestRoot
- {
- Child = target = new TestTemplatedControl
- {
- Template = new ControlTemplate(_ =>
- {
- return new StackPanel
- {
- Children = new Controls
- {
- new TextBlock
- {
- }
- }
- };
- }),
- }
- };
- target.ApplyTemplate();
- styler.Verify(x => x.ApplyStyles(It.IsAny<TestTemplatedControl>()), Times.Once());
- styler.Verify(x => x.ApplyStyles(It.IsAny<StackPanel>()), Times.Once());
- styler.Verify(x => x.ApplyStyles(It.IsAny<TextBlock>()), Times.Once());
- }
- }
- [Fact]
- public void Templated_Children_Should_Have_TemplatedParent_Set()
- {
- var target = new TestTemplatedControl
- {
- Template = new ControlTemplate(_ =>
- {
- return new StackPanel
- {
- Children = new Controls
- {
- new TextBlock
- {
- }
- }
- };
- }),
- };
- target.ApplyTemplate();
- var panel = target.GetTemplateChildren().OfType<StackPanel>().Single();
- var textBlock = target.GetTemplateChildren().OfType<TextBlock>().Single();
- Assert.Equal(target, panel.TemplatedParent);
- Assert.Equal(target, textBlock.TemplatedParent);
- }
- [Fact]
- public void Presenter_Children_Should_Not_Have_TemplatedParent_Set()
- {
- var target = new TestTemplatedControl
- {
- Template = new ControlTemplate(_ =>
- {
- return new ContentPresenter
- {
- Content = new TextBlock
- {
- }
- };
- }),
- };
- target.ApplyTemplate();
- var presenter = target.GetTemplateChildren().OfType<ContentPresenter>().Single();
- var textBlock = (TextBlock)presenter.Child;
- Assert.Equal(target, presenter.TemplatedParent);
- Assert.Null(textBlock.TemplatedParent);
- }
- [Fact]
- public void Nested_Templated_Controls_Have_Correct_TemplatedParent()
- {
- var target = new TestTemplatedControl
- {
- Template = new ControlTemplate(_ =>
- {
- return new ContentControl
- {
- Template = new ControlTemplate(parent =>
- {
- return new Border
- {
- Child = new ContentPresenter
- {
- [~ContentPresenter.ContentProperty] = parent.GetObservable(ContentControl.ContentProperty),
- }
- };
- }),
- Content = new TextBlock
- {
- }
- };
- }),
- };
- target.ApplyTemplate();
- var contentControl = target.GetTemplateChildren().OfType<ContentControl>().Single();
- var border = contentControl.GetTemplateChildren().OfType<Border>().Single();
- var presenter = contentControl.GetTemplateChildren().OfType<ContentPresenter>().Single();
- var textBlock = (TextBlock)presenter.Content;
- Assert.Equal(target, contentControl.TemplatedParent);
- Assert.Equal(contentControl, border.TemplatedParent);
- Assert.Equal(contentControl, presenter.TemplatedParent);
- Assert.Equal(target, textBlock.TemplatedParent);
- }
- }
- }
|