From d834653b20dccbbb6eeab3afadb7405f8c641fce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=A7=E6=AF=85?= Date: Wed, 12 Aug 2020 00:29:57 +0800 Subject: [PATCH] =?UTF-8?q?test:=20=F0=9F=92=8D=20=E5=AE=8C=E5=96=84=20Rax?= =?UTF-8?q?=20=E5=87=BA=E7=A0=81=E7=9A=84=E6=B5=8B=E8=AF=95=E7=94=A8?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/code-generator/package.json | 3 + .../expected/demo-project/src/global.less | 0 .../expected/demo-project/src/global.scss | 5 ++ .../demo-project/src/pages/Home/index.jsx | 1 + .../test-cases/rax-app/demo1/schema.json5 | 2 +- packages/code-generator/test/rax-app.test.ts | 82 +++++++++++++++---- 6 files changed, 74 insertions(+), 19 deletions(-) delete mode 100644 packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/src/global.less create mode 100644 packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/src/global.scss diff --git a/packages/code-generator/package.json b/packages/code-generator/package.json index 45cb02d76..5da8251f0 100644 --- a/packages/code-generator/package.json +++ b/packages/code-generator/package.json @@ -37,6 +37,9 @@ "ava": { "compileEnhancements": false, "snapshotDir": "test/fixtures/__snapshots__", + "files": [ + "test/*.test.ts" + ], "extensions": [ "ts" ], diff --git a/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/src/global.less b/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/src/global.less deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/src/global.scss b/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/src/global.scss new file mode 100644 index 000000000..5a853d5a9 --- /dev/null +++ b/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/src/global.scss @@ -0,0 +1,5 @@ +// TODO: 引入默认全局样式 + +body { + -webkit-font-smoothing: antialiased; +} diff --git a/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/src/pages/Home/index.jsx b/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/src/pages/Home/index.jsx index 68fb698e4..acb73cdd4 100644 --- a/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/src/pages/Home/index.jsx +++ b/packages/code-generator/test-cases/rax-app/demo1/expected/demo-project/src/pages/Home/index.jsx @@ -1,6 +1,7 @@ import { createElement, Component } from 'rax'; import Page from 'rax-view'; + import Text from 'rax-text'; import './index.css'; diff --git a/packages/code-generator/test-cases/rax-app/demo1/schema.json5 b/packages/code-generator/test-cases/rax-app/demo1/schema.json5 index b33ccf620..510b70006 100644 --- a/packages/code-generator/test-cases/rax-app/demo1/schema.json5 +++ b/packages/code-generator/test-cases/rax-app/demo1/schema.json5 @@ -41,7 +41,7 @@ targetRootID: 'root', }, meta: { - name: '示例应用', + name: 'Rax App Demo', git_group: 'demo-group', project_name: 'demo-project', description: '这是一个示例应用', diff --git a/packages/code-generator/test/rax-app.test.ts b/packages/code-generator/test/rax-app.test.ts index aabbb5319..fce62e545 100644 --- a/packages/code-generator/test/rax-app.test.ts +++ b/packages/code-generator/test/rax-app.test.ts @@ -4,6 +4,7 @@ import fs from 'fs'; import glob from 'glob'; import JSON from 'json5'; import path from 'path'; +import chalk from 'chalk'; import CodeGenerator from '../src'; import createRaxAppBuilder from '../src/solutions/rax-app'; @@ -25,30 +26,30 @@ async function exportProject(schemaJson: IProjectSchema, targetPath: string, pro const defineTest = (caseDirName: string) => { test(`rax-app ${caseDirName} should works`, async (t) => { - const caseFullDir = path.join(TEST_CASES_DIR, caseDirName); - const schema = JSON.parse(fs.readFileSync(path.join(caseFullDir, 'schema.json5'), 'utf-8')); - const actualDir = path.join(caseFullDir, 'actual'); + try { + const caseFullDir = path.join(TEST_CASES_DIR, caseDirName); + const schema = JSON.parse(fs.readFileSync(path.join(caseFullDir, 'schema.json5'), 'utf-8')); + const actualDir = path.join(caseFullDir, 'actual'); - await exportProject(schema, actualDir, 'demo-project'); + removeActualDirRecursiveSync(actualDir, caseFullDir); - const actualFiles = glob.sync('**/*.{js,jsx,json,ts,tsx,less,css,scss,sass}', { cwd: actualDir }); + await exportProject(schema, actualDir, 'demo-project'); - t.true(actualFiles.length > 0) + const actualFiles = glob.sync('**/*.{js,jsx,json,ts,tsx,less,css,scss,sass}', { cwd: actualDir }); - spawnSync('npx', ['prettier', '--write', ...actualFiles], { - stdio: 'inherit', - shell: true, - cwd: actualDir, - }); + t.true(actualFiles.length > 0) - const diffRes = spawnSync('diff', ['-bur', 'actual', 'expected'], { - stdio: 'pipe', - shell: true, - cwd: caseFullDir, - encoding: 'utf-8', - }); + runPrettierSync(actualFiles, actualDir); - t.is(diffRes.stdout, '') + const diffRes = diffActualAndExpectedSync(caseFullDir); + if (diffRes) { + t.fail(diffRes); + } else { + t.pass(); + } + } catch(e){ + throw e; // just for debugger + } }); }; @@ -58,3 +59,48 @@ test('simple truth should pass', async (t) => { fs.readdirSync(TEST_CASES_DIR).forEach(defineTest); +function removeActualDirRecursiveSync(actualDir: string, caseFullDir: string) { + spawnSync('rm', ['-rf', actualDir], { + stdio: 'inherit', + shell: true, + cwd: caseFullDir + }); +} + +function runPrettierSync(files: string[], cwd: string) { + spawnSync('npx', ['prettier', '--write', ...files], { + stdio: 'inherit', + shell: true, + cwd, + }); +} + +function diffActualAndExpectedSync(caseFullDir: string): string { + const res = spawnSync('diff', ['-wur', 'expected', 'actual'], { + stdio: 'pipe', + shell: true, + cwd: caseFullDir, + encoding: 'utf-8', + }); + + return colorizeDiffOutput(res.stdout); +} + +function colorizeDiffOutput(output: string): string { + if (!output){ + return output; + } + + return output.split('\n').map(line => { + if (/^Only/i.test(line)){ + return chalk.red(line); + } else if (line[0] === '+'){ + return chalk.yellow(line); + } else if (line[0] === '-'){ + return chalk.red(line); + } else { + return line; + } + }).join('\n'); +} +