* Updated Karma and Jasmine versions * Added DOMObserver class. Supports promise-based testing of DOM changes Update asynchronous test specs to use promises or done() instead of waitsFor/runs * Modified ActionCapability to duplicate context object properties as own properties for better object equality comparisons * Global find + replace to fix syntax issues * Fixed various issues caused by non-deterministic runtime order of tests in Jasmine 3. Fixed issues caused by changes to determination of object equality * Addressed review comments * Resolved merge conflicts with master * Fixed style errors * Use spy.calls.count() instead of manually tracking
110 lines
4.1 KiB
JavaScript
110 lines
4.1 KiB
JavaScript
define(['../../src/input/ObjectSelect'], function (ObjectSelect) {
|
|
describe('A select for choosing composition objects', function () {
|
|
var mockConfig, mockBadConfig, mockManager, objectSelect, mockComposition;
|
|
beforeEach(function () {
|
|
mockConfig = {
|
|
object: 'key1'
|
|
};
|
|
|
|
mockBadConfig = {
|
|
object: 'someNonexistentObject'
|
|
};
|
|
|
|
mockComposition = {
|
|
key1: {
|
|
identifier: {
|
|
key: 'key1'
|
|
},
|
|
name: 'Object 1'
|
|
},
|
|
key2: {
|
|
identifier: {
|
|
key: 'key2'
|
|
},
|
|
name: 'Object 2'
|
|
}
|
|
};
|
|
mockManager = jasmine.createSpyObj('mockManager', [
|
|
'on',
|
|
'loadCompleted',
|
|
'triggerCallback',
|
|
'getComposition'
|
|
]);
|
|
|
|
mockManager.on.and.callFake(function (event, callback) {
|
|
this.callbacks = this.callbacks || {};
|
|
this.callbacks[event] = callback;
|
|
});
|
|
|
|
mockManager.triggerCallback.and.callFake(function (event, newObj) {
|
|
if (event === 'add') {
|
|
this.callbacks.add(newObj);
|
|
} else {
|
|
this.callbacks[event]();
|
|
}
|
|
});
|
|
|
|
mockManager.getComposition.and.callFake(function () {
|
|
return mockComposition;
|
|
});
|
|
|
|
});
|
|
|
|
it('allows setting special keyword options', function () {
|
|
mockManager.loadCompleted.and.returnValue(true);
|
|
objectSelect = new ObjectSelect(mockConfig, mockManager, [
|
|
['keyword1', 'A special option'],
|
|
['keyword2', 'A special option']
|
|
]);
|
|
objectSelect.setSelected('keyword1');
|
|
expect(objectSelect.getSelected()).toEqual('keyword1');
|
|
});
|
|
|
|
it('waits until the composition fully loads to populate itself', function () {
|
|
mockManager.loadCompleted.and.returnValue(false);
|
|
objectSelect = new ObjectSelect(mockConfig, mockManager);
|
|
expect(objectSelect.getSelected()).toEqual('');
|
|
});
|
|
|
|
it('populates itself with composition objects on a composition load', function () {
|
|
mockManager.loadCompleted.and.returnValue(false);
|
|
objectSelect = new ObjectSelect(mockConfig, mockManager);
|
|
mockManager.triggerCallback('load');
|
|
expect(objectSelect.getSelected()).toEqual('key1');
|
|
});
|
|
|
|
it('populates itself with composition objects if load is already complete', function () {
|
|
mockManager.loadCompleted.and.returnValue(true);
|
|
objectSelect = new ObjectSelect(mockConfig, mockManager);
|
|
expect(objectSelect.getSelected()).toEqual('key1');
|
|
});
|
|
|
|
it('clears its selection state if the object in its config is not in the composition', function () {
|
|
mockManager.loadCompleted.and.returnValue(true);
|
|
objectSelect = new ObjectSelect(mockBadConfig, mockManager);
|
|
expect(objectSelect.getSelected()).toEqual('');
|
|
});
|
|
|
|
it('adds a new option on a composition add', function () {
|
|
mockManager.loadCompleted.and.returnValue(true);
|
|
objectSelect = new ObjectSelect(mockConfig, mockManager);
|
|
mockManager.triggerCallback('add', {
|
|
identifier: {
|
|
key: 'key3'
|
|
},
|
|
name: 'Object 3'
|
|
});
|
|
objectSelect.setSelected('key3');
|
|
expect(objectSelect.getSelected()).toEqual('key3');
|
|
});
|
|
|
|
it('removes an option on a composition remove', function () {
|
|
mockManager.loadCompleted.and.returnValue(true);
|
|
objectSelect = new ObjectSelect(mockConfig, mockManager);
|
|
delete mockComposition.key1;
|
|
mockManager.triggerCallback('remove');
|
|
expect(objectSelect.getSelected()).not.toEqual('key1');
|
|
});
|
|
});
|
|
});
|