# Check that alltypes test case works also when the .proto file defines
# a package name.

Import("env")

def set_pkgname(src, dst, pkgname):
    data = open(str(src)).read()
    placeholder = '// package name placeholder'
    assert placeholder in data
    data = data.replace(placeholder, 'package %s;' % pkgname)
    open(str(dst), 'w').write(data)

# Build a modified alltypes.proto
env.Command("alltypes.proto", "#alltypes/alltypes.proto",
            lambda target, source, env: set_pkgname(source[0], target[0], 'test.package'))
env.Command("alltypes.options", "#alltypes/alltypes.options", Copy("$TARGET", "$SOURCE"))
env.NanopbProto(["alltypes", "alltypes.options"])

# Build a modified encode_alltypes.c
def modify_c(target, source, env):
    '''Add package name to type names in .c file.'''

    data = open(str(source[0]), 'r').read()
    
    type_names = ['AllTypes', 'MyEnum', 'HugeEnum', 'NonZeroBasedEnum']
    for name in type_names:
        data = data.replace(name, 'test_package_' + name)
    
    open(str(target[0]), 'w').write(data)
    return 0
env.Command("encode_alltypes.c", "#alltypes/encode_alltypes.c", modify_c)

# Encode and compare results to original alltypes testcase
enc = env.Program(["encode_alltypes.c", "alltypes.pb.c", "$COMMON/pb_encode.o", "$COMMON/pb_common.o"])
refdec = "$BUILD/alltypes/decode_alltypes$PROGSUFFIX"
env.RunTest(enc)
env.Compare(["encode_alltypes.output", "$BUILD/alltypes/encode_alltypes.output"])

