1   /**
2    * Logback: the generic, reliable, fast and flexible logging framework.
3    * 
4    * Copyright (C) 2000-2008, QOS.ch
5    * 
6    * This library is free software, you can redistribute it and/or modify it under
7    * the terms of the GNU Lesser General Public License as published by the Free
8    * Software Foundation.
9    */
10  
11  package ch.qos.logback.core;
12  
13  
14  import static org.junit.Assert.*;
15  
16  import java.io.StringWriter;
17  import java.io.Writer;
18  
19  import org.junit.After;
20  import org.junit.Before;
21  import org.junit.Test;
22  
23  import ch.qos.logback.core.pattern.parser.SamplePatternLayout;
24  
25  public class WriterAppenderTest {
26  
27    Context context = new ContextBase();
28    
29    @Before
30    public void setUp() throws Exception {
31    }
32  
33    @After
34    public void tearDown() throws Exception {
35    }
36  
37    @Test
38    public void smoke() {
39      String FILE_HEADER = "FILE_HEADER ";
40      String PRESENTATION_HEADER = "PRESENTATION_HEADER";
41      String PRESENTATION_FOOTER = "PRESENTATION_FOOTER ";
42      String FILE_FOOTER = "FILE_FOOTER";
43      headerFooterCheck(FILE_HEADER, PRESENTATION_HEADER, PRESENTATION_FOOTER, FILE_FOOTER);
44    }
45  
46    @Test
47    public void nullFileHeader() {
48      String FILE_HEADER = null;
49      String PRESENTATION_HEADER = "PRESENTATION_HEADER";
50      String PRESENTATION_FOOTER = "PRESENTATION_FOOTER ";
51      String FILE_FOOTER = "FILE_FOOTER";
52      headerFooterCheck(FILE_HEADER, PRESENTATION_HEADER, PRESENTATION_FOOTER, FILE_FOOTER);
53    }
54  
55    @Test
56    public void nullPresentationHeader() {
57      String FILE_HEADER = "FILE_HEADER ";
58      String PRESENTATION_HEADER = null;
59      String PRESENTATION_FOOTER = "PRESENTATION_FOOTER ";
60      String FILE_FOOTER = "FILE_FOOTER";
61      headerFooterCheck(FILE_HEADER, PRESENTATION_HEADER, PRESENTATION_FOOTER, FILE_FOOTER);
62    }
63  
64    @Test
65    public void nullPresentationFooter() {
66      String FILE_HEADER = "FILE_HEADER ";
67      String PRESENTATION_HEADER =  "PRESENTATION_HEADER";
68      String PRESENTATION_FOOTER = null;
69      String FILE_FOOTER = "FILE_FOOTER";
70      headerFooterCheck(FILE_HEADER, PRESENTATION_HEADER, PRESENTATION_FOOTER, FILE_FOOTER);
71    }
72    
73    @Test
74    public void nullFileFooter() {
75      String FILE_HEADER = "FILE_HEADER ";
76      String PRESENTATION_HEADER = "PRESENTATION_HEADER";
77      String PRESENTATION_FOOTER = "PRESENTATION_FOOTER ";
78      String FILE_FOOTER = null;
79      headerFooterCheck(FILE_HEADER, PRESENTATION_HEADER, PRESENTATION_FOOTER, FILE_FOOTER);
80    }
81    
82    public void headerFooterCheck(String fileHeader, String presentationHeader, String presentationFooter, String fileFooter) {
83      WriterAppender<Object> wa = new WriterAppender<Object>();
84      wa.setContext(context);
85      Writer sw = new StringWriter();
86   
87      SamplePatternLayout<Object> spl = new SamplePatternLayout<Object>();
88      spl.setContext(context);
89    
90      spl.setFileHeader(fileHeader);
91      spl.setPresentationHeader(presentationHeader);
92      spl.setPresentationFooter(presentationFooter);
93      spl.setFileFooter(fileFooter);
94    
95      spl.start();
96      
97      wa.setLayout(spl);
98      wa.setWriter(sw);
99      wa.start();
100     
101     wa.stop();
102     String result = sw.toString();
103 
104     String expectedHeader = emtptyIfNull(fileHeader) + emtptyIfNull(presentationHeader);
105     assertTrue(result, result.startsWith(expectedHeader));
106 
107     String expectedFooter = emtptyIfNull(presentationFooter) + emtptyIfNull(fileFooter);
108     assertTrue(result, result.endsWith(expectedFooter));
109   }
110   
111   String emtptyIfNull(String s) {
112     return s == null ? "" : s;
113   }
114 }