wc-duck / datalibrary

Open Source Data Library for data serialization.
Other
42 stars 8 forks source link

Defaults do not propagate down into subtypes #39

Open lundmark opened 8 years ago

lundmark commented 8 years ago

Example:

{
    "module" : "test",
    "types" : {
        "mytype_1" : {
            "members" : [
                { "name" : "submember1", "type" : "string[]", "default" : [ "apa" ] },
                { "name" : "submember2", "type" : "uint32" },
            ]
        },
        "mytype_2" : {
            "members" : [
                { "name" : "member1", "type" : "mytype_1", "default" : { "submember2":1337 }}
            ]
        }
    }
}

Fails on two parts: 1 The default for member1 in mytype_2 tries to apply a default-value that is the size of the entire member.

2 Defaults for the type mytype_1 is never applied to member1 in mytype_2

wc-duck commented 8 years ago

I just copied this directly into a unittest and it seams to work? ( Something that actually surprised me ). Anything I might have missed?

wc-duck commented 8 years ago

Test added:

TEST_F( DLText, subdefaults )
{
    const char* text_data = STRINGIFY( { "type" : "subdefaults2", "data" : {} } );

    unsigned char out_data_txt[1024];
    EXPECT_DL_ERR_OK(dl_txt_pack(Ctx, text_data, out_data_txt, sizeof( out_data_txt ), 0x0));

    subdefaults2 loaded[10];

    // load binary
    EXPECT_DL_ERR_OK(dl_instance_load(Ctx, subdefaults2::TYPE_ID, loaded, sizeof(loaded), out_data_txt, sizeof(out_data_txt), 0x0));
    EXPECT_EQ( 1337, loaded[0].member1.submember2 );
    EXPECT_EQ( 1, loaded[0].member1.submember1.count );
    EXPECT_STREQ( "apa", loaded[0].member1.submember1[0] );
}
wc-duck commented 8 years ago

Setting the array-member seams to crash.