protected override void OnMarsUpdate() { switch (frameCount) { case 1: { AssertValidInitialState(); // this data is what the proxies in the prefab need to match this.AddOrUpdateTrait(k_Member1DataId, TraitNames.Floor, true); DatabaseUtils.AddPlane(k_Member1DataId); DatabaseUtils.AddPlane(k_Member2DataId); ForceUpdateQueries(); break; } case 2: AssertValidTrackingState(); break; case 3: // this should cause our non-required floor to be lost this.RemoveTrait <bool>(k_Member1DataId, TraitNames.Floor); ForceUpdateQueries(); break; case 4: // the group should still be 'tracking' despite losing the non-required child Assert.AreEqual(QueryState.Tracking, m_ProxyGroup.queryState); Assert.AreEqual(QueryState.Tracking, m_ChildProxy1.queryState); Assert.AreEqual(QueryState.Unavailable, m_ChildProxy2.queryState); Assert.True(m_Child1ContentObject.activeInHierarchy); Assert.False(m_Child2ContentObject.activeInHierarchy); break; } }
protected override void OnMarsUpdate() { switch (frameCount) { case 1: AssertValidInitialState(); break; case 2: { // this data is what the proxies in the prefab need to match DatabaseUtils.AddPlane(k_Member1DataId); DatabaseUtils.AddPlane(k_Member2DataId); ForceUpdateQueries(); break; } case 3: AssertValidTrackingState(); AssertGroupQueryDataUseTracked(m_ProxyGroup.queryID); break; case 4: DatabaseUtils.RemovePlane(k_Member1DataId); ForceUpdateQueries(); break; case 5: Assert.AreEqual(QueryState.Tracking, m_ProxyGroup.queryState); Assert.AreEqual(QueryState.Tracking, m_ChildProxy2.queryState); Assert.True(m_Child2ContentObject.activeInHierarchy); // since this child has been lost its data it should be unavailable Assert.AreEqual(QueryState.Unavailable, m_ChildProxy1.queryState); Assert.Null(m_ChildProxy1.currentData); Assert.False(m_Child1ContentObject.activeInHierarchy); // make sure the backend is still tracking this group's data despite partial loss AssertGroupQueryDataUseTracked(m_ProxyGroup.queryID); break; case 6: // removing this plane should cause the second member to be lost, // causing the group to be lost because all members have now lost their data DatabaseUtils.RemovePlane(k_Member2DataId); break; case 7: Assert.AreEqual(ReAcquireOnLoss ? QueryState.Resuming : QueryState.Unavailable, m_ProxyGroup.queryState); QueryAssertUtils.QueryStateIs(QueryState.Unavailable, m_ChildProxy1, m_ChildProxy2); QueryAssertUtils.AssignedDataIsNull(m_ChildProxy1, m_ChildProxy2); QueryAssertUtils.ActiveInHierarchy(false, m_Child1ContentObject, m_Child2ContentObject); AssertGroupQueryDataUseTracked(m_ProxyGroup.queryID, false); break; case 8: // re-add the data we need to match, to test reacquire behavior DatabaseUtils.AddPlane(k_Member1DataId); DatabaseUtils.AddPlane(k_Member2DataId); ForceUpdateQueries(); break; case 9: if (ReAcquireOnLoss) { AssertValidTrackingState(); AssertGroupQueryDataUseTracked(m_ProxyGroup.queryID, true); } else { QueryAssertUtils.AssignedDataIsNull(m_ChildProxy1, m_ChildProxy2); QueryAssertUtils.QueryStateIs(QueryState.Unavailable, m_ProxyGroup); QueryAssertUtils.ActiveInHierarchy(false, m_Child1ContentObject, m_Child2ContentObject); AssertGroupQueryDataUseTracked(m_ProxyGroup.queryID, false); } break; } }