ContentPresenterTests.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. // Copyright (c) The Perspex Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using System.Linq;
  4. using Moq;
  5. using Perspex.Controls.Presenters;
  6. using Perspex.Controls.Primitives;
  7. using Perspex.Controls.Templates;
  8. using Perspex.VisualTree;
  9. using Xunit;
  10. namespace Perspex.Controls.UnitTests.Presenters
  11. {
  12. public class ContentPresenterTests
  13. {
  14. [Fact]
  15. public void Should_Register_With_Host_When_TemplatedParent_Set()
  16. {
  17. var host = new Mock<IContentPresenterHost>();
  18. var target = new ContentPresenter();
  19. target.SetValue(Control.TemplatedParentProperty, host.Object);
  20. host.Verify(x => x.RegisterContentPresenter(target));
  21. }
  22. [Fact]
  23. public void Setting_Content_To_Control_Should_Set_Child()
  24. {
  25. var target = new ContentPresenter();
  26. var child = new Border();
  27. target.Content = child;
  28. Assert.Null(target.Child);
  29. target.UpdateChild();
  30. Assert.Equal(child, target.Child);
  31. }
  32. [Fact]
  33. public void Setting_Content_To_String_Should_Create_TextBlock()
  34. {
  35. var target = new ContentPresenter();
  36. target.Content = "Foo";
  37. Assert.Null(target.Child);
  38. target.UpdateChild();
  39. Assert.IsType<TextBlock>(target.Child);
  40. Assert.Equal("Foo", ((TextBlock)target.Child).Text);
  41. }
  42. [Fact]
  43. public void Should_Set_Childs_Parent_To_TemplatedParent()
  44. {
  45. var content = new Border();
  46. var target = new TestContentControl
  47. {
  48. Template = new FuncControlTemplate<TestContentControl>(parent =>
  49. new ContentPresenter { Content = parent.Child }),
  50. Child = content,
  51. };
  52. target.ApplyTemplate();
  53. var presenter = ((ContentPresenter)target.GetVisualChildren().Single());
  54. presenter.UpdateChild();
  55. Assert.Same(target, content.Parent);
  56. }
  57. [Fact]
  58. public void Should_Set_Childs_Parent_To_Itself_Outside_Template()
  59. {
  60. var content = new Border();
  61. var target = new ContentPresenter { Content = content };
  62. target.UpdateChild();
  63. Assert.Same(target, content.Parent);
  64. }
  65. [Fact]
  66. public void Adding_To_Logical_Tree_Should_Reevaluate_DataTemplates()
  67. {
  68. var target = new ContentPresenter
  69. {
  70. Content = "Foo",
  71. };
  72. target.UpdateChild();
  73. Assert.IsType<TextBlock>(target.Child);
  74. var root = new TestRoot
  75. {
  76. DataTemplates = new DataTemplates
  77. {
  78. new FuncDataTemplate<string>(x => new Decorator()),
  79. },
  80. };
  81. root.Child = target;
  82. target.ApplyTemplate();
  83. Assert.IsType<Decorator>(target.Child);
  84. }
  85. private class TestContentControl : TemplatedControl
  86. {
  87. public IControl Child { get; set; }
  88. }
  89. }
  90. }