callgraph/src/test/java/org/netbeans/lib/callgraph/ArgumentsTest.java
author Tim Boudreau <tboudreau@netbeans.org>
Sat, 03 Sep 2016 02:41:36 -0400
changeset 18374 04a79821e760
parent 18372 25e1d840480b
permissions -rw-r--r--
Eliminate duplicates in graph files
     1 package org.netbeans.lib.callgraph;
     2 
     3 import java.io.File;
     4 import java.io.IOException;
     5 import java.util.ArrayList;
     6 import java.util.List;
     7 import org.junit.Test;
     8 import static org.junit.Assert.*;
     9 
    10 /**
    11  * Tests argument parsing.
    12  *
    13  * @author Tim Boudreau
    14  */
    15 public class ArgumentsTest {
    16 
    17     @Test
    18     public void testBooleanSwitches() throws IOException {
    19         File tmpdir = new File(System.getProperty("java.io.tmpdir")).getCanonicalFile();
    20         String tmp = tmpdir.getAbsolutePath();
    21 
    22         Arguments args = new Arguments("-s", tmp);
    23         assertFalse(args.isMaven());
    24         assertTrue(args.isShortNames());
    25         assertTrue(args.isSelfReferences());
    26         assertTrue(args.folders().contains(new File(tmp)));
    27 
    28         args = new Arguments("-n", tmp);
    29         assertFalse(args.isShortNames());
    30         assertFalse(args.isSelfReferences());
    31         assertTrue(args.folders().contains(new File(tmp)));
    32 
    33         args = new Arguments("-n", "-o", tmp + File.separator + "out.txt", 
    34                 "--exclude", "foo.bar,foo.baz", System.getProperty("java.io.tmpdir"));
    35         assertFalse(args.isShortNames());
    36         assertFalse(args.isSelfReferences());
    37         assertTrue("Looking for " + tmp + " but got " + args.folders().toString(), args.folders().contains(new File(tmp)));
    38         assertNotNull(args.methodGraphFile());
    39         assertEquals(new File(tmpdir, "out.txt"), args.methodGraphFile());
    40         assertFalse(args.excludePrefixes().isEmpty());
    41         assertTrue(args.excludePrefixes().contains("foo.bar"));
    42         assertTrue(args.excludePrefixes().contains("foo.baz"));
    43     }
    44 
    45     @Test
    46     public void testBuilder() throws IOException {
    47         File tmpdir = new File(System.getProperty("java.io.tmpdir"));
    48         String tmp = tmpdir.getAbsolutePath();
    49         CallgraphControl ctrl = Callgraph.configure().classGraphOutput(new File(tmpdir, "classes.txt"))
    50                 .excludePrefix("foo.bar").excludePrefix("baz.quux")
    51                 .ignoreSelfReferences().quiet().methodGraphOutput(new File(tmpdir, "methods.txt"))
    52                 .addSourceParent(tmpdir).packageGraphOutput(new File(tmpdir, "pkgs.txt")).build();
    53     }
    54 
    55     @Test(expected = Arguments.InvalidArgumentsException.class)
    56     public void testNoArguments() throws IOException {
    57         new Arguments();
    58     }
    59 
    60     @Test(expected = Arguments.InvalidArgumentsException.class)
    61     public void testQuietAndNoOuput() throws IOException {
    62         new Arguments("-q", System.getProperty("java.io.tmpdir"));
    63     }
    64 
    65     @Test(expected = Arguments.InvalidArgumentsException.class)
    66     public void testNonExistentFolder() throws IOException {
    67         new Arguments("/" + System.currentTimeMillis());
    68     }
    69     
    70     @Test
    71     public void testGradleScan() throws IOException {
    72         File tmp = new File(System.getProperty("java.io.tmpdir"));
    73         File dir = new File(tmp, ArgumentsTest.class.getSimpleName() + "_" + System.currentTimeMillis());
    74         File project1 = new File(dir, "prj");
    75         File project2 = new File(dir, "prj2");
    76         File build1 = new File(project1, "a.gradle");
    77         File build2 = new File(project2, "b.gradle");
    78 
    79         File src1 = new File(project1, "src");
    80         File main1 = new File(src1, "main");
    81         File java1 = new File(main1, "java");
    82 
    83         File src2 = new File(project2, "src");
    84         File main2 = new File(src2, "main");
    85         File java2 = new File(main2, "java");
    86 
    87         assertTrue(java1.mkdirs());
    88         assertTrue(java2.mkdirs());
    89         build1.createNewFile();
    90         build2.createNewFile();
    91         java1 = java1.getCanonicalFile();
    92         java2 = java2.getCanonicalFile();
    93         
    94         try {
    95             Arguments args = new Arguments(dir.getAbsolutePath());
    96             
    97             assertTrue(args.hasGradleFile(project1));
    98             assertTrue(args.hasGradleFile(project2));
    99             
   100             List<String> errors = new ArrayList<>();
   101             args.findGradleSubfolders(errors);
   102             assertFalse(args.folders().isEmpty());
   103             assertEquals(args.folders().toString(), 2, args.folders().size());
   104             assertTrue(errors + "", errors.isEmpty());
   105 
   106             
   107             args = new Arguments("--gradle", "-s", dir.getAbsolutePath());
   108             
   109             assertTrue(args.isGradle());
   110             assertTrue(args.isShortNames());
   111             assertTrue(args.isSelfReferences());
   112             assertTrue(args.folders().contains(java1));
   113             assertTrue(args.folders().contains(java2));
   114         } finally {
   115             // Clean up
   116             assertTrue(build1.delete());
   117             assertTrue(build2.delete());
   118             assertTrue(java1.delete());
   119             assertTrue(java2.delete());
   120             assertTrue(main1.delete());
   121             assertTrue(main2.delete());
   122             assertTrue(src1.delete());
   123             assertTrue(src2.delete());
   124             assertTrue(project1.delete());
   125             assertTrue(project2.delete());
   126             assertTrue(dir.delete());
   127         }
   128         
   129     }
   130 
   131     @Test
   132     public void testMavenScan() throws IOException {
   133         File tmp = new File(System.getProperty("java.io.tmpdir"));
   134         File dir = new File(tmp, ArgumentsTest.class.getSimpleName() + "_" + System.currentTimeMillis());
   135         File project1 = new File(dir, "prj");
   136         File project2 = new File(dir, "prj2");
   137         File pom1 = new File(project1, "pom.xml");
   138         File pom2 = new File(project2, "pom.xml");
   139 
   140         File src1 = new File(project1, "src");
   141         File main1 = new File(src1, "main");
   142         File java1 = new File(main1, "java");
   143 
   144         File src2 = new File(project2, "src");
   145         File main2 = new File(src2, "main");
   146         File java2 = new File(main2, "java");
   147 
   148         assertTrue(java1.mkdirs());
   149         assertTrue(java2.mkdirs());
   150         pom1.createNewFile();
   151         pom2.createNewFile();
   152         java1 = java1.getCanonicalFile();
   153         java2 = java2.getCanonicalFile();
   154         try {
   155 
   156             Arguments args = new Arguments("--maven", "-s", dir.getAbsolutePath());
   157             assertTrue(args.isMaven());
   158             assertTrue(args.isShortNames());
   159             assertTrue(args.isSelfReferences());
   160             assertTrue(args.folders().contains(java1));
   161             assertTrue(args.folders().contains(java2));
   162         } finally {
   163             // Clean up
   164             assertTrue(pom1.delete());
   165             assertTrue(pom2.delete());
   166             assertTrue(java1.delete());
   167             assertTrue(java2.delete());
   168             assertTrue(main1.delete());
   169             assertTrue(main2.delete());
   170             assertTrue(src1.delete());
   171             assertTrue(src2.delete());
   172             assertTrue(project1.delete());
   173             assertTrue(project2.delete());
   174             assertTrue(dir.delete());
   175         }
   176     }
   177 
   178     
   179     @Test
   180     public void testAntScan() throws IOException {
   181         File tmp = new File(System.getProperty("java.io.tmpdir"));
   182         File dir = new File(tmp, ArgumentsTest.class.getSimpleName() + "_" + System.currentTimeMillis());
   183         File project1 = new File(dir, "prj");
   184         File project2 = new File(dir, "prj2");
   185         File pom1 = new File(project1, "build.xml");
   186         File pom2 = new File(project2, "build.xml");
   187 
   188         File java1 = new File(project1, "src");
   189         File java2 = new File(project2, "src");
   190 
   191         assertTrue(java1.mkdirs());
   192         assertTrue(java2.mkdirs());
   193         pom1.createNewFile();
   194         pom2.createNewFile();
   195         dir = dir.getCanonicalFile();
   196         java1 = java1.getCanonicalFile();
   197         java2 = java2.getCanonicalFile();
   198         
   199         Arguments a = new Arguments("-v", dir.getAbsolutePath());
   200         assertEquals(1, a.folders().size());
   201         assertEquals(dir, a.folders().iterator().next());
   202         List<String> errors = new ArrayList<>();
   203         a.findAntSubfolders(errors);
   204         assertTrue(errors.isEmpty());
   205         System.out.println("FLDS: ");
   206         for (File f : a.folders()) {
   207             System.out.println("  " + f.getAbsolutePath());
   208         }
   209         assertEquals(2, a.folders().size());
   210         assertFalse(a.folders().isEmpty());
   211         assertTrue(a.folders().contains(java1));
   212         assertTrue(a.folders().contains(java2));
   213         try {
   214 
   215             Arguments args = new Arguments("--ant", "-s", dir.getAbsolutePath());
   216             assertTrue(args.isAnt());
   217             assertTrue(args.isShortNames());
   218             assertTrue(args.isSelfReferences());
   219             assertTrue(args.folders().contains(java1));
   220             assertTrue(args.folders().contains(java2));
   221         } finally {
   222             // Clean up
   223             assertTrue(pom1.delete());
   224             assertTrue(pom2.delete());
   225             assertTrue(java1.delete());
   226             assertTrue(java2.delete());
   227             assertTrue(project1.delete());
   228             assertTrue(project2.delete());
   229             assertTrue(dir.delete());
   230         }
   231     }
   232     
   233 }