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