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.simple;
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.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35 import org.slf4j.LoggerFactoryFriend;
36 import org.junit.After;
37 import org.junit.Before;
38 import org.junit.Test;
39
40
41
42
43
44
45
46
47
48
49
50 public class DetectLoggerNameMismatchTest {
51
52 private static final String MISMATCH_STRING = "Detected logger name mismatch";
53
54 static String NAME_OF_THIS_CLASS = DetectLoggerNameMismatchTest.class.getName();
55
56 private final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
57 private final PrintStream oldErr = System.err;
58
59 @Before
60 public void setUp() {
61 System.setErr(new PrintStream(byteArrayOutputStream));
62 }
63
64 @After
65 public void tearDown() {
66 setTrialEnabled(false);
67 System.setErr(oldErr);
68 }
69
70
71
72
73 @Test
74 public void testNoTriggerWithoutProperty() {
75 setTrialEnabled(false);
76 Logger logger = LoggerFactory.getLogger(String.class);
77 assertEquals("java.lang.String", logger.getName());
78 assertMismatchDetected(false);
79 }
80
81
82
83
84 @Test
85 public void testTriggerWithProperty() {
86 setTrialEnabled(true);
87 LoggerFactory.getLogger(String.class);
88 assertMismatchDetected(true);
89 }
90
91
92
93
94 @Test
95 public void testTriggerWholeMessage() {
96 setTrialEnabled(true);
97 LoggerFactory.getLogger(String.class);
98 boolean success = String.valueOf(byteArrayOutputStream)
99 .contains("Detected logger name mismatch. Given name: \"java.lang.String\"; " + "computed name: \"" + NAME_OF_THIS_CLASS + "\".");
100 assertTrue("Actual value of byteArrayOutputStream: " + String.valueOf(byteArrayOutputStream), success);
101 }
102
103
104
105
106 @Test
107 public void testPassIfMatch() {
108 setTrialEnabled(true);
109 Logger logger = LoggerFactory.getLogger(DetectLoggerNameMismatchTest.class);
110 assertEquals(DetectLoggerNameMismatchTest.class.getName(), logger.getName());
111 assertMismatchDetected(false);
112 }
113
114 private void assertMismatchDetected(boolean mismatchDetected) {
115 assertEquals(mismatchDetected, String.valueOf(byteArrayOutputStream).contains(MISMATCH_STRING));
116 }
117
118 @Test
119 public void verifyLoggerDefinedInBaseWithOverridenGetClassMethod() {
120 setTrialEnabled(true);
121 Square square = new Square();
122 assertEquals(Square.class.getName(), square.logger.getName());
123 assertMismatchDetected(false);
124 }
125
126 private static void setTrialEnabled(boolean enabled) {
127
128
129
130 LoggerFactoryFriend.setDetectLoggerNameMismatch(enabled);
131 }
132 }
133
134
135 class ShapeBase {
136 public Logger logger = LoggerFactory.getLogger(getClass());
137 }
138
139 class Square extends ShapeBase {
140 }