/**
* Copyright (C) 2010 Michael Mosmann <michael@mosmann.de>
*
* 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 de.flapdoodle.mongoom.testlab.classmate;
import java.util.List;
import junit.framework.TestCase;
import com.fasterxml.classmate.AnnotationConfiguration;
import com.fasterxml.classmate.AnnotationOverrides;
import com.fasterxml.classmate.MemberResolver;
import com.fasterxml.classmate.ResolvedType;
import com.fasterxml.classmate.ResolvedTypeWithMembers;
import com.fasterxml.classmate.TypeResolver;
import com.fasterxml.classmate.members.ResolvedField;
import de.flapdoodle.mongoom.annotations.Entity;
import de.flapdoodle.mongoom.mapping.reflection.ClassMateTypeResolver;
import de.flapdoodle.mongoom.mapping.reflection.IResolvedField;
import de.flapdoodle.mongoom.mapping.reflection.IResolvedType;
import de.flapdoodle.mongoom.mapping.reflection.ITypeResolver;
public class TestClassMate extends TestCase {
public void testGeneric() {
TypeResolver resolver=new TypeResolver();
ResolvedType resolvedType = resolver.resolve(QuackString.class);
List<ResolvedType> params = resolvedType.typeParametersFor(IQuack.class);
assertEquals(1, params.size());
assertEquals(String.class, params.get(0).getErasedType());
MemberResolver mresolver=new MemberResolver(resolver);
AnnotationConfiguration annotationConfig=null;
AnnotationOverrides annotationOverrides=null;
ResolvedTypeWithMembers resolvedTypeWithMembers = mresolver.resolve(resolver.resolve(QuackBox.class), annotationConfig, annotationOverrides);
ResolvedField[] memberFields = resolvedTypeWithMembers.getMemberFields();
assertEquals(1, memberFields.length);
ResolvedType inBoxType = memberFields[0].getType();
// System.out.println("Field: "+inBoxType.getFullDescription());
List<ResolvedType> inBoxParams = inBoxType.typeParametersFor(IQuack.class);
assertEquals(1, inBoxParams.size());
assertEquals(String.class, inBoxParams.get(0).getErasedType());
}
public void testGenericAdapter() {
ITypeResolver resolver=new ClassMateTypeResolver();
IResolvedType resolvedType = resolver.resolve(QuackString.class);
List<IResolvedType> params = resolvedType.typeParametersFor(IQuack.class);
assertEquals(1, params.size());
assertEquals(String.class, params.get(0).getErasedType());
IResolvedType resolvedTypeWithMembers = resolver.resolve(QuackBox.class);
List<IResolvedField> memberFields = resolvedTypeWithMembers.getMemberFields();
assertEquals(1, memberFields.size());
IResolvedType inBoxType = memberFields.get(0).getType();
// System.out.println("Field: "+inBoxType.getFullDescription());
List<IResolvedType> inBoxParams = inBoxType.typeParametersFor(IQuack.class);
assertEquals(1, inBoxParams.size());
assertEquals(String.class, inBoxParams.get(0).getErasedType());
}
static interface IQuack<T> {
}
static class QuackString implements IQuack<String> {
}
@Entity("FU")
static class QuackBox {
IQuack<String> inBox;
}
}