Fix smoke 1차 follow-up gaps: player resolver, type target, filter, utf8 (#12)
This commit is contained in:
@@ -224,6 +224,24 @@ Smoke test 완료 후:
|
||||
3. 10회 재생 reliability 수치 → player DoD #7 update
|
||||
4. 이슈 #2 또는 새 이슈에 리포트 코멘트
|
||||
|
||||
## 한글 yaml 확인 팁 (issue #12 Gap D)
|
||||
|
||||
`ScenarioWriter`는 UTF-8 (BOM 없음)으로 저장한다. PowerShell `Get-Content`는
|
||||
시스템 코드페이지로 디코딩해서 한글이 깨져 보일 수 있다. 파일 자체의 정합성을
|
||||
확인하려면 다음 중 하나를 사용한다:
|
||||
|
||||
```powershell
|
||||
# 권장: 명시적 UTF-8 디코딩
|
||||
Get-Content -Encoding UTF8 scenarios/box-v4.yaml
|
||||
|
||||
# 또는 출력 시 BOM 없이 다시 저장해 비교
|
||||
Get-Content -Encoding UTF8 scenarios/box-v4.yaml | Out-File -Encoding UTF8 tmp.yaml
|
||||
```
|
||||
|
||||
`UiaPathResolverTests.UiaPathParser_ParsesNameAttribute` 와
|
||||
`ScenarioWriter_RoundTrip_PreservesKorean` 가 한글 path/속성 round-trip을
|
||||
회귀로 잡는다.
|
||||
|
||||
## v3 이후 과제
|
||||
|
||||
- recorder IME 조합 키 처리
|
||||
|
||||
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