001package org.apache.maven.repository.legacy.resolver.conflict;
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 org.apache.maven.artifact.Artifact;
023import org.apache.maven.artifact.factory.ArtifactFactory;
024import org.apache.maven.artifact.resolver.ResolutionNode;
025import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
026import org.apache.maven.artifact.versioning.VersionRange;
027import org.apache.maven.repository.legacy.resolver.conflict.ConflictResolver;
028import org.codehaus.plexus.PlexusTestCase;
029
030/**
031 * Provides a basis for testing conflict resolvers.
032 *
033 * @author <a href="mailto:markhobson@gmail.com">Mark Hobson</a>
034 */
035public abstract class AbstractConflictResolverTest
036    extends PlexusTestCase
037{
038    // constants --------------------------------------------------------------
039
040    private static final String GROUP_ID = "test";
041
042    // fields -----------------------------------------------------------------
043
044    protected Artifact a1;
045
046    protected Artifact a2;
047
048    protected Artifact b1;
049
050    private final String roleHint;
051
052    private ArtifactFactory artifactFactory;
053
054    private ConflictResolver conflictResolver;
055
056    // constructors -----------------------------------------------------------
057
058    public AbstractConflictResolverTest( String roleHint )
059        throws Exception
060    {
061        this.roleHint = roleHint;
062    }
063
064    // TestCase methods -------------------------------------------------------
065
066    /*
067     * @see junit.framework.TestCase#setUp()
068     */
069    protected void setUp() throws Exception
070    {
071        super.setUp();
072
073        artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
074        conflictResolver = (ConflictResolver) lookup( ConflictResolver.ROLE, roleHint );
075
076        a1 = createArtifact( "a", "1.0" );
077        a2 = createArtifact( "a", "2.0" );
078        b1 = createArtifact( "b", "1.0" );
079    }
080
081    /*
082     * @see org.codehaus.plexus.PlexusTestCase#tearDown()
083     */
084    protected void tearDown() throws Exception
085    {
086        a1 = null;
087        a2 = null;
088        b1 = null;
089
090        artifactFactory = null;
091        conflictResolver = null;
092
093        super.tearDown();
094    }
095
096    // protected methods ------------------------------------------------------
097
098    protected ConflictResolver getConflictResolver()
099    {
100        return conflictResolver;
101    }
102
103    protected void assertResolveConflict( ResolutionNode expectedNode, ResolutionNode actualNode1, ResolutionNode actualNode2 )
104    {
105        ResolutionNode resolvedNode = getConflictResolver().resolveConflict( actualNode1, actualNode2 );
106
107        assertNotNull( "Expected resolvable", resolvedNode );
108        assertEquals( "Resolution node", expectedNode, resolvedNode );
109    }
110
111    protected void assertUnresolvableConflict( ResolutionNode actualNode1, ResolutionNode actualNode2 )
112    {
113        ResolutionNode resolvedNode = getConflictResolver().resolveConflict( actualNode1, actualNode2 );
114
115        assertNull( "Expected unresolvable", resolvedNode );
116    }
117
118    protected Artifact createArtifact( String id, String version ) throws InvalidVersionSpecificationException
119    {
120        return createArtifact( id, version, Artifact.SCOPE_COMPILE );
121    }
122
123    protected Artifact createArtifact( String id, String version, boolean optional )
124        throws InvalidVersionSpecificationException
125    {
126        return createArtifact( id, version, Artifact.SCOPE_COMPILE, null, optional );
127    }
128
129    protected Artifact createArtifact( String id, String version, String scope )
130        throws InvalidVersionSpecificationException
131    {
132        return createArtifact( id, version, scope, null, false );
133    }
134
135    protected Artifact createArtifact( String id, String version, String scope, String inheritedScope, boolean optional )
136        throws InvalidVersionSpecificationException
137    {
138        VersionRange versionRange = VersionRange.createFromVersionSpec( version );
139
140        return artifactFactory.createDependencyArtifact( GROUP_ID, id, versionRange, "jar", null, scope,
141                                                         inheritedScope, optional );
142    }
143}