/* ******************************************************************* * Copyright (c) 2004 IBM Corporation * All rights reserved. * This program and the accompanying materials are made available * under the terms of the Eclipse Public License v1.0 * which accompanies this distribution and is available at * http://www.eclipse.org/legal/epl-v10.html * * ******************************************************************/ package org.aspectj.systemtest.incremental.model; import java.io.File; import junit.framework.Test; import org.aspectj.ajdt.internal.core.builder.AsmHierarchyBuilder; import org.aspectj.asm.AsmManager; import org.aspectj.testing.XMLBasedAjcTestCase; import org.aspectj.testing.util.StructureModelUtil; public class IncrementalModelTests extends org.aspectj.testing.XMLBasedAjcTestCase { public static Test suite() { return XMLBasedAjcTestCase.loadSuite(IncrementalModelTests.class); } protected File getSpecFile() { return new File("../tests/src/org/aspectj/systemtest/incremental/model/incremental-model.xml"); } // This first test doesnt do a lot currently, but is ready too... public void test001() throws Exception { runTest("Testing incremental structure model: Intertype declarations (and a declare parents)"); nextIncrement(true); copyFileAndDoIncrementalBuild("changes/CloneablePoint.20.java","src/introduction/CloneablePoint.java"); nextIncrement(true); copyFile("changes/Point.30.java","src/introduction/Point.java"); copyFileAndDoIncrementalBuild("changes/HashablePoint.30.java","src/introduction/HashablePoint.java"); StructureModelUtil.checkModel("declare parents=2"); } public void test002() throws Exception { runTest("Testing incremental structure model: Intertype field declarations"); nextIncrement(true); copyFileAndDoIncrementalBuild("changes/secondary/BetaA.20.java","src/secondary/BetaA.java"); StructureModelUtil.checkModel("inter-type field=2,RelationshipMapSize=3"); nextIncrement(true); copyFileAndDoIncrementalBuild("changes/secondary/BetaA.30.java","src/secondary/BetaA.java"); // TODO Andy - fix this test, what should the real results be in the model? // when we go slow it seems to be relmapsize=0 // StructureModelUtil.checkModel("inter-type field=1,RelationshipMapSize=2"); } public void test003() throws Exception{ runTest("Testing incremental structure model: Weaving handlers"); // nextIncrement(true); copyFileAndDoIncrementalBuild("changes/primary/BetaA.20.java","src/primary/BetaA.java"); if (AsmHierarchyBuilder.shouldAddUsesPointcut) { StructureModelUtil.checkModel("code=1,advice=1,RelationshipMapSize=3"); } else { StructureModelUtil.checkModel("code=1,advice=1,RelationshipMapSize=2"); } // nextIncrement(true); copyFileAndDoIncrementalBuild("changes/secondary/GammaA.30.java","src/secondary/GammaA.java"); if (AsmHierarchyBuilder.shouldAddUsesPointcut) { StructureModelUtil.checkModel("code=1,advice=2,RelationshipMapSize=5"); } else { StructureModelUtil.checkModel("code=1,advice=2,RelationshipMapSize=3"); } // nextIncrement(true); deleteFileAndDoIncrementalBuild("src/primary/BetaA.java"); if (AsmHierarchyBuilder.shouldAddUsesPointcut) { StructureModelUtil.checkModel("code=1,advice=1,RelationshipMapSize=3"); } else { StructureModelUtil.checkModel("code=1,advice=1,RelationshipMapSize=2"); } } public void test004() throws Exception { runTest("Testing incremental structure model: Weaving"); // nextIncrement(true); copyFileAndDoIncrementalBuild("changes/primary/BetaA.20.java","src/primary/BetaA.java"); if (AsmHierarchyBuilder.shouldAddUsesPointcut) { StructureModelUtil.checkModel("code=2,advice=2,java source file=3,RelationshipMapSize=6"); } else { StructureModelUtil.checkModel("code=2,advice=2,java source file=3,RelationshipMapSize=4"); } // nextIncrement(true); copyFileAndDoIncrementalBuild("changes/primary/BetaA.30.java","src/primary/BetaA.java"); if (AsmHierarchyBuilder.shouldAddUsesPointcut) { StructureModelUtil.checkModel("code=1,advice=1,RelationshipMapSize=3"); } else { StructureModelUtil.checkModel("code=1,advice=1,RelationshipMapSize=2"); } // nextIncrement(true); copyFileAndDoIncrementalBuild("changes/primary/BetaA.40.java","src/primary/BetaA.java"); StructureModelUtil.checkModel("code=0,RelationshipMapSize=0,advice=0"); } public void test005() throws Exception { runTest("Testing incremental structure model: Updating files"); // nextIncrement(true); copyFileAndDoIncrementalBuild("changes/primary/Beta.20.java","src/primary/Beta.java"); StructureModelUtil.checkModel("java source file=5,method=4,class=3,FileMapSize=4"); // nextIncrement(true); copyFileAndDoIncrementalBuild("changes/secondary/Delta.30.java","src/secondary/Delta.java"); StructureModelUtil.checkModel("java source file=5,method=4,class=4,advice=1"); // nextIncrement(true); copyFileAndDoIncrementalBuild("changes/secondary/Gamma.40.java","src/secondary/Gamma.java"); StructureModelUtil.checkModel("advice=2"); // nextIncrement(true); copyFileAndDoIncrementalBuild("changes/secondary/Gamma.50.java","src/secondary/Gamma.java"); StructureModelUtil.checkModel("advice=2,pointcut=1"); // nextIncrement(true); copyFileAndDoIncrementalBuild("changes/secondary/Gamma.60.java","src/secondary/Gamma.java"); StructureModelUtil.checkModel("advice=0,pointcut=1"); } public void test006() throws Exception { runTest("Testing incremental structure model: Adding and removing files"); // nextIncrement(true); copyFileAndDoIncrementalBuild("changes/primary/Beta.20.java","src/primary/Beta.java"); StructureModelUtil.checkModel("java source file=3,FileMapSize=2"); // nextIncrement(true); copyFileAndDoIncrementalBuild("changes/secondary/Gamma.30.java","src/secondary/Gamma.java"); StructureModelUtil.checkModel("java source file=4"); // nextIncrement(true); copyFileAndDoIncrementalBuild("changes/secondary/Delta.40.java","src/secondary/Delta.java"); StructureModelUtil.checkModel("java source file=5,package=2,FileMapSize=4"); // nextIncrement(true); deleteFileAndDoIncrementalBuild("src/secondary/Gamma.java"); StructureModelUtil.checkModel("java source file=4,package=2"); // nextIncrement(true); deleteFile("src/primary/Beta.java"); deleteFileAndDoIncrementalBuild("src/secondary/Delta.java"); StructureModelUtil.checkModel("java source file=2,FileMapSize=1"); } protected void setUp() throws Exception { super.setUp(); AsmManager.attemptIncrementalModelRepairs = true; } protected void tearDown() throws Exception { // To see the model after a test, uncomment these lines... // AsmManager.ModelInfo mi = AsmManager.ModelInfo.summarizeModel(); // System.err.println(mi.toString()); super.tearDown(); AsmManager.attemptIncrementalModelRepairs = false; } }