1   package ch.qos.logback.core.util;
2   
3   import static org.junit.Assert.*;
4   
5   import java.io.ByteArrayOutputStream;
6   import java.io.PrintStream;
7   
8   import org.junit.After;
9   import org.junit.Before;
10  import org.junit.Test;
11  
12  import ch.qos.logback.core.Context;
13  import ch.qos.logback.core.ContextBase;
14  import ch.qos.logback.core.status.ErrorStatus;
15  import ch.qos.logback.core.status.InfoStatus;
16  import ch.qos.logback.core.status.Status;
17  import ch.qos.logback.core.status.WarnStatus;
18  
19  public class StatusPrinterTest {
20  
21    ByteArrayOutputStream outputStream;
22    PrintStream ps;
23    
24    @Before
25    public void setUp() throws Exception {
26      outputStream = new ByteArrayOutputStream();
27      ps = new PrintStream(outputStream);
28      StatusPrinter.setPrintStream(ps);
29    }
30  
31    @After
32    public void tearDown() throws Exception {
33      StatusPrinter.setPrintStream(System.out);
34      ps = null;
35      outputStream = null;
36    }
37    
38    @Test
39    public void testBasic() {
40      Context context = new ContextBase();
41      context.getStatusManager().add(new InfoStatus("test", this));
42      StatusPrinter.print(context);
43      String result = outputStream.toString();
44      assertTrue(result.contains("|-INFO in "+this.getClass().getName()));
45    }
46  
47    @Test
48    public void testNested() {
49      Status s0 = new ErrorStatus("test0", this);
50      Status s1 = new InfoStatus("test1", this);
51      Status s11 = new InfoStatus("test11", this);
52      Status s12 = new InfoStatus("test12", this);
53      s1.add(s11);
54      s1.add(s12);
55      
56      Status s2 = new InfoStatus("test2", this);
57      Status s21 = new InfoStatus("test21", this);
58      Status s211 = new WarnStatus("test211", this);
59      
60      Status s22 = new InfoStatus("test22", this);
61      s2.add(s21);
62      s2.add(s22);
63      s21.add(s211);
64      
65      
66      Context context = new ContextBase();
67      context.getStatusManager().add(s0);
68      context.getStatusManager().add(s1);
69      context.getStatusManager().add(s2);
70  
71      StatusPrinter.print(context);
72      String result = outputStream.toString();
73      assertTrue(result.contains("+ INFO in "+this.getClass().getName()));
74      assertTrue(result.contains("+ WARN in "+this.getClass().getName()));
75      assertTrue(result.contains("    |-WARN in "+this.getClass().getName()));
76    }
77  
78    @Test
79    public void testWithException() {
80      Status s0 = new ErrorStatus("test0", this);
81      Status s1 = new InfoStatus("test1", this, new Exception("testEx"));
82      Status s11 = new InfoStatus("test11", this);
83      Status s12 = new InfoStatus("test12", this);
84      s1.add(s11);
85      s1.add(s12);
86      
87      Status s2 = new InfoStatus("test2", this);
88      Status s21 = new InfoStatus("test21", this);
89      Status s211 = new WarnStatus("test211", this);
90      
91      Status s22 = new InfoStatus("test22", this);
92      s2.add(s21);
93      s2.add(s22);
94      s21.add(s211);
95      
96      Context context = new ContextBase();
97      context.getStatusManager().add(s0);
98      context.getStatusManager().add(s1);
99      context.getStatusManager().add(s2);
100     StatusPrinter.print(context);  
101     String result = outputStream.toString();
102     assertTrue(result.contains("|-ERROR in "+this.getClass().getName()));
103     assertTrue(result.contains("+ INFO in "+this.getClass().getName()));
104     assertTrue(result.contains("ch.qos.logback.core.util.StatusPrinterTest.testWithException"));
105   }
106   
107 }