blob: 23409ccc1e18aebb615b0d01b45c15c09de7c9b4 [file] [log] [blame]
/*
* 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