This commit is contained in:
David Renshaw 2014-05-27 17:54:42 -04:00
parent fc246671e4
commit f0839b314e
4 changed files with 80 additions and 5 deletions

View file

@ -884,7 +884,38 @@ private:
};
} else if (kind == FieldKind::STRUCT) {
KJ_FAIL_REQUIRE("unimplemented");
return FieldText {
kj::strTree(
kj::mv(unionDiscrim.readerIsDecl),
spaces(indent), " public boolean has", titleCase, "() {\n",
spaces(indent), " return !_reader.getPointerField(", offset, ").isNull();\n",
spaces(indent), " }\n",
spaces(indent), " public ", type, ".Reader",
" get", titleCase, "() {\n",
spaces(indent), " throw new Error();\n",
spaces(indent), " }\n", "\n"),
kj::strTree(
kj::mv(unionDiscrim.builderIsDecl),
spaces(indent), " public final boolean has", titleCase, "() {\n",
spaces(indent), " return !_builder.getPointerField(", offset, ").isNull();\n",
spaces(indent), " }\n",
spaces(indent), " public final ", type, ".Builder get", titleCase, "() {\n",
spaces(indent), " throw new Error();\n",
spaces(indent), " }\n",
spaces(indent), " public final void set", titleCase, "(", type, ".Reader value) {\n",
unionDiscrim.set,
spaces(indent), " throw new Error();\n",
spaces(indent), " }\n",
spaces(indent), " public final ", type, ".Builder init", titleCase, "(int size) {\n",
spaces(indent), " throw new Error();\n",
spaces(indent), " }\n"),
kj::strTree(),
kj::strTree()
};
} else if (kind == FieldKind::BLOB) {
@ -920,7 +951,6 @@ private:
spaces(indent), " }\n"),
kj::strTree(),
kj::strTree()
};
} else if (kind == FieldKind::LIST) {

View file

@ -6,12 +6,12 @@ import org.scalatest.FunSuite
class EncodingSuite extends FunSuite {
test("AllTypes") {
val message = new MessageBuilder();
val allTypes = message.initRoot(TestAllTypes.Builder.factory);
allTypes.setVoidField();
allTypes.setBoolField(true);
// ...
TestUtil.initTestMessage(allTypes);
TestUtil.checkTestMessage(allTypes);
}
}

View file

@ -0,0 +1,43 @@
package org.capnproto;
import org.capnproto.test.Test._;
object TestUtil {
def initTestMessage(builder : TestAllTypes.Builder) {
builder.setVoidField();
builder.setBoolField(true);
builder.setInt8Field(-123);
builder.setInt16Field(-12345);
builder.setInt32Field(-12345678);
builder.setInt64Field(-123456789012345L);
builder.setUInt8Field(0xef.toByte);
builder.setUInt16Field(0x4567);
builder.setUInt32Field(0x34567890);
builder.setUInt64Field(0x1234567890123456L);
builder.setFloat32Field(1234.5f);
builder.setFloat64Field(-123e45);
builder.setTextField(new Text.Reader("foo"));
// builder.setDataField(data("bar"));
}
def checkTestMessage(builder : TestAllTypes.Builder) {
builder.getVoidField();
assert(builder.getBoolField() == true);
assert(builder.getInt8Field() == -123);
assert(builder.getInt16Field() == -12345);
assert(builder.getInt32Field() == -12345678);
assert(builder.getInt64Field() == -123456789012345L);
assert(builder.getUInt8Field() == 0xef.toByte);
assert(builder.getUInt16Field() == 0x4567);
assert(builder.getUInt32Field() == 0x34567890);
assert(builder.getUInt64Field() == 0x1234567890123456L);
assert(builder.getFloat32Field() == 1234.5f);
assert(builder.getFloat64Field() == -123e45);
//assert(builder.getTextField().toString() == "foo");
}
}

View file

@ -30,6 +30,8 @@ struct TestAllTypes {
float64Field @11 : Float64;
textField @12 : Text;
dataField @13 : Data;
structField @14 : TestAllTypes;
enumField @15 : TestEnum;
# ...
}