You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
2.6 KiB

import { system, compose } from '../src'
const theme = {
colors: {
primary: 'rebeccapurple',
secondary: 'papayawhip',
},
fontSize: [0, 4, 8, 16],
}
const parser = system({
color: {
property: 'color',
scale: 'colors',
},
fontSize: true,
})
test('uses default breakpoints', () => {
const styles = parser({
theme: theme,
fontSize: [1, 2, 3],
color: ['primary', null, 'secondary'],
})
expect(styles).toEqual({
color: 'rebeccapurple',
fontSize: 4,
'@media screen and (min-width: 40em)': {
fontSize: 8,
},
'@media screen and (min-width: 52em)': {
fontSize: 16,
color: 'papayawhip',
},
})
})
// Per default, we expect it to be impossible to override breakpoints
test('does *not* use dynamically changed breakpoints', () => {
const styles = parser({
theme: { ...theme, breakpoints: ['11em', '22em', '33em'] },
fontSize: [1, 2, 3],
color: ['primary', null, 'secondary'],
})
expect(styles).toEqual({
color: 'rebeccapurple',
fontSize: 4,
'@media screen and (min-width: 40em)': {
fontSize: 8,
},
'@media screen and (min-width: 52em)': {
fontSize: 16,
color: 'papayawhip',
},
})
})
// With caching disabled, we expect it to be possible to change breakpoints
test('uses dynamically changed breakpoints', () => {
const firstStyles = parser({
theme: {
...theme,
breakpoints: ['11em', '22em', '33em'],
disableStyledSystemCache: true,
},
fontSize: [1, 2, 3],
color: ['primary', null, 'secondary'],
})
expect(firstStyles).toEqual({
color: 'rebeccapurple',
fontSize: 4,
'@media screen and (min-width: 11em)': {
fontSize: 8,
},
'@media screen and (min-width: 22em)': {
fontSize: 16,
color: 'papayawhip',
},
})
const secondStyles = parser({
theme: {
...theme,
breakpoints: ['9em', '8em', '7em'],
disableStyledSystemCache: true,
},
fontSize: [1, 2, 3],
color: ['primary', null, 'secondary'],
})
expect(secondStyles).toEqual({
color: 'rebeccapurple',
fontSize: 4,
'@media screen and (min-width: 9em)': {
fontSize: 8,
},
'@media screen and (min-width: 8em)': {
fontSize: 16,
color: 'papayawhip',
},
})
const thirdStyles = parser({
theme: theme,
fontSize: [1, 2, 3],
color: ['primary', null, 'secondary'],
})
expect(thirdStyles).toEqual({
color: 'rebeccapurple',
fontSize: 4,
'@media screen and (min-width: 9em)': {
fontSize: 8,
},
'@media screen and (min-width: 8em)': {
fontSize: 16,
color: 'papayawhip',
},
})
})