mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-06 16:16:44 +08:00
test(cqrs): 扩展 registry gate 回归
- 新增缺少 notification handler 合同时的 generator 静默跳过覆盖 - 新增缺少 stream handler 合同时的 generator 静默跳过覆盖 - 新增缺少 registry attribute 合同时的 generator 静默跳过覆盖 - 更新 CQRS 恢复文档与本轮验证记录
This commit is contained in:
parent
e17fa15a01
commit
915d93d06d
@ -2333,16 +2333,36 @@ public class CqrsHandlerRegistryGeneratorTests
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 验证当 runtime 缺少 generated registry 需要实现的基础注册接口时,
|
/// 验证当 runtime 缺少 generated registry 需要依赖的基础合同时,
|
||||||
/// 生成器会整体跳过发射,避免产出无法承载运行时注册合同的半成品源码。
|
/// 生成器会整体跳过发射,避免产出无法承载运行时注册合同的半成品源码。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Test]
|
/// <param name="startMarker">待移除 runtime 合同块的起始标记。</param>
|
||||||
public void Does_Not_Generate_Registry_When_Runtime_Lacks_Handler_Registry_Interface()
|
/// <param name="endMarker">待移除 runtime 合同块之后的下一个稳定标记。</param>
|
||||||
|
[TestCase(
|
||||||
|
"public interface ICqrsHandlerRegistry",
|
||||||
|
"[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]")]
|
||||||
|
[TestCase(
|
||||||
|
"public interface INotificationHandler",
|
||||||
|
"public interface IStreamRequestHandler")]
|
||||||
|
[TestCase(
|
||||||
|
"public interface IStreamRequestHandler",
|
||||||
|
"rename:MissingIStreamRequestHandler")]
|
||||||
|
[TestCase(
|
||||||
|
"[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]",
|
||||||
|
"[AttributeUsage(AttributeTargets.Assembly)]")]
|
||||||
|
public void Does_Not_Generate_Registry_When_Runtime_Lacks_Required_Generation_Contract(
|
||||||
|
string startMarker,
|
||||||
|
string endMarker)
|
||||||
{
|
{
|
||||||
var source = RemoveBlock(
|
var source = endMarker.StartsWith("rename:", StringComparison.Ordinal)
|
||||||
HiddenNestedHandlerSelfRegistrationSource,
|
? RenameTypeIdentifier(
|
||||||
"public interface ICqrsHandlerRegistry",
|
HiddenNestedHandlerSelfRegistrationSource,
|
||||||
"[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]");
|
startMarker.Replace("public interface ", string.Empty, StringComparison.Ordinal),
|
||||||
|
endMarker["rename:".Length..])
|
||||||
|
: RemoveBlock(
|
||||||
|
HiddenNestedHandlerSelfRegistrationSource,
|
||||||
|
startMarker,
|
||||||
|
endMarker);
|
||||||
var execution = ExecuteGenerator(source);
|
var execution = ExecuteGenerator(source);
|
||||||
var inputCompilationErrors = execution.InputCompilationDiagnostics
|
var inputCompilationErrors = execution.InputCompilationDiagnostics
|
||||||
.Where(static diagnostic => diagnostic.Severity == DiagnosticSeverity.Error)
|
.Where(static diagnostic => diagnostic.Severity == DiagnosticSeverity.Error)
|
||||||
|
|||||||
@ -7,15 +7,16 @@ CQRS 迁移与收敛。
|
|||||||
|
|
||||||
## 当前恢复点
|
## 当前恢复点
|
||||||
|
|
||||||
- 恢复点编号:`CQRS-REWRITE-RP-079`
|
- 恢复点编号:`CQRS-REWRITE-RP-080`
|
||||||
- 当前阶段:`Phase 8`
|
- 当前阶段:`Phase 8`
|
||||||
- 当前 PR 锚点:`PR #307`
|
- 当前 PR 锚点:`PR #307`
|
||||||
- 当前结论:
|
- 当前结论:
|
||||||
- `GFramework.Cqrs` 已完成对外部 `Mediator` 的生产级替代,当前主线已从“是否可替代”转向“仓库内部收口与能力深化顺序”
|
- `GFramework.Cqrs` 已完成对外部 `Mediator` 的生产级替代,当前主线已从“是否可替代”转向“仓库内部收口与能力深化顺序”
|
||||||
- `dispatch/invoker` 生成前移已扩展到 request / stream 路径,`RP-077` 已补齐 request invoker provider gate 与 stream gate 对称的 descriptor / descriptor entry runtime 合同回归
|
- `dispatch/invoker` 生成前移已扩展到 request / stream 路径,`RP-077` 已补齐 request invoker provider gate 与 stream gate 对称的 descriptor / descriptor entry runtime 合同回归
|
||||||
- `RP-078` 已补齐 mixed fallback metadata 在 runtime 不允许多个 fallback attribute 实例时的单字符串 attribute 回退回归
|
- `RP-078` 已补齐 mixed fallback metadata 在 runtime 不允许多个 fallback attribute 实例时的单字符串 attribute 回退回归
|
||||||
- 当前 `RP-079` 已补齐 runtime 缺少 generated handler registry interface 时的 generator 静默跳过回归
|
- `RP-079` 已补齐 runtime 缺少 generated handler registry interface 时的 generator 静默跳过回归
|
||||||
- `ai-plan` active 入口现以 `PR #307` 和 `RP-079` 为唯一权威恢复锚点;更早 PR 与阶段细节均以下方归档为准
|
- 当前 `RP-080` 已将基础 generation gate 回归扩展到 notification handler interface、stream handler interface 与 registry attribute 缺失分支
|
||||||
|
- `ai-plan` active 入口现以 `PR #307` 和 `RP-080` 为唯一权威恢复锚点;更早 PR 与阶段细节均以下方归档为准
|
||||||
|
|
||||||
## 当前活跃事实
|
## 当前活跃事实
|
||||||
|
|
||||||
@ -60,11 +61,18 @@ CQRS 迁移与收敛。
|
|||||||
- 备注:当前 WSL worktree 需要显式绑定 `GIT_DIR` / `GIT_WORK_TREE` 后运行
|
- 备注:当前 WSL worktree 需要显式绑定 `GIT_DIR` / `GIT_WORK_TREE` 后运行
|
||||||
- `git diff --check`
|
- `git diff --check`
|
||||||
- 结果:通过
|
- 结果:通过
|
||||||
|
- `dotnet test GFramework.SourceGenerators.Tests/GFramework.SourceGenerators.Tests.csproj -c Release --filter "FullyQualifiedName~CqrsHandlerRegistryGeneratorTests.Does_Not_Generate_Registry_When_Runtime_Lacks_Required_Generation_Contract"`
|
||||||
|
- 结果:通过,`4/4` passed
|
||||||
|
- `python3 scripts/license-header.py --check`
|
||||||
|
- 结果:通过
|
||||||
|
- 备注:当前 WSL worktree 需要显式绑定 `GIT_DIR` / `GIT_WORK_TREE` 后运行
|
||||||
|
- `git diff --check`
|
||||||
|
- 结果:通过
|
||||||
|
|
||||||
## 下一推荐步骤
|
## 下一推荐步骤
|
||||||
|
|
||||||
1. 继续处理 `PR #307` 的剩余 review 收尾,优先保持 `ai-plan` active 入口与 trace 的单一锚点一致
|
1. 继续处理 `PR #307` 的剩余 review 收尾,优先保持 `ai-plan` active 入口与 trace 的单一锚点一致
|
||||||
2. 若继续推进代码切片,优先复核基础 generation gate 中其他必需 runtime contracts 是否也需要同类回归覆盖
|
2. 若继续推进代码切片,优先复核基础 generation gate 中 logging / DI 依赖是否已有合适的输入编译安全回归覆盖方式
|
||||||
3. 在进入下一批 runtime / generator 收敛前,保持最小 Release build 或 targeted test 作为权威验证
|
3. 在进入下一批 runtime / generator 收敛前,保持最小 Release build 或 targeted test 作为权威验证
|
||||||
|
|
||||||
## 活跃文档
|
## 活跃文档
|
||||||
|
|||||||
@ -109,3 +109,28 @@
|
|||||||
|
|
||||||
1. 继续复算 branch diff vs `origin/main`,若仍低于 `25` 个文件可继续下一批
|
1. 继续复算 branch diff vs `origin/main`,若仍低于 `25` 个文件可继续下一批
|
||||||
2. 下一批优先复核基础 generation gate 中其他必需 runtime contracts 是否也需要同类回归覆盖
|
2. 下一批优先复核基础 generation gate 中其他必需 runtime contracts 是否也需要同类回归覆盖
|
||||||
|
|
||||||
|
### 阶段:基础 generated registry contract gate 扩展回归(CQRS-REWRITE-RP-080)
|
||||||
|
|
||||||
|
- 将 `RP-079` 的单一 handler registry interface 缺失回归扩展为基础 generation gate 参数化测试
|
||||||
|
- 已补齐缺失分支:
|
||||||
|
- `ICqrsHandlerRegistry`
|
||||||
|
- `INotificationHandler<TNotification>`
|
||||||
|
- `IStreamRequestHandler<TRequest, TResponse>`
|
||||||
|
- `CqrsHandlerRegistryAttribute`
|
||||||
|
- stream handler interface 变体采用类型重命名构造 runtime metadata miss,避免删除命名空间尾部单行接口时引入输入编译错误
|
||||||
|
|
||||||
|
### 验证(RP-080)
|
||||||
|
|
||||||
|
- `dotnet test GFramework.SourceGenerators.Tests/GFramework.SourceGenerators.Tests.csproj -c Release --filter "FullyQualifiedName~CqrsHandlerRegistryGeneratorTests.Does_Not_Generate_Registry_When_Runtime_Lacks_Required_Generation_Contract"`
|
||||||
|
- 结果:通过,`4/4` passed
|
||||||
|
- `python3 scripts/license-header.py --check`
|
||||||
|
- 结果:通过
|
||||||
|
- 备注:当前 WSL worktree 需要显式绑定 `GIT_DIR` / `GIT_WORK_TREE` 后运行
|
||||||
|
- `git diff --check`
|
||||||
|
- 结果:通过
|
||||||
|
|
||||||
|
### 当前下一步(RP-080)
|
||||||
|
|
||||||
|
1. 继续复算 branch diff vs `origin/main`,若仍低于 `25` 个文件可继续下一批
|
||||||
|
2. 下一批优先复核基础 generation gate 中 logging / DI 依赖是否已有合适的输入编译安全回归覆盖方式
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user