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