# Test the 'oneof' feature for generating C unions.

Import('env')

import re

match = None
if 'PROTOC_VERSION' in env:
    match = re.search('([0-9]+).([0-9]+).([0-9]+)', env['PROTOC_VERSION'])

if match:
    version = list(map(int, match.groups()))

# Oneof is supported by protoc >= 2.6.0
if env.GetOption('clean') or (match and (version[0] > 2 or (version[0] == 2 and version[1] >= 6))):
    env.NanopbProto('oneof')

    enc = env.Program(['encode_oneof.c',
                    'oneof.pb.c',
                    '$COMMON/pb_encode.o',
                    '$COMMON/pb_common.o'])

    dec = env.Program(['decode_oneof.c',
                    'oneof.pb.c',
                    '$COMMON/pb_decode.o',
                    '$COMMON/pb_common.o'])

    env.RunTest("message1.pb", enc, ARGS = ['1'])
    env.RunTest("message1.txt", [dec, 'message1.pb'], ARGS = ['1'])
    env.RunTest("message2.pb", enc, ARGS = ['2'])
    env.RunTest("message2.txt", [dec, 'message2.pb'], ARGS = ['2'])
    env.RunTest("message3.pb", enc, ARGS = ['3'])
    env.RunTest("message3.txt", [dec, 'message3.pb'], ARGS = ['3'])
