/**
* Copyright (C) 2012 Red Hat, Inc. (jdcasey@commonjava.org)
*
* Licensed 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.
*/
package org.commonjava.cartographer.tck.graph.traverse.buildorder;
import org.commonjava.cartographer.graph.RelationshipGraph;
import org.commonjava.cartographer.graph.filter.DependencyFilter;
import org.commonjava.maven.atlas.graph.rel.SimpleDependencyRelationship;
import org.commonjava.maven.atlas.graph.rel.SimpleParentRelationship;
import org.commonjava.cartographer.graph.traverse.BuildOrderTraversal;
import org.commonjava.cartographer.graph.traverse.model.BuildOrder;
import org.commonjava.maven.atlas.ident.DependencyScope;
import org.commonjava.maven.atlas.ident.ref.ProjectRef;
import org.commonjava.maven.atlas.ident.ref.ProjectVersionRef;
import org.commonjava.maven.atlas.ident.ref.SimpleProjectVersionRef;
import org.junit.Test;
import java.net.URI;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
/**
* Created by jdcasey on 8/24/15.
*/
public class DependencyExcludesBuildOrderTCK
extends AbstractBuildOrderTCK
{
@Test
public void run()
throws Exception
{
final ProjectVersionRef d = new SimpleProjectVersionRef( "group.id", "d", "4" );
final ProjectVersionRef c = new SimpleProjectVersionRef( "group.id", "c", "3" );
final ProjectVersionRef b = new SimpleProjectVersionRef( "group.id", "b", "2" );
final ProjectVersionRef a = new SimpleProjectVersionRef( "group.id", "a", "1" );
final Map<ProjectVersionRef, ProjectVersionRef> relativeOrder =
new HashMap<ProjectVersionRef, ProjectVersionRef>();
relativeOrder.put( c, b );
relativeOrder.put( b, a );
final URI source = sourceURI();
final RelationshipGraph graph = simpleGraph( c );
/* @formatter:off */
graph.storeRelationships( new SimpleParentRelationship( c ),
new SimpleDependencyRelationship( source, c, b.asJarArtifact(), null, 0, false, false, false, d ),
new SimpleDependencyRelationship( source, b, a.asJarArtifact(), DependencyScope.runtime, 0, false, false, false ),
new SimpleDependencyRelationship( source, b, d.asJarArtifact(), DependencyScope.runtime, 1, false, false, false )
);
/* @formatter:on */
assertThat( graph.getAllRelationships()
.size(), equalTo( 3 ) );
final BuildOrderTraversal bo = new BuildOrderTraversal( new DependencyFilter( DependencyScope.runtime ) );
graph.traverse( bo );
final BuildOrder buildOrderObj = bo.getBuildOrder();
final List<ProjectRef> buildOrder = buildOrderObj.getOrder();
logger.info( "Build order: {}", buildOrder );
assertThat( buildOrder.size(), equalTo( 3 ) );
assertRelativeOrder( relativeOrder, buildOrder );
}
}