/** * Copyright (C) 2010 STMicroelectronics * * This file is part of "Mind Compiler" is free software: you can redistribute * it and/or modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * Contact: mind@ow2.org * * Authors: Matthieu Leclercq * Contributors: */ package org.ow2.mind; import java.util.HashMap; import java.util.Map; import org.testng.annotations.Test; public class IncrementalTest extends AbstractIncrementalTest { @Override protected void initPath() { initSourcePath(getDepsDir("fractal/api/Component.itf").getAbsolutePath(), "common", SRC_ROOT); } @Test(groups = {"functional"}) public void incrementalTest1() throws Exception { cleanBuildDir(); final Map<String, Long> t1 = recompileDefinition("helloworld.Client"); pause(); final Map<String, Long> t2 = recompileDefinition("helloworld.Client"); assertUnchangedAll(".*", t1, t2); } @Test(groups = {"functional"}) public void incrementalTest11() throws Exception { cleanBuildDir(); final Map<String, Long> t1 = recompile("helloworld.HelloworldApplication"); pause(); final Map<String, Long> t2 = recompile("helloworld.HelloworldApplication"); assertUnchangedAll(".*", t1, t2); } @Test(groups = {"functional"}) public void incrementalTest12() throws Exception { cleanBuildDir(); final Map<String, Long> t1 = recompile("helloworld.HelloworldApplication"); pause(); final Map<String, Long> t2 = recompileDefinition("helloworld.Helloworld"); assertUnchangedAll(".*", t1, t2); } @Test(groups = {"functional"}) public void incrementalTest13() throws Exception { cleanBuildDir(); final Map<String, Long> t1 = recompile("helloworld.HelloworldApplication"); pause(); initContext(true); runner.compile("helloworld.HelloworldApplication"); final Map<String, Long> t2 = getBuildTimestamps(); assertChangedAll(".*\\.o", t1, t2); assertChangedAll(".*\\.d", t1, t2); } @Test(groups = {"functional"}) public void incrementalTest14() throws Exception { cleanBuildDir(); final Map<String, Long> t1 = recompile("GenericApplication<helloworld.HelloworldMultiClient>"); pause(); final Map<String, Long> t2 = recompile("GenericApplication<helloworld.HelloworldMultiClient>"); assertChanged("GenericApplication.map", t1, t2); assertUnchangedAll(".*", t1, t2); } @Test(groups = {"functional"}) public void incrementalTest16() throws Exception { cleanBuildDir(); final Map<String, Long> t1 = recompile("GenericApplication<helloworld.HelloworldFactoryClient>"); pause(); final Map<String, Long> t2 = recompile("GenericApplication<helloworld.HelloworldFactoryClient>"); assertChanged("GenericApplication.map", t1, t2); assertChanged("Factory.map", t1, t2); assertUnchangedAll(".*", t1, t2); } @Test(groups = {"functional"}) public void incrementalTest17() throws Exception { cleanBuildDir(); final Map<String, Long> t1 = recompileDefinition("asm.Assembly"); pause(); final Map<String, Long> t2 = recompileDefinition("asm.Assembly"); assertUnchangedAll(".*", t1, t2); } @Test(groups = {"functional"}) public void incrementalTest18() throws Exception { cleanBuildDir(); final Map<String, Long> t1 = recompileDefinition("asm.Assembly"); pause(); touchFile("asm/asm.s"); pause(); final Map<String, Long> t2 = recompileDefinition("asm.Assembly"); assertChanged("asm/Assembly_impl1.o", t1, t2); assertUnchangedAll(".*", t1, t2); } @Test(groups = {"functional"}) public void incrementalTest2() throws Exception { cleanBuildDir(); final Map<String, Long> t1 = recompile("helloworld.HelloworldApplication"); pause(); Map<String, Long> t2 = recompile("helloworld.HelloworldApplication"); Map<String, Long> t1Copy = new HashMap<String, Long>(t1); Map<String, Long> t2Copy = new HashMap<String, Long>(t2); assertUnchangedAll(".*", t1Copy, t2Copy); pause(); touchFile("helloworld/Client.adl"); pause(); t2 = recompile("helloworld.HelloworldApplication"); t1Copy = new HashMap<String, Long>(t1); t2Copy = new HashMap<String, Long>(t2); assertChanged("helloworld/Client.def", t1Copy, t2Copy); assertChanged("helloworld/Helloworld.def", t1Copy, t2Copy); assertChanged("helloworld/HelloworldApplication.def", t1Copy, t2Copy); assertUnchangedAll(".*", t1Copy, t2Copy); } @Test(groups = {"functional"}) public void incrementalTest21() throws Exception { cleanBuildDir(); final Map<String, Long> t1 = recompile("helloworld.HelloworldApplication"); pause(); Map<String, Long> t2 = recompile("helloworld.HelloworldApplication"); Map<String, Long> t1Copy = new HashMap<String, Long>(t1); Map<String, Long> t2Copy = new HashMap<String, Long>(t2); assertUnchangedAll(".*", t1Copy, t2Copy); pause(); touchFile("helloworld/client.c"); pause(); t2 = recompile("helloworld.HelloworldApplication"); t1Copy = new HashMap<String, Long>(t1); t2Copy = new HashMap<String, Long>(t2); assertUnchangedAll("helloworld/HelloworldApplication.*Client_instances.c", t1Copy, t2Copy); assertChangedAll("helloworld/HelloworldApplication.*Client.*", t1Copy, t2Copy); assertChangedAll("helloworld/HelloworldApplication(\\.exe)?", t1Copy, t2Copy); assertUnchangedAll("helloworld/Helloworld.*", t1Copy, t2Copy); assertChangedAll("helloworld/Client_impl0.*", t1Copy, t2Copy); assertUnchanged("helloworld/Client_ctrl_impl.c", t1Copy, t2Copy); assertChangedAll("helloworld/Client_ctrl_impl.*", t1Copy, t2Copy); assertUnchangedAll(".*", t1Copy, t2Copy); pause(); final Map<String, Long> t3 = recompile("helloworld.HelloworldApplication"); t2Copy = new HashMap<String, Long>(t2); final Map<String, Long> t3Copy = new HashMap<String, Long>(t3); assertUnchangedAll(".*", t2Copy, t3Copy); } @Test(groups = {"functional"}) public void incrementalTest22() throws Exception { cleanBuildDir(); final Map<String, Long> t1 = recompile("helloworld.HelloworldApplication"); pause(); Map<String, Long> t2 = recompile("helloworld.HelloworldApplication"); Map<String, Long> t1Copy = new HashMap<String, Long>(t1); Map<String, Long> t2Copy = new HashMap<String, Long>(t2); assertUnchangedAll(".*", t1Copy, t2Copy); pause(); touchFile("helloworld/Service.itf"); pause(); t2 = recompile("helloworld.HelloworldApplication"); t1Copy = new HashMap<String, Long>(t1); t2Copy = new HashMap<String, Long>(t2); assertChanged("helloworld/Service.itfdef", t1Copy, t2Copy); assertChanged("helloworld/Client.def", t1Copy, t2Copy); assertChanged("helloworld/Server.def", t1Copy, t2Copy); assertChanged("helloworld/Helloworld.def", t1Copy, t2Copy); assertChanged("helloworld/HelloworldApplication.def", t1Copy, t2Copy); assertUnchangedAll(".*", t1Copy, t2Copy); pause(); final Map<String, Long> t3 = recompile("helloworld.HelloworldApplication"); t2Copy = new HashMap<String, Long>(t2); final Map<String, Long> t3Copy = new HashMap<String, Long>(t3); assertUnchangedAll(".*", t2Copy, t3Copy); } @Test(groups = {"functional"}) public void incrementalTest3() throws Exception { cleanBuildDir(); final Map<String, Long> t1 = recompileDefinition("helloworld.ClientInlined"); Map<String, Long> t2 = recompileDefinition("helloworld.ClientInlined"); Map<String, Long> t1Copy = new HashMap<String, Long>(t1); Map<String, Long> t2Copy = new HashMap<String, Long>(t2); assertUnchangedAll(".*", t1Copy, t2Copy); pause(); touchFile("helloworld/ClientInlined.adl"); pause(); t2 = recompileDefinition("helloworld.ClientInlined"); t1Copy = new HashMap<String, Long>(t1); t2Copy = new HashMap<String, Long>(t2); assertChanged("helloworld/ClientInlined.def", t1Copy, t2Copy); assertUnchangedAll(".*", t1Copy, t2Copy); } @Test(groups = {"functional"}) public void incrementalTest31() throws Exception { cleanBuildDir(); final Map<String, Long> t1 = recompile("GenericApplication<helloworld.HelloworldGeneric>"); pause(); Map<String, Long> t2 = recompile("GenericApplication<helloworld.HelloworldGeneric>"); Map<String, Long> t1Copy = new HashMap<String, Long>(t1); Map<String, Long> t2Copy = new HashMap<String, Long>(t2); assertChanged("GenericApplication.map", t1Copy, t2Copy); assertChanged("helloworld/GenericComposite.map", t1Copy, t2Copy); assertUnchangedAll(".*", t1Copy, t2Copy); pause(); touchFile("helloworld/ClientType.adl"); pause(); t2 = recompile("GenericApplication<helloworld.HelloworldGeneric>"); t1Copy = new HashMap<String, Long>(t1); t2Copy = new HashMap<String, Long>(t2); assertChanged("helloworld/HelloworldGeneric.def", t1Copy, t2Copy); assertChangedAll("helloworld/GenericComposite.*\\.def", t1Copy, t2Copy); assertChangedAll("GenericApplication.*\\.def", t1Copy, t2Copy); assertChanged("GenericApplication.map", t1Copy, t2Copy); assertChanged("helloworld/GenericComposite.map", t1Copy, t2Copy); assertUnchangedAll(".*", t1Copy, t2Copy); } @Test(groups = {"functional"}) public void incrementalTest4() throws Exception { cleanBuildDir(); copyFile("helloworld/ClientInlined.adl", "helloworld/ClientInlined_modified.adl", new String[]{ "helloworld\\.ClientInlined", "helloworld.ClientInlined_modified"}); pause(); final Map<String, Long> t1 = recompileDefinition("helloworld.ClientInlined_modified"); pause(); Map<String, Long> t2 = recompileDefinition("helloworld.ClientInlined_modified"); Map<String, Long> t1Copy = new HashMap<String, Long>(t1); Map<String, Long> t2Copy = new HashMap<String, Long>(t2); assertUnchangedAll(".*", t1Copy, t2Copy); pause(); copyFile("helloworld/ClientInlined.adl", "helloworld/ClientInlined_modified.adl", new String[]{ "helloworld\\.ClientInlined", "helloworld.ClientInlined_modified"}, new String[]{"hello world", "Hello World !"}); pause(); t2 = recompileDefinition("helloworld.ClientInlined_modified"); t1Copy = new HashMap<String, Long>(t1); t2Copy = new HashMap<String, Long>(t2); assertChangedAll("helloworld/ClientInlined_modified_impl0.*", t1Copy, t2Copy); assertUnchanged("helloworld/ClientInlined_modified_ctrl_impl.c", t1Copy, t2Copy); assertChangedAll("helloworld/ClientInlined_modified_ctrl_impl.*", t1Copy, t2Copy); assertChanged("helloworld/ClientInlined_modified.def", t1Copy, t2Copy); assertUnchangedAll(".*", t1Copy, t2Copy); } @Test(groups = {"functional"}) public void incrementalTest5() throws Exception { cleanBuildDir(); copyFile("helloworld/Client.adl", "helloworld/Client_modified.adl", new String[]{"helloworld\\.Client", "helloworld.Client_modified"}, new String[]{"source client\\.c", "source client_modified.c"}); copyFile("helloworld/client.c", "helloworld/client_modified.c"); copyFile("helloworld/Helloworld.adl", "helloworld/Helloworld_modified.adl", new String[]{"helloworld\\.Helloworld", "helloworld.Helloworld_modified"}, new String[]{"contains Client", "contains Client_modified"}); pause(); final Map<String, Long> t1 = recompile( "GenericApplication<helloworld.Helloworld_modified>", "Helloworld_modified"); pause(); copyFile("helloworld/client.c", "helloworld/client_modified.c", new String[]{"hello world", "Hello World !"}); pause(); final Map<String, Long> t2 = recompile( "GenericApplication<helloworld.Helloworld_modified>", "Helloworld_modified"); final Map<String, Long> t1Copy = new HashMap<String, Long>(t1); final Map<String, Long> t2Copy = new HashMap<String, Long>(t2); assertUnchangedAll("helloworld/Helloworld.*", t1Copy, t2Copy); assertChangedAll("helloworld/Client_modified_impl0.*", t1Copy, t2Copy); assertUnchanged("helloworld/Client_modified_ctrl_impl.c", t1Copy, t2Copy); assertChangedAll("helloworld/Client_modified_ctrl_impl.*", t1Copy, t2Copy); assertChangedAll("Helloworld_modified(\\.exe)?", t1Copy, t2Copy); assertChanged("GenericApplication.map", t1Copy, t2Copy); assertUnchangedAll("GenericApplication.*Client_modified_instances.c", t1Copy, t2Copy); assertChangedAll("GenericApplication.*Client_modified.*", t1Copy, t2Copy); assertUnchangedAll(".*", t1Copy, t2Copy); } @Test(groups = {"functional"}) public void incrementalTest51() throws Exception { cleanBuildDir(); copyFile("helloworld/ClientInlined.adl", "helloworld/ClientInlined_modified.adl", new String[]{ "helloworld\\.ClientInlined", "helloworld.ClientInlined_modified"}); copyFile("helloworld/Helloworld.adl", "helloworld/Helloworld_modified.adl", new String[]{"helloworld\\.Helloworld", "helloworld.Helloworld_modified"}, new String[]{"contains Client", "contains ClientInlined_modified"}); pause(); final Map<String, Long> t1 = recompile( "GenericApplication<helloworld.Helloworld_modified>", "Helloworld_modified"); pause(); copyFile("helloworld/ClientInlined.adl", "helloworld/ClientInlined_modified.adl", new String[]{ "helloworld\\.ClientInlined", "helloworld.ClientInlined_modified"}, new String[]{"hello world", "Hello World !"}); pause(); final Map<String, Long> t2 = recompile( "GenericApplication<helloworld.Helloworld_modified>", "Helloworld_modified"); final Map<String, Long> t1Copy = new HashMap<String, Long>(t1); final Map<String, Long> t2Copy = new HashMap<String, Long>(t2); assertChanged("helloworld/ClientInlined_modified.def", t1Copy, t2Copy); assertChanged("helloworld/Helloworld_modified.def", t1Copy, t2Copy); assertUnchangedAll("helloworld/Helloworld.*", t1Copy, t2Copy); assertChangedAll("helloworld/ClientInlined_modified_impl0.*", t1Copy, t2Copy); assertUnchanged("helloworld/ClientInlined_modified_ctrl_impl.c", t1Copy, t2Copy); assertChangedAll("helloworld/ClientInlined_modified_ctrl_impl.*", t1Copy, t2Copy); assertChangedAll("Helloworld_modified(\\.exe)?", t1Copy, t2Copy); assertChangedAll("GenericApplication.*\\.def", t1Copy, t2Copy); assertChanged("GenericApplication.map", t1Copy, t2Copy); assertUnchangedAll( "GenericApplication.*ClientInlined_modified_instances.c", t1Copy, t2Copy); assertChangedAll("GenericApplication.*ClientInlined_modified.*", t1Copy, t2Copy); assertUnchangedAll(".*", t1Copy, t2Copy); } @Test(groups = {"functional"}) public void incrementalTest6() throws Exception { cleanBuildDir(); copyFile("helloworld/HelloworldAnonymous.adl", "helloworld/HelloworldAnonymous_modified.adl", new String[]{ "helloworld\\.HelloworldAnonymous", "helloworld.HelloworldAnonymous_modified"}); pause(); final Map<String, Long> t1 = recompile( "GenericApplication<helloworld.HelloworldAnonymous_modified>", "HelloworldAnonymous_modified"); pause(); Map<String, Long> t2 = recompile( "GenericApplication<helloworld.HelloworldAnonymous_modified>", "HelloworldAnonymous_modified"); Map<String, Long> t1Copy = new HashMap<String, Long>(t1); Map<String, Long> t2Copy = new HashMap<String, Long>(t2); assertChanged("GenericApplication.map", t1Copy, t2Copy); assertUnchangedAll(".*", t1Copy, t2Copy); copyFile("helloworld/HelloworldAnonymous.adl", "helloworld/HelloworldAnonymous_modified.adl", new String[]{ "helloworld\\.HelloworldAnonymous", "helloworld.HelloworldAnonymous_modified"}, new String[]{ "attribute int a", "attribute uint8_t a"}); pause(); t2 = recompile( "GenericApplication<helloworld.HelloworldAnonymous_modified>", "HelloworldAnonymous_modified"); t1Copy = new HashMap<String, Long>(t1); t2Copy = new HashMap<String, Long>(t2); assertChanged("helloworld/HelloworldAnonymous_modified.def", t1Copy, t2Copy); assertChangedAll("helloworld/HelloworldAnonymous_modified_anon_0_impl0.*", t1Copy, t2Copy); assertUnchanged( "helloworld/HelloworldAnonymous_modified_anon_0_ctrl_impl.c", t1Copy, t2Copy); assertChangedAll( "helloworld/HelloworldAnonymous_modified_anon_0_ctrl_impl.*", t1Copy, t2Copy); assertUnchanged("helloworld/HelloworldAnonymous_modified_anon_0.inc", t1Copy, t2Copy); assertUnchanged("helloworld/HelloworldAnonymous_modified_anon_0.macro", t1Copy, t2Copy); assertChangedAll("helloworld/HelloworldAnonymous_modified_anon_0.*", t1Copy, t2Copy); assertChangedAll("GenericApplication.*\\.def", t1Copy, t2Copy); assertChanged("GenericApplication.map", t1Copy, t2Copy); assertUnchangedAll( "GenericApplication.*HelloworldAnonymous_modified_anon_0_instances.c", t1Copy, t2Copy); assertChangedAll( "GenericApplication.*HelloworldAnonymous_modified_anon_0.*", t1Copy, t2Copy); assertChangedAll("HelloworldAnonymous_modified(\\.exe)?", t1Copy, t2Copy); } }