/* * Copyright (C) 2010 Brockmann Consult GmbH (info@brockmann-consult.de) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU 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 General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, see http://www.gnu.org/licenses/ */ package com.bc.ceres.core.runtime.internal; import com.bc.ceres.core.CoreException; import com.bc.ceres.core.runtime.Extension; import com.bc.ceres.core.runtime.ExtensionPoint; import com.bc.ceres.core.runtime.Module; import junit.framework.TestCase; import java.io.IOException; public class ModuleRegistryTest extends TestCase { public void testNullArgConvention() throws CoreException { ModuleRegistry moduleRegistry = new ModuleRegistry(); try { moduleRegistry.registerModule(null); fail("NullPointerException expected"); } catch (NullPointerException e) { // Expected } } public void testNewModuleRegistryIsEmpty() { ModuleRegistry moduleRegistry = new ModuleRegistry(); assertNotNull(moduleRegistry.getModules()); assertEquals(0, moduleRegistry.getModules().length); } public void testRegisteringDuplicates() throws CoreException, IOException { ModuleRegistry moduleRegistry = TestHelpers.createModuleRegistry(new String[]{ "xml/module-a.xml", "xml/module-b.xml", "xml/module-c.xml", "xml/module-c-v2.xml", "xml/module-c-v3.xml", }); ModuleImpl moduleAClone = TestHelpers.parseModuleManifestWithDummyLocation("xml/module-a.xml"); ModuleImpl moduleBClone = TestHelpers.parseModuleManifestWithDummyLocation("xml/module-b.xml"); ModuleImpl moduleCClone = TestHelpers.parseModuleManifestWithDummyLocation("xml/module-c.xml"); ModuleImpl moduleA = moduleRegistry.getModule(1); ModuleImpl moduleB = moduleRegistry.getModule(2); ModuleImpl moduleC = moduleRegistry.getModule(3); ModuleImpl moduleCv2 = moduleRegistry.getModule(4); ModuleImpl moduleCv3 = moduleRegistry.getModule(5); assertNotNull(moduleA); assertSame(moduleA, moduleRegistry.getModule(moduleA.getModuleId())); assertSame(moduleA, moduleRegistry.getModule(moduleA.getLocation())); assertEquals(new ModuleImpl[]{moduleA}, moduleRegistry.getModules(moduleA.getSymbolicName())); assertNotNull(moduleB); assertSame(moduleB, moduleRegistry.getModule(moduleB.getModuleId())); assertSame(moduleB, moduleRegistry.getModule(moduleB.getLocation())); assertEquals(new ModuleImpl[]{moduleB}, moduleRegistry.getModules(moduleB.getSymbolicName())); assertSame(moduleC, moduleRegistry.getModule(moduleC.getModuleId())); assertSame(moduleC, moduleRegistry.getModule(moduleC.getLocation())); assertSame(moduleCv2, moduleRegistry.getModule(moduleCv2.getModuleId())); assertSame(moduleCv2, moduleRegistry.getModule(moduleCv2.getLocation())); assertSame(moduleCv3, moduleRegistry.getModule(moduleCv3.getModuleId())); assertSame(moduleCv3, moduleRegistry.getModule(moduleCv3.getLocation())); assertEquals(new ModuleImpl[]{moduleC, moduleCv2, moduleCv3}, moduleRegistry.getModules(moduleC.getSymbolicName())); assertEquals(new ModuleImpl[]{moduleC, moduleCv2, moduleCv3}, moduleRegistry.getModules(moduleCv2.getSymbolicName())); assertEquals(new ModuleImpl[]{moduleC, moduleCv2, moduleCv3}, moduleRegistry.getModules(moduleCv3.getSymbolicName())); try { moduleRegistry.registerModule(moduleAClone); fail("CoreException expected"); } catch (CoreException e) { // expected } try { moduleRegistry.registerModule(moduleBClone); fail("CoreException expected"); } catch (CoreException e) { // expected } try { moduleRegistry.registerModule(moduleCClone); fail("CoreException expected"); } catch (CoreException e) { // expected } } private void assertEquals(ModuleImpl[] expected, ModuleImpl[] actual) { assertNotNull(actual); assertEquals(expected.length, actual.length); for (int i = 0; i < expected.length; i++) { assertEquals(expected[i].getSymbolicName() + "?", expected[i], actual[i]); } } public void testGetModulesReturnsArrayCopies() throws CoreException, IOException { ModuleRegistry moduleRegistry = TestHelpers.createModuleRegistry(new String[]{ "xml/module-a.xml", "xml/module-b.xml", }); Module[] modulesFromCall1 = moduleRegistry.getModules(); assertNotNull(modulesFromCall1); assertEquals(2, modulesFromCall1.length); Module[] modulesFromCall2 = moduleRegistry.getModules(); assertNotNull(modulesFromCall2); assertEquals(modulesFromCall1.length, modulesFromCall2.length); assertNotSame(modulesFromCall1, modulesFromCall2); assertEquals(modulesFromCall1[0].getSymbolicName(), modulesFromCall2[0].getSymbolicName()); assertEquals(modulesFromCall1[1].getSymbolicName(), modulesFromCall2[1].getSymbolicName()); modulesFromCall1[0] = null; modulesFromCall1[1] = null; modulesFromCall1 = moduleRegistry.getModules(); assertNotNull(modulesFromCall1[0]); assertNotNull(modulesFromCall1[1]); } public void testRegisterAndGetModule() throws CoreException, IOException { ModuleRegistry moduleRegistry = TestHelpers.createModuleRegistry(new String[]{ /*id=1*/ "xml/module-a.xml", /*id=2*/ "xml/module-b.xml", /*id=3*/ "xml/module-c.xml", /*id=4*/ "xml/module-d.xml", /*id=5*/ "xml/module-e.xml", }); Module module_1 = moduleRegistry.getModule(1); Module module_2 = moduleRegistry.getModule(2); Module module_3 = moduleRegistry.getModule(3); Module module_4 = moduleRegistry.getModule(4); Module module_5 = moduleRegistry.getModule(5); assertNotNull(module_1); assertNotNull(module_2); assertNotNull(module_3); assertNotNull(module_4); assertNotNull(module_5); Extension e_31 = module_3.getExtensions()[0]; Extension e_32 = module_3.getExtensions()[1]; Extension e_33 = module_3.getExtensions()[2]; Extension e_34 = module_3.getExtensions()[3]; Extension e_35 = module_3.getExtensions()[4]; Extension e_36 = module_3.getExtensions()[5]; assertEquals(3, module_2.getExtensionPoints().length); ExtensionPoint ep_21 = module_2.getExtensionPoints()[0]; ExtensionPoint ep_22 = module_2.getExtensionPoints()[1]; ExtensionPoint ep_23 = module_2.getExtensionPoints()[2]; assertEquals(2, module_4.getExtensionPoints().length); ExtensionPoint ep_41 = module_4.getExtensionPoints()[0]; ExtensionPoint ep_42 = module_4.getExtensionPoints()[1]; assertSame(ep_21, e_31.getExtensionPoint()); assertSame(ep_21, e_32.getExtensionPoint()); assertSame(ep_22, e_33.getExtensionPoint()); assertSame(ep_23, e_34.getExtensionPoint()); assertSame(ep_23, e_35.getExtensionPoint()); assertSame(ep_23, e_36.getExtensionPoint()); assertSame(ep_23, e_35.getExtensionPoint()); assertSame(ep_23, e_36.getExtensionPoint()); assertSame(ep_21, moduleRegistry.getExtensionPoint("module-b:ep-1")); assertSame(ep_22, moduleRegistry.getExtensionPoint("module-b:ep-2")); assertSame(ep_23, moduleRegistry.getExtensionPoint("module-b:ep-3")); assertEquals(3, ep_21.getExtensions().length); assertEquals(4, ep_22.getExtensions().length); assertEquals(5, ep_23.getExtensions().length); assertEquals(0, ep_41.getExtensions().length); assertEquals(2, ep_42.getExtensions().length); assertEquals(3, moduleRegistry.getExtensions("module-b:ep-1").length); assertEquals(4, moduleRegistry.getExtensions("module-b:ep-2").length); assertEquals(5, moduleRegistry.getExtensions("module-b:ep-3").length); assertEquals(0, moduleRegistry.getExtensions("module-d:ep-1").length); assertEquals(2, moduleRegistry.getExtensions("module-d:ep-2").length); // Test that the two extension points declared in module-b are returned first // and appear in the order they are declared. Extension[] extensions = moduleRegistry.getExtensions("module-b:ep-2"); assertEquals("e-bb21", extensions[0].getId()); assertEquals("e-bb22", extensions[1].getId()); assertSame(e_31, module_3.getExtension("e-cb11")); assertSame(e_32, module_3.getExtension("e-cb12")); assertSame(e_33, module_3.getExtension("e-cb21")); assertSame(e_34, module_3.getExtension("e-cb31")); assertSame(e_35, module_3.getExtension("e-cb32")); assertSame(e_36, module_3.getExtension("e-cb33")); } }