001package org.apache.maven.tools.plugin.scanner; 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 junit.framework.TestCase; 023import org.apache.maven.model.Build; 024import org.apache.maven.model.Model; 025import org.apache.maven.plugin.descriptor.InvalidPluginDescriptorException; 026import org.apache.maven.plugin.descriptor.MojoDescriptor; 027import org.apache.maven.plugin.descriptor.PluginDescriptor; 028import org.apache.maven.project.MavenProject; 029import org.apache.maven.tools.plugin.DefaultPluginToolsRequest; 030import org.apache.maven.tools.plugin.extractor.ExtractionException; 031import org.apache.maven.tools.plugin.extractor.MojoDescriptorExtractor; 032 033import java.io.File; 034import java.util.Arrays; 035import java.util.Collection; 036import java.util.Collections; 037import java.util.HashMap; 038import java.util.HashSet; 039import java.util.List; 040import java.util.Map; 041import java.util.Set; 042 043/** 044 * @author jdcasey 045 */ 046public class DefaultMojoScannerTest 047 extends TestCase 048{ 049 private Map<String, MojoDescriptorExtractor> extractors; 050 051 private Build build; 052 053 private Model model; 054 055 private MojoScanner scanner; 056 057 private MavenProject project; 058 059 protected void setUp() 060 throws Exception 061 { 062 extractors = new HashMap<String, MojoDescriptorExtractor>(); 063 extractors.put( "one", new ScannerTestExtractor( "one" ) ); 064 extractors.put( "two", new ScannerTestExtractor( "two" ) ); 065 extractors.put( "three", new ScannerTestExtractor( "three" ) ); 066 067 scanner = new DefaultMojoScanner( extractors ); 068 069 build = new Build(); 070 build.setSourceDirectory( "testdir" ); 071 072 model = new Model(); 073 model.setBuild( build ); 074 075 project = new MavenProject( model ); 076 project.setFile( new File( "." ) ); 077 } 078 079 public void testUnspecifiedExtractors() 080 throws Exception 081 { 082 PluginDescriptor pluginDescriptor = createPluginDescriptor(); 083 084 scanner.populatePluginDescriptor( new DefaultPluginToolsRequest( project, pluginDescriptor ) ); 085 086 checkResult( pluginDescriptor, extractors.keySet() ); 087 } 088 089 public void testSpecifiedExtractors() 090 throws Exception 091 { 092 Set<String> activeExtractors = new HashSet<String>(); 093 activeExtractors.add( "one" ); 094 activeExtractors.add( "" ); 095 activeExtractors.add( null ); 096 activeExtractors.add( "three" ); 097 098 PluginDescriptor pluginDescriptor = createPluginDescriptor(); 099 100 scanner.setActiveExtractors( activeExtractors ); 101 scanner.populatePluginDescriptor( new DefaultPluginToolsRequest( project, pluginDescriptor ) ); 102 103 checkResult( pluginDescriptor, Arrays.asList( new String[]{"one", "three"} ) ); 104 } 105 106 public void testAllExtractorsThroughNull() 107 throws Exception 108 { 109 PluginDescriptor pluginDescriptor = createPluginDescriptor(); 110 111 scanner.setActiveExtractors( null ); 112 scanner.populatePluginDescriptor( new DefaultPluginToolsRequest( project, pluginDescriptor ) ); 113 114 checkResult( pluginDescriptor, extractors.keySet() ); 115 } 116 117 public void testNoExtractorsThroughEmptySet() 118 throws Exception 119 { 120 PluginDescriptor pluginDescriptor = createPluginDescriptor(); 121 122 scanner.setActiveExtractors( Collections.<String>emptySet() ); 123 try 124 { 125 scanner.populatePluginDescriptor( new DefaultPluginToolsRequest( project, pluginDescriptor ) ); 126 fail( "Expected exception" ); 127 } 128 catch (InvalidPluginDescriptorException e) 129 { 130 // Ok 131 } 132 133 checkResult( pluginDescriptor, Collections.<String>emptySet() ); 134 } 135 136 public void testUnknownExtractor() 137 throws Exception 138 { 139 Set<String> activeExtractors = new HashSet<String>(); 140 activeExtractors.add( "four" ); 141 142 PluginDescriptor pluginDescriptor = createPluginDescriptor(); 143 144 scanner.setActiveExtractors( activeExtractors ); 145 146 try 147 { 148 scanner.populatePluginDescriptor( new DefaultPluginToolsRequest( project, pluginDescriptor ) ); 149 fail( "No error for unknown extractor" ); 150 } 151 catch ( ExtractionException e ) 152 { 153 // Ok 154 } 155 156 checkResult( pluginDescriptor, Collections.<String>emptySet() ); 157 } 158 159 private PluginDescriptor createPluginDescriptor() 160 { 161 PluginDescriptor pluginDescriptor = new PluginDescriptor(); 162 pluginDescriptor.setGroupId( "groupId" ); 163 pluginDescriptor.setArtifactId( "artifactId" ); 164 pluginDescriptor.setVersion( "version" ); 165 pluginDescriptor.setGoalPrefix( "testId" ); 166 return pluginDescriptor; 167 } 168 169 /** 170 * Checks if the {@link PluginDescriptor} contains exactly the {@link MojoDescriptor}s with the 171 * supplied goal names. 172 * 173 * @param pluginDescriptor The {@link PluginDescriptor} to check. 174 * @param expectedGoals The goal names of the {@link MojoDescriptor}s. 175 */ 176 protected void checkResult( PluginDescriptor pluginDescriptor, Collection<String> expectedGoals ) 177 { 178 Set<String> remainingGoals = new HashSet<String>( expectedGoals ); 179 @SuppressWarnings( "unchecked" ) 180 List<MojoDescriptor> descriptors = pluginDescriptor.getMojos(); 181 182 if ( descriptors == null ) 183 { 184 // TODO Maybe getMojos should be more user friendly and not return null 185 descriptors = Collections.emptyList(); 186 } 187 188 for ( MojoDescriptor desc : descriptors ) 189 { 190 assertEquals( pluginDescriptor, desc.getPluginDescriptor() ); 191 assertTrue( "Unexpected goal in PluginDescriptor: " + desc.getGoal(), 192 remainingGoals.remove( desc.getGoal() ) ); 193 } 194 195 assertTrue( "Expected goals missing from PluginDescriptor: " + remainingGoals, remainingGoals.size() == 0 ); 196 } 197 198}