mirror of
https://github.com/tailwindlabs/tailwindcss.git
synced 2025-12-08 21:36:08 +00:00
134 lines
3.2 KiB
JavaScript
134 lines
3.2 KiB
JavaScript
import generateModules from '../src/util/generateModules'
|
|
import defineClasses from '../src/util/defineClasses'
|
|
|
|
function textAlign() {
|
|
return defineClasses({
|
|
'text-left': { 'text-align': 'left' },
|
|
'text-right': { 'text-align': 'right' },
|
|
'text-center': { 'text-align': 'center' },
|
|
})
|
|
}
|
|
|
|
function display() {
|
|
return defineClasses({
|
|
block: { display: 'block' },
|
|
inline: { display: 'inline' },
|
|
'inline-block': { display: 'inline-block' },
|
|
})
|
|
}
|
|
|
|
function borderStyle() {
|
|
return defineClasses({
|
|
'border-solid': { 'border-style': 'solid' },
|
|
'border-dashed': { 'border-style': 'dashed' },
|
|
'border-dotted': { 'border-style': 'dotted' },
|
|
})
|
|
}
|
|
|
|
test('an empty variants list generates a @variants at-rule with no parameters', () => {
|
|
const result = generateModules([{ name: 'textAlign', generator: textAlign }], {
|
|
textAlign: [],
|
|
})
|
|
|
|
const expected = `
|
|
@variants {
|
|
.text-left { text-align: left }
|
|
.text-right { text-align: right }
|
|
.text-center { text-align: center }
|
|
}
|
|
`
|
|
expect(result.toString()).toMatchCss(expected)
|
|
})
|
|
|
|
test('a `false` variants list generates no output', () => {
|
|
const result = generateModules([{ name: 'textAlign', generator: textAlign }], {
|
|
textAlign: false,
|
|
})
|
|
|
|
expect(result.toString()).toMatchCss('')
|
|
})
|
|
|
|
test('specified variants are included in the @variants at-rule', () => {
|
|
const result = generateModules([{ name: 'textAlign', generator: textAlign }], {
|
|
textAlign: ['responsive', 'hover'],
|
|
})
|
|
|
|
const expected = `
|
|
@variants responsive, hover {
|
|
.text-left { text-align: left }
|
|
.text-right { text-align: right }
|
|
.text-center { text-align: center }
|
|
}
|
|
`
|
|
expect(result.toString()).toMatchCss(expected)
|
|
})
|
|
|
|
test('options must provide variants for every module', () => {
|
|
expect(() => {
|
|
generateModules(
|
|
[{ name: 'textAlign', generator: textAlign }, { name: 'display', generator: display }],
|
|
{
|
|
textAlign: [],
|
|
}
|
|
)
|
|
}).toThrow()
|
|
})
|
|
|
|
test('variants can be different for each module', () => {
|
|
const result = generateModules(
|
|
[
|
|
{ name: 'textAlign', generator: textAlign },
|
|
{ name: 'display', generator: display },
|
|
{ name: 'borderStyle', generator: borderStyle },
|
|
],
|
|
{
|
|
textAlign: [],
|
|
display: false,
|
|
borderStyle: ['responsive', 'hover', 'focus'],
|
|
}
|
|
)
|
|
|
|
const expected = `
|
|
@variants {
|
|
.text-left { text-align: left }
|
|
.text-right { text-align: right }
|
|
.text-center { text-align: center }
|
|
}
|
|
|
|
@variants responsive, hover, focus {
|
|
.border-solid { border-style: solid }
|
|
.border-dashed { border-style: dashed }
|
|
.border-dotted { border-style: dotted }
|
|
}
|
|
`
|
|
expect(result.toString()).toMatchCss(expected)
|
|
})
|
|
|
|
test('generators can reference the generatorOptions object', () => {
|
|
const result = generateModules(
|
|
[
|
|
{
|
|
name: 'parameterized',
|
|
generator: generatorParams => {
|
|
return defineClasses({
|
|
foo: { color: generatorParams.color },
|
|
})
|
|
},
|
|
},
|
|
],
|
|
{
|
|
parameterized: [],
|
|
},
|
|
{
|
|
color: 'blue',
|
|
}
|
|
)
|
|
|
|
const expected = `
|
|
@variants {
|
|
.foo { color: blue }
|
|
}
|
|
`
|
|
expect(result.toString()).toMatchCss(expected)
|
|
})
|