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
			
		
		
			
		
	
	
					119 lines
				
				2.6 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								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',
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 |