| 33 | */ |
| 34 | |
| 35 | TEST(Message, canDecodeSingle) { |
| 36 | test::Message message; |
| 37 | |
| 38 | message.set_int32(42); |
| 39 | message.set_int64(1337133713371337); |
| 40 | message.set_uint32(4294967294); |
| 41 | message.set_uint64(104294967296u); |
| 42 | message.set_sint32(-43); |
| 43 | message.set_sint64(-1337133713371337); |
| 44 | message.set_fixed32(42); |
| 45 | message.set_fixed64(10429496729600u); |
| 46 | message.set_sfixed32(-42); |
| 47 | message.set_sfixed64(-10429496729600); |
| 48 | message.set_float_(0.98765); |
| 49 | message.set_double_(0.987654321); |
| 50 | message.set_bool_(true); |
| 51 | message.set_string("Hello World and Welcome!"); |
| 52 | message.set_bytes("<some bytes here>"); |
| 53 | message.set_enum_(test::Enum::VALUE_1); |
| 54 | |
| 55 | auto bytes = message.ByteSizeLong(); |
| 56 | auto buffer = makeShared<ByteBuffer>(); |
| 57 | buffer->resize(bytes); |
| 58 | |
| 59 | ASSERT_TRUE(message.SerializeToArray(buffer->data(), buffer->size())); |
| 60 | |
| 61 | SimpleExceptionTracker exceptionTracker; |
| 62 | auto parsedMessage = Protobuf::Message::parse(buffer->toBytesView(), message.GetDescriptor(), exceptionTracker); |
| 63 | |
| 64 | ASSERT_EQ(std::vector<Protobuf::FieldNumber>({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}), |
| 65 | parsedMessage->sortedFieldNumbers()); |
| 66 | |
| 67 | ASSERT_EQ(42, parsedMessage->getOrCreateField(1).getInt32()); |
| 68 | ASSERT_EQ(1337133713371337, parsedMessage->getOrCreateField(2).getInt64()); |
| 69 | ASSERT_EQ(4294967294u, parsedMessage->getOrCreateField(3).getUInt32()); |
| 70 | ASSERT_EQ(104294967296u, parsedMessage->getOrCreateField(4).getUInt64()); |
| 71 | ASSERT_EQ(-43, parsedMessage->getOrCreateField(5).getSInt32()); |
| 72 | ASSERT_EQ(-1337133713371337, parsedMessage->getOrCreateField(6).getSInt64()); |
| 73 | ASSERT_EQ(42u, parsedMessage->getOrCreateField(7).getUInt32()); |
| 74 | ASSERT_EQ(10429496729600u, parsedMessage->getOrCreateField(8).getUInt64()); |
| 75 | ASSERT_EQ(-42, parsedMessage->getOrCreateField(9).getInt32()); |
| 76 | ASSERT_EQ(-10429496729600, parsedMessage->getOrCreateField(10).getInt64()); |
| 77 | ASSERT_EQ(0.98765f, parsedMessage->getOrCreateField(11).getFloat()); |
| 78 | ASSERT_EQ(0.987654321, parsedMessage->getOrCreateField(12).getDouble()); |
| 79 | ASSERT_EQ(true, parsedMessage->getOrCreateField(13).getBool()); |
| 80 | |
| 81 | ASSERT_EQ("Hello World and Welcome!", parsedMessage->getOrCreateField(14).getRaw().toStringView()); |
| 82 | ASSERT_EQ("<some bytes here>", parsedMessage->getOrCreateField(15).getRaw().toStringView()); |
| 83 | } |
| 84 | |
| 85 | TEST(Message, canEncodeSingle) { |
| 86 | auto message = makeShared<Protobuf::Message>(); |
nothing calls this directly
no test coverage detected