client-styles.client.spec.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. // @vitest-environment jsdom
  2. /** Dynamic ui-theme entry owns the global styles in dependency order. */
  3. import { Context } from '@deepseek-ai/cordis'
  4. import { afterEach, describe, expect, it } from 'vitest'
  5. import { installThemeStyles } from '../src/client/styles.ts'
  6. const PLUGIN_ID = '@deepseek-ai/dsh-client-ui-theme'
  7. afterEach(() => {
  8. document.head.querySelectorAll(`style[data-plugin="${PLUGIN_ID}"]`).forEach((node) => { node.remove() })
  9. })
  10. describe('ui-theme client styles', () => {
  11. it('mounts every global sheet in dependency order and removes them on dispose', async () => {
  12. const ctx = new Context()
  13. const fiber = ctx.plugin({
  14. apply(scope) { installThemeStyles(scope) },
  15. })
  16. await fiber.await()
  17. const styles = [...document.head.querySelectorAll<HTMLStyleElement>(`style[data-plugin="${PLUGIN_ID}"]`)]
  18. expect(styles.map(style => style.dataset.pluginCss)).toEqual([
  19. `${PLUGIN_ID}/base.css`,
  20. `${PLUGIN_ID}/corner-shape.css`,
  21. `${PLUGIN_ID}/design-platform.css`,
  22. `${PLUGIN_ID}/scrollbar.css`,
  23. `${PLUGIN_ID}/gradient-shadow-text.css`,
  24. `${PLUGIN_ID}/shiki.css`,
  25. ])
  26. await fiber.dispose()
  27. expect(document.head.querySelectorAll(`style[data-plugin="${PLUGIN_ID}"]`)).toHaveLength(0)
  28. })
  29. })