package org.visage.runtime; import visage.animation.KeyValueTarget.Type; import org.visage.runtime.sequence.*; /** * This class tests Pointer access of VisageBase instance variables. * * @author A. Sundararajan */ public class PointerTest extends VisageTestCase { private static class Counter extends VisageBase { public static final int VCNT$ = 1; public int count$() { return VCNT$; } private int $count; public static final int VOFF$count = 0; public int get$count() { return $count; } public void set$count(int count) { $count = count; } public Object get$(int varNum) { switch (varNum) { case 0: return get$count(); default: return super.get$(varNum); } } public void set$(int varNum, Object value) { switch (varNum) { case 0: set$count((Integer)value); break; default: super.set$(varNum, value); } } public Class getType$(int varNum) { switch (varNum) { case 0: return Integer.TYPE; default: return super.getType$(varNum); } } }; public void testPointerMake() { Counter counter = new Counter(); // make a Pointer for varNum 0 assertNotNull(Pointer.make(Type.INTEGER, counter, 0)); } public void testPointerAccess() { Counter counter = new Counter(); // make a Pointer for varNum 0 Pointer ptr = Pointer.make(Type.INTEGER, counter, 0); // check the type of the pointer assertEquals(Type.INTEGER, ptr.getType()); // set through varNum counter.set$(0, 1729); // get through varNum, particular accessor and pointer assertEquals(1729, counter.get$(0)); assertEquals(1729, counter.get$count()); assertEquals(1729, ptr.get()); // set through accessor counter.set$count(1674); // get through varNum, particular accessor and pointer assertEquals(1674, counter.get$(0)); assertEquals(1674, counter.get$count()); assertEquals(1674, ptr.get()); // set through pointer ptr.set(3333); // get through varNum, particular accessor and pointer assertEquals(3333, counter.get$(0)); assertEquals(3333, counter.get$count()); assertEquals(3333, ptr.get()); } // test pointer access for all types private static class AllTypeVarsHolder extends VisageBase { public static final int VCNT$ = 10; public static int VCNT$() { return VCNT$; } public int count$() { return VCNT$(); } public static final int VOFF$byteVar = 0; public static final int VOFF$shortVar = 1; public static final int VOFF$intVar = 2; public static final int VOFF$longVar = 3; public static final int VOFF$floatVar = 4; public static final int VOFF$doubleVar = 5; public static final int VOFF$charVar = 6; public static final int VOFF$booleanVar = 7; public static final int VOFF$sequenceVar = 8; public static final int VOFF$stringVar = 9; public byte $byteVar = 0; public short $shortVar = 0; public int $intVar = 0; public long $longVar = 0L; public float $floatVar = 0.0F; public double $doubleVar = 0.0; public char $charVar = ' '; public boolean $booleanVar = false; public Sequence<Integer> $sequenceVar; public String $stringVar = ""; public byte get$byteVar() { return $byteVar; } public void set$byteVar(byte varNewValue$) { $byteVar = varNewValue$; } public short get$shortVar() { return $shortVar; } public void set$shortVar(short varNewValue$) { $shortVar = varNewValue$; } public int get$intVar() { return $intVar; } public void set$intVar(int varNewValue$) { $intVar = varNewValue$; } public long get$longVar() { return $longVar; } public void set$longVar(long varNewValue$) { $longVar = varNewValue$; } public float get$floatVar() { return $floatVar; } public void set$floatVar(float varNewValue$) { $floatVar = varNewValue$; } public double get$doubleVar() { return $doubleVar; } public void set$doubleVar(double varNewValue$) { $doubleVar = varNewValue$; } public char get$charVar() { return $charVar; } public void set$charVar(char varNewValue$) { $charVar = varNewValue$; } public boolean get$booleanVar() { return $booleanVar; } public void set$booleanVar(boolean varNewValue$) { $booleanVar = varNewValue$; } public Sequence<Integer> get$sequenceVar() { return $sequenceVar; } public void set$sequenceVar(Sequence<Integer> varNewValue$) { $sequenceVar = varNewValue$; } public String get$stringVar() { return $stringVar; } public void set$stringVar(String varNewValue$) { $stringVar = varNewValue$; } public Object get$(int varNum) { switch (varNum) { case VOFF$byteVar: return get$byteVar(); case VOFF$shortVar: return get$shortVar(); case VOFF$intVar: return get$intVar(); case VOFF$longVar: return get$longVar(); case VOFF$floatVar: return get$floatVar(); case VOFF$doubleVar: return get$doubleVar(); case VOFF$charVar: return get$charVar(); case VOFF$booleanVar: return get$booleanVar(); case VOFF$sequenceVar: return get$sequenceVar(); case VOFF$stringVar: return get$stringVar(); default: return super.get$(varNum); } } public void set$(int varNum, Object value) { switch (varNum) { case VOFF$byteVar: set$byteVar(((Number)value).byteValue()); break; case VOFF$shortVar: set$shortVar(((Number)value).shortValue()); break; case VOFF$intVar: set$intVar(((Number)value).intValue()); break; case VOFF$longVar: set$longVar(((Number)value).longValue()); break; case VOFF$floatVar: set$floatVar(((Number)value).floatValue()); break; case VOFF$doubleVar: set$doubleVar(((Number)value).doubleValue()); break; case VOFF$charVar: set$charVar(((Character)value).charValue()); break; case VOFF$booleanVar: set$booleanVar(((Boolean)value).booleanValue()); break; case VOFF$sequenceVar: set$sequenceVar((Sequence<Integer>)value); break; case VOFF$stringVar: set$stringVar((String)value); break; default: super.set$(varNum, value); break; } } public Class getType$(int varNum) { switch (varNum) { case VOFF$byteVar: return Byte.TYPE; case VOFF$shortVar: return Short.TYPE; case VOFF$intVar: return Integer.TYPE; case VOFF$longVar: return Long.TYPE; case VOFF$floatVar: return Float.TYPE; case VOFF$doubleVar: return Double.TYPE; case VOFF$charVar: return Character.TYPE; case VOFF$booleanVar: return Boolean.TYPE; case VOFF$sequenceVar: return Sequence.class; case VOFF$stringVar: return String.class; default: return super.getType$(varNum); } } } public void testPointerTypes() { AllTypeVarsHolder visageObj = new AllTypeVarsHolder(); Pointer bytePtr = Pointer.make(Type.BYTE, visageObj, visageObj.VOFF$byteVar); Pointer shortPtr = Pointer.make(Type.SHORT, visageObj, visageObj.VOFF$shortVar); Pointer intPtr = Pointer.make(Type.INTEGER, visageObj, visageObj.VOFF$intVar); Pointer longPtr = Pointer.make(Type.LONG, visageObj, visageObj.VOFF$longVar); Pointer floatPtr = Pointer.make(Type.FLOAT, visageObj, visageObj.VOFF$floatVar); Pointer doublePtr = Pointer.make(Type.DOUBLE, visageObj, visageObj.VOFF$doubleVar); Pointer charPtr = Pointer.make(Type.INTEGER, visageObj, visageObj.VOFF$charVar); Pointer booleanPtr = Pointer.make(Type.BOOLEAN, visageObj, visageObj.VOFF$booleanVar); Pointer sequencePtr = Pointer.make(Type.SEQUENCE, visageObj, visageObj.VOFF$sequenceVar); Pointer stringPtr = Pointer.make(Type.OBJECT, visageObj, visageObj.VOFF$stringVar); bytePtr.set(Byte.valueOf((byte)1)); shortPtr.set(Short.valueOf((short)2)); intPtr.set(1729); longPtr.set(444444L); floatPtr.set(3.14F); doublePtr.set(Math.E); charPtr.set('J'); booleanPtr.set(true); IntArraySequence seq = new IntArraySequence(); assertEquals(seq, seq); int[] arr = { 8, 5, 7, 1, -1 }; seq.addFromArray(arr, 0, arr.length); sequencePtr.set(seq); stringPtr.set("Visage"); assertEquals(Byte.valueOf((byte)1), bytePtr.get()); assertEquals(Byte.valueOf((byte)1), visageObj.get$(visageObj.VOFF$byteVar)); assertEquals(Short.valueOf((short)2), shortPtr.get()); assertEquals(Short.valueOf((short)2), visageObj.get$(visageObj.VOFF$shortVar)); assertEquals(1729, intPtr.get()); assertEquals(1729, visageObj.get$(visageObj.VOFF$intVar)); assertEquals(444444L, longPtr.get()); assertEquals(444444L, visageObj.get$(visageObj.VOFF$longVar)); assertEquals(3.14F, floatPtr.get()); assertEquals(3.14F, visageObj.get$(visageObj.VOFF$floatVar)); assertEquals(Math.E, doublePtr.get()); assertEquals(Math.E, visageObj.get$(visageObj.VOFF$doubleVar)); assertEquals('J', charPtr.get()); assertEquals('J', visageObj.get$(visageObj.VOFF$charVar)); assertEquals(true, booleanPtr.get()); assertEquals(true, visageObj.get$(visageObj.VOFF$booleanVar)); assertEquals(true, Sequences.isEqual(seq, (Sequence)sequencePtr.get())); assertEquals(true, Sequences.isEqual(seq, (Sequence)visageObj.get$(visageObj.VOFF$sequenceVar))); assertEquals("Visage", stringPtr.get()); assertEquals("Visage", visageObj.get$(visageObj.VOFF$stringVar)); } }