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
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 }