add unit test

This commit is contained in:
chloelee767 2026-01-16 00:15:05 +08:00
parent 6bd80d3a16
commit 4ecdb097b3
4 changed files with 604 additions and 94 deletions

View File

@ -16,7 +16,17 @@
"ckeditor5-premium-features": "47.4.0"
},
"devDependencies": {
"@smithy/middleware-retry": "4.4.27",
"@smithy/middleware-retry": "4.4.29",
"@types/jquery": "3.5.33"
"@types/jquery": "3.5.33",
"@vitest/browser": "4.0.17",
"@vitest/coverage-istanbul": "4.0.17",
"vite-plugin-svgo": "2.0.0",
"vitest": "4.0.17",
"webdriverio": "9.23.0"
},
"scripts": {
"test": "vitest",
"test:debug": "vitest --inspect-brk --no-file-parallelism --browser.headless=false"
}
}

View File

@ -0,0 +1,65 @@
import { ClassicEditor, CodeBlock, Mention } from 'ckeditor5';
import DisableMentionInCodeBlock from '../src/plugins/disable_mention_in_codeblock.js';
import { describe, beforeEach, it, afterEach, expect } from "vitest";
describe( 'DisableMentionInCodeBlock', () => {
let editorElement: HTMLDivElement, editor: ClassicEditor;
beforeEach( async () => {
editorElement = document.createElement( 'div' );
document.body.appendChild( editorElement );
return ClassicEditor
.create( editorElement, {
plugins: [ CodeBlock, Mention, DisableMentionInCodeBlock ],
licenseKey: "GPL"
} )
.then( newEditor => {
editor = newEditor;
} );
} );
afterEach( () => {
editorElement.remove();
return editor.destroy();
} );
it( 'should be loaded', () => {
expect( editor.plugins.get( DisableMentionInCodeBlock ) ).to.instanceOf( DisableMentionInCodeBlock );
} );
it( 'has proper name', () => {
expect( DisableMentionInCodeBlock.pluginName ).to.equal( 'DisableMentionInCodeBlock' );
} );
it( 'should prevent mention attribute inside code blocks', () => {
const schema = editor.model.schema;
// Test that mention attribute is disallowed in code block context
const context = schema.createContext( [ 'codeBlock', '$text' ] );
const isAllowed = schema.checkAttribute( context, 'mention' );
expect( isAllowed ).to.be.false;
} );
it( 'should allow mention attribute outside code blocks', () => {
const schema = editor.model.schema;
// Test that mention attribute is still allowed in regular paragraphs
const context = schema.createContext( [ 'paragraph', '$text' ] );
const isAllowed = schema.checkAttribute( context, 'mention' );
expect( isAllowed ).to.be.true;
} );
it( 'should allow mention attribute in list items', () => {
const schema = editor.model.schema;
// Test that mention attribute is still allowed in list items
const context = schema.createContext( [ 'listItem', '$text' ] );
const isAllowed = schema.checkAttribute( context, 'mention' );
expect( isAllowed ).to.be.true;
} );
} );

View File

@ -0,0 +1,43 @@
/**
* @license Copyright (c) 2023-2024, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md.
*/
import { defineConfig } from 'vitest/config';
import svg from 'vite-plugin-svgo';
import { webdriverio } from "@vitest/browser-webdriverio";
export default defineConfig( {
plugins: [
svg()
],
test: {
browser: {
enabled: true,
provider: webdriverio(),
headless: true,
ui: false,
instances: [ { browser: 'chrome' } ]
},
include: [
'tests/**/*.[jt]s'
],
exclude: [
'tests/setup.ts'
],
globals: true,
watch: false,
coverage: {
thresholds: {
lines: 100,
functions: 100,
branches: 100,
statements: 100
},
provider: 'istanbul',
include: [
'src'
]
}
}
} );

578
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff