PerspexObjectTests_GetObservable.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // -----------------------------------------------------------------------
  2. // <copyright file="PerspexObjectTests_GetObservable.cs" company="Steven Kirk">
  3. // Copyright 2015 MIT Licence. See licence.md for more information.
  4. // </copyright>
  5. // -----------------------------------------------------------------------
  6. namespace Perspex.Base.UnitTests
  7. {
  8. using System;
  9. using System.Reactive.Linq;
  10. using Xunit;
  11. public class PerspexObjectTests_GetObservable
  12. {
  13. [Fact]
  14. public void GetObservable_Returns_Initial_Value()
  15. {
  16. Class1 target = new Class1();
  17. int raised = 0;
  18. target.GetObservable(Class1.FooProperty).Subscribe(x =>
  19. {
  20. if (x == "foodefault")
  21. {
  22. ++raised;
  23. }
  24. });
  25. Assert.Equal(1, raised);
  26. }
  27. [Fact]
  28. public void GetObservable_Returns_Property_Change()
  29. {
  30. Class1 target = new Class1();
  31. bool raised = false;
  32. target.GetObservable(Class1.FooProperty).Subscribe(x => raised = x == "newvalue");
  33. raised = false;
  34. target.SetValue(Class1.FooProperty, "newvalue");
  35. Assert.True(raised);
  36. }
  37. [Fact]
  38. public void GetObservable_Returns_Property_Change_Only_For_Correct_Property()
  39. {
  40. Class2 target = new Class2();
  41. bool raised = false;
  42. target.GetObservable(Class1.FooProperty).Subscribe(x => raised = true);
  43. raised = false;
  44. target.SetValue(Class2.BarProperty, "newvalue");
  45. Assert.False(raised);
  46. }
  47. [Fact]
  48. public void GetObservable_Dispose_Stops_Property_Changes()
  49. {
  50. Class1 target = new Class1();
  51. bool raised = false;
  52. target.GetObservable(Class1.FooProperty)
  53. .Subscribe(x => raised = true)
  54. .Dispose();
  55. raised = false;
  56. target.SetValue(Class1.FooProperty, "newvalue");
  57. Assert.False(raised);
  58. }
  59. private class Class1 : PerspexObject
  60. {
  61. public static readonly PerspexProperty<string> FooProperty =
  62. PerspexProperty.Register<Class1, string>("Foo", "foodefault");
  63. }
  64. private class Class2 : Class1
  65. {
  66. public static readonly PerspexProperty<string> BarProperty =
  67. PerspexProperty.Register<Class2, string>("Bar", "bardefault");
  68. }
  69. }
  70. }