Skip to content

Commit 5afb046

Browse files
authored
Merge pull request #68 from LuccaSA/Test-ExpressionReducer
FIX : reducer on concrete classe using abstract property
2 parents 1cb850e + 6674972 commit 5afb046

3 files changed

Lines changed: 34 additions & 8 deletions

File tree

.gitignore

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
*/bin/*
1+
2+
*/bin/*
23
*/obj/*
34

45
*.suo
@@ -18,4 +19,4 @@ packages/# NuGet Packages
1819
/OpenCover.4.6.519
1920
/ComputeVersion.ps1
2021
/.versionCounter
21-
/NExtends/*.user
22+
/NExtends/*.user

NExtends.Tests/Expressions/ExpressionReducerTests.cs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using NExtends.Expressions;
22
using System;
33
using System.Collections.Generic;
4+
using System.Linq.Expressions;
45
using Xunit;
56

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

2122
public class ExpressionReducerTests
2223
{
23-
DateTime today = DateTime.Today;
24-
List<int> elements = new List<int> { 0, 1, 2 };
25-
UserDate fakeUd = new UserDate(new User(), DateTime.Today);
24+
readonly DateTime today = DateTime.Today;
25+
readonly List<int> elements = new List<int> { 0, 1, 2 };
26+
readonly UserDate fakeUd = new UserDate(new User(), DateTime.Today);
2627

2728
[Fact]
2829
public void ExpressionReducerEmptyLogic()
@@ -111,5 +112,22 @@ public void ExpressionReducerInterfaceMember()
111112

112113
Assert.Equal("u => (u.Content != null)", result.ToString());
113114
}
114-
}
115+
116+
abstract class AbstractTruc
117+
{
118+
public User User { get; set; }
119+
}
120+
121+
class ConcreteBiduleContainer : AbstractTruc
122+
{
123+
public User User2 { get; set; }
124+
}
125+
126+
[Fact]
127+
public void ExpressionReducerAbstractClassMember()
128+
{
129+
var result = ExpressionReducer<ConcreteBiduleContainer, User>.Reduce(bc => bc.User.Id != 0 && bc.User2.Id != 23, u => u.User, true);
130+
Assert.Equal("u => (u.Id != 0)", result.ToString());
131+
}
132+
}
115133
}

NExtends/Expressions/ExpressionReducer.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ protected override Expression VisitMember(MemberExpression node)
120120
var result = base.VisitMember(node);
121121

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

134-
protected override Expression VisitParameter(ParameterExpression node)
134+
private bool AreEquals(MemberInfo member1, MemberInfo member2)
135+
{
136+
return member1.DeclaringType == member2.DeclaringType
137+
&& member1.Name == member2.Name;
138+
}
139+
140+
141+
protected override Expression VisitParameter(ParameterExpression node)
135142
{
136143
//on sauvegarde la dépendance du noeud courant au paramètre d'entrée
137144
CurrentNodeDependsOnPreviousParameter = true;

0 commit comments

Comments
 (0)