| /* |
| * 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 java.util.ArrayList; |
| import java.util.Collections; |
| import java.util.List; |
| |
| import org.apache.ivy.TestHelper; |
| import org.apache.ivy.util.FileUtil; |
| import org.apache.tools.ant.Project; |
| import org.apache.tools.ant.types.FileSet; |
| import org.apache.tools.ant.types.Path; |
| |
| import junit.framework.TestCase; |
| |
| // CheckStyle:MagicNumber| OFF |
| // The test very often use MagicNumber. Using a constant is less expressive. |
| |
| public class IvyBuildListTest extends TestCase { |
| |
| private File cache; |
| |
| private Project project; |
| |
| private IvyBuildList buildlist; |
| |
| protected void setUp() throws Exception { |
| createCache(); |
| |
| project = TestHelper.newProject(); |
| project.init(); |
| |
| buildlist = new IvyBuildList(); |
| buildlist.setProject(project); |
| |
| System.setProperty("ivy.cache.dir", cache.getAbsolutePath()); |
| } |
| |
| protected void tearDown() throws Exception { |
| cleanCache(); |
| } |
| |
| private void cleanCache() { |
| FileUtil.forceDelete(cache); |
| } |
| |
| private void createCache() { |
| cache = new File("build/cache"); |
| cache.mkdirs(); |
| } |
| |
| private String[] getFiles(IvyBuildList buildlist) { |
| buildlist.setReference("ordered.build.files"); |
| buildlist.execute(); |
| |
| Object o = buildlist.getProject().getReference("ordered.build.files"); |
| assertNotNull(o); |
| assertTrue(o instanceof Path); |
| |
| Path path = (Path) o; |
| String[] files = path.list(); |
| assertNotNull(files); |
| return files; |
| } |
| |
| private void assertListOfFiles(String prefix, String[] expected, String[] actual) { |
| for (int i = 0; i < expected.length; i++) { |
| assertEquals(new File(prefix + expected[i] + "/build.xml").getAbsolutePath(), new File( |
| actual[i]).getAbsolutePath()); |
| } |
| } |
| |
| /* |
| * Those tests use the ivy files A , B , C , D , E in test/buildlist The dependencies are : A -> |
| * C B has no dependency C -> B D -> A , B E has no dependency F -> G G -> F |
| */ |
| |
| public void testSimple() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlist")); |
| fs.setIncludes("**/build.xml"); |
| fs.setExcludes("E2/build.xml,F/build.xml,G/build.xml"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setOnMissingDescriptor("skip"); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(5, files.length); |
| |
| assertListOfFiles("test/buildlist/", new String[] {"B", "C", "A", "D", "E"}, files); |
| } |
| |
| public void testReverse() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlist")); |
| fs.setIncludes("**/build.xml"); |
| fs.setExcludes("E2/build.xml,F/build.xml,G/build.xml"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setReverse(true); |
| buildlist.setOnMissingDescriptor("skip"); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(5, files.length); |
| |
| assertListOfFiles("test/buildlist/", new String[] {"E", "D", "A", "C", "B"}, files); |
| } |
| |
| public void testWithRoot() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlist")); |
| fs.setIncludes("**/build.xml"); |
| fs.setExcludes("E2/**"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setRoot("C"); |
| buildlist.setOnMissingDescriptor("skip"); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(2, files.length); // A and D should be filtered out |
| |
| assertListOfFiles("test/buildlist/", new String[] {"B", "C"}, files); |
| } |
| |
| public void testWithRootCircular() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlist")); |
| fs.setIncludes("**/build.xml"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setRoot("F"); |
| buildlist.setOnMissingDescriptor("skip"); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(2, files.length); // F and G should be in the list |
| } |
| |
| public void testWithTwoRoots() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlist")); |
| fs.setIncludes("**/build.xml"); |
| fs.setExcludes("E2/**"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setRoot("C,E"); |
| buildlist.setOnMissingDescriptor("skip"); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(3, files.length); // A and D should be filtered out |
| |
| assertListOfFiles("test/buildlist/", new String[] {"B", "C", "E"}, files); |
| } |
| |
| public void testWithRootExclude() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlist")); |
| fs.setIncludes("**/build.xml"); |
| fs.setExcludes("E2/**"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setRoot("C"); |
| buildlist.setExcludeRoot(true); |
| buildlist.setOnMissingDescriptor("skip"); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(1, files.length); // A, D and C should be filtered out |
| |
| assertListOfFiles("test/buildlist/", new String[] {"B"}, files); |
| } |
| |
| public void testWithRootAndOnlyDirectDep() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlist")); |
| fs.setIncludes("**/build.xml"); |
| fs.setExcludes("E2/**"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setRoot("A"); |
| buildlist.setOnlydirectdep(true); |
| buildlist.setOnMissingDescriptor("skip"); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(2, files.length); // We should have only A and C |
| |
| assertListOfFiles("test/buildlist/", new String[] {"C", "A"}, files); |
| } |
| |
| public void testWithLeaf() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlist")); |
| fs.setIncludes("**/build.xml"); |
| fs.setExcludes("E2/**"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setLeaf("C"); |
| buildlist.setOnMissingDescriptor("skip"); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(3, files.length); // B should be filtered out |
| |
| assertListOfFiles("test/buildlist/", new String[] {"C", "A", "D"}, files); |
| } |
| |
| public void testWithLeafCircular() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlist")); |
| fs.setIncludes("**/build.xml"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setLeaf("F"); |
| buildlist.setOnMissingDescriptor("skip"); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(2, files.length); |
| } |
| |
| public void testWithTwoLeafs() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlist")); |
| fs.setIncludes("**/build.xml"); |
| fs.setExcludes("E2/**"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setLeaf("C,E"); |
| buildlist.setOnMissingDescriptor("skip"); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(4, files.length); // B should be filtered out |
| |
| assertListOfFiles("test/buildlist/", new String[] {"C", "A", "D", "E"}, files); |
| } |
| |
| public void testWithLeafExclude() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlist")); |
| fs.setIncludes("**/build.xml"); |
| fs.setExcludes("E2/**"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setLeaf("C"); |
| buildlist.setExcludeLeaf(true); |
| buildlist.setOnMissingDescriptor("skip"); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(2, files.length); // B and C should be filtered out |
| |
| assertListOfFiles("test/buildlist/", new String[] {"A", "D"}, files); |
| } |
| |
| public void testWithLeafAndOnlyDirectDep() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlist")); |
| fs.setIncludes("**/build.xml"); |
| fs.setExcludes("E2/**"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setOnMissingDescriptor("skip"); |
| buildlist.setLeaf("C"); |
| buildlist.setOnlydirectdep(true); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(2, files.length); // We must have only A and C |
| |
| assertListOfFiles("test/buildlist/", new String[] {"C", "A"}, files); |
| } |
| |
| public void testRestartFrom() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlist")); |
| fs.setIncludes("**/build.xml"); |
| fs.setExcludes("E2/build.xml,F/build.xml,G/build.xml"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setOnMissingDescriptor("skip"); |
| buildlist.setRestartFrom("C"); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(4, files.length); |
| |
| assertListOfFiles("test/buildlist/", new String[] {"C", "A", "D", "E"}, files); |
| } |
| |
| public void testOnMissingDescriptor() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlist")); |
| fs.setIncludes("**/build.xml"); |
| fs.setExcludes("E2/build.xml,F/build.xml,G/build.xml"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setOnMissingDescriptor(new String("tail")); // IVY-805: new String instance |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(6, files.length); |
| |
| assertListOfFiles("test/buildlist/", new String[] {"B", "C", "A", "D", "E", "H"}, files); |
| } |
| |
| public void testOnMissingDescriptor2() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlist")); |
| fs.setIncludes("**/build.xml"); |
| fs.setExcludes("E2/build.xml,F/build.xml,G/build.xml"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setOnMissingDescriptor(new String("skip")); // IVY-805: new String instance |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(5, files.length); |
| |
| assertListOfFiles("test/buildlist/", new String[] {"B", "C", "A", "D", "E"}, files); |
| } |
| |
| public void testWithModuleWithSameNameAndDifferentOrg() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlist")); |
| fs.setIncludes("**/build.xml"); |
| fs.setExcludes("F/build.xml,G/build.xml"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setOnMissingDescriptor("skip"); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(6, files.length); |
| |
| assertListOfFiles("test/buildlist/", new String[] {"B", "C", "A", "D"}, files); |
| |
| // the order of E and E2 is undefined |
| List other = new ArrayList(); |
| other.add(new File(files[4]).getAbsoluteFile().toURI()); |
| other.add(new File(files[5]).getAbsoluteFile().toURI()); |
| Collections.sort(other); |
| |
| assertEquals(new File("test/buildlist/E/build.xml").getAbsoluteFile().toURI(), other.get(0)); |
| assertEquals(new File("test/buildlist/E2/build.xml").getAbsoluteFile().toURI(), |
| other.get(1)); |
| } |
| |
| public void testNoParents() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlists/testNoParents")); |
| fs.setIncludes("**/build.xml"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setOnMissingDescriptor("skip"); |
| buildlist.setHaltonerror(false); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(5, files.length); |
| |
| assertListOfFiles("test/buildlists/testNoParents/", new String[] {"bootstrap-parent", |
| "ireland", "germany", "master-parent", "croatia"}, files); |
| } |
| |
| public void testOneParent() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlists/testOneParent")); |
| fs.setIncludes("**/build.xml"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setOnMissingDescriptor("skip"); |
| buildlist.setHaltonerror(false); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(5, files.length); |
| |
| assertListOfFiles("test/buildlists/testOneParent/", new String[] {"bootstrap-parent", |
| "master-parent", "croatia", "ireland", "germany"}, files); |
| } |
| |
| public void testTwoParents() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlists/testTwoParents")); |
| fs.setIncludes("**/build.xml"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setOnMissingDescriptor("skip"); |
| buildlist.setHaltonerror(false); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(5, files.length); |
| |
| assertListOfFiles("test/buildlists/testTwoParents/", new String[] {"bootstrap-parent", |
| "master-parent", "croatia", "ireland", "germany"}, files); |
| } |
| |
| public void testRelativePathToParent() { |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlists/testRelativePathToParent")); |
| fs.setIncludes("**/build.xml"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setOnMissingDescriptor("skip"); |
| buildlist.setHaltonerror(false); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(5, files.length); |
| |
| assertListOfFiles("test/buildlists/testRelativePathToParent/", new String[] { |
| "bootstrap-parent", "master-parent", "croatia", "ireland", "germany"}, files); |
| } |
| |
| public void testAbsolutePathToParent() { |
| project.setProperty("master-parent.dir", new File( |
| "test/buildlists/testAbsolutePathToParent/master-parent").getAbsolutePath()); |
| |
| FileSet fs = new FileSet(); |
| fs.setDir(new File("test/buildlists/testAbsolutePathToParent")); |
| fs.setIncludes("**/build.xml"); |
| |
| buildlist.addFileset(fs); |
| buildlist.setOnMissingDescriptor("skip"); |
| buildlist.setHaltonerror(false); |
| |
| String[] files = getFiles(buildlist); |
| |
| assertEquals(5, files.length); |
| |
| assertListOfFiles("test/buildlists/testAbsolutePathToParent/", new String[] { |
| "bootstrap-parent", "master-parent", "croatia", "ireland", "germany"}, files); |
| } |
| |
| } |
| // CheckStyle:MagicNumber| ON |