Merge pull request #78634 from Sauermann/fix-notification-order
Fix `Object::notification` order
This commit is contained in:
@ -98,7 +98,7 @@ public:
|
||||
Variant callp(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) override {
|
||||
return Variant();
|
||||
}
|
||||
void notification(int p_notification) override {
|
||||
void notification(int p_notification, bool p_reversed = false) override {
|
||||
}
|
||||
Ref<Script> get_script() const override {
|
||||
return Ref<Script>();
|
||||
@ -426,6 +426,74 @@ TEST_CASE("[Object] Signals") {
|
||||
}
|
||||
}
|
||||
|
||||
class NotificationObject1 : public Object {
|
||||
GDCLASS(NotificationObject1, Object);
|
||||
|
||||
protected:
|
||||
void _notification(int p_what) {
|
||||
switch (p_what) {
|
||||
case 12345: {
|
||||
order_internal1 = order_global++;
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
static int order_global;
|
||||
int order_internal1 = -1;
|
||||
|
||||
void reset_order() {
|
||||
order_internal1 = -1;
|
||||
order_global = 1;
|
||||
}
|
||||
};
|
||||
|
||||
int NotificationObject1::order_global = 1;
|
||||
|
||||
class NotificationObject2 : public NotificationObject1 {
|
||||
GDCLASS(NotificationObject2, NotificationObject1);
|
||||
|
||||
protected:
|
||||
void _notification(int p_what) {
|
||||
switch (p_what) {
|
||||
case 12345: {
|
||||
order_internal2 = order_global++;
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
int order_internal2 = -1;
|
||||
void reset_order() {
|
||||
NotificationObject1::reset_order();
|
||||
order_internal2 = -1;
|
||||
}
|
||||
};
|
||||
|
||||
TEST_CASE("[Object] Notification order") { // GH-52325
|
||||
NotificationObject2 *test_notification_object = memnew(NotificationObject2);
|
||||
|
||||
SUBCASE("regular order") {
|
||||
test_notification_object->notification(12345, false);
|
||||
|
||||
CHECK_EQ(test_notification_object->order_internal1, 1);
|
||||
CHECK_EQ(test_notification_object->order_internal2, 2);
|
||||
|
||||
test_notification_object->reset_order();
|
||||
}
|
||||
|
||||
SUBCASE("reverse order") {
|
||||
test_notification_object->notification(12345, true);
|
||||
|
||||
CHECK_EQ(test_notification_object->order_internal1, 2);
|
||||
CHECK_EQ(test_notification_object->order_internal2, 1);
|
||||
|
||||
test_notification_object->reset_order();
|
||||
}
|
||||
|
||||
memdelete(test_notification_object);
|
||||
}
|
||||
|
||||
} // namespace TestObject
|
||||
|
||||
#endif // TEST_OBJECT_H
|
||||
|
||||
Reference in New Issue
Block a user