1+ using  Microsoft . Extensions . Logging ; 
2+ using  NUnit . Framework ; 
3+ using  System ; 
4+ using  System . Collections . Generic ; 
5+ using  System . Linq ; 
6+ 
7+ namespace  NSubstitute . Acceptance . Specs ; 
8+ 
9+ [ TestFixture ] 
10+ public  class  ILoggerTests 
11+ { 
12+     [ Test ] 
13+     public  void  Received_LogTrace_call_using_AnyType ( ) 
14+     { 
15+         var  logger  =  Substitute . For < ILogger < ILoggerTests > > ( ) ; 
16+ 
17+         logger . LogTrace ( "Vanished without a trace" ) ; 
18+ 
19+         logger . Received ( 1 ) 
20+             . Log ( 
21+                 LogLevel . Trace , 
22+                 Arg . Any < EventId > ( ) , 
23+                 Arg . Any < Arg . AnyType > ( ) , 
24+                 Arg . Any < Exception > ( ) , 
25+                 Arg . Any < Func < Arg . AnyType ,  Exception ,  string > > ( ) 
26+             ) ; 
27+     } 
28+ 
29+     [ Test ] 
30+     public  void  Received_LogWarning_call_using_interfaced_types ( ) 
31+     { 
32+         var  logger  =  Substitute . For < ILogger < ILoggerTests > > ( ) ; 
33+ 
34+         logger . LogWarning ( "Warning: Live without warning" ) ; 
35+ 
36+         logger . Received ( 1 ) 
37+             . Log ( 
38+                 LogLevel . Warning , 
39+                 Arg . Any < EventId > ( ) , 
40+                 Arg . Any < IReadOnlyList < KeyValuePair < string ,  object > > > ( ) , 
41+                 Arg . Any < Exception > ( ) , 
42+                 Arg . Any < Func < IReadOnlyList < KeyValuePair < string ,  object > > ,  Exception ,  string > > ( ) 
43+             ) ; 
44+     } 
45+ 
46+     [ Test ] 
47+     public  void  Received_LogError_call_using_messageTemplate ( ) 
48+     { 
49+         var  logger  =  Substitute . For < ILogger < ILoggerTests > > ( ) ; 
50+ 
51+         logger . LogError ( "Something bad happened!!!" ) ; 
52+ 
53+         logger . Received ( 1 ) 
54+             . Log ( 
55+                 LogLevel . Error , 
56+                 Arg . Any < EventId > ( ) , 
57+                 Arg . Is < IReadOnlyList < KeyValuePair < string ,  object > > > ( list =>  list . Any ( i =>  i . Key  ==  "{OriginalFormat}"  &&  i . Value . Equals ( "Something bad happened!!!" ) ) ) , 
58+                 Arg . Any < Exception > ( ) , 
59+                 Arg . Any < Func < IReadOnlyList < KeyValuePair < string ,  object > > ,  Exception ,  string > > ( ) 
60+             ) ; 
61+ 
62+         logger . DidNotReceive ( ) 
63+             . Log ( 
64+                 LogLevel . Error , 
65+                 Arg . Any < EventId > ( ) , 
66+                 Arg . Is < IReadOnlyList < KeyValuePair < string ,  object > > > ( list =>  list . Any ( i =>  i . Key  ==  "{OriginalFormat}"  &&  i . Value . Equals ( "some other message" ) ) ) , 
67+                 Arg . Any < Exception > ( ) , 
68+                 Arg . Any < Func < IReadOnlyList < KeyValuePair < string ,  object > > ,  Exception ,  string > > ( ) 
69+             ) ; 
70+     } 
71+ 
72+     [ Test ] 
73+     public  void  Received_LogInformation_call_using_messageTemplate ( ) 
74+     { 
75+         var  now  =  DateTimeOffset . UtcNow ; 
76+         var  later  =  now . AddTicks ( 1 ) ; 
77+         var  logger  =  Substitute . For < ILogger < ILoggerTests > > ( ) ; 
78+ 
79+         logger . LogInformation ( "I have parameters. {param1} {param2} {param3}" ,  1979 ,  "apocalypse" ,  now ) ; 
80+ 
81+         logger . Received ( 1 ) 
82+             . Log ( 
83+                 LogLevel . Information , 
84+                 Arg . Any < EventId > ( ) , 
85+                 Arg . Is < IReadOnlyList < KeyValuePair < string ,  object > > > ( list => 
86+                     list . Any ( i =>  i . Key  ==  "{OriginalFormat}"  &&  i . Value . Equals ( "I have parameters. {param1} {param2} {param3}" ) ) 
87+                     &&  list . Any ( i =>  i . Key  ==  "param1"  &&  i . Value . Equals ( 1979 ) ) 
88+                     &&  list . Any ( i =>  i . Key  ==  "param2"  &&  i . Value . Equals ( "apocalypse" ) ) 
89+                     &&  list . Any ( i =>  i . Key  ==  "param3"  &&  i . Value . Equals ( now ) ) 
90+                 ) , 
91+                 Arg . Any < Exception > ( ) , 
92+                 Arg . Any < Func < IReadOnlyList < KeyValuePair < string ,  object > > ,  Exception ,  string > > ( ) 
93+             ) ; 
94+ 
95+         logger . DidNotReceive ( ) 
96+             . Log ( 
97+                 LogLevel . Information , 
98+                 Arg . Any < EventId > ( ) , 
99+                 Arg . Is < IReadOnlyList < KeyValuePair < string ,  object > > > ( list => 
100+                     list . Any ( i =>  i . Key  ==  "{OriginalFormat}"  &&  i . Value . Equals ( "I have parameters. {param1} {param2} {param3}" ) ) 
101+                     &&  list . Any ( i =>  i . Key  ==  "param1"  &&  i . Value . Equals ( 1979 ) ) 
102+                     &&  list . Any ( i =>  i . Key  ==  "param2"  &&  i . Value . Equals ( "apocalypse" ) ) 
103+                     &&  list . Any ( i =>  i . Key  ==  "param3"  &&  i . Value . Equals ( later ) )  // this is the only one that will mismatch 
104+                 ) , 
105+                 Arg . Any < Exception > ( ) , 
106+                 Arg . Any < Func < IReadOnlyList < KeyValuePair < string ,  object > > ,  Exception ,  string > > ( ) 
107+             ) ; 
108+     } 
109+ } 
0 commit comments