import { assert, test, afterEach } from 'vitest' import { twind, virtual } from '@twind/core' import presetTailwind from '@twind/preset-tailwind' import presetExt from '.' import data from './preset-ext.test.json' const tw = twind( { presets: [presetExt(), presetTailwind({ disablePreflight: true })], variants: [['not-logged-in', 'body:not(.logged-in) &']], }, virtual(), ) afterEach(() => tw.clear()) Object.entries(data) .filter(([tokens]) => !tokens.startsWith('//')) .map(([tokens, declarations]): [string, string, string[]] => { if (Array.isArray(declarations)) { return Array.isArray(declarations[1]) ? [tokens, declarations[0] as string, declarations[1]] : [tokens, tokens, declarations as string[]] } return [tokens, tokens, [declarations]] }) .forEach(([tokens, classNames, rules]) => test(`${JSON.stringify(tokens)} => ${classNames}`, () => { assert.strictEqual(tw(tokens), classNames) assert.deepEqual(tw.target, rules) // Cached access assert.strictEqual(tw(tokens), classNames) assert.deepEqual(tw.target, rules) }), ) test('dark class using peer', () => { const tw = twind( { presets: [presetExt(), presetTailwind({ disablePreflight: true })], darkMode: 'class', }, virtual(), ) assert.strictEqual(tw('dark:group-hocus:underline'), 'dark:group-hocus:underline') assert.deepEqual(tw.target, [ '.dark .group:hover .dark\\:group-hocus\\:underline,.dark .group:focus-visible .dark\\:group-hocus\\:underline{text-decoration-line:underline}', ]) })