diff --git a/demos/playground/src/__tests__/e2e/CopyAndPaste.spec.mjs b/demos/playground/src/__tests__/e2e/CopyAndPaste.spec.mjs
index 35ac097..61af85b 100644
--- a/demos/playground/src/__tests__/e2e/CopyAndPaste.spec.mjs
+++ b/demos/playground/src/__tests__/e2e/CopyAndPaste.spec.mjs
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
*/
-import {expect} from '@playwright/test';
+import { expect } from '@playwright/test';
import {
extendToNextWord,
@@ -42,8 +42,8 @@ import {
} from '../utils/index.mjs';
test.describe('CopyAndPaste', () => {
- test.beforeEach(({isCollab, page}) => initialize({isCollab, page}));
- test('Basic copy + paste', async ({isRichText, page, browserName}) => {
+ test.beforeEach(({ isCollab, page }) => initialize({ isCollab, page }));
+ test('Basic copy + paste', async ({ isRichText, page, browserName }) => {
await focusEditor(page);
// Add paragraph
@@ -256,7 +256,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
`Copy and paste heading`,
- async ({isPlainText, page, browserName}) => {
+ async ({ isPlainText, page, browserName }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -309,7 +309,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
`Copy and paste between sections`,
- async ({isRichText, page, browserName}) => {
+ async ({ isRichText, page, browserName }) => {
await focusEditor(page);
await page.keyboard.type('Hello world #foobar test #foobar2 when #not');
@@ -789,7 +789,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'Copy and paste of partial list items into an empty editor',
- async ({page, isPlainText}) => {
+ async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -869,7 +869,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'Copy and paste of partial list items into the list',
- async ({page, isPlainText, isCollab, browserName}) => {
+ async ({ page, isPlainText, isCollab, browserName }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -1045,7 +1045,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'Copy list items and paste back into list',
- async ({page, isPlainText, isCollab}) => {
+ async ({ page, isPlainText, isCollab }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -1112,7 +1112,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'Copy list items and paste into list',
- async ({page, isPlainText, isCollab}) => {
+ async ({ page, isPlainText, isCollab }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -1298,7 +1298,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'Copy and paste of list items and paste back into list on an existing item',
- async ({page, isPlainText, isCollab}) => {
+ async ({ page, isPlainText, isCollab }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -1363,9 +1363,171 @@ test.describe('CopyAndPaste', () => {
},
);
+ test('Copy list of a different type and paste into list on an existing item - should merge the lists.', async ({
+ page,
+ isPlainText,
+ isCollab,
+ }) => {
+ test.skip(isPlainText);
+
+ await focusEditor(page);
+
+ await page.keyboard.type('- one');
+ await page.keyboard.press('Enter');
+ await page.keyboard.type('two');
+ await page.keyboard.press('Tab');
+ await page.keyboard.press('Enter');
+ await page.keyboard.type('a');
+
+ await page.keyboard.press('Enter');
+ await page.keyboard.press('Enter');
+ await page.keyboard.press('Enter');
+ await page.keyboard.press('Enter');
+
+ await page.keyboard.type('1. four');
+ await page.keyboard.press('Enter');
+ await page.keyboard.type('five');
+ await page.keyboard.press('Tab');
+
+ await page.keyboard.press('ArrowUp');
+
+ await moveToLineBeginning(page);
+ await page.keyboard.down('Shift');
+ await page.keyboard.press('ArrowDown');
+ await page.keyboard.press('ArrowDown');
+ await page.keyboard.up('Shift');
+
+ await assertHTML(
+ page,
+ html`
+
+
+
+ -
+ four
+
+ -
+
+ -
+ five
+
+
+
+
+ `,
+ );
+
+ const clipboard = await copyToClipboard(page);
+
+ await page.keyboard.press('ArrowLeft');
+ await page.keyboard.press('ArrowLeft');
+ await page.keyboard.press('ArrowLeft');
+ await page.keyboard.press('Backspace');
+
+ await pasteFromClipboard(page, clipboard);
+
+ await assertHTML(
+ page,
+ html`
+
+ -
+ one
+
+ -
+
+ -
+ two
+
+ -
+ four
+
+ -
+
+ -
+ five
+
+
+
+
+
+
+
+
+ -
+ four
+
+ -
+
+ -
+ five
+
+
+
+
+ `,
+ );
+ });
+
test.fixme(
'Copy and paste two paragraphs into list on an existing item',
- async ({page, isPlainText}) => {
+ async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -1425,7 +1587,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'Copy and paste two paragraphs at the end of a list',
- async ({page, isPlainText}) => {
+ async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -1481,7 +1643,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'Copy and paste an inline element into a leaf node',
- async ({page, isPlainText}) => {
+ async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -1541,7 +1703,7 @@ test.describe('CopyAndPaste', () => {
await focusEditor(page);
- const clipboard = {'text/html': 'Hello!'};
+ const clipboard = { 'text/html': 'Hello!' };
await pasteFromClipboard(page, clipboard);
@@ -1563,12 +1725,12 @@ test.describe('CopyAndPaste', () => {
});
});
- test('HTML Copy + paste a paragraph element', async ({page, isPlainText}) => {
+ test('HTML Copy + paste a paragraph element', async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
- const clipboard = {'text/html': 'Hello!
'};
+ const clipboard = { 'text/html': '
Hello!
' };
await pasteFromClipboard(page, clipboard);
@@ -1592,7 +1754,7 @@ test.describe('CopyAndPaste', () => {
});
});
- test('HTML Copy + paste an anchor element', async ({page, isPlainText}) => {
+ test('HTML Copy + paste an anchor element', async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -1659,12 +1821,12 @@ test.describe('CopyAndPaste', () => {
);
});
- test('HTML Copy + paste a list element', async ({page, isPlainText}) => {
+ test('HTML Copy + paste a list element', async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
- const clipboard = {'text/html': '
'};
+ const clipboard = { 'text/html': '' };
await pasteFromClipboard(page, clipboard);
@@ -1718,7 +1880,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'HTML Copy + paste (Nested List - directly nested ul)',
- async ({page, isPlainText}) => {
+ async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -1824,7 +1986,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'HTML Copy + paste (Nested List - li with non-list content plus ul child)',
- async ({page, isPlainText}) => {
+ async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -1924,7 +2086,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'HTML Copy + paste (Table - Google Docs)',
- async ({page, isPlainText, isCollab}) => {
+ async ({ page, isPlainText, isCollab }) => {
test.skip(isPlainText);
test.fixme(
@@ -2003,7 +2165,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'HTML Copy + paste (Table - Quip)',
- async ({page, isPlainText}) => {
+ async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -2077,7 +2239,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'HTML Copy + paste (Table - Google Sheets)',
- async ({page, isPlainText}) => {
+ async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -2151,7 +2313,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'Merge Grids on Copy + paste',
- async ({page, isPlainText, isCollab}) => {
+ async ({ page, isPlainText, isCollab }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -2163,8 +2325,8 @@ test.describe('CopyAndPaste', () => {
await selectCellsFromTableCords(
page,
- {x: 0, y: 0},
- {x: 3, y: 3},
+ { x: 0, y: 0 },
+ { x: 3, y: 3 },
true,
false,
);
@@ -2390,8 +2552,8 @@ test.describe('CopyAndPaste', () => {
// Explicitly checking inner text, since regular assertHTML will prettify it and strip all
// extra newlines, which makes this test less acurate
- await expect(paragraphs.nth(0)).toHaveText('Hello', {useInnerText: true});
- await expect(paragraphs.nth(1)).toHaveText('World', {useInnerText: true});
+ await expect(paragraphs.nth(0)).toHaveText('Hello', { useInnerText: true });
+ await expect(paragraphs.nth(1)).toHaveText('World', { useInnerText: true });
await expect(paragraphs.nth(2)).toHaveText('Hello World !', {
useInnerText: true,
});
@@ -2402,7 +2564,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'HTML Copy + paste in front of or after a link',
- async ({page, isPlainText}) => {
+ async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
await pasteFromClipboard(page, {
@@ -2438,7 +2600,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'HTML Copy + paste link by selecting its (partial) content',
- async ({page, isPlainText}) => {
+ async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
await pasteFromClipboard(page, {
@@ -2480,7 +2642,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'Copy + paste multi-line plain text into rich text produces separate paragraphs',
- async ({page, isPlainText}) => {
+ async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
await page.keyboard.type('# Hello ');
@@ -2640,7 +2802,7 @@ test.describe('CopyAndPaste', () => {
);
});
- test('HTML Copy + paste a checklist', async ({page, isPlainText}) => {
+ test('HTML Copy + paste a checklist', async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -2716,7 +2878,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'HTML Copy + paste a code block with BR',
- async ({page, isPlainText}) => {
+ async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -2805,7 +2967,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'HTML Copy + paste empty link #3193',
- async ({page, isPlainText}) => {
+ async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -2853,7 +3015,7 @@ test.describe('CopyAndPaste', () => {
},
);
- test.fixme('HTML Paste a link into text', async ({page, isPlainText}) => {
+ test.fixme('HTML Paste a link into text', async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -2890,7 +3052,7 @@ test.describe('CopyAndPaste', () => {
);
});
- test.fixme('HTML Copy + paste an image', async ({page, isPlainText}) => {
+ test.fixme('HTML Copy + paste an image', async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -2932,7 +3094,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'HTML Copy + paste + undo multiple image',
- async ({page, isPlainText}) => {
+ async ({ page, isPlainText }) => {
test.skip(isPlainText);
await focusEditor(page);
@@ -2990,12 +3152,12 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'HTML Copy + paste a paragraph element between horizontal rules',
- async ({page, isPlainText, isCollab}) => {
+ async ({ page, isPlainText, isCollab }) => {
test.skip(isPlainText);
await focusEditor(page);
- let clipboard = {'text/html': '
'};
+ let clipboard = { 'text/html': '
' };
await pasteFromClipboard(page, clipboard);
// Collab doesn't process the cursor correctly
@@ -3024,7 +3186,7 @@ test.describe('CopyAndPaste', () => {
// sets focus between HRs
await page.keyboard.press('ArrowRight');
- clipboard = {'text/html': 'Text between HRs
'};
+ clipboard = { 'text/html': 'Text between HRs
' };
await pasteFromClipboard(page, clipboard);
await assertHTML(
@@ -3051,7 +3213,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'Paste top level element in the middle of paragraph',
- async ({page, isPlainText, isCollab}) => {
+ async ({ page, isPlainText, isCollab }) => {
test.skip(isPlainText || isCollab);
await focusEditor(page);
await page.keyboard.type('Hello world');
@@ -3081,7 +3243,7 @@ test.describe('CopyAndPaste', () => {
test.fixme(
'Paste top level element in the middle of list',
- async ({page, isPlainText, isCollab}) => {
+ async ({ page, isPlainText, isCollab }) => {
test.skip(isPlainText || isCollab);
await focusEditor(page);
// Add three list items