Skip to content

Commit

Permalink
Merge pull request #68 from LuccaSA/Test-ExpressionReducer
Browse files Browse the repository at this point in the history
FIX : reducer on concrete classe using abstract property
  • Loading branch information
Poltuu committed Jun 7, 2019
2 parents 1cb850e + 6674972 commit 5afb046
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 8 deletions.
5 changes: 3 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
*/bin/*

*/bin/*
*/obj/*

*.suo
Expand All @@ -18,4 +19,4 @@ packages/# NuGet Packages
/OpenCover.4.6.519
/ComputeVersion.ps1
/.versionCounter
/NExtends/*.user
/NExtends/*.user
26 changes: 22 additions & 4 deletions NExtends.Tests/Expressions/ExpressionReducerTests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using NExtends.Expressions;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using Xunit;

namespace NExtends.Tests.Expressions
Expand All @@ -20,9 +21,9 @@ public UserDate(User owner, DateTime date)

public class ExpressionReducerTests
{
DateTime today = DateTime.Today;
List<int> elements = new List<int> { 0, 1, 2 };
UserDate fakeUd = new UserDate(new User(), DateTime.Today);
readonly DateTime today = DateTime.Today;
readonly List<int> elements = new List<int> { 0, 1, 2 };
readonly UserDate fakeUd = new UserDate(new User(), DateTime.Today);

[Fact]
public void ExpressionReducerEmptyLogic()
Expand Down Expand Up @@ -111,5 +112,22 @@ public void ExpressionReducerInterfaceMember()

Assert.Equal("u => (u.Content != null)", result.ToString());
}
}

abstract class AbstractTruc
{
public User User { get; set; }
}

class ConcreteBiduleContainer : AbstractTruc
{
public User User2 { get; set; }
}

[Fact]
public void ExpressionReducerAbstractClassMember()
{
var result = ExpressionReducer<ConcreteBiduleContainer, User>.Reduce(bc => bc.User.Id != 0 && bc.User2.Id != 23, u => u.User, true);
Assert.Equal("u => (u.Id != 0)", result.ToString());
}
}
}
11 changes: 9 additions & 2 deletions NExtends/Expressions/ExpressionReducer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ protected override Expression VisitMember(MemberExpression node)
var result = base.VisitMember(node);

//Même membre, branché sur le paramètre => on remplace
if (CurrentNodeDependsOnPreviousParameter && node.Member == Reducer.Member)
if (CurrentNodeDependsOnPreviousParameter && AreEquals(node.Member, Reducer.Member))
{
CurrentNodeDependsOnPreviousParameter = false;
result = Parameter;
Expand All @@ -131,7 +131,14 @@ protected override Expression VisitMember(MemberExpression node)
return result;
}

protected override Expression VisitParameter(ParameterExpression node)
private bool AreEquals(MemberInfo member1, MemberInfo member2)
{
return member1.DeclaringType == member2.DeclaringType
&& member1.Name == member2.Name;
}


protected override Expression VisitParameter(ParameterExpression node)
{
//on sauvegarde la dépendance du noeud courant au paramètre d'entrée
CurrentNodeDependsOnPreviousParameter = true;
Expand Down

0 comments on commit 5afb046

Please sign in to comment.