From fb7b0b1a40cd9d2de78adf2ab9f9e003cf985ee2 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 14 Sep 2017 19:15:41 -0700 Subject: [PATCH] Add UIField tests --- .../MatterControl.Tests.csproj | 1 + .../MatterControl/SliceSettingsFieldTests.cs | 276 ++++++++++++++++++ 2 files changed, 277 insertions(+) create mode 100644 Tests/MatterControl.Tests/MatterControl/SliceSettingsFieldTests.cs diff --git a/Tests/MatterControl.Tests/MatterControl.Tests.csproj b/Tests/MatterControl.Tests/MatterControl.Tests.csproj index c4f2fe53e..ba1841c07 100644 --- a/Tests/MatterControl.Tests/MatterControl.Tests.csproj +++ b/Tests/MatterControl.Tests/MatterControl.Tests.csproj @@ -58,6 +58,7 @@ + diff --git a/Tests/MatterControl.Tests/MatterControl/SliceSettingsFieldTests.cs b/Tests/MatterControl.Tests/MatterControl/SliceSettingsFieldTests.cs new file mode 100644 index 000000000..c2cf47d6f --- /dev/null +++ b/Tests/MatterControl.Tests/MatterControl/SliceSettingsFieldTests.cs @@ -0,0 +1,276 @@ +using System; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using MatterHackers.Agg; +using MatterHackers.Agg.Platform; +using MatterHackers.Agg.UI; +using MatterHackers.GuiAutomation; +using MatterHackers.MatterControl; +using MatterHackers.MatterControl.SlicerConfiguration; +using MatterHackers.MatterControl.Tests.Automation; +using MatterHackers.VectorMath; +using NUnit.Framework; + +namespace MatterControl.Tests.MatterControl +{ + + public static class RunnerX + { + public static Task RunTest(this SystemWindow systemWindow, AutomationTest automationTest, int timeout) + { + return AutomationRunner.ShowWindowAndExecuteTests(systemWindow, automationTest, timeout); + } + } + + [TestFixture, Category("SliceSettingsTests")] + public class SliceSettingsFieldTests + { + [Test] + public void TestExistsForEachUIFieldType() + { + AggContext.StaticData = new FileSystemStaticData(TestContext.CurrentContext.ResolveProjectPath(4, "StaticData")); + MatterControlUtilities.OverrideAppDataLocation(TestContext.CurrentContext.ResolveProjectPath(4)); + + var testClass = this.GetType(); + var thisClassMethods = testClass.GetMethods(BindingFlags.Public | BindingFlags.Instance); + + foreach (var uiFieldType in PluginFinder.FindTypes()) + { + // Skip abstract class + if (uiFieldType.Name == "UIField") + { + continue; + } + + string expectedTestName = $"{uiFieldType.Name}Test"; + Assert.AreEqual( + 1, + thisClassMethods.Where(m => m.Name == expectedTestName).Count(), + "Test for UIField missing - not yet created or typo'd - Expected: " + expectedTestName); + } + } + + public class UIFieldTestWindow : SystemWindow + { + public MHTextEditWidget ExpectedText { get; } + public MHTextEditWidget InputText { get; } + + private UIField field; + + public UIFieldTestWindow(int width, int height, UIField field) + : base (width, height) + { + this.BackgroundColor = new RGBA_Bytes(56, 56, 56); + + GuiWidget column, row; + double pixelWidth = 70; + + // Store + this.field = field; + + // Initialize the field and store the generated content reference + field.Initialize(0); + + GuiWidget widgetUnderTest = field.Content; + + row = new FlowLayoutWidget + { + VAnchor = VAnchor.Center | VAnchor.Fit, + HAnchor = HAnchor.Center | HAnchor.Fit + }; + this.AddChild(row); + + column = new FlowLayoutWidget(FlowDirection.TopToBottom) + { + Margin = new BorderDouble(0, 10), + }; + row.AddChild(column); + + column.AddChild(new TextWidget("Input:", textColor: RGBA_Bytes.White) + { + Margin = new BorderDouble(right: 10, bottom: 2), + }); + + this.InputText = new MHTextEditWidget("", pixelWidth: pixelWidth) + { + Margin = new BorderDouble(right: 8) + }; + column.AddChild(InputText); + + column = new FlowLayoutWidget(FlowDirection.TopToBottom) + { + Margin = new BorderDouble(0, 10), + }; + row.AddChild(column); + + column.AddChild(new TextWidget("Expected:", textColor: RGBA_Bytes.White) + { + Margin = new BorderDouble(right: 10, bottom: 2) + }); + + this.ExpectedText = new MHTextEditWidget("", pixelWidth: pixelWidth) + { + Margin = new BorderDouble(right: 8) + }; + column.AddChild(ExpectedText); + + column = new FlowLayoutWidget(FlowDirection.TopToBottom) + { + Margin = new BorderDouble(0, 10), + }; + row.AddChild(column); + + column.AddChild(new TextWidget("Actual:", textColor: RGBA_Bytes.White) + { + Margin = new BorderDouble(right: 10, bottom: 2) + }); + column.AddChild(widgetUnderTest); + } + + public void SetAndValidateValues(string expectedValue, string inputValue, Func collectValueFromWidget, int delay = 500) + { + // Set expected and source + this.ExpectedText.Text = expectedValue; + this.InputText.Text = inputValue; + + // Update field + field.SetValue(inputValue, false); + + // Assert expected field value + Assert.AreEqual(expectedValue, field.Value); + + // Assert expected widget value + Assert.AreEqual(expectedValue, collectValueFromWidget()); + + // Sleep + System.Threading.Thread.Sleep(delay); + } + } + + [Test, Apartment(System.Threading.ApartmentState.STA)] + public async Task DoubleFieldTest() + { + var valuesMap = new(string inputValue, string expected)[] + { + ("0.12345", "0.12345"), + ("1.2345", "1.2345"), + ("12.345", "12.345"), + ("+0.12345", "0.12345"), + ("+1.2345", "1.2345"), + ("+12.345", "12.345"), + ("-0.12345", "-0.12345"), + ("-1.2345", "-1.2345"), + // Invalid values revert to expected + ("abc", "0"), + ("+abc", "0"), + ("-abc", "0"), + }; + + var field = new DoubleField(); + + var testsWindow = new UIFieldTestWindow(400, 200, field); + + await testsWindow.RunTest((testRunner) => + { + var primaryFieldWidget = field.Content as MHNumberEdit; + + foreach (var item in valuesMap) + { + testsWindow.SetAndValidateValues( + item.expected, + item.inputValue, + () => primaryFieldWidget.ActuallNumberEdit.Text); + } + + return Task.CompletedTask; + }, 30); + } + + [Test] + public void IntFieldTest() + { + Assert.Fail(); + } + + [Test] + public void DoubleOrPercentFieldTest() + { + Assert.Fail(); + } + + [Test] + public void ValueOrUnitsFieldTest() + { + Assert.Fail(); + } + + [Test] + public void CheckboxFieldTest() + { + Assert.Fail(); + } + + [Test] + public void ToggleboxFieldTest() + { + Assert.Fail(); + } + + [Test] + public void MultilineStringFieldTest() + { + Assert.Fail(); + } + + [Test] + public void ComPortFieldTest() + { + Assert.Fail(); + } + + [Test] + public void Test() + { + Assert.Fail(); + } + + [Test] + public void ListFieldTest() + { + Assert.Fail(); + } + + [Test] + public void ExtruderOffsetFieldTest() + { + Assert.Fail(); + } + + [Test] + public void NumberFieldTest() + { + Assert.Fail(); + } + + [Test] + public void TextFieldTest() + { + Assert.Fail(); + } + + [Test] + public void Vector2FieldTest() + { + Assert.Fail(); + } + + [Test] + public void BoundDoubleFieldTest() + { + Assert.Fail(); + } + } + + +}