| /* |
| * 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 |
| * |
| * https://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.apache.ivy; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.text.ParseException; |
| import java.util.ArrayList; |
| import java.util.Collection; |
| |
| import org.apache.ivy.core.module.descriptor.DefaultDependencyDescriptor; |
| import org.apache.ivy.core.module.descriptor.ModuleDescriptor; |
| import org.apache.ivy.core.module.id.ModuleRevisionId; |
| import org.apache.ivy.core.report.ResolveReport; |
| import org.apache.ivy.core.settings.IvySettings; |
| import org.apache.ivy.plugins.repository.file.FileResource; |
| import org.apache.ivy.plugins.resolver.DependencyResolver; |
| import org.apache.ivy.plugins.resolver.util.ResolvedResource; |
| |
| /** |
| * Fixture easing the development of tests requiring to set up a simple repository with some |
| * modules, using micro ivy format to describe the repository. |
| * <p> |
| * Example of use: |
| * </p> |
| * <pre> |
| * public class MyTest { |
| * private TestFixture fixture; |
| * |
| * @Before |
| * public void setUp() throws Exception { |
| * fixture = new TestFixture(); |
| * // additional setup here |
| * } |
| * |
| * @After |
| * public void tearDown() throws Exception { |
| * fixture.clean(); |
| * } |
| * |
| * @Test |
| * public void testXXX() throws Exception { |
| * fixture.addMD("#A;1-> { #B;[1.5,1.6] #C;2.5 }").addMD("#B;1.5->#D;2.0") |
| * .addMD("#B;1.6->#D;2.0").addMD("#C;2.5->#D;[1.0,1.6]").addMD("#D;1.5") |
| * .addMD("#D;1.6").addMD("#D;2.0").init(); |
| * ResolveReport r = fixture.resolve("#A;1"); |
| * // assertions go here |
| * } |
| * } |
| * </pre> |
| */ |
| public class TestFixture { |
| |
| private final Collection<ModuleDescriptor> mds = new ArrayList<>(); |
| |
| private Ivy ivy; |
| |
| public TestFixture() { |
| try { |
| this.ivy = new Ivy(); |
| IvySettings settings = new IvySettings(); |
| settings.defaultInit(); |
| ivy.setSettings(settings); |
| TestHelper.loadTestSettings(ivy.getSettings()); |
| ivy.bind(); |
| } catch (Exception e) { |
| throw new RuntimeException(e); |
| } |
| } |
| |
| public TestFixture addMD(String microIvy) { |
| mds.add(TestHelper.parseMicroIvyDescriptor(microIvy)); |
| return this; |
| } |
| |
| public TestFixture init() throws IOException { |
| TestHelper.fillRepository(getTestRepository(), mds); |
| return this; |
| } |
| |
| private DependencyResolver getTestRepository() { |
| return ivy.getSettings().getResolver("test"); |
| } |
| |
| public IvySettings getSettings() { |
| return ivy.getSettings(); |
| } |
| |
| public Ivy getIvy() { |
| return ivy; |
| } |
| |
| public void clean() { |
| TestHelper.cleanTest(); |
| } |
| |
| public File getIvyFile(String mrid) { |
| ResolvedResource r = getTestRepository().findIvyFileRef( |
| new DefaultDependencyDescriptor(ModuleRevisionId.parse(mrid), false), |
| TestHelper.newResolveData(getSettings())); |
| if (r == null) { |
| throw new IllegalStateException("module not found: " + mrid); |
| } |
| return ((FileResource) r.getResource()).getFile(); |
| } |
| |
| public ResolveReport resolve(String mrid) throws ParseException, |
| IOException { |
| return ivy.resolve(getIvyFile(mrid), TestHelper.newResolveOptions(getSettings())); |
| } |
| |
| } |