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 @Test
69 public void testNoTriggerWithoutProperty() {
70 setTrialEnabled(false);
71 Logger logger = LoggerFactory.getLogger(String.class);
72 assertEquals("java.lang.String", logger.getName());
73 assertMismatchDetected(false);
74 }
75
76
77
78
79 @Test
80 public void testTriggerWithProperty() {
81 setTrialEnabled(true);
82 LoggerFactory.getLogger(String.class);
83 assertMismatchDetected(true);
84 }
85
86
87
88
89 @Test
90 public void testTriggerWholeMessage() {
91 setTrialEnabled(true);
92 LoggerFactory.getLogger(String.class);
93 assertTrue("Actual value of byteArrayOutputStream: " + String.valueOf(byteArrayOutputStream), String.valueOf(byteArrayOutputStream).contains(
94 "Detected logger name mismatch. Given name: \"java.lang.String\"; " + "computed name: \"org.slf4j.DetectLoggerNameMismatchTest\"."));
95 }
96
97
98
99
100 @Test
101 public void testPassIfMatch() {
102 setTrialEnabled(true);
103 Logger logger = LoggerFactory.getLogger(DetectLoggerNameMismatchTest.class);
104 assertEquals("org.slf4j.DetectLoggerNameMismatchTest", logger.getName());
105 assertMismatchDetected(false);
106 }
107
108 private void assertMismatchDetected(boolean mismatchDetected) {
109 assertEquals(mismatchDetected, String.valueOf(byteArrayOutputStream).contains(MISMATCH_STRING));
110 }
111
112 @Test
113 public void verifyLoggerDefinedInBaseWithOverridenGetClassMethod() {
114 setTrialEnabled(true);
115 Square square = new Square();
116 assertEquals("org.slf4j.Square", square.logger.getName());
117 assertMismatchDetected(false);
118 }
119
120 private static void setTrialEnabled(boolean enabled) {
121
122
123
124 LoggerFactory.DETECT_LOGGER_NAME_MISMATCH = enabled;
125 }
126 }
127
128
129 class ShapeBase {
130 public Logger logger = LoggerFactory.getLogger(getClass());
131 }
132
133 class Square extends ShapeBase {
134 }