ExpressionNodeBuilderTests.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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.Collections.Generic;
  4. using Perspex.Markup.Binding;
  5. using Xunit;
  6. namespace Perspex.Markup.UnitTests.Binding
  7. {
  8. public class ExpressionNodeBuilderTests
  9. {
  10. [Fact]
  11. public void Should_Build_Single_Property()
  12. {
  13. var result = ToList(ExpressionNodeBuilder.Build("Foo"));
  14. Assert.Equal(1, result.Count);
  15. Assert.IsType<PropertyAccessorNode>(result[0]);
  16. }
  17. [Fact]
  18. public void Should_Build_Property_Chain()
  19. {
  20. var result = ToList(ExpressionNodeBuilder.Build("Foo.Bar.Baz"));
  21. Assert.Equal(3, result.Count);
  22. Assert.IsType<PropertyAccessorNode>(result[0]);
  23. Assert.IsType<PropertyAccessorNode>(result[1]);
  24. Assert.IsType<PropertyAccessorNode>(result[2]);
  25. }
  26. [Fact]
  27. public void Should_Build_Negated_Property_Chain()
  28. {
  29. var result = ToList(ExpressionNodeBuilder.Build("!Foo.Bar.Baz"));
  30. Assert.Equal(4, result.Count);
  31. Assert.IsType<LogicalNotNode>(result[0]);
  32. Assert.IsType<PropertyAccessorNode>(result[1]);
  33. Assert.IsType<PropertyAccessorNode>(result[2]);
  34. Assert.IsType<PropertyAccessorNode>(result[3]);
  35. }
  36. [Fact]
  37. public void Should_Build_Double_Negated_Property_Chain()
  38. {
  39. var result = ToList(ExpressionNodeBuilder.Build("!!Foo.Bar.Baz"));
  40. Assert.Equal(5, result.Count);
  41. Assert.IsType<LogicalNotNode>(result[0]);
  42. Assert.IsType<LogicalNotNode>(result[1]);
  43. Assert.IsType<PropertyAccessorNode>(result[2]);
  44. Assert.IsType<PropertyAccessorNode>(result[3]);
  45. Assert.IsType<PropertyAccessorNode>(result[4]);
  46. }
  47. private List<ExpressionNode> ToList(ExpressionNode node)
  48. {
  49. var result = new List<ExpressionNode>();
  50. while (node != null)
  51. {
  52. result.Add(node);
  53. node = node.Next;
  54. }
  55. return result;
  56. }
  57. }
  58. }