@@ -9,24 +9,47 @@ public class PredicateBuilderTests
99{
1010 public static TheoryData < Action < PredicateBuilder < string > > , Outcome < string > , bool > HandleResultData = new ( )
1111 {
12- { builder => builder . HandleResult ( "val" ) , Outcome . FromResult ( "val" ) , true } ,
13- { builder => builder . HandleResult ( "val" ) , Outcome . FromResult ( "val2" ) , false } ,
14- { builder => builder . HandleResult ( "val" ) , Outcome . FromException < string > ( new InvalidOperationException ( ) ) , false } ,
15- { builder => builder . HandleResult ( "val" , StringComparer . OrdinalIgnoreCase ) , Outcome . FromResult ( "VAL" ) , true } ,
16- { builder => builder . HandleResult ( r => r == "val" ) , Outcome . FromResult ( "val" ) , true } ,
17- { builder => builder . HandleResult ( r => r == "val2" ) , Outcome . FromResult ( "val" ) , false } ,
18- { builder => builder . Handle < InvalidOperationException > ( ) , Outcome . FromException < string > ( new InvalidOperationException ( ) ) , true } ,
19- { builder => builder . Handle < InvalidOperationException > ( ) , Outcome . FromException < string > ( new FormatException ( ) ) , false } ,
20- { builder => builder . Handle < InvalidOperationException > ( e => false ) , Outcome . FromException < string > ( new InvalidOperationException ( ) ) , false } ,
21- { builder => builder . HandleInner < InvalidOperationException > ( e => false ) , Outcome . FromException < string > ( new InvalidOperationException ( ) ) , false } ,
22- { builder => builder . HandleInner < InvalidOperationException > ( ) , Outcome . FromResult ( "value" ) , false } ,
23- { builder => builder . Handle < InvalidOperationException > ( ) , Outcome . FromResult ( "value" ) , false } ,
24- { builder => builder . Handle < InvalidOperationException > ( ) . HandleResult ( "value" ) , Outcome . FromResult ( "value" ) , true } ,
25- { builder => builder . Handle < InvalidOperationException > ( ) . HandleResult ( "value" ) , Outcome . FromResult ( "value2" ) , false } ,
26- { builder => builder . HandleInner < FormatException > ( ) , Outcome . FromException < string > ( new InvalidOperationException ( "dummy" , new FormatException ( ) ) ) , true } ,
27- { builder => builder . HandleInner < ArgumentNullException > ( e => false ) , Outcome . FromException < string > ( new InvalidOperationException ( "dummy" , new FormatException ( ) ) ) , false } ,
28- { builder => builder . HandleInner < FormatException > ( e => e . Message == "m" ) , Outcome . FromException < string > ( new InvalidOperationException ( "dummy" , new FormatException ( "m" ) ) ) , true } ,
29- { builder => builder . HandleInner < FormatException > ( e => e . Message == "x" ) , Outcome . FromException < string > ( new InvalidOperationException ( "dummy" , new FormatException ( "m" ) ) ) , false } ,
12+ { builder => builder . HandleResult ( "val" ) , CreateOutcome ( "val" ) , true } ,
13+ { builder => builder . HandleResult ( "val" ) , CreateOutcome ( "val2" ) , false } ,
14+ { builder => builder . HandleResult ( "val" ) , CreateOutcome ( new InvalidOperationException ( ) ) , false } ,
15+ { builder => builder . HandleResult ( "val" , StringComparer . OrdinalIgnoreCase ) , CreateOutcome ( "VAL" ) , true } ,
16+ { builder => builder . HandleResult ( r => r == "val" ) , CreateOutcome ( "val" ) , true } ,
17+ { builder => builder . HandleResult ( r => r == "val2" ) , CreateOutcome ( "val" ) , false } ,
18+ { builder => builder . Handle < InvalidOperationException > ( ) , CreateOutcome ( new InvalidOperationException ( ) ) , true } ,
19+ { builder => builder . Handle < InvalidOperationException > ( ) , CreateOutcome ( new FormatException ( ) ) , false } ,
20+ { builder => builder . Handle < InvalidOperationException > ( e => false ) , CreateOutcome ( new InvalidOperationException ( ) ) , false } ,
21+ { builder => builder . HandleInner < InvalidOperationException > ( e => false ) , CreateOutcome ( new InvalidOperationException ( ) ) , false } ,
22+ { builder => builder . HandleInner < InvalidOperationException > ( ) , CreateOutcome ( "value" ) , false } ,
23+ { builder => builder . Handle < InvalidOperationException > ( ) , CreateOutcome ( "value" ) , false } ,
24+ { builder => builder . Handle < InvalidOperationException > ( ) . HandleResult ( "value" ) , CreateOutcome ( "value" ) , true } ,
25+ { builder => builder . Handle < InvalidOperationException > ( ) . HandleResult ( "value" ) , CreateOutcome ( "value2" ) , false } ,
26+ { builder => builder . HandleInner < FormatException > ( ) , CreateOutcome ( new InvalidOperationException ( "dummy" , new FormatException ( ) ) ) , true } ,
27+ { builder => builder . HandleInner < ArgumentNullException > ( e => false ) , CreateOutcome ( new InvalidOperationException ( "dummy" , new FormatException ( ) ) ) , false } ,
28+ { builder => builder . HandleInner < FormatException > ( e => e . Message == "m" ) , CreateOutcome ( new InvalidOperationException ( "dummy" , new FormatException ( "m" ) ) ) , true } ,
29+ { builder => builder . HandleInner < FormatException > ( e => e . Message == "x" ) , CreateOutcome ( new InvalidOperationException ( "dummy" , new FormatException ( "m" ) ) ) , false } ,
30+ #pragma warning disable CA2201
31+ //// See https://github.com/App-vNext/Polly/issues/2161
32+ { builder => builder . HandleInner < InvalidOperationException > ( ) , CreateOutcome ( new InvalidOperationException ( "1" ) ) , true } ,
33+ { builder => builder . HandleInner < InvalidOperationException > ( ) , CreateOutcome ( new Exception ( "1" , new InvalidOperationException ( "2" ) ) ) , true } ,
34+ { builder => builder . HandleInner < InvalidOperationException > ( ) , CreateOutcome ( new FormatException ( "1" , new InvalidOperationException ( "2" ) ) ) , true } ,
35+ { builder => builder . HandleInner < InvalidOperationException > ( ) , CreateOutcome ( new Exception ( "1" , new Exception ( "2" , new InvalidOperationException ( "3" ) ) ) ) , true } ,
36+ { builder => builder . HandleInner < InvalidOperationException > ( ) , CreateOutcome ( new AggregateException ( "1" , new Exception ( "2a" ) , new InvalidOperationException ( "2b" ) ) ) , true } ,
37+ { builder => builder . HandleInner < InvalidOperationException > ( ) , CreateOutcome ( new AggregateException ( "1" , new Exception ( "2" , new InvalidOperationException ( "3" ) ) ) ) , true } ,
38+ { builder => builder . HandleInner < InvalidOperationException > ( ) , CreateOutcome ( new AggregateException ( "1" , new FormatException ( "2" , new NotSupportedException ( "3" ) ) ) ) , false } ,
39+ { builder => builder . HandleInner < InvalidOperationException > ( ) , CreateOutcome ( new AggregateException ( "1" ) ) , false } ,
40+ { builder => builder . HandleInner < InvalidOperationException > ( ex => ex . Message is "3" ) , CreateOutcome ( new AggregateException ( "1" , new FormatException ( "2" , new NotSupportedException ( "3" ) ) ) ) , false } ,
41+ { builder => builder . HandleInner < InvalidOperationException > ( ex => ex . Message is "unreachable" ) , CreateOutcome ( new AggregateException ( "1" , new FormatException ( "2" , new NotSupportedException ( "3" ) ) ) ) , false } ,
42+ { builder => builder . HandleInner < InvalidOperationException > ( ex => ex . Message is "1" ) , CreateOutcome ( new InvalidOperationException ( "1" ) ) , true } ,
43+ { builder => builder . HandleInner < InvalidOperationException > ( ex => ex . Message is "2" ) , CreateOutcome ( new Exception ( "1" , new InvalidOperationException ( "2" ) ) ) , true } ,
44+ { builder => builder . HandleInner < InvalidOperationException > ( ex => ex . Message is "3" ) , CreateOutcome ( new Exception ( "1" , new Exception ( "2" , new InvalidOperationException ( "3" ) ) ) ) , true } ,
45+ { builder => builder . HandleInner < InvalidOperationException > ( ex => ex . Message is "2b" ) , CreateOutcome ( new AggregateException ( "1" , new Exception ( "2a" ) , new InvalidOperationException ( "2b" ) ) ) , true } ,
46+ { builder => builder . HandleInner < InvalidOperationException > ( ex => ex . Message is "3" ) , CreateOutcome ( new AggregateException ( "1" , new Exception ( "2" , new InvalidOperationException ( "3" ) ) ) ) , true } ,
47+ { builder => builder . HandleInner < InvalidOperationException > ( ex => ex . Message is "unreachable" ) , CreateOutcome ( new InvalidOperationException ( "1" ) ) , false } ,
48+ { builder => builder . HandleInner < InvalidOperationException > ( ex => ex . Message is "unreachable" ) , CreateOutcome ( new Exception ( "1" , new InvalidOperationException ( "2" ) ) ) , false } ,
49+ { builder => builder . HandleInner < InvalidOperationException > ( ex => ex . Message is "unreachable" ) , CreateOutcome ( new Exception ( "1" , new Exception ( "2" , new InvalidOperationException ( "3" ) ) ) ) , false } ,
50+ { builder => builder . HandleInner < InvalidOperationException > ( ex => ex . Message is "unreachable" ) , CreateOutcome ( new AggregateException ( "1" , new Exception ( "2a" ) , new InvalidOperationException ( "2b" ) ) ) , false } ,
51+ { builder => builder . HandleInner < InvalidOperationException > ( ex => ex . Message is "unreachable" ) , CreateOutcome ( new AggregateException ( "1" , new Exception ( "2" , new InvalidOperationException ( "3" ) ) ) ) , false } ,
52+ #pragma warning restore CA2201
3053 } ;
3154
3255 [ Fact ]
@@ -66,7 +89,7 @@ public async Task Operator_RetryStrategyOptions_Ok()
6689 ShouldHandle = new PredicateBuilder < string > ( ) . HandleResult ( "error" )
6790 } ;
6891
69- var handled = await options . ShouldHandle ( new RetryPredicateArguments < string > ( ResilienceContextPool . Shared . Get ( ) , Outcome . FromResult ( "error" ) , 0 ) ) ;
92+ var handled = await options . ShouldHandle ( new RetryPredicateArguments < string > ( ResilienceContextPool . Shared . Get ( ) , CreateOutcome ( "error" ) , 0 ) ) ;
7093
7194 handled . Should ( ) . BeTrue ( ) ;
7295 }
@@ -79,7 +102,7 @@ public async Task Operator_FallbackStrategyOptions_Ok()
79102 ShouldHandle = new PredicateBuilder < string > ( ) . HandleResult ( "error" )
80103 } ;
81104
82- var handled = await options . ShouldHandle ( new ( ResilienceContextPool . Shared . Get ( ) , Outcome . FromResult ( "error" ) ) ) ;
105+ var handled = await options . ShouldHandle ( new ( ResilienceContextPool . Shared . Get ( ) , CreateOutcome ( "error" ) ) ) ;
83106
84107 handled . Should ( ) . BeTrue ( ) ;
85108 }
@@ -92,7 +115,7 @@ public async Task Operator_HedgingStrategyOptions_Ok()
92115 ShouldHandle = new PredicateBuilder < string > ( ) . HandleResult ( "error" )
93116 } ;
94117
95- var handled = await options . ShouldHandle ( new ( ResilienceContextPool . Shared . Get ( ) , Outcome . FromResult ( "error" ) ) ) ;
118+ var handled = await options . ShouldHandle ( new ( ResilienceContextPool . Shared . Get ( ) , CreateOutcome ( "error" ) ) ) ;
96119
97120 handled . Should ( ) . BeTrue ( ) ;
98121 }
@@ -105,8 +128,14 @@ public async Task Operator_AdvancedCircuitBreakerStrategyOptions_Ok()
105128 ShouldHandle = new PredicateBuilder < string > ( ) . HandleResult ( "error" )
106129 } ;
107130
108- var handled = await options . ShouldHandle ( new ( ResilienceContextPool . Shared . Get ( ) , Outcome . FromResult ( "error" ) ) ) ;
131+ var handled = await options . ShouldHandle ( new ( ResilienceContextPool . Shared . Get ( ) , CreateOutcome ( "error" ) ) ) ;
109132
110133 handled . Should ( ) . BeTrue ( ) ;
111134 }
135+
136+ private static Outcome < string > CreateOutcome ( Exception exception )
137+ => Outcome . FromException < string > ( exception ) ;
138+
139+ private static Outcome < string > CreateOutcome ( string result )
140+ => Outcome . FromResult ( result ) ;
112141}
0 commit comments