From c3f71bc1c695a1a9c6110d97ed01cbd620cdc25d Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Thu, 9 Mar 2017 22:45:08 +0100 Subject: [PATCH] Added tests for stream binding operator in XAML. --- samples/BindingTest/BindingTest.csproj | 4 +++ samples/BindingTest/MainWindow.xaml | 2 ++ .../ViewModels/MainWindowViewModel.cs | 4 +++ samples/BindingTest/packages.config | 1 + .../Xaml/BindingTests.cs | 25 +++++++++++++++++++ 5 files changed, 36 insertions(+) diff --git a/samples/BindingTest/BindingTest.csproj b/samples/BindingTest/BindingTest.csproj index 2dc0cd445b..75ae306c75 100644 --- a/samples/BindingTest/BindingTest.csproj +++ b/samples/BindingTest/BindingTest.csproj @@ -60,6 +60,10 @@ ..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll True + + ..\..\packages\System.Reactive.Linq.3.0.0\lib\net45\System.Reactive.Linq.dll + True + diff --git a/samples/BindingTest/MainWindow.xaml b/samples/BindingTest/MainWindow.xaml index 95f671fd84..7d633bcd0c 100644 --- a/samples/BindingTest/MainWindow.xaml +++ b/samples/BindingTest/MainWindow.xaml @@ -44,6 +44,8 @@ + + diff --git a/samples/BindingTest/ViewModels/MainWindowViewModel.cs b/samples/BindingTest/ViewModels/MainWindowViewModel.cs index 4b58bf2279..2ec052c258 100644 --- a/samples/BindingTest/ViewModels/MainWindowViewModel.cs +++ b/samples/BindingTest/ViewModels/MainWindowViewModel.cs @@ -49,6 +49,9 @@ namespace BindingTest.ViewModels Thread.Sleep(1000); } }); + + CurrentTimeObservable = Observable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(1)) + .Select(x => DateTimeOffset.Now.ToString()); } public ObservableCollection Items { get; } @@ -85,6 +88,7 @@ namespace BindingTest.ViewModels private set { this.RaiseAndSetIfChanged(ref _currentTime, value); } } + public IObservable CurrentTimeObservable { get; } public ReactiveCommand StringValueCommand { get; } public DataAnnotationsErrorViewModel DataAnnotationsValidation { get; } = new DataAnnotationsErrorViewModel(); diff --git a/samples/BindingTest/packages.config b/samples/BindingTest/packages.config index 3c5f85de81..8b267c8cbd 100644 --- a/samples/BindingTest/packages.config +++ b/samples/BindingTest/packages.config @@ -4,4 +4,5 @@ + \ No newline at end of file diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BindingTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BindingTests.cs index e63b3996a3..b09fad9c25 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BindingTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BindingTests.cs @@ -1,6 +1,7 @@ // Copyright (c) The Avalonia Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. +using System.Reactive.Subjects; using Avalonia.Controls; using Avalonia.UnitTests; using Xunit; @@ -193,5 +194,29 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml Assert.Equal("foo", textBlock.Text); } } + + [Fact] + public void Stream_Binding_To_Observable_Works() + { + using (UnitTestApplication.Start(TestServices.MockWindowingPlatform)) + { + var xaml = @" + + +"; + var loader = new AvaloniaXamlLoader(); + var window = (Window)loader.Load(xaml); + var textBlock = (TextBlock)window.Content; + var observable = new BehaviorSubject("foo"); + + window.DataContext = new { Observable = observable }; + window.ApplyTemplate(); + + Assert.Equal("foo", textBlock.Text); + observable.OnNext("bar"); + Assert.Equal("bar", textBlock.Text); + } + } } } \ No newline at end of file