Allows `all` shortcut in level 1 optimizations config.
authorJakub Pawlowicz <contact@jakubpawlowicz.com>
Tue, 10 Jan 2017 11:05:27 +0000 (12:05 +0100)
committerJakub Pawlowicz <contact@jakubpawlowicz.com>
Tue, 10 Jan 2017 11:05:27 +0000 (12:05 +0100)
Why:

* To enable/disable all options at once;
* note non-boolean options are ignored when `all` / `*` is used.

lib/options/optimization-level.js
test/optimizer/level-1/optimize-test.js
test/options/optimization-level-test.js

index 0ed1c70..d54d090 100644 (file)
@@ -97,6 +97,16 @@ function optimizationLevelFrom(source) {
     level[Zero] = override(level[Zero], source[Zero]);
   }
 
+  if (One in source && ALL_KEYWORD_1 in source[One]) {
+    level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_1])));
+    delete source[One][ALL_KEYWORD_1];
+  }
+
+  if (One in source && ALL_KEYWORD_2 in source[One]) {
+    level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_2])));
+    delete source[One][ALL_KEYWORD_2];
+  }
+
   if (One in source || Two in source) {
     level[One] = override(level[One], source[One]);
   } else {
@@ -127,7 +137,9 @@ function defaults(level, value) {
   var key;
 
   for (key in options) {
-    options[key] = value;
+    if (typeof options[key] == 'boolean') {
+      options[key] = value;
+    }
   }
 
   return options;
index f2a1fa8..ac7d6ee 100644 (file)
@@ -1163,4 +1163,12 @@ vows.describe('level 1 optimizations')
       ]
     }, { level: { 1: { tidySelectors: false } } })
   )
+  .addBatch(
+    optimizerContext('all optimizations off via `all` keyword', {
+      'stays as it is': [
+          '.block > .another-block{animation-duration:500ms;font:"Arial";margin:010px}',
+          '.block > .another-block{animation-duration:500ms;font:"Arial";margin:010px}'
+      ]
+    }, { level: { 1: { all: false } } })
+  )
   .export(module);
index 6c5fc80..932e7ba 100644 (file)
@@ -193,7 +193,75 @@ vows.describe(optimizationLevelFrom)
         });
       }
     },
-    'a hash with all keyword': {
+    'a hash with all keyword for level 1': {
+      'topic': function () {
+        return optimizationLevelFrom({ 1: { all: false, cleanupCharsets: true } });
+      },
+      'has all options': function (levelOptions) {
+        assert.deepEqual(Object.keys(levelOptions), ['0', '1']);
+      },
+      'has level 0 options': function (levelOptions) {
+        assert.deepEqual(levelOptions['0'], {});
+      },
+      'has level 1 options': function (levelOptions) {
+        assert.deepEqual(levelOptions['1'], {
+          cleanupCharsets: true,
+          normalizeUrls: false,
+          optimizeBackground: false,
+          optimizeBorderRadius: false,
+          optimizeFilter: false,
+          optimizeFont: false,
+          optimizeFontWeight: false,
+          optimizeOutline: false,
+          removeNegativePaddings: false,
+          removeQuotes: false,
+          removeWhitespace: false,
+          replaceMultipleZeros: false,
+          replaceTimeUnits: false,
+          replaceZeroUnits: false,
+          roundingPrecision: roundingPrecisionFrom(undefined),
+          specialComments: 'all',
+          tidyAtRules: false,
+          tidyBlockScopes: false,
+          tidySelectors: false
+        });
+      }
+    },
+    'a hash with * keyword for level 1': {
+      'topic': function () {
+        return optimizationLevelFrom({ 1: { '*': false, cleanupCharsets: true } });
+      },
+      'has all options': function (levelOptions) {
+        assert.deepEqual(Object.keys(levelOptions), ['0', '1']);
+      },
+      'has level 0 options': function (levelOptions) {
+        assert.deepEqual(levelOptions['0'], {});
+      },
+      'has level 1 options': function (levelOptions) {
+        assert.deepEqual(levelOptions['1'], {
+          cleanupCharsets: true,
+          normalizeUrls: false,
+          optimizeBackground: false,
+          optimizeBorderRadius: false,
+          optimizeFilter: false,
+          optimizeFont: false,
+          optimizeFontWeight: false,
+          optimizeOutline: false,
+          removeNegativePaddings: false,
+          removeQuotes: false,
+          removeWhitespace: false,
+          replaceMultipleZeros: false,
+          replaceTimeUnits: false,
+          replaceZeroUnits: false,
+          roundingPrecision: roundingPrecisionFrom(undefined),
+          specialComments: 'all',
+          tidyAtRules: false,
+          tidyBlockScopes: false,
+          tidySelectors: false
+        });
+      }
+    },
+    'a hash with all keyword for level 2': {
       'topic': function () {
         return optimizationLevelFrom({ 1: { specialComments: 0 }, 2: { all: false, mediaMerging: true } });
       },
@@ -241,7 +309,7 @@ vows.describe(optimizationLevelFrom)
         });
       }
     },
-    'a hash with * keyword': {
+    'a hash with * keyword for level 2': {
       'topic': function () {
         return optimizationLevelFrom({ 1: { specialComments: 0 }, 2: { '*': false, mediaMerging: true } });
       },