From b835e8475bcf4f0f4a186fb976fee69cfeb14cae Mon Sep 17 00:00:00 2001 From: Dmitry Semigradsky Date: Tue, 10 Oct 2017 10:31:16 +0300 Subject: [PATCH] #28 Fix incorrect reducing --- src/__tests__/index.js | 9 ++++++++- src/lib/reducer.js | 9 +++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/__tests__/index.js b/src/__tests__/index.js index d6baba4..2437f69 100644 --- a/src/__tests__/index.js +++ b/src/__tests__/index.js @@ -49,6 +49,13 @@ test( '60px' ) +test( + 'should reduce simple calc (6)', + testFixture, + 'calc(100px - (100px - 100%))', + '100%' +) + test( 'should reduce additions and subtractions (1)', testFixture, @@ -144,7 +151,7 @@ test( 'should ignore calc with css variables (5)', testFixture, 'calc(10px - (100px - var(--mouseX)))', - 'calc(-90px - var(--mouseX))' + 'calc(-90px + var(--mouseX))' ) test( diff --git a/src/lib/reducer.js b/src/lib/reducer.js index 860040e..2c69be5 100644 --- a/src/lib/reducer.js +++ b/src/lib/reducer.js @@ -95,8 +95,8 @@ function reduceAddSubExpression(node, precision) { ) { // value + (value + something) => (value + value) + something // value + (value - something) => (value + value) - something - // value - (value + something) => (value - value) + something - // value - (value - something) => (value - value) - something + // value - (value + something) => (value - value) - something + // value - (value - something) => (value - value) + something if (left.type === right.left.type) { node = Object.assign({ }, node) node.left = reduce({ @@ -106,6 +106,11 @@ function reduceAddSubExpression(node, precision) { right: right.left }, precision) node.right = right.right + + if (node.operator === '-') { + node.operator = right.operator === '+' ? '-' : '+' + } + return reduce(node, precision) } // value + (something + value) => (value + value) + something