You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2016/09/03 20:23:30 UTC

[07/51] [partial] maven-aether git commit: [MNG-6007] rename Aether to Maven Artifact Resolver

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/java/org/eclipse/aether/util/repository/JreProxySelectorTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/repository/JreProxySelectorTest.java b/aether-util/src/test/java/org/eclipse/aether/util/repository/JreProxySelectorTest.java
deleted file mode 100644
index 8eac55b..0000000
--- a/aether-util/src/test/java/org/eclipse/aether/util/repository/JreProxySelectorTest.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package org.eclipse.aether.util.repository;
-
-/*
- * 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.
- */
-
-import static org.junit.Assert.*;
-
-import java.io.IOException;
-import java.net.Authenticator;
-import java.net.InetSocketAddress;
-import java.net.PasswordAuthentication;
-import java.net.SocketAddress;
-import java.net.URI;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.aether.DefaultRepositorySystemSession;
-import org.eclipse.aether.repository.Authentication;
-import org.eclipse.aether.repository.AuthenticationContext;
-import org.eclipse.aether.repository.Proxy;
-import org.eclipse.aether.repository.ProxySelector;
-import org.eclipse.aether.repository.RemoteRepository;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-public class JreProxySelectorTest
-{
-
-    private abstract class AbstractProxySelector
-        extends java.net.ProxySelector
-    {
-        @Override
-        public void connectFailed( URI uri, SocketAddress sa, IOException ioe )
-        {
-        }
-    }
-
-    private ProxySelector selector = new JreProxySelector();
-
-    private java.net.ProxySelector original;
-
-    @Before
-    public void init()
-    {
-        original = java.net.ProxySelector.getDefault();
-    }
-
-    @After
-    public void exit()
-    {
-        java.net.ProxySelector.setDefault( original );
-        Authenticator.setDefault( null );
-    }
-
-    @Test
-    public void testGetProxy_InvalidUrl()
-        throws Exception
-    {
-        RemoteRepository repo = new RemoteRepository.Builder( "test", "default", "http://host:invalid" ).build();
-        assertNull( selector.getProxy( repo ) );
-    }
-
-    @Test
-    public void testGetProxy_OpaqueUrl()
-        throws Exception
-    {
-        RemoteRepository repo = new RemoteRepository.Builder( "test", "default", "classpath:base" ).build();
-        assertNull( selector.getProxy( repo ) );
-    }
-
-    @Test
-    public void testGetProxy_NullSelector()
-        throws Exception
-    {
-        RemoteRepository repo = new RemoteRepository.Builder( "test", "default", "http://repo.eclipse.org/" ).build();
-        java.net.ProxySelector.setDefault( null );
-        assertNull( selector.getProxy( repo ) );
-    }
-
-    @Test
-    public void testGetProxy_NoProxies()
-        throws Exception
-    {
-        RemoteRepository repo = new RemoteRepository.Builder( "test", "default", "http://repo.eclipse.org/" ).build();
-        java.net.ProxySelector.setDefault( new AbstractProxySelector()
-        {
-            @Override
-            public List<java.net.Proxy> select( URI uri )
-            {
-                return Collections.emptyList();
-            }
-
-        } );
-        assertNull( selector.getProxy( repo ) );
-    }
-
-    @Test
-    public void testGetProxy_DirectProxy()
-        throws Exception
-    {
-        RemoteRepository repo = new RemoteRepository.Builder( "test", "default", "http://repo.eclipse.org/" ).build();
-        final InetSocketAddress addr = InetSocketAddress.createUnresolved( "proxy", 8080 );
-        java.net.ProxySelector.setDefault( new AbstractProxySelector()
-        {
-            @Override
-            public List<java.net.Proxy> select( URI uri )
-            {
-                return Arrays.asList( java.net.Proxy.NO_PROXY, new java.net.Proxy( java.net.Proxy.Type.HTTP, addr ) );
-            }
-
-        } );
-        assertNull( selector.getProxy( repo ) );
-    }
-
-    @Test
-    public void testGetProxy_HttpProxy()
-        throws Exception
-    {
-        final RemoteRepository repo =
-            new RemoteRepository.Builder( "test", "default", "http://repo.eclipse.org/" ).build();
-        final URL url = new URL( repo.getUrl() );
-        final InetSocketAddress addr = InetSocketAddress.createUnresolved( "proxy", 8080 );
-        java.net.ProxySelector.setDefault( new AbstractProxySelector()
-        {
-            @Override
-            public List<java.net.Proxy> select( URI uri )
-            {
-                if ( repo.getHost().equalsIgnoreCase( uri.getHost() ) )
-                {
-                    return Arrays.asList( new java.net.Proxy( java.net.Proxy.Type.HTTP, addr ) );
-                }
-                return Collections.emptyList();
-            }
-
-        } );
-        Authenticator.setDefault( new Authenticator()
-        {
-            @Override
-            protected PasswordAuthentication getPasswordAuthentication()
-            {
-                if ( Authenticator.RequestorType.PROXY.equals( getRequestorType() )
-                    && addr.getHostName().equals( getRequestingHost() ) && addr.getPort() == getRequestingPort()
-                    && url.equals( getRequestingURL() ) )
-                {
-                    return new PasswordAuthentication( "proxyuser", "proxypass".toCharArray() );
-                }
-                return super.getPasswordAuthentication();
-            }
-        } );
-
-        Proxy proxy = selector.getProxy( repo );
-        assertNotNull( proxy );
-        assertEquals( addr.getHostName(), proxy.getHost() );
-        assertEquals( addr.getPort(), proxy.getPort() );
-        assertEquals( Proxy.TYPE_HTTP, proxy.getType() );
-
-        RemoteRepository repo2 = new RemoteRepository.Builder( repo ).setProxy( proxy ).build();
-        Authentication auth = proxy.getAuthentication();
-        assertNotNull( auth );
-        AuthenticationContext authCtx = AuthenticationContext.forProxy( new DefaultRepositorySystemSession(), repo2 );
-        assertEquals( "proxyuser", authCtx.get( AuthenticationContext.USERNAME ) );
-        assertEquals( "proxypass", authCtx.get( AuthenticationContext.PASSWORD ) );
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/java/org/eclipse/aether/util/repository/SecretAuthenticationTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/repository/SecretAuthenticationTest.java b/aether-util/src/test/java/org/eclipse/aether/util/repository/SecretAuthenticationTest.java
deleted file mode 100644
index df4afaf..0000000
--- a/aether-util/src/test/java/org/eclipse/aether/util/repository/SecretAuthenticationTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package org.eclipse.aether.util.repository;
-
-/*
- * 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.
- */
-
-import static org.junit.Assert.*;
-
-import org.eclipse.aether.DefaultRepositorySystemSession;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.repository.Authentication;
-import org.eclipse.aether.repository.AuthenticationContext;
-import org.eclipse.aether.repository.AuthenticationDigest;
-import org.eclipse.aether.repository.RemoteRepository;
-import org.junit.Test;
-
-public class SecretAuthenticationTest
-{
-
-    private RepositorySystemSession newSession()
-    {
-        return new DefaultRepositorySystemSession();
-    }
-
-    private RemoteRepository newRepo( Authentication auth )
-    {
-        return new RemoteRepository.Builder( "test", "default", "http://localhost" ).setAuthentication( auth ).build();
-    }
-
-    private AuthenticationContext newContext( Authentication auth )
-    {
-        return AuthenticationContext.forRepository( newSession(), newRepo( auth ) );
-    }
-
-    private String newDigest( Authentication auth )
-    {
-        return AuthenticationDigest.forRepository( newSession(), newRepo( auth ) );
-    }
-
-    @Test
-    public void testConstructor_CopyChars()
-    {
-        char[] value = { 'v', 'a', 'l' };
-        new SecretAuthentication( "key", value );
-        assertArrayEquals( new char[] { 'v', 'a', 'l' }, value );
-    }
-
-    @Test
-    public void testFill()
-    {
-        Authentication auth = new SecretAuthentication( "key", "value" );
-        AuthenticationContext context = newContext( auth );
-        assertEquals( null, context.get( "another-key" ) );
-        assertEquals( "value", context.get( "key" ) );
-    }
-
-    @Test
-    public void testDigest()
-    {
-        Authentication auth1 = new SecretAuthentication( "key", "value" );
-        Authentication auth2 = new SecretAuthentication( "key", "value" );
-        String digest1 = newDigest( auth1 );
-        String digest2 = newDigest( auth2 );
-        assertEquals( digest1, digest2 );
-
-        Authentication auth3 = new SecretAuthentication( "key", "Value" );
-        String digest3 = newDigest( auth3 );
-        assertFalse( digest3.equals( digest1 ) );
-
-        Authentication auth4 = new SecretAuthentication( "Key", "value" );
-        String digest4 = newDigest( auth4 );
-        assertFalse( digest4.equals( digest1 ) );
-    }
-
-    @Test
-    public void testEquals()
-    {
-        Authentication auth1 = new SecretAuthentication( "key", "value" );
-        Authentication auth2 = new SecretAuthentication( "key", "value" );
-        Authentication auth3 = new SecretAuthentication( "key", "Value" );
-        assertEquals( auth1, auth2 );
-        assertFalse( auth1.equals( auth3 ) );
-        assertFalse( auth1.equals( null ) );
-    }
-
-    @Test
-    public void testHashCode()
-    {
-        Authentication auth1 = new SecretAuthentication( "key", "value" );
-        Authentication auth2 = new SecretAuthentication( "key", "value" );
-        assertEquals( auth1.hashCode(), auth2.hashCode() );
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/java/org/eclipse/aether/util/repository/StringAuthenticationTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/repository/StringAuthenticationTest.java b/aether-util/src/test/java/org/eclipse/aether/util/repository/StringAuthenticationTest.java
deleted file mode 100644
index 8f89299..0000000
--- a/aether-util/src/test/java/org/eclipse/aether/util/repository/StringAuthenticationTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package org.eclipse.aether.util.repository;
-
-/*
- * 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.
- */
-
-import static org.junit.Assert.*;
-
-import org.eclipse.aether.DefaultRepositorySystemSession;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.repository.Authentication;
-import org.eclipse.aether.repository.AuthenticationContext;
-import org.eclipse.aether.repository.AuthenticationDigest;
-import org.eclipse.aether.repository.RemoteRepository;
-import org.junit.Test;
-
-public class StringAuthenticationTest
-{
-
-    private RepositorySystemSession newSession()
-    {
-        return new DefaultRepositorySystemSession();
-    }
-
-    private RemoteRepository newRepo( Authentication auth )
-    {
-        return new RemoteRepository.Builder( "test", "default", "http://localhost" ).setAuthentication( auth ).build();
-    }
-
-    private AuthenticationContext newContext( Authentication auth )
-    {
-        return AuthenticationContext.forRepository( newSession(), newRepo( auth ) );
-    }
-
-    private String newDigest( Authentication auth )
-    {
-        return AuthenticationDigest.forRepository( newSession(), newRepo( auth ) );
-    }
-
-    @Test
-    public void testFill()
-    {
-        Authentication auth = new StringAuthentication( "key", "value" );
-        AuthenticationContext context = newContext( auth );
-        assertEquals( null, context.get( "another-key" ) );
-        assertEquals( "value", context.get( "key" ) );
-    }
-
-    @Test
-    public void testDigest()
-    {
-        Authentication auth1 = new StringAuthentication( "key", "value" );
-        Authentication auth2 = new StringAuthentication( "key", "value" );
-        String digest1 = newDigest( auth1 );
-        String digest2 = newDigest( auth2 );
-        assertEquals( digest1, digest2 );
-
-        Authentication auth3 = new StringAuthentication( "key", "Value" );
-        String digest3 = newDigest( auth3 );
-        assertFalse( digest3.equals( digest1 ) );
-
-        Authentication auth4 = new StringAuthentication( "Key", "value" );
-        String digest4 = newDigest( auth4 );
-        assertFalse( digest4.equals( digest1 ) );
-    }
-
-    @Test
-    public void testEquals()
-    {
-        Authentication auth1 = new StringAuthentication( "key", "value" );
-        Authentication auth2 = new StringAuthentication( "key", "value" );
-        Authentication auth3 = new StringAuthentication( "key", "Value" );
-        assertEquals( auth1, auth2 );
-        assertFalse( auth1.equals( auth3 ) );
-        assertFalse( auth1.equals( null ) );
-    }
-
-    @Test
-    public void testHashCode()
-    {
-        Authentication auth1 = new StringAuthentication( "key", "value" );
-        Authentication auth2 = new StringAuthentication( "key", "value" );
-        assertEquals( auth1.hashCode(), auth2.hashCode() );
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/java/org/eclipse/aether/util/version/AbstractVersionTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/version/AbstractVersionTest.java b/aether-util/src/test/java/org/eclipse/aether/util/version/AbstractVersionTest.java
deleted file mode 100644
index 52541db..0000000
--- a/aether-util/src/test/java/org/eclipse/aether/util/version/AbstractVersionTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.eclipse.aether.util.version;
-
-/*
- * 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.
- */
-
-import static org.junit.Assert.assertEquals;
-
-import org.eclipse.aether.version.Version;
-
-/**
- */
-abstract class AbstractVersionTest
-{
-
-    protected static final int X_LT_Y = -1;
-
-    protected static final int X_EQ_Y = 0;
-
-    protected static final int X_GT_Y = 1;
-
-    protected abstract Version newVersion( String version );
-
-    protected void assertOrder( int expected, String version1, String version2 )
-    {
-        Version v1 = newVersion( version1 );
-        Version v2 = newVersion( version2 );
-
-        if ( expected > 0 )
-        {
-            assertEquals( "expected " + v1 + " > " + v2, 1, Integer.signum( v1.compareTo( v2 ) ) );
-            assertEquals( "expected " + v2 + " < " + v1, -1, Integer.signum( v2.compareTo( v1 ) ) );
-            assertEquals( "expected " + v1 + " != " + v2, false, v1.equals( v2 ) );
-            assertEquals( "expected " + v2 + " != " + v1, false, v2.equals( v1 ) );
-        }
-        else if ( expected < 0 )
-        {
-            assertEquals( "expected " + v1 + " < " + v2, -1, Integer.signum( v1.compareTo( v2 ) ) );
-            assertEquals( "expected " + v2 + " > " + v1, 1, Integer.signum( v2.compareTo( v1 ) ) );
-            assertEquals( "expected " + v1 + " != " + v2, false, v1.equals( v2 ) );
-            assertEquals( "expected " + v2 + " != " + v1, false, v2.equals( v1 ) );
-        }
-        else
-        {
-            assertEquals( "expected " + v1 + " == " + v2, 0, v1.compareTo( v2 ) );
-            assertEquals( "expected " + v2 + " == " + v1, 0, v2.compareTo( v1 ) );
-            assertEquals( "expected " + v1 + " == " + v2, true, v1.equals( v2 ) );
-            assertEquals( "expected " + v2 + " == " + v1, true, v2.equals( v1 ) );
-            assertEquals( "expected #(" + v1 + ") == #(" + v1 + ")", v1.hashCode(), v2.hashCode() );
-        }
-    }
-
-    protected void assertSequence( String... versions )
-    {
-        for ( int i = 0; i < versions.length - 1; i++ )
-        {
-            for ( int j = i + 1; j < versions.length; j++ )
-            {
-                assertOrder( X_LT_Y, versions[i], versions[j] );
-            }
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/java/org/eclipse/aether/util/version/GenericVersionRangeTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/version/GenericVersionRangeTest.java b/aether-util/src/test/java/org/eclipse/aether/util/version/GenericVersionRangeTest.java
deleted file mode 100644
index 85d007f..0000000
--- a/aether-util/src/test/java/org/eclipse/aether/util/version/GenericVersionRangeTest.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package org.eclipse.aether.util.version;
-
-/*
- * 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.
- */
-
-import static org.junit.Assert.*;
-
-import org.eclipse.aether.util.version.GenericVersion;
-import org.eclipse.aether.util.version.GenericVersionRange;
-import org.eclipse.aether.version.InvalidVersionSpecificationException;
-import org.eclipse.aether.version.Version;
-import org.eclipse.aether.version.VersionRange;
-import org.junit.Test;
-
-public class GenericVersionRangeTest
-{
-
-    private Version newVersion( String version )
-    {
-        return new GenericVersion( version );
-    }
-
-    private VersionRange parseValid( String range )
-    {
-        try
-        {
-            return new GenericVersionRange( range );
-        }
-        catch ( InvalidVersionSpecificationException e )
-        {
-            AssertionError error =
-                new AssertionError( range + " should be valid but failed to parse due to: " + e.getMessage() );
-            error.initCause( e );
-            throw error;
-        }
-    }
-
-    private void parseInvalid( String range )
-    {
-        try
-        {
-            new GenericVersionRange( range );
-            fail( range + " should be invalid" );
-        }
-        catch ( InvalidVersionSpecificationException e )
-        {
-            assertTrue( true );
-        }
-    }
-
-    private void assertContains( VersionRange range, String version )
-    {
-        assertTrue( range + " should contain " + version, range.containsVersion( newVersion( version ) ) );
-    }
-
-    private void assertNotContains( VersionRange range, String version )
-    {
-        assertFalse( range + " should not contain " + version, range.containsVersion( newVersion( version ) ) );
-    }
-
-    @Test
-    public void testLowerBoundInclusiveUpperBoundInclusive()
-    {
-        VersionRange range = parseValid( "[1,2]" );
-        assertContains( range, "1" );
-        assertContains( range, "1.1-SNAPSHOT" );
-        assertContains( range, "2" );
-        assertEquals( range, parseValid( range.toString() ) );
-    }
-
-    @Test
-    public void testLowerBoundInclusiveUpperBoundExclusive()
-    {
-        VersionRange range = parseValid( "[1.2.3.4.5,1.2.3.4.6)" );
-        assertContains( range, "1.2.3.4.5" );
-        assertNotContains( range, "1.2.3.4.6" );
-        assertEquals( range, parseValid( range.toString() ) );
-    }
-
-    @Test
-    public void testLowerBoundExclusiveUpperBoundInclusive()
-    {
-        VersionRange range = parseValid( "(1a,1b]" );
-        assertNotContains( range, "1a" );
-        assertContains( range, "1b" );
-        assertEquals( range, parseValid( range.toString() ) );
-    }
-
-    @Test
-    public void testLowerBoundExclusiveUpperBoundExclusive()
-    {
-        VersionRange range = parseValid( "(1,3)" );
-        assertNotContains( range, "1" );
-        assertContains( range, "2-SNAPSHOT" );
-        assertNotContains( range, "3" );
-        assertEquals( range, parseValid( range.toString() ) );
-    }
-
-    @Test
-    public void testSingleVersion()
-    {
-        VersionRange range = parseValid( "[1]" );
-        assertContains( range, "1" );
-        assertEquals( range, parseValid( range.toString() ) );
-
-        range = parseValid( "[1,1]" );
-        assertContains( range, "1" );
-        assertEquals( range, parseValid( range.toString() ) );
-    }
-
-    @Test
-    public void testSingleWildcardVersion()
-    {
-        VersionRange range = parseValid( "[1.2.*]" );
-        assertContains( range, "1.2-alpha-1" );
-        assertContains( range, "1.2-SNAPSHOT" );
-        assertContains( range, "1.2" );
-        assertContains( range, "1.2.9999999" );
-        assertNotContains( range, "1.3-rc-1" );
-        assertEquals( range, parseValid( range.toString() ) );
-    }
-
-    @Test
-    public void testMissingOpenCloseDelimiter()
-    {
-        parseInvalid( "1.0" );
-    }
-
-    @Test
-    public void testMissingOpenDelimiter()
-    {
-        parseInvalid( "1.0]" );
-        parseInvalid( "1.0)" );
-    }
-
-    @Test
-    public void testMissingCloseDelimiter()
-    {
-        parseInvalid( "[1.0" );
-        parseInvalid( "(1.0" );
-    }
-
-    @Test
-    public void testTooManyVersions()
-    {
-        parseInvalid( "[1,2,3]" );
-        parseInvalid( "(1,2,3)" );
-        parseInvalid( "[1,2,3)" );
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/java/org/eclipse/aether/util/version/GenericVersionSchemeTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/version/GenericVersionSchemeTest.java b/aether-util/src/test/java/org/eclipse/aether/util/version/GenericVersionSchemeTest.java
deleted file mode 100644
index f52f73d..0000000
--- a/aether-util/src/test/java/org/eclipse/aether/util/version/GenericVersionSchemeTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package org.eclipse.aether.util.version;
-
-/*
- * 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.
- */
-
-import static org.junit.Assert.*;
-
-import org.eclipse.aether.util.version.GenericVersion;
-import org.eclipse.aether.util.version.GenericVersionScheme;
-import org.eclipse.aether.version.InvalidVersionSpecificationException;
-import org.eclipse.aether.version.VersionConstraint;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- */
-public class GenericVersionSchemeTest
-{
-
-    private GenericVersionScheme scheme;
-
-    @Before
-    public void setUp()
-        throws Exception
-    {
-        scheme = new GenericVersionScheme();
-    }
-
-    private InvalidVersionSpecificationException parseInvalid( String constraint )
-    {
-        try
-        {
-            scheme.parseVersionConstraint( constraint );
-            fail( "expected exception for constraint " + constraint );
-            return null;
-        }
-        catch ( InvalidVersionSpecificationException e )
-        {
-            return e;
-        }
-    }
-
-    @Test
-    public void testEnumeratedVersions()
-        throws InvalidVersionSpecificationException
-    {
-        VersionConstraint c = scheme.parseVersionConstraint( "1.0" );
-        assertEquals( "1.0", c.getVersion().toString() );
-        assertTrue( c.containsVersion( new GenericVersion( "1.0" ) ) );
-
-        c = scheme.parseVersionConstraint( "[1.0]" );
-        assertEquals( null, c.getVersion() );
-        assertTrue( c.containsVersion( new GenericVersion( "1.0" ) ) );
-
-        c = scheme.parseVersionConstraint( "[1.0],[2.0]" );
-        assertTrue( c.containsVersion( new GenericVersion( "1.0" ) ) );
-        assertTrue( c.containsVersion( new GenericVersion( "2.0" ) ) );
-
-        c = scheme.parseVersionConstraint( "[1.0],[2.0],[3.0]" );
-        assertContains( c, "1.0", "2.0", "3.0" );
-        assertNotContains( c, "1.5" );
-
-        c = scheme.parseVersionConstraint( "[1,3),(3,5)" );
-        assertContains( c, "1", "2", "4" );
-        assertNotContains( c, "3", "5" );
-
-        c = scheme.parseVersionConstraint( "[1,3),(3,)" );
-        assertContains( c, "1", "2", "4" );
-        assertNotContains( c, "3" );
-    }
-
-    private void assertNotContains( VersionConstraint c, String... versions )
-    {
-        assertContains( String.format( "%s: %%s should not be contained\n", c.toString() ), c, false, versions );
-    }
-
-    private void assertContains( String msg, VersionConstraint c, boolean b, String... versions )
-    {
-        for ( String v : versions )
-        {
-            assertEquals( String.format( msg, v ), b, c.containsVersion( new GenericVersion( v ) ) );
-        }
-    }
-
-    private void assertContains( VersionConstraint c, String... versions )
-    {
-        assertContains( String.format( "%s: %%s should be contained\n", c.toString() ), c, true, versions );
-    }
-
-    @Test
-    public void testInvalid()
-    {
-        parseInvalid( "[1," );
-        parseInvalid( "[1,2],(3," );
-        parseInvalid( "[1,2],3" );
-    }
-}

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/java/org/eclipse/aether/util/version/GenericVersionTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/version/GenericVersionTest.java b/aether-util/src/test/java/org/eclipse/aether/util/version/GenericVersionTest.java
deleted file mode 100644
index ae891af..0000000
--- a/aether-util/src/test/java/org/eclipse/aether/util/version/GenericVersionTest.java
+++ /dev/null
@@ -1,345 +0,0 @@
-package org.eclipse.aether.util.version;
-
-/*
- * 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.
- */
-
-import java.util.Locale;
-
-import org.eclipse.aether.util.version.GenericVersion;
-import org.eclipse.aether.version.Version;
-import org.junit.Test;
-
-/**
- */
-public class GenericVersionTest
-    extends AbstractVersionTest
-{
-
-    protected Version newVersion( String version )
-    {
-        return new GenericVersion( version );
-    }
-
-    @Test
-    public void testEmptyVersion()
-    {
-        assertOrder( X_EQ_Y, "0", "" );
-    }
-
-    @Test
-    public void testNumericOrdering()
-    {
-        assertOrder( X_LT_Y, "2", "10" );
-        assertOrder( X_LT_Y, "1.2", "1.10" );
-        assertOrder( X_LT_Y, "1.0.2", "1.0.10" );
-        assertOrder( X_LT_Y, "1.0.0.2", "1.0.0.10" );
-        assertOrder( X_LT_Y, "1.0.20101206.111434.1", "1.0.20101206.111435.1" );
-        assertOrder( X_LT_Y, "1.0.20101206.111434.2", "1.0.20101206.111434.10" );
-    }
-
-    @Test
-    public void testDelimiters()
-    {
-        assertOrder( X_EQ_Y, "1.0", "1-0" );
-        assertOrder( X_EQ_Y, "1.0", "1_0" );
-        assertOrder( X_EQ_Y, "1.a", "1a" );
-    }
-
-    @Test
-    public void testLeadingZerosAreSemanticallyIrrelevant()
-    {
-        assertOrder( X_EQ_Y, "1", "01" );
-        assertOrder( X_EQ_Y, "1.2", "1.002" );
-        assertOrder( X_EQ_Y, "1.2.3", "1.2.0003" );
-        assertOrder( X_EQ_Y, "1.2.3.4", "1.2.3.00004" );
-    }
-
-    @Test
-    public void testTrailingZerosAreSemanticallyIrrelevant()
-    {
-        assertOrder( X_EQ_Y, "1", "1.0.0.0.0.0.0.0.0.0.0.0.0.0" );
-        assertOrder( X_EQ_Y, "1", "1-0-0-0-0-0-0-0-0-0-0-0-0-0" );
-        assertOrder( X_EQ_Y, "1", "1.0-0.0-0.0-0.0-0.0-0.0-0.0" );
-        assertOrder( X_EQ_Y, "1", "1.0000000000000" );
-        assertOrder( X_EQ_Y, "1.0", "1.0.0" );
-    }
-
-    @Test
-    public void testTrailingZerosBeforeQualifierAreSemanticallyIrrelevant()
-    {
-        assertOrder( X_EQ_Y, "1.0-ga", "1.0.0-ga" );
-        assertOrder( X_EQ_Y, "1.0.ga", "1.0.0.ga" );
-        assertOrder( X_EQ_Y, "1.0ga", "1.0.0ga" );
-
-        assertOrder( X_EQ_Y, "1.0-alpha", "1.0.0-alpha" );
-        assertOrder( X_EQ_Y, "1.0.alpha", "1.0.0.alpha" );
-        assertOrder( X_EQ_Y, "1.0alpha", "1.0.0alpha" );
-        assertOrder( X_EQ_Y, "1.0-alpha-snapshot", "1.0.0-alpha-snapshot" );
-        assertOrder( X_EQ_Y, "1.0.alpha.snapshot", "1.0.0.alpha.snapshot" );
-
-        assertOrder( X_EQ_Y, "1.x.0-alpha", "1.x.0.0-alpha" );
-        assertOrder( X_EQ_Y, "1.x.0.alpha", "1.x.0.0.alpha" );
-        assertOrder( X_EQ_Y, "1.x.0-alpha-snapshot", "1.x.0.0-alpha-snapshot" );
-        assertOrder( X_EQ_Y, "1.x.0.alpha.snapshot", "1.x.0.0.alpha.snapshot" );
-    }
-
-    @Test
-    public void testTrailingDelimitersAreSemanticallyIrrelevant()
-    {
-        assertOrder( X_EQ_Y, "1", "1............." );
-        assertOrder( X_EQ_Y, "1", "1-------------" );
-        assertOrder( X_EQ_Y, "1.0", "1............." );
-        assertOrder( X_EQ_Y, "1.0", "1-------------" );
-    }
-
-    @Test
-    public void testInitialDelimiters()
-    {
-        assertOrder( X_EQ_Y, "0.1", ".1" );
-        assertOrder( X_EQ_Y, "0.0.1", "..1" );
-        assertOrder( X_EQ_Y, "0.1", "-1" );
-        assertOrder( X_EQ_Y, "0.0.1", "--1" );
-    }
-
-    @Test
-    public void testConsecutiveDelimiters()
-    {
-        assertOrder( X_EQ_Y, "1.0.1", "1..1" );
-        assertOrder( X_EQ_Y, "1.0.0.1", "1...1" );
-        assertOrder( X_EQ_Y, "1.0.1", "1--1" );
-        assertOrder( X_EQ_Y, "1.0.0.1", "1---1" );
-    }
-
-    @Test
-    public void testUnlimitedNumberOfVersionComponents()
-    {
-        assertOrder( X_GT_Y, "1.0.1.2.3.4.5.6.7.8.9.0.1.2.10", "1.0.1.2.3.4.5.6.7.8.9.0.1.2.3" );
-    }
-
-    @Test
-    public void testUnlimitedNumberOfDigitsInNumericComponent()
-    {
-        assertOrder( X_GT_Y, "1.1234567890123456789012345678901", "1.123456789012345678901234567891" );
-    }
-
-    @Test
-    public void testTransitionFromDigitToLetterAndViceVersaIsEqualivantToDelimiter()
-    {
-        assertOrder( X_EQ_Y, "1alpha10", "1.alpha.10" );
-        assertOrder( X_EQ_Y, "1alpha10", "1-alpha-10" );
-
-        assertOrder( X_GT_Y, "1.alpha10", "1.alpha2" );
-        assertOrder( X_GT_Y, "10alpha", "1alpha" );
-    }
-
-    @Test
-    public void testWellKnownQualifierOrdering()
-    {
-        assertOrder( X_EQ_Y, "1-alpha1", "1-a1" );
-        assertOrder( X_LT_Y, "1-alpha", "1-beta" );
-        assertOrder( X_EQ_Y, "1-beta1", "1-b1" );
-        assertOrder( X_LT_Y, "1-beta", "1-milestone" );
-        assertOrder( X_EQ_Y, "1-milestone1", "1-m1" );
-        assertOrder( X_LT_Y, "1-milestone", "1-rc" );
-        assertOrder( X_EQ_Y, "1-rc", "1-cr" );
-        assertOrder( X_LT_Y, "1-rc", "1-snapshot" );
-        assertOrder( X_LT_Y, "1-snapshot", "1" );
-        assertOrder( X_EQ_Y, "1", "1-ga" );
-        assertOrder( X_EQ_Y, "1", "1.ga.0.ga" );
-        assertOrder( X_EQ_Y, "1.0", "1-ga" );
-        assertOrder( X_EQ_Y, "1", "1-ga.ga" );
-        assertOrder( X_EQ_Y, "1", "1-ga-ga" );
-        assertOrder( X_EQ_Y, "A", "A.ga.ga" );
-        assertOrder( X_EQ_Y, "A", "A-ga-ga" );
-        assertOrder( X_EQ_Y, "1", "1-final" );
-        assertOrder( X_LT_Y, "1", "1-sp" );
-
-        assertOrder( X_LT_Y, "A.rc.1", "A.ga.1" );
-        assertOrder( X_GT_Y, "A.sp.1", "A.ga.1" );
-        assertOrder( X_LT_Y, "A.rc.x", "A.ga.x" );
-        assertOrder( X_GT_Y, "A.sp.x", "A.ga.x" );
-    }
-
-    @Test
-    public void testWellKnownQualifierVersusUnknownQualifierOrdering()
-    {
-        assertOrder( X_GT_Y, "1-abc", "1-alpha" );
-        assertOrder( X_GT_Y, "1-abc", "1-beta" );
-        assertOrder( X_GT_Y, "1-abc", "1-milestone" );
-        assertOrder( X_GT_Y, "1-abc", "1-rc" );
-        assertOrder( X_GT_Y, "1-abc", "1-snapshot" );
-        assertOrder( X_GT_Y, "1-abc", "1" );
-        assertOrder( X_GT_Y, "1-abc", "1-sp" );
-    }
-
-    @Test
-    public void testWellKnownSingleCharQualifiersOnlyRecognizedIfImmediatelyFollowedByNumber()
-    {
-        assertOrder( X_GT_Y, "1.0a", "1.0" );
-        assertOrder( X_GT_Y, "1.0-a", "1.0" );
-        assertOrder( X_GT_Y, "1.0.a", "1.0" );
-        assertOrder( X_GT_Y, "1.0b", "1.0" );
-        assertOrder( X_GT_Y, "1.0-b", "1.0" );
-        assertOrder( X_GT_Y, "1.0.b", "1.0" );
-        assertOrder( X_GT_Y, "1.0m", "1.0" );
-        assertOrder( X_GT_Y, "1.0-m", "1.0" );
-        assertOrder( X_GT_Y, "1.0.m", "1.0" );
-
-        assertOrder( X_LT_Y, "1.0a1", "1.0" );
-        assertOrder( X_LT_Y, "1.0-a1", "1.0" );
-        assertOrder( X_LT_Y, "1.0.a1", "1.0" );
-        assertOrder( X_LT_Y, "1.0b1", "1.0" );
-        assertOrder( X_LT_Y, "1.0-b1", "1.0" );
-        assertOrder( X_LT_Y, "1.0.b1", "1.0" );
-        assertOrder( X_LT_Y, "1.0m1", "1.0" );
-        assertOrder( X_LT_Y, "1.0-m1", "1.0" );
-        assertOrder( X_LT_Y, "1.0.m1", "1.0" );
-
-        assertOrder( X_GT_Y, "1.0a.1", "1.0" );
-        assertOrder( X_GT_Y, "1.0a-1", "1.0" );
-        assertOrder( X_GT_Y, "1.0b.1", "1.0" );
-        assertOrder( X_GT_Y, "1.0b-1", "1.0" );
-        assertOrder( X_GT_Y, "1.0m.1", "1.0" );
-        assertOrder( X_GT_Y, "1.0m-1", "1.0" );
-    }
-
-    @Test
-    public void testUnknownQualifierOrdering()
-    {
-        assertOrder( X_LT_Y, "1-abc", "1-abcd" );
-        assertOrder( X_LT_Y, "1-abc", "1-bcd" );
-        assertOrder( X_GT_Y, "1-abc", "1-aac" );
-    }
-
-    @Test
-    public void testCaseInsensitiveOrderingOfQualifiers()
-    {
-        assertOrder( X_EQ_Y, "1.alpha", "1.ALPHA" );
-        assertOrder( X_EQ_Y, "1.alpha", "1.Alpha" );
-
-        assertOrder( X_EQ_Y, "1.beta", "1.BETA" );
-        assertOrder( X_EQ_Y, "1.beta", "1.Beta" );
-
-        assertOrder( X_EQ_Y, "1.milestone", "1.MILESTONE" );
-        assertOrder( X_EQ_Y, "1.milestone", "1.Milestone" );
-
-        assertOrder( X_EQ_Y, "1.rc", "1.RC" );
-        assertOrder( X_EQ_Y, "1.rc", "1.Rc" );
-        assertOrder( X_EQ_Y, "1.cr", "1.CR" );
-        assertOrder( X_EQ_Y, "1.cr", "1.Cr" );
-
-        assertOrder( X_EQ_Y, "1.snapshot", "1.SNAPSHOT" );
-        assertOrder( X_EQ_Y, "1.snapshot", "1.Snapshot" );
-
-        assertOrder( X_EQ_Y, "1.ga", "1.GA" );
-        assertOrder( X_EQ_Y, "1.ga", "1.Ga" );
-        assertOrder( X_EQ_Y, "1.final", "1.FINAL" );
-        assertOrder( X_EQ_Y, "1.final", "1.Final" );
-
-        assertOrder( X_EQ_Y, "1.sp", "1.SP" );
-        assertOrder( X_EQ_Y, "1.sp", "1.Sp" );
-
-        assertOrder( X_EQ_Y, "1.unknown", "1.UNKNOWN" );
-        assertOrder( X_EQ_Y, "1.unknown", "1.Unknown" );
-    }
-
-    @Test
-    public void testCaseInsensitiveOrderingOfQualifiersIsLocaleIndependent()
-    {
-        Locale orig = Locale.getDefault();
-        try
-        {
-            Locale[] locales = { Locale.ENGLISH, new Locale( "tr" ) };
-            for ( Locale locale : locales )
-            {
-                Locale.setDefault( locale );
-                assertOrder( X_EQ_Y, "1-abcdefghijklmnopqrstuvwxyz", "1-ABCDEFGHIJKLMNOPQRSTUVWXYZ" );
-            }
-        }
-        finally
-        {
-            Locale.setDefault( orig );
-        }
-    }
-
-    @Test
-    public void testQualifierVersusNumberOrdering()
-    {
-        assertOrder( X_LT_Y, "1-ga", "1-1" );
-        assertOrder( X_LT_Y, "1.ga", "1.1" );
-        assertOrder( X_EQ_Y, "1-ga", "1.0" );
-        assertOrder( X_EQ_Y, "1.ga", "1.0" );
-
-        assertOrder( X_LT_Y, "1-ga-1", "1-0-1" );
-        assertOrder( X_LT_Y, "1.ga.1", "1.0.1" );
-
-        assertOrder( X_GT_Y, "1.sp", "1.0" );
-        assertOrder( X_LT_Y, "1.sp", "1.1" );
-
-        assertOrder( X_LT_Y, "1-abc", "1-1" );
-        assertOrder( X_LT_Y, "1.abc", "1.1" );
-
-        assertOrder( X_LT_Y, "1-xyz", "1-1" );
-        assertOrder( X_LT_Y, "1.xyz", "1.1" );
-    }
-
-    @Test
-    public void testVersionEvolution()
-    {
-        assertSequence( "0.9.9-SNAPSHOT", "0.9.9", "0.9.10-SNAPSHOT", "0.9.10", "1.0-alpha-2-SNAPSHOT", "1.0-alpha-2",
-                        "1.0-alpha-10-SNAPSHOT", "1.0-alpha-10", "1.0-beta-1-SNAPSHOT", "1.0-beta-1",
-                        "1.0-rc-1-SNAPSHOT", "1.0-rc-1", "1.0-SNAPSHOT", "1.0", "1.0-sp-1-SNAPSHOT", "1.0-sp-1",
-                        "1.0.1-alpha-1-SNAPSHOT", "1.0.1-alpha-1", "1.0.1-beta-1-SNAPSHOT", "1.0.1-beta-1",
-                        "1.0.1-rc-1-SNAPSHOT", "1.0.1-rc-1", "1.0.1-SNAPSHOT", "1.0.1", "1.1-SNAPSHOT", "1.1" );
-
-        assertSequence( "1.0-alpha", "1.0", "1.0-1" );
-        assertSequence( "1.0.alpha", "1.0", "1.0-1" );
-        assertSequence( "1.0-alpha", "1.0", "1.0.1" );
-        assertSequence( "1.0.alpha", "1.0", "1.0.1" );
-    }
-
-    @Test
-    public void testMinimumSegment()
-    {
-        assertOrder( X_LT_Y, "1.min", "1.0-alpha-1" );
-        assertOrder( X_LT_Y, "1.min", "1.0-SNAPSHOT" );
-        assertOrder( X_LT_Y, "1.min", "1.0" );
-        assertOrder( X_LT_Y, "1.min", "1.9999999999" );
-
-        assertOrder( X_EQ_Y, "1.min", "1.MIN" );
-
-        assertOrder( X_GT_Y, "1.min", "0.99999" );
-        assertOrder( X_GT_Y, "1.min", "0.max" );
-    }
-
-    @Test
-    public void testMaximumSegment()
-    {
-        assertOrder( X_GT_Y, "1.max", "1.0-alpha-1" );
-        assertOrder( X_GT_Y, "1.max", "1.0-SNAPSHOT" );
-        assertOrder( X_GT_Y, "1.max", "1.0" );
-        assertOrder( X_GT_Y, "1.max", "1.9999999999" );
-
-        assertOrder( X_EQ_Y, "1.max", "1.MAX" );
-
-        assertOrder( X_LT_Y, "1.max", "2.0-alpha-1" );
-        assertOrder( X_LT_Y, "1.max", "2.min" );
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/java/org/eclipse/aether/util/version/UnionVersionRangeTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/version/UnionVersionRangeTest.java b/aether-util/src/test/java/org/eclipse/aether/util/version/UnionVersionRangeTest.java
deleted file mode 100644
index 570b6b7..0000000
--- a/aether-util/src/test/java/org/eclipse/aether/util/version/UnionVersionRangeTest.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package org.eclipse.aether.util.version;
-
-/*
- * 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.
- */
-
-import static org.junit.Assert.*;
-
-import java.util.Collections;
-
-import org.eclipse.aether.version.InvalidVersionSpecificationException;
-import org.eclipse.aether.version.VersionRange;
-import org.junit.Test;
-
-public class UnionVersionRangeTest
-{
-
-    private VersionRange newRange( String range )
-    {
-        try
-        {
-            return new GenericVersionScheme().parseVersionRange( range );
-        }
-        catch ( InvalidVersionSpecificationException e )
-        {
-            throw new IllegalArgumentException( e );
-        }
-    }
-
-    private void assertBound( String version, boolean inclusive, VersionRange.Bound bound )
-    {
-        if ( version == null )
-        {
-            assertNull( bound );
-        }
-        else
-        {
-            assertNotNull( bound );
-            assertNotNull( bound.getVersion() );
-            assertEquals( inclusive, bound.isInclusive() );
-            try
-            {
-                assertEquals( new GenericVersionScheme().parseVersion( version ), bound.getVersion() );
-            }
-            catch ( InvalidVersionSpecificationException e )
-            {
-                throw new IllegalArgumentException( e );
-            }
-        }
-    }
-
-    @Test
-    public void testGetLowerBound()
-    {
-        VersionRange range = UnionVersionRange.from( Collections.<VersionRange> emptySet() );
-        assertBound( null, false, range.getLowerBound() );
-
-        range = UnionVersionRange.from( newRange( "[1,2]" ), newRange( "[3,4]" ) );
-        assertBound( "1", true, range.getLowerBound() );
-
-        range = UnionVersionRange.from( newRange( "[1,2]" ), newRange( "(,4]" ) );
-        assertBound( null, false, range.getLowerBound() );
-
-        range = UnionVersionRange.from( newRange( "[1,2]" ), newRange( "(1,4]" ) );
-        assertBound( "1", true, range.getLowerBound() );
-
-        range = UnionVersionRange.from( newRange( "[1,2]" ), newRange( "(0,4]" ) );
-        assertBound( "0", false, range.getLowerBound() );
-    }
-
-    @Test
-    public void testGetUpperBound()
-    {
-        VersionRange range = UnionVersionRange.from( Collections.<VersionRange> emptySet() );
-        assertBound( null, false, range.getUpperBound() );
-
-        range = UnionVersionRange.from( newRange( "[1,2]" ), newRange( "[3,4]" ) );
-        assertBound( "4", true, range.getUpperBound() );
-
-        range = UnionVersionRange.from( newRange( "[1,2]" ), newRange( "[3,)" ) );
-        assertBound( null, false, range.getUpperBound() );
-
-        range = UnionVersionRange.from( newRange( "[1,2]" ), newRange( "[1,2)" ) );
-        assertBound( "2", true, range.getUpperBound() );
-
-        range = UnionVersionRange.from( newRange( "[1,2]" ), newRange( "[1,3)" ) );
-        assertBound( "3", false, range.getUpperBound() );
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/conflict-id-sorter/cycle.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/conflict-id-sorter/cycle.txt b/aether-util/src/test/resources/transformer/conflict-id-sorter/cycle.txt
deleted file mode 100644
index 1c200b9..0000000
--- a/aether-util/src/test/resources/transformer/conflict-id-sorter/cycle.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-(null)
-+- gid:aid:ver
-|  \- gid2:aid:ver
-\- gid2:aid:ver
-   \- gid:aid:ver

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/conflict-id-sorter/cycles.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/conflict-id-sorter/cycles.txt b/aether-util/src/test/resources/transformer/conflict-id-sorter/cycles.txt
deleted file mode 100644
index 714069e..0000000
--- a/aether-util/src/test/resources/transformer/conflict-id-sorter/cycles.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-(null)
-+- gid1:aid:ver
-|  \- gid2:aid:ver
-|     \- gid:aid:ver
-+- gid2:aid:ver
-|  \- gid1:aid:ver
-+- gid1:aid:ver
-|  \- gid3:aid:ver
-+- gid3:aid:ver
-|  \- gid1:aid:ver
-+- gid2:aid:ver
-|  \- gid3:aid:ver
-\- gid3:aid:ver
-   \- gid2:aid:ver

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/conflict-id-sorter/no-conflicts.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/conflict-id-sorter/no-conflicts.txt b/aether-util/src/test/resources/transformer/conflict-id-sorter/no-conflicts.txt
deleted file mode 100644
index c4d1c89..0000000
--- a/aether-util/src/test/resources/transformer/conflict-id-sorter/no-conflicts.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-(null)
-+- gid:aid:ver
-|  \- gid2:aid:ver
-\- gid3:aid:ver
-   \- gid4:aid:ver

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/conflict-id-sorter/simple.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/conflict-id-sorter/simple.txt b/aether-util/src/test/resources/transformer/conflict-id-sorter/simple.txt
deleted file mode 100644
index 01ce915..0000000
--- a/aether-util/src/test/resources/transformer/conflict-id-sorter/simple.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-(null)
-+- gid:aid:ver
-|  \- gid:aid2:ver
-\- gid2:aid:ver
-   \- gid:aid:ver

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/conflict-marker/relocation1.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/conflict-marker/relocation1.txt b/aether-util/src/test/resources/transformer/conflict-marker/relocation1.txt
deleted file mode 100644
index 518f706..0000000
--- a/aether-util/src/test/resources/transformer/conflict-marker/relocation1.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-(null)
-+- test:a:1
-\- test:a:1 relocations=test:reloc:1

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/conflict-marker/relocation2.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/conflict-marker/relocation2.txt b/aether-util/src/test/resources/transformer/conflict-marker/relocation2.txt
deleted file mode 100644
index 729748d..0000000
--- a/aether-util/src/test/resources/transformer/conflict-marker/relocation2.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-(null)
-+- test:a:1 relocations=test:reloc:1
-\- test:a:1

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/conflict-marker/relocation3.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/conflict-marker/relocation3.txt b/aether-util/src/test/resources/transformer/conflict-marker/relocation3.txt
deleted file mode 100644
index 8b96d18..0000000
--- a/aether-util/src/test/resources/transformer/conflict-marker/relocation3.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-(null)
-+- test:a:1
-+- test:b:1
-\- test:c:1 relocations=test:a:1,test:b:1

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/conflict-marker/simple.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/conflict-marker/simple.txt b/aether-util/src/test/resources/transformer/conflict-marker/simple.txt
deleted file mode 100644
index 2f94bb4..0000000
--- a/aether-util/src/test/resources/transformer/conflict-marker/simple.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-(null)
-+- test:a:1
-\- test:b:1

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/optionality-selector/conflict-direct-dep.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/optionality-selector/conflict-direct-dep.txt b/aether-util/src/test/resources/transformer/optionality-selector/conflict-direct-dep.txt
deleted file mode 100644
index 13ac2aa..0000000
--- a/aether-util/src/test/resources/transformer/optionality-selector/conflict-direct-dep.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-(null)
-+- test:a:1
-|  \- test:x:1
-\- test:x:1 optional

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/optionality-selector/conflict.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/optionality-selector/conflict.txt b/aether-util/src/test/resources/transformer/optionality-selector/conflict.txt
deleted file mode 100644
index ffab99b..0000000
--- a/aether-util/src/test/resources/transformer/optionality-selector/conflict.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-(null)
-+- test:a:1 optional
-|  \- test:x:1
-\- test:b:1
-   \- test:x:1

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/optionality-selector/derive.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/optionality-selector/derive.txt b/aether-util/src/test/resources/transformer/optionality-selector/derive.txt
deleted file mode 100644
index 37a394a..0000000
--- a/aether-util/src/test/resources/transformer/optionality-selector/derive.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-(null)
-+- test:a:1 optional
-|  \- test:b:1
-\- test:c:1 !optional
-   \- test:d:1

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/scope-calculator/conflict-and-inheritance.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/scope-calculator/conflict-and-inheritance.txt b/aether-util/src/test/resources/transformer/scope-calculator/conflict-and-inheritance.txt
deleted file mode 100644
index 558049c..0000000
--- a/aether-util/src/test/resources/transformer/scope-calculator/conflict-and-inheritance.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-# Another scenario to check that scope inheritance considers the effective scopes of parent nodes as determined during
-# scope conflict resolution. In this example, gid:x:1 should end up in compile scope (and not runtime) because its
-# parent gid:c:2 will be promoted to compile scope due to a conflict with gid:c:1.
-
-gid:root:1
-+- gid:a:1 compile
-|  \- gid:c:2 runtime
-|     \- gid:x:1 compile
-\- gid:b:1 compile
-   \- gid:c:1 compile

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/scope-calculator/conflicting-direct-nodes.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/scope-calculator/conflicting-direct-nodes.txt b/aether-util/src/test/resources/transformer/scope-calculator/conflicting-direct-nodes.txt
deleted file mode 100644
index 3330251..0000000
--- a/aether-util/src/test/resources/transformer/scope-calculator/conflicting-direct-nodes.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-(null)
-+- gid:aid:ver %s
-\- gid:aid:ver %s

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/scope-calculator/cycle-a.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/scope-calculator/cycle-a.txt b/aether-util/src/test/resources/transformer/scope-calculator/cycle-a.txt
deleted file mode 100644
index df2d828..0000000
--- a/aether-util/src/test/resources/transformer/scope-calculator/cycle-a.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-# Checks for graceful handling of cycles in the graph of conflict groups. Below, the group {a:1, a:2} depends on
-# {b:1, b:2} and vice versa. Additionally, each group contains a direct dependency.
-
-gid:root:1
-+- gid:a:1 compile
-|  \- gid:b:1 compile
-\- gid:b:2 runtime
-   \- gid:a:2 runtime

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/scope-calculator/cycle-b.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/scope-calculator/cycle-b.txt b/aether-util/src/test/resources/transformer/scope-calculator/cycle-b.txt
deleted file mode 100644
index 5fe084a..0000000
--- a/aether-util/src/test/resources/transformer/scope-calculator/cycle-b.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-# Variation of cycle-a where the order of direct dependencies has been changed.
-
-gid:root:1
-+- gid:b:2 runtime
-|  \- gid:a:2 runtime
-\- gid:a:1 compile
-   \- gid:b:1 compile

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/scope-calculator/cycle-c.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/scope-calculator/cycle-c.txt b/aether-util/src/test/resources/transformer/scope-calculator/cycle-c.txt
deleted file mode 100644
index d3495b2..0000000
--- a/aether-util/src/test/resources/transformer/scope-calculator/cycle-c.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-# Checks for graceful handling of cycles in the graph of conflict groups. Below, the group {a:1} depends on
-# {b:1} and vice versa. The conflicting groups consist entirely of non-direct dependencies.
-
-gid:root:1
-+- gid:x:1 runtime
-|  \- gid:a:1 compile
-|     \- gid:b:1 compile
-\- gid:y:1 runtime
-   \- gid:b:1 compile
-      \- gid:a:1 compile

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/scope-calculator/cycle-d.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/scope-calculator/cycle-d.txt b/aether-util/src/test/resources/transformer/scope-calculator/cycle-d.txt
deleted file mode 100644
index c3a6824..0000000
--- a/aether-util/src/test/resources/transformer/scope-calculator/cycle-d.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-# Checks for graceful handling of cycles in the graph of dependency nodes.
-
-gid:root:1
-\- gid:a:1 compile
-   \- gid:b:1 compile        (b)
-      \- gid:a:1 runtime
-         \- ^b

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/scope-calculator/direct-nodes-winning.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/scope-calculator/direct-nodes-winning.txt b/aether-util/src/test/resources/transformer/scope-calculator/direct-nodes-winning.txt
deleted file mode 100644
index 67edf3d..0000000
--- a/aether-util/src/test/resources/transformer/scope-calculator/direct-nodes-winning.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-(null)
-+- gid:aid:ver %s
-+- gid:aid2:ver
-|  \- gid:aid:ver provided
-+- gid:aid3:ver
-|  \- gid:aid:ver runtime
-+- gid:aid4:ver
-|  \- gid:aid:ver test
-\- gid:aid5:ver
-   \- gid:aid:ver compile
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/scope-calculator/direct-with-conflict-and-inheritance.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/scope-calculator/direct-with-conflict-and-inheritance.txt b/aether-util/src/test/resources/transformer/scope-calculator/direct-with-conflict-and-inheritance.txt
deleted file mode 100644
index c883214..0000000
--- a/aether-util/src/test/resources/transformer/scope-calculator/direct-with-conflict-and-inheritance.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-# When a direct dependency scope conflicts with a transitive dependency scope, the direct dependency scope always wins.
-# When the scope of the transitive dependency is updated, this update needs to be considered by scope inheritance.
-# In the graph below gid:a:1 has a conflict, after its resolution to test scope, gid:x:1 should end up in
-# test scope as well, everywhere in the graph.
-
-gid:root:1
-+- gid:a:1 test
-|  \- gid:x:1 compile
-\- gid:b:1 compile
-   \- gid:a:1 compile
-      \- gid:x:1 compile

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/scope-calculator/dueling-scopes.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/scope-calculator/dueling-scopes.txt b/aether-util/src/test/resources/transformer/scope-calculator/dueling-scopes.txt
deleted file mode 100644
index d2ae8e6..0000000
--- a/aether-util/src/test/resources/transformer/scope-calculator/dueling-scopes.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-# pattern to test scope mediation in conflict groups
-
-(null)
-+- gid:aid2:ver
-|  \- gid:aid:ver %s
-\- gid:aid3:ver
-   \- gid:aid:ver %s

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/scope-calculator/inheritance.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/scope-calculator/inheritance.txt b/aether-util/src/test/resources/transformer/scope-calculator/inheritance.txt
deleted file mode 100644
index 3b832e9..0000000
--- a/aether-util/src/test/resources/transformer/scope-calculator/inheritance.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-root:a:ver
-\- gid:b:ver %s
-   \- gid:c:ver %s

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/scope-calculator/multiple-inheritance.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/scope-calculator/multiple-inheritance.txt b/aether-util/src/test/resources/transformer/scope-calculator/multiple-inheritance.txt
deleted file mode 100644
index d545ed6..0000000
--- a/aether-util/src/test/resources/transformer/scope-calculator/multiple-inheritance.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-(null)
-+- gid:aid:ver %s
-|  \- gid2:aid:ver compile   (1)
-\- gid3:aid:ver %s
-   \- ^1

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/scope-calculator/system-1.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/scope-calculator/system-1.txt b/aether-util/src/test/resources/transformer/scope-calculator/system-1.txt
deleted file mode 100644
index 61d8659..0000000
--- a/aether-util/src/test/resources/transformer/scope-calculator/system-1.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-gid:aid:1
-+- gid:aid2:2 compile
-\- gid:aid2:3 system

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/scope-calculator/system-2.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/scope-calculator/system-2.txt b/aether-util/src/test/resources/transformer/scope-calculator/system-2.txt
deleted file mode 100644
index 04a5d59..0000000
--- a/aether-util/src/test/resources/transformer/scope-calculator/system-2.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-gid:aid:1
-+- gid:aid2:2 system
-\- gid:aid2:3 compile

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/version-resolver/conflict-id-cycle.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/version-resolver/conflict-id-cycle.txt b/aether-util/src/test/resources/transformer/version-resolver/conflict-id-cycle.txt
deleted file mode 100644
index 57c5d56..0000000
--- a/aether-util/src/test/resources/transformer/version-resolver/conflict-id-cycle.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-# a graph which itself is acyclic but its conflict ids are cyclic (a <-> b)
-
-test:root:1
-+- test:a:1
-|  \- test:b:1
-\- test:b:2
-   \- test:a:2

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/version-resolver/cycle.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/version-resolver/cycle.txt b/aether-util/src/test/resources/transformer/version-resolver/cycle.txt
deleted file mode 100644
index 35c1c6a..0000000
--- a/aether-util/src/test/resources/transformer/version-resolver/cycle.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-cycle:root:1
-+- cycle:a:1
-|  \- cycle:b:1                   (b)
-|     \- cycle:c:1
-|        \- cycle:a:1             (a)
-|           \- ^b
-\- cycle:c:1
-   \- ^a

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/version-resolver/dead-conflict-group.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/version-resolver/dead-conflict-group.txt b/aether-util/src/test/resources/transformer/version-resolver/dead-conflict-group.txt
deleted file mode 100644
index cb49d9c..0000000
--- a/aether-util/src/test/resources/transformer/version-resolver/dead-conflict-group.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-test:root:1
-+- test:a:1
-|  \- test:b:1
-|     \- test:c:1     # conflict group c will completely vanish from resolved tree
-\- test:b:2

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/version-resolver/loop.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/version-resolver/loop.txt b/aether-util/src/test/resources/transformer/version-resolver/loop.txt
deleted file mode 100644
index 2b50f09..0000000
--- a/aether-util/src/test/resources/transformer/version-resolver/loop.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-gid:a:1
-\- gid:a:1

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/version-resolver/nearest-underneath-loser-a.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/version-resolver/nearest-underneath-loser-a.txt b/aether-util/src/test/resources/transformer/version-resolver/nearest-underneath-loser-a.txt
deleted file mode 100644
index c566caf..0000000
--- a/aether-util/src/test/resources/transformer/version-resolver/nearest-underneath-loser-a.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-test:root:1
-+- test:a:1
-|  \- test:b:1           # will be removed in favor of test:b:2
-|     \- test:j:1        # nearest version of j in dirty tree
-+- test:c:1
-|  \- test:d:1
-|     \- test:e:1
-|        \- test:j:1
-\- test:b:2

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/version-resolver/nearest-underneath-loser-b.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/version-resolver/nearest-underneath-loser-b.txt b/aether-util/src/test/resources/transformer/version-resolver/nearest-underneath-loser-b.txt
deleted file mode 100644
index 07867cb..0000000
--- a/aether-util/src/test/resources/transformer/version-resolver/nearest-underneath-loser-b.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-test:root:1
-+- test:a:1
-|  \- test:b:1           # will be removed in favor of test:b:2
-|     \- test:j:1        # nearest version of j in dirty tree
-+- test:c:1
-|  \- test:d:1
-|     \- test:e:1
-|        \- test:j:2
-\- test:b:2

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/version-resolver/overlapping-cycles.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/version-resolver/overlapping-cycles.txt b/aether-util/src/test/resources/transformer/version-resolver/overlapping-cycles.txt
deleted file mode 100644
index fa9e5aa..0000000
--- a/aether-util/src/test/resources/transformer/version-resolver/overlapping-cycles.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-cycle:root:1
-+- cycle:a:1                 (a)
-|  \- cycle:b:1
-|     \- cycle:c:1
-|        \- ^a
-\- cycle:b:1                 (b)
-   \- cycle:c:1
-      \- ^b

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/version-resolver/range-backtracking.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/version-resolver/range-backtracking.txt b/aether-util/src/test/resources/transformer/version-resolver/range-backtracking.txt
deleted file mode 100644
index 6634e7f..0000000
--- a/aether-util/src/test/resources/transformer/version-resolver/range-backtracking.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-(null)
-+- test:x:1
-+- test:a:1
-|  \- test:b:1
-|     \- test:x:3
-+- test:c:1
-|  \- test:x:2
-\- test:d:1
-   \- test:e:1
-      \- test:x:2[2,)   # forces rejection of x:1, should fallback to nearest and not first-seen, i.e. x:2 and not x:3

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/version-resolver/ranges.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/version-resolver/ranges.txt b/aether-util/src/test/resources/transformer/version-resolver/ranges.txt
deleted file mode 100644
index 9acf341..0000000
--- a/aether-util/src/test/resources/transformer/version-resolver/ranges.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-(null)
-+- test:b:1
-|  \- test:a:2[2]
-\- test:c:1
-   +- test:a:1[1,3]
-   +- test:a:2[1,3]
-   \- test:a:3[1,3]

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/version-resolver/scope-vs-version.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/version-resolver/scope-vs-version.txt b/aether-util/src/test/resources/transformer/version-resolver/scope-vs-version.txt
deleted file mode 100644
index 6c79cfe..0000000
--- a/aether-util/src/test/resources/transformer/version-resolver/scope-vs-version.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-# This highlights a design flaw in the previous separation of JavaEffectiveScopeCalculator and NearestVersionConflictResolver:
-# scope conflicts can't be properly determined and resolved until ancestor dependencies got their version conflicts resolved.
-# Otherwise, dependencies can get promoted to a scope due to a scope conflict which actually no longer arises after conflicting
-# versions got removed. In the dirty graph below, the effective scope of test:y should be "test" and not "compile" (as suggested
-# by its test:x parent).
-
-test:root:1
-+- test:a:1 compile
-|  +- test:x:1 compile             # (a)
-+- test:b:1 test
-|  +- test:y:1 compile
-+- test:c:1 test
-   +- test:x:1 compile             # conflicts with (a), hence leaving scope as "compile"
-      +- test:y:1 compile          # since our parent gets removed in favor of (a), no need to promote y into scope "compile"

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/version-resolver/sibling-versions.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/version-resolver/sibling-versions.txt b/aether-util/src/test/resources/transformer/version-resolver/sibling-versions.txt
deleted file mode 100644
index 5d50302..0000000
--- a/aether-util/src/test/resources/transformer/version-resolver/sibling-versions.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-# multiple versions of the same GA beneath the same parent as seen after expansion of version ranges
-# versions neither in ascending nor descending order
-
-test:root:1
-+- test:a:1
-+- test:a:3
-\- test:a:2

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/version-resolver/soft-vs-range.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/version-resolver/soft-vs-range.txt b/aether-util/src/test/resources/transformer/version-resolver/soft-vs-range.txt
deleted file mode 100644
index d3b10e9..0000000
--- a/aether-util/src/test/resources/transformer/version-resolver/soft-vs-range.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-test:root:1
-+- test:a:1
-|  \- test:c:2     # nearest occurrence of c but doesn't match range given below
-\- test:b:1
-   \- test:c:1[1]

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/version-resolver/unsolvable-with-cycle.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/version-resolver/unsolvable-with-cycle.txt b/aether-util/src/test/resources/transformer/version-resolver/unsolvable-with-cycle.txt
deleted file mode 100644
index 153f030..0000000
--- a/aether-util/src/test/resources/transformer/version-resolver/unsolvable-with-cycle.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-# Conflict id "a" will be resolved before "x" such that the cycle formed by "x" is still in place when processing "a".
-# So in order to report the conflicting paths to "a" the code better supports cyclic graphs. 
-
-cycle:root:1
-+- cycle:x:1       (x)
-|  \- ^x
-+- cycle:a:1[1]
-\- cycle:b:1
-   \- cycle:a:2[2]
-      \- cycle:x:1

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/version-resolver/unsolvable.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/version-resolver/unsolvable.txt b/aether-util/src/test/resources/transformer/version-resolver/unsolvable.txt
deleted file mode 100644
index bbc260e..0000000
--- a/aether-util/src/test/resources/transformer/version-resolver/unsolvable.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-(null)
-+- test:b:1
-|  \- test:a:1[1]
-\- test:c:1
-   \- test:a:2[2]

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/transformer/version-resolver/verbose.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/transformer/version-resolver/verbose.txt b/aether-util/src/test/resources/transformer/version-resolver/verbose.txt
deleted file mode 100644
index 4bb3880..0000000
--- a/aether-util/src/test/resources/transformer/version-resolver/verbose.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-test:root:1
-+- test:a:1 test
-|  +- test:x:1 compile
-|  \- test:x:2 compile
-\- test:b:1 test
-   +- test:x:1 compile
-      \- test:z:1 compile
-   \- test:x:2 compile

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/visitor/filtering/parents.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/visitor/filtering/parents.txt b/aether-util/src/test/resources/visitor/filtering/parents.txt
deleted file mode 100644
index 9a93ca2..0000000
--- a/aether-util/src/test/resources/visitor/filtering/parents.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-gid:a:1
-+- gid:b:1
-|  \- gid:c:1
-|     \- gid:d:1
-\- gid:e:1
-   \- gid:f:1

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/visitor/ordered-list/cycles.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/visitor/ordered-list/cycles.txt b/aether-util/src/test/resources/visitor/ordered-list/cycles.txt
deleted file mode 100644
index 8de373c..0000000
--- a/aether-util/src/test/resources/visitor/ordered-list/cycles.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-gid:a:1
-+- gid:b:1 (1)
-|  \- gid:c:1
-|     \- ^1
-\- gid:d:1
-   +- ^1
-   \- gid:e:1

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/visitor/ordered-list/simple.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/visitor/ordered-list/simple.txt b/aether-util/src/test/resources/visitor/ordered-list/simple.txt
deleted file mode 100644
index 094d2d3..0000000
--- a/aether-util/src/test/resources/visitor/ordered-list/simple.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-gid:a:1
-+- gid:b:1
-|  \- gid:c:1
-\- gid:d:1
-   \- gid:e:1

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/visitor/path-recorder/cycle.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/visitor/path-recorder/cycle.txt b/aether-util/src/test/resources/visitor/path-recorder/cycle.txt
deleted file mode 100644
index 9a48240..0000000
--- a/aether-util/src/test/resources/visitor/path-recorder/cycle.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-gid:a:1 (a)
-+- gid:b:1 (b)
-|  \- match:x:1
-\- match:x:2 (x)
-   +- ^a
-   +- ^b
-   \- ^x

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/visitor/path-recorder/nested.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/visitor/path-recorder/nested.txt b/aether-util/src/test/resources/visitor/path-recorder/nested.txt
deleted file mode 100644
index 67742f8..0000000
--- a/aether-util/src/test/resources/visitor/path-recorder/nested.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-match:x:1
-+- gid:a:1
-|  \- match:y:2
-\- match:y:2

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/visitor/path-recorder/parents.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/visitor/path-recorder/parents.txt b/aether-util/src/test/resources/visitor/path-recorder/parents.txt
deleted file mode 100644
index 9a93ca2..0000000
--- a/aether-util/src/test/resources/visitor/path-recorder/parents.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-gid:a:1
-+- gid:b:1
-|  \- gid:c:1
-|     \- gid:d:1
-\- gid:e:1
-   \- gid:f:1

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/visitor/path-recorder/simple.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/visitor/path-recorder/simple.txt b/aether-util/src/test/resources/visitor/path-recorder/simple.txt
deleted file mode 100644
index 8f3c6a1..0000000
--- a/aether-util/src/test/resources/visitor/path-recorder/simple.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-gid:a:1
-+- gid:b:1
-|  \- match:x:1
-\- match:x:2

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/aether-util/src/test/resources/visitor/tree/cycles.txt
----------------------------------------------------------------------
diff --git a/aether-util/src/test/resources/visitor/tree/cycles.txt b/aether-util/src/test/resources/visitor/tree/cycles.txt
deleted file mode 100644
index f8d7abc..0000000
--- a/aether-util/src/test/resources/visitor/tree/cycles.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-gid:a:1
-+- gid:b:1 (1)
-|  \- gid:c:1
-|     \- ^1
-\- gid:d:1
-   \- ^1

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/maven-resolver-api/pom.xml
----------------------------------------------------------------------
diff --git a/maven-resolver-api/pom.xml b/maven-resolver-api/pom.xml
new file mode 100644
index 0000000..a65c9d0
--- /dev/null
+++ b/maven-resolver-api/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.maven.resolver</groupId>
+    <artifactId>maven-resolver</artifactId>
+    <version>1.2.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>maven-resolver-api</artifactId>
+
+  <name>Maven Artifact Resolver API</name>
+  <description>
+    The application programming interface for the repository system.
+  </description>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>hamcrest-core</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/27f8bd73/maven-resolver-api/src/main/java/org/eclipse/aether/AbstractForwardingRepositorySystemSession.java
----------------------------------------------------------------------
diff --git a/maven-resolver-api/src/main/java/org/eclipse/aether/AbstractForwardingRepositorySystemSession.java b/maven-resolver-api/src/main/java/org/eclipse/aether/AbstractForwardingRepositorySystemSession.java
new file mode 100644
index 0000000..20df431
--- /dev/null
+++ b/maven-resolver-api/src/main/java/org/eclipse/aether/AbstractForwardingRepositorySystemSession.java
@@ -0,0 +1,189 @@
+package org.eclipse.aether;
+
+/*
+ * 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.
+ */
+
+import java.util.Map;
+
+import org.eclipse.aether.artifact.ArtifactTypeRegistry;
+import org.eclipse.aether.collection.DependencyGraphTransformer;
+import org.eclipse.aether.collection.DependencyManager;
+import org.eclipse.aether.collection.DependencySelector;
+import org.eclipse.aether.collection.DependencyTraverser;
+import org.eclipse.aether.collection.VersionFilter;
+import org.eclipse.aether.repository.AuthenticationSelector;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.LocalRepositoryManager;
+import org.eclipse.aether.repository.MirrorSelector;
+import org.eclipse.aether.repository.ProxySelector;
+import org.eclipse.aether.repository.WorkspaceReader;
+import org.eclipse.aether.resolution.ArtifactDescriptorPolicy;
+import org.eclipse.aether.resolution.ResolutionErrorPolicy;
+import org.eclipse.aether.transfer.TransferListener;
+
+/**
+ * A special repository system session to enable decorating or proxying another session. To do so, clients have to
+ * create a subclass and implement {@link #getSession()}.
+ */
+public abstract class AbstractForwardingRepositorySystemSession
+    implements RepositorySystemSession
+{
+
+    /**
+     * Creates a new forwarding session.
+     */
+    protected AbstractForwardingRepositorySystemSession()
+    {
+    }
+
+    /**
+     * Gets the repository system session to which this instance forwards calls. It's worth noting that this class does
+     * not save/cache the returned reference but queries this method before each forwarding. Hence, the session
+     * forwarded to may change over time or depending on the context (e.g. calling thread).
+     * 
+     * @return The repository system session to forward calls to, never {@code null}.
+     */
+    protected abstract RepositorySystemSession getSession();
+
+    public boolean isOffline()
+    {
+        return getSession().isOffline();
+    }
+
+    public boolean isIgnoreArtifactDescriptorRepositories()
+    {
+        return getSession().isIgnoreArtifactDescriptorRepositories();
+    }
+
+    public ResolutionErrorPolicy getResolutionErrorPolicy()
+    {
+        return getSession().getResolutionErrorPolicy();
+    }
+
+    public ArtifactDescriptorPolicy getArtifactDescriptorPolicy()
+    {
+        return getSession().getArtifactDescriptorPolicy();
+    }
+
+    public String getChecksumPolicy()
+    {
+        return getSession().getChecksumPolicy();
+    }
+
+    public String getUpdatePolicy()
+    {
+        return getSession().getUpdatePolicy();
+    }
+
+    public LocalRepository getLocalRepository()
+    {
+        return getSession().getLocalRepository();
+    }
+
+    public LocalRepositoryManager getLocalRepositoryManager()
+    {
+        return getSession().getLocalRepositoryManager();
+    }
+
+    public WorkspaceReader getWorkspaceReader()
+    {
+        return getSession().getWorkspaceReader();
+    }
+
+    public RepositoryListener getRepositoryListener()
+    {
+        return getSession().getRepositoryListener();
+    }
+
+    public TransferListener getTransferListener()
+    {
+        return getSession().getTransferListener();
+    }
+
+    public Map<String, String> getSystemProperties()
+    {
+        return getSession().getSystemProperties();
+    }
+
+    public Map<String, String> getUserProperties()
+    {
+        return getSession().getUserProperties();
+    }
+
+    public Map<String, Object> getConfigProperties()
+    {
+        return getSession().getConfigProperties();
+    }
+
+    public MirrorSelector getMirrorSelector()
+    {
+        return getSession().getMirrorSelector();
+    }
+
+    public ProxySelector getProxySelector()
+    {
+        return getSession().getProxySelector();
+    }
+
+    public AuthenticationSelector getAuthenticationSelector()
+    {
+        return getSession().getAuthenticationSelector();
+    }
+
+    public ArtifactTypeRegistry getArtifactTypeRegistry()
+    {
+        return getSession().getArtifactTypeRegistry();
+    }
+
+    public DependencyTraverser getDependencyTraverser()
+    {
+        return getSession().getDependencyTraverser();
+    }
+
+    public DependencyManager getDependencyManager()
+    {
+        return getSession().getDependencyManager();
+    }
+
+    public DependencySelector getDependencySelector()
+    {
+        return getSession().getDependencySelector();
+    }
+
+    public VersionFilter getVersionFilter()
+    {
+        return getSession().getVersionFilter();
+    }
+
+    public DependencyGraphTransformer getDependencyGraphTransformer()
+    {
+        return getSession().getDependencyGraphTransformer();
+    }
+
+    public SessionData getData()
+    {
+        return getSession().getData();
+    }
+
+    public RepositoryCache getCache()
+    {
+        return getSession().getCache();
+    }
+
+}