blob: 85a2e6e06b9c4b55f4483b9024c574bfe67fdc24 [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.openejb.config;
import junit.framework.TestCase;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
import javax.persistence.PersistenceContexts;
import javax.persistence.PersistenceProperty;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.HashMap;
public class PersistenceContextAnnFactoryTest extends TestCase {
public void test() throws Exception {
Field useAsm = PersistenceContextAnnFactory.class.getDeclaredField("useAsm");
useAsm.setAccessible(true);
useAsm.set(null, true);
PersistenceContextAnnFactory factory = new PersistenceContextAnnFactory();
factory.addAnnotations(Foo.class);
for (PersistenceContext annotation : Foo.class.getAnnotation(PersistenceContexts.class).value()) {
assertEq(annotation, factory.create(annotation, null));
}
PersistenceContext annotation = Foo.class.getAnnotation(PersistenceContext.class);
assertEq(annotation, factory.create(annotation, null));
for (Field field : Foo.class.getFields()) {
annotation = field.getAnnotation(PersistenceContext.class);
assertEq(annotation, factory.create(annotation, new AnnotationDeployer.FieldMember(field)));
}
for (Method method : Foo.class.getMethods()) {
annotation = method.getAnnotation(PersistenceContext.class);
if (annotation != null) {
assertEq(annotation, factory.create(annotation, new AnnotationDeployer.MethodMember(method)));
}
}
}
private static void assertEq(PersistenceContext annotation, PersistenceContextAnn wrapper) {
if (annotation.name().length() > 0) {
assertEquals(annotation.name(), wrapper.name());
}
assertEquals(annotation.unitName(), wrapper.unitName());
assertEquals(annotation.type().toString(), wrapper.type());
Map<String,String> properties = new HashMap<String,String>();
for (PersistenceProperty property : annotation.properties()) {
properties.put(property.name(), property.value());
}
assertEquals(properties, wrapper.properties());
}
@PersistenceContexts({
@PersistenceContext(name = "classPCs1", unitName = "CPCs1u", type = PersistenceContextType.EXTENDED, properties = {
@PersistenceProperty(name = "classPCs1-1", value = "CPCs1"),
@PersistenceProperty(name = "classPCs1-2", value = "CPCs2")
}),
@PersistenceContext(name = "classPCs2", unitName = "CPCs2u", type = PersistenceContextType.EXTENDED, properties = {
@PersistenceProperty(name = "classPCs2-1", value = "CPCs1"),
@PersistenceProperty(name = "classPCs2-2", value = "CPCs2")
})
})
@PersistenceContext(name = "class", unitName = "cu", type = PersistenceContextType.EXTENDED, properties = {
@PersistenceProperty(name = "class1", value = "c1"),
@PersistenceProperty(name = "class2", value = "c2")
})
public static class Foo {
@PersistenceContext(name = "field", unitName = "fu", type = PersistenceContextType.EXTENDED, properties = {
@PersistenceProperty(name = "field1", value = "f1"),
@PersistenceProperty(name = "field2", value = "f1")
})
public Object field;
@PersistenceContext(name = "method", unitName = "mu", type = PersistenceContextType.EXTENDED, properties = {
@PersistenceProperty(name = "method1", value = "m1"),
@PersistenceProperty(name = "method2", value = "m2")
})
public void method() {}
@PersistenceContext(unitName = "myfu", type = PersistenceContextType.EXTENDED, properties = {
@PersistenceProperty(name = "myField1", value = "myf1"),
@PersistenceProperty(name = "myField2", value = "myf1")
})
public Object myField;
@PersistenceContext(unitName = "mymu", type = PersistenceContextType.EXTENDED, properties = {
@PersistenceProperty(name = "myMethod1", value = "mym1"),
@PersistenceProperty(name = "myMethod2", value = "mym2")
})
public void setMyMethod() {}
}
}