Implement recorder PoC (#6)
This commit is contained in:
40
docs/history/2026-04-07_이슈6-recorder-generator.md
Normal file
40
docs/history/2026-04-07_이슈6-recorder-generator.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# 2026-04-07 이슈 #6 — Recorder Generator
|
||||
|
||||
- **이슈**: #6
|
||||
- **소요 시간**: 약 25분
|
||||
- **Context 사용량**: 약 45k 토큰
|
||||
|
||||
## 작업 요약
|
||||
|
||||
`docs/contracts/recorder.md` 계약을 바탕으로 `Recordingtest.Recorder` 콘솔 PoC와
|
||||
xUnit 테스트 프로젝트를 신규 작성했다.
|
||||
|
||||
### 산출물
|
||||
|
||||
- `src/Recordingtest.Recorder/`
|
||||
- `Recordingtest.Recorder.csproj` (`net8.0-windows`, FlaUI.Core/UIA3 4.0.0, YamlDotNet 16.1.3)
|
||||
- `NativeMethods.cs` — Win32 P/Invoke (WH_KEYBOARD_LL, WH_MOUSE_LL, GetMessage 등)
|
||||
- `LowLevelHook.cs` — 전용 STA 스레드 + message loop, `Channel<RawEvent>` 푸시
|
||||
- `ElementPathBuilder.cs` — `IElementSnapshot` 기반 순수 로직
|
||||
- `OffsetNormalizer.cs` — 정규화 [0..1] 클램프 포함
|
||||
- `MaskPolicy.cs` — `PasswordBox` / `IsPassword` → `<MASKED>`
|
||||
- `Scenario.cs`, `ScenarioWriter.cs` — YAML 직렬화 (UnderscoredNamingConvention)
|
||||
- `Program.cs` — CLI 파싱, attach 로직(절대 Launch 없음), Ctrl+C 플러시
|
||||
- `tests/Recordingtest.Recorder.Tests/`
|
||||
- 5 단위 테스트 (path builder / normalizer / mask / yaml roundtrip / CLI exit 2)
|
||||
|
||||
### 결과
|
||||
|
||||
- `dotnet build recordingtest.sln` — 경고 0, 오류 0
|
||||
- `dotnet test tests/Recordingtest.Recorder.Tests` — 5/5 통과
|
||||
|
||||
### 주의
|
||||
|
||||
- SUT(EG-BIM Modeler)는 코드/스크립트 어디에서도 launch하지 않는다. attach만 지원.
|
||||
- `--attach` 누락 시 usage 출력 후 exit 2.
|
||||
- 실 hook/UIA는 단위 테스트에서 다루지 않으며, 순수 로직 4종 + CLI 1종만 검증.
|
||||
|
||||
### 미해결 / 후속
|
||||
|
||||
- 실제 SUT 대상 통합 테스트는 Evaluator 단계에서 별도 진행.
|
||||
- IME 조합 키, 드래그 합성, 휠 등 고차 이벤트 합성은 후속 스프린트.
|
||||
Reference in New Issue
Block a user