summaryrefslogtreecommitdiff
path: root/support/latex-dependency-grapher/source/test/java/LatexHelperTest.java
blob: 13660f525b9c9c8f46664543f7b38d6a83a549b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
import ch.bfh.lpdg.DependencyScanner;
import ch.bfh.lpdg.LatexHelper;
import ch.bfh.lpdg.datastructure.DependencyType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Arrays;
import java.util.Collections;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class LatexHelperTest {

    private Path copyFile(File source) throws IOException {
        int lastDotIndex = source.getName().lastIndexOf(".");
        var extension = (lastDotIndex != -1) ? source.getName().substring(lastDotIndex) : "";
        return Files.copy(Paths.get(source.getAbsolutePath()), Paths.get(source.getPath().replace(extension, ".temp" + extension)), StandardCopyOption.REPLACE_EXISTING);
    }

    private void removeFile(Path file) throws IOException {
        Files.delete(file);
    }

    private Boolean checkForFile(String filePath) {
        File file = new File(filePath);
        return file.exists() && file.isFile();
    }

    @AfterEach
    public void cleanup() throws IOException {
        removeFile(Paths.get("src/test/resources/LaTexFolder/file1.temp.cls"));
        removeFile(Paths.get("src/test/resources/LaTexFolder/file2.temp.tex"));
        removeFile(Paths.get("src/test/resources/LaTexFolder/file3.temp.sty"));
    }

    @Test
    public void testUnusedPackages() throws IOException {
        var path1 = "src/test/resources/LaTexFolder/file1.cls";
        var copy1 = copyFile(new File(path1));
        var path2 = "src/test/resources/LaTexFolder/file2.tex";
        var copy2 = copyFile(new File(path2));
        var path3 = "src/test/resources/LaTexFolder/file3.sty";
        var copy3 = copyFile(new File(path3));


        var dep1 = DependencyScanner.getInstance().findDependencies(copy1.toAbsolutePath().toString(), DependencyType.FILE, "", Collections.emptyList(), 5);
        var dep2 = DependencyScanner.getInstance().findDependencies(copy2.toAbsolutePath().toString(), DependencyType.FILE, "", Collections.emptyList(), 5);
        var dep3 = DependencyScanner.getInstance().findDependencies(copy3.toAbsolutePath().toString(), DependencyType.FILE, "", Collections.emptyList(), 5);

        var helper1 = new LatexHelper(copy1.toFile(), dep1);
        var helper2 = new LatexHelper(copy2.toFile(), dep2);
        var helper3 = new LatexHelper(copy3.toFile(), dep3);

        helper1.findUnnecessaryDependencies(false, false);
        helper2.findUnnecessaryDependencies(false, false);
        helper3.findUnnecessaryDependencies(false, false);

        var expectedUnusedDependencies = Arrays.asList("xcolor", "makecell");

        for (var dep : dep1.getDependencyList()) {
            if (expectedUnusedDependencies.contains(dep.getName()))
                assertTrue(dep.IsUnused);
            else
                assertFalse(dep.isIsUnused());
        }

        for (var dep : dep2.getDependencyList()) {
            if (expectedUnusedDependencies.contains(dep.getName()))
                assertTrue(dep.IsUnused);
            else
                assertFalse(dep.isIsUnused());
        }

        for (var dep : dep3.getDependencyList()) {
            if (expectedUnusedDependencies.contains(dep.getName()))
                assertTrue(dep.IsUnused);
            else
                assertFalse(dep.isIsUnused());
        }
    }

    @Test
    public void testMinimize() throws IOException {
        var path1 = "src/test/resources/LaTexFolder/file1.cls";
        var copy1 = copyFile(new File(path1));
        var path2 = "src/test/resources/LaTexFolder/file2.tex";
        var copy2 = copyFile(new File(path2));
        var path3 = "src/test/resources/LaTexFolder/file3.sty";
        var copy3 = copyFile(new File(path3));

        var dep1 = DependencyScanner.getInstance().findDependencies(copy1.toAbsolutePath().toString(), DependencyType.FILE, "", Collections.emptyList(), 5);
        var dep2 = DependencyScanner.getInstance().findDependencies(copy2.toAbsolutePath().toString(), DependencyType.FILE, "", Collections.emptyList(), 5);
        var dep3 = DependencyScanner.getInstance().findDependencies(copy3.toAbsolutePath().toString(), DependencyType.FILE, "", Collections.emptyList(), 5);

        var helper1 = new LatexHelper(copy1.toFile(), dep1);
        var helper2 = new LatexHelper(copy2.toFile(), dep2);
        var helper3 = new LatexHelper(copy3.toFile(), dep3);

        helper1.findUnnecessaryDependencies(false, true);
        helper2.findUnnecessaryDependencies(false, true);
        helper3.findUnnecessaryDependencies(false, true);

        assertTrue(checkForFile("src/test/resources/LaTexFolder/file1.temp.minimized.cls"));
        assertTrue(checkForFile("src/test/resources/LaTexFolder/file2.temp.minimized.tex"));
        assertTrue(checkForFile("src/test/resources/LaTexFolder/file3.temp.minimized.sty"));

        removeFile(Paths.get("src/test/resources/LaTexFolder/file1.temp.minimized.cls"));
        removeFile(Paths.get("src/test/resources/LaTexFolder/file2.temp.minimized.tex"));
        removeFile(Paths.get("src/test/resources/LaTexFolder/file3.temp.minimized.sty"));
    }

    @Test
    public void testOverwrite() throws IOException {
        var path1 = "src/test/resources/LaTexFolder/file1.cls";
        var copy1 = copyFile(new File(path1));
        var path2 = "src/test/resources/LaTexFolder/file2.tex";
        var copy2 = copyFile(new File(path2));
        var path3 = "src/test/resources/LaTexFolder/file3.sty";
        var copy3 = copyFile(new File(path3));

        var dep1 = DependencyScanner.getInstance().findDependencies(copy1.toAbsolutePath().toString(), DependencyType.FILE, "", Collections.emptyList(), 5);
        var dep2 = DependencyScanner.getInstance().findDependencies(copy2.toAbsolutePath().toString(), DependencyType.FILE, "", Collections.emptyList(), 5);
        var dep3 = DependencyScanner.getInstance().findDependencies(copy3.toAbsolutePath().toString(), DependencyType.FILE, "", Collections.emptyList(), 5);

        var helper1 = new LatexHelper(copy1.toFile(), dep1);
        var helper2 = new LatexHelper(copy2.toFile(), dep2);
        var helper3 = new LatexHelper(copy3.toFile(), dep3);

        helper1.findUnnecessaryDependencies(true, false);
        helper2.findUnnecessaryDependencies(true, false);
        helper3.findUnnecessaryDependencies(true, false);

        assertFalse(checkForFile("src/test/resources/LaTexFolder/file1.temp.minimized.cls"));
        assertFalse(checkForFile("src/test/resources/LaTexFolder/file2.temp.minimized.tex"));
        assertFalse(checkForFile("src/test/resources/LaTexFolder/file3.temp.minimized.sty"));
        assertTrue(checkForFile("src/test/resources/LaTexFolder/file1.temp.cls"));
        assertTrue(checkForFile("src/test/resources/LaTexFolder/file2.temp.tex"));
        assertTrue(checkForFile("src/test/resources/LaTexFolder/file3.temp.sty"));
    }

    @Test
    public void testMinimizeAndOverwrite() throws IOException {
        var path1 = "src/test/resources/LaTexFolder/file1.cls";
        var copy1 = copyFile(new File(path1));
        var path2 = "src/test/resources/LaTexFolder/file2.tex";
        var copy2 = copyFile(new File(path2));
        var path3 = "src/test/resources/LaTexFolder/file3.sty";
        var copy3 = copyFile(new File(path3));

        var dep1 = DependencyScanner.getInstance().findDependencies(copy1.toAbsolutePath().toString(), DependencyType.FILE, "", Collections.emptyList(), 5);
        var dep2 = DependencyScanner.getInstance().findDependencies(copy2.toAbsolutePath().toString(), DependencyType.FILE, "", Collections.emptyList(), 5);
        var dep3 = DependencyScanner.getInstance().findDependencies(copy3.toAbsolutePath().toString(), DependencyType.FILE, "", Collections.emptyList(), 5);

        var helper1 = new LatexHelper(copy1.toFile(), dep1);
        var helper2 = new LatexHelper(copy2.toFile(), dep2);
        var helper3 = new LatexHelper(copy3.toFile(), dep3);

        helper1.findUnnecessaryDependencies(true, true);
        helper2.findUnnecessaryDependencies(true, true);
        helper3.findUnnecessaryDependencies(true, true);

        assertFalse(checkForFile("src/test/resources/LaTexFolder/file1.temp.minimized.cls"));
        assertFalse(checkForFile("src/test/resources/LaTexFolder/file2.temp.minimized.tex"));
        assertFalse(checkForFile("src/test/resources/LaTexFolder/file3.temp.minimized.sty"));
        assertTrue(checkForFile("src/test/resources/LaTexFolder/file1.temp.cls"));
        assertTrue(checkForFile("src/test/resources/LaTexFolder/file2.temp.tex"));
        assertTrue(checkForFile("src/test/resources/LaTexFolder/file3.temp.sty"));
    }
}