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, | ||
|  |     }, | ||
|  |   }) | ||
|  | }) |