1+ using System ;
2+ using System . Linq . Expressions ;
3+ using CoreRemoting . Serialization . NeoBinary ;
4+ using Xunit ;
5+
6+ namespace CoreRemoting . Tests
7+ {
8+ public class NeoBinaryExpressionSerializationTests
9+ {
10+ [ Fact ]
11+ public void SerializeDeserialize_ConstantExpression ( )
12+ {
13+ var serializer = new NeoBinarySerializerAdapter ( new NeoBinarySerializerConfig { AllowExpressions = true , IncludeAssemblyVersions = true } ) ;
14+
15+ var original = Expression . Constant ( 42 ) ;
16+ var serialized = serializer . Serialize ( original ) ;
17+ var deserialized = ( ConstantExpression ) serializer . Deserialize ( typeof ( ConstantExpression ) , serialized ) ;
18+
19+ Assert . Equal ( original . Value , deserialized . Value ) ;
20+ Assert . Equal ( original . Type , deserialized . Type ) ;
21+ }
22+
23+ [ Fact ]
24+ public void SerializeDeserialize_ParameterExpression ( )
25+ {
26+ var serializer = new NeoBinarySerializerAdapter ( new NeoBinarySerializerConfig { AllowExpressions = true , IncludeAssemblyVersions = true } ) ;
27+
28+ var original = Expression . Parameter ( typeof ( int ) , "x" ) ;
29+ var serialized = serializer . Serialize ( original ) ;
30+ var deserialized = ( ParameterExpression ) serializer . Deserialize ( typeof ( ParameterExpression ) , serialized ) ;
31+
32+ Assert . Equal ( original . Name , deserialized . Name ) ;
33+ Assert . Equal ( original . Type , deserialized . Type ) ;
34+ }
35+
36+ [ Fact ]
37+ public void SerializeDeserialize_BinaryExpression ( )
38+ {
39+ var serializer = new NeoBinarySerializerAdapter ( new NeoBinarySerializerConfig { AllowExpressions = true , IncludeAssemblyVersions = true } ) ;
40+
41+ var left = Expression . Constant ( 10 ) ;
42+ var right = Expression . Constant ( 20 ) ;
43+ var original = Expression . Add ( left , right ) ;
44+
45+ var serialized = serializer . Serialize ( original ) ;
46+ var deserialized = ( BinaryExpression ) serializer . Deserialize ( typeof ( BinaryExpression ) , serialized ) ;
47+
48+ Assert . Equal ( original . NodeType , deserialized . NodeType ) ;
49+ Assert . Equal ( ( ( ConstantExpression ) original . Left ) . Value , ( ( ConstantExpression ) deserialized . Left ) . Value ) ;
50+ Assert . Equal ( ( ( ConstantExpression ) original . Right ) . Value , ( ( ConstantExpression ) deserialized . Right ) . Value ) ;
51+ }
52+
53+ [ Fact ]
54+ public void SerializeDeserialize_LambdaExpression ( )
55+ {
56+ var serializer = new NeoBinarySerializerAdapter ( new NeoBinarySerializerConfig { AllowExpressions = true , IncludeAssemblyVersions = true } ) ;
57+
58+ var param = Expression . Parameter ( typeof ( int ) , "x" ) ;
59+ var body = Expression . Add ( param , Expression . Constant ( 1 ) ) ;
60+ var original = Expression . Lambda < Func < int , int > > ( body , param ) ;
61+
62+ var serialized = serializer . Serialize ( original ) ;
63+ var deserialized = ( Expression < Func < int , int > > ) serializer . Deserialize ( typeof ( Expression < Func < int , int > > ) , serialized ) ;
64+
65+ var compiled = deserialized . Compile ( ) ;
66+ Assert . Equal ( 43 , compiled ( 42 ) ) ;
67+ }
68+
69+ [ Fact ]
70+ public void SerializeDeserialize_FilterExpression ( )
71+ {
72+ var serializer = new NeoBinarySerializerAdapter ( new NeoBinarySerializerConfig { AllowExpressions = true , IncludeAssemblyVersions = true } ) ;
73+
74+ var param = Expression . Parameter ( typeof ( TestClass ) , "item" ) ;
75+ var property = Expression . Property ( param , nameof ( TestClass . Value ) ) ;
76+ var constant = Expression . Constant ( 5 ) ;
77+ var body = Expression . GreaterThan ( property , constant ) ;
78+ var original = Expression . Lambda < Func < TestClass , bool > > ( body , param ) ;
79+
80+ var serialized = serializer . Serialize ( original ) ;
81+ var deserialized = ( Expression < Func < TestClass , bool > > ) serializer . Deserialize ( typeof ( Expression < Func < TestClass , bool > > ) , serialized ) ;
82+
83+ var compiled = deserialized . Compile ( ) ;
84+ Assert . True ( compiled ( new TestClass { Value = 10 } ) ) ;
85+ Assert . False ( compiled ( new TestClass { Value = 3 } ) ) ;
86+ }
87+
88+
89+
90+ public class TestClass
91+ {
92+ public int Value { get ; set ; }
93+ }
94+ }
95+ }
0 commit comments