ExpressionObserverTests_Task.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Copyright (c) The Perspex Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Reactive.Linq;
  6. using System.Threading.Tasks;
  7. using Perspex.Markup.Binding;
  8. using Xunit;
  9. namespace Perspex.Markup.UnitTests.Binding
  10. {
  11. public class ExpressionObserverTests_Task
  12. {
  13. [Fact]
  14. public void Should_Get_Simple_Task_Value()
  15. {
  16. var tcs = new TaskCompletionSource<string>();
  17. var data = new { Foo = tcs.Task };
  18. var target = new ExpressionObserver(data, "Foo");
  19. var result = new List<object>();
  20. var sub = target.Subscribe(x => result.Add(x.Value));
  21. tcs.SetResult("foo");
  22. Assert.Equal(new object[] { null, "foo" }, result.ToArray());
  23. }
  24. [Fact]
  25. public void Should_Get_Property_Value_From_Task()
  26. {
  27. var tcs = new TaskCompletionSource<Class2>();
  28. var data = new Class1(tcs.Task);
  29. var target = new ExpressionObserver(data, "Next.Foo");
  30. var result = new List<object>();
  31. var sub = target.Subscribe(x => result.Add(x.Value));
  32. tcs.SetResult(new Class2("foo"));
  33. Assert.Equal(new object[] { null, "foo" }, result.ToArray());
  34. }
  35. private class Class1 : NotifyingBase
  36. {
  37. public Class1(Task<Class2> next)
  38. {
  39. Next = next;
  40. }
  41. public Task<Class2> Next { get; }
  42. }
  43. private class Class2 : NotifyingBase
  44. {
  45. public Class2(string foo)
  46. {
  47. Foo = foo;
  48. }
  49. public string Foo { get; }
  50. }
  51. }
  52. }