summaryrefslogtreecommitdiff
path: root/spec/frontend/ide/lib/common/model_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/ide/lib/common/model_spec.js')
-rw-r--r--spec/frontend/ide/lib/common/model_spec.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/spec/frontend/ide/lib/common/model_spec.js b/spec/frontend/ide/lib/common/model_spec.js
index 2ef2f0da6da..df46b7774b0 100644
--- a/spec/frontend/ide/lib/common/model_spec.js
+++ b/spec/frontend/ide/lib/common/model_spec.js
@@ -133,5 +133,77 @@ describe('Multi-file editor library model', () => {
expect(disposeSpy).toHaveBeenCalled();
});
+
+ it('applies custom options and triggers onChange callback', () => {
+ const changeSpy = jest.fn();
+ jest.spyOn(model, 'applyCustomOptions');
+
+ model.onChange(changeSpy);
+
+ model.dispose();
+
+ expect(model.applyCustomOptions).toHaveBeenCalled();
+ expect(changeSpy).toHaveBeenCalled();
+ });
+ });
+
+ describe('updateOptions', () => {
+ it('sets the options on the options object', () => {
+ model.updateOptions({ insertSpaces: true, someOption: 'some value' });
+
+ expect(model.options).toEqual({
+ endOfLine: 0,
+ insertFinalNewline: true,
+ insertSpaces: true,
+ someOption: 'some value',
+ trimTrailingWhitespace: false,
+ });
+ });
+
+ it.each`
+ option | value
+ ${'insertSpaces'} | ${true}
+ ${'insertSpaces'} | ${false}
+ ${'indentSize'} | ${4}
+ ${'tabSize'} | ${3}
+ `("correctly sets option: $option=$value to Monaco's TextModel", ({ option, value }) => {
+ model.updateOptions({ [option]: value });
+
+ expect(model.getModel().getOptions()).toMatchObject({ [option]: value });
+ });
+
+ it('applies custom options immediately', () => {
+ jest.spyOn(model, 'applyCustomOptions');
+
+ model.updateOptions({ trimTrailingWhitespace: true, someOption: 'some value' });
+
+ expect(model.applyCustomOptions).toHaveBeenCalled();
+ });
+ });
+
+ describe('applyCustomOptions', () => {
+ it.each`
+ option | value | contentBefore | contentAfter
+ ${'endOfLine'} | ${0} | ${'hello\nworld\n'} | ${'hello\nworld\n'}
+ ${'endOfLine'} | ${0} | ${'hello\r\nworld\r\n'} | ${'hello\nworld\n'}
+ ${'endOfLine'} | ${1} | ${'hello\nworld\n'} | ${'hello\r\nworld\r\n'}
+ ${'endOfLine'} | ${1} | ${'hello\r\nworld\r\n'} | ${'hello\r\nworld\r\n'}
+ ${'insertFinalNewline'} | ${true} | ${'hello\nworld'} | ${'hello\nworld\n'}
+ ${'insertFinalNewline'} | ${true} | ${'hello\nworld\n'} | ${'hello\nworld\n'}
+ ${'insertFinalNewline'} | ${false} | ${'hello\nworld'} | ${'hello\nworld'}
+ ${'trimTrailingWhitespace'} | ${true} | ${'hello \t\nworld \t\n'} | ${'hello\nworld\n'}
+ ${'trimTrailingWhitespace'} | ${true} | ${'hello \t\r\nworld \t\r\n'} | ${'hello\nworld\n'}
+ ${'trimTrailingWhitespace'} | ${false} | ${'hello \t\r\nworld \t\r\n'} | ${'hello \t\nworld \t\n'}
+ `(
+ 'correctly applies custom option $option=$value to content',
+ ({ option, value, contentBefore, contentAfter }) => {
+ model.options[option] = value;
+
+ model.updateNewContent(contentBefore);
+ model.applyCustomOptions();
+
+ expect(model.getModel().getValue()).toEqual(contentAfter);
+ },
+ );
});
});