A cross-platform UI framework for .NET
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

89 lines
2.5 KiB

using System;
using System.Reactive.Subjects;
using Avalonia.UnitTests;
using Xunit;
namespace Avalonia.Base.UnitTests.Data.Core;
public partial class BindingExpressionTests
{
[Fact]
public void Should_Not_Get_Observable_Value_Without_Streaming()
{
using var sync = UnitTestSynchronizationContext.Begin();
var source = new BehaviorSubject<string>("foo");
var data = new { Foo = source };
var target = CreateTargetWithSource(data, o => o.Foo);
Assert.Same(source, target.Object);
GC.KeepAlive(data);
}
[Fact]
public void Should_Get_Simple_Observable_Value()
{
using var sync = UnitTestSynchronizationContext.Begin();
var source = new BehaviorSubject<string>("foo");
var data = new { Foo = source };
var target = CreateTargetWithSource(data, o => o.Foo.StreamBinding());
Assert.Equal("foo", target.String);
source.OnNext("bar");
Assert.Equal("bar", target.String);
GC.KeepAlive(data);
}
[Fact]
public void Should_Get_Property_Value_From_Observable()
{
using var sync = UnitTestSynchronizationContext.Begin();
var source = new BehaviorSubject<ViewModel>(new() { StringValue = "foo" });
var data = new ViewModel { NextObservable = source };
var target = CreateTargetWithSource(data, o => o.NextObservable.StreamBinding().StringValue);
Assert.Equal("foo", target.String);
GC.KeepAlive(data);
}
[Fact]
public void Should_Get_Simple_Observable_Value_With_DataValidation_Enabled()
{
using var sync = UnitTestSynchronizationContext.Begin();
var source = new BehaviorSubject<string>("foo");
var data = new { Foo = source };
var target = CreateTargetWithSource(
data,
o => o.Foo.StreamBinding(),
enableDataValidation: true);
Assert.Equal("foo", target.String);
source.OnNext("bar");
Assert.Equal("bar", target.String);
GC.KeepAlive(data);
}
[Fact]
public void Should_Work_With_Value_Type()
{
using var sync = UnitTestSynchronizationContext.Begin();
var source = new BehaviorSubject<int>(1);
var data = new { Foo = source };
var target = CreateTargetWithSource(data, o => o.Foo.StreamBinding());
Assert.Equal(1, target.Int);
source.OnNext(42);
Assert.Equal(42, target.Int);
GC.KeepAlive(data);
}
}