added specs
This commit is contained in:
parent
fd818194f1
commit
061be86e05
|
|
@ -28,31 +28,10 @@ export default class Model {
|
|||
return this.model.uri.toString();
|
||||
}
|
||||
|
||||
get originalUrl() {
|
||||
return this.originalModel.uri.toString();
|
||||
}
|
||||
|
||||
get path() {
|
||||
return this.file.path;
|
||||
}
|
||||
|
||||
get diffModel() {
|
||||
return Model.getDiffModel(this.model);
|
||||
}
|
||||
|
||||
get originalDiffModel() {
|
||||
return Model.getDiffModel(this.originalModel);
|
||||
}
|
||||
|
||||
static getDiffModel(model) {
|
||||
return {
|
||||
url: model.uri.toString(),
|
||||
versionId: model.getVersionId(),
|
||||
lines: model.getLinesContent(),
|
||||
EOL: '\n',
|
||||
};
|
||||
}
|
||||
|
||||
getModel() {
|
||||
return this.model;
|
||||
}
|
||||
|
|
@ -63,7 +42,7 @@ export default class Model {
|
|||
|
||||
onChange(cb) {
|
||||
this.events.set(
|
||||
this.file.path,
|
||||
this.path,
|
||||
this.disposable.add(
|
||||
this.model.onDidChangeContent(e => cb(this.model, e)),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
import Disposable from '~/repo/lib/common/disposable';
|
||||
|
||||
describe('Multi-file editor library disposable class', () => {
|
||||
let instance;
|
||||
let disposableClass;
|
||||
|
||||
beforeEach(() => {
|
||||
instance = new Disposable();
|
||||
|
||||
disposableClass = {
|
||||
dispose: jasmine.createSpy('dispose'),
|
||||
};
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
instance.dispose();
|
||||
});
|
||||
|
||||
describe('add', () => {
|
||||
it('adds disposable classes', () => {
|
||||
instance.add(disposableClass);
|
||||
|
||||
expect(instance.disposers.size).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
describe('dispose', () => {
|
||||
beforeEach(() => {
|
||||
instance.add(disposableClass);
|
||||
});
|
||||
|
||||
it('calls dispose on all cached disposers', () => {
|
||||
instance.dispose();
|
||||
|
||||
expect(disposableClass.dispose).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('clears cached disposers', () => {
|
||||
instance.dispose();
|
||||
|
||||
expect(instance.disposers.size).toBe(0);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
/* global monaco */
|
||||
import monacoLoader from '~/repo/monaco_loader';
|
||||
import ModelManager from '~/repo/lib/common/model_manager';
|
||||
import { file } from '../../helpers';
|
||||
|
||||
describe('Multi-file editor library model manager', () => {
|
||||
let instance;
|
||||
|
||||
beforeEach((done) => {
|
||||
monacoLoader(['vs/editor/editor.main'], () => {
|
||||
instance = new ModelManager(monaco);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
instance.dispose();
|
||||
});
|
||||
|
||||
describe('addModel', () => {
|
||||
it('caches model', () => {
|
||||
instance.addModel(file());
|
||||
|
||||
expect(instance.models.size).toBe(1);
|
||||
});
|
||||
|
||||
it('caches model by file path', () => {
|
||||
instance.addModel(file('path-name'));
|
||||
|
||||
expect(instance.models.keys().next().value).toBe('path-name');
|
||||
});
|
||||
|
||||
it('adds model into disposable', () => {
|
||||
spyOn(instance.disposable, 'add').and.callThrough();
|
||||
|
||||
instance.addModel(file());
|
||||
|
||||
expect(instance.disposable.add).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('returns cached model', () => {
|
||||
spyOn(instance.models, 'get').and.callThrough();
|
||||
|
||||
instance.addModel(file());
|
||||
instance.addModel(file());
|
||||
|
||||
expect(instance.models.get).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('hasCachedModel', () => {
|
||||
it('returns false when no models exist', () => {
|
||||
expect(instance.hasCachedModel('path')).toBeFalsy();
|
||||
});
|
||||
|
||||
it('returns true when model exists', () => {
|
||||
instance.addModel(file('path-name'));
|
||||
|
||||
expect(instance.hasCachedModel('path-name')).toBeTruthy();
|
||||
});
|
||||
});
|
||||
|
||||
describe('dispose', () => {
|
||||
it('clears cached models', () => {
|
||||
instance.addModel(file());
|
||||
|
||||
instance.dispose();
|
||||
|
||||
expect(instance.models.size).toBe(0);
|
||||
});
|
||||
|
||||
it('calls disposable dispose', () => {
|
||||
spyOn(instance.disposable, 'dispose').and.callThrough();
|
||||
|
||||
instance.dispose();
|
||||
|
||||
expect(instance.disposable.dispose).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
/* global monaco */
|
||||
import monacoLoader from '~/repo/monaco_loader';
|
||||
import Model from '~/repo/lib/common/model';
|
||||
import { file } from '../../helpers';
|
||||
|
||||
describe('Multi-file editor library model', () => {
|
||||
let model;
|
||||
|
||||
beforeEach((done) => {
|
||||
monacoLoader(['vs/editor/editor.main'], () => {
|
||||
model = new Model(monaco, file('path'));
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
model.dispose();
|
||||
});
|
||||
|
||||
it('creates original model & new model', () => {
|
||||
expect(model.originalModel).not.toBeNull();
|
||||
expect(model.model).not.toBeNull();
|
||||
});
|
||||
|
||||
describe('path', () => {
|
||||
it('returns file path', () => {
|
||||
expect(model.path).toBe('path');
|
||||
});
|
||||
});
|
||||
|
||||
describe('getModel', () => {
|
||||
it('returns model', () => {
|
||||
expect(model.getModel()).toBe(model.model);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getOriginalModel', () => {
|
||||
it('returns original model', () => {
|
||||
expect(model.getOriginalModel()).toBe(model.originalModel);
|
||||
});
|
||||
});
|
||||
|
||||
describe('onChange', () => {
|
||||
it('caches event by path', () => {
|
||||
model.onChange(() => {});
|
||||
|
||||
expect(model.events.size).toBe(1);
|
||||
expect(model.events.keys().next().value).toBe('path');
|
||||
});
|
||||
|
||||
it('calls callback on change', (done) => {
|
||||
const spy = jasmine.createSpy();
|
||||
model.onChange(spy);
|
||||
|
||||
model.getModel().setValue('123');
|
||||
|
||||
setTimeout(() => {
|
||||
expect(spy).toHaveBeenCalledWith(model.getModel(), jasmine.anything());
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('dispose', () => {
|
||||
it('calls disposable dispose', () => {
|
||||
spyOn(model.disposable, 'dispose').and.callThrough();
|
||||
|
||||
model.dispose();
|
||||
|
||||
expect(model.disposable.dispose).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('clears events', () => {
|
||||
model.onChange(() => {});
|
||||
|
||||
expect(model.events.size).toBe(1);
|
||||
|
||||
model.dispose();
|
||||
|
||||
expect(model.events.size).toBe(0);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
/* global monaco */
|
||||
import monacoLoader from '~/repo/monaco_loader';
|
||||
import editor from '~/repo/lib/editor';
|
||||
import DecorationsController from '~/repo/lib/decorations/controller';
|
||||
import Model from '~/repo/lib/common/model';
|
||||
import { file } from '../../helpers';
|
||||
|
||||
describe('Multi-file editor library decorations controller', () => {
|
||||
let editorInstance;
|
||||
let controller;
|
||||
let model;
|
||||
|
||||
beforeEach((done) => {
|
||||
monacoLoader(['vs/editor/editor.main'], () => {
|
||||
editorInstance = editor.create(monaco);
|
||||
editorInstance.createInstance(document.createElement('div'));
|
||||
|
||||
controller = new DecorationsController(editorInstance);
|
||||
model = new Model(monaco, file('path'));
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
model.dispose();
|
||||
editorInstance.dispose();
|
||||
controller.dispose();
|
||||
});
|
||||
|
||||
describe('getAllDecorationsForModel', () => {
|
||||
it('returns empty array when no decorations exist for model', () => {
|
||||
const decorations = controller.getAllDecorationsForModel(model);
|
||||
|
||||
expect(decorations).toEqual([]);
|
||||
});
|
||||
|
||||
it('returns decorations by model URL', () => {
|
||||
controller.addDecorations(model, 'key', [{ decoration: 'decorationValue' }]);
|
||||
|
||||
const decorations = controller.getAllDecorationsForModel(model);
|
||||
|
||||
expect(decorations[0]).toEqual({ decoration: 'decorationValue' });
|
||||
});
|
||||
});
|
||||
|
||||
describe('addDecorations', () => {
|
||||
it('caches decorations in a new map', () => {
|
||||
controller.addDecorations(model, 'key', [{ decoration: 'decorationValue' }]);
|
||||
|
||||
expect(controller.decorations.size).toBe(1);
|
||||
});
|
||||
|
||||
it('does not create new cache model', () => {
|
||||
controller.addDecorations(model, 'key', [{ decoration: 'decorationValue' }]);
|
||||
controller.addDecorations(model, 'key', [{ decoration: 'decorationValue2' }]);
|
||||
|
||||
expect(controller.decorations.size).toBe(1);
|
||||
});
|
||||
|
||||
it('caches decorations by model URL', () => {
|
||||
controller.addDecorations(model, 'key', [{ decoration: 'decorationValue' }]);
|
||||
|
||||
expect(controller.decorations.size).toBe(1);
|
||||
expect(controller.decorations.keys().next().value).toBe('path');
|
||||
});
|
||||
|
||||
it('calls decorate method', () => {
|
||||
spyOn(controller, 'decorate');
|
||||
|
||||
controller.addDecorations(model, 'key', [{ decoration: 'decorationValue' }]);
|
||||
|
||||
expect(controller.decorate).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('decorate', () => {
|
||||
it('sets decorations on editor instance', () => {
|
||||
spyOn(controller.editor.instance, 'deltaDecorations');
|
||||
|
||||
controller.decorate(model);
|
||||
|
||||
expect(controller.editor.instance.deltaDecorations).toHaveBeenCalledWith([], []);
|
||||
});
|
||||
|
||||
it('caches decorations', () => {
|
||||
spyOn(controller.editor.instance, 'deltaDecorations').and.returnValue([]);
|
||||
|
||||
controller.decorate(model);
|
||||
|
||||
expect(controller.editorDecorations.size).toBe(1);
|
||||
});
|
||||
|
||||
it('caches decorations by model URL', () => {
|
||||
spyOn(controller.editor.instance, 'deltaDecorations').and.returnValue([]);
|
||||
|
||||
controller.decorate(model);
|
||||
|
||||
expect(controller.editorDecorations.keys().next().value).toBe('path');
|
||||
});
|
||||
});
|
||||
|
||||
describe('dispose', () => {
|
||||
it('clears cached decorations', () => {
|
||||
controller.addDecorations(model, 'key', [{ decoration: 'decorationValue' }]);
|
||||
|
||||
controller.dispose();
|
||||
|
||||
expect(controller.decorations.size).toBe(0);
|
||||
});
|
||||
|
||||
it('clears cached editorDecorations', () => {
|
||||
controller.addDecorations(model, 'key', [{ decoration: 'decorationValue' }]);
|
||||
|
||||
controller.dispose();
|
||||
|
||||
expect(controller.editorDecorations.size).toBe(0);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -0,0 +1,176 @@
|
|||
/* global monaco */
|
||||
import monacoLoader from '~/repo/monaco_loader';
|
||||
import editor from '~/repo/lib/editor';
|
||||
import ModelManager from '~/repo/lib/common/model_manager';
|
||||
import DecorationsController from '~/repo/lib/decorations/controller';
|
||||
import DirtyDiffController, { getDiffChangeType, getDecorator } from '~/repo/lib/diff/controller';
|
||||
import { computeDiff } from '~/repo/lib/diff/diff';
|
||||
import { file } from '../../helpers';
|
||||
|
||||
describe('Multi-file editor library dirty diff controller', () => {
|
||||
let editorInstance;
|
||||
let controller;
|
||||
let modelManager;
|
||||
let decorationsController;
|
||||
let model;
|
||||
|
||||
beforeEach((done) => {
|
||||
monacoLoader(['vs/editor/editor.main'], () => {
|
||||
editorInstance = editor.create(monaco);
|
||||
editorInstance.createInstance(document.createElement('div'));
|
||||
|
||||
modelManager = new ModelManager(monaco);
|
||||
decorationsController = new DecorationsController(editorInstance);
|
||||
|
||||
model = modelManager.addModel(file());
|
||||
|
||||
controller = new DirtyDiffController(modelManager, decorationsController);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
controller.dispose();
|
||||
model.dispose();
|
||||
decorationsController.dispose();
|
||||
editorInstance.dispose();
|
||||
});
|
||||
|
||||
describe('getDiffChangeType', () => {
|
||||
['added', 'removed', 'modified'].forEach((type) => {
|
||||
it(`returns ${type}`, () => {
|
||||
const change = {
|
||||
[type]: true,
|
||||
};
|
||||
|
||||
expect(getDiffChangeType(change)).toBe(type);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('getDecorator', () => {
|
||||
['added', 'removed', 'modified'].forEach((type) => {
|
||||
it(`returns with linesDecorationsClassName for ${type}`, () => {
|
||||
const change = {
|
||||
[type]: true,
|
||||
};
|
||||
|
||||
expect(
|
||||
getDecorator(change).options.linesDecorationsClassName,
|
||||
).toBe(`dirty-diff dirty-diff-${type}`);
|
||||
});
|
||||
|
||||
it('returns with line numbers', () => {
|
||||
const change = {
|
||||
lineNumber: 1,
|
||||
endLineNumber: 2,
|
||||
[type]: true,
|
||||
};
|
||||
|
||||
const range = getDecorator(change).range;
|
||||
|
||||
expect(range.startLineNumber).toBe(1);
|
||||
expect(range.endLineNumber).toBe(2);
|
||||
expect(range.startColumn).toBe(1);
|
||||
expect(range.endColumn).toBe(1);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('attachModel', () => {
|
||||
it('adds change event callback', () => {
|
||||
spyOn(model, 'onChange');
|
||||
|
||||
controller.attachModel(model);
|
||||
|
||||
expect(model.onChange).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('calls throttledComputeDiff on change', () => {
|
||||
spyOn(controller, 'throttledComputeDiff');
|
||||
|
||||
controller.attachModel(model);
|
||||
|
||||
model.getModel().setValue('123');
|
||||
|
||||
expect(controller.throttledComputeDiff).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('computeDiff', () => {
|
||||
it('posts to worker', () => {
|
||||
spyOn(controller.dirtyDiffWorker, 'postMessage');
|
||||
|
||||
controller.computeDiff(model);
|
||||
|
||||
expect(controller.dirtyDiffWorker.postMessage).toHaveBeenCalledWith({
|
||||
path: model.path,
|
||||
originalContent: '',
|
||||
newContent: '',
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('reDecorate', () => {
|
||||
it('calls decorations controller decorate', () => {
|
||||
spyOn(controller.decorationsController, 'decorate');
|
||||
|
||||
controller.reDecorate(model);
|
||||
|
||||
expect(controller.decorationsController.decorate).toHaveBeenCalledWith(model);
|
||||
});
|
||||
});
|
||||
|
||||
describe('decorate', () => {
|
||||
it('adds decorations into decorations controller', () => {
|
||||
spyOn(controller.decorationsController, 'addDecorations');
|
||||
|
||||
controller.decorate({ data: { changes: [], path: 'path' } });
|
||||
|
||||
expect(controller.decorationsController.addDecorations).toHaveBeenCalledWith('path', 'dirtyDiff', jasmine.anything());
|
||||
});
|
||||
|
||||
it('adds decorations into editor', () => {
|
||||
const spy = spyOn(controller.decorationsController.editor.instance, 'deltaDecorations');
|
||||
|
||||
controller.decorate({ data: { changes: computeDiff('123', '1234'), path: 'path' } });
|
||||
|
||||
expect(spy).toHaveBeenCalledWith([], [{
|
||||
range: new monaco.Range(
|
||||
1, 1, 1, 1,
|
||||
),
|
||||
options: {
|
||||
isWholeLine: true,
|
||||
linesDecorationsClassName: 'dirty-diff dirty-diff-modified',
|
||||
},
|
||||
}]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('dispose', () => {
|
||||
it('calls disposable dispose', () => {
|
||||
spyOn(controller.disposable, 'dispose').and.callThrough();
|
||||
|
||||
controller.dispose();
|
||||
|
||||
expect(controller.disposable.dispose).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('terminates worker', () => {
|
||||
spyOn(controller.dirtyDiffWorker, 'terminate').and.callThrough();
|
||||
|
||||
controller.dispose();
|
||||
|
||||
expect(controller.dirtyDiffWorker.terminate).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('removes worker event listener', () => {
|
||||
spyOn(controller.dirtyDiffWorker, 'removeEventListener').and.callThrough();
|
||||
|
||||
controller.dispose();
|
||||
|
||||
expect(controller.dirtyDiffWorker.removeEventListener).toHaveBeenCalledWith('message', jasmine.anything());
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
import { computeDiff } from '~/repo/lib/diff/diff';
|
||||
|
||||
describe('Multi-file editor library diff calculator', () => {
|
||||
describe('computeDiff', () => {
|
||||
it('returns empty array if no changes', () => {
|
||||
const diff = computeDiff('123', '123');
|
||||
|
||||
expect(diff).toEqual([]);
|
||||
});
|
||||
|
||||
describe('modified', () => {
|
||||
it('', () => {
|
||||
const diff = computeDiff('123', '1234');
|
||||
|
||||
expect(diff[0].added).toBeTruthy();
|
||||
expect(diff[0].modified).toBeTruthy();
|
||||
expect(diff[0].removed).toBeUndefined();
|
||||
});
|
||||
|
||||
it('', () => {
|
||||
const diff = computeDiff('123\n123\n123', '123\n1234\n123');
|
||||
|
||||
expect(diff[0].added).toBeTruthy();
|
||||
expect(diff[0].modified).toBeTruthy();
|
||||
expect(diff[0].removed).toBeUndefined();
|
||||
expect(diff[0].lineNumber).toBe(2);
|
||||
});
|
||||
});
|
||||
|
||||
describe('added', () => {
|
||||
it('', () => {
|
||||
const diff = computeDiff('123', '123\n123');
|
||||
|
||||
expect(diff[0].added).toBeTruthy();
|
||||
expect(diff[0].modified).toBeUndefined();
|
||||
expect(diff[0].removed).toBeUndefined();
|
||||
});
|
||||
|
||||
it('', () => {
|
||||
const diff = computeDiff('123\n123\n123', '123\n123\n1234\n123');
|
||||
|
||||
expect(diff[0].added).toBeTruthy();
|
||||
expect(diff[0].modified).toBeUndefined();
|
||||
expect(diff[0].removed).toBeUndefined();
|
||||
expect(diff[0].lineNumber).toBe(3);
|
||||
});
|
||||
});
|
||||
|
||||
describe('removed', () => {
|
||||
it('', () => {
|
||||
const diff = computeDiff('123', '');
|
||||
|
||||
expect(diff[0].added).toBeUndefined();
|
||||
expect(diff[0].modified).toBeUndefined();
|
||||
expect(diff[0].removed).toBeTruthy();
|
||||
});
|
||||
|
||||
it('', () => {
|
||||
const diff = computeDiff('123\n123\n123', '123\n123');
|
||||
|
||||
expect(diff[0].added).toBeUndefined();
|
||||
expect(diff[0].modified).toBeTruthy();
|
||||
expect(diff[0].removed).toBeTruthy();
|
||||
expect(diff[0].lineNumber).toBe(2);
|
||||
});
|
||||
});
|
||||
|
||||
it('includes line number of change', () => {
|
||||
const diff = computeDiff('123', '');
|
||||
|
||||
expect(diff[0].lineNumber).toBe(1);
|
||||
});
|
||||
|
||||
it('includes end line number of change', () => {
|
||||
const diff = computeDiff('123', '');
|
||||
|
||||
expect(diff[0].endLineNumber).toBe(1);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -0,0 +1,128 @@
|
|||
/* global monaco */
|
||||
import monacoLoader from '~/repo/monaco_loader';
|
||||
import editor from '~/repo/lib/editor';
|
||||
import { file } from '../helpers';
|
||||
|
||||
describe('Multi-file editor library', () => {
|
||||
let instance;
|
||||
|
||||
beforeEach((done) => {
|
||||
monacoLoader(['vs/editor/editor.main'], () => {
|
||||
instance = editor.create(monaco);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
instance.dispose();
|
||||
});
|
||||
|
||||
it('creates instance of editor', () => {
|
||||
expect(editor.editorInstance).not.toBeNull();
|
||||
});
|
||||
|
||||
describe('createInstance', () => {
|
||||
let el;
|
||||
|
||||
beforeEach(() => {
|
||||
el = document.createElement('div');
|
||||
});
|
||||
|
||||
it('creates editor instance', () => {
|
||||
spyOn(instance.monaco.editor, 'create').and.callThrough();
|
||||
|
||||
instance.createInstance(el);
|
||||
|
||||
expect(instance.monaco.editor.create).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('creates dirty diff controller', () => {
|
||||
instance.createInstance(el);
|
||||
|
||||
expect(instance.dirtyDiffController).not.toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe('createModel', () => {
|
||||
it('calls model manager addModel', () => {
|
||||
spyOn(instance.modelManager, 'addModel');
|
||||
|
||||
instance.createModel('FILE');
|
||||
|
||||
expect(instance.modelManager.addModel).toHaveBeenCalledWith('FILE');
|
||||
});
|
||||
});
|
||||
|
||||
describe('attachModel', () => {
|
||||
let model;
|
||||
|
||||
beforeEach(() => {
|
||||
instance.createInstance(document.createElement('div'));
|
||||
|
||||
model = instance.createModel(file());
|
||||
});
|
||||
|
||||
it('sets the current model on the instance', () => {
|
||||
instance.attachModel(model);
|
||||
|
||||
expect(instance.currentModel).toBe(model);
|
||||
});
|
||||
|
||||
it('attaches the model to the current instance', () => {
|
||||
spyOn(instance.instance, 'setModel');
|
||||
|
||||
instance.attachModel(model);
|
||||
|
||||
expect(instance.instance.setModel).toHaveBeenCalledWith(model.getModel());
|
||||
});
|
||||
|
||||
it('attaches the model to the dirty diff controller', () => {
|
||||
spyOn(instance.dirtyDiffController, 'attachModel');
|
||||
|
||||
instance.attachModel(model);
|
||||
|
||||
expect(instance.dirtyDiffController.attachModel).toHaveBeenCalledWith(model);
|
||||
});
|
||||
|
||||
it('re-decorates with the dirty diff controller', () => {
|
||||
spyOn(instance.dirtyDiffController, 'reDecorate');
|
||||
|
||||
instance.attachModel(model);
|
||||
|
||||
expect(instance.dirtyDiffController.reDecorate).toHaveBeenCalledWith(model);
|
||||
});
|
||||
});
|
||||
|
||||
describe('clearEditor', () => {
|
||||
it('resets the editor model', () => {
|
||||
instance.createInstance(document.createElement('div'));
|
||||
|
||||
spyOn(instance.instance, 'setModel');
|
||||
|
||||
instance.clearEditor();
|
||||
|
||||
expect(instance.instance.setModel).toHaveBeenCalledWith(null);
|
||||
});
|
||||
});
|
||||
|
||||
describe('dispose', () => {
|
||||
it('calls disposble dispose method', () => {
|
||||
spyOn(instance.disposable, 'dispose').and.callThrough();
|
||||
|
||||
instance.dispose();
|
||||
|
||||
expect(instance.disposable.dispose).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('resets instance', () => {
|
||||
instance.createInstance(document.createElement('div'));
|
||||
|
||||
expect(instance.instance).not.toBeNull();
|
||||
|
||||
instance.dispose();
|
||||
|
||||
expect(instance.instance).toBeNull();
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Reference in New Issue