View Javadoc
1   package org.apache.maven.plugins.enforcer;
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 junit.framework.TestCase;
23  
24  import org.apache.maven.artifact.versioning.ArtifactVersion;
25  import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
26  import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
27  import org.apache.maven.artifact.versioning.VersionRange;
28  import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
29  import org.apache.maven.plugin.logging.Log;
30  import org.apache.maven.plugin.logging.SystemStreamLog;
31  
32  // TODO: Auto-generated Javadoc
33  /**
34   * The Class TestAbstractVersionEnforcer.
35   *
36   * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
37   */
38  public class TestAbstractVersionEnforcer
39      extends TestCase
40  {
41  
42      /**
43       * Test contains version.
44       *
45       * @throws InvalidVersionSpecificationException the invalid version specification exception
46       */
47      public void testContainsVersion()
48          throws InvalidVersionSpecificationException
49      {
50          ArtifactVersion version = new DefaultArtifactVersion( "2.0.5" );
51          // test ranges
52          assertTrue( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "[2.0.5,)" ), version ) );
53          assertTrue( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "[2.0.4,)" ), version ) );
54          assertTrue( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "[2.0.4,2.0.5]" ),
55                                                               version ) );
56          assertTrue( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "[2.0.4,2.0.6]" ),
57                                                               version ) );
58          assertTrue( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "[2.0.4,2.0.6)" ),
59                                                               version ) );
60          assertTrue( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "[2.0,)" ), version ) );
61          assertTrue( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "[2.0.0,)" ), version ) );
62          // not matching versions
63          assertFalse( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "[2.0.4,2.0.5)" ),
64                                                                version ) );
65          assertFalse( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "[2.0.6,)" ), version ) );
66          assertFalse( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "(2.0.5,)" ), version ) );
67  
68          // test singular versions -> 2.0.5 == [2.0.5,) or x >= 2.0.5
69          assertTrue( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "2.0" ), version ) );
70          assertTrue( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "2.0.4" ), version ) );
71          assertTrue( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "2.0.5" ), version ) );
72  
73          assertFalse( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "2.0.6" ), version ) );
74  
75          version = new DefaultArtifactVersion( "1.5.0-7" );
76          assertTrue( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "[1.5.0,)" ), version ) );
77          assertTrue( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "[1.5,1.6)" ), version ) );
78  
79          version = new DefaultArtifactVersion( RequireJavaVersion.normalizeJDKVersion( "1.5.0-07" ) );
80          assertTrue( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "[1.5.0,)" ), version ) );
81          assertTrue( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "[1.5,1.6)" ), version ) );
82  
83          //MENFORCER-50
84          version = new DefaultArtifactVersion ("2.1.0-M1-RC12");
85          assertTrue( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "[2.1.0-M1-RC12,)" ), version ) );
86          assertFalse( AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( "[2.1.0-M1,)" ), version ) );
87  
88      }
89  
90      /**
91       * Enforce false.
92       *
93       * @param rule the rule
94       * @param log the log
95       * @param var the var
96       * @param range the range
97       * @param version the version
98       */
99      private void enforceFalse( AbstractVersionEnforcer rule, Log log, String var, String range, ArtifactVersion version )
100     {
101         try
102         {
103             rule.enforceVersion( log, var, range, version );
104             fail( "Expected to receive EnforcerRuleException because:" + version + " is not contained by " + range );
105         }
106         catch ( Exception e )
107         {
108             if ( e instanceof EnforcerRuleException )
109             {
110                 // log.info( "Caught Expected Exception: " +
111                 // e.getLocalizedMessage() );
112             }
113             else
114             {
115                 fail( "Received wrong exception. Expected EnforcerRuleExeption. Received:" + e.toString() );
116             }
117         }
118     }
119 
120     /**
121      * Test enforce version.
122      */
123     public void testEnforceVersion()
124     {
125         RequireMavenVersion rule = new RequireMavenVersion();
126         ArtifactVersion version = new DefaultArtifactVersion( "2.0.5" );
127         SystemStreamLog log = new SystemStreamLog();
128         // test ranges
129 
130         // not matching versions
131         try
132         {
133             rule.enforceVersion( log, "test", "[2.0.5,)", version );
134             rule.enforceVersion( log, "test", "[2.0.4,)", version );
135             rule.enforceVersion( log, "test", "[2.0.4,2.0.5]", version );
136             rule.enforceVersion( log, "test", "[2.0.4,2.0.6]", version );
137             rule.enforceVersion( log, "test", "[2.0.4,2.0.6)", version );
138             rule.enforceVersion( log, "test", "[2.0,)", version );
139             rule.enforceVersion( log, "test", "[2.0.0,)", version );
140 
141             // test singular versions -> 2.0.5 == [2.0.5,) or x >= 2.0.5
142             rule.enforceVersion( log, "test", "2.0", version );
143             rule.enforceVersion( log, "test", "2.0.4", version );
144             rule.enforceVersion( log, "test", "2.0.5", version );
145         }
146         catch ( Exception e )
147         {
148             fail( "No Exception expected. Caught:" + e.getLocalizedMessage() );
149 
150         }
151 
152         enforceFalse( rule, log, "test", "[2.0.6,)", version );
153         enforceFalse( rule, log, "test", "(2.0.5,)", version );
154         enforceFalse( rule, log, "test", "2.0.6", version );
155 
156         enforceFalse( rule, log, "test", "[2.0.4,2.0.5)", version );
157 
158         // make sure to handle the invalid range specification
159         enforceFalse( rule, log, "test", "[[2.0.4,2.0.5)", version );
160 
161     }
162 }