From b0060865e633a2b011a3eee094b15235a4313cda Mon Sep 17 00:00:00 2001 From: BRIAN MUENZENMEYER Date: Thu, 1 Sep 2016 16:28:32 -0500 Subject: [PATCH 1/2] make sure our copying of a found pattern does not destroy the template fixes #461 fixes #444 --- core/lib/pattern_assembler.js | 1 - .../_patterns/00-test/14-inception.mustache | 1 + test/pattern_assembler_tests.js | 70 ++++++++++++++++++- 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 test/files/_patterns/00-test/14-inception.mustache diff --git a/core/lib/pattern_assembler.js b/core/lib/pattern_assembler.js index f88861628..fa95d96ad 100644 --- a/core/lib/pattern_assembler.js +++ b/core/lib/pattern_assembler.js @@ -429,7 +429,6 @@ var pattern_assembler = function () { //create a copy of the partial so as to not pollute it after the getPartial call. var partialPattern = getPartial(partial, patternlab); var cleanPartialPattern = JSON5.parse(JSON5.stringify(partialPattern)); - cleanPartialPattern.extendedTemplate = cleanPartialPattern.template; //if partial has style modifier data, replace the styleModifier value if (currentPattern.stylePartials && currentPattern.stylePartials.length > 0) { diff --git a/test/files/_patterns/00-test/14-inception.mustache b/test/files/_patterns/00-test/14-inception.mustache new file mode 100644 index 000000000..ede7fafb1 --- /dev/null +++ b/test/files/_patterns/00-test/14-inception.mustache @@ -0,0 +1 @@ +{{> test-foo }} diff --git a/test/pattern_assembler_tests.js b/test/pattern_assembler_tests.js index 9c0e8704e..33c3898d1 100644 --- a/test/pattern_assembler_tests.js +++ b/test/pattern_assembler_tests.js @@ -364,9 +364,77 @@ //assert var expectedCleanValue = ' {{message}} '; var expectedSetValue = ' {{message}} '; - test.equals(anotherPattern.extendedTemplate.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), expectedSetValue.trim()); + + //this is the "atom" - it should remain unchanged test.equals(atomPattern.template.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), expectedCleanValue.trim()); test.equals(atomPattern.extendedTemplate.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), expectedCleanValue.trim()); + + // this is the style modifier pattern, which should resolve correctly + test.equals(anotherPattern.template.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), '{{> test-styled-atom:test_1 }}'); + test.equals(anotherPattern.extendedTemplate.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), expectedSetValue.trim()); + + test.done(); + }, + 'processPatternRecursive - ensure deep-nesting works' : function(test){ + //arrange + var fs = require('fs-extra'); + var pattern_assembler = new pa(); + var patterns_dir = './test/files/_patterns'; + + var pl = {}; + pl.config = { + paths: { + source: { + patterns: patterns_dir + } + }, + outputFileSuffixes: { + rendered : '' + } + }; + pl.data = {}; + pl.data.link = {}; + pl.config.debug = false; + pl.patterns = []; + pl.partials = {}; + + var atomPattern = new Pattern('00-test/01-bar.mustache'); + atomPattern.template = fs.readFileSync(patterns_dir + '/00-test/01-bar.mustache', 'utf8'); + atomPattern.stylePartials = pattern_assembler.find_pattern_partials_with_style_modifiers(atomPattern); + atomPattern.parameteredPartials = pattern_assembler.find_pattern_partials_with_parameters(atomPattern); + + var templatePattern = new Pattern('00-test/00-foo.mustache'); + templatePattern.template = fs.readFileSync(patterns_dir + '/00-test/00-foo.mustache', 'utf8'); + templatePattern.stylePartials = pattern_assembler.find_pattern_partials_with_style_modifiers(templatePattern); + templatePattern.parameteredPartials = pattern_assembler.find_pattern_partials_with_parameters(templatePattern); + + var pagesPattern = new Pattern('00-test/14-inception.mustache'); + pagesPattern.template = fs.readFileSync(patterns_dir + '/00-test/14-inception.mustache', 'utf8'); + pagesPattern.stylePartials = pattern_assembler.find_pattern_partials_with_style_modifiers(pagesPattern); + pagesPattern.parameteredPartials = pattern_assembler.find_pattern_partials_with_parameters(pagesPattern); + + pattern_assembler.addPattern(atomPattern, pl); + pattern_assembler.addPattern(templatePattern, pl); + pattern_assembler.addPattern(pagesPattern, pl); + + //act + pattern_assembler.process_pattern_recursive('00-test' + path.sep + '14-inception.mustache', pl, {}); + + //assert + var expectedCleanValue = 'bar'; + var expectedSetValue = 'bar'; + + //this is the "atom" - it should remain unchanged + test.equals(atomPattern.template.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), expectedCleanValue); + test.equals(atomPattern.extendedTemplate.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), expectedCleanValue); + + //this is the "template pattern" - it should have an updated extendedTemplate but an unchanged template + test.equals(templatePattern.template.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), '{{> test-bar }}'); + test.equals(templatePattern.extendedTemplate.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), expectedSetValue.trim()); + + //this is the "pages pattern" - it should have an updated extendedTemplate equal to the template pattern but an unchanged template + test.equals(pagesPattern.template.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), '{{> test-foo }}'); + test.equals(pagesPattern.extendedTemplate.replace(/\s\s+/g, ' ').replace(/\n/g, ' ').trim(), expectedSetValue.trim()); test.done(); }, 'setState - applies any patternState matching the pattern' : function(test){ From 872bb6c014a40e88088b7e147f7b3bf2f23a0cda Mon Sep 17 00:00:00 2001 From: Brian Muenzenmeyer Date: Fri, 2 Sep 2016 06:50:28 -0500 Subject: [PATCH 2/2] bump version --- core/lib/patternlab.js | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/lib/patternlab.js b/core/lib/patternlab.js index 3d591bce2..cafd77b71 100644 --- a/core/lib/patternlab.js +++ b/core/lib/patternlab.js @@ -1,5 +1,5 @@ /* - * patternlab-node - v2.5.0 - 2016 + * patternlab-node - v2.5.1 - 2016 * * Brian Muenzenmeyer, Geoff Pursell, and the web community. * Licensed under the MIT license. diff --git a/package.json b/package.json index f6f795888..6027e9d53 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "patternlab-node", "description": "Pattern Lab is a collection of tools to help you create atomic design systems. This is the node command line interface (CLI).", - "version": "2.5.0", + "version": "2.5.1", "main": "./core/lib/patternlab.js", "dependencies": { "diveSync": "^0.3.0",