1 package ch.qos.logback.classic.pattern;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertTrue;
5
6 import java.io.PrintWriter;
7 import java.io.StringWriter;
8 import java.util.regex.Matcher;
9 import java.util.regex.Pattern;
10
11 import org.junit.After;
12 import org.junit.Before;
13 import org.junit.Test;
14
15 import ch.qos.logback.classic.Level;
16 import ch.qos.logback.classic.LoggerContext;
17 import ch.qos.logback.classic.PatternLayout;
18 import ch.qos.logback.classic.spi.LoggingEvent;
19
20 public class ExtendedThrowableProxyConverterTest {
21
22 LoggerContext lc = new LoggerContext();
23 ExtendedThrowableProxyConverter etpc = new ExtendedThrowableProxyConverter();
24 StringWriter sw = new StringWriter();
25 PrintWriter pw = new PrintWriter(sw);
26
27 @Before
28 public void setUp() throws Exception {
29 etpc.setContext(lc);
30 etpc.start();
31 }
32
33 @After
34 public void tearDown() throws Exception {
35 }
36
37 private LoggingEvent createLoggingEvent(Throwable t) {
38 LoggingEvent le = new LoggingEvent(this.getClass().getName(), lc
39 .getLogger(LoggerContext.ROOT_NAME), Level.DEBUG, "test message", t,
40 null);
41 return le;
42 }
43
44 @Test
45 public void integration() {
46 PatternLayout pl = new PatternLayout();
47 pl.setContext(lc);
48 pl.setPattern("%m%n");
49 pl.start();
50 LoggingEvent e = createLoggingEvent(new Exception("x"));
51 String res = pl.doLayout(e);
52
53
54 Pattern p = Pattern.compile(" \\[junit.*\\]");
55 Matcher m = p.matcher(res);
56 int i = 0;
57 while(m.find()) {
58 i++;
59 }
60 assertTrue(i+ " should be larger than 5", i > 5);
61 }
62
63 @Test
64 public void smoke() {
65 Exception t = new Exception("smoke");
66 verify(t);
67 }
68
69 @Test
70 public void nested() {
71 Throwable t = makeNestedException(1);
72 verify(t);
73 }
74
75 void verify(Throwable t) {
76 t.printStackTrace(pw);
77
78 LoggingEvent le = createLoggingEvent(t);
79 String result = etpc.convert(le);
80 result = result.replace("common frames omitted", "more");
81 result = result.replaceAll(" \\[.*\\]", "");
82 assertEquals(sw.toString(), result);
83 }
84
85 Throwable makeNestedException(int level) {
86 if (level == 0) {
87 return new Exception("nesting level=" + level);
88 }
89 Throwable cause = makeNestedException(level - 1);
90 return new Exception("nesting level =" + level, cause);
91 }
92 }