code-groups.spec.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435
  1. /** Native code-group markup remains isolated when local search copies a section. */
  2. import assert from 'node:assert/strict'
  3. import { JSDOM } from 'jsdom'
  4. import { createMarkdownRenderer } from 'vitepress'
  5. import { expect, it } from 'vitest'
  6. import { isolateCodeGroupRadios } from '../.vitepress/code-groups.ts'
  7. it('keeps the page selection when a search excerpt selects the same named radio', async () => {
  8. const md = await createMarkdownRenderer(import.meta.dirname, { config: isolateCodeGroupRadios })
  9. const html = md.render('::: code-group\n\n```sh [Linux/macOS]\n. .venv/bin/activate\n```\n\n```powershell [Windows PowerShell]\n.venv\\Scripts\\Activate.ps1\n```\n\n:::\n')
  10. const dom = new JSDOM(`<main>${html}</main><aside>${html}</aside>`)
  11. try {
  12. const { document } = dom.window
  13. const pageRadios = document.querySelectorAll<HTMLInputElement>('main input')
  14. const excerptRadio = document.querySelector<HTMLInputElement>('aside input')
  15. assert(pageRadios[0] && pageRadios[1] && excerptRadio)
  16. pageRadios[1].checked = true
  17. excerptRadio.checked = true
  18. expect(pageRadios[0].checked).toBe(false)
  19. expect(pageRadios[1].checked).toBe(true)
  20. expect(excerptRadio.checked).toBe(true)
  21. expect(pageRadios[0].name).toBe(excerptRadio.name)
  22. expect(pageRadios[0].form).not.toBeNull()
  23. expect(pageRadios[0].form).not.toBe(excerptRadio.form)
  24. expect(document.querySelector('main .tabs')?.hasAttribute('@submit.prevent')).toBe(true)
  25. expect([...document.querySelectorAll('main code')].map(code => code.textContent)).toEqual([
  26. '. .venv/bin/activate', '.venv\\Scripts\\Activate.ps1',
  27. ])
  28. expect(document.querySelectorAll('main .blocks > .active')).toHaveLength(1)
  29. } finally {
  30. dom.window.close()
  31. }
  32. })