From 0a16440c2ed664664a3031ad91eda85ef3bb9806 Mon Sep 17 00:00:00 2001 From: Sander Hautvast Date: Tue, 10 Nov 2020 21:57:13 +0100 Subject: [PATCH] Added some tests --- .../java/nl/sander/beejava/TypeMapper.java | 4 +-- .../constantpool/entry/ConstantPoolEntry.java | 6 ++-- .../constantpool/entry/DoubleEntry.java | 5 +-- .../beejava/constantpool/entry/LongEntry.java | 5 +-- .../entry/ConstantPoolEntryTest.java | 32 +++++++++++++++++++ .../constantpool/entry/DoubleEntryTest.java | 13 ++++++++ .../constantpool/entry/FloatEntryTest.java | 13 ++++++++ .../constantpool/entry/IntegerEntryTest.java | 13 ++++++++ .../constantpool/entry/LongEntryTest.java | 13 ++++++++ 9 files changed, 95 insertions(+), 9 deletions(-) create mode 100644 src/test/java/nl/sander/beejava/constantpool/entry/ConstantPoolEntryTest.java create mode 100644 src/test/java/nl/sander/beejava/constantpool/entry/DoubleEntryTest.java create mode 100644 src/test/java/nl/sander/beejava/constantpool/entry/FloatEntryTest.java create mode 100644 src/test/java/nl/sander/beejava/constantpool/entry/IntegerEntryTest.java create mode 100644 src/test/java/nl/sander/beejava/constantpool/entry/LongEntryTest.java diff --git a/src/main/java/nl/sander/beejava/TypeMapper.java b/src/main/java/nl/sander/beejava/TypeMapper.java index 2e22b4f..b311038 100644 --- a/src/main/java/nl/sander/beejava/TypeMapper.java +++ b/src/main/java/nl/sander/beejava/TypeMapper.java @@ -17,10 +17,10 @@ public class TypeMapper { MAP.put(short.class, "S"); MAP.put(boolean.class, "Z"); } - +//TODO something with arrays public static String map(Class type) { return Optional.ofNullable(MAP.get(type)) - .orElseThrow(() -> new RuntimeException("Type " + type.getName() + " not found")); // this MUST not happen -> TODO map all types + .orElseThrow(() -> new RuntimeException("Type " + type.getName() + " not found")); } diff --git a/src/main/java/nl/sander/beejava/constantpool/entry/ConstantPoolEntry.java b/src/main/java/nl/sander/beejava/constantpool/entry/ConstantPoolEntry.java index 780ba83..66a964e 100644 --- a/src/main/java/nl/sander/beejava/constantpool/entry/ConstantPoolEntry.java +++ b/src/main/java/nl/sander/beejava/constantpool/entry/ConstantPoolEntry.java @@ -25,7 +25,7 @@ public abstract class ConstantPoolEntry { * * @return a byte indicating the type of the constant */ - byte getTag(){ + byte getTag() { return getBytes()[0]; } @@ -58,10 +58,10 @@ public abstract class ConstantPoolEntry { * @return upper 8 bits as byte */ protected byte upperByte(int u16) { - return (byte) (u16 << 8); + return (byte) (u16 >>> 8); } protected byte getByte(long bits, int positions) { - return (byte) ((bits >>> positions) & 0xFF); + return (byte) ((bits >>> (positions * 8)) & 0xFF); } } diff --git a/src/main/java/nl/sander/beejava/constantpool/entry/DoubleEntry.java b/src/main/java/nl/sander/beejava/constantpool/entry/DoubleEntry.java index 4d32dbc..cf10f67 100644 --- a/src/main/java/nl/sander/beejava/constantpool/entry/DoubleEntry.java +++ b/src/main/java/nl/sander/beejava/constantpool/entry/DoubleEntry.java @@ -13,8 +13,9 @@ public class DoubleEntry extends LeafEntry { @Override public byte[] getBytes() { long bits = Double.doubleToRawLongBits(doubleVal); - return new byte[]{TAG, getByte(bits, 56), getByte(bits, 48), getByte(bits, 40), getByte(bits, 32), - getByte(bits, 24), getByte(bits, 16), getByte(bits, 8), (byte) (bits & 0xFF)}; + return new byte[]{TAG, getByte(bits, 7), getByte(bits, 6), getByte(bits, 5), + getByte(bits, 4), + getByte(bits, 3), getByte(bits, 2), getByte(bits, 1), (byte) (bits & 0xFF)}; } @Override diff --git a/src/main/java/nl/sander/beejava/constantpool/entry/LongEntry.java b/src/main/java/nl/sander/beejava/constantpool/entry/LongEntry.java index b4562dd..af9d867 100644 --- a/src/main/java/nl/sander/beejava/constantpool/entry/LongEntry.java +++ b/src/main/java/nl/sander/beejava/constantpool/entry/LongEntry.java @@ -18,8 +18,9 @@ public class LongEntry extends LeafEntry { @Override public byte[] getBytes() { - return new byte[]{TAG, getByte(longVal, 56), getByte(longVal, 48), getByte(longVal, 40), getByte(longVal, 32), - getByte(longVal, 24), getByte(longVal, 16), getByte(longVal, 8), (byte) (longVal & 0xFF)}; + return new byte[]{TAG, getByte(longVal, 7), getByte(longVal, 6), getByte(longVal, 5), + getByte(longVal, 4), getByte(longVal, 3), getByte(longVal, 2), + getByte(longVal, 1), (byte) (longVal & 0xFF)}; } @Override diff --git a/src/test/java/nl/sander/beejava/constantpool/entry/ConstantPoolEntryTest.java b/src/test/java/nl/sander/beejava/constantpool/entry/ConstantPoolEntryTest.java new file mode 100644 index 0000000..c99d26d --- /dev/null +++ b/src/test/java/nl/sander/beejava/constantpool/entry/ConstantPoolEntryTest.java @@ -0,0 +1,32 @@ +package nl.sander.beejava.constantpool.entry; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class ConstantPoolEntryTest { + + private final ConstantPoolEntry entry = new ConstantPoolEntry() { + @Override + public byte[] getBytes() { + return new byte[]{}; + } + }; + + @Test + public void getSetIndex() { + int value = 2; + entry.setIndex(value); + assertEquals(value, entry.getIndex()); + } + + @Test + public void lowerByte() { + assertEquals(1, entry.lowerByte(257)); + } + + @Test + public void upperByte() { + assertEquals(1, entry.upperByte(257)); + } +} \ No newline at end of file diff --git a/src/test/java/nl/sander/beejava/constantpool/entry/DoubleEntryTest.java b/src/test/java/nl/sander/beejava/constantpool/entry/DoubleEntryTest.java new file mode 100644 index 0000000..1ff3c20 --- /dev/null +++ b/src/test/java/nl/sander/beejava/constantpool/entry/DoubleEntryTest.java @@ -0,0 +1,13 @@ +package nl.sander.beejava.constantpool.entry; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +class DoubleEntryTest { + + @Test + void getBytes() { + assertArrayEquals(new byte[]{6, 64, 40, 0, 0, 0, 0, 0, 0}, new DoubleEntry(12D).getBytes()); + } +} \ No newline at end of file diff --git a/src/test/java/nl/sander/beejava/constantpool/entry/FloatEntryTest.java b/src/test/java/nl/sander/beejava/constantpool/entry/FloatEntryTest.java new file mode 100644 index 0000000..9b7fa9e --- /dev/null +++ b/src/test/java/nl/sander/beejava/constantpool/entry/FloatEntryTest.java @@ -0,0 +1,13 @@ +package nl.sander.beejava.constantpool.entry; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +class FloatEntryTest { + + @Test + void getBytes() { + assertArrayEquals(new byte[]{4, 0, 0, 0, 0}, new FloatEntry(0F).getBytes()); + } +} \ No newline at end of file diff --git a/src/test/java/nl/sander/beejava/constantpool/entry/IntegerEntryTest.java b/src/test/java/nl/sander/beejava/constantpool/entry/IntegerEntryTest.java new file mode 100644 index 0000000..f65f8b2 --- /dev/null +++ b/src/test/java/nl/sander/beejava/constantpool/entry/IntegerEntryTest.java @@ -0,0 +1,13 @@ +package nl.sander.beejava.constantpool.entry; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +class IntegerEntryTest { + + @Test + void getBytes() { + assertArrayEquals(new byte[]{3, 18, 52, 86, 120}, new IntegerEntry(0x12345678).getBytes()); + } +} \ No newline at end of file diff --git a/src/test/java/nl/sander/beejava/constantpool/entry/LongEntryTest.java b/src/test/java/nl/sander/beejava/constantpool/entry/LongEntryTest.java new file mode 100644 index 0000000..376fb61 --- /dev/null +++ b/src/test/java/nl/sander/beejava/constantpool/entry/LongEntryTest.java @@ -0,0 +1,13 @@ +package nl.sander.beejava.constantpool.entry; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +class LongEntryTest { + + @Test + void getBytes() { + assertArrayEquals(new byte[]{5, 18, 52, 86, 120, -102, -68, -34, -16}, new LongEntry(0x123456789ABCDEF0L).getBytes()); + } +} \ No newline at end of file