vim-keymap.spec.ts 2.0 KB

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