Browse Source

Added tests for stream binding operator in XAML.

pull/916/head
Steven Kirk 9 years ago
parent
commit
c3f71bc1c6
  1. 4
      samples/BindingTest/BindingTest.csproj
  2. 2
      samples/BindingTest/MainWindow.xaml
  3. 4
      samples/BindingTest/ViewModels/MainWindowViewModel.cs
  4. 1
      samples/BindingTest/packages.config
  5. 25
      tests/Avalonia.Markup.Xaml.UnitTests/Xaml/BindingTests.cs

4
samples/BindingTest/BindingTest.csproj

@ -60,6 +60,10 @@
<HintPath>..\..\packages\System.Reactive.Interfaces.3.0.0\lib\net45\System.Reactive.Interfaces.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Reactive.Linq, Version=3.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
<HintPath>..\..\packages\System.Reactive.Linq.3.0.0\lib\net45\System.Reactive.Linq.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />

2
samples/BindingTest/MainWindow.xaml

@ -44,6 +44,8 @@
<StackPanel Margin="18" Gap="4" Width="200" HorizontalAlignment="Left">
<TextBlock FontSize="16" Text="Scheduler"/>
<TextBox Watermark="Background Thread" Text="{Binding CurrentTime, Mode=OneWay}"/>
<TextBlock FontSize="16" Text="Stream Operator"/>
<TextBox Watermark="StreamOperator" Text="{Binding CurrentTimeObservable^, Mode=OneWay}"/>
</StackPanel>
</StackPanel>
</StackPanel>

4
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<TestItem> Items { get; }
@ -85,6 +88,7 @@ namespace BindingTest.ViewModels
private set { this.RaiseAndSetIfChanged(ref _currentTime, value); }
}
public IObservable<string> CurrentTimeObservable { get; }
public ReactiveCommand<object> StringValueCommand { get; }
public DataAnnotationsErrorViewModel DataAnnotationsValidation { get; } = new DataAnnotationsErrorViewModel();

1
samples/BindingTest/packages.config

@ -4,4 +4,5 @@
<package id="Splat" version="1.6.2" targetFramework="net46" />
<package id="System.Reactive.Core" version="3.0.0" targetFramework="net45" />
<package id="System.Reactive.Interfaces" version="3.0.0" targetFramework="net45" />
<package id="System.Reactive.Linq" version="3.0.0" targetFramework="net45" />
</packages>

25
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 = @"
<Window xmlns='https://github.com/avaloniaui'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
<TextBlock Name='textblock' Text='{Binding Observable^}'/>
</Window>";
var loader = new AvaloniaXamlLoader();
var window = (Window)loader.Load(xaml);
var textBlock = (TextBlock)window.Content;
var observable = new BehaviorSubject<string>("foo");
window.DataContext = new { Observable = observable };
window.ApplyTemplate();
Assert.Equal("foo", textBlock.Text);
observable.OnNext("bar");
Assert.Equal("bar", textBlock.Text);
}
}
}
}
Loading…
Cancel
Save