18 lines
1.9 KiB
JavaScript
18 lines
1.9 KiB
JavaScript
import fs from 'node:fs'
|
|
import path from 'node:path'
|
|
import assert from 'node:assert/strict'
|
|
import {createRequire} from 'node:module'
|
|
import {build} from 'esbuild'
|
|
const require=createRequire(import.meta.url),output=fs.mkdtempSync(path.resolve('.tmp/composer-add-menu-ssr-'))
|
|
const file=path.join(output,'fixture.tsx'),location=value=>JSON.stringify(path.resolve(value).replaceAll('\\','/'))
|
|
fs.writeFileSync(file,`import React from'react';import{renderToString}from'react-dom/server';import Add from ${location('src/renderer/src/workbuddy/composer/add-menu/SourceComposerAddMenu')};import{SourceFilesSubmenu,SourceModeSubmenu,SourceConnectorsSubmenu,SourceReferenceFilesSubmenu}from ${location('src/renderer/src/workbuddy/composer/add-menu/SourceSubmenus')};export const results=[renderToString(<Add entries={[{id:'add-files'}]}/>),renderToString(<SourceFilesSubmenu provider={{onPickLocalFiles:()=>{}}}/>),renderToString(<SourceModeSubmenu provider={{onChange:()=>{}}}/>),renderToString(<SourceConnectorsSubmenu provider={{items:[]}}/>),renderToString(<SourceReferenceFilesSubmenu provider={{items:[]}}/>)];`)
|
|
await build({entryPoints:[file],bundle:true,platform:'node',format:'cjs',jsx:'automatic',outfile:path.join(output,'fixture.cjs'),loader:{'.css':'empty'},external:['react','react-dom/server','@floating-ui/react'],logLevel:'warning'})
|
|
const {results}=require(path.join(output,'fixture.cjs'))
|
|
assert(results[0].includes('wb-composer__add-button')&&results[0].includes('aria-label="添加"'))
|
|
assert(results[1].includes('本地文件'))
|
|
assert(results[2].includes('cr-mode-submenu')&&results[2].includes('role="switch"'))
|
|
assert(results[3].includes('cr-connectors-submenu'))
|
|
assert(results[4].includes('cr-reference-files-submenu'))
|
|
fs.writeFileSync(path.join(output,'report.json'),JSON.stringify({result:'PASS',checks:5,scope:'Actual React SSR with no document/window; no original runtime access'},null,2))
|
|
console.log(JSON.stringify({result:'PASS',checks:5,output}))
|