tests/SmartPort/Parser/SmartPortClipMetadataTests.cs
using HumanoidRetargeter.Editor;
using HumanoidRetargeter.Maths;
using HumanoidRetargeter.Skeleton;
using HumanoidRetargeter.Target;
using HumanoidRetargeterVrf;
using HumanoidRetargeterVrf.ResourceTypes;
using Xunit;

namespace SmartPort.Parser.Tests;

public class SmartPortClipMetadataTests
{
    [CompiledFixtureFact]
    public void GraphExtensionUsesDecodedAdditiveChannelsAndAuthoredLooping()
    {
        var path = Path.Combine(Environment.GetEnvironmentVariable("HR_SMART_PORT_FIXTURE")!, "models/player/human/frank_mp.vmdl_c");
        using var resource = new Resource();
        resource.Read(path);
        var model = Assert.IsType<Model>(resource.DataBlock);
        var skeleton = Skeleton.Create(model.Skeleton.Bones.Select(b =>
            new BoneDefinition(b.Name, b.Parent?.Name, new XForm(b.Position, b.Angle))).ToArray());
        var clips = SmartPortAnimationExport.ReadClips(path, new SmartPortRig(skeleton, skeleton));
        Assert.Equal(391, clips.Length);
        var delta = Assert.Single(clips.Where(c => c.Name == "bindPose_delta"));
        Assert.True(delta.Additive);
        Assert.False(delta.Looping);
        var walk = Assert.Single(clips.Where(c => c.Name == "Walk_N"));
        Assert.False(walk.Additive);
        Assert.True(walk.Looping);
        Assert.False(walk.Hidden);
    }
}