Commit ec351d2c authored by Denys Mishunov's avatar Denys Mishunov

Fixing model's disposal

parent 9b5b4fe3
...@@ -103,11 +103,11 @@ export default class EditorLite { ...@@ -103,11 +103,11 @@ export default class EditorLite {
} }
static createEditorModel({ static createEditorModel({
blobPath = '', blobPath,
blobContent = '', blobContent,
originalBlobContent = null, originalBlobContent,
blobGlobalId = uuids()[0], blobGlobalId,
instance = null, instance,
} = {}) { } = {}) {
if (!instance) { if (!instance) {
return null; return null;
...@@ -116,7 +116,7 @@ export default class EditorLite { ...@@ -116,7 +116,7 @@ export default class EditorLite {
const existingModel = monacoEditor.getModel(uriFilePath); const existingModel = monacoEditor.getModel(uriFilePath);
const model = const model =
existingModel || monacoEditor.createModel(blobContent, undefined, Uri.file(uriFilePath)); existingModel || monacoEditor.createModel(blobContent, undefined, Uri.file(uriFilePath));
if (originalBlobContent === null) { if (!originalBlobContent) {
instance.setModel(model); instance.setModel(model);
} else { } else {
instance.setModel({ instance.setModel({
...@@ -124,6 +124,7 @@ export default class EditorLite { ...@@ -124,6 +124,7 @@ export default class EditorLite {
modified: model, modified: model,
}); });
} }
return instance.getModel();
} }
/** /**
...@@ -148,6 +149,7 @@ export default class EditorLite { ...@@ -148,6 +149,7 @@ export default class EditorLite {
EditorLite.prepareInstance(el); EditorLite.prepareInstance(el);
let instance; let instance;
let model;
if (!diff) { if (!diff) {
instance = monacoEditor.create(el, { instance = monacoEditor.create(el, {
...@@ -155,7 +157,7 @@ export default class EditorLite { ...@@ -155,7 +157,7 @@ export default class EditorLite {
...instanceOptions, ...instanceOptions,
}); });
if (instanceOptions.model !== null) { if (instanceOptions.model !== null) {
EditorLite.createEditorModel({ blobGlobalId, blobPath, blobContent, instance }); model = EditorLite.createEditorModel({ blobGlobalId, blobPath, blobContent, instance });
} }
} else { } else {
instance = monacoEditor.createDiffEditor(el, { instance = monacoEditor.createDiffEditor(el, {
...@@ -163,7 +165,7 @@ export default class EditorLite { ...@@ -163,7 +165,7 @@ export default class EditorLite {
...instanceOptions, ...instanceOptions,
}); });
if (instanceOptions.model !== null) { if (instanceOptions.model !== null) {
EditorLite.createEditorModel({ model = EditorLite.createEditorModel({
blobGlobalId, blobGlobalId,
originalBlobContent, originalBlobContent,
blobPath, blobPath,
...@@ -194,6 +196,8 @@ export default class EditorLite { ...@@ -194,6 +196,8 @@ export default class EditorLite {
} else { } else {
instanceModel.dispose(); instanceModel.dispose();
} }
} else if (model) {
model.dispose();
} }
}); });
EditorLite.manageDefaultExtensions(instance, el, extensions); EditorLite.manageDefaultExtensions(instance, el, extensions);
......
/* eslint-disable max-classes-per-file */ /* eslint-disable max-classes-per-file */
import { editor as monacoEditor, languages as monacoLanguages, Uri } from 'monaco-editor'; import { editor as monacoEditor, languages as monacoLanguages, Uri } from 'monaco-editor';
import waitForPromises from 'helpers/wait_for_promises'; import waitForPromises from 'helpers/wait_for_promises';
import Editor from '~/editor/editor_lite'; import EditorLite from '~/editor/editor_lite';
import { EditorLiteExtension } from '~/editor/extensions/editor_lite_extension_base'; import { EditorLiteExtension } from '~/editor/extensions/editor_lite_extension_base';
import { DEFAULT_THEME, themes } from '~/ide/lib/themes'; import { DEFAULT_THEME, themes } from '~/ide/lib/themes';
import { import {
...@@ -21,7 +21,7 @@ describe('Base editor', () => { ...@@ -21,7 +21,7 @@ describe('Base editor', () => {
beforeEach(() => { beforeEach(() => {
setFixtures('<div id="editor" data-editor-loading></div>'); setFixtures('<div id="editor" data-editor-loading></div>');
editorEl = document.getElementById('editor'); editorEl = document.getElementById('editor');
editor = new Editor(); editor = new EditorLite();
}); });
afterEach(() => { afterEach(() => {
...@@ -148,16 +148,14 @@ describe('Base editor', () => { ...@@ -148,16 +148,14 @@ describe('Base editor', () => {
editorEl2 = document.getElementById('editor2'); editorEl2 = document.getElementById('editor2');
inst1Args = { inst1Args = {
el: editorEl1, el: editorEl1,
blobGlobalId,
}; };
inst2Args = { inst2Args = {
el: editorEl2, el: editorEl2,
blobContent, blobContent,
blobPath, blobPath,
blobGlobalId,
}; };
editor = new Editor(); editor = new EditorLite();
instanceSpy = jest.spyOn(monacoEditor, 'create'); instanceSpy = jest.spyOn(monacoEditor, 'create');
}); });
...@@ -188,7 +186,7 @@ describe('Base editor', () => { ...@@ -188,7 +186,7 @@ describe('Base editor', () => {
}); });
it('shares global editor options among all instances', () => { it('shares global editor options among all instances', () => {
editor = new Editor({ editor = new EditorLite({
readOnly: true, readOnly: true,
}); });
...@@ -200,7 +198,7 @@ describe('Base editor', () => { ...@@ -200,7 +198,7 @@ describe('Base editor', () => {
}); });
it('allows overriding editor options on the instance level', () => { it('allows overriding editor options on the instance level', () => {
editor = new Editor({ editor = new EditorLite({
readOnly: true, readOnly: true,
}); });
inst1 = editor.createInstance({ inst1 = editor.createInstance({
...@@ -423,13 +421,14 @@ describe('Base editor', () => { ...@@ -423,13 +421,14 @@ describe('Base editor', () => {
el: editorEl, el: editorEl,
blobPath, blobPath,
blobContent, blobContent,
blobGlobalId,
extensions, extensions,
}); });
}; };
beforeEach(() => { beforeEach(() => {
editorExtensionSpy = jest.spyOn(Editor, 'pushToImportsArray').mockImplementation((arr) => { editorExtensionSpy = jest
.spyOn(EditorLite, 'pushToImportsArray')
.mockImplementation((arr) => {
arr.push( arr.push(
Promise.resolve({ Promise.resolve({
default: {}, default: {},
...@@ -547,7 +546,7 @@ describe('Base editor', () => { ...@@ -547,7 +546,7 @@ describe('Base editor', () => {
it('sets default syntax highlighting theme', () => { it('sets default syntax highlighting theme', () => {
const expectedTheme = themes.find((t) => t.name === DEFAULT_THEME); const expectedTheme = themes.find((t) => t.name === DEFAULT_THEME);
editor = new Editor(); editor = new EditorLite();
expect(themeDefineSpy).toHaveBeenCalledWith(DEFAULT_THEME, expectedTheme.data); expect(themeDefineSpy).toHaveBeenCalledWith(DEFAULT_THEME, expectedTheme.data);
expect(themeSetSpy).toHaveBeenCalledWith(DEFAULT_THEME); expect(themeSetSpy).toHaveBeenCalledWith(DEFAULT_THEME);
...@@ -559,7 +558,7 @@ describe('Base editor', () => { ...@@ -559,7 +558,7 @@ describe('Base editor', () => {
expect(expectedTheme.name).not.toBe(DEFAULT_THEME); expect(expectedTheme.name).not.toBe(DEFAULT_THEME);
window.gon.user_color_scheme = expectedTheme.name; window.gon.user_color_scheme = expectedTheme.name;
editor = new Editor(); editor = new EditorLite();
expect(themeDefineSpy).toHaveBeenCalledWith(expectedTheme.name, expectedTheme.data); expect(themeDefineSpy).toHaveBeenCalledWith(expectedTheme.name, expectedTheme.data);
expect(themeSetSpy).toHaveBeenCalledWith(expectedTheme.name); expect(themeSetSpy).toHaveBeenCalledWith(expectedTheme.name);
...@@ -570,7 +569,7 @@ describe('Base editor', () => { ...@@ -570,7 +569,7 @@ describe('Base editor', () => {
const nonExistentTheme = { name }; const nonExistentTheme = { name };
window.gon.user_color_scheme = nonExistentTheme.name; window.gon.user_color_scheme = nonExistentTheme.name;
editor = new Editor(); editor = new EditorLite();
expect(themeDefineSpy).not.toHaveBeenCalled(); expect(themeDefineSpy).not.toHaveBeenCalled();
expect(themeSetSpy).toHaveBeenCalledWith(DEFAULT_THEME); expect(themeSetSpy).toHaveBeenCalledWith(DEFAULT_THEME);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment