/* * 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.internal.builder; 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.directory.parser.internal.module.ModelBuilderTestHarness; 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.builder.internal.tests.harness.EcoreUtils; import org.sourcepit.b2.model.module.AbstractModule; import org.sourcepit.b2.model.module.BasicModule; import org.sourcepit.b2.model.module.CompositeModule; import org.sourcepit.b2.model.module.PluginProject; import org.sourcepit.b2.model.module.PluginsFacet; import org.sourcepit.b2.model.module.test.internal.harness.B2ModelHarness; /** * @author Bernd */ public class B2ModelBuilderTest extends AbstractB2SessionWorkspaceTest { @Override protected String setUpModulePath() { if ("testComposedComposite".equals(getName())) { return "composed-component"; } return "composed-component/simple-layout"; } public void testBasic() throws Exception { B2ModelBuilder module = lookup(); assertNotNull(module); } public void testNull() throws Exception { B2ModelBuilder module = lookup(); try { module.build(null); fail(); } catch (IllegalArgumentException e) { } B2ModelBuildingRequest request = new B2ModelBuildingRequest(); request.setModuleProperties(B2ModelBuildingRequest.newDefaultProperties()); try { module.build(request); fail(); } catch (IllegalArgumentException e) { } request.setModuleDirectory(new ModuleDirectory(new File(""), null)); request.setModuleProperties(null); try { module.build(request); fail(); } catch (IllegalArgumentException e) { } } public void testSimpleComponent() throws Exception { File coreResources = getModuleDirs().get(0); assertTrue(coreResources.canRead()); B2ModelBuildingRequest request = new B2ModelBuildingRequest(); request.setModuleProperties(ModelBuilderTestHarness.newProperties(coreResources)); request.setModuleDirectory(new ModuleDirectory(coreResources, null)); B2ModelBuilder modelBuilder = lookup(); BasicModule module = (BasicModule) modelBuilder.build(request); assertNotNull(module); assertNotNull(module.getId()); assertEquals("org.sourcepit.b2.test.resources.simple.layout", module.getId()); assertEquals(4, module.getFacets().size()); PluginsFacet pluginsFacet = module.getFacetByName("plugins"); assertNotNull(pluginsFacet); EList<PluginProject> plugins = pluginsFacet.getProjects(); assertEquals(2, plugins.size()); PluginsFacet testsFacet = module.getFacetByName("tests"); assertNotNull(testsFacet); EList<PluginProject> tests = pluginsFacet.getProjects(); assertEquals(2, tests.size()); } public void testComposedComposite() throws Exception { final File moduleDir = getModuleDirByName("composite-layout"); assertNotNull(moduleDir); // 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); assertNotNull(simpleModule); 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 final boolean firstIsSimple = modules.get(0).getDirectory().equals(simpleModule.getDirectory()); EcoreUtils.assertEEquals(simpleModule, (BasicModule) modules.get(firstIsSimple ? 0 : 1)); EcoreUtils.assertEEquals(structuredModule, (BasicModule) modules.get(firstIsSimple ? 1 : 0)); } public void testSkipInterpolator() throws Exception { File coreResources = getModuleDirs().get(0); assertTrue(coreResources.canRead()); B2ModelBuildingRequest request = new B2ModelBuildingRequest(); request.setModuleProperties(B2ModelBuildingRequest.newDefaultProperties()); request.setModuleDirectory(new ModuleDirectory(coreResources, null)); request.setInterpolate(true); B2ModelBuilder modelBuilder = lookup(); BasicModule module = (BasicModule) modelBuilder.build(request); assertNotNull(module); B2ModelHarness.assertHasDerivedElements(module); request.setInterpolate(false); module = (BasicModule) modelBuilder.build(request); assertNotNull(module); B2ModelHarness.assertHasNoDerivedElements(module); } private B2ModelBuilder lookup() throws Exception { return (B2ModelBuilder) lookup(IB2ModelBuilder.class); } }