| 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); |
| }); |
| }) |