import { __unstable__loadDesignSystem } from '@tailwindcss/node'
import { expect, test } from 'vitest'
import { migrateArbitraryValueToBareValue } from './migrate-arbitrary-value-to-bare-value'
test.each([
['aspect-[12/34]', 'aspect-12/34'],
['aspect-[1.2/34]', 'aspect-[1.2/34]'],
['col-start-[7]', 'col-start-7'],
['flex-[2]', 'flex-2'],
['grid-cols-[subgrid]', 'grid-cols-subgrid'],
['grid-rows-[subgrid]', 'grid-rows-subgrid'],
['font-stretch-[50%]', 'font-stretch-50%'],
['font-stretch-[50.5%]', 'font-stretch-[50.5%]'],
['font-stretch-[201%]', 'font-stretch-[201%]'],
['font-stretch-[49%]', 'font-stretch-[49%]'],
['font-stretch-[1/2]', 'font-stretch-[1/2]'],
['from-[28%]', 'from-28%'],
['via-[28%]', 'via-28%'],
['to-[28%]', 'to-28%'],
['from-[28.5%]', 'from-[28.5%]'],
['via-[28.5%]', 'via-[28.5%]'],
['to-[28.5%]', 'to-[28.5%]'],
['text-[1/2]', 'text-[1/2]'],
['leading-[123]', 'leading-[123]'],
['data-[selected]:flex', 'data-selected:flex'],
['data-[foo=bar]:flex', 'data-[foo=bar]:flex'],
['supports-[gap]:flex', 'supports-gap:flex'],
['supports-[display:grid]:flex', 'supports-[display:grid]:flex'],
['group-data-[selected]:flex', 'group-data-selected:flex'],
['group-data-[foo=bar]:flex', 'group-data-[foo=bar]:flex'],
['group-has-data-[selected]:flex', 'group-has-data-selected:flex'],
['aria-[selected]:flex', 'aria-[selected]:flex'],
['aria-[selected="true"]:flex', 'aria-selected:flex'],
['aria-[selected*="true"]:flex', 'aria-[selected*="true"]:flex'],
['group-aria-[selected]:flex', 'group-aria-[selected]:flex'],
['group-aria-[selected="true"]:flex', 'group-aria-selected:flex'],
['group-has-aria-[selected]:flex', 'group-has-aria-[selected]:flex'],
['max-lg:hover:data-[selected]:flex!', 'max-lg:hover:data-selected:flex!'],
[
'data-[selected]:aria-[selected="true"]:aspect-[12/34]',
'data-selected:aria-selected:aspect-12/34',
],
])('%s => %s (%#)', async (candidate, result) => {
let designSystem = await __unstable__loadDesignSystem('@import "tailwindcss";', {
base: __dirname,
})
expect(migrateArbitraryValueToBareValue(designSystem, {}, candidate)).toEqual(result)
})