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   * @version $Id$
35   */
36  public class CheckstyleReportListenerTest
37      extends TestCase
38  {
39      private Map listenerMap;
40  
41      /** {@inheritDoc} */
42      protected void setUp()
43          throws Exception
44      {
45          listenerMap = new HashMap();
46  
47          CheckstyleReportListener listener = new CheckstyleReportListener( new File( "/source/path" ) );
48          listener.setSeverityLevelFilter( SeverityLevel.INFO );
49          listenerMap.put( listener.getSeverityLevelFilter(), listener );
50  
51          listener = new CheckstyleReportListener( new File( "/source/path" ) );
52          listener.setSeverityLevelFilter( SeverityLevel.WARNING );
53          listenerMap.put( listener.getSeverityLevelFilter(), listener );
54  
55          listener = new CheckstyleReportListener( new File( "/source/path" ) );
56          listener.setSeverityLevelFilter( SeverityLevel.ERROR );
57          listenerMap.put( listener.getSeverityLevelFilter(), listener );
58  
59          listener = new CheckstyleReportListener( new File( "/source/path" ) );
60          listener.setSeverityLevelFilter( SeverityLevel.IGNORE );
61          listenerMap.put( listener.getSeverityLevelFilter(), listener );
62      }
63  
64      public void testListeners()
65      {
66          fireAuditStarted( null );
67  
68          AuditEvent event = new AuditEvent( this, "/source/path/file1", null );
69          fireFileStarted( event );
70          LocalizedMessage message = new LocalizedMessage( 0, 0, "", "", null, SeverityLevel.INFO, null, getClass(), null );
71          fireAddError( new AuditEvent( this, "/source/path/file1", message ) );
72          fireFileFinished( event );
73  
74          event = new AuditEvent( this, "/source/path/file2", null );
75          fireFileStarted( event );
76          message = new LocalizedMessage( 0, 0, "", "", null, SeverityLevel.WARNING, null, getClass(), null );
77          fireAddError( new AuditEvent( this, "/source/path/file2", message ) );
78          fireAddError( new AuditEvent( this, "/source/path/file2", message ) );
79          fireFileFinished( event );
80  
81          event = new AuditEvent( this, "/source/path/file3", null );
82          fireFileStarted( event );
83          message = new LocalizedMessage( 0, 0, "", "", null, SeverityLevel.ERROR, null, getClass(), null );
84          fireAddError( new AuditEvent( this, "/source/path/file3", message ) );
85          fireAddError( new AuditEvent( this, "/source/path/file3", message ) );
86          fireAddError( new AuditEvent( this, "/source/path/file3", message ) );
87          fireFileFinished( event );
88  
89          event = new AuditEvent( this, "/source/path/file4", null );
90          fireFileStarted( event );
91          message = new LocalizedMessage( 0, 0, "", "", null, SeverityLevel.IGNORE, null, getClass(), null );
92          fireAddError( new AuditEvent( this, "/source/path/file4", message ) );
93          fireAddError( new AuditEvent( this, "/source/path/file4", message ) );
94          fireAddError( new AuditEvent( this, "/source/path/file4", message ) );
95          fireAddError( new AuditEvent( this, "/source/path/file4", message ) );
96          fireFileFinished( event );
97  
98          fireAuditFinished( null );
99  
100         CheckstyleReportListener listener = (CheckstyleReportListener) listenerMap.get( SeverityLevel.INFO );
101         CheckstyleResults results = listener.getResults();
102         assertEquals( "Test total files", 4, results.getFiles().size() );
103         assertEquals( "Test file count", 4, results.getFileCount() );
104         assertEquals( "test file violations", 1, results.getFileViolations( "file1" ).size() );
105         assertEquals( "test file severities", 1, results.getSeverityCount( "file1", SeverityLevel.INFO ) );
106         assertEquals( "test file severities", 0, results.getSeverityCount( "file1", SeverityLevel.WARNING ) );
107         assertEquals( "test file severities", 0, results.getSeverityCount( "file1", SeverityLevel.ERROR ) );
108         assertEquals( "test file severities", 0, results.getSeverityCount( "file1", SeverityLevel.IGNORE ) );
109 
110         listener = (CheckstyleReportListener) listenerMap.get( SeverityLevel.WARNING );
111         results = listener.getResults();
112         assertEquals( "Test total files", 4, results.getFiles().size() );
113         assertEquals( "Test file count", 4, results.getFileCount() );
114         assertEquals( "test file violations", 2, results.getFileViolations( "file2" ).size() );
115         assertEquals( "test file severities", 0, results.getSeverityCount( "file2", SeverityLevel.INFO ) );
116         assertEquals( "test file severities", 2, results.getSeverityCount( "file2", SeverityLevel.WARNING ) );
117         assertEquals( "test file severities", 0, results.getSeverityCount( "file2", SeverityLevel.ERROR ) );
118         assertEquals( "test file severities", 0, results.getSeverityCount( "file2", SeverityLevel.IGNORE ) );
119 
120         listener = (CheckstyleReportListener) listenerMap.get( SeverityLevel.ERROR );
121         results = listener.getResults();
122         assertEquals( "Test total files", 4, results.getFiles().size() );
123         assertEquals( "Test file count", 4, results.getFileCount() );
124         assertEquals( "test file violations", 3, results.getFileViolations( "file3" ).size() );
125         assertEquals( "test file severities", 0, results.getSeverityCount( "file3", SeverityLevel.INFO ) );
126         assertEquals( "test file severities", 0, results.getSeverityCount( "file3", SeverityLevel.WARNING ) );
127         assertEquals( "test file severities", 3, results.getSeverityCount( "file3", SeverityLevel.ERROR ) );
128         assertEquals( "test file severities", 0, results.getSeverityCount( "file3", SeverityLevel.IGNORE ) );
129 
130         listener = (CheckstyleReportListener) listenerMap.get( SeverityLevel.IGNORE );
131         results = listener.getResults();
132         assertEquals( "Test total files", 4, results.getFiles().size() );
133         assertEquals( "Test file count", 4, results.getFileCount() );
134         assertEquals( "test file violations", 0, results.getFileViolations( "file4" ).size() );
135         assertEquals( "test file severities", 0, results.getSeverityCount( "file4", SeverityLevel.INFO ) );
136         assertEquals( "test file severities", 0, results.getSeverityCount( "file4", SeverityLevel.WARNING ) );
137         assertEquals( "test file severities", 0, results.getSeverityCount( "file4", SeverityLevel.ERROR ) );
138         assertEquals( "test file severities", 0, results.getSeverityCount( "file4", SeverityLevel.IGNORE ) );
139     }
140 
141     private void fireAuditStarted( AuditEvent event )
142     {
143         for ( Iterator listeners = listenerMap.values().iterator(); listeners.hasNext(); )
144         {
145             CheckstyleReportListener listener = (CheckstyleReportListener) listeners.next();
146 
147             listener.auditStarted( event );
148         }
149     }
150 
151     private void fireAuditFinished( AuditEvent event )
152     {
153         for ( Iterator listeners = listenerMap.values().iterator(); listeners.hasNext(); )
154         {
155             CheckstyleReportListener listener = (CheckstyleReportListener) listeners.next();
156 
157             listener.auditFinished( event );
158         }
159     }
160 
161     private void fireFileStarted( AuditEvent event )
162     {
163         for ( Iterator listeners = listenerMap.values().iterator(); listeners.hasNext(); )
164         {
165             CheckstyleReportListener listener = (CheckstyleReportListener) listeners.next();
166 
167             listener.fileStarted( event );
168         }
169     }
170 
171     private void fireFileFinished( AuditEvent event )
172     {
173         for ( Iterator listeners = listenerMap.values().iterator(); listeners.hasNext(); )
174         {
175             CheckstyleReportListener listener = (CheckstyleReportListener) listeners.next();
176 
177             listener.fileFinished( event );
178         }
179     }
180 
181     private void fireAddError( AuditEvent event )
182     {
183         for ( Iterator listeners = listenerMap.values().iterator(); listeners.hasNext(); )
184         {
185             CheckstyleReportListener listener = (CheckstyleReportListener) listeners.next();
186 
187             listener.addError( event );
188         }
189     }
190 }