From 71bb68eb01388d8a53ccc51e3bcbcdaa34b3fc1a Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 2 Feb 2017 13:38:49 -0800 Subject: [PATCH] Modify tuning adjustment test to validate and expect new behavior - Renamed to TuningAdjustmentsDefaultToOneAndPersist - Move control and model validation to reusable function --- .../PrintingTests.cs | 85 ++++++++++--------- 1 file changed, 44 insertions(+), 41 deletions(-) diff --git a/Tests/MatterControl.AutomationTests/PrintingTests.cs b/Tests/MatterControl.AutomationTests/PrintingTests.cs index bf7db2e89..4561d884f 100644 --- a/Tests/MatterControl.AutomationTests/PrintingTests.cs +++ b/Tests/MatterControl.AutomationTests/PrintingTests.cs @@ -114,8 +114,11 @@ namespace MatterHackers.MatterControl.Tests.Automation private EventHandler unregisterEvents; [Test, Apartment(ApartmentState.STA)] - public async Task TuningAdjustmentsResetToOne() + public async Task TuningAdjustmentsDefaultToOneAndPersist() { + double targetExtrusionRate = 1.5; + double targetFeedRate = 2; + AutomationTest testToRun = (testRunner) => { SystemWindow systemWindow; @@ -124,8 +127,6 @@ namespace MatterHackers.MatterControl.Tests.Automation using (var emulatorDisposable = testRunner.LaunchAndConnectToPrinterEmulator()) { - SolidSlider slider; - Assert.IsTrue(ProfileManager.Instance.ActiveProfile != null); testRunner.SwitchToSettingsAndControls(); @@ -140,9 +141,6 @@ namespace MatterHackers.MatterControl.Tests.Automation var scrollable = container.Parents().First().Parents().First(); var width = scrollable.Width; - double targetExtrusionRate = 1.5; - double targetFeedRate = 2; - // Workaround needed to scroll to the bottom of the Controls panel //scrollable.ScrollPosition = new Vector2(); scrollable.ScrollPosition = new Vector2(0, 30); @@ -151,71 +149,76 @@ namespace MatterHackers.MatterControl.Tests.Automation scrollable.Width = width - 1; scrollable.Width = width; - // Workaround for MatterHackers/MCCentral#1157 - wait for slicing to complete before setting tuning values - testRunner.Delay(5); + // Tuning values should default to 1 when missing + ConfirmExpectedSpeeds(testRunner, 1, 1); + testRunner.Delay(); testRunner.ClickByName("Extrusion Multiplier NumberEdit"); - testRunner.Delay(.2); testRunner.Type(targetExtrusionRate.ToString()); - testRunner.Delay(.2); testRunner.ClickByName("Feed Rate NumberEdit"); - testRunner.Delay(.2); testRunner.Type(targetFeedRate.ToString()); - testRunner.Delay(.2); - // Force focus away from the feed rate field + // Force focus away from the feed rate field, causing an persisted update testRunner.ClickByName("Controls Tab", 1); + testRunner.Delay(); - testRunner.Delay(.2); + ConfirmExpectedSpeeds(testRunner, targetExtrusionRate, targetFeedRate); - // Assert the changes took effect on the UI - slider = testRunner.GetWidgetByName("Extrusion Multiplier Slider", out systemWindow, 5) as SolidSlider; - Assert.AreEqual(targetExtrusionRate, slider.Value); + // Wait for slicing to complete before setting target values + testRunner.Delay(() => PrinterConnectionAndCommunication.Instance.PrintingState == PrinterConnectionAndCommunication.DetailedPrintingState.Printing, 8); + testRunner.Delay(); - slider = testRunner.GetWidgetByName("Feed Rate Slider", out systemWindow, 5) as SolidSlider; - Assert.AreEqual(targetFeedRate, slider.Value); - - testRunner.Delay(.2); - - // Assert the changes took effect on the model - Assert.AreEqual(targetExtrusionRate, ActiveSliceSettings.Instance.GetValue(SettingsKey.extrusion_ratio)); - Assert.AreEqual(targetFeedRate, ActiveSliceSettings.Instance.GetValue(SettingsKey.feedrate_ratio)); + ConfirmExpectedSpeeds(testRunner, targetExtrusionRate, targetFeedRate); + // Wait for printing to complete var resetEvent = new AutoResetEvent(false); - - // Release reset event on PrintFinished PrinterConnectionAndCommunication.Instance.PrintFinished.RegisterEvent((s, e) => resetEvent.Set(), ref unregisterEvents); - resetEvent.WaitOne(); - // Finish the print testRunner.WaitForName("Done Button", 30); testRunner.WaitForName("Print Again Button", 1); + // Values should match entered values + ConfirmExpectedSpeeds(testRunner, targetExtrusionRate, targetFeedRate); + // Restart the print testRunner.ClickByName("Print Again Button", 1); - testRunner.Delay(2); + // Values should match entered values + ConfirmExpectedSpeeds(testRunner, targetExtrusionRate, targetFeedRate); + testRunner.CancelPrint(); + testRunner.Delay(1); - // Assert we've reset to 1 - Assert.AreEqual(1, ActiveSliceSettings.Instance.GetValue(SettingsKey.extrusion_ratio)); - Assert.AreEqual(1, ActiveSliceSettings.Instance.GetValue(SettingsKey.feedrate_ratio)); - - // Assert the changes took effect on the UI - slider = testRunner.GetWidgetByName("Extrusion Multiplier Slider", out systemWindow, 5) as SolidSlider; - Assert.AreEqual(1, slider.Value); - - slider = testRunner.GetWidgetByName("Feed Rate Slider", out systemWindow, 5) as SolidSlider; - Assert.AreEqual(1, slider.Value); + // Values should match entered values + ConfirmExpectedSpeeds(testRunner, targetExtrusionRate, targetFeedRate); } return Task.FromResult(0); }; - await MatterControlUtilities.RunTest(testToRun, overrideHeight:900, maxTimeToRun: 90); + await MatterControlUtilities.RunTest(testToRun, overrideHeight:900, maxTimeToRun: 990); + } + + private static void ConfirmExpectedSpeeds(AutomationRunner testRunner, double targetExtrusionRate, double targetFeedRate) + { + SystemWindow systemWindow; + SolidSlider slider; + + // Assert the UI has the expected values + slider = testRunner.GetWidgetByName("Extrusion Multiplier Slider", out systemWindow, 5) as SolidSlider; + Assert.AreEqual(targetExtrusionRate, slider.Value); + + slider = testRunner.GetWidgetByName("Feed Rate Slider", out systemWindow, 5) as SolidSlider; + Assert.AreEqual(targetFeedRate, slider.Value); + + testRunner.Delay(.2); + + // Assert the changes took effect on the model + Assert.AreEqual(targetExtrusionRate, ActiveSliceSettings.Instance.GetValue(SettingsKey.extrusion_ratio)); + Assert.AreEqual(targetFeedRate, ActiveSliceSettings.Instance.GetValue(SettingsKey.feedrate_ratio)); } } }