001package org.apache.maven.plugins.enforcer; 002 003/* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022import static org.mockito.Mockito.mock; 023import static org.mockito.Mockito.verify; 024import static org.mockito.Mockito.when; 025 026import java.util.Collections; 027 028import org.apache.maven.enforcer.rule.api.EnforcerRuleException; 029 030import static org.junit.jupiter.api.Assertions.assertThrows; 031import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper; 032import org.apache.maven.model.Prerequisites; 033import org.apache.maven.plugin.logging.Log; 034import org.apache.maven.project.MavenProject; 035import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; 036import org.junit.jupiter.api.BeforeEach; 037import org.junit.jupiter.api.Test; 038 039public class RequirePrerequisiteTest 040{ 041 private MavenProject project; 042 043 private EnforcerRuleHelper helper; 044 045 @BeforeEach 046 public void before() 047 throws ExpressionEvaluationException 048 { 049 project = mock( MavenProject.class ); 050 when( project.getPackaging() ).thenReturn( "maven-plugin" ); 051 052 helper = mock( EnforcerRuleHelper.class ); 053 when( helper.evaluate( "${project}" ) ).thenReturn( project ); 054 } 055 056 @Test 057 public void testNoPrerequisite() 058 { 059 assertThrows( EnforcerRuleException.class, () -> { 060 RequirePrerequisite rule = new RequirePrerequisite(); 061 rule.execute( helper ); 062 } ); 063 } 064 065 @Test 066 public void testNoSpecifiedPrerequisite() 067 throws Exception 068 { 069 when( project.getPrerequisites() ).thenReturn( new Prerequisites() ); 070 071 RequirePrerequisite rule = new RequirePrerequisite(); 072 rule.execute( helper ); 073 } 074 075 @Test 076 public void testLowerMavenPrerequisite() 077 { 078 assertThrows( EnforcerRuleException.class, () -> { 079 when( project.getPrerequisites() ).thenReturn( new Prerequisites() ); 080 081 RequirePrerequisite rule = new RequirePrerequisite(); 082 rule.setMavenVersion( "3.0" ); 083 rule.execute( helper ); 084 } ); 085 } 086 087 @Test 088 public void testLowerMavenRangePrerequisite() 089 { 090 assertThrows( EnforcerRuleException.class, () -> { 091 when( project.getPrerequisites() ).thenReturn( new Prerequisites() ); 092 093 RequirePrerequisite rule = new RequirePrerequisite(); 094 rule.setMavenVersion( "[3.0,)" ); 095 096 rule.execute( helper ); 097 } ); 098 } 099 100 @Test 101 public void testMavenRangesPrerequisite() 102 { 103 assertThrows( EnforcerRuleException.class, () -> { 104 Prerequisites prerequisites = new Prerequisites(); 105 prerequisites.setMaven( "2.2.0" ); 106 when( project.getPrerequisites() ).thenReturn( prerequisites ); 107 108 RequirePrerequisite rule = new RequirePrerequisite(); 109 rule.setMavenVersion( "[2.0.6,2.1.0),(2.1.0,2.2.0),(2.2.0,)" ); 110 111 rule.execute( helper ); 112 } ); 113 } 114 115 @Test 116 public void testValidPrerequisite() 117 throws Exception 118 { 119 Prerequisites prerequisites = new Prerequisites(); 120 prerequisites.setMaven( "3.0" ); 121 when( project.getPrerequisites() ).thenReturn( prerequisites ); 122 123 RequirePrerequisite rule = new RequirePrerequisite(); 124 rule.setMavenVersion( "2.2.1" ); 125 126 rule.execute( helper ); 127 } 128 129 @Test 130 public void testPomPackaging() 131 throws Exception 132 { 133 when( project.getPackaging() ).thenReturn( "pom" ); 134 135 Log log = mock( Log.class ); 136 when( helper.getLog() ).thenReturn( log ); 137 138 RequirePrerequisite rule = new RequirePrerequisite(); 139 rule.execute( helper ); 140 141 verify( log ).debug( "Packaging is pom, skipping requirePrerequisite rule" ); 142 } 143 144 @Test 145 public void testMatchingPackagings() 146 { 147 assertThrows( EnforcerRuleException.class, () -> { 148 when( project.getPackaging() ).thenReturn( "maven-plugin" ); 149 150 RequirePrerequisite rule = new RequirePrerequisite(); 151 rule.setPackagings( Collections.singletonList( "maven-plugin" ) ); 152 rule.execute( helper ); 153 } ); 154 } 155 156 @Test 157 public void testNotMatchingPackagings() 158 throws Exception 159 { 160 when( project.getPackaging() ).thenReturn( "jar" ); 161 162 Log log = mock( Log.class ); 163 when( helper.getLog() ).thenReturn( log ); 164 165 RequirePrerequisite rule = new RequirePrerequisite(); 166 rule.setPackagings( Collections.singletonList( "maven-plugin" ) ); 167 rule.execute( helper ); 168 169 verify( log ).debug( "Packaging is jar, skipping requirePrerequisite rule" ); 170 } 171 172}