blob: ee7d833febd36cd439d8fd15982365b6632c498f [file] [log] [blame]
// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
/**
* @fileoverview Event test suite.
* @suppress {missingProperties} https://github.com/google/closure-compiler/issues/946
*/
describe('lib_event_tests.js', () => {
it('complete', () => {
const event = lib.Event();
// Post events w/no listeners.
event();
event(1);
event('a', 'b');
// Add listener.
const events1 = [];
const callback1 = (...args) => { events1.push(args); };
event.addListener(callback1);
// Post more events.
event();
event(2);
event('c', 'd');
assert.deepStrictEqual(events1, [[], [2], ['c', 'd']]);
// Add another listener.
const events2 = [];
const callback2 = (...args) => { events2.push(args); };
event.addListener(callback2);
// Post more events.
event(null);
event([1, 2]);
assert.deepStrictEqual(events1, [[], [2], ['c', 'd'], [null], [[1, 2]]]);
assert.deepStrictEqual(events2, [[null], [[1, 2]]]);
// Remove the first listener.
event.removeListener(callback1);
// Post more events.
event(undefined);
assert.deepStrictEqual(events1, [[], [2], ['c', 'd'], [null], [[1, 2]]]);
assert.deepStrictEqual(events2, [[null], [[1, 2]], [undefined]]);
// Remove the second listener.
event.removeListener(callback2);
// Post more events.
event('final');
assert.deepStrictEqual(events1, [[], [2], ['c', 'd'], [null], [[1, 2]]]);
assert.deepStrictEqual(events2, [[null], [[1, 2]], [undefined]]);
});
/**
* Verify unknown listeners are ignored when removing.
*/
it('remove unknown listeners', () => {
const event = lib.Event();
assert.deepEqual(event.observers, []);
event.removeListener(() => {});
assert.deepEqual(event.observers, []);
const callback = () => {};
event.addListener(callback);
assert.deepEqual(event.observers, [callback]);
event.removeListener(() => {});
assert.deepEqual(event.observers, [callback]);
event.removeListener(callback);
assert.deepEqual(event.observers, []);
});
});