feat: wcsc-ll test

This commit is contained in:
msojocs 2022-08-29 22:54:02 +08:00
parent 6bfcc7c0d3
commit f74f4d6819
9 changed files with 253 additions and 240 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
node_modules
test/**/*.json

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "test/examples/miniprogram-demo"]
path = test/examples/miniprogram-demo
url = https://github.com/wechat-miniprogram/miniprogram-demo.git

View File

@ -1,5 +1,6 @@
module.exports = {
require: ["@babel/register"],
recursive: true,
spec: "test/**/*.test.js"
spec: "test/**/*.test.js",
timeout: 20000
}

View File

@ -20,6 +20,8 @@
按照规律,将 Linux 版本代码修改为符合 windows 版本结构的代码。
## 目录结构
```
.
├── generatemd5.js
@ -28,7 +30,7 @@
├── package.json
├── package-lock.json
├── README.md
├── test
├── test --- 测试用例
├── wcc_node --- 可视化编译器
├── wcc_node_old --- 可视化编译器 - 旧
├── wcsc_node_old --- 可视化编译器 - 旧

@ -0,0 +1 @@
Subproject commit 0e7f0b50cad2165eb796915bd9010bf2aa06fe81

85
test/runner/node.js Normal file
View File

@ -0,0 +1,85 @@
const path = require("path");
const fs = require("fs");
const { spawn } = require("child_process");
const wcsc = (args, projectPath) => {
const node_exec = spawn(
path.resolve(__dirname, "../../nodejs/wcsc"),
args,
{
cwd: projectPath,
env: {
// WX_DEBUG_COMPILER_OUTPUT: path.resolve(__dirname, '' + id),
},
// stdio: 'inherit'
}
);
const spwanData = [],
errData = [];
node_exec.stdout.on("data", (e) => {
spwanData.push(e);
// console.log(e.toString())
});
node_exec.stderr.on("data", (e) => {
errData.push(e);
// console.log(e.toString())
});
return new Promise((resolve, reject) => {
node_exec.on("close", (n) => {
if (0 === n) {
let result = Buffer.concat(spwanData).toString();
result = JSON.parse(result);
resolve(result);
} else {
// process.stderr.write(Buffer.concat(errData).toString());
// process.stderr.write(Buffer.concat(spwanData).toString());
reject(n);
}
});
});
};
const wcc = (args, projectPath, id) => {
const node_exec = spawn(
path.resolve(__dirname, "../../nodejs/wcc"),
args,
{
cwd: projectPath,
env: {
// WX_DEBUG_COMPILER_OUTPUT: path.resolve(__dirname, '' + id),
},
// stdio: 'inherit'
}
);
const spwanData = [],
errData = [];
node_exec.stdout.on("data", (e) => {
spwanData.push(e);
// console.log(e.toString())
});
node_exec.stderr.on("data", (e) => {
errData.push(e);
// console.log(e.toString())
});
return new Promise((resolve, reject) => {
node_exec.on("close", (n) => {
// console.log("node n: ", n);
if (0 === n) {
let result = Buffer.concat(spwanData).toString();
// require('fs').writeFileSync('/mnt/disk2/wechat-web-devtools-linux/tmp/llw2.json', result)
// process.stdout.write(result);
result = JSON.parse(result);
resolve(result);
} else {
process.stderr.write(Buffer.concat(errData).toString());
// process.stderr.write(Buffer.concat(spwanData).toString());
reject(n);
}
});
});
};
export {
wcsc,
wcc
}

79
test/runner/wine.js Normal file
View File

@ -0,0 +1,79 @@
const path = require("path");
const fs = require("fs");
const { spawn } = require("child_process");
const wcsc = (args, projectPath) => {
const wine = spawn(
path.resolve(__dirname, "../../wine/wcsc.exe"),
args,
{
cwd: projectPath,
}
);
const spwanData = [],
errData = [];
wine.stdout.on("data", (e) => {
spwanData.push(e);
});
wine.stderr.on("data", (e) => {
errData.push(e);
});
return new Promise((resolve, reject) => {
wine.on("close", (n) => {
// console.log("wine n: ", n);
if (0 === n) {
let result = Buffer.concat(spwanData).toString();
result = JSON.parse(result);
resolve(result);
} else {
process.stderr.write(
"wine error:",
Buffer.concat(errData).toString()
);
// process.stderr.write(Buffer.concat(spwanData).toString());
reject(n);
}
});
});
};
const wcc = (args, projectPath) => {
const wine = spawn(
path.resolve(__dirname, "../../wine/wcc.exe"),
args,
{
cwd: projectPath,
}
);
const spwanData = [],
errData = [];
wine.stdout.on("data", (e) => {
spwanData.push(e);
});
wine.stderr.on("data", (e) => {
errData.push(e);
});
return new Promise((resolve, reject) => {
wine.on("close", (n) => {
// console.log("wine n: ", n);
if (0 === n) {
let result = Buffer.concat(spwanData).toString();
result = JSON.parse(result);
resolve(result);
} else {
process.stderr.write(
"wine error:",
Buffer.concat(errData).toString()
);
// process.stderr.write(Buffer.concat(spwanData).toString());
reject(n);
}
});
});
};
export {
wcsc,
wcc
}

79
test/wcsc/ll.test.js Normal file
View File

@ -0,0 +1,79 @@
const assert = require("assert");
const node = require("../runner/node");
const wine = require("../runner/wine");
const path = require("path");
const fs = require("fs");
describe("wcsc", function () {
describe("node output should deep equal with wine", function () {
// afterEach(function(){
// if(this.currentTest.state === 'failed'){
// console.error('failed', this.currentTest)
// }
// })
it("主界面", async function () {
const projectPath = path.resolve(
__dirname,
"../examples/miniprogram-demo/miniprogram"
);
const args = [
"-db",
"-pc",
"12",
"./page/component/index.wxss",
"./page/API/index.wxss",
"./page/cloud/index.wxss",
"./page/extend/index.wxss",
"./component/navigation-bar/navigation-bar.wxss",
"./components/navigation-bar/index.wxss",
"./components/page-scroll/index.wxss",
"./page/API/components/set-tab-bar/set-tab-bar.wxss",
"./miniprogram_npm/miniprogram-barrage/index.wxss",
"./miniprogram_npm/miniprogram-recycle-view/recycle-item.wxss",
"./miniprogram_npm/miniprogram-recycle-view/recycle-view.wxss",
"./miniprogram_npm/wxml-to-canvas/index.wxss",
"./app.wxss",
"./common/common-skyline.wxss",
"./common/reset.wxss",
"./common/lib/weui.wxss",
"./page/common/index-skyline.wxss",
"-ll",
];
const w = await wine.wcsc(args, projectPath);
const n = await node.wcsc(args, projectPath);
try {
fs.mkdirSync(path.resolve(__dirname, this.test.title));
} catch (error) {}
fs.writeFileSync(
path.resolve(__dirname, `${this.test.title}/wine.json`),
JSON.stringify(w, null, 4)
);
fs.writeFileSync(
path.resolve(__dirname, `${this.test.title}/node.json`),
JSON.stringify(n, null, 4)
);
assert.deepEqual(w, n);
});
it("接口-设置界面标题", async function () {
const projectPath = path.resolve(
__dirname,
"../examples/miniprogram-demo/miniprogram/"
);
const args = ["-db","-pc","74","./packageAPI/pages/api/login/login.wxss","./packageAPI/pages/api/get-user-info/get-user-info.wxss","./packageAPI/pages/api/request-payment/request-payment.wxss","./packageAPI/pages/api/jump/jump.wxss","./packageAPI/pages/api/share/share.wxss","./packageAPI/pages/api/share-button/share-button.wxss","./packageAPI/pages/api/custom-message/custom-message.wxss","./packageAPI/pages/api/subscribe-message/subscribe-message.wxss","./packageAPI/pages/api/choose-address/choose-address.wxss","./packageAPI/pages/api/choose-invoice-title/choose-invoice-title.wxss","./packageAPI/pages/api/soter-authentication/soter-authentication.wxss","./packageAPI/pages/api/setting/setting.wxss","./packageAPI/pages/ar/visionkit-basic/visionkit-basic.wxss","./packageAPI/pages/ar/plane-ar/plane-ar.wxss","./packageAPI/pages/ar/2dmarker-ar/2dmarker-ar.wxss","./packageAPI/pages/ar/osd-ar/osd-ar.wxss","./packageAPI/pages/page/set-navigation-bar-title/set-navigation-bar-title.wxss","./packageAPI/pages/page/navigation-bar-loading/navigation-bar-loading.wxss","./packageAPI/pages/page/navigator/navigator.wxss","./packageAPI/pages/page/pull-down-refresh/pull-down-refresh.wxss","./packageAPI/pages/page/animation/animation.wxss","./packageAPI/pages/page/action-sheet/action-sheet.wxss","./packageAPI/pages/page/modal/modal.wxss","./packageAPI/pages/page/toast/toast.wxss","./packageAPI/pages/page/canvas/canvas.wxss","./packageAPI/pages/page/get-wxml-node-info/get-wxml-node-info.wxss","./packageAPI/pages/page/page-scroll/page-scroll.wxss","./packageAPI/pages/page/intersection-observer/intersection-observer.wxss","./packageAPI/pages/device/clipboard-data/clipboard-data.wxss","./packageAPI/pages/device/bluetooth/bluetooth.wxss","./packageAPI/pages/device/bluetooth/slave/slave.wxss","./packageAPI/pages/device/screen-brightness/screen-brightness.wxss","./packageAPI/pages/device/vibrate/vibrate.wxss","./packageAPI/pages/device/add-contact/add-contact.wxss","./packageAPI/pages/device/wifi/wifi.wxss","./packageAPI/pages/device/get-network-type/get-network-type.wxss","./packageAPI/pages/device/on-network-status-change/on-network-status-change.wxss","./packageAPI/pages/device/get-system-info/get-system-info.wxss","./packageAPI/pages/device/on-compass-change/on-compass-change.wxss","./packageAPI/pages/device/make-phone-call/make-phone-call.wxss","./packageAPI/pages/device/scan-code/scan-code.wxss","./packageAPI/pages/device/on-accelerometer-change/on-accelerometer-change.wxss","./packageAPI/pages/device/capture-screen/capture-screen.wxss","./packageAPI/pages/device/ibeacon/ibeacon.wxss","./packageAPI/pages/device/get-battery-info/get-battery-info.wxss","./packageAPI/pages/media/image/image.wxss","./packageAPI/pages/media/voice/voice.wxss","./packageAPI/pages/media/file/file.wxss","./packageAPI/pages/media/load-font-face/load-font-face.wxss","./packageAPI/pages/media/background-audio/background-audio.wxss","./packageAPI/pages/media/video/video.wxss","./packageAPI/pages/media/audio/audio.wxss","./packageAPI/pages/media/media-container/media-container.wxss","./packageAPI/pages/location/get-location/get-location.wxss","./packageAPI/pages/location/open-location/open-location.wxss","./packageAPI/pages/location/choose-location/choose-location.wxss","./packageAPI/pages/network/request/request.wxss","./packageAPI/pages/network/web-socket/web-socket.wxss","./packageAPI/pages/network/upload-file/upload-file.wxss","./packageAPI/pages/network/download-file/download-file.wxss","./packageAPI/pages/network/mdns/mdns.wxss","./packageAPI/pages/network/udp-socket/udp-socket.wxss","./packageAPI/pages/storage/storage/storage.wxss","./packageAPI/pages/storage/get-background-fetch-data/get-background-fetch-data.wxss","./packageAPI/pages/storage/get-background-prefetch-data/get-background-prefetch-data.wxss","./packageAPI/pages/performance/get-performance/get-performance.wxss","./packageAPI/pages/worker/worker/worker.wxss","./packageAPI/pages/framework/two-way-bindings/two-way-bindings.wxss","./packageAPI/pages/framework/wxs/wxs.wxss","./packageAPI/pages/framework/resizable/resizable.wxss","./packageAPI/pages/framework/wxs/movable.wxss","./packageAPI/pages/framework/wxs/sidebar.wxss","./packageAPI/pages/framework/wxs/stick-top.wxss","./packageAPI/pages/framework/wxs/nearby.wxss","./app.wxss","./common/common-skyline.wxss","./common/reset.wxss","./common/lib/weui.wxss","./component/navigation-bar/navigation-bar.wxss","./components/navigation-bar/index.wxss","./components/page-scroll/index.wxss","./page/API/index.wxss","./page/API/components/set-tab-bar/set-tab-bar.wxss","./page/cloud/index.wxss","./page/common/index-skyline.wxss","./page/component/index.wxss","./page/extend/index.wxss","./miniprogram_npm/miniprogram-barrage/index.wxss","./miniprogram_npm/miniprogram-recycle-view/recycle-item.wxss","./miniprogram_npm/miniprogram-recycle-view/recycle-view.wxss","./miniprogram_npm/wxml-to-canvas/index.wxss","--subpackage","packageAPI","-ll"]
const w = await wine.wcsc(args, projectPath);
const n = await node.wcsc(args, projectPath);
try {
fs.mkdirSync(path.resolve(__dirname, this.test.title));
} catch (error) {}
fs.writeFileSync(
path.resolve(__dirname, `${this.test.title}/wine.json`),
JSON.stringify(w, null, 4)
);
fs.writeFileSync(
path.resolve(__dirname, `${this.test.title}/node.json`),
JSON.stringify(n, null, 4)
);
assert.deepEqual(w, n);
});
});
});

View File

@ -1,238 +0,0 @@
#!/usr/bin/env node
const { spawn, spawnSync } = require("child_process");
const path = require("path");
const fs = require("fs");
const { exit } = require("process");
const util = require('util')
const samples = []
const sample3 = {
projectPath: "/mnt/disk1/WeChatProjects/miniprogram-demo/miniprogram/",
args: [
"-db",
"-pc",
"9",
"-ll",
"./page/component/index.wxss",
"./page/API/index.wxss",
"./page/cloud/index.wxss",
"./page/extend/index.wxss",
"./miniprogram_npm/miniprogram-barrage/index.wxss",
"./miniprogram_npm/miniprogram-recycle-view/recycle-item.wxss",
"./miniprogram_npm/miniprogram-recycle-view/recycle-view.wxss",
"./miniprogram_npm/wxml-to-canvas/index.wxss",
"./page/API/components/set-tab-bar/set-tab-bar.wxss",
"./app.wxss",
"./common/lib/weui.wxss",
"./page/common/common.wxss",
"./page/common/index.wxss",
"./page/common/lib/weui.wxss",
]
}
const sample4 = {
projectPath: "/mnt/disk1/WeChatProjects/miniprogram-demo/miniprogram/",
args: [
"-db",
"-pc",
"70",
"./packageAPI/pages/api/login/login.wxss",
"./packageAPI/pages/api/get-user-info/get-user-info.wxss",
"./packageAPI/pages/api/request-payment/request-payment.wxss",
"./packageAPI/pages/api/jump/jump.wxss",
"./packageAPI/pages/api/share/share.wxss",
"./packageAPI/pages/api/share-button/share-button.wxss",
"./packageAPI/pages/api/custom-message/custom-message.wxss",
"./packageAPI/pages/api/subscribe-message/subscribe-message.wxss",
"./packageAPI/pages/api/choose-address/choose-address.wxss",
"./packageAPI/pages/api/choose-invoice-title/choose-invoice-title.wxss",
"./packageAPI/pages/api/soter-authentication/soter-authentication.wxss",
"./packageAPI/pages/api/setting/setting.wxss",
"./packageAPI/pages/page/set-navigation-bar-title/set-navigation-bar-title.wxss",
"./packageAPI/pages/page/navigation-bar-loading/navigation-bar-loading.wxss",
"./packageAPI/pages/page/navigator/navigator.wxss",
"./packageAPI/pages/page/pull-down-refresh/pull-down-refresh.wxss",
"./packageAPI/pages/page/animation/animation.wxss",
"./packageAPI/pages/page/action-sheet/action-sheet.wxss",
"./packageAPI/pages/page/modal/modal.wxss",
"./packageAPI/pages/page/toast/toast.wxss",
"./packageAPI/pages/page/canvas/canvas.wxss",
"./packageAPI/pages/page/get-wxml-node-info/get-wxml-node-info.wxss",
"./packageAPI/pages/page/page-scroll/page-scroll.wxss",
"./packageAPI/pages/page/intersection-observer/intersection-observer.wxss",
"./packageAPI/pages/device/clipboard-data/clipboard-data.wxss",
"./packageAPI/pages/device/bluetooth/bluetooth.wxss",
"./packageAPI/pages/device/bluetooth/slave/slave.wxss",
"./packageAPI/pages/device/screen-brightness/screen-brightness.wxss",
"./packageAPI/pages/device/vibrate/vibrate.wxss",
"./packageAPI/pages/device/add-contact/add-contact.wxss",
"./packageAPI/pages/device/wifi/wifi.wxss",
"./packageAPI/pages/device/get-network-type/get-network-type.wxss",
"./packageAPI/pages/device/on-network-status-change/on-network-status-change.wxss",
"./packageAPI/pages/device/get-system-info/get-system-info.wxss",
"./packageAPI/pages/device/on-compass-change/on-compass-change.wxss",
"./packageAPI/pages/device/make-phone-call/make-phone-call.wxss",
"./packageAPI/pages/device/scan-code/scan-code.wxss",
"./packageAPI/pages/device/on-accelerometer-change/on-accelerometer-change.wxss",
"./packageAPI/pages/device/capture-screen/capture-screen.wxss",
"./packageAPI/pages/device/ibeacon/ibeacon.wxss",
"./packageAPI/pages/device/get-battery-info/get-battery-info.wxss",
"./packageAPI/pages/media/image/image.wxss",
"./packageAPI/pages/media/voice/voice.wxss",
"./packageAPI/pages/media/file/file.wxss",
"./packageAPI/pages/media/load-font-face/load-font-face.wxss",
"./packageAPI/pages/media/background-audio/background-audio.wxss",
"./packageAPI/pages/media/video/video.wxss",
"./packageAPI/pages/media/audio/audio.wxss",
"./packageAPI/pages/media/media-container/media-container.wxss",
"./packageAPI/pages/location/get-location/get-location.wxss",
"./packageAPI/pages/location/open-location/open-location.wxss",
"./packageAPI/pages/location/choose-location/choose-location.wxss",
"./packageAPI/pages/network/request/request.wxss",
"./packageAPI/pages/network/web-socket/web-socket.wxss",
"./packageAPI/pages/network/upload-file/upload-file.wxss",
"./packageAPI/pages/network/download-file/download-file.wxss",
"./packageAPI/pages/network/mdns/mdns.wxss",
"./packageAPI/pages/network/udp-socket/udp-socket.wxss",
"./packageAPI/pages/storage/storage/storage.wxss",
"./packageAPI/pages/storage/get-background-fetch-data/get-background-fetch-data.wxss",
"./packageAPI/pages/storage/get-background-prefetch-data/get-background-prefetch-data.wxss",
"./packageAPI/pages/performance/get-performance/get-performance.wxss",
"./packageAPI/pages/worker/worker/worker.wxss",
"./packageAPI/pages/framework/two-way-bindings/two-way-bindings.wxss",
"./packageAPI/pages/framework/wxs/wxs.wxss",
"./packageAPI/pages/framework/resizable/resizable.wxss",
"./packageAPI/pages/framework/wxs/movable.wxss",
"./packageAPI/pages/framework/wxs/sidebar.wxss",
"./packageAPI/pages/framework/wxs/stick-top.wxss",
"./packageAPI/pages/framework/wxs/nearby.wxss",
"./app.wxss",
"./common/lib/weui.wxss",
"./miniprogram_npm/miniprogram-barrage/index.wxss",
"./miniprogram_npm/miniprogram-recycle-view/recycle-item.wxss",
"./miniprogram_npm/miniprogram-recycle-view/recycle-view.wxss",
"./miniprogram_npm/wxml-to-canvas/index.wxss",
"./page/API/components/set-tab-bar/set-tab-bar.wxss",
"./page/API/index.wxss",
"./page/cloud/index.wxss",
"./page/common/common.wxss",
"./page/common/index.wxss",
"./page/common/lib/weui.wxss",
"./page/component/index.wxss",
"./page/extend/index.wxss",
"--subpackage",
"packageAPI",
"-ll",
]
}
samples.push([sample4, 4])
const test_wine = (config, id) => {
const wine = spawn(
path.resolve(__dirname, "../../../wine/wcsc.exe"),
config.args,
{
cwd: config.projectPath,
}
);
const spwanData = [],
errData = [];
wine.stdout.on("data", (e) => {
spwanData.push(e);
});
wine.stderr.on("data", (e) => {
errData.push(e);
});
return new Promise((resolve, reject) => {
wine.on("close", (n) => {
console.log("wine n: ", n);
if (0 === n) {
let result = Buffer.concat(spwanData).toString();
result = JSON.parse(result);
// delete result.generateFunctionContent["__COMMON__"];
result = JSON.stringify(result, null, 4);
// result = result.common;
fs.writeFileSync(
path.resolve(__dirname, `./${id}/wine_output.json`),
result
);
// process.stdout.write(result);
resolve(result);
} else {
process.stderr.write(
"wine error:",
Buffer.concat(errData).toString()
);
// process.stderr.write(Buffer.concat(spwanData).toString());
reject(n);
}
});
});
};
const test_node = (config, id) => {
const node_exec = spawn(
path.resolve(__dirname, "../../../../nodejs/wcsc"),
config.args,
{
cwd: config.projectPath,
env: {
WX_DEBUG_COMPILER_OUTPUT: path.resolve(__dirname, '' + id),
},
// stdio: 'inherit'
}
);
const spwanData = [],
errData = [];
node_exec.stdout.on("data", (e) => {
spwanData.push(e);
// console.log(e.toString())
});
node_exec.stderr.on("data", (e) => {
errData.push(e);
// console.log(e.toString())
});
return new Promise((resolve, reject) => {
node_exec.on("close", (n) => {
console.log("node n: ", n);
if (0 === n) {
let result = Buffer.concat(spwanData).toString();
// require('fs').writeFileSync('/mnt/disk2/wechat-web-devtools-linux/tmp/llw2.json', result)
// process.stdout.write(result);
result = JSON.parse(result);
// delete result.generateFunctionContent["__COMMON__"];
result = JSON.stringify(result, null, 4);
// result = result.common;
fs.writeFileSync(
path.resolve(__dirname, `./${id}/node_output.json`),
result
);
fs.writeFileSync(
path.resolve(__dirname, `./${id}/node_stderr.json`),
Buffer.concat(errData)
);
resolve(result);
} else {
console.error("错误");
process.stderr.write(Buffer.concat(errData).toString());
// process.stderr.write(Buffer.concat(spwanData).toString());
reject(n);
}
});
});
};
const test = async (config, id) => {
try {
const node_result = await test_node(config, id);
const wine_result = await test_wine(config, id);
const t1 = JSON.parse(node_result);
const t2 = JSON.parse(wine_result);
console.log(util.isDeepStrictEqual(t1, t2))
} catch (err) {
console.error("错误:", err);
}
};
(async ()=>{
for (const sample of samples) {
await test(sample[0], sample[1])
}
})()