Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
156 lines
4.4 KiB
JavaScript
Executable file
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);
|
|
});
|
|
});
|