View Javadoc

1   package uk.org.lidalia.slf4jutils;
2   
3   import com.google.common.base.Function;
4   import com.google.common.collect.Lists;
5   import junitparams.JUnitParamsRunner;
6   import junitparams.Parameters;
7   
8   import org.junit.Test;
9   import org.junit.runner.RunWith;
10  import org.slf4j.Marker;
11  
12  import java.lang.reflect.Method;
13  import java.util.List;
14  
15  import uk.org.lidalia.slf4jext.Logger;
16  
17  import static java.util.Arrays.asList;
18  import static org.junit.Assert.assertEquals;
19  import static org.junit.Assert.assertFalse;
20  import static org.junit.Assert.assertTrue;
21  import static org.mockito.BDDMockito.given;
22  import static org.mockito.Mockito.reset;
23  import static org.mockito.Mockito.verify;
24  import static org.mockito.Mockito.verifyZeroInteractions;
25  import static org.powermock.api.mockito.PowerMockito.mock;
26  import static uk.org.lidalia.slf4jext.Level.DEBUG;
27  import static uk.org.lidalia.slf4jext.Level.ERROR;
28  import static uk.org.lidalia.slf4jext.Level.INFO;
29  import static uk.org.lidalia.slf4jext.Level.OFF;
30  import static uk.org.lidalia.slf4jext.Level.TRACE;
31  import static uk.org.lidalia.slf4jext.Level.WARN;
32  import static uk.org.lidalia.test.Values.uniqueValueFor;
33  
34  @RunWith(JUnitParamsRunner.class)
35  public class LoggerTests {
36  
37      org.slf4j.Logger decoratedLogger = mock(org.slf4j.Logger.class);
38      Logger richLogger = new Logger(decoratedLogger);
39  
40      Marker marker = mock(Marker.class);
41      String message = "message";
42      Object arg1 = new Object();
43      Object arg2 = new Object();
44      Object arg3 = new Object();
45      Object[] args = new Object[] { arg1, arg2, arg3 };
46      Throwable throwable = new Throwable();
47  
48      public Object[] slf4jLoggerMethods() {
49          return org.slf4j.Logger.class.getMethods();
50      }
51      @Test
52      @Parameters(method = "slf4jLoggerMethods")
53      public void richLoggerDelegatesLoggerMethodToDecoratedLogger(Method loggerMethod) throws Exception {
54          Object[] args = buildParamsFor(loggerMethod);
55          Class<?> returnType = loggerMethod.getReturnType();
56          if (returnType == void.class) {
57              loggerMethod.invoke(richLogger, args);
58              loggerMethod.invoke(verify(decoratedLogger), args);
59          } else {
60              Object result = uniqueValueFor(returnType);
61              given(loggerMethod.invoke(decoratedLogger, args)).willReturn(result);
62              assertEquals("result of " + loggerMethod, result, loggerMethod.invoke(richLogger, args));
63          }
64      }
65  
66      @Test
67      public void isEnabledTrace() {
68          given(decoratedLogger.isTraceEnabled()).willReturn(true);
69          assertTrue(richLogger.isEnabled(TRACE));
70  
71          given(decoratedLogger.isTraceEnabled()).willReturn(false);
72          assertFalse(richLogger.isEnabled(TRACE));
73      }
74  
75      @Test
76      public void logTraceMessage() {
77          richLogger.log(TRACE, message);
78          verify(decoratedLogger).trace(message);
79      }
80  
81      @Test
82      public void logTraceMessageOneArg() {
83          richLogger.log(TRACE, message, arg1);
84          verify(decoratedLogger).trace(message, arg1);
85      }
86  
87      @Test
88      public void logTraceMessageTwoArgs() {
89          richLogger.log(TRACE, message, arg1, arg2);
90          verify(decoratedLogger).trace(message, arg1, arg2);
91      }
92  
93      @Test
94      public void logTraceMessageVarArgs() {
95          richLogger.log(TRACE, message, arg1, arg2, arg3);
96          verify(decoratedLogger).trace(message, args);
97      }
98  
99      @Test
100     public void logTraceMessageException() {
101         richLogger.log(TRACE, message, throwable);
102         verify(decoratedLogger).trace(message, throwable);
103     }
104 
105     @Test
106     public void isEnabledTraceMarker() {
107         given(decoratedLogger.isTraceEnabled(marker)).willReturn(true);
108         assertTrue(richLogger.isEnabled(TRACE, marker));
109 
110         given(decoratedLogger.isTraceEnabled(marker)).willReturn(false);
111         assertFalse(richLogger.isEnabled(TRACE, marker));
112     }
113 
114     @Test
115     public void logTraceMarkerMessage() {
116         richLogger.log(TRACE, marker, message);
117         verify(decoratedLogger).trace(marker, message);
118     }
119 
120     @Test
121     public void logTraceMarkerMessageOneArg() {
122         richLogger.log(TRACE, marker, message, arg1);
123         verify(decoratedLogger).trace(marker, message, arg1);
124     }
125 
126     @Test
127     public void logTraceMarkerMessageTwoArgs() {
128         richLogger.log(TRACE, marker, message, arg1, arg2);
129         verify(decoratedLogger).trace(marker, message, arg1, arg2);
130     }
131 
132     @Test
133     public void logTraceMarkerMessageVarArgs() {
134         richLogger.log(TRACE, marker, message, arg1, arg2, arg3);
135         verify(decoratedLogger).trace(marker, message, args);
136     }
137 
138     @Test
139     public void logTraceMarkerMessageException() {
140         richLogger.log(TRACE, marker, message, throwable);
141         verify(decoratedLogger).trace(marker, message, throwable);
142     }
143 
144     @Test
145     public void isEnabledDebug() {
146         given(decoratedLogger.isDebugEnabled()).willReturn(true);
147         assertTrue(richLogger.isEnabled(DEBUG));
148 
149         given(decoratedLogger.isDebugEnabled()).willReturn(false);
150         assertFalse(richLogger.isEnabled(DEBUG));
151     }
152 
153     @Test
154     public void logDebugMessage() {
155         richLogger.log(DEBUG, message);
156         verify(decoratedLogger).debug(message);
157     }
158 
159     @Test
160     public void logDebugMessageOneArg() {
161         richLogger.log(DEBUG, message, arg1);
162         verify(decoratedLogger).debug(message, arg1);
163     }
164 
165     @Test
166     public void logDebugMessageTwoArgs() {
167         richLogger.log(DEBUG, message, arg1, arg2);
168         verify(decoratedLogger).debug(message, arg1, arg2);
169     }
170 
171     @Test
172     public void logDebugMessageVarArgs() {
173         richLogger.log(DEBUG, message, arg1, arg2, arg3);
174         verify(decoratedLogger).debug(message, args);
175     }
176 
177     @Test
178     public void logDebugMessageException() {
179         richLogger.log(DEBUG, message, throwable);
180         verify(decoratedLogger).debug(message, throwable);
181     }
182 
183     @Test
184     public void isEnabledDebugMarker() {
185         given(decoratedLogger.isDebugEnabled(marker)).willReturn(true);
186         assertTrue(richLogger.isEnabled(DEBUG, marker));
187 
188         given(decoratedLogger.isDebugEnabled(marker)).willReturn(false);
189         assertFalse(richLogger.isEnabled(DEBUG, marker));
190     }
191 
192     @Test
193     public void logDebugMarkerMessage() {
194         richLogger.log(DEBUG, marker, message);
195         verify(decoratedLogger).debug(marker, message);
196     }
197 
198     @Test
199     public void logDebugMarkerMessageOneArg() {
200         richLogger.log(DEBUG, marker, message, arg1);
201         verify(decoratedLogger).debug(marker, message, arg1);
202     }
203 
204     @Test
205     public void logDebugMarkerMessageTwoArgs() {
206         richLogger.log(DEBUG, marker, message, arg1, arg2);
207         verify(decoratedLogger).debug(marker, message, arg1, arg2);
208     }
209 
210     @Test
211     public void logDebugMarkerMessageVarArgs() {
212         richLogger.log(DEBUG, marker, message, arg1, arg2, arg3);
213         verify(decoratedLogger).debug(marker, message, args);
214     }
215 
216     @Test
217     public void logDebugMarkerMessageException() {
218         richLogger.log(DEBUG, marker, message, throwable);
219         verify(decoratedLogger).debug(marker, message, throwable);
220     }
221 
222     @Test
223     public void isEnabledInfo() {
224         given(decoratedLogger.isInfoEnabled()).willReturn(true);
225         assertTrue(richLogger.isEnabled(INFO));
226 
227         given(decoratedLogger.isInfoEnabled()).willReturn(false);
228         assertFalse(richLogger.isEnabled(INFO));
229     }
230 
231     @Test
232     public void logInfoMessage() {
233         richLogger.log(INFO, message);
234         verify(decoratedLogger).info(message);
235     }
236 
237     @Test
238     public void logInfoMessageOneArg() {
239         richLogger.log(INFO, message, arg1);
240         verify(decoratedLogger).info(message, arg1);
241     }
242 
243     @Test
244     public void logInfoMessageTwoArgs() {
245         richLogger.log(INFO, message, arg1, arg2);
246         verify(decoratedLogger).info(message, arg1, arg2);
247     }
248 
249     @Test
250     public void logInfoMessageVarArgs() {
251         richLogger.log(INFO, message, arg1, arg2, arg3);
252         verify(decoratedLogger).info(message, args);
253     }
254 
255     @Test
256     public void logInfoMessageException() {
257         richLogger.log(INFO, message, throwable);
258         verify(decoratedLogger).info(message, throwable);
259     }
260 
261     @Test
262     public void isEnabledInfoMarker() {
263         given(decoratedLogger.isInfoEnabled(marker)).willReturn(true);
264         assertTrue(richLogger.isEnabled(INFO, marker));
265 
266         given(decoratedLogger.isInfoEnabled(marker)).willReturn(false);
267         assertFalse(richLogger.isEnabled(INFO, marker));
268     }
269 
270     @Test
271     public void logInfoMarkerMessage() {
272         richLogger.log(INFO, marker, message);
273         verify(decoratedLogger).info(marker, message);
274     }
275 
276     @Test
277     public void logInfoMarkerMessageOneArg() {
278         richLogger.log(INFO, marker, message, arg1);
279         verify(decoratedLogger).info(marker, message, arg1);
280     }
281 
282     @Test
283     public void logInfoMarkerMessageTwoArgs() {
284         richLogger.log(INFO, marker, message, arg1, arg2);
285         verify(decoratedLogger).info(marker, message, arg1, arg2);
286     }
287 
288     @Test
289     public void logInfoMarkerMessageVarArgs() {
290         richLogger.log(INFO, marker, message, arg1, arg2, arg3);
291         verify(decoratedLogger).info(marker, message, args);
292     }
293 
294     @Test
295     public void logInfoMarkerMessageException() {
296         richLogger.log(INFO, marker, message, throwable);
297         verify(decoratedLogger).info(marker, message, throwable);
298     }
299 
300     @Test
301     public void isEnabledWarn() {
302         given(decoratedLogger.isWarnEnabled()).willReturn(true);
303         assertTrue(richLogger.isEnabled(WARN));
304 
305         given(decoratedLogger.isWarnEnabled()).willReturn(false);
306         assertFalse(richLogger.isEnabled(WARN));
307     }
308 
309     @Test
310     public void logWarnMessage() {
311         richLogger.log(WARN, message);
312         verify(decoratedLogger).warn(message);
313     }
314 
315     @Test
316     public void logWarnMessageOneArg() {
317         richLogger.log(WARN, message, arg1);
318         verify(decoratedLogger).warn(message, arg1);
319     }
320 
321     @Test
322     public void logWarnMessageTwoArgs() {
323         richLogger.log(WARN, message, arg1, arg2);
324         verify(decoratedLogger).warn(message, arg1, arg2);
325     }
326 
327     @Test
328     public void logWarnMessageVarArgs() {
329         richLogger.log(WARN, message, arg1, arg2, arg3);
330         verify(decoratedLogger).warn(message, args);
331     }
332 
333     @Test
334     public void logWarnMessageException() {
335         richLogger.log(WARN, message, throwable);
336         verify(decoratedLogger).warn(message, throwable);
337     }
338 
339     @Test
340     public void isEnabledWarnMarker() {
341         given(decoratedLogger.isWarnEnabled(marker)).willReturn(true);
342         assertTrue(richLogger.isEnabled(WARN, marker));
343 
344         given(decoratedLogger.isWarnEnabled(marker)).willReturn(false);
345         assertFalse(richLogger.isEnabled(WARN, marker));
346     }
347 
348     @Test
349     public void logWarnMarkerMessage() {
350         richLogger.log(WARN, marker, message);
351         verify(decoratedLogger).warn(marker, message);
352     }
353 
354     @Test
355     public void logWarnMarkerMessageOneArg() {
356         richLogger.log(WARN, marker, message, arg1);
357         verify(decoratedLogger).warn(marker, message, arg1);
358     }
359 
360     @Test
361     public void logWarnMarkerMessageTwoArgs() {
362         richLogger.log(WARN, marker, message, arg1, arg2);
363         verify(decoratedLogger).warn(marker, message, arg1, arg2);
364     }
365 
366     @Test
367     public void logWarnMarkerMessageVarArgs() {
368         richLogger.log(WARN, marker, message, arg1, arg2, arg3);
369         verify(decoratedLogger).warn(marker, message, args);
370     }
371 
372     @Test
373     public void logWarnMarkerMessageException() {
374         richLogger.log(WARN, marker, message, throwable);
375         verify(decoratedLogger).warn(marker, message, throwable);
376     }
377 
378     @Test
379     public void isEnabledError() {
380         given(decoratedLogger.isErrorEnabled()).willReturn(true);
381         assertTrue(richLogger.isEnabled(ERROR));
382 
383         given(decoratedLogger.isErrorEnabled()).willReturn(false);
384         assertFalse(richLogger.isEnabled(ERROR));
385     }
386 
387     @Test
388     public void logErrorMessage() {
389         richLogger.log(ERROR, message);
390         verify(decoratedLogger).error(message);
391     }
392 
393     @Test
394     public void logErrorMessageOneArg() {
395         richLogger.log(ERROR, message, arg1);
396         verify(decoratedLogger).error(message, arg1);
397     }
398 
399     @Test
400     public void logErrorMessageTwoArgs() {
401         richLogger.log(ERROR, message, arg1, arg2);
402         verify(decoratedLogger).error(message, arg1, arg2);
403     }
404 
405     @Test
406     public void logErrorMessageVarArgs() {
407         richLogger.log(ERROR, message, arg1, arg2, arg3);
408         verify(decoratedLogger).error(message, args);
409     }
410 
411     @Test
412     public void logErrorMessageException() {
413         richLogger.log(ERROR, message, throwable);
414         verify(decoratedLogger).error(message, throwable);
415     }
416 
417     @Test
418     public void isEnabledErrorMarker() {
419         given(decoratedLogger.isErrorEnabled(marker)).willReturn(true);
420         assertTrue(richLogger.isEnabled(ERROR, marker));
421 
422         given(decoratedLogger.isErrorEnabled(marker)).willReturn(false);
423         assertFalse(richLogger.isEnabled(ERROR, marker));
424     }
425 
426     @Test
427     public void logErrorMarkerMessage() {
428         richLogger.log(ERROR, marker, message);
429         verify(decoratedLogger).error(marker, message);
430     }
431 
432     @Test
433     public void logErrorMarkerMessageOneArg() {
434         richLogger.log(ERROR, marker, message, arg1);
435         verify(decoratedLogger).error(marker, message, arg1);
436     }
437 
438     @Test
439     public void logErrorMarkerMessageTwoArgs() {
440         richLogger.log(ERROR, marker, message, arg1, arg2);
441         verify(decoratedLogger).error(marker, message, arg1, arg2);
442     }
443 
444     @Test
445     public void logErrorMarkerMessageVarArgs() {
446         richLogger.log(ERROR, marker, message, arg1, arg2, arg3);
447         verify(decoratedLogger).error(marker, message, args);
448     }
449 
450     @Test
451     public void logErrorMarkerMessageException() {
452         richLogger.log(ERROR, marker, message, throwable);
453         verify(decoratedLogger).error(marker, message, throwable);
454     }
455 
456     @Test
457     public void isEnabledOff() {
458         assertFalse(richLogger.isEnabled(OFF));
459     }
460 
461     @Test
462     public void logOffMessage() {
463         richLogger.log(OFF, message);
464         verifyZeroInteractions(decoratedLogger);
465     }
466 
467     @Test
468     public void logOffMessageOneArg() {
469         richLogger.log(OFF, message, arg1);
470         verifyZeroInteractions(decoratedLogger);
471     }
472 
473     @Test
474     public void logOffMessageTwoArgs() {
475         richLogger.log(OFF, message, arg1, arg2);
476         verifyZeroInteractions(decoratedLogger);
477     }
478 
479     @Test
480     public void logOffMessageVarArgs() {
481         richLogger.log(OFF, message, arg1, arg2, arg3);
482         verifyZeroInteractions(decoratedLogger);
483     }
484 
485     @Test
486     public void logOffMessageException() {
487         richLogger.log(OFF, message, throwable);
488         verifyZeroInteractions(decoratedLogger);
489     }
490 
491     @Test
492     public void isEnabledOffMarker() {
493         assertFalse(richLogger.isEnabled(OFF, marker));
494     }
495 
496     @Test
497     public void logOffMarkerMessage() {
498         richLogger.log(OFF, marker, message);
499         verifyZeroInteractions(decoratedLogger);
500     }
501 
502     @Test
503     public void logOffMarkerMessageOneArg() {
504         richLogger.log(OFF, marker, message, arg1);
505         verifyZeroInteractions(decoratedLogger);
506     }
507 
508     @Test
509     public void logOffMarkerMessageTwoArgs() {
510         richLogger.log(OFF, marker, message, arg1, arg2);
511         verifyZeroInteractions(decoratedLogger);
512     }
513 
514     @Test
515     public void logOffMarkerMessageVarArgs() {
516         richLogger.log(OFF, marker, message, arg1, arg2, arg3);
517         verifyZeroInteractions(decoratedLogger);
518     }
519 
520     @Test
521     public void logOffMarkerMessageException() {
522         richLogger.log(OFF, marker, message, throwable);
523         verifyZeroInteractions(decoratedLogger);
524     }
525 
526     @Test
527     public void traceMessageVarArgs() {
528         richLogger.trace(message, arg1, arg2, arg3);
529         verify(decoratedLogger).trace(message, args);
530     }
531 
532     @Test
533     public void traceMarkerMessageVarArgs() {
534         richLogger.trace(marker, message, arg1, arg2, arg3);
535         verify(decoratedLogger).trace(marker, message, args);
536     }
537 
538     @Test
539     public void debugMessageVarArgs() {
540         richLogger.debug(message, arg1, arg2, arg3);
541         verify(decoratedLogger).debug(message, args);
542     }
543 
544     @Test
545     public void debugMarkerMessageVarArgs() {
546         richLogger.debug(marker, message, arg1, arg2, arg3);
547         verify(decoratedLogger).debug(marker, message, args);
548     }
549 
550     @Test
551     public void infoMessageVarArgs() {
552         richLogger.info(message, arg1, arg2, arg3);
553         verify(decoratedLogger).info(message, args);
554     }
555 
556     @Test
557     public void infoMarkerMessageVarArgs() {
558         richLogger.info(marker, message, arg1, arg2, arg3);
559         verify(decoratedLogger).info(marker, message, args);
560     }
561 
562     @Test
563     public void warnMessageVarArgs() {
564         richLogger.warn(message, arg1, arg2, arg3);
565         verify(decoratedLogger).warn(message, args);
566     }
567 
568     @Test
569     public void warnMarkerMessageVarArgs() {
570         richLogger.warn(marker, message, arg1, arg2, arg3);
571         verify(decoratedLogger).warn(marker, message, args);
572     }
573 
574     @Test
575     public void errorMessageVarArgs() {
576         richLogger.error(message, arg1, arg2, arg3);
577         verify(decoratedLogger).error(message, args);
578     }
579 
580     @Test
581     public void errorMarkerMessageVarArgs() {
582         richLogger.error(marker, message, arg1, arg2, arg3);
583         verify(decoratedLogger).error(marker, message, args);
584     }
585 
586     private Object[] buildParamsFor(Method loggerMethod) throws Exception {
587         Class<?>[] parameterTypes = loggerMethod.getParameterTypes();
588         List<Object> params = Lists.transform(asList(parameterTypes), new Function<Class<?>, Object>() {
589             public Object apply(Class<?> aClass) {
590                 return uniqueValueFor(aClass);
591             }
592         });
593         return params.toArray();
594     }
595 }