/*
* Copyright 2004-2015 the Seasar Foundation and the Others.
*
* 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.seasar.framework.unit.impl;
import java.lang.reflect.Method;
import java.util.List;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.seasar.extension.unit.S2TestCase;
import org.seasar.framework.unit.annotation.PostBindFields;
import org.seasar.framework.unit.annotation.PreUnbindFields;
import org.seasar.framework.util.tiger.ReflectionUtil;
/**
* @author taedium
*
*/
public class ConventionTestIntrospectorTest extends S2TestCase {
private ConventionTestIntrospector introspector;
/**
* @throws Exception
*/
public void testGetTestMethods() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
List<Method> methods = introspector.getTestMethods(Hoge.class);
assertEquals(3, methods.size());
Method method = ReflectionUtil.getDeclaredMethod(Hoge.class, "ccc");
assertTrue(methods.contains(method));
method = ReflectionUtil.getDeclaredMethod(Hoge.class, "ddd");
assertTrue(methods.contains(method));
method = ReflectionUtil.getDeclaredMethod(Hoge.class, "record");
assertTrue(methods.contains(method));
}
/**
* @throws Exception
*/
public void testBeforeClassMethods() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
List<Method> methods = introspector.getBeforeClassMethods(Hoge.class);
assertEquals(2, methods.size());
Method method = ReflectionUtil.getDeclaredMethod(Hoge.class, "iii");
assertEquals(method, methods.get(0));
method = ReflectionUtil.getDeclaredMethod(Hoge.class, "beforeClass");
assertEquals(method, methods.get(1));
}
/**
* @throws Exception
*/
public void testAfterClassMethods() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
List<Method> methods = introspector.getAfterClassMethods(Hoge.class);
assertEquals(2, methods.size());
Method method = ReflectionUtil.getDeclaredMethod(Hoge.class, "jjj");
assertEquals(method, methods.get(0));
method = ReflectionUtil.getDeclaredMethod(Hoge.class, "afterClass");
assertEquals(method, methods.get(1));
}
/**
* @throws Exception
*/
public void testBeforeMethods() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
List<Method> methods = introspector.getBeforeMethods(Hoge.class);
assertEquals(2, methods.size());
Method method = ReflectionUtil.getDeclaredMethod(Hoge.class, "aaa");
assertEquals(method, methods.get(0));
method = ReflectionUtil.getDeclaredMethod(Hoge.class, "before");
assertEquals(method, methods.get(1));
}
/**
* @throws Exception
*/
public void testAfterMethods() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
List<Method> methods = introspector.getAfterMethods(Hoge.class);
assertEquals(2, methods.size());
Method method = ReflectionUtil.getDeclaredMethod(Hoge.class, "bbb");
assertEquals(method, methods.get(0));
method = ReflectionUtil.getDeclaredMethod(Hoge.class, "after");
assertEquals(method, methods.get(1));
}
/**
* @throws Exception
*/
public void testEachBeforeMethod() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
Method method = ReflectionUtil.getDeclaredMethod(Hoge.class, "ddd");
Method actual = introspector.getEachBeforeMethod(Hoge.class, method);
assertEquals("beforeDdd", actual.getName());
}
/**
* @throws Exception
*/
public void testNonExistEachBeforeMethod() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
Method method = ReflectionUtil.getDeclaredMethod(Hoge.class, "ccc");
Method actual = introspector.getEachBeforeMethod(Hoge.class, method);
assertNull(actual);
}
/**
* @throws Exception
*/
public void testEachAfterMethod() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
Method method = ReflectionUtil.getDeclaredMethod(Hoge.class, "ddd");
Method actual = introspector.getEachAfterMethod(Hoge.class, method);
assertEquals("afterDdd", actual.getName());
}
/**
* @throws Exception
*/
public void testNonExistEachAfterMethod() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
Method method = ReflectionUtil.getDeclaredMethod(Hoge.class, "ccc");
Method actual = introspector.getEachAfterMethod(Hoge.class, method);
assertNull(actual);
}
/**
* @throws Exception
*/
public void testEachRecordMethod() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
Method method = ReflectionUtil.getDeclaredMethod(Hoge.class, "ddd");
Method actual = introspector.getEachRecordMethod(Hoge.class, method);
assertEquals("recordDdd", actual.getName());
}
/**
* @throws Exception
*/
public void testNonExistEachRecordMethod() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
Method method = ReflectionUtil.getDeclaredMethod(Hoge.class, "ccc");
Method actual = introspector.getEachRecordMethod(Hoge.class, method);
assertNull(actual);
}
/**
* @throws Exception
*/
public void testSuperclassTestMethods() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
List<Method> methods = introspector.getTestMethods(Bar.class);
assertEquals(2, methods.size());
}
/**
* @throws Exception
*/
public void testSuperclassBeforeClassMethods() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
List<Method> methods = introspector.getBeforeClassMethods(Bar.class);
assertEquals(1, methods.size());
}
/**
* @throws Exception
*/
public void testSuperclassAfterClassMethods() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
List<Method> methods = introspector.getAfterClassMethods(Bar.class);
assertEquals(1, methods.size());
}
/**
* @throws Exception
*/
public void testSuperclassBeforeMethods() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
List<Method> methods = introspector.getBeforeMethods(Bar.class);
assertEquals(1, methods.size());
}
/**
* @throws Exception
*/
public void testSuperclassAfterMethods() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
List<Method> methods = introspector.getAfterMethods(Bar.class);
assertEquals(1, methods.size());
}
/**
* @throws Exception
*/
public void testSuperclassEachBeforeMethod() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
Method method = ReflectionUtil.getDeclaredMethod(Foo.class, "aaa");
Method actual = introspector.getEachBeforeMethod(Bar.class, method);
assertEquals("beforeAaa", actual.getName());
method = ReflectionUtil.getDeclaredMethod(Bar.class, "bbb");
actual = introspector.getEachBeforeMethod(Bar.class, method);
assertEquals("beforeBbb", actual.getName());
}
/**
* @throws Exception
*/
public void testSuperclassEachAfterMethod() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
Method method = ReflectionUtil.getDeclaredMethod(Foo.class, "aaa");
Method actual = introspector.getEachAfterMethod(Bar.class, method);
assertEquals("afterAaa", actual.getName());
method = ReflectionUtil.getDeclaredMethod(Bar.class, "bbb");
actual = introspector.getEachAfterMethod(Bar.class, method);
assertEquals("afterBbb", actual.getName());
}
/**
* @throws Exception
*/
public void testSuperclassEachRecordMethod() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
Method method = ReflectionUtil.getDeclaredMethod(Foo.class, "aaa");
Method actual = introspector.getEachRecordMethod(Bar.class, method);
assertEquals("recordAaa", actual.getName());
method = ReflectionUtil.getDeclaredMethod(Bar.class, "bbb");
actual = introspector.getEachRecordMethod(Bar.class, method);
assertEquals("recordBbb", actual.getName());
}
/**
* @throws Exception
*/
public void testSuperclassPostBindFieldsMethods() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
List<Method> methods = introspector
.getPostBindFieldsMethods(Hoge.class);
assertEquals(2, methods.size());
Method method = ReflectionUtil.getDeclaredMethod(Hoge.class, "kkk");
assertEquals(method, methods.get(0));
method = ReflectionUtil.getDeclaredMethod(Hoge.class, "postBindFields");
assertEquals(method, methods.get(1));
}
/**
* @throws Exception
*/
public void testSuperclassPreUnbindFieldsMethods() throws Exception {
introspector = new ConventionTestIntrospector();
introspector.init();
List<Method> methods = introspector
.getPreUnbindFieldsMethods(Hoge.class);
assertEquals(2, methods.size());
Method method = ReflectionUtil.getDeclaredMethod(Hoge.class, "lll");
assertEquals(method, methods.get(0));
method = ReflectionUtil
.getDeclaredMethod(Hoge.class, "preUnbindFields");
assertEquals(method, methods.get(1));
}
/**
* @throws Exception
*/
public void setUpCustomize() throws Exception {
include("ConventionTestIntrospectorTest.dicon");
}
/**
* @throws Exception
*/
public void testCustomize() throws Exception {
List<Method> methods = introspector.getBeforeClassMethods(Baz.class);
assertEquals(1, methods.size());
assertEquals("setUpClass", methods.get(0).getName());
methods = introspector.getAfterClassMethods(Baz.class);
assertEquals(1, methods.size());
assertEquals("tearDownClass", methods.get(0).getName());
methods = introspector.getBeforeMethods(Baz.class);
assertEquals(1, methods.size());
assertEquals("setUp", methods.get(0).getName());
methods = introspector.getAfterMethods(Baz.class);
assertEquals(1, methods.size());
assertEquals("tearDown", methods.get(0).getName());
Method method = ReflectionUtil.getDeclaredMethod(Baz.class, "aaa");
Method actual = introspector.getEachBeforeMethod(Baz.class, method);
assertEquals("setUpAaa", actual.getName());
actual = introspector.getEachAfterMethod(Baz.class, method);
assertEquals("tearDownAaa", actual.getName());
}
/**
*
*/
public static class Hoge {
/**
*
*/
public static void beforeClass() {
}
/**
*
*/
public static void afterClass() {
}
/**
*
*/
public void before() {
}
/**
*
*/
public void after() {
}
/**
*
*/
@Before
public void aaa() {
}
/**
*
*/
@After
public void bbb() {
}
/**
*
*/
@Test
public void ccc() {
}
/**
*
*/
public void beforeDdd() {
}
/**
*
*/
public void ddd() {
}
/**
*
*/
public void recordDdd() {
}
/**
*
*/
public void afterDdd() {
}
/**
*
*/
public void record() {
}
@SuppressWarnings("unused")
private void eee() {
}
/**
*
*/
public static void fff() {
}
/**
* @return
*/
public String ggg() {
return null;
}
/**
* @param s
*/
@SuppressWarnings("unused")
public void hhh(String s) {
}
/**
*
*/
@BeforeClass
public static void iii() {
}
/**
*
*/
@AfterClass
public static void jjj() {
}
/**
*
*/
@PostBindFields
public void kkk() {
}
/**
*
*/
public void postBindFields() {
}
/**
*
*/
@PreUnbindFields
public void lll() {
}
/**
*
*/
public void preUnbindFields() {
}
}
/**
*
*/
public static class Foo {
/**
*
*/
public static void beforeClass() {
}
/**
*
*/
public static void afterClass() {
}
/**
*
*/
public void before() {
}
/**
*
*/
public void after() {
}
/**
*
*/
public void beforeAaa() {
}
/**
*
*/
public void aaa() {
}
/**
*
*/
public void afterAaa() {
}
/**
*
*/
public void recordAaa() {
}
/**
*
*/
public void beforeBbb() {
}
/**
*
*/
public void afterBbb() {
}
/**
*
*/
public void recordBbb() {
}
}
/**
*
*/
public static class Bar extends Foo {
/**
*
*/
public void bbb() {
}
}
/**
*
*/
public static class Baz {
/**
*
*/
public static void setUpClass() {
}
/**
*
*/
public static void tearDownClass() {
}
/**
*
*/
public void setUp() {
}
/**
*
*/
public void tearDown() {
}
/**
*
*/
public void setUpAaa() {
}
/**
*
*/
public void aaa() {
}
/**
*
*/
public void tearDownAaa() {
}
}
}