tests/SmartPort/Parser/IkTargetMappingTests.cs
using HumanoidRetargeter.Editor;
using HumanoidRetargeterVrf;
using Xunit;

namespace SmartPort.Parser.Tests;

public class IkTargetMappingTests
{
    [CompiledFixtureFact]
    public void GoalsAreResolvedFromGraphAndChainsNotBoneNamingRules()
    {
        var fixture = Environment.GetEnvironmentVariable("HR_SMART_PORT_FIXTURE")!;
        using var graph = new Resource();
        graph.Read(Path.Combine(fixture, "models/player/mplayer/mplayer_animgraph.vanmgrph_c"));
        var goals = SmartPortIkTargets.Read(Path.Combine(fixture, "models/player/human/frank_mp.vmdl_c"), graph.DataBlock!.ToString()!);
        Assert.Equal("hand_l", goals["hand_L_to_R_ikrule"]);
        Assert.Equal("hand_l", goals["arm_l_iktarget"]);
        Assert.Equal("hand_r", goals["arm_r_iktarget"]);
        Assert.DoesNotContain("hand_L_IK_target", goals.Keys); // Parameter-driven nodes do not animate this placeholder bone.
    }
}