/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import com.google.protobuf.ExtensionRegistry; import protos.PrimitiveFields; import protos.PrimitiveFieldsOrBuilder; import protos.Primitives; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; /** * Tests for correct serialization and deserialization of all primitive field * types. */ public class PrimitivesTest extends ProtobufTest { public void testParseFromByteArray() throws Exception { ExtensionRegistry registry = ExtensionRegistry.newInstance(); Primitives.registerAllExtensions(registry); PrimitiveFields msg = PrimitiveFields.parseFrom(ALL_PRIMITIVES_BYTES, registry); checkFields(msg); } public void testMergeFromInputStream() throws Exception { ExtensionRegistry registry = ExtensionRegistry.newInstance(); Primitives.registerAllExtensions(registry); ByteArrayInputStream in = new ByteArrayInputStream(ALL_PRIMITIVES_BYTES); PrimitiveFields.Builder builder = PrimitiveFields.newBuilder().mergeFrom(in, registry); PrimitiveFields msg = builder.build(); checkFields(builder); checkFields(msg); } public void testMergeFromOtherMessage() throws Exception { PrimitiveFields filledMsg = getFilledMessage(); PrimitiveFields.Builder builder = PrimitiveFields.newBuilder(); builder.mergeFrom(filledMsg); PrimitiveFields msg = builder.build(); checkFields(builder); checkFields(msg); } public void testSerialization() throws Exception { PrimitiveFields msg = getFilledMessage(); assertEquals(695, msg.getSerializedSize()); byte[] bytes1 = msg.toByteArray(); checkBytes(ALL_PRIMITIVES_BYTES, bytes1); ByteArrayOutputStream out = new ByteArrayOutputStream(); msg.writeTo(out); byte[] bytes2 = out.toByteArray(); checkBytes(ALL_PRIMITIVES_BYTES, bytes2); } private void checkFields(PrimitiveFieldsOrBuilder msg) { assertEquals(1, msg.getInt32F()); assertEquals(2, msg.getUint32F()); assertEquals(3, msg.getSint32F()); assertEquals(4, msg.getFixed32F()); assertEquals(5, msg.getSfixed32F()); assertEquals(6, msg.getInt64F()); assertEquals(7, msg.getUint64F()); assertEquals(8, msg.getSint64F()); assertEquals(9, msg.getFixed64F()); assertEquals(10, msg.getSfixed64F()); assertEquals(true, msg.getBoolF()); assertEquals(11.1f, msg.getFloatF()); assertEquals(12.2, msg.getDoubleF()); assertEquals(101, msg.getInt32R(0)); assertEquals(151, msg.getInt32R(1)); assertEquals(102, msg.getUint32R(0)); assertEquals(152, msg.getUint32R(1)); assertEquals(103, msg.getSint32R(0)); assertEquals(153, msg.getSint32R(1)); assertEquals(104, msg.getFixed32R(0)); assertEquals(154, msg.getFixed32R(1)); assertEquals(105, msg.getSfixed32R(0)); assertEquals(155, msg.getSfixed32R(1)); assertEquals(106, msg.getInt64R(0)); assertEquals(156, msg.getInt64R(1)); assertEquals(107, msg.getUint64R(0)); assertEquals(157, msg.getUint64R(1)); assertEquals(108, msg.getSint64R(0)); assertEquals(158, msg.getSint64R(1)); assertEquals(109, msg.getFixed64R(0)); assertEquals(159, msg.getFixed64R(1)); assertEquals(110, msg.getSfixed64R(0)); assertEquals(160, msg.getSfixed64R(1)); assertEquals(true, msg.getBoolR(0)); assertEquals(false, msg.getBoolR(1)); assertEquals(111.11f, msg.getFloatR(0)); assertEquals(161.51f, msg.getFloatR(1)); assertEquals(112.12, msg.getDoubleR(0)); assertEquals(162.52, msg.getDoubleR(1)); assertEquals(201, msg.getInt32P(0)); assertEquals(251, msg.getInt32P(1)); assertEquals(202, msg.getUint32P(0)); assertEquals(252, msg.getUint32P(1)); assertEquals(203, msg.getSint32P(0)); assertEquals(253, msg.getSint32P(1)); assertEquals(204, msg.getFixed32P(0)); assertEquals(254, msg.getFixed32P(1)); assertEquals(205, msg.getSfixed32P(0)); assertEquals(255, msg.getSfixed32P(1)); assertEquals(206, msg.getInt64P(0)); assertEquals(256, msg.getInt64P(1)); assertEquals(207, msg.getUint64P(0)); assertEquals(257, msg.getUint64P(1)); assertEquals(208, msg.getSint64P(0)); assertEquals(258, msg.getSint64P(1)); assertEquals(209, msg.getFixed64P(0)); assertEquals(259, msg.getFixed64P(1)); assertEquals(210, msg.getSfixed64P(0)); assertEquals(260, msg.getSfixed64P(1)); assertEquals(false, msg.getBoolP(0)); assertEquals(true, msg.getBoolP(1)); assertEquals(211.11f, msg.getFloatP(0)); assertEquals(261.51f, msg.getFloatP(1)); assertEquals(212.12, msg.getDoubleP(0)); assertEquals(262.52, msg.getDoubleP(1)); assertEquals(51, (int) msg.getExtension(Primitives.int32Fe)); assertEquals(52, (int) msg.getExtension(Primitives.uint32Fe)); assertEquals(53, (int) msg.getExtension(Primitives.sint32Fe)); assertEquals(54, (int) msg.getExtension(Primitives.fixed32Fe)); assertEquals(55, (int) msg.getExtension(Primitives.sfixed32Fe)); assertEquals(56, (long) msg.getExtension(Primitives.int64Fe)); assertEquals(57, (long) msg.getExtension(Primitives.uint64Fe)); assertEquals(58, (long) msg.getExtension(Primitives.sint64Fe)); assertEquals(59, (long) msg.getExtension(Primitives.fixed64Fe)); assertEquals(60, (long) msg.getExtension(Primitives.sfixed64Fe)); assertEquals(true, (boolean) msg.getExtension(Primitives.boolFe)); assertEquals(61.11f, msg.getExtension(Primitives.floatFe)); assertEquals(62.12, msg.getExtension(Primitives.doubleFe)); assertEquals(301, (int) msg.getExtension(Primitives.int32Re, 0)); assertEquals(351, (int) msg.getExtension(Primitives.int32Re, 1)); assertEquals(302, (int) msg.getExtension(Primitives.uint32Re, 0)); assertEquals(352, (int) msg.getExtension(Primitives.uint32Re, 1)); assertEquals(303, (int) msg.getExtension(Primitives.sint32Re, 0)); assertEquals(353, (int) msg.getExtension(Primitives.sint32Re, 1)); assertEquals(304, (int) msg.getExtension(Primitives.fixed32Re, 0)); assertEquals(354, (int) msg.getExtension(Primitives.fixed32Re, 1)); assertEquals(305, (int) msg.getExtension(Primitives.sfixed32Re, 0)); assertEquals(355, (int) msg.getExtension(Primitives.sfixed32Re, 1)); assertEquals(306, (long) msg.getExtension(Primitives.int64Re, 0)); assertEquals(356, (long) msg.getExtension(Primitives.int64Re, 1)); assertEquals(307, (long) msg.getExtension(Primitives.uint64Re, 0)); assertEquals(357, (long) msg.getExtension(Primitives.uint64Re, 1)); assertEquals(308, (long) msg.getExtension(Primitives.sint64Re, 0)); assertEquals(358, (long) msg.getExtension(Primitives.sint64Re, 1)); assertEquals(309, (long) msg.getExtension(Primitives.fixed64Re, 0)); assertEquals(359, (long) msg.getExtension(Primitives.fixed64Re, 1)); assertEquals(310, (long) msg.getExtension(Primitives.sfixed64Re, 0)); assertEquals(360, (long) msg.getExtension(Primitives.sfixed64Re, 1)); assertEquals(true, (boolean) msg.getExtension(Primitives.boolRe, 0)); assertEquals(false, (boolean) msg.getExtension(Primitives.boolRe, 1)); assertEquals(311.11f, msg.getExtension(Primitives.floatRe, 0)); assertEquals(361.51f, msg.getExtension(Primitives.floatRe, 1)); assertEquals(312.12, msg.getExtension(Primitives.doubleRe, 0)); assertEquals(362.52, msg.getExtension(Primitives.doubleRe, 1)); assertEquals(401, (int) msg.getExtension(Primitives.int32Pe, 0)); assertEquals(451, (int) msg.getExtension(Primitives.int32Pe, 1)); assertEquals(402, (int) msg.getExtension(Primitives.uint32Pe, 0)); assertEquals(452, (int) msg.getExtension(Primitives.uint32Pe, 1)); assertEquals(403, (int) msg.getExtension(Primitives.sint32Pe, 0)); assertEquals(453, (int) msg.getExtension(Primitives.sint32Pe, 1)); assertEquals(404, (int) msg.getExtension(Primitives.fixed32Pe, 0)); assertEquals(454, (int) msg.getExtension(Primitives.fixed32Pe, 1)); assertEquals(405, (int) msg.getExtension(Primitives.sfixed32Pe, 0)); assertEquals(455, (int) msg.getExtension(Primitives.sfixed32Pe, 1)); assertEquals(406, (long) msg.getExtension(Primitives.int64Pe, 0)); assertEquals(456, (long) msg.getExtension(Primitives.int64Pe, 1)); assertEquals(407, (long) msg.getExtension(Primitives.uint64Pe, 0)); assertEquals(457, (long) msg.getExtension(Primitives.uint64Pe, 1)); assertEquals(408, (long) msg.getExtension(Primitives.sint64Pe, 0)); assertEquals(458, (long) msg.getExtension(Primitives.sint64Pe, 1)); assertEquals(409, (long) msg.getExtension(Primitives.fixed64Pe, 0)); assertEquals(459, (long) msg.getExtension(Primitives.fixed64Pe, 1)); assertEquals(410, (long) msg.getExtension(Primitives.sfixed64Pe, 0)); assertEquals(460, (long) msg.getExtension(Primitives.sfixed64Pe, 1)); assertEquals(true, (boolean) msg.getExtension(Primitives.boolPe, 0)); assertEquals(false, (boolean) msg.getExtension(Primitives.boolPe, 1)); assertEquals(411.11f, msg.getExtension(Primitives.floatPe, 0)); assertEquals(461.51f, msg.getExtension(Primitives.floatPe, 1)); assertEquals(412.12, msg.getExtension(Primitives.doublePe, 0)); assertEquals(462.52, msg.getExtension(Primitives.doublePe, 1)); } private PrimitiveFields getFilledMessage() { return PrimitiveFields.newBuilder() .setInt32F(1) .setUint32F(2) .setSint32F(3) .setFixed32F(4) .setSfixed32F(5) .setInt64F(6) .setUint64F(7) .setSint64F(8) .setFixed64F(9) .setSfixed64F(10) .setBoolF(true) .setFloatF(11.1f) .setDoubleF(12.2) .addInt32R(101).addInt32R(151) .addUint32R(102).addUint32R(152) .addSint32R(103).addSint32R(153) .addFixed32R(104).addFixed32R(154) .addSfixed32R(105).addSfixed32R(155) .addInt64R(106).addInt64R(156) .addUint64R(107).addUint64R(157) .addSint64R(108).addSint64R(158) .addFixed64R(109).addFixed64R(159) .addSfixed64R(110).addSfixed64R(160) .addBoolR(true).addBoolR(false) .addFloatR(111.11f).addFloatR(161.51f) .addDoubleR(112.12).addDoubleR(162.52) .addInt32P(201).addInt32P(251) .addUint32P(202).addUint32P(252) .addSint32P(203).addSint32P(253) .addFixed32P(204).addFixed32P(254) .addSfixed32P(205).addSfixed32P(255) .addInt64P(206).addInt64P(256) .addUint64P(207).addUint64P(257) .addSint64P(208).addSint64P(258) .addFixed64P(209).addFixed64P(259) .addSfixed64P(210).addSfixed64P(260) .addBoolP(false).addBoolP(true) .addFloatP(211.11f).addFloatP(261.51f) .addDoubleP(212.12).addDoubleP(262.52) .setExtension(Primitives.int32Fe, 51) .setExtension(Primitives.uint32Fe, 52) .setExtension(Primitives.sint32Fe, 53) .setExtension(Primitives.fixed32Fe, 54) .setExtension(Primitives.sfixed32Fe, 55) .setExtension(Primitives.int64Fe, 56L) .setExtension(Primitives.uint64Fe, 57L) .setExtension(Primitives.sint64Fe, 58L) .setExtension(Primitives.fixed64Fe, 59L) .setExtension(Primitives.sfixed64Fe, 60L) .setExtension(Primitives.boolFe, true) .setExtension(Primitives.floatFe, 61.11f) .setExtension(Primitives.doubleFe, 62.12) .addExtension(Primitives.int32Re, 301).addExtension(Primitives.int32Re, 351) .addExtension(Primitives.uint32Re, 302).addExtension(Primitives.uint32Re, 352) .addExtension(Primitives.sint32Re, 303).addExtension(Primitives.sint32Re, 353) .addExtension(Primitives.fixed32Re, 304).addExtension(Primitives.fixed32Re, 354) .addExtension(Primitives.sfixed32Re, 305).addExtension(Primitives.sfixed32Re, 355) .addExtension(Primitives.int64Re, 306L).addExtension(Primitives.int64Re, 356L) .addExtension(Primitives.uint64Re, 307L).addExtension(Primitives.uint64Re, 357L) .addExtension(Primitives.sint64Re, 308L).addExtension(Primitives.sint64Re, 358L) .addExtension(Primitives.fixed64Re, 309L).addExtension(Primitives.fixed64Re, 359L) .addExtension(Primitives.sfixed64Re, 310L).addExtension(Primitives.sfixed64Re, 360L) .addExtension(Primitives.boolRe, true).addExtension(Primitives.boolRe, false) .addExtension(Primitives.floatRe, 311.11f).addExtension(Primitives.floatRe, 361.51f) .addExtension(Primitives.doubleRe, 312.12).addExtension(Primitives.doubleRe, 362.52) .addExtension(Primitives.int32Pe, 401).addExtension(Primitives.int32Pe, 451) .addExtension(Primitives.uint32Pe, 402).addExtension(Primitives.uint32Pe, 452) .addExtension(Primitives.sint32Pe, 403).addExtension(Primitives.sint32Pe, 453) .addExtension(Primitives.fixed32Pe, 404).addExtension(Primitives.fixed32Pe, 454) .addExtension(Primitives.sfixed32Pe, 405).addExtension(Primitives.sfixed32Pe, 455) .addExtension(Primitives.int64Pe, 406L).addExtension(Primitives.int64Pe, 456L) .addExtension(Primitives.uint64Pe, 407L).addExtension(Primitives.uint64Pe, 457L) .addExtension(Primitives.sint64Pe, 408L).addExtension(Primitives.sint64Pe, 458L) .addExtension(Primitives.fixed64Pe, 409L).addExtension(Primitives.fixed64Pe, 459L) .addExtension(Primitives.sfixed64Pe, 410L).addExtension(Primitives.sfixed64Pe, 460L) .addExtension(Primitives.boolPe, true).addExtension(Primitives.boolPe, false) .addExtension(Primitives.floatPe, 411.11f).addExtension(Primitives.floatPe, 461.51f) .addExtension(Primitives.doublePe, 412.12).addExtension(Primitives.doublePe, 462.52) .build(); } private static final byte[] ALL_PRIMITIVES_BYTES = asBytes(new int[] { 0x08, 0x01, 0x10, 0x02, 0x18, 0x06, 0x25, 0x04, 0x00, 0x00, 0x00, 0x2D, 0x05, 0x00, 0x00, 0x00, 0x30, 0x06, 0x38, 0x07, 0x40, 0x10, 0x49, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x01, 0x65, 0x9A, 0x99, 0x31, 0x41, 0x69, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x28, 0x40, 0xA8, 0x01, 0x65, 0xA8, 0x01, 0x97, 0x01, 0xB0, 0x01, 0x66, 0xB0, 0x01, 0x98, 0x01, 0xB8, 0x01, 0xCE, 0x01, 0xB8, 0x01, 0xB2, 0x02, 0xC5, 0x01, 0x68, 0x00, 0x00, 0x00, 0xC5, 0x01, 0x9A, 0x00, 0x00, 0x00, 0xCD, 0x01, 0x69, 0x00, 0x00, 0x00, 0xCD, 0x01, 0x9B, 0x00, 0x00, 0x00, 0xD0, 0x01, 0x6A, 0xD0, 0x01, 0x9C, 0x01, 0xD8, 0x01, 0x6B, 0xD8, 0x01, 0x9D, 0x01, 0xE0, 0x01, 0xD8, 0x01, 0xE0, 0x01, 0xBC, 0x02, 0xE9, 0x01, 0x6D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0x01, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0x01, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0x01, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x01, 0xF8, 0x01, 0x00, 0x85, 0x02, 0x52, 0x38, 0xDE, 0x42, 0x85, 0x02, 0x8F, 0x82, 0x21, 0x43, 0x89, 0x02, 0x48, 0xE1, 0x7A, 0x14, 0xAE, 0x07, 0x5C, 0x40, 0x89, 0x02, 0x71, 0x3D, 0x0A, 0xD7, 0xA3, 0x50, 0x64, 0x40, 0xCA, 0x02, 0x04, 0xC9, 0x01, 0xFB, 0x01, 0xD2, 0x02, 0x04, 0xCA, 0x01, 0xFC, 0x01, 0xDA, 0x02, 0x04, 0x96, 0x03, 0xFA, 0x03, 0xE2, 0x02, 0x08, 0xCC, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xEA, 0x02, 0x08, 0xCD, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xF2, 0x02, 0x04, 0xCE, 0x01, 0x80, 0x02, 0xFA, 0x02, 0x04, 0xCF, 0x01, 0x81, 0x02, 0x82, 0x03, 0x04, 0xA0, 0x03, 0x84, 0x04, 0x8A, 0x03, 0x10, 0xD1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x03, 0x10, 0xD2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0x03, 0x02, 0x00, 0x01, 0xA2, 0x03, 0x08, 0x29, 0x1C, 0x53, 0x43, 0x48, 0xC1, 0x82, 0x43, 0xAA, 0x03, 0x10, 0xA4, 0x70, 0x3D, 0x0A, 0xD7, 0x83, 0x6A, 0x40, 0xB8, 0x1E, 0x85, 0xEB, 0x51, 0x68, 0x70, 0x40, 0xC8, 0x3E, 0x33, 0xD0, 0x3E, 0x34, 0xD8, 0x3E, 0x6A, 0xE5, 0x3E, 0x36, 0x00, 0x00, 0x00, 0xED, 0x3E, 0x37, 0x00, 0x00, 0x00, 0xF0, 0x3E, 0x38, 0xF8, 0x3E, 0x39, 0x80, 0x3F, 0x74, 0x89, 0x3F, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x3F, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x3F, 0x01, 0xA5, 0x3F, 0xA4, 0x70, 0x74, 0x42, 0xA9, 0x3F, 0x8F, 0xC2, 0xF5, 0x28, 0x5C, 0x0F, 0x4F, 0x40, 0xE8, 0x3F, 0xAD, 0x02, 0xE8, 0x3F, 0xDF, 0x02, 0xF0, 0x3F, 0xAE, 0x02, 0xF0, 0x3F, 0xE0, 0x02, 0xF8, 0x3F, 0xDE, 0x04, 0xF8, 0x3F, 0xC2, 0x05, 0x85, 0x40, 0x30, 0x01, 0x00, 0x00, 0x85, 0x40, 0x62, 0x01, 0x00, 0x00, 0x8D, 0x40, 0x31, 0x01, 0x00, 0x00, 0x8D, 0x40, 0x63, 0x01, 0x00, 0x00, 0x90, 0x40, 0xB2, 0x02, 0x90, 0x40, 0xE4, 0x02, 0x98, 0x40, 0xB3, 0x02, 0x98, 0x40, 0xE5, 0x02, 0xA0, 0x40, 0xE8, 0x04, 0xA0, 0x40, 0xCC, 0x05, 0xA9, 0x40, 0x35, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0x40, 0x67, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, 0x40, 0x36, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, 0x40, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB8, 0x40, 0x01, 0xB8, 0x40, 0x00, 0xC5, 0x40, 0x14, 0x8E, 0x9B, 0x43, 0xC5, 0x40, 0x48, 0xC1, 0xB4, 0x43, 0xC9, 0x40, 0x52, 0xB8, 0x1E, 0x85, 0xEB, 0x81, 0x73, 0x40, 0xC9, 0x40, 0xB8, 0x1E, 0x85, 0xEB, 0x51, 0xA8, 0x76, 0x40, 0x8A, 0x41, 0x04, 0x91, 0x03, 0xC3, 0x03, 0x92, 0x41, 0x04, 0x92, 0x03, 0xC4, 0x03, 0x9A, 0x41, 0x04, 0xA6, 0x06, 0x8A, 0x07, 0xA2, 0x41, 0x08, 0x94, 0x01, 0x00, 0x00, 0xC6, 0x01, 0x00, 0x00, 0xAA, 0x41, 0x08, 0x95, 0x01, 0x00, 0x00, 0xC7, 0x01, 0x00, 0x00, 0xB2, 0x41, 0x04, 0x96, 0x03, 0xC8, 0x03, 0xBA, 0x41, 0x04, 0x97, 0x03, 0xC9, 0x03, 0xC2, 0x41, 0x04, 0xB0, 0x06, 0x94, 0x07, 0xCA, 0x41, 0x10, 0x99, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD2, 0x41, 0x10, 0x9A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDA, 0x41, 0x02, 0x01, 0x00, 0xE2, 0x41, 0x08, 0x14, 0x8E, 0xCD, 0x43, 0x48, 0xC1, 0xE6, 0x43, 0xEA, 0x41, 0x10, 0x52, 0xB8, 0x1E, 0x85, 0xEB, 0xC1, 0x79, 0x40, 0xB8, 0x1E, 0x85, 0xEB, 0x51, 0xE8, 0x7C, 0x40 }); public void testExtremeIntValues() throws Exception { checkIntValue(0, new int[] { 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x3E, 0x00, 0xD0, 0x3E, 0x00, 0xD8, 0x3E, 0x00, 0xE5, 0x3E, 0x00, 0x00, 0x00, 0x00, 0xED, 0x3E, 0x00, 0x00, 0x00, 0x00 }); checkIntValue(-1, new int[] { 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x18, 0x01, 0x25, 0xFF, 0xFF, 0xFF, 0xFF, 0x2D, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xD0, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xD8, 0x3E, 0x01, 0xE5, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xED, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF }); checkIntValue(Integer.MAX_VALUE, new int[] { 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x18, 0xFE, 0xFF, 0xFF, 0xFF, 0x0F, 0x25, 0xFF, 0xFF, 0xFF, 0x7F, 0x2D, 0xFF, 0xFF, 0xFF, 0x7F, 0xC8, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xD0, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xD8, 0x3E, 0xFE, 0xFF, 0xFF, 0xFF, 0x0F, 0xE5, 0x3E, 0xFF, 0xFF, 0xFF, 0x7F, 0xED, 0x3E, 0xFF, 0xFF, 0xFF, 0x7F }); checkIntValue(Integer.MIN_VALUE, new int[] { 0x08, 0x80, 0x80, 0x80, 0x80, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x10, 0x80, 0x80, 0x80, 0x80, 0x08, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x25, 0x00, 0x00, 0x00, 0x80, 0x2D, 0x00, 0x00, 0x00, 0x80, 0xC8, 0x3E, 0x80, 0x80, 0x80, 0x80, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xD0, 0x3E, 0x80, 0x80, 0x80, 0x80, 0x08, 0xD8, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xE5, 0x3E, 0x00, 0x00, 0x00, 0x80, 0xED, 0x3E, 0x00, 0x00, 0x00, 0x80 }); } private void checkIntValue(int value, int[] expectedBytesAsInts) throws Exception { byte[] expectedBytes = asBytes(expectedBytesAsInts); PrimitiveFields msg = PrimitiveFields.newBuilder() .setInt32F(value) .setUint32F(value) .setSint32F(value) .setFixed32F(value) .setSfixed32F(value) .setExtension(Primitives.int32Fe, value) .setExtension(Primitives.uint32Fe, value) .setExtension(Primitives.sint32Fe, value) .setExtension(Primitives.fixed32Fe, value) .setExtension(Primitives.sfixed32Fe, value) .build(); checkBytes(expectedBytes, msg.toByteArray()); PrimitiveFields parsedMsg = PrimitiveFields.parseFrom(expectedBytes); assertEquals(value, parsedMsg.getInt32F()); assertEquals(value, parsedMsg.getUint32F()); assertEquals(value, parsedMsg.getSint32F()); assertEquals(value, parsedMsg.getFixed32F()); assertEquals(value, parsedMsg.getSfixed32F()); } public void testExtremeLongValues() throws Exception { checkLongValue(0, new int[] { 0x30, 0x00, 0x38, 0x00, 0x40, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3E, 0x00, 0xF8, 0x3E, 0x00, 0x80, 0x3F, 0x00, 0x89, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }); checkLongValue(-1, new int[] { 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x40, 0x01, 0x49, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x51, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xF8, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x80, 0x3F, 0x01, 0x89, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x91, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }); checkLongValue(Long.MAX_VALUE, new int[] { 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x40, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x49, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x51, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF0, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x80, 0x3F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x89, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x91, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F }); checkLongValue(Long.MIN_VALUE, new int[] { 0x30, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01, 0x38, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0x3E, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01, 0xF8, 0x3E, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01, 0x80, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x89, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x91, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80 }); } private void checkLongValue(long value, int[] expectedBytesAsInts) throws Exception { byte[] expectedBytes = asBytes(expectedBytesAsInts); PrimitiveFields msg = PrimitiveFields.newBuilder() .setInt64F(value) .setUint64F(value) .setSint64F(value) .setFixed64F(value) .setSfixed64F(value) .setExtension(Primitives.int64Fe, value) .setExtension(Primitives.uint64Fe, value) .setExtension(Primitives.sint64Fe, value) .setExtension(Primitives.fixed64Fe, value) .setExtension(Primitives.sfixed64Fe, value) .build(); checkBytes(expectedBytes, msg.toByteArray()); PrimitiveFields parsedMsg = PrimitiveFields.parseFrom(expectedBytes); assertEquals(value, parsedMsg.getInt64F()); assertEquals(value, parsedMsg.getUint64F()); assertEquals(value, parsedMsg.getSint64F()); assertEquals(value, parsedMsg.getFixed64F()); assertEquals(value, parsedMsg.getSfixed64F()); } }