| /* |
| * 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. |
| * |
| */ |
| package org.apache.ivy.ant; |
| |
| import java.io.File; |
| |
| import org.apache.ivy.Ivy; |
| import org.apache.ivy.TestHelper; |
| import org.apache.ivy.core.settings.IvySettings; |
| import org.apache.ivy.plugins.resolver.DependencyResolver; |
| import org.apache.ivy.plugins.resolver.IBiblioResolver; |
| import org.apache.ivy.plugins.resolver.IvyRepResolver; |
| import org.apache.tools.ant.BuildException; |
| import org.apache.tools.ant.Project; |
| import org.apache.tools.ant.types.Reference; |
| |
| import junit.framework.TestCase; |
| |
| public class IvyConfigureTest extends TestCase { |
| private IvyConfigure configure; |
| |
| private Project project; |
| |
| protected void setUp() throws Exception { |
| project = TestHelper.newProject(); |
| project.setProperty("myproperty", "myvalue"); |
| |
| configure = new IvyConfigure(); |
| configure.setProject(project); |
| } |
| |
| private Ivy getIvyInstance() { |
| IvyTask task = new IvyTask() { |
| public void doExecute() throws BuildException { |
| } |
| }; |
| task.setProject(project); |
| task.init(); |
| |
| Reference ref = new Reference(configure.getSettingsId()); |
| // ref.setProject(project); |
| task.setSettingsRef(ref); |
| return task.getIvyInstance(); |
| } |
| |
| public void testDefaultCacheDir() { |
| // test with an URL |
| configure.setUrl(getClass().getResource("ivysettings-defaultCacheDir.xml")); |
| configure.setSettingsId("test"); |
| configure.execute(); |
| |
| assertEquals(new File("mycache").getAbsolutePath(), |
| project.getProperty("ivy.cache.dir.test")); |
| |
| // test with a File |
| project = TestHelper.newProject(); |
| configure = new IvyConfigure(); |
| configure.setProject(project); |
| configure.setFile(new File("test/java/org/apache/ivy/ant/ivysettings-defaultCacheDir.xml")); |
| configure.setSettingsId("test2"); |
| configure.execute(); |
| |
| assertEquals(new File("mycache").getAbsolutePath(), |
| project.getProperty("ivy.cache.dir.test2")); |
| |
| // test if no defaultCacheDir is specified |
| project = TestHelper.newProject(); |
| configure = new IvyConfigure(); |
| configure.setProject(project); |
| configure |
| .setFile(new File("test/java/org/apache/ivy/ant/ivysettings-noDefaultCacheDir.xml")); |
| configure.setSettingsId("test3"); |
| configure.execute(); |
| |
| assertNotNull(project.getProperty("ivy.cache.dir.test3")); |
| } |
| |
| public void testDefault() throws Exception { |
| // by default settings look in the current directory for an ivysettings.xml file... |
| // but Ivy itself has one, and we don't want to use it |
| configure.getProject().setProperty("ivy.settings.file", "no/settings/will/use/default.xml"); |
| configure.execute(); |
| |
| IvySettings settings = getIvyInstance().getSettings(); |
| assertNotNull(settings.getDefaultResolver()); |
| |
| DependencyResolver publicResolver = settings.getResolver("public"); |
| assertNotNull(publicResolver); |
| assertTrue(publicResolver instanceof IBiblioResolver); |
| IBiblioResolver ibiblio = (IBiblioResolver) publicResolver; |
| assertTrue(ibiblio.isM2compatible()); |
| } |
| |
| public void testDefault14() throws Exception { |
| // by default settings look in the current directory for an ivysettings.xml file... |
| // but Ivy itself has one, and we don't want to use it |
| configure.getProject().setProperty("ivy.settings.file", "no/settings/will/use/default.xml"); |
| configure.getProject().setProperty("ivy.14.compatible", "true"); |
| configure.execute(); |
| |
| IvySettings settings = getIvyInstance().getSettings(); |
| assertNotNull(settings.getDefaultResolver()); |
| |
| DependencyResolver publicResolver = settings.getResolver("public"); |
| assertTrue(publicResolver instanceof IvyRepResolver); |
| } |
| |
| public void testFile() throws Exception { |
| configure.setFile(new File("test/repositories/ivysettings.xml")); |
| |
| configure.execute(); |
| |
| Ivy ivy = getIvyInstance(); |
| assertNotNull(ivy); |
| IvySettings settings = ivy.getSettings(); |
| assertNotNull(settings); |
| |
| assertEquals(new File("build/cache").getAbsoluteFile(), settings.getDefaultCache()); |
| assertEquals(new File("test/repositories/ivysettings.xml").getAbsolutePath(), settings |
| .getVariables().getVariable("ivy.settings.file")); |
| assertEquals( |
| new File("test/repositories/ivysettings.xml").toURI().toURL().toExternalForm(), |
| settings.getVariables().getVariable("ivy.settings.url")); |
| assertEquals(new File("test/repositories").getAbsolutePath(), settings.getVariables() |
| .getVariable("ivy.settings.dir")); |
| assertEquals("myvalue", settings.getVariables().getVariable("myproperty")); |
| } |
| |
| public void testURL() throws Exception { |
| String confUrl = new File("test/repositories/ivysettings-url.xml").toURI().toURL() |
| .toExternalForm(); |
| String confDirUrl = new File("test/repositories").toURI().toURL().toExternalForm(); |
| if (confDirUrl.endsWith("/")) { |
| confDirUrl = confDirUrl.substring(0, confDirUrl.length() - 1); |
| } |
| configure.setUrl(confUrl); |
| |
| configure.execute(); |
| |
| IvySettings settings = getIvyInstance().getSettings(); |
| |
| assertEquals(new File("build/cache").getAbsoluteFile(), settings.getDefaultCache()); |
| assertEquals(confUrl, settings.getVariables().getVariable("ivy.settings.url")); |
| assertEquals(confDirUrl, settings.getVariables().getVariable("ivy.settings.dir")); |
| assertEquals("myvalue", settings.getVariables().getVariable("myproperty")); |
| } |
| |
| public void testAntProperties() throws Exception { |
| String confUrl = IvyConfigureTest.class.getResource("ivysettings-test.xml") |
| .toExternalForm(); |
| configure.setUrl(confUrl); |
| |
| configure.execute(); |
| |
| IvySettings settings = getIvyInstance().getSettings(); |
| assertNotNull(settings); |
| |
| assertEquals("myvalue", settings.getVariables().getVariable("myproperty")); |
| assertEquals("myvalue", settings.getDefaultResolver().getName()); |
| } |
| |
| public void testOverrideVariables() throws Exception { |
| String confUrl = IvyConfigureTest.class.getResource("ivysettings-props.xml") |
| .toExternalForm(); |
| configure.setUrl(confUrl); |
| |
| configure.execute(); |
| |
| IvySettings settings = getIvyInstance().getSettings(); |
| assertNotNull(settings); |
| |
| assertEquals("lib/test/[artifact]-[revision].[ext]", |
| settings.getVariables().getVariable("ivy.retrieve.pattern")); |
| } |
| |
| public void testExposeAntProperties() throws Exception { |
| String confUrl = IvyConfigureTest.class.getResource("ivysettings-props.xml") |
| .toExternalForm(); |
| configure.setUrl(confUrl); |
| configure.setSettingsId("this.id"); |
| |
| configure.execute(); |
| |
| assertNotNull(getIvyInstance()); |
| |
| assertEquals("value", configure.getProject().getProperty("ivy.test.variable")); |
| assertEquals("value", configure.getProject().getProperty("ivy.test.variable.this.id")); |
| } |
| |
| public void testIncludeTwice() throws Exception { |
| // IVY-601 |
| configure.setFile(new File("test/java/org/apache/ivy/ant/ivysettings-include-twice.xml")); |
| |
| configure.execute(); |
| |
| assertNotNull(getIvyInstance()); |
| } |
| |
| public void testOverrideTrue() throws Exception { |
| configure.setFile(new File("test/repositories/ivysettings.xml")); |
| configure.execute(); |
| |
| Ivy ivy = getIvyInstance(); |
| assertNotNull(ivy); |
| |
| configure = new IvyConfigure(); |
| configure.setProject(project); |
| configure.setOverride("true"); |
| configure.setFile(new File("test/repositories/ivysettings.xml")); |
| configure.execute(); |
| assertNotNull(getIvyInstance()); |
| |
| assertTrue(ivy != getIvyInstance()); |
| } |
| |
| public void testOverrideFalse() throws Exception { |
| configure.setFile(new File("test/repositories/ivysettings.xml")); |
| configure.execute(); |
| |
| Ivy ivy = getIvyInstance(); |
| assertNotNull(ivy); |
| |
| IvyConfigure newAntSettings = new IvyConfigure(); |
| newAntSettings.setProject(project); |
| newAntSettings.setOverride("false"); |
| newAntSettings.setFile(new File("test/repositories/ivysettings.xml")); |
| newAntSettings.execute(); |
| |
| assertTrue(ivy == getIvyInstance()); |
| } |
| |
| public void testOverrideNotAllowed() throws Exception { |
| configure.setFile(new File("test/repositories/ivysettings.xml")); |
| configure.execute(); |
| |
| Ivy ivy = getIvyInstance(); |
| assertNotNull(ivy); |
| |
| configure = new IvyConfigure(); |
| configure.setProject(project); |
| configure.setOverride("notallowed"); |
| configure.setFile(new File("test/repositories/ivysettings.xml")); |
| |
| try { |
| configure.execute(); |
| fail("calling settings twice with the same id with " |
| + "override=notallowed should raise an exception"); |
| } catch (BuildException e) { |
| assertTrue(e.getMessage().indexOf("notallowed") != -1); |
| assertTrue(e.getMessage().indexOf(configure.getSettingsId()) != -1); |
| } |
| } |
| |
| public void testInvalidOverride() throws Exception { |
| try { |
| configure.setOverride("unknown"); |
| fail("settings override with invalid value should raise an exception"); |
| } catch (Exception e) { |
| assertTrue(e.getMessage().indexOf("unknown") != -1); |
| } |
| } |
| |
| } |