vim-keymap.spec.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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('Vim keymap mode', () => {
  24. test('Insert mode should persist while typing multiple characters', async ({
  25. page,
  26. }) => {
  27. const testText = 'Hello World';
  28. const testPagePath = '/Sandbox/vim-keymap-test-page';
  29. await page.goto(testPagePath);
  30. // Open Editor
  31. await expect(page.getByTestId('editor-button')).toBeVisible();
  32. await page.getByTestId('editor-button').click();
  33. await expect(page.getByTestId('grw-editor-navbar-bottom')).toBeVisible();
  34. // Change to Vim keymap
  35. await changeKeymap(page, 'vim');
  36. // Focus the editor
  37. await page.locator('.cm-content').click();
  38. // Enter insert mode
  39. await page.keyboard.type('i');
  40. // Append text
  41. await appendTextToEditorUntilContains(page, testText);
  42. // Change back to default keymap
  43. await changeKeymap(page, 'default');
  44. });
  45. });