1   package ch.qos.logback.classic.pattern;
2   
3   import static org.junit.Assert.*;
4   
5   import org.junit.After;
6   import org.junit.Before;
7   import org.junit.Test;
8   import org.slf4j.IMarkerFactory;
9   import org.slf4j.Marker;
10  import org.slf4j.helpers.BasicMarkerFactory;
11  
12  import ch.qos.logback.classic.Level;
13  import ch.qos.logback.classic.LoggerContext;
14  import ch.qos.logback.classic.spi.LoggingEvent;
15  
16  public class MarkerConverterTest {
17    
18    LoggerContext lc;
19    MarkerConverter converter;
20    // use a different facotry for each test so that they are independent
21    IMarkerFactory markerFactory = new BasicMarkerFactory();
22    
23    @Before
24    public void setUp() throws Exception {
25      lc = new LoggerContext();
26      converter = new MarkerConverter();
27      converter.start();
28    }
29    
30    @After
31    public void tearDown() throws Exception {
32      lc = null;
33      converter.stop();
34      converter = null;
35    }
36  
37    @Test
38    public void testWithNullMarker() {
39      String result = converter.convert(createLoggingEvent(null));
40      assertEquals("", result);
41    }
42    
43    @Test
44    public void testWithMarker() {
45      String name = "test";
46      Marker marker = markerFactory.getMarker(name);
47      String result = converter.convert(createLoggingEvent(marker));
48      assertEquals(name, result);
49    }
50    
51    @Test
52    public void testWithOneChildMarker() {
53      Marker marker = markerFactory.getMarker("test");
54      marker.add(markerFactory.getMarker("child"));
55      
56      String result = converter.convert(createLoggingEvent(marker));
57      
58      assertEquals("test [ child ]", result);
59    }
60    
61    @Test
62    public void testWithSeveralChildMarker() {
63      Marker marker = markerFactory.getMarker("testParent");
64      marker.add(markerFactory.getMarker("child1"));
65      marker.add(markerFactory.getMarker("child2"));
66      marker.add(markerFactory.getMarker("child3"));
67      
68      String result = converter.convert(createLoggingEvent(marker));
69      
70      assertEquals("testParent [ child1, child2, child3 ]", result);
71    }
72    
73    private LoggingEvent createLoggingEvent(Marker marker) {
74      LoggingEvent le = new LoggingEvent(this.getClass().getName(), lc.getLogger(LoggerContext.ROOT_NAME),
75          Level.DEBUG, "test message", null, null);
76      le.setMarker(marker);
77      return le;
78    }
79  }