import { describe, it, expect, beforeEach, afterEach } from 'vitest'; import { mkdtempSync, readFileSync, rmSync, copyFileSync } from 'node:fs'; import { tmpdir } from 'node:os'; import { join, resolve } from 'node:path'; import { devIndicesPlugin } from '../index'; const FIXTURE = resolve(__dirname, 'fixtures/sample.vue'); function runTransform(filePath: string, manifestPath: string) { const plugin = devIndicesPlugin({ manifestPath, appRoot: resolve(__dirname, '..', '..', '..'), enabled: true, }); // buildStart loads existing manifest (or createEmpty() if missing) if (typeof plugin.buildStart === 'function') (plugin.buildStart as Function).call({}); const source = readFileSync(filePath, 'utf8'); const result = (plugin.transform as Function).call({}, source, filePath); // buildEnd flushes manifest to disk if (typeof plugin.buildEnd === 'function') (plugin.buildEnd as Function).call({}); return result?.code ?? result; } describe('vite-plugin-dev-indices integration', () => { let dir: string; let manifestPath: string; let workingFixture: string; beforeEach(() => { dir = mkdtempSync(join(tmpdir(), 'dx-int-')); manifestPath = join(dir, 'dev-indices.json'); workingFixture = join(dir, 'sample.vue'); copyFileSync(FIXTURE, workingFixture); }); afterEach(() => rmSync(dir, { recursive: true, force: true })); it('injects data-dx attributes into every element', () => { const code = runTransform(workingFixture, manifestPath); expect(code).toMatch(/