Code coverage report for 6to5/transform.js

Statements: 100% (52 / 52)      Branches: 92.86% (13 / 14)      Functions: 100% (7 / 7)      Lines: 100% (52 / 52)      Ignored: none     

All files » 6to5/ » transform.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 1051   1 1 1 1 1 1   1 154 154   154 153     1 154 154 154 154   154 154     154 154   154 30 30   30 30 30   124 124   124 114   114 114 114   114     144 1     144 2   2 2 2   2 2 2         1 308 3 1         1                                               1 20    
module.exports = transform;
 
var Transformer = require("./transformer");
var sourceMap   = require("source-map");
var recast      = require("recast");
var File        = require("./file");
var util        = require("./util");
var _           = require("lodash");
 
function transform(code, opts) {
  opts = opts || {};
  code = (code || "") + "";
 
  var file = new File(opts);
  return file.parse(code);
}
 
transform.test = function (task, assert) {
  var actual = task.actual;
  var expect = task.expect;
  var opts   = task.options;
  var exec   = task.exec;
 
  var getOpts = function (filename) {
    return _.merge({ filename: filename }, opts);
  };
 
  var execCode = exec.code.trim();
  var result;
 
  if (execCode) {
    result = transform(execCode, getOpts(exec.filename));
    execCode = result.code;
 
    require("./polyfill");
    var fn = new Function("assert", execCode);
    fn(assert);
  } else {
    var actualCode = actual.code.trim();
    var expectCode = expect.code.trim();
 
    result     = transform(actualCode, getOpts(actual.filename));
    actualCode = recast.prettyPrint(result.ast).code;
 
    var expectAst    = util.parse(expect, expectCode);
    var expectResult = recast.prettyPrint(expectAst);
    expectCode       = expectResult.code;
 
    assert.equal(actualCode, expectCode);
  }
 
  if (task.sourceMap) {
    assert.deepEqual(task.sourceMap, result.map);
  }
 
  if (task.sourceMappings) {
    var consumer = new sourceMap.SourceMapConsumer(result.map);
 
    _.each(task.sourceMappings, function (mapping, i) {
      var generated = mapping.generated;
      var original  = mapping.original;
 
      var pos = consumer.originalPositionFor(generated);
      var msg = "source mapping " + i + " - generated: " + generated.line + ":" + generated.column;
      assert.equal(pos.line + ":" + pos.column, original.line + ":" + original.column, msg);
    });
  }
};
 
transform._ensureTransformerNames = function (type, keys) {
  _.each(keys, function (key) {
    if (key[0] === "_" || !_.has(transform.transformers, key)) {
      throw new ReferenceError("unknown transformer " + key + " specified in " + type);
    }
  });
};
 
transform.transformers = {
  modules:                  require("./transformers/modules"),
  computedPropertyNames:    require("./transformers/computed-property-names"),
  propertyNameShorthand:    require("./transformers/property-name-shorthand"),
  constants:                require("./transformers/constants"),
  arrayComprehension:       require("./transformers/array-comprehension"),
  arrowFunctions:           require("./transformers/arrow-functions"),
  classes:                  require("./transformers/classes"),
  spread:                   require("./transformers/spread"),
  templateLiterals:         require("./transformers/template-literals"),
  propertyMethodAssignment: require("./transformers/property-method-assignment"),
  defaultParameters:        require("./transformers/default-parameters"),
  letScoping:               require("./transformers/let-scoping"),
  restParameters:           require("./transformers/rest-parameters"),
  destructuring:            require("./transformers/destructuring"),
  forOf:                    require("./transformers/for-of"),
  unicodeRegex:             require("./transformers/unicode-regex"),
  generators:               require("./transformers/generators"),
  jsx:                      require("./transformers/jsx"),
 
  _aliasFunctions:          require("./transformers/_alias-functions"),
  _blockHoist:              require("./transformers/_block-hoist")
};
 
_.each(transform.transformers, function (transformer, key) {
  transform.transformers[key] = new Transformer(key, transformer);
});