Skip to content

Commit 2c942fa

Browse files
committed
simplify patternlab.js
fix last of unit tests
1 parent 1a64c17 commit 2c942fa

File tree

9 files changed

+78
-43
lines changed

9 files changed

+78
-43
lines changed

.vscode/launch.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
// Use IntelliSense to learn about possible Node.js debug attributes.
3+
// Hover to view descriptions of existing attributes.
4+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5+
"version": "0.2.0",
6+
"configurations": [
7+
{
8+
"type": "node",
9+
"request": "launch",
10+
"name": "Launch Program",
11+
"program": "${workspaceRoot}\\core\\lib\\patternlab.js"
12+
},
13+
{
14+
"type": "node",
15+
"request": "launch",
16+
"name": "Debug",
17+
"program": "${workspaceRoot}\\test\\patternlab_tests.js"
18+
}
19+
]
20+
}

core/lib/patternlab.js

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,24 @@ const chalk = require('chalk');
1919
const cleanHtml = require('js-beautify').html;
2020
const inherits = require('util').inherits;
2121
const pm = require('./plugin_manager');
22-
const fs = require('fs-extra');
2322
const packageInfo = require('../../package.json');
2423
const plutils = require('./utilities');
2524
const jsonCopy = require('./json_copy');
2625
const PatternGraph = require('./pattern_graph').PatternGraph;
26+
const pa = require('./pattern_assembler');
27+
const lh = require('./lineage_hunter');
28+
const sm = require('./starterkit_manager');
29+
const pe = require('./pattern_exporter');
30+
const Pattern = require('./object_factory').Pattern;
31+
const CompileState = require('./object_factory').CompileState;
32+
33+
//these are mocked in unit tests, so let them be overridden
34+
let fs = require('fs-extra'); // eslint-disable-line
35+
let ui_builder = require('./ui_builder'); // eslint-disable-line
36+
let pattern_exporter = new pe(); // eslint-disable-line
37+
38+
const pattern_assembler = new pa();
39+
const lineage_hunter = new lh();
2740

2841
//register our log events
2942
plutils.log.on('error', msg => console.log(msg));
@@ -46,7 +59,7 @@ function buildPatternData(dataFilesPath, fsDep) {
4659

4760
// GTP: these two diveSync pattern processors factored out so they can be reused
4861
// from unit tests to reduce code dupe!
49-
function processAllPatternsIterative(pattern_assembler, patterns_dir, patternlab) {
62+
function processAllPatternsIterative(patterns_dir, patternlab) {
5063

5164
const promiseAllPatternFiles = new Promise(function (resolve) {
5265
dive(
@@ -84,7 +97,7 @@ function processAllPatternsIterative(pattern_assembler, patterns_dir, patternlab
8497
});
8598
}
8699

87-
function processAllPatternsRecursive(pattern_assembler, patterns_dir, patternlab) {
100+
function processAllPatternsRecursive(patterns_dir, patternlab) {
88101
diveSync(
89102
patterns_dir,
90103
function (err, file) {
@@ -164,24 +177,11 @@ function PatternLabEventEmitter() {
164177
inherits(PatternLabEventEmitter, EventEmitter);
165178

166179
const patternlab_engine = function (config) {
167-
'use strict';
168-
169-
const pa = require('./pattern_assembler');
170-
const pe = require('./pattern_exporter');
171-
const lh = require('./lineage_hunter');
172-
const ui = require('./ui_builder');
173-
const sm = require('./starterkit_manager');
174-
const Pattern = require('./object_factory').Pattern;
175-
const CompileState = require('./object_factory').CompileState;
176180
const patternlab = {};
177181

178182
patternlab.engines = patternEngines;
179183
patternlab.engines.loadAllEngines(config);
180184

181-
const pattern_assembler = new pa();
182-
const pattern_exporter = new pe();
183-
const lineage_hunter = new lh();
184-
185185
patternlab.package = fs.readJSONSync(path.resolve(__dirname, '../../package.json'));
186186
patternlab.config = config || fs.readJSONSync(path.resolve(__dirname, '../../patternlab-config.json'));
187187
patternlab.events = new PatternLabEventEmitter();
@@ -563,18 +563,18 @@ const patternlab_engine = function (config) {
563563
patternlab.events.emit('patternlab-build-global-data-end', patternlab);
564564

565565
// diveSync once to perform iterative populating of patternlab object
566-
return processAllPatternsIterative(pattern_assembler, paths.source.patterns, patternlab).then(() => {
566+
return processAllPatternsIterative(paths.source.patterns, patternlab).then(() => {
567567

568568
patternlab.events.emit('patternlab-pattern-iteration-end', patternlab);
569569

570570
//now that all the main patterns are known, look for any links that might be within data and expand them
571571
//we need to do this before expanding patterns & partials into extendedTemplates, otherwise we could lose the data -> partial reference
572-
pattern_assembler.parse_data_links(patternlab);
572+
pattern_assembler.parse_data_links(patternlab);
573573

574574
//diveSync again to recursively include partials, filling out the
575575
//extendedTemplate property of the patternlab.patterns elements
576576
// TODO we can reduce the time needed by only processing changed patterns and their partials
577-
processAllPatternsRecursive(pattern_assembler, paths.source.patterns, patternlab);
577+
processAllPatternsRecursive(paths.source.patterns, patternlab);
578578

579579
//take the user defined head and foot and process any data and patterns that apply
580580
processHeadPattern();
@@ -654,7 +654,7 @@ const patternlab_engine = function (config) {
654654
}
655655
patternlab.isBusy = true;
656656
return buildPatterns(deletePatternDir).then(() => {
657-
new ui().buildFrontend(patternlab);
657+
new ui_builder().buildFrontend(patternlab);
658658
printDebug();
659659
patternlab.isBusy = false;
660660
callback();

pattern_exports/test-paramParent.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<div class="foo">
2+
<a href="&#x2F;patterns&#x2F;00-test-00-foo&#x2F;00-test-00-foo.rendered.html">Cool Dude</a>
3+
</div>
4+

test/files/_patterns/00-test/01-bar.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
status: complete
2+
state: complete
33
title: An Atom Walks Into a Bar
44
joke: bad
55
---
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
### Only baz
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
baz

test/markdown_parser_tests.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ var markdown_parser = new mp();
1010

1111
tap.test('parses pattern description block correctly when frontmatter not present', function(test) {
1212
//arrange
13-
var markdownFileName = path.resolve("./test/files/_patterns/00-test/00-foo.md");
13+
var markdownFileName = path.resolve("./test/files/_patterns/00-test/02-baz.md");
1414
var markdownFileContents = fs.readFileSync(markdownFileName, 'utf8');
1515

1616
//act
1717
var returnObject = markdown_parser.parse(markdownFileContents);
1818

1919
//assert
20-
test.equals(returnObject.markdown, '<h2>A Simple Include</h2>\n<p>This pattern contains an include of <code>test-bar</code>. It also has this markdown file, which does not have frontmatter.</p>\n');
20+
test.equals(returnObject.markdown, '<h3>Only baz</h3>\n');
2121
test.end();
2222
});
2323

test/pattern_assembler_tests.js

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@ tap.test('process_pattern_recursive recursively includes partials', function(tes
4848
patternlab.partials = {};
4949

5050
//diveSync once to perform iterative populating of patternlab object
51-
plMain.process_all_patterns_iterative(pattern_assembler, patterns_dir, patternlab)
51+
plMain.process_all_patterns_iterative(patterns_dir, patternlab)
5252
.then(() => {
5353
//diveSync again to recursively include partials, filling out the
5454
//extendedTemplate property of the patternlab.patterns elements
55-
plMain.process_all_patterns_recursive(pattern_assembler, patterns_dir, patternlab);
55+
plMain.process_all_patterns_recursive(patterns_dir, patternlab);
5656

5757
//get test output for comparison
5858
var foo = fs.readFileSync(patterns_dir + '/00-test/00-foo.mustache', 'utf8').trim();
@@ -491,7 +491,7 @@ tap.test('parseDataLinks - replaces found link.* data for their expanded links',
491491
patternlab.partials = {};
492492

493493
//diveSync once to perform iterative populating of patternlab object
494-
plMain.process_all_patterns_iterative(pattern_assembler, patterns_dir, patternlab)
494+
plMain.process_all_patterns_iterative( patterns_dir, patternlab)
495495
.then(() => {
496496
//for the sake of the test, also imagining I have the following pages...
497497
patternlab.data.link['twitter-brad'] = 'https://twitter.com/brad_frost';
@@ -740,14 +740,17 @@ tap.test('parses pattern title correctly when frontmatter present', function(tes
740740
var pl = util.fakePatternLab(testPatternsPath);
741741
var pattern_assembler = new pa();
742742

743-
//act
744743
var testPatternPath = path.join('00-test', '01-bar.mustache');
745-
var testPattern = pattern_assembler.process_pattern_iterative(testPatternPath, pl);
746-
pattern_assembler.process_pattern_recursive(testPatternPath, pl);
744+
var testPattern = pattern_assembler.load_pattern_iterative(testPatternPath, pl);
747745

748-
//assert
749-
test.equals(testPattern.patternName, 'An Atom Walks Into a Bar','patternName not overridden');
750-
test.end();
746+
//act
747+
return Promise.all([
748+
pattern_assembler.process_pattern_iterative(testPattern, pl),
749+
pattern_assembler.process_pattern_recursive(testPatternPath, pl)
750+
]).then((results) => {
751+
//assert
752+
test.equals(results[0].patternName, 'An Atom Walks Into a Bar','patternName not overridden');
753+
}).catch(test.threw);
751754
});
752755

753756
tap.test('parses pattern extra frontmatter correctly when frontmatter present', function(test){
@@ -758,12 +761,16 @@ tap.test('parses pattern extra frontmatter correctly when frontmatter present',
758761
var pl = util.fakePatternLab(testPatternsPath);
759762
var pattern_assembler = new pa();
760763

761-
//act
762764
var testPatternPath = path.join('00-test', '01-bar.mustache');
763-
var testPattern = pattern_assembler.process_pattern_iterative(testPatternPath, pl);
764-
pattern_assembler.process_pattern_recursive(testPatternPath, pl);
765+
var testPattern = pattern_assembler.load_pattern_iterative(testPatternPath, pl);
765766

766-
//assert
767-
test.equals(testPattern.allMarkdown.joke, 'bad','extra key not added');
768-
test.end();
769-
});
767+
//act
768+
return Promise.all([
769+
pattern_assembler.process_pattern_iterative(testPattern, pl),
770+
pattern_assembler.process_pattern_recursive(testPatternPath, pl)
771+
]).then((results) => {
772+
//assert
773+
test.equals(results[0].allMarkdown.joke, 'bad','extra key not added');
774+
775+
}).catch(test.threw);
776+
});

test/patternlab_tests.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ var config = require('./util/patternlab-config.json');
99
var plEngineModule = rewire('../core/lib/patternlab');
1010

1111
//set up a global mocks - we don't want to be writing/rendering any files right now
12-
const uiBuilderMock = {
13-
buildFrontend: function (patternlab) { }
12+
const uiBuilderMock = function(){
13+
return {
14+
buildFrontend: function () { }
15+
};
1416
};
1517

1618
const fsMock = {
@@ -49,8 +51,8 @@ tap.test('buildPatterns - should replace data link even when pattern parameter p
4951
only on the order of events within build.
5052
*/
5153
export_patterns: function (patternlab) {
52-
var pattern = _.find(patternlab.patterns, (pattern) => {
53-
return pattern.patternPartial === 'test-paramParent';
54+
var pattern = _.find(patternlab.patterns, (p) => {
55+
return p.patternPartial === 'test-paramParent';
5456
});
5557
//assert
5658
test.equals(pattern.patternPartialCode.indexOf('00-test-00-foo.rendered.html') > -1, true, 'data link should be replaced properly');

0 commit comments

Comments
 (0)