mediawiki-extensions-CodeMi.../tests/jest/codemirror.wikieditor.test.js
MusikAnimal aa3876a97e CodeMirrorWikiEditor: Remove hack to fix height in WikiEditor
WikiEditor's ResizingDragBar makes the editor resizable, so we need to
set the height to 100%. This was attempted in Ib49d1d9e71 and
I4deeda192b but both ultimately suffer from race conditions. Instead
we're setting the height in WikiEditor with Ia5e9767e08.

The heightExtension in the CodeMirror class still remains, in the event
a subclass wishes to override the default behaviour in CM directly and
not with CSS.

Bug: T357794
Depends-On: Ia5e9767e0814eac29d58bc0d9c1023344a29dd84
Change-Id: Ic55dd098d70fd173ddee7100e392b889ee6ddd08
2024-03-13 11:18:20 -04:00

64 lines
2 KiB
JavaScript

mw.loader = { getState: jest.fn() };
const CodeMirrorWikiEditor = require( '../../src/codemirror.wikieditor.js' ).default,
$textarea = $( '<textarea>' )
.text( 'The Smashing Pumpkins' ),
cmWe = new CodeMirrorWikiEditor( $textarea );
beforeEach( () => {
// Simulate the button that enables/disables CodeMirror as WikiEditor doesn't exist here.
const btn = document.createElement( 'span' );
btn.id = 'mw-editbutton-codemirror';
btn.classList.add( 'tool' );
btn.setAttribute( 'rel', 'CodeMirror' );
document.body.appendChild( btn );
// Add WikiEditor context to the textarea.
cmWe.$textarea.data = jest.fn().mockReturnValue( {
modules: {
toolbar: {
$toolbar: $( btn )
}
}
} );
// Initialize CodeMirror.
cmWe.initialize();
} );
describe( 'addCodeMirrorToWikiEditor', () => {
cmWe.$textarea.wikiEditor = jest.fn();
it( 'should add the button to the toolbar', () => {
cmWe.addCodeMirrorToWikiEditor();
expect( cmWe.$textarea.wikiEditor ).toHaveBeenCalledWith(
'addToToolbar',
expect.objectContaining( {
groups: { codemirror: expect.any( Object ) }
} )
);
} );
it( 'should be readonly when the textarea is also readonly', () => {
const textarea = document.createElement( 'textarea' );
textarea.readOnly = true;
const cmWe2 = new CodeMirrorWikiEditor( textarea );
cmWe2.initialize();
cmWe2.addCodeMirrorToWikiEditor();
expect( cmWe2.readOnly ).toEqual( true );
expect( cmWe2.state.readOnly ).toEqual( true );
} );
} );
describe( 'updateToolbarButton', () => {
it( 'should update the toolbar button based on the current CodeMirror state', () => {
const btn = document.getElementById( 'mw-editbutton-codemirror' );
cmWe.setCodeMirrorPreference( false );
cmWe.updateToolbarButton();
expect( btn.classList.contains( 'mw-editbutton-codemirror-active' ) ).toBeFalsy();
cmWe.setCodeMirrorPreference( true );
cmWe.updateToolbarButton();
expect( btn.classList.contains( 'mw-editbutton-codemirror-active' ) ).toBeTruthy();
} );
} );