blob: 86e8a774de38d032ab8b7bbea5a17de294917fef [file] [log] [blame]
package org.eclipse.aether.internal.test.util;
/*
* 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.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.graph.DependencyNode;
import org.eclipse.aether.internal.test.util.DependencyGraphParser;
import org.junit.Before;
import org.junit.Test;
/**
*/
public class DependencyGraphParserTest
{
private DependencyGraphParser parser;
@Before
public void setup()
{
this.parser = new DependencyGraphParser();
}
@Test
public void testOnlyRoot()
throws IOException
{
String def = "gid:aid:jar:1 scope";
DependencyNode node = parser.parseLiteral( def );
assertNotNull( node );
assertEquals( 0, node.getChildren().size() );
Dependency dependency = node.getDependency();
assertNotNull( dependency );
assertEquals( "scope", dependency.getScope() );
Artifact artifact = dependency.getArtifact();
assertNotNull( artifact );
assertEquals( "gid", artifact.getGroupId() );
assertEquals( "aid", artifact.getArtifactId() );
assertEquals( "jar", artifact.getExtension() );
assertEquals( "1", artifact.getVersion() );
}
@Test
public void testOptionalScope()
throws IOException
{
String def = "gid:aid:jar:1";
DependencyNode node = parser.parseLiteral( def );
assertNotNull( node );
assertEquals( 0, node.getChildren().size() );
Dependency dependency = node.getDependency();
assertNotNull( dependency );
assertEquals( "", dependency.getScope() );
}
@Test
public void testWithChildren()
throws IOException
{
String def =
"gid1:aid1:ext1:ver1 scope1\n" + "+- gid2:aid2:ext2:ver2 scope2\n" + "\\- gid3:aid3:ext3:ver3 scope3\n";
DependencyNode node = parser.parseLiteral( def );
assertNotNull( node );
int idx = 1;
assertNodeProperties( node, idx++ );
List<DependencyNode> children = node.getChildren();
assertEquals( 2, children.size() );
for ( DependencyNode child : children )
{
assertNodeProperties( child, idx++ );
}
}
@Test
public void testDeepChildren()
throws IOException
{
String def =
"gid1:aid1:ext1:ver1\n" + "+- gid2:aid2:ext2:ver2 scope2\n" + "| \\- gid3:aid3:ext3:ver3\n"
+ "\\- gid4:aid4:ext4:ver4 scope4";
DependencyNode node = parser.parseLiteral( def );
assertNodeProperties( node, 1 );
assertEquals( 2, node.getChildren().size() );
assertNodeProperties( node.getChildren().get( 1 ), 4 );
DependencyNode lvl1Node = node.getChildren().get( 0 );
assertNodeProperties( lvl1Node, 2 );
assertEquals( 1, lvl1Node.getChildren().size() );
assertNodeProperties( lvl1Node.getChildren().get( 0 ), 3 );
}
private void assertNodeProperties( DependencyNode node, int idx )
{
assertNodeProperties( node, String.valueOf( idx ) );
}
private void assertNodeProperties( DependencyNode node, String suffix )
{
assertNotNull( node );
Dependency dependency = node.getDependency();
assertNotNull( dependency );
if ( !"".equals( dependency.getScope() ) )
{
assertEquals( "scope" + suffix, dependency.getScope() );
}
Artifact artifact = dependency.getArtifact();
assertNotNull( artifact );
assertEquals( "gid" + suffix, artifact.getGroupId() );
assertEquals( "aid" + suffix, artifact.getArtifactId() );
assertEquals( "ext" + suffix, artifact.getExtension() );
assertEquals( "ver" + suffix, artifact.getVersion() );
}
@Test
public void testComments()
throws IOException
{
String def = "# first line\n#second line\ngid:aid:ext:ver # root artifact asdf:qwer:zcxv:uip";
DependencyNode node = parser.parseLiteral( def );
assertNodeProperties( node, "" );
}
@Test
public void testId()
throws IOException
{
String def = "gid:aid:ext:ver (id)\n\\- ^id";
DependencyNode node = parser.parseLiteral( def );
assertNodeProperties( node, "" );
assertNotNull( node.getChildren() );
assertEquals( 1, node.getChildren().size() );
assertSame( node, node.getChildren().get( 0 ) );
}
@Test
public void testResourceLoading()
throws UnsupportedEncodingException, IOException
{
String prefix = "org/eclipse/aether/internal/test/util/";
String name = "testResourceLoading.txt";
DependencyNode node = parser.parseResource( prefix + name );
assertEquals( 0, node.getChildren().size() );
assertNodeProperties( node, "" );
}
@Test
public void testResourceLoadingWithPrefix()
throws UnsupportedEncodingException, IOException
{
String prefix = "org/eclipse/aether/internal/test/util/";
parser = new DependencyGraphParser( prefix );
String name = "testResourceLoading.txt";
DependencyNode node = parser.parseResource( name );
assertEquals( 0, node.getChildren().size() );
assertNodeProperties( node, "" );
}
@Test
public void testProperties()
throws IOException
{
String def = "gid:aid:ext:ver props=test:foo,test2:fizzle";
DependencyNode node = parser.parseLiteral( def );
assertNodeProperties( node, "" );
Map<String, String> properties = node.getDependency().getArtifact().getProperties();
assertNotNull( properties );
assertEquals( 2, properties.size() );
assertTrue( properties.containsKey( "test" ) );
assertEquals( "foo", properties.get( "test" ) );
assertTrue( properties.containsKey( "test2" ) );
assertEquals( "fizzle", properties.get( "test2" ) );
}
@Test
public void testSubstitutions()
throws IOException
{
parser.setSubstitutions( Arrays.asList( "subst1", "subst2" ) );
String def = "%s:%s:ext:ver";
DependencyNode root = parser.parseLiteral( def );
Artifact artifact = root.getDependency().getArtifact();
assertEquals( "subst2", artifact.getArtifactId() );
assertEquals( "subst1", artifact.getGroupId() );
def = "%s:aid:ext:ver\n\\- %s:aid:ext:ver";
root = parser.parseLiteral( def );
assertEquals( "subst1", root.getDependency().getArtifact().getGroupId() );
assertEquals( "subst2", root.getChildren().get( 0 ).getDependency().getArtifact().getGroupId() );
}
@Test
public void testMultiple()
throws IOException
{
String prefix = "org/eclipse/aether/internal/test/util/";
String name = "testResourceLoading.txt";
List<DependencyNode> nodes = parser.parseMultiResource( prefix + name );
assertEquals( 2, nodes.size() );
assertEquals( "aid", nodes.get( 0 ).getDependency().getArtifact().getArtifactId() );
assertEquals( "aid2", nodes.get( 1 ).getDependency().getArtifact().getArtifactId() );
}
@Test
public void testRootNullDependency()
throws IOException
{
String literal = "(null)\n+- gid:aid:ext:ver";
DependencyNode root = parser.parseLiteral( literal );
assertNull( root.getDependency() );
assertEquals( 1, root.getChildren().size() );
}
@Test
public void testChildNullDependency()
throws IOException
{
String literal = "gid:aid:ext:ver\n+- (null)";
DependencyNode root = parser.parseLiteral( literal );
assertNotNull( root.getDependency() );
assertEquals( 1, root.getChildren().size() );
assertNull( root.getChildren().get( 0 ).getDependency() );
}
@Test
public void testOptional()
throws IOException
{
String def = "gid:aid:jar:1 compile optional";
DependencyNode node = parser.parseLiteral( def );
assertNotNull( node );
assertEquals( 0, node.getChildren().size() );
Dependency dependency = node.getDependency();
assertNotNull( dependency );
assertEquals( "compile", dependency.getScope() );
assertEquals( true, dependency.isOptional() );
}
}