git-svn-id: https://svn.kapsi.fi/jpa/nanopb@957 e3a754e5-d11d-0410-8d38-ebb782a927b9
This commit is contained in:
Petteri Aimonen
2011-08-17 19:03:06 +00:00
parent 2cefaeaf61
commit 7f53c3f748
14 changed files with 263 additions and 33 deletions

View File

@@ -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'

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;