mirror of
https://gitee.com/openharmony/third_party_weex-loader
synced 2024-11-27 01:20:23 +00:00
1957db76ec
Signed-off-by: zhongjianfei <zhongjianfei@huawei.com>
190 lines
5.3 KiB
JavaScript
190 lines
5.3 KiB
JavaScript
/*
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
const fs = require('fs');
|
|
const path =require('path');
|
|
|
|
const chai = require('chai');
|
|
const sinon = require('sinon');
|
|
const sinonChai = require('sinon-chai');
|
|
const expect = chai.expect;
|
|
chai.use(sinonChai);
|
|
|
|
const Base64 = require('js-base64').Base64;
|
|
const SourceMap = require('source-map');
|
|
|
|
function getActualString(name) {
|
|
const filepath = path.resolve(__dirname, 'actual', `${name}.js`);
|
|
const result = fs.readFileSync(filepath, 'utf-8');
|
|
return result.toString();
|
|
}
|
|
|
|
function getExpectJSON(name) {
|
|
const filepath = path.resolve(__dirname, 'expect', `${name}.js`);
|
|
const result = fs.readFileSync(filepath, 'utf-8');
|
|
return JSON.parse(result.toString());
|
|
}
|
|
|
|
function stringifyActual(json) {
|
|
return JSON.stringify(json, function(key, value) {
|
|
if (typeof value === 'function') {
|
|
value = value.toString();
|
|
}
|
|
return value;
|
|
}, ' ');
|
|
}
|
|
|
|
function extractMap(actualStr) {
|
|
const mapStr = actualStr.match(/\/\/\# sourceMappingURL=data:application\/json;charset=utf-8;base64,([0-9a-zA-Z=+\/]+)/)
|
|
if (mapStr) {
|
|
return JSON.parse(Base64.decode(mapStr[1]));
|
|
}
|
|
}
|
|
|
|
describe('build', () => {
|
|
let __weex_define__;
|
|
let __weex_bootstrap__;
|
|
let components;
|
|
let requireStub;
|
|
let bootstrapStub;
|
|
|
|
function expectActual(name) {
|
|
const actualStr = getActualString(name);
|
|
const fn = new Function('__weex_define__', '__weex_bootstrap__', actualStr);
|
|
fn(__weex_define__, __weex_bootstrap__);
|
|
|
|
// const filepath = path.resolve(__dirname, 'expect', `${name}.js`);
|
|
// fs.writeFileSync(filepath, stringifyActual(components), 'utf-8');
|
|
|
|
const expectJSON = getExpectJSON(name);
|
|
expect(JSON.parse(stringifyActual(components))).eql(expectJSON);
|
|
expect(components).to.include.keys(__weex_bootstrap__.firstCall.args[0]);
|
|
|
|
return actualStr;
|
|
}
|
|
|
|
beforeEach(() => {
|
|
components = {};
|
|
requireStub = sinon.stub();
|
|
bootstrapStub = sinon.stub();
|
|
|
|
__weex_define__ = function(componentName, deps, factory) {
|
|
if (components[componentName]) {
|
|
throw new Error(`${componentName} is defined repeatly`);
|
|
}
|
|
|
|
var __weex_require__ = requireStub;
|
|
var __weex_exports__ = {};
|
|
var __weex_module__ = {exports : __weex_exports__}
|
|
|
|
factory(__weex_require__, __weex_exports__, __weex_module__)
|
|
components[componentName] = __weex_module__.exports
|
|
}
|
|
|
|
__weex_bootstrap__ = bootstrapStub;
|
|
|
|
});
|
|
|
|
it('single template', () => {
|
|
expectActual('a');
|
|
});
|
|
|
|
it('template with style', () => {
|
|
expectActual('b');
|
|
});
|
|
|
|
it('template with style and script', () => {
|
|
expectActual('c');
|
|
});
|
|
|
|
it('template with single inline element', () => {
|
|
expectActual('d');
|
|
});
|
|
|
|
it('template with multiple inline elements', () => {
|
|
expectActual('e');
|
|
});
|
|
|
|
it('parted files specifed in src', () => {
|
|
expectActual('f');
|
|
});
|
|
|
|
it('component by requiring src and specifing alias', () => {
|
|
expectActual('g');
|
|
expect(requireStub.callCount).eql(0);
|
|
});
|
|
|
|
it('component under same folder', () => {
|
|
expectActual('h');
|
|
});
|
|
|
|
it('template with config and data', () => {
|
|
expectActual('i');
|
|
expect(bootstrapStub.firstCall.args[1]).is.not.undefined;
|
|
expect(bootstrapStub.firstCall.args[2]).is.not.undefined;
|
|
});
|
|
|
|
it('template and use weex module', () => {
|
|
expectActual('j');
|
|
expect(requireStub.callCount).eql(1);
|
|
expect(requireStub.firstCall.args).eql(['@weex-module/modal']);
|
|
});
|
|
|
|
it('template by using custom language', () => {
|
|
expectActual('k');
|
|
expect(requireStub.callCount).eql(1);
|
|
expect(requireStub.firstCall.args).eql(['@weex-module/modal']);
|
|
});
|
|
|
|
it('template and require commonjs module', () => {
|
|
expectActual('l');
|
|
expect(requireStub.callCount).eql(1);
|
|
expect(requireStub.firstCall.args).eql(['@weex-module/modal']);
|
|
});
|
|
|
|
it('template and use weex module in commonjs module', () => {
|
|
expectActual('m');
|
|
expect(requireStub.callCount).eql(1);
|
|
expect(requireStub.firstCall.args).eql(['@weex-module/modal']);
|
|
});
|
|
|
|
it.skip('template with sourcemap', () => {
|
|
const actualStr = expectActual('n');
|
|
const map = extractMap(actualStr);
|
|
const smc = new SourceMap.SourceMapConsumer(map);
|
|
|
|
// new Array(276).fill(0).forEach((n, i) => {
|
|
// i = i + 1
|
|
// const original = smc.originalPositionFor({
|
|
// line: i,
|
|
// column: 0
|
|
// })
|
|
// if (original.source) {
|
|
// console.log(i, original.line, original.source)
|
|
// }
|
|
// })
|
|
});
|
|
|
|
it('weex examples', () => {
|
|
expectActual('o');
|
|
});
|
|
});
|