blob: 3a598c48ed96d30e703bfe759da996babbd2b6b3 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.camel.impl;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.camel.CamelContext;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.Endpoint;
import org.apache.camel.NoSuchBeanException;
/**
* Unit test for helper methods on the DefaultComponent.
*/
public class DefaultComponentTest extends ContextTestSupport {
private final class MyComponent extends DefaultComponent {
private MyComponent(CamelContext context) {
super(context);
}
protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters)
throws Exception {
return null;
}
}
public void testGetAndRemoveParameterEmptyMap() {
Map<String, Object> parameters = new HashMap<String, Object>();
MyComponent my = new MyComponent(this.context);
Integer value = my.getAndRemoveParameter(parameters, "size", Integer.class);
assertNull(value);
}
public void testGetAndRemoveParameterEmptyMapDefault() {
Map<String, Object> parameters = new HashMap<String, Object>();
MyComponent my = new MyComponent(this.context);
Integer value = my.getAndRemoveParameter(parameters, "size", Integer.class, 5);
assertEquals(value.intValue(), 5);
}
public void testGetAndRemoveParameterEmptyMapDefaultIsNull() {
Map<String, Object> parameters = new HashMap<String, Object>();
MyComponent my = new MyComponent(this.context);
Integer value = my.getAndRemoveParameter(parameters, "size", Integer.class, null);
assertNull(value);
}
public void testGetAndRemoveParameterToInteger() {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("size", 200);
MyComponent my = new MyComponent(this.context);
Integer value = my.getAndRemoveParameter(parameters, "size", Integer.class);
assertEquals(value.intValue(), 200);
}
public void testGetAndRemoveParameterToIntegerDefault() {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("size", 200);
MyComponent my = new MyComponent(this.context);
Integer value = my.getAndRemoveParameter(parameters, "level", Integer.class, 4);
assertEquals(value.intValue(), 4);
}
public void testResolveAndRemoveReferenceParameter() {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("date", "#beginning");
MyComponent my = new MyComponent(this.context);
Date value = my.resolveAndRemoveReferenceParameter(parameters, "date", Date.class);
assertEquals(new Date(0), value);
// usage of leading # is optional
parameters.put("date", "beginning");
value = my.resolveAndRemoveReferenceParameter(parameters, "date", Date.class);
assertEquals(new Date(0), value);
}
public void testResolveAndRemoveReferenceParameterNotInRegistry() {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("date", "#somewhen");
MyComponent my = new MyComponent(this.context);
try {
my.resolveAndRemoveReferenceParameter(parameters, "date", Date.class);
fail("returned without finding object in registry");
} catch (NoSuchBeanException e) {
assertEquals("No bean could be found in the registry for: somewhen of type: java.util.Date", e.getMessage());
}
}
public void testResolveAndRemoveReferenceParameterNotInMapDefault() {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("date", "#beginning");
MyComponent my = new MyComponent(this.context);
Date value = my.resolveAndRemoveReferenceParameter(parameters, "wrong", Date.class, new Date(1));
assertEquals(new Date(1), value);
}
public void testResolveAndRemoveReferenceParameterNotInMapNull() {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("date", "#beginning");
MyComponent my = new MyComponent(this.context);
Date value = my.resolveAndRemoveReferenceParameter(parameters, "wrong", Date.class);
assertNull(value);
}
public void testResolveAndRemoveReferenceListParameterElement() {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("dates", "#bean1");
MyComponent my = new MyComponent(this.context);
List<Date> values = my.resolveAndRemoveReferenceListParameter(parameters, "dates", Date.class);
assertEquals(1, values.size());
assertEquals(new Date(10), values.get(0));
}
public void testResolveAndRemoveReferenceListParameterListComma() {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("dates", "#bean1,#bean2");
MyComponent my = new MyComponent(this.context);
List<Date> values = my.resolveAndRemoveReferenceListParameter(parameters, "dates", Date.class);
assertEquals(2, values.size());
assertEquals(new Date(10), values.get(0));
assertEquals(new Date(11), values.get(1));
// usage of leading # is optional
parameters.put("dates", "bean1,bean2");
values = my.resolveAndRemoveReferenceListParameter(parameters, "dates", Date.class);
assertEquals(2, values.size());
assertEquals(new Date(10), values.get(0));
assertEquals(new Date(11), values.get(1));
}
public void testResolveAndRemoveReferenceListParameterListCommaTrim() {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("dates", " #bean1 , #bean2 ");
MyComponent my = new MyComponent(this.context);
List<Date> values = my.resolveAndRemoveReferenceListParameter(parameters, "dates", Date.class);
assertEquals(2, values.size());
assertEquals(new Date(10), values.get(0));
assertEquals(new Date(11), values.get(1));
// usage of leading # is optional
parameters.put("dates", " bean1 , bean2 ");
values = my.resolveAndRemoveReferenceListParameter(parameters, "dates", Date.class);
assertEquals(2, values.size());
assertEquals(new Date(10), values.get(0));
assertEquals(new Date(11), values.get(1));
}
public void testResolveAndRemoveReferenceListParameterListBean() {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("dates", "#listBean");
MyComponent my = new MyComponent(this.context);
List<Date> values = my.resolveAndRemoveReferenceListParameter(parameters, "dates", Date.class);
assertEquals(2, values.size());
assertEquals(new Date(10), values.get(0));
assertEquals(new Date(11), values.get(1));
// usage of leading # is optional
parameters.put("dates", "#listBean");
values = my.resolveAndRemoveReferenceListParameter(parameters, "dates", Date.class);
assertEquals(2, values.size());
assertEquals(new Date(10), values.get(0));
assertEquals(new Date(11), values.get(1));
}
public void testResolveAndRemoveReferenceListParameterInvalidBean() {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("dates", "#bean1,#bean3");
MyComponent my = new MyComponent(this.context);
try {
my.resolveAndRemoveReferenceListParameter(parameters, "dates", Date.class);
fail("returned without finding object in registry");
} catch (NoSuchBeanException e) {
assertEquals("No bean could be found in the registry for: bean3 of type: java.util.Date", e.getMessage());
}
}
public void testContextShouldBeSet() throws Exception {
MyComponent my = new MyComponent(null);
try {
my.start();
fail("Should have thrown a IllegalArgumentException");
} catch (IllegalArgumentException e) {
assertEquals("camelContext must be specified", e.getMessage());
}
}
protected JndiRegistry createRegistry() throws Exception {
Date bean1 = new Date(10);
Date bean2 = new Date(11);
JndiRegistry jndiRegistry = super.createRegistry();
jndiRegistry.bind("beginning", new Date(0));
jndiRegistry.bind("bean1", bean1);
jndiRegistry.bind("bean2", bean2);
jndiRegistry.bind("listBean", Arrays.asList(bean1, bean2));
return jndiRegistry;
}
}