# LN Behavior Checklist (OC vs LN)

## Playback Lifecycle
1. Play success path
- Trigger: play with valid mp4
- Expected order: shouldStart -> didStart(frame0) -> didPlay(...) -> didFinish -> didStop
- Note: repeatCount > 0/-1 should loop before final stop

2. Pause / Resume
- Trigger: pause during playback then resume
- Expected: pause should not emit stop callback; resume continues frame progression

3. Stop
- Trigger: explicit stop
- Expected: didStop called once; internal render/decode/audio released

4. Failure path
- Trigger: invalid path / decode failure
- Expected order: stop (cleanup) then fail callback (matches OC fail path)

5. Background behavior
- Trigger: app enters background
- Expected:
  - stop: emits stop and releases
  - pauseAndResume: pause in background, resume in foreground
  - doNothing: no automatic control

## Wrap Legacy Container Semantics
- For legacy wrap delegate callbacks, container parameter should be internal player container view (`playerView`) when available.

## Config Resource Loading
- If no `vap_loadImageWithURL`, resource loading returns early (OC parity).
- Text local resources should still render text image.

## Manual Demo Verification Steps
1. QGVAPlayerDemo
- Play PlayerView (repeat -1), tap to stop
- Play WrapView (repeat -1), verify callbacks and auto destroy

2. QGVAPlayerDemoSwift
- Play, tap to stop, verify no crash and callbacks received

3. Negative test
- Pass invalid file path; verify fail callback and resources cleaned
