gnome-shell/tests/unit/signalTracker.js
Evan Welsh 9a2c3da868 environment: Port environment.js to be an ES module
Removes the init() function in favor of executing all environment
changes when the file is imported.

Additionally ports all unit tests using imports.gi.environment.init() to
use the updated module.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2822>
2023-07-15 02:35:56 +00:00

115 lines
2.6 KiB
JavaScript

// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
// Test cases for version comparison
import '../../js/ui/environment.js';
import GObject from 'gi://GObject';
const JsUnit = imports.jsUnit;
const Signals = imports.misc.signals;
const {TransientSignalHolder, registerDestroyableType} = imports.misc.signalTracker;
const Destroyable = GObject.registerClass({
Signals: {'destroy': {}},
}, class Destroyable extends GObject.Object {});
registerDestroyableType(Destroyable);
const GObjectEmitter = GObject.registerClass({
Signals: {'signal': {}},
}, class GObjectEmitter extends Destroyable {});
const emitter1 = new Signals.EventEmitter();
const emitter2 = new GObjectEmitter();
const tracked1 = new Destroyable();
const tracked2 = {};
let transientHolder;
let count = 0;
const handler = () => count++;
emitter1.connectObject('signal', handler, tracked1);
emitter2.connectObject('signal', handler, tracked1);
emitter1.connectObject('signal', handler, tracked2);
emitter2.connectObject('signal', handler, tracked2);
JsUnit.assertEquals(count, 0);
emitter1.emit('signal');
emitter2.emit('signal');
JsUnit.assertEquals(count, 4);
tracked1.emit('destroy');
emitter1.emit('signal');
emitter2.emit('signal');
JsUnit.assertEquals(count, 6);
emitter1.disconnectObject(tracked2);
emitter2.emit('destroy');
emitter1.emit('signal');
emitter2.emit('signal');
JsUnit.assertEquals(count, 6);
emitter1.connectObject(
'signal', handler,
'signal', handler, GObject.ConnectFlags.AFTER,
tracked1);
emitter2.connectObject(
'signal', handler,
'signal', handler, GObject.ConnectFlags.AFTER,
tracked1);
emitter1.emit('signal');
emitter2.emit('signal');
JsUnit.assertEquals(count, 10);
tracked1.emit('destroy');
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);