Package com.alibaba.citrus.springext.impl

Source Code of com.alibaba.citrus.springext.impl.SpringPluggableSchemaTests

/*
* Copyright (c) 2002-2012 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.springext.impl;

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

import java.util.Map;
import java.util.Set;

import com.alibaba.citrus.springext.Schema;
import com.alibaba.citrus.springext.SourceInfo;
import com.alibaba.citrus.springext.support.SpringPluggableSchemaSourceInfo;
import com.alibaba.citrus.springext.support.SpringSchemasSourceInfo;
import com.alibaba.citrus.test.TestEnvStatic;
import com.alibaba.citrus.util.io.StreamUtil;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.core.io.Resource;

public class SpringPluggableSchemaTests {
    private static SpringPluggableSchemas sps;

    static {
        TestEnvStatic.init();
    }

    @BeforeClass
    public static void init() {
        sps = new SpringPluggableSchemas();
    }

    @Test
    public void getVersion() {
        Map<String, Schema> names = sps.getNamedMappings();

        Schema beansSchema = names.get("www.springframework.org/schema/beans/spring-beans.xsd");
        assertEquals(null, beansSchema.getVersion());

        Schema beansSchema25 = names.get("www.springframework.org/schema/beans/spring-beans-2.5.xsd");
        assertEquals("2.5", beansSchema25.getVersion());
    }

    @Test
    public void getNamedMappings() {
        Map<String, Schema> names = sps.getNamedMappings();

        assertThat(names.size(), greaterThan(0));
        assertThat(names.toString(), containsAll("www.springframework.org", "www.alibaba.com", "spring-beans.xsd"));

        // beans
        Schema beansSchema = names.get("www.springframework.org/schema/beans/spring-beans.xsd");

        assertNotNull(beansSchema);
        assertEquals("http://www.springframework.org/schema/beans", beansSchema.getTargetNamespace());
        assertEquals("http://www.springframework.org/schema/beans", beansSchema.getTargetNamespace()); // try hard

        // dummy
        Schema dummySchema = names.get("www.alibaba.com/schema/tests.xsd");

        assertNotNull(dummySchema);
        assertEquals(null, dummySchema.getTargetNamespace());
        assertEquals(null, dummySchema.getTargetNamespace()); // try hard
    }

    @Test
    public void getAvailableNamespaces() {
        Set<String> namespaces = sps.getAvailableNamespaces();

        assertThat(namespaces.size(), greaterThan(0));
        assertThat(namespaces.toString(), containsAll(
                "http://www.springframework.org/schema/beans",
                "http://www.springframework.org/schema/p"// 这个ns是没有schema的。
                "http://www.alibaba.com/schema/springext/base"));
    }

    @Test
    public void getToolingParameters() {
        Map<String, String> params = sps.getToolingParameters("http://www.alibaba.com/schema/springext/base-types");
        assertEquals("sb-types", params.get("prefix"));
        assertEquals("sb-types", sps.getNamedMappings().get("www.alibaba.com/schema/springext-base-types.xsd").getPreferredNsPrefix());
    }

    @Test
    public void sourceInfo() throws Exception {
        Map<String, Schema> names = sps.getNamedMappings();
        Resource resource;

        Schema beansSchema = names.get("www.springframework.org/schema/beans/spring-beans-2.5.xsd");
        resource = assertSourceInfoAndGetResource(beansSchema, SpringPluggableSchemaSourceInfo.class);
        assertResource("org/springframework/beans/factory/xml/spring-beans-2.5.xsd", resource);

        SpringSchemasSourceInfo parent = ((SpringPluggableSchemaSourceInfo) beansSchema).getParent();
        resource = assertSourceInfoAndGetResource(parent, SpringSchemasSourceInfo.class);
        assertNull(parent.getParent());
        assertTrue(resource.getURL().toExternalForm().endsWith("META-INF/spring.schemas"));

        String content = StreamUtil.readText(resource.getInputStream(), "UTF-8", true);
        assertTrue(content.contains("org/springframework/beans/factory/xml/spring-beans-2.5.xsd"));
    }

    private void assertResource(String resourceName, Resource resource) throws Exception {
        if (resourceName == null) {
            assertNull(resource);
        } else {
            assertEquals(getClass().getClassLoader().getResource(resourceName), resource.getURL());
        }
    }

    private Resource assertSourceInfoAndGetResource(Object obj, Class<? extends SourceInfo<?>> expectedInterface) {
        SourceInfo<?> sourceInfo = expectedInterface.cast(obj);

        assertEquals(-1, sourceInfo.getLineNumber());

        return sourceInfo.getSource() == null ? null
                                              : getFieldValue(sourceInfo.getSource(), "springResource", Resource.class);
    }

    @Test
    public void getUriToNameMappings() {
        Map<String, String> uris = sps.getUriToNameMappings();

        assertThat(uris.size(), greaterThan(0));

        assertEquals("www.springframework.org/schema/beans/spring-beans.xsd",
                     uris.get("http://www.springframework.org/schema/beans/spring-beans.xsd"));
    }
}
TOP

Related Classes of com.alibaba.citrus.springext.impl.SpringPluggableSchemaTests

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.