Line data Source code
1 : #include <stdio.h> 2 : #include <stdbool.h> 3 : #include <string.h> 4 : #include <assert.h> 5 : #include <pb_encode.h> 6 : #include <pb_decode.h> 7 : #include "unittests.h" 8 : #include "naming_style.pb.h" 9 : 10 1 : int main() 11 : { 12 1 : int status = 0; 13 1 : main_message_t message = MAIN_MESSAGE_INIT_ZERO; 14 : 15 : /* Verify that all members have the expected names */ 16 1 : message.lucky_number = 13; 17 1 : message.required_number = 1; 18 1 : message.repeated_number[0] = 1; 19 1 : message.repeated_ints = NULL; 20 : 21 1 : message.my_enum1 = MY_ENUM1_ENUM_THIRD; 22 1 : message.my_enum2 = MY_ENUM2_ENUM2_ENTRY; 23 1 : message.my_enum3 = MY_ENUM2_ENUM2_ENTRY; 24 1 : message.my_enum4.arg = NULL; 25 : 26 1 : message.string_values1 = NULL; 27 1 : message.string_values2[0][0] = 'a'; 28 1 : message.optional_string.arg = NULL; 29 1 : message.required_string[0] = 'a'; 30 : 31 1 : message.repeated_fixed32[0] = 1; 32 : 33 1 : message.required_bytes1[0] = 0; 34 1 : message.required_bytes2.size = 0; 35 1 : message.repeated_bytes1_count = 0; 36 1 : message.repeated_bytes2 = NULL; 37 : 38 1 : message.has_sub_message1 = true; 39 1 : message.sub_message1.has_test_value = true; 40 1 : message.sub_message1.test_value = 0; 41 1 : message.sub_message2.arg = NULL; 42 1 : message.sub_message3.test_value = 0; 43 : 44 1 : message.which_one_of_name = MAIN_MESSAGE_TEST_MESSAGE2_TAG; 45 1 : message.one_of_name.test_message2.has_test_value = true; 46 1 : message.one_of_name.test_message2.test_value = 5; 47 : 48 1 : message.which_one_of_name2 = MAIN_MESSAGE_TEST_MESSAGE5_TAG; 49 1 : message.test_message5.test_value = 5; 50 : 51 1 : TEST(strcmp("ENTRY_FIRST", my_enum1_name(MY_ENUM1_ENTRY_FIRST)) == 0); 52 : 53 : /* Verify that the descriptor structure is at least mostly correct 54 : * by doing a round-trip encoding test. 55 : */ 56 : { 57 : uint8_t buffer1[256]; 58 : uint8_t buffer2[256]; 59 1 : pb_ostream_t ostream1 = pb_ostream_from_buffer(buffer1, sizeof(buffer1)); 60 1 : pb_ostream_t ostream2 = pb_ostream_from_buffer(buffer2, sizeof(buffer2)); 61 : pb_istream_t istream; 62 1 : main_message_t message2 = MAIN_MESSAGE_INIT_ZERO; 63 : 64 1 : TEST(pb_encode(&ostream1, &main_message_t_msg, &message)); 65 : 66 1 : istream = pb_istream_from_buffer(buffer1, ostream1.bytes_written); 67 1 : TEST(pb_decode(&istream, &main_message_t_msg, &message2)); 68 : 69 : /* Encoding a second time should produce same output */ 70 1 : TEST(pb_encode(&ostream2, &main_message_t_msg, &message2)); 71 : 72 1 : TEST(ostream2.bytes_written == ostream1.bytes_written); 73 1 : TEST(memcmp(buffer1, buffer2, ostream1.bytes_written) == 0); 74 : } 75 : 76 1 : return status; 77 : }