Package com.alibaba.citrus.springext.impl

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

/*
* 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.springext.ContributionType.*;
import static com.alibaba.citrus.test.TestUtil.*;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;

import java.io.IOException;
import java.util.Iterator;

import com.alibaba.citrus.springext.ConfigurationPoint;
import com.alibaba.citrus.springext.Contribution;
import com.alibaba.citrus.springext.Schema;
import com.alibaba.citrus.springext.VersionableSchemas;
import com.alibaba.citrus.test.TestEnvStatic;
import com.alibaba.citrus.test.runner.TestNameAware;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(TestNameAware.class)
public class SchemasTests {
    private ConfigurationPointsImpl cps;

    static {
        TestEnvStatic.init();
    }

    @Test
    public void test1_configurationPoint_noContributions() throws IOException {
        createConfigurationPoints("TEST-INF/test1/cps");

        ConfigurationPoint cp = cps.getConfigurationPointByName("cp1");
        VersionableSchemas schemas = cp.getSchemas();

        String str = schemas.toString();

        System.out.println("--");
        System.out.println(str);

        assertEquals("Schemas[cp1.xsd, targetNamespace=http://www.alibaba.com/test1/cp1, 0 versioned schemas]", str);

        String content = schemas.getMainSchema().getText();

        assertThat(content, containsString("UTF-8"));

        content = schemas.getMainSchema().getText("GB2312");

        assertThat(content, containsString("GB2312"));

        System.out.println("--");
        System.out.println(content);

        assertThat(content, allOf(
                containsAll("xmlns=\"http://www.alibaba.com/test1/cp1\"", "targetNamespace=\"http://www.alibaba.com/test1/cp1\""),
                not(containsString("elementFormDefault=\"qualified\""))
        ));
    }

    @Test
    public void test6_configurationPoint_noContributionSchemas() throws IOException {
        createConfigurationPoints("TEST-INF/test6/cps");

        ConfigurationPoint cp = cps.getConfigurationPointByName("cp1");
        VersionableSchemas schemas = cp.getSchemas();

        String str = schemas.toString();

        System.out.println("--");
        System.out.println(str);

        assertEquals("Schemas[cp1.xsd, targetNamespace=http://www.alibaba.com/test6/cp1, 0 versioned schemas]", str);

        String content = schemas.getMainSchema().getText();

        System.out.println("--");
        System.out.println(content);

        assertThat(content, allOf(
                containsAll("xmlns=\"http://www.alibaba.com/test6/cp1\"", "targetNamespace=\"http://www.alibaba.com/test6/cp1\""),
                not(containsString("elementFormDefault=\"qualified\""))
        ));
    }

    @Test
    public void test7_configurationPoint_nestedName_noContributionSchemas() throws IOException {
        createConfigurationPoints("TEST-INF/test7/cps");

        ConfigurationPoint cp = cps.getConfigurationPointByName("dir/cp1");
        VersionableSchemas schemas = cp.getSchemas();

        String str = schemas.toString();

        System.out.println("--");
        System.out.println(str);

        assertEquals("Schemas[dir-cp1.xsd, targetNamespace=http://www.alibaba.com/test7/dir/cp1, 0 versioned schemas]",
                     str);

        String content = schemas.getMainSchema().getText();

        System.out.println("--");
        System.out.println(content);

        assertThat(content, allOf(
                containsAll("xmlns=\"http://www.alibaba.com/test7/dir/cp1\"", "targetNamespace=\"http://www.alibaba.com/test7/dir/cp1\""),
                not(containsString("elementFormDefault=\"qualified\""))
        ));
    }

    @Test
    public void test9_configurationPoint_nsPrefix() throws IOException {
        createConfigurationPoints("TEST-INF/test9/cps");

        ConfigurationPoint cp = cps.getConfigurationPointByName("my/services");
        VersionableSchemas schemas = cp.getSchemas();

        // cp - main schema
        Schema mainSchema = schemas.getMainSchema();

        assertEquals("http://www.alibaba.com/my/services", mainSchema.getTargetNamespace());
        assertEquals("svc", mainSchema.getNamespacePrefix()); // cps定义中指定了nsPrefix

        // cp - version 1.0 schema
        Schema versionedSchema_10 = schemas.getVersionedSchema("1.0");

        assertEquals("http://www.alibaba.com/my/services", versionedSchema_10.getTargetNamespace());
        assertEquals("svc", versionedSchema_10.getNamespacePrefix()); // cps定义中指定了nsPrefix

        // cp - version 2.0 schema
        Schema versionedSchema_20 = schemas.getVersionedSchema("2.0");

        assertEquals("http://www.alibaba.com/my/services", versionedSchema_20.getTargetNamespace());
        assertEquals("svc", versionedSchema_20.getNamespacePrefix()); // cps定义中指定了nsPrefix

        // cp - main schema, no nsPrefix specified
        cp = cps.getConfigurationPointByName("my/plugins");
        schemas = cp.getSchemas();
        mainSchema = schemas.getMainSchema();

        assertEquals("http://www.alibaba.com/my/plugins", mainSchema.getTargetNamespace());
        assertEquals("plugins", mainSchema.getNamespacePrefix()); // 根据targetNamespace生成
    }

    @Test
    public void test9_configurationPointSchemas() throws IOException {
        createConfigurationPoints("TEST-INF/test9/cps");

        ConfigurationPoint cp = cps.getConfigurationPointByName("my/services");
        VersionableSchemas schemas = cp.getSchemas();

        // schemas to string
        String str = schemas.toString();

        System.out.println("--");
        System.out.println(str);

        assertThat(
                str,
                containsAll(
                        "Schemas[my-services.xsd, targetNamespace=http://www.alibaba.com/my/services, 2 versioned schemas]",
                        "version 1.0: Schema[name=my-services-1.0.xsd, version=1.0, targetNamespace=http://www.alibaba.com/my/services, source=generated-content]",
                        "version 2.0: Schema[name=my-services-2.0.xsd, version=2.0, targetNamespace=http://www.alibaba.com/my/services, source=generated-content]"));

        // cp - main schema
        String content = schemas.getMainSchema().getText();

        System.out.println("--");
        System.out.println(content);

        assertThat(content, allOf(
                containsAll("xmlns=\"http://www.alibaba.com/my/services\"", "targetNamespace=\"http://www.alibaba.com/my/services\""),
                not(containsString("elementFormDefault=\"qualified\""))
        ));
        assertThat(
                content,
                containsAll("<xsd:include", "schemaLocation=\"my/services/service1.xsd\"",
                            "schemaLocation=\"my/services/service2.xsd\"", "schemaLocation=\"my/services/service3.xsd\""));

        // cp - version 1.0 schema
        content = schemas.getVersionedSchema("1.0").getText();

        System.out.println("--");
        System.out.println(content);

        assertThat(content, allOf(
                containsAll("xmlns=\"http://www.alibaba.com/my/services\"", "targetNamespace=\"http://www.alibaba.com/my/services\""),
                not(containsString("elementFormDefault=\"qualified\""))
        ));

        assertThat(
                content,
                containsAll("<xsd:include", "schemaLocation=\"my/services/service1-1.0.xsd\"",
                            "schemaLocation=\"my/services/service2.xsd\"", "schemaLocation=\"my/services/service3.xsd\""));

        // cp - version 2.0 schema
        content = schemas.getVersionedSchema("2.0").getText();

        System.out.println("--");
        System.out.println(content);

        assertThat(content, allOf(
                containsAll("xmlns=\"http://www.alibaba.com/my/services\"", "targetNamespace=\"http://www.alibaba.com/my/services\""),
                not(containsString("elementFormDefault=\"qualified\""))
        ));

        assertThat(
                content,
                containsAll("<xsd:include", "schemaLocation=\"my/services/service1.xsd\"",
                            "schemaLocation=\"my/services/service2-2.0.xsd\"",
                            "schemaLocation=\"my/services/service3.xsd\""));
    }

    @Test
    public void test9_contributionSchemas() throws IOException {
        createConfigurationPoints("TEST-INF/test9/cps");

        ConfigurationPoint cp = cps.getConfigurationPointByName("my/services");
        Iterator<Contribution> i = cp.getContributions().iterator();

        // contrib1 - schemas to string
        Contribution contrib = i.next();
        VersionableSchemas schemas = contrib.getSchemas();
        String str = schemas.toString();

        System.out.println("--");
        System.out.println(str);

        assertThat(
                str,
                containsAll("Schemas[my/services/service1.xsd, 1 versioned schemas]",
                            "version 1.0: Schema[name=my/services/service1-1.0.xsd, version=1.0, source=",
                            "my/services/service1-1.0.xsd]"));

        // contrib1 - main schema to string
        String content = schemas.getMainSchema().getText();
        assertThat(content, containsString("service1-main"));

        // contrib1 - version 1.0 schema to string
        content = schemas.getVersionedSchema("1.0").getText();
        assertThat(content, containsString("service1-1.0"));

        // contrib2 - schemas to string
        contrib = i.next();
        schemas = contrib.getSchemas();
        str = schemas.toString();

        System.out.println("--");
        System.out.println(str);

        assertThat(
                str,
                containsAll("Schemas[my/services/service2.xsd, 1 versioned schemas]",
                            "version 2.0: Schema[name=my/services/service2-2.0.xsd, version=2.0, source=",
                            "my/services/service2-2.0.xsd]"));

        // contrib2 - main schema to string
        content = schemas.getMainSchema().getText();
        assertThat(content, containsString("service2-main"));

        // contrib2 - version 2.0 schema to string
        content = schemas.getVersionedSchema("2.0").getText();
        assertThat(content, containsString("service2-2.0"));

        // contrib3 - schemas to string
        contrib = i.next();
        schemas = contrib.getSchemas();
        str = schemas.toString();

        System.out.println("--");
        System.out.println(str);

        assertThat(str, containsAll("Schemas[my/services/service3.xsd, 0 versioned schemas]"));

        // contrib3 - main schema to string
        content = schemas.getMainSchema().getText();
        assertThat(content, containsString("service3-main"));

        assertFalse(i.hasNext());
    }

    @Test
    public void test12_contributionSchemas_versionRecognition() {
        createConfigurationPoints("TEST-INF/test12/cps");

        ConfigurationPoint cp = cps.getConfigurationPointByName("my/services");
        assertEquals(3, cp.getContributions().size());

        Contribution myservice = cp.getContribution("myservice", BEAN_DEFINITION_PARSER);
        Contribution myservice_abc = cp.getContribution("myservice-abc", BEAN_DEFINITION_PARSER);
        Contribution myservice_abc_xyz = cp.getContribution("myservice-abc-xyz", BEAN_DEFINITION_DECORATOR);

        assertThat(myservice.getSchemas().toString(),
                   containsAll("Schemas[my/services/myservice.xsd, 0 versioned schemas]"));

        assertThat(
                myservice_abc.getSchemas().toString(),
                containsAll("Schemas[missing main schema, 1 versioned schemas]",
                            "version 1.0: Schema[name=my/services/myservice-abc-1.0.xsd, version=1.0, source=",
                            "my/services/myservice-abc-1.0.xsd]"));

        assertThat(
                myservice_abc_xyz.getSchemas().toString(),
                containsAll("Schemas[my/services/myservice-abc-xyz.xsd, 1 versioned schemas]",
                            "version 2.0: Schema[name=my/services/myservice-abc-xyz-2.0.xsd, version=2.0, source=",
                            "my/services/myservice-abc-xyz-2.0.xsd]"));
    }

    private void createConfigurationPoints(String location) {
        cps = new ConfigurationPointsImpl((ClassLoader) null, location);
    }
}
TOP

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

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.