UNPKG

@activelylearn/material-ui

Version:

Material-UI's workspace package

365 lines (353 loc) 10.7 kB
// @flow import { assert } from 'chai'; import consoleErrorMock from 'test/utils/consoleErrorMock'; import createPalette, { dark, light } from './createPalette'; import { indigo, pink, deepOrange, green, red } from '../colors'; import { lighten, darken } from '../styles/colorManipulator'; describe('createPalette()', () => { before(() => { consoleErrorMock.spy(); }); after(() => { consoleErrorMock.reset(); }); it('should create a material design palette according to spec', () => { const palette = createPalette({}); assert.strictEqual( palette.primary.main, indigo[500], 'should use indigo[500] as the default primary main color', ); assert.strictEqual( palette.primary.light, indigo[300], 'should use indigo[300] as the default primary light color', ); assert.strictEqual( palette.primary.dark, indigo[700], 'should use indigo[700] as the default primary dark color', ); assert.strictEqual( palette.primary.contrastText, dark.text.primary, 'should use dark.text.primary as the default primary contrastText color', ); assert.strictEqual( palette.secondary.main, pink.A400, 'should use pink.A400 as the default secondary main color', ); assert.strictEqual( palette.secondary.light, pink.A200, 'should use pink.A200 as the default secondary light color', ); assert.strictEqual( palette.secondary.dark, pink.A700, 'should use pink.A700 as the default secondary dark color', ); assert.strictEqual( palette.secondary.contrastText, dark.text.primary, 'should use dark.text.primary as the default secondary contrastText color', ); assert.strictEqual( palette.error.main, red[500], 'should use red[500] as the default error main color', ); assert.strictEqual( palette.error.light, red[300], 'should use red[300] as the default error light color', ); assert.strictEqual( palette.error.dark, red[700], 'should use red[700] as the default error dark color', ); assert.strictEqual( palette.text, light.text, 'should use light theme text for a light theme by default', ); }); it('should create a palette with Material colors', () => { const palette = createPalette({ primary: deepOrange, secondary: green, error: pink, }); assert.strictEqual( palette.primary.main, deepOrange[500], 'should use deepOrange[500] as the primary main color', ); assert.strictEqual( palette.primary.light, deepOrange[300], 'should use deepOrange[300] as the primary light color', ); assert.strictEqual( palette.primary.dark, deepOrange[700], 'should use deepOrange[700] as the primary dark color', ); assert.strictEqual( palette.secondary.main, green.A400, 'should use green.A400 as the secondary main color', ); assert.strictEqual( palette.secondary.light, green.A200, 'should use green.A200 as the secondary light color', ); assert.strictEqual( palette.secondary.dark, green.A700, 'should use green.A700 as the secondary dark color', ); assert.strictEqual( palette.error.main, pink[500], 'should use pink[500] as the error main color', ); assert.strictEqual( palette.error.light, pink[300], 'should use pink[300] as the error light color', ); assert.strictEqual( palette.error.dark, pink[700], 'should use pink[700] as the error dark color', ); assert.strictEqual(palette.text, light.text, 'should use light theme text'); }); it('should create a palette with custom colors', () => { const palette = createPalette({ primary: { main: deepOrange[500], light: deepOrange[300], dark: deepOrange[700], contrastText: '#ffffff', }, secondary: { main: green.A400, light: green.A200, dark: green.A700, contrastText: '#000000', }, error: { main: pink[500], light: pink[300], dark: pink[700], contrastText: '#00ff00', }, }); assert.strictEqual( palette.primary.main, deepOrange[500], 'should use deepOrange[500] as the primary main color', ); assert.strictEqual( palette.primary.light, deepOrange[300], 'should use deepOrange[300] as the primary light color', ); assert.strictEqual( palette.primary.dark, deepOrange[700], 'should use deepOrange[700] as the primary dark color', ); assert.strictEqual( palette.primary.contrastText, '#ffffff', 'should use #ffffff as the secondary contrastText color', ); assert.strictEqual( palette.secondary.main, green.A400, 'should use green.A400 as the secondary main color', ); assert.strictEqual( palette.secondary.light, green.A200, 'should use green.A200 as the secondary light color', ); assert.strictEqual( palette.secondary.dark, green.A700, 'should use green.A700 as the secondary dark color', ); assert.strictEqual( palette.secondary.contrastText, '#000000', 'should use #000000 as the secondary contrastText color', ); assert.strictEqual( palette.error.main, pink[500], 'should use pink[500] as the error main color', ); assert.strictEqual( palette.error.light, pink[300], 'should use pink[300] as the error light color', ); assert.strictEqual( palette.error.dark, pink[700], 'should use pink[700] as the error dark color', ); assert.strictEqual( palette.error.contrastText, '#00ff00', 'should use #00ff00 as the error contrastText color', ); assert.strictEqual(palette.text, light.text, 'should use light theme text'); }); it('should calculate light and dark colors if not provided', () => { const palette = createPalette({ primary: { main: deepOrange[500] }, secondary: { main: green.A400 }, error: { main: pink[500] }, }); assert.strictEqual( palette.primary.main, deepOrange[500], 'should use deepOrange[500] as the primary main color', ); assert.strictEqual( palette.primary.light, lighten(deepOrange[500], 0.2), 'should use lighten(deepOrange[500], 0.2) as the primary light color', ); assert.strictEqual( palette.primary.dark, darken(deepOrange[500], 0.3), 'should use darken(deepOrange[500], 0.3) as the primary dark color', ); assert.strictEqual( palette.secondary.main, green.A400, 'should use green.A400 as the secondary main color', ); assert.strictEqual( palette.secondary.light, lighten(green.A400, 0.2), 'should use lighten(green.A400, 0.2) as the secondary light color', ); assert.strictEqual( palette.secondary.dark, darken(green.A400, 0.3), 'should use darken(green.A400, 0.3) as the secondary dark color', ); assert.strictEqual( palette.error.main, pink[500], 'should use pink[500] as the error main color', ); assert.strictEqual( palette.error.light, lighten(pink[500], 0.2), 'should use lighten(pink[500], 0.2) as the error light color', ); assert.strictEqual( palette.error.dark, darken(pink[500], 0.3), 'should use darken(pink[500], 0.3) as the error dark color', ); }); it('should calculate light and dark colors using the provided tonalOffset', () => { const palette = createPalette({ primary: { main: deepOrange[500] }, secondary: { main: green.A400 }, error: { main: red[500] }, tonalOffset: 0.1, }); // primary assert.strictEqual( palette.primary.main, deepOrange[500], 'should use deepOrange[500] as the primary main color', ); assert.strictEqual( palette.primary.light, lighten(deepOrange[500], 0.1), 'should use lighten(deepOrange[500], 0.1) as the primary light color', ); assert.strictEqual( palette.primary.dark, darken(deepOrange[500], 0.15), 'should use darken(deepOrange[500], 0.1) as the primary dark color', ); // secondary assert.strictEqual( palette.secondary.main, green.A400, 'should use green.A400 as the secondary main color', ); assert.strictEqual( palette.secondary.light, lighten(green.A400, 0.1), 'should use lighten(green.A400, 0.1) as the secondary light color', ); assert.strictEqual( palette.secondary.dark, darken(green.A400, 0.15), 'should use darken(green.A400, 0.1) as the secondary dark color', ); // error assert.strictEqual(palette.error.main, red[500], 'should use red[500] as the error main color'); assert.strictEqual( palette.error.light, lighten(red[500], 0.1), 'should use lighten(red[500], 0.1) as the error light color', ); assert.strictEqual( palette.error.dark, darken(red[500], 0.15), 'should use darken(red[500], 0.1) as the error dark color', ); }); it('should calculate contrastText using the provided contrastThreshold', () => { const palette = createPalette({ contrastThreshold: 7 }); assert.strictEqual( palette.primary.contrastText, light.text.primary, 'should use dark.text.primary as the default primary contrastText color', ); assert.strictEqual( palette.secondary.contrastText, light.text.primary, 'should use dark.text.primary as the default secondary contrastText color', ); }); it('should create a dark palette', () => { const palette = createPalette({ type: 'dark' }); assert.strictEqual( palette.primary.main, indigo[500], 'should use indigo as the default primary color', ); assert.strictEqual( palette.secondary.main, pink.A400, 'should use pink as the default secondary color', ); assert.strictEqual(palette.text, dark.text, 'should use dark theme text'); assert.strictEqual(consoleErrorMock.callCount(), 0); }); it('should throw an exception when an invalid type is specified', () => { createPalette({ type: 'foo' }); assert.strictEqual(consoleErrorMock.callCount(), 1); assert.match( consoleErrorMock.args()[0][0], /Material-UI: the palette type `foo` is not supported/, ); }); });