diff --git a/package-lock.json b/package-lock.json index 460c688..aacc9f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,7 +61,7 @@ "@vitejs/plugin-vue": "^5.0.4", "@vitest/coverage-v8": "^1.5.0", "@vitest/ui": "^1.5.0", - "@vue/test-utils": "^2.4.5", + "@vue/test-utils": "github:nbonamy/test-utils#keyboardevent-code", "dotenv": "^16.4.5", "electron": "29.1.6", "electron-devtools-installer": "^3.2.0", @@ -3964,9 +3964,8 @@ "integrity": "sha512-cg7R9XNk4ovV3bKka/1a464O2oY0l5Fyt0rwGR4hSJRPjUJ0WVjrPdsr4W0JbUriwiM8EKcCcCjeKN5pRMs2Zg==" }, "node_modules/@vue/test-utils": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.5.tgz", - "integrity": "sha512-oo2u7vktOyKUked36R93NB7mg2B+N7Plr8lxp2JBGwr18ch6EggFjixSCdIVVLkT6Qr0z359Xvnafc9dcKyDUg==", + "version": "2.4.6", + "resolved": "git+ssh://git@github.com/nbonamy/test-utils.git#b66075144a48033913c1e0e0af7a441c92cfadf7", "dev": true, "dependencies": { "js-beautify": "^1.14.9", diff --git a/package.json b/package.json index a581a23..7374fb6 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "@vitejs/plugin-vue": "^5.0.4", "@vitest/coverage-v8": "^1.5.0", "@vitest/ui": "^1.5.0", - "@vue/test-utils": "^2.4.5", + "@vue/test-utils": "github:nbonamy/test-utils#keyboardevent-code", "dotenv": "^16.4.5", "electron": "29.1.6", "electron-devtools-installer": "^3.2.0", diff --git a/tests/components/input_shortcut.test.ts b/tests/components/input_shortcut.test.ts new file mode 100644 index 0000000..55b6625 --- /dev/null +++ b/tests/components/input_shortcut.test.ts @@ -0,0 +1,66 @@ + +import { vi, expect, test, beforeEach } from 'vitest' +import { mount, VueWrapper } from '@vue/test-utils' +import InputShortcut from '../../src/components/InputShortcut.vue' + +let wrapper: VueWrapper + +window.api = { + platform: 'darwin', + shortcuts: { + register: vi.fn(), + unregister: vi.fn(), + } +} + +beforeEach(() => { + wrapper = mount(InputShortcut, { + props: { + onChange: vi.fn(), + } + }) +}) + +test('Create', async () => { + expect(wrapper.exists()).toBe(true) + expect(wrapper.find('input').exists()).toBe(true) +}) + +test('Focus', async () => { + await wrapper.find('input').trigger('focus') + expect(window.api.shortcuts.unregister).toHaveBeenCalled() +}) + +test('Blur', async () => { + await wrapper.find('input').trigger('blur') + expect(window.api.shortcuts.register).toHaveBeenCalled() +}) + +test('Input value', async () => { + expect(wrapper.find('input').element.value).toBe('') + await wrapper.find('input').trigger('keydown', { code: 'Space', key: ' ', keyCode: 32, ctrlKey: true }) + expect(wrapper.find('input').element.value).toBe('⌃Space') +}) + +test('Delete value with backspace', async () => { + await wrapper.find('input').trigger('keydown', { code: 'Space', key: ' ', keyCode: 32, ctrlKey: true }) + expect(wrapper.find('input').element.value).not.toBe('') + await wrapper.find('input').trigger('keydown', { code: 'Backspace', key: 'Backspace', keyCode: 8 }) + expect(wrapper.find('input').element.value).toBe('') +}) + +test('Delete value with icon', async () => { + await wrapper.find('input').trigger('keydown', { code: 'Space', key: ' ', keyCode: 32, ctrlKey: true }) + expect(wrapper.find('input').element.value).not.toBe('') + await wrapper.find('.icon').trigger('click') + expect(wrapper.find('input').element.value).toBe('') +}) + +test('Invalid shortcuts', async () => { + await wrapper.find('input').trigger('keydown', { code: 'Space', key: ' ', keyCode: 32 }) + expect(wrapper.find('input').element.value).toBe('') + await wrapper.find('input').trigger('keydown', { code: 'Space', key: ' ', keyCode: 14, ctrlKey: true }) + expect(wrapper.find('input').element.value).toBe('') + await wrapper.find('input').trigger('keydown', { code: 'Shift', key: ' ', keyCode: 32, ctrlKey: true }) + expect(wrapper.find('input').element.value).toBe('') +})