VR4Medical/ICI/Library/PackageCache/com.unity.xr.openxr@3903c1059bcf/Tests/Runtime/OpenXRStatisticsTest.cs
2025-07-29 13:45:50 +03:00

107 lines
3.1 KiB
C#

using NUnit.Framework;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.TestTools;
using UnityEngine.XR.OpenXR.Features;
namespace UnityEngine.XR.OpenXR.Tests
{
internal class OpenXRStatisticsTests : OpenXRLoaderSetup
{
[UnityTest]
public IEnumerator RegisterAndSetTestStatistic_UsingStatFlagStatOptionNone()
{
var feature = ScriptableObject.CreateInstance<SingleStatTestFeature>();
feature.ClearStatOnUpdate = false;
base.InitializeAndStart();
yield return null;
feature.CreateStat();
yield return null;
feature.SetStatValue(1.0f);
yield return null;
var stat1Success =
Provider.XRStats.TryGetStat(GetFirstDisplaySubsystem(), SingleStatTestFeature.StatName, out float value1);
base.StopAndShutdown();
Object.DestroyImmediate(feature);
Assert.IsTrue(stat1Success);
Assert.AreEqual(1.0f, value1);
}
[UnityTest]
public IEnumerator RegisterAndSetTestStatistic_UsingStatFlagClearOnUpdate()
{
var feature = ScriptableObject.CreateInstance<SingleStatTestFeature>();
feature.ClearStatOnUpdate = true;
base.InitializeAndStart();
yield return null;
feature.CreateStat();
yield return null;
feature.SetStatValue(1.0f);
yield return null;
var beforeUpdateSuccess =
Provider.XRStats.TryGetStat(GetFirstDisplaySubsystem(), SingleStatTestFeature.StatName, out float beforeUpdateValue);
yield return null;
var afterUpdateSuccess =
Provider.XRStats.TryGetStat(GetFirstDisplaySubsystem(), SingleStatTestFeature.StatName, out float afterUpdateValue);
base.StopAndShutdown();
Object.DestroyImmediate(feature);
Assert.IsTrue(beforeUpdateSuccess);
Assert.AreEqual(1.0f, beforeUpdateValue);
Assert.IsTrue(afterUpdateSuccess);
Assert.AreEqual(0.0f, afterUpdateValue);
}
private static IntegratedSubsystem GetFirstDisplaySubsystem()
{
List<XRDisplaySubsystem> displays = new();
SubsystemManager.GetSubsystems(displays);
if (displays.Count == 0)
{
Debug.Log("No display subsystem found.");
return null;
}
return displays[0];
}
}
internal class SingleStatTestFeature : OpenXRFeature
{
public const string StatName = "TestStat";
[NonSerialized]
private ulong m_statId;
public bool ClearStatOnUpdate { get; set; } = false;
public void CreateStat()
{
StatFlags flags = StatFlags.StatOptionNone;
if (ClearStatOnUpdate)
{
flags |= StatFlags.ClearOnUpdate;
}
m_statId = RegisterStatsDescriptor(StatName, flags);
}
public void SetStatValue(float value)
{
SetStatAsFloat(m_statId, value);
}
}
}