customElementCasing.spec.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { vi } from 'vitest'
  2. import { createApp } from '../src'
  3. // https://github.com/vuejs/docs/pull/1890
  4. // https://github.com/vuejs/core/issues/5401
  5. // https://github.com/vuejs/docs/issues/1708
  6. test('custom element event casing', () => {
  7. customElements.define(
  8. 'custom-event-casing',
  9. class Foo extends HTMLElement {
  10. connectedCallback() {
  11. this.dispatchEvent(new Event('camelCase'))
  12. this.dispatchEvent(new Event('CAPScase'))
  13. this.dispatchEvent(new Event('PascalCase'))
  14. }
  15. }
  16. )
  17. const container = document.createElement('div')
  18. document.body.appendChild(container)
  19. const handler = vi.fn()
  20. const handler2 = vi.fn()
  21. createApp({
  22. template: `
  23. <custom-event-casing
  24. @camelCase="handler"
  25. @CAPScase="handler"
  26. @PascalCase="handler"
  27. v-on="{
  28. camelCase: handler2,
  29. CAPScase: handler2,
  30. PascalCase: handler2
  31. }" />`,
  32. methods: {
  33. handler,
  34. handler2
  35. }
  36. }).mount(container)
  37. expect(handler).toHaveBeenCalledTimes(3)
  38. expect(handler2).toHaveBeenCalledTimes(3)
  39. })