2025-05-09 22:35:36 +03:00
|
|
|
import { ClassicEditor, Paragraph, _setModelData as setModelData, _getModelData as getModelData } from 'ckeditor5';
|
2022-03-04 13:39:39 +01:00
|
|
|
|
2024-05-20 14:27:21 +02:00
|
|
|
import MermaidSplitViewCommand from '../../src/commands/mermaidSplitViewCommand.js';
|
|
|
|
import MermaidEditing from '../../src/mermaidediting.js';
|
2025-05-10 02:23:22 +03:00
|
|
|
import { afterEach, beforeEach, describe, it } from 'vitest';
|
|
|
|
import { expect } from 'vitest';
|
2022-03-04 13:39:39 +01:00
|
|
|
|
|
|
|
/* global document */
|
|
|
|
|
|
|
|
describe( 'MermaidSplitViewCommand', () => {
|
|
|
|
let domElement, editor, model, command;
|
|
|
|
|
|
|
|
beforeEach( async () => {
|
|
|
|
domElement = document.createElement( 'div' );
|
|
|
|
document.body.appendChild( domElement );
|
|
|
|
|
|
|
|
editor = await ClassicEditor.create( domElement, {
|
2025-05-10 02:25:11 +03:00
|
|
|
licenseKey: "GPL",
|
2022-03-04 13:39:39 +01:00
|
|
|
plugins: [
|
|
|
|
MermaidEditing,
|
|
|
|
Paragraph
|
|
|
|
]
|
|
|
|
} );
|
|
|
|
|
|
|
|
model = editor.model;
|
|
|
|
|
|
|
|
command = new MermaidSplitViewCommand( editor );
|
|
|
|
} );
|
|
|
|
|
|
|
|
afterEach( () => {
|
|
|
|
domElement.remove();
|
|
|
|
return editor.destroy();
|
|
|
|
} );
|
|
|
|
|
|
|
|
describe( '#value', () => {
|
|
|
|
it( 'should be true when mermaid element has displayMode attribute equal to "preview"', () => {
|
|
|
|
setModelData( model, '<mermaid displayMode="preview" source="foo"></mermaid>' );
|
|
|
|
|
|
|
|
expect( command.value ).to.equal( false );
|
|
|
|
} );
|
|
|
|
|
|
|
|
it( 'should be false when mermaid element has displayMode attribute equal to "split"', () => {
|
|
|
|
setModelData( model, '<mermaid displayMode="split" source="foo"></mermaid>' );
|
|
|
|
|
|
|
|
expect( command.value ).to.equal( true );
|
|
|
|
} );
|
|
|
|
|
|
|
|
it( 'should be false when mermaid element has source attribute equal to "source"', () => {
|
|
|
|
setModelData( model, '<mermaid displayMode="source" source="foo"></mermaid>' );
|
|
|
|
|
|
|
|
expect( command.value ).to.equal( false );
|
|
|
|
} );
|
|
|
|
} );
|
|
|
|
|
|
|
|
describe( '#isEnabled', () => {
|
|
|
|
describe( 'should be false', () => {
|
|
|
|
it( 'when text is selected', () => {
|
|
|
|
setModelData( model,
|
|
|
|
'<paragraph>[foo]</paragraph>' +
|
|
|
|
'<mermaid source="flowchart TB\nA --> B\nB --> C"></mermaid>'
|
|
|
|
);
|
|
|
|
|
|
|
|
expect( command.isEnabled ).to.be.false;
|
|
|
|
} );
|
|
|
|
|
|
|
|
it( 'when mermaid is part of the selection', () => {
|
|
|
|
setModelData( model,
|
|
|
|
'<paragraph>[foo</paragraph>' +
|
|
|
|
'<mermaid source="flowchart TB\nA --> B\nB --> C"></mermaid>' +
|
|
|
|
'<paragraph>b]az</paragraph>'
|
|
|
|
);
|
|
|
|
|
|
|
|
expect( command.isEnabled ).to.be.false;
|
|
|
|
} );
|
|
|
|
} );
|
|
|
|
|
|
|
|
describe( 'should be true', () => {
|
|
|
|
it( 'when selection is inside mermaid', () => {
|
|
|
|
setModelData( model,
|
|
|
|
'<paragraph>foo</paragraph>' +
|
|
|
|
'<mermaid source="flowchart TB\nA --> B\nB --> C">[]</mermaid>'
|
|
|
|
);
|
|
|
|
|
|
|
|
expect( command.isEnabled ).to.be.true;
|
|
|
|
} );
|
|
|
|
|
|
|
|
it( 'when mermaid is selected', () => {
|
|
|
|
setModelData( model,
|
|
|
|
'<paragraph>foo</paragraph>' +
|
|
|
|
'[<mermaid source="flowchart TB\nA --> B\nB --> C"></mermaid>]'
|
|
|
|
);
|
|
|
|
|
|
|
|
expect( command.isEnabled ).to.be.true;
|
|
|
|
} );
|
|
|
|
} );
|
|
|
|
} );
|
|
|
|
|
|
|
|
describe( 'execute()', () => {
|
|
|
|
it( 'should change displayMode to "source" for mermaid', () => {
|
|
|
|
setModelData( model,
|
|
|
|
'[<mermaid displayMode="source" source="foo"></mermaid>]'
|
|
|
|
);
|
|
|
|
|
|
|
|
command.execute();
|
|
|
|
|
|
|
|
expect( getModelData( model ) ).to.equal(
|
|
|
|
'[<mermaid displayMode="split" source="foo"></mermaid>]'
|
|
|
|
);
|
|
|
|
} );
|
|
|
|
} );
|
|
|
|
} );
|