blob: fb279607c707da345db33012d1e8d44928e2561c [file] [log] [blame]
var fs = require('fs');
var path =require('path');
var chai = require('chai');
var sinon = require('sinon');
var sinonChai = require('sinon-chai');
var expect = chai.expect;
chai.use(sinonChai);
var webpack = require('webpack')
var SourceMapConsumer = require('source-map').SourceMapConsumer
require('./lib/jsfm');
var createInstance = global.createInstance;
var getRoot = global.getRoot;
describe('loader', () => {
before(function() {
global.callNative = sinon.spy();
});
after(function() {
global.callNative = undefined;
});
it('simple case', function() {
var name = 'a.js';
var actualCodePath = path.resolve(__dirname, 'actual', name);
var actualCodeContent = fs.readFileSync(actualCodePath, { encoding: 'utf8' });
var expectCodePath = path.resolve(__dirname, 'expect', name);
var expectCodeContent = fs.readFileSync(expectCodePath, { encoding: 'utf8' });
var actualResult = createInstance('actual/' + name, actualCodeContent);
var actualJson = getRoot('actual/' + name);
var expectResult = createInstance('expect/' + name, expectCodeContent);
var expectJson = getRoot('expect/' + name);
expect(actualJson).eql(expectJson);
});
it('element tag, 3rd-party js, implicit component', function() {
var name = 'b.js';
var actualCodePath = path.resolve(__dirname, 'actual', name);
var actualCodeContent = fs.readFileSync(actualCodePath, { encoding: 'utf8' });
var expectCodePath = path.resolve(__dirname, 'expect', name);
var expectCodeContent = fs.readFileSync(expectCodePath, { encoding: 'utf8' });
var actualResult = createInstance('actual/' + name, actualCodeContent);
var actualJson = getRoot('actual/' + name);
var expectResult = createInstance('expect/' + name, expectCodeContent);
var expectJson = getRoot('expect/' + name);
expect(actualJson).eql(expectJson);
});
it('with config & data case', function() {
var name = 'z.js';
var actualCodePath = path.resolve(__dirname, 'actual', name);
var actualCodeContent = fs.readFileSync(actualCodePath, { encoding: 'utf8' });
var expectCodePath = path.resolve(__dirname, 'expect', name);
var expectCodeContent = fs.readFileSync(expectCodePath, { encoding: 'utf8' });
var actualResult = createInstance('actual/' + name, actualCodeContent);
var actualJson = getRoot('actual/' + name);
var expectResult = createInstance('expect/' + name, expectCodeContent);
var expectJson = getRoot('expect/' + name);
expect(actualJson).eql(expectJson);
});
it('ignore include same name element file', function() {
var name = 'samename.js';
var actualCodePath = path.resolve(__dirname, 'actual', name);
var actualCodeContent = fs.readFileSync(actualCodePath, { encoding: 'utf8' });
var matches = actualCodeContent.match(/"type"\: "samename"/g)
expect(matches.length).eql(1);
});
it('support source map', function() {
var name = 'sourcemap'
var mapPath = path.resolve(__dirname, 'actual', name + '.js.map');
var map = fs.readFileSync(mapPath, { encoding: 'utf8' });
var smc = new SourceMapConsumer(JSON.parse(map))
var oriPath = path.resolve(__dirname, 'expect', name + '.we');
var ori = fs.readFileSync(oriPath, { encoding: 'utf8' });
var genPath = path.resolve(__dirname, 'actual', name + '.js');
var gen = fs.readFileSync(genPath, { encoding: 'utf8' });
function matchPos(code, regexp) {
var line, col
code.split(/\r?\n/g).some(function (l, i) {
if (regexp.test(l)) {
line = i + 1
col = l.length
return true
}
})
return { line: line, col: col }
}
function checkPos(regexp) {
var genPos = matchPos(gen, regexp)
var oriPos = matchPos(ori, regexp)
var pos = smc.originalPositionFor({
line: genPos.line,
column: genPos.col
})
expect(pos.source.indexOf('sourcemap.we') > -1)
expect(pos.line).to.equal(oriPos.line)
}
checkPos(/console\.log\(1\)/)
checkPos(/console\.log\(2\)/)
checkPos(/console\.log\(4\)/)
checkPos(/console\.log\(5\)/)
checkPos(/console\.log\(6\)/)
checkPos(/console\.log\(7\)/)
checkPos(/console\.log\(8\)/)
checkPos(/console\.log\(9\)/)
checkPos(/console\.log\(0\)/)
})
it('exports case', function() {
var name = 'exports.js';
var actualCodePath = path.resolve(__dirname, 'actual', name);
var actualCodeContent = fs.readFileSync(actualCodePath, { encoding: 'utf8' });
var expectCodePath = path.resolve(__dirname, 'expect', name);
var expectCodeContent = fs.readFileSync(expectCodePath, { encoding: 'utf8' });
var actualResult = createInstance('actual/' + name, actualCodeContent);
var actualJson = getRoot('actual/' + name);
var expectResult = createInstance('expect/' + name, expectCodeContent);
var expectJson = getRoot('expect/' + name);
expect(actualJson).eql(expectJson);
});
})