# 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']
    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"])

