Repository URL to install this package:
Version:
1.0.1-0 ▾
|
// @flow
import flatten from '../flatten'
describe('flatten', () => {
it('doesnt merge strings', () => {
expect(flatten(['foo', 'bar', 'baz'])).toEqual(['foo', 'bar', 'baz'])
})
it('drops nulls', () => {
// $FlowInvalidInputTest
expect(flatten(['foo', false, 'bar', undefined, 'baz', null])).toEqual([
'foo',
'bar',
'baz',
])
})
it('doesnt drop any numbers', () => {
expect(flatten(['foo', 0, 'bar', NaN, 'baz', -1])).toEqual([
'foo',
'0',
'bar',
'NaN',
'baz',
'-1',
])
})
it('toStrings everything', () => {
// $FlowInvalidInputTest
expect(flatten([1, true])).toEqual(['1', 'true'])
})
it('hypenates objects', () => {
const obj = {
fontSize: '14px',
WebkitFilter: 'blur(2px)',
}
const css = 'font-size: 14px; -webkit-filter: blur(2px);'
// $FlowFixMe
expect(flatten([obj])).toEqual([css])
// $FlowFixMe
expect(flatten(['some:thing;', obj, 'something: else;'])).toEqual([
'some:thing;',
css,
'something: else;',
])
})
it('handles nested objects', () => {
const obj = {
fontSize: '14px',
'@media screen and (min-width: 250px)': {
fontSize: '16px',
},
'&:hover': {
fontWeight: 'bold',
},
}
const css =
'font-size: 14px; @media screen and (min-width: 250px) {\n font-size: 16px;\n} &:hover {\n font-weight: bold;\n}'
// $FlowFixMe
expect(flatten([obj])).toEqual([css])
// $FlowFixMe
expect(flatten(['some:thing;', obj, 'something: else;'])).toEqual([
'some:thing;',
css,
'something: else;',
])
})
it('toStrings class instances', () => {
class SomeClass {
toString() {
return 'some: thing;'
}
}
// $FlowFixMe
expect(flatten([new SomeClass()])).toEqual(['some: thing;'])
})
it('flattens subarrays', () => {
expect(flatten([1, 2, [3, 4, 5], 'come:on;', 'lets:ride;'])).toEqual([
'1',
'2',
'3',
'4',
'5',
'come:on;',
'lets:ride;',
])
})
it('defers functions', () => {
const func = () => 'bar'
const funcWFunc = () => ['static', subfunc => (subfunc ? 'bar' : 'baz')]
expect(flatten(['foo', func, 'baz'])).toEqual(['foo', func, 'baz'])
expect(flatten(['foo', funcWFunc, 'baz'])).toEqual([
'foo',
funcWFunc,
'baz',
])
})
it('executes functions', () => {
const func = () => 'bar'
expect(flatten(['foo', func, 'baz'], { bool: true })).toEqual([
'foo',
'bar',
'baz',
])
})
it('passes values to function', () => {
const func = ({ bool }) => (bool ? 'bar' : 'baz')
expect(flatten(['foo', func], { bool: true })).toEqual(['foo', 'bar'])
expect(flatten(['foo', func], { bool: false })).toEqual(['foo', 'baz'])
})
it('recursively calls functions', () => {
const func = () => ['static', ({ bool }) => (bool ? 'bar' : 'baz')]
expect(flatten(['foo', func], { bool: true })).toEqual([
'foo',
'static',
'bar',
])
expect(flatten(['foo', func], { bool: false })).toEqual([
'foo',
'static',
'baz',
])
})
})