// Validates that we hit expected values for a sequence of two states // TODO: Generalize and convert to more elegant pattern (if required by test scenarios) private void ChainedHoverLightStateValuesValidationHelper( float hoverLight_InnerConeIntensityExpected, float hoverLight_outerConeIntensityExpected, float hoverLight_outerConeAngleExpected, float pressLight_InnerConeIntensityExpected, float pressLight_outerConeIntensityExpected, float pressLight_outerConeAngleExpected, float hoverLight_InnerConeIntensityExpected2, float hoverLight_outerConeIntensityExpected2, float hoverLight_outerConeAngleExpected2, float pressLight_InnerConeIntensityExpected2, float pressLight_outerConeIntensityExpected2, float pressLight_outerConeAngleExpected2, string testName, string targetName) { if (!ValidateEffectsPresent()) { return; } WaitHandle[] hoverLight_ValueValidationEvents = new WaitHandle[3]; WaitHandle[] pressLight_ValueValidationEvents = new WaitHandle[3]; Control target = FindName(targetName) as Control; var lights = GetElementForHoverLight(target).Lights; var hoverLight = _revealTestApi.GetAsRevealHoverLight(lights[0]); var pressLight = _revealTestApi.GetAsRevealHoverLight(lights[1]); _hoverSpotlight = _revealTestApi.GetSpotLight(hoverLight as Windows.UI.Xaml.Media.XamlLight); _pressSpotlight = _revealTestApi.GetSpotLight(pressLight as Windows.UI.Xaml.Media.XamlLight); hoverLight_ValueValidationEvents[0] = _compositionPropertyLogger.RegisterProperty(_hoverSpotlight, "InnerConeIntensity", CompositionPropertyLogger.LoggableType.Float, 0.0f, hoverLight_InnerConeIntensityExpected, coneIntensityTolerance); hoverLight_ValueValidationEvents[1] = _compositionPropertyLogger.RegisterProperty(_hoverSpotlight, "OuterConeIntensity", CompositionPropertyLogger.LoggableType.Float, 0.0f, hoverLight_outerConeIntensityExpected, coneIntensityTolerance); hoverLight_ValueValidationEvents[2] = _compositionPropertyLogger.RegisterProperty(_hoverSpotlight, "OuterConeAngle", CompositionPropertyLogger.LoggableType.Float, 0.0f, hoverLight_outerConeAngleExpected, coneAngleTolerance); pressLight_ValueValidationEvents[0] = _compositionPropertyLogger.RegisterProperty(_pressSpotlight, "InnerConeIntensity", CompositionPropertyLogger.LoggableType.Float, 0.0f, pressLight_InnerConeIntensityExpected, coneIntensityTolerance); pressLight_ValueValidationEvents[1] = _compositionPropertyLogger.RegisterProperty(_pressSpotlight, "OuterConeIntensity", CompositionPropertyLogger.LoggableType.Float, 0.0f, pressLight_outerConeIntensityExpected, coneIntensityTolerance); pressLight_ValueValidationEvents[2] = _compositionPropertyLogger.RegisterProperty(_pressSpotlight, "OuterConeAngle", CompositionPropertyLogger.LoggableType.Float, 0.0f, pressLight_outerConeAngleExpected, coneAngleTolerance); // Off-thread validation waits until each registered property hits its expected value Task.Run(() => { var combined = hoverLight_ValueValidationEvents.Concat(pressLight_ValueValidationEvents).ToArray(); bool hoverLight_Result = WaitHandle.WaitAll(hoverLight_ValueValidationEvents, 10000); bool pressLight_Result = WaitHandle.WaitAll(pressLight_ValueValidationEvents, 10000); RunOnUIThread.Execute(() => { // We will log values when we hit the secod expected state, so don't log at this point. _compositionPropertyLogger.UnregisterProperty(_hoverSpotlight, "InnerConeIntensity", CompositionPropertyLogger.LoggableType.Float); _compositionPropertyLogger.UnregisterProperty(_hoverSpotlight, "OuterConeIntensity", CompositionPropertyLogger.LoggableType.Float); _compositionPropertyLogger.UnregisterProperty(_hoverSpotlight, "OuterConeAngle", CompositionPropertyLogger.LoggableType.Float); Array.Clear(hoverLight_ValueValidationEvents, 0, 3); _compositionPropertyLogger.UnregisterProperty(_pressSpotlight, "InnerConeIntensity", CompositionPropertyLogger.LoggableType.Float); _compositionPropertyLogger.UnregisterProperty(_pressSpotlight, "OuterConeIntensity", CompositionPropertyLogger.LoggableType.Float); _compositionPropertyLogger.UnregisterProperty(_pressSpotlight, "OuterConeAngle", CompositionPropertyLogger.LoggableType.Float); Array.Clear(pressLight_ValueValidationEvents, 0, 3); // Now validate we hit values for the second expected state HoverLightStateValuesValidationHelper( hoverLight_InnerConeIntensityExpected2, hoverLight_outerConeIntensityExpected2, hoverLight_outerConeAngleExpected2, pressLight_InnerConeIntensityExpected2, pressLight_outerConeIntensityExpected2, pressLight_outerConeAngleExpected2, testName, targetName); }); }); }
private void HoverLightStateValuesValidationHelper( float hoverLight_InnerConeIntensityExpected, float hoverLight_outerConeIntensityExpected, float hoverLight_outerConeAngleExpected, float pressLight_InnerConeIntensityExpected, float pressLight_outerConeIntensityExpected, float pressLight_outerConeAngleExpected, string testName, string targetName) { if (!ValidateEffectsPresent()) { return; } WaitHandle[] hoverLight_ValueValidationEvents = new WaitHandle[3]; WaitHandle[] pressLight_ValueValidationEvents = new WaitHandle[3]; Control target = FindName(targetName) as Control; var lights = GetElementForHoverLight(target).Lights; var hoverLight = _revealTestApi.GetAsRevealHoverLight(lights[0]); var pressLight = _revealTestApi.GetAsRevealHoverLight(lights[1]); _hoverSpotlight = _revealTestApi.GetSpotLight(hoverLight as Windows.UI.Xaml.Media.XamlLight); _pressSpotlight = _revealTestApi.GetSpotLight(pressLight as Windows.UI.Xaml.Media.XamlLight); hoverLight_ValueValidationEvents[0] = _compositionPropertyLogger.RegisterProperty(_hoverSpotlight, "InnerConeIntensity", CompositionPropertyLogger.LoggableType.Float, 0.0f, hoverLight_InnerConeIntensityExpected, coneIntensityTolerance); hoverLight_ValueValidationEvents[1] = _compositionPropertyLogger.RegisterProperty(_hoverSpotlight, "OuterConeIntensity", CompositionPropertyLogger.LoggableType.Float, 0.0f, hoverLight_outerConeIntensityExpected, coneIntensityTolerance); hoverLight_ValueValidationEvents[2] = _compositionPropertyLogger.RegisterProperty(_hoverSpotlight, "OuterConeAngle", CompositionPropertyLogger.LoggableType.Float, 0.0f, hoverLight_outerConeAngleExpected, coneAngleTolerance); pressLight_ValueValidationEvents[0] = _compositionPropertyLogger.RegisterProperty(_pressSpotlight, "InnerConeIntensity", CompositionPropertyLogger.LoggableType.Float, 0.0f, pressLight_InnerConeIntensityExpected, coneIntensityTolerance); pressLight_ValueValidationEvents[1] = _compositionPropertyLogger.RegisterProperty(_pressSpotlight, "OuterConeIntensity", CompositionPropertyLogger.LoggableType.Float, 0.0f, pressLight_outerConeIntensityExpected, coneIntensityTolerance); pressLight_ValueValidationEvents[2] = _compositionPropertyLogger.RegisterProperty(_pressSpotlight, "OuterConeAngle", CompositionPropertyLogger.LoggableType.Float, 0.0f, pressLight_outerConeAngleExpected, coneAngleTolerance); // Off-thread validation waits until each registered property hits its expected value Task.Run(() => { var combined = hoverLight_ValueValidationEvents.Concat(pressLight_ValueValidationEvents).ToArray(); bool hoverLight_Result = WaitHandle.WaitAll(hoverLight_ValueValidationEvents, 10000); bool pressLight_Result = WaitHandle.WaitAll(pressLight_ValueValidationEvents, 10000); RunOnUIThread.Execute(() => { using (var logger = new ResultsLogger(testName, TestResult)) { var hoverLight_InnerConeIntensityValues = _compositionPropertyLogger.GetValues(_hoverSpotlight, "InnerConeIntensity"); var hoverLight_OuterConeIntensityValues = _compositionPropertyLogger.GetValues(_hoverSpotlight, "OuterConeIntensity"); var hoverLight_OuterConeAngleValues = _compositionPropertyLogger.GetValues(_hoverSpotlight, "OuterConeAngle"); logger.LogMessage("HoverLight - InnerConeIntensity: " + string.Join(", ", hoverLight_InnerConeIntensityValues)); logger.LogMessage("HoverLight - OuterConeIntensity: " + string.Join(", ", hoverLight_OuterConeIntensityValues)); logger.LogMessage("HoverLight - OuterConeAngle: " + string.Join(", ", hoverLight_OuterConeAngleValues)); var pressLight_InnerConeIntensityValues = _compositionPropertyLogger.GetValues(_pressSpotlight, "InnerConeIntensity"); var pressLight_OuterConeIntensityValues = _compositionPropertyLogger.GetValues(_pressSpotlight, "OuterConeIntensity"); var pressLight_OuterConeAngleValues = _compositionPropertyLogger.GetValues(_pressSpotlight, "OuterConeAngle"); logger.LogMessage("PressLight - InnerConeIntensity: " + string.Join(", ", pressLight_InnerConeIntensityValues)); logger.LogMessage("PressLight - OuterConeIntensity: " + string.Join(", ", pressLight_OuterConeIntensityValues)); logger.LogMessage("PressLight - OuterConeAngle: " + string.Join(", ", pressLight_OuterConeAngleValues)); _compositionPropertyLogger.UnregisterProperty(_hoverSpotlight, "InnerConeIntensity", CompositionPropertyLogger.LoggableType.Float); _compositionPropertyLogger.UnregisterProperty(_hoverSpotlight, "OuterConeIntensity", CompositionPropertyLogger.LoggableType.Float); _compositionPropertyLogger.UnregisterProperty(_hoverSpotlight, "OuterConeAngle", CompositionPropertyLogger.LoggableType.Float); Array.Clear(hoverLight_ValueValidationEvents, 0, 3); _compositionPropertyLogger.UnregisterProperty(_pressSpotlight, "InnerConeIntensity", CompositionPropertyLogger.LoggableType.Float); _compositionPropertyLogger.UnregisterProperty(_pressSpotlight, "OuterConeIntensity", CompositionPropertyLogger.LoggableType.Float); _compositionPropertyLogger.UnregisterProperty(_pressSpotlight, "OuterConeAngle", CompositionPropertyLogger.LoggableType.Float); Array.Clear(pressLight_ValueValidationEvents, 0, 3); logger.Verify(hoverLight_Result && hoverLight_Result, "StateValidationResult: error occured"); } }); }); }