blockref.spec.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { expect } from '@playwright/test'
  2. import { test } from './fixtures'
  3. import { createRandomPage, enterNextBlock, modKey, editNthBlock, moveCursorToBeginning, moveCursorToEnd } from './utils'
  4. import { dispatch_kb_events } from './util/keyboard-events'
  5. // Create a random page with some pre-defined blocks
  6. // - a
  7. // - b
  8. // id:: UUID
  9. // - ((id))
  10. async function setUpBlocks(page, block) {
  11. await createRandomPage(page)
  12. await block.mustFill('a')
  13. await block.enterNext()
  14. await block.mustFill('b')
  15. await page.keyboard.press(modKey + '+c')
  16. await page.waitForTimeout(100)
  17. await block.enterNext()
  18. await page.keyboard.press(modKey + '+v')
  19. await page.waitForTimeout(100)
  20. }
  21. test('backspace at the beginning of a refed block #9406', async ({ page, block }) => {
  22. await setUpBlocks(page, block)
  23. await editNthBlock(page, 1)
  24. await moveCursorToBeginning(page)
  25. await page.keyboard.press('Backspace')
  26. await expect(page.locator('textarea >> nth=0')).toHaveText("ab")
  27. await expect(await block.selectionStart()).toEqual(1)
  28. await expect(page.locator('.block-ref >> text="ab"')).toHaveCount(1);
  29. })
  30. test('delete at the end of a prev block before a refed block #9406', async ({ page, block }) => {
  31. await setUpBlocks(page, block)
  32. await editNthBlock(page, 0)
  33. await moveCursorToEnd(page)
  34. await page.keyboard.press('Delete')
  35. await expect(page.locator('textarea >> nth=0')).toHaveText("ab")
  36. await expect(await block.selectionStart()).toEqual(1)
  37. await expect(page.locator('.block-ref >> text="ab"')).toHaveCount(1);
  38. })
  39. test('delete selected blocks, block ref should be replaced by content #9406', async ({ page, block }) => {
  40. await setUpBlocks(page, block)
  41. await editNthBlock(page, 0)
  42. await page.waitForTimeout(100)
  43. await page.keyboard.down('Shift')
  44. await page.keyboard.press('ArrowDown')
  45. await page.keyboard.press('ArrowDown')
  46. await page.keyboard.up('Shift')
  47. await block.waitForSelectedBlocks(2)
  48. await page.keyboard.press('Backspace')
  49. await expect(page.locator('.ls-block')).toHaveCount(1)
  50. await editNthBlock(page, 0)
  51. await expect(page.locator('textarea >> nth=0')).toHaveText("b")
  52. })
  53. test('delete and undo #9406', async ({ page, block }) => {
  54. await setUpBlocks(page, block)
  55. await editNthBlock(page, 0)
  56. await page.waitForTimeout(100)
  57. await page.keyboard.down('Shift')
  58. await page.keyboard.press('ArrowDown')
  59. await page.keyboard.press('ArrowDown')
  60. await page.keyboard.up('Shift')
  61. await block.waitForSelectedBlocks(2)
  62. await page.keyboard.press('Backspace')
  63. await expect(page.locator('.ls-block')).toHaveCount(1)
  64. await page.keyboard.press(modKey + '+z')
  65. await page.waitForTimeout(100)
  66. await expect(page.locator('.ls-block')).toHaveCount(3)
  67. await expect(page.locator('.block-ref >> text="b"')).toHaveCount(1);
  68. })