Пример #1
0
        .method("default_func", &method_misc_test::default_func)
        (
            default_arguments(std::string("text")),
            metadata(E_MetaData::SCRIPTABLE, true),
            metadata("Text",  "Some funky description")
        )
        ;
}

/////////////////////////////////////////////////////////////////////////////////////////

TEST_CASE("method - get_name()", "[method]")
{
    method meth = type::get_by_name("method_misc_test").get_method("func");
    CHECK(meth.get_name() == "func");

    meth = type::get_by_name("method_misc_test").get_method("default_func");
    CHECK(meth.get_name() == "default_func");

    // negative test
    meth = type::get_by_name("method_misc_test").get_method("");
    CHECK(meth.get_name() == "");
}

/////////////////////////////////////////////////////////////////////////////////////////

TEST_CASE("method - is_static()", "[method]")
{
    method meth = type::get_by_name("method_misc_test").get_method("static_func");
    CHECK(meth.is_static() == true);
    variant inst = t_meth.create({});
    method_test& obj = *inst.get_value<method_test*>();

    ////////////////////////////////////////////////////////////
    // invoke tests
    variant ret = t_meth.get_method("method_1").invoke(inst);
    REQUIRE(obj.method_1_called == true);
    REQUIRE(ret.is_valid() == true);
    REQUIRE(ret.is_type<void>() == true);
    
    ////////////////////////////////////////
    obj.method_1_called = false; // reset
    method meth = t_meth.get_method("method_1");
    meth.invoke_variadic(inst, {});
    REQUIRE(obj.method_1_called == true);
    REQUIRE(meth.get_name() == "method_1");
    REQUIRE(meth.get_parameter_types().empty() == true);

    ////////////////////////////////////////
    t_meth.get_method("method_2").invoke(inst);
    REQUIRE(obj.method_2_called == true);
    obj.method_2_called = false;
    meth = t_meth.get_method("method_2");
    meth.invoke_variadic(inst, {});
    REQUIRE(obj.method_2_called == true);

    ////////////////////////////////////////
    t_meth.get_method("method_3").invoke(inst, 35);
    REQUIRE(obj.method_3_called == true);
    REQUIRE(obj.method_3_value == 35);
    obj.method_3_called = false;