private void HoverLight_ValidatePointerOverState() { if (!ValidateEffectsPresent()) { return; } using (var logger = new ResultsLogger("PointerOver", TestResult)) { string targetText = TargetComboBox.GetSelectedText(); Control target = FindName(targetText) as Control; // It is more complex to validate Reveal hover brush targeting on ListViewItem // since it uses several brushes applied to the internal ListViewItemChrome. Skip the check here. bool lightTargetingResult = true; if (targetText != "NormalListViewItem") { RevealBrush revealHoverBrush = target.Background as RevealBrush; lightTargetingResult = VerifyHoverBrushTargeting(revealHoverBrush); } logger.Verify(lightTargetingResult, "lightTargetingResult:" + lightTargetingResult); var lights = GetElementForHoverLight(target).Lights; bool lightCountResult = lights.Count == 2; // Reveal Press light is also present logger.Verify(lightCountResult, "lightCountResult:" + lightCountResult); var hoverLight = _revealTestApi.GetAsRevealHoverLight(lights[0]); logger.Verify(hoverLight != null, "HoverLight should be non-null"); bool lightValidationResult = HoverLight_ValidatePointerOver(hoverLight); logger.Verify(lightValidationResult, "lightValidationResult: " + lightValidationResult); } }
private void AnotherListViewItem_Holding(object sender, Windows.UI.Xaml.Input.HoldingRoutedEventArgs e) { if (!ValidateEffectsPresent()) { return; } using (var logger = new ResultsLogger("BorderLight_TapAndHold", TestResult)) { if (FallbackToLocalLight()) { bool shouldBorderLightBeOn = ShouldBorderLightBeOn(); logger.Verify(shouldBorderLightBeOn == true, "ShouldBorderLightBeOn: " + shouldBorderLightBeOn); } else if (SharedLight() != null) { CompositionLight sharedLight = SharedLight(); logger.Verify(sharedLight != null, "Shared Light Exists: " + sharedLight); } else { logger.LogMessage("Neither shared nor local lights exist."); } } }
private void HoverLight_ValidateNormalState() { if (!ValidateEffectsPresent()) { return; } using (var logger = new ResultsLogger("Normal", TestResult)) { if (_normalStateCheckNumber < 1 || _normalStateCheckNumber > 2) { logger.LogError("Error: unpexected call to HoverLight_ValidateNormalState"); return; } bool isInitialCheck = _normalStateCheckNumber == 1; _normalStateCheckNumber++; string targetText = TargetComboBox.GetSelectedText(); Control target = FindName(targetText) as Control; // It is more complex to validate Reveal hover bursh targeting on ListViewItem // since it uses several brushes applied to the internal ListViewItemChrome. Skip the check here. bool lightTargetingResult = true; if (targetText != "NormalListViewItem") { RevealBrush revealHoverBrush = target.Background as RevealBrush; lightTargetingResult = VerifyHoverBrushTargeting(revealHoverBrush); } logger.Verify(lightTargetingResult, "lightTargetingResult:" + lightTargetingResult); var lights = GetElementForHoverLight(target).Lights; // No lights expected if we've never hovered over this Button bool lightCountResult = isInitialCheck ? lights.Count == 0 : lights.Count == 2; logger.Verify(lightCountResult, "lightCountResult:" + lightCountResult); bool lightValidationResult = true; // If we have hovered over the target, validate Reveal light is properly in normal state if (!isInitialCheck) { var hoverLight = _revealTestApi.GetAsRevealHoverLight(lights[0]); lightValidationResult = HoverLight_ValidateNormal(hoverLight); } logger.Verify(lightValidationResult, "lightValidationResult: " + lightValidationResult); } }
private void RevealButton_Click(object sender, RoutedEventArgs e) { using (var logger = new ResultsLogger("RevealCreateThenEnableEffects", TestResult)) { UIElement lightsElement = GetElementForHoverLight(sender); var lights = lightsElement.Lights; bool lightCountResult = lights.Count == 2; // Reveal Press light is also present logger.Verify(lightCountResult, "lightCountResult:" + lightCountResult); } }
private void RunTestButton_Clicked(object sender, RoutedEventArgs e) { using (var logger = new ResultsLogger("RevealBrushFromMarkup", TestResult)) { int globalLightCount = 0; const int globalLightCountExpected = 5; UIElement visualRoot = GetTopParent(Window.Current.Content); if (visualRoot != null && visualRoot.GetType() == typeof(ScrollViewer)) { globalLightCount = visualRoot.Lights.Count; } else { logger.Verify(false, "visualRoot = null or type is not ScrollViewer"); } logger.Verify(globalLightCount == globalLightCountExpected, "globalLightCount: " + globalLightCount + ", expected: " + globalLightCountExpected); } }
private void AnotherListViewItem_Holding(object sender, Windows.UI.Xaml.Input.HoldingRoutedEventArgs e) { if (!ValidateEffectsPresent()) { return; } using (var logger = new ResultsLogger("BorderLight_TapAndHold", TestResult)) { bool shouldBorderLightBeOn = ShouldBorderLightBeOn(); logger.Verify(shouldBorderLightBeOn == true, "ShouldBorderLightBeOn: " + shouldBorderLightBeOn); } }
private void BorderLight_ValidateBorderLightPanAway() { if (!ValidateEffectsPresent()) { return; } using (var logger = new ResultsLogger("BorderLight_PanAway", TestResult)) { bool shouldBorderLightBeOn = ShouldBorderLightBeOn(); logger.Verify(shouldBorderLightBeOn == false, "ShouldBorderLightBeOn: " + shouldBorderLightBeOn); } }
private void OneMoreListViewItem_Holding(object sender, Windows.UI.Xaml.Input.HoldingRoutedEventArgs e) { if (!ValidateEffectsPresent()) { return; } using (var logger = new ResultsLogger("HoverLightExpression_ListViewItem_Touch", TestResult)) { Control target = FindName("OneMoreListViewItem") as Control; var lights = GetElementForHoverLight(target).Lights; var hoverLight = _revealTestApi.GetAsRevealHoverLight(lights[0]); var offsetExpression = _revealTestApi.GetHoverLightOffsetExpression(hoverLight); logger.Verify(String.Equals(offsetExpression.Expression, revealHoverLightOffset_PointerExpression), "HoverLightOffset using incorrect expression: " + offsetExpression.Expression + ", expected: " + revealHoverLightOffset_PointerExpression); } }
private void AnotherButton_Click(object sender, RoutedEventArgs e) { if (!ValidateEffectsPresent()) { return; } using (var logger = new ResultsLogger("HoverLightExpression_Button_Keyboard", TestResult)) { Control target = FindName("AnotherButton") as Control; var lights = GetElementForHoverLight(target).Lights; var hoverLight = _revealTestApi.GetAsRevealHoverLight(lights[1]); // Look at the press light var offsetExpression = _revealTestApi.GetHoverLightOffsetExpression(hoverLight); logger.Verify(String.Equals(offsetExpression.Expression, revealHoverLightOffset_KeyboardExpression), "HoverLightOffset using incorrect expression: " + offsetExpression.Expression + ", expected: " + revealHoverLightOffset_KeyboardExpression); } }
private void HoverLightPositionValuesValidationHelper(System.Numerics.Vector3 positionExpected, string testName, string targetName) { if (!ValidateEffectsPresent()) { return; } WaitHandle[] valueValidationEvents = new WaitHandle[1]; Control target = FindName(targetName) as Control; var lights = GetElementForHoverLight(target).Lights; var hoverLight = _revealTestApi.GetAsRevealHoverLight(lights[0]); _hoverSpotlight = _revealTestApi.GetSpotLight(hoverLight as Windows.UI.Xaml.Media.XamlLight); valueValidationEvents[0] = _compositionPropertyLogger.RegisterProperty(_hoverSpotlight, "Offset", CompositionPropertyLogger.LoggableType.Vector3, new System.Numerics.Vector3(0F, 0F, 0F), positionExpected, offsetCoordinateTolerance); // Off-thread validation waits until each registered property hits its expected value Task.Run(() => { bool result = WaitHandle.WaitAll(valueValidationEvents, 10000); RunOnUIThread.Execute(() => { using (var logger = new ResultsLogger(testName, TestResult)) { var positionValues = _compositionPropertyLogger.GetValues(_hoverSpotlight, "Offset"); logger.LogMessage("Offset: " + string.Join(", ", positionValues)); _compositionPropertyLogger.UnregisterProperty(_hoverSpotlight, "Offset", CompositionPropertyLogger.LoggableType.Vector3); Array.Clear(valueValidationEvents, 0, 1); logger.Verify(result, "PositionValidationResult: error occured"); } }); }); }
private async void UnsetLuminosityButton_Clicked(object sender, RoutedEventArgs e) { bool result = false; using (var logger = new ResultsLogger("ClearLuminosityBlend", TestResult)) { LogAcrylicRecipeVersion(logger); // Manually set TintLuminosityOpacity myAcrylicBrush.TintLuminosityOpacity = 1.0; await Task.Delay(2000); ShowRtb1_Text.Text = "ClearLuminosityBlend: Luminosity = 1.0"; SampledColors customLuminsotyColors = await SamplePointColors(ShowRtb1); // Restore TintLuminosityOpacity to default myAcrylicBrush.ClearValue(AcrylicBrush.TintLuminosityOpacityProperty); await Task.Delay(2000); ShowRtb2_Text.Text = "ClearLuminosityBlend: Luminosity = auto"; SampledColors defaultLuminosityColors = await SamplePointColors(ShowRtb2); if (PlatformConfiguration.IsOsVersionGreaterThanOrEqual(OSVersion.NineteenH1)) { // Color change expected on 19H1 result = !defaultLuminosityColors.Equals(customLuminsotyColors); } else { // No color change expected on RS5 and lower result = defaultLuminosityColors.Equals(customLuminsotyColors); } logger.Verify(result, "Sampled acrylic pixels did not change as expected"); } }
private async void SetLuminosityButton_Clicked(object sender, RoutedEventArgs e) { bool result = false; using (var logger = new ResultsLogger("SetLuminosityBlend", TestResult)) { LogAcrylicRecipeVersion(logger); // Capture state when TintLuminosityOpacity is at default value of null // On 19H1+, this means auto configure the Luminosity for the given Tint // On RS5-, it has no effect (we use the legacy acrylic recipe) ShowRtb1_Text.Text = "SetLuminosityBlend: Luminosity = auto"; SampledColors initialColors = await SamplePointColors(ShowRtb1); // Manually set TintLuminosityOpacity myAcrylicBrush.TintLuminosityOpacity = 1.0; await Task.Delay(2000); ShowRtb2_Text.Text = "SetLuminosityBlend: Luminosity = 1.0"; SampledColors customLuminosityColors = await SamplePointColors(ShowRtb2); if (PlatformConfiguration.IsOsVersionGreaterThanOrEqual(OSVersion.NineteenH1)) { // Color change expected on 19H1 result = !initialColors.Equals(customLuminosityColors); } else { // No color change expected on RS5 and lower result = initialColors.Equals(customLuminosityColors); } logger.Verify(result, "Sampled acrylic pixels did not change as expected"); } }
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"); } }); }); }