1   package org.apache.maven.project.validation;
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 org.apache.maven.model.Model;
23  import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
24  import org.apache.maven.project.AbstractMavenProjectTestCase;
25  import org.codehaus.plexus.util.ReaderFactory;
26  
27  import java.io.Reader;
28  import java.util.List;
29  
30  /**
31   * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
32   * @version $Id: DefaultModelValidatorTest.java 585268 2007-10-16 21:43:07Z hboutemy $
33   */
34  public class DefaultModelValidatorTest
35      extends AbstractMavenProjectTestCase
36  {
37      private Model model;
38  
39      private ModelValidator validator;
40  
41      public void testMissingModelVersion()
42          throws Exception
43      {
44          ModelValidationResult result = validate( "missing-modelVersion-pom.xml" );
45  
46          assertEquals( 1, result.getMessageCount() );
47  
48          assertEquals( "'modelVersion' is missing.", result.getMessage( 0 ) );
49      }
50  
51      public void testMissingArtifactId()
52          throws Exception
53      {
54          ModelValidationResult result = validate( "missing-artifactId-pom.xml" );
55  
56          assertEquals( 1, result.getMessageCount() );
57  
58          assertEquals( "'artifactId' is missing.", result.getMessage( 0 ) );
59      }
60  
61      public void testMissingGroupId()
62          throws Exception
63      {
64          ModelValidationResult result = validate( "missing-groupId-pom.xml" );
65  
66          assertEquals( 1, result.getMessageCount() );
67  
68          assertEquals( "'groupId' is missing.", result.getMessage( 0 ) );
69      }
70  
71      public void testInvalidIds()
72          throws Exception
73      {
74          ModelValidationResult result = validate( "invalid-ids-pom.xml" );
75  
76          assertEquals( 2, result.getMessageCount() );
77  
78          assertEquals( "'groupId' with value 'o/a/m' does not match a valid id pattern.", result.getMessage( 0 ) );
79  
80          assertEquals( "'artifactId' with value 'm$-do$' does not match a valid id pattern.", result.getMessage( 1 ) );
81      }
82  
83      public void testMissingType()
84          throws Exception
85      {
86          ModelValidationResult result = validate( "missing-type-pom.xml" );
87  
88          assertEquals( 1, result.getMessageCount() );
89  
90          assertEquals( "'packaging' is missing.", result.getMessage( 0 ) );
91      }
92  
93      public void testMissingVersion()
94          throws Exception
95      {
96          ModelValidationResult result = validate( "missing-version-pom.xml" );
97  
98          assertEquals( 1, result.getMessageCount() );
99  
100         assertEquals( "'version' is missing.", result.getMessage( 0 ) );
101     }
102     
103     public void testInvalidAggregatorPackaging()
104         throws Exception
105     {
106         ModelValidationResult result = validate( "invalid-aggregator-packaging-pom.xml" );
107         
108         assertEquals( 1, result.getMessageCount() );
109         
110         assertTrue( result.getMessage( 0 ).indexOf( "Aggregator projects require 'pom' as packaging." ) > -1 );
111     }
112 
113     public void testMissingDependencyArtifactId()
114         throws Exception
115     {
116         ModelValidationResult result = validate( "missing-dependency-artifactId-pom.xml" );
117 
118         assertEquals( 1, result.getMessageCount() );
119 
120         assertTrue( result.getMessage( 0 ).indexOf( "'dependencies.dependency.artifactId' is missing." ) > -1 );
121     }
122 
123     public void testMissingDependencyGroupId()
124         throws Exception
125     {
126         ModelValidationResult result = validate( "missing-dependency-groupId-pom.xml" );
127 
128         assertEquals( 1, result.getMessageCount() );
129 
130         assertTrue( result.getMessage( 0 ).indexOf( "'dependencies.dependency.groupId' is missing." ) > -1 );
131     }
132 
133     public void testMissingDependencyVersion()
134         throws Exception
135     {
136         ModelValidationResult result = validate( "missing-dependency-version-pom.xml" );
137 
138         assertEquals( 1, result.getMessageCount() );
139 
140         assertTrue( result.getMessage( 0 ).indexOf( "'dependencies.dependency.version' is missing" ) > -1 );
141     }
142 
143     public void testMissingDependencyManagementArtifactId()
144         throws Exception
145     {
146         ModelValidationResult result = validate( "missing-dependency-mgmt-artifactId-pom.xml" );
147 
148         assertEquals( 1, result.getMessageCount() );
149 
150         assertTrue( result.getMessage( 0 ).indexOf(
151             "'dependencyManagement.dependencies.dependency.artifactId' is missing." ) > -1 );
152     }
153 
154     public void testMissingDependencyManagementGroupId()
155         throws Exception
156     {
157         ModelValidationResult result = validate( "missing-dependency-mgmt-groupId-pom.xml" );
158 
159         assertEquals( 1, result.getMessageCount() );
160 
161         assertTrue( result.getMessage( 0 ).indexOf(
162             "'dependencyManagement.dependencies.dependency.groupId' is missing." ) > -1 );
163     }
164 
165     public void testMissingAll()
166         throws Exception
167     {
168         ModelValidationResult result = validate( "missing-1-pom.xml" );
169 
170         assertEquals( 4, result.getMessageCount() );
171 
172         List messages = result.getMessages();
173 
174         assertTrue( messages.contains( "\'modelVersion\' is missing." ) );
175         assertTrue( messages.contains( "\'groupId\' is missing." ) );
176         assertTrue( messages.contains( "\'artifactId\' is missing." ) );
177         assertTrue( messages.contains( "\'version\' is missing." ) );
178         // type is inherited from the super pom
179     }
180 
181     public void testMissingPluginArtifactId()
182         throws Exception
183     {
184         ModelValidationResult result = validate( "missing-plugin-artifactId-pom.xml" );
185 
186         assertEquals( 1, result.getMessageCount() );
187 
188         assertEquals( "'build.plugins.plugin.artifactId' is missing.", result.getMessage( 0 ) );
189     }
190 
191     public void testMissingRepositoryId()
192         throws Exception
193     {
194         ModelValidationResult result = validate( "missing-repository-id-pom.xml" );
195 
196         assertEquals( 4, result.getMessageCount() );
197 
198         assertEquals( "'repositories.repository.id' is missing.", result.getMessage( 0 ) );
199 
200         assertEquals( "'repositories.repository.url' is missing.", result.getMessage( 1 ) );
201 
202         assertEquals( "'pluginRepositories.pluginRepository.id' is missing.", result.getMessage( 2 ) );
203 
204         assertEquals( "'pluginRepositories.pluginRepository.url' is missing.", result.getMessage( 3 ) );
205     }
206 
207     public void testMissingResourceDirectory()
208         throws Exception
209     {
210         ModelValidationResult result = validate( "missing-resource-directory-pom.xml" );
211 
212         assertEquals( 2, result.getMessageCount() );
213 
214         assertEquals( "'build.resources.resource.directory' is missing.", result.getMessage( 0 ) );
215 
216         assertEquals( "'build.testResources.testResource.directory' is missing.", result.getMessage( 1 ) );
217     }
218 
219     private ModelValidationResult validate( String testName )
220         throws Exception
221     {
222         Reader input = ReaderFactory.newXmlReader( getFileForClasspathResource( "validation/" + testName ) );
223 
224         MavenXpp3Reader reader = new MavenXpp3Reader();
225 
226         validator = (ModelValidator) lookup( ModelValidator.ROLE );
227 
228         model = reader.read( input );
229 
230         ModelValidationResult result = validator.validate( model );
231 
232         assertNotNull( result );
233 
234         input.close();
235 
236         return result;
237     }
238 }