[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