1   /**
2    * Logback: the reliable, generic, fast and flexible logging framework.
3    * Copyright (C) 1999-2015, QOS.ch. All rights reserved.
4    *
5    * This program and the accompanying materials are dual-licensed under
6    * either the terms of the Eclipse Public License v1.0 as published by
7    * the Eclipse Foundation
8    *
9    *   or (per the licensee's choosing)
10   *
11   * under the terms of the GNU Lesser General Public License version 2.1
12   * as published by the Free Software Foundation.
13   */
14  package ch.qos.logback.classic.spi;
15  
16  
17  import ch.qos.logback.classic.Level;
18  import ch.qos.logback.classic.Logger;
19  import org.junit.jupiter.api.BeforeEach;
20  import org.junit.jupiter.api.Test;
21  
22  import ch.qos.logback.classic.LoggerContext;
23  import ch.qos.logback.classic.spi.BasicContextListener.UpdateType;
24  
25  import static org.junit.jupiter.api.Assertions.assertEquals;
26  
27  public class ContextListenerTest {
28  
29      LoggerContext loggerContext;
30      BasicContextListener listener;
31  
32      @BeforeEach
33      public void setUp() throws Exception {
34          loggerContext = new LoggerContext();
35          loggerContext.start();
36          listener = new BasicContextListener();
37          loggerContext.addListener(listener);
38      }
39  
40      @Test
41      public void testNotifyOnReset() {
42          loggerContext.reset();
43          assertEquals(UpdateType.RESET, listener.updateType);
44          assertEquals(listener.context, loggerContext);
45      }
46  
47      @Test
48      public void testResistantListener_NotifyOnStop() {
49          listener.setResetResistant(true);
50          loggerContext.stop();
51          assertEquals(UpdateType.STOP, listener.updateType);
52          assertEquals(listener.context, loggerContext);
53      }
54  
55      @Test
56      public void testNotResistantListener_NotifyOnStop() {
57          loggerContext.stop();
58          assertEquals(UpdateType.RESET, listener.updateType);
59          assertEquals(listener.context, loggerContext);
60      }
61  
62      @Test
63      public void testNotifyOnStart() {
64          loggerContext.start();
65          assertEquals(UpdateType.START, listener.updateType);
66          assertEquals(listener.context, loggerContext);
67      }
68  
69      void checkLevelChange(String loggerName, Level level) {
70          Logger logger = loggerContext.getLogger(loggerName);
71          logger.setLevel(level);
72  
73          assertEquals(UpdateType.LEVEL_CHANGE, listener.updateType);
74          assertEquals(listener.logger, logger);
75          assertEquals(listener.level, level);
76  
77      }
78  
79      @Test
80      public void testLevelChange() {
81          checkLevelChange("a", Level.INFO);
82          checkLevelChange("a.b", Level.ERROR);
83          checkLevelChange("a.b.c", Level.DEBUG);
84      }
85  }