# Mosis Designer UI Testing with AutoHotkey

## Overview

This folder contains AutoHotkey v2 scripts for automated UI testing of the Mosis Designer.

## Testing Architecture

```
┌─────────────────────────────────────────────────────────────┐
│                    Test Runner (run_tests.ahk)              │
│  - Launches designer process                                │
│  - Captures stdout for verification                         │
│  - Runs test scripts sequentially                           │
│  - Generates test report                                    │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    Test Scripts (test_*.ahk)                │
│  - test_navigation.ahk: Click apps, verify screen change    │
│  - test_back_button.ahk: Navigate and go back               │
│  - test_home_button.ahk: Navigate deep, press home          │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    Utilities (lib/utils.ahk)                │
│  - FindDesignerWindow(): Get window handle                  │
│  - ClickPhone(x, y): Click at phone coordinates             │
│  - WaitForScreen(name): Wait for navigation log             │
│  - CaptureScreenshot(path): Save window image               │
└─────────────────────────────────────────────────────────────┘
```

## Window Identification

- **Window Title**: "Mosis Designer"
- **Window Class**: GLFW window class (varies by version)
- **Size**: 540x960 client area (phone resolution)

## Coordinate System

The phone UI uses a 540x960 coordinate system. AHK needs to:

1. Find the designer window
2. Get the client area position
3. Convert phone coordinates to screen coordinates

```
Phone Coordinates (0,0 to 540,960)
       │
       ▼
┌──────────────────┐
│  Window Title    │  ← Window decorations
├──────────────────┤
│                  │
│   Phone UI       │  ← Client area (540x960)
│   (0,0)          │
│       ┌──────┐   │
│       │ App  │   │  ← Click target
│       │ Icon │   │
│       └──────┘   │
│                  │
│          (540,960)
└──────────────────┘
```

## App Icon Positions (Home Screen)

Based on the home.rml layout with 4 columns:

| Row | App       | Approx X | Approx Y |
|-----|-----------|----------|----------|
| 1   | Phone     | 67       | 100      |
| 1   | Messages  | 202      | 100      |
| 1   | Contacts  | 337      | 100      |
| 1   | Browser   | 472      | 100      |
| 2   | Gallery   | 67       | 200      |
| 2   | Camera    | 202      | 200      |
| 2   | Settings  | 337      | 200      |
| 2   | Music     | 472      | 200      |

Dock items at bottom (~900 Y):
- Phone: 67
- Messages: 202
- Contacts: 337
- Browser: 472

## Verification Methods

### 1. Console Output Parsing
The designer outputs navigation events to stdout:
```
navigateTo called with: dialer
Loaded screen: apps/dialer/dialer.rml
Navigated to: dialer (history depth: 1)
goBack called (history depth: 1)
Back to: home
```

We can redirect stdout to a file and parse it for verification.

### 2. Screenshot Comparison
Take screenshots at key points and compare with baselines.

### 3. Window Title Changes (future)
Could modify designer to include current screen in title.

## Test Execution Flow

```
1. Start designer with stdout redirected to log file
2. Wait for window to appear
3. Wait for "Document loaded successfully" in log
4. Execute test actions (clicks, waits)
5. Parse log for expected navigation events
6. Report pass/fail
7. Close designer
```

## Files

- `lib/utils.ahk` - Shared utility functions
- `run_tests.ahk` - Main test runner
- `test_navigation.ahk` - Navigation test suite
- `test_back_button.ahk` - Back button test suite
- `config.ahk` - Test configuration (paths, timeouts)

## Usage

```powershell
# Run all tests
& "C:\Program Files\AutoHotkey\v2\AutoHotkey64.exe" run_tests.ahk

# Run specific test
& "C:\Program Files\AutoHotkey\v2\AutoHotkey64.exe" test_navigation.ahk
```

## Requirements

- AutoHotkey v2 (installed at C:\Program Files\AutoHotkey\v2)
- Mosis Designer built (designer\build\Debug\mosis-designer.exe)
- Test assets in place (src\main\assets\)
