/* * 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 com.alibaba.citrus.springext.ConfigurationPoint; import com.alibaba.citrus.springext.ConfigurationPointException; 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 ConfigurationPointsTests { private ConfigurationPointsImpl cps; static { TestEnvStatic.init(); } @Test public void test1_getConfigurationPoints() { createConfigurationPoints("TEST-INF/test1/cps"); assertEquals("ConfigurationPoints[uninitialized]", cps.toString()); // init cps.getConfigurationPoints(); String str = cps.toString(); System.out.println("--"); System.out.println(str); assertThat(str, containsString("ConfigurationPoints[2 cps, loaded from TEST-INF/test1/cps]")); assertThat(str, containsString("[1/2] ConfigurationPoint[cp1=http://www.alibaba.com/test1/cp1")); assertThat(str, containsString("[2/2] ConfigurationPoint[cp2=http://www.alibaba.com/test1/cp2")); } @Test public void test1_getConfigurationPointByName() { createConfigurationPoints("TEST-INF/test1/cps"); assertNull(cps.getConfigurationPointByName(null)); // no NPE ConfigurationPoint cp = cps.getConfigurationPointByName("cp1"); assertThat(cp.toString(), containsString("cp1=http://www.alibaba.com/test1/cp1")); cp = cps.getConfigurationPointByName("cp2"); assertThat(cp.toString(), containsString("cp2=http://www.alibaba.com/test1/cp2")); } @Test public void test1_getConfigurationPointByNamespaceUri() { createConfigurationPoints("TEST-INF/test1/cps"); assertNull(cps.getConfigurationPointByNamespaceUri(null)); // no NPE assertNull(cps.getConfigurationPointByNamespaceUri("http://www.alibaba.com/test1/cp3")); // invalid and ignored ConfigurationPoint cp = cps.getConfigurationPointByNamespaceUri("http://www.alibaba.com/test1/cp1"); assertThat(cp.toString(), containsString("cp1=http://www.alibaba.com/test1/cp1")); cp = cps.getConfigurationPointByNamespaceUri("http://www.alibaba.com/test1/cp2"); assertThat(cp.toString(), containsString("cp2=http://www.alibaba.com/test1/cp2")); } @Test public void test1_getAvailableNamespaces() { createConfigurationPoints("TEST-INF/test1/cps"); String[] namespaces = cps.getAvailableNamespaces().toArray(new String[0]); // already sorted assertArrayEquals(new String[] { "http://www.alibaba.com/test1/cp1", "http://www.alibaba.com/test1/cp2" }, namespaces); } @Test public void test6_toString() { createConfigurationPoints("TEST-INF/test6/cps"); ConfigurationPointImpl cp = (ConfigurationPointImpl) cps.getConfigurationPointByName("cp1"); assertEquals(6, cp.getContributions().size()); String str = cps.toString(); System.out.println("--"); System.out.println(str); assertThat(str, containsString("ConfigurationPoints[1 cps, loaded from TEST-INF/test6/cps]")); assertThat(str, containsString("ConfigurationPoint[cp1=http://www.alibaba.com/test6/cp1")); assertThat(str, containsString("loaded contributions from TEST-INF/test6/cp1.")); assertThat( str, containsString("[1/6] Contribution[toConfigurationPoint=cp1, name=my1, type=BEAN_DEFINITION_PARSER, class=com.alibaba.citrus.springext.contrib.MyBeanDefinitionParser]")); assertThat( str, containsString("[2/6] Contribution[toConfigurationPoint=cp1, name=my1, type=BEAN_DEFINITION_DECORATOR, class=com.alibaba.citrus.springext.contrib.MyBeanDefinitionDecorator]")); assertThat( str, containsString("[3/6] Contribution[toConfigurationPoint=cp1, name=my1, type=BEAN_DEFINITION_DECORATOR_FOR_ATTRIBUTE, class=com.alibaba.citrus.springext.contrib.MyBeanDefinitionDecorator]")); assertThat( str, containsString("[4/6] Contribution[toConfigurationPoint=cp1, name=my2, type=BEAN_DEFINITION_PARSER, class=com.alibaba.citrus.springext.contrib.MyBeanDefinitionParser2]")); assertThat( str, containsString("[5/6] Contribution[toConfigurationPoint=cp1, name=my2, type=BEAN_DEFINITION_DECORATOR, class=com.alibaba.citrus.springext.contrib.MyBeanDefinitionDecorator2]")); assertThat( str, containsString("[6/6] Contribution[toConfigurationPoint=cp1, name=my2, type=BEAN_DEFINITION_DECORATOR_FOR_ATTRIBUTE, class=com.alibaba.citrus.springext.contrib.MyBeanDefinitionDecorator2]")); } @Test public void test7_normalizeNameAndNs() { createConfigurationPoints("TEST-INF/test7/cps"); ConfigurationPointImpl cp = (ConfigurationPointImpl) cps.getConfigurationPointByName("dir/cp1"); assertNotNull(cp); assertSame(cp, cps.getConfigurationPointByName("/dir/cp1/")); assertSame(cp, cps.getConfigurationPointByNamespaceUri("http://www.alibaba.com//test7/dir/cp1/")); } @Test public void test8_namingConvention_ForNameAndNsUri() { createConfigurationPoints("TEST-INF/test8/cps"); try { cps.getConfigurationPointByName("dir/cp1"); fail(); } catch (ConfigurationPointException e) { assertThat( e, exception("Naming Convention Violation", "http://www.alibaba.com/test8/cp1", "end with", "dir/cp1", "TEST-INF/test8/cps")); } } private void createConfigurationPoints(String location) { cps = new ConfigurationPointsImpl((ClassLoader) null, location); } }