From c5bb48d71ad5d71e389137e5fb95f96d9005a942 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Tue, 13 Oct 2009 08:17:50 +0000 Subject: [PATCH] INtroduce JUNit Support git-svn-id: https://svn.argeo.org/commons/trunk@3017 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- basic/pom.xml | 1 + .../org.argeo.support.junit/.classpath | 7 ++ .../runtime/org.argeo.support.junit/.project | 23 +++++ .../.settings/org.eclipse.jdt.core.prefs | 5 + .../.settings/org.maven.ide.eclipse.prefs | 9 ++ basic/runtime/org.argeo.support.junit/pom.xml | 60 ++++++++++++ .../support/junit/AbstractSpringTestCase.java | 93 +++++++++++++++++++ basic/runtime/pom.xml | 18 ++++ .../argeo/server/jxl/dao/JxlDaoSupport.java | 39 +++++--- .../server/jxl/dao/JxlDaoSupportTest.java | 45 ++++----- 10 files changed, 259 insertions(+), 41 deletions(-) create mode 100644 basic/runtime/org.argeo.support.junit/.classpath create mode 100644 basic/runtime/org.argeo.support.junit/.project create mode 100644 basic/runtime/org.argeo.support.junit/.settings/org.eclipse.jdt.core.prefs create mode 100644 basic/runtime/org.argeo.support.junit/.settings/org.maven.ide.eclipse.prefs create mode 100644 basic/runtime/org.argeo.support.junit/pom.xml create mode 100644 basic/runtime/org.argeo.support.junit/src/main/java/org/argeo/support/junit/AbstractSpringTestCase.java create mode 100644 basic/runtime/pom.xml diff --git a/basic/pom.xml b/basic/pom.xml index 197b7f744..e9f9d00e6 100644 --- a/basic/pom.xml +++ b/basic/pom.xml @@ -13,5 +13,6 @@ pom dep + runtime \ No newline at end of file diff --git a/basic/runtime/org.argeo.support.junit/.classpath b/basic/runtime/org.argeo.support.junit/.classpath new file mode 100644 index 000000000..16f01e2ee --- /dev/null +++ b/basic/runtime/org.argeo.support.junit/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/basic/runtime/org.argeo.support.junit/.project b/basic/runtime/org.argeo.support.junit/.project new file mode 100644 index 000000000..9b9565dee --- /dev/null +++ b/basic/runtime/org.argeo.support.junit/.project @@ -0,0 +1,23 @@ + + + org.argeo.support.junit + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.maven.ide.eclipse.maven2Builder + + + + + + org.maven.ide.eclipse.maven2Nature + org.eclipse.jdt.core.javanature + + diff --git a/basic/runtime/org.argeo.support.junit/.settings/org.eclipse.jdt.core.prefs b/basic/runtime/org.argeo.support.junit/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..383a4ec69 --- /dev/null +++ b/basic/runtime/org.argeo.support.junit/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +#Tue Oct 13 10:02:09 CEST 2009 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/basic/runtime/org.argeo.support.junit/.settings/org.maven.ide.eclipse.prefs b/basic/runtime/org.argeo.support.junit/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 000000000..721e27ec2 --- /dev/null +++ b/basic/runtime/org.argeo.support.junit/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,9 @@ +#Tue Oct 13 10:01:59 CEST 2009 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +skipCompilerPlugin=true +version=1 diff --git a/basic/runtime/org.argeo.support.junit/pom.xml b/basic/runtime/org.argeo.support.junit/pom.xml new file mode 100644 index 000000000..dbf12cec4 --- /dev/null +++ b/basic/runtime/org.argeo.support.junit/pom.xml @@ -0,0 +1,60 @@ + + 4.0.0 + + org.argeo.commons.basic + runtime + 0.1.1-SNAPSHOT + .. + + org.argeo.support.junit + Commons Support JUnit + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.apache.maven.plugins + maven-source-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + org.apache.felix + maven-bundle-plugin + ${version.maven-bundle-plugin} + + + + org.argeo.support.junit.* + + + + + + + + + org.junit + com.springsource.junit + + + org.springframework + org.springframework.core + + + org.springframework + org.springframework.context + + + + + org.slf4j + com.springsource.slf4j.org.apache.commons.logging + + + diff --git a/basic/runtime/org.argeo.support.junit/src/main/java/org/argeo/support/junit/AbstractSpringTestCase.java b/basic/runtime/org.argeo.support.junit/src/main/java/org/argeo/support/junit/AbstractSpringTestCase.java new file mode 100644 index 000000000..7971a8d52 --- /dev/null +++ b/basic/runtime/org.argeo.support.junit/src/main/java/org/argeo/support/junit/AbstractSpringTestCase.java @@ -0,0 +1,93 @@ +package org.argeo.support.junit; + +import java.util.Map; + +import junit.framework.TestCase; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.BeanFactoryUtils; +import org.springframework.beans.factory.ListableBeanFactory; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + + +/** Helper for tests using a Spring application context. */ +public abstract class AbstractSpringTestCase extends TestCase { + protected final Log log = LogFactory.getLog(getClass()); + private ConfigurableApplicationContext context; + + /** + * Gets (and create if necessary) the application context to use. Default + * implementation uses a class path xml application context and calls + * {@link #getApplicationContextLocation()}. + */ + protected ConfigurableApplicationContext getContext() { + if (context == null) { + context = new ClassPathXmlApplicationContext( + getApplicationContextLocation()); + if (getIsStartContext()) + context.start(); + } + return context; + } + + /** Whether the context should be started after being created. */ + protected Boolean getIsStartContext() { + return false; + } + + /** Returns a bean from the underlying context */ + @SuppressWarnings(value = { "unchecked" }) + protected T getBean(String beanId) { + return (T) getContext().getBean(beanId); + } + + protected T getBean(Class clss) { + T bean = loadSingleFromContext(getContext(), clss); + if (bean == null) { + throw new RuntimeException("Cannot retrieve a unique bean of type " + + clss); + } else { + return bean; + } + } + + /** + * Th location of the application to load. The default implementation + * returns applicationContext.xml found in the same package as the + * test. + */ + protected String getApplicationContextLocation() { + return inPackage("applicationContext.xml"); + } + + /** + * Prefixes the package of the class after converting the '.' to '/' in + * order to have a resource path. + */ + protected String inPackage(String suffix) { + String prefix = getClass().getPackage().getName().replace('.', '/'); + return prefix + '/' + suffix; + } + + @SuppressWarnings(value = { "unchecked" }) + protected T loadSingleFromContext(ListableBeanFactory context, + Class clss) { + Map beans = BeanFactoryUtils.beansOfTypeIncludingAncestors( + context, clss, false, false); + if (beans.size() == 1) { + return beans.values().iterator().next(); + } else if (beans.size() > 1) { + if (log.isDebugEnabled()) { + log + .debug(("Found more that on bean for type " + clss + + ": " + beans.keySet())); + } + return null; + } else { + return null; + } + } + +} diff --git a/basic/runtime/pom.xml b/basic/runtime/pom.xml new file mode 100644 index 000000000..058e0f5a3 --- /dev/null +++ b/basic/runtime/pom.xml @@ -0,0 +1,18 @@ + + + 4.0.0 + + org.argeo.commons + 0.1.1-SNAPSHOT + basic + .. + + org.argeo.commons.basic + runtime + Commons Basic Runtime + pom + + org.argeo.support.junit + + \ No newline at end of file diff --git a/server/runtime/org.argeo.server.jxl/src/main/java/org/argeo/server/jxl/dao/JxlDaoSupport.java b/server/runtime/org.argeo.server.jxl/src/main/java/org/argeo/server/jxl/dao/JxlDaoSupport.java index 0488d5198..7b4110d8e 100644 --- a/server/runtime/org.argeo.server.jxl/src/main/java/org/argeo/server/jxl/dao/JxlDaoSupport.java +++ b/server/runtime/org.argeo.server.jxl/src/main/java/org/argeo/server/jxl/dao/JxlDaoSupport.java @@ -45,37 +45,42 @@ public class JxlDaoSupport implements LightDaoSupport, ApplicationContextAware, private List workbooks = new ArrayList(); public void afterPropertiesSet() throws Exception { + init(); + } + + public void init() { + // used to resolve inner references + Map> tempRefs = new HashMap>(); + + List references = new ArrayList(); + for (Resource res : workbooks) { InputStream in = null; try { in = res.getInputStream(); - load(in); + load(in, references, tempRefs); + } catch (Exception e) { + throw new ArgeoServerException("Cannot load stream", e); } finally { IOUtils.closeQuietly(in); } } + // Inject references + for (Reference ref : references) { + injectReference(ref, tempRefs); + } + if (log.isDebugEnabled()) + log.debug(references.size() + " references linked"); } - public void load(InputStream in) { + public void load(InputStream in, List references, + Map> tempRefs) { try { - // used to resolve inner references - Map> tempRefs = new HashMap>(); - - List references = new ArrayList(); - Workbook workbook = Workbook.getWorkbook(in); - for (Sheet sheet : workbook.getSheets()) { loadSheet(sheet, references, tempRefs); } - - for (Reference ref : references) { - injectReference(ref, tempRefs); - } - if (log.isDebugEnabled()) - log.debug(references.size() + " references linked"); - } catch (Exception e) { throw new ArgeoServerException("Cannot load workbook", e); } @@ -130,6 +135,10 @@ public class JxlDaoSupport implements LightDaoSupport, ApplicationContextAware, if (cell instanceof FormulaCell) { String formula = ((FormulaCell) cell).getFormula(); int index = formula.indexOf('!'); + if (index < 0) + throw new ArgeoServerException("Cannot interpret formula " + + formula); + ; String targetSheet = formula.substring(0, index); // assume no double letters!! String targetRowStr = formula.substring(index + 2); diff --git a/server/runtime/org.argeo.server.jxl/src/test/java/org/argeo/server/jxl/dao/JxlDaoSupportTest.java b/server/runtime/org.argeo.server.jxl/src/test/java/org/argeo/server/jxl/dao/JxlDaoSupportTest.java index 5de2b5af1..0a003b6b7 100644 --- a/server/runtime/org.argeo.server.jxl/src/test/java/org/argeo/server/jxl/dao/JxlDaoSupportTest.java +++ b/server/runtime/org.argeo.server.jxl/src/test/java/org/argeo/server/jxl/dao/JxlDaoSupportTest.java @@ -1,40 +1,33 @@ package org.argeo.server.jxl.dao; -import java.io.InputStream; import java.util.List; import junit.framework.TestCase; +import org.springframework.core.io.ClassPathResource; + public class JxlDaoSupportTest extends TestCase { public void testBasic() throws Exception { JxlDaoSupport jsd = new JxlDaoSupport(); jsd.getExternalRefs().put("test", new OtherObject()); - InputStream in = null; - try { - in = getClass().getResourceAsStream("/dao/simple.xls"); - jsd.load(in); - - SimpleObject soAaa = jsd.getByKey(SimpleObject.class, "aaa"); - assertNotNull(soAaa); - assertEquals("aaa", soAaa.getString()); - assertEquals(1, soAaa.getInteger().intValue()); - assertNotNull(soAaa.getOtherObject()); - assertEquals("USD", soAaa.getOtherObject().getKey()); - assertEquals("US Dollar", soAaa.getOtherObject().getValue()); - - SimpleObject soBbb = jsd.getByKey(SimpleObject.class, "bbb"); - assertNotNull(soBbb.getOtherObject()); - assertEquals("bbb", ((SimpleObject) soBbb.getOtherObject() - .getValue()).getString()); - - List simpleObjects = jsd.list(SimpleObject.class, - null); - assertEquals(2, simpleObjects.size()); - } finally { - if (in != null) - in.close(); - } + jsd.getWorkbooks().add(new ClassPathResource("/dao/simple.xls")); + jsd.init(); + + SimpleObject soAaa = jsd.getByKey(SimpleObject.class, "aaa"); + assertNotNull(soAaa); + assertEquals("aaa", soAaa.getString()); + assertEquals(1, soAaa.getInteger().intValue()); + assertNotNull(soAaa.getOtherObject()); + assertEquals("USD", soAaa.getOtherObject().getKey()); + assertEquals("US Dollar", soAaa.getOtherObject().getValue()); + + SimpleObject soBbb = jsd.getByKey(SimpleObject.class, "bbb"); + assertNotNull(soBbb.getOtherObject()); + assertEquals("bbb", ((SimpleObject) soBbb.getOtherObject().getValue()) + .getString()); + List simpleObjects = jsd.list(SimpleObject.class, null); + assertEquals(2, simpleObjects.size()); } } -- 2.30.2