[jboss-cvs] JBossAS SVN: r105242 - in projects/mc-script/trunk: src/main/java/org/jboss/beans and 8 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed May 26 07:40:21 EDT 2010
Author: alesj
Date: 2010-05-26 07:40:19 -0400 (Wed, 26 May 2010)
New Revision: 105242
Added:
projects/mc-script/trunk/src/main/java/org/jboss/beans/bsh/
projects/mc-script/trunk/src/main/java/org/jboss/beans/bsh/BshScriptEngine.java
projects/mc-script/trunk/src/main/java/org/jboss/beans/bsh/BshScriptEngineFactory.java
projects/mc-script/trunk/src/main/resources/META-INF/
projects/mc-script/trunk/src/main/resources/META-INF/services/
projects/mc-script/trunk/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory
Modified:
projects/mc-script/trunk/pom.xml
projects/mc-script/trunk/src/main/java/org/jboss/beans/mock/Mock.java
projects/mc-script/trunk/src/main/java/org/jboss/beans/mock/MockConstructorJoinpoint.java
projects/mc-script/trunk/src/main/java/org/jboss/beans/mock/MockImpl.java
projects/mc-script/trunk/src/main/java/org/jboss/beans/mock/MockMetaData.java
projects/mc-script/trunk/src/test/java/org/jboss/test/beans/mock/support/IBean.java
projects/mc-script/trunk/src/test/java/org/jboss/test/beans/mock/test/MockSmokeTestCase.java
projects/mc-script/trunk/src/test/resources/org/jboss/test/beans/mock/test/MockSmokeTestCase.xml
Log:
Hide BSH behind javax.script.
Modified: projects/mc-script/trunk/pom.xml
===================================================================
--- projects/mc-script/trunk/pom.xml 2010-05-26 10:47:23 UTC (rev 105241)
+++ projects/mc-script/trunk/pom.xml 2010-05-26 11:40:19 UTC (rev 105242)
@@ -25,6 +25,7 @@
<version.org.jboss.man>2.1.1.SP2</version.org.jboss.man>
<version.org.jboss.kernel>2.2.0.Alpha10</version.org.jboss.kernel>
<version.mockito>1.8.4</version.mockito>
+ <version.bsh>1.3.0</version.bsh>
<version.javassist>3.12.0.GA</version.javassist>
<version.org.jboss.test>1.1.1.GA</version.org.jboss.test>
<version.junit>4.4</version.junit>
@@ -121,6 +122,11 @@
<version>${version.mockito}</version>
</dependency>
<dependency>
+ <groupId>bsh</groupId>
+ <artifactId>bsh</artifactId>
+ <version>${version.bsh}</version>
+ </dependency>
+ <dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>${version.javassist}</version>
Added: projects/mc-script/trunk/src/main/java/org/jboss/beans/bsh/BshScriptEngine.java
===================================================================
--- projects/mc-script/trunk/src/main/java/org/jboss/beans/bsh/BshScriptEngine.java (rev 0)
+++ projects/mc-script/trunk/src/main/java/org/jboss/beans/bsh/BshScriptEngine.java 2010-05-26 11:40:19 UTC (rev 105242)
@@ -0,0 +1,142 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.beans.bsh;
+
+import javax.script.*;
+
+import java.io.Reader;
+import java.util.Collections;
+import java.util.List;
+
+import bsh.EvalError;
+import bsh.Interpreter;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class BshScriptEngine implements ScriptEngine
+{
+ private Interpreter interpreter;
+
+ public BshScriptEngine()
+ {
+ interpreter = new Interpreter();
+ }
+
+ public Object eval(String script, ScriptContext context) throws ScriptException
+ {
+ return null;
+ }
+
+ public Object eval(Reader reader, ScriptContext context) throws ScriptException
+ {
+ return null;
+ }
+
+ public Object eval(String script) throws ScriptException
+ {
+ try
+ {
+ return interpreter.eval(script);
+ }
+ catch (EvalError evalError)
+ {
+ throw new ScriptException(evalError);
+ }
+ }
+
+ public Object eval(Reader reader) throws ScriptException
+ {
+ return null;
+ }
+
+ public Object eval(String script, Bindings n) throws ScriptException
+ {
+ return null;
+ }
+
+ public Object eval(Reader reader, Bindings n) throws ScriptException
+ {
+ return null;
+ }
+
+ public void put(String key, Object value)
+ {
+ try
+ {
+ interpreter.set(key, value);
+ }
+ catch (EvalError evalError)
+ {
+ throw new RuntimeException(evalError);
+ }
+ }
+
+ public Object get(String key)
+ {
+ try
+ {
+ return interpreter.get(key);
+ }
+ catch (EvalError evalError)
+ {
+ throw new RuntimeException(evalError);
+ }
+ }
+
+ public Bindings getBindings(int scope)
+ {
+ return null;
+ }
+
+ public void setBindings(Bindings bindings, int scope)
+ {
+ if (scope == ScriptContext.GLOBAL_SCOPE)
+ {
+ ClassLoader cl = (ClassLoader) bindings.get(ClassLoader.class.getName());
+ if (cl == null)
+ throw new IllegalArgumentException("No classloader in bindings: " + bindings);
+
+ interpreter.setClassLoader(cl);
+ }
+ }
+
+ public Bindings createBindings()
+ {
+ return null;
+ }
+
+ public ScriptContext getContext()
+ {
+ return null;
+ }
+
+ public void setContext(ScriptContext context)
+ {
+ }
+
+ public ScriptEngineFactory getFactory()
+ {
+ return new BshScriptEngineFactory();
+ }
+}
\ No newline at end of file
Added: projects/mc-script/trunk/src/main/java/org/jboss/beans/bsh/BshScriptEngineFactory.java
===================================================================
--- projects/mc-script/trunk/src/main/java/org/jboss/beans/bsh/BshScriptEngineFactory.java (rev 0)
+++ projects/mc-script/trunk/src/main/java/org/jboss/beans/bsh/BshScriptEngineFactory.java 2010-05-26 11:40:19 UTC (rev 105242)
@@ -0,0 +1,95 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.beans.bsh;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineFactory;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
+ */
+public class BshScriptEngineFactory implements ScriptEngineFactory
+{
+ public String getEngineName()
+ {
+ return "bsh";
+ }
+
+ public String getEngineVersion()
+ {
+ return "1.0.0.Alpha1";
+ }
+
+ public List<String> getExtensions()
+ {
+ return Collections.singletonList("bsh");
+ }
+
+ public List<String> getMimeTypes()
+ {
+ return Collections.singletonList("bsh");
+ }
+
+ public List<String> getNames()
+ {
+ return Collections.singletonList("bsh");
+ }
+
+ public String getLanguageName()
+ {
+ return "bsh";
+ }
+
+ public String getLanguageVersion()
+ {
+ return "1.4";
+ }
+
+ public Object getParameter(String key)
+ {
+ return null;
+ }
+
+ public String getMethodCallSyntax(String obj, String m, String... args)
+ {
+ return null;
+ }
+
+ public String getOutputStatement(String toDisplay)
+ {
+ return null;
+ }
+
+ public String getProgram(String... statements)
+ {
+ return null;
+ }
+
+ public ScriptEngine getScriptEngine()
+ {
+ return new BshScriptEngine();
+ }
+}
Modified: projects/mc-script/trunk/src/main/java/org/jboss/beans/mock/Mock.java
===================================================================
--- projects/mc-script/trunk/src/main/java/org/jboss/beans/mock/Mock.java 2010-05-26 10:47:23 UTC (rev 105241)
+++ projects/mc-script/trunk/src/main/java/org/jboss/beans/mock/Mock.java 2010-05-26 11:40:19 UTC (rev 105242)
@@ -35,4 +35,11 @@
* @return mock-code
*/
String value() default "";
+
+ /**
+ * The bean name used in the mock code.
+ *
+ * @return the bean name
+ */
+ String name() default "mock";
}
\ No newline at end of file
Modified: projects/mc-script/trunk/src/main/java/org/jboss/beans/mock/MockConstructorJoinpoint.java
===================================================================
--- projects/mc-script/trunk/src/main/java/org/jboss/beans/mock/MockConstructorJoinpoint.java 2010-05-26 10:47:23 UTC (rev 105241)
+++ projects/mc-script/trunk/src/main/java/org/jboss/beans/mock/MockConstructorJoinpoint.java 2010-05-26 11:40:19 UTC (rev 105242)
@@ -22,12 +22,15 @@
package org.jboss.beans.mock;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+
import org.jboss.joinpoint.plugins.BasicConstructorJoinPoint;
import org.jboss.metadata.spi.MetaData;
import org.jboss.reflect.spi.ClassInfo;
import org.jboss.reflect.spi.ConstructorInfo;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.mock;
/**
* Mock ctor joinpoint.
@@ -52,7 +55,24 @@
if (mock != null)
{
ClassInfo classInfo = constructorInfo.getDeclaringClass();
- return mock(classInfo.getType()); // TODO -- args, mock-code, ...
+ Object result = mock(classInfo.getType());
+ String code = mock.value();
+ if (code != null)
+ {
+ code = code.trim();
+ if (code.length() > 0)
+ {
+ ScriptEngineManager manager = new ScriptEngineManager(getClass().getClassLoader());
+ ClassLoader cl = classInfo.getClassLoader();
+ manager.put(ClassLoader.class.getName(), cl); // set classloader
+
+ ScriptEngine engine = manager.getEngineByName("bsh"); // TODO - fix this once there is decent Java engine
+ engine.eval("import org.mockito.*;"); // no import static yet supported :-(
+ engine.put(mock.name(), result);// set bean mock result
+ engine.eval(code);
+ }
+ }
+ return result;
}
else
{
Modified: projects/mc-script/trunk/src/main/java/org/jboss/beans/mock/MockImpl.java
===================================================================
--- projects/mc-script/trunk/src/main/java/org/jboss/beans/mock/MockImpl.java 2010-05-26 10:47:23 UTC (rev 105241)
+++ projects/mc-script/trunk/src/main/java/org/jboss/beans/mock/MockImpl.java 2010-05-26 11:40:19 UTC (rev 105242)
@@ -32,10 +32,17 @@
class MockImpl implements Mock
{
private String value;
+ private String name;
MockImpl(String value)
{
+ this(value, null);
+ }
+
+ MockImpl(String value, String name)
+ {
this.value = value;
+ this.name = name != null ? name : "mock";
}
public String value()
@@ -43,6 +50,11 @@
return value;
}
+ public String name()
+ {
+ return name;
+ }
+
public Class<? extends Annotation> annotationType()
{
return Mock.class;
Modified: projects/mc-script/trunk/src/main/java/org/jboss/beans/mock/MockMetaData.java
===================================================================
--- projects/mc-script/trunk/src/main/java/org/jboss/beans/mock/MockMetaData.java 2010-05-26 10:47:23 UTC (rev 105241)
+++ projects/mc-script/trunk/src/main/java/org/jboss/beans/mock/MockMetaData.java 2010-05-26 11:40:19 UTC (rev 105242)
@@ -22,10 +22,7 @@
package org.jboss.beans.mock;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlNsForm;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.*;
import java.util.Collections;
import java.util.HashSet;
@@ -49,6 +46,7 @@
public class MockMetaData extends AbstractBeanMetaData
{
private String mockCode;
+ private String mockName;
public String getMockCode()
{
@@ -61,6 +59,12 @@
this.mockCode = mockCode;
}
+ @XmlAttribute(name = "mock-name")
+ public void setMockName(String mockName)
+ {
+ this.mockName = mockName;
+ }
+
@Override
public List<BeanMetaData> getBeans()
{
@@ -70,7 +74,7 @@
annotations = new HashSet<AnnotationMetaData>();
setAnnotations(annotations);
}
- AnnotationMetaData mock = new DirectAnnotationMetaData(new MockImpl(mockCode));
+ AnnotationMetaData mock = new DirectAnnotationMetaData(new MockImpl(mockCode, mockName));
annotations.add(mock);
return Collections.singletonList((BeanMetaData)this);
}
Added: projects/mc-script/trunk/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory
===================================================================
--- projects/mc-script/trunk/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory (rev 0)
+++ projects/mc-script/trunk/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory 2010-05-26 11:40:19 UTC (rev 105242)
@@ -0,0 +1 @@
+org.jboss.beans.bsh.BshScriptEngineFactory
Modified: projects/mc-script/trunk/src/test/java/org/jboss/test/beans/mock/support/IBean.java
===================================================================
--- projects/mc-script/trunk/src/test/java/org/jboss/test/beans/mock/support/IBean.java 2010-05-26 10:47:23 UTC (rev 105241)
+++ projects/mc-script/trunk/src/test/java/org/jboss/test/beans/mock/support/IBean.java 2010-05-26 11:40:19 UTC (rev 105242)
@@ -28,4 +28,6 @@
public interface IBean
{
Object getValue();
+
+ void setValue(Object value);
}
\ No newline at end of file
Modified: projects/mc-script/trunk/src/test/java/org/jboss/test/beans/mock/test/MockSmokeTestCase.java
===================================================================
--- projects/mc-script/trunk/src/test/java/org/jboss/test/beans/mock/test/MockSmokeTestCase.java 2010-05-26 10:47:23 UTC (rev 105241)
+++ projects/mc-script/trunk/src/test/java/org/jboss/test/beans/mock/test/MockSmokeTestCase.java 2010-05-26 11:40:19 UTC (rev 105242)
@@ -26,6 +26,7 @@
import org.jboss.test.beans.mock.support.IBean;
import junit.framework.Test;
+import static org.mockito.Mockito.*;
/**
* Simple smoke tests.
@@ -49,4 +50,10 @@
IBean bean = assertBean("bean", IBean.class);
assertNull(bean.getValue()); // by default injection is ignored
}
+
+ public void testInterpreter() throws Exception
+ {
+ IBean bean = assertBean("mock", IBean.class);
+ verify(bean, never()).getValue();
+ }
}
Modified: projects/mc-script/trunk/src/test/resources/org/jboss/test/beans/mock/test/MockSmokeTestCase.xml
===================================================================
--- projects/mc-script/trunk/src/test/resources/org/jboss/test/beans/mock/test/MockSmokeTestCase.xml 2010-05-26 10:47:23 UTC (rev 105241)
+++ projects/mc-script/trunk/src/test/resources/org/jboss/test/beans/mock/test/MockSmokeTestCase.xml 2010-05-26 11:40:19 UTC (rev 105242)
@@ -1,7 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="urn:jboss:bean-deployer:2.0">
+
<mock xmlns="urn:jboss:bean-deployer:mock:2.0" name="bean" class="org.jboss.test.beans.mock.support.MockBean">
<property name="value">otherValue</property>
</mock>
+
+ <mock xmlns="urn:jboss:bean-deployer:mock:2.0" name="mock" class="org.jboss.test.beans.mock.support.MockBean">
+ <mock-code>
+ mock.setValue("otherValue");
+ </mock-code>
+ </mock>
+
</deployment>
More information about the jboss-cvs-commits
mailing list