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