Author: bentmann
Date: Mon Oct  5 12:30:09 2009
New Revision: 821772

URL: http://svn.apache.org/viewvc?rev=821772&view=rev
Log:
[MNG-4383] Uninterpolated expressions should cause an error

Added:
    
maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/validation/bad-dependency-version.xml
   (with props)
Modified:
    
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
    
maven/maven-3/trunk/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java

Modified: 
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java?rev=821772&r1=821771&r2=821772&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
 (original)
+++ 
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
 Mon Oct  5 12:30:09 2009
@@ -139,8 +139,7 @@
 
         validateStringNotEmpty( "version", problems, false, model.getVersion() 
);
 
-        boolean warnOnBadBoolean = request.getValidationLevel() < 
ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0;
-        boolean warnOnBadDependencyScope = request.getValidationLevel() < 
ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0;
+        boolean warnOnly = request.getValidationLevel() < 
ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0;
 
         for ( Dependency d : model.getDependencies() )
         {
@@ -178,12 +177,15 @@
 
             if ( request.getValidationLevel() >= 
ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 )
             {
-                validateBoolean( "dependencies.dependency.optional", problems, 
warnOnBadBoolean, d.getOptional(),
+                validateVersion( "dependencies.dependency.version", problems, 
warnOnly, d.getVersion(),
+                                 d.getManagementKey() );
+
+                validateBoolean( "dependencies.dependency.optional", problems, 
warnOnly, d.getOptional(),
                                  d.getManagementKey() );
 
                 /*
                  * TODO: Extensions like Flex Mojos use custom scopes like 
"merged", "internal", "external", etc. In
-                 * order to don't break backward-compat with those, only warn 
but don't error our.
+                 * order to don't break backward-compat with those, only warn 
but don't error out.
                  */
                 validateEnum( "dependencies.dependency.scope", problems, true, 
d.getScope(),
                               d.getManagementKey(), "provided", "compile", 
"runtime", "test", "system" );
@@ -227,8 +229,8 @@
 
                 if ( request.getValidationLevel() >= 
ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 )
                 {
-                    validateBoolean( 
"dependencyManagement.dependencies.dependency.optional", problems,
-                                     warnOnBadBoolean, d.getOptional(), 
d.getManagementKey() );
+                    validateBoolean( 
"dependencyManagement.dependencies.dependency.optional", problems, warnOnly,
+                                     d.getOptional(), d.getManagementKey() );
                 }
             }
         }
@@ -250,16 +252,16 @@
                     validateStringNotEmpty( "build.plugins.plugin.version", 
problems, warnOnMissingPluginVersion,
                                             p.getVersion(), p.getKey() );
 
-                    validateBoolean( "build.plugins.plugin.inherited", 
problems, warnOnBadBoolean, p.getInherited(),
+                    validateBoolean( "build.plugins.plugin.inherited", 
problems, warnOnly, p.getInherited(),
                                      p.getKey() );
 
-                    validateBoolean( "build.plugins.plugin.extensions", 
problems, warnOnBadBoolean, p.getExtensions(),
+                    validateBoolean( "build.plugins.plugin.extensions", 
problems, warnOnly, p.getExtensions(),
                                      p.getKey() );
 
                     for ( Dependency d : p.getDependencies() )
                     {
                         validateEnum( "build.plugins.plugin[" + p.getKey() + 
"].dependencies.dependency.scope",
-                                      problems, warnOnBadDependencyScope, 
d.getScope(), d.getManagementKey(),
+                                      problems, warnOnly, d.getScope(), 
d.getManagementKey(),
                                       "compile", "runtime", "system" );
                     }
                 }
@@ -578,11 +580,12 @@
 
         if ( sourceHint != null )
         {
-            addViolation( problems, warning, "'" + fieldName + "' must be 
'true' or 'false' for " + sourceHint );
+            addViolation( problems, warning, "'" + fieldName + "' must be 
'true' or 'false' for " + sourceHint
+                + " but is '" + string + "'." );
         }
         else
         {
-            addViolation( problems, warning, "'" + fieldName + "' must be 
'true' or 'false'." );
+            addViolation( problems, warning, "'" + fieldName + "' must be 
'true' or 'false' but is '" + string + "'." );
         }
 
         return false;
@@ -605,11 +608,39 @@
 
         if ( sourceHint != null )
         {
-            addViolation( problems, warning, "'" + fieldName + "' must be one 
of " + values + " for " + sourceHint );
+            addViolation( problems, warning, "'" + fieldName + "' must be one 
of " + values + " for " + sourceHint
+                + " but is '" + string + "'." );
+        }
+        else
+        {
+            addViolation( problems, warning, "'" + fieldName + "' must be one 
of " + values + " but is '" + string
+                + "'." );
+        }
+
+        return false;
+    }
+
+    private boolean validateVersion( String fieldName, ModelProblemCollector 
problems, boolean warning, String string,
+                                     String sourceHint )
+    {
+        if ( string == null || string.length() <= 0 )
+        {
+            return true;
+        }
+
+        if ( !hasExpression( string ) )
+        {
+            return true;
+        }
+
+        if ( sourceHint != null )
+        {
+            addViolation( problems, warning, "'" + fieldName + "' must be a 
valid version for " + sourceHint
+                + " but is '" + string + "'." );
         }
         else
         {
-            addViolation( problems, warning, "'" + fieldName + "' must be one 
of " + values );
+            addViolation( problems, warning, "'" + fieldName + "' must be a 
valid version but is '" + string + "'." );
         }
 
         return false;

Modified: 
maven/maven-3/trunk/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java?rev=821772&r1=821771&r2=821772&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java
 (original)
+++ 
maven/maven-3/trunk/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java
 Mon Oct  5 12:30:09 2009
@@ -334,4 +334,14 @@
         assertTrue( result.getWarnings().get( 1 ).contains( "test:g" ) );
     }
 
+    public void testBadDependencyVersion()
+        throws Exception
+    {
+        SimpleProblemCollector result = validate( "bad-dependency-version.xml" 
);
+
+        assertViolations( result, 1, 0 );
+
+        assertTrue( result.getErrors().get( 0 ).contains( "test:b" ) );
+    }
+
 }

Added: 
maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/validation/bad-dependency-version.xml
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/validation/bad-dependency-version.xml?rev=821772&view=auto
==============================================================================
--- 
maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/validation/bad-dependency-version.xml
 (added)
+++ 
maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/validation/bad-dependency-version.xml
 Mon Oct  5 12:30:09 2009
@@ -0,0 +1,38 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>aid</artifactId>
+  <groupId>gid</groupId>
+  <version>0.1</version>
+
+  <dependencies>
+    <dependency>
+      <groupId>test</groupId>
+      <artifactId>a</artifactId>
+      <version>0.2</version>
+    </dependency>
+    <dependency>
+      <groupId>test</groupId>
+      <artifactId>b</artifactId>
+      <version>${missing.property}</version>
+    </dependency>
+  </dependencies>
+</project>

Propchange: 
maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/validation/bad-dependency-version.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/validation/bad-dependency-version.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision


Reply via email to