vim-keymap.spec.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { expect, type Page, test } from '@playwright/test';
  2. import { appendTextToEditorUntilContains } from '../utils/AppendTextToEditorUntilContains';
  3. /**
  4. * Tests for Vim keymap functionality in the editor
  5. * @see https://github.com/growilabs/growi/issues/8814
  6. * @see https://github.com/growilabs/growi/issues/10701
  7. */
  8. const changeKeymap = async (page: Page, keymap: string) => {
  9. // Open OptionsSelector
  10. await expect(page.getByTestId('options-selector-btn')).toBeVisible();
  11. await page.getByTestId('options-selector-btn').click();
  12. await expect(page.getByTestId('options-selector-menu')).toBeVisible();
  13. // Click keymap selection button to navigate to keymap selector
  14. await expect(page.getByTestId('keymap_current_selection')).toBeVisible();
  15. await page.getByTestId('keymap_current_selection').click();
  16. // Select Vim keymap
  17. await expect(page.getByTestId(`keymap_radio_item_${keymap}`)).toBeVisible();
  18. await page.getByTestId(`keymap_radio_item_${keymap}`).click();
  19. // Close OptionsSelector
  20. await page.getByTestId('options-selector-btn').click();
  21. await expect(page.getByTestId('options-selector-menu')).not.toBeVisible();
  22. };
  23. test.describe
  24. .serial('Vim keymap mode', () => {
  25. test.beforeEach(async ({ page }) => {
  26. await page.goto('/Sandbox/vim-keymap-test-page');
  27. // Open Editor
  28. await expect(page.getByTestId('editor-button')).toBeVisible();
  29. await page.getByTestId('editor-button').click();
  30. await expect(page.locator('.cm-content')).toBeVisible();
  31. await expect(page.getByTestId('grw-editor-navbar-bottom')).toBeVisible();
  32. });
  33. test('Insert mode should persist while typing multiple characters', async ({
  34. page,
  35. }) => {
  36. const testText = 'Hello World';
  37. // Change to Vim keymap
  38. await changeKeymap(page, 'vim');
  39. // Focus the editor
  40. await page.locator('.cm-content').click();
  41. // Enter insert mode
  42. await page.keyboard.type('i');
  43. // Append text
  44. await appendTextToEditorUntilContains(page, testText);
  45. });
  46. test('Write command (:w) should save the page successfully', async ({
  47. page,
  48. }) => {
  49. // Enter command mode
  50. await page.keyboard.type(':');
  51. await expect(page.locator('.cm-vim-panel')).toBeVisible();
  52. // Type write command and execute
  53. await page.keyboard.type('w');
  54. await page.keyboard.press('Enter');
  55. // Expect a success toaster to be displayed
  56. await expect(page.locator('.Toastify__toast--success')).toBeVisible();
  57. // Restore keymap to default
  58. await changeKeymap(page, 'default');
  59. });
  60. });