/* * Copyright 2014 Bernd Vogt and others. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.sourcepit.b2.model.builder.util; import static org.sourcepit.b2.directory.parser.internal.module.ModelBuilderTestHarness.createModuleDirectory; import java.io.File; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.common.util.EList; import org.sourcepit.b2.files.ModuleDirectory; import org.sourcepit.b2.model.builder.B2ModelBuildingRequest; import org.sourcepit.b2.model.builder.IB2ModelBuilder; import org.sourcepit.b2.model.builder.internal.tests.harness.AbstractB2SessionWorkspaceTest; import org.sourcepit.b2.model.internal.builder.B2ModelBuilder; import org.sourcepit.b2.model.module.AbstractModule; import org.sourcepit.b2.model.module.BasicModule; import org.sourcepit.b2.model.module.CompositeModule; /** * @author Bernd */ public class DecouplingModelCacheTest extends AbstractB2SessionWorkspaceTest { @Override protected String setUpModulePath() { return "composed-component"; } public void testUndecoupled() throws Exception { final File moduleDir = getModuleDirByName("composite-layout"); // get dummy module files final File parentFile = moduleDir; final File simpleFile = new File(moduleDir, "simple-layout"); final File structuredFile = new File(moduleDir, "structured-layout"); final B2ModelBuilder builder = lookup(); B2ModelBuildingRequest request = new B2ModelBuildingRequest(); request.setModuleProperties(B2ModelBuildingRequest.newDefaultProperties()); request.setModuleDirectory(new ModuleDirectory(simpleFile, null)); BasicModule simpleModule = (BasicModule) builder.build(request); List<AbstractModule> currentModules = new ArrayList<AbstractModule>(); currentModules.add(simpleModule); request = new B2ModelBuildingRequest(); request.setModuleProperties(B2ModelBuildingRequest.newDefaultProperties()); request.setModuleDirectory(new ModuleDirectory(structuredFile, null)); BasicModule structuredModule = (BasicModule) builder.build(request); currentModules.add(structuredModule); request = new B2ModelBuildingRequest(); request.setModuleProperties(B2ModelBuildingRequest.newDefaultProperties()); request.setModuleDirectory(new ModuleDirectory(parentFile, null)); for (AbstractModule module : currentModules) { request.getModulesCache().put(module.getDirectory(), module); } request.setModuleDirectory(createModuleDirectory(moduleDir, simpleFile, structuredFile)); CompositeModule compositeModule = (CompositeModule) builder.build(request); assertEquals("composite", compositeModule.getLayoutId()); final EList<AbstractModule> modules = compositeModule.getModules(); assertEquals(2, modules.size()); // folder ordering differs between win and linux, we can't rely on the index int idx = modules.indexOf(simpleModule); assertTrue(idx > -1); assertSame(simpleModule, modules.get(idx)); idx = modules.indexOf(structuredModule); assertTrue(idx > -1); assertSame(structuredModule, modules.get(idx)); } public void testDecoupled() throws Exception { final File moduleDir = getModuleDirByName("composite-layout"); // get dummy module files final File parentFile = moduleDir; final File simpleFile = new File(moduleDir, "simple-layout"); final File structuredFile = new File(moduleDir, "structured-layout"); final B2ModelBuilder builder = lookup(); B2ModelBuildingRequest request = new B2ModelBuildingRequest(); request.setModuleProperties(B2ModelBuildingRequest.newDefaultProperties()); request.setModuleDirectory(new ModuleDirectory(simpleFile, null)); BasicModule simpleModule = (BasicModule) builder.build(request); List<AbstractModule> currentModules = new ArrayList<AbstractModule>(); currentModules.add(simpleModule); request = new B2ModelBuildingRequest(); request.setModuleProperties(B2ModelBuildingRequest.newDefaultProperties()); request.setModuleDirectory(new ModuleDirectory(structuredFile, null)); BasicModule structuredModule = (BasicModule) builder.build(request); currentModules.add(structuredModule); request = new B2ModelBuildingRequest(); request.setModuleProperties(B2ModelBuildingRequest.newDefaultProperties()); request.setModuleDirectory(new ModuleDirectory(parentFile, null)); for (AbstractModule module : currentModules) { request.getModulesCache().put(module.getDirectory(), module); } request.setModuleDirectory(createModuleDirectory(moduleDir, simpleFile, structuredFile)); CompositeModule compositeModule = (CompositeModule) builder.build(request); assertEquals("composite", compositeModule.getLayoutId()); final EList<AbstractModule> modules = compositeModule.getModules(); assertEquals(2, modules.size()); } private B2ModelBuilder lookup() throws Exception { return (B2ModelBuilder) lookup(IB2ModelBuilder.class); } }