X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=tests%2Ftest_decode1.c;h=56bbd8f880987409ee78cab3eb5481600f5749fb;hb=5f3bf35e01a0eb5d7c31949bcd32265be056ed5c;hp=cc4688dcfb5d8aa96d4a3650d823825ec446e0ff;hpb=a8d0172507d59b73b95f766aa7644147fd060f20;p=apps%2Fagl-service-can-low-level.git diff --git a/tests/test_decode1.c b/tests/test_decode1.c index cc4688dc..56bbd8f8 100644 --- a/tests/test_decode1.c +++ b/tests/test_decode1.c @@ -1,10 +1,17 @@ +/* A very simple decoding test case, using person.proto. + * Produces output compatible with protoc --decode. + * Reads the encoded data from stdin and prints the values + * to stdout as text. + * + * Run e.g. ./test_encode1 | ./test_decode1 + */ + #include #include -#include "person.h" - -/* This test has only one source file anyway.. */ -#include "person.c" +#include "person.pb.h" +/* This function is called once from main(), it handles + the decoding and printing. */ bool print_person(pb_istream_t *stream) { int i; @@ -13,12 +20,38 @@ bool print_person(pb_istream_t *stream) if (!pb_decode(stream, Person_fields, &person)) return false; - printf("Person: name '%s' id '%d' email '%s'\n", person.name, person.id, person.email); + /* Now the decoding is done, rest is just to print stuff out. */ + + printf("name: \"%s\"\n", person.name); + printf("id: %ld\n", (long)person.id); + + if (person.has_email) + printf("email: \"%s\"\n", person.email); for (i = 0; i < person.phone_count; i++) { Person_PhoneNumber *phone = &person.phone[i]; - printf("PhoneNumber: number '%s' type '%d'\n", phone->number, phone->type); + printf("phone {\n"); + printf(" number: \"%s\"\n", phone->number); + + if (phone->has_type) + { + switch (phone->type) + { + case Person_PhoneType_WORK: + printf(" type: WORK\n"); + break; + + case Person_PhoneType_HOME: + printf(" type: HOME\n"); + break; + + case Person_PhoneType_MOBILE: + printf(" type: MOBILE\n"); + break; + } + } + printf("}\n"); } return true; @@ -26,12 +59,25 @@ bool print_person(pb_istream_t *stream) int main() { + /* Read the data into buffer */ uint8_t buffer[512]; - size_t size = fread(buffer, 1, 512, stdin); + size_t count = fread(buffer, 1, sizeof(buffer), stdin); - pb_istream_t stream = pb_istream_from_buffer(buffer, size); - if (!print_person(&stream)) - printf("Parsing failed.\n"); + if (!feof(stdin)) + { + printf("Message does not fit in buffer\n"); + return 1; + } + + /* Construct a pb_istream_t for reading from the buffer */ + pb_istream_t stream = pb_istream_from_buffer(buffer, count); - return 0; + /* Decode and print out the stuff */ + if (!print_person(&stream)) + { + printf("Parsing failed: %s\n", PB_GET_ERROR(&stream)); + return 1; + } else { + return 0; + } }