001 package org.apache.fulcrum.testcontainer; 002 /* 003 * Licensed to the Apache Software Foundation (ASF) under one 004 * or more contributor license agreements. See the NOTICE file 005 * distributed with this work for additional information 006 * regarding copyright ownership. The ASF licenses this file 007 * to you under the Apache License, Version 2.0 (the 008 * "License"); you may not use this file except in compliance 009 * with the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, 014 * software distributed under the License is distributed on an 015 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 016 * KIND, either express or implied. See the License for the 017 * specific language governing permissions and limitations 018 * under the License. 019 */ 020 import junit.framework.TestCase; 021 022 import org.apache.avalon.framework.component.ComponentException; 023 /** 024 * Base class for unit tests for components. This version doesn't load the container until the 025 * first request for a component. This allows the tester to populate the configurationFileName and 026 * roleFileName, possible one per test. 027 * 028 * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a> 029 * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a> 030 * @version $Id: BaseUnitTest.java 535465 2007-05-05 06:58:06Z tv $ 031 */ 032 public class BaseUnitTest extends TestCase 033 { 034 035 public static final String CONTAINER_ECM="CONTAINER_ECM"; 036 public static final String CONTAINER_YAAFI="CONTAINER_YAAFI"; 037 /** Key used in the context for defining the application root */ 038 public static String COMPONENT_APP_ROOT = Container.COMPONENT_APP_ROOT; 039 040 /** Pick the default container to be Yaafi **/ 041 public static String containerType = CONTAINER_YAAFI; 042 /** Container for the components */ 043 private Container container; 044 /** Setup our default configurationFileName */ 045 private String configurationFileName = "src/test/TestComponentConfig.xml"; 046 /** Setup our default roleFileName */ 047 private String roleFileName = "src/test/TestRoleConfig.xml"; 048 /** Setup our default parameterFileName */ 049 private String parameterFileName = null; 050 051 /** 052 * Gets the configuration file name for the container should use for this test. By default it 053 * is src/test/TestComponentConfig. 054 * 055 * @param configurationFileName 056 */ 057 protected void setConfigurationFileName(String configurationFileName) 058 { 059 this.configurationFileName = configurationFileName; 060 } 061 062 /** 063 * Override the role file name for the container should use for this test. By default it is 064 * src/test/TestRoleConfig. 065 * 066 * @param roleFileName 067 */ 068 protected void setRoleFileName(String roleFileName) 069 { 070 this.roleFileName = roleFileName; 071 } 072 073 /** 074 * Constructor for test. 075 * 076 * @param testName name of the test being executed 077 */ 078 public BaseUnitTest(String testName) 079 { 080 super(testName); 081 } 082 083 /** 084 * Clean up after each test is run. 085 */ 086 protected void tearDown() 087 { 088 if (container != null) 089 { 090 container.dispose(); 091 } 092 container = null; 093 } 094 /** 095 * Gets the configuration file name for the container should use for this test. 096 * 097 * @return The filename of the configuration file 098 */ 099 protected String getConfigurationFileName() 100 { 101 return configurationFileName; 102 } 103 /** 104 * Gets the role file name for the container should use for this test. 105 * 106 * @return The filename of the role configuration file 107 */ 108 protected String getRoleFileName() 109 { 110 return roleFileName; 111 } 112 /** 113 * Gets the parameter file name for the container should use for this test. 114 * 115 * @return The filename of the role configuration file 116 */ 117 protected String getParameterFileName() 118 { 119 return parameterFileName; 120 } 121 /** 122 * Returns an instance of the named component. Starts the container if it hasn't been started. 123 * 124 * @param roleName Name of the role the component fills. 125 * @throws ComponentException generic exception 126 */ 127 protected Object lookup(String roleName) throws ComponentException 128 { 129 if (container == null) 130 { 131 if(containerType.equals(CONTAINER_ECM)){ 132 container = new ECMContainer(); 133 } 134 else { 135 container = new YAAFIContainer(); 136 } 137 container.startup(getConfigurationFileName(), getRoleFileName(),getParameterFileName()); 138 } 139 return container.lookup(roleName); 140 } 141 142 /** 143 * Helper method for converting to and from Merlin Unit TestCase. 144 * @param roleName 145 * @return 146 * @throws ComponentException 147 */ 148 protected Object resolve(String roleName) throws ComponentException 149 { 150 return lookup(roleName); 151 } 152 /** 153 * Releases the component 154 * 155 * @param component 156 */ 157 protected void release(Object component) 158 { 159 if (container != null) 160 { 161 container.release(component); 162 } 163 } 164 }