1   /*
2    * Logback: the reliable, generic, fast and flexible logging framework.
3    * Copyright (C) 1999-2026, 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 v2.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  
15  package ch.qos.logback.core.joran.sanity;
16  
17  import ch.qos.logback.core.Context;
18  import ch.qos.logback.core.ContextBase;
19  import ch.qos.logback.core.model.AppenderModel;
20  import ch.qos.logback.core.model.TopModel;
21  import ch.qos.logback.core.status.Status;
22  import ch.qos.logback.core.status.testUtil.StatusChecker;
23  import org.junit.jupiter.api.BeforeEach;
24  import org.junit.jupiter.api.Test;
25  
26  import static ch.qos.logback.core.joran.sanity.AppenderWithinAppenderSanityChecker.NESTED_APPENDERS_WARNING;
27  
28  public class AppenderWithinAppenderSanityCheckerTest {
29  
30  
31      Context context = new ContextBase();
32      AppenderWithinAppenderSanityChecker awasc = new AppenderWithinAppenderSanityChecker();
33      StatusChecker statusChecker = new StatusChecker(context);
34  
35      @BeforeEach
36      public void setUp() throws Exception {
37          awasc.setContext(context);
38      }
39  
40      @Test
41      public void smoke() {
42  
43          TopModel topModel = new TopModel();
44          awasc.check(topModel);
45          statusChecker.assertIsWarningOrErrorFree();
46      }
47  
48  
49      @Test
50      public void singleAppender() {
51          TopModel topModel = new TopModel();
52          AppenderModel appenderModel0 = new AppenderModel();
53          appenderModel0.setLineNumber(1);
54          topModel.addSubModel(appenderModel0);
55          awasc.check(topModel);
56          statusChecker.assertIsWarningOrErrorFree();
57      }
58  
59      @Test
60      public void nestedAppender() {
61          TopModel topModel = new TopModel();
62          AppenderModel appenderModel0 = new AppenderModel();
63          appenderModel0.setLineNumber(1);
64          topModel.addSubModel(appenderModel0);
65  
66          AppenderModel appenderModel1 = new AppenderModel();
67          appenderModel1.setLineNumber(2);
68          appenderModel0.addSubModel(appenderModel1);
69  
70          awasc.check(topModel);
71  
72          statusChecker.assertContainsMatch(Status.WARN, NESTED_APPENDERS_WARNING);
73          statusChecker.assertContainsMatch(Status.WARN,"Appender at line 1");
74      }
75  
76  }