aboutsummaryrefslogtreecommitdiffstats
path: root/dgbuilder/dgeflows/node_modules/ejs/test
diff options
context:
space:
mode:
authorTimoney, Daniel (dt5972) <dtimoney@att.com>2017-02-15 10:37:53 -0500
committerTimoney, Daniel (dt5972) <dtimoney@att.com>2017-02-15 10:40:37 -0500
commit324ee36fe31763e507b422ab0a88e4230045e205 (patch)
treed0b04520f6657601c918ce63fd27575977624187 /dgbuilder/dgeflows/node_modules/ejs/test
parentf0c97e8db427481e28c0a16b789bc73801b35e47 (diff)
Initial commit for OpenECOMP SDN-C OA&M
Change-Id: I7ab579fd0d206bf356f36d52dcdf4f71f1fa2680 Signed-off-by: Timoney, Daniel (dt5972) <dtimoney@att.com> Former-commit-id: 2a9f0edd09581f907e62ec4689b5ac94dd5382ba
Diffstat (limited to 'dgbuilder/dgeflows/node_modules/ejs/test')
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/ejs.js761
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/backslash.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/backslash.html1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/comments.ejs7
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/comments.html6
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/consecutive-tags.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/consecutive-tags.html1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/double-quote.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/double-quote.html1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/error.ejs5
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/error.out8
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/fail.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/hello-world.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include-abspath.ejs5
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include-simple.ejs3
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include-simple.html3
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include.css.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include.css.html3
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include.ejs5
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include.html9
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_cache.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_cache.html1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor.css.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor.css.html3
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor.ejs5
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor.html9
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor_cache.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor_cache.html1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/includes/bom.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/includes/menu-item.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/includes/menu/item.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/literal.ejs3
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/literal.html3
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu.ejs15
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu.html3
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu_preprocessor.ejs11
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu_preprocessor.html3
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu_var.ejs15
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/messed.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/messed.html1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/newlines.ejs5
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/newlines.html9
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/newlines.mixed.ejs6
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/newlines.mixed.html4
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.newlines.ejs5
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.newlines.error.ejs5
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.newlines.html5
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.semicolons.ejs8
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.semicolons.html3
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/para.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/pet.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/single-quote.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/single-quote.html1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/style.css3
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/user-no-with.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/fixtures/user.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/mocha.opts2
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/tmp/include.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/tmp/include_preprocessor.ejs1
-rw-r--r--dgbuilder/dgeflows/node_modules/ejs/test/tmp/renderFile.ejs1
60 files changed, 968 insertions, 0 deletions
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/ejs.js b/dgbuilder/dgeflows/node_modules/ejs/test/ejs.js
new file mode 100644
index 00000000..327e94ef
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/ejs.js
@@ -0,0 +1,761 @@
+/* jshint mocha: true */
+
+/**
+ * Module dependencies.
+ */
+
+var ejs = require('..')
+ , fs = require('fs')
+ , read = fs.readFileSync
+ , assert = require('assert')
+ , path = require('path');
+
+try {
+ fs.mkdirSync(__dirname + '/tmp');
+} catch (ex) {
+ if (ex.code !== 'EEXIST') {
+ throw ex;
+ }
+}
+
+// From https://gist.github.com/pguillory/729616
+function hook_stdio(stream, callback) {
+ var old_write = stream.write;
+
+ stream.write = (function() {
+ return function(string, encoding, fd) {
+ callback(string, encoding, fd);
+ };
+ })(stream.write);
+
+ return function() {
+ stream.write = old_write;
+ };
+}
+
+/**
+ * Load fixture `name`.
+ */
+
+function fixture(name) {
+ return read('test/fixtures/' + name, 'utf8').replace(/\r/g, '').trim();
+}
+
+/**
+ * User fixtures.
+ */
+
+var users = [];
+users.push({name: 'geddy'});
+users.push({name: 'neil'});
+users.push({name: 'alex'});
+
+suite('ejs.compile(str, options)', function () {
+ test('compile to a function', function () {
+ var fn = ejs.compile('<p>yay</p>');
+ assert.equal(fn(), '<p>yay</p>');
+ });
+
+ test('empty input works', function () {
+ var fn = ejs.compile('');
+ assert.equal(fn(), '');
+ });
+
+ test('throw if there are syntax errors', function () {
+ try {
+ ejs.compile(fixture('fail.ejs'));
+ }
+ catch (err) {
+ assert.ok(err.message.indexOf('compiling ejs') > -1);
+
+ try {
+ ejs.compile(fixture('fail.ejs'), {filename: 'fail.ejs'});
+ }
+ catch (err) {
+ assert.ok(err.message.indexOf('fail.ejs') > -1);
+ return;
+ }
+ }
+ throw new Error('no error reported when there should be');
+ });
+
+ test('allow customizing delimiter local var', function () {
+ var fn;
+ fn = ejs.compile('<p><?= name ?></p>', {delimiter: '?'});
+ assert.equal(fn({name: 'geddy'}), '<p>geddy</p>');
+
+ fn = ejs.compile('<p><:= name :></p>', {delimiter: ':'});
+ assert.equal(fn({name: 'geddy'}), '<p>geddy</p>');
+
+ fn = ejs.compile('<p><$= name $></p>', {delimiter: '$'});
+ assert.equal(fn({name: 'geddy'}), '<p>geddy</p>');
+ });
+
+ test('default to using ejs.delimiter', function () {
+ var fn;
+ ejs.delimiter = '&';
+ fn = ejs.compile('<p><&= name &></p>');
+ assert.equal(fn({name: 'geddy'}), '<p>geddy</p>');
+
+ fn = ejs.compile('<p><|= name |></p>', {delimiter: '|'});
+ assert.equal(fn({name: 'geddy'}), '<p>geddy</p>');
+ delete ejs.delimiter;
+ });
+
+ test('have a working client option', function () {
+ var fn
+ , str
+ , preFn;
+ fn = ejs.compile('<p><%= foo %></p>', {client: true});
+ str = fn.toString();
+ if (!process.env.running_under_istanbul) {
+ eval('var preFn = ' + str);
+ assert.equal(preFn({foo: 'bar'}), '<p>bar</p>');
+ }
+ });
+
+ test('support client mode without locals', function () {
+ var fn
+ , str
+ , preFn;
+ fn = ejs.compile('<p><%= "foo" %></p>', {client: true});
+ str = fn.toString();
+ if (!process.env.running_under_istanbul) {
+ eval('var preFn = ' + str);
+ assert.equal(preFn(), '<p>foo</p>');
+ }
+ });
+});
+
+suite('ejs.render(str, data)', function () {
+ test('render the template', function () {
+ assert.equal(ejs.render('<p>yay</p>'), '<p>yay</p>');
+ });
+
+ test('empty input works', function () {
+ assert.equal(ejs.render(''), '');
+ });
+
+ test('undefined renders nothing escaped', function () {
+ assert.equal(ejs.render('<%= undefined %>'), '');
+ });
+
+ test('undefined renders nothing raw', function () {
+ assert.equal(ejs.render('<%- undefined %>'), '');
+ });
+
+ test('null renders nothing escaped', function () {
+ assert.equal(ejs.render('<%= null %>'), '');
+ });
+
+ test('null renders nothing raw', function () {
+ assert.equal(ejs.render('<%- null %>'), '');
+ });
+
+ test('zero-value data item renders something escaped', function () {
+ assert.equal(ejs.render('<%= 0 %>'), '0');
+ });
+
+ test('zero-value data object renders something raw', function () {
+ assert.equal(ejs.render('<%- 0 %>'), '0');
+ });
+
+ test('accept locals', function () {
+ assert.equal(ejs.render('<p><%= name %></p>', {name: 'geddy'}),
+ '<p>geddy</p>');
+ });
+
+ test('accept locals without using with() {}', function () {
+ assert.equal(ejs.render('<p><%= locals.name %></p>', {name: 'geddy'},
+ {_with: false}),
+ '<p>geddy</p>');
+ assert.throws(function() {
+ ejs.render('<p><%= name %></p>', {name: 'geddy'},
+ {_with: false});
+ }, /name is not defined/);
+ });
+
+ test('accept custom name for locals', function () {
+ ejs.localsName = 'it';
+ assert.equal(ejs.render('<p><%= it.name %></p>', {name: 'geddy'},
+ {_with: false}),
+ '<p>geddy</p>');
+ assert.throws(function() {
+ ejs.render('<p><%= name %></p>', {name: 'geddy'},
+ {_with: false});
+ }, /name is not defined/);
+ ejs.localsName = 'locals';
+ });
+
+ test('support caching (pass 1)', function () {
+ var file = __dirname + '/tmp/render.ejs'
+ , options = {cache: true, filename: file}
+ , out = ejs.render('<p>Old</p>', {}, options)
+ , expected = '<p>Old</p>';
+ assert.equal(out, expected);
+ });
+
+ test('support caching (pass 2)', function () {
+ var file = __dirname + '/tmp/render.ejs'
+ , options = {cache: true, filename: file}
+ , out = ejs.render('<p>New</p>', {}, options)
+ , expected = '<p>Old</p>';
+ assert.equal(out, expected);
+ });
+});
+
+suite('ejs.renderFile(path, [data], [options], fn)', function () {
+ test('render a file', function(done) {
+ ejs.renderFile('test/fixtures/para.ejs', function(err, html) {
+ if (err) {
+ return done(err);
+ }
+ assert.equal(html, '<p>hey</p>');
+ done();
+ });
+ });
+
+ test('callback is async', function(done) {
+ var async = false;
+ ejs.renderFile('test/fixtures/para.ejs', function(err, html) {
+ if (async) {
+ return done();
+ }
+ throw new Error('not async');
+ });
+ async = true;
+ });
+
+ test('accept locals', function(done) {
+ var data = {name: 'fonebone'}
+ , options = {delimiter: '$'};
+ ejs.renderFile('test/fixtures/user.ejs', data, options, function(err, html) {
+ if (err) {
+ return done(err);
+ }
+ assert.equal(html, '<h1>fonebone</h1>');
+ done();
+ });
+ });
+
+ test('accept locals without using with() {}', function(done) {
+ var data = {name: 'fonebone'}
+ , options = {delimiter: '$', _with: false}
+ , doneCount = 0;
+ ejs.renderFile('test/fixtures/user-no-with.ejs', data, options,
+ function(err, html) {
+ if (err) {
+ if (doneCount === 2) {
+ return;
+ }
+ doneCount = 2;
+ return done(err);
+ }
+ assert.equal(html, '<h1>fonebone</h1>');
+ doneCount++;
+ if (doneCount === 2) {
+ done();
+ }
+ });
+ ejs.renderFile('test/fixtures/user.ejs', data, options, function(err) {
+ if (!err) {
+ if (doneCount === 2) {
+ return;
+ }
+ doneCount = 2;
+ return done(new Error('error not thrown'));
+ }
+ doneCount++;
+ if (doneCount === 2) {
+ done();
+ }
+ });
+ });
+
+ test('not catch err thrown by callback', function(done) {
+ var data = {name: 'fonebone'}
+ , options = {delimiter: '$'}
+ , counter = 0;
+
+ var d = require('domain').create();
+ d.on('error', function (err) {
+ assert.equal(counter, 1);
+ assert.equal(err.message, 'Exception in callback');
+ done();
+ });
+ d.run(function () {
+ // process.nextTick() needed to work around mochajs/mocha#513
+ //
+ // tl;dr: mocha doesn't support synchronous exception throwing in
+ // domains. Have to make it async. Ticket closed because: "domains are
+ // deprecated :D"
+ process.nextTick(function () {
+ ejs.renderFile('test/fixtures/user.ejs', data, options,
+ function(err) {
+ counter++;
+ if (err) {
+ assert.notEqual(err.message, 'Exception in callback');
+ return done(err);
+ }
+ throw new Error('Exception in callback');
+ });
+ });
+ });
+ });
+
+ test('support caching (pass 1)', function (done) {
+ var expected = '<p>Old</p>'
+ , file = __dirname + '/tmp/renderFile.ejs'
+ , options = {cache: true};
+ fs.writeFileSync(file, '<p>Old</p>');
+
+ ejs.renderFile(file, {}, options, function (err, out) {
+ if (err) {
+ done(err);
+ }
+ assert.equal(out, expected);
+ done();
+ });
+ });
+
+ test('support caching (pass 2)', function (done) {
+ var expected = '<p>Old</p>'
+ , file = __dirname + '/tmp/renderFile.ejs'
+ , options = {cache: true};
+ fs.writeFileSync(file, '<p>New</p>');
+
+ ejs.renderFile(file, {}, options, function (err, out) {
+ if (err) {
+ done(err);
+ }
+ assert.equal(out, expected);
+ done();
+ });
+ });
+});
+
+suite('ejs.clearCache()', function () {
+ test('work properly', function () {
+ var expected = '<p>Old</p>'
+ , file = __dirname + '/tmp/clearCache.ejs'
+ , options = {cache: true, filename: file}
+ , out = ejs.render('<p>Old</p>', {}, options);
+ assert.equal(out, expected);
+
+ ejs.clearCache();
+
+ expected = '<p>New</p>';
+ out = ejs.render('<p>New</p>', {}, options);
+ assert.equal(out, expected);
+ });
+});
+
+suite('<%', function () {
+ test('without semicolons', function () {
+ assert.equal(ejs.render(fixture('no.semicolons.ejs')),
+ fixture('no.semicolons.html'));
+ });
+});
+
+suite('<%=', function () {
+ test('escape &amp;<script>', function () {
+ assert.equal(ejs.render('<%= name %>', {name: '&nbsp;<script>'}),
+ '&amp;nbsp;&lt;script&gt;');
+ });
+
+ test('should escape \'', function () {
+ assert.equal(ejs.render('<%= name %>', {name: 'The Jones\'s'}),
+ 'The Jones&#39;s');
+ });
+
+ test('should escape &foo_bar;', function () {
+ assert.equal(ejs.render('<%= name %>', {name: '&foo_bar;'}),
+ '&amp;foo_bar;');
+ });
+});
+
+suite('<%-', function () {
+ test('not escape', function () {
+ assert.equal(ejs.render('<%- name %>', {name: '<script>'}),
+ '<script>');
+ });
+
+ test('terminate gracefully if no close tag is found', function () {
+ try {
+ ejs.compile('<h1>oops</h1><%- name ->');
+ throw new Error('Expected parse failure');
+ }
+ catch (err) {
+ assert.ok(err.message.indexOf('Could not find matching close tag for') > -1);
+ }
+ });
+});
+
+suite('%>', function () {
+ test('produce newlines', function () {
+ assert.equal(ejs.render(fixture('newlines.ejs'), {users: users}),
+ fixture('newlines.html'));
+ });
+ test('works with `-%>` interspersed', function () {
+ assert.equal(ejs.render(fixture('newlines.mixed.ejs'), {users: users}),
+ fixture('newlines.mixed.html'));
+ });
+ test('consecutive tags work', function () {
+ assert.equal(ejs.render(fixture('consecutive-tags.ejs')),
+ fixture('consecutive-tags.html'));
+ });
+});
+
+suite('-%>', function () {
+ test('not produce newlines', function () {
+ assert.equal(ejs.render(fixture('no.newlines.ejs'), {users: users}),
+ fixture('no.newlines.html'));
+ });
+ test('stack traces work', function () {
+ try {
+ ejs.render(fixture('no.newlines.error.ejs'));
+ }
+ catch (e) {
+ if (e.message.indexOf('>> 4| <%= qdata %>') > -1) {
+ return;
+ }
+ throw e;
+ }
+ throw new Error('Expected ReferenceError');
+ });
+});
+
+suite('<%%', function () {
+ test('produce literals', function () {
+ assert.equal(ejs.render('<%%- "foo" %>'),
+ '<%- "foo" %>');
+ });
+ test('work without an end tag', function () {
+ assert.equal(ejs.render('<%%'), '<%');
+ assert.equal(ejs.render(fixture('literal.ejs'), {}, {delimiter: ' '}),
+ fixture('literal.html'));
+ });
+});
+
+suite('single quotes', function () {
+ test('not mess up the constructed function', function () {
+ assert.equal(ejs.render(fixture('single-quote.ejs')),
+ fixture('single-quote.html'));
+ });
+});
+
+suite('double quotes', function () {
+ test('not mess up the constructed function', function () {
+ assert.equal(ejs.render(fixture('double-quote.ejs')),
+ fixture('double-quote.html'));
+ });
+});
+
+suite('backslashes', function () {
+ test('escape', function () {
+ assert.equal(ejs.render(fixture('backslash.ejs')),
+ fixture('backslash.html'));
+ });
+});
+
+suite('messed up whitespace', function () {
+ test('work', function () {
+ assert.equal(ejs.render(fixture('messed.ejs'), {users: users}),
+ fixture('messed.html'));
+ });
+});
+
+suite('exceptions', function () {
+ test('produce useful stack traces', function () {
+ try {
+ ejs.render(fixture('error.ejs'), {}, {filename: 'error.ejs'});
+ }
+ catch (err) {
+ assert.equal(err.path, 'error.ejs');
+ assert.equal(err.stack.split('\n').slice(0, 8).join('\n'), fixture('error.out'));
+ return;
+ }
+ throw new Error('no error reported when there should be');
+ });
+
+ test('not include fancy stack info if compileDebug is false', function () {
+ try {
+ ejs.render(fixture('error.ejs'), {}, {
+ filename: 'error.ejs',
+ compileDebug: false
+ });
+ }
+ catch (err) {
+ assert.ok(!err.path);
+ assert.notEqual(err.stack.split('\n').slice(0, 8).join('\n'), fixture('error.out'));
+ return;
+ }
+ throw new Error('no error reported when there should be');
+ });
+
+ var unhook = null;
+ test('log JS source when debug is set', function (done) {
+ var out = ''
+ , needToExit = false;
+ unhook = hook_stdio(process.stdout, function (str) {
+ out += str;
+ if (needToExit) {
+ return;
+ }
+ if (out.indexOf('__output')) {
+ needToExit = true;
+ unhook();
+ unhook = null;
+ return done();
+ }
+ });
+ ejs.render(fixture('hello-world.ejs'), {}, {debug: true});
+ });
+ teardown(function() {
+ if (!unhook) {
+ return;
+ }
+ unhook();
+ unhook = null;
+ });
+});
+
+suite('include()', function () {
+ test('include ejs', function () {
+ var file = 'test/fixtures/include-simple.ejs';
+ assert.equal(ejs.render(fixture('include-simple.ejs'), {}, {filename: file}),
+ fixture('include-simple.html'));
+ });
+
+ test('include ejs fails without `filename`', function () {
+ try {
+ ejs.render(fixture('include-simple.ejs'));
+ }
+ catch (err) {
+ assert.ok(err.message.indexOf('requires the \'filename\' option') > -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>');
+ });
+
+ test('include ejs with locals', function () {
+ var file = 'test/fixtures/include.ejs';
+ assert.equal(ejs.render(fixture('include.ejs'), {pets: users}, {filename: file, delimiter: '@'}),
+ fixture('include.html'));
+ });
+
+ test('include ejs with absolute path and locals', function () {
+ var file = 'test/fixtures/include-abspath.ejs';
+ assert.equal(ejs.render(fixture('include-abspath.ejs'),
+ {dir: path.join(__dirname, 'fixtures'), pets: users, path: path},
+ {filename: file, delimiter: '@'}),
+ fixture('include.html'));
+ });
+
+ test('work when nested', function () {
+ var file = 'test/fixtures/menu.ejs';
+ assert.equal(ejs.render(fixture('menu.ejs'), {pets: users}, {filename: file}),
+ fixture('menu.html'));
+ });
+
+ test('work with a variable path', function () {
+ var file = 'test/fixtures/menu_var.ejs',
+ includePath = 'includes/menu-item';
+ assert.equal(ejs.render(fixture('menu.ejs'), {pets: users, varPath: includePath}, {filename: file}),
+ fixture('menu.html'));
+ });
+
+ test('include arbitrary files as-is', function () {
+ var file = 'test/fixtures/include.css.ejs';
+ assert.equal(ejs.render(fixture('include.css.ejs'), {pets: users}, {filename: file}),
+ fixture('include.css.html'));
+ });
+
+ test('pass compileDebug to include', function () {
+ var file = 'test/fixtures/include.ejs'
+ , fn;
+ fn = ejs.compile(fixture('include.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 dynamic', function () {
+ fs.writeFileSync(__dirname + '/tmp/include.ejs', '<p>Old</p>');
+ var file = 'test/fixtures/include_cache.ejs'
+ , options = {filename: file}
+ , out = ejs.compile(fixture('include_cache.ejs'), options);
+ assert.equal(out(), '<p>Old</p>');
+
+ fs.writeFileSync(__dirname + '/tmp/include.ejs', '<p>New</p>');
+ assert.equal(out(), '<p>New</p>');
+ });
+
+ test('support caching (pass 1)', function () {
+ fs.writeFileSync(__dirname + '/tmp/include.ejs', '<p>Old</p>');
+ var file = 'test/fixtures/include_cache.ejs'
+ , options = {cache: true, filename: file}
+ , out = ejs.render(fixture('include_cache.ejs'), {}, options)
+ , expected = fixture('include_cache.html');
+ assert.equal(out, expected);
+ });
+
+ test('support caching (pass 2)', function () {
+ fs.writeFileSync(__dirname + '/tmp/include.ejs', '<p>New</p>');
+ var file = 'test/fixtures/include_cache.ejs'
+ , options = {cache: true, filename: file}
+ , out = ejs.render(fixture('include_cache.ejs'), {}, options)
+ , expected = fixture('include_cache.html');
+ assert.equal(out, expected);
+ });
+});
+
+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('fails without `filename`', function () {
+ try {
+ ejs.render(fixture('include_preprocessor.ejs'), {pets: users}, {delimiter: '@'});
+ }
+ catch (err) {
+ assert.ok(err.message.indexOf('requires the \'filename\' option') > -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>');
+ });
+
+ 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('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'
+ , 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'
+ , options = {filename: file}
+ , out = ejs.compile(fixture('include_preprocessor_cache.ejs'), options);
+ assert.equal(out(), '<p>Old</p>');
+
+ fs.writeFileSync(__dirname + '/tmp/include_preprocessor.ejs', '<p>New</p>');
+ assert.equal(out(), '<p>Old</p>');
+ });
+
+ test('support caching (pass 1)', function () {
+ fs.writeFileSync(__dirname + '/tmp/include_preprocessor.ejs', '<p>Old</p>');
+ var file = 'test/fixtures/include_preprocessor_cache.ejs'
+ , options = {cache: true, filename: file}
+ , out = ejs.render(fixture('include_preprocessor_cache.ejs'), {}, options)
+ , expected = fixture('include_preprocessor_cache.html');
+ assert.equal(out, expected);
+ });
+
+ test('support caching (pass 2)', function () {
+ fs.writeFileSync(__dirname + '/tmp/include_preprocessor.ejs', '<p>New</p>');
+ var file = 'test/fixtures/include_preprocessor_cache.ejs'
+ , options = {cache: true, filename: file}
+ , out = ejs.render(fixture('include_preprocessor_cache.ejs'), {}, options)
+ , expected = fixture('include_preprocessor_cache.html');
+ assert.equal(out, expected);
+ });
+});
+
+suite('comments', function () {
+ test('fully render with comments removed', function () {
+ assert.equal(ejs.render(fixture('comments.ejs')),
+ fixture('comments.html'));
+ });
+});
+
+suite('require', function () {
+
+ // Only works with inline/preprocessor includes
+ test('allow ejs templates to be required as node modules', function () {
+ var file = 'test/fixtures/include_preprocessor.ejs'
+ , template = require(__dirname + '/fixtures/menu_preprocessor.ejs');
+ if (!process.env.running_under_istanbul) {
+ assert.equal(template({filename: file, pets: users}),
+ fixture('menu_preprocessor.html'));
+ }
+ });
+});
+
+suite('examples', function () {
+ function noop () {}
+ fs.readdirSync('examples').forEach(function (f) {
+ if (!/\.js$/.test(f)) {
+ return;
+ }
+ suite(f, function () {
+ test('doesn\'t throw any errors', function () {
+ var stderr = hook_stdio(process.stderr, noop)
+ , stdout = hook_stdio(process.stdout, noop);
+ try {
+ require('../examples/' + f);
+ }
+ catch (ex) {
+ stdout();
+ stderr();
+ throw ex;
+ }
+ stdout();
+ stderr();
+ });
+ });
+ });
+});
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/backslash.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/backslash.ejs
new file mode 100644
index 00000000..eeb4a482
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/backslash.ejs
@@ -0,0 +1 @@
+\foo \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/backslash.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/backslash.html
new file mode 100644
index 00000000..eeb4a482
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/backslash.html
@@ -0,0 +1 @@
+\foo \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/comments.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/comments.ejs
new file mode 100644
index 00000000..48ece707
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/comments.ejs
@@ -0,0 +1,7 @@
+<li><a href="foo"><% // double-slash comment %>foo</li>
+<li><a href="bar"><% /* C-style comment */ %>bar</li>
+<li><a href="baz"><% // double-slash comment with newline
+ %>baz</li>
+<li><a href="qux"><% var x = 'qux'; // double-slash comment @ end of line %><%= x %></li>
+<li><a href="fee"><%# ERB style comment %>fee</li>
+<li><a href="bah"><%= 'not a ' + '//' + ' comment' %></a></li>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/comments.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/comments.html
new file mode 100644
index 00000000..5a986829
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/comments.html
@@ -0,0 +1,6 @@
+<li><a href="foo">foo</li>
+<li><a href="bar">bar</li>
+<li><a href="baz">baz</li>
+<li><a href="qux">qux</li>
+<li><a href="fee">fee</li>
+<li><a href="bah">not a // comment</a></li> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/consecutive-tags.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/consecutive-tags.ejs
new file mode 100644
index 00000000..175f5c3a
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/consecutive-tags.ejs
@@ -0,0 +1 @@
+<% var a = 'foo' %><% var b = 'bar' %><%= a %>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/consecutive-tags.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/consecutive-tags.html
new file mode 100644
index 00000000..257cc564
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/consecutive-tags.html
@@ -0,0 +1 @@
+foo
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/double-quote.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/double-quote.ejs
new file mode 100644
index 00000000..3bccdcfd
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/double-quote.ejs
@@ -0,0 +1 @@
+<p><%= "lo" + 'ki' %>'s "wheelchair"</p> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/double-quote.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/double-quote.html
new file mode 100644
index 00000000..64739798
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/double-quote.html
@@ -0,0 +1 @@
+<p>loki's "wheelchair"</p> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/error.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/error.ejs
new file mode 100644
index 00000000..f032730b
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/error.ejs
@@ -0,0 +1,5 @@
+<ul>
+ <% if (users) { %>
+ <p>Has users</p>
+ <% } %>
+</ul> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/error.out b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/error.out
new file mode 100644
index 00000000..a2c91082
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/error.out
@@ -0,0 +1,8 @@
+ReferenceError: error.ejs:2
+ 1| <ul>
+ >> 2| <% if (users) { %>
+ 3| <p>Has users</p>
+ 4| <% } %>
+ 5| </ul>
+
+users is not defined \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/fail.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/fail.ejs
new file mode 100644
index 00000000..1a7a0f7d
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/fail.ejs
@@ -0,0 +1 @@
+<% function foo() return 'foo'; %> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/hello-world.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/hello-world.ejs
new file mode 100644
index 00000000..e2e353ea
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/hello-world.ejs
@@ -0,0 +1 @@
+<p>Hello world!</p>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include-abspath.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include-abspath.ejs
new file mode 100644
index 00000000..26b0522d
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include-abspath.ejs
@@ -0,0 +1,5 @@
+<ul>
+ <@ pets.forEach(function(pet){ @>
+ <@- include(path.join(dir, 'pet'), {pet: pet}); @>
+ <@ }); @>
+</ul>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include-simple.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include-simple.ejs
new file mode 100644
index 00000000..a874878d
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include-simple.ejs
@@ -0,0 +1,3 @@
+<ul>
+ <%- include('hello-world'); %>
+</ul>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include-simple.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include-simple.html
new file mode 100644
index 00000000..3b729efb
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include-simple.html
@@ -0,0 +1,3 @@
+<ul>
+ <p>Hello world!</p>
+</ul> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include.css.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include.css.ejs
new file mode 100644
index 00000000..cd184b41
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include.css.ejs
@@ -0,0 +1 @@
+<style><%- include('style.css', {value: 'bar'}); %></style>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include.css.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include.css.html
new file mode 100644
index 00000000..43343fef
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include.css.html
@@ -0,0 +1,3 @@
+<style>body {
+ foo: 'bar';
+}</style> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include.ejs
new file mode 100644
index 00000000..f2295ee1
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include.ejs
@@ -0,0 +1,5 @@
+<ul>
+ <@ pets.forEach(function(pet){ @>
+ <@- include('pet', {pet: pet}); @>
+ <@ }); @>
+</ul>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include.html
new file mode 100644
index 00000000..4557edb6
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include.html
@@ -0,0 +1,9 @@
+<ul>
+
+ <li>geddy</li>
+
+ <li>neil</li>
+
+ <li>alex</li>
+
+</ul>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_cache.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_cache.ejs
new file mode 100644
index 00000000..439193cb
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_cache.ejs
@@ -0,0 +1 @@
+<%- include('../tmp/include') %>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_cache.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_cache.html
new file mode 100644
index 00000000..be20e58b
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_cache.html
@@ -0,0 +1 @@
+<p>Old</p> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor.css.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor.css.ejs
new file mode 100644
index 00000000..f47358bd
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor.css.ejs
@@ -0,0 +1 @@
+<style><% var value = 'bar' %><% include style.css %></style> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor.css.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor.css.html
new file mode 100644
index 00000000..43343fef
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor.css.html
@@ -0,0 +1,3 @@
+<style>body {
+ foo: 'bar';
+}</style> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor.ejs
new file mode 100644
index 00000000..f2728c52
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor.ejs
@@ -0,0 +1,5 @@
+<ul>
+ <@ pets.forEach(function(pet){ @>
+ <@ include pet @>
+ <@ }) @>
+</ul>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor.html
new file mode 100644
index 00000000..4557edb6
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor.html
@@ -0,0 +1,9 @@
+<ul>
+
+ <li>geddy</li>
+
+ <li>neil</li>
+
+ <li>alex</li>
+
+</ul>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor_cache.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor_cache.ejs
new file mode 100644
index 00000000..ae609231
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor_cache.ejs
@@ -0,0 +1 @@
+<%- include ../tmp/include_preprocessor %>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor_cache.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor_cache.html
new file mode 100644
index 00000000..be20e58b
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/include_preprocessor_cache.html
@@ -0,0 +1 @@
+<p>Old</p> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/includes/bom.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/includes/bom.ejs
new file mode 100644
index 00000000..cc198baa
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/includes/bom.ejs
@@ -0,0 +1 @@
+<p>This is a file with BOM.</p>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/includes/menu-item.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/includes/menu-item.ejs
new file mode 100644
index 00000000..37cca5f9
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/includes/menu-item.ejs
@@ -0,0 +1 @@
+<li><% include menu/item %></li> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/includes/menu/item.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/includes/menu/item.ejs
new file mode 100644
index 00000000..8abc3fe4
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/includes/menu/item.ejs
@@ -0,0 +1 @@
+<a href="/<%= url %>"><%= title %></a> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/literal.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/literal.ejs
new file mode 100644
index 00000000..9f6bf81e
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/literal.ejs
@@ -0,0 +1,3 @@
+<pre>There should be a space followed by a less-than sign and then two more
+spaces in the next line:
+ < .</pre>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/literal.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/literal.html
new file mode 100644
index 00000000..d9922500
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/literal.html
@@ -0,0 +1,3 @@
+<pre>There should be a space followed by a less-than sign and then two more
+spaces in the next line:
+ < .</pre> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu.ejs
new file mode 100644
index 00000000..03099901
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu.ejs
@@ -0,0 +1,15 @@
+<%- include('includes/menu-item', {
+ url: '/foo'
+, title: 'Foo'
+}); -%>
+
+<%- include('includes/menu-item', {
+ url: '/bar'
+, title: 'Bar'
+}); -%>
+
+<%- include('includes/menu-item', {
+ url: '/baz'
+, title: 'Baz'
+}); -%>
+
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu.html
new file mode 100644
index 00000000..1f9e45fd
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu.html
@@ -0,0 +1,3 @@
+<li><a href="//foo">Foo</a></li>
+<li><a href="//bar">Bar</a></li>
+<li><a href="//baz">Baz</a></li> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu_preprocessor.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu_preprocessor.ejs
new file mode 100644
index 00000000..61fad418
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu_preprocessor.ejs
@@ -0,0 +1,11 @@
+<% var url = '/foo' -%>
+<% var title = 'Foo' -%>
+<% include includes/menu-item -%>
+
+<% var url = '/bar' -%>
+<% var title = 'Bar' -%>
+<% include includes/menu-item -%>
+
+<% var url = '/baz' -%>
+<% var title = 'Baz' -%>
+<% include includes/menu-item -%> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu_preprocessor.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu_preprocessor.html
new file mode 100644
index 00000000..1f9e45fd
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu_preprocessor.html
@@ -0,0 +1,3 @@
+<li><a href="//foo">Foo</a></li>
+<li><a href="//bar">Bar</a></li>
+<li><a href="//baz">Baz</a></li> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu_var.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu_var.ejs
new file mode 100644
index 00000000..a421dcb8
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/menu_var.ejs
@@ -0,0 +1,15 @@
+<%- include(varPath, {
+ url: '/foo'
+, title: 'Foo'
+}); -%>
+
+<%- include(varPath, {
+ url: '/bar'
+, title: 'Bar'
+}); -%>
+
+<%- include(varPath, {
+ url: '/baz'
+, title: 'Baz'
+}); -%>
+
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/messed.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/messed.ejs
new file mode 100644
index 00000000..7d690331
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/messed.ejs
@@ -0,0 +1 @@
+<ul><%users.forEach(function(user){%><li><%=user.name%></li><%})%></ul> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/messed.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/messed.html
new file mode 100644
index 00000000..52d35629
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/messed.html
@@ -0,0 +1 @@
+<ul><li>geddy</li><li>neil</li><li>alex</li></ul>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/newlines.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/newlines.ejs
new file mode 100644
index 00000000..47401b26
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/newlines.ejs
@@ -0,0 +1,5 @@
+<ul>
+ <% users.forEach(function(user){ %>
+ <li><%= user.name %></li>
+ <% }) %>
+</ul> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/newlines.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/newlines.html
new file mode 100644
index 00000000..4557edb6
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/newlines.html
@@ -0,0 +1,9 @@
+<ul>
+
+ <li>geddy</li>
+
+ <li>neil</li>
+
+ <li>alex</li>
+
+</ul>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/newlines.mixed.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/newlines.mixed.ejs
new file mode 100644
index 00000000..bdf21333
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/newlines.mixed.ejs
@@ -0,0 +1,6 @@
+<ul>
+ <% var unused1 = 'blah' -%>
+ <% var unused2 = 'bleh' %>
+ <% var unused3 = 'bloh' -%>
+ <% var unused4 = 'bluh' %>
+</ul> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/newlines.mixed.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/newlines.mixed.html
new file mode 100644
index 00000000..6d8a2f58
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/newlines.mixed.html
@@ -0,0 +1,4 @@
+<ul>
+
+
+</ul> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.newlines.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.newlines.ejs
new file mode 100644
index 00000000..029b4618
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.newlines.ejs
@@ -0,0 +1,5 @@
+<ul>
+ <% users.forEach(function(user){ -%>
+ <li><%= user.name %></li>
+ <% }) -%>
+</ul> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.newlines.error.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.newlines.error.ejs
new file mode 100644
index 00000000..5749686b
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.newlines.error.ejs
@@ -0,0 +1,5 @@
+AAA
+<% data = "test"; -%>
+BBB
+<%= qdata %>
+CCC \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.newlines.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.newlines.html
new file mode 100644
index 00000000..22857002
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.newlines.html
@@ -0,0 +1,5 @@
+<ul>
+ <li>geddy</li>
+ <li>neil</li>
+ <li>alex</li>
+ </ul>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.semicolons.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.semicolons.ejs
new file mode 100644
index 00000000..d5831347
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.semicolons.ejs
@@ -0,0 +1,8 @@
+This document does not use semicolons in scriptlets.
+<%
+ var a = 'b'
+ var b = 'c'
+ var c
+ c = b
+%>
+The value of c is: <%= c %>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.semicolons.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.semicolons.html
new file mode 100644
index 00000000..25392983
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/no.semicolons.html
@@ -0,0 +1,3 @@
+This document does not use semicolons in scriptlets.
+
+The value of c is: c \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/para.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/para.ejs
new file mode 100644
index 00000000..89da779f
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/para.ejs
@@ -0,0 +1 @@
+<p>hey</p> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/pet.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/pet.ejs
new file mode 100644
index 00000000..09dd230b
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/pet.ejs
@@ -0,0 +1 @@
+<li><@= pet.name @></li>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/single-quote.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/single-quote.ejs
new file mode 100644
index 00000000..1e35a95b
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/single-quote.ejs
@@ -0,0 +1 @@
+<p><%= 'loki' %>'s wheelchair</p> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/single-quote.html b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/single-quote.html
new file mode 100644
index 00000000..3125173d
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/single-quote.html
@@ -0,0 +1 @@
+<p>loki's wheelchair</p> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/style.css b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/style.css
new file mode 100644
index 00000000..f9c16e68
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/style.css
@@ -0,0 +1,3 @@
+body {
+ foo: '<%= value %>';
+}
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/user-no-with.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/user-no-with.ejs
new file mode 100644
index 00000000..1822e24a
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/user-no-with.ejs
@@ -0,0 +1 @@
+<h1><$= locals.name $></h1>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/user.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/user.ejs
new file mode 100644
index 00000000..66f9adcb
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/fixtures/user.ejs
@@ -0,0 +1 @@
+<h1><$= name $></h1>
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/mocha.opts b/dgbuilder/dgeflows/node_modules/ejs/test/mocha.opts
new file mode 100644
index 00000000..68d4dd74
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/mocha.opts
@@ -0,0 +1,2 @@
+--ui tdd
+--reporter spec
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/tmp/include.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/tmp/include.ejs
new file mode 100644
index 00000000..595b6c05
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/tmp/include.ejs
@@ -0,0 +1 @@
+<p>New</p> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/tmp/include_preprocessor.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/tmp/include_preprocessor.ejs
new file mode 100644
index 00000000..595b6c05
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/tmp/include_preprocessor.ejs
@@ -0,0 +1 @@
+<p>New</p> \ No newline at end of file
diff --git a/dgbuilder/dgeflows/node_modules/ejs/test/tmp/renderFile.ejs b/dgbuilder/dgeflows/node_modules/ejs/test/tmp/renderFile.ejs
new file mode 100644
index 00000000..595b6c05
--- /dev/null
+++ b/dgbuilder/dgeflows/node_modules/ejs/test/tmp/renderFile.ejs
@@ -0,0 +1 @@
+<p>New</p> \ No newline at end of file