|
What this is
Other links
The source code
/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.api.project;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import javax.swing.event.ChangeListener;
import org.netbeans.junit.NbTestCase;
import org.netbeans.spi.project.SubprojectProvider;
import org.openide.filesystems.FileObject;
import org.openide.util.Lookup;
import org.openide.util.lookup.Lookups;
/**
* Test {@link ProjectUtils}.
* @author Jesse Glick
*/
public class ProjectUtilsTest extends NbTestCase {
static {
ProjectUtilsTest.class.getClassLoader().setDefaultAssertionStatus(true);
}
public ProjectUtilsTest(String name) {
super(name);
}
public void testHasSubprojectCycles() throws Exception {
// Check static cycle detection.
TestProj a = new TestProj("a");
assertFalse("no cycles in a project with no declared subprojects", ProjectUtils.hasSubprojectCycles(a, null));
a.subprojs = new Project[0];
assertFalse("no cycles in a standalone project", ProjectUtils.hasSubprojectCycles(a, null));
TestProj b = new TestProj("b");
a.subprojs = new Project[] {b};
b.subprojs = new Project[0];
assertFalse("no cycles in a -> b", ProjectUtils.hasSubprojectCycles(a, null));
TestProj c = new TestProj("c");
c.subprojs = new Project[0];
b.subprojs = new Project[] {c};
assertFalse("no cycles in a -> b -> c", ProjectUtils.hasSubprojectCycles(a, null));
TestProj d = new TestProj("d");
d.subprojs = new Project[0];
b.subprojs = new Project[] {d};
c.subprojs = new Project[] {d};
assertFalse("no cycles in a -> {b, c} -> d (DAG)", ProjectUtils.hasSubprojectCycles(a, null));
a.subprojs = new Project[] {a};
assertTrue("self-loop cycle in a -> a", ProjectUtils.hasSubprojectCycles(a, null));
a.subprojs = new Project[] {b};
b.subprojs = new Project[] {a};
assertTrue("simple cycle in a -> b -> a", ProjectUtils.hasSubprojectCycles(a, null));
b.subprojs = new Project[] {c};
c.subprojs = new Project[] {b};
assertTrue("simple cycle not involing master in a -> b -> c -> b", ProjectUtils.hasSubprojectCycles(a, null));
c.subprojs = new Project[] {a};
a.subprojs = new Project[] {b, d};
d.subprojs = new Project[] {a};
assertTrue("multiple cycles in a -> b -> c -> a, a -> d -> a", ProjectUtils.hasSubprojectCycles(a, null));
a.subprojs = new Project[0];
b.subprojs = new Project[0];
assertFalse("no cycle introduced by a -> b in a, b", ProjectUtils.hasSubprojectCycles(a, b));
c.subprojs = new Project[0];
b.subprojs = new Project[] {c};
assertFalse("no cycle introduced by a -> b in a, b -> c", ProjectUtils.hasSubprojectCycles(a, b));
a.subprojs = new Project[] {b};
assertFalse("no cycle introduced by no-op a -> b in a -> b -> c", ProjectUtils.hasSubprojectCycles(a, b));
assertFalse("no cycle introduced by direct a -> c in a -> b -> c", ProjectUtils.hasSubprojectCycles(a, c));
assertTrue("cycle introduced by a -> a in a -> b -> c", ProjectUtils.hasSubprojectCycles(a, a));
assertTrue("cycle introduced by b -> a in a -> b -> c", ProjectUtils.hasSubprojectCycles(b, a));
assertTrue("cycle introduced by c -> a in a -> b -> c", ProjectUtils.hasSubprojectCycles(c, a));
c.subprojs = null;
assertTrue("cycle introduced by c -> a in a -> b -> c (no explicit subprojects in c)", ProjectUtils.hasSubprojectCycles(c, a));
}
/**
* Fake project with subprojects.
*/
private static final class TestProj implements Project, SubprojectProvider {
private final String name;
/**
* Subproject list.
* Use null to not have a SubprojectProvider at all.
*/
public Project[] subprojs = null;
/**
* Create a fake project.
* @param name a name for debugging purposes
*/
public TestProj(String name) {
this.name = name;
}
public Lookup getLookup() {
if (subprojs == null) {
return Lookup.EMPTY;
} else {
return Lookups.singleton(this);
}
}
public Set getSubprojects() {
assert subprojs != null;
return new HashSet(Arrays.asList(subprojs));
}
public FileObject getProjectDirectory() {
// irrelevant
return null;
}
public void addChangeListener(ChangeListener l) {}
public void removeChangeListener(ChangeListener l) {}
public String toString() {
return name;
}
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.