test(rn-update): run real Hermes compiler on Windows
这个提交包含在:
父节点
aacfbf0edd
当前提交
04fc964a92
@ -1,12 +1,22 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import { execFileSync } from 'node:child_process'
|
||||
import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'
|
||||
import {
|
||||
chmodSync,
|
||||
copyFileSync,
|
||||
mkdirSync,
|
||||
mkdtempSync,
|
||||
readFileSync,
|
||||
rmSync,
|
||||
writeFileSync,
|
||||
} from 'node:fs'
|
||||
import { createRequire } from 'node:module'
|
||||
import { tmpdir } from 'node:os'
|
||||
import path from 'node:path'
|
||||
import test from 'node:test'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
|
||||
const cli = fileURLToPath(new URL('./xuqm-rn.mjs', import.meta.url))
|
||||
const workspaceRequire = createRequire(import.meta.url)
|
||||
|
||||
test('embed creates a complete versioned manifest from a host fixture', () => {
|
||||
const root = mkdtempSync(path.join(tmpdir(), 'xuqm-cli-'))
|
||||
@ -139,25 +149,34 @@ test('Android Hermes hosts compile plugin bundles to bytecode', () => {
|
||||
: 'linux64-bin',
|
||||
process.platform === 'win32' ? 'hermesc.exe' : 'hermesc',
|
||||
)
|
||||
writeFileSync(
|
||||
compiler,
|
||||
`#!/usr/bin/env node
|
||||
const fs = require('node:fs');
|
||||
const args = process.argv.slice(2);
|
||||
fs.writeFileSync(args[args.indexOf('-out') + 1], 'hermes-bytecode');
|
||||
`,
|
||||
{ mode: 0o755 },
|
||||
// 使用当前 React Native 实际依赖的 Hermes 编译器。文本脚本即使命名为
|
||||
// hermesc.exe 也不是 Windows 可执行文件,会让 CI 只验证到测试替身而非真实链路。
|
||||
const workspaceReactNativeManifest = workspaceRequire.resolve('react-native/package.json')
|
||||
const workspaceReactNativeRequire = createRequire(workspaceReactNativeManifest)
|
||||
const workspaceCompilerManifest = workspaceReactNativeRequire.resolve(
|
||||
'hermes-compiler/package.json',
|
||||
)
|
||||
const workspaceCompiler = path.join(
|
||||
path.dirname(workspaceCompilerManifest),
|
||||
'hermesc',
|
||||
process.platform === 'win32'
|
||||
? 'win64-bin'
|
||||
: process.platform === 'darwin'
|
||||
? 'osx-bin'
|
||||
: 'linux64-bin',
|
||||
process.platform === 'win32' ? 'hermesc.exe' : 'hermesc',
|
||||
)
|
||||
copyFileSync(workspaceCompiler, compiler)
|
||||
if (process.platform !== 'win32') chmodSync(compiler, 0o755)
|
||||
|
||||
execFileSync(process.execPath, [cli, 'embed', 'android'], {
|
||||
cwd: root,
|
||||
stdio: 'pipe',
|
||||
})
|
||||
|
||||
assert.equal(
|
||||
readFileSync(path.join(root, 'generated', 'common.android.bundle'), 'utf8'),
|
||||
'hermes-bytecode',
|
||||
)
|
||||
const bytecode = readFileSync(path.join(root, 'generated', 'common.android.bundle'))
|
||||
assert.ok(bytecode.length > Buffer.byteLength('javascript'))
|
||||
assert.notEqual(bytecode.toString('utf8'), 'javascript')
|
||||
const manifest = JSON.parse(readFileSync(path.join(root, 'generated', 'manifest.json'), 'utf8'))
|
||||
assert.equal(manifest.bundleFormat, 'hermes-bytecode')
|
||||
} finally {
|
||||
|
||||
正在加载...
在新工单中引用
屏蔽一个用户