View Javadoc
1   package org.slf4j.jul;
2   
3   import static org.junit.Assert.assertEquals;
4   
5   import java.util.function.Supplier;
6   import java.util.logging.Handler;
7   import java.util.logging.Level;
8   import java.util.logging.LogRecord;
9   
10  import org.junit.After;
11  import org.junit.Assert;
12  import org.junit.Before;
13  import org.junit.Test;
14  import org.slf4j.Logger;
15  import org.slf4j.LoggerFactory;
16  
17  public class FluentApiInvocationTest {
18  
19      ListHandler listHandler = new ListHandler();
20      java.util.logging.Logger root = java.util.logging.Logger.getLogger("");
21      Level oldLevel;
22      Logger logger = LoggerFactory.getLogger(this.getClass());
23  
24      @Before
25      public void setUp() throws Exception {
26          oldLevel = root.getLevel();
27          root.setLevel(Level.FINE);
28          // removeAllHandlers(root);
29          root.addHandler(listHandler);
30      }
31  
32      @After
33      public void tearDown() throws Exception {
34          root.setLevel(oldLevel);
35          removeListHandlers(root);
36      }
37  
38      void removeListHandlers(java.util.logging.Logger logger) {
39          Handler[] handlers = logger.getHandlers();
40          for (Handler h : handlers) {
41              if (h instanceof ListHandler)
42                  logger.removeHandler(h);
43          }
44      }
45  
46      @Test
47      public void singleMessage() {
48          String msg = "Hello world.";
49          logger.atDebug().log(msg);
50          assertLogMessage(msg, 0);
51      }
52  
53      @Test
54      public void messageWithArguments() {
55          String msg = "Hello {}.";
56          logger.atDebug().addArgument("world").log(msg);
57          assertLogMessage("Hello world.", 0);
58      }
59  
60      @Test
61      public void messageWithTwoArguments() {
62          int old = 15;
63          int t = 16;
64  
65          {
66              String msg = "Temperature set to {}. Old temperature was {}.";
67              logger.atDebug().addArgument(t).addArgument(old).log(msg);
68              assertLogMessage("Temperature set to 16. Old temperature was 15.", 0);
69          }
70  
71          {
72              String msg = "Temperature set to {}. Old temperature was {}.";
73              logger.atDebug().log(msg, t, old);
74              assertLogMessage("Temperature set to 16. Old temperature was 15.", 0);
75          }
76  
77          {
78              String msg = "Temperature set to {}. Old temperature was {}.";
79              logger.atDebug().addArgument(t).log(msg, old);
80              assertLogMessage("Temperature set to 16. Old temperature was 15.", 0);
81          }
82  
83          {
84              String msg = "Temperature set to {}. Old temperature was {}.";
85              logger.atDebug().addArgument(() -> t16()).log(msg, old);
86              assertLogMessage("Temperature set to 16. Old temperature was 15.", 0);
87          }
88      }
89  
90      @Test
91      public void supplierArguments() {
92          Supplier<String> stringSupplier = () -> "world";
93          logger.atInfo().addArgument(stringSupplier).log("hello {}");
94          assertLogMessage("hello world", 0);
95      }
96  
97      public int t16() {
98          return 16;
99      }
100 
101     @Test
102     public void messageWithThrowable() {
103         String msg = "Hello world.";
104         Throwable t = new IllegalStateException();
105         logger.atDebug().setCause(t).log(msg);
106         assertLogMessage("Hello world.", 0);
107         assertThrowable(t, 0);
108     }
109 
110     @Test
111     public void messageWithArgumentsAndThrowable() {
112         String msg = "Hello {}.";
113         Throwable t = new IllegalStateException();
114 
115         logger.atDebug().setCause(t).addArgument("world").log(msg);
116         assertLogMessage("Hello world.", 0);
117         assertThrowable(t, 0);
118     }
119 
120     @Test
121     public void messageWithKeyValuePair() {
122         String msg = "Hello world.";
123         logger.atDebug().addKeyValue("k", "v").log(msg);
124         assertLogMessage("k=v Hello world.", 0);
125 
126         int oldT = 15;
127         int newT = 16;
128         logger.atDebug().addKeyValue("oldT", oldT).addKeyValue("newT", newT).log("Temperature changed.");
129         assertLogMessage("oldT=15 newT=16 Temperature changed.", 1);
130 
131     }
132 
133     private void assertLogMessage(String expected, int index) {
134         LogRecord logRecord = listHandler.recordList.get(index);
135         Assert.assertNotNull(logRecord);
136         assertEquals(expected, logRecord.getMessage());
137     }
138 
139     private void assertThrowable(Throwable expected, int index) {
140         LogRecord logRecord = listHandler.recordList.get(index);
141         Assert.assertNotNull(logRecord);
142         assertEquals(expected, logRecord.getThrown());
143     }
144 }