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

123 lines
4.6 KiB
C#

using System;
using System.Linq;
using System.Collections.Generic;
using NUnit.Framework;
using UnityEditor.Build.Reporting;
using UnityEditor.XR.OpenXR.Features;
using UnityEngine.XR.OpenXR.Features;
using UnityEngine.XR.OpenXR.Features.Interactions;
using UnityEngine.XR.OpenXR.Features.Mock;
using Assert = UnityEngine.Assertions.Assert;
using UnityEngine.XR.OpenXR.Tests;
using static UnityEditor.XR.OpenXR.Tests.OpenXREditorTestHelpers;
namespace UnityEditor.XR.OpenXR.Tests
{
internal class FeatureTests : OpenXRLoaderSetup
{
[Test]
public void EnableFeatures()
{
var featureInfos = GetFeatureInfos(BuildTargetGroup.Standalone);
featureInfos.SingleOrDefault(ext => ext.Attribute.UiName == "Mock Runtime").Feature.enabled = true;
Assert.IsTrue(MockRuntime.Instance.enabled);
featureInfos.SingleOrDefault(ext => ext.Attribute.UiName == "Mock Runtime").Feature.enabled = false;
Assert.IsFalse(MockRuntime.Instance.enabled);
}
[Test]
public void CheckDefaultValues()
{
var featureInfos = GetFeatureInfos(BuildTargetGroup.Standalone);
var mockExtInfo = featureInfos.SingleOrDefault(ext => ext.Attribute.UiName == "Mock Runtime");
Assert.AreEqual(mockExtInfo.Attribute.UiName, mockExtInfo.Feature.nameUi);
Assert.AreEqual(mockExtInfo.Attribute.Version, mockExtInfo.Feature.version);
Assert.AreEqual(mockExtInfo.Attribute.OpenxrExtensionStrings, mockExtInfo.Feature.openxrExtensionStrings);
}
[Test]
public void ValidationError()
{
bool errorFixed = false;
// Set up a validation check ...
MockRuntime.Instance.TestCallback = (s, o) =>
{
if (s == "GetValidationChecks")
{
var validationChecks = o as List<OpenXRFeature.ValidationRule>;
validationChecks?.Add(new OpenXRFeature.ValidationRule
{
message = "Mock Validation Fail",
checkPredicate = () => errorFixed,
fixIt = () => errorFixed = true,
error = true
});
}
return true;
};
// Try to build the player ...
var report = zBuildHookTests.BuildMockPlayer();
// It will fail because of the above validation issue ...
Assert.AreEqual(BuildResult.Failed, report.summary.result);
// There's one validation issue ...
var validationIssues = new List<OpenXRFeature.ValidationRule>();
OpenXRProjectValidation.GetCurrentValidationIssues(validationIssues, BuildTargetGroup.Standalone);
Assert.AreEqual(1, validationIssues.Count);
// Fix it ...
Assert.IsFalse(errorFixed);
validationIssues[0].fixIt.Invoke();
Assert.IsTrue(errorFixed);
// Now there's zero validation issues ...
OpenXRProjectValidation.GetCurrentValidationIssues(validationIssues, BuildTargetGroup.Standalone);
Assert.AreEqual(0, validationIssues.Count);
// Close the validation window ...
OpenXRProjectValidationRulesSetup.CloseWindow();
}
[Test]
public void GetFeatureByFeatureId()
{
var feature = FeatureHelpers.GetFeatureWithIdForActiveBuildTarget(MockRuntime.featureId);
Assert.IsNotNull(feature);
}
[Test]
public void GetFeatureByUnknownFeatureIdReturnsNull()
{
var feature = FeatureHelpers.GetFeatureWithIdForActiveBuildTarget("some.unknown.feature.id");
Assert.IsNull(feature);
feature = FeatureHelpers.GetFeatureWithIdForActiveBuildTarget("");
Assert.IsNull(feature);
feature = FeatureHelpers.GetFeatureWithIdForActiveBuildTarget(null);
Assert.IsNull(feature);
}
[Test]
public void GetFeaturesWithIdsReturnsFeatures()
{
var featureIds = new string[] { MockRuntime.featureId, EyeGazeInteraction.featureId };
var features = FeatureHelpers.GetFeaturesWithIdsForActiveBuildTarget(featureIds);
Assert.IsNotNull(features);
Assert.IsTrue(features.Length == 2);
var expectedTypes = new Type[] { typeof(MockRuntime), typeof(EyeGazeInteraction) };
foreach (var feature in features)
{
Assert.IsTrue(Array.IndexOf(expectedTypes, feature.GetType()) > -1);
}
}
}
}