MemberSelectorTests.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. // Copyright (c) The Avalonia Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using Avalonia.Markup.Xaml.Templates;
  4. using System;
  5. using Xunit;
  6. namespace Avalonia.Markup.Xaml.UnitTests.Templates
  7. {
  8. public class MemberSelectorTests
  9. {
  10. [Fact]
  11. public void Should_Select_Child_Property_Value()
  12. {
  13. var selector = new MemberSelector() { MemberName = "Child.StringValue" };
  14. var data = new Item()
  15. {
  16. Child = new Item() { StringValue = "Value1" }
  17. };
  18. Assert.Same("Value1", selector.Select(data));
  19. }
  20. [Fact]
  21. public void Should_Select_Child_Property_Value_In_Multiple_Items()
  22. {
  23. var selector = new MemberSelector() { MemberName = "Child.StringValue" };
  24. var data = new Item[]
  25. {
  26. new Item() { Child = new Item() { StringValue = "Value1" } },
  27. new Item() { Child = new Item() { StringValue = "Value2" } },
  28. new Item() { Child = new Item() { StringValue = "Value3" } }
  29. };
  30. Assert.Same("Value1", selector.Select(data[0]));
  31. Assert.Same("Value2", selector.Select(data[1]));
  32. Assert.Same("Value3", selector.Select(data[2]));
  33. }
  34. [Fact]
  35. public void Should_Select_MoreComplex_Property_Value()
  36. {
  37. var selector = new MemberSelector() { MemberName = "Child.Child.Child.StringValue" };
  38. var data = new Item()
  39. {
  40. Child = new Item()
  41. {
  42. Child = new Item()
  43. {
  44. Child = new Item() { StringValue = "Value1" }
  45. }
  46. }
  47. };
  48. Assert.Same("Value1", selector.Select(data));
  49. }
  50. [Fact]
  51. public void Should_Select_Null_Value_On_Null_Object()
  52. {
  53. var selector = new MemberSelector() { MemberName = "StringValue" };
  54. Assert.Null(selector.Select(null));
  55. }
  56. [Fact]
  57. public void Should_Select_Null_Value_On_Wrong_MemberName()
  58. {
  59. var selector = new MemberSelector() { MemberName = "WrongProperty" };
  60. var data = new Item() { StringValue = "Value1" };
  61. Assert.Null(selector.Select(data));
  62. }
  63. [Fact]
  64. public void Should_Select_Simple_Property_Value()
  65. {
  66. var selector = new MemberSelector() { MemberName = "StringValue" };
  67. var data = new Item() { StringValue = "Value1" };
  68. Assert.Same("Value1", selector.Select(data));
  69. }
  70. [Fact]
  71. public void Should_Select_Simple_Property_Value_In_Multiple_Items()
  72. {
  73. var selector = new MemberSelector() { MemberName = "StringValue" };
  74. var data = new Item[]
  75. {
  76. new Item() { StringValue = "Value1" },
  77. new Item() { StringValue = "Value2" },
  78. new Item() { StringValue = "Value3" }
  79. };
  80. Assert.Same("Value1", selector.Select(data[0]));
  81. Assert.Same("Value2", selector.Select(data[1]));
  82. Assert.Same("Value3", selector.Select(data[2]));
  83. }
  84. [Fact]
  85. public void Should_Select_Target_On_Empty_MemberName()
  86. {
  87. var selector = new MemberSelector();
  88. var data = new Item() { StringValue = "Value1" };
  89. Assert.Same(data, selector.Select(data));
  90. }
  91. [Fact]
  92. public void Should_Support_Change_Of_MemberName()
  93. {
  94. var selector = new MemberSelector() { MemberName = "StringValue" };
  95. var data = new Item()
  96. {
  97. StringValue = "Value1",
  98. IntValue = 1
  99. };
  100. Assert.Same("Value1", selector.Select(data));
  101. selector.MemberName = "IntValue";
  102. Assert.Equal(1, selector.Select(data));
  103. }
  104. [Fact]
  105. public void Should_Support_Change_Of_Target_Value()
  106. {
  107. var selector = new MemberSelector() { MemberName = "StringValue" };
  108. var data = new Item()
  109. {
  110. StringValue = "Value1"
  111. };
  112. Assert.Same("Value1", selector.Select(data));
  113. data.StringValue = "Value2";
  114. Assert.Same("Value2", selector.Select(data));
  115. }
  116. private class Item
  117. {
  118. public Item Child { get; set; }
  119. public int IntValue { get; set; }
  120. public string StringValue { get; set; }
  121. }
  122. }
  123. }