Fix smoke 1차 follow-up gaps: player resolver, type target, filter, utf8 (#12)
This commit is contained in:
60
docs/history/2026-04-07_이슈12-smoke2-fix-generator.md
Normal file
60
docs/history/2026-04-07_이슈12-smoke2-fix-generator.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# 2026-04-07 이슈 #12 Smoke 2회차 fix — Generator
|
||||
|
||||
- **이슈**: #12
|
||||
- **롤**: Generator (Planner/Generator/Evaluator 사이클)
|
||||
- **소요 시간**: ~50분
|
||||
- **Context 사용량**: ~75k tokens
|
||||
|
||||
## 작업 요약
|
||||
|
||||
Smoke 1회차에서 발견된 4개 구조적 gap을 unit test 가능한 형태로 수정.
|
||||
|
||||
| Gap | 위치 | 수정 |
|
||||
|-----|------|------|
|
||||
| A | Player full-path resolver | `UiaPathParser` + `IUiaTreeNode`/`UiaPathResolver` 신규. `UiaPlayerHost.ResolveElement`가 FlaUI tree adapter로 segment chain descend |
|
||||
| B | Recorder type step target inheritance | `DragCollapser`에 `lastFocusPath`/`lastMousePath` 추적, `FlushType()`이 typeRes 없을 때 fallback |
|
||||
| C | SUT 외 창 필터 | `IWindowFilter` + `SutProcessWindowFilter` 도입, `LowLevelHook.Filter`가 mouse/key 모두 필터링. `Program.cs`에서 `WindowFromPoint`/`GetForegroundWindow` 와이어업 |
|
||||
| D | UTF-8 BOM 없는 yaml 명시 | `ScenarioWriter.WriteToFile`이 `new UTF8Encoding(false)`로 저장 |
|
||||
|
||||
## 새 테스트 (10건)
|
||||
|
||||
Player.Tests:
|
||||
- `UiaPathParser_ParsesMultiSegment_WithClassAndId`
|
||||
- `UiaPathParser_ParsesNameAttribute`
|
||||
- `UiaPathResolver_Descend_FindsNestedElement`
|
||||
- `UiaPathResolver_LastSegmentWithoutId_UsesClassName`
|
||||
- `UiaPathResolver_NotFound_ReturnsNull`
|
||||
- `SmokeRegression_BoxV4CleanLike_ParsesAndResolves`
|
||||
|
||||
Recorder.Tests:
|
||||
- `DragCollapser_TypeAfterFocusChange_InheritsTarget`
|
||||
- `DragCollapser_TypeAfterMouseDown_FallbackToMouseTarget`
|
||||
- `WindowFilter_ExternalCoord_DropsEvent`
|
||||
- `WindowFilter_SutCoord_KeepsEvent`
|
||||
- `ScenarioWriter_RoundTrip_PreservesKorean`
|
||||
|
||||
## 빌드/테스트 결과
|
||||
|
||||
- `dotnet build recordingtest.sln` — 0 warning, 0 error (TreatWarningsAsErrors)
|
||||
- `dotnet test` — 60 → 71 통과, 0 실패
|
||||
|
||||
## 변경 파일
|
||||
|
||||
- src/Recordingtest.Player/UiaPathParser.cs (new)
|
||||
- src/Recordingtest.Player/IUiaPathResolver.cs (new — `IUiaTreeNode`+`UiaPathResolver`)
|
||||
- src/Recordingtest.Player/UiaPlayerHost.cs
|
||||
- src/Recordingtest.Recorder/DragCollapser.cs
|
||||
- src/Recordingtest.Recorder/ScenarioWriter.cs
|
||||
- src/Recordingtest.Recorder/WindowFilter.cs (new)
|
||||
- src/Recordingtest.Recorder/NativeMethods.cs (WindowFromPoint/GetForegroundWindow/GetWindowThreadProcessId)
|
||||
- src/Recordingtest.Recorder/LowLevelHook.cs (Filter property)
|
||||
- src/Recordingtest.Recorder/Program.cs (filter wiring)
|
||||
- tests/Recordingtest.Player.Tests/UiaPathResolverTests.cs (new)
|
||||
- tests/Recordingtest.Recorder.Tests/RecorderTests.cs (5 새 fact)
|
||||
- docs/guides/smoke-test.md (PowerShell UTF-8 팁)
|
||||
|
||||
## 다음 단계
|
||||
|
||||
- `/evaluate issue-12` (Evaluator)
|
||||
- 통과 시 PROGRESS.md/PLAN.md orchestrator가 갱신
|
||||
- 실제 SUT 위 smoke 2회차로 box-v4-clean.yaml 재생 검증
|
||||
Reference in New Issue
Block a user