TypePHP 编译器
https://swoole.com/aot/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5.6 KiB
5.6 KiB
PHP AOT 编译器不支持语法测试标记说明
概述
本文档说明为什么某些测试文件被标记为 SKIP,以及如何识别这些测试。
🚫 已标记为 SKIP 的测试文件
1. generators.phpt
- 原因: Generator yield 语法不支持
- Skip 信息:
skip Generator syntax not supported in AOT - PHP 版本: 5.5+
- 详细说明: 生成器需要运行时协程支持,与 AOT 静态编译冲突
2. attributes.phpt
- 原因: 类的注解/属性语法不支持
- Skip 信息:
skip Attributes/Annotations not supported in AOT - PHP 版本: 8.0+
- 详细说明: Attribute 需要完整的反射 API 和运行时元数据查询支持
3. trait-basic.phpt
- 原因: Traits 尚未支持(计划中)
- Skip 信息:
skip Traits not yet supported in AOT - PHP 版本: 5.4+
- 详细说明: Trait 的代码注入机制复杂,正在开发中
4. prop-001.phpt
- 原因: 特定属性访问模式不支持
- Skip 信息:
skip: not supported - 详细说明: 复杂的动态属性访问链不支持
5. ref-closure-param.phpt
- 原因: 引用参数闭包不支持
- Skip 信息:
skip - 详细说明: 闭包函数中使用引用参数的场景不支持
6. innerHTML 相关测试
- 原因: innerHTML DOM 操作不支持
- Skip 信息:
skip innerHTML and DOM manipulation not supported in AOT - 详细说明: JavaScript 风格的 DOM 操作不是 PHP 原生功能
7. 游离代码测试
- 原因: 全局可执行表达式不支持
- Skip 信息:
skip Free-floating code not allowed, must be in function/method - 详细说明: 所有可执行表达式必须在函数或类的方法中
📋 Skip 标记格式
所有不支持的测试文件都在 --FILE-- 之前添加了 --SKIPIF-- 部分:
--TEST--
测试名称
--SKIPIF--
<?php
echo "skip 不支持的原因";
?>
--FILE--
<?php
// 测试代码
?>
--EXPECT--
期望输出
🔍 如何识别 Skip 测试
方法 1: 查看文件头
检查测试文件是否包含 --SKIPIF-- 部分
方法 2: 运行测试时观察
php run-tests.php tests/aot/generators.phpt
输出会显示:
TEST /home/swoole/workspace/aot/tests/aot/generators.phpt
SKIP Generator syntax not supported in AOT [tests/aot/generators.phpt]
方法 3: 统计 Skip 测试数量
grep -l "^--SKIPIF--" tests/aot/*.phpt | wc -l
📊 Skip 测试统计
| 类别 | 测试文件 | Skip 原因 |
|---|---|---|
| Generator | generators.phpt | 运行时协程不支持 |
| Attributes | attributes.phpt | 反射 API 不支持 |
| Traits | trait-basic.phpt | 开发中,尚未完成 |
| Property Access | prop-001.phpt | 动态属性访问链不支持 |
| Closure Reference | ref-closure-param.phpt | 引用参数闭包不支持 |
| DOM Manipulation | innerHTML 相关测试 | JavaScript DOM API 不支持 |
| Free-floating Code | 游离代码测试 | 全局可执行表达式不支持 |
| 总计 | 7 | - |
⚠️ 注意事项
对于开发者
- 不要删除 Skip 标记: 这些标记说明该语法当前不被支持
- 参考文档: 查看
docs/UNSUPPORTED_SYNTAX.md了解详细信息 - 使用替代方案: 文档中提供了每种不支持语法的替代方案
对于测试人员
- 验证 Skip 原因: 确保 skip 信息准确描述不支持的原因
- 更新标记: 当某个语法被支持后,及时移除 skip 标记
- 报告问题: 发现应该 skip 但没有标记的测试时及时报告
对于贡献者
- 实现功能: 完成不支持语法的实现后,移除对应的 skip 标记
- 验证功能: 移除 skip 后确保测试能够通过
- 更新文档: 同步更新
docs/UNSUPPORTED_SYNTAX.md
🔄 状态变更流程
从 Skip 到 Pass
当某个语法被支持后:
-
移除 Skip 标记
--TEST-- Test Name - --SKIPIF-- - <?php - echo "skip ..."; - ?> --FILE-- -
运行测试验证
php run-tests.php tests/aot/test-name.phpt -v -
确认测试通过
TEST /path/to/test-name.phpt PASS Test Name -
更新文档
- 在
docs/UNSUPPORTED_SYNTAX.md中将语法移到"已支持"部分 - 更新统计信息
- 在
📝 添加新的 Skip 测试
如果发现新的不支持语法,按以下步骤添加 skip 标记:
- 编辑测试文件,添加
--SKIPIF--部分 - 说明 skip 原因,使用清晰的描述
- 更新本文档,记录新的 skip 测试
- 更新规范文档,在
docs/UNSUPPORTED_SYNTAX.md中添加说明
示例:
--TEST--
New Feature Test
--SKIPIF--
<?php
echo "skip New feature not supported in AOT";
?>
--FILE--
<?php
// Test code
?>
--EXPECT--
Expected output
🔗 相关文档
❓ 常见问题
Q: 为什么要把不支持的测试放在这里?
A: 保留这些测试可以作为未来的开发参考,并且可以在功能实现后立即启用。
Q: Skip 测试会影响测试结果吗?
A: 不会。Skip 测试会被正确识别并单独统计,不会影响 pass/fail 的比例。
Q: 如何查看所有 skip 测试?
A: 运行 php run-tests.php tests/aot/ -g SKIP 可以查看所有 skip 测试及其原因。
Q: 什么时候会移除 skip 标记?
A: 当对应的语法被实现并通过测试验证后,会移除 skip 标记。