From 710c03f7f99d0d08fe9f46d21470a2cd51df927b Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Mon, 6 Oct 2014 10:17:39 -0400 Subject: [PATCH] oh right, endianness --- .../test/scala/org/capnproto/EncodingTest.scala | 16 +++++++++++++--- compiler/src/test/schema/test.capnp | 1 + .../org/capnproto/GeneratedClassSupport.java | 4 +++- .../src/main/java/org/capnproto/WireHelpers.java | 2 +- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/compiler/src/test/scala/org/capnproto/EncodingTest.scala b/compiler/src/test/scala/org/capnproto/EncodingTest.scala index e54e869..8f3282f 100644 --- a/compiler/src/test/scala/org/capnproto/EncodingTest.scala +++ b/compiler/src/test/scala/org/capnproto/EncodingTest.scala @@ -5,7 +5,6 @@ import org.scalatest.FunSuite import org.scalatest.Matchers._; class EncodingSuite extends FunSuite { - test("AllTypes") { val message = new MessageBuilder(); val allTypes = message.initRoot(TestAllTypes.factory); @@ -142,8 +141,19 @@ class EncodingSuite extends FunSuite { (TestConstants.ENUM_CONST) should equal (TestEnum.CORGE); { val subReader = TestConstants.STRUCT_CONST; - //subReader.getBoolField() should equal (true); - //subReader.getInt8Field() should equal (-12); + subReader.getBoolField() should equal (true); + subReader.getInt8Field() should equal (-12); + subReader.getInt16Field() should equal(3456); + subReader.getInt32Field() should equal (-78901234); + subReader.getInt64Field() should equal (56789012345678L); + subReader.getUInt8Field() should equal (90); + subReader.getUInt16Field should equal (1234); + subReader.getUInt32Field() should equal (56789012); + subReader.getUInt64Field() should equal (345678901234567890L); + subReader.getFloat32Field() should equal (-1.25e-10f); + subReader.getFloat64Field() should equal (345); + subReader.getTextField().toString() should equal ("baz"); + // ... } } diff --git a/compiler/src/test/schema/test.capnp b/compiler/src/test/schema/test.capnp index ed46c6c..0293266 100644 --- a/compiler/src/test/schema/test.capnp +++ b/compiler/src/test/schema/test.capnp @@ -311,6 +311,7 @@ struct TestConstants { (textField = "x structlist 3")], enumList = [qux, bar, grault] # interfaceList can't have a default + ); # ... const enumConst :TestEnum = corge; diff --git a/runtime/src/main/java/org/capnproto/GeneratedClassSupport.java b/runtime/src/main/java/org/capnproto/GeneratedClassSupport.java index c697402..faa4394 100644 --- a/runtime/src/main/java/org/capnproto/GeneratedClassSupport.java +++ b/runtime/src/main/java/org/capnproto/GeneratedClassSupport.java @@ -3,7 +3,9 @@ package org.capnproto; public final class GeneratedClassSupport { public static SegmentReader decodeRawBytes(String s) { try { - return new SegmentReader(java.nio.ByteBuffer.wrap(s.getBytes("ISO_8859-1")).asReadOnlyBuffer(), null); + java.nio.ByteBuffer buffer = java.nio.ByteBuffer.wrap(s.getBytes("ISO_8859-1")).asReadOnlyBuffer(); + buffer.order(java.nio.ByteOrder.LITTLE_ENDIAN); + return new SegmentReader(buffer, null); } catch (Exception e) { throw new Error("could not decode raw bytes from String"); } diff --git a/runtime/src/main/java/org/capnproto/WireHelpers.java b/runtime/src/main/java/org/capnproto/WireHelpers.java index ff81372..61ee5ff 100644 --- a/runtime/src/main/java/org/capnproto/WireHelpers.java +++ b/runtime/src/main/java/org/capnproto/WireHelpers.java @@ -414,13 +414,13 @@ final class WireHelpers { static StructReader readStructPointer(SegmentReader segment, int refOffset, int nestingLimit) { - // TODO error handling. is_null if (nestingLimit <= 0) { throw new DecodeException("Message is too deeply nested or contains cycles."); } long ref = WirePointer.get(segment.buffer, refOffset); + int refTarget = WirePointer.target(refOffset, ref); FollowFarsResult resolved = followFars(ref, refTarget, segment);