48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
// @vitest-environment happy-dom
|
|
import { beforeEach, describe, expect, it } from 'vitest'
|
|
import { createPinia, setActivePinia } from 'pinia'
|
|
import { nextTick } from 'vue'
|
|
import { useThemeStore } from './theme'
|
|
|
|
beforeEach(() => {
|
|
localStorage.clear()
|
|
document.documentElement.removeAttribute('data-theme')
|
|
document.documentElement.removeAttribute('data-code-theme')
|
|
setActivePinia(createPinia())
|
|
Object.defineProperty(window, 'matchMedia', {
|
|
configurable: true,
|
|
value: () => ({ matches: false }),
|
|
})
|
|
})
|
|
|
|
describe('代码块主题偏好', () => {
|
|
it('跟随应用主题选择对应的 GitHub 代码主题', async () => {
|
|
const store = useThemeStore()
|
|
store.applyTheme('dark')
|
|
await nextTick()
|
|
|
|
expect(store.resolvedCodeBlockTheme).toBe('github-dark')
|
|
expect(document.documentElement.dataset.codeTheme).toBe('github-dark')
|
|
})
|
|
|
|
it('允许代码块主题独立于应用主题', async () => {
|
|
const store = useThemeStore()
|
|
store.applyTheme('dark')
|
|
store.codeBlockTheme = 'github-light'
|
|
await nextTick()
|
|
|
|
expect(store.resolvedCodeBlockTheme).toBe('github-light')
|
|
expect(document.documentElement.dataset.codeTheme).toBe('github-light')
|
|
})
|
|
|
|
it('恢复持久化的代码块主题偏好', async () => {
|
|
localStorage.setItem('editor-appearance', JSON.stringify({ codeBlockTheme: 'github-dark' }))
|
|
const store = useThemeStore()
|
|
store.initTheme()
|
|
await nextTick()
|
|
|
|
expect(store.codeBlockTheme).toBe('github-dark')
|
|
expect(document.documentElement.dataset.codeTheme).toBe('github-dark')
|
|
})
|
|
})
|