diff --git a/tests/cypress/integration/core/extendExtensions.spec.ts b/tests/cypress/integration/core/extendExtensions.spec.ts new file mode 100644 index 000000000..b172fe6e7 --- /dev/null +++ b/tests/cypress/integration/core/extendExtensions.spec.ts @@ -0,0 +1,134 @@ +/// + +import { Extension } from '@tiptap/core/src/Extension' +import getExtensionField from '@tiptap/core/src/helpers/getExtensionField' + +describe('extend extensions', () => { + it('should define a config', () => { + const extension = Extension.create({ + addAttributes() { + return { + foo: {}, + } + }, + }) + + const attributes = getExtensionField(extension, 'addAttributes')() + + expect(attributes).to.deep.eq({ + foo: {}, + }) + }) + + it('should overwrite a config', () => { + const extension = Extension + .create({ + addAttributes() { + return { + foo: {}, + } + }, + }) + .extend({ + addAttributes() { + return { + bar: {}, + } + }, + }) + + const attributes = getExtensionField(extension, 'addAttributes')() + + expect(attributes).to.deep.eq({ + bar: {}, + }) + }) + + it('should merge configs', () => { + const extension = Extension + .create({ + addAttributes() { + return { + foo: {}, + } + }, + }) + .extend({ + addAttributes() { + return { + ...this.parent?.(), + bar: {}, + } + }, + }) + + const attributes = getExtensionField(extension, 'addAttributes')() + + expect(attributes).to.deep.eq({ + foo: {}, + bar: {}, + }) + }) + + it('should merge configs multiple times', () => { + const extension = Extension + .create({ + addAttributes() { + return { + foo: {}, + } + }, + }) + .extend({ + addAttributes() { + return { + ...this.parent?.(), + bar: {}, + } + }, + }) + .extend({ + addAttributes() { + return { + ...this.parent?.(), + baz: {}, + } + }, + }) + + const attributes = getExtensionField(extension, 'addAttributes')() + + expect(attributes).to.deep.eq({ + foo: {}, + bar: {}, + baz: {}, + }) + }) + + it('should merge configs without direct parent configuration', () => { + const extension = Extension + .create({ + addAttributes() { + return { + foo: {}, + } + }, + }) + .extend() + .extend({ + addAttributes() { + return { + ...this.parent?.(), + bar: {}, + } + }, + }) + + const attributes = getExtensionField(extension, 'addAttributes')() + + expect(attributes).to.deep.eq({ + foo: {}, + bar: {}, + }) + }) +})