1
0

CompiledBindingExtensionTests.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Reactive.Subjects;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Avalonia.Controls;
  7. using Avalonia.Markup.Data;
  8. using Avalonia.UnitTests;
  9. using Xunit;
  10. namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
  11. {
  12. public class CompiledBindingExtensionTests
  13. {
  14. [Fact]
  15. public void ResolvesClrPropertyBasedOnDataContextType()
  16. {
  17. using (UnitTestApplication.Start(TestServices.StyledWindow))
  18. {
  19. var xaml = @"
  20. <Window xmlns='https://github.com/avaloniaui'
  21. xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
  22. xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.MarkupExtensions;assembly=Avalonia.Markup.Xaml.UnitTests'
  23. x:DataContextType='{x:Type local:TestDataContext}'>
  24. <TextBlock Text='{CompiledBinding StringProperty}' Name='textBlock' />
  25. </Window>";
  26. var loader = new AvaloniaXamlLoader();
  27. var window = (Window)loader.Load(xaml);
  28. var textBlock = window.FindControl<TextBlock>("textBlock");
  29. DelayedBinding.ApplyBindings(textBlock);
  30. var dataContext = new TestDataContext
  31. {
  32. StringProperty = "foobar"
  33. };
  34. window.DataContext = dataContext;
  35. Assert.Equal(dataContext.StringProperty, textBlock.Text);
  36. }
  37. }
  38. [Fact]
  39. public void ResolvesStreamTaskBindingCorrectly()
  40. {
  41. using (UnitTestApplication.Start(TestServices.StyledWindow))
  42. {
  43. var xaml = @"
  44. <Window xmlns='https://github.com/avaloniaui'
  45. xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
  46. xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.MarkupExtensions;assembly=Avalonia.Markup.Xaml.UnitTests'
  47. x:DataContextType='{x:Type local:TestDataContext}'>
  48. <TextBlock Text='{CompiledBinding TaskProperty^}' Name='textBlock' />
  49. </Window>";
  50. var loader = new AvaloniaXamlLoader();
  51. var window = (Window)loader.Load(xaml);
  52. var textBlock = window.FindControl<TextBlock>("textBlock");
  53. DelayedBinding.ApplyBindings(textBlock);
  54. var dataContext = new TestDataContext
  55. {
  56. TaskProperty = Task.FromResult("foobar")
  57. };
  58. window.DataContext = dataContext;
  59. Assert.Equal(dataContext.TaskProperty.Result, textBlock.Text);
  60. }
  61. }
  62. [Fact]
  63. public void ResolvesStreamObservableBindingCorrectly()
  64. {
  65. using (UnitTestApplication.Start(TestServices.StyledWindow))
  66. {
  67. var xaml = @"
  68. <Window xmlns='https://github.com/avaloniaui'
  69. xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
  70. xmlns:local='clr-namespace:Avalonia.Markup.Xaml.UnitTests.MarkupExtensions;assembly=Avalonia.Markup.Xaml.UnitTests'
  71. x:DataContextType='{x:Type local:TestDataContext}'>
  72. <TextBlock Text='{CompiledBinding ObservableProperty^}' Name='textBlock' />
  73. </Window>";
  74. var loader = new AvaloniaXamlLoader();
  75. var window = (Window)loader.Load(xaml);
  76. var textBlock = window.FindControl<TextBlock>("textBlock");
  77. DelayedBinding.ApplyBindings(textBlock);
  78. var subject = new Subject<string>();
  79. var dataContext = new TestDataContext
  80. {
  81. ObservableProperty = subject
  82. };
  83. window.DataContext = dataContext;
  84. subject.OnNext("foobar");
  85. Assert.Equal("foobar", textBlock.Text);
  86. }
  87. }
  88. }
  89. public class TestDataContext
  90. {
  91. public string StringProperty { get; set; }
  92. public Task<string> TaskProperty { get; set; }
  93. public IObservable<string> ObservableProperty { get; set; }
  94. }
  95. }