// ======================================================================== // Copyright (c) 2006-2009 Mort Bay Consulting Pty. Ltd. // ------------------------------------------------------------------------ // All rights reserved. This program and the accompanying materials // are made available under the terms of the Eclipse Public License v1.0 // and Apache License v2.0 which accompanies this distribution. // The Eclipse Public License is available at // http://www.eclipse.org/legal/epl-v10.html // The Apache License v2.0 is available at // http://www.opensource.org/licenses/apache2.0.php // You may elect to redistribute this code under either of these licenses. // ======================================================================== package org.mortbay.jetty.spring; import java.net.URL; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.jetty.xml.XmlConfiguration; import org.junit.Assume; import org.junit.Before; import org.junit.Test; import static junit.framework.Assert.assertEquals; public class SpringXmlConfigurationTest { protected String _configure="org/mortbay/jetty/spring/configure.xml"; @Before public void init() throws Exception { // Jetty's XML configuration will make use of java.util.ServiceLoader // to load the proper ConfigurationProcessorFactory, so these tests // will always fail in JDK 5. String javaVersion = System.getProperty("java.version"); Pattern regexp = Pattern.compile("1\\.(\\d{1})\\..*"); Matcher matcher = regexp.matcher(javaVersion); if (matcher.matches()) { String minor = matcher.group(1); Assume.assumeTrue(Integer.parseInt(minor) > 5); } } @Test public void testPassedObject() throws Exception { TestConfiguration.VALUE=77; URL url = SpringXmlConfigurationTest.class.getClassLoader().getResource(_configure); XmlConfiguration configuration = new XmlConfiguration(url); Map<String,String> properties = new HashMap<String,String>(); properties.put("test", "xxx"); TestConfiguration nested = new TestConfiguration(); nested.setTestString0("nested"); configuration.getIdMap().put("nested",nested); TestConfiguration tc = new TestConfiguration(); tc.setTestString0("preconfig"); tc.setTestInt0(42); configuration.getProperties().putAll(properties); tc=(TestConfiguration)configuration.configure(tc); assertEquals("preconfig",tc.getTestString0()); assertEquals(42,tc.getTestInt0()); assertEquals("SetValue",tc.getTestString1()); assertEquals(1,tc.getTestInt1()); assertEquals("nested",tc.getNested().getTestString0()); assertEquals("nested",tc.getNested().getTestString1()); assertEquals("default",tc.getNested().getNested().getTestString0()); assertEquals("deep",tc.getNested().getNested().getTestString1()); assertEquals("deep",((TestConfiguration)configuration.getIdMap().get("nestedDeep")).getTestString1()); assertEquals(2,((TestConfiguration)configuration.getIdMap().get("nestedDeep")).getTestInt2()); assertEquals("xxx",tc.getTestString2()); } @Test public void testNewObject() throws Exception { final String newDefaultValue = "NEW DEFAULT"; TestConfiguration.VALUE=71; URL url = SpringXmlConfigurationTest.class.getClassLoader().getResource(_configure); final AtomicInteger count = new AtomicInteger(0); XmlConfiguration configuration = new XmlConfiguration(url) { @Override public void initializeDefaults(Object object) { super.initializeDefaults(object); if (object instanceof TestConfiguration) { count.incrementAndGet(); ((TestConfiguration)object).setTestString0(newDefaultValue); ((TestConfiguration)object).setTestString1("WILL BE OVERRIDDEN"); } } }; Map<String,String> properties = new HashMap<String,String>(); properties.put("test", "xxx"); TestConfiguration nested = new TestConfiguration(); nested.setTestString0("nested"); configuration.getIdMap().put("nested", nested); configuration.getProperties().putAll(properties); TestConfiguration tc = (TestConfiguration)configuration.configure(); assertEquals(3,count.get()); assertEquals(newDefaultValue,tc.getTestString0()); assertEquals(-1,tc.getTestInt0()); assertEquals("SetValue",tc.getTestString1()); assertEquals(1,tc.getTestInt1()); assertEquals(newDefaultValue,tc.getNested().getTestString0()); assertEquals("nested",tc.getNested().getTestString1()); assertEquals(newDefaultValue,tc.getNested().getNested().getTestString0()); assertEquals("deep",tc.getNested().getNested().getTestString1()); assertEquals("deep",((TestConfiguration)configuration.getIdMap().get("nestedDeep")).getTestString1()); assertEquals(2,((TestConfiguration)configuration.getIdMap().get("nestedDeep")).getTestInt2()); assertEquals("xxx",tc.getTestString2()); } @Test public void testJettyXml() throws Exception { URL url = SpringXmlConfigurationTest.class.getClassLoader().getResource("org/mortbay/jetty/spring/jetty.xml"); XmlConfiguration configuration = new XmlConfiguration(url); Server server = (Server)configuration.configure(); server.dumpStdErr(); } @Test public void XmlConfigurationMain() throws Exception { XmlConfiguration.main(new String[]{"src/test/resources/org/mortbay/jetty/spring/jetty.xml"}); } }