1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.slf4j;
26
27 import static org.junit.Assert.assertEquals;
28 import static org.junit.Assert.assertTrue;
29
30 import java.io.ByteArrayOutputStream;
31 import java.io.PrintStream;
32
33 import org.junit.After;
34 import org.junit.Before;
35 import org.junit.Test;
36
37
38
39
40
41
42
43
44
45
46
47 public class DetectLoggerNameMismatchTest {
48
49 private static final String MISMATCH_STRING = "Detected logger name mismatch";
50
51 private final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
52 private final PrintStream oldErr = System.err;
53
54 @Before
55 public void setUp() {
56 System.setErr(new PrintStream(byteArrayOutputStream));
57 }
58
59 @After
60 public void tearDown() {
61 setTrialEnabled(false);
62 System.setErr(oldErr);
63 }
64
65
66
67
68
69 @Test
70 public void testNoTriggerWithoutProperty() {
71 setTrialEnabled(false);
72 Logger logger = LoggerFactory.getLogger(String.class);
73 assertEquals("java.lang.String", logger.getName());
74 assertMismatchDetected(false);
75 }
76
77
78
79
80
81 @Test
82 public void testTriggerWithProperty() {
83 setTrialEnabled(true);
84 LoggerFactory.getLogger(String.class);
85 assertMismatchDetected(true);
86 }
87
88
89
90
91 @Test
92 public void testTriggerWholeMessage() {
93 setTrialEnabled(true);
94 LoggerFactory.getLogger(String.class);
95 assertTrue(
96 "Actual value of byteArrayOutputStream: " + String.valueOf(byteArrayOutputStream),
97 String.valueOf(byteArrayOutputStream).contains(
98 "Detected logger name mismatch. Given name: \"java.lang.String\"; " +
99 "computed name: \"org.slf4j.DetectLoggerNameMismatchTest\"."));
100 }
101
102
103
104
105
106 @Test
107 public void testPassIfMatch() {
108 setTrialEnabled(true);
109 Logger logger = LoggerFactory.getLogger(DetectLoggerNameMismatchTest.class);
110 assertEquals("org.slf4j.DetectLoggerNameMismatchTest", logger.getName());
111 assertMismatchDetected(false);
112 }
113
114 private void assertMismatchDetected(boolean mismatchDetected) {
115 assertEquals(mismatchDetected,
116 String.valueOf(byteArrayOutputStream).contains(MISMATCH_STRING));
117 }
118
119 @Test
120 public void verifyLoggerDefinedInBaseWithOverridenGetClassMethod() {
121 setTrialEnabled(true);
122 Square square = new Square();
123 assertEquals("org.slf4j.Square", square.logger.getName());
124 assertMismatchDetected(false);
125 }
126
127 private static void setTrialEnabled(boolean enabled) {
128
129
130
131 LoggerFactory.DETECT_LOGGER_NAME_MISMATCH = enabled;
132 }
133 }
134
135
136 class ShapeBase {
137 public Logger logger = LoggerFactory.getLogger(getClass());
138 }
139
140 class Square extends ShapeBase {}