Package org.soybeanMilk.test.unit.core

Source Code of org.soybeanMilk.test.unit.core.TestInvoke$TestResolver

/**
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.soybeanMilk.test.unit.core;


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.HashMap;
import java.util.Map;

import junit.framework.Assert;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.soybeanMilk.core.DefaultExecutor;
import org.soybeanMilk.core.ExecuteException;
import org.soybeanMilk.core.ObjectSource;
import org.soybeanMilk.core.ObjectSourceException;
import org.soybeanMilk.core.bean.DefaultGenericConverter;
import org.soybeanMilk.core.config.Configuration;
import org.soybeanMilk.core.config.parser.ConfigurationParser;
import org.soybeanMilk.core.exe.ArgPrepareExecuteException;
import org.soybeanMilk.core.exe.InvocationExecuteException;
import org.soybeanMilk.core.exe.Invoke;
import org.soybeanMilk.core.exe.Invoke.Arg;
import org.soybeanMilk.core.exe.Invoke.Resolver;
import org.soybeanMilk.core.exe.support.DefaultResolverObjectFactory;
import org.soybeanMilk.core.exe.support.DynamicResolver;
import org.soybeanMilk.core.exe.support.FactoryResolver;
import org.soybeanMilk.core.exe.support.KeyArg;
import org.soybeanMilk.core.exe.support.ObjectResolver;
import org.soybeanMilk.core.exe.support.ObjectSourceResolver;
import org.soybeanMilk.core.exe.support.ResolverObjectFactory;
import org.soybeanMilk.core.exe.support.ValueArg;
import org.soybeanMilk.core.os.HashMapObjectSource;

/**
* @author earthangry@gmail.com
* @date 2012-5-10
*/
public class TestInvoke
{
  private static Log log=LogFactory.getLog(TestDefaultExecutor.class);
 
  private DefaultExecutor executor=null;
 
  private static final String RESULT_KEY="testResult";
 
  @Before
  public void setUp() throws Exception
  {
    try
    {
      Configuration cfg=new ConfigurationParser().parse("org/soybeanMilk/test/unit/core/TestInvoke.cfg.xml");
      executor=new DefaultExecutor(cfg);
    }
    catch(Exception e)
    {
      log.error("",e);
    }
  }

  @After
  public void tearDown() throws Exception
  {
    executor=null;
  }
 
  @Test
  public void init_byResolver() throws Exception
  {
    Arg[] args=new Arg[]{
        new ValueArg("aaa"),
        new ValueArg("bbb"),
    };
    Resolver rp=new ObjectResolver(new TestResolver());
   
    Invoke re=new Invoke("test", rp,  "test1", args, RESULT_KEY);
   
    Assert.assertEquals(re.getName(), "test");
    Assert.assertEquals(re.getResultKey(), RESULT_KEY);
    Assert.assertEquals(re.getResolver(), rp);
    Assert.assertTrue( (re.getArgs()[0]==args[0]) );
    Assert.assertTrue( (re.getArgs()[1]==args[1]) );
  }
 
  @Test
  public void init_byResolverClass() throws Exception
  {
    Arg[] args=new Arg[]{
        new ValueArg("aaa"),
        new ValueArg("bbb"),
    };
   
    Resolver rp=new ObjectResolver(TestResolver.class);
   
    Invoke re=new Invoke("test", rp, "test1", args, RESULT_KEY);
   
    Assert.assertEquals(re.getName(), "test");
    Assert.assertEquals(re.getResultKey(), RESULT_KEY);
    Assert.assertEquals(re.getResolver(), rp);
    Assert.assertTrue( (re.getArgs()[0]==args[0]) );
    Assert.assertTrue( (re.getArgs()[1]==args[1]) );
  }
 
  @Test
  public void execute() throws Exception
  {
    Arg[] args=new Arg[]{
        new KeyArg("arg0"),
        new KeyArg("arg1"),
    };
    Resolver rp=new ObjectResolver(new TestResolver());
   
    Invoke invoke=new Invoke("test", rp, "test1", args, RESULT_KEY);
   
    ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
    os.set("arg0", "arg0");
    os.set("arg1", "1111");
   
    invoke.execute(os);
   
    Assert.assertEquals(TestResolver.RESULT, os.get(RESULT_KEY));
  }
 
  @Test
  public void execute_dynamic_objectSourceResolver() throws Exception
  {
    Arg[] args=new Arg[]{
        new KeyArg("arg0"),
        new KeyArg("arg1"),
    };
   
    Resolver rp=new ObjectSourceResolver("objectSourceResolver");
   
    Invoke invoke=new Invoke("test", rp, "test1", args, RESULT_KEY);
   
    ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
    os.set("objectSourceResolver", new TestResolver());
    os.set("arg0", "arg0");
    os.set("arg1", "1111");
   
    invoke.execute(os);
   
    Assert.assertEquals(TestResolver.RESULT, os.get(RESULT_KEY));
  }
 
  @Test
  public void execute_dynamic_factoryResolver() throws Exception
  {
    Arg[] args=new Arg[]{
        new KeyArg("arg0"),
        new KeyArg("arg1"),
    };
   
    ResolverObjectFactory rof=new DefaultResolverObjectFactory();
    rof.addResolverObject("factoryResolver", new TestResolver());
   
    Resolver rp=new FactoryResolver(rof, "factoryResolver");
   
    Invoke invoke=new Invoke("test", rp, "test1", args, RESULT_KEY);
   
    ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
    os.set("arg0", "arg0");
    os.set("arg1", "1111");
   
    invoke.execute(os);
   
    Assert.assertEquals(TestResolver.RESULT, os.get(RESULT_KEY));
  }

  @Test
  public void execute_dynamic_dynamicResolver_objectSource() throws Exception
  {
    Arg[] args=new Arg[]{
        new KeyArg("arg0"),
        new KeyArg("arg1"),
    };
   
    ResolverObjectFactory rof=new DefaultResolverObjectFactory();
    rof.addResolverObject("dynamicResolver", new TestResolver());
   
    Resolver rp=new DynamicResolver(null, new ObjectSourceResolver("dynamicResolver"));
   
    Invoke invoke=new Invoke("test", rp, "test1", args, RESULT_KEY);
   
    ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
    os.set("dynamicResolver", new TestResolver());
    os.set("arg0", "arg0");
    os.set("arg1", "1111");
   
    invoke.execute(os);
   
    Assert.assertEquals(TestResolver.RESULT, os.get(RESULT_KEY));
  }
 
  @Test
  public void execute_dynamic_dynamicResolver_factory() throws Exception
  {
    Arg[] args=new Arg[]{
        new KeyArg("arg0"),
        new KeyArg("arg1"),
    };
   
    ResolverObjectFactory rof=new DefaultResolverObjectFactory();
    rof.addResolverObject("dynamicResolver", new TestResolver());
   
    Resolver rp=new DynamicResolver(new FactoryResolver(rof, "dynamicResolver"), null);
   
    Invoke invoke=new Invoke("test", rp, "test1", args, RESULT_KEY);
   
    ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
    os.set("arg0", "arg0");
    os.set("arg1", "1111");
   
    invoke.execute(os);
   
    Assert.assertEquals(TestResolver.RESULT, os.get(RESULT_KEY));
  }
 
  @Test
  public void execute_dynamic_dynamicResolver_none() throws Exception
  {
    Arg[] args=new Arg[]{
        new KeyArg("arg0"),
        new KeyArg("arg1"),
    };
   
    ResolverObjectFactory rof=new DefaultResolverObjectFactory();
   
    Resolver rp=new DynamicResolver(new FactoryResolver(rof, "dynamicResolver"), new ObjectSourceResolver("dynamicResolver"));
   
    Invoke invoke=new Invoke("test", rp, "test1", args, RESULT_KEY);
   
    ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
    os.set("arg0", "arg0");
    os.set("arg1", "1111");
   
    ExecuteException re=null;
   
    try
    {
      invoke.execute(os);
    }
    catch(ExecuteException e)
    {
      re=e;
    }
   
    Assert.assertNotNull(re);
    Assert.assertTrue( (re.getMessage().startsWith("got null resolver class from")) );
  }
 
  @Test
  public void execute_breakerNoValue() throws Exception
  {
    //æ— breaker
    {
      ObjectSource objSource=new HashMapObjectSource();
      executor.execute("testBreaker_0", objSource);
     
      Assert.assertEquals(TestResolver.RESULT, objSource.get(RESULT_KEY));
    }
  }
 
  @Test
  public void execute_breakerValueIsNull() throws Exception
  {
    //breaker关键字的值为null
    {
      ObjectSource objSource=new HashMapObjectSource();
      executor.execute("testBreaker_1", objSource);
     
      Assert.assertEquals(TestResolver.RESULT, objSource.get(RESULT_KEY));
    }
  }
 
  @Test
  public void execute_breakerValueIsFalse() throws Exception
  {
    //breaker关键字的值为false
    {
      ObjectSource objSource=new HashMapObjectSource();
      objSource.set("breakerKey", false);
      executor.execute("testBreaker_1", objSource);
     
      Assert.assertEquals(TestResolver.RESULT, objSource.get(RESULT_KEY));
    }
  }
 
  @Test
  public void execute_breakerValueIsTrue() throws Exception
  {
    //breaker关键字的值为true
    {
      ObjectSource objSource=new HashMapObjectSource();
      objSource.set("breakerKey", true);
      executor.execute("testBreaker_1", objSource);
     
      Assert.assertNull(objSource.get(RESULT_KEY));
    }
  }
 
  @Test
  public void execute_breakerIsLiteralTrue() throws Exception
  {
    ObjectSource objSource=new HashMapObjectSource();
    executor.execute("testBreaker_2", objSource);
   
    Assert.assertNull(objSource.get(RESULT_KEY));
  }

  @Test
  public void execute_breakerIsLiteralFalse() throws Exception
  {
    ObjectSource objSource=new HashMapObjectSource();
    executor.execute("testBreaker_3", objSource);
   
    Assert.assertEquals(TestResolver.RESULT, objSource.get(RESULT_KEY));
  }
 
  @Test
  public void execute_similarMethod_keyArg_typeSet() throws Exception
  {
    {
      Arg[] args=new Arg[]{
          new KeyArg("arg", Double.class),
        };
     
      Resolver rp=new ObjectResolver(new TestResolver());
     
      Invoke invoke=new Invoke("test", rp, "sameMethod", args, RESULT_KEY);
     
      ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
      os.set("arg", "33");
     
      invoke.execute(os);
     
      Assert.assertEquals("Double", os.get(RESULT_KEY));
    }
   
    {
      Arg[] args=new Arg[]{
          new KeyArg("arg", Integer.class),
        };
     
      Resolver rp=new ObjectResolver(new TestResolver());
     
      Invoke invoke=new Invoke("test", rp, "sameMethod", args, RESULT_KEY);
     
      ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
      os.set("arg", "33");
     
      invoke.execute(os);
     
      Assert.assertEquals("Integer", os.get(RESULT_KEY));
    }
  }
 
  @Test
  public void execute_similarMethod_keyArg_typeNotSet() throws Exception
  {
    Arg[] args=new Arg[]{
        new KeyArg("arg"),
      };
   
    Resolver rp=new ObjectResolver(new TestResolver());
   
    Invoke invoke=new Invoke("test", rp, "sameMethod", args, RESULT_KEY);
   
    ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
    os.set("arg", "33");
   
    invoke.execute(os);
   
    Assert.assertNotNull(os.get(RESULT_KEY));
  }
 
  @Test
  public void execute_similarMethod_valueArg_wrapperType() throws Exception
  {
    {
      Arg[] args=new Arg[]{
          new ValueArg(33D),
        };
     
      Resolver rp=new ObjectResolver(new TestResolver());
     
      Invoke invoke=new Invoke("test", rp, "sameMethod", args, RESULT_KEY);
     
      ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
     
      invoke.execute(os);
     
      Assert.assertEquals("Double", os.get(RESULT_KEY));
    }
   
    {
      Arg[] args=new Arg[]{
          new ValueArg(33),
        };
     
      Resolver rp=new ObjectResolver(new TestResolver());
     
      Invoke invoke=new Invoke("test", rp, "sameMethod", args, RESULT_KEY);
     
      ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
      os.set("arg", "33");
     
      invoke.execute(os);
     
      Assert.assertEquals("Integer", os.get(RESULT_KEY));
    }
  }
 
  @Test
  public void execute_similarMethod_valueArg_primitiveType() throws Exception
  {
    Arg[] args=new Arg[]{
        new ValueArg(33, int.class),
      };
   
    Resolver rp=new ObjectResolver(new TestResolver());
   
    Invoke invoke=new Invoke("test", rp, "sameMethod", args, RESULT_KEY);
   
    ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
    os.set("arg", "33");
   
    invoke.execute(os);
   
    Assert.assertEquals("int", os.get(RESULT_KEY));
  }
 
  @Test
  public void execute_similarMethod_valueArgNull() throws Exception
  {
    Arg[] args=new Arg[]{
        new ValueArg(null, Integer.class),
      };
   
    Resolver rp=new ObjectResolver(new TestResolver());
   
    Invoke invoke=new Invoke("test", rp, "sameMethod", args, RESULT_KEY);
   
    ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
   
    invoke.execute(os);
   
    Assert.assertNotNull(os.get(RESULT_KEY));
  }
 
  @Test
  public void execute_genericMethod_customTypeInKeyArg() throws Exception
  {
    Arg[] args=new Arg[]
        {
          new KeyArg("arg0", JavaBeanSub.class)
        };
   
    Invoke invoke=new Invoke(null, new ObjectResolver(new SubGenericResolverImpl<JavaBean>()), "resolveBase", args, "result");
   
    Map<String, Object> src=new HashMap<String, Object>();
    src.put("id", 1);
    src.put("name", "generic");
    src.put("age", 5);
   
    ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
    os.set("arg0", src);
   
    invoke.execute(os);
   
    JavaBeanSub re=os.get("result");
   
    Assert.assertEquals(1, re.getId().intValue());
    Assert.assertEquals("generic", re.getName());
    Assert.assertEquals(5, re.getAge().intValue());
  }

  @Test
  public void execute_genericMethod_resolveBase() throws Exception
  {
    Arg[] args=new Arg[1];
    args[0]=new KeyArg("arg0");
    Invoke invoke=new Invoke(null, new ObjectResolver(new SubSubSubGenericResolverImpl()), "resolveBase", args, "result");
   
    Map<String, Object> src=new HashMap<String, Object>();
    src.put("id", 1);
    src.put("name", "generic");
    src.put("age", 5);
   
    ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
    os.set("arg0", src);
   
    invoke.execute(os);
   
    JavaBeanSub re=os.get("result");
   
    Assert.assertEquals(1, re.getId().intValue());
    Assert.assertEquals("generic", re.getName());
    Assert.assertEquals(5, re.getAge().intValue());
  }
 
  @Test
  public void execute_genericMethod_resolveSub() throws Exception
  {
    Arg[] args=new Arg[1];
    args[0]=new KeyArg("arg0");
    Invoke invoke=new Invoke(null, new ObjectResolver(new SubSubSubGenericResolverImpl()), "resolveSub", args, "result");
   
    Map<String, Object> src=new HashMap<String, Object>();
    src.put("id", 1);
    src.put("name", "generic");
    src.put("age", 5);
   
    ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
    os.set("arg0", src);
   
    invoke.execute(os);
   
    JavaBeanSub re=os.get("result");
   
    Assert.assertEquals(1, re.getId().intValue());
    Assert.assertEquals("generic", re.getName());
    Assert.assertEquals(5, re.getAge().intValue());
  }
 
  @Test
  public void execute_genericMethod_resolverIsProxy_resolveBase() throws Exception
  {
    SubSubSubGenericResolver resolver=(SubSubSubGenericResolver)Proxy.newProxyInstance(
        SubSubSubGenericResolver.class.getClassLoader(),
        new Class<?>[]{ SubSubSubGenericResolver.class },
        new InvocationHandler()
        {
          private Object handler=new SubSubSubGenericResolverImpl();
         
          public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable
          {
            return arg1.invoke(handler, arg2);
          }
        });
   
    Arg[] args=new Arg[1];
    args[0]=new KeyArg("arg0");
    Invoke invoke=new Invoke(null, new ObjectResolver(resolver), "resolveBase", args, "result");
   
    Map<String, Object> src=new HashMap<String, Object>();
    src.put("id", 1);
    src.put("name", "generic");
    src.put("age", 5);
   
    ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
    os.set("arg0", src);
   
    invoke.execute(os);
   
    JavaBeanSub re=os.get("result");
   
    Assert.assertEquals(1, re.getId().intValue());
    Assert.assertEquals("generic", re.getName());
    Assert.assertEquals(5, re.getAge().intValue());
  }
 
  @Test
  public void execute_genericMethod_resolverIsProxy_resolveSub() throws Exception
  {
    SubSubSubGenericResolver resolver=(SubSubSubGenericResolver)Proxy.newProxyInstance(
        SubSubSubGenericResolver.class.getClassLoader(),
        new Class<?>[]{ SubSubSubGenericResolver.class },
        new InvocationHandler()
        {
          private Object handler=new SubSubSubGenericResolverImpl();
         
          public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable
          {
            return arg1.invoke(handler, arg2);
          }
        });
   
    Arg[] args=new Arg[1];
    args[0]=new KeyArg("arg0");
    Invoke invoke=new Invoke(null, new ObjectResolver(resolver), "resolveSub", args, "result");
   
    Map<String, Object> src=new HashMap<String, Object>();
    src.put("id", 1);
    src.put("name", "generic");
    src.put("age", 5);
   
    ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
    os.set("arg0", src);
   
    invoke.execute(os);
   
    JavaBeanSub re=os.get("result");
   
    Assert.assertEquals(1, re.getId().intValue());
    Assert.assertEquals("generic", re.getName());
    Assert.assertEquals(5, re.getAge().intValue());
  }
 
  @Test
  public void execute_exception_ArgPrepareExecuteException() throws Exception
  {
    Arg[] args=new Arg[]{
        new KeyArg("arg0"),
        new KeyArg("arg1"),
    };
    Resolver rp=new ObjectResolver(new TestResolver());
   
    Invoke invoke=new Invoke("test", rp, "test1", args, RESULT_KEY);
   
    ObjectSource os=new HashMapObjectSource(new DefaultGenericConverter());
    os.set("arg0", "arg0");
    os.set("arg1", "arg1");
   
    ArgPrepareExecuteException re=null;
    try
    {
      invoke.execute(os);
    }
    catch(ArgPrepareExecuteException e)
    {
      re=e;
    }
   
    Assert.assertTrue( (re.getInvoke() == invoke) );
    Assert.assertTrue( (re.getArg() == args[1]) );
    Assert.assertTrue( (re.getCause() instanceof ObjectSourceException) );
  }
 
  @Test
  public void execute_exception_InvocationExecuteException() throws Exception
  {
    Resolver rp=new ObjectResolver(new TestResolver());
   
    Invoke invoke=new Invoke("test", rp, "testThrow", null, RESULT_KEY);
   
    InvocationExecuteException re=null;
    try
    {
      invoke.execute(new HashMapObjectSource());
    }
    catch(InvocationExecuteException e)
    {
      re=e;
    }
   
    Assert.assertTrue( (re.getCause() instanceof NullPointerException) );
  }
 
  public static class TestResolver
  {
    public static final String RESULT="result";
   
    public String test()
    {
      return RESULT;
    }
   
    public String test1(String arg0, Integer arg1)
    {
      return RESULT;
    }
   
    public String testThrow()
    {
      throw new NullPointerException();
    }
   
    public String sameMethod(Integer arg)
    {
      return "Integer";
    }
   
    public String sameMethod(int arg)
    {
      return "int";
    }
   
    public String sameMethod(Double arg)
    {
      return "Double";
    }
   
    public String sameMethod(Object o)
    {
      return "object";
    }
  }
 
  public static interface BaseGenericResolver<T extends Object>
  {
    T resolveBase(T t);
  }
 
  public static interface SubGenericResolver<T extends Object> extends BaseGenericResolver<T>
  {
    T resolveSub(T t);
  }
 
  public static class SubGenericResolverImpl<T extends Object> implements SubGenericResolver<T>
  {
    public T resolveBase(T t)
    {
      return t;
    }
   
    public T resolveSub(T t)
    {
      return t;
    }
  }
 
  public static interface SubSubGenericResolver<T extends JavaBean> extends SubGenericResolver<T>{}
 
  public static interface SubSubSubGenericResolver extends SubSubGenericResolver<JavaBeanSub>{}
 
  public static class SubSubSubGenericResolverImpl extends SubGenericResolverImpl<JavaBeanSub> implements SubSubSubGenericResolver{}
 
  public static class JavaBean
  {
    private Integer id;
    private String name;

    public Integer getId() {
      return id;
    }
    public void setId(Integer id) {
      this.id = id;
    }
    public String getName() {
      return name;
    }
    public void setName(String name) {
      this.name = name;
    }
  }
 
  public static class JavaBeanSub extends JavaBean
  {
    private Integer age;

    public Integer getAge() {
      return age;
    }

    public void setAge(Integer age) {
      this.age = age;
    }
  }
}
TOP

Related Classes of org.soybeanMilk.test.unit.core.TestInvoke$TestResolver

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.