fix: 修复构建脚本跨平台 import specifier 路径规范化
- toImportSpecifier() 使用 replaceAll 替代 split(sep).join,明确 ESM import specifier 语义 - 增加 relativePath 可选参数支持测试注入 Windows relative 语义 - 重写 Windows 路径测试,使用 node:path.win32 显式模拟而非依赖当前平台 sep - 更新 DEVELOPMENT.md 记录构建 code generation 约定 - 同步 static-asset-embedding 和 windows-test-compat spec 新增要求
This commit is contained in:
@@ -56,3 +56,14 @@
|
||||
#### Scenario: SVG 文件
|
||||
- **WHEN** 请求路径以 `.svg` 结尾
|
||||
- **THEN** Content-Type SHALL 为 `image/svg+xml`
|
||||
|
||||
### Requirement: 静态资源 import specifier SHALL 使用平台无关分隔符
|
||||
构建时静态资源 code generation SHALL 将文件系统相对路径转换为 ESM import specifier,并确保生成的 import 路径在 Windows、macOS、Linux 开发环境下都使用 `/` 作为分隔符。
|
||||
|
||||
#### Scenario: Windows 相对路径转换为 import specifier
|
||||
- **WHEN** code generation 将 Windows 文件系统相对路径 `..\\dist\\web\\assets\\app.js` 转换为静态资源 import specifier
|
||||
- **THEN** 生成的 import specifier SHALL 为 `../dist/web/assets/app.js`,且 MUST NOT 包含 `\\`
|
||||
|
||||
#### Scenario: POSIX 相对路径保持 import specifier 形式
|
||||
- **WHEN** code generation 将 POSIX 文件系统相对路径 `../dist/web/assets/app.js` 转换为静态资源 import specifier
|
||||
- **THEN** 生成的 import specifier SHALL 保持为 `../dist/web/assets/app.js`
|
||||
|
||||
@@ -56,3 +56,14 @@ probes.example.yaml 中的 cmd 类型示例 SHALL 使用跨平台命令(如 `b
|
||||
#### Scenario: ICMP checker 测试使用 platform 注入
|
||||
- **WHEN** 在 Windows 上运行 ICMP checker 测试,mock 的 stdout 为 Unix 格式
|
||||
- **THEN** 测试 SHALL 通过 `new IcmpChecker("linux")` 构造 checker 实例,使 parsePingOutput 使用 Unix 解析器,确保测试在所有平台上通过
|
||||
|
||||
### Requirement: 路径语义测试 SHALL 显式模拟目标平台
|
||||
路径相关跨平台测试 SHALL 使用显式平台路径工具、依赖注入或等价测试 seam 表达目标平台语义,MUST NOT 依赖当前运行平台的 `path.sep` 伪装其他平台行为。
|
||||
|
||||
#### Scenario: 在非 Windows 平台验证 Windows 路径分隔符
|
||||
- **WHEN** 测试需要验证 Windows 文件系统路径中的反斜杠会被转换为平台无关输出
|
||||
- **THEN** 测试 SHALL 使用 `node:path.win32` 或等价注入方式生成 Windows relative path,并断言输出不包含 `\\`
|
||||
|
||||
#### Scenario: 验证 import specifier 输出
|
||||
- **WHEN** 测试验证构建脚本生成的 ESM import specifier
|
||||
- **THEN** 测试 SHALL 断言输出使用 `/` 分隔,MUST NOT 使用 `path.sep` 禁止当前平台的合法 `/` 字符
|
||||
|
||||
Reference in New Issue
Block a user