diff --git a/src/internalHelpers/errors.md b/src/internalHelpers/errors.md index 86137541..08f6f104 100644 --- a/src/internalHelpers/errors.md +++ b/src/internalHelpers/errors.md @@ -302,3 +302,7 @@ CSS variable not found and no default was provided. ## 75 important requires a valid style object, got a %s instead. + +## 76 + +fromSize and toSize must be provided as stringified numbers with the same units as minScreen and maxScreen. diff --git a/src/mixins/between.js b/src/mixins/between.js index c3597e50..abbf27c7 100644 --- a/src/mixins/between.js +++ b/src/mixins/between.js @@ -54,6 +54,10 @@ export default function between( throw new PolishedError(48) } + if (fromSizeUnit !== minScreenUnit || toSizeUnit !== maxScreenUnit) { + throw new PolishedError(76) + } + const slope = (unitlessFromSize - unitlessToSize) / (unitlessMinScreen - unitlessMaxScreen) const base = unitlessToSize - slope * unitlessMaxScreen diff --git a/src/mixins/test/__snapshots__/between.test.js.snap b/src/mixins/test/__snapshots__/between.test.js.snap index 6752db14..b7574a31 100644 --- a/src/mixins/test/__snapshots__/between.test.js.snap +++ b/src/mixins/test/__snapshots__/between.test.js.snap @@ -3,7 +3,3 @@ exports[`between should return a valid calc formula when not passed min/max screen sizes 1`] = `"calc(-9.09px + 9.09vw)"`; exports[`between should return a valid calc formula when passed min/max screen sizes 1`] = `"calc(-33.33px + 13.33vw)"`; - -exports[`between should return a valid calc formula when passed unitless to/from values as numbers 1`] = `"calc(-9.09 + 9.09vw)"`; - -exports[`between should return a valid calc formula when passed unitless to/from values as strings 1`] = `"calc(-9.09 + 9.09vw)"`; diff --git a/src/mixins/test/between.test.js b/src/mixins/test/between.test.js index 6458314b..ee532034 100644 --- a/src/mixins/test/between.test.js +++ b/src/mixins/test/between.test.js @@ -10,13 +10,6 @@ describe('between', () => { expect(between('20px', '100px')).toMatchSnapshot() }) - it('should return a valid calc formula when passed unitless to/from values as numbers', () => { - expect(between(20, 100)).toMatchSnapshot() - }) - - it('should return a valid calc formula when passed unitless to/from values as strings', () => { - expect(between('20', '100')).toMatchSnapshot() - }) // Errors it('should throw an error when not passed min/max screen size as a string', () => { expect(() => { @@ -44,4 +37,22 @@ describe('between', () => { 'fromSize and toSize must be provided as stringified numbers with the same units.', ) }) + + it('should throw an error when passed to/from size with different units than mix/max screen', () => { + expect(() => { + // $FlowFixMe + between('1em', '100em', '400px', '1000px') + }).toThrow( + 'fromSize and toSize must be provided as stringified numbers with the same units as minScreen and maxScreen.', + ) + }) + + it('should throw an error when passed to/from size with no units but mix/max with units', () => { + expect(() => { + // $FlowFixMe + between(20, 100) + }).toThrow( + 'fromSize and toSize must be provided as stringified numbers with the same units as minScreen and maxScreen.', + ) + }) })