1 19 20 package org.apache.tools.ant.module.api.support; 21 22 import java.io.IOException ; 23 import java.util.ArrayList ; 24 import java.util.Comparator ; 25 import java.util.List ; 26 import java.util.SortedSet ; 27 import java.util.TreeSet ; 28 import org.apache.tools.ant.module.api.AntProjectCookie; 29 import org.netbeans.junit.NbTestCase; 30 import org.openide.filesystems.FileObject; 31 import org.openide.filesystems.FileUtil; 32 import org.w3c.dom.Element ; 33 34 37 41 public class TargetListerTest extends NbTestCase { 42 43 public TargetListerTest(String name) { 44 super(name); 45 } 46 47 private FileObject testdir; 48 49 @Override 50 protected void setUp() throws Exception { 51 super.setUp(); 52 FileObject masterTestdir = FileUtil.toFileObject(getDataDir()); 53 assertNotNull("testdir unit/data exists", masterTestdir); 54 testdir = masterTestdir.getFileObject("targetlister"); 55 assertNotNull("testdir unit/data/targetlister exists", testdir); 56 } 57 58 public void testSimpleUsage() throws Exception { 59 FileObject simple = testdir.getFileObject("simple.xml"); 60 assertNotNull("simple.xml found", simple); 61 List <TargetLister.Target> targets = getTargets(simple); 62 assertEquals("five targets", 5, targets.size()); 63 TargetLister.Target t = targets.get(0); 65 assertEquals("correct name #1", "-internal", t.getName()); 66 assertEquals("correct qname #1", "simple.-internal", t.getQualifiedName()); 67 Element e = t.getElement(); 68 assertEquals("correct element name #1", "target", e.getLocalName()); 69 assertEquals("correct name attribute #1", "-internal", e.getAttribute("name")); 70 AntProjectCookie apc = TargetLister.getAntProjectCookie(simple); 71 assertEquals("element in script #1", apc.getDocument(), e.getOwnerDocument()); 72 assertEquals("correct script #1", apc, t.getScript()); 73 assertFalse("not described #1", t.isDescribed()); 74 assertTrue("internal #1", t.isInternal()); 75 assertFalse("not overridden #1", t.isOverridden()); 76 assertFalse("not default #1", t.isDefault()); 77 t = targets.get(1); 78 assertEquals("correct name #2", "-internal-described", t.getName()); 79 assertTrue("described #2", t.isDescribed()); 80 assertTrue("internal #2", t.isInternal()); 81 assertFalse("not overridden #2", t.isOverridden()); 82 assertFalse("not default #2", t.isDefault()); 83 t = targets.get(2); 84 assertEquals("correct name #3", "described", t.getName()); 85 assertTrue("described #3", t.isDescribed()); 86 assertFalse("not internal #3", t.isInternal()); 87 assertFalse("not overridden #3", t.isOverridden()); 88 assertFalse("not default #3", t.isDefault()); 89 t = targets.get(3); 90 assertEquals("correct name #4", "main", t.getName()); 91 assertFalse("not described #4", t.isDescribed()); 92 assertFalse("not internal #4", t.isInternal()); 93 assertFalse("not overridden #4", t.isOverridden()); 94 assertTrue("default #4", t.isDefault()); 95 t = targets.get(4); 96 assertEquals("correct name #5", "undescribed", t.getName()); 97 assertFalse("not described #5", t.isDescribed()); 98 assertFalse("not internal #5", t.isInternal()); 99 assertFalse("not overridden #5", t.isOverridden()); 100 assertFalse("not default #5", t.isDefault()); 101 } 102 103 public void testBasicImportAndOverrides() throws IOException { 104 FileObject importing = testdir.getFileObject("importing.xml"); 105 assertNotNull("importing.xml found", importing); 106 List <TargetLister.Target> targets = getTargets(importing); 107 assertEquals("seven targets", 7, targets.size()); 108 TargetLister.Target t = targets.get(0); 111 assertEquals("correct qname #1", "dir1/dir3/subimported.subtarget3", t.getQualifiedName()); 112 assertFalse("not described #1", t.isDescribed()); 113 assertFalse("not internal #1", t.isInternal()); 114 assertFalse("not overridden #1", t.isOverridden()); 115 assertFalse("not default #1", t.isDefault()); 116 t = targets.get(1); 117 assertEquals("correct qname #2", "dir1/dir3/subimported.whatever", t.getQualifiedName()); 118 assertFalse("not described #2", t.isDescribed()); 119 assertFalse("not internal #2", t.isInternal()); 120 assertTrue("overridden #2", t.isOverridden()); 121 assertFalse("not default #2", t.isDefault()); 122 t = targets.get(2); 123 assertEquals("correct qname #3", "dir1/imported.subtarget1", t.getQualifiedName()); 124 assertFalse("not described #3", t.isDescribed()); 125 assertFalse("not internal #3", t.isInternal()); 126 assertTrue("overridden #3", t.isOverridden()); 127 assertFalse("not default #3", t.isDefault()); 128 t = targets.get(3); 129 assertEquals("correct qname #4", "dir1/imported.subtarget2", t.getQualifiedName()); 130 assertFalse("not described #4", t.isDescribed()); 131 assertFalse("not internal #4", t.isInternal()); 132 assertFalse("not overridden #4", t.isOverridden()); 133 assertFalse("not default #4", t.isDefault()); 134 t = targets.get(4); 135 assertEquals("correct qname #5", "dir1/imported.whatever", t.getQualifiedName()); 136 assertFalse("not described #5", t.isDescribed()); 137 assertFalse("not internal #5", t.isInternal()); 138 assertFalse("not overridden #5", t.isOverridden()); 139 assertFalse("not default #5", t.isDefault()); 140 t = targets.get(5); 141 assertEquals("correct qname #6", "importing.main", t.getQualifiedName()); 142 assertFalse("not described #6", t.isDescribed()); 143 assertFalse("not internal #6", t.isInternal()); 144 assertFalse("not overridden #6", t.isOverridden()); 145 assertTrue("default #6", t.isDefault()); 146 t = targets.get(6); 147 assertEquals("correct qname #7", "importing.subtarget1", t.getQualifiedName()); 148 assertTrue("described #7", t.isDescribed()); 149 assertFalse("not internal #7", t.isInternal()); 150 assertFalse("not overridden #7", t.isOverridden()); 151 assertFalse("not default #7", t.isDefault()); 152 } 153 154 public void testImportedDefaultAndDifferentBasedir() throws Exception { 155 FileObject importing4 = testdir.getFileObject("importing4.xml"); 157 assertNotNull("importing4.xml found", importing4); 158 List <TargetLister.Target> targets = getTargets(importing4); 159 assertEquals("three targets", 3, targets.size()); 160 TargetLister.Target t = targets.get(0); 162 assertEquals("correct qname #1", "dir2/imported2.subtarget4", t.getQualifiedName()); 163 assertTrue("overridden #1", t.isOverridden()); 164 assertFalse("not default #1", t.isDefault()); 165 t = targets.get(1); 166 assertEquals("correct qname #2", "dir2/imported2.whatever", t.getQualifiedName()); 167 assertFalse("not overridden #2", t.isOverridden()); 168 assertTrue("default #2", t.isDefault()); 169 t = targets.get(2); 170 assertEquals("correct qname #3", "importing4.subtarget4", t.getQualifiedName()); 171 assertFalse("not overridden #3", t.isOverridden()); 172 assertFalse("not default #3", t.isDefault()); 173 } 174 175 176 public void testRecursiveImport() throws Exception { 177 FileObject rec1 = testdir.getFileObject("recursive1.xml"); 178 assertNotNull("recursive1.xml found", rec1); 179 List <TargetLister.Target> targets = getTargets(rec1); 180 assertEquals("two targets", 2, targets.size()); 181 TargetLister.Target t = targets.get(0); 182 assertEquals("correct qname #1", "recursive1.x", t.getQualifiedName()); 183 assertTrue("default #1", t.isDefault()); 184 t = targets.get(1); 185 assertEquals("correct qname #2", "recursive2.y", t.getQualifiedName()); 186 assertFalse("not default #2", t.isDefault()); 187 } 188 189 public void testComputedImports() throws Exception { 190 FileObject importing = testdir.getFileObject("computedimports/importing.xml"); 191 assertNotNull("importing.xml found", importing); 192 List <TargetLister.Target> targets = getTargets(importing); 193 assertEquals("three targets", 3, targets.size()); 194 TargetLister.Target t = targets.get(0); 195 assertEquals("correct qname #1", "importing.master", t.getQualifiedName()); 196 t = targets.get(1); 197 assertEquals("correct qname #2", "subdir/imported1.foundme", t.getQualifiedName()); 198 t = targets.get(2); 199 assertEquals("correct qname #3", "subdir/imported3.intermediate", t.getQualifiedName()); 200 FileObject importing2 = testdir.getFileObject("computedimports/subdir/importing2.xml"); 201 assertNotNull("importing2.xml found", importing2); 202 targets = getTargets(importing2); 203 assertEquals("three targets", 3, targets.size()); 204 t = targets.get(0); 205 assertEquals("correct qname #1", "subdir/imported1.foundme", t.getQualifiedName()); 206 t = targets.get(1); 207 assertEquals("correct qname #2", "subdir/imported3.intermediate", t.getQualifiedName()); 208 t = targets.get(2); 209 assertEquals("correct qname #3", "subdir/importing2.master", t.getQualifiedName()); 210 } 211 212 public void testIndirectOverride() throws Exception { 213 FileObject a = testdir.getFileObject("indirectoverride/a.xml"); 214 assertNotNull("a.xml found", a); 215 List <TargetLister.Target> targets = getTargets(a); 216 assertEquals("two targets", 2, targets.size()); 217 TargetLister.Target t = targets.get(0); 218 assertEquals("correct qname", "a.x", t.getQualifiedName()); 219 assertFalse("not overridden", t.isOverridden()); 220 t = targets.get(1); 221 assertEquals("correct qname", "c.x", t.getQualifiedName()); 222 assertTrue("#67694: imported version is overridden", t.isOverridden()); 223 } 224 225 private static List <TargetLister.Target> getTargets(FileObject fo) throws IOException { 226 AntProjectCookie apc = TargetLister.getAntProjectCookie(fo); 227 SortedSet <TargetLister.Target> targets = new TreeSet <TargetLister.Target>(new TargetComparator()); 228 targets.addAll(TargetLister.getTargets(apc)); 229 return new ArrayList <TargetLister.Target>(targets); 230 } 231 232 233 private static final class TargetComparator implements Comparator <TargetLister.Target> { 234 235 public TargetComparator() {} 236 237 public int compare(TargetLister.Target t1, TargetLister.Target t2) { 238 int x = t1.getQualifiedName().compareTo(t2.getQualifiedName()); 239 if (x != 0) { 240 return x; 241 } else { 242 return System.identityHashCode(t2) - System.identityHashCode(t1); 243 } 244 } 245 246 } 247 248 } 249 | Popular Tags |