Package com.alibaba.citrus.service.dataresolver

Source Code of com.alibaba.citrus.service.dataresolver.DataResolverServiceTests

/*
* Copyright 2010 Alibaba Group Holding Limited.
* 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 com.alibaba.citrus.service.dataresolver;

import static com.alibaba.citrus.test.TestUtil.*;
import static org.easymock.EasyMock.*;
import static org.easymock.classextension.EasyMock.*;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

import javax.servlet.http.HttpServletRequest;

import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.core.MethodParameter;

import com.alibaba.citrus.service.dataresolver.data.Action;
import com.alibaba.citrus.service.dataresolver.data.ContextAwareResolver;
import com.alibaba.citrus.service.dataresolver.data.DerivedAction;
import com.alibaba.citrus.service.dataresolver.data.Param;

public class DataResolverServiceTests extends AbstractDataResolverTests {
    private DataResolver resolver;
    private HttpServletRequest request;
    private Param param;

    @BeforeClass
    public static void initFactory() throws Exception {
        factory = createFactory("services.xml");
    }

    @Before
    public void init() {
        resolverServices = getResolvers("dataResolverService");
        assertNotNull(resolverServices);

        request = createMock(HttpServletRequest.class);
        replay(request);

        param = createMock(Param.class);
        expect(param.value()).andReturn("bbb").anyTimes();
        replay(param);
    }

    @Test
    public void beanNames() {
        assertSame(resolverServices, getResolvers("dataResolvers"));
    }

    @Test
    public void getResolver_noType() throws Exception {
        try {
            resolverServices.getDataResolver(null, null);
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(e, exception("type"));
        }
    }

    @Test
    public void getResolver_withExtraInfo() throws Exception {
        resolver = resolverServices.getDataResolver(HttpServletRequest.class, null, request);

        assertTrue(resolver.getClass().getName().contains("RequestResolver"));
        assertTrue(resolver.resolve() instanceof HttpServletRequest);
    }

    @Test
    public void getResolver_withAnnotations() throws Exception {
        resolver = resolverServices.getDataResolver(String.class, new Annotation[] { createMock(Test.class), param });

        assertTrue(resolver.getClass().getName().contains("MapResolver"));
        assertEquals("222", resolver.resolve());
    }

    @Test
    public void getResolver_notFound() throws Exception {
        try {
            resolverServices.getDataResolver(String.class, null);
            fail();
        } catch (DataResolverNotFoundException e) {
            assertThat(e, exception("Could not find data resolver for DataResolverContext {", "String", "[]", "}"));
        }
    }

    @Test
    public void getParameterResolvers() throws Exception {
        assertParameterResolvers(Action.class);
        assertParameterResolvers(DerivedAction.class);
    }

    private void assertParameterResolvers(Class<?> actionClass) throws Exception {
        Method method = actionClass.getMethod("execute", HttpServletRequest.class, String.class);
        DataResolver[] resolvers = resolverServices.getParameterResolvers(method, request);

        assertEquals(2, resolvers.length);

        // RequestResolver
        ContextAwareResolver resolver0 = (ContextAwareResolver) resolvers[0];
        ContextAwareResolver resolver1 = (ContextAwareResolver) resolvers[1];

        assertTrue(resolver0.resolve() instanceof HttpServletRequest);
        assertEquals("111", resolver1.resolve());

        // ����extraObject: MethodParameter
        MethodParameter param0 = resolver0.getContext().getExtraObject(MethodParameter.class);
        assertEquals(HttpServletRequest.class, param0.getParameterType());
        assertEquals(0, param0.getParameterIndex());

        String str = "";
        str += "MethodParameter {\n";
        str += "  method     = public void " + actionClass.getName()
                + ".execute(javax.servlet.http.HttpServletRequest,java.lang.String)\n";
        str += "  paramIndex = 0\n";
        str += "}";

        assertEquals(str, param0.toString());

        MethodParameter param1 = resolver1.getContext().getExtraObject(MethodParameter.class);
        assertEquals(String.class, param1.getParameterType());
        assertEquals(1, param1.getParameterIndex());

        str = "";
        str += "MethodParameter {\n";
        str += "  method     = public void " + actionClass.getName()
                + ".execute(javax.servlet.http.HttpServletRequest,java.lang.String)\n";
        str += "  paramIndex = 1\n";
        str += "}";

        assertEquals(str, param1.toString());

    }

    @Test
    public void toString_() {
        String str = resolverServices.toString();

        assertThat(str, containsString("DataResolverService ["));
        assertThat(str, containsString("MapResolverFactory"));
        assertThat(str, containsString("RequestResolverFactory"));
        assertThat(str, containsString("]"));
    }
}
TOP

Related Classes of com.alibaba.citrus.service.dataresolver.DataResolverServiceTests

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.