arkavo-org / arkavo-org/VRMMetalKit
Implement 46 skipped animation/layering/root-motion tests
- Dominant language
- Swift
- Stars
- 6
- Forks
- 2
- Avg merge
- 18h 51m
- Merged PRs (30d)
- 26
Description
## Problem
PR #119 added 46 test stubs for animation features that were merged as `XCTAssertTrue(true, ...)` placeholders — falsely inflating pass rates. These have been converted to `throw XCTSkip(...)` (commit 8debba9) so they now report honestly, but the underlying features and test logic still need implementation.
## Skipped tests by area
### Animation Layering (14 tests) — `AnimationLayeringTests.swift`
- `testMultipleAnimationLayers` — additive layer on top of base
- `testBasePlusAdditiveLayer` — base + breathing overlay
- `testLayerPriority` — higher priority layers override lower
- `testCrossFadeBetweenAnimations` — smooth A→B transition
- `testCrossFadeTiming` — fade completes in specified duration
- `testCrossFadeInterruption` — new fade during ongoing fade
- `testAnimationBlendingWeights` — weight affects final pose
- `testZeroWeightNoContribution` — weight 0 = no effect
- `testFullWeightContribution` — weight 1 = full effect
- `testWeightAnimation` — animatable weights for fade in/out
- `testAdditiveAnimation` — additive delta on base pose
- `testMultipleAdditiveLayers` — breathing + fidgeting + recoil
- `testAnimationMasking` — upper body only
- `testBoneSpecificMasking` — mask specific bones
### Root Motion (17 tests) — `RootMotionTests.swift`
- `testRootMotionExtraction` — extract movement from hips
- `testRootMotionDirection` — forward/back/left/right
- `testRootMotionVelocity` — velocity calculation
- `testRootMotionRotation` — Y rotation from hips
- `testRootMotionApplication` — update character transform
- `testRootMotionWithoutApplication` — hips move, character doesn't
- `testRootMotionVertical` — jump/crouch handling
- `testRootMotionLooping` — accumulate across loops
- `testRootMotionLoopReset` — smooth loop boundary
- `testRootMotionAccumulation` — multi-loop accumulation
- `testRootMotionBlending` — blend during cross-fade
- `testRootMotionScale` — speed affects root motion
- `testRootMotionWithIK` — foot IK integration
- `testRootMotionOnSlopes` — uneven terrain
- `testRootMotionCollision` — stoppable by collision
- `testRootMotionEvents` — footstep callbacks
- `testRootMotionPrediction` — predict future position
### Edge Cases & Other (15 tests)
- `AnimationEdgeCaseTests`: partial bone mapping, infinity handling, deep hierarchy, memory efficiency
- `FingerAnimationTests`: all fingers animated
- `VRMAAdvancedTests`: SpringBone+animation coexistence, blending, layer priority, animation variation, bone transforms
- `VRM1AnimationTests`: expression override validation
- `VRMABoneMappingTests`: extension bone mapping priority
- `VRMABoneRetargetingTests`: retargeting intent preservation
- `VRMANonHumanoidTests`: humanoid/non-humanoid separation, coordinate conversion
- `ExpressionTests`: mood reset behavior
- `VRM1_0RenderingOrientationTests`: coordinate system assumptions
- `ZFightingDepthPrecisionTests`: reverse-Z precision assertions
## Approach
Many of these require new APIs (`AnimationLayer`, `CrossFade`, `RootMotion`, `AnimationMask`) that don't exist yet. Suggested prioritization:
1. **Quick wins** — tests that just need assertions added to existing logic (expression override, bone mapping priority, coordinate assumptions, depth precision)
2. **Root motion** — core feature, 17 tests, `RootMotion` struct already stubbed in test file
3. **Animation layering** — 14 tests, requires `AnimationLayer`/`AnimationMask` types (currently defined only in test file)
4. **Advanced features** — IK integration, collision, slope handling, event system
## References
- Commit converting placeholders to XCTSkip: 8debba9
- Original PR: #119
Contributor guide
Research direction
Start by running the skipped tests in AnimationLayeringTests.swift and RootMotionTests.swift, then inspect the existing stubs and the quick-win test areas listed in the issue. The work is complete when the 46 tests have real assertions and no longer require XCTSkip, including layering, root motion, and the listed edge cases.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- swift
- Domain
- computer-graphics
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100