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 package fr.ifremer.isisfish.util;
27
28 import java.io.File;
29 import java.io.IOException;
30 import java.net.URL;
31 import java.net.URLClassLoader;
32 import java.util.ArrayList;
33 import java.util.Collections;
34 import java.util.List;
35
36 import org.apache.commons.io.FileUtils;
37 import org.apache.commons.logging.Log;
38 import org.apache.commons.logging.LogFactory;
39 import org.junit.Assert;
40 import org.junit.Test;
41 import org.nuiton.util.FileUtil;
42
43 import fr.ifremer.isisfish.AbstractIsisFishTest;
44 import fr.ifremer.isisfish.equation.PopulationReproductionEquation;
45
46
47
48
49
50
51
52
53
54
55
56
57
58 public class CompileHelperTest extends AbstractIsisFishTest {
59
60
61 private static Log log = LogFactory.getLog(CompileHelperTest.class);
62
63
64
65
66
67
68
69
70 protected String getFirstClassContent(String name) {
71 StringBuffer content = new StringBuffer();
72 content.append("public class " + name + " {");
73 content.append(" /** Java 6 code */");
74 content.append(" public boolean isEmpty(String s) {");
75 content.append(" return s.isEmpty();");
76 content.append(" }");
77 content.append("}");
78 return content.toString();
79 }
80
81
82
83
84
85
86
87
88 protected String getSecondClassContent(String name, String extendsName) {
89 StringBuffer content = new StringBuffer();
90 content.append("public class " + name + " extends " + extendsName
91 + " {");
92 content.append(" @Override");
93 content.append(" public boolean isEmpty(String s) {");
94 content.append(" return false;");
95 content.append(" }");
96 content.append("}");
97 return content.toString();
98 }
99
100
101
102
103
104
105
106
107 @Test
108 public void testCompile() throws IOException, ClassNotFoundException {
109 File f = File.createTempFile("testCompile", ".java", getTestDirectory());
110 String filename = FileUtil.basename(f, ".java");
111 String code = getFirstClassContent(filename);
112 FileUtils.writeStringToFile(f, code);
113
114 List<File> classpath = new ArrayList<File>();
115 classpath.add(f.getParentFile());
116
117 CompileHelper.compile(classpath, Collections.singletonList(f), f
118 .getParentFile(), null);
119
120
121 URL[] cp = new URL[] { f.getParentFile().toURI().toURL() };
122 try (URLClassLoader cl = new URLClassLoader(cp)) {
123 Class<?> c = cl.loadClass(filename);
124 log.info("class name: " + c.getName());
125 Assert.assertEquals(filename, c.getName());
126 }
127
128
129 File fclass = new File(f.getAbsolutePath().replaceAll("java$", "class"));
130 fclass.delete();
131 f.delete();
132 }
133
134
135
136
137
138
139
140 @Test
141 public void testCompileDepend() throws IOException, ClassNotFoundException {
142
143 File fA = File.createTempFile("testCompileA", ".java", getTestDirectory());
144 String filenameA = FileUtil.basename(fA, ".java");
145 String codeA = getFirstClassContent(filenameA);
146 FileUtils.writeStringToFile(fA, codeA);
147
148 File fB = File.createTempFile("testCompileB", ".java", getTestDirectory());
149 String filenameB = FileUtil.basename(fB, ".java");
150 String codeB = getSecondClassContent(filenameB, filenameA);
151 FileUtils.writeStringToFile(fB, codeB);
152
153 File dest = new File(fB.getParentFile(), "testCompile");
154
155 List<File> classpath = new ArrayList<File>();
156 classpath.add(fB.getParentFile());
157 int result = CompileHelper.compile(classpath, Collections.singletonList(fB), dest, null);
158 Assert.assertEquals(0, result);
159
160
161 URL[] cp = new URL[] { dest.toURI().toURL() };
162 try (URLClassLoader cl = new URLClassLoader(cp)) {
163 Class<?> c = cl.loadClass(filenameB);
164 log.info("class name: " + c.getName());
165 Assert.assertEquals(filenameB, c.getName());
166 }
167
168
169 cp = new URL[] { dest.toURI().toURL() };
170
171 try (URLClassLoader cl = new URLClassLoader(cp)) {
172 Class<?> c = cl.loadClass(filenameA);
173 log.info("class name: " + c.getName());
174 Assert.assertEquals(filenameA, c.getName());
175 }
176
177
178 File fclassA = new File(fA.getAbsolutePath().replaceAll("java$",
179 "class"));
180 fclassA.delete();
181 File fclassB = new File(fB.getAbsolutePath().replaceAll("java$",
182 "class"));
183 fclassB.delete();
184 fA.delete();
185 fB.delete();
186 FileUtils.deleteQuietly(dest);
187 }
188
189
190
191
192
193
194
195 @Test
196 public void testExtractDoc() {
197 String content = CompileHelper.extractDoc("PopulationReproduction", "Test", PopulationReproductionEquation.class);
198
199 Assert.assertTrue(content.contains("N : org.nuiton.math.matrix.MatrixND"));
200 Assert.assertTrue(content.contains("zones : java.util.List<Zone>"));
201 }
202 }