public void Analyze_ExpressionContainsNewOperatorWithMemberAssignmentInitialization_ReturnsPropertyAccessTree() { Expression <Func <Person, Person> > expression = person => new Person() { Name = person.Name, Age = person.Age }; var tree = ExpressionPropertyAnalyzer.Analyze(expression); Assert.AreEqual(1, tree.Children.Count); PropertyAccessTreeNode parameterNode = tree.Children[0]; parameterNode.Should().BeOfType <ParameterNode>(); Assert.AreEqual(2, parameterNode.Children.Count); PropertyAccessNode ageNode = (PropertyAccessNode)parameterNode.Children[0]; Assert.AreEqual(_ageProperty, ageNode.Property); Assert.AreEqual(0, ageNode.Children.Count); PropertyAccessNode nameNode = (PropertyAccessNode)parameterNode.Children[1]; Assert.AreEqual(_nameProperty, nameNode.Property); Assert.AreEqual(0, nameNode.Children.Count); }
public void Analyze_ExpressionIncludesConstantImplementingINotifyPropertyChanged_TreeContainsTwoBranches() { Person localPersonAppearingAsConstantInExpression = new Person(); Expression <Func <Person, int> > expression = p => p.Age + localPersonAppearingAsConstantInExpression.Age; PropertyAccessTree tree = ExpressionPropertyAnalyzer.Analyze(expression); Assert.AreEqual(2, tree.Children.Count); PropertyAccessTreeNode parameterNode = tree.Children[0]; parameterNode.Should().BeOfType <ParameterNode>(); Assert.AreEqual(1, parameterNode.Children.Count); PropertyAccessNode parameterAgeNode = (PropertyAccessNode)parameterNode.Children[0]; Assert.AreEqual(_ageProperty, parameterAgeNode.Property); Assert.AreEqual(0, parameterAgeNode.Children.Count); PropertyAccessTreeNode constantNode = tree.Children[1]; constantNode.Should().BeOfType <ConstantNode>(); Assert.AreEqual(localPersonAppearingAsConstantInExpression, ((ConstantNode)constantNode).Value); Assert.AreEqual(1, constantNode.Children.Count); PropertyAccessNode constantAgeNode = (PropertyAccessNode)constantNode.Children[0]; Assert.AreEqual(_ageProperty, constantAgeNode.Property); Assert.AreEqual(0, constantAgeNode.Children.Count); }
public void Analyze_ExpressionContainsDelegate_ReturnsPropertyAccessTree() { Func <Person, string> del = person => person.Name; Expression <Func <Person, string> > expression = person => del(person); var tree = ExpressionPropertyAnalyzer.Analyze(expression); Assert.AreEqual(1, tree.Children.Count); PropertyAccessTreeNode parameterNode = tree.Children[0]; parameterNode.Should().BeOfType <ParameterNode>(); Assert.AreEqual(0, parameterNode.Children.Count); }
public void Analyze_SpecialTypeFilterWithExpressionThatPassesFilter_ReturnsPropertyAccessTree() { Expression <Func <string, bool> > expression = str => str.Length == 0; PropertyAccessTree tree = ExpressionPropertyAnalyzer.Analyze(expression, type => type == typeof(string)); Assert.AreEqual(1, tree.Children.Count); PropertyAccessTreeNode parameterNode = tree.Children[0]; parameterNode.Should().BeOfType <ParameterNode>(); Assert.AreEqual(1, parameterNode.Children.Count); PropertyAccessNode lengthNode = (PropertyAccessNode)parameterNode.Children[0]; Assert.AreEqual(typeof(string).GetProperty("Length"), lengthNode.Property); Assert.AreEqual(0, lengthNode.Children.Count); }
public void Analyze_TwoLevelPropertyWhereSubPropertyIsNotINotifyPropertyChanged_TreeContainsFirstProperty() { Expression <Func <Person, bool> > expression = p => p.Name.Length == 0; PropertyAccessTree tree = ExpressionPropertyAnalyzer.Analyze(expression); Assert.AreEqual(1, tree.Children.Count); PropertyAccessTreeNode parameterNode = tree.Children[0]; parameterNode.Should().BeOfType <ParameterNode>(); Assert.AreEqual(1, parameterNode.Children.Count); PropertyAccessNode nameNode = (PropertyAccessNode)parameterNode.Children[0]; Assert.AreEqual(_nameProperty, nameNode.Property); Assert.AreEqual(0, nameNode.Children.Count); }
public void Analyze_ExpressionContainsDelegateAndPropertyAccess_ReturnsPropertyAccessTree() { Expression <Func <Person, string> > expression = person => this.StringPassThrough(person.Name); var tree = ExpressionPropertyAnalyzer.Analyze(expression); Assert.AreEqual(2, tree.Children.Count); PropertyAccessTreeNode parameterNode = tree.Children[0]; parameterNode.Should().BeOfType <ParameterNode>(); Assert.AreEqual(1, parameterNode.Children.Count); PropertyAccessTreeNode constantNode = tree.Children[1]; constantNode.Should().BeOfType <ConstantNode>(); Assert.AreEqual(1, constantNode.Children.Count); }
public void Analyze_ExpressionContainsThis_TreeContainsOneBranch() { Expression <Func <Person, int> > expression = p => this.TestProperty; PropertyAccessTree tree = ExpressionPropertyAnalyzer.Analyze(expression); Assert.AreEqual(2, tree.Children.Count); PropertyAccessTreeNode constantNode = tree.Children[1]; constantNode.Should().BeOfType <ConstantNode>(); Assert.AreEqual(this, ((ConstantNode)constantNode).Value); Assert.AreEqual(1, constantNode.Children.Count); PropertyAccessNode testPropertyNode = (PropertyAccessNode)constantNode.Children[0]; Assert.AreEqual(GetType().GetProperty("TestProperty"), testPropertyNode.Property); Assert.AreEqual(0, testPropertyNode.Children.Count); }