Skip to content

Commit

Permalink
Test that enum aliases works.
Browse files Browse the repository at this point in the history
  • Loading branch information
eerimoq committed May 24, 2020
1 parent ce0725b commit 036f585
Show file tree
Hide file tree
Showing 4 changed files with 190 additions and 1 deletion.
98 changes: 98 additions & 0 deletions tests/files/c_source/enum.c
Original file line number Diff line number Diff line change
Expand Up @@ -334,3 +334,101 @@ int enum_limits_decode(
size,
(pbtools_message_decode_inner_t)enum_limits_decode_inner));
}

void enum_allow_alias_init(
struct enum_allow_alias_t *self_p,
struct pbtools_heap_t *heap_p)
{
self_p->base.heap_p = heap_p;
self_p->value = 0;
}

void enum_allow_alias_encode_inner(
struct pbtools_encoder_t *encoder_p,
struct enum_allow_alias_t *self_p)
{
pbtools_encoder_write_enum(encoder_p, 1, self_p->value);
}

void enum_allow_alias_decode_inner(
struct pbtools_decoder_t *decoder_p,
struct enum_allow_alias_t *self_p)
{
int wire_type;

while (pbtools_decoder_available(decoder_p)) {
switch (pbtools_decoder_read_tag(decoder_p, &wire_type)) {

case 1:
self_p->value = pbtools_decoder_read_enum(decoder_p, wire_type);
break;

default:
pbtools_decoder_skip_field(decoder_p, wire_type);
break;
}
}
}

void enum_allow_alias_encode_repeated_inner(
struct pbtools_encoder_t *encoder_p,
int field_number,
struct enum_allow_alias_repeated_t *repeated_p)
{
pbtools_encode_repeated_inner(
encoder_p,
field_number,
(struct pbtools_repeated_message_t *)repeated_p,
sizeof(struct enum_allow_alias_t),
(pbtools_message_encode_inner_t)enum_allow_alias_encode_inner);
}

void enum_allow_alias_decode_repeated_inner(
struct pbtools_decoder_t *decoder_p,
struct pbtools_repeated_info_t *repeated_info_p,
struct enum_allow_alias_repeated_t *repeated_p)
{
pbtools_decode_repeated_inner(
decoder_p,
repeated_info_p,
(struct pbtools_repeated_message_t *)repeated_p,
sizeof(struct enum_allow_alias_t),
(pbtools_message_init_t)enum_allow_alias_init,
(pbtools_message_decode_inner_t)enum_allow_alias_decode_inner);
}

struct enum_allow_alias_t *
enum_allow_alias_new(
void *workspace_p,
size_t size)
{
return (pbtools_message_new(
workspace_p,
size,
sizeof(struct enum_allow_alias_t),
(pbtools_message_init_t)enum_allow_alias_init));
}

int enum_allow_alias_encode(
struct enum_allow_alias_t *self_p,
uint8_t *encoded_p,
size_t size)
{
return (pbtools_message_encode(
&self_p->base,
encoded_p,
size,
(pbtools_message_encode_inner_t)enum_allow_alias_encode_inner));
}

int enum_allow_alias_decode(
struct enum_allow_alias_t *self_p,
const uint8_t *encoded_p,
size_t size)
{
return (pbtools_message_decode(
&self_p->base,
encoded_p,
size,
(pbtools_message_decode_inner_t)enum_allow_alias_decode_inner));
}
62 changes: 62 additions & 0 deletions tests/files/c_source/enum.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,28 @@ struct enum_limits_t {
enum enum_limits_enum_e value;
};

/**
* Enum enum.AllowAlias.Enum.
*/
enum enum_allow_alias_enum_e {
enum_allow_alias_enum_a_e = 0,
enum_allow_alias_enum_b_e = 1,
enum_allow_alias_enum_c_e = 1
};

/**
* Message enum.AllowAlias.
*/
struct enum_allow_alias_repeated_t {
int length;
struct enum_allow_alias_t *items_p;
};

struct enum_allow_alias_t {
struct pbtools_message_base_t base;
enum enum_allow_alias_enum_e value;
};

/**
* Encoding and decoding of enum.Message.
*/
Expand Down Expand Up @@ -164,6 +186,24 @@ int enum_limits_decode(
const uint8_t *encoded_p,
size_t size);

/**
* Encoding and decoding of enum.AllowAlias.
*/
struct enum_allow_alias_t *
enum_allow_alias_new(
void *workspace_p,
size_t size);

int enum_allow_alias_encode(
struct enum_allow_alias_t *self_p,
uint8_t *encoded_p,
size_t size);

int enum_allow_alias_decode(
struct enum_allow_alias_t *self_p,
const uint8_t *encoded_p,
size_t size);

/* Internal functions. Do not use! */

void enum_message_init(
Expand Down Expand Up @@ -232,6 +272,28 @@ void enum_limits_decode_repeated_inner(
struct pbtools_repeated_info_t *repeated_info_p,
struct enum_limits_repeated_t *repeated_p);

void enum_allow_alias_init(
struct enum_allow_alias_t *self_p,
struct pbtools_heap_t *heap_p);

void enum_allow_alias_encode_inner(
struct pbtools_encoder_t *encoder_p,
struct enum_allow_alias_t *self_p);

void enum_allow_alias_decode_inner(
struct pbtools_decoder_t *decoder_p,
struct enum_allow_alias_t *self_p);

void enum_allow_alias_encode_repeated_inner(
struct pbtools_encoder_t *encoder_p,
int field_number,
struct enum_allow_alias_repeated_t *repeated_p);

void enum_allow_alias_decode_repeated_inner(
struct pbtools_decoder_t *decoder_p,
struct pbtools_repeated_info_t *repeated_info_p,
struct enum_allow_alias_repeated_t *repeated_p);

#ifdef __cplusplus
}
#endif
Expand Down
11 changes: 11 additions & 0 deletions tests/files/enum.proto
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,14 @@ message Limits {

Enum value = 1;
}

message AllowAlias {
enum Enum {
// Always allow aliases for now.
A = 0;
B = 1;
C = 1;
}

Enum value = 1;
}
20 changes: 19 additions & 1 deletion tests/test_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,7 @@ def test_enum(self):
parsed = pbtools.parse_file('tests/files/enum.proto')

self.assertEqual(parsed.package, 'enum')
self.assertEqual(len(parsed.messages), 3)
self.assertEqual(len(parsed.messages), 4)
self.assertEqual(len(parsed.enums), 1)

enum = parsed.enums[0]
Expand Down Expand Up @@ -412,6 +412,24 @@ def test_enum(self):
self.assertEqual(field.name, 'I')
self.assertEqual(field.field_number, 2147483647)

# AllowAlias.
message = parsed.messages[3]
enum = message.enums[0]
self.assertEqual(enum.name, 'Enum')
self.assertEqual(len(enum.fields), 3)

field = enum.fields[0]
self.assertEqual(field.name, 'A')
self.assertEqual(field.field_number, 0)

field = enum.fields[1]
self.assertEqual(field.name, 'B')
self.assertEqual(field.field_number, 1)

field = enum.fields[2]
self.assertEqual(field.name, 'C')
self.assertEqual(field.field_number, 1)

def test_options(self):
parsed = pbtools.parse_file('tests/files/options.proto')

Expand Down

0 comments on commit 036f585

Please sign in to comment.