/*
* #%L
* Gravia :: Resolver
* %%
* Copyright (C) 2010 - 2014 JBoss by Red Hat
* %%
* 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.
* #L%
*/
package org.jboss.gravia.resolver.spi;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.jboss.gravia.resolver.DefaultEnvironment;
import org.jboss.gravia.resolver.DefaultResolveContext;
import org.jboss.gravia.resolver.DefaultResolver;
import org.jboss.gravia.resolver.ResolveContext;
import org.jboss.gravia.resource.DefaultResourceBuilder;
import org.jboss.gravia.resource.Resource;
import org.jboss.gravia.resource.ResourceBuilder;
import org.jboss.gravia.resource.Version;
import org.jboss.gravia.resource.VersionRange;
import org.jboss.gravia.resource.spi.AbstractResource;
import org.jboss.gravia.runtime.DefaultWiring;
import org.junit.Before;
import org.junit.Rule;
import org.junit.rules.TestName;
/**
* The abstract resolver test.
*
* @author thomas.diesler@jboss.com
* @since 31-May-2010
*/
public abstract class AbstractResolverInternalsTest {
@Rule public TestName testName = new TestName();
AbstractResolver resolver;
AbstractEnvironment environment;
@Before
public void setUp() throws Exception {
environment = new DefaultEnvironment("testStore");
resolver = new DefaultResolver();
// A-1.0.0 => D-1.0.0, B-1.1.0
ResourceBuilder builder = new DefaultResourceBuilder();
builder.addIdentityCapability("resA", new Version("1.0.0"));
builder.addIdentityRequirement("resB", new VersionRange("[1.0,2.0)"));
builder.addIdentityRequirement("resD", new VersionRange("[1.0,2.0)"));
environment.addResource(builder.getResource());
// D-1.0.0 => C-1.0.0
builder = new DefaultResourceBuilder();
builder.addIdentityCapability("resD", new Version("1.0.0"));
builder.addIdentityRequirement("resC", new VersionRange("[1.0,2.0)"));
environment.addResource(builder.getResource());
// B-1.1.0 => C-1.0.0, E-1.1.0
builder = new DefaultResourceBuilder();
builder.addIdentityCapability("resB", new Version("1.1.0"));
builder.addIdentityRequirement("resC", new VersionRange("[1.0,2.0)"));
builder.addIdentityRequirement("resE", new VersionRange("[1.0,2.0)"));
environment.addResource(builder.getResource());
// B-1.0.0
builder = new DefaultResourceBuilder();
builder.addIdentityCapability("resB", new Version("1.0.0"));
builder.addIdentityRequirement("resC", new VersionRange("[1.0,2.0)"));
builder.addIdentityRequirement("resE", new VersionRange("[1.0,2.0)"));
environment.addResource(builder.getResource());
// C-1.1.0
builder = new DefaultResourceBuilder();
builder.addIdentityCapability("resC", new Version("1.1.0"));
environment.addResource(builder.getResource());
// C-1.0.0 (resolved)
builder = new DefaultResourceBuilder();
builder.addIdentityCapability("resC", new Version("1.0.0"));
AbstractResource resC10 = (AbstractResource) builder.getResource();
environment.putWiring(resC10, new DefaultWiring(resC10, null, null));
environment.addResource(resC10);
// E-1.1.0
builder = new DefaultResourceBuilder();
builder.addIdentityCapability("resE", new Version("1.1.0"));
environment.addResource(builder.getResource());
// E-1.0.0
builder = new DefaultResourceBuilder();
builder.addIdentityCapability("resE", new Version("1.0.0"));
environment.addResource(builder.getResource());
}
ResolveContext getResolveContext(List<Resource> mandatory, List<Resource> optional) {
Set<Resource> manres = mandatory != null ? new LinkedHashSet<Resource>(mandatory) : null;
Set<Resource> optres = optional != null ? new LinkedHashSet<Resource>(optional) : null;
return new DefaultResolveContext(environment, manres, optres);
}
}