Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

AjBuildManagerTest.java 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. /* *******************************************************************
  2. * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
  3. * All rights reserved.
  4. * This program and the accompanying materials are made available
  5. * under the terms of the Eclipse Public License v1.0
  6. * which accompanies this distribution and is available at
  7. * http://www.eclipse.org/legal/epl-v10.html
  8. *
  9. * Contributors:
  10. * PARC initial implementation
  11. * ******************************************************************/
  12. package org.aspectj.ajdt.internal.core.builder;
  13. import java.io.File;
  14. //import java.io.FileOutputStream;
  15. import java.io.IOException;
  16. import java.io.PrintWriter;
  17. import junit.framework.TestCase;
  18. import org.aspectj.ajdt.ajc.*;
  19. import org.aspectj.asm.AsmManager;
  20. import org.aspectj.bridge.IMessage;
  21. import org.aspectj.bridge.MessageHandler;
  22. import org.aspectj.bridge.MessageWriter;
  23. import org.aspectj.tools.ajc.Ajc;
  24. import org.aspectj.util.StreamPrintWriter;
  25. //import org.eclipse.core.runtime.CoreException;
  26. public class AjBuildManagerTest extends TestCase {
  27. private StreamPrintWriter outputWriter = new StreamPrintWriter(new PrintWriter(System.out));
  28. private MessageWriter messageWriter = new MessageWriter(outputWriter, false);
  29. public static File source1 = new File(AjdtAjcTests.TESTDATA_DIR, "src1/A.java");
  30. public static File source2 = new File(AjdtAjcTests.TESTDATA_DIR, "src1/Hello.java");
  31. public static File source3 = new File(AjdtAjcTests.TESTDATA_DIR, "src1/X.java");
  32. /**
  33. * @throws AssertionFailedError unless handler has 0 messages
  34. * worse than warning, or the one message is
  35. * a warning about aspectjrt.jar
  36. */
  37. public static void assertCompileMessagesValid(MessageHandler handler) {
  38. assertTrue("null handler", null != handler);
  39. final int numMessages = handler.numMessages(IMessage.WARNING, true);
  40. if (1 == numMessages) { // permit aspectjrt.jar warning
  41. IMessage m = handler.getMessages(IMessage.WARNING, true)[0];
  42. if (!(m.isWarning() && (-1 != m.getMessage().indexOf("aspectjrt.jar")))) {
  43. assertTrue(handler.toString(), false);
  44. }
  45. } else if (0 != numMessages) {
  46. assertTrue(handler.toString(), false);
  47. }
  48. }
  49. public AjBuildManagerTest(String name) {
  50. super(name);
  51. }
  52. public void testSimpleStructure() throws IOException /*, CoreException */ {
  53. AjBuildManager manager = new AjBuildManager(messageWriter);
  54. BuildArgParser parser = new BuildArgParser(messageWriter);
  55. String javaClassPath = System.getProperty("java.class.path");
  56. String sandboxName = Ajc.createEmptySandbox().getAbsolutePath();
  57. AjBuildConfig buildConfig =
  58. parser.genBuildConfig(new String[] {
  59. "-d", sandboxName,
  60. "-classpath",
  61. javaClassPath,
  62. AjdtAjcTests.TESTDATA_PATH
  63. + "/src1/A.java",
  64. // EajcModuleTests.TESTDATA_PATH + "/src1/Hello.java",
  65. });
  66. String err = parser.getOtherMessages(true);
  67. assertTrue(err, null == err);
  68. manager.setStructureModel(AsmManager.getDefault().getHierarchy());
  69. MessageHandler handler = new MessageHandler();
  70. manager.batchBuild(buildConfig, handler);
  71. assertCompileMessagesValid(handler);
  72. // System.out.println(
  73. // ">> model: \n" +
  74. // StructureModelManager.INSTANCE.getStructureModel().getRoot().toLongString()
  75. // );
  76. //
  77. // System.out.println(
  78. // ">> children: \n" +
  79. // ((StructureNode)StructureModelManager.INSTANCE.getStructureModel().getRoot().getChildren().get(0)).getChildren()
  80. // );
  81. }
  82. //XXX add test for resource deltas
  83. //
  84. // public void testUpdateBuildConfig() {
  85. // final File FILE_1 = new File("testdata/testclasses/Temp1.java");
  86. // final File FILE_2 = new File("testdata/testclasses/Temp2.java");
  87. // final File FILE_3 = new File("testdata/testclasses/Temp3.java");
  88. // List files = new ArrayList();
  89. // files.add(FILE_1);
  90. // files.add(FILE_2);
  91. //
  92. // AjBuildManager manager = new AjBuildManager(messageWriter);
  93. // AjBuildConfig buildConfig = new AjBuildConfig();
  94. // manager.buildConfig = buildConfig;
  95. // buildConfig.setFiles(files);
  96. //
  97. // manager.updateBuildConfig(buildConfig);
  98. // assertTrue("no change", manager.deletedFiles.isEmpty());
  99. //
  100. // AjBuildConfig newConfig = new AjBuildConfig();
  101. // newConfig.getFiles().add(FILE_1);
  102. // newConfig.getFiles().add(FILE_2);
  103. // newConfig.getFiles().add(FILE_3);
  104. // manager.updateBuildConfig(newConfig);
  105. // assertTrue("added file", manager.deletedFiles.isEmpty());
  106. // assertTrue(manager.addedFiles.size() == 1);
  107. // assertTrue(manager.addedFiles.contains(FILE_3));
  108. //
  109. // newConfig = new AjBuildConfig();
  110. // newConfig.getFiles().add(FILE_3);
  111. // manager.updateBuildConfig(newConfig);
  112. // assertTrue("deleted 2 files", manager.addedFiles.isEmpty());
  113. // assertTrue(manager.deletedFiles.size() == 2);
  114. // assertTrue(manager.deletedFiles.contains(FILE_1));
  115. //
  116. // newConfig = new AjBuildConfig();
  117. // newConfig.getFiles().add(FILE_2);
  118. // manager.updateBuildConfig(newConfig);
  119. // assertTrue("added file", manager.addedFiles.size() == 1);
  120. // assertTrue("deleted file", manager.deletedFiles.size() == 1);
  121. // assertTrue(manager.deletedFiles.size() == 1);
  122. // assertTrue(manager.addedFiles.contains(FILE_2));
  123. // assertTrue(manager.deletedFiles.contains(FILE_3));
  124. // }
  125. //
  126. // /**
  127. // * Pretends that the files 'have been' modified in the future and waits.
  128. // * Tests:
  129. // * 1) no change,
  130. // * 2) added file,
  131. // * 3) removed file
  132. // *
  133. // * XXX should just test modified
  134. // */
  135. // public void testGetModifiedFiles() throws IOException, InterruptedException {
  136. // final File TEMP_1 = new File("testdata/testclasses/TempChanged.java");
  137. // final File EXISTS_2 = new File("testdata/testclasses/p1/Foo.java");
  138. // final File NEW = new File("testdata/testclasses/TempNew.java");
  139. // NEW.delete();
  140. // touch(TEMP_1, false);
  141. // List files = new ArrayList();
  142. // files.add(TEMP_1);
  143. // files.add(EXISTS_2);
  144. //
  145. // assertTrue("input files", TEMP_1.exists() && EXISTS_2.exists());
  146. // assertTrue("new file", !NEW.exists());
  147. //
  148. // Thread.sleep(100);
  149. // long lastBuildTime = System.currentTimeMillis();
  150. //
  151. // AjBuildManager manager = new AjBuildManager(messageWriter);
  152. // manager.buildConfig = new AjBuildConfig();
  153. // manager.buildConfig.setFiles(files);
  154. // Collection changedFiles = manager.getModifiedFiles(lastBuildTime);
  155. // assertTrue("nothing changed: " + changedFiles, changedFiles.isEmpty());
  156. //
  157. // lastBuildTime = System.currentTimeMillis();
  158. // Thread.sleep(100);
  159. //
  160. // touch(NEW, false);
  161. //
  162. // //NEW.createNewFile();
  163. // files.add(NEW);
  164. // changedFiles = manager.getModifiedFiles(lastBuildTime);
  165. // assertTrue("new file: " + changedFiles, changedFiles.contains(NEW));
  166. //
  167. // lastBuildTime = System.currentTimeMillis();
  168. // Thread.sleep(100);
  169. //
  170. // files.remove(NEW);
  171. // changedFiles = manager.getModifiedFiles(lastBuildTime);
  172. // assertTrue("nothing changed", changedFiles.isEmpty());
  173. //
  174. // lastBuildTime = System.currentTimeMillis();
  175. // Thread.sleep(100);
  176. //
  177. // touch(TEMP_1, true);
  178. // changedFiles = manager.getModifiedFiles(lastBuildTime);
  179. // assertTrue("touched file: " + changedFiles, changedFiles.contains(TEMP_1));
  180. //
  181. // lastBuildTime = System.currentTimeMillis();
  182. // Thread.sleep(100);
  183. //
  184. // files.remove(NEW);
  185. // changedFiles = manager.getModifiedFiles(lastBuildTime);
  186. // assertTrue("nothing changed", changedFiles.isEmpty());
  187. //
  188. // TEMP_1.delete();
  189. // NEW.delete();
  190. // }
  191. // don't do delta's anymore
  192. // public void testMakeDeltas() throws IOException, InterruptedException {
  193. // AjBuildManager manager = new AjBuildManager(messageWriter);
  194. // manager.buildConfig = new AjBuildConfig();
  195. // List sourceRoots = new ArrayList();
  196. // sourceRoots.add(new File("out"));
  197. // manager.buildConfig.setSourceRoots(sourceRoots);
  198. // assertTrue(manager.testInit(messageWriter));
  199. // List modified = Arrays.asList(new File[] { new File("A.java"), new File("B.java") });
  200. // List deleted = Arrays.asList(new File[] { new File("X.java") });
  201. // SimpleLookupTable deltas = new SimpleLookupTable();
  202. // manager.makeDeltas(
  203. // deltas,
  204. // modified,
  205. // deleted,
  206. // ((File)manager.buildConfig.getSourceRoots().get(0)).getPath());
  207. //
  208. // ResourceDelta d = (ResourceDelta)deltas.get(manager.getJavaBuilder().currentProject);
  209. // assertNotNull(d);
  210. //
  211. // assertEquals(d.getAffectedChildren().length, 3);
  212. // //XXX do more testing of children
  213. // }
  214. //
  215. // // XXX should this be working??
  216. // public void testDeleteRealFiles() throws CoreException, IOException {
  217. // AjBuildManager manager = new AjBuildManager(messageWriter);
  218. // manager.buildConfig = new AjBuildConfig();
  219. // List sourceRoots = new ArrayList();
  220. // sourceRoots.add(new File("testdata/src1"));
  221. // manager.buildConfig.setSourceRoots(sourceRoots);
  222. // manager.buildConfig.setOutputDir(new File("out"));
  223. // assertTrue(manager.testInit(messageWriter));
  224. //
  225. // File realClassFile = new File("out/X.class");
  226. // touch(realClassFile, false);
  227. //
  228. // assertTrue(realClassFile.exists());
  229. //
  230. // IFile classfile = manager.classFileCache.getFile(new Path("X.class"));
  231. // classfile.create(FileUtil.getStreamFromZip("testdata/testclasses.jar", "Hello.class"), true, null);
  232. // assertTrue(classfile.exists());
  233. //
  234. // manager.addAspectClassFilesToWeaver();
  235. //
  236. // classfile.delete(true, false, null);
  237. // assertTrue(realClassFile.exists());
  238. //
  239. // manager.addAspectClassFilesToWeaver();
  240. //
  241. // assertTrue(!realClassFile.exists());
  242. //
  243. // }
  244. //!!!
  245. // public void testIncrementalCompilerCall() throws IOException, InterruptedException, CoreException {
  246. // AjBuildManager manager = new AjBuildManager(messageWriter);
  247. //
  248. // manager.buildConfig = new AjBuildConfig();
  249. // List roots = new ArrayList();
  250. // roots.add(new File("testdata/src1"));
  251. // manager.testInit(messageWriter);
  252. // manager.buildConfig.setSourceRoots(roots);
  253. // assertTrue(manager.testInit(messageWriter));
  254. // List modified = Arrays.asList(new File[] { source1, source2 });
  255. // List deleted = Arrays.asList(new File[] { source3 });
  256. // SimpleLookupTable deltas = new SimpleLookupTable();
  257. // manager.makeDeltas(
  258. // deltas,
  259. // modified,
  260. // deleted,
  261. // ((File)manager.buildConfig.getSourceRoots().get(0)).getAbsolutePath());
  262. //
  263. // JavaBuilder jbuilder = manager.getJavaBuilder();
  264. // jbuilder.lastState = new State(jbuilder);
  265. // jbuilder.binaryLocationsPerProject = new SimpleLookupTable();
  266. //
  267. // AjBuildManager.IncrementalBuilder builder
  268. // = manager.getIncrementalBuilder(messageWriter); // XXX trap errors
  269. // TestNotifier testNotifier = new TestNotifier(builder, jbuilder.currentProject);
  270. // jbuilder.notifier = testNotifier;
  271. //
  272. // IContainer[] sourceFolders = new IContainer[] {
  273. // new FilesystemFolder(((File)manager.buildConfig.getSourceRoots().get(0)).getAbsolutePath())
  274. // };
  275. // builder.setSourceFolders(sourceFolders);
  276. // testNotifier.builder = builder;
  277. //
  278. // IFile classfile = manager.classFileCache.getFile(new Path("X.class"));
  279. // classfile.create(new ByteArrayInputStream(new byte[] {1,2,3}), true, null);
  280. //
  281. // assertTrue(classfile.exists());
  282. //
  283. //
  284. // try {
  285. // manager.testSetHandler(messageWriter);
  286. // boolean succeeded = builder.build(deltas);
  287. // } catch (NonLocalExit nle) {
  288. // assertEquals(nle.getExitCode(), 0);
  289. // } finally {
  290. // manager.testSetHandler(null);
  291. // }
  292. //
  293. // assertTrue(!classfile.exists());
  294. // }
  295. //
  296. // static class TestNotifier extends BuildNotifier {
  297. // int state = 0;
  298. // AjBuildManager.IncrementalBuilder builder;
  299. //
  300. // public TestNotifier(AjBuildManager.IncrementalBuilder builder, IProject project) {
  301. // super(null, project);
  302. // this.builder = builder;
  303. // }
  304. //
  305. //
  306. // public void updateProgressDelta(float percentWorked) {
  307. // switch(state) {
  308. // case 0:
  309. // checkInitialConfig();
  310. // break;
  311. // case 1:
  312. // checkBinaryResources();
  313. // break;
  314. // case 2:
  315. // checkAffectedFiles();
  316. // break;
  317. // }
  318. // state += 1;
  319. // }
  320. //
  321. // private void checkBinaryResources() {
  322. // }
  323. //
  324. //
  325. // private void checkInitialConfig() {
  326. // Collection files = builder.getLocations();
  327. // //System.out.println("initial: " + files);
  328. // }
  329. //
  330. // private void checkAffectedFiles() {
  331. // Collection files = builder.getLocations();
  332. // TestUtil.assertSetEquals(Arrays.asList(new String[] {
  333. // source1.getAbsolutePath().replace(File.separatorChar, '/'),
  334. // source2.getAbsolutePath().replace(File.separatorChar, '/') }), files);
  335. // throw new NonLocalExit(0);
  336. // }
  337. // }
  338. // private void touch(File file, boolean isAppend) throws IOException {
  339. // FileOutputStream s = new FileOutputStream(file.getAbsolutePath(), isAppend);
  340. // s.write(new byte[] {1,2,3});
  341. // s.close();
  342. // }
  343. /*
  344. * jar
  345. * directory
  346. * source directory
  347. * container
  348. */
  349. // public void testMakeClasspathLocations() {
  350. // List classpath = new ArrayList();
  351. // classpath.add(
  352. //
  353. // AjBuildConfig config = new AjBuildConfig();
  354. // config.setClasspath()
  355. // }
  356. // private void testClasspathLocation(String loca
  357. }