Skip to content

Commit 7c6b290

Browse files
committed
Fix spatial observer and validate with tests
1 parent c29fcb1 commit 7c6b290

13 files changed

+268
-46
lines changed

Assets/MixedRealityToolkit.Providers/ObjectMeshObserver/SpatialObjectMeshObserver.cs

Lines changed: 5 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,6 @@ bool IMixedRealityCapabilityCheck.CheckCapability(MixedRealityCapability capabil
101101

102102
#region IMixedRealityDataProvider Implementation
103103

104-
bool autoResume = false;
105-
106104
/// <inheritdoc />
107105
public override void Initialize()
108106
{
@@ -116,9 +114,13 @@ public override void Initialize()
116114
}
117115
}
118116

117+
/// <inheritdoc />
119118
public override void Update()
120119
{
121-
if (!IsRunning) { return; }
120+
if (!IsRunning)
121+
{
122+
return;
123+
}
122124

123125
SendMeshObjects();
124126
}
@@ -130,30 +132,6 @@ public override void Reset()
130132
Initialize();
131133
}
132134

133-
/// <inheritdoc />
134-
public override void Enable()
135-
{
136-
// Resume iff we are not running and had been disabled while running.
137-
if (!IsRunning && autoResume)
138-
{
139-
Resume();
140-
}
141-
}
142-
143-
/// <inheritdoc />
144-
public override void Disable()
145-
{
146-
// Remember if we are currently running when Disable is called.
147-
autoResume = IsRunning;
148-
149-
// If we are disabled while running...
150-
if (IsRunning)
151-
{
152-
// Suspend the observer
153-
Suspend();
154-
}
155-
}
156-
157135
/// <inheritdoc />
158136
public override void Destroy()
159137
{

Assets/MixedRealityToolkit.Providers/WindowsMixedReality/WindowsMixedRealitySpatialMeshObserver.cs

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -143,30 +143,12 @@ public override void Reset()
143143
Initialize();
144144
}
145145

146-
/// <inheritdoc />
147-
public override void Enable()
148-
{
149-
if (!IsRunning)
150-
{
151-
Resume();
152-
}
153-
}
154-
155146
/// <inheritdoc />
156147
public override void Update()
157148
{
158149
UpdateObserver();
159150
}
160151

161-
/// <inheritdoc />
162-
public override void Disable()
163-
{
164-
if (IsRunning)
165-
{
166-
Suspend();
167-
}
168-
}
169-
170152
/// <inheritdoc />
171153
public override void Destroy()
172154
{
@@ -359,6 +341,7 @@ public Material OcclusionMaterial
359341
/// <inheritdoc />
360342
public bool RecalculateNormals { get; set; } = true;
361343

344+
/// <inheritdoc />
362345
public int TrianglesPerCubicMeter { get; set; } = 0;
363346

364347
private Material visibleMaterial = null;

Assets/MixedRealityToolkit.Tests/PlayModeTests/Microsoft.MixedReality.Toolkit.Tests.PlayModeTests.asmdef

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
"Microsoft.MixedReality.Toolkit.Services.InputSimulation.Editor",
1212
"Microsoft.MixedReality.Toolkit.Tests",
1313
"Unity.TextMeshPro",
14-
"Microsoft.MixedReality.Toolkit.Async"
14+
"Microsoft.MixedReality.Toolkit.Async",
15+
"Microsoft.MixedReality.Toolkit.Services.SpatialAwarenessSystem",
16+
"Microsoft.MixedReality.Toolkit.Providers.ObjectMeshObserver"
1517
],
1618
"optionalUnityReferences": [
1719
"TestAssemblies"
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License. See LICENSE in the project root for license information.
3+
4+
#if !WINDOWS_UWP
5+
// When the .NET scripting backend is enabled and C# projects are built
6+
// The assembly that this file is part of is still built for the player,
7+
// even though the assembly itself is marked as a test assembly (this is not
8+
// expected because test assemblies should not be included in player builds).
9+
// Because the .NET backend is deprecated in 2018 and removed in 2019 and this
10+
// issue will likely persist for 2018, this issue is worked around by wrapping all
11+
// play mode tests in this check.
12+
13+
using Microsoft.MixedReality.Toolkit.SpatialAwareness;
14+
using Microsoft.MixedReality.Toolkit.Utilities;
15+
using NUnit.Framework;
16+
using System.Collections;
17+
using UnityEditor;
18+
using UnityEngine;
19+
using UnityEngine.TestTools;
20+
21+
namespace Microsoft.MixedReality.Toolkit.Tests
22+
{
23+
/// <summary>
24+
///
25+
/// </summary>
26+
public class SpatialObserverTests
27+
{
28+
private const string TestSpatialAwarenessSysteProfilePath = "Assets/MixedRealityToolkit.Tests/PlayModeTests/TestProfiles/TestMixedRealitySpatialAwarenessSystemProfile.asset";
29+
private const string TestSpatialAwarenessSysteProfilePath_ManualStart = "Assets/MixedRealityToolkit.Tests/PlayModeTests/TestProfiles/TestMixedRealitySpatialAwarenessSystemProfile_ManualStart.asset";
30+
31+
/// <summary>
32+
/// Test default case of Auto-Start SpatialObjectMeshObserver observer type and SpatialAwarenessSystem in editor
33+
/// Validates that system resumes (i.e auto-starts again) when disabled/enabled
34+
/// </summary>
35+
[UnityTest]
36+
public IEnumerator TestAutoStartObserver()
37+
{
38+
var mrtkProfile = CreateMRTKTestProfile(TestSpatialAwarenessSysteProfilePath);
39+
TestUtilities.InitializeMixedRealityToolkit(mrtkProfile);
40+
yield return PlayModeTestUtilities.WaitForInputSystemUpdate();
41+
42+
var spatialAwarenesssDataProvider = CoreServices.SpatialAwarenessSystem as IMixedRealityDataProviderAccess;
43+
var spatialObserver = spatialAwarenesssDataProvider.GetDataProvider<SpatialObjectMeshObserver.SpatialObjectMeshObserver>();
44+
Assert.IsNotNull(spatialObserver, "No SpatialObjectMeshObserver data provider created or found");
45+
Assert.IsTrue(spatialObserver.IsRunning);
46+
47+
CoreServices.SpatialAwarenessSystem.Disable();
48+
spatialObserver = spatialAwarenesssDataProvider.GetDataProvider<SpatialObjectMeshObserver.SpatialObjectMeshObserver>();
49+
Assert.IsNull(spatialObserver);
50+
51+
CoreServices.SpatialAwarenessSystem.Enable();
52+
spatialObserver = spatialAwarenesssDataProvider.GetDataProvider<SpatialObjectMeshObserver.SpatialObjectMeshObserver>();
53+
Assert.IsNotNull(spatialObserver, "No SpatialObjectMeshObserver data provider created or found");
54+
Assert.IsTrue(spatialObserver.IsRunning);
55+
}
56+
57+
/// <summary>
58+
/// Test case of Manual-Start SpatialObjectMeshObserver observer type and SpatialAwarenessSystem in editor
59+
/// Validates that system should not resume observers unless directly told by test
60+
/// </summary>
61+
[UnityTest]
62+
public IEnumerator TestManualStartObserver()
63+
{
64+
var mrtkProfile = CreateMRTKTestProfile(TestSpatialAwarenessSysteProfilePath_ManualStart);
65+
TestUtilities.InitializeMixedRealityToolkit(mrtkProfile);
66+
yield return PlayModeTestUtilities.WaitForInputSystemUpdate();
67+
68+
var spatialAwarenesssDataProvider = CoreServices.SpatialAwarenessSystem as IMixedRealityDataProviderAccess;
69+
var spatialObserver = spatialAwarenesssDataProvider.GetDataProvider<SpatialObjectMeshObserver.SpatialObjectMeshObserver>();
70+
Assert.IsNotNull(spatialObserver, "No SpatialObjectMeshObserver data provider created or found");
71+
Assert.IsFalse(spatialObserver.IsRunning);
72+
73+
CoreServices.SpatialAwarenessSystem.Disable();
74+
spatialObserver = spatialAwarenesssDataProvider.GetDataProvider<SpatialObjectMeshObserver.SpatialObjectMeshObserver>();
75+
Assert.IsNull(spatialObserver);
76+
77+
CoreServices.SpatialAwarenessSystem.Enable();
78+
spatialObserver = spatialAwarenesssDataProvider.GetDataProvider<SpatialObjectMeshObserver.SpatialObjectMeshObserver>();
79+
Assert.IsNotNull(spatialObserver, "No SpatialObjectMeshObserver data provider created or found");
80+
Assert.IsFalse(spatialObserver.IsRunning);
81+
82+
CoreServices.SpatialAwarenessSystem.ResumeObservers();
83+
Assert.IsTrue(spatialObserver.IsRunning);
84+
85+
CoreServices.SpatialAwarenessSystem.Disable();
86+
spatialObserver = spatialAwarenesssDataProvider.GetDataProvider<SpatialObjectMeshObserver.SpatialObjectMeshObserver>();
87+
Assert.IsNull(spatialObserver);
88+
89+
CoreServices.SpatialAwarenessSystem.Enable();
90+
spatialObserver = spatialAwarenesssDataProvider.GetDataProvider<SpatialObjectMeshObserver.SpatialObjectMeshObserver>();
91+
Assert.IsNotNull(spatialObserver, "No SpatialObjectMeshObserver data provider created or found");
92+
Assert.IsFalse(spatialObserver.IsRunning);
93+
}
94+
95+
/// <summary>
96+
/// Test that when the SpatialAwarenessSystem is disabled in the MRTK profile, no service is created
97+
/// </summary>
98+
[UnityTest]
99+
public IEnumerator TestDisableSpatialAwarenessSystem()
100+
{
101+
var mrtkProfile = CreateMRTKTestProfile(TestSpatialAwarenessSysteProfilePath);
102+
103+
mrtkProfile.IsSpatialAwarenessSystemEnabled = false;
104+
105+
TestUtilities.InitializeMixedRealityToolkit(mrtkProfile);
106+
yield return PlayModeTestUtilities.WaitForInputSystemUpdate();
107+
108+
Assert.IsNull(CoreServices.SpatialAwarenessSystem);
109+
}
110+
111+
private static MixedRealityToolkitConfigurationProfile CreateMRTKTestProfile(string spatialAwarenessSystemPath)
112+
{
113+
var mrtkProfile = ScriptableObject.CreateInstance<MixedRealityToolkitConfigurationProfile>();
114+
115+
mrtkProfile.SpatialAwarenessSystemSystemType = new SystemType(typeof(MixedRealitySpatialAwarenessSystem));
116+
mrtkProfile.IsSpatialAwarenessSystemEnabled = true;
117+
mrtkProfile.SpatialAwarenessSystemProfile = AssetDatabase.LoadAssetAtPath<MixedRealitySpatialAwarenessSystemProfile>(spatialAwarenessSystemPath);
118+
119+
return mrtkProfile;
120+
}
121+
}
122+
}
123+
#endif

Assets/MixedRealityToolkit.Tests/PlayModeTests/SpatialObserverTests.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/MixedRealityToolkit.Tests/PlayModeTests/TestProfiles.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
%YAML 1.1
2+
%TAG !u! tag:unity3d.com,2011:
3+
--- !u!114 &11400000
4+
MonoBehaviour:
5+
m_ObjectHideFlags: 0
6+
m_CorrespondingSourceObject: {fileID: 0}
7+
m_PrefabInstance: {fileID: 0}
8+
m_PrefabAsset: {fileID: 0}
9+
m_GameObject: {fileID: 0}
10+
m_Enabled: 1
11+
m_EditorHideFlags: 0
12+
m_Script: {fileID: 11500000, guid: 19f279aded72cb741b4de89a54359dd4, type: 3}
13+
m_Name: TestMixedRealitySpatialAwarenessSystemProfile
14+
m_EditorClassIdentifier:
15+
isCustomProfile: 1
16+
observerConfigurations:
17+
- componentType:
18+
reference: Microsoft.MixedReality.Toolkit.SpatialObjectMeshObserver.SpatialObjectMeshObserver,
19+
Microsoft.MixedReality.Toolkit.Providers.ObjectMeshObserver
20+
componentName: Spatial Object Mesh Observer
21+
priority: 0
22+
runtimePlatform: 208
23+
observerProfile: {fileID: 11400000, guid: 60e57a38f0e2d434d82a9c6934dab9d8, type: 2}

Assets/MixedRealityToolkit.Tests/PlayModeTests/TestProfiles/TestMixedRealitySpatialAwarenessSystemProfile.asset.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
%YAML 1.1
2+
%TAG !u! tag:unity3d.com,2011:
3+
--- !u!114 &11400000
4+
MonoBehaviour:
5+
m_ObjectHideFlags: 0
6+
m_CorrespondingSourceObject: {fileID: 0}
7+
m_PrefabInstance: {fileID: 0}
8+
m_PrefabAsset: {fileID: 0}
9+
m_GameObject: {fileID: 0}
10+
m_Enabled: 1
11+
m_EditorHideFlags: 0
12+
m_Script: {fileID: 11500000, guid: 19f279aded72cb741b4de89a54359dd4, type: 3}
13+
m_Name: TestMixedRealitySpatialAwarenessSystemProfile_ManualStart
14+
m_EditorClassIdentifier:
15+
isCustomProfile: 1
16+
observerConfigurations:
17+
- componentType:
18+
reference: Microsoft.MixedReality.Toolkit.SpatialObjectMeshObserver.SpatialObjectMeshObserver,
19+
Microsoft.MixedReality.Toolkit.Providers.ObjectMeshObserver
20+
componentName: Spatial Object Mesh Observer
21+
priority: 0
22+
runtimePlatform: 208
23+
observerProfile: {fileID: 11400000, guid: ecda8e1f90a7e0b4ba406732c1f8b4a8, type: 2}

Assets/MixedRealityToolkit.Tests/PlayModeTests/TestProfiles/TestMixedRealitySpatialAwarenessSystemProfile_ManualStart.asset.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)