Skip to content

Commit

Permalink
Removed legacy preprocessor include
Browse files Browse the repository at this point in the history
  • Loading branch information
mde committed Nov 24, 2019
1 parent a8be7ec commit c6bca15
Show file tree
Hide file tree
Showing 14 changed files with 1 addition and 242 deletions.
29 changes: 0 additions & 29 deletions lib/ejs.js
Expand Up @@ -736,35 +736,6 @@ Template.prototype = {
throw new Error('Could not find matching close tag for "' + line + '".');
}
}
// HACK: backward-compat `include` preprocessor directives
if (opts.legacyInclude && (include = line.match(/^\s*include\s+(\S+)/))) {
opening = matches[index - 1];
// Must be in EVAL or RAW mode
if (opening && (opening == o + d || opening == o + d + '-' || opening == o + d + '_')) {
includeOpts = utils.shallowCopy({}, self.opts);
includeObj = includeSource(include[1], includeOpts);
if (self.opts.compileDebug) {
includeSrc =
' ; (function(){' + '\n'
+ ' var __line = 1' + '\n'
+ ' , __lines = ' + JSON.stringify(includeObj.template) + '\n'
+ ' , __filename = ' + JSON.stringify(includeObj.filename) + ';' + '\n'
+ ' try {' + '\n'
+ includeObj.source
+ ' } catch (e) {' + '\n'
+ ' rethrow(e, __lines, __filename, __line, escapeFn);' + '\n'
+ ' }' + '\n'
+ ' ; }).call(this)' + '\n';
}else{
includeSrc = ' ; (function(){' + '\n' + includeObj.source +
' ; }).call(this)' + '\n';
}
self.source += includeSrc;
self.dependencies.push(exports.resolveInclude(include[1],
includeOpts.filename));
return;
}
}
self.scanLine(line);
});
}
Expand Down
158 changes: 0 additions & 158 deletions test/ejs.js
Expand Up @@ -563,42 +563,6 @@ suite('ejs.renderFile(path, [data], [options], [fn])', function () {

});

test('support express multiple views folders, falls back to second if first is not available (include preprocessor)', function (done) {
var data = {
viewsText: 'test',
settings: {
views: [
path.join(__dirname, 'fixtures/nonexistent-folder'),
path.join(__dirname, 'fixtures')
]
}
};
ejs.renderFile(path.join(__dirname, 'fixtures/views-old.ejs'), data, function(error, data){
assert.ifError(error);
assert.equal('<div><p>global test</p>\n</div>\n', data);
done();
});

});

test('looks relative to the containing file first (include preprocessor)', function (done) {
var data = {
viewsText: 'test',
settings: {
views: [
path.join(__dirname, 'fixtures/views'),
path.join(__dirname, 'fixtures')
]
}
};
ejs.renderFile(path.join(__dirname, 'fixtures/views-old.ejs'), data, function(error, data){
assert.ifError(error);
assert.equal('<div><p>global test</p>\n</div>\n', data);
done();
});

});

test('can reference by paths with directory names', function (done) {
var data = {
viewsText: 'test',
Expand Down Expand Up @@ -1113,128 +1077,6 @@ suite('include()', function () {

});

suite('preprocessor include', function () {
test('work', function () {
var file = 'test/fixtures/include_preprocessor.ejs';
assert.equal(ejs.render(fixture('include_preprocessor.ejs'), {pets: users}, {filename: file, delimiter: '@'}),
fixture('include_preprocessor.html'));
});

test('no false positives', function () {
assert.equal(ejs.render('<% %> include foo <% %>'), ' include foo ');
});

test('fails without `filename`', function () {
try {
ejs.render(fixture('include_preprocessor.ejs'), {pets: users}, {delimiter: '@'});
}
catch (err) {
assert.ok(err.message.indexOf('Could not find') > -1);
return;
}
throw new Error('expected inclusion error');
});

test('strips BOM', function () {
assert.equal(
ejs.render('<% include fixtures/includes/bom.ejs %>',
{}, {filename: path.join(__dirname, 'f.ejs')}),
'<p>This is a file with BOM.</p>\n');
});

test('work when nested', function () {
var file = 'test/fixtures/menu_preprocessor.ejs';
assert.equal(ejs.render(fixture('menu_preprocessor.ejs'), {pets: users}, {filename: file}),
fixture('menu_preprocessor.html'));
});

test('tracks dependency correctly', function () {
var file = 'test/fixtures/menu_preprocessor.ejs';
var fn = ejs.compile(fixture('menu_preprocessor.ejs'), {filename: file});
assert(fn.dependencies.length);
});

test('include arbitrary files as-is', function () {
var file = 'test/fixtures/include_preprocessor.css.ejs';
assert.equal(ejs.render(fixture('include_preprocessor.css.ejs'), {pets: users}, {filename: file}),
fixture('include_preprocessor.css.html'));
});

test('pass compileDebug to include', function () {
var file = 'test/fixtures/include_preprocessor.ejs';
var fn;
fn = ejs.compile(fixture('include_preprocessor.ejs'), {
filename: file,
delimiter: '@',
compileDebug: false
});
try {
// Render without a required variable reference
fn({foo: 'asdf'});
}
catch(e) {
assert.equal(e.message, 'pets is not defined');
assert.ok(!e.path);
return;
}
throw new Error('no error reported when there should be');
});

test('is static', function () {
fs.writeFileSync(__dirname + '/tmp/include_preprocessor.ejs', '<p>Old</p>');
var file = 'test/fixtures/include_preprocessor_cache.ejs';
var options = {filename: file};
var out = ejs.compile(fixture('include_preprocessor_cache.ejs'), options);
assert.equal(out(), '<p>Old</p>\n');

fs.writeFileSync(__dirname + '/tmp/include_preprocessor.ejs', '<p>New</p>');
assert.equal(out(), '<p>Old</p>\n');
});

test('support caching', function () {
fs.writeFileSync(__dirname + '/tmp/include_preprocessor.ejs', '<p>Old</p>');
var file = 'test/fixtures/include_preprocessor_cache.ejs';
var options = {cache: true, filename: file};
var out = ejs.render(fixture('include_preprocessor_cache.ejs'), {}, options);
var expected = fixture('include_preprocessor_cache.html');
assert.equal(out, expected);
fs.writeFileSync(__dirname + '/tmp/include_preprocessor.ejs', '<p>New</p>');
out = ejs.render(fixture('include_preprocessor_cache.ejs'), {}, options);
assert.equal(out, expected);
});

test('whitespace slurp and rmWhitespace work', function() {
var file = 'test/fixtures/include_preprocessor_line_slurp.ejs';
var template = fixture('include_preprocessor_line_slurp.ejs');
var expected = fixture('include_preprocessor_line_slurp.html');
var options = {rmWhitespace: true, filename: file};
assert.equal(ejs.render(template, {}, options),
expected);
});

test('handles errors in included file', function() {
try {
ejs.render('<%- include fixtures/include-with-error %>', {}, {filename: path.join(__dirname, 'f.ejs')});
}
catch (err) {
assert.ok(err.message.indexOf('foobar is not defined') > -1);
return;
}
throw new Error('expected inclusion error');
});

test('legacy includes are a syntax error when disabled', function() {
try {
ejs.render('<%- include is-syntax-error %>', null, {legacyInclude: false});
}
catch (err) {
assert.ok(err.message.indexOf('missing ) after argument list') > -1);
return;
}
throw new Error('expected SyntaxError from legacy include being disabled');
});
});

suite('comments', function () {
test('fully render with comments removed', function () {
assert.equal(ejs.render(fixture('comments.ejs')),
Expand Down
1 change: 0 additions & 1 deletion test/fixtures/include_preprocessor.css.ejs

This file was deleted.

4 changes: 0 additions & 4 deletions test/fixtures/include_preprocessor.css.html

This file was deleted.

5 changes: 0 additions & 5 deletions test/fixtures/include_preprocessor.ejs

This file was deleted.

12 changes: 0 additions & 12 deletions test/fixtures/include_preprocessor.html

This file was deleted.

1 change: 0 additions & 1 deletion test/fixtures/include_preprocessor_cache.ejs

This file was deleted.

1 change: 0 additions & 1 deletion test/fixtures/include_preprocessor_cache.html

This file was deleted.

1 change: 0 additions & 1 deletion test/fixtures/include_preprocessor_line_slurp.ejs

This file was deleted.

5 changes: 0 additions & 5 deletions test/fixtures/include_preprocessor_line_slurp.html

This file was deleted.

5 changes: 0 additions & 5 deletions test/fixtures/include_preprocessor_line_slurp_child.ejs

This file was deleted.

2 changes: 1 addition & 1 deletion test/fixtures/includes/menu-item.ejs
@@ -1 +1 @@
<li><% include menu/item %></li>
<li><%- include('menu/item', {url: url, title: title}); -%></li>
11 changes: 0 additions & 11 deletions test/fixtures/menu_preprocessor.ejs

This file was deleted.

8 changes: 0 additions & 8 deletions test/fixtures/menu_preprocessor.html

This file was deleted.

0 comments on commit c6bca15

Please sign in to comment.