summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorFlorian Müllner <fmuellner@gnome.org>2022-03-04 23:32:24 +0100
committerMarge Bot <marge-bot@gnome.org>2022-03-05 00:12:27 +0000
commitcf29ec2f2231a897d25b67fac151e49da451eaeb (patch)
tree1cd5405d7b9a7744c5edffa867fcd5896ba01624 /tests
parent7b0a94b246a241d17891ab4f8a49df2072fbfc98 (diff)
downloadgnome-shell-cf29ec2f2231a897d25b67fac151e49da451eaeb.tar.gz
signalTracker: Add TransientSignalHolder class
There are cases where we want to connect to a number of signals for the lifetime of an object, but also other signals for a limited period (say: between show and hide). It is currently not possible to use disconnectObject() for the latter, because it will disconnect all signals. To address this use case, add a small class that can be used as a transient signal holder, while still benefiting from autocleanup by proxying the real owner. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2221>
Diffstat (limited to 'tests')
-rw-r--r--tests/unit/signalTracker.js38
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/unit/signalTracker.js b/tests/unit/signalTracker.js
index f13327ec1..40398c0b8 100644
--- a/tests/unit/signalTracker.js
+++ b/tests/unit/signalTracker.js
@@ -8,6 +8,8 @@ const JsUnit = imports.jsUnit;
const Signals = imports.signals;
const Environment = imports.ui.environment;
+const { TransientSignalHolder } = imports.misc.signalTracker;
+
Environment.init();
const Destroyable = GObject.registerClass({
@@ -77,3 +79,39 @@ emitter1.emit('signal');
emitter2.emit('signal');
JsUnit.assertEquals(count, 10);
+
+emitter1.connectObject('signal', handler, tracked1);
+emitter2.connectObject('signal', handler, tracked1);
+
+transientHolder = new TransientSignalHolder(tracked1);
+
+emitter1.connectObject('signal', handler, transientHolder);
+emitter2.connectObject('signal', handler, transientHolder);
+
+emitter1.emit('signal');
+emitter2.emit('signal');
+
+JsUnit.assertEquals(count, 14);
+
+transientHolder.destroy();
+
+emitter1.emit('signal');
+emitter2.emit('signal');
+
+JsUnit.assertEquals(count, 16);
+
+transientHolder = new TransientSignalHolder(tracked1);
+
+emitter1.connectObject('signal', handler, transientHolder);
+emitter2.connectObject('signal', handler, transientHolder);
+
+emitter1.emit('signal');
+emitter2.emit('signal');
+
+JsUnit.assertEquals(count, 20);
+
+tracked1.emit('destroy');
+emitter1.emit('signal');
+emitter2.emit('signal');
+
+JsUnit.assertEquals(count, 20);