From b6d93f977239d293bfe0eb7b8fca1c12ff9e18d2 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Sun, 19 Jan 2020 04:39:01 +0200 Subject: test: signal: Add additional disconnection tests for Object MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add two tests that exercise the Signal::disconnect(Object *) and Signal::disconnect() methods, to verify that they correctly remove the signal from the connected object's list of signals. This triggers an issue that was detected through manual code inspection, and is expected to crash or at least generate valgrind warnings. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi Reviewed-by: Niklas Söderlund --- test/signal.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'test/signal.cpp') diff --git a/test/signal.cpp b/test/signal.cpp index 0054ed5a..f83ceb05 100644 --- a/test/signal.cpp +++ b/test/signal.cpp @@ -220,6 +220,30 @@ protected: delete dynamicSignal; delete slotObject; + /* + * Test that signal manual disconnection from Object removes + * the signal for the object. This shall not generate any + * valgrind warning. + */ + dynamicSignal = new Signal<>(); + slotObject = new SlotObject(); + dynamicSignal->connect(slotObject, &SlotObject::slot); + dynamicSignal->disconnect(slotObject); + delete dynamicSignal; + delete slotObject; + + /* + * Test that signal manual disconnection from all slots removes + * the signal for the object. This shall not generate any + * valgrind warning. + */ + dynamicSignal = new Signal<>(); + slotObject = new SlotObject(); + dynamicSignal->connect(slotObject, &SlotObject::slot); + dynamicSignal->disconnect(); + delete dynamicSignal; + delete slotObject; + /* Exercise the Object slot code paths. */ slotObject = new SlotObject(); signalVoid_.connect(slotObject, &SlotObject::slot); -- cgit v1.2.1