115 lines
2.6 KiB
JavaScript
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;
|
|
import * as Signals from '../../js/misc/signals.js';
|
|
|
|
import {TransientSignalHolder, registerDestroyableType} from '../../js/misc/signalTracker.js';
|
|
|
|
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);
|