Package br.com.caelum.vraptor.proxy

Source Code of br.com.caelum.vraptor.proxy.ReflectionInstanceCreatorTest

/***
* Copyright (c) 2009 Caelum - www.caelum.com.br/opensource
* All rights reserved.
*
* 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 br.com.caelum.vraptor.proxy;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.nullValue;
import static org.junit.Assert.assertTrue;

import java.lang.reflect.Method;

import net.vidageek.mirror.dsl.Mirror;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

/**
* @author Fabio Kung
*/
@SuppressWarnings("unchecked")
public class ReflectionInstanceCreatorTest {

  private Proxifier proxifier;

  @Before
  public void setUp() throws Exception {
  proxifier = new JavassistProxifier(new ReflectionInstanceCreator());
  }
 
  @Test
  public void shouldProxifyInterfaces() {
  TheInterface proxy = (TheInterface) proxifier.proxify(TheInterface.class, new MethodInvocation() {
    public Object intercept(Object proxy, Method method, Object[] args, SuperMethod superMethod) {
    return true;
    }
  });
  assertTrue(proxy.wasCalled());
  }

  @Test
  public void shouldProxifyConcreteClassesWithDefaultConstructors() {
  TheClass proxy = (TheClass) proxifier.proxify(TheClass.class, new MethodInvocation() {
    public Object intercept(Object proxy, Method method, Object[] args, SuperMethod superMethod) {
    return true;
    }
  });
  assertTrue(proxy.wasCalled());
  }

  @Test
  public void shouldProxifyConcreteClassesWithComplexConstructorsAndPassNullForAllParameters() {
  TheClassWithComplexConstructor proxy = (TheClassWithComplexConstructor) proxifier.proxify(TheClassWithComplexConstructor.class, new MethodInvocation() {
    public Object intercept(Object proxy, Method method, Object[] args, SuperMethod superMethod) {
    return superMethod.invoke(proxy, args);
    }
  });
  assertThat(proxy.getFirstDependency(), is(nullValue()));
  assertThat(proxy.getSecondDependency(), is(nullValue()));
  }

  @Test
  public void shouldTryAllConstructorsInDeclarationOrder() {
  TheClassWithManyConstructors proxy = (TheClassWithManyConstructors) proxifier.proxify(TheClassWithManyConstructors.class, new MethodInvocation() {
    public Object intercept(Object proxy, Method method, Object[] args, SuperMethod superMethod) {
    return superMethod.invoke(proxy, args);
    }
  });
  assertTrue(proxy.wasNumberConstructorCalled());
  assertThat(proxy.getNumber(), is(nullValue()));
  }

  @Test
  public void shouldNotProxifyJavaLangObjectMethods() throws Exception {
    Object proxy = proxifier.proxify(ReflectionInstanceCreatorTest.class, new MethodInvocation() {
      public Object intercept(Object proxy, Method method, Object[] args, SuperMethod superMethod) {
        Assert.fail("should not call this Method interceptor");
        return null;
      }
    });
    new Mirror().on(proxy).invoke().method("finalize").withoutArgs();
  }

}
TOP

Related Classes of br.com.caelum.vraptor.proxy.ReflectionInstanceCreatorTest

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.