View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.plugins.checkstyle.exec;
20  
21  import java.io.File;
22  import java.util.HashMap;
23  import java.util.Map;
24  
25  import com.puppycrawl.tools.checkstyle.api.AuditEvent;
26  import com.puppycrawl.tools.checkstyle.api.SeverityLevel;
27  import com.puppycrawl.tools.checkstyle.api.Violation;
28  import junit.framework.TestCase;
29  
30  /**
31   * @author Edwin Punzalan
32   *
33   */
34  public class CheckstyleReportListenerTest extends TestCase {
35      private Map<SeverityLevel, CheckstyleCheckerListener> listenerMap;
36  
37      /** {@inheritDoc} */
38      protected void setUp() throws Exception {
39          listenerMap = new HashMap<>();
40  
41          CheckstyleCheckerListener listener = new CheckstyleCheckerListener(new File("/source/path"));
42          listener.setSeverityLevelFilter(SeverityLevel.INFO);
43          listenerMap.put(listener.getSeverityLevelFilter(), listener);
44  
45          listener = new CheckstyleCheckerListener(new File("/source/path"));
46          listener.setSeverityLevelFilter(SeverityLevel.WARNING);
47          listenerMap.put(listener.getSeverityLevelFilter(), listener);
48  
49          listener = new CheckstyleCheckerListener(new File("/source/path"));
50          listener.setSeverityLevelFilter(SeverityLevel.ERROR);
51          listenerMap.put(listener.getSeverityLevelFilter(), listener);
52  
53          listener = new CheckstyleCheckerListener(new File("/source/path"));
54          listener.setSeverityLevelFilter(SeverityLevel.IGNORE);
55          listenerMap.put(listener.getSeverityLevelFilter(), listener);
56      }
57  
58      public void testListeners() {
59          fireAuditStarted(null);
60  
61          AuditEvent event = new AuditEvent(this, "/source/path/file1", null);
62          fireFileStarted(event);
63          Violation message = new Violation(0, 0, "", "", null, SeverityLevel.INFO, null, getClass(), null);
64          fireAddError(new AuditEvent(this, "/source/path/file1", message));
65          fireFileFinished(event);
66  
67          event = new AuditEvent(this, "/source/path/file2", null);
68          fireFileStarted(event);
69          message = new Violation(0, 0, "", "", null, SeverityLevel.WARNING, null, getClass(), null);
70          fireAddError(new AuditEvent(this, "/source/path/file2", message));
71          fireAddError(new AuditEvent(this, "/source/path/file2", message));
72          fireFileFinished(event);
73  
74          event = new AuditEvent(this, "/source/path/file3", null);
75          fireFileStarted(event);
76          message = new Violation(0, 0, "", "", null, SeverityLevel.ERROR, null, getClass(), null);
77          fireAddError(new AuditEvent(this, "/source/path/file3", message));
78          fireAddError(new AuditEvent(this, "/source/path/file3", message));
79          fireAddError(new AuditEvent(this, "/source/path/file3", message));
80          fireFileFinished(event);
81  
82          event = new AuditEvent(this, "/source/path/file4", null);
83          fireFileStarted(event);
84          message = new Violation(0, 0, "", "", null, SeverityLevel.IGNORE, null, getClass(), null);
85          fireAddError(new AuditEvent(this, "/source/path/file4", message));
86          fireAddError(new AuditEvent(this, "/source/path/file4", message));
87          fireAddError(new AuditEvent(this, "/source/path/file4", message));
88          fireAddError(new AuditEvent(this, "/source/path/file4", message));
89          fireFileFinished(event);
90  
91          fireAuditFinished(null);
92  
93          CheckstyleCheckerListener listener = listenerMap.get(SeverityLevel.INFO);
94          CheckstyleResults results = listener.getResults();
95          assertEquals("Test total files", 4, results.getFiles().size());
96          assertEquals("Test file count", 4, results.getFileCount());
97          assertEquals(
98                  "test file violations", 1, results.getFileViolations("file1").size());
99          assertEquals("test file severities", 1, results.getSeverityCount("file1", SeverityLevel.INFO));
100         assertEquals("test file severities", 0, results.getSeverityCount("file1", SeverityLevel.WARNING));
101         assertEquals("test file severities", 0, results.getSeverityCount("file1", SeverityLevel.ERROR));
102         assertEquals("test file severities", 0, results.getSeverityCount("file1", SeverityLevel.IGNORE));
103 
104         listener = listenerMap.get(SeverityLevel.WARNING);
105         results = listener.getResults();
106         assertEquals("Test total files", 4, results.getFiles().size());
107         assertEquals("Test file count", 4, results.getFileCount());
108         assertEquals(
109                 "test file violations", 2, results.getFileViolations("file2").size());
110         assertEquals("test file severities", 0, results.getSeverityCount("file2", SeverityLevel.INFO));
111         assertEquals("test file severities", 2, results.getSeverityCount("file2", SeverityLevel.WARNING));
112         assertEquals("test file severities", 0, results.getSeverityCount("file2", SeverityLevel.ERROR));
113         assertEquals("test file severities", 0, results.getSeverityCount("file2", SeverityLevel.IGNORE));
114 
115         listener = listenerMap.get(SeverityLevel.ERROR);
116         results = listener.getResults();
117         assertEquals("Test total files", 4, results.getFiles().size());
118         assertEquals("Test file count", 4, results.getFileCount());
119         assertEquals(
120                 "test file violations", 3, results.getFileViolations("file3").size());
121         assertEquals("test file severities", 0, results.getSeverityCount("file3", SeverityLevel.INFO));
122         assertEquals("test file severities", 0, results.getSeverityCount("file3", SeverityLevel.WARNING));
123         assertEquals("test file severities", 3, results.getSeverityCount("file3", SeverityLevel.ERROR));
124         assertEquals("test file severities", 0, results.getSeverityCount("file3", SeverityLevel.IGNORE));
125 
126         listener = listenerMap.get(SeverityLevel.IGNORE);
127         results = listener.getResults();
128         assertEquals("Test total files", 4, results.getFiles().size());
129         assertEquals("Test file count", 4, results.getFileCount());
130         assertEquals(
131                 "test file violations", 0, results.getFileViolations("file4").size());
132         assertEquals("test file severities", 0, results.getSeverityCount("file4", SeverityLevel.INFO));
133         assertEquals("test file severities", 0, results.getSeverityCount("file4", SeverityLevel.WARNING));
134         assertEquals("test file severities", 0, results.getSeverityCount("file4", SeverityLevel.ERROR));
135         assertEquals("test file severities", 0, results.getSeverityCount("file4", SeverityLevel.IGNORE));
136     }
137 
138     private void fireAuditStarted(AuditEvent event) {
139         for (CheckstyleCheckerListener listener : listenerMap.values()) {
140             listener.auditStarted(event);
141         }
142     }
143 
144     private void fireAuditFinished(AuditEvent event) {
145         for (CheckstyleCheckerListener listener : listenerMap.values()) {
146             listener.auditFinished(event);
147         }
148     }
149 
150     private void fireFileStarted(AuditEvent event) {
151         for (CheckstyleCheckerListener listener : listenerMap.values()) {
152             listener.fileStarted(event);
153         }
154     }
155 
156     private void fireFileFinished(AuditEvent event) {
157         for (CheckstyleCheckerListener listener : listenerMap.values()) {
158             listener.fileFinished(event);
159         }
160     }
161 
162     private void fireAddError(AuditEvent event) {
163         for (CheckstyleCheckerListener listener : listenerMap.values()) {
164             listener.addError(event);
165         }
166     }
167 }