@ -12,6 +12,7 @@ using Avalonia.Data.Core;
using Avalonia.UnitTests ;
using Xunit ;
using System.Threading.Tasks ;
using Avalonia.Markup.Parsers ;
namespace Avalonia.Base.UnitTests.Data.Core
{
@ -21,7 +22,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public async Task Should_Get_Simple_Property_Value ( )
{
var data = new { Foo = "foo" } ;
var target = new ExpressionObserver ( data , "Foo" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Foo" ) ;
var result = await target . Take ( 1 ) ;
Assert . Equal ( "foo" , result ) ;
@ -33,7 +34,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void Should_Get_Simple_Property_Value_Type ( )
{
var data = new { Foo = "foo" } ;
var target = new ExpressionObserver ( data , "Foo" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Foo" ) ;
target . Subscribe ( _ = > { } ) ;
@ -46,7 +47,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public async Task Should_Get_Simple_Property_Value_Null ( )
{
var data = new { Foo = ( string ) null } ;
var target = new ExpressionObserver ( data , "Foo" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Foo" ) ;
var result = await target . Take ( 1 ) ;
Assert . Null ( result ) ;
@ -58,7 +59,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public async Task Should_Get_Simple_Property_From_Base_Class ( )
{
var data = new Class3 { Foo = "foo" } ;
var target = new ExpressionObserver ( data , "Foo" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Foo" ) ;
var result = await target . Take ( 1 ) ;
Assert . Equal ( "foo" , result ) ;
@ -70,7 +71,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public async Task Should_Return_BindingNotification_Error_For_Root_Null ( )
{
var data = new Class3 { Foo = "foo" } ;
var target = new ExpressionObserver ( default ( object ) , "Foo" ) ;
var target = ExpressionObserverBuilder . Build ( default ( object ) , "Foo" ) ;
var result = await target . Take ( 1 ) ;
Assert . Equal (
@ -87,7 +88,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public async Task Should_Return_BindingNotification_Error_For_Root_UnsetValue ( )
{
var data = new Class3 { Foo = "foo" } ;
var target = new ExpressionObserver ( AvaloniaProperty . UnsetValue , "Foo" ) ;
var target = ExpressionObserverBuilder . Build ( AvaloniaProperty . UnsetValue , "Foo" ) ;
var result = await target . Take ( 1 ) ;
Assert . Equal (
@ -104,7 +105,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public async Task Should_Return_BindingNotification_Error_For_Observable_Root_Null ( )
{
var data = new Class3 { Foo = "foo" } ;
var target = new ExpressionObserver ( Observable . Return ( default ( object ) ) , "Foo" ) ;
var target = ExpressionObserverBuilder . Build ( Observable . Return ( default ( object ) ) , "Foo" ) ;
var result = await target . Take ( 1 ) ;
Assert . Equal (
@ -121,7 +122,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public async void Should_Return_BindingNotification_Error_For_Observable_Root_UnsetValue ( )
{
var data = new Class3 { Foo = "foo" } ;
var target = new ExpressionObserver ( Observable . Return ( AvaloniaProperty . UnsetValue ) , "Foo" ) ;
var target = ExpressionObserverBuilder . Build ( Observable . Return ( AvaloniaProperty . UnsetValue ) , "Foo" ) ;
var result = await target . Take ( 1 ) ;
Assert . Equal (
@ -138,7 +139,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public async Task Should_Get_Simple_Property_Chain ( )
{
var data = new { Foo = new { Bar = new { Baz = "baz" } } } ;
var target = new ExpressionObserver ( data , "Foo.Bar.Baz" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Foo.Bar.Baz" ) ;
var result = await target . Take ( 1 ) ;
Assert . Equal ( "baz" , result ) ;
@ -150,7 +151,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void Should_Get_Simple_Property_Chain_Type ( )
{
var data = new { Foo = new { Bar = new { Baz = "baz" } } } ;
var target = new ExpressionObserver ( data , "Foo.Bar.Baz" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Foo.Bar.Baz" ) ;
target . Subscribe ( _ = > { } ) ;
@ -163,7 +164,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public async Task Should_Return_BindingNotification_Error_For_Broken_Chain ( )
{
var data = new { Foo = new { Bar = 1 } } ;
var target = new ExpressionObserver ( data , "Foo.Bar.Baz" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Foo.Bar.Baz" ) ;
var result = await target . Take ( 1 ) ;
Assert . IsType < BindingNotification > ( result ) ;
@ -180,7 +181,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void Should_Return_BindingNotification_Error_For_Chain_With_Null_Value ( )
{
var data = new { Foo = default ( object ) } ;
var target = new ExpressionObserver ( data , "Foo.Bar.Baz" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Foo.Bar.Baz" ) ;
var result = new List < object > ( ) ;
target . Subscribe ( x = > result . Add ( x ) ) ;
@ -202,7 +203,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void Should_Have_Null_ResultType_For_Broken_Chain ( )
{
var data = new { Foo = new { Bar = 1 } } ;
var target = new ExpressionObserver ( data , "Foo.Bar.Baz" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Foo.Bar.Baz" ) ;
Assert . Null ( target . ResultType ) ;
@ -213,7 +214,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void Should_Track_Simple_Property_Value ( )
{
var data = new Class1 { Foo = "foo" } ;
var target = new ExpressionObserver ( data , "Foo" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Foo" ) ;
var result = new List < object > ( ) ;
var sub = target . Subscribe ( x = > result . Add ( x ) ) ;
@ -232,7 +233,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void Should_Trigger_PropertyChanged_On_Null_Or_Empty_String ( )
{
var data = new Class1 { Bar = "foo" } ;
var target = new ExpressionObserver ( data , "Bar" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Bar" ) ;
var result = new List < object > ( ) ;
var sub = target . Subscribe ( x = > result . Add ( x ) ) ;
@ -262,7 +263,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void Should_Track_End_Of_Property_Chain_Changing ( )
{
var data = new Class1 { Next = new Class2 { Bar = "bar" } } ;
var target = new ExpressionObserver ( data , "Next.Bar" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Next.Bar" ) ;
var result = new List < object > ( ) ;
var sub = target . Subscribe ( x = > result . Add ( x ) ) ;
@ -283,7 +284,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void Should_Track_Property_Chain_Changing ( )
{
var data = new Class1 { Next = new Class2 { Bar = "bar" } } ;
var target = new ExpressionObserver ( data , "Next.Bar" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Next.Bar" ) ;
var result = new List < object > ( ) ;
var sub = target . Subscribe ( x = > result . Add ( x ) ) ;
@ -316,7 +317,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
}
} ;
var target = new ExpressionObserver ( data , "Next.Next.Bar" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Next.Next.Bar" ) ;
var result = new List < object > ( ) ;
var sub = target . Subscribe ( x = > result . Add ( x ) ) ;
@ -349,7 +350,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void Should_Track_Property_Chain_Breaking_With_Missing_Member_Then_Mending ( )
{
var data = new Class1 { Next = new Class2 { Bar = "bar" } } ;
var target = new ExpressionObserver ( data , "Next.Bar" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Next.Bar" ) ;
var result = new List < object > ( ) ;
var sub = target . Subscribe ( x = > result . Add ( x ) ) ;
@ -384,7 +385,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
{
var data = new Class1 { Foo = "foo" } ;
var update = new Subject < Unit > ( ) ;
var target = new ExpressionObserver ( ( ) = > data . Foo , "" , update ) ;
var target = ExpressionObserverBuilder . Build ( ( ) = > data . Foo , "" , update ) ;
var result = new List < object > ( ) ;
target . Subscribe ( x = > result . Add ( x ) ) ;
@ -404,7 +405,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
var source = scheduler . CreateColdObservable (
OnNext ( 1 , new Class1 { Foo = "foo" } ) ,
OnNext ( 2 , new Class1 { Foo = "bar" } ) ) ;
var target = new ExpressionObserver ( source , "Foo" ) ;
var target = ExpressionObserverBuilder . Build ( source , "Foo" ) ;
var result = new List < object > ( ) ;
using ( target . Subscribe ( x = > result . Add ( x ) ) )
@ -420,7 +421,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void Subscribing_Multiple_Times_Should_Return_Values_To_All ( )
{
var data = new Class1 { Foo = "foo" } ;
var target = new ExpressionObserver ( data , "Foo" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Foo" ) ;
var result1 = new List < object > ( ) ;
var result2 = new List < object > ( ) ;
var result3 = new List < object > ( ) ;
@ -443,7 +444,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void Subscribing_Multiple_Times_Should_Only_Add_PropertyChanged_Handlers_Once ( )
{
var data = new Class1 { Foo = "foo" } ;
var target = new ExpressionObserver ( data , "Foo" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Foo" ) ;
var sub1 = target . Subscribe ( x = > { } ) ;
var sub2 = target . Subscribe ( x = > { } ) ;
@ -462,7 +463,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void SetValue_Should_Set_Simple_Property_Value ( )
{
var data = new Class1 { Foo = "foo" } ;
var target = new ExpressionObserver ( data , "Foo" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Foo" ) ;
using ( target . Subscribe ( _ = > { } ) )
{
@ -478,7 +479,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void SetValue_Should_Set_Property_At_The_End_Of_Chain ( )
{
var data = new Class1 { Next = new Class2 { Bar = "bar" } } ;
var target = new ExpressionObserver ( data , "Next.Bar" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Next.Bar" ) ;
using ( target . Subscribe ( _ = > { } ) )
{
@ -494,7 +495,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void SetValue_Should_Return_False_For_Missing_Property ( )
{
var data = new Class1 { Next = new WithoutBar ( ) } ;
var target = new ExpressionObserver ( data , "Next.Bar" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Next.Bar" ) ;
using ( target . Subscribe ( _ = > { } ) )
{
@ -508,7 +509,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void SetValue_Should_Notify_New_Value_With_Inpc ( )
{
var data = new Class1 ( ) ;
var target = new ExpressionObserver ( data , "Foo" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Foo" ) ;
var result = new List < object > ( ) ;
target . Subscribe ( x = > result . Add ( x ) ) ;
@ -523,7 +524,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void SetValue_Should_Notify_New_Value_Without_Inpc ( )
{
var data = new Class1 ( ) ;
var target = new ExpressionObserver ( data , "Bar" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Bar" ) ;
var result = new List < object > ( ) ;
target . Subscribe ( x = > result . Add ( x ) ) ;
@ -538,7 +539,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
public void SetValue_Should_Return_False_For_Missing_Object ( )
{
var data = new Class1 ( ) ;
var target = new ExpressionObserver ( data , "Next.Bar" ) ;
var target = ExpressionObserverBuilder . Build ( data , "Next.Bar" ) ;
using ( target . Subscribe ( _ = > { } ) )
{
@ -555,7 +556,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
var second = new Class1 { Foo = "bar" } ;
var root = first ;
var update = new Subject < Unit > ( ) ;
var target = new ExpressionObserver ( ( ) = > root , "Foo" , update ) ;
var target = ExpressionObserverBuilder . Build ( ( ) = > root , "Foo" , update ) ;
var result = new List < object > ( ) ;
var sub = target . Subscribe ( x = > result . Add ( x ) ) ;
@ -589,7 +590,7 @@ namespace Avalonia.Base.UnitTests.Data.Core
Func < Tuple < ExpressionObserver , WeakReference > > run = ( ) = >
{
var source = new Class1 { Foo = "foo" } ;
var target = new ExpressionObserver ( source , "Foo" ) ;
var target = ExpressionObserverBuilder . Build ( source , "Foo" ) ;
return Tuple . Create ( target , new WeakReference ( source ) ) ;
} ;