Merge pull request #57205 from TechnoPorg/variant-template-cast
Allow method binds to take Object subclasses as arguments
This commit is contained in:
commit
e6caaf4c80
15 changed files with 64 additions and 78 deletions
|
|
@ -51,9 +51,15 @@ public:
|
|||
TEST_METHODRC,
|
||||
TEST_METHODRC_ARGS,
|
||||
TEST_METHOD_DEFARGS,
|
||||
TEST_METHOD_OBJECT_CAST,
|
||||
TEST_MAX
|
||||
};
|
||||
|
||||
class ObjectSubclass : public Object {
|
||||
public:
|
||||
int value = 1;
|
||||
};
|
||||
|
||||
int test_num = 0;
|
||||
|
||||
bool test_valid[TEST_MAX];
|
||||
|
|
@ -98,6 +104,10 @@ public:
|
|||
test_valid[TEST_METHOD_DEFARGS] = p_arg1 == 1 && p_arg2 == 2 && p_arg3 == 3 && p_arg4 == 4 && p_arg5 == 5; //temporary
|
||||
}
|
||||
|
||||
void test_method_object_cast(ObjectSubclass *p_object) {
|
||||
test_valid[TEST_METHOD_OBJECT_CAST] = p_object->value == 1;
|
||||
}
|
||||
|
||||
static void _bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("test_method"), &MethodBindTester::test_method);
|
||||
ClassDB::bind_method(D_METHOD("test_method_args"), &MethodBindTester::test_method_args);
|
||||
|
|
@ -108,6 +118,7 @@ public:
|
|||
ClassDB::bind_method(D_METHOD("test_methodrc"), &MethodBindTester::test_methodrc);
|
||||
ClassDB::bind_method(D_METHOD("test_methodrc_args"), &MethodBindTester::test_methodrc_args);
|
||||
ClassDB::bind_method(D_METHOD("test_method_default_args"), &MethodBindTester::test_method_default_args, DEFVAL(9) /* wrong on purpose */, DEFVAL(4), DEFVAL(5));
|
||||
ClassDB::bind_method(D_METHOD("test_method_object_cast", "object"), &MethodBindTester::test_method_object_cast);
|
||||
}
|
||||
|
||||
virtual void run_tests() {
|
||||
|
|
@ -134,6 +145,10 @@ public:
|
|||
test_valid[TEST_METHODRC_ARGS] = int(call("test_methodrc_args", test_num)) == test_num && test_valid[TEST_METHODRC_ARGS];
|
||||
|
||||
call("test_method_default_args", 1, 2, 3, 4);
|
||||
|
||||
ObjectSubclass *obj = memnew(ObjectSubclass);
|
||||
call("test_method_object_cast", obj);
|
||||
memdelete(obj);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -152,6 +167,7 @@ TEST_CASE("[MethodBind] check all method binds") {
|
|||
CHECK(mbt->test_valid[MethodBindTester::TEST_METHODRC]);
|
||||
CHECK(mbt->test_valid[MethodBindTester::TEST_METHODRC_ARGS]);
|
||||
CHECK(mbt->test_valid[MethodBindTester::TEST_METHOD_DEFARGS]);
|
||||
CHECK(mbt->test_valid[MethodBindTester::TEST_METHOD_OBJECT_CAST]);
|
||||
|
||||
memdelete(mbt);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue