From 396b22977865cf122ec345f9a536d329ade5eaa6 Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Wed, 1 Apr 2020 10:41:20 +0100 Subject: [PATCH] Fix keyboard block duplication --- .../block-list/use-multi-selection.js | 5 +- .../duplicating-blocks.test.js.snap | 21 ++++++++ .../editor/various/duplicating-blocks.test.js | 49 +++++++++++++++++++ 3 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 packages/e2e-tests/specs/editor/various/__snapshots__/duplicating-blocks.test.js.snap create mode 100644 packages/e2e-tests/specs/editor/various/duplicating-blocks.test.js diff --git a/packages/block-editor/src/components/block-list/use-multi-selection.js b/packages/block-editor/src/components/block-list/use-multi-selection.js index 1e77f8711a51de..2d40464f2c0c56 100644 --- a/packages/block-editor/src/components/block-list/use-multi-selection.js +++ b/packages/block-editor/src/components/block-list/use-multi-selection.js @@ -105,8 +105,9 @@ export default function useMultiSelection( ref ) { ); if ( - ! blockNode.contains( startContainer ) || - ! blockNode.contains( endContainer ) + !! blockNode && + ( ! blockNode.contains( startContainer ) || + ! blockNode.contains( endContainer ) ) ) { selection.removeAllRanges(); } diff --git a/packages/e2e-tests/specs/editor/various/__snapshots__/duplicating-blocks.test.js.snap b/packages/e2e-tests/specs/editor/various/__snapshots__/duplicating-blocks.test.js.snap new file mode 100644 index 00000000000000..bb8192de22cb94 --- /dev/null +++ b/packages/e2e-tests/specs/editor/various/__snapshots__/duplicating-blocks.test.js.snap @@ -0,0 +1,21 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Duplicating blocks should duplicate blocks using the block settings menu 1`] = ` +" +

Clone me

+ + + +

Clone me

+" +`; + +exports[`Duplicating blocks should duplicate blocks using the keyboard shortcut 1`] = ` +" +

Clone me

+ + + +

Clone me

+" +`; diff --git a/packages/e2e-tests/specs/editor/various/duplicating-blocks.test.js b/packages/e2e-tests/specs/editor/various/duplicating-blocks.test.js new file mode 100644 index 00000000000000..a5aadb7766a793 --- /dev/null +++ b/packages/e2e-tests/specs/editor/various/duplicating-blocks.test.js @@ -0,0 +1,49 @@ +/** + * WordPress dependencies + */ +import { + createNewPost, + insertBlock, + getEditedPostContent, + clickBlockToolbarButton, + pressKeyWithModifier, +} from '@wordpress/e2e-test-utils'; + +describe( 'Duplicating blocks', () => { + beforeEach( async () => { + await createNewPost(); + } ); + + it( 'should duplicate blocks using the block settings menu', async () => { + await insertBlock( 'Paragraph' ); + await page.keyboard.type( 'Clone me' ); + + // Select the test we just typed + // This doesn't do anything but we previously had a duplicationi bug + // When the selection was not collapsed + await pressKeyWithModifier( 'primary', 'a' ); + + await clickBlockToolbarButton( 'More options' ); + const duplicateButton = await page.waitForXPath( + '//button[text()="Duplicate"]' + ); + await duplicateButton.click(); + + expect( await getEditedPostContent() ).toMatchSnapshot(); + } ); + + it( 'should duplicate blocks using the keyboard shortcut', async () => { + await insertBlock( 'Paragraph' ); + await page.keyboard.type( 'Clone me' ); + + // Select the test we just typed + // This doesn't do anything but we previously had a duplicationi bug + // When the selection was not collapsed + await pressKeyWithModifier( 'primary', 'a' ); + + // Duplicate using the keyboard shortccut + await pressKeyWithModifier( 'primaryShift', 'd' ); + + expect( await getEditedPostContent() ).toMatchSnapshot(); + } ); +} );