From 951417efb0d4ab7ccdbf2bca56e763d24f365458 Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" Date: Mon, 5 May 2008 22:55:19 +0000 Subject: Fixing annotation parsing of empty arrays. --- .../com/amazon/carbonado/layout/TestLayout.java | 78 ++++++++++++++++++++++ 1 file changed, 78 insertions(+) (limited to 'src/test/java/com/amazon/carbonado/layout') diff --git a/src/test/java/com/amazon/carbonado/layout/TestLayout.java b/src/test/java/com/amazon/carbonado/layout/TestLayout.java index 44559b0..3ef47d6 100644 --- a/src/test/java/com/amazon/carbonado/layout/TestLayout.java +++ b/src/test/java/com/amazon/carbonado/layout/TestLayout.java @@ -32,9 +32,11 @@ import org.cojen.classfile.MethodInfo; import org.cojen.classfile.Modifiers; import org.cojen.classfile.TypeDesc; import org.cojen.classfile.attribute.Annotation; +import org.cojen.classfile.constant.ConstantUTFInfo; import org.cojen.util.ClassInjector; +import com.amazon.carbonado.adapter.TextAdapter; import com.amazon.carbonado.adapter.YesNoAdapter; import com.amazon.carbonado.CorruptEncodingException; import com.amazon.carbonado.Nullable; @@ -51,10 +53,13 @@ import com.amazon.carbonado.info.StorablePropertyAdapter; import com.amazon.carbonado.repo.sleepycat.BDBRepositoryBuilder; import com.amazon.carbonado.stored.FileInfo; +import com.amazon.carbonado.stored.SomeText; import com.amazon.carbonado.stored.StorableDateIndex; import com.amazon.carbonado.stored.StorableTestBasic; import com.amazon.carbonado.stored.StorableTestMinimal; +import com.amazon.carbonado.util.AnnotationDescParser; + import com.amazon.carbonado.TestUtilities; /** @@ -184,6 +189,79 @@ public class TestLayout extends TestCase { } } + public void testAdapter2() throws Exception { + // Run test twice: First time, records get inserted. Second time, they are loaded. + for (int i=0; i<2; i++) { + Layout layout = mFactory.layoutFor(SomeText.class); + + assertEquals(SomeText.class.getName(), layout.getStorableTypeName()); + + List properties = layout.getAllProperties(); + + assertEquals(8, properties.size()); + + LayoutProperty property; + + int charsetCount = 0; + int altCharsetsCount = 0; + + for (int j=1; j<=7; j++) { + property = properties.get(j); + assertEquals("text" + j, property.getPropertyName()); + assertEquals("Ljava/lang/String;", property.getPropertyTypeDescriptor()); + assertTrue(property.isNullable()); + assertFalse(property.isPrimaryKeyMember()); + assertEquals(TextAdapter.class.getName(), property.getAdapterTypeName()); + + String desc = property.getAdapterParams(); + assertTrue(desc.startsWith + ("@Lcom/amazon/carbonado/adapter/TextAdapter;altCharsets=[")); + + ClassFile cf = new ClassFile("test"); + final MethodInfo mi = cf.addMethod(Modifiers.PUBLIC_ABSTRACT, "test", null, null); + + Annotation ann = new AnnotationDescParser(desc) { + protected Annotation buildRootAnnotation(TypeDesc rootAnnotationType) { + return mi.addRuntimeVisibleAnnotation(rootAnnotationType); + } + }.parse(null); + + assertEquals("Lcom/amazon/carbonado/adapter/TextAdapter;", + ann.getTypeConstant().getValue()); + + Map mvMap = ann.getMemberValues(); + + if (mvMap.containsKey("charset")) { + charsetCount++; + Annotation.MemberValue mv = mvMap.get("charset"); + assertEquals(Annotation.MEMBER_TAG_STRING, mv.getTag()); + ConstantUTFInfo value = (ConstantUTFInfo) mv.getValue(); + assertEquals("UTF-8", value.getValue()); + } + + if (mvMap.containsKey("altCharsets")) { + altCharsetsCount++; + Annotation.MemberValue mv = mvMap.get("altCharsets"); + assertEquals(Annotation.MEMBER_TAG_ARRAY, mv.getTag()); + Annotation.MemberValue[] values = (Annotation.MemberValue[]) mv.getValue(); + for (int k=0; k= 6); + } + } + public void testAddProperty() throws Exception { for (int i=0; i<2; i++) { { -- cgit v1.2.3