Skip to content

Commit

Permalink
test: 测试产物输出到每个 case 的 output 目录下
Browse files Browse the repository at this point in the history
  • Loading branch information
meixg committed Dec 3, 2021
1 parent 3482172 commit e80ff4f
Show file tree
Hide file tree
Showing 6 changed files with 88 additions and 41 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ vendor/
/dist/
test/cases/*/ssr.js
test/cases/*/ssr.php
test/cases/*/output/*
.vscode
/example
bin/output.js
bin/component*.js
bin/component*.js
9 changes: 8 additions & 1 deletion bin/render-by-source.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,18 @@
require('source-map-support/register')
const { join } = require('path')
const { getRenderArguments, ls } = require('../dist/fixtures/case')
const fs = require('fs')

const caseName = process.argv[2]
const caseItem = ls().find(item => item.caseName === caseName)
const caseRoot = caseItem.caseRoot
const render = require(join(caseRoot, `${caseName}/ssr.js`))

const ssrSpecPath = join(caseRoot, `${caseName}/ssr-spec.js`)
if (fs.existsSync(ssrSpecPath)) {
require(ssrSpecPath)
}

const render = require(join(caseRoot, `${caseName}/output/ssr.js`))
const html = render(...getRenderArguments(caseName, caseRoot))

process.stdout.write(html)
45 changes: 30 additions & 15 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
"@types/debug": "^4.1.5",
"@types/jest": "^26.0.8",
"@types/lodash": "^4.14.158",
"@types/mkdirp": "^1.0.2",
"@types/yargs": "^15.0.5",
"@typescript-eslint/eslint-plugin": "^3.7.1",
"@typescript-eslint/parser": "^3.7.1",
Expand All @@ -75,6 +76,7 @@
"etpl": "^3.2.0",
"handlebars": "^4.7.6",
"jest": "^27.0.6",
"mkdirp": "^1.0.4",
"mustache": "^4.0.1",
"san": "^3.10.0",
"san-html-cases": "^3.10.20",
Expand Down
50 changes: 34 additions & 16 deletions src/fixtures/case.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { SanProject } from '../models/san-project'
import ToJSCompiler from '../target-js'
import debugFactory from 'debug'
import { compileToRenderer } from '../index'
import mkdirp from 'mkdirp'

const debug = debugFactory('case')
export const caseRoots = [
Expand Down Expand Up @@ -40,33 +41,49 @@ export function readExpected (caseName: string, caseRoot: string) {
return readFileSync(htmlPath, 'utf8')
}

export function compileJS (caseName: string, caseRoot: string, compileToFunctionBodyCode: true): string
export function compileJS (caseName: string, caseRoot: string, compileToFunctionBodyCode: boolean) {
export function compileJS (caseName: string, caseRoot: string, compileToFunctionBodyCode: boolean = false) {
debug('compile js', caseName)
const caseDir = join(caseRoot, caseName)
const jsFile = join(caseDir, 'component.js')
const ssrOnly = /-so/.test(caseName)
const targetCode = sanProject.compile(
jsFile,
ToJSCompiler,
{ ssrOnly, bareFunctionBody: compileToFunctionBodyCode, importHelpers }
)
const targetFile = join(caseRoot, caseName, 'ssr.js')
return compileToFunctionBodyCode ? targetCode : writeFileSync(targetFile, targetCode)

if (compileToFunctionBodyCode) {
const jsFile = join(caseDir, 'component.js')
const targetCode = sanProject.compile(
jsFile,
ToJSCompiler,
{ ssrOnly, bareFunctionBody: compileToFunctionBodyCode, importHelpers }
)
return targetCode
}

for (const file of readdirSync(caseDir).filter(file => file === 'component.js' || file.endsWith('.san.js'))) {
const jsFile = join(caseDir, file)
const targetCode = sanProject.compile(
jsFile,
ToJSCompiler,
{ ssrOnly, bareFunctionBody: compileToFunctionBodyCode, importHelpers }
)
mkdirp.sync(join(caseRoot, caseName, 'output'))
const targetFile = file === 'component.js'
? join(caseRoot, caseName, 'output/ssr.js')
: join(caseRoot, caseName, 'output', file)
writeFileSync(targetFile, targetCode)
}
}

export function compileComponent (caseName: string, caseRoot: string, compileToFunctionBodyCode: true): string
export function compileComponent (caseName: string, caseRoot: string, compileToFunctionBodyCode: boolean) {
export function compileComponent (caseName: string, caseRoot: string, compileToFunctionBodyCode: boolean = false) {
debug('compile js', caseName)
const caseDir = join(caseRoot, caseName)
const jsFile = join(caseDir, 'component.js')
const ssrOnly = /-so/.test(caseName)
const component = require(jsFile)
const targetCode = sanProject.compile(
require(jsFile),
component,
ToJSCompiler,
{ ssrOnly, bareFunctionBody: compileToFunctionBodyCode, importHelpers }
)
const targetFile = join(caseRoot, caseName, 'ssr.js')
mkdirp.sync(join(caseRoot, caseName, 'output'))
const targetFile = join(caseRoot, caseName, 'output/ssr.js')
return compileToFunctionBodyCode ? targetCode : writeFileSync(targetFile, targetCode)
}

Expand All @@ -80,9 +97,10 @@ export function compileTS (caseName: string, caseRoot: string) {
ToJSCompiler,
{ ssrOnly, importHelpers }
)
mkdirp.sync(join(caseRoot, caseName, 'output'))
const targetFile = file === 'component.ts'
? join(caseDir, 'ssr.js')
: join(caseDir, file.replace(/\.ts$/, '.js'))
? join(caseDir, 'output', 'ssr.js')
: join(caseDir, 'output', file.replace(/\.ts$/, '.js'))
writeFileSync(targetFile, targetCode)
}
}
Expand Down
20 changes: 12 additions & 8 deletions test/e2e.spec.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import { ls, compileComponent, compileJS, jsExists, tsExists, compileTS, getRenderArguments, readExpected, renderOnthefly } from '../src/fixtures/case'
import { join } from 'path'
import { parseSanHTML } from '../src/index'
import { existsSync } from 'fs'

for (const { caseName, caseRoot } of ls()) {
const [expectedData, expectedHtml] = parseSanHTML(readExpected(caseName, caseRoot))

if (tsExists(caseName, caseRoot)) {
it('render to source (TypeScript): ' + caseName, async function () {
compileTS(caseName, caseRoot)
const render = require(join(caseRoot, caseName, 'ssr.js'))
const render = require(join(caseRoot, caseName, 'output', 'ssr.js'))
const got = render(...getRenderArguments(caseName, caseRoot))
const [data, html] = parseSanHTML(got)

Expand All @@ -19,23 +20,26 @@ for (const { caseName, caseRoot } of ls()) {

if (jsExists(caseName, caseRoot)) {
it('js to source: ' + caseName, async function () {
const code = compileJS(caseName, caseRoot, true)
// eslint-disable-next-line
const render = new Function('data', 'noDataOutput', 'require', code)
compileJS(caseName, caseRoot)
const render = require(join(caseRoot, caseName, 'output/ssr.js'))
const ssrSpecPath = join(caseRoot, `${caseName}/ssr-spec.js`)
if (existsSync(ssrSpecPath)) {
require(ssrSpecPath)
}
// 测试在 strict mode,因此需要手动传入 require
const got = render(...getRenderArguments(caseName, caseRoot), require)
const got = render(...getRenderArguments(caseName, caseRoot))
const [data, html] = parseSanHTML(got)

expect(data).toEqual(expectedData)
expect(html).toEqual(expectedHtml)
})

it('component to source: ' + caseName, async function () {
const code = compileComponent(caseName, caseRoot, true)
compileComponent(caseName, caseRoot)
// eslint-disable-next-line
const render = new Function('data', 'noDataOutput', 'require', code)
const render = require(join(caseRoot, caseName, 'output/ssr.js'))
// 测试在 strict mode,因此需要手动传入 require
const got = render(...getRenderArguments(caseName, caseRoot), require)
const got = render(...getRenderArguments(caseName, caseRoot))
const [data, html] = parseSanHTML(got)

expect(data).toEqual(expectedData)
Expand Down

0 comments on commit e80ff4f

Please sign in to comment.