Example
git-svn-id: https://svn.kapsi.fi/jpa/nanopb@957 e3a754e5-d11d-0410-8d38-ebb782a927b9
This commit is contained in:
@@ -2,21 +2,27 @@ CFLAGS=-ansi -Wall -Werror -I .. -g -O0
|
||||
DEPS=../pb_decode.c ../pb_decode.h ../pb_encode.c ../pb_encode.h ../pb.h person.h unittests.h
|
||||
TESTS=test_decode1 test_encode1 decode_unittests encode_unittests
|
||||
|
||||
all: $(TESTS) run_unittests
|
||||
all: $(TESTS) run_unittests breakpoints
|
||||
|
||||
clean:
|
||||
rm -f $(TESTS)
|
||||
|
||||
%: %.c $(DEPS)
|
||||
$(CC) $(CFLAGS) -o $@ $< ../pb_decode.c ../pb_encode.c
|
||||
$(CC) $(CFLAGS) -o $@ $< ../pb_decode.c ../pb_encode.c person.c
|
||||
|
||||
%.h: %.proto
|
||||
person.h: person.proto
|
||||
protoc -I. -I../generator -I/usr/include -operson.pb $<
|
||||
python ../generator/nanopb_generator.py person.pb
|
||||
|
||||
run_unittests: decode_unittests encode_unittests
|
||||
./decode_unittests
|
||||
./encode_unittests
|
||||
breakpoints: ../*.c *.c
|
||||
grep -n 'return false;' $^ | cut -d: -f-2 | xargs -n 1 echo b > $@
|
||||
|
||||
run_unittests: decode_unittests encode_unittests test_encode1 test_decode1
|
||||
./decode_unittests > /dev/null
|
||||
./encode_unittests > /dev/null
|
||||
|
||||
[ "`./test_encode1 | ./test_decode1`" = \
|
||||
"`./test_encode1 | protoc --decode=Person -I. -I../generator -I/usr/include person.proto`" ]
|
||||
|
||||
run_fuzztest: test_decode1
|
||||
bash -c 'I=1; while cat /dev/urandom | ./test_decode1 > /dev/null; do I=$$(($$I+1)); echo -en "\r$$I"; done'
|
||||
@@ -4,8 +4,7 @@ message Person {
|
||||
required string name = 1 [(nanopb).max_size = 40];
|
||||
required int32 id = 2;
|
||||
optional string email = 3 [(nanopb).max_size = 40];
|
||||
optional bytes test = 5 [default="\x00\x01\x02", (nanopb).max_size = 20];
|
||||
|
||||
|
||||
enum PhoneType {
|
||||
MOBILE = 0;
|
||||
HOME = 1;
|
||||
|
||||
@@ -2,9 +2,6 @@
|
||||
#include <pb_decode.h>
|
||||
#include "person.h"
|
||||
|
||||
/* This test has only one source file anyway.. */
|
||||
#include "person.c"
|
||||
|
||||
bool print_person(pb_istream_t *stream)
|
||||
{
|
||||
int i;
|
||||
@@ -13,12 +10,33 @@ 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);
|
||||
printf("name: \"%s\"\n", person.name);
|
||||
printf("id: %d\n", 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);
|
||||
|
||||
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;
|
||||
|
||||
@@ -2,9 +2,6 @@
|
||||
#include <pb_encode.h>
|
||||
#include "person.h"
|
||||
|
||||
/* This test has only one source file anyway.. */
|
||||
#include "person.c"
|
||||
|
||||
bool streamcallback(pb_ostream_t *stream, const uint8_t *buf, size_t count)
|
||||
{
|
||||
FILE *file = (FILE*) stream->state;
|
||||
|
||||
Reference in New Issue
Block a user