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.
237 lines
4.3 KiB
237 lines
4.3 KiB
3 years ago
|
import { space } from '../src'
|
||
|
|
||
|
test('returns style objects', () => {
|
||
|
const styles = space({
|
||
|
m: '4px',
|
||
|
})
|
||
|
expect(styles).toEqual({ margin: '4px' })
|
||
|
})
|
||
|
|
||
|
test('returns 0 values', () => {
|
||
|
const styles = space({ m: 0 })
|
||
|
expect(styles).toEqual({ margin: 0 })
|
||
|
})
|
||
|
|
||
|
test('returns negative pixel values', () => {
|
||
|
const styles = space({ m: -2 })
|
||
|
expect(styles).toEqual({ margin: -8 })
|
||
|
})
|
||
|
|
||
|
test('returns negative em values', () => {
|
||
|
const styles = space({ m: '-16em' })
|
||
|
expect(styles).toEqual({ margin: '-16em' })
|
||
|
})
|
||
|
|
||
|
test('returns negative theme values', () => {
|
||
|
const styles = space({
|
||
|
theme: {
|
||
|
space: [0, 4, 8],
|
||
|
},
|
||
|
m: -2,
|
||
|
})
|
||
|
expect(styles).toEqual({ margin: -8 })
|
||
|
})
|
||
|
|
||
|
test('returns positive theme values', () => {
|
||
|
const styles = space({
|
||
|
theme: {
|
||
|
space: [0, '1em', '2em'],
|
||
|
},
|
||
|
m: 2,
|
||
|
})
|
||
|
expect(styles).toEqual({ margin: '2em' })
|
||
|
})
|
||
|
|
||
|
test('returns responsive values', () => {
|
||
|
const styles = space({
|
||
|
m: [0, 2, 3],
|
||
|
})
|
||
|
expect(styles).toEqual({
|
||
|
margin: 0,
|
||
|
'@media screen and (min-width: 40em)': { margin: 8 },
|
||
|
'@media screen and (min-width: 52em)': { margin: 16 },
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('returns aliased values', () => {
|
||
|
const styles = space({
|
||
|
px: 2,
|
||
|
})
|
||
|
expect(styles).toEqual({ paddingLeft: 8, paddingRight: 8 })
|
||
|
})
|
||
|
|
||
|
test('returns string values from theme', () => {
|
||
|
const styles = space({
|
||
|
theme: {
|
||
|
space: [0, '1em'],
|
||
|
},
|
||
|
padding: 1,
|
||
|
})
|
||
|
expect(styles).toEqual({ padding: '1em' })
|
||
|
})
|
||
|
|
||
|
test('returns negative string values from theme', () => {
|
||
|
const styles = space({
|
||
|
theme: {
|
||
|
space: [0, '1em'],
|
||
|
},
|
||
|
margin: -1,
|
||
|
})
|
||
|
expect(styles).toEqual({ margin: '-1em' })
|
||
|
})
|
||
|
|
||
|
test('returns values from theme object', () => {
|
||
|
const styles = space({
|
||
|
theme: {
|
||
|
space: { sm: 1 },
|
||
|
},
|
||
|
margin: 'sm',
|
||
|
})
|
||
|
expect(styles).toEqual({ margin: 1 })
|
||
|
})
|
||
|
|
||
|
test('pl prop sets paddingLeft', () => {
|
||
|
const styles = space({ pl: 2 })
|
||
|
expect(styles).toEqual({ paddingLeft: 8 })
|
||
|
})
|
||
|
|
||
|
test('pl prop sets paddingLeft 0', () => {
|
||
|
const styles = space({ pl: 0 })
|
||
|
expect(styles).toEqual({ paddingLeft: 0 })
|
||
|
})
|
||
|
|
||
|
test('px prop overrides pl prop', () => {
|
||
|
const styles = space({
|
||
|
pl: 1,
|
||
|
px: 2,
|
||
|
})
|
||
|
expect(styles).toEqual({ paddingLeft: 8, paddingRight: 8 })
|
||
|
})
|
||
|
|
||
|
test('py prop overrides pb prop', () => {
|
||
|
const styles = space({
|
||
|
pb: 1,
|
||
|
py: 2,
|
||
|
})
|
||
|
expect(styles).toEqual({ paddingTop: 8, paddingBottom: 8 })
|
||
|
})
|
||
|
|
||
|
test('mx prop overrides mr prop', () => {
|
||
|
const styles = space({
|
||
|
mr: 1,
|
||
|
mx: 2,
|
||
|
})
|
||
|
expect(styles).toEqual({ marginLeft: 8, marginRight: 8 })
|
||
|
})
|
||
|
|
||
|
test('my prop overrides mt prop', () => {
|
||
|
const styles = space({
|
||
|
mt: 1,
|
||
|
my: 2,
|
||
|
})
|
||
|
expect(styles).toEqual({ marginTop: 8, marginBottom: 8 })
|
||
|
})
|
||
|
|
||
|
test('margin overrides m prop', () => {
|
||
|
const styles = space({
|
||
|
m: 1,
|
||
|
margin: 2,
|
||
|
})
|
||
|
expect(styles).toEqual({ margin: 8 })
|
||
|
})
|
||
|
|
||
|
test('handles margin with no theme', () => {
|
||
|
const styles = space({
|
||
|
mt: 12,
|
||
|
})
|
||
|
expect(styles).toEqual({
|
||
|
marginTop: 12,
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('handles overriding margin/padding shortcut props', () => {
|
||
|
const styles = space({
|
||
|
m: 4,
|
||
|
mx: 3,
|
||
|
mr: 2,
|
||
|
p: 4,
|
||
|
py: 3,
|
||
|
pt: 2,
|
||
|
})
|
||
|
expect(styles).toEqual({
|
||
|
margin: 32,
|
||
|
marginLeft: 16,
|
||
|
marginRight: 8,
|
||
|
padding: 32,
|
||
|
paddingBottom: 16,
|
||
|
paddingTop: 8,
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('single directions override axes', () => {
|
||
|
const styles = space({
|
||
|
mx: 3,
|
||
|
ml: 1,
|
||
|
mr: 2,
|
||
|
px: 3,
|
||
|
pl: 1,
|
||
|
pr: 2,
|
||
|
})
|
||
|
expect(styles).toEqual({
|
||
|
marginLeft: 4,
|
||
|
marginRight: 8,
|
||
|
paddingLeft: 4,
|
||
|
paddingRight: 8,
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('supports object values', () => {
|
||
|
const styles = space({
|
||
|
m: {
|
||
|
_: 0,
|
||
|
0: 1,
|
||
|
1: 2,
|
||
|
}
|
||
|
})
|
||
|
expect(styles).toEqual({
|
||
|
margin: 0,
|
||
|
'@media screen and (min-width: 40em)': {
|
||
|
margin: 4,
|
||
|
},
|
||
|
'@media screen and (min-width: 52em)': {
|
||
|
margin: 8,
|
||
|
},
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('supports non-array breakpoints', () => {
|
||
|
const theme = {
|
||
|
disableStyledSystemCache: true,
|
||
|
breakpoints: {
|
||
|
small: '40em',
|
||
|
medium: '52em',
|
||
|
}
|
||
|
}
|
||
|
const styles = space({
|
||
|
theme,
|
||
|
p: {
|
||
|
small: 2,
|
||
|
},
|
||
|
m: {
|
||
|
_: 0,
|
||
|
small: 1,
|
||
|
medium: 2,
|
||
|
}
|
||
|
})
|
||
|
expect(styles).toEqual({
|
||
|
margin: 0,
|
||
|
'@media screen and (min-width: 40em)': {
|
||
|
margin: 4,
|
||
|
padding: 8,
|
||
|
},
|
||
|
'@media screen and (min-width: 52em)': {
|
||
|
margin: 8,
|
||
|
},
|
||
|
})
|
||
|
})
|