ExpressionSubjectTests.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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.Reactive.Linq;
  4. using Perspex.Markup.Data;
  5. using Xunit;
  6. namespace Perspex.Markup.UnitTests.Binding
  7. {
  8. public class ExpressionSubjectTests
  9. {
  10. [Fact]
  11. public async void Should_Get_Simple_Property_Value()
  12. {
  13. var data = new Class1 { StringValue = "foo" };
  14. var target = new ExpressionSubject(new ExpressionObserver(data, "StringValue"), typeof(string));
  15. var result = await target.Take(1);
  16. Assert.Equal("foo", result);
  17. }
  18. [Fact]
  19. public void Should_Set_Simple_Property_Value()
  20. {
  21. var data = new Class1 { StringValue = "foo" };
  22. var target = new ExpressionSubject(new ExpressionObserver(data, "StringValue"), typeof(string));
  23. target.OnNext("bar");
  24. Assert.Equal("bar", data.StringValue);
  25. }
  26. [Fact]
  27. public async void Should_Convert_Get_String_To_Double()
  28. {
  29. var data = new Class1 { StringValue = "5.6" };
  30. var target = new ExpressionSubject(new ExpressionObserver(data, "StringValue"), typeof(double));
  31. var result = await target.Take(1);
  32. Assert.Equal(5.6, result);
  33. }
  34. [Fact]
  35. public async void Should_Convert_Get_Invalid_Double_String_To_UnsetValue()
  36. {
  37. var data = new Class1 { StringValue = "foo" };
  38. var target = new ExpressionSubject(new ExpressionObserver(data, "StringValue"), typeof(double));
  39. var result = await target.Take(1);
  40. Assert.Equal(PerspexProperty.UnsetValue, result);
  41. }
  42. [Fact]
  43. public async void Should_Coerce_Get_Null_Double_String_To_UnsetValue()
  44. {
  45. var data = new Class1 { StringValue = null };
  46. var target = new ExpressionSubject(new ExpressionObserver(data, "StringValue"), typeof(double));
  47. var result = await target.Take(1);
  48. Assert.Equal(PerspexProperty.UnsetValue, result);
  49. }
  50. [Fact]
  51. public void Should_Convert_Set_String_To_Double()
  52. {
  53. var data = new Class1 { StringValue = "5.6" };
  54. var target = new ExpressionSubject(new ExpressionObserver(data, "StringValue"), typeof(double));
  55. target.OnNext(6.7);
  56. Assert.Equal("6.7", data.StringValue);
  57. }
  58. [Fact]
  59. public async void Should_Convert_Get_Double_To_String()
  60. {
  61. var data = new Class1 { DoubleValue = 5.6 };
  62. var target = new ExpressionSubject(new ExpressionObserver(data, "DoubleValue"), typeof(string));
  63. var result = await target.Take(1);
  64. Assert.Equal("5.6", result);
  65. }
  66. [Fact]
  67. public void Should_Convert_Set_Double_To_String()
  68. {
  69. var data = new Class1 { DoubleValue = 5.6 };
  70. var target = new ExpressionSubject(new ExpressionObserver(data, "DoubleValue"), typeof(string));
  71. target.OnNext("6.7");
  72. Assert.Equal(6.7, data.DoubleValue);
  73. }
  74. [Fact]
  75. public void Should_Coerce_Set_Invalid_Double_String_To_Default_Value()
  76. {
  77. var data = new Class1 { DoubleValue = 5.6 };
  78. var target = new ExpressionSubject(new ExpressionObserver(data, "DoubleValue"), typeof(string));
  79. target.OnNext("foo");
  80. Assert.Equal(0, data.DoubleValue);
  81. }
  82. [Fact]
  83. public void Should_Coerce_Setting_Null_Double_To_Default_Value()
  84. {
  85. var data = new Class1 { DoubleValue = 5.6 };
  86. var target = new ExpressionSubject(new ExpressionObserver(data, "DoubleValue"), typeof(string));
  87. target.OnNext(null);
  88. Assert.Equal(0, data.DoubleValue);
  89. }
  90. [Fact]
  91. public void Should_Coerce_Setting_UnsetValue_Double_To_Default_Value()
  92. {
  93. var data = new Class1 { DoubleValue = 5.6 };
  94. var target = new ExpressionSubject(new ExpressionObserver(data, "DoubleValue"), typeof(string));
  95. target.OnNext(PerspexProperty.UnsetValue);
  96. Assert.Equal(0, data.DoubleValue);
  97. }
  98. private class Class1
  99. {
  100. public string StringValue { get; set; }
  101. public double DoubleValue { get; set; }
  102. }
  103. }
  104. }