Skip to content

Commit df19acc

Browse files
author
Pavel Petroshenko
authored
Merge pull request #51 from electricimp/develop
v2.5.0
2 parents 5349b46 + 6196bf0 commit df19acc

27 files changed

+168
-96
lines changed

Diff for: package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{
22
"name": "Builder",
3-
"version": "2.4.0",
3+
"version": "2.5.0",
44
"description": "Builder Language Implementation",
55
"main": "src/index.js",
66
"bin": {
77
"pleasebuild": "src/cli.js"
88
},
99
"scripts": {
10-
"test": "node_modules/jasmine/bin/jasmine.js",
10+
"test": "jasmine",
1111
"build": "src/cli.js input"
1212
},
1313
"repository": {
@@ -36,6 +36,7 @@
3636
"jasmine-diff-matchers": "^2.0.0",
3737
"jasmine-expect": "^2.0.2",
3838
"log": "^1.4.0",
39+
"eol": "^0.9.1",
3940
"fixture-stdout": "^0.2.1"
4041
}
4142
}

Diff for: spec/AstParser/sample-1.spec.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2016-2017 Electric Imp
1+
// Copyright (c) 2016-2019 Electric Imp
22
// This file is licensed under the MIT License
33
// http://opensource.org/licenses/MIT
44

@@ -8,6 +8,7 @@ require('jasmine-expect');
88

99
const fs = require('fs');
1010
const path = require('path');
11+
const eol = require('eol');
1112
const AstParser = require('../../src/AstParser');
1213

1314
const FILE = __dirname + '/../fixtures/sample-1/input.nut';
@@ -18,7 +19,7 @@ describe('AstParser', () => {
1819
parser.file = path.basename(FILE);
1920

2021
it('should do sample #1 alright', () => {
21-
const res = parser.parse(fs.readFileSync(FILE, 'utf-8'));
22+
const res = parser.parse(eol.lf(fs.readFileSync(FILE, 'utf-8')));
2223
expect(res).toEqual(require(FILE + '.json'));
2324
// console.log(JSON.stringify(res, null, ' '));
2425
});

Diff for: spec/AstParser/sample-2.spec.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2016-2017 Electric Imp
1+
// Copyright (c) 2016-2019 Electric Imp
22
// This file is licensed under the MIT License
33
// http://opensource.org/licenses/MIT
44

@@ -8,6 +8,7 @@ require('jasmine-expect');
88

99
const fs = require('fs');
1010
const path = require('path');
11+
const eol = require('eol');
1112
const AstParser = require('../../src/AstParser');
1213

1314
const FILE = __dirname + '/../fixtures/sample-2/input.nut';
@@ -18,7 +19,7 @@ describe('AstParser', () => {
1819
parser.file = path.basename(FILE);
1920

2021
it('should do sample #2 alright', () => {
21-
const res = parser.parse(fs.readFileSync(FILE, 'utf-8'));
22+
const res = parser.parse(eol.lf(fs.readFileSync(FILE, 'utf-8')));
2223
expect(res).toEqual(require(FILE + '.json'));
2324
// console.log(JSON.stringify(res, null, ' '));
2425
});

Diff for: spec/AstParser/sample-3.spec.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2016-2017 Electric Imp
1+
// Copyright (c) 2016-2019 Electric Imp
22
// This file is licensed under the MIT License
33
// http://opensource.org/licenses/MIT
44

@@ -8,6 +8,7 @@ require('jasmine-expect');
88

99
const fs = require('fs');
1010
const path = require('path');
11+
const eol = require('eol');
1112
const AstParser = require('../../src/AstParser');
1213

1314
const FILE = __dirname + '/../fixtures/sample-3/input.nut';
@@ -18,7 +19,7 @@ describe('AstParser', () => {
1819
parser.file = path.basename(FILE);
1920

2021
it('should do sample #3 alright', () => {
21-
const res = parser.parse(fs.readFileSync(FILE, 'utf-8'));
22+
const res = parser.parse(eol.lf(fs.readFileSync(FILE, 'utf-8')));
2223
expect(res).toEqual(require(FILE + '.json'));
2324
// console.log(JSON.stringify(res, null, ' '));
2425
});

Diff for: spec/GithubReader.spec.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
// Copyright (c) 2016-2017 Electric Imp
1+
// Copyright (c) 2016-2019 Electric Imp
22
// This file is licensed under the MIT License
33
// http://opensource.org/licenses/MIT
44

55
'use strict';
66

77
const fs = require('fs');
88
const Log = require('log');
9+
const eol = require('eol');
910
const GithubReader = require('../src/Readers/GithubReader');
1011
const jasmineDiffMatchers = require('jasmine-diff-matchers');
1112

@@ -26,8 +27,7 @@ describe('GithubReader', () => {
2627

2728
it('should read sample#1 from GH', () => {
2829
let remote;
29-
const local = fs.readFileSync(__dirname + '/fixtures/sample-1/input.nut', 'utf-8');
30-
30+
const local = eol.lf(fs.readFileSync(__dirname + '/fixtures/sample-1/input.nut', 'utf-8'));
3131
reader.username = process.env.SPEC_GITHUB_USERNAME;
3232
reader.password = process.env.SPEC_GITHUB_PASSWORD || process.env.SPEC_GITHUB_TOKEN;
3333

Diff for: spec/IncludeLineBrake.spec.js

+15-13
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2016-2017 Electric Imp
1+
// Copyright (c) 2016-2019 Electric Imp
22
// This file is licensed under the MIT License
33
// http://opensource.org/licenses/MIT
44

@@ -9,6 +9,8 @@ const Machine = require('../src/Machine');
99
const Log = require('log');
1010
const fs = require('fs');
1111

12+
const backslashToSlash = require('./backslashToSlash')
13+
1214
describe('Builder', () => {
1315

1416
let builder;
@@ -26,26 +28,26 @@ describe('Builder', () => {
2628
it('should add end of file symbol at the end of local files', () => {
2729

2830
let output = builder.machine.execute(`
29-
@include "${__dirname}/fixtures/sample-11/OneLineSample.nut"
30-
@include "${__dirname}/fixtures/sample-11/LineBrakeSample.nut"
31-
@include "${__dirname}/fixtures/sample-11/OneLineSample.nut"
32-
@include "${__dirname}/fixtures/sample-11/LineBrakeSample.nut"
31+
@include "${backslashToSlash(__dirname)}/fixtures/sample-11/OneLineSample.nut"
32+
@include "${backslashToSlash(__dirname)}/fixtures/sample-11/LineBrakeSample.nut"
33+
@include "${backslashToSlash(__dirname)}/fixtures/sample-11/OneLineSample.nut"
34+
@include "${backslashToSlash(__dirname)}/fixtures/sample-11/LineBrakeSample.nut"
3335
`);
3436
expect(output.split('\n').length).toBe(6);
3537

3638
output = builder.machine.execute(`
37-
@include "${__dirname}/fixtures/sample-11/OneLineSample.nut"
38-
@include "${__dirname}/fixtures/sample-11/OneLineSample.nut"
39-
@include "${__dirname}/fixtures/sample-11/OneLineSample.nut"
40-
@include "${__dirname}/fixtures/sample-11/OneLineSample.nut"
39+
@include "${backslashToSlash(__dirname)}/fixtures/sample-11/OneLineSample.nut"
40+
@include "${backslashToSlash(__dirname)}/fixtures/sample-11/OneLineSample.nut"
41+
@include "${backslashToSlash(__dirname)}/fixtures/sample-11/OneLineSample.nut"
42+
@include "${backslashToSlash(__dirname)}/fixtures/sample-11/OneLineSample.nut"
4143
`);
4244
expect(output.split('\n').length).toBe(6);
4345

4446
output = builder.machine.execute(`
45-
@include "${__dirname}/fixtures/sample-11/LineBrakeSample.nut"
46-
@include "${__dirname}/fixtures/sample-11/LineBrakeSample.nut"
47-
@include "${__dirname}/fixtures/sample-11/LineBrakeSample.nut"
48-
@include "${__dirname}/fixtures/sample-11/LineBrakeSample.nut"
47+
@include "${backslashToSlash(__dirname)}/fixtures/sample-11/LineBrakeSample.nut"
48+
@include "${backslashToSlash(__dirname)}/fixtures/sample-11/LineBrakeSample.nut"
49+
@include "${backslashToSlash(__dirname)}/fixtures/sample-11/LineBrakeSample.nut"
50+
@include "${backslashToSlash(__dirname)}/fixtures/sample-11/LineBrakeSample.nut"
4951
`);
5052
expect(output.split('\n').length).toBe(6);
5153
});

Diff for: spec/Machine/built-in-functions.spec.js

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2016-2017 Electric Imp
1+
// Copyright (c) 2016-2019 Electric Imp
22
// This file is licensed under the MIT License
33
// http://opensource.org/licenses/MIT
44

@@ -8,6 +8,8 @@ require('jasmine-expect');
88
const init = require('./init')('main');
99
const Machine = require('../../src/Machine');
1010

11+
const backslashToSlash = require('../backslashToSlash');
12+
1113
describe('Machine', () => {
1214
let machine;
1315

@@ -17,9 +19,10 @@ describe('Machine', () => {
1719

1820
it('should handle built-in function include()', () => {
1921
const res = machine.execute(
20-
`@{include('${__dirname + '/../fixtures/lib/d.builder'}')|escape}`
21-
);
22-
expect(res).toEqual(`d.builder\\nd.builder:2`);
22+
`@{include('${backslashToSlash(__dirname) + '/../fixtures/lib/d.builder'}')|escape}`
23+
);
24+
// eol normalize \r\n at end of line only. Replace \r\n inside line.
25+
expect(res.replace('\\r\\n','\\n')).toEqual(`d.builder\\nd.builder:2`);
2326
});
2427

2528
it('should handle errors in include() calls', () => {

Diff for: spec/Machine/comments.spec.js

+10-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// MIT License
22
//
3-
// Copyright 2017 Electric Imp
3+
// Copyright 2017-2019 Electric Imp
44
//
55
// SPDX-License-Identifier: MIT
66
//
@@ -26,8 +26,11 @@
2626

2727
require('jasmine-expect');
2828
const init = require('./init')('main');
29+
const eol = require('eol');
2930
const jasmineDiffMatchers = require('jasmine-diff-matchers');
3031

32+
const backslashToSlash = require('../backslashToSlash');
33+
3134
describe('Machine', () => {
3235
let machine;
3336

@@ -39,12 +42,12 @@ describe('Machine', () => {
3942

4043
it('should handle comments in include corectly', () => {
4144
const ans = 'a.builder\n';
42-
expect(machine.execute(`@include "${__dirname}/../fixtures/" + "lib/a.builder" // comment`)).toEqual(ans);
43-
expect(machine.execute(`@include "${__dirname}/../fixtures//" + '//lib/a.builder' // comment`)).toEqual(ans);
44-
expect(machine.execute(`@include "${__dirname}/../fixtures/lib/a.builder"//comment+/comment+"some more comment"`)).toEqual(ans);
45-
expect(machine.execute(`@include "${__dirname}/../fixtures/" + 'lib/a.builder' // comment with //`)).toEqual(ans);
46-
expect(machine.execute(`@include "${__dirname}/../fixtures/lib/a.builder" // comment with some expr (1 | 0)`)).toEqual(ans);
47-
expect(machine.execute(`@include "${__dirname}/../fixtures/" + 'lib/a.builder' // comment with " ' ( ] {`)).toEqual(ans);
45+
expect(eol.lf(machine.execute(`@include "${backslashToSlash(__dirname)}/../fixtures/" + "lib/a.builder" // comment`))).toEqual(ans);
46+
expect(eol.lf(machine.execute(`@include "${backslashToSlash(__dirname)}/../fixtures//" + '//lib/a.builder' // comment`))).toEqual(ans);
47+
expect(eol.lf(machine.execute(`@include "${backslashToSlash(__dirname)}/../fixtures/lib/a.builder"//comment+/comment+"some more comment"`))).toEqual(ans);
48+
expect(eol.lf(machine.execute(`@include "${backslashToSlash(__dirname)}/../fixtures/" + 'lib/a.builder' // comment with //`))).toEqual(ans);
49+
expect(eol.lf(machine.execute(`@include "${backslashToSlash(__dirname)}/../fixtures/lib/a.builder" // comment with some expr (1 | 0)`))).toEqual(ans);
50+
expect(eol.lf(machine.execute(`@include "${backslashToSlash(__dirname)}/../fixtures/" + 'lib/a.builder' // comment with " ' ( ] {`))).toEqual(ans);
4851
});
4952

5053
it('should handle @while corectly #1', () => {

Diff for: spec/Machine/file-path.spec.js

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1-
// Copyright (c) 2016-2017 Electric Imp
1+
// Copyright (c) 2016-2019 Electric Imp
22
// This file is licensed under the MIT License
33
// http://opensource.org/licenses/MIT
44

55
'use strict';
66

77
require('jasmine-expect');
88
const path = require('path');
9+
const eol = require('eol');
910
const init = require('./init')('main');
1011

12+
const backslashToSlash = require('../backslashToSlash');
13+
1114
describe('Machine', () => {
1215
let machine;
1316

@@ -19,12 +22,12 @@ describe('Machine', () => {
1922
machine.path = 'some/path/to';
2023
machine.file = 'file.ext';
2124

22-
const res = machine.execute(
25+
const res = eol.lf(machine.execute(
2326
`@macro A()
2427
@{__PATH__}#@{__FILE__}@@{__LINE__}
2528
@end
2629
@{__PATH__}#@{__FILE__}@@{__LINE__}
27-
@include A()`);
30+
@include A()`));
2831

2932
expect(res).toEqual(`some/path/to#file.ext@4\nsome/path/to#file.ext@2\n`);
3033
});
@@ -37,8 +40,8 @@ describe('Machine', () => {
3740

3841
it('should generate correct __FILE__/__PATH__ #3', () => {
3942
machine.file = '';
40-
const res = machine.execute(`@{__PATH__}#@{__FILE__}@@{__LINE__}
41-
@include "${__dirname}/../fixtures/lib/path.builder"`);
43+
const res = eol.lf(machine.execute(`@{__PATH__}#@{__FILE__}@@{__LINE__}
44+
@include "${backslashToSlash(__dirname)}/../fixtures/lib/path.builder"`));
4245
// __PATH__ should be absolute (when possible), normalized one
4346
expect(res).toEqual(`#@1\n${path.normalize(__dirname + '/../fixtures/lib')}#path.builder@1\n`);
4447
});

Diff for: spec/Machine/include-once.spec.js

+11-9
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
// Copyright (c) 2016-2017 Electric Imp
1+
// Copyright (c) 2016-2019 Electric Imp
22
// This file is licensed under the MIT License
33
// http://opensource.org/licenses/MIT
44

55
'use strict';
66

77
require('jasmine-expect');
88
const init = require('./init')('main');
9+
const eol = require('eol');
10+
const backslashToSlash = require('../backslashToSlash');
911

1012
describe('Machine', () => {
1113
let machine;
@@ -15,19 +17,19 @@ describe('Machine', () => {
1517
});
1618

1719
it('should handle include-once corectly #1', () => {
18-
const res = machine.execute(
19-
`@include "${__dirname}/../fixtures/lib/a.builder"
20-
@include once "${__dirname}/../fixtures/lib/b.builder"
21-
@include once "${__dirname}/../fixtures/lib/a.builder"
22-
@include once "${__dirname}/../fixtures/lib/b.builder"
23-
@include once "${__dirname}/../fixtures/lib/c.builder"`
24-
);
20+
const res = eol.lf(machine.execute(
21+
`@include "${backslashToSlash(__dirname)}/../fixtures/lib/a.builder"
22+
@include once "${backslashToSlash(__dirname)}/../fixtures/lib/b.builder"
23+
@include once "${backslashToSlash(__dirname)}/../fixtures/lib/a.builder"
24+
@include once "${backslashToSlash(__dirname)}/../fixtures/lib/b.builder"
25+
@include once "${backslashToSlash(__dirname)}/../fixtures/lib/c.builder"`
26+
));
2527
expect(res).toEqual(`a.builder\nb.builder\nc.builder\n`);
2628
});
2729

2830
it('should handle include-once corectly #2', () => {
2931
const res = machine.execute(
30-
`@include once "github:electricimp/Builder/spec/fixtures/lib/path.builder@v0.2.0"
32+
`@include once "github:electricimp/Builder/spec/fixtures/lib/path.builder@v0.2.0"
3133
@include once "github:electricimp/Builder/spec/fixtures/lib/path.builder@v0.2.0"`
3234
);
3335
expect(res).toEqual(`github:electricimp/Builder/spec/fixtures/lib#path.builder@1\n`);

Diff for: spec/Machine/init.js

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2016-2017 Electric Imp
1+
// Copyright (c) 2016-2019 Electric Imp
22
// This file is licensed under the MIT License
33
// http://opensource.org/licenses/MIT
44

@@ -7,6 +7,7 @@
77
const fs = require('fs');
88
const Log = require('log');
99
const path = require('path');
10+
const eol = require('eol');
1011
const Builder = require('../../src/');
1112

1213
module.exports = (sampleFile) => {
@@ -17,7 +18,7 @@ module.exports = (sampleFile) => {
1718
const libFile = `${path.dirname(sampleFile)}/libs`;
1819
let libs = [];
1920
if (fs.existsSync(libFile)) {
20-
libs = fs.readFileSync(libFile).toString().split('\n').map(l => `${path.dirname(sampleFile)}/${l}`);
21+
libs = eol.lf(fs.readFileSync(libFile).toString()).split('\n').map(l => `${path.dirname(sampleFile)}/${l}`);
2122
}
2223
const builder = new Builder({ libs });
2324
builder.logger = new Log(process.env.SPEC_LOGLEVEL || 'error');
@@ -28,17 +29,17 @@ module.exports = (sampleFile) => {
2829
},
2930

3031
getResult: () => {
31-
return fs.readFileSync(sampleFile + '.out', 'utf-8');
32+
return eol.lf(fs.readFileSync(sampleFile + '.out', 'utf-8'));
3233
},
3334

3435
getResultWithLineControl: () => {
3536
let content;
3637
try {
37-
content = fs.readFileSync(sampleFile + '.out-lc', 'utf-8');
38+
content = eol.lf(fs.readFileSync(sampleFile + '.out-lc', 'utf-8'));
3839
} catch (err) {
3940
if (err.code == 'ENOENT') {
4041
const platform = /^win/.test(process.platform) ? '-win' : '-unix';
41-
content = fs.readFileSync(sampleFile + '.out-lc' + platform, 'utf-8');
42+
content = eol.lf(fs.readFileSync(sampleFile + '.out-lc' + platform, 'utf-8'));
4243
} else {
4344
throw err;
4445
}

Diff for: spec/Machine/sample-1.spec.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2016-2017 Electric Imp
1+
// Copyright (c) 2016-2019 Electric Imp
22
// This file is licensed under the MIT License
33
// http://opensource.org/licenses/MIT
44

@@ -8,6 +8,7 @@ require('jasmine-expect');
88

99
const FILE = __dirname + '/../fixtures/sample-1/input.nut';
1010
const init = require('./init')(FILE);
11+
const eol = require('eol');
1112

1213
describe('Machine', () => {
1314
let machine, result, resultWithLC;
@@ -19,8 +20,8 @@ describe('Machine', () => {
1920
});
2021

2122
it('should do something alright #1', () => {
22-
expect(machine.execute('@include "input.nut"')).toBe(result);
23+
expect(eol.lf(machine.execute('@include "input.nut"'))).toBe(result);
2324
machine.generateLineControlStatements = true;
24-
expect(machine.execute('@include "input.nut"')).toBe(resultWithLC);
25+
expect(eol.lf(machine.execute('@include "input.nut"'))).toBe(resultWithLC);
2526
});
2627
});

0 commit comments

Comments
 (0)