HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/buyercall/node_modules/underscore-template-loader/test/loaderTest.js
var fs = require('fs');
var path = require('path');
var chai = require('chai');
var assert = chai.assert;
chai.use(require('chai-string'));

var loader = require('../');
var WebpackLoaderMock = require('./lib/WebpackLoaderMock');
var loadTemplate = require('./lib/loadTemplate');
var loadOutput = require('./lib/loadOutput');

function testTemplate(loader, template, options, testFn) {
  loader.call(new WebpackLoaderMock({
    query: options.query || '?',
    resource: path.join(__dirname, 'templates', template),
    options: options.options,
    async: function (err, source) {
      testFn(source);
    }
  }), loadTemplate(template));
}

describe('loader', function () {
  it('should load simple underscore template', function (done) {
    testTemplate(loader, 'simple.html', {}, function (output) {
      // Copy and paste the result of `console.log(output)` to templates/output/simple.txt
      assert.equal(output, loadOutput('simple.txt'));
      done();
    });
  });

  it('should prepend html comment', function (done) {
    testTemplate(loader, 'simple.html', {
      query: {
        prependFilenameComment: __dirname
      }
    }, function (output) {
      assert.equal(output, loadOutput('simple-with-comment.txt'));
      done();
    });
  });

  it('should use underscore as the engine when specified', function (done) {
    testTemplate(loader, 'simple.html', {
      query: {
        engine: 'underscore'
      }
    }, function (output) {
      assert.equal(output, loadOutput('simple-underscore.txt'));
      done();
    });
  });

  it('should use lodash as the engine when specified and include imports automatically', function (done) {
    testTemplate(loader, 'simple.html', {
      query: {
        engine: 'lodash'
      }
    }, function (output) {
      assert.equal(output, loadOutput('simple-lodash.txt'));
      done();
    });
  });

  it('should include the template imports when withImports is true', function (done) {
    testTemplate(loader, 'simple.html', {
      query: {
        withImports: true
      }
    }, function (output) {
      assert.equal(output, loadOutput('simple-with-imports.txt'));
      done();
    });
  });

  it('should NOT include template imports when withImports is false', function (done) {
    testTemplate(loader, 'simple.html', {
      query: {
        engine: 'lodash',
        withImports: false
      }
    }, function (output) {
      assert.equal(output, loadOutput('simple-lodash-no-imports.txt'));
      done();
    });
  });

  it('should be possible to require a template', function (done) {
    testTemplate(loader, 'require.html', {}, function (output) {
      assert.equal(output, loadOutput('require.txt'));
      done();
    });
  });

  it('should be possible to require a template with custom args', function (done) {
    testTemplate(loader, 'require_with_args.html', {}, function (output) {
      assert.equal(output, loadOutput('require_with_args.txt'));
      done();
    });
  });

  it('should be possible to include a template', function (done) {
    testTemplate(loader, 'include.html', {}, function (output) {
      assert.equal(output, loadOutput('include.txt'));
      done();
    });
  });

  it('should require an image', function (done) {
    testTemplate(loader, 'image.html', {}, function (output) {
      assert.equal(output, loadOutput('image.txt'));
      done();
    });
  });

  it('should require given custom attributes', function (done) {
    testTemplate(loader, 'custom-attributes.html', {
      query: {
        attributes: ['img:src', 'link:href']
      }
    }, function (output) {
      assert.equal(output, loadOutput('custom-attributes.txt'));
      done();
    });
  });

  it('should not parse an absolute image without root option given', function (done) {
    testTemplate(loader, 'absolute-image.html', {}, function (output) {
      assert.equal(output, loadOutput('absolute-image.txt'));
      done();
    });
  });

  it('should parse an absolute image if root option is given', function (done) {
    testTemplate(loader, 'absolute-image.html', {
      query: {
        root: '/bar'
      }
    }, function (output) {
      assert.equal(output, loadOutput('absolute-image-with-root.txt'));
      done();
    });
  });

  it('should leave dynamic attributes unaltered', function (done) {
    testTemplate(loader, 'dynamic-attribute.html', {
      query: {
      }
    }, function (output) {
      assert.equal(output, loadOutput('dynamic-attribute.txt'));
      done();
    });
  });

  it('should leave dynamic attributes unaltered with root', function (done) {
    testTemplate(loader, 'dynamic-attribute-with-root.html', {
      query: {
        root: '/bar'
      }
    }, function (output) {
      assert.equal(output, loadOutput('dynamic-attribute-with-root.txt'));
      done();
    });
  });

  it('should parse dynamic attributes with parseDynamicRoutes', function (done) {
    testTemplate(loader, 'dynamic-attribute-with-parseDynamicRoutes.html', {
      query: {
        root: 'myapp',
        parseDynamicRoutes: true
      }
    }, function (output) {
      assert.equal(output, loadOutput('dynamic-attribute-with-parseDynamicRoutes.txt'));
      done();
    });
  });

  // FIXME: Changing the underscore tags changes it globally
  it('should allow custom underscore tags', function (done) {
    testTemplate(loader, 'custom-tags.html', {
      query: {
        interpolate: '\\{\\[(.+?)\\]\\}',
        evaluate: '\\{%([\\s\\S]+?)%\\}',
        escape: '\\{\\{(.+?)\\}\\}'
      }
    }, function (output) {
      assert.equal(output, loadOutput('custom-tags.txt'));
      done();
    });
  });
});