From 9c7aa616ee33df54bca8c21421dc0e5ad47746df Mon Sep 17 00:00:00 2001 From: Jakub Pawlowicz Date: Sun, 15 Mar 2015 15:08:04 +0000 Subject: [PATCH] Clean ups tests with topics' lazy evaluation. It is easier to debug tests when all code is lazily evaluated, means all topics are functions or static values, not calls to objects. --- test/media-queries-test.js | 64 ++++++++--- test/module-test.js | 188 ++++++++++++++++++++++--------- test/source-map-test.js | 152 ++++++++++++++++--------- test/text/escape-store-test.js | 12 +- test/utils/chunker-test.js | 12 +- test/utils/compatibility-test.js | 36 ++++-- 6 files changed, 329 insertions(+), 135 deletions(-) diff --git a/test/media-queries-test.js b/test/media-queries-test.js index 0c2212fe..7886e388 100644 --- a/test/media-queries-test.js +++ b/test/media-queries-test.js @@ -5,13 +5,17 @@ var CleanCSS = require('../index'); vows.describe('media queries') .addBatch({ 'different ones': { - topic: new CleanCSS().minify('@media screen{a{color:red}}@media print{div{display:block}}'), + 'topic': function () { + return new CleanCSS().minify('@media screen{a{color:red}}@media print{div{display:block}}'); + }, 'get merged': function(minified) { assert.equal(minified.styles, '@media screen{a{color:red}}@media print{div{display:block}}'); } }, 'other than @media': { - topic: new CleanCSS().minify('@font-face{font-family:A}@font-face{font-family:B}'), + 'topic': function () { + return new CleanCSS().minify('@font-face{font-family:A}@font-face{font-family:B}'); + }, 'get merged': function(minified) { assert.equal(minified.styles, '@font-face{font-family:A}@font-face{font-family:B}'); } @@ -19,67 +23,89 @@ vows.describe('media queries') }) .addBatch({ 'same two adjacent': { - topic: new CleanCSS().minify('@media screen{a{color:red}}@media screen{div{display:block}}'), + 'topic': function () { + return new CleanCSS().minify('@media screen{a{color:red}}@media screen{div{display:block}}'); + }, 'get merged': function(minified) { assert.equal(minified.styles, '@media screen{a{color:red}div{display:block}}'); } }, 'same three adjacent': { - topic: new CleanCSS().minify('@media screen{a{color:red}}@media screen{div{display:block}}@media screen{body{width:100%}}'), + 'topic': function () { + return new CleanCSS().minify('@media screen{a{color:red}}@media screen{div{display:block}}@media screen{body{width:100%}}'); + }, 'get merged': function(minified) { assert.equal(minified.styles, '@media screen{a{color:red}div{display:block}body{width:100%}}'); } }, 'same two with selectors in between': { - topic: new CleanCSS().minify('@media screen{a{color:red}}body{width:100%}.one{height:100px}@media screen{div{display:block}}'), + 'topic': function () { + return new CleanCSS().minify('@media screen{a{color:red}}body{width:100%}.one{height:100px}@media screen{div{display:block}}'); + }, 'get merged': function(minified) { assert.equal(minified.styles, 'body{width:100%}.one{height:100px}@media screen{a{color:red}div{display:block}}'); } }, 'same two with other @media in between': { - topic: new CleanCSS().minify('@media screen{a{color:red}}@media (min-width:1024px){body{width:100%}}@media screen{div{display:block}}'), + 'topic': function () { + return new CleanCSS().minify('@media screen{a{color:red}}@media (min-width:1024px){body{width:100%}}@media screen{div{display:block}}'); + }, 'get merged': function(minified) { assert.equal(minified.styles, '@media (min-width:1024px){body{width:100%}}@media screen{a{color:red}div{display:block}}'); } }, 'same two with breaking properties in between': { - topic: new CleanCSS().minify('@media screen{a{color:red}}.one{color:#00f}@media screen{div{display:block}}'), + 'topic': function () { + return new CleanCSS().minify('@media screen{a{color:red}}.one{color:#00f}@media screen{div{display:block}}'); + }, 'get merged': function(minified) { assert.equal(minified.styles, '@media screen{a{color:red}}.one{color:#00f}@media screen{div{display:block}}'); } }, 'same two with breaking @media in between': { - topic: new CleanCSS().minify('@media screen{a{color:red}}@media (min-width:1024px){.one{color:#00f}}@media screen{div{display:block}}'), + 'topic': function () { + return new CleanCSS().minify('@media screen{a{color:red}}@media (min-width:1024px){.one{color:#00f}}@media screen{div{display:block}}'); + }, 'get merged': function(minified) { assert.equal(minified.styles, '@media screen{a{color:red}}@media (min-width:1024px){.one{color:#00f}}@media screen{div{display:block}}'); } }, 'same two with breaking nested @media in between': { - topic: new CleanCSS().minify('@media screen{a{color:red}}@media (min-width:1024px){@media screen{.one{color:#00f}}}@media screen{div{display:block}}'), + 'topic': function () { + return new CleanCSS().minify('@media screen{a{color:red}}@media (min-width:1024px){@media screen{.one{color:#00f}}}@media screen{div{display:block}}'); + }, 'get merged': function(minified) { assert.equal(minified.styles, '@media screen{a{color:red}}@media (min-width:1024px){@media screen{.one{color:#00f}}}@media screen{div{display:block}}'); } }, 'intermixed': { - topic: new CleanCSS().minify('@media screen{a{color:red}}@media (min-width:1024px){p{width:100%}}@media screen{div{display:block}}@media (min-width:1024px){body{height:100%}}'), + 'topic': function () { + return new CleanCSS().minify('@media screen{a{color:red}}@media (min-width:1024px){p{width:100%}}@media screen{div{display:block}}@media (min-width:1024px){body{height:100%}}'); + }, 'get merged': function(minified) { assert.equal(minified.styles, '@media screen{a{color:red}div{display:block}}@media (min-width:1024px){p{width:100%}body{height:100%}}'); } }, 'same two with overriding shorthand in between': { - topic: new CleanCSS().minify('@media screen{a{font-size:10px}}@media (min-width:1024px){.one{font:12px Helvetica}}@media screen{div{display:block}}'), + 'topic': function () { + return new CleanCSS().minify('@media screen{a{font-size:10px}}@media (min-width:1024px){.one{font:12px Helvetica}}@media screen{div{display:block}}'); + }, 'get merged': function(minified) { assert.equal(minified.styles, '@media screen{a{font-size:10px}}@media (min-width:1024px){.one{font:12px Helvetica}}@media screen{div{display:block}}'); } }, 'same two with different component property in between': { - topic: new CleanCSS().minify('@media screen{a{font-size:10px}}@media (min-width:1024px){.one{font-weight:700}}@media screen{div{display:block}}'), + 'topic': function () { + return new CleanCSS().minify('@media screen{a{font-size:10px}}@media (min-width:1024px){.one{font-weight:700}}@media screen{div{display:block}}'); + }, 'get merged': function(minified) { assert.equal(minified.styles, '@media (min-width:1024px){.one{font-weight:700}}@media screen{a{font-size:10px}div{display:block}}'); } }, 'same two with same values as moved in between': { - topic: new CleanCSS().minify('@media screen{a{color:red}}@media (min-width:1024px){.one{color:red}}@media screen{div{display:block}}'), + 'topic': function () { + return new CleanCSS().minify('@media screen{a{color:red}}@media (min-width:1024px){.one{color:red}}@media screen{div{display:block}}'); + }, 'get merged': function(minified) { assert.equal(minified.styles, '@media (min-width:1024px){.one{color:red}}@media screen{a{color:red}div{display:block}}'); } @@ -87,7 +113,9 @@ vows.describe('media queries') }) .addBatch({ 'further optimizations': { - topic: new CleanCSS().minify('@media screen{a{color:red}}@media screen{a{display:block}}'), + 'topic': function () { + return new CleanCSS().minify('@media screen{a{color:red}}@media screen{a{display:block}}'); + }, 'get merged': function(minified) { assert.equal(minified.styles, '@media screen{a{color:red;display:block}}'); } @@ -95,7 +123,9 @@ vows.describe('media queries') }) .addBatch({ 'with comments': { - topic: new CleanCSS().minify('@media screen{a{color:red}}/*! a comment */@media screen{a{display:block}}'), + 'topic': function () { + return new CleanCSS().minify('@media screen{a{color:red}}/*! a comment */@media screen{a{display:block}}'); + }, 'get merged': function(minified) { assert.equal(minified.styles, '/*! a comment */@media screen{a{color:red;display:block}}'); } @@ -103,7 +133,9 @@ vows.describe('media queries') }) .addBatch({ 'disabled': { - topic: new CleanCSS({ mediaMerging: false }).minify('@media screen{a{color:red}}@media screen{a{display:block}}'), + 'topic': function () { + return new CleanCSS({ mediaMerging: false }).minify('@media screen{a{color:red}}@media screen{a{display:block}}'); + }, 'keeps @media intact': function(minified) { assert.equal(minified.styles, '@media screen{a{color:red}}@media screen{a{display:block}}'); } diff --git a/test/module-test.js b/test/module-test.js index 7eb12f7f..4012a3b9 100644 --- a/test/module-test.js +++ b/test/module-test.js @@ -67,13 +67,17 @@ vows.describe('module tests').addBatch({ } }, 'no debug': { - 'topic': new CleanCSS().minify('a{ color: #f00 }'), + 'topic': function () { + return new CleanCSS().minify('a{ color: #f00 }'); + }, 'should not populate stats hash': function (error, minified) { assert.isEmpty(minified.stats); } }, 'debug': { - 'topic': new CleanCSS({ debug: true }).minify('a{ color: #f00 }'), + 'topic': function () { + return new CleanCSS({ debug: true }).minify('a{ color: #f00 }'); + }, 'should give time taken': function (error, minified) { assert.isNumber(minified.stats.timeSpent); }, @@ -88,13 +92,17 @@ vows.describe('module tests').addBatch({ } }, 'no warnings': { - 'topic': new CleanCSS().minify('a{ color: #f00 }'), + 'topic': function () { + return new CleanCSS().minify('a{ color: #f00 }'); + }, 'if no reasons given': function (error, minified) { assert.isEmpty(minified.warnings); } }, 'warnings': { - 'topic': new CleanCSS({ root: 'test/fixtures', target: 'custom-warnings.css' }).minify('a{color:red}'), + 'topic': function () { + return new CleanCSS({ root: 'test/fixtures', target: 'custom-warnings.css' }).minify('a{color:red}'); + }, 'are an array': function (error, minified) { assert.isArray(minified.warnings); }, @@ -104,7 +112,9 @@ vows.describe('module tests').addBatch({ } }, 'warnings on extra closing brace': { - 'topic': new CleanCSS().minify('a{display:block}}'), + 'topic': function () { + return new CleanCSS().minify('a{display:block}}'); + }, 'should minify correctly': function (error, minified) { assert.equal(minified.styles, 'a{display:block}'); }, @@ -117,7 +127,9 @@ vows.describe('module tests').addBatch({ } }, 'warnings on missing closing brace': { - 'topic': new CleanCSS().minify('a{display:block'), + 'topic': function () { + return new CleanCSS().minify('a{display:block'); + }, 'should minify correctly': function (error, minified) { assert.equal(minified.styles, ''); }, @@ -130,7 +142,9 @@ vows.describe('module tests').addBatch({ } }, 'warnings on unexpected body': { - 'topic': new CleanCSS().minify('a{display:block}color:#535353}p{color:red}'), + 'topic': function () { + return new CleanCSS().minify('a{display:block}color:#535353}p{color:red}'); + }, 'should minify correctly': function (error, minified) { assert.equal(minified.styles, 'a{display:block}p{color:red}'); }, @@ -143,7 +157,9 @@ vows.describe('module tests').addBatch({ } }, 'warnings on invalid properties': { - 'topic': new CleanCSS().minify('a{color:}'), + 'topic': function () { + return new CleanCSS().minify('a{color:}'); + }, 'should minify correctly': function (error, minified) { assert.isEmpty(minified.styles); }, @@ -156,7 +172,9 @@ vows.describe('module tests').addBatch({ } }, 'warnings on broken urls': { - 'topic': new CleanCSS().minify('a{background:url(image/}'), + 'topic': function () { + return new CleanCSS().minify('a{background:url(image/}'); + }, 'should output correct content': function (error, minified) { assert.equal(minified.styles, 'a{background:url(image/}'); }, @@ -169,7 +187,9 @@ vows.describe('module tests').addBatch({ } }, 'warnings on broken imports': { - 'topic': new CleanCSS().minify('@impor'), + 'topic': function () { + return new CleanCSS().minify('@impor'); + }, 'should output correct content': function (error, minified) { assert.isEmpty(minified.styles); }, @@ -182,7 +202,9 @@ vows.describe('module tests').addBatch({ } }, 'warnings on broken comments': { - 'topic': new CleanCSS().minify('a{}/* '), + 'topic': function () { + return new CleanCSS().minify('a{}/* '); + }, 'should output correct content': function (error, minified) { assert.isEmpty(minified.styles); }, @@ -195,13 +217,17 @@ vows.describe('module tests').addBatch({ } }, 'no errors': { - 'topic': new CleanCSS().minify('a{color:red}'), + 'topic': function () { + return new CleanCSS().minify('a{color:red}'); + }, 'if no reasons given': function (error, minified) { assert.isEmpty(minified.errors); } }, 'errors': { - 'topic': new CleanCSS(), + 'topic': function () { + return new CleanCSS(); + }, 'if both root and output used reasons given': function(minifier) { assert.doesNotThrow(function () { minifier.minify('@import url(/some/fake/file);', function (errors) { @@ -213,7 +239,9 @@ vows.describe('module tests').addBatch({ } }, 'errors when re-running minification': { - 'topic': new CleanCSS(), + 'topic': function () { + return new CleanCSS(); + }, 'if both root and output used reasons given': function (minifier) { minifier.minify('@import url(/some/fake/file);'); minifier.minify('@import url(/some/fake/file);', function(errors) { @@ -290,46 +318,58 @@ vows.describe('module tests').addBatch({ }, 'options': { 'advanced': { - 'topic': new CleanCSS({ advanced: true }).minify('a{color:red}a{color:#fff}'), + 'topic': function () { + return new CleanCSS({ advanced: true }).minify('a{color:red}a{color:#fff}'); + }, 'gets right output': function (minified) { assert.equal(minified.styles, 'a{color:#fff}'); } }, 'aggressive merging': { - 'topic': new CleanCSS({ aggressiveMerging: true }).minify('a{display:block;color:red;display:inline-block}'), + 'topic': function () { + return new CleanCSS({ aggressiveMerging: true }).minify('a{display:block;color:red;display:inline-block}'); + }, 'gets right output': function (minified) { assert.equal(minified.styles, 'a{color:red;display:inline-block}'); } }, 'process import': { - 'topic': new CleanCSS({ processImport: true }).minify('@import url(/test/fixtures/partials/one.css);'), + 'topic': function () { + return new CleanCSS({ processImport: true }).minify('@import url(/test/fixtures/partials/one.css);'); + }, 'gets right output': function (minified) { assert.equal(minified.styles, '.one{color:red}'); } }, 'rebase': { - 'topic': new CleanCSS({ rebase: true, relativeTo: path.join(process.cwd(), 'test', 'fixtures'), root: process.cwd() }).minify('div{background:url(./dummy.png)}'), + 'topic': function () { + return new CleanCSS({ rebase: true, relativeTo: path.join(process.cwd(), 'test', 'fixtures'), root: process.cwd() }).minify('div{background:url(./dummy.png)}'); + }, 'gets right output': function (minified) { assert.include(minified.styles, 'url(/test/fixtures/dummy.png)'); } }, - 'restructuring': { - 'on': { - 'topic': new CleanCSS({ restructuring: true }).minify('div{margin-top:0}.one{margin:0}.two{display:block;margin-top:0}'), - 'gets right output': function (minified) { - assert.equal(minified.styles, '.two,div{margin-top:0}.one{margin:0}.two{display:block}'); - } + 'restructuring - on': { + 'topic': function () { + new CleanCSS({ restructuring: true }).minify('div{margin-top:0}.one{margin:0}.two{display:block;margin-top:0}', this.callback); }, - 'off': { - 'topic': new CleanCSS({ restructuring: false }).minify('div{margin-top:0}.one{margin:0}.two{display:block;margin-top:0}'), - 'gets right output': function (minified) { - assert.equal(minified.styles, 'div{margin-top:0}.one{margin:0}.two{display:block;margin-top:0}'); - } + 'gets right output': function (minified) { + assert.equal(minified.styles, '.two,div{margin-top:0}.one{margin:0}.two{display:block}'); + } + }, + 'restructuring - off': { + 'topic': function () { + return new CleanCSS({ restructuring: false }).minify('div{margin-top:0}.one{margin:0}.two{display:block;margin-top:0}'); + }, + 'gets right output': function (minified) { + assert.equal(minified.styles, 'div{margin-top:0}.one{margin:0}.two{display:block;margin-top:0}'); } } }, 'source map': { - 'topic': new CleanCSS({ sourceMap: true }).minify('/*! a */div[data-id=" abc "] { color:red; }'), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify('/*! a */div[data-id=" abc "] { color:red; }'); + }, 'should minify correctly': function (minified) { assert.equal(minified.styles, '/*! a */div[data-id=" abc "]{color:red}'); }, @@ -340,13 +380,17 @@ vows.describe('module tests').addBatch({ 'accepts a list of source files as array': { 'rebased to the current dir': { 'relative': { - 'topic': new CleanCSS().minify(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css']), + 'topic': function () { + return new CleanCSS().minify(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css']); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(test/fixtures/partials/extra/down.gif)}'); } }, 'absolute': { - 'topic': new CleanCSS({ relativeTo: process.cwd() }).minify([path.resolve('test/fixtures/partials/one.css'), path.resolve('test/fixtures/partials/three.css')]), + 'topic': function () { + return new CleanCSS({ relativeTo: process.cwd() }).minify([path.resolve('test/fixtures/partials/one.css'), path.resolve('test/fixtures/partials/three.css')]); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(test/fixtures/partials/extra/down.gif)}'); } @@ -354,13 +398,17 @@ vows.describe('module tests').addBatch({ }, 'rebased to a path': { 'relative': { - 'topic': new CleanCSS({ relativeTo: 'test/fixtures' }).minify(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css']), + 'topic': function () { + return new CleanCSS({ relativeTo: 'test/fixtures' }).minify(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css']); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(partials/extra/down.gif)}'); } }, 'absolute': { - 'topic': new CleanCSS({ relativeTo: 'test/fixtures' }).minify([path.resolve('test/fixtures/partials/one.css'), path.resolve('test/fixtures/partials/three.css')]), + 'topic': function () { + return new CleanCSS({ relativeTo: 'test/fixtures' }).minify([path.resolve('test/fixtures/partials/one.css'), path.resolve('test/fixtures/partials/three.css')]); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(partials/extra/down.gif)}'); } @@ -368,35 +416,47 @@ vows.describe('module tests').addBatch({ }, 'rebased to root': { 'relative': { - 'topic': new CleanCSS({ root: 'test/fixtures', relativeTo: 'test/fixtures' }).minify(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css']), + 'topic': function () { + return new CleanCSS({ root: 'test/fixtures', relativeTo: 'test/fixtures' }).minify(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css']); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(/partials/extra/down.gif)}'); } }, 'absolute': { - 'topic': new CleanCSS({ root: 'test/fixtures', relativeTo: 'test/fixtures' }).minify([path.resolve('test/fixtures/partials/one.css'), path.resolve('test/fixtures/partials/three.css')]), + 'topic': function () { + return new CleanCSS({ root: 'test/fixtures', relativeTo: 'test/fixtures' }).minify([path.resolve('test/fixtures/partials/one.css'), path.resolve('test/fixtures/partials/three.css')]); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(/partials/extra/down.gif)}'); } } }, - 'with imports off': { - 'topic': new CleanCSS({ processImport: false }).minify(['./test/fixtures/partials/two.css']), - 'should give right output': function (minified) { - assert.equal(minified.styles, '@import url(one.css);@import url(extra/three.css);@import url(./extra/four.css);.two{color:#fff}'); + 'with imports': { + 'off': { + 'topic': function () { + return new CleanCSS({ processImport: false }).minify(['./test/fixtures/partials/two.css']); + }, + 'should give right output': function (minified) { + assert.equal(minified.styles, '@import url(one.css);@import url(extra/three.css);@import url(./extra/four.css);.two{color:#fff}'); + } } } }, 'accepts a list of source files as hash': { 'rebased to the current dir': { 'with relative paths': { - 'topic': new CleanCSS().minify(sourcesAsHash(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css'])), + 'topic': function () { + return new CleanCSS().minify(sourcesAsHash(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css'])); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(test/fixtures/partials/extra/down.gif)}'); } }, 'with absolute paths': { - 'topic': new CleanCSS().minify(sourcesAsHash(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css'], true)), + 'topic': function () { + return new CleanCSS().minify(sourcesAsHash(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css'], true)); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(test/fixtures/partials/extra/down.gif)}'); } @@ -404,13 +464,17 @@ vows.describe('module tests').addBatch({ }, 'rebased to a relative path': { 'with relative paths': { - 'topic': new CleanCSS({ target: 'test/fixtures' }).minify(sourcesAsHash(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css'])), + 'topic': function () { + return new CleanCSS({ target: 'test/fixtures' }).minify(sourcesAsHash(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css'])); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(partials/extra/down.gif)}'); } }, 'with absolute paths': { - 'topic': new CleanCSS({ target: 'test/fixtures' }).minify(sourcesAsHash(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css'], true)), + 'topic': function () { + return new CleanCSS({ target: 'test/fixtures' }).minify(sourcesAsHash(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css'], true)); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(partials/extra/down.gif)}'); } @@ -418,13 +482,17 @@ vows.describe('module tests').addBatch({ }, 'rebased to an absolute root': { 'with relative paths': { - 'topic': new CleanCSS({ root: 'test/fixtures', target: 'test/fixtures' }).minify(sourcesAsHash(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css'])), + 'topic': function () { + return new CleanCSS({ root: 'test/fixtures', target: 'test/fixtures' }).minify(sourcesAsHash(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css'])); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(/partials/extra/down.gif)}'); } }, 'with absolute paths': { - 'topic': new CleanCSS({ root: 'test/fixtures', target: 'test/fixtures' }).minify(sourcesAsHash(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css'], true)), + 'topic': function () { + return new CleanCSS({ root: 'test/fixtures', target: 'test/fixtures' }).minify(sourcesAsHash(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css'], true)); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(/partials/extra/down.gif)}'); } @@ -432,45 +500,59 @@ vows.describe('module tests').addBatch({ }, 'with rebasing off': { 'with relative paths': { - 'topic': new CleanCSS({ rebase: false }).minify(sourcesAsHash(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css'])), + 'topic': function () { + return new CleanCSS({ rebase: false }).minify(sourcesAsHash(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css'])); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(extra/down.gif)}'); } }, 'with absolute paths': { - 'topic': new CleanCSS({ rebase: false }).minify(sourcesAsHash(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css'], true)), + 'topic': function () { + return new CleanCSS({ rebase: false }).minify(sourcesAsHash(['test/fixtures/partials/one.css', 'test/fixtures/partials/three.css'], true)); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{background-image:url(extra/down.gif)}'); } } }, 'with other imports': { - 'topic': new CleanCSS().minify(sourcesAsHash(['test/fixtures/partials/two.css'])), + 'topic': function () { + return new CleanCSS().minify(sourcesAsHash(['test/fixtures/partials/two.css'])); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{color:#0f0}.four{color:#00f}.two{color:#fff}'); } }, 'with other imports and rebasing off': { - 'topic': new CleanCSS({ rebase: false }).minify(sourcesAsHash(['test/fixtures/partials/two.css'])), + 'topic': function () { + return new CleanCSS({ rebase: false }).minify(sourcesAsHash(['test/fixtures/partials/two.css'])); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '.one{color:red}.three{color:#0f0}.four{color:#00f}.two{color:#fff}'); } }, 'with other imports and processing imports off': { 'relative to current path': { - 'topic': new CleanCSS({ processImport: false }).minify(sourcesAsHash(['test/fixtures/partials/two.css'])), + 'topic': function () { + return new CleanCSS({ processImport: false }).minify(sourcesAsHash(['test/fixtures/partials/two.css'])); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '@import url(test/fixtures/partials/one.css);@import url(test/fixtures/partials/extra/three.css);@import url(test/fixtures/partials/extra/four.css);.two{color:#fff}'); } }, 'relative to different path': { - 'topic': new CleanCSS({ processImport: false, target: 'test/fixtures' }).minify(sourcesAsHash(['test/fixtures/partials/two.css'])), + 'topic': function () { + return new CleanCSS({ processImport: false, target: 'test/fixtures' }).minify(sourcesAsHash(['test/fixtures/partials/two.css'])); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '@import url(partials/one.css);@import url(partials/extra/three.css);@import url(partials/extra/four.css);.two{color:#fff}'); } }, 'absolute': { - 'topic': new CleanCSS({ processImport: false, root: 'test/fixtures', target: 'test/fixtures' }).minify(sourcesAsHash(['test/fixtures/partials/two.css'])), + 'topic': function () { + return new CleanCSS({ processImport: false, root: 'test/fixtures', target: 'test/fixtures' }).minify(sourcesAsHash(['test/fixtures/partials/two.css'])); + }, 'should give right output': function (minified) { assert.equal(minified.styles, '@import url(/partials/one.css);@import url(/partials/extra/three.css);@import url(/partials/extra/four.css);.two{color:#fff}'); } diff --git a/test/source-map-test.js b/test/source-map-test.js index 0e033cc0..6bea37c8 100644 --- a/test/source-map-test.js +++ b/test/source-map-test.js @@ -18,13 +18,17 @@ var port = 24682; vows.describe('source-map') .addBatch({ 'vendor prefix with comments': { - 'topic': new CleanCSS({ sourceMap: true }).minify('html{font-family:sans-serif;/* 1 */-ms-text-size-adjust:100%;/* 2 */-webkit-text-size-adjust:100%/* 3 */}'), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify('html{font-family:sans-serif;/* 1 */-ms-text-size-adjust:100%;/* 2 */-webkit-text-size-adjust:100%/* 3 */}'); + }, 'gets right output': function (minified) { assert.equal(minified.styles, 'html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}'); } }, 'background gradient': { - 'topic': new CleanCSS({ sourceMap: true }).minify('a{background: linear-gradient(to bottom, rgba(0, 0, 0, 0.1) 0, rgba(0, 0, 0, 0.1))}'), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify('a{background: linear-gradient(to bottom, rgba(0, 0, 0, 0.1) 0, rgba(0, 0, 0, 0.1))}'); + }, 'gets right output': function (minified) { assert.equal(minified.styles, 'a{background:linear-gradient(to bottom,rgba(0,0,0,.1) 0,rgba(0,0,0,.1))}'); } @@ -32,7 +36,9 @@ vows.describe('source-map') }) .addBatch({ 'module #1': { - 'topic': new CleanCSS({ sourceMap: true }).minify('/*! a */div[data-id=" abc "] { color:red; }'), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify('/*! a */div[data-id=" abc "] { color:red; }'); + }, 'should have 2 mappings': function(minified) { assert.lengthOf(minified.sourceMap._mappings._array, 2); }, @@ -60,7 +66,9 @@ vows.describe('source-map') } }, 'module #2': { - 'topic': new CleanCSS({ sourceMap: true }).minify('@media screen {\n@font-face \n{ \nfont-family: test; } }'), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify('@media screen {\n@font-face \n{ \nfont-family: test; } }'); + }, 'should have 3 mappings': function(minified) { assert.lengthOf(minified.sourceMap._mappings._array, 3); }, @@ -99,7 +107,9 @@ vows.describe('source-map') } }, 'with keepBreaks': { - 'topic': new CleanCSS({ sourceMap: true, keepBreaks: true }).minify('@media screen { a{color:red} p {color:blue} }div{color:pink}'), + 'topic': function () { + return new CleanCSS({ sourceMap: true, keepBreaks: true }).minify('@media screen { a{color:red} p {color:blue} }div{color:pink}'); + }, 'should have 7 mappings': function(minified) { assert.lengthOf(minified.sourceMap._mappings._array, 7); }, @@ -182,7 +192,9 @@ vows.describe('source-map') } }, 'shorthands': { - 'topic': new CleanCSS({ sourceMap: true }).minify('a{background:url(image.png);background-color:red}'), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify('a{background:url(image.png);background-color:red}'); + }, 'should have 3 mappings': function(minified) { assert.lengthOf(minified.sourceMap._mappings._array, 3); }, @@ -221,7 +233,9 @@ vows.describe('source-map') } }, 'keyframes': { - 'topic': new CleanCSS({ sourceMap: true }).minify('@-webkit-keyframes frames {\n 0% {\n border: 1px;\n }\n 100% {\n border: 3px;\n }\n}'), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify('@-webkit-keyframes frames {\n 0% {\n border: 1px;\n }\n 100% {\n border: 3px;\n }\n}'); + }, 'should have 5 mappings': function(minified) { assert.lengthOf(minified.sourceMap._mappings._array, 5); }, @@ -282,7 +296,9 @@ vows.describe('source-map') } }, 'double comments': { - 'topic': new CleanCSS({ sourceMap: true }).minify('/* COMMENT 1 */\n/* COMMENT 2 */\ndiv{color:red}'), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify('/* COMMENT 1 */\n/* COMMENT 2 */\ndiv{color:red}'); + }, 'should have 2 mappings': function(minified) { assert.lengthOf(minified.sourceMap._mappings._array, 2); }, @@ -312,7 +328,9 @@ vows.describe('source-map') }) .addBatch({ 'input map as string': { - 'topic': new CleanCSS({ sourceMap: inputMap }).minify('div > a {\n color: red;\n}'), + 'topic': function () { + return new CleanCSS({ sourceMap: inputMap }).minify('div > a {\n color: red;\n}'); + }, 'should have 2 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 2); }, @@ -340,7 +358,9 @@ vows.describe('source-map') } }, 'input map from source': { - 'topic': new CleanCSS({ sourceMap: true }).minify('div > a {\n color: red;\n}/*# sourceMappingURL=' + inputMapPath + ' */'), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify('div > a {\n color: red;\n}/*# sourceMappingURL=' + inputMapPath + ' */'); + }, 'should have 2 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 2); }, @@ -368,7 +388,9 @@ vows.describe('source-map') } }, 'input map from source with root': { - 'topic': new CleanCSS({ sourceMap: true, relativeTo: path.dirname(inputMapPath) }).minify('div > a {\n color: red;\n}/*# sourceMappingURL=styles.css.map */'), + 'topic': function () { + return new CleanCSS({ sourceMap: true, relativeTo: path.dirname(inputMapPath) }).minify('div > a {\n color: red;\n}/*# sourceMappingURL=styles.css.map */'); + }, 'should have 2 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 2); }, @@ -396,7 +418,9 @@ vows.describe('source-map') } }, 'complex input map': { - 'topic': new CleanCSS({ sourceMap: true, root: path.dirname(inputMapPath) }).minify('@import url(import.css);'), + 'topic': function () { + return new CleanCSS({ sourceMap: true, root: path.dirname(inputMapPath) }).minify('@import url(import.css);'); + }, 'should have 4 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 4); }, @@ -446,13 +470,17 @@ vows.describe('source-map') } }, 'complex input map referenced by path': { - 'topic': new CleanCSS({ sourceMap: true }).minify('@import url(test/fixtures/source-maps/import.css);'), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify('@import url(test/fixtures/source-maps/import.css);'); + }, 'should have 4 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 4); } }, 'complex but partial input map referenced by path': { - 'topic': new CleanCSS({ sourceMap: true, target: process.cwd() }).minify('@import url(test/fixtures/source-maps/no-map-import.css);'), + 'topic': function () { + return new CleanCSS({ sourceMap: true, target: process.cwd() }).minify('@import url(test/fixtures/source-maps/no-map-import.css);'); + }, 'should have 4 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 4); }, @@ -470,7 +498,9 @@ vows.describe('source-map') } }, 'complex input map with an existing file as target': { - 'topic': new CleanCSS({ sourceMap: true, target: path.join(process.cwd(), 'test', 'fixtures', 'source-maps', 'styles.css') }).minify('@import url(test/fixtures/source-maps/styles.css);'), + 'topic': function () { + return new CleanCSS({ sourceMap: true, target: path.join(process.cwd(), 'test', 'fixtures', 'source-maps', 'styles.css') }).minify('@import url(test/fixtures/source-maps/styles.css);'); + }, 'should have 2 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 2); }, @@ -482,7 +512,9 @@ vows.describe('source-map') } }, 'nested once': { - 'topic': new CleanCSS({ sourceMap: true }).minify('@import url(test/fixtures/source-maps/nested/once.css);'), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify('@import url(test/fixtures/source-maps/nested/once.css);'); + }, 'should have 2 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 2); }, @@ -510,7 +542,9 @@ vows.describe('source-map') } }, 'nested twice': { - 'topic': new CleanCSS({ sourceMap: true }).minify('@import url(test/fixtures/source-maps/nested/twice.css);'), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify('@import url(test/fixtures/source-maps/nested/twice.css);'); + }, 'should have 2 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 2); }, @@ -538,7 +572,9 @@ vows.describe('source-map') } }, 'input source map with missing mutliselector input': { - 'topic': new CleanCSS({ sourceMap: '{"version":3,"sources":["source.css"],"names":[],"mappings":"AAAA;;;;IAII,YAAW;EACd"}' }).minify('a,\na:hover,\na:visited\n{\n color: red;\n}'), + 'topic': function () { + return new CleanCSS({ sourceMap: '{"version":3,"sources":["source.css"],"names":[],"mappings":"AAAA;;;;IAII,YAAW;EACd"}' }).minify('a,\na:hover,\na:visited\n{\n color: red;\n}'); + }, 'should have 4 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 4); }, @@ -588,7 +624,9 @@ vows.describe('source-map') } }, 'input source map with missing mutliselector sortable input': { - 'topic': new CleanCSS({ sourceMap: '{"version":3,"sources":["source.css"],"names":[],"mappings":"AAAA;;;;IAII,YAAW;EACd"}' }).minify('a.button:link,\na.button:visited,\na.button:hover\n{\n color: red;\n}'), + 'topic': function () { + return new CleanCSS({ sourceMap: '{"version":3,"sources":["source.css"],"names":[],"mappings":"AAAA;;;;IAII,YAAW;EACd"}' }).minify('a.button:link,\na.button:visited,\na.button:hover\n{\n color: red;\n}'); + }, 'should have 4 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 4); }, @@ -776,19 +814,25 @@ vows.describe('source-map') }) .addBatch({ 'important comment after a property': { - 'topic': new CleanCSS({ sourceMap: true }).minify('div { color: #f00 !important; /*!comment*/ }'), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify('div { color: #f00 !important; /*!comment*/ }'); + }, 'has right output': function (errors, minified) { assert.equal(minified.styles, 'div{color:red!important/*!comment*/}'); } }, 'important comment between properties': { - 'topic': new CleanCSS({ sourceMap: true }).minify('div { color: #f00 !important; /*!comment*/; display: block }'), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify('div { color: #f00 !important; /*!comment*/; display: block }'); + }, 'has right output': function (errors, minified) { assert.equal(minified.styles, 'div{color:red!important;/*!comment*/display:block}'); } }, 'important comments after a property': { - 'topic': new CleanCSS({ sourceMap: true }).minify('div { color: #f00 !important; /*!1*//*!2*/ }'), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify('div { color: #f00 !important; /*!1*//*!2*/ }'); + }, 'has right output': function (errors, minified) { assert.equal(minified.styles, 'div{color:red!important/*!1*//*!2*/}'); } @@ -797,20 +841,22 @@ vows.describe('source-map') .addBatch({ 'multiple source maps': { 'relative to local': { - 'topic': new CleanCSS({ sourceMap: true }).minify({ - 'test/fixtures/source-maps/some.css': { - styles: 'div {\n color: red;\n}', - sourceMap: '{"version":3,"sources":["some.less"],"names":[],"mappings":"AAAA;EACE,UAAA","file":"some.css"}' - }, - 'test/fixtures/source-maps/styles.css': { - styles: 'div > a {\n color: blue;\n}', - sourceMap: '{"version":3,"sources":["styles.less"],"names":[],"mappings":"AAAA,GAAI;EACF,WAAA","file":"styles.css"}' - }, - 'test/fixtures/source-maps/nested/once.css': { - styles: 'section > div a {\n color: red;\n}', - sourceMap: '{"version":3,"sources":["once.less"],"names":[],"mappings":"AAAA,OACE,MAAM;EACJ,UAAA","file":"once.css"}' - } - }), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify({ + 'test/fixtures/source-maps/some.css': { + styles: 'div {\n color: red;\n}', + sourceMap: '{"version":3,"sources":["some.less"],"names":[],"mappings":"AAAA;EACE,UAAA","file":"some.css"}' + }, + 'test/fixtures/source-maps/styles.css': { + styles: 'div > a {\n color: blue;\n}', + sourceMap: '{"version":3,"sources":["styles.less"],"names":[],"mappings":"AAAA,GAAI;EACF,WAAA","file":"styles.css"}' + }, + 'test/fixtures/source-maps/nested/once.css': { + styles: 'section > div a {\n color: red;\n}', + sourceMap: '{"version":3,"sources":["once.less"],"names":[],"mappings":"AAAA,OACE,MAAM;EACJ,UAAA","file":"once.css"}' + } + }); + }, 'has right output': function (errors, minified) { assert.equal(minified.styles, 'div,section>div a{color:red}div>a{color:#00f}'); }, @@ -876,20 +922,22 @@ vows.describe('source-map') }, 'relative to path': { 'complex but partial input map referenced by path': { - 'topic': new CleanCSS({ sourceMap: true, target: process.cwd() }).minify({ - 'test/fixtures/source-maps/some.css': { - styles: 'div {\n color: red;\n}', - sourceMap: '{"version":3,"sources":["some.less"],"names":[],"mappings":"AAAA;EACE,UAAA","file":"some.css"}' - }, - 'test/fixtures/source-maps/styles.css': { - styles: 'div > a {\n color: blue;\n}', - sourceMap: '{"version":3,"sources":["styles.less"],"names":[],"mappings":"AAAA,GAAI;EACF,WAAA","file":"styles.css"}' - }, - 'test/fixtures/source-maps/nested/once.css': { - styles: 'section > div a {\n color: red;\n}', - sourceMap: '{"version":3,"sources":["once.less"],"names":[],"mappings":"AAAA,OACE,MAAM;EACJ,UAAA","file":"once.css"}' - } - }), + 'topic': function () { + return new CleanCSS({ sourceMap: true, target: process.cwd() }).minify({ + 'test/fixtures/source-maps/some.css': { + styles: 'div {\n color: red;\n}', + sourceMap: '{"version":3,"sources":["some.less"],"names":[],"mappings":"AAAA;EACE,UAAA","file":"some.css"}' + }, + 'test/fixtures/source-maps/styles.css': { + styles: 'div > a {\n color: blue;\n}', + sourceMap: '{"version":3,"sources":["styles.less"],"names":[],"mappings":"AAAA,GAAI;EACF,WAAA","file":"styles.css"}' + }, + 'test/fixtures/source-maps/nested/once.css': { + styles: 'section > div a {\n color: red;\n}', + sourceMap: '{"version":3,"sources":["once.less"],"names":[],"mappings":"AAAA,OACE,MAAM;EACJ,UAAA","file":"once.css"}' + } + }); + }, 'should have 5 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 5); }, @@ -912,7 +960,9 @@ vows.describe('source-map') .addBatch({ 'advanced optimizations': { 'new property in smart sort': { - 'topic': new CleanCSS({ sourceMap: true }).minify('a{color:#000}div{color:red}.one{display:block}.two{display:inline;color:red}'), + 'topic': function () { + return new CleanCSS({ sourceMap: true }).minify('a{color:#000}div{color:red}.one{display:block}.two{display:inline;color:red}'); + }, 'should have 5 mappings': function (minified) { assert.lengthOf(minified.sourceMap._mappings._array, 9); }, diff --git a/test/text/escape-store-test.js b/test/text/escape-store-test.js index bcdf592c..9a27ecd9 100644 --- a/test/text/escape-store-test.js +++ b/test/text/escape-store-test.js @@ -5,7 +5,9 @@ var EscapeStore = require('../../lib/text/escape-store'); vows.describe(EscapeStore) .addBatch({ 'no metadata': { - topic: new EscapeStore('TEST'), + topic: function () { + return new EscapeStore('TEST'); + }, store: function (escapeStore) { var placeholder = escapeStore.store('data'); assert.equal(placeholder, '__ESCAPED_TEST_CLEAN_CSS0__'); @@ -22,7 +24,9 @@ vows.describe(EscapeStore) } }, 'with metadata': { - topic: new EscapeStore('TEST'), + topic: function () { + return new EscapeStore('TEST'); + }, store: function (escapeStore) { var placeholder = escapeStore.store('data', ['brown', 'fox', 'jumped', 'over']); assert.equal(placeholder, '__ESCAPED_TEST_CLEAN_CSS0(brown,fox,jumped,over)__'); @@ -39,7 +43,9 @@ vows.describe(EscapeStore) } }, 'same data with different metadata': { - topic: new EscapeStore('TEST'), + topic: function () { + return new EscapeStore('TEST'); + }, 'store first': function (escapeStore) { escapeStore.store('data1', [0, 1, 2]); var placeholder = escapeStore.store('data1', [1, 2, 3]); diff --git a/test/utils/chunker-test.js b/test/utils/chunker-test.js index 1203e41b..38966bbb 100644 --- a/test/utils/chunker-test.js +++ b/test/utils/chunker-test.js @@ -5,7 +5,9 @@ var Chunker = require('../../lib/utils/chunker'); vows.describe(Chunker) .addBatch({ 'empty string': { - topic: new Chunker('', '', 128), + 'topic': function () { + return new Chunker('', '', 128); + }, 'is empty': function (chunker) { assert.isTrue(chunker.isEmpty()); }, @@ -14,7 +16,9 @@ vows.describe(Chunker) } }, 'css': { - topic: new Chunker('a{color:red}p{}', '}', 3), + 'topic': function () { + return new Chunker('a{color:red}p{}', '}', 3); + }, 'is not empty': function (chunker) { assert.isFalse(chunker.isEmpty()); }, @@ -26,7 +30,9 @@ vows.describe(Chunker) } }, 'comments': { - topic: new Chunker('/* one */ /* two */', '*/', 3), + 'topic': function () { + return new Chunker('/* one */ /* two */', '*/', 3); + }, 'is not empty': function (chunker) { assert.isFalse(chunker.isEmpty()); }, diff --git a/test/utils/compatibility-test.js b/test/utils/compatibility-test.js index 5d32c401..b0c43bd0 100644 --- a/test/utils/compatibility-test.js +++ b/test/utils/compatibility-test.js @@ -5,7 +5,9 @@ var Compatibility = require('../../lib/utils/compatibility'); vows.describe(Compatibility) .addBatch({ 'as an empty hash': { - topic: new Compatibility({}).toOptions(), + 'topic': function () { + return new Compatibility({}).toOptions(); + }, 'gets default options': function(options) { assert.isFalse(options.properties.iePrefixHack); assert.isFalse(options.properties.ieSuffixHack); @@ -20,13 +22,17 @@ vows.describe(Compatibility) } }, 'not given': { - topic: new Compatibility().toOptions(), + 'topic': function () { + return new Compatibility().toOptions(); + }, 'gets default options': function(options) { assert.deepEqual(options, new Compatibility({}).toOptions()); } }, 'as a populated hash': { - topic: new Compatibility({ units: { rem: false }, properties: { prefix: true } }).toOptions(), + 'topic': function () { + return new Compatibility({ units: { rem: false }, properties: { prefix: true } }).toOptions(); + }, 'gets merged options': function(options) { assert.isFalse(options.properties.iePrefixHack); assert.isFalse(options.properties.ieSuffixHack); @@ -44,7 +50,9 @@ vows.describe(Compatibility) }) .addBatch({ 'as an ie8 template': { - topic: new Compatibility('ie8').toOptions(), + 'topic': function () { + return new Compatibility('ie8').toOptions(); + }, 'gets template options': function(options) { assert.isTrue(options.properties.iePrefixHack); assert.isTrue(options.properties.ieSuffixHack); @@ -60,7 +68,9 @@ vows.describe(Compatibility) } }, 'as an ie7 template': { - topic: new Compatibility('ie7').toOptions(), + 'topic': function () { + return new Compatibility('ie7').toOptions(); + }, 'gets template options': function(options) { assert.isTrue(options.properties.iePrefixHack); assert.isTrue(options.properties.ieSuffixHack); @@ -76,7 +86,9 @@ vows.describe(Compatibility) } }, 'as an unknown template': { - topic: new Compatibility('').toOptions(), + 'topic': function () { + return new Compatibility('').toOptions(); + }, 'gets default options': function(options) { assert.deepEqual(options, new Compatibility({}).toOptions()); } @@ -84,7 +96,9 @@ vows.describe(Compatibility) }) .addBatch({ 'as a complex string value with group': { - topic: new Compatibility('ie8,-properties.iePrefixHack,+colors.opacity').toOptions(), + 'topic': function () { + return new Compatibility('ie8,-properties.iePrefixHack,+colors.opacity').toOptions(); + }, 'gets calculated options': function(options) { assert.isFalse(options.properties.iePrefixHack); assert.isTrue(options.properties.ieSuffixHack); @@ -98,7 +112,9 @@ vows.describe(Compatibility) } }, 'as a single string value without group': { - topic: new Compatibility('+properties.iePrefixHack').toOptions(), + 'topic': function () { + return new Compatibility('+properties.iePrefixHack').toOptions(); + }, 'gets calculated options': function(options) { assert.isTrue(options.properties.iePrefixHack); assert.isFalse(options.properties.ieSuffixHack); @@ -112,7 +128,9 @@ vows.describe(Compatibility) } }, 'as a complex string value without group': { - topic: new Compatibility('+properties.iePrefixHack,-units.rem').toOptions(), + 'topic': function () { + return new Compatibility('+properties.iePrefixHack,-units.rem').toOptions(); + }, 'gets calculated options': function(options) { assert.isTrue(options.properties.iePrefixHack); assert.isFalse(options.properties.ieSuffixHack); -- 2.34.1