1+ using System ;
2+ using System . Collections . Generic ;
3+ using FluentAssertions ;
4+ using Newtonsoft . Json ;
5+ using Xunit ;
6+ using JsonSerializer = System . Text . Json . JsonSerializer ;
7+
8+ namespace ManagedCode . Communication . Tests ;
9+
10+ public class DeserializationTests
11+ {
12+ [ Theory ]
13+ [ MemberData ( nameof ( GetResults ) ) ]
14+ public void DeserializeResult_WithNewtonsoftJson ( Result result )
15+ {
16+ // Act
17+ var serialized = JsonConvert . SerializeObject ( result ) ;
18+ var deserialized = JsonConvert . DeserializeObject < Result < int > > ( serialized ) ;
19+
20+ // Assert
21+ deserialized . Should ( ) . BeEquivalentTo ( result ) ;
22+ }
23+
24+ [ Theory ]
25+ [ MemberData ( nameof ( GetValueResults ) ) ]
26+ public void DeserializeValueResult_WithNewtonsoftJson < T > ( Result < T > result )
27+ {
28+ // Act
29+ var serialized = JsonConvert . SerializeObject ( result ) ;
30+ var deserialized = JsonConvert . DeserializeObject < Result < T > > ( serialized ) ;
31+
32+ // Assert
33+ deserialized . Should ( ) . BeEquivalentTo ( result ) ;
34+ }
35+
36+ [ Theory ]
37+ [ MemberData ( nameof ( GetResults ) ) ]
38+ public void DeserializeResult_WithTextJson ( Result result )
39+ {
40+ // Act
41+ var serialized = JsonSerializer . Serialize ( result ) ;
42+ var deserialized = JsonSerializer . Deserialize < Result > ( serialized ) ;
43+
44+ // Assert
45+ deserialized . Should ( ) . BeEquivalentTo ( result ) ;
46+ }
47+
48+ [ Theory ]
49+ [ MemberData ( nameof ( GetValueResults ) ) ]
50+ public void DeserializeValueResult_WithTextJson < T > ( Result < T > result )
51+ {
52+ // Act
53+ var serialized = JsonSerializer . Serialize ( result ) ;
54+ var deserialized = JsonSerializer . Deserialize < Result < T > > ( serialized ) ;
55+
56+ // Assert
57+ deserialized . Should ( ) . BeEquivalentTo ( result ) ;
58+ }
59+
60+ public static IEnumerable < object [ ] > GetResults ( )
61+ {
62+ yield return new object [ ] { Result . Succeed ( ) } ;
63+ yield return new object [ ] { Result . Fail ( ) } ;
64+ yield return new object [ ] { Result . Fail ( new Exception ( "Test exception" ) ) } ;
65+ yield return new object [ ] { Result . Fail ( new Error < ErrorCode > ( "Test error" , ErrorCode . InvalidState ) ) } ;
66+ }
67+
68+ public static IEnumerable < object [ ] > GetValueResults ( )
69+ {
70+ yield return new object [ ] { Result < int > . Succeed ( 2 ) } ;
71+ yield return new object [ ] { Result < string > . Succeed ( "Test string" ) } ;
72+ yield return new object [ ] { Result < int > . Fail ( ) } ;
73+ yield return new object [ ] { Result < int > . Fail ( new Exception ( "Test exception" ) ) } ;
74+ yield return new object [ ] { Result < int > . Fail ( new Error < ErrorCode > ( "Test error" , ErrorCode . InvalidState ) ) } ;
75+ }
76+ }
0 commit comments