DesignTests.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. using Avalonia.Controls.Templates;
  2. using Avalonia.LogicalTree;
  3. using Avalonia.Markup.Xaml.MarkupExtensions;
  4. using Avalonia.Media;
  5. using Avalonia.UnitTests;
  6. using Avalonia.Styling;
  7. using System;
  8. using System.Linq;
  9. using Avalonia.Controls.Primitives;
  10. using Xunit;
  11. namespace Avalonia.Controls.UnitTests;
  12. public class DesignTests : ScopedTestBase
  13. {
  14. [Fact]
  15. public void Should_Preview_Resource_Dictionary_With_Template()
  16. {
  17. using var _ = UnitTestApplication.Start(TestServices.StyledWindow);
  18. var dictionary = new ResourceDictionary { ["TestColor"] = Colors.Green };
  19. Design.SetPreviewWith(dictionary,
  20. new FuncTemplate<Control>(static () =>
  21. new Border { [!Border.BackgroundProperty] = new DynamicResourceExtension("TestColor") }));
  22. var preview = Design.CreatePreviewWithControl(dictionary);
  23. var border = Assert.IsType<Border>(preview);
  24. Assert.Equal(Colors.Green, ((ISolidColorBrush)border.Background!).Color);
  25. }
  26. [Fact]
  27. public void Should_Preview_DataTemplate_With_ContentControl()
  28. {
  29. using var _ = UnitTestApplication.Start(TestServices.StyledWindow);
  30. const string testData = "Test Data";
  31. var dataTemplate = new FuncDataTemplate<string>((data, _) =>
  32. new TextBlock { Text = data });
  33. Design.SetPreviewWith(dataTemplate,
  34. new FuncTemplate<Control>(static () => new ContentControl { Content = testData }));
  35. var preview = Design.CreatePreviewWithControl(dataTemplate);
  36. var previewContentControl = Assert.IsType<ContentControl>(preview);
  37. Assert.Equal(testData, previewContentControl.Content);
  38. Assert.Same(dataTemplate, previewContentControl.ContentTemplate);
  39. }
  40. [Fact]
  41. public void Should_Preview_DataTemplate_With_DataContext()
  42. {
  43. using var _ = UnitTestApplication.Start(TestServices.StyledWindow);
  44. const string testData = "Test Data";
  45. var dataTemplate = new FuncDataTemplate<string>((data, _) =>
  46. new TextBlock { Text = data });
  47. Design.SetDataContext(dataTemplate, testData);
  48. var preview = Design.CreatePreviewWithControl(dataTemplate);
  49. var previewContentControl = Assert.IsType<ContentControl>(preview);
  50. Assert.Equal(testData, previewContentControl.Content);
  51. Assert.Same(dataTemplate, previewContentControl.ContentTemplate);
  52. }
  53. [Fact]
  54. public void Should_Preview_Control_With_Another_Control()
  55. {
  56. using var _ = UnitTestApplication.Start(TestServices.StyledWindow);
  57. var control = new TextBlock();
  58. Design.SetPreviewWith(control,
  59. new FuncTemplate<Control>(static () => new Border()));
  60. var preview = Design.CreatePreviewWithControl(control);
  61. Assert.IsType<Border>(preview);
  62. }
  63. [Fact]
  64. public void Should_Apply_Design_Mode_Properties()
  65. {
  66. using var _ = UnitTestApplication.Start(TestServices.StyledWindow);
  67. var control = new ContentControl();
  68. Design.SetWidth(control, 200);
  69. Design.SetHeight(control, 150);
  70. Design.SetDataContext(control, "TestDataContext");
  71. Design.SetDesignStyle(control,
  72. new Style(x => x.OfType<ContentControl>())
  73. {
  74. Setters = { new Setter(TemplatedControl.BackgroundProperty, Brushes.Yellow) }
  75. });
  76. Design.ApplyDesignModeProperties(control, control);
  77. Assert.Equal(200, control.Width);
  78. Assert.Equal(150, control.Height);
  79. Assert.Equal("TestDataContext", control.DataContext);
  80. Assert.Contains(control.Styles,
  81. s => ((Style)s).Setters.OfType<Setter>().First().Property == TemplatedControl.BackgroundProperty);
  82. }
  83. [Fact]
  84. public void Should_Not_Throw_Exception_On_Generic_Style()
  85. {
  86. using var _ = UnitTestApplication.Start(TestServices.StyledWindow);
  87. var preview = Design.CreatePreviewWithControl(new Style(x => x.OfType<Button>()));
  88. // We are not going to test specific content of the placeholder preview control.
  89. // But it should not throw and should not return null at least.
  90. Assert.NotNull(preview);
  91. }
  92. [Fact]
  93. public void Should_Not_Throw_Exception_On_Generic_Resource_Dictionary()
  94. {
  95. using var _ = UnitTestApplication.Start(TestServices.StyledWindow);
  96. var preview = Design.CreatePreviewWithControl(new ResourceDictionary());
  97. Assert.NotNull(preview);
  98. }
  99. [Fact]
  100. public void Should_Not_Throw_Exception_On_Generic_Data_Template()
  101. {
  102. using var _ = UnitTestApplication.Start(TestServices.StyledWindow);
  103. var preview = Design.CreatePreviewWithControl(new FuncDataTemplate<string>((data, _) =>
  104. new TextBlock { Text = data }));
  105. Assert.NotNull(preview);
  106. }
  107. [Fact]
  108. public void Should_Not_Throw_Exception_On_Application()
  109. {
  110. using var _ = UnitTestApplication.Start(TestServices.StyledWindow);
  111. var app = new Application();
  112. var preview = Design.CreatePreviewWithControl(app);
  113. Assert.NotNull(preview);
  114. }
  115. }