VulpesOS/gaia/apps/camera/test/unit/lib/setting-alias_test.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

156 lines
4.4 KiB
JavaScript
Executable file

suite('lib/setting-alias', function() {
/*jshint maxlen:false*/
'use strict';
suiteSetup(function(done) {
var self = this;
requirejs([
'lib/setting',
'lib/setting-alias',
], function(Setting, SettingAlias) {
self.Setting = Setting;
self.SettingAlias = SettingAlias;
done();
});
});
setup(function() {
var self = this;
// We use this object to store state
// as nested Suites and tests' context
// inherits from this context.
this.state = {};
this.state.value = 'a';
this.settings = {
a: new this.Setting({ key: 'a' }),
b: new this.Setting({ key: 'b' })
};
this.alias = new this.SettingAlias({
key: 'my-alias',
settings: this.settings,
get: function() {
return this.settings[self.state.value];
}
});
});
suite('SettingAlias()', function() {
test('It stores `key` and `settings` options', function() {
assert.equal(this.alias.key, 'my-alias');
assert.equal(this.alias.settings, this.settings);
});
});
suite('SettingAlias#current()', function() {
test('It returns the current setting', function() {
assert.equal(this.alias.current().key, 'a');
this.state.value = 'b';
assert.equal(this.alias.current().key, 'b');
});
});
suite('SettingAlias#on()', function() {
test('Should fire callback when *current* setting emits event', function() {
var callback = sinon.spy();
this.alias.on('event', callback);
this.settings.a.fire('event');
this.settings.b.fire('event');
sinon.assert.calledOnce(callback);
});
test('Should pass arguments to the callback', function() {
var callback = sinon.spy();
this.alias.on('event', callback);
this.settings.a.fire('event', 'a', 'b');
assert.ok(callback.calledWith('a', 'b'));
});
});
suite('SettingAlias#off()', function() {
test('it calls the callback once', function() {
var callback = sinon.spy();
this.alias.on('event', callback);
this.settings.a.fire('event');
sinon.assert.calledOnce(callback);
});
test('It only removes the listeners that match the callback given', function() {
var callback1 = sinon.spy();
var callback2 = sinon.stub();
this.alias.on('event', callback1);
this.alias.on('event', callback2);
this.settings.a.fire('event');
sinon.assert.calledOnce(callback1);
sinon.assert.calledOnce(callback2);
callback1.reset();
callback2.reset();
this.alias.off('event', callback1);
this.settings.a.fire('event');
sinon.assert.calledOnce(callback2);
sinon.assert.notCalled(callback1);
});
});
suite('SettingAlias#get()', function() {
test('It calls the underlying Setting\'s `.get()` method', function() {
assert.equal(this.alias.get('key'), 'a');
this.state.value = 'b';
assert.equal(this.alias.get('key'), 'b');
});
});
test('It forwards the setting mathod calls onto the current setting', function() {
sinon.stub(this.settings.a);
sinon.stub(this.settings.b);
this.alias.filterOptions();
this.alias.resetOptions();
this.alias.supported();
this.alias.selected();
this.alias.select();
this.alias.next();
this.alias.get();
this.alias.set();
sinon.assert.calledOnce(this.settings.a.filterOptions);
sinon.assert.calledOnce(this.settings.a.resetOptions);
sinon.assert.calledOnce(this.settings.a.supported);
sinon.assert.calledOnce(this.settings.a.selected);
sinon.assert.calledOnce(this.settings.a.select);
sinon.assert.calledOnce(this.settings.a.next);
sinon.assert.calledOnce(this.settings.a.get);
sinon.assert.calledOnce(this.settings.a.set);
// Change state
this.state.value = 'b';
this.alias.filterOptions();
this.alias.resetOptions();
this.alias.supported();
this.alias.selected();
this.alias.select();
this.alias.next();
this.alias.get();
this.alias.set();
sinon.assert.calledOnce(this.settings.b.filterOptions);
sinon.assert.calledOnce(this.settings.b.resetOptions);
sinon.assert.calledOnce(this.settings.b.supported);
sinon.assert.calledOnce(this.settings.b.selected);
sinon.assert.calledOnce(this.settings.b.select);
sinon.assert.calledOnce(this.settings.b.next);
sinon.assert.calledOnce(this.settings.b.get);
sinon.assert.calledOnce(this.settings.b.set);
});
});