From b0f32811ebd268dc7034e6d239751882ac58185f Mon Sep 17 00:00:00 2001 From: Tig Date: Wed, 5 Mar 2025 23:44:27 -0700 Subject: [PATCH] Fixes #3930 - Splits tests to `Tests/UnitTests`, `Tests/IntegrationTests`, `Tests/StressTests` (#3954) * Tons of API doc updates * Removed stale test * Removed stale tests * Fixed Skipped Shadow test 1 * Fixed Skipped Shadow test 2 * Fixed Skipped Shadow test 3 * Removed stale test * Removed stale test2 * Explicit unregister of event handler on Application.Driver!.ClearedContents * Added Toplevels to dict * code cleanup * spelling error * Removed stale test3 * Removed stale test4 * Removed stale test5 * added script * tweaked script * tweaked script * Created StressTests project; moved some tests * Created IntegrationTests project; moved some tests * New yml * made old yml just unit tests * Tweaked Button_IsDefault_Raises_Accepted_Correctly * tweaked script * cleaned up ymls * tweakled up ymls * stress tests... * stress tests on ubuntu only * Fixed WindowsDriver in InvokeLeakTest * Fixed WindowsDriver in InvokeLeakTest2 * Added Directory.Packages.props. Added Directory.Build.props * Shortened StressTest time * Removed dupe file. * DemoFiles * Moved all tests to ./Tests dir. * Fixed release build issue * Fixed .sln file * Fixed .sl* files * Fixing ymls * Fixing interation tests * Create link to the file TestHelpers. * Created Tests/UnitTestsParallelizable. Moved all obviously parallelizable tests. Updated yml. * fixing logs * fixing logs2 * fixing logs3 * don't require stress to pass for PRs * Fix a failure? * tweaked script * Coudl this be it? * Moved tons of tests to parallelizable * Fixed some stuff * Script to find duplicate tests * Testing workflows * Updated to v4 * Fix RelativeBasePath issue * Replace powershell to pwsh * Add ignore projects. * Removed dupe unit tests * Code cleanup of tests * Cleaned up test warnings * yml tweak * Moved setter * tweak ymls * just randomly throwing spaghetti at a wall * Enable runing 5 test runners in par * Turned off DEBUG_DISPOSABLE for par tests * RunningUnitTests=true * code cleanup (forcing more Action runs) * DISABLE_DEBUG_IDISPOSABLE * Added View.DebugIDisposable. False by default. * Remobed bogus tareet * Remobed bogus tareet2 * fixed warning * added api doc * fixed warning * fixed warning * fixed warning2 * fixed warning3 * fixed warning4 --------- Co-authored-by: BDisp --- .github/workflows/build-release.yml | 34 + .github/workflows/check-duplicates.yml | 14 + .github/workflows/dotnet-core.yml | 119 - .github/workflows/integration-tests.yml | 60 + .github/workflows/stress-tests.yml | 51 + .github/workflows/unit-tests.yml | 116 + .gitignore | 2 + Benchmarks/Benchmarks.csproj | 4 +- .../CommunityToolkitExample.csproj | 6 +- .../example_config.json | 0 Directory.Build.props | 11 + Directory.Packages.props | 52 + Example/Example.csproj | 1 - GitVersion.yml | 25 +- NativeAot/NativeAot.csproj | 4 +- NoSamples.slnf | 7 +- ReactiveExample/ReactiveExample.csproj | 7 +- Release.slnf | 5 +- Scripts/.testloop.sh.swp | Bin 0 -> 12288 bytes ...FindDuplicateTestMethodsInSameFileName.ps1 | 92 + Scripts/FindDuplicateTests.ps1 | 50 + Scripts/testloop.sh | 30 + SelfContained/SelfContained.csproj | 4 +- Terminal.Gui/Application/Application.Mouse.cs | 9 +- Terminal.Gui/Application/Application.Run.cs | 62 +- Terminal.Gui/Application/Application.cs | 6 +- Terminal.Gui/Application/ApplicationImpl.cs | 5 +- Terminal.Gui/Application/RunState.cs | 13 +- .../Configuration/ConfigurationManager.cs | 3 + .../Configuration/ScopeJsonConverter.cs | 2 +- .../Keyboard/CsiKeyPattern.cs | 7 +- Terminal.Gui/Terminal.Gui.csproj | 341 +- Terminal.Gui/View/DrawContext.cs | 2 +- Terminal.Gui/View/DrawEventArgs.cs | 4 +- Terminal.Gui/View/View.Mouse.cs | 1 + Terminal.Gui/View/View.cs | 152 +- Terminal.Gui/Views/Bar.cs | 2 + Terminal.Gui/Views/Dialog.cs | 4 +- Terminal.Gui/Views/Line.cs | 2 + Terminal.Gui/Views/RadioGroup.cs | 2 + Terminal.Gui/Views/ScrollBar/ScrollBar.cs | 2 + Terminal.Gui/Views/Wizard/WizardStep.cs | 2 +- Terminal.sln | 38 +- Terminal.sln.DotSettings | 2 + .../IntegrationTests/IntegrationTests.csproj | 40 + .../UICatalog/ScenarioTests.cs | 172 +- .../IntegrationTests}/xunit.runner.json | 0 Tests/README.md | 29 + Tests/StressTests/ApplicationStressTests.cs | 111 + Tests/StressTests/ScenariosStressTests.cs | 193 + Tests/StressTests/StressTests.csproj | 44 + Tests/StressTests/xunit.runner.json | 6 + .../Application.NavigationTests.cs | 0 .../Application/ApplicationScreenTests.cs | 21 +- .../Application/ApplicationTests.cs | 49 +- .../UnitTests}/Application/CursorTests.cs | 3 +- .../UnitTests}/Application/KeyboardTests.cs | 120 +- .../UnitTests}/Application/MainLoopTests.cs | 144 +- .../Mouse/ApplicationMouseEnterLeaveTests.cs | 0 .../Mouse/ApplicationMouseTests.cs | 3 +- .../UnitTests}/Application/RunStateTests.cs | 2 + .../Application/StackExtensionsTests.cs | 0 .../Application/SynchronizatonContextTests.cs | 2 + .../UnitTests}/AssemblyInfo.cs | 0 Tests/UnitTests/AutoInitShutdownAttribute.cs | 140 + .../UnitTests}/Clipboard/ClipboardTests.cs | 0 .../UnitTests}/Configuration/AppScopeTests.cs | 1 + .../AttributeJsonConverterTests.cs | 1 + .../Configuration/ColorJsonConverterTests.cs | 0 .../ColorSchemeJsonConverterTests.cs | 1 + .../Configuration/ConfigPropertyTests.cs | 0 .../Configuration/ConfigurationMangerTests.cs | 1 + .../UnitTests}/Configuration/GlyphTests.cs | 0 .../KeyCodeJsonConverterTests.cs | 0 .../Configuration/KeyJsonConverterTests.cs | 0 .../Configuration/RuneJsonConverterTests.cs | 0 .../SerializableConfigurationPropertyTests.cs | 0 .../Configuration/SettingsScopeTests.cs | 3 +- .../Configuration/ThemeScopeTests.cs | 1 + .../UnitTests}/Configuration/ThemeTests.cs | 1 + .../UnitTests}/ConsoleDrivers/AddRuneTests.cs | 8 +- .../ConsoleDrivers/AnsiKeyboardParserTests.cs | 0 .../ConsoleDrivers/AnsiMouseParserTests.cs | 0 .../AnsiRequestSchedulerTests.cs | 0 .../ConsoleDrivers/AnsiResponseParserTests.cs | 0 .../ConsoleDrivers/ClipRegionTests.cs | 0 .../ConsoleDrivers/ConsoleDriverTests.cs | 4 +- .../ConsoleDrivers/ConsoleKeyMappingTests.cs | 0 .../ConsoleDrivers/ConsoleScrolllingTests.cs | 0 .../ConsoleDrivers/ContentsTests.cs | 14 +- .../ConsoleDrivers/DriverColorTests.cs | 0 .../UnitTests}/ConsoleDrivers/KeyCodeTests.cs | 0 .../ConsoleDrivers/MainLoopDriverTests.cs | 0 .../ConsoleDrivers/V2/ApplicationV2Tests.cs | 0 .../ConsoleDrivers/V2/ConsoleInputTests.cs | 0 .../V2/MainLoopCoordinatorTests.cs | 0 .../ConsoleDrivers/V2/MainLoopTTests.cs | 0 .../V2/MouseInterpreterTests.cs | 0 .../V2/NetInputProcessorTests.cs | 0 .../V2/WindowSizeMonitorTests.cs | 0 .../V2/WindowsInputProcessorTests.cs | 0 .../UnitTests}/Dialogs/DialogTests.cs | 117 +- .../UnitTests}/Dialogs/MessageBoxTests.cs | 12 +- .../UnitTests}/Dialogs/WizardTests.cs | 7 +- .../UnitTests}/Drawing/LineCanvasTests.cs | 62 +- .../UnitTests}/Drawing/RulerTests.cs | 18 +- .../Drawing/StraightLineExtensionsTests.cs | 24 +- Tests/UnitTests/Drawing/ThicknessTests.cs | 255 + Tests/UnitTests/DriverAssert.cs | 346 ++ .../FileServices/FileDialogTests.cs | 1 + .../UnitTests}/Input/EscSeqRequestsTests.cs | 0 .../UnitTests}/Input/EscSeqUtilsTests.cs | 2 + Tests/UnitTests/OutputAssert.cs | 51 + Tests/UnitTests/README.md | 3 + .../Resources/ResourceManagerTests.cs | 0 Tests/UnitTests/SetupFakeDriverAttribute.cs | 44 + Tests/UnitTests/TestDateAttribute.cs | 20 + .../TestRespondersDisposedAttribute.cs | 44 + Tests/UnitTests/TestsAllViews.cs | 28 + .../UnitTests}/Text/AutocompleteTests.cs | 24 +- Tests/UnitTests/Text/TextFormatterTests.cs | 4381 ++++++++++++++++ Tests/UnitTests/UnitTests.csproj | 84 + .../UnitTests}/UnitTests.csproj.DotSettings | 0 {UnitTests => Tests/UnitTests}/UnitTests.sln | 0 .../View/Adornment/AdornmentSubViewTests.cs | 22 - .../View/Adornment/AdornmentTests.cs | 73 + .../UnitTests}/View/Adornment/BorderTests.cs | 34 +- .../UnitTests}/View/Adornment/MarginTests.cs | 8 +- .../UnitTests}/View/Adornment/PaddingTests.cs | 8 +- .../View/Adornment/ShadowStyletests.cs | 127 + .../UnitTests}/View/ArrangementTests.cs | 0 .../UnitTests}/View/ColorSchemeTests.cs | 0 .../UnitTests}/View/DiagnosticsTests.cs | 0 .../UnitTests}/View/Draw/AllViewsDrawTests.cs | 4 +- .../View/Draw/ClearViewportTests.cs | 28 +- .../UnitTests}/View/Draw/ClipTests.cs | 53 +- .../UnitTests}/View/Draw/DrawEventTests.cs | 6 +- .../UnitTests}/View/Draw/DrawTests.cs | 84 +- Tests/UnitTests/View/Draw/NeedsDrawTests.cs | 67 + .../UnitTests}/View/Draw/TransparentTests.cs | 6 +- .../UnitTests}/View/InitTests.cs | 0 .../UnitTests}/View/Keyboard/HotKeyTests.cs | 0 .../View/Keyboard/KeyBindingsTests.cs | 3 +- .../View/Keyboard/KeyboardEventTests.cs | 4 +- Tests/UnitTests/View/Layout/Dim.FillTests.cs | 28 + .../UnitTests}/View/Layout/Dim.Tests.cs | 247 +- .../UnitTests}/View/Layout/LayoutTests.cs | 4 +- .../View/Layout/Pos.AnchorEndTests.cs | 76 + .../UnitTests}/View/Layout/Pos.CenterTests.cs | 67 +- .../View/Layout/Pos.CombineTests.cs | 24 +- .../UnitTests}/View/Layout/Pos.Tests.cs | 172 +- Tests/UnitTests/View/Layout/Pos.ViewTests.cs | 78 + Tests/UnitTests/View/Layout/SetLayoutTests.cs | 41 + .../View/Mouse/GetViewsUnderMouseTests.cs | 0 .../View/Mouse/MouseEnterLeaveTests.cs | 0 .../UnitTests}/View/Mouse/MouseTests.cs | 4 +- .../View/Navigation/AddRemoveTests.cs | 3 +- .../View/Navigation/AdvanceFocusTests.cs | 0 .../View/Navigation/CanFocusTests.cs | 24 +- .../View/Navigation/EnabledTests.cs | 4 +- .../Navigation/HasFocusChangeEventTests.cs | 3 +- .../View/Navigation/HasFocusTests.cs | 3 +- .../View/Navigation/NavigationTests.cs | 2 + .../View/Navigation/RestoreFocusTests.cs | 3 +- .../View/Navigation/SetFocusTests.cs | 3 +- .../View/Navigation/VisibleTests.cs | 3 +- .../Orientation/OrientationHelperTests.cs | 0 .../View/Orientation/OrientationTests.cs | 0 .../UnitTests}/View/SubviewTests.cs | 326 +- .../UnitTests}/View/TextTests.cs | 233 +- .../UnitTests}/View/ViewCommandTests.cs | 14 +- .../UnitTests}/View/ViewTests.cs | 28 +- Tests/UnitTests/ViewTestHelpers.cs | 141 + .../UnitTests}/Views/AllViewsTests.cs | 4 +- .../Views/AppendAutocompleteTests.cs | 42 +- .../UnitTests}/Views/BarTests.cs | 0 .../UnitTests}/Views/ButtonTests.cs | 8 +- .../UnitTests}/Views/CheckBoxTests.cs | 49 +- .../UnitTests}/Views/ColorPicker16Tests.cs | 4 +- .../UnitTests}/Views/ColorPickerTests.cs | 1248 ++--- .../UnitTests}/Views/ComboBoxTests.cs | 22 +- .../UnitTests}/Views/ContextMenuTests.cs | 82 +- .../UnitTests}/Views/DateFieldTests.cs | 1 + .../UnitTests}/Views/DatePickerTests.cs | 1 + .../UnitTests}/Views/FrameViewTests.cs | 14 +- .../UnitTests}/Views/GraphViewTests.cs | 40 +- .../UnitTests}/Views/HexViewTests.cs | 0 .../UnitTests}/Views/LabelTests.cs | 50 +- .../UnitTests}/Views/LineViewTests.cs | 4 +- .../UnitTests}/Views/ListViewTests.cs | 34 +- .../UnitTests}/Views/MenuBarTests.cs | 218 +- .../UnitTests}/Views/MenuTests.cs | 0 .../UnitTests}/Views/NumericUpDownTests.cs | 0 .../UnitTests}/Views/ProgressBarTests.cs | 1 + .../UnitTests}/Views/RadioGroupTests.cs | 8 +- .../UnitTests}/Views/ScrollBarTests.cs | 43 +- .../UnitTests}/Views/ScrollSliderTests.cs | 4 +- .../UnitTests}/Views/ShortcutTests.cs | 1 + .../UnitTests}/Views/SliderTests.cs | 0 .../UnitTests}/Views/SpinnerViewTests.cs | 16 +- .../UnitTests}/Views/StatusBarTests.cs | 3 +- .../UnitTests}/Views/TabTests.cs | 0 .../UnitTests}/Views/TabViewTests.cs | 90 +- .../UnitTests}/Views/TableViewTests.cs | 156 +- .../UnitTests}/Views/TextFieldTests.cs | 38 +- .../Views/TextValidateFieldTests.cs | 0 .../UnitTests}/Views/TextViewTests.cs | 110 +- .../UnitTests}/Views/TileViewTests.cs | 206 +- .../UnitTests}/Views/TimeFieldTests.cs | 2 + .../UnitTests}/Views/ToplevelTests.cs | 175 +- .../UnitTests}/Views/TreeTableSourceTests.cs | 24 +- .../UnitTests}/Views/TreeViewTests.cs | 46 +- .../UnitTests}/Views/ViewDisposalTest.cs | 1 + .../UnitTests}/Views/WindowTests.cs | 8 +- .../UnitTests}/coverlet.runsettings | 0 Tests/UnitTests/xunit.runner.json | 6 + Tests/UnitTestsParallelizable/AssemblyInfo.cs | 1 + .../Drawing/AlignerTests.cs | 0 .../Drawing/AttributeTests.cs | 0 .../Drawing/CellTests.cs | 2 +- .../Drawing/ColorSchemeTests.cs | 0 .../Drawing/ColorTests.Constructors.cs | 22 - .../Drawing/ColorTests.Operators.cs | 15 +- .../ColorTests.ParsingAndFormatting.cs | 20 +- .../Drawing/ColorTests.TypeChecks.cs | 0 .../Drawing/ColorTests.cs | 40 +- .../Drawing/FillPairTests.cs | 0 .../Drawing/GradientFillTests.cs | 0 .../Drawing/GradientTests.cs | 0 .../PopularityPaletteWithThresholdTests.cs | 0 .../Drawing/Region/DifferenceTests.cs | 0 .../Drawing/Region/MergeRectanglesTests.cs | 0 .../Drawing/Region/RegionTests.cs | 0 .../Drawing/Region/SubtractRectangleTests.cs | 0 .../Drawing/SixelEncoderTests.cs | 0 .../Drawing/SolidFillTests.cs | 0 .../Drawing/StraightLineTests.cs | 1 - .../Drawing/ThicknessTests.cs | 358 +- .../FileSystemColorProviderTests.cs | 0 .../FileSystemIconProviderTests.cs | 0 .../FileServices/NerdFontsTests.cs | 0 .../Input/Keyboard/KeyBindingTests.cs | 0 .../Input/Keyboard/KeyBindingsTests.cs | 0 .../Input/Keyboard/KeyTests.cs | 22 +- .../Input/Mouse/MouseBindingTests.cs | 0 .../Input/Mouse/MouseBindingsTests.cs | 0 .../Input/Mouse/MouseEventArgsTest.cs | 0 .../Input/ResponderTests.cs | 2 - .../LocalPackagesTests.cs | 2 +- Tests/UnitTestsParallelizable/README.md | 2 + .../Text/CollectionNavigatorTests.cs | 0 .../Text/RuneTests.cs | 0 .../Text/StringTests.cs | 0 .../Text/TextFormatterTests.cs | 4424 +---------------- .../UnitTests.Parallelizable.csproj | 87 + ...nitTests.Parallelizable.csproj.DotSettings | 2 + .../View/Adornment/AdornmentSubViewTests.cs | 28 + .../View/Adornment/AdornmentTests.cs | 233 +- .../View/Adornment/ShadowStyletests.cs | 106 + .../View/Adornment/ToScreenTests.cs | 14 + .../View/Draw/NeedsDrawTests.cs | 77 +- .../View/Layout/Dim.AutoTests.DimTypes.cs | 0 .../View/Layout/Dim.AutoTests.MinMax.cs | 0 .../View/Layout/Dim.AutoTests.PosTypes.cs | 0 .../View/Layout/Dim.AutoTests.cs | 36 +- .../View/Layout/Dim.CombineTests.cs | 0 .../View/Layout/Dim.FillTests.cs | 21 +- .../View/Layout/Dim.FuncTests.cs | 0 .../View/Layout/Dim.PercentTests.cs | 0 .../View/Layout/Dim.Tests.cs | 245 + .../View/Layout/Dim.ViewTests.cs | 15 +- .../View/Layout/FrameTests.cs | 259 +- .../View/Layout/Pos.AbsoluteTests.cs | 0 .../View/Layout/Pos.AlignTests.cs | 0 .../View/Layout/Pos.AnchorEndTests.cs | 125 +- .../View/Layout/Pos.CenterTests.cs | 67 + .../View/Layout/Pos.CombineTests.cs | 36 + .../View/Layout/Pos.FuncTests.cs | 0 .../View/Layout/Pos.PercentTests.cs | 0 .../View/Layout/Pos.Tests.cs | 135 + .../View/Layout/Pos.ViewTests.cs | 93 +- .../View/Layout/ScreenToTests.cs | 353 +- .../View/Layout/SetLayoutTests.cs | 1067 ++-- .../View/Layout/SetRelativeLayoutTests.cs | 7 +- .../View/Layout/ToScreenTests.cs | 404 +- .../View/Layout/TopologicalSortTests.cs | 0 .../View/Layout/ViewportTests.cs | 0 .../View/SubviewTests.cs | 330 ++ .../UnitTestsParallelizable/View/TextTests.cs | 194 + .../View/TitleTests.cs | 0 .../coverlet.runsettings | 23 + .../UnitTestsParallelizable/xunit.runner.json | 6 + UICatalog/Scenarios/Clipping.cs | 34 +- UICatalog/Scenarios/Shortcuts.cs | 1 + UICatalog/UICatalog.cs | 8 +- UICatalog/UICatalog.csproj | 104 +- UnitTests/README.md | 5 - UnitTests/TestHelpers.cs | 759 --- UnitTests/UnitTests.csproj | 84 - UnitTests/View/Adornment/ShadowStyletests.cs | 222 - UnitTests/View/Adornment/ToScreenTests.cs | 514 -- local_packages/Terminal.Gui.2.0.0.nupkg | Bin 813947 -> 814530 bytes local_packages/Terminal.Gui.2.0.0.snupkg | Bin 216810 -> 216962 bytes 303 files changed, 11531 insertions(+), 11883 deletions(-) create mode 100644 .github/workflows/build-release.yml create mode 100644 .github/workflows/check-duplicates.yml delete mode 100644 .github/workflows/dotnet-core.yml create mode 100644 .github/workflows/integration-tests.yml create mode 100644 .github/workflows/stress-tests.yml create mode 100644 .github/workflows/unit-tests.yml rename example_config.json => DemoFiles/example_config.json (100%) create mode 100644 Directory.Build.props create mode 100644 Directory.Packages.props create mode 100644 Scripts/.testloop.sh.swp create mode 100644 Scripts/FindDuplicateTestMethodsInSameFileName.ps1 create mode 100644 Scripts/FindDuplicateTests.ps1 create mode 100755 Scripts/testloop.sh create mode 100644 Tests/IntegrationTests/IntegrationTests.csproj rename {UnitTests => Tests/IntegrationTests}/UICatalog/ScenarioTests.cs (78%) rename {UnitTests => Tests/IntegrationTests}/xunit.runner.json (100%) create mode 100644 Tests/README.md create mode 100644 Tests/StressTests/ApplicationStressTests.cs create mode 100644 Tests/StressTests/ScenariosStressTests.cs create mode 100644 Tests/StressTests/StressTests.csproj create mode 100644 Tests/StressTests/xunit.runner.json rename {UnitTests => Tests/UnitTests}/Application/Application.NavigationTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Application/ApplicationScreenTests.cs (79%) rename {UnitTests => Tests/UnitTests}/Application/ApplicationTests.cs (93%) rename {UnitTests => Tests/UnitTests}/Application/CursorTests.cs (98%) rename {UnitTests => Tests/UnitTests}/Application/KeyboardTests.cs (84%) rename {UnitTests => Tests/UnitTests}/Application/MainLoopTests.cs (86%) rename {UnitTests => Tests/UnitTests}/Application/Mouse/ApplicationMouseEnterLeaveTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Application/Mouse/ApplicationMouseTests.cs (99%) rename {UnitTests => Tests/UnitTests}/Application/RunStateTests.cs (98%) rename {UnitTests => Tests/UnitTests}/Application/StackExtensionsTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Application/SynchronizatonContextTests.cs (99%) rename {UnitTests => Tests/UnitTests}/AssemblyInfo.cs (100%) create mode 100644 Tests/UnitTests/AutoInitShutdownAttribute.cs rename {UnitTests => Tests/UnitTests}/Clipboard/ClipboardTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Configuration/AppScopeTests.cs (99%) rename {UnitTests => Tests/UnitTests}/Configuration/AttributeJsonConverterTests.cs (98%) rename {UnitTests => Tests/UnitTests}/Configuration/ColorJsonConverterTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Configuration/ColorSchemeJsonConverterTests.cs (99%) rename {UnitTests => Tests/UnitTests}/Configuration/ConfigPropertyTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Configuration/ConfigurationMangerTests.cs (99%) rename {UnitTests => Tests/UnitTests}/Configuration/GlyphTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Configuration/KeyCodeJsonConverterTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Configuration/KeyJsonConverterTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Configuration/RuneJsonConverterTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Configuration/SerializableConfigurationPropertyTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Configuration/SettingsScopeTests.cs (98%) rename {UnitTests => Tests/UnitTests}/Configuration/ThemeScopeTests.cs (99%) rename {UnitTests => Tests/UnitTests}/Configuration/ThemeTests.cs (99%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/AddRuneTests.cs (95%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/AnsiKeyboardParserTests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/AnsiMouseParserTests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/AnsiRequestSchedulerTests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/AnsiResponseParserTests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/ClipRegionTests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/ConsoleDriverTests.cs (98%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/ConsoleKeyMappingTests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/ConsoleScrolllingTests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/ContentsTests.cs (91%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/DriverColorTests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/KeyCodeTests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/MainLoopDriverTests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/V2/ApplicationV2Tests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/V2/ConsoleInputTests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/V2/MainLoopCoordinatorTests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/V2/MainLoopTTests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/V2/MouseInterpreterTests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/V2/NetInputProcessorTests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/V2/WindowSizeMonitorTests.cs (100%) rename {UnitTests => Tests/UnitTests}/ConsoleDrivers/V2/WindowsInputProcessorTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Dialogs/DialogTests.cs (92%) rename {UnitTests => Tests/UnitTests}/Dialogs/MessageBoxTests.cs (97%) rename {UnitTests => Tests/UnitTests}/Dialogs/WizardTests.cs (99%) rename {UnitTests => Tests/UnitTests}/Drawing/LineCanvasTests.cs (95%) rename {UnitTests => Tests/UnitTests}/Drawing/RulerTests.cs (87%) rename {UnitTests => Tests/UnitTests}/Drawing/StraightLineExtensionsTests.cs (97%) create mode 100644 Tests/UnitTests/Drawing/ThicknessTests.cs create mode 100644 Tests/UnitTests/DriverAssert.cs rename {UnitTests => Tests/UnitTests}/FileServices/FileDialogTests.cs (99%) rename {UnitTests => Tests/UnitTests}/Input/EscSeqRequestsTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Input/EscSeqUtilsTests.cs (99%) create mode 100644 Tests/UnitTests/OutputAssert.cs create mode 100644 Tests/UnitTests/README.md rename {UnitTests => Tests/UnitTests}/Resources/ResourceManagerTests.cs (100%) create mode 100644 Tests/UnitTests/SetupFakeDriverAttribute.cs create mode 100644 Tests/UnitTests/TestDateAttribute.cs create mode 100644 Tests/UnitTests/TestRespondersDisposedAttribute.cs create mode 100644 Tests/UnitTests/TestsAllViews.cs rename {UnitTests => Tests/UnitTests}/Text/AutocompleteTests.cs (94%) create mode 100644 Tests/UnitTests/Text/TextFormatterTests.cs create mode 100644 Tests/UnitTests/UnitTests.csproj rename {UnitTests => Tests/UnitTests}/UnitTests.csproj.DotSettings (100%) rename {UnitTests => Tests/UnitTests}/UnitTests.sln (100%) rename {UnitTests => Tests/UnitTests}/View/Adornment/AdornmentSubViewTests.cs (78%) create mode 100644 Tests/UnitTests/View/Adornment/AdornmentTests.cs rename {UnitTests => Tests/UnitTests}/View/Adornment/BorderTests.cs (94%) rename {UnitTests => Tests/UnitTests}/View/Adornment/MarginTests.cs (85%) rename {UnitTests => Tests/UnitTests}/View/Adornment/PaddingTests.cs (82%) create mode 100644 Tests/UnitTests/View/Adornment/ShadowStyletests.cs rename {UnitTests => Tests/UnitTests}/View/ArrangementTests.cs (100%) rename {UnitTests => Tests/UnitTests}/View/ColorSchemeTests.cs (100%) rename {UnitTests => Tests/UnitTests}/View/DiagnosticsTests.cs (100%) rename {UnitTests => Tests/UnitTests}/View/Draw/AllViewsDrawTests.cs (96%) rename {UnitTests => Tests/UnitTests}/View/Draw/ClearViewportTests.cs (93%) rename {UnitTests => Tests/UnitTests}/View/Draw/ClipTests.cs (82%) rename {UnitTests => Tests/UnitTests}/View/Draw/DrawEventTests.cs (88%) rename {UnitTests => Tests/UnitTests}/View/Draw/DrawTests.cs (92%) create mode 100644 Tests/UnitTests/View/Draw/NeedsDrawTests.cs rename {UnitTests => Tests/UnitTests}/View/Draw/TransparentTests.cs (95%) rename {UnitTests => Tests/UnitTests}/View/InitTests.cs (100%) rename {UnitTests => Tests/UnitTests}/View/Keyboard/HotKeyTests.cs (100%) rename {UnitTests => Tests/UnitTests}/View/Keyboard/KeyBindingsTests.cs (98%) rename {UnitTests => Tests/UnitTests}/View/Keyboard/KeyboardEventTests.cs (99%) create mode 100644 Tests/UnitTests/View/Layout/Dim.FillTests.cs rename {UnitTests => Tests/UnitTests}/View/Layout/Dim.Tests.cs (57%) rename {UnitTests => Tests/UnitTests}/View/Layout/LayoutTests.cs (95%) create mode 100644 Tests/UnitTests/View/Layout/Pos.AnchorEndTests.cs rename {UnitTests => Tests/UnitTests}/View/Layout/Pos.CenterTests.cs (82%) rename {UnitTests => Tests/UnitTests}/View/Layout/Pos.CombineTests.cs (81%) rename {UnitTests => Tests/UnitTests}/View/Layout/Pos.Tests.cs (68%) create mode 100644 Tests/UnitTests/View/Layout/Pos.ViewTests.cs create mode 100644 Tests/UnitTests/View/Layout/SetLayoutTests.cs rename {UnitTests => Tests/UnitTests}/View/Mouse/GetViewsUnderMouseTests.cs (100%) rename {UnitTests => Tests/UnitTests}/View/Mouse/MouseEnterLeaveTests.cs (100%) rename {UnitTests => Tests/UnitTests}/View/Mouse/MouseTests.cs (99%) rename {UnitTests => Tests/UnitTests}/View/Navigation/AddRemoveTests.cs (99%) rename {UnitTests => Tests/UnitTests}/View/Navigation/AdvanceFocusTests.cs (100%) rename {UnitTests => Tests/UnitTests}/View/Navigation/CanFocusTests.cs (93%) rename {UnitTests => Tests/UnitTests}/View/Navigation/EnabledTests.cs (99%) rename {UnitTests => Tests/UnitTests}/View/Navigation/HasFocusChangeEventTests.cs (99%) rename {UnitTests => Tests/UnitTests}/View/Navigation/HasFocusTests.cs (99%) rename {UnitTests => Tests/UnitTests}/View/Navigation/NavigationTests.cs (99%) rename {UnitTests => Tests/UnitTests}/View/Navigation/RestoreFocusTests.cs (99%) rename {UnitTests => Tests/UnitTests}/View/Navigation/SetFocusTests.cs (99%) rename {UnitTests => Tests/UnitTests}/View/Navigation/VisibleTests.cs (99%) rename {UnitTests => Tests/UnitTests}/View/Orientation/OrientationHelperTests.cs (100%) rename {UnitTests => Tests/UnitTests}/View/Orientation/OrientationTests.cs (100%) rename {UnitTests => Tests/UnitTests}/View/SubviewTests.cs (61%) rename {UnitTests => Tests/UnitTests}/View/TextTests.cs (78%) rename {UnitTests => Tests/UnitTests}/View/ViewCommandTests.cs (97%) rename {UnitTests => Tests/UnitTests}/View/ViewTests.cs (96%) create mode 100644 Tests/UnitTests/ViewTestHelpers.cs rename {UnitTests => Tests/UnitTests}/Views/AllViewsTests.cs (98%) rename {UnitTests => Tests/UnitTests}/Views/AppendAutocompleteTests.cs (86%) rename {UnitTests => Tests/UnitTests}/Views/BarTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Views/ButtonTests.cs (98%) rename {UnitTests => Tests/UnitTests}/Views/CheckBoxTests.cs (94%) rename {UnitTests => Tests/UnitTests}/Views/ColorPicker16Tests.cs (97%) rename {UnitTests => Tests/UnitTests}/Views/ColorPickerTests.cs (66%) rename {UnitTests => Tests/UnitTests}/Views/ComboBoxTests.cs (98%) rename {UnitTests => Tests/UnitTests}/Views/ContextMenuTests.cs (96%) rename {UnitTests => Tests/UnitTests}/Views/DateFieldTests.cs (99%) rename {UnitTests => Tests/UnitTests}/Views/DatePickerTests.cs (99%) rename {UnitTests => Tests/UnitTests}/Views/FrameViewTests.cs (88%) rename {UnitTests => Tests/UnitTests}/Views/GraphViewTests.cs (97%) rename {UnitTests => Tests/UnitTests}/Views/HexViewTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Views/LabelTests.cs (95%) rename {UnitTests => Tests/UnitTests}/Views/LineViewTests.cs (94%) rename {UnitTests => Tests/UnitTests}/Views/ListViewTests.cs (97%) rename {UnitTests => Tests/UnitTests}/Views/MenuBarTests.cs (94%) rename {UnitTests => Tests/UnitTests}/Views/MenuTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Views/NumericUpDownTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Views/ProgressBarTests.cs (99%) rename {UnitTests => Tests/UnitTests}/Views/RadioGroupTests.cs (98%) rename {UnitTests => Tests/UnitTests}/Views/ScrollBarTests.cs (93%) rename {UnitTests => Tests/UnitTests}/Views/ScrollSliderTests.cs (99%) rename {UnitTests => Tests/UnitTests}/Views/ShortcutTests.cs (99%) rename {UnitTests => Tests/UnitTests}/Views/SliderTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Views/SpinnerViewTests.cs (83%) rename {UnitTests => Tests/UnitTests}/Views/StatusBarTests.cs (99%) rename {UnitTests => Tests/UnitTests}/Views/TabTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Views/TabViewTests.cs (94%) rename {UnitTests => Tests/UnitTests}/Views/TableViewTests.cs (95%) rename {UnitTests => Tests/UnitTests}/Views/TextFieldTests.cs (98%) rename {UnitTests => Tests/UnitTests}/Views/TextValidateFieldTests.cs (100%) rename {UnitTests => Tests/UnitTests}/Views/TextViewTests.cs (99%) rename {UnitTests => Tests/UnitTests}/Views/TileViewTests.cs (90%) rename {UnitTests => Tests/UnitTests}/Views/TimeFieldTests.cs (99%) rename {UnitTests => Tests/UnitTests}/Views/ToplevelTests.cs (84%) rename {UnitTests => Tests/UnitTests}/Views/TreeTableSourceTests.cs (93%) rename {UnitTests => Tests/UnitTests}/Views/TreeViewTests.cs (97%) rename {UnitTests => Tests/UnitTests}/Views/ViewDisposalTest.cs (99%) rename {UnitTests => Tests/UnitTests}/Views/WindowTests.cs (97%) rename {UnitTests => Tests/UnitTests}/coverlet.runsettings (100%) create mode 100644 Tests/UnitTests/xunit.runner.json create mode 100644 Tests/UnitTestsParallelizable/AssemblyInfo.cs rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/AlignerTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/AttributeTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/CellTests.cs (95%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/ColorSchemeTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/ColorTests.Constructors.cs (90%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/ColorTests.Operators.cs (93%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/ColorTests.ParsingAndFormatting.cs (88%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/ColorTests.TypeChecks.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/ColorTests.cs (57%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/FillPairTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/GradientFillTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/GradientTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/PopularityPaletteWithThresholdTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/Region/DifferenceTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/Region/MergeRectanglesTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/Region/RegionTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/Region/SubtractRectangleTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/SixelEncoderTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/SolidFillTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/StraightLineTests.cs (99%) rename {UnitTests => Tests/UnitTestsParallelizable}/Drawing/ThicknessTests.cs (58%) rename {UnitTests => Tests/UnitTestsParallelizable}/FileServices/FileSystemColorProviderTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/FileServices/FileSystemIconProviderTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/FileServices/NerdFontsTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Input/Keyboard/KeyBindingTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Input/Keyboard/KeyBindingsTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Input/Keyboard/KeyTests.cs (95%) rename {UnitTests => Tests/UnitTestsParallelizable}/Input/Mouse/MouseBindingTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Input/Mouse/MouseBindingsTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Input/Mouse/MouseEventArgsTest.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Input/ResponderTests.cs (99%) rename {UnitTests => Tests/UnitTestsParallelizable}/LocalPackagesTests.cs (93%) create mode 100644 Tests/UnitTestsParallelizable/README.md rename {UnitTests => Tests/UnitTestsParallelizable}/Text/CollectionNavigatorTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Text/RuneTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Text/StringTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/Text/TextFormatterTests.cs (53%) create mode 100644 Tests/UnitTestsParallelizable/UnitTests.Parallelizable.csproj create mode 100644 Tests/UnitTestsParallelizable/UnitTests.Parallelizable.csproj.DotSettings create mode 100644 Tests/UnitTestsParallelizable/View/Adornment/AdornmentSubViewTests.cs rename {UnitTests => Tests/UnitTestsParallelizable}/View/Adornment/AdornmentTests.cs (63%) create mode 100644 Tests/UnitTestsParallelizable/View/Adornment/ShadowStyletests.cs create mode 100644 Tests/UnitTestsParallelizable/View/Adornment/ToScreenTests.cs rename {UnitTests => Tests/UnitTestsParallelizable}/View/Draw/NeedsDrawTests.cs (79%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/Dim.AutoTests.DimTypes.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/Dim.AutoTests.MinMax.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/Dim.AutoTests.PosTypes.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/Dim.AutoTests.cs (96%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/Dim.CombineTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/Dim.FillTests.cs (88%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/Dim.FuncTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/Dim.PercentTests.cs (100%) create mode 100644 Tests/UnitTestsParallelizable/View/Layout/Dim.Tests.cs rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/Dim.ViewTests.cs (76%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/FrameTests.cs (83%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/Pos.AbsoluteTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/Pos.AlignTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/Pos.AnchorEndTests.cs (55%) create mode 100644 Tests/UnitTestsParallelizable/View/Layout/Pos.CenterTests.cs create mode 100644 Tests/UnitTestsParallelizable/View/Layout/Pos.CombineTests.cs rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/Pos.FuncTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/Pos.PercentTests.cs (100%) create mode 100644 Tests/UnitTestsParallelizable/View/Layout/Pos.Tests.cs rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/Pos.ViewTests.cs (70%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/ScreenToTests.cs (97%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/SetLayoutTests.cs (92%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/SetRelativeLayoutTests.cs (98%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/ToScreenTests.cs (59%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/TopologicalSortTests.cs (100%) rename {UnitTests => Tests/UnitTestsParallelizable}/View/Layout/ViewportTests.cs (100%) create mode 100644 Tests/UnitTestsParallelizable/View/SubviewTests.cs create mode 100644 Tests/UnitTestsParallelizable/View/TextTests.cs rename {UnitTests => Tests/UnitTestsParallelizable}/View/TitleTests.cs (100%) create mode 100644 Tests/UnitTestsParallelizable/coverlet.runsettings create mode 100644 Tests/UnitTestsParallelizable/xunit.runner.json delete mode 100644 UnitTests/README.md delete mode 100644 UnitTests/TestHelpers.cs delete mode 100644 UnitTests/UnitTests.csproj delete mode 100644 UnitTests/View/Adornment/ShadowStyletests.cs delete mode 100644 UnitTests/View/Adornment/ToScreenTests.cs diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml new file mode 100644 index 000000000..586c7cb15 --- /dev/null +++ b/.github/workflows/build-release.yml @@ -0,0 +1,34 @@ +name: Ensure that Release builds are not broken + +on: + push: + branches: [ v2_release, v2_develop ] + paths-ignore: + - '**.md' + pull_request: + branches: [ v2_release, v2_develop ] + paths-ignore: + - '**.md' + +jobs: + build_release: + # Ensure that RELEASE builds are not broken + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup .NET Core + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.x + dotnet-quality: 'ga' + + - name: Build Release Terminal.Gui + run: dotnet build Terminal.Gui/Terminal.Gui.csproj --configuration Release + + - name: Pack Release Terminal.Gui + run: dotnet pack Terminal.Gui/Terminal.Gui.csproj --configuration Release --output ./local_packages + + - name: Build Release Solution + run: dotnet build --configuration Release diff --git a/.github/workflows/check-duplicates.yml b/.github/workflows/check-duplicates.yml new file mode 100644 index 000000000..f325d3f95 --- /dev/null +++ b/.github/workflows/check-duplicates.yml @@ -0,0 +1,14 @@ +name: Check for Duplicate UnitTests +on: + push: + branches: [ v2_release, v2_develop ] + pull_request: + branches: [ v2_release, v2_develop ] + workflow_dispatch: +jobs: + check-duplicates: + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + - name: Run Duplicate Test Check + run: pwsh -File ./Scripts/FindDuplicateTestMethodsInSameFileName.ps1 -solutionPath "$PWD" \ No newline at end of file diff --git a/.github/workflows/dotnet-core.yml b/.github/workflows/dotnet-core.yml deleted file mode 100644 index d22eefcfb..000000000 --- a/.github/workflows/dotnet-core.yml +++ /dev/null @@ -1,119 +0,0 @@ -name: Build & Test Terminal.Gui with .NET Core - -on: - push: - branches: [ v2_release, v2_develop ] - paths-ignore: - - '**.md' - pull_request: - branches: [ v2_release, v2_develop ] - paths-ignore: - - '**.md' - -jobs: - build_and_test_debug: - - runs-on: ${{ matrix.os }} - strategy: - # Turn off fail-fast to let all runners run even if there are errors - fail-fast: true - matrix: - os: [ ubuntu-latest, windows-latest, macos-latest ] - - timeout-minutes: 10 - steps: - -# Build (Debug) - - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup .NET Core - uses: actions/setup-dotnet@v4 - with: - dotnet-version: 8.x - dotnet-quality: 'ga' - - - name: Install dependencies - run: | - dotnet restore - - - name: Build Debug - run: dotnet build --configuration Debug --no-restore - -# Test - # Note: The --blame and VSTEST_DUMP_PATH stuff is needed to diagnose the test runner crashing on ubuntu/mac - # See https://github.com/microsoft/vstest/issues/2952 for why the --blame stuff below is needed. - # Without it, the test runner crashes on ubuntu (but not Windows or mac) - - - name: MacOS - Patch test runner settings to stop on fail - if: runner.os == 'macOS' - run: | - brew install gnu-sed - gsed -i 's/"stopOnFail": false/"stopOnFail": true/g' UnitTests/xunit.runner.json - - - name: Windows/Linux - Patch test runner settings to stop on fail - if: runner.os != 'macOS' - run: | - sed -i 's/"stopOnFail": false/"stopOnFail": true/g' UnitTests/xunit.runner.json - - - name: Set VSTEST_DUMP_PATH - shell: bash - run: echo "{VSTEST_DUMP_PATH}={logs/${{ runner.os }}/}" >> $GITHUB_ENV - - - name: Test - run: | - dotnet test --verbosity normal --collect:"XPlat Code Coverage" --settings UnitTests/coverlet.runsettings --diag:logs/${{ runner.os }}/logs.txt --blame --blame-crash --blame-hang --blame-hang-timeout 60s --blame-crash-collect-always - - # mv -v UnitTests/TestResults/*/*.* UnitTests/TestResults/ - - - name: Upload Test Logs - if: always() - uses: actions/upload-artifact@v4 - with: - name: test-logs-${{ runner.os }} - path: | - logs/ - UnitTests/TestResults/ - - - build_release: - # Ensure that RELEASE builds are not broken - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup .NET Core - uses: actions/setup-dotnet@v4 - with: - dotnet-version: 8.x - dotnet-quality: 'ga' - - - name: Build Release Terminal.Gui - run: dotnet build Terminal.Gui/Terminal.Gui.csproj --configuration Release - - - name: Pack Release Terminal.Gui - run: dotnet pack Terminal.Gui/Terminal.Gui.csproj --configuration Release --output ./local_packages - - - name: Build Release Solution - run: dotnet build --configuration Release - - - # Note: this step is currently not writing to the gist for some reason - # - name: Create Test Coverage Badge - # uses: simon-k/dotnet-code-coverage-badge@v1.0.0 - # id: create_coverage_badge - # with: - # label: Unit Test Coverage - # color: brightgreen - # path: UnitTests/TestResults/coverage.opencover.xml - # gist-filename: code-coverage.json - # # https://gist.github.com/migueldeicaza/90ef67a684cb71db1817921a970f8d27 - # gist-id: 90ef67a684cb71db1817921a970f8d27 - # gist-auth-token: ${{ secrets.GIST_AUTH_TOKEN }} - - # - name: Print Code Coverage - # run: | - # echo "Code coverage percentage: ${{steps.create_coverage_badge.outputs.percentage}}%" - # echo "Badge data: ${{steps.create_coverage_badge.outputs.badge}}" diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml new file mode 100644 index 000000000..e0cb43025 --- /dev/null +++ b/.github/workflows/integration-tests.yml @@ -0,0 +1,60 @@ +name: Build & Run Integration Tests + +on: + push: + branches: [ v2_release, v2_develop ] + paths-ignore: + - '**.md' + pull_request: + branches: [ v2_release, v2_develop ] + paths-ignore: + - '**.md' + +jobs: + build_and_test_debug: + + runs-on: ${{ matrix.os }} + strategy: + # Turn off fail-fast to let all runners run even if there are errors + fail-fast: true + matrix: + os: [ ubuntu-latest, windows-latest, macos-latest ] + + timeout-minutes: 10 + steps: + + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup .NET Core + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.x + dotnet-quality: 'ga' + + - name: Install dependencies + run: | + dotnet restore + + - name: Build IntegrationTests + run: dotnet build Tests/IntegrationTests --configuration Debug --no-restore + + - name: Set VSTEST_DUMP_PATH + shell: bash + run: echo "{VSTEST_DUMP_PATH}={logs/${{ runner.os }}/}" >> $GITHUB_ENV + + - name: Run IntegrationTests + run: | + dotnet test Tests/IntegrationTests --no-build --verbosity normal --diag:logs/${{ runner.os }}/logs.txt --blame --blame-crash --blame-hang --blame-hang-timeout 60s --blame-crash-collect-always -- xunit.stopOnFail=true + + # mv -v Tests/IntegrationTests/TestResults/*/*.* TestResults/IntegrationTests/ + + - name: Upload Test Logs + if: always() + uses: actions/upload-artifact@v4 + with: + name: integration-test-logs-${{ runner.os }} + path: | + logs/ + TestResults/IntegrationTests/ + diff --git a/.github/workflows/stress-tests.yml b/.github/workflows/stress-tests.yml new file mode 100644 index 000000000..6592f2510 --- /dev/null +++ b/.github/workflows/stress-tests.yml @@ -0,0 +1,51 @@ +name: Run StressTests (for 15 minutes) + +on: + schedule: + - cron: '0 0 * * *' # Runs every day at midnight UTC + push: + branches: [ v2_release, v2_develop ] + paths-ignore: + - '**.md' + +jobs: + run_stress_tests: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ ubuntu-latest ] + + timeout-minutes: 70 # Allow some buffer time beyond the 1-hour test duration + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup .NET Core + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.x + dotnet-quality: 'ga' + + - name: Install dependencies + run: dotnet restore + + - name: Build StressTests + run: dotnet build Tests/StressTests --configuration Debug --no-restore + + - name: Run StressTests for 15 minutes + run: | + end=$((SECONDS+900)) + while [ $SECONDS -lt $end ]; do + dotnet test Tests/StressTests --no-build --verbosity normal --diag:logs/${{ runner.os }}/logs.txt --blame --blame-crash --blame-hang --blame-hang-timeout 60s --blame-crash-collect-always -- xunit.stopOnFail=true + done + + - name: Upload Test Logs + if: always() + uses: actions/upload-artifact@v4 + with: + name: stress-test-logs-${{ runner.os }} + path: | + logs/ + TestResults/StressTests + diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml new file mode 100644 index 000000000..6fb66961c --- /dev/null +++ b/.github/workflows/unit-tests.yml @@ -0,0 +1,116 @@ +name: Build & Run Unit Tests + +on: + push: + branches: [ v2_release, v2_develop ] + paths-ignore: + - '**.md' + pull_request: + branches: [ v2_release, v2_develop ] + paths-ignore: + - '**.md' + +jobs: + non_parallel_unittests: + name: Non-Parallel Unit Tests + runs-on: ${{ matrix.os }} + strategy: + # Turn off fail-fast to let all runners run even if there are errors + fail-fast: true + matrix: + os: [ ubuntu-latest, windows-latest, macos-latest ] + + timeout-minutes: 10 + steps: + + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup .NET Core + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.x + dotnet-quality: 'ga' + + - name: Install dependencies + run: | + dotnet restore + + - name: Build Solution Debug + run: dotnet build --configuration Debug --no-restore + +# Test + # Note: The --blame and VSTEST_DUMP_PATH stuff is needed to diagnose the test runner crashing on ubuntu/mac + # See https://github.com/microsoft/vstest/issues/2952 for why the --blame stuff below is needed. + # Without it, the test runner crashes on ubuntu (but not Windows or mac) + + - name: Set VSTEST_DUMP_PATH + shell: bash + run: echo "{VSTEST_DUMP_PATH}={logs/UnitTests/${{ runner.os }}/}" >> $GITHUB_ENV + + - name: Run UnitTests + run: | + dotnet test Tests/UnitTests --no-build --verbosity normal --collect:"XPlat Code Coverage" --settings Tests/UnitTests/coverlet.runsettings --diag:logs/UnitTests/${{ runner.os }}/logs.txt --blame --blame-crash --blame-hang --blame-hang-timeout 60s --blame-crash-collect-always -- xunit.stopOnFail=true + + # mv -v Tests/UnitTests/TestResults/*/*.* TestResults/UnitTests/ + + - name: Upload Test Logs + if: always() + uses: actions/upload-artifact@v4 + with: + name: non_parallel_unittests-logs-${{ runner.os }} + path: | + logs/UnitTests + TestResults/UnitTests/ + + parallel_unittests: + name: Parallel Unit Tests + runs-on: ${{ matrix.os }} + strategy: + # Turn off fail-fast to let all runners run even if there are errors + fail-fast: true + matrix: + os: [ ubuntu-latest, windows-latest, macos-latest ] + + timeout-minutes: 10 + steps: + + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup .NET Core + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.x + dotnet-quality: 'ga' + + - name: Install dependencies + run: | + dotnet restore + + - name: Build Solution Debug + run: dotnet build --configuration Debug --no-restore + +# Test + # Note: The --blame and VSTEST_DUMP_PATH stuff is needed to diagnose the test runner crashing on ubuntu/mac + # See https://github.com/microsoft/vstest/issues/2952 for why the --blame stuff below is needed. + # Without it, the test runner crashes on ubuntu (but not Windows or mac) + + - name: Set VSTEST_DUMP_PATH + shell: bash + run: echo "{VSTEST_DUMP_PATH}={logs/UnitTestsParallelizable/${{ runner.os }}/}" >> $GITHUB_ENV + + - name: Run UnitTestsParallelizable + run: | + dotnet test Tests/UnitTestsParallelizable --no-build --verbosity normal --collect:"XPlat Code Coverage" --settings Tests/UnitTestsParallelizable/coverlet.runsettings --diag:logs/UnitTestsParallelizable/${{ runner.os }}/logs.txt --blame --blame-crash --blame-hang --blame-hang-timeout 60s --blame-crash-collect-always -- xunit.stopOnFail=true + + # mv -v Tests/UnitTestsParallelizable/TestResults/*/*.* TestResults/UnitTestsParallelizable/ + + - name: Upload UnitTestsParallelizable Logs + if: always() + uses: actions/upload-artifact@v4 + with: + name: parallel_unittests-logs-${{ runner.os }} + path: | + logs/UnitTestsParallelizable/ + TestResults/UnitTestsParallelizable/ diff --git a/.gitignore b/.gitignore index 14e25a86c..99f085cf5 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,5 @@ demo.* *.dotCover logs/ + +log.* \ No newline at end of file diff --git a/Benchmarks/Benchmarks.csproj b/Benchmarks/Benchmarks.csproj index 62f1be76c..369ee89ec 100644 --- a/Benchmarks/Benchmarks.csproj +++ b/Benchmarks/Benchmarks.csproj @@ -2,15 +2,13 @@ Exe - net8.0 false - enable enable Terminal.Gui.$(MSBuildProjectName.Replace(" ", "_")) - + diff --git a/CommunityToolkitExample/CommunityToolkitExample.csproj b/CommunityToolkitExample/CommunityToolkitExample.csproj index 8a25e7c31..13ed59966 100644 --- a/CommunityToolkitExample/CommunityToolkitExample.csproj +++ b/CommunityToolkitExample/CommunityToolkitExample.csproj @@ -2,14 +2,12 @@ Exe - net8.0 - enable enable - - + + diff --git a/example_config.json b/DemoFiles/example_config.json similarity index 100% rename from example_config.json rename to DemoFiles/example_config.json diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 000000000..dfd0c8b78 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,11 @@ + + + net8.0 + enable + + 12 + + + false + + \ No newline at end of file diff --git a/Directory.Packages.props b/Directory.Packages.props new file mode 100644 index 000000000..8ad412965 --- /dev/null +++ b/Directory.Packages.props @@ -0,0 +1,52 @@ + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Example/Example.csproj b/Example/Example.csproj index 4bb8cc0bc..be1d5c035 100644 --- a/Example/Example.csproj +++ b/Example/Example.csproj @@ -1,7 +1,6 @@  Exe - net8.0 diff --git a/GitVersion.yml b/GitVersion.yml index 78d807140..9b976f1c5 100644 --- a/GitVersion.yml +++ b/GitVersion.yml @@ -1,10 +1,9 @@ -mode: ContinuousDeployment +workflow: GitFlow/v1 tag-prefix: '[vV]' -continuous-delivery-fallback-tag: dev branches: develop: mode: ContinuousDeployment - tag: develop + label: develop regex: v2_develop tracks-release-branches: true is-source-branch-for: ['main'] @@ -12,14 +11,14 @@ branches: main: mode: ContinuousDeployment - tag: prealpha + label: prealpha regex: v2_release is-release-branch: true source-branches: ['develop'] v1_develop: mode: ContinuousDeployment - tag: v1_develop + label: v1_develop regex: v1_develop source-branches: - v1_release @@ -33,9 +32,9 @@ branches: pull-request: mode: ContinuousDeployment - tag: PullRequest.{BranchName} + label: PullRequest.{BranchName} increment: Inherit - tag-number-pattern: '[/-](?\d+)' + label-number-pattern: '[/-](?\d+)' regex: ^(pull|pull\-requests|pr)[/-] source-branches: - develop @@ -56,13 +55,13 @@ ignore: # branches: # # v1_develop: # # mode: ContinuousDeployment -# # tag: pre +# # label: pre # # regex: ^v1_develop?[/-] # # is-release-branch: false # # source-branches: # # - v1 # # v1: -# # tag: rc +# # label: rc # # increment: Patch # # regex: ^v2?[/-] # # is-release-branch: false @@ -71,7 +70,7 @@ ignore: # v2_develop: # mode: ContinuousDeployment -# tag: pre +# label: pre # regex: ^v2_develop?[/-] # is-release-branch: true # tracks-release-branches: true @@ -80,13 +79,13 @@ ignore: # v2: # mode: ContinuousDeployment # is-release-branch: false -# tag: alpha +# label: alpha # increment: Patch # regex: ^v2?[/-] # source-branches: ['v2_develop'] # # feature: -# # tag: useBranchName +# # label: useBranchName # # regex: ^features?[/-] # # source-branches: # # - v1 @@ -95,7 +94,7 @@ ignore: # # - v2_develop # pull-request: -# tag: PullRequest.{BranchName} +# label: PullRequest.{BranchName} # increment: Inherit # ignore: # sha: [] diff --git a/NativeAot/NativeAot.csproj b/NativeAot/NativeAot.csproj index 4f5238a9d..2dffeb5af 100644 --- a/NativeAot/NativeAot.csproj +++ b/NativeAot/NativeAot.csproj @@ -2,8 +2,6 @@ Exe - net8.0 - enable enable true false @@ -15,7 +13,7 @@ - + diff --git a/NoSamples.slnf b/NoSamples.slnf index 8d2a38dad..60dfeeede 100644 --- a/NoSamples.slnf +++ b/NoSamples.slnf @@ -4,7 +4,10 @@ "projects": [ "Terminal.Gui\\Terminal.Gui.csproj", "UICatalog\\UICatalog.csproj", - "UnitTests\\UnitTests.csproj" - ] + "Tests\\UnitTests\\UnitTests.csproj", + "Tests\\UnitTestsParallelizable\\UnitTests.Parallelizable.csproj", + "Tests\\IntegrationTests\\IntegrationTests.csproj", + "Tests\\StressTests\\StressTests.csproj" + ] } } \ No newline at end of file diff --git a/ReactiveExample/ReactiveExample.csproj b/ReactiveExample/ReactiveExample.csproj index 178b14b66..0e61fcdbb 100644 --- a/ReactiveExample/ReactiveExample.csproj +++ b/ReactiveExample/ReactiveExample.csproj @@ -1,7 +1,6 @@  Exe - net8.0 @@ -11,9 +10,9 @@ 2.0 - - - + + + diff --git a/Release.slnf b/Release.slnf index 8d2a38dad..c87196ae5 100644 --- a/Release.slnf +++ b/Release.slnf @@ -4,7 +4,10 @@ "projects": [ "Terminal.Gui\\Terminal.Gui.csproj", "UICatalog\\UICatalog.csproj", - "UnitTests\\UnitTests.csproj" + "Tests\\UnitTests\\UnitTests.csproj", + "Tests\\UnitTestsParallelizable\\UnitTests.Parallelizable.csproj", + "Tests\\IntegrationTests\\IntegrationTests.csproj", + "Tests\\StressTests\\StressTests.csproj" ] } } \ No newline at end of file diff --git a/Scripts/.testloop.sh.swp b/Scripts/.testloop.sh.swp new file mode 100644 index 0000000000000000000000000000000000000000..d219228ccc633170f647f40adbd998ead383af86 GIT binary patch literal 12288 zcmeI2zi$&U6vtg8#sVq=39-B;6|_{jBrQYLs$wVzbzo|W5EX-S=iFJk*r&5kZ5Sv6 zYz(llF!5KgcHkdD;y-{52EO;Bg)op2fu5z0EDT z7UBRlzy_ub6n@m%nBQMt>-Wlqc59I?FYHgp@Qe+x0XDz}*Z><~18jf|uz~;DfY0W{ zF-~}{IpwwHIrrPMneu}TumLu}2G{@_U;}J`4X^<=zy{a=8~6te$ViB{^Fmy`fadZ4 z|LO1luNQ^*0zQB@;5B#(CLjSZcm!^O8{j+ke*>SuJMap;1TR1g4!~n@8(arvy(@qR z8(;%$fDNz#Hoykh02^QfY=8~?O#_iNN)X2Kvi2&MUR$$c3*%Q;S5~TpHtm`)S7T*7 z`9#rK7=>k=%0(5Hk14hBt!B$ks-&SJt9IZ$jdZG99XZlf5Mihz?WzBB8YY%n16&ZN zyf8G9*c6d9ztmhhD_?aP&^@HkCJtIv7CoW^TDn6Wqo_wuw#xdZE*n{I6pm14?{tjq z3=5q`_!wy!Z=%P*ANe{|RekJvnU|^mP(47|!vtND&kMChkriUP!R@{fP35LuNO#q+ zznDywAO&urJ2 Exe - net8.0 - enable enable true Link @@ -18,7 +16,7 @@ - + diff --git a/Terminal.Gui/Application/Application.Mouse.cs b/Terminal.Gui/Application/Application.Mouse.cs index 176e85d35..01bdcc1a3 100644 --- a/Terminal.Gui/Application/Application.Mouse.cs +++ b/Terminal.Gui/Application/Application.Mouse.cs @@ -62,7 +62,10 @@ public static partial class Application // Mouse handling } #if DEBUG_IDISPOSABLE - ObjectDisposedException.ThrowIf (MouseGrabView.WasDisposed, MouseGrabView); + if (View.DebugIDisposable) + { + ObjectDisposedException.ThrowIf (MouseGrabView.WasDisposed, MouseGrabView); + } #endif if (!RaiseUnGrabbingMouseEvent (MouseGrabView)) @@ -150,7 +153,7 @@ public static partial class Application // Mouse handling if (deepestViewUnderMouse is { }) { #if DEBUG_IDISPOSABLE - if (deepestViewUnderMouse.WasDisposed) + if (View.DebugIDisposable && deepestViewUnderMouse.WasDisposed) { throw new ObjectDisposedException (deepestViewUnderMouse.GetType ().FullName); } @@ -278,7 +281,7 @@ public static partial class Application // Mouse handling if (MouseGrabView is { }) { #if DEBUG_IDISPOSABLE - if (MouseGrabView.WasDisposed) + if (View.DebugIDisposable && MouseGrabView.WasDisposed) { throw new ObjectDisposedException (MouseGrabView.GetType ().FullName); } diff --git a/Terminal.Gui/Application/Application.Run.cs b/Terminal.Gui/Application/Application.Run.cs index 6906efd90..5bfa5f2cc 100644 --- a/Terminal.Gui/Application/Application.Run.cs +++ b/Terminal.Gui/Application/Application.Run.cs @@ -1,8 +1,6 @@ #nullable enable using System.Diagnostics; using System.Diagnostics.CodeAnalysis; -using System.Text.Json.Serialization; -using Microsoft.CodeAnalysis.Diagnostics; namespace Terminal.Gui; @@ -27,7 +25,6 @@ public static partial class Application // Run (Begin, Run, End, Stop) private static Key _arrangeKey = Key.F5.WithCtrl; // Resources/config.json overrides - /// Gets or sets the key to activate arranging views using the keyboard. [SerializableConfigurationProperty (Scope = typeof (SettingsScope))] public static Key ArrangeKey @@ -97,7 +94,7 @@ public static partial class Application // Run (Begin, Run, End, Stop) var rs = new RunState (toplevel); #if DEBUG_IDISPOSABLE - if (Top is { } && toplevel != Top && !TopLevels.Contains (Top)) + if (View.DebugIDisposable && Top is { } && toplevel != Top && !TopLevels.Contains (Top)) { // This assertion confirm if the Top was already disposed Debug.Assert (Top.WasDisposed); @@ -174,7 +171,7 @@ public static partial class Application // Run (Begin, Run, End, Stop) // Force leave events for any entered views in the old Top if (GetLastMousePosition () is { }) { - RaiseMouseEnterLeaveEvents (GetLastMousePosition ()!.Value, new List ()); + RaiseMouseEnterLeaveEvents (GetLastMousePosition ()!.Value, new ()); } Top?.OnDeactivate (toplevel); @@ -208,7 +205,7 @@ public static partial class Application // Run (Begin, Run, End, Stop) NotifyNewRunState?.Invoke (toplevel, new (rs)); // Force an Idle event so that an Iteration (and Refresh) happen. - Application.Invoke (() => { }); + Invoke (() => { }); return rs; } @@ -231,7 +228,7 @@ public static partial class Application // Run (Begin, Run, End, Stop) // If the view is not visible or enabled, don't position the cursor if (mostFocused is null || !mostFocused.Visible || !mostFocused.Enabled) { - CursorVisibility current = CursorVisibility.Invisible; + var current = CursorVisibility.Invisible; Driver?.GetCursorVisibility (out current); if (current != CursorVisibility.Invisible) @@ -244,7 +241,9 @@ public static partial class Application // Run (Begin, Run, End, Stop) // If the view is not visible within it's superview, don't position the cursor Rectangle mostFocusedViewport = mostFocused.ViewportToScreen (mostFocused.Viewport with { Location = Point.Empty }); - Rectangle superViewViewport = mostFocused.SuperView?.ViewportToScreen (mostFocused.SuperView.Viewport with { Location = Point.Empty }) ?? Driver!.Screen; + + Rectangle superViewViewport = + mostFocused.SuperView?.ViewportToScreen (mostFocused.SuperView.Viewport with { Location = Point.Empty }) ?? Driver!.Screen; if (!superViewViewport.IntersectsWith (mostFocusedViewport)) { @@ -305,8 +304,10 @@ public static partial class Application // Run (Begin, Run, End, Stop) /// The created object. The caller is responsible for disposing this object. [RequiresUnreferencedCode ("AOT")] [RequiresDynamicCode ("AOT")] - public static Toplevel Run (Func? errorHandler = null, IConsoleDriver? driver = null) => - ApplicationImpl.Instance.Run (errorHandler, driver); + public static Toplevel Run (Func? errorHandler = null, IConsoleDriver? driver = null) + { + return ApplicationImpl.Instance.Run (errorHandler, driver); + } /// /// Runs the application by creating a -derived object of type T and calling @@ -332,7 +333,10 @@ public static partial class Application // Run (Begin, Run, End, Stop) [RequiresUnreferencedCode ("AOT")] [RequiresDynamicCode ("AOT")] public static T Run (Func? errorHandler = null, IConsoleDriver? driver = null) - where T : Toplevel, new() => ApplicationImpl.Instance.Run (errorHandler, driver); + where T : Toplevel, new () + { + return ApplicationImpl.Instance.Run (errorHandler, driver); + } /// Runs the Application using the provided view. /// @@ -356,7 +360,8 @@ public static partial class Application // Run (Begin, Run, End, Stop) /// method will only process any pending events, timers, idle handlers and then /// return control immediately. /// - /// When using or + /// + /// When using or /// /// will be called automatically. /// @@ -372,8 +377,7 @@ public static partial class Application // Run (Begin, Run, End, Stop) /// RELEASE builds only: Handler for any unhandled exceptions (resumes when returns true, /// rethrows when null). /// - public static void Run (Toplevel view, Func? errorHandler = null) - => ApplicationImpl.Instance.Run (view, errorHandler); + public static void Run (Toplevel view, Func? errorHandler = null) { ApplicationImpl.Instance.Run (view, errorHandler); } /// Adds a timeout to the application. /// @@ -381,7 +385,7 @@ public static partial class Application // Run (Begin, Run, End, Stop) /// reset, repeating the invocation. If it returns false, the timeout will stop and be removed. The returned value is a /// token that can be used to stop the timeout by calling . /// - public static object? AddTimeout (TimeSpan time, Func callback) => ApplicationImpl.Instance.AddTimeout (time, callback); + public static object? AddTimeout (TimeSpan time, Func callback) { return ApplicationImpl.Instance.AddTimeout (time, callback); } /// Removes a previously scheduled timeout /// The token parameter is the value returned by . @@ -393,11 +397,11 @@ public static partial class Application // Run (Begin, Run, End, Stop) /// This method also returns /// /// if the timeout is not found. - public static bool RemoveTimeout (object token) => ApplicationImpl.Instance.RemoveTimeout (token); + public static bool RemoveTimeout (object token) { return ApplicationImpl.Instance.RemoveTimeout (token); } /// Runs on the thread that is processing events /// the action to be invoked on the main processing thread. - public static void Invoke (Action action) => ApplicationImpl.Instance.Invoke (action); + public static void Invoke (Action action) { ApplicationImpl.Instance.Invoke (action); } // TODO: Determine if this is really needed. The only code that calls WakeUp I can find // is ProgressBarStyles, and it's not clear it needs to. @@ -406,14 +410,15 @@ public static partial class Application // Run (Begin, Run, End, Stop) public static void Wakeup () { MainLoop?.Wakeup (); } /// - /// Causes any Toplevels that need layout to be laid out. Then draws any Toplevels that need display. Only Views that need to be laid out (see ) will be laid out. - /// Only Views that need to be drawn (see ) will be drawn. + /// Causes any Toplevels that need layout to be laid out. Then draws any Toplevels that need display. Only Views that + /// need to be laid out (see ) will be laid out. + /// Only Views that need to be drawn (see ) will be drawn. /// - /// If the entire View hierarchy will be redrawn. The default is and should only be overriden for testing. - public static void LayoutAndDraw (bool forceDraw = false) - { - ApplicationImpl.Instance.LayoutAndDraw (forceDraw); - } + /// + /// If the entire View hierarchy will be redrawn. The default is and + /// should only be overriden for testing. + /// + public static void LayoutAndDraw (bool forceDraw = false) { ApplicationImpl.Instance.LayoutAndDraw (forceDraw); } internal static void LayoutAndDrawImpl (bool forceDraw = false) { @@ -424,6 +429,7 @@ public static partial class Application // Run (Begin, Run, End, Stop) forceDraw = true; ClearScreenNextIteration = false; } + if (forceDraw) { Driver?.ClearContents (); @@ -431,7 +437,7 @@ public static partial class Application // Run (Begin, Run, End, Stop) View.SetClipToScreen (); View.Draw (TopLevels, neededLayout || forceDraw); - View.SetClipToScreen (); + View.SetClipToScreen (); Driver?.Refresh (); } @@ -521,11 +527,13 @@ public static partial class Application // Run (Begin, Run, End, Stop) /// /// This will cause to return. /// - /// Calling is equivalent to setting the + /// Calling is equivalent to setting the + /// /// property on the currently running to false. /// /// - public static void RequestStop (Toplevel? top = null) => ApplicationImpl.Instance.RequestStop (top); + public static void RequestStop (Toplevel? top = null) { ApplicationImpl.Instance.RequestStop (top); } + internal static void OnNotifyStopRunState (Toplevel top) { if (EndAfterFirstIteration) diff --git a/Terminal.Gui/Application/Application.cs b/Terminal.Gui/Application/Application.cs index a493f3056..9ea1b4504 100644 --- a/Terminal.Gui/Application/Application.cs +++ b/Terminal.Gui/Application/Application.cs @@ -63,7 +63,7 @@ public static partial class Application { Rune rune = contents [r, c].Rune; - if (rune.DecodeSurrogatePair (out char [] sp)) + if (rune.DecodeSurrogatePair (out char []? sp)) { sb.Append (sp); } @@ -152,7 +152,7 @@ public static partial class Application #if DEBUG_IDISPOSABLE // Don't dispose the Top. It's up to caller dispose it - if (!ignoreDisposed && Top is { }) + if (View.DebugIDisposable && !ignoreDisposed && Top is { }) { Debug.Assert (Top.WasDisposed); @@ -173,6 +173,7 @@ public static partial class Application MainThreadId = -1; Iteration = null; EndAfterFirstIteration = false; + ClearScreenNextIteration = false; // Driver stuff if (Driver is { }) @@ -212,7 +213,6 @@ public static partial class Application Navigation = null; - ClearScreenNextIteration = false; KeyBindings.Clear (); AddKeyBindings (); diff --git a/Terminal.Gui/Application/ApplicationImpl.cs b/Terminal.Gui/Application/ApplicationImpl.cs index 49e1d4b52..8bbc17ccb 100644 --- a/Terminal.Gui/Application/ApplicationImpl.cs +++ b/Terminal.Gui/Application/ApplicationImpl.cs @@ -176,7 +176,10 @@ public class ApplicationImpl : IApplication if (runState.Toplevel is null) { #if DEBUG_IDISPOSABLE - Debug.Assert (Application.TopLevels.Count == 0); + if (View.DebugIDisposable) + { + Debug.Assert (Application.TopLevels.Count == 0); + } #endif runState.Dispose (); diff --git a/Terminal.Gui/Application/RunState.cs b/Terminal.Gui/Application/RunState.cs index 0c1387ff8..e0b6fdc30 100644 --- a/Terminal.Gui/Application/RunState.cs +++ b/Terminal.Gui/Application/RunState.cs @@ -22,7 +22,10 @@ public class RunState : IDisposable Dispose (true); GC.SuppressFinalize (this); #if DEBUG_IDISPOSABLE - WasDisposed = true; + if (View.DebugIDisposable) + { + WasDisposed = true; + } #endif } @@ -52,6 +55,12 @@ public class RunState : IDisposable public static List Instances = new (); /// Creates a new RunState object. - public RunState () { Instances.Add (this); } + public RunState () + { + if (View.DebugIDisposable) + { + Instances.Add (this); + } + } #endif } diff --git a/Terminal.Gui/Configuration/ConfigurationManager.cs b/Terminal.Gui/Configuration/ConfigurationManager.cs index 676f68251..2326c028e 100644 --- a/Terminal.Gui/Configuration/ConfigurationManager.cs +++ b/Terminal.Gui/Configuration/ConfigurationManager.cs @@ -326,6 +326,9 @@ public static class ConfigurationManager } + /// + /// Logs any Json deserialization errors that occurred during deserialization to the logging system. + /// public static void LogJsonErrors () { if (_jsonErrors.Length > 0) diff --git a/Terminal.Gui/Configuration/ScopeJsonConverter.cs b/Terminal.Gui/Configuration/ScopeJsonConverter.cs index 11e83c6f7..d1d6e475e 100644 --- a/Terminal.Gui/Configuration/ScopeJsonConverter.cs +++ b/Terminal.Gui/Configuration/ScopeJsonConverter.cs @@ -91,7 +91,7 @@ internal class ScopeJsonConverter<[DynamicallyAccessedMembers (DynamicallyAccess scope! [propertyName].PropertyValue = JsonSerializer.Deserialize (ref reader, propertyType!, SerializerContext); } - catch (Exception ex) + catch (Exception) { // Logging.Trace ($"scopeT Read: {ex}"); } diff --git a/Terminal.Gui/ConsoleDrivers/AnsiResponseParser/Keyboard/CsiKeyPattern.cs b/Terminal.Gui/ConsoleDrivers/AnsiResponseParser/Keyboard/CsiKeyPattern.cs index 9c442e5e2..cdcd10a59 100644 --- a/Terminal.Gui/ConsoleDrivers/AnsiResponseParser/Keyboard/CsiKeyPattern.cs +++ b/Terminal.Gui/ConsoleDrivers/AnsiResponseParser/Keyboard/CsiKeyPattern.cs @@ -52,6 +52,11 @@ public class CsiKeyPattern : AnsiKeyboardParserPattern _pattern = new (@$"^\u001b\[(1;(\d+))?([{terms}]|\d+~)$"); } + /// + /// + /// + /// + /// protected override Key? GetKeyImpl (string input) { Match match = _pattern.Match (input); @@ -66,7 +71,7 @@ public class CsiKeyPattern : AnsiKeyboardParserPattern Key? key = _terminators.GetValueOrDefault (terminator); - if (key != null && int.TryParse (modifierGroup, out int modifier)) + if (key is {} && int.TryParse (modifierGroup, out int modifier)) { key = modifier switch { diff --git a/Terminal.Gui/Terminal.Gui.csproj b/Terminal.Gui/Terminal.Gui.csproj index aaadfee75..e19e3521f 100644 --- a/Terminal.Gui/Terminal.Gui.csproj +++ b/Terminal.Gui/Terminal.Gui.csproj @@ -1,175 +1,184 @@  - - - - - - - - 2.0.0 - - - - - - - Terminal.Gui - + + + + + + + + 2.0.0 + + + + + + + Terminal.Gui + - - - - - net8.0 - 12 - $(AssemblyName) - true - true - portable - $(DefineConstants);CONTRACTS_FULL;CODE_ANALYSIS - enable - true - true - false - true - true - - - true - $(DefineConstants);DEBUG_IDISPOSABLE - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - \ - - - true - \ - - - - - - - - true - true - Strings.resx - - - - - ResXFileCodeGenerator - Strings.Designer.cs - - - - - - - $(AssemblyName) - MIT - https://github.com/gui-cs/$(AssemblyName) - logo.png - README.md - csharp, terminal, c#, f#, gui, toolkit, console, tui - Cross platform Terminal UI toolkit for .NET - Miguel de Icaza, Tig Kindel - A toolkit for building rich console apps for .NET that works on Windows, Mac, and Linux/Unix. - $(AssemblyName) - Cross-platform Terminal User Interface (TUI) toolkit for .NET - - See: $(PackageProjectUrl)/releases - - bin\$(Configuration)\$(AssemblyName).xml - true - true - https://github.com/gui-cs/$(AssemblyName).git - git - true - snupkg - - true - upstream - - true - true - Miguel de Icaza, Tig Kindel (@tig), @BDisp - - + + + + + + net8.0 + 12 + enable + + $(AssemblyName) + true + true + portable + $(DefineConstants);CONTRACTS_FULL;CODE_ANALYSIS + true + true + false + true + true + + + true + $(DefineConstants);DEBUG_IDISPOSABLE + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + \ + + + true + \ + + + + + + + + true + true + Strings.resx + + + + + ResXFileCodeGenerator + Strings.Designer.cs + + + + + + + $(AssemblyName) + MIT + https://github.com/gui-cs/$(AssemblyName) + logo.png + README.md + csharp, terminal, c#, f#, gui, toolkit, console, tui + Cross platform Terminal UI toolkit for .NET + Miguel de Icaza, Tig Kindel + A toolkit for building rich console apps for .NET that works on Windows, Mac, and Linux/Unix. + $(AssemblyName) - Cross-platform Terminal User Interface (TUI) toolkit for .NET + + See: $(PackageProjectUrl)/releases + + bin\$(Configuration)\$(AssemblyName).xml + true + true + https://github.com/gui-cs/$(AssemblyName).git + git + true + snupkg + + true + upstream + + true + true + Miguel de Icaza, Tig Kindel (@tig), @BDisp + + + + + + - - - - $(MSBuildThisFileDirectory)..\local_packages\ - - $(MSBuildThisFileDirectory)bin\$(Configuration)\ - + + + + $(MSBuildThisFileDirectory)..\local_packages\ + + $(MSBuildThisFileDirectory)bin\$(Configuration)\ + - - - + + + - - - - + + + + - - + + - - + + - - - + + + diff --git a/Terminal.Gui/View/DrawContext.cs b/Terminal.Gui/View/DrawContext.cs index 36b60c4c4..2648caefe 100644 --- a/Terminal.Gui/View/DrawContext.cs +++ b/Terminal.Gui/View/DrawContext.cs @@ -2,7 +2,7 @@ namespace Terminal.Gui; /// -/// Tracks the region that has been drawn during . This is primarily +/// Tracks the region that has been drawn during . This is primarily /// in support of . /// public class DrawContext diff --git a/Terminal.Gui/View/DrawEventArgs.cs b/Terminal.Gui/View/DrawEventArgs.cs index 5aabd2e66..b172d85ab 100644 --- a/Terminal.Gui/View/DrawEventArgs.cs +++ b/Terminal.Gui/View/DrawEventArgs.cs @@ -16,7 +16,7 @@ public class DrawEventArgs : CancelEventArgs /// . /// /// - /// Add any regions that have been drawn to during operations to this context. This is + /// Add any regions that have been drawn to during operations to this context. This is /// primarily /// in support of . /// @@ -34,7 +34,7 @@ public class DrawEventArgs : CancelEventArgs public Rectangle NewViewport { get; } /// - /// Add any regions that have been drawn to during operations to this context. This is + /// Add any regions that have been drawn to during operations to this context. This is /// primarily /// in support of . /// diff --git a/Terminal.Gui/View/View.Mouse.cs b/Terminal.Gui/View/View.Mouse.cs index 691c10d8a..3c5b0d01a 100644 --- a/Terminal.Gui/View/View.Mouse.cs +++ b/Terminal.Gui/View/View.Mouse.cs @@ -762,6 +762,7 @@ public partial class View // Mouse APIs /// INTERNAL: Gets the Views that are under the mouse at , including Adornments. /// /// + /// /// internal static List GetViewsUnderMouse (in Point location, bool ignoreTransparent = false) { diff --git a/Terminal.Gui/View/View.cs b/Terminal.Gui/View/View.cs index 8ffff38c8..bf4fc0d8c 100644 --- a/Terminal.Gui/View/View.cs +++ b/Terminal.Gui/View/View.cs @@ -24,6 +24,83 @@ namespace Terminal.Gui; public partial class View : IDisposable, ISupportInitializeNotification { + private bool _disposedValue; + + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resource. + public void Dispose () + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Disposing?.Invoke (this, EventArgs.Empty); + Dispose (true); + GC.SuppressFinalize (this); +#if DEBUG_IDISPOSABLE + if (DebugIDisposable) + { + WasDisposed = true; + + foreach (View? instance in Instances.Where ( + x => + { + if (x is { }) + { + return x.WasDisposed; + } + + return false; + }) + .ToList ()) + { + Instances.Remove (instance); + } + } +#endif + } + + /// + /// Riased when the is being disposed. + /// + public event EventHandler? Disposing; + + /// Pretty prints the View + /// + public override string ToString () { return $"{GetType ().Name}({Id}){Frame}"; } + + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + /// If disposing equals true, the method has been called directly or indirectly by a user's code. Managed and + /// unmanaged resources can be disposed. If disposing equals false, the method has been called by the runtime from + /// inside the finalizer and you should not reference other objects. Only unmanaged resources can be disposed. + /// + /// + protected virtual void Dispose (bool disposing) + { + LineCanvas.Dispose (); + + DisposeMouse (); + DisposeKeyboard (); + DisposeAdornments (); + DisposeScrollBars (); + + for (int i = InternalSubviews.Count - 1; i >= 0; i--) + { + View subview = InternalSubviews [i]; + Remove (subview); + subview.Dispose (); + } + + if (!_disposedValue) + { + if (disposing) + { + // TODO: dispose managed state (managed objects) + } + + _disposedValue = true; + } + + Debug.Assert (InternalSubviews.Count == 0); + } + #region Constructors and Initialization /// Gets or sets arbitrary data for the view. @@ -51,7 +128,10 @@ public partial class View : IDisposable, ISupportInitializeNotification public View () { #if DEBUG_IDISPOSABLE - Instances.Add (this); + if (DebugIDisposable) + { + Instances.Add (this); + } #endif SetupAdornments (); @@ -168,6 +248,7 @@ public partial class View : IDisposable, ISupportInitializeNotification // TODO: Figure out how to move this out of here and just depend on LayoutNeeded in Mainloop Layout (); // the EventLog in AllViewsTester fails to layout correctly if this is not here (convoluted Dim.Fill(Func)). } + SetNeedsLayout (); Initialized?.Invoke (this, EventArgs.Empty); @@ -371,7 +452,7 @@ public partial class View : IDisposable, ISupportInitializeNotification get { #if DEBUG_IDISPOSABLE - if (WasDisposed) + if (DebugIDisposable && WasDisposed) { throw new ObjectDisposedException (GetType ().FullName); } @@ -381,7 +462,7 @@ public partial class View : IDisposable, ISupportInitializeNotification set { #if DEBUG_IDISPOSABLE - if (WasDisposed) + if (DebugIDisposable && WasDisposed) { throw new ObjectDisposedException (GetType ().FullName); } @@ -450,71 +531,12 @@ public partial class View : IDisposable, ISupportInitializeNotification #endregion - /// Pretty prints the View - /// - public override string ToString () { return $"{GetType ().Name}({Id}){Frame}"; } - - private bool _disposedValue; - - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - /// - /// If disposing equals true, the method has been called directly or indirectly by a user's code. Managed and - /// unmanaged resources can be disposed. If disposing equals false, the method has been called by the runtime from - /// inside the finalizer and you should not reference other objects. Only unmanaged resources can be disposed. - /// - /// - protected virtual void Dispose (bool disposing) - { - LineCanvas.Dispose (); - - DisposeMouse (); - DisposeKeyboard (); - DisposeAdornments (); - DisposeScrollBars (); - - for (int i = InternalSubviews.Count - 1; i >= 0; i--) - { - View subview = InternalSubviews [i]; - Remove (subview); - subview.Dispose (); - } - - if (!_disposedValue) - { - if (disposing) - { - // TODO: dispose managed state (managed objects) - } - - _disposedValue = true; - } - - Debug.Assert (InternalSubviews.Count == 0); - } - +#if DEBUG_IDISPOSABLE /// - /// Riased when the is being disposed. + /// Set to false to disable the debug IDisposable feature. /// - public event EventHandler? Disposing; + public static bool DebugIDisposable { get; set; } = false; - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resource. - public void Dispose () - { - // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method - Disposing?.Invoke (this, EventArgs.Empty); - Dispose (true); - GC.SuppressFinalize (this); -#if DEBUG_IDISPOSABLE - WasDisposed = true; - - foreach (View instance in Instances.Where (x => x.WasDisposed).ToList ()) - { - Instances.Remove (instance); - } -#endif - } - -#if DEBUG_IDISPOSABLE /// For debug purposes to verify objects are being disposed properly public bool WasDisposed { get; set; } diff --git a/Terminal.Gui/Views/Bar.cs b/Terminal.Gui/Views/Bar.cs index 05bcc1101..d5b72c185 100644 --- a/Terminal.Gui/Views/Bar.cs +++ b/Terminal.Gui/Views/Bar.cs @@ -109,11 +109,13 @@ public class Bar : View, IOrientation, IDesignable set => _orientationHelper.Orientation = value; } +#pragma warning disable CS0067 // The event is never used /// public event EventHandler>? OrientationChanging; /// public event EventHandler>? OrientationChanged; +#pragma warning restore CS0067 // The event is never used /// Called when has changed. /// diff --git a/Terminal.Gui/Views/Dialog.cs b/Terminal.Gui/Views/Dialog.cs index 259638baf..a70b597fd 100644 --- a/Terminal.Gui/Views/Dialog.cs +++ b/Terminal.Gui/Views/Dialog.cs @@ -107,7 +107,7 @@ public class Dialog : Window get { #if DEBUG_IDISPOSABLE - if (WasDisposed) + if (View.DebugIDisposable && WasDisposed) { throw new ObjectDisposedException (GetType ().FullName); } @@ -117,7 +117,7 @@ public class Dialog : Window set { #if DEBUG_IDISPOSABLE - if (WasDisposed) + if (View.DebugIDisposable && WasDisposed) { throw new ObjectDisposedException (GetType ().FullName); } diff --git a/Terminal.Gui/Views/Line.cs b/Terminal.Gui/Views/Line.cs index 9d2889373..45d2fa3cf 100644 --- a/Terminal.Gui/Views/Line.cs +++ b/Terminal.Gui/Views/Line.cs @@ -33,11 +33,13 @@ public class Line : View, IOrientation set => _orientationHelper.Orientation = value; } +#pragma warning disable CS0067 // The event is never used /// public event EventHandler> OrientationChanging; /// public event EventHandler> OrientationChanged; +#pragma warning restore CS0067 // The event is never used /// Called when has changed. /// diff --git a/Terminal.Gui/Views/RadioGroup.cs b/Terminal.Gui/Views/RadioGroup.cs index d72bebad7..3b9d9aeac 100644 --- a/Terminal.Gui/Views/RadioGroup.cs +++ b/Terminal.Gui/Views/RadioGroup.cs @@ -403,11 +403,13 @@ public class RadioGroup : View, IDesignable, IOrientation private readonly OrientationHelper _orientationHelper; +#pragma warning disable CS0067 // The event is never used /// public event EventHandler>? OrientationChanging; /// public event EventHandler>? OrientationChanged; +#pragma warning restore CS0067 // The event is never used /// Called when has changed. /// diff --git a/Terminal.Gui/Views/ScrollBar/ScrollBar.cs b/Terminal.Gui/Views/ScrollBar/ScrollBar.cs index 10df243a1..62d60320d 100644 --- a/Terminal.Gui/Views/ScrollBar/ScrollBar.cs +++ b/Terminal.Gui/Views/ScrollBar/ScrollBar.cs @@ -164,11 +164,13 @@ public class ScrollBar : View, IOrientation, IDesignable set => _orientationHelper.Orientation = value; } +#pragma warning disable CS0067 // The event is never used /// public event EventHandler>? OrientationChanging; /// public event EventHandler>? OrientationChanged; +#pragma warning restore CS0067 // The event is never used /// public void OnOrientationChanged (Orientation newOrientation) diff --git a/Terminal.Gui/Views/Wizard/WizardStep.cs b/Terminal.Gui/Views/Wizard/WizardStep.cs index 8d9be18b0..afb750ffb 100644 --- a/Terminal.Gui/Views/Wizard/WizardStep.cs +++ b/Terminal.Gui/Views/Wizard/WizardStep.cs @@ -125,7 +125,7 @@ public class WizardStep : View { _contentView.Add (view); - if (view.CanFocus) + if (view!.CanFocus) { CanFocus = true; } diff --git a/Terminal.sln b/Terminal.sln index 7cb9d0367..0399a634d 100644 --- a/Terminal.sln +++ b/Terminal.sln @@ -6,8 +6,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Terminal.Gui", "Terminal.Gu EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UICatalog", "UICatalog\UICatalog.csproj", "{88979F89-9A42-448F-AE3E-3060145F6375}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTests", "UnitTests\UnitTests.csproj", "{8B901EDE-8974-4820-B100-5226917E2990}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReactiveExample", "ReactiveExample\ReactiveExample.csproj", "{44E15B48-0DB2-4560-82BD-D3B7989811C3}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Example", "Example\Example.csproj", "{B0A602CD-E176-449D-8663-64238D54F857}" @@ -21,6 +19,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Settings", "Settings", "{B8 .editorconfig = .editorconfig .filenesting.json = .filenesting.json .gitignore = .gitignore + Directory.Build.props = Directory.Build.props + Directory.Packages.props = Directory.Packages.props GitVersion.yml = GitVersion.yml global.json = global.json nuget.config = nuget.config @@ -31,9 +31,13 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GitHub", "GitHub", "{13BB2C46-B324-4B9C-92EB-CE6184D4736E}" ProjectSection(SolutionItems) = preProject .github\workflows\api-docs.yml = .github\workflows\api-docs.yml - .github\workflows\dotnet-core.yml = .github\workflows\dotnet-core.yml + .github\workflows\build-release.yml = .github\workflows\build-release.yml + .github\workflows\check-duplicates.yml = .github\workflows\check-duplicates.yml GitVersion.yml = GitVersion.yml + .github\workflows\integration-tests.yml = .github\workflows\integration-tests.yml .github\workflows\publish.yml = .github\workflows\publish.yml + .github\workflows\stress-tests.yml = .github\workflows\stress-tests.yml + .github\workflows\unit-tests.yml = .github\workflows\unit-tests.yml EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{C7A51224-5E0F-4986-AB37-A6BF89966C12}" @@ -50,6 +54,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NativeAot", "NativeAot\Nati EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Benchmarks", "Benchmarks\Benchmarks.csproj", "{242FBD3E-2EC6-4274-BD40-8E62AF9327B2}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "Tests\UnitTests\UnitTests.csproj", "{038B09F5-EF3A-F21E-7C10-A6551866ECE2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntegrationTests", "Tests\IntegrationTests\IntegrationTests.csproj", "{F74EC349-B988-FCFA-A1E5-967F70FB75B5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StressTests", "Tests\StressTests\StressTests.csproj", "{96ACE8BA-2E07-7537-FBF2-E8176CCB8080}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests.Parallelizable", "Tests\UnitTestsParallelizable\UnitTests.Parallelizable.csproj", "{DE780834-190A-8277-51FD-750CC666E82D}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -64,10 +76,6 @@ Global {88979F89-9A42-448F-AE3E-3060145F6375}.Debug|Any CPU.Build.0 = Debug|Any CPU {88979F89-9A42-448F-AE3E-3060145F6375}.Release|Any CPU.ActiveCfg = Release|Any CPU {88979F89-9A42-448F-AE3E-3060145F6375}.Release|Any CPU.Build.0 = Release|Any CPU - {8B901EDE-8974-4820-B100-5226917E2990}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8B901EDE-8974-4820-B100-5226917E2990}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B901EDE-8974-4820-B100-5226917E2990}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8B901EDE-8974-4820-B100-5226917E2990}.Release|Any CPU.Build.0 = Release|Any CPU {44E15B48-0DB2-4560-82BD-D3B7989811C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {44E15B48-0DB2-4560-82BD-D3B7989811C3}.Debug|Any CPU.Build.0 = Debug|Any CPU {44E15B48-0DB2-4560-82BD-D3B7989811C3}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -92,6 +100,22 @@ Global {242FBD3E-2EC6-4274-BD40-8E62AF9327B2}.Debug|Any CPU.Build.0 = Debug|Any CPU {242FBD3E-2EC6-4274-BD40-8E62AF9327B2}.Release|Any CPU.ActiveCfg = Release|Any CPU {242FBD3E-2EC6-4274-BD40-8E62AF9327B2}.Release|Any CPU.Build.0 = Release|Any CPU + {038B09F5-EF3A-F21E-7C10-A6551866ECE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {038B09F5-EF3A-F21E-7C10-A6551866ECE2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {038B09F5-EF3A-F21E-7C10-A6551866ECE2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {038B09F5-EF3A-F21E-7C10-A6551866ECE2}.Release|Any CPU.Build.0 = Release|Any CPU + {F74EC349-B988-FCFA-A1E5-967F70FB75B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F74EC349-B988-FCFA-A1E5-967F70FB75B5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F74EC349-B988-FCFA-A1E5-967F70FB75B5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F74EC349-B988-FCFA-A1E5-967F70FB75B5}.Release|Any CPU.Build.0 = Release|Any CPU + {96ACE8BA-2E07-7537-FBF2-E8176CCB8080}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {96ACE8BA-2E07-7537-FBF2-E8176CCB8080}.Debug|Any CPU.Build.0 = Debug|Any CPU + {96ACE8BA-2E07-7537-FBF2-E8176CCB8080}.Release|Any CPU.ActiveCfg = Release|Any CPU + {96ACE8BA-2E07-7537-FBF2-E8176CCB8080}.Release|Any CPU.Build.0 = Release|Any CPU + {DE780834-190A-8277-51FD-750CC666E82D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DE780834-190A-8277-51FD-750CC666E82D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE780834-190A-8277-51FD-750CC666E82D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DE780834-190A-8277-51FD-750CC666E82D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Terminal.sln.DotSettings b/Terminal.sln.DotSettings index 07d849e84..7b9a335a8 100644 --- a/Terminal.sln.DotSettings +++ b/Terminal.sln.DotSettings @@ -409,10 +409,12 @@ True True True + 5 True True True True + True True True True diff --git a/Tests/IntegrationTests/IntegrationTests.csproj b/Tests/IntegrationTests/IntegrationTests.csproj new file mode 100644 index 000000000..94b97b6a0 --- /dev/null +++ b/Tests/IntegrationTests/IntegrationTests.csproj @@ -0,0 +1,40 @@ + + + + enable + false + true + $(DefineConstants);JETBRAINS_ANNOTATIONS;CONTRACTS_FULL + portable + enable + true + true + + + true + $(DefineConstants);DEBUG_IDISPOSABLE + + + true + + + + + + + + + + + + + + + + + + + PreserveNewest + + + diff --git a/UnitTests/UICatalog/ScenarioTests.cs b/Tests/IntegrationTests/UICatalog/ScenarioTests.cs similarity index 78% rename from UnitTests/UICatalog/ScenarioTests.cs rename to Tests/IntegrationTests/UICatalog/ScenarioTests.cs index 09ba8b754..3de2735f4 100644 --- a/UnitTests/UICatalog/ScenarioTests.cs +++ b/Tests/IntegrationTests/UICatalog/ScenarioTests.cs @@ -1,15 +1,19 @@ using System.Collections.ObjectModel; using System.Diagnostics; using System.Reflection; +using Terminal.Gui; +using UnitTests; +using UICatalog; using Xunit.Abstractions; -namespace UICatalog.Tests; +namespace IntegrationTests.UICatalog; public class ScenarioTests : TestsAllViews { public ScenarioTests (ITestOutputHelper output) { #if DEBUG_IDISPOSABLE + View.DebugIDisposable = true; View.Instances.Clear (); #endif _output = output; @@ -137,169 +141,7 @@ public class ScenarioTests : TestsAllViews } } - /// - /// This runs through all Scenarios defined in UI Catalog, calling Init, Setup, and Run and measuring the perf of each. - /// - [Theory] - [MemberData (nameof (AllScenarioTypes))] - public void All_Scenarios_Benchmark (Type scenarioType) - { - Assert.Null (_timeoutLock); - _timeoutLock = new (); - - // Disable any UIConfig settings - ConfigLocations savedConfigLocations = ConfigurationManager.Locations; - ConfigurationManager.Locations = ConfigLocations.Default; - - // If a previous test failed, this will ensure that the Application is in a clean state - Application.ResetState (true); - - uint maxIterations = 1000; - uint abortTime = 2000; - object timeout = null; - var initialized = false; - var shutdown = false; - - int iterationCount = 0; - int clearedContentCount = 0; - int refreshedCount = 0; - int updatedCount = 0; - int drawCompleteCount = 0; - - int addedCount = 0; - int laidOutCount = 0; - - _output.WriteLine ($"Running Scenario '{scenarioType}'"); - var scenario = (Scenario)Activator.CreateInstance (scenarioType); - - Stopwatch stopwatch = null; - - Application.InitializedChanged += OnApplicationOnInitializedChanged; - Application.ForceDriver = "FakeDriver"; - scenario!.Main (); - scenario.Dispose (); - scenario = null; - Application.ForceDriver = string.Empty; - Application.InitializedChanged -= OnApplicationOnInitializedChanged; - - lock (_timeoutLock) - { - if (timeout is { }) - { - timeout = null; - } - } - - lock (_timeoutLock) - { - _timeoutLock = null; - } - - _output.WriteLine ($"Scenario {scenarioType}"); - _output.WriteLine ($" took {stopwatch.ElapsedMilliseconds} ms to run."); - _output.WriteLine ($" called Driver.ClearContents {clearedContentCount} times."); - _output.WriteLine ($" called Driver.Refresh {refreshedCount} times."); - _output.WriteLine ($" which updated the screen {updatedCount} times."); - _output.WriteLine ($" called View.Draw {drawCompleteCount} times."); - _output.WriteLine ($" added {addedCount} views."); - _output.WriteLine ($" called View.LayoutComplete {laidOutCount} times."); - - // Restore the configuration locations - ConfigurationManager.Locations = savedConfigLocations; - ConfigurationManager.Reset (); - - return; - - void OnApplicationOnInitializedChanged (object s, EventArgs a) - { - if (a.CurrentValue) - { - lock (_timeoutLock) - { - timeout = Application.AddTimeout (TimeSpan.FromMilliseconds (abortTime), ForceCloseCallback); - } - - initialized = true; - Application.Iteration += OnApplicationOnIteration; - Application.Driver!.ClearedContents += (sender, args) => clearedContentCount++; - - if (Application.Driver is ConsoleDriver cd) - { - cd!.Refreshed += (sender, args) => - { - refreshedCount++; - - if (args.CurrentValue) - { - updatedCount++; - } - }; - } - - Application.NotifyNewRunState += OnApplicationNotifyNewRunState; - - stopwatch = Stopwatch.StartNew (); - } - else - { - shutdown = true; - Application.NotifyNewRunState -= OnApplicationNotifyNewRunState; - Application.Iteration -= OnApplicationOnIteration; - stopwatch!.Stop (); - } - _output.WriteLine ($"Initialized == {a.CurrentValue}"); - } - - void OnApplicationOnIteration (object s, IterationEventArgs a) - { - iterationCount++; - if (iterationCount > maxIterations) - { - // Press QuitKey - _output.WriteLine ($"Attempting to quit scenario with RequestStop"); - Application.RequestStop (); - } - } - - - void OnApplicationNotifyNewRunState (object sender, RunStateEventArgs e) - { - // Get a list of all subviews under Application.Top (and their subviews, etc.) - // and subscribe to their DrawComplete event - void SubscribeAllSubviews (View view) - { - view.DrawComplete += (s, a) => drawCompleteCount++; - view.SubviewsLaidOut += (s, a) => laidOutCount++; - view.Added += (s, a) => addedCount++; - foreach (View subview in view.Subviews) - { - SubscribeAllSubviews (subview); - } - } - - SubscribeAllSubviews (Application.Top); - } - - // If the scenario doesn't close within the abort time, this will force it to quit - bool ForceCloseCallback () - { - lock (_timeoutLock) - { - if (timeout is { }) - { - timeout = null; - } - } - - _output.WriteLine( - $"'{scenario.GetName ()}' failed to Quit with {Application.QuitKey} after {abortTime}ms and {iterationCount} iterations. Force quit."); - - Application.RequestStop (); - - return false; - } - } - + public static IEnumerable AllScenarioTypes => typeof (Scenario).Assembly .GetTypes () @@ -344,7 +186,7 @@ public class ScenarioTests : TestsAllViews var top = new Toplevel (); - _viewClasses = TestHelpers.GetAllViewClasses ().ToDictionary (t => t.Name); + _viewClasses = ViewTestHelpers.GetAllViewClasses ().ToDictionary (t => t.Name); _leftPane = new () { diff --git a/UnitTests/xunit.runner.json b/Tests/IntegrationTests/xunit.runner.json similarity index 100% rename from UnitTests/xunit.runner.json rename to Tests/IntegrationTests/xunit.runner.json diff --git a/Tests/README.md b/Tests/README.md new file mode 100644 index 000000000..805a8b54a --- /dev/null +++ b/Tests/README.md @@ -0,0 +1,29 @@ +# Terminal.Gui Tests + +This folder contains the tests for Terminal.Gui. + +## ./UnitTests + +This folder contains the unit tests for Terminal.Gui that can not be run in parallel. This is because they +depend on `Application` or other class that use static state or `ConfigurationManager`. + +We should be striving to move as many tests as possible to the `./UnitTestsParallelizable` folder. + +## ./UnitTestsParallelizable + +This folder contains the unit tests for Terminal.Gui that can be run in parallel. + +## ./IntegrationTests + +This folder contains the integration tests for Terminal.Gui. + +## ./StressTests + +This folder contains the stress tests for Terminal.Gui. + +## ./PerformanceTests + +This folder WILL contain the performance tests for Terminal.Gui. + + +See the [Testing wiki](https://github.com/gui-cs/Terminal.Gui/wiki/Testing) for details on how to add more tests. diff --git a/Tests/StressTests/ApplicationStressTests.cs b/Tests/StressTests/ApplicationStressTests.cs new file mode 100644 index 000000000..b326a054c --- /dev/null +++ b/Tests/StressTests/ApplicationStressTests.cs @@ -0,0 +1,111 @@ +using Terminal.Gui; +using UnitTests; +using Xunit.Abstractions; + +namespace StressTests; + +public class ApplicationStressTests : TestsAllViews +{ + public ApplicationStressTests (ITestOutputHelper output) + { + ConsoleDriver.RunningUnitTests = true; + ConfigurationManager.Locations = ConfigLocations.Default; + } + + private static volatile int _tbCounter; + private static readonly ManualResetEventSlim _wakeUp = new (false); + + [Theory] + [InlineData (typeof (FakeDriver))] + [InlineData (typeof (NetDriver), Skip = "System.IO.IOException: The handle is invalid")] + //[InlineData (typeof (ANSIDriver))] + [InlineData (typeof (WindowsDriver))] + [InlineData (typeof (CursesDriver), Skip = "Unable to load DLL 'libc' or one of its dependencies: The specified module could not be found. (0x8007007E)")] + public async Task InvokeLeakTest (Type driverType) + { + + Application.Init (driverName: driverType.Name); + Random r = new (); + TextField tf = new (); + var top = new Toplevel (); + top.Add (tf); + + const int NUM_PASSES = 50; + const int NUM_INCREMENTS = 500; + const int POLL_MS = 100; + _tbCounter = 0; + + Task task = Task.Run (() => RunTest (r, tf, NUM_PASSES, NUM_INCREMENTS, POLL_MS)); + + // blocks here until the RequestStop is processed at the end of the test + Application.Run (top); + + await task; // Propagate exception if any occurred + + Assert.Equal (NUM_INCREMENTS * NUM_PASSES, _tbCounter); + top.Dispose (); + Application.Shutdown (); + + return; + + static void RunTest (Random r, TextField tf, int numPasses, int numIncrements, int pollMs) + { + for (var j = 0; j < numPasses; j++) + { + _wakeUp.Reset (); + + for (var i = 0; i < numIncrements; i++) + { + Launch (r, tf, (j + 1) * numIncrements); + } + + while (_tbCounter != (j + 1) * numIncrements) // Wait for tbCounter to reach expected value + { + int tbNow = _tbCounter; + _wakeUp.Wait (pollMs); + + if (_tbCounter != tbNow) + { + continue; + } + + // No change after wait: Idle handlers added via Application.Invoke have gone missing + Application.Invoke (() => Application.RequestStop ()); + + throw new TimeoutException ( + $"Timeout: Increment lost. _tbCounter ({_tbCounter}) didn't " + + $"change after waiting {pollMs} ms. Failed to reach {(j + 1) * numIncrements} on pass {j + 1}" + ); + } + + ; + } + + Application.Invoke (() => Application.RequestStop ()); + } + + static void Launch (Random r, TextField tf, int target) + { + Task.Run ( + () => + { + Thread.Sleep (r.Next (2, 4)); + + Application.Invoke ( + () => + { + tf.Text = $"index{r.Next ()}"; + Interlocked.Increment (ref _tbCounter); + + if (target == _tbCounter) + { + // On last increment wake up the check + _wakeUp.Set (); + } + } + ); + } + ); + } + } +} diff --git a/Tests/StressTests/ScenariosStressTests.cs b/Tests/StressTests/ScenariosStressTests.cs new file mode 100644 index 000000000..007cd58b3 --- /dev/null +++ b/Tests/StressTests/ScenariosStressTests.cs @@ -0,0 +1,193 @@ +using System.Diagnostics; +using Terminal.Gui; +using UICatalog; +using UnitTests; +using Xunit.Abstractions; + +namespace StressTests; + +public class ScenariosStressTests : TestsAllViews +{ + public ScenariosStressTests (ITestOutputHelper output) + { +#if DEBUG_IDISPOSABLE + View.DebugIDisposable = true; + View.Instances.Clear (); +#endif + _output = output; + } + + private readonly ITestOutputHelper _output; + + private object? _timeoutLock; + + /// + /// + /// This runs through all Scenarios defined in UI Catalog, calling Init, Setup, and Run and measuring the perf of + /// each. + /// + /// + [Theory] + [MemberData (nameof (AllScenarioTypes))] + public void All_Scenarios_Benchmark (Type scenarioType) + { + Assert.Null (_timeoutLock); + _timeoutLock = new (); + + // Disable any UIConfig settings + ConfigLocations savedConfigLocations = ConfigurationManager.Locations; + ConfigurationManager.Locations = ConfigLocations.Default; + + // If a previous test failed, this will ensure that the Application is in a clean state + Application.ResetState (true); + + uint maxIterations = 1000; + uint abortTime = 2000; + object? timeout = null; + + var iterationCount = 0; + var clearedContentCount = 0; + var refreshedCount = 0; + var updatedCount = 0; + var drawCompleteCount = 0; + + var addedCount = 0; + var laidOutCount = 0; + + _output.WriteLine ($"Running Scenario '{scenarioType}'"); + var scenario = (Scenario)Activator.CreateInstance (scenarioType)!; + + Stopwatch? stopwatch = null; + + Application.InitializedChanged += OnApplicationOnInitializedChanged; + Application.ForceDriver = "FakeDriver"; + scenario!.Main (); + scenario.Dispose (); + scenario = null; + Application.ForceDriver = string.Empty; + Application.InitializedChanged -= OnApplicationOnInitializedChanged; + + lock (_timeoutLock) + { + if (timeout is { }) + { + timeout = null; + } + } + + lock (_timeoutLock) + { + _timeoutLock = null; + } + + _output.WriteLine ($"Scenario {scenarioType}"); + _output.WriteLine ($" took {stopwatch!.ElapsedMilliseconds} ms to run."); + _output.WriteLine ($" called Driver.ClearContents {clearedContentCount} times."); + _output.WriteLine ($" called Driver.Refresh {refreshedCount} times."); + _output.WriteLine ($" which updated the screen {updatedCount} times."); + _output.WriteLine ($" called View.Draw {drawCompleteCount} times."); + _output.WriteLine ($" added {addedCount} views."); + _output.WriteLine ($" called View.LayoutComplete {laidOutCount} times."); + + // Restore the configuration locations + ConfigurationManager.Locations = savedConfigLocations; + ConfigurationManager.Reset (); + + return; + + void OnApplicationOnInitializedChanged (object? s, EventArgs a) + { + if (a.CurrentValue) + { + lock (_timeoutLock) + { + timeout = Application.AddTimeout (TimeSpan.FromMilliseconds (abortTime), ForceCloseCallback); + } + + Application.Iteration += OnApplicationOnIteration; + Application.Driver!.ClearedContents += (sender, args) => clearedContentCount++; + + if (Application.Driver is ConsoleDriver cd) + { + cd!.Refreshed += (sender, args) => + { + refreshedCount++; + + if (args.CurrentValue) + { + updatedCount++; + } + }; + } + + Application.NotifyNewRunState += OnApplicationNotifyNewRunState; + + stopwatch = Stopwatch.StartNew (); + } + else + { + Application.NotifyNewRunState -= OnApplicationNotifyNewRunState; + Application.Iteration -= OnApplicationOnIteration; + stopwatch!.Stop (); + } + + _output.WriteLine ($"Initialized == {a.CurrentValue}"); + } + + void OnApplicationOnIteration (object? s, IterationEventArgs a) + { + iterationCount++; + + if (iterationCount > maxIterations) + { + // Press QuitKey + _output.WriteLine ("Attempting to quit scenario with RequestStop"); + Application.RequestStop (); + } + } + + void OnApplicationNotifyNewRunState (object? sender, RunStateEventArgs e) + { + // Get a list of all subviews under Application.Top (and their subviews, etc.) + // and subscribe to their DrawComplete event + void SubscribeAllSubviews (View view) + { + view.DrawComplete += (s, a) => drawCompleteCount++; + view.SubviewsLaidOut += (s, a) => laidOutCount++; + view.Added += (s, a) => addedCount++; + + foreach (View subview in view.Subviews) + { + SubscribeAllSubviews (subview); + } + } + + SubscribeAllSubviews (Application.Top!); + } + + // If the scenario doesn't close within the abort time, this will force it to quit + bool ForceCloseCallback () + { + lock (_timeoutLock) + { + if (timeout is { }) + { + timeout = null; + } + } + + _output.WriteLine ( + $"'{scenario!.GetName ()}' failed to Quit with {Application.QuitKey} after {abortTime}ms and {iterationCount} iterations. Force quit."); + + Application.RequestStop (); + + return false; + } + } + + public static IEnumerable AllScenarioTypes => + typeof (Scenario).Assembly + .GetTypes () + .Where (type => type.IsClass && !type.IsAbstract && type.IsSubclassOf (typeof (Scenario))) + .Select (type => new object [] { type }); +} diff --git a/Tests/StressTests/StressTests.csproj b/Tests/StressTests/StressTests.csproj new file mode 100644 index 000000000..62efd367f --- /dev/null +++ b/Tests/StressTests/StressTests.csproj @@ -0,0 +1,44 @@ + + + + enable + + false + true + $(DefineConstants);JETBRAINS_ANNOTATIONS;CONTRACTS_FULL + portable + enable + true + true + + + + true + $(DefineConstants);DEBUG_IDISPOSABLE + + + true + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + diff --git a/Tests/StressTests/xunit.runner.json b/Tests/StressTests/xunit.runner.json new file mode 100644 index 000000000..c096d4186 --- /dev/null +++ b/Tests/StressTests/xunit.runner.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", + "parallelizeTestCollections": false, + "parallelizeAssembly": false, + "stopOnFail": false +} \ No newline at end of file diff --git a/UnitTests/Application/Application.NavigationTests.cs b/Tests/UnitTests/Application/Application.NavigationTests.cs similarity index 100% rename from UnitTests/Application/Application.NavigationTests.cs rename to Tests/UnitTests/Application/Application.NavigationTests.cs diff --git a/UnitTests/Application/ApplicationScreenTests.cs b/Tests/UnitTests/Application/ApplicationScreenTests.cs similarity index 79% rename from UnitTests/Application/ApplicationScreenTests.cs rename to Tests/UnitTests/Application/ApplicationScreenTests.cs index 0abdeacbc..c13165ff8 100644 --- a/UnitTests/Application/ApplicationScreenTests.cs +++ b/Tests/UnitTests/Application/ApplicationScreenTests.cs @@ -2,8 +2,14 @@ namespace Terminal.Gui.ApplicationTests; -public class ApplicationScreenTests (ITestOutputHelper output) +public class ApplicationScreenTests { + public ApplicationScreenTests (ITestOutputHelper output) + { + ConsoleDriver.RunningUnitTests = true; + } + + [Fact] public void ClearScreenNextIteration_Resets_To_False_After_LayoutAndDraw () { @@ -27,12 +33,13 @@ public class ApplicationScreenTests (ITestOutputHelper output) { // Arrange Application.Init (new FakeDriver ()); - Application.Top = new Toplevel (); + Application.Top = new (); Application.TopLevels.Push (Application.Top); - int clearedContentsRaised = 0; + var clearedContentsRaised = 0; - Application.Driver!.ClearedContents += (e, a) => clearedContentsRaised++; + + Application.Driver!.ClearedContents += OnClearedContents; // Act Application.LayoutAndDraw (); @@ -64,9 +71,13 @@ public class ApplicationScreenTests (ITestOutputHelper output) // Cleanup Application.Top.Dispose (); Application.Top = null; + Application.Driver!.ClearedContents -= OnClearedContents; Application.Shutdown (); Application.ResetState (true); + return; + + void OnClearedContents (object e, EventArgs a) { clearedContentsRaised++; } } [Fact] @@ -80,7 +91,7 @@ public class ApplicationScreenTests (ITestOutputHelper output) Assert.Equal (new (0, 0, 25, 25), Application.Screen); // Act - (((FakeDriver)Application.Driver)!).SetBufferSize (120, 30); + ((FakeDriver)Application.Driver)!.SetBufferSize (120, 30); // Assert Assert.Equal (new (0, 0, 120, 30), Application.Screen); diff --git a/UnitTests/Application/ApplicationTests.cs b/Tests/UnitTests/Application/ApplicationTests.cs similarity index 93% rename from UnitTests/Application/ApplicationTests.cs rename to Tests/UnitTests/Application/ApplicationTests.cs index 53838d09a..c98bbe394 100644 --- a/UnitTests/Application/ApplicationTests.cs +++ b/Tests/UnitTests/Application/ApplicationTests.cs @@ -1,4 +1,5 @@ using System.Diagnostics; +using UnitTests; using Xunit.Abstractions; using static Terminal.Gui.ConfigurationManager; @@ -15,6 +16,7 @@ public class ApplicationTests Locations = ConfigLocations.Default; #if DEBUG_IDISPOSABLE + View.DebugIDisposable = true; View.Instances.Clear (); RunState.Instances.Clear (); #endif @@ -906,53 +908,6 @@ public class ApplicationTests Assert.Equal (3, count); } - // TODO: All Toplevel layout tests should be moved to ToplevelTests.cs - [Fact (Skip = "#2491 - Changing focus should cause NeedsDraw = true, so bogus test?")] - public void Run_Toplevel_With_Modal_View_Does_Not_Refresh_If_Not_Dirty () - { - Init (); - var count = 0; - - // Don't use Dialog here as it has more layout logic. Use Window instead. - Dialog d = null; - Toplevel top = new (); - top.DrawingContent += (s, a) => count++; - int iteration = -1; - - Application.Iteration += (s, a) => - { - iteration++; - - if (iteration == 0) - { - // TODO: Don't use Dialog here as it has more layout logic. Use Window instead. - d = new (); - d.DrawingContent += (s, a) => count++; - Application.Run (d); - } - else if (iteration < 3) - { - Application.RaiseMouseEvent (new () { Flags = MouseFlags.ReportMousePosition }); - Assert.False (top.NeedsDraw); - Assert.False (top.SubViewNeedsDraw); - Assert.False (top.NeedsLayout); - Assert.False (d.NeedsDraw); - Assert.False (d.SubViewNeedsDraw); - Assert.False (d.NeedsLayout); - } - else - { - Application.RequestStop (); - } - }; - Application.Run (top); - top.Dispose (); - Application.Shutdown (); - - // 1 - First top load, 1 - Dialog load, 1 - Dialog unload, Total - 3. - Assert.Equal (3, count); - } - // TODO: All Toplevel layout tests should be moved to ToplevelTests.cs [Fact] public void Run_A_Modal_Toplevel_Refresh_Background_On_Moving () diff --git a/UnitTests/Application/CursorTests.cs b/Tests/UnitTests/Application/CursorTests.cs similarity index 98% rename from UnitTests/Application/CursorTests.cs rename to Tests/UnitTests/Application/CursorTests.cs index 7454e1501..74bf21396 100644 --- a/UnitTests/Application/CursorTests.cs +++ b/Tests/UnitTests/Application/CursorTests.cs @@ -1,4 +1,5 @@ -using Xunit.Abstractions; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ApplicationTests; diff --git a/UnitTests/Application/KeyboardTests.cs b/Tests/UnitTests/Application/KeyboardTests.cs similarity index 84% rename from UnitTests/Application/KeyboardTests.cs rename to Tests/UnitTests/Application/KeyboardTests.cs index 970d6a5b8..c1e1c9f65 100644 --- a/UnitTests/Application/KeyboardTests.cs +++ b/Tests/UnitTests/Application/KeyboardTests.cs @@ -1,4 +1,5 @@ -using Xunit.Abstractions; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ApplicationTests; @@ -20,119 +21,6 @@ public class KeyboardTests private object _timeoutLock; - [Fact (Skip = "No longer valid test.")] - [AutoInitShutdown] - public void EnsuresTopOnFront_CanFocus_False_By_Keyboard () - { - Toplevel top = new (); - - var win = new Window - { - Title = "win", - X = 0, - Y = 0, - Width = 20, - Height = 10 - }; - var tf = new TextField { Width = 10 }; - win.Add (tf); - - var win2 = new Window - { - Title = "win2", - X = 22, - Y = 0, - Width = 20, - Height = 10 - }; - var tf2 = new TextField { Width = 10 }; - win2.Add (tf2); - top.Add (win, win2); - - Application.Begin (top); - - Assert.True (win.CanFocus); - Assert.True (win.HasFocus); - Assert.True (win2.CanFocus); - Assert.False (win2.HasFocus); - Assert.Equal ("win", ((Window)top.Subviews [^1]).Title); - - win.CanFocus = false; - Assert.False (win.CanFocus); - Assert.False (win.HasFocus); - Assert.True (win2.CanFocus); - Assert.True (win2.HasFocus); - Assert.Equal ("win2", ((Window)top.Subviews [^1]).Title); - - Application.RaiseKeyDownEvent (Key.F6); - Assert.True (win2.CanFocus); - Assert.False (win.HasFocus); - Assert.True (win2.CanFocus); - Assert.True (win2.HasFocus); - Assert.Equal ("win2", ((Window)top.Subviews [^1]).Title); - - Application.RaiseKeyDownEvent (Key.F6); - Assert.False (win.CanFocus); - Assert.False (win.HasFocus); - Assert.True (win2.CanFocus); - Assert.True (win2.HasFocus); - Assert.Equal ("win2", ((Window)top.Subviews [^1]).Title); - top.Dispose (); - } - - [Fact (Skip = "No longer valid test.")] - [AutoInitShutdown] - public void EnsuresTopOnFront_CanFocus_True_By_Keyboard () - { - Toplevel top = new (); - - var win = new Window - { - Title = "win", - X = 0, - Y = 0, - Width = 20, - Height = 10 - }; - var tf = new TextField { Width = 10 }; - win.Add (tf); - - var win2 = new Window - { - Title = "win2", - X = 22, - Y = 0, - Width = 20, - Height = 10 - }; - var tf2 = new TextField { Width = 10 }; - win2.Add (tf2); - top.Add (win, win2); - - Application.Begin (top); - - Assert.True (win.CanFocus); - Assert.True (win.HasFocus); - Assert.True (win2.CanFocus); - Assert.False (win2.HasFocus); - Assert.Equal ("win", ((Window)top.Subviews [^1]).Title); - - Application.RaiseKeyDownEvent (Key.F6); - Assert.True (win.CanFocus); - Assert.False (win.HasFocus); - Assert.True (win2.CanFocus); - Assert.True (win2.HasFocus); - Assert.Equal ("win2", ((Window)top.Subviews [^1]).Title); - - Application.RaiseKeyDownEvent (Key.F6); - Assert.True (win.CanFocus); - Assert.True (win.HasFocus); - Assert.True (win2.CanFocus); - Assert.False (win2.HasFocus); - Assert.Equal ("win", ((Window)top.Subviews [^1]).Title); - top.Dispose (); - } - [Fact] [AutoInitShutdown] public void KeyBindings_Add_Adds () @@ -145,7 +33,7 @@ public class KeyboardTests Assert.True (Application.KeyBindings.TryGet (Key.B, out binding)); Assert.Null (binding.Target); } - + [Fact] [AutoInitShutdown] public void KeyBindings_Remove_Removes () @@ -161,7 +49,7 @@ public class KeyboardTests [Fact] public void KeyBindings_OnKeyDown () { - Application.Top = new Toplevel (); + Application.Top = new (); var view = new ScopedKeyBindingView (); var keyWasHandled = false; view.KeyDownNotHandled += (s, e) => keyWasHandled = true; diff --git a/UnitTests/Application/MainLoopTests.cs b/Tests/UnitTests/Application/MainLoopTests.cs similarity index 86% rename from UnitTests/Application/MainLoopTests.cs rename to Tests/UnitTests/Application/MainLoopTests.cs index 820414274..49bd831ab 100644 --- a/UnitTests/Application/MainLoopTests.cs +++ b/Tests/UnitTests/Application/MainLoopTests.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using System.IO; // Alias Console to MockConsole so we don't accidentally use Console @@ -8,7 +7,6 @@ namespace Terminal.Gui.ApplicationTests; /// Tests MainLoop using the FakeMainLoop. public class MainLoopTests { - private static readonly ManualResetEventSlim _wakeUp = new (false); private static Button btn; private static string cancel; private static string clickMe; @@ -22,28 +20,11 @@ public class MainLoopTests // - wait = false // TODO: Add IMainLoop tests - private static volatile int tbCounter; private static int three; private static int total; private static int two; private static int zero; - public static IEnumerable TestAddIdle - { - get - { - // Goes fine - Action a1 = StartWindow; - - yield return new object [] { a1, "Click Me", "Cancel", "Pew Pew", 0, 1, 2, 3, 4 }; - - // Also goes fine - Action a2 = () => Application.Invoke (StartWindow); - - yield return new object [] { a2, "Click Me", "Cancel", "Pew Pew", 0, 1, 2, 3, 4 }; - } - } - // See Also ConsoleDRivers/MainLoopDriverTests.cs for tests of the MainLoopDriver // Idle Handler tests @@ -60,7 +41,7 @@ public class MainLoopTests Assert.Equal (2, ml.TimedEvents.IdleHandlers.Count); Assert.Equal (fnTrue, ml.TimedEvents.IdleHandlers [0]); - Assert.NotEqual (fnFalse, ml.TimedEvents.IdleHandlers[0]); + Assert.NotEqual (fnFalse, ml.TimedEvents.IdleHandlers [0]); Assert.True (ml.TimedEvents.RemoveIdle (fnTrue)); Assert.Single (ml.TimedEvents.IdleHandlers); @@ -82,15 +63,15 @@ public class MainLoopTests ml.AddIdle (fnTrue); Assert.Equal (2, ml.TimedEvents.IdleHandlers.Count); - Assert.Equal (fnTrue, ml.TimedEvents.IdleHandlers[0]); - Assert.True (ml.TimedEvents.IdleHandlers[0] ()); - Assert.Equal (fnTrue, ml.TimedEvents.IdleHandlers[1]); - Assert.True (ml.TimedEvents.IdleHandlers[1] ()); + Assert.Equal (fnTrue, ml.TimedEvents.IdleHandlers [0]); + Assert.True (ml.TimedEvents.IdleHandlers [0] ()); + Assert.Equal (fnTrue, ml.TimedEvents.IdleHandlers [1]); + Assert.True (ml.TimedEvents.IdleHandlers [1] ()); Assert.True (ml.TimedEvents.RemoveIdle (fnTrue)); Assert.Single (ml.TimedEvents.IdleHandlers); - Assert.Equal (fnTrue, ml.TimedEvents.IdleHandlers[0]); - Assert.NotEqual (fnFalse, ml.TimedEvents.IdleHandlers[0]); + Assert.Equal (fnTrue, ml.TimedEvents.IdleHandlers [0]); + Assert.NotEqual (fnFalse, ml.TimedEvents.IdleHandlers [0]); Assert.True (ml.TimedEvents.RemoveIdle (fnTrue)); Assert.Empty (ml.TimedEvents.IdleHandlers); @@ -298,10 +279,10 @@ public class MainLoopTests TimeoutEventArgs args = null; ml.TimedEvents.TimeoutAdded += (s, e) => - { - sender = s; - args = e; - }; + { + sender = s; + args = e; + }; object token = ml.TimedEvents.AddTimeout (TimeSpan.FromMilliseconds (ms), callback); @@ -616,41 +597,10 @@ public class MainLoopTests Assert.Empty (mainloop.TimedEvents.IdleHandlers); Assert.NotNull ( - new Timeout { Span = new TimeSpan (), Callback = () => true } + new Timeout { Span = new (), Callback = () => true } ); } - [Theory] - [InlineData (typeof (FakeDriver))] - //[InlineData (typeof (NetDriver))] // BUGBUG: NetDriver never exits in this test - - //[InlineData (typeof (ANSIDriver))] - //[InlineData (typeof (WindowsDriver))] // BUGBUG: NetDriver never exits in this test - //[InlineData (typeof (CursesDriver))] // BUGBUG: CursesDriver never exits in this test - public async Task InvokeLeakTest (Type driverType) - { - Application.Init (driverName: driverType.Name); - Random r = new (); - TextField tf = new (); - var top = new Toplevel (); - top.Add (tf); - - const int numPasses = 2; - const int numIncrements = 500; - const int pollMs = 2500; - - Task task = Task.Run (() => RunTest (r, tf, numPasses, numIncrements, pollMs)); - - // blocks here until the RequestStop is processed at the end of the test - Application.Run (top); - - await task; // Propagate exception if any occurred - - Assert.Equal (numIncrements * numPasses, tbCounter); - top.Dispose (); - Application.Shutdown (); - } - [Theory] [MemberData (nameof (TestAddIdle))] public void Mainloop_Invoke_Or_AddIdle_Can_Be_Used_For_Events_Or_Actions ( @@ -666,7 +616,7 @@ public class MainLoopTests ) { // TODO: Expand this test to test all drivers - Application.Init (new FakeDriver()); + Application.Init (new FakeDriver ()); total = 0; btn = null; @@ -779,28 +729,20 @@ public class MainLoopTests Assert.Equal (10, functionCalled); } - private static void Launch (Random r, TextField tf, int target) + public static IEnumerable TestAddIdle { - Task.Run ( - () => - { - Thread.Sleep (r.Next (2, 4)); + get + { + // Goes fine + Action a1 = StartWindow; - Application.Invoke ( - () => - { - tf.Text = $"index{r.Next ()}"; - Interlocked.Increment (ref tbCounter); + yield return new object [] { a1, "Click Me", "Cancel", "Pew Pew", 0, 1, 2, 3, 4 }; - if (target == tbCounter) - { - // On last increment wake up the check - _wakeUp.Set (); - } - } - ); - } - ); + // Also goes fine + Action a2 = () => Application.Invoke (StartWindow); + + yield return new object [] { a2, "Click Me", "Cancel", "Pew Pew", 0, 1, 2, 3, 4 }; + } } private static async void RunAsyncTest (object sender, EventArgs e) @@ -862,40 +804,6 @@ public class MainLoopTests ); } - private static void RunTest (Random r, TextField tf, int numPasses, int numIncrements, int pollMs) - { - for (var j = 0; j < numPasses; j++) - { - _wakeUp.Reset (); - - for (var i = 0; i < numIncrements; i++) - { - Launch (r, tf, (j + 1) * numIncrements); - } - - while (tbCounter != (j + 1) * numIncrements) // Wait for tbCounter to reach expected value - { - int tbNow = tbCounter; - _wakeUp.Wait (pollMs); - - if (tbCounter == tbNow) - { - // No change after wait: Idle handlers added via Application.Invoke have gone missing - Application.Invoke (() => Application.RequestStop ()); - - throw new TimeoutException ( - $"Timeout: Increment lost. tbCounter ({tbCounter}) didn't " - + $"change after waiting {pollMs} ms. Failed to reach {(j + 1) * numIncrements} on pass {j + 1}" - ); - } - } - - ; - } - - Application.Invoke (() => Application.RequestStop ()); - } - private static void SetReadyToRun () { Thread.Sleep (100); @@ -916,7 +824,7 @@ public class MainLoopTests { var startWindow = new Window { Modal = true }; - btn = new Button { Text = "Click Me" }; + btn = new() { Text = "Click Me" }; btn.Accepting += RunAsyncTest; @@ -937,8 +845,8 @@ public class MainLoopTests private class MillisecondTolerance : IEqualityComparer { - private readonly int _tolerance; public MillisecondTolerance (int tolerance) { _tolerance = tolerance; } + private readonly int _tolerance; public bool Equals (TimeSpan x, TimeSpan y) { return Math.Abs (x.Milliseconds - y.Milliseconds) <= _tolerance; } public int GetHashCode (TimeSpan obj) { return obj.GetHashCode (); } } diff --git a/UnitTests/Application/Mouse/ApplicationMouseEnterLeaveTests.cs b/Tests/UnitTests/Application/Mouse/ApplicationMouseEnterLeaveTests.cs similarity index 100% rename from UnitTests/Application/Mouse/ApplicationMouseEnterLeaveTests.cs rename to Tests/UnitTests/Application/Mouse/ApplicationMouseEnterLeaveTests.cs diff --git a/UnitTests/Application/Mouse/ApplicationMouseTests.cs b/Tests/UnitTests/Application/Mouse/ApplicationMouseTests.cs similarity index 99% rename from UnitTests/Application/Mouse/ApplicationMouseTests.cs rename to Tests/UnitTests/Application/Mouse/ApplicationMouseTests.cs index b180a768c..3ae825d94 100644 --- a/UnitTests/Application/Mouse/ApplicationMouseTests.cs +++ b/Tests/UnitTests/Application/Mouse/ApplicationMouseTests.cs @@ -1,4 +1,5 @@ -using Xunit.Abstractions; +using UnitTests; +using Xunit.Abstractions; // Alias Console to MockConsole so we don't accidentally use Console diff --git a/UnitTests/Application/RunStateTests.cs b/Tests/UnitTests/Application/RunStateTests.cs similarity index 98% rename from UnitTests/Application/RunStateTests.cs rename to Tests/UnitTests/Application/RunStateTests.cs index 5b8a53c58..35e318788 100644 --- a/UnitTests/Application/RunStateTests.cs +++ b/Tests/UnitTests/Application/RunStateTests.cs @@ -8,6 +8,8 @@ public class RunStateTests public RunStateTests () { #if DEBUG_IDISPOSABLE + View.DebugIDisposable = true; + View.Instances.Clear (); RunState.Instances.Clear (); #endif diff --git a/UnitTests/Application/StackExtensionsTests.cs b/Tests/UnitTests/Application/StackExtensionsTests.cs similarity index 100% rename from UnitTests/Application/StackExtensionsTests.cs rename to Tests/UnitTests/Application/StackExtensionsTests.cs diff --git a/UnitTests/Application/SynchronizatonContextTests.cs b/Tests/UnitTests/Application/SynchronizatonContextTests.cs similarity index 99% rename from UnitTests/Application/SynchronizatonContextTests.cs rename to Tests/UnitTests/Application/SynchronizatonContextTests.cs index 8aeb36ceb..0e878983b 100644 --- a/UnitTests/Application/SynchronizatonContextTests.cs +++ b/Tests/UnitTests/Application/SynchronizatonContextTests.cs @@ -1,5 +1,7 @@ // Alias Console to MockConsole so we don't accidentally use Console +using UnitTests; + namespace Terminal.Gui.ApplicationTests; public class SyncrhonizationContextTests diff --git a/UnitTests/AssemblyInfo.cs b/Tests/UnitTests/AssemblyInfo.cs similarity index 100% rename from UnitTests/AssemblyInfo.cs rename to Tests/UnitTests/AssemblyInfo.cs diff --git a/Tests/UnitTests/AutoInitShutdownAttribute.cs b/Tests/UnitTests/AutoInitShutdownAttribute.cs new file mode 100644 index 000000000..c3b35a120 --- /dev/null +++ b/Tests/UnitTests/AutoInitShutdownAttribute.cs @@ -0,0 +1,140 @@ +using System.Diagnostics; +using System.Globalization; +using System.Reflection; +using Xunit.Sdk; + +namespace UnitTests; + +/// +/// Enables test functions annotated with the [AutoInitShutdown] attribute to +/// automatically call Application.Init at start of the test and Application.Shutdown after the +/// test exits. +/// This is necessary because a) Application is a singleton and Init/Shutdown must be called +/// as a pair, and b) all unit test functions should be atomic.. +/// +[AttributeUsage (AttributeTargets.Class | AttributeTargets.Method)] +public class AutoInitShutdownAttribute : BeforeAfterTestAttribute +{ + /// + /// Initializes a [AutoInitShutdown] attribute, which determines if/how Application.Init and Application.Shutdown + /// are automatically called Before/After a test runs. + /// + /// If true, Application.Init will be called Before the test runs. + /// + /// Determines which IConsoleDriver (FakeDriver, WindowsDriver, CursesDriver, NetDriver) + /// will be used when Application.Init is called. If null FakeDriver will be used. Only valid if + /// is true. + /// + /// + /// If true, will force the use of . Only valid if + /// == and is true. + /// + /// + /// Only valid if is true. Only + /// valid if == and is true. + /// + /// + /// Only valid if is true. Only valid if + /// == and is true. + /// + /// Determines what config file locations will load from. + /// If true and is true, the test will fail. + public AutoInitShutdownAttribute ( + bool autoInit = true, + Type consoleDriverType = null, + bool useFakeClipboard = true, + bool fakeClipboardAlwaysThrowsNotSupportedException = false, + bool fakeClipboardIsSupportedAlwaysTrue = false, + ConfigLocations configLocation = ConfigLocations.Default, // DefaultOnly is the default for tests + bool verifyShutdown = false + ) + { + AutoInit = autoInit; + CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.GetCultureInfo ("en-US"); + _driverType = consoleDriverType ?? typeof (FakeDriver); + FakeDriver.FakeBehaviors.UseFakeClipboard = useFakeClipboard; + + FakeDriver.FakeBehaviors.FakeClipboardAlwaysThrowsNotSupportedException = + fakeClipboardAlwaysThrowsNotSupportedException; + FakeDriver.FakeBehaviors.FakeClipboardIsSupportedAlwaysFalse = fakeClipboardIsSupportedAlwaysTrue; + ConfigurationManager.Locations = configLocation; + _verifyShutdown = verifyShutdown; + } + + private readonly bool _verifyShutdown; + private readonly Type _driverType; + + public override void After (MethodInfo methodUnderTest) + { + Debug.WriteLine ($"After: {methodUnderTest.Name}"); + + // Turn off diagnostic flags in case some test left them on + View.Diagnostics = ViewDiagnosticFlags.Off; + + if (AutoInit) + { + // try + { + if (!_verifyShutdown) + { + Application.ResetState (ignoreDisposed: true); + } + + Application.Shutdown (); +#if DEBUG_IDISPOSABLE + if (View.Instances.Count == 0) + { + Assert.Empty (View.Instances); + } + else + { + View.Instances.Clear (); + } +#endif + } + //catch (Exception e) + //{ + // Assert.Fail ($"Application.Shutdown threw an exception after the test exited: {e}"); + //} + //finally + { +#if DEBUG_IDISPOSABLE + View.Instances.Clear (); + Application.ResetState (true); +#endif + } + } + + // Reset to defaults + ConfigurationManager.Locations = ConfigLocations.Default; + ConfigurationManager.Reset (); + + // Enable subsequent tests that call Init to get all config files (the default). + //Locations = ConfigLocations.All; + } + + public override void Before (MethodInfo methodUnderTest) + { + Debug.WriteLine ($"Before: {methodUnderTest.Name}"); + + if (AutoInit) + { +#if DEBUG_IDISPOSABLE + View.DebugIDisposable = true; + + // Clear out any lingering Responder instances from previous tests + if (View.Instances.Count == 0) + { + Assert.Empty (View.Instances); + } + else + { + View.Instances.Clear (); + } +#endif + Application.Init ((IConsoleDriver)Activator.CreateInstance (_driverType)); + } + } + + private bool AutoInit { get; } +} \ No newline at end of file diff --git a/UnitTests/Clipboard/ClipboardTests.cs b/Tests/UnitTests/Clipboard/ClipboardTests.cs similarity index 100% rename from UnitTests/Clipboard/ClipboardTests.cs rename to Tests/UnitTests/Clipboard/ClipboardTests.cs diff --git a/UnitTests/Configuration/AppScopeTests.cs b/Tests/UnitTests/Configuration/AppScopeTests.cs similarity index 99% rename from UnitTests/Configuration/AppScopeTests.cs rename to Tests/UnitTests/Configuration/AppScopeTests.cs index d09e74f1d..4460681da 100644 --- a/UnitTests/Configuration/AppScopeTests.cs +++ b/Tests/UnitTests/Configuration/AppScopeTests.cs @@ -1,4 +1,5 @@ using System.Text.Json; +using UnitTests; using static Terminal.Gui.ConfigurationManager; namespace Terminal.Gui.ConfigurationTests; diff --git a/UnitTests/Configuration/AttributeJsonConverterTests.cs b/Tests/UnitTests/Configuration/AttributeJsonConverterTests.cs similarity index 98% rename from UnitTests/Configuration/AttributeJsonConverterTests.cs rename to Tests/UnitTests/Configuration/AttributeJsonConverterTests.cs index 8487e0271..81e5b6fe2 100644 --- a/UnitTests/Configuration/AttributeJsonConverterTests.cs +++ b/Tests/UnitTests/Configuration/AttributeJsonConverterTests.cs @@ -1,4 +1,5 @@ using System.Text.Json; +using UnitTests; namespace Terminal.Gui.ConfigurationTests; diff --git a/UnitTests/Configuration/ColorJsonConverterTests.cs b/Tests/UnitTests/Configuration/ColorJsonConverterTests.cs similarity index 100% rename from UnitTests/Configuration/ColorJsonConverterTests.cs rename to Tests/UnitTests/Configuration/ColorJsonConverterTests.cs diff --git a/UnitTests/Configuration/ColorSchemeJsonConverterTests.cs b/Tests/UnitTests/Configuration/ColorSchemeJsonConverterTests.cs similarity index 99% rename from UnitTests/Configuration/ColorSchemeJsonConverterTests.cs rename to Tests/UnitTests/Configuration/ColorSchemeJsonConverterTests.cs index 2fd50838b..9ab3b06f9 100644 --- a/UnitTests/Configuration/ColorSchemeJsonConverterTests.cs +++ b/Tests/UnitTests/Configuration/ColorSchemeJsonConverterTests.cs @@ -1,4 +1,5 @@ using System.Text.Json; +using UnitTests; namespace Terminal.Gui.ConfigurationTests; diff --git a/UnitTests/Configuration/ConfigPropertyTests.cs b/Tests/UnitTests/Configuration/ConfigPropertyTests.cs similarity index 100% rename from UnitTests/Configuration/ConfigPropertyTests.cs rename to Tests/UnitTests/Configuration/ConfigPropertyTests.cs diff --git a/UnitTests/Configuration/ConfigurationMangerTests.cs b/Tests/UnitTests/Configuration/ConfigurationMangerTests.cs similarity index 99% rename from UnitTests/Configuration/ConfigurationMangerTests.cs rename to Tests/UnitTests/Configuration/ConfigurationMangerTests.cs index 0ab76e4c2..96239c1f6 100644 --- a/UnitTests/Configuration/ConfigurationMangerTests.cs +++ b/Tests/UnitTests/Configuration/ConfigurationMangerTests.cs @@ -1,6 +1,7 @@ using System.Diagnostics; using System.Reflection; using System.Text.Json; +using UnitTests; using Xunit.Abstractions; using static Terminal.Gui.ConfigurationManager; #pragma warning disable IDE1006 diff --git a/UnitTests/Configuration/GlyphTests.cs b/Tests/UnitTests/Configuration/GlyphTests.cs similarity index 100% rename from UnitTests/Configuration/GlyphTests.cs rename to Tests/UnitTests/Configuration/GlyphTests.cs diff --git a/UnitTests/Configuration/KeyCodeJsonConverterTests.cs b/Tests/UnitTests/Configuration/KeyCodeJsonConverterTests.cs similarity index 100% rename from UnitTests/Configuration/KeyCodeJsonConverterTests.cs rename to Tests/UnitTests/Configuration/KeyCodeJsonConverterTests.cs diff --git a/UnitTests/Configuration/KeyJsonConverterTests.cs b/Tests/UnitTests/Configuration/KeyJsonConverterTests.cs similarity index 100% rename from UnitTests/Configuration/KeyJsonConverterTests.cs rename to Tests/UnitTests/Configuration/KeyJsonConverterTests.cs diff --git a/UnitTests/Configuration/RuneJsonConverterTests.cs b/Tests/UnitTests/Configuration/RuneJsonConverterTests.cs similarity index 100% rename from UnitTests/Configuration/RuneJsonConverterTests.cs rename to Tests/UnitTests/Configuration/RuneJsonConverterTests.cs diff --git a/UnitTests/Configuration/SerializableConfigurationPropertyTests.cs b/Tests/UnitTests/Configuration/SerializableConfigurationPropertyTests.cs similarity index 100% rename from UnitTests/Configuration/SerializableConfigurationPropertyTests.cs rename to Tests/UnitTests/Configuration/SerializableConfigurationPropertyTests.cs diff --git a/UnitTests/Configuration/SettingsScopeTests.cs b/Tests/UnitTests/Configuration/SettingsScopeTests.cs similarity index 98% rename from UnitTests/Configuration/SettingsScopeTests.cs rename to Tests/UnitTests/Configuration/SettingsScopeTests.cs index 805a01fbd..349b6f31a 100644 --- a/UnitTests/Configuration/SettingsScopeTests.cs +++ b/Tests/UnitTests/Configuration/SettingsScopeTests.cs @@ -1,4 +1,5 @@ -using static Terminal.Gui.ConfigurationManager; +using UnitTests; +using static Terminal.Gui.ConfigurationManager; namespace Terminal.Gui.ConfigurationTests; diff --git a/UnitTests/Configuration/ThemeScopeTests.cs b/Tests/UnitTests/Configuration/ThemeScopeTests.cs similarity index 99% rename from UnitTests/Configuration/ThemeScopeTests.cs rename to Tests/UnitTests/Configuration/ThemeScopeTests.cs index 28477f423..497b2ddea 100644 --- a/UnitTests/Configuration/ThemeScopeTests.cs +++ b/Tests/UnitTests/Configuration/ThemeScopeTests.cs @@ -1,4 +1,5 @@ using System.Text.Json; +using UnitTests; using static Terminal.Gui.ConfigurationManager; namespace Terminal.Gui.ConfigurationTests; diff --git a/UnitTests/Configuration/ThemeTests.cs b/Tests/UnitTests/Configuration/ThemeTests.cs similarity index 99% rename from UnitTests/Configuration/ThemeTests.cs rename to Tests/UnitTests/Configuration/ThemeTests.cs index 70a1b393b..8482b7a0d 100644 --- a/UnitTests/Configuration/ThemeTests.cs +++ b/Tests/UnitTests/Configuration/ThemeTests.cs @@ -1,4 +1,5 @@ using System.Text.Json; +using UnitTests; using static Terminal.Gui.ConfigurationManager; namespace Terminal.Gui.ConfigurationTests; diff --git a/UnitTests/ConsoleDrivers/AddRuneTests.cs b/Tests/UnitTests/ConsoleDrivers/AddRuneTests.cs similarity index 95% rename from UnitTests/ConsoleDrivers/AddRuneTests.cs rename to Tests/UnitTests/ConsoleDrivers/AddRuneTests.cs index 5c753386e..77d4cf758 100644 --- a/UnitTests/ConsoleDrivers/AddRuneTests.cs +++ b/Tests/UnitTests/ConsoleDrivers/AddRuneTests.cs @@ -68,22 +68,22 @@ public class AddRuneTests // var s = "a\u0301\u0300\u0306"; - // TestHelpers.AssertDriverContentsWithFrameAre (@" + // DriverAsserts.AssertDriverContentsWithFrameAre (@" //ắ", output); // tf.Text = "\u1eaf"; // Application.Refresh (); - // TestHelpers.AssertDriverContentsWithFrameAre (@" + // DriverAsserts.AssertDriverContentsWithFrameAre (@" //ắ", output); // tf.Text = "\u0103\u0301"; // Application.Refresh (); - // TestHelpers.AssertDriverContentsWithFrameAre (@" + // DriverAsserts.AssertDriverContentsWithFrameAre (@" //ắ", output); // tf.Text = "\u0061\u0306\u0301"; // Application.Refresh (); - // TestHelpers.AssertDriverContentsWithFrameAre (@" + // DriverAsserts.AssertDriverContentsWithFrameAre (@" //ắ", output); driver.End (); } diff --git a/UnitTests/ConsoleDrivers/AnsiKeyboardParserTests.cs b/Tests/UnitTests/ConsoleDrivers/AnsiKeyboardParserTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/AnsiKeyboardParserTests.cs rename to Tests/UnitTests/ConsoleDrivers/AnsiKeyboardParserTests.cs diff --git a/UnitTests/ConsoleDrivers/AnsiMouseParserTests.cs b/Tests/UnitTests/ConsoleDrivers/AnsiMouseParserTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/AnsiMouseParserTests.cs rename to Tests/UnitTests/ConsoleDrivers/AnsiMouseParserTests.cs diff --git a/UnitTests/ConsoleDrivers/AnsiRequestSchedulerTests.cs b/Tests/UnitTests/ConsoleDrivers/AnsiRequestSchedulerTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/AnsiRequestSchedulerTests.cs rename to Tests/UnitTests/ConsoleDrivers/AnsiRequestSchedulerTests.cs diff --git a/UnitTests/ConsoleDrivers/AnsiResponseParserTests.cs b/Tests/UnitTests/ConsoleDrivers/AnsiResponseParserTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/AnsiResponseParserTests.cs rename to Tests/UnitTests/ConsoleDrivers/AnsiResponseParserTests.cs diff --git a/UnitTests/ConsoleDrivers/ClipRegionTests.cs b/Tests/UnitTests/ConsoleDrivers/ClipRegionTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/ClipRegionTests.cs rename to Tests/UnitTests/ConsoleDrivers/ClipRegionTests.cs diff --git a/UnitTests/ConsoleDrivers/ConsoleDriverTests.cs b/Tests/UnitTests/ConsoleDrivers/ConsoleDriverTests.cs similarity index 98% rename from UnitTests/ConsoleDrivers/ConsoleDriverTests.cs rename to Tests/UnitTests/ConsoleDrivers/ConsoleDriverTests.cs index cd957af48..fbede01b0 100644 --- a/UnitTests/ConsoleDrivers/ConsoleDriverTests.cs +++ b/Tests/UnitTests/ConsoleDrivers/ConsoleDriverTests.cs @@ -256,7 +256,7 @@ public class ConsoleDriverTests //└──────────────────┘ //"; - // var pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + // var pos = DriverAsserts.AssertDriverContentsWithFrameAre (expected, output); // Assert.Equal (new (0, 0, 20, 8), pos); // Assert.True (dlg.ProcessKey (new (Key.Tab))); @@ -273,7 +273,7 @@ public class ConsoleDriverTests //└──────────────────┘ //"; - // pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + // pos = DriverAsserts.AssertDriverContentsWithFrameAre (expected, output); // Assert.Equal (new (0, 0, 20, 8), pos); // win.RequestStop (); diff --git a/UnitTests/ConsoleDrivers/ConsoleKeyMappingTests.cs b/Tests/UnitTests/ConsoleDrivers/ConsoleKeyMappingTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/ConsoleKeyMappingTests.cs rename to Tests/UnitTests/ConsoleDrivers/ConsoleKeyMappingTests.cs diff --git a/UnitTests/ConsoleDrivers/ConsoleScrolllingTests.cs b/Tests/UnitTests/ConsoleDrivers/ConsoleScrolllingTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/ConsoleScrolllingTests.cs rename to Tests/UnitTests/ConsoleDrivers/ConsoleScrolllingTests.cs diff --git a/UnitTests/ConsoleDrivers/ContentsTests.cs b/Tests/UnitTests/ConsoleDrivers/ContentsTests.cs similarity index 91% rename from UnitTests/ConsoleDrivers/ContentsTests.cs rename to Tests/UnitTests/ConsoleDrivers/ContentsTests.cs index d0f2d83ff..577ac2062 100644 --- a/UnitTests/ConsoleDrivers/ContentsTests.cs +++ b/Tests/UnitTests/ConsoleDrivers/ContentsTests.cs @@ -1,4 +1,6 @@ using System.Text; +using UnitTests; +using UnitTests; using Xunit.Abstractions; // Alias Console to MockConsole so we don't accidentally use Console @@ -28,7 +30,7 @@ public class ContentsTests driver.Init (); var expected = "\u0301!"; driver.AddStr ("\u0301!"); // acute accent + exclamation mark - TestHelpers.AssertDriverContentsAre (expected, output, driver); + DriverAssert.AssertDriverContentsAre (expected, output, driver); driver.End (); } @@ -50,7 +52,7 @@ public class ContentsTests var expected = "é"; driver.AddStr (combined); - TestHelpers.AssertDriverContentsAre (expected, output, driver); + DriverAssert.AssertDriverContentsAre (expected, output, driver); // 3 char combine // a + ogonek + acute = ( ą́ ) @@ -60,7 +62,7 @@ public class ContentsTests driver.Move (0, 0); driver.AddStr (combined); - TestHelpers.AssertDriverContentsAre (expected, output, driver); + DriverAssert.AssertDriverContentsAre (expected, output, driver); // e + ogonek + acute = ( ę́́ ) combined = "e" + ogonek + acuteaccent; @@ -68,7 +70,7 @@ public class ContentsTests driver.Move (0, 0); driver.AddStr (combined); - TestHelpers.AssertDriverContentsAre (expected, output, driver); + DriverAssert.AssertDriverContentsAre (expected, output, driver); // i + ogonek + acute = ( į́́́ ) combined = "i" + ogonek + acuteaccent; @@ -76,7 +78,7 @@ public class ContentsTests driver.Move (0, 0); driver.AddStr (combined); - TestHelpers.AssertDriverContentsAre (expected, output, driver); + DriverAssert.AssertDriverContentsAre (expected, output, driver); // u + ogonek + acute = ( ų́́́́ ) combined = "u" + ogonek + acuteaccent; @@ -84,7 +86,7 @@ public class ContentsTests driver.Move (0, 0); driver.AddStr (combined); - TestHelpers.AssertDriverContentsAre (expected, output, driver); + DriverAssert.AssertDriverContentsAre (expected, output, driver); driver.End (); } diff --git a/UnitTests/ConsoleDrivers/DriverColorTests.cs b/Tests/UnitTests/ConsoleDrivers/DriverColorTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/DriverColorTests.cs rename to Tests/UnitTests/ConsoleDrivers/DriverColorTests.cs diff --git a/UnitTests/ConsoleDrivers/KeyCodeTests.cs b/Tests/UnitTests/ConsoleDrivers/KeyCodeTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/KeyCodeTests.cs rename to Tests/UnitTests/ConsoleDrivers/KeyCodeTests.cs diff --git a/UnitTests/ConsoleDrivers/MainLoopDriverTests.cs b/Tests/UnitTests/ConsoleDrivers/MainLoopDriverTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/MainLoopDriverTests.cs rename to Tests/UnitTests/ConsoleDrivers/MainLoopDriverTests.cs diff --git a/UnitTests/ConsoleDrivers/V2/ApplicationV2Tests.cs b/Tests/UnitTests/ConsoleDrivers/V2/ApplicationV2Tests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/V2/ApplicationV2Tests.cs rename to Tests/UnitTests/ConsoleDrivers/V2/ApplicationV2Tests.cs diff --git a/UnitTests/ConsoleDrivers/V2/ConsoleInputTests.cs b/Tests/UnitTests/ConsoleDrivers/V2/ConsoleInputTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/V2/ConsoleInputTests.cs rename to Tests/UnitTests/ConsoleDrivers/V2/ConsoleInputTests.cs diff --git a/UnitTests/ConsoleDrivers/V2/MainLoopCoordinatorTests.cs b/Tests/UnitTests/ConsoleDrivers/V2/MainLoopCoordinatorTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/V2/MainLoopCoordinatorTests.cs rename to Tests/UnitTests/ConsoleDrivers/V2/MainLoopCoordinatorTests.cs diff --git a/UnitTests/ConsoleDrivers/V2/MainLoopTTests.cs b/Tests/UnitTests/ConsoleDrivers/V2/MainLoopTTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/V2/MainLoopTTests.cs rename to Tests/UnitTests/ConsoleDrivers/V2/MainLoopTTests.cs diff --git a/UnitTests/ConsoleDrivers/V2/MouseInterpreterTests.cs b/Tests/UnitTests/ConsoleDrivers/V2/MouseInterpreterTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/V2/MouseInterpreterTests.cs rename to Tests/UnitTests/ConsoleDrivers/V2/MouseInterpreterTests.cs diff --git a/UnitTests/ConsoleDrivers/V2/NetInputProcessorTests.cs b/Tests/UnitTests/ConsoleDrivers/V2/NetInputProcessorTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/V2/NetInputProcessorTests.cs rename to Tests/UnitTests/ConsoleDrivers/V2/NetInputProcessorTests.cs diff --git a/UnitTests/ConsoleDrivers/V2/WindowSizeMonitorTests.cs b/Tests/UnitTests/ConsoleDrivers/V2/WindowSizeMonitorTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/V2/WindowSizeMonitorTests.cs rename to Tests/UnitTests/ConsoleDrivers/V2/WindowSizeMonitorTests.cs diff --git a/UnitTests/ConsoleDrivers/V2/WindowsInputProcessorTests.cs b/Tests/UnitTests/ConsoleDrivers/V2/WindowsInputProcessorTests.cs similarity index 100% rename from UnitTests/ConsoleDrivers/V2/WindowsInputProcessorTests.cs rename to Tests/UnitTests/ConsoleDrivers/V2/WindowsInputProcessorTests.cs diff --git a/UnitTests/Dialogs/DialogTests.cs b/Tests/UnitTests/Dialogs/DialogTests.cs similarity index 92% rename from UnitTests/Dialogs/DialogTests.cs rename to Tests/UnitTests/Dialogs/DialogTests.cs index 9009b41d3..b05859816 100644 --- a/UnitTests/Dialogs/DialogTests.cs +++ b/Tests/UnitTests/Dialogs/DialogTests.cs @@ -1,3 +1,5 @@ +using UnitTests; +using UnitTests; using Xunit.Abstractions; using static Terminal.Gui.Application; @@ -6,7 +8,14 @@ namespace Terminal.Gui.DialogTests; public class DialogTests { private readonly ITestOutputHelper _output; - public DialogTests (ITestOutputHelper output) { _output = output; } + + public DialogTests (ITestOutputHelper output) + { +#if DEBUG_IDISPOSABLE + View.DebugIDisposable = true; +#endif + _output = output; + } [Fact] [AutoInitShutdown] @@ -49,14 +58,14 @@ public class DialogTests RunIteration (ref runstate); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); // Now add a second button buttonRow = $"{Glyphs.VLine} {btn1} {btn2} {Glyphs.VLine}"; dlg.AddButton (new () { Text = btn2Text }); RunIteration (ref runstate); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -77,13 +86,13 @@ public class DialogTests RunIteration (ref runstate); buttonRow = $"{Glyphs.VLine}{btn1} {Glyphs.VLine}"; - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); // Now add a second button buttonRow = $"{Glyphs.VLine}{btn1} {btn2}{Glyphs.VLine}"; dlg.AddButton (new () { Text = btn2Text }); RunIteration (ref runstate); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -104,14 +113,14 @@ public class DialogTests RunIteration (ref runstate); buttonRow = $"{Glyphs.VLine}{new (' ', width - btn1.Length - 2)}{btn1}{Glyphs.VLine}"; - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); // Now add a second button buttonRow = $"{Glyphs.VLine} {btn1} {btn2}{Glyphs.VLine}"; dlg.AddButton (new () { Text = btn2Text }); RunIteration (ref runstate); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -131,14 +140,14 @@ public class DialogTests RunIteration (ref runstate); buttonRow = $"{Glyphs.VLine}{btn1}{new (' ', width - btn1.Length - 2)}{Glyphs.VLine}"; - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); // Now add a second button buttonRow = $"{Glyphs.VLine}{btn1} {btn2} {Glyphs.VLine}"; dlg.AddButton (new () { Text = btn2Text }); RunIteration (ref runstate); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); } @@ -179,7 +188,7 @@ public class DialogTests new Button { Text = btn3Text }, new Button { Text = btn4Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -196,7 +205,7 @@ public class DialogTests new Button { Text = btn3Text }, new Button { Text = btn4Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -213,7 +222,7 @@ public class DialogTests new Button { Text = btn3Text }, new Button { Text = btn4Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -230,7 +239,7 @@ public class DialogTests new Button { Text = btn3Text }, new Button { Text = btn4Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); } @@ -275,7 +284,7 @@ public class DialogTests new Button { Text = btn4Text } ); Assert.Equal (new (width, 1), dlg.Frame.Size); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -292,7 +301,7 @@ public class DialogTests new Button { Text = btn3Text }, new Button { Text = btn4Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -309,7 +318,7 @@ public class DialogTests new Button { Text = btn3Text }, new Button { Text = btn4Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -325,7 +334,7 @@ public class DialogTests new Button { Text = btn3Text }, new Button { Text = btn4Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); } @@ -368,7 +377,7 @@ public class DialogTests new Button { Text = btn3Text }, new Button { Text = btn4Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -385,7 +394,7 @@ public class DialogTests new Button { Text = btn3Text }, new Button { Text = btn4Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -402,7 +411,7 @@ public class DialogTests new Button { Text = btn3Text }, new Button { Text = btn4Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -419,7 +428,7 @@ public class DialogTests new Button { Text = btn3Text }, new Button { Text = btn4Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); } @@ -464,7 +473,7 @@ public class DialogTests new Button { Text = btn3Text }, new Button { Text = btn4Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -481,7 +490,7 @@ public class DialogTests new Button { Text = btn3Text }, new Button { Text = btn4Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -498,7 +507,7 @@ public class DialogTests new Button { Text = btn3Text }, new Button { Text = btn4Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -515,7 +524,7 @@ public class DialogTests new Button { Text = btn3Text }, new Button { Text = btn4Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); } @@ -548,7 +557,7 @@ public class DialogTests ); // Center - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -563,7 +572,7 @@ public class DialogTests Alignment.Fill, new Button { Text = btnText } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -578,7 +587,7 @@ public class DialogTests Alignment.End, new Button { Text = btnText } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -593,7 +602,7 @@ public class DialogTests Alignment.Start, new Button { Text = btnText } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -610,7 +619,7 @@ public class DialogTests Alignment.Center, new Button { Text = btnText } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -625,7 +634,7 @@ public class DialogTests Alignment.Fill, new Button { Text = btnText } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -640,7 +649,7 @@ public class DialogTests Alignment.End, new Button { Text = btnText } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -655,7 +664,7 @@ public class DialogTests Alignment.Start, new Button { Text = btnText } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); } @@ -693,7 +702,7 @@ public class DialogTests new Button { Text = btn2Text }, new Button { Text = btn3Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -709,7 +718,7 @@ public class DialogTests new Button { Text = btn2Text }, new Button { Text = btn3Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -725,7 +734,7 @@ public class DialogTests new Button { Text = btn2Text }, new Button { Text = btn3Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -741,7 +750,7 @@ public class DialogTests new Button { Text = btn2Text }, new Button { Text = btn3Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); } @@ -776,7 +785,7 @@ public class DialogTests new Button { Text = btn1Text }, new Button { Text = btn2Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -791,7 +800,7 @@ public class DialogTests new Button { Text = btn1Text }, new Button { Text = btn2Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -806,7 +815,7 @@ public class DialogTests new Button { Text = btn1Text }, new Button { Text = btn2Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -821,7 +830,7 @@ public class DialogTests new Button { Text = btn1Text }, new Button { Text = btn2Text } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); } @@ -860,7 +869,7 @@ public class DialogTests button1.Visible = false; RunIteration (ref runstate, firstIteration); buttonRow = $@"{Glyphs.VLine} {btn2} {Glyphs.VLine}"; - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -872,7 +881,7 @@ public class DialogTests button1.Visible = false; RunIteration (ref runstate, firstIteration); buttonRow = $@"{Glyphs.VLine} {btn2}{Glyphs.VLine}"; - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -883,7 +892,7 @@ public class DialogTests (runstate, dlg) = BeginButtonTestDialog (title, width, Alignment.End, button1, button2); button1.Visible = false; RunIteration (ref runstate, firstIteration); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); @@ -895,7 +904,7 @@ public class DialogTests button1.Visible = false; RunIteration (ref runstate, firstIteration); buttonRow = $@"{Glyphs.VLine} {btn2} {Glyphs.VLine}"; - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); } @@ -940,7 +949,7 @@ public class DialogTests ││ {btn} ││ │└────────────────┘│ └──────────────────┘"; - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, _output); }; Run (dlg); @@ -1040,7 +1049,7 @@ public class DialogTests LayoutAndDraw (); // BUGBUG: This seems wrong; is it a bug in Dim.Percent(85)?? No - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, _output); } else { @@ -1129,7 +1138,7 @@ public class DialogTests │ │ │{Glyphs.LeftBracket} Show Sub {Glyphs.RightBracket} {Glyphs.LeftBracket} Close {Glyphs.RightBracket} │ └───────────────────────┘"; - TestHelpers.AssertDriverContentsWithFrameAre (expected, _output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, _output); Assert.False (btn2.NewKeyDownEvent (Key.Space)); @@ -1137,7 +1146,7 @@ public class DialogTests case 3: LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @$" ┌───────────────────────┐ │ ┌──────────────────┐ │ @@ -1156,13 +1165,13 @@ public class DialogTests case 4: LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre (expected, _output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, _output); Assert.False (btn3.NewKeyDownEvent (Key.Space)); break; case 5: - TestHelpers.AssertDriverContentsWithFrameAre ("", _output); + DriverAssert.AssertDriverContentsWithFrameAre ("", _output); RequestStop (); @@ -1240,7 +1249,7 @@ public class DialogTests // Default location is centered, so 100 / 2 - 85 / 2 = 7 Assert.Equal (new (expected, expected), d.Frame.Location); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌───┐ │ │ @@ -1277,7 +1286,7 @@ public class DialogTests Alignment.Center, new Button { Text = btnText } ); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); } @@ -1332,7 +1341,7 @@ public class DialogTests (runstate, Dialog dlg) = BeginButtonTestDialog (title, width, Alignment.Center, null); - TestHelpers.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); + DriverAssert.AssertDriverContentsWithFrameAre ($"{buttonRow}", _output); End (runstate); dlg.Dispose (); diff --git a/UnitTests/Dialogs/MessageBoxTests.cs b/Tests/UnitTests/Dialogs/MessageBoxTests.cs similarity index 97% rename from UnitTests/Dialogs/MessageBoxTests.cs rename to Tests/UnitTests/Dialogs/MessageBoxTests.cs index b163d154f..50765272f 100644 --- a/UnitTests/Dialogs/MessageBoxTests.cs +++ b/Tests/UnitTests/Dialogs/MessageBoxTests.cs @@ -1,5 +1,7 @@ using System.Text; using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.DialogTests; @@ -221,7 +223,7 @@ public class MessageBoxTests { Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ╔════════════════╗ ║ ff ff ff ff ff ║ @@ -238,7 +240,7 @@ public class MessageBoxTests { Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ╔════════════════╗ ║ffffffffffffffff║ @@ -293,7 +295,7 @@ public class MessageBoxTests { Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ╔══════════════╗ ║ff ff ff ff ff║ @@ -313,7 +315,7 @@ public class MessageBoxTests { Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @$" ╔════════════════╗ ║ffffffffffffffff║ @@ -491,7 +493,7 @@ public class MessageBoxTests └────────────────────────────────────────────────────────────────────┘ """; - TestHelpers.AssertDriverContentsAre (expectedText, _output); + DriverAssert.AssertDriverContentsAre (expectedText, _output); Application.RequestStop (); } diff --git a/UnitTests/Dialogs/WizardTests.cs b/Tests/UnitTests/Dialogs/WizardTests.cs similarity index 99% rename from UnitTests/Dialogs/WizardTests.cs rename to Tests/UnitTests/Dialogs/WizardTests.cs index 66fbfc8f9..a73d0e15f 100644 --- a/UnitTests/Dialogs/WizardTests.cs +++ b/Tests/UnitTests/Dialogs/WizardTests.cs @@ -1,4 +1,5 @@ -using Xunit.Abstractions; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.DialogTests; @@ -467,7 +468,7 @@ public class WizardTests () Application.RunIteration (ref runstate, firstIteration); // TODO: Disabled until Dim.Auto is used in Dialog - //TestHelpers.AssertDriverContentsWithFrameAre ( + //DriverAsserts.AssertDriverContentsWithFrameAre ( // $"{topRow}\n{row2}\n{row3}\n{row4}\n{separatorRow}\n{buttonRow}\n{bottomRow}", // _output // ); @@ -715,7 +716,7 @@ public class WizardTests () RunState runstate = Application.Begin (wizard); // TODO: Disabled until Dim.Auto is used in Dialog - //TestHelpers.AssertDriverContentsWithFrameAre ( + //DriverAsserts.AssertDriverContentsWithFrameAre ( // $"{topRow}\n{row2}\n{row3}\n{separatorRow}\n{buttonRow}\n{bottomRow}", // _output // ); diff --git a/UnitTests/Drawing/LineCanvasTests.cs b/Tests/UnitTests/Drawing/LineCanvasTests.cs similarity index 95% rename from UnitTests/Drawing/LineCanvasTests.cs rename to Tests/UnitTests/Drawing/LineCanvasTests.cs index a9b6f4743..7ef1a449c 100644 --- a/UnitTests/Drawing/LineCanvasTests.cs +++ b/Tests/UnitTests/Drawing/LineCanvasTests.cs @@ -1,4 +1,6 @@ using System.Text; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.DrawingTests; @@ -294,7 +296,7 @@ public class LineCanvasTests (ITestOutputHelper _output) lc.AddLine (new (x1, y1), len1, o1, s1); lc.AddLine (new (x2, y2), len2, o2, s2); - TestHelpers.AssertEqual (_output, expected, lc.ToString ()); + OutputAssert.AssertEqual (_output, expected, lc.ToString ()); v.Dispose (); } @@ -502,7 +504,7 @@ public class LineCanvasTests (ITestOutputHelper _output) lc.AddLine (new (x + width, y), height, Orientation.Vertical, LineStyle.Double); Assert.Equal (new (x, y, 4, 2), lc.Bounds); - TestHelpers.AssertEqual ( + OutputAssert.AssertEqual ( _output, @" ╔╡╞╗ @@ -552,7 +554,7 @@ public class LineCanvasTests (ITestOutputHelper _output) lc.AddLine (new (x + width, y), height, Orientation.Vertical, LineStyle.Double); Assert.Equal (new (x, y, 4, 2), lc.Bounds); - TestHelpers.AssertEqual ( + OutputAssert.AssertEqual ( _output, @" ╔╡╞╗ @@ -596,7 +598,7 @@ public class LineCanvasTests (ITestOutputHelper _output) // Add a line at 5, 5 that's has length of 1 canvas.AddLine (new (x, y), 1, orientation, LineStyle.Single); - TestHelpers.AssertEqual (_output, $"{expected}", $"{canvas}"); + OutputAssert.AssertEqual (_output, $"{expected}", $"{canvas}"); } // X is offset by 2 @@ -653,7 +655,7 @@ public class LineCanvasTests (ITestOutputHelper _output) canvas.AddLine (new (x, y), length, orientation, LineStyle.Single); var result = canvas.ToString (); - TestHelpers.AssertEqual (_output, expected, result); + OutputAssert.AssertEqual (_output, expected, result); } [Fact] @@ -680,7 +682,7 @@ public class LineCanvasTests (ITestOutputHelper _output) // Add a line at 0, 0 that's has length of 0 lc.AddLine (Point.Empty, 0, orientation, LineStyle.Single); - TestHelpers.AssertEqual (_output, expected, $"{lc}"); + OutputAssert.AssertEqual (_output, expected, $"{lc}"); } [InlineData (Orientation.Horizontal, "┼")] @@ -701,7 +703,7 @@ public class LineCanvasTests (ITestOutputHelper _output) // Add a line at 0, 0 that's has length of 0 lc.AddLine (Point.Empty, 0, orientation, LineStyle.Single); - TestHelpers.AssertEqual (_output, expected, $"{lc}"); + OutputAssert.AssertEqual (_output, expected, $"{lc}"); } [InlineData (Orientation.Horizontal, "╥")] @@ -724,7 +726,7 @@ public class LineCanvasTests (ITestOutputHelper _output) // Add a line at 0, 0 that's has length of 0 lc.AddLine (Point.Empty, 0, orientation, LineStyle.Single); - TestHelpers.AssertEqual (_output, expected, $"{lc}"); + OutputAssert.AssertEqual (_output, expected, $"{lc}"); } [Fact] @@ -740,7 +742,7 @@ public class LineCanvasTests (ITestOutputHelper _output) @" ┌─ │ "; - TestHelpers.AssertEqual (_output, looksLike, $"{Environment.NewLine}{canvas}"); + OutputAssert.AssertEqual (_output, looksLike, $"{Environment.NewLine}{canvas}"); } [Fact] @@ -767,7 +769,7 @@ public class LineCanvasTests (ITestOutputHelper _output) ┣━━━━╋━━━┫ ┃ ┃ ┃ ┗━━━━┻━━━┛"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); v.Dispose (); } @@ -798,7 +800,7 @@ public class LineCanvasTests (ITestOutputHelper _output) │ │ │ ┕━━━━┷━━━┙ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); v.Dispose (); } @@ -830,7 +832,7 @@ public class LineCanvasTests (ITestOutputHelper _output) ┖────┸───┚ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); v.Dispose (); } @@ -848,7 +850,7 @@ public class LineCanvasTests (ITestOutputHelper _output) @" ┌─ │ "; - TestHelpers.AssertEqual (_output, looksLike, $"{Environment.NewLine}{canvas}"); + OutputAssert.AssertEqual (_output, looksLike, $"{Environment.NewLine}{canvas}"); } [Fact] @@ -877,7 +879,7 @@ public class LineCanvasTests (ITestOutputHelper _output) Dictionary map = canvas.GetMap (); Assert.Equal (2, map.Count); - TestHelpers.AssertEqual ( + OutputAssert.AssertEqual ( _output, @" ─ @@ -891,7 +893,7 @@ public class LineCanvasTests (ITestOutputHelper _output) public void ToString_Empty () { var lc = new LineCanvas (); - TestHelpers.AssertEqual (_output, string.Empty, lc.ToString ()); + OutputAssert.AssertEqual (_output, string.Empty, lc.ToString ()); } // 012 @@ -910,7 +912,7 @@ public class LineCanvasTests (ITestOutputHelper _output) { var lc = new LineCanvas (); lc.AddLine (new (x, y), 3, Orientation.Horizontal, LineStyle.Double); - TestHelpers.AssertEqual (_output, expected, $"{lc}"); + OutputAssert.AssertEqual (_output, expected, $"{lc}"); } [InlineData (0, 0, 0, 0, "═══")] @@ -935,7 +937,7 @@ public class LineCanvasTests (ITestOutputHelper _output) lc.AddLine (new (x1, y1), 3, Orientation.Horizontal, LineStyle.Double); lc.AddLine (new (x2, y2), 3, Orientation.Horizontal, LineStyle.Double); - TestHelpers.AssertEqual (_output, expected, $"{lc}"); + OutputAssert.AssertEqual (_output, expected, $"{lc}"); } // [Fact, SetupFakeDriver] @@ -995,7 +997,7 @@ public class LineCanvasTests (ITestOutputHelper _output) v.Draw (); - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); v.Dispose (); } @@ -1014,7 +1016,7 @@ public class LineCanvasTests (ITestOutputHelper _output) @" ┌─ │"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); v.Dispose (); } @@ -1037,7 +1039,7 @@ public class LineCanvasTests (ITestOutputHelper _output) ── │ │"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); v.Dispose (); } @@ -1055,7 +1057,7 @@ public class LineCanvasTests (ITestOutputHelper _output) var looksLike = @" ──"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); v.Dispose (); } @@ -1071,7 +1073,7 @@ public class LineCanvasTests (ITestOutputHelper _output) var looksLike = @" ══"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); v.Dispose (); } @@ -1090,7 +1092,7 @@ public class LineCanvasTests (ITestOutputHelper _output) @" │ │"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); v.Dispose (); } @@ -1107,7 +1109,7 @@ public class LineCanvasTests (ITestOutputHelper _output) @" ║ ║"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); v.Dispose (); } @@ -1135,7 +1137,7 @@ public class LineCanvasTests (ITestOutputHelper _output) ╠════╬═══╣ ║ ║ ║ ╚════╩═══╝"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); v.Dispose (); } @@ -1166,7 +1168,7 @@ public class LineCanvasTests (ITestOutputHelper _output) │ │ │ ╘════╧═══╛ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); v.Dispose (); } @@ -1203,7 +1205,7 @@ public class LineCanvasTests (ITestOutputHelper _output) ├────┼───┤ │ │ │ ╰────┴───╯"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); v.Dispose (); } @@ -1235,7 +1237,7 @@ public class LineCanvasTests (ITestOutputHelper _output) ╙────╨───╜ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); v.Dispose (); } @@ -1262,7 +1264,7 @@ public class LineCanvasTests (ITestOutputHelper _output) ├────┼───┤ │ │ │ └────┴───┘"; - TestHelpers.AssertEqual (_output, looksLike, $"{Environment.NewLine}{canvas}"); + OutputAssert.AssertEqual (_output, looksLike, $"{Environment.NewLine}{canvas}"); } [Fact] @@ -1300,7 +1302,7 @@ public class LineCanvasTests (ITestOutputHelper _output) var looksLike = @" ╔╡╞══╗ ║ ║"; - TestHelpers.AssertEqual (_output, looksLike, $"{Environment.NewLine}{lc}"); + OutputAssert.AssertEqual (_output, looksLike, $"{Environment.NewLine}{lc}"); } [Fact] diff --git a/UnitTests/Drawing/RulerTests.cs b/Tests/UnitTests/Drawing/RulerTests.cs similarity index 87% rename from UnitTests/Drawing/RulerTests.cs rename to Tests/UnitTests/Drawing/RulerTests.cs index b58b64c98..f259a601e 100644 --- a/UnitTests/Drawing/RulerTests.cs +++ b/Tests/UnitTests/Drawing/RulerTests.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.DrawingTests; @@ -33,7 +35,7 @@ public class RulerTests var r = new Ruler (); r.Draw (Point.Empty); - TestHelpers.AssertDriverContentsWithFrameAre (@"", _output); + DriverAssert.AssertDriverContentsWithFrameAre (@"", _output); } [Fact] @@ -48,7 +50,7 @@ public class RulerTests r.Length = len; r.Draw (Point.Empty); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" |123456789|1234", _output @@ -57,7 +59,7 @@ public class RulerTests // Postive offset r.Draw (new (1, 1)); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" |123456789|1234 |123456789|1234 @@ -68,7 +70,7 @@ public class RulerTests // Negative offset r.Draw (new (-1, 3)); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" |123456789|1234 |123456789|1234 @@ -89,7 +91,7 @@ public class RulerTests r.Length = len; r.Draw (Point.Empty); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" - 1 @@ -111,7 +113,7 @@ public class RulerTests r.Draw (new (1, 1)); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" - 1- @@ -135,7 +137,7 @@ public class RulerTests // Negative offset r.Draw (new (2, -1)); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" - 1 1-2 diff --git a/UnitTests/Drawing/StraightLineExtensionsTests.cs b/Tests/UnitTests/Drawing/StraightLineExtensionsTests.cs similarity index 97% rename from UnitTests/Drawing/StraightLineExtensionsTests.cs rename to Tests/UnitTests/Drawing/StraightLineExtensionsTests.cs index 865ae805a..5de27b964 100644 --- a/UnitTests/Drawing/StraightLineExtensionsTests.cs +++ b/Tests/UnitTests/Drawing/StraightLineExtensionsTests.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.DrawingTests; @@ -14,7 +16,7 @@ public class StraightLineExtensionsTests (ITestOutputHelper output) lc.AddLine (new Point (9, 4), -10, Orientation.Horizontal, LineStyle.Single); lc.AddLine (new Point (0, 4), -5, Orientation.Vertical, LineStyle.Single); - TestHelpers.AssertEqual ( + OutputAssert.AssertEqual ( output, @" ┌────────┐ @@ -28,7 +30,7 @@ public class StraightLineExtensionsTests (ITestOutputHelper output) lc = new LineCanvas (origLines.Exclude (Point.Empty, 10, Orientation.Horizontal)); - TestHelpers.AssertEqual ( + OutputAssert.AssertEqual ( output, @" │ │ @@ -40,7 +42,7 @@ public class StraightLineExtensionsTests (ITestOutputHelper output) lc = new LineCanvas (origLines.Exclude (new Point (0, 1), 10, Orientation.Horizontal)); - TestHelpers.AssertEqual ( + OutputAssert.AssertEqual ( output, @" ┌────────┐ @@ -53,7 +55,7 @@ public class StraightLineExtensionsTests (ITestOutputHelper output) lc = new LineCanvas (origLines.Exclude (new Point (0, 2), 10, Orientation.Horizontal)); - TestHelpers.AssertEqual ( + OutputAssert.AssertEqual ( output, @" ┌────────┐ @@ -66,7 +68,7 @@ public class StraightLineExtensionsTests (ITestOutputHelper output) lc = new LineCanvas (origLines.Exclude (new Point (0, 3), 10, Orientation.Horizontal)); - TestHelpers.AssertEqual ( + OutputAssert.AssertEqual ( output, @" ┌────────┐ @@ -79,7 +81,7 @@ public class StraightLineExtensionsTests (ITestOutputHelper output) lc = new LineCanvas (origLines.Exclude (new Point (0, 4), 10, Orientation.Horizontal)); - TestHelpers.AssertEqual ( + OutputAssert.AssertEqual ( output, @" ┌────────┐ @@ -91,7 +93,7 @@ public class StraightLineExtensionsTests (ITestOutputHelper output) lc = new LineCanvas (origLines.Exclude (Point.Empty, 10, Orientation.Vertical)); - TestHelpers.AssertEqual ( + OutputAssert.AssertEqual ( output, @" ────────┐ @@ -104,7 +106,7 @@ public class StraightLineExtensionsTests (ITestOutputHelper output) lc = new LineCanvas (origLines.Exclude (new Point (1, 0), 10, Orientation.Vertical)); - TestHelpers.AssertEqual ( + OutputAssert.AssertEqual ( output, @" ┌ ───────┐ @@ -117,7 +119,7 @@ public class StraightLineExtensionsTests (ITestOutputHelper output) lc = new LineCanvas (origLines.Exclude (new Point (8, 0), 10, Orientation.Vertical)); - TestHelpers.AssertEqual ( + OutputAssert.AssertEqual ( output, @" ┌─────── ┐ @@ -130,7 +132,7 @@ public class StraightLineExtensionsTests (ITestOutputHelper output) lc = new LineCanvas (origLines.Exclude (new Point (9, 0), 10, Orientation.Vertical)); - TestHelpers.AssertEqual ( + OutputAssert.AssertEqual ( output, @" ┌──────── diff --git a/Tests/UnitTests/Drawing/ThicknessTests.cs b/Tests/UnitTests/Drawing/ThicknessTests.cs new file mode 100644 index 000000000..fb75aacff --- /dev/null +++ b/Tests/UnitTests/Drawing/ThicknessTests.cs @@ -0,0 +1,255 @@ +using System.Text; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; + +namespace Terminal.Gui.DrawingTests; +public class ThicknessTests (ITestOutputHelper output) +{ + [Fact] + [AutoInitShutdown] + public void DrawTests () + { + ((FakeDriver)Application.Driver!).SetBufferSize (60, 60); + var t = new Thickness (0, 0, 0, 0); + var r = new Rectangle (5, 5, 40, 15); + + Application.Driver?.FillRect ( + new Rectangle (0, 0, Application.Driver!.Cols, Application.Driver!.Rows), + (Rune)' ' + ); + t.Draw (r, ViewDiagnosticFlags.Thickness, "Test"); + + DriverAssert.AssertDriverContentsWithFrameAre ( + @" + Test (Left=0,Top=0,Right=0,Bottom=0)", + output + ); + + t = new Thickness (1, 1, 1, 1); + r = new Rectangle (5, 5, 40, 15); + + Application.Driver?.FillRect ( + new Rectangle (0, 0, Application.Driver!.Cols, Application.Driver!.Rows), + (Rune)' ' + ); + t.Draw (r, ViewDiagnosticFlags.Thickness, "Test"); + + DriverAssert.AssertDriverContentsWithFrameAre ( + @" + TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT + T T + T T + T T + T T + T T + T T + T T + T T + T T + T T + T T + T T + T T + TTTest (Left=1,Top=1,Right=1,Bottom=1)TT", + output + ); + + t = new Thickness (1, 2, 3, 4); + r = new Rectangle (5, 5, 40, 15); + + Application.Driver?.FillRect ( + new Rectangle (0, 0, Application.Driver!.Cols, Application.Driver!.Rows), + (Rune)' ' + ); + t.Draw (r, ViewDiagnosticFlags.Thickness, "Test"); + + DriverAssert.AssertDriverContentsWithFrameAre ( + @" + TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT + TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT + T TTT + T TTT + T TTT + T TTT + T TTT + T TTT + T TTT + T TTT + T TTT + TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT + TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT + TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT + TTTest (Left=1,Top=2,Right=3,Bottom=4)TT", + output + ); + + t = new Thickness (-1, 1, 1, 1); + r = new Rectangle (5, 5, 40, 15); + + Application.Driver?.FillRect ( + new Rectangle (0, 0, Application.Driver!.Cols, Application.Driver!.Rows), + (Rune)' ' + ); + t.Draw (r, ViewDiagnosticFlags.Thickness, "Test"); + + DriverAssert.AssertDriverContentsWithFrameAre ( + @" + TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT + T + T + T + T + T + T + T + T + T + T + T + T + T + TTest (Left=-1,Top=1,Right=1,Bottom=1)TT", + output + ); + } + + [Fact] + [AutoInitShutdown] + public void DrawTests_Ruler () + { + // Add a frame so we can see the ruler + var f = new FrameView { X = 0, Y = 0, Width = Dim.Fill (), Height = Dim.Fill () }; + + var top = new Toplevel (); + top.Add (f); + RunState rs = Application.Begin (top); + + ((FakeDriver)Application.Driver!).SetBufferSize (45, 20); + var t = new Thickness (0, 0, 0, 0); + var r = new Rectangle (2, 2, 40, 15); + Application.RunIteration (ref rs); + + t.Draw (r, ViewDiagnosticFlags.Ruler, "Test"); + + DriverAssert.AssertDriverContentsAre ( + @" +┌───────────────────────────────────────────┐ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +│ │ +└───────────────────────────────────────────┘", + output + ); + + t = new Thickness (1, 1, 1, 1); + r = new Rectangle (1, 1, 40, 15); + top.SetNeedsDraw (); + Application.RunIteration (ref rs); + t.Draw (r, ViewDiagnosticFlags.Ruler, "Test"); + + DriverAssert.AssertDriverContentsAre ( + @" +┌───────────────────────────────────────────┐ +│|123456789|123456789|123456789|123456789 │ +│1 1 │ +│2 2 │ +│3 3 │ +│4 4 │ +│5 5 │ +│6 6 │ +│7 7 │ +│8 8 │ +│9 9 │ +│- - │ +│1 1 │ +│2 2 │ +│3 3 │ +│|123456789|123456789|123456789|123456789 │ +│ │ +│ │ +│ │ +└───────────────────────────────────────────┘", + output + ); + + t = new Thickness (1, 2, 3, 4); + r = new Rectangle (2, 2, 40, 15); + top.SetNeedsDraw (); + Application.RunIteration (ref rs); + t.Draw (r, ViewDiagnosticFlags.Ruler, "Test"); + + DriverAssert.AssertDriverContentsWithFrameAre ( + @" +┌───────────────────────────────────────────┐ +│ │ +│ |123456789|123456789|123456789|123456789 │ +│ 1 1 │ +│ 2 2 │ +│ 3 3 │ +│ 4 4 │ +│ 5 5 │ +│ 6 6 │ +│ 7 7 │ +│ 8 8 │ +│ 9 9 │ +│ - - │ +│ 1 1 │ +│ 2 2 │ +│ 3 3 │ +│ |123456789|123456789|123456789|123456789 │ +│ │ +│ │ +└───────────────────────────────────────────┘", + output + ); + + t = new Thickness (-1, 1, 1, 1); + r = new Rectangle (5, 5, 40, 15); + top.SetNeedsDraw (); + Application.RunIteration (ref rs); + t.Draw (r, ViewDiagnosticFlags.Ruler, "Test"); + + DriverAssert.AssertDriverContentsWithFrameAre ( + @" +┌───────────────────────────────────────────┐ +│ │ +│ │ +│ │ +│ │ +│ |123456789|123456789|123456789|123456789 +│ 1 +│ 2 +│ 3 +│ 4 +│ 5 +│ 6 +│ 7 +│ 8 +│ 9 +│ - +│ 1 +│ 2 +│ 3 +└────|123456789|123456789|123456789|123456789", + output + ); + top.Dispose (); + } + +} diff --git a/Tests/UnitTests/DriverAssert.cs b/Tests/UnitTests/DriverAssert.cs new file mode 100644 index 000000000..a9ec89a8d --- /dev/null +++ b/Tests/UnitTests/DriverAssert.cs @@ -0,0 +1,346 @@ +using System.Text; +using System.Text.RegularExpressions; +using Xunit.Abstractions; +using Attribute = Terminal.Gui.Attribute; + +namespace UnitTests; + +/// +/// Provides xUnit-style assertions for contents. +/// +internal partial class DriverAssert +{ + private const char SpaceChar = ' '; + private static readonly Rune SpaceRune = (Rune)SpaceChar; +#pragma warning disable xUnit1013 // Public method should be marked as test + /// + /// Verifies are found at the locations specified by + /// . is a bitmap of indexes into + /// (e.g. "00110" means the attribute at expectedAttributes[1] is expected + /// at the 3rd and 4th columns of the 1st row of driver.Contents). + /// + /// + /// Numbers between 0 and 9 for each row/col of the console. Must be valid indexes into + /// . + /// + /// + /// The IConsoleDriver to use. If null will be used. + /// + public static void AssertDriverAttributesAre ( + string expectedLook, + ITestOutputHelper output, + IConsoleDriver driver = null, + params Attribute [] expectedAttributes + ) + { +#pragma warning restore xUnit1013 // Public method should be marked as test + + if (expectedAttributes.Length > 10) + { + throw new ArgumentException ("This method only works for UIs that use at most 10 colors"); + } + + expectedLook = expectedLook.Trim (); + driver ??= Application.Driver; + + Cell [,] contents = driver.Contents; + + var line = 0; + + foreach (string lineString in expectedLook.Split ('\n').Select (l => l.Trim ())) + { + for (var c = 0; c < lineString.Length; c++) + { + Attribute? val = contents [line, c].Attribute; + + List match = expectedAttributes.Where (e => e == val).ToList (); + + switch (match.Count) + { + case 0: + output.WriteLine ( + $"{Application.ToString (driver)}\n" + + $"Expected Attribute {val} (PlatformColor = {val.Value.PlatformColor}) at Contents[{line},{c}] {contents [line, c]} ((PlatformColor = {contents [line, c].Attribute.Value.PlatformColor}) was not found.\n" + + $" Expected: {string.Join (",", expectedAttributes.Select (c => c))}\n" + + $" But Was: " + ); + Assert.Empty (match); + + return; + case > 1: + throw new ArgumentException ( + $"Bad value for expectedColors, {match.Count} Attributes had the same Value" + ); + } + + char colorUsed = Array.IndexOf (expectedAttributes, match [0]).ToString () [0]; + char userExpected = lineString [c]; + + if (colorUsed != userExpected) + { + output.WriteLine ($"{Application.ToString (driver)}"); + output.WriteLine ($"Unexpected Attribute at Contents[{line},{c}] {contents [line, c]}."); + output.WriteLine ($" Expected: {userExpected} ({expectedAttributes [int.Parse (userExpected.ToString ())]})"); + output.WriteLine ($" But Was: {colorUsed} ({val})"); + Assert.Equal (userExpected, colorUsed); + + return; + } + } + + line++; + } + } + +#pragma warning disable xUnit1013 // Public method should be marked as test + /// Asserts that the driver contents match the expected contents, optionally ignoring any trailing whitespace. + /// + /// + /// The IConsoleDriver to use. If null will be used. + /// + public static void AssertDriverContentsAre ( + string expectedLook, + ITestOutputHelper output, + IConsoleDriver driver = null, + bool ignoreLeadingWhitespace = false + ) + { +#pragma warning restore xUnit1013 // Public method should be marked as test + var actualLook = Application.ToString (driver ?? Application.Driver); + + if (string.Equals (expectedLook, actualLook)) + { + return; + } + + // get rid of trailing whitespace on each line (and leading/trailing whitespace of start/end of full string) + expectedLook = TrailingWhiteSpaceRegEx ().Replace (expectedLook, "").Trim (); + actualLook = TrailingWhiteSpaceRegEx ().Replace (actualLook, "").Trim (); + + if (ignoreLeadingWhitespace) + { + expectedLook = LeadingWhitespaceRegEx ().Replace (expectedLook, "").Trim (); + actualLook = LeadingWhitespaceRegEx ().Replace (actualLook, "").Trim (); + } + + // standardize line endings for the comparison + expectedLook = expectedLook.Replace ("\r\n", "\n"); + actualLook = actualLook.Replace ("\r\n", "\n"); + + // If test is about to fail show user what things looked like + if (!string.Equals (expectedLook, actualLook)) + { + output?.WriteLine ("Expected:" + Environment.NewLine + expectedLook); + output?.WriteLine (" But Was:" + Environment.NewLine + actualLook); + } + + Assert.Equal (expectedLook, actualLook); + } + + /// + /// Asserts that the driver contents are equal to the provided string. + /// + /// + /// + /// The IConsoleDriver to use. If null will be used. + /// + public static Rectangle AssertDriverContentsWithFrameAre ( + string expectedLook, + ITestOutputHelper output, + IConsoleDriver driver = null + ) + { + List> lines = new (); + var sb = new StringBuilder (); + driver ??= Application.Driver; + int x = -1; + int y = -1; + int w = -1; + int h = -1; + + Cell [,] contents = driver.Contents; + + for (var rowIndex = 0; rowIndex < driver.Rows; rowIndex++) + { + List runes = []; + + for (var colIndex = 0; colIndex < driver.Cols; colIndex++) + { + Rune runeAtCurrentLocation = contents [rowIndex, colIndex].Rune; + + if (runeAtCurrentLocation != SpaceRune) + { + if (x == -1) + { + x = colIndex; + y = rowIndex; + + for (var i = 0; i < colIndex; i++) + { + runes.InsertRange (i, [SpaceRune]); + } + } + + if (runeAtCurrentLocation.GetColumns () > 1) + { + colIndex++; + } + + if (colIndex + 1 > w) + { + w = colIndex + 1; + } + + h = rowIndex - y + 1; + } + + if (x > -1) + { + runes.Add (runeAtCurrentLocation); + } + + // See Issue #2616 + //foreach (var combMark in contents [r, c].CombiningMarks) { + // runes.Add (combMark); + //} + } + + if (runes.Count > 0) + { + lines.Add (runes); + } + } + + // Remove unnecessary empty lines + if (lines.Count > 0) + { + for (int r = lines.Count - 1; r > h - 1; r--) + { + lines.RemoveAt (r); + } + } + + // Remove trailing whitespace on each line + foreach (List row in lines) + { + for (int c = row.Count - 1; c >= 0; c--) + { + Rune rune = row [c]; + + if (rune != (Rune)' ' || row.Sum (x => x.GetColumns ()) == w) + { + break; + } + + row.RemoveAt (c); + } + } + + // Convert Rune list to string + for (var r = 0; r < lines.Count; r++) + { + var line = StringExtensions.ToString (lines [r]); + + if (r == lines.Count - 1) + { + sb.Append (line); + } + else + { + sb.AppendLine (line); + } + } + + var actualLook = sb.ToString (); + + if (string.Equals (expectedLook, actualLook)) + { + return new (x > -1 ? x : 0, y > -1 ? y : 0, w > -1 ? w : 0, h > -1 ? h : 0); + } + + // standardize line endings for the comparison + expectedLook = expectedLook.ReplaceLineEndings (); + actualLook = actualLook.ReplaceLineEndings (); + + // Remove the first and the last line ending from the expectedLook + if (expectedLook.StartsWith (Environment.NewLine)) + { + expectedLook = expectedLook [Environment.NewLine.Length..]; + } + + if (expectedLook.EndsWith (Environment.NewLine)) + { + expectedLook = expectedLook [..^Environment.NewLine.Length]; + } + + // If test is about to fail show user what things looked like + if (!string.Equals (expectedLook, actualLook)) + { + output?.WriteLine ("Expected:" + Environment.NewLine + expectedLook); + output?.WriteLine (" But Was:" + Environment.NewLine + actualLook); + } + + Assert.Equal (expectedLook, actualLook); + + return new (x > -1 ? x : 0, y > -1 ? y : 0, w > -1 ? w : 0, h > -1 ? h : 0); + } + + + /// + /// Verifies the console used all the when rendering. If one or more of the + /// expected colors are not used then the failure will output both the colors that were found to be used and which of + /// your expectations was not met. + /// + /// if null uses + /// + internal static void AssertDriverUsedColors (IConsoleDriver driver = null, params Attribute [] expectedColors) + { + driver ??= Application.Driver; + Cell [,] contents = driver.Contents; + + List toFind = expectedColors.ToList (); + + // Contents 3rd column is an Attribute + HashSet colorsUsed = new (); + + for (var r = 0; r < driver.Rows; r++) + { + for (var c = 0; c < driver.Cols; c++) + { + Attribute? val = contents [r, c].Attribute; + + if (val.HasValue) + { + colorsUsed.Add (val.Value); + + Attribute match = toFind.FirstOrDefault (e => e == val); + + // need to check twice because Attribute is a struct and therefore cannot be null + if (toFind.Any (e => e == val)) + { + toFind.Remove (match); + } + } + } + } + + if (!toFind.Any ()) + { + return; + } + + var sb = new StringBuilder (); + sb.AppendLine ("The following colors were not used:" + string.Join ("; ", toFind.Select (a => a.ToString ()))); + sb.AppendLine ("Colors used were:" + string.Join ("; ", colorsUsed.Select (a => a.ToString ()))); + + throw new (sb.ToString ()); + } + + + [GeneratedRegex ("^\\s+", RegexOptions.Multiline)] + private static partial Regex LeadingWhitespaceRegEx (); + + + [GeneratedRegex ("\\s+$", RegexOptions.Multiline)] + private static partial Regex TrailingWhiteSpaceRegEx (); +} diff --git a/UnitTests/FileServices/FileDialogTests.cs b/Tests/UnitTests/FileServices/FileDialogTests.cs similarity index 99% rename from UnitTests/FileServices/FileDialogTests.cs rename to Tests/UnitTests/FileServices/FileDialogTests.cs index cb31b7462..269670509 100644 --- a/UnitTests/FileServices/FileDialogTests.cs +++ b/Tests/UnitTests/FileServices/FileDialogTests.cs @@ -1,5 +1,6 @@ using System.IO.Abstractions.TestingHelpers; using System.Runtime.InteropServices; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.FileServicesTests; diff --git a/UnitTests/Input/EscSeqRequestsTests.cs b/Tests/UnitTests/Input/EscSeqRequestsTests.cs similarity index 100% rename from UnitTests/Input/EscSeqRequestsTests.cs rename to Tests/UnitTests/Input/EscSeqRequestsTests.cs diff --git a/UnitTests/Input/EscSeqUtilsTests.cs b/Tests/UnitTests/Input/EscSeqUtilsTests.cs similarity index 99% rename from UnitTests/Input/EscSeqUtilsTests.cs rename to Tests/UnitTests/Input/EscSeqUtilsTests.cs index 4f783115f..10dd82323 100644 --- a/UnitTests/Input/EscSeqUtilsTests.cs +++ b/Tests/UnitTests/Input/EscSeqUtilsTests.cs @@ -1,4 +1,6 @@ using JetBrains.Annotations; +using UnitTests; + // ReSharper disable HeuristicUnreachableCode namespace Terminal.Gui.InputTests; diff --git a/Tests/UnitTests/OutputAssert.cs b/Tests/UnitTests/OutputAssert.cs new file mode 100644 index 000000000..29f5d8c2c --- /dev/null +++ b/Tests/UnitTests/OutputAssert.cs @@ -0,0 +1,51 @@ +using Xunit.Abstractions; + +namespace UnitTests; + +/// +/// Provides xunit-style assertions for . +/// +/// +internal class OutputAssert +{ +#pragma warning disable xUnit1013 // Public method should be marked as test + /// + /// Verifies two strings are equivalent. If the assert fails, output will be generated to standard output showing + /// the expected and actual look. + /// + /// + /// + /// A string containing the expected look. Newlines should be specified as "\r\n" as they will + /// be converted to to make tests platform independent. + /// + /// + public static void AssertEqual (ITestOutputHelper output, string expectedLook, string actualLook) + { + // Convert newlines to platform-specific newlines + expectedLook = ReplaceNewLinesToPlatformSpecific (expectedLook); + + // If test is about to fail show user what things looked like + if (!string.Equals (expectedLook, actualLook)) + { + output?.WriteLine ("Expected:" + Environment.NewLine + expectedLook); + output?.WriteLine (" But Was:" + Environment.NewLine + actualLook); + } + + Assert.Equal (expectedLook, actualLook); + } +#pragma warning restore xUnit1013 // Public method should be marked as test + + private static string ReplaceNewLinesToPlatformSpecific (string toReplace) + { + string replaced = toReplace; + + replaced = Environment.NewLine.Length switch + { + 2 when !replaced.Contains ("\r\n") => replaced.Replace ("\n", Environment.NewLine), + 1 => replaced.Replace ("\r\n", Environment.NewLine), + _ => replaced + }; + + return replaced; + } +} diff --git a/Tests/UnitTests/README.md b/Tests/UnitTests/README.md new file mode 100644 index 000000000..217607fd3 --- /dev/null +++ b/Tests/UnitTests/README.md @@ -0,0 +1,3 @@ +# Automated Unit Tests (non-Parallelizable) + +See the [Testing wiki](https://github.com/gui-cs/Terminal.Gui/wiki/Testing) for details on how to add more tests. diff --git a/UnitTests/Resources/ResourceManagerTests.cs b/Tests/UnitTests/Resources/ResourceManagerTests.cs similarity index 100% rename from UnitTests/Resources/ResourceManagerTests.cs rename to Tests/UnitTests/Resources/ResourceManagerTests.cs diff --git a/Tests/UnitTests/SetupFakeDriverAttribute.cs b/Tests/UnitTests/SetupFakeDriverAttribute.cs new file mode 100644 index 000000000..48c07c10c --- /dev/null +++ b/Tests/UnitTests/SetupFakeDriverAttribute.cs @@ -0,0 +1,44 @@ +using System.Diagnostics; +using System.Reflection; +using Xunit.Sdk; + +namespace UnitTests; + +/// +/// Enables test functions annotated with the [SetupFakeDriver] attribute to set Application.Driver to new +/// FakeDriver(). The driver is set up with 25 rows and columns. +/// +/// +/// On Before, sets Configuration.Locations to ConfigLocations.DefaultOnly. +/// On After, sets Configuration.Locations to ConfigLocations.All. +/// +[AttributeUsage (AttributeTargets.Class | AttributeTargets.Method)] +public class SetupFakeDriverAttribute : BeforeAfterTestAttribute +{ + public override void After (MethodInfo methodUnderTest) + { + Debug.WriteLine ($"After: {methodUnderTest.Name}"); + + // Turn off diagnostic flags in case some test left them on + View.Diagnostics = ViewDiagnosticFlags.Off; + + Application.ResetState (true); + Assert.Null (Application.Driver); + Assert.Equal (new (0, 0, 2048, 2048), Application.Screen); + base.After (methodUnderTest); + } + + public override void Before (MethodInfo methodUnderTest) + { + Debug.WriteLine ($"Before: {methodUnderTest.Name}"); + + Application.ResetState (true); + Assert.Null (Application.Driver); + Application.Driver = new FakeDriver { Rows = 25, Cols = 25 }; + Assert.Equal (new (0, 0, 25, 25), Application.Screen); + // Ensures subscribing events, at least for the SizeChanged event + Application.SubscribeDriverEvents (); + + base.Before (methodUnderTest); + } +} \ No newline at end of file diff --git a/Tests/UnitTests/TestDateAttribute.cs b/Tests/UnitTests/TestDateAttribute.cs new file mode 100644 index 000000000..5ad857a2f --- /dev/null +++ b/Tests/UnitTests/TestDateAttribute.cs @@ -0,0 +1,20 @@ +using System.Globalization; +using System.Reflection; +using Xunit.Sdk; + +namespace UnitTests; + +[AttributeUsage (AttributeTargets.Class | AttributeTargets.Method)] +public class TestDateAttribute : BeforeAfterTestAttribute +{ + public TestDateAttribute () { CultureInfo.CurrentCulture = CultureInfo.InvariantCulture; } + private readonly CultureInfo _currentCulture = CultureInfo.CurrentCulture; + + public override void After (MethodInfo methodUnderTest) + { + CultureInfo.CurrentCulture = _currentCulture; + Assert.Equal (CultureInfo.CurrentCulture, _currentCulture); + } + + public override void Before (MethodInfo methodUnderTest) { Assert.Equal (CultureInfo.CurrentCulture, CultureInfo.InvariantCulture); } +} \ No newline at end of file diff --git a/Tests/UnitTests/TestRespondersDisposedAttribute.cs b/Tests/UnitTests/TestRespondersDisposedAttribute.cs new file mode 100644 index 000000000..a1f29319a --- /dev/null +++ b/Tests/UnitTests/TestRespondersDisposedAttribute.cs @@ -0,0 +1,44 @@ +using System.Diagnostics; +using System.Globalization; +using System.Reflection; +using Xunit.Sdk; + +namespace UnitTests; + +/// +/// Enables test functions annotated with the [TestRespondersDisposed] attribute to ensure all Views are disposed. +/// +/// +/// On Before, sets Configuration.Locations to ConfigLocations.DefaultOnly. +/// On After, sets Configuration.Locations to ConfigLocations.All. +/// +[AttributeUsage (AttributeTargets.Class | AttributeTargets.Method)] +public class TestRespondersDisposedAttribute : BeforeAfterTestAttribute +{ + public TestRespondersDisposedAttribute () { CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.GetCultureInfo ("en-US"); } + + public override void After (MethodInfo methodUnderTest) + { + Debug.WriteLine ($"After: {methodUnderTest.Name}"); + base.After (methodUnderTest); + +#if DEBUG_IDISPOSABLE + View.DebugIDisposable = true; + + Assert.Empty (View.Instances); +#endif + } + + public override void Before (MethodInfo methodUnderTest) + { + Debug.WriteLine ($"Before: {methodUnderTest.Name}"); + + base.Before (methodUnderTest); +#if DEBUG_IDISPOSABLE + View.DebugIDisposable = true; + // Clear out any lingering Responder instances from previous tests + View.Instances.Clear (); + Assert.Empty (View.Instances); +#endif + } +} \ No newline at end of file diff --git a/Tests/UnitTests/TestsAllViews.cs b/Tests/UnitTests/TestsAllViews.cs new file mode 100644 index 000000000..a3ab97b45 --- /dev/null +++ b/Tests/UnitTests/TestsAllViews.cs @@ -0,0 +1,28 @@ +#nullable enable + +using Terminal.Gui; + +namespace UnitTests; + +/// +/// Base class for tests that need to test all views. +/// +public class TestsAllViews +{ + public static IEnumerable AllViewTypes => + typeof (View).Assembly + .GetTypes () + .Where (type => type.IsClass && !type.IsAbstract && type.IsPublic && (type.IsSubclassOf (typeof (View)) || type == typeof (View))) + .Select (type => new object [] { type }); + + public static View CreateInstanceIfNotGeneric (Type type) + { + if (type.IsGenericType) + { + // Return null for generic types + return null; + } + + return Activator.CreateInstance (type) as View; + } +} diff --git a/UnitTests/Text/AutocompleteTests.cs b/Tests/UnitTests/Text/AutocompleteTests.cs similarity index 94% rename from UnitTests/Text/AutocompleteTests.cs rename to Tests/UnitTests/Text/AutocompleteTests.cs index 7be3f35e0..7e8c0e175 100644 --- a/UnitTests/Text/AutocompleteTests.cs +++ b/Tests/UnitTests/Text/AutocompleteTests.cs @@ -1,4 +1,6 @@ using System.Text.RegularExpressions; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.TextTests; @@ -29,7 +31,7 @@ public class AutocompleteTests (ITestOutputHelper output) if (i < 4 || i > 5) { - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This a long line and against TextView.", output @@ -37,7 +39,7 @@ This a long line and against TextView.", } else { - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This a long line and against TextView. and @@ -55,7 +57,7 @@ This a long line and against TextView. top.SetNeedsDraw (); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This a long line and against TextView. and @@ -67,7 +69,7 @@ This a long line and against TextView. top.SetNeedsDraw (); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This ag long line and against TextView. against ", @@ -78,7 +80,7 @@ This ag long line and against TextView. top.SetNeedsDraw (); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This ag long line and against TextView. against ", @@ -89,7 +91,7 @@ This ag long line and against TextView. top.SetNeedsDraw (); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This ag long line and against TextView. against ", @@ -100,7 +102,7 @@ This ag long line and against TextView. top.SetNeedsDraw (); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This ag long line and against TextView.", output @@ -112,7 +114,7 @@ This ag long line and against TextView.", top.SetNeedsDraw (); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This ag long line and against TextView. against ", @@ -124,7 +126,7 @@ This ag long line and against TextView. top.SetNeedsDraw (); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This a long line and against TextView. and @@ -136,7 +138,7 @@ This a long line and against TextView. top.SetNeedsDraw (); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This an long line and against TextView. and ", @@ -147,7 +149,7 @@ This an long line and against TextView. top.SetNeedsDraw (); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This an long line and against TextView.", output diff --git a/Tests/UnitTests/Text/TextFormatterTests.cs b/Tests/UnitTests/Text/TextFormatterTests.cs new file mode 100644 index 000000000..407bd4a79 --- /dev/null +++ b/Tests/UnitTests/Text/TextFormatterTests.cs @@ -0,0 +1,4381 @@ +using System.Text; +using UnitTests; +using UICatalog; +using UnitTests; +using Xunit.Abstractions; + +// Alias Console to MockConsole so we don't accidentally use Console + +namespace Terminal.Gui.TextTests; + +public class TextFormatterTests +{ + public TextFormatterTests (ITestOutputHelper output) { _output = output; } + private readonly ITestOutputHelper _output; + + + public static IEnumerable CMGlyphs => + new List { new object [] { $"{Glyphs.LeftBracket} Say Hello 你 {Glyphs.RightBracket}", 16, 15 } }; + + [SetupFakeDriver] + [Theory] + [InlineData ("A", 0, "")] + [InlineData ("A", 1, "A")] + [InlineData ("A", 2, "A")] + [InlineData ("A", 3, " A")] + [InlineData ("AB", 1, "A")] + [InlineData ("AB", 2, "AB")] + [InlineData ("ABC", 3, "ABC")] + [InlineData ("ABC", 4, "ABC")] + [InlineData ("ABC", 5, " ABC")] + [InlineData ("ABC", 6, " ABC")] + [InlineData ("ABC", 9, " ABC")] + public void Draw_Horizontal_Centered (string text, int width, string expectedText) + { + TextFormatter tf = new () + { + Text = text, + Alignment = Alignment.Center + }; + + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = 1; + tf.Draw (new (0, 0, width, 1), Attribute.Default, Attribute.Default); + + DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); + } + + [SetupFakeDriver] + [Theory] + [InlineData ("A", 0, "")] + [InlineData ("A", 1, "A")] + [InlineData ("A", 2, "A")] + [InlineData ("A B", 3, "A B")] + [InlineData ("A B", 1, "A")] + [InlineData ("A B", 2, "A")] + [InlineData ("A B", 4, "A B")] + [InlineData ("A B", 5, "A B")] + [InlineData ("A B", 6, "A B")] + [InlineData ("A B", 10, "A B")] + [InlineData ("ABC ABC", 10, "ABC ABC")] + public void Draw_Horizontal_Justified (string text, int width, string expectedText) + { + TextFormatter tf = new () + { + Text = text, + Alignment = Alignment.Fill + }; + + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = 1; + tf.Draw (new (0, 0, width, 1), Attribute.Default, Attribute.Default); + + DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); + } + + [SetupFakeDriver] + [Theory] + [InlineData ("A", 0, "")] + [InlineData ("A", 1, "A")] + [InlineData ("A", 2, "A")] + [InlineData ("AB", 1, "A")] + [InlineData ("AB", 2, "AB")] + [InlineData ("ABC", 3, "ABC")] + [InlineData ("ABC", 4, "ABC")] + [InlineData ("ABC", 6, "ABC")] + public void Draw_Horizontal_Left (string text, int width, string expectedText) + + { + TextFormatter tf = new () + { + Text = text, + Alignment = Alignment.Start + }; + + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = 1; + tf.Draw (new (0, 0, width, 1), Attribute.Default, Attribute.Default); + + DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); + } + + [SetupFakeDriver] + [Theory] + [InlineData ("A", 0, "")] + [InlineData ("A", 1, "A")] + [InlineData ("A", 2, " A")] + [InlineData ("AB", 1, "B")] + [InlineData ("AB", 2, "AB")] + [InlineData ("ABC", 3, "ABC")] + [InlineData ("ABC", 4, " ABC")] + [InlineData ("ABC", 6, " ABC")] + public void Draw_Horizontal_Right (string text, int width, string expectedText) + { + TextFormatter tf = new () + { + Text = text, + Alignment = Alignment.End + }; + + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = 1; + + tf.Draw (new (Point.Empty, new (width, 1)), Attribute.Default, Attribute.Default); + DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); + } + + [SetupFakeDriver] + [Theory] + [InlineData ("A", 1, 0, "")] + [InlineData ("A", 0, 1, "")] + [InlineData ("AB1 2", 2, 1, "2")] + [InlineData ("AB12", 5, 1, "21BA")] + [InlineData ("AB\n12", 5, 2, "21\nBA")] + [InlineData ("ABC 123 456", 7, 2, "CBA \n654 321")] + [InlineData ("こんにちは", 1, 1, "")] + [InlineData ("こんにちは", 2, 1, "は")] + [InlineData ("こんにちは", 5, 1, "はち")] + [InlineData ("こんにちは", 10, 1, "はちにんこ")] + [InlineData ("こんにちは\nAB\n12", 10, 3, "21 \nBA \nはちにんこ")] + public void Draw_Horizontal_RightLeft_BottomTop (string text, int width, int height, string expectedText) + { + TextFormatter tf = new () + { + Text = text, + Direction = TextDirection.RightLeft_BottomTop + }; + + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = height; + tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); + + DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); + } + + [SetupFakeDriver] + [Theory] + [InlineData ("A", 1, 0, "")] + [InlineData ("A", 0, 1, "")] + [InlineData ("AB1 2", 2, 1, "2")] + [InlineData ("AB12", 5, 1, "21BA")] + [InlineData ("AB\n12", 5, 2, "BA\n21")] + [InlineData ("ABC 123 456", 7, 2, "654 321\nCBA ")] + [InlineData ("こんにちは", 1, 1, "")] + [InlineData ("こんにちは", 2, 1, "は")] + [InlineData ("こんにちは", 5, 1, "はち")] + [InlineData ("こんにちは", 10, 1, "はちにんこ")] + [InlineData ("こんにちは\nAB\n12", 10, 3, "はちにんこ\nBA \n21 ")] + public void Draw_Horizontal_RightLeft_TopBottom (string text, int width, int height, string expectedText) + { + TextFormatter tf = new () + { + Text = text, + Direction = TextDirection.RightLeft_TopBottom + }; + + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = height; + tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); + + DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); + } + + [SetupFakeDriver] + [Theory] + + // Horizontal with Alignment.Start + // LeftRight_TopBottom + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Start, + TextDirection.LeftRight_TopBottom, + @" +0 2 4** +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Start, + TextDirection.LeftRight_TopBottom, + @" +**0 2 4 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Start, + TextDirection.LeftRight_TopBottom, + @" +*0 2 4* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Start, + TextDirection.LeftRight_TopBottom, + @" +0 2 4 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Start, + TextDirection.LeftRight_TopBottom, + @" +0 你 4* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Start, + TextDirection.LeftRight_TopBottom, + @" +*0 你 4 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Start, + TextDirection.LeftRight_TopBottom, + @" +0 你 4* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Start, + TextDirection.LeftRight_TopBottom, + @" +0 你 4 +******* +******* +******* +******* +******* +*******")] + + // LeftRight_BottomTop + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Start, + TextDirection.LeftRight_BottomTop, + @" +0 2 4** +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Start, + TextDirection.LeftRight_BottomTop, + @" +**0 2 4 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Start, + TextDirection.LeftRight_BottomTop, + @" +*0 2 4* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Start, + TextDirection.LeftRight_BottomTop, + @" +0 2 4 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Start, + TextDirection.LeftRight_BottomTop, + @" +0 你 4* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Start, + TextDirection.LeftRight_BottomTop, + @" +*0 你 4 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Start, + TextDirection.LeftRight_BottomTop, + @" +0 你 4* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Start, + TextDirection.LeftRight_BottomTop, + @" +0 你 4 +******* +******* +******* +******* +******* +*******")] + + // RightLeft_TopBottom + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Start, + TextDirection.RightLeft_TopBottom, + @" +4 2 0** +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Start, + TextDirection.RightLeft_TopBottom, + @" +**4 2 0 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Start, + TextDirection.RightLeft_TopBottom, + @" +*4 2 0* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Start, + TextDirection.RightLeft_TopBottom, + @" +4 2 0 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Start, + TextDirection.RightLeft_TopBottom, + @" +4 你 0* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Start, + TextDirection.RightLeft_TopBottom, + @" +*4 你 0 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Start, + TextDirection.RightLeft_TopBottom, + @" +4 你 0* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Start, + TextDirection.RightLeft_TopBottom, + @" +4 你 0 +******* +******* +******* +******* +******* +*******")] + + // RightLeft_BottomTop + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Start, + TextDirection.RightLeft_BottomTop, + @" +4 2 0** +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Start, + TextDirection.RightLeft_BottomTop, + @" +**4 2 0 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Start, + TextDirection.RightLeft_BottomTop, + @" +*4 2 0* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Start, + TextDirection.RightLeft_BottomTop, + @" +4 2 0 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Start, + TextDirection.RightLeft_BottomTop, + @" +4 你 0* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Start, + TextDirection.RightLeft_BottomTop, + @" +*4 你 0 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Start, + TextDirection.RightLeft_BottomTop, + @" +4 你 0* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Start, + TextDirection.RightLeft_BottomTop, + @" +4 你 0 +******* +******* +******* +******* +******* +*******")] + + // Horizontal with Alignment.End + // LeftRight_TopBottom + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.End, + TextDirection.LeftRight_TopBottom, + @" +******* +******* +******* +******* +******* +******* +0 2 4**")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.End, + TextDirection.LeftRight_TopBottom, + @" +******* +******* +******* +******* +******* +******* +**0 2 4")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.End, + TextDirection.LeftRight_TopBottom, + @" +******* +******* +******* +******* +******* +******* +*0 2 4*")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.End, + TextDirection.LeftRight_TopBottom, + @" +******* +******* +******* +******* +******* +******* +0 2 4")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.End, + TextDirection.LeftRight_TopBottom, + @" +******* +******* +******* +******* +******* +******* +0 你 4*")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.End, + TextDirection.LeftRight_TopBottom, + @" +******* +******* +******* +******* +******* +******* +*0 你 4")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.End, + TextDirection.LeftRight_TopBottom, + @" +******* +******* +******* +******* +******* +******* +0 你 4*")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.End, + TextDirection.LeftRight_TopBottom, + @" +******* +******* +******* +******* +******* +******* +0 你 4")] + + // LeftRight_BottomTop + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.End, + TextDirection.LeftRight_BottomTop, + @" +******* +******* +******* +******* +******* +******* +0 2 4**")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.End, + TextDirection.LeftRight_BottomTop, + @" +******* +******* +******* +******* +******* +******* +**0 2 4")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.End, + TextDirection.LeftRight_BottomTop, + @" +******* +******* +******* +******* +******* +******* +*0 2 4*")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.End, + TextDirection.LeftRight_BottomTop, + @" +******* +******* +******* +******* +******* +******* +0 2 4")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.End, + TextDirection.LeftRight_BottomTop, + @" +******* +******* +******* +******* +******* +******* +0 你 4*")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.End, + TextDirection.LeftRight_BottomTop, + @" +******* +******* +******* +******* +******* +******* +*0 你 4")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.End, + TextDirection.LeftRight_BottomTop, + @" +******* +******* +******* +******* +******* +******* +0 你 4*")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.End, + TextDirection.LeftRight_BottomTop, + @" +******* +******* +******* +******* +******* +******* +0 你 4")] + + // RightLeft_TopBottom + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.End, + TextDirection.RightLeft_TopBottom, + @" +******* +******* +******* +******* +******* +******* +4 2 0**")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.End, + TextDirection.RightLeft_TopBottom, + @" +******* +******* +******* +******* +******* +******* +**4 2 0")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.End, + TextDirection.RightLeft_TopBottom, + @" +******* +******* +******* +******* +******* +******* +*4 2 0*")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.End, + TextDirection.RightLeft_TopBottom, + @" +******* +******* +******* +******* +******* +******* +4 2 0")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.End, + TextDirection.RightLeft_TopBottom, + @" +******* +******* +******* +******* +******* +******* +4 你 0*")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.End, + TextDirection.RightLeft_TopBottom, + @" +******* +******* +******* +******* +******* +******* +*4 你 0")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.End, + TextDirection.RightLeft_TopBottom, + @" +******* +******* +******* +******* +******* +******* +4 你 0*")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.End, + TextDirection.RightLeft_TopBottom, + @" +******* +******* +******* +******* +******* +******* +4 你 0")] + + // RightLeft_BottomTop + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.End, + TextDirection.RightLeft_BottomTop, + @" +******* +******* +******* +******* +******* +******* +4 2 0**")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.End, + TextDirection.RightLeft_BottomTop, + @" +******* +******* +******* +******* +******* +******* +**4 2 0")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.End, + TextDirection.RightLeft_BottomTop, + @" +******* +******* +******* +******* +******* +******* +*4 2 0*")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.End, + TextDirection.RightLeft_BottomTop, + @" +******* +******* +******* +******* +******* +******* +4 2 0")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.End, + TextDirection.RightLeft_BottomTop, + @" +******* +******* +******* +******* +******* +******* +4 你 0*")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.End, + TextDirection.RightLeft_BottomTop, + @" +******* +******* +******* +******* +******* +******* +*4 你 0")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.End, + TextDirection.RightLeft_BottomTop, + @" +******* +******* +******* +******* +******* +******* +4 你 0*")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.End, + TextDirection.RightLeft_BottomTop, + @" +******* +******* +******* +******* +******* +******* +4 你 0")] + + // Horizontal with alignment.Centered + // LeftRight_TopBottom + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Center, + TextDirection.LeftRight_TopBottom, + @" +******* +******* +******* +0 2 4** +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Center, + TextDirection.LeftRight_TopBottom, + @" +******* +******* +******* +**0 2 4 +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Center, + TextDirection.LeftRight_TopBottom, + @" +******* +******* +******* +*0 2 4* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Center, + TextDirection.LeftRight_TopBottom, + @" +******* +******* +******* +0 2 4 +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Center, + TextDirection.LeftRight_TopBottom, + @" +******* +******* +******* +0 你 4* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Center, + TextDirection.LeftRight_TopBottom, + @" +******* +******* +******* +*0 你 4 +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Center, + TextDirection.LeftRight_TopBottom, + @" +******* +******* +******* +0 你 4* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Center, + TextDirection.LeftRight_TopBottom, + @" +******* +******* +******* +0 你 4 +******* +******* +*******")] + + // LeftRight_BottomTop + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Center, + TextDirection.LeftRight_BottomTop, + @" +******* +******* +******* +0 2 4** +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Center, + TextDirection.LeftRight_BottomTop, + @" +******* +******* +******* +**0 2 4 +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Center, + TextDirection.LeftRight_BottomTop, + @" +******* +******* +******* +*0 2 4* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Center, + TextDirection.LeftRight_BottomTop, + @" +******* +******* +******* +0 2 4 +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Center, + TextDirection.LeftRight_BottomTop, + @" +******* +******* +******* +0 你 4* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Center, + TextDirection.LeftRight_BottomTop, + @" +******* +******* +******* +*0 你 4 +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Center, + TextDirection.LeftRight_BottomTop, + @" +******* +******* +******* +0 你 4* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Center, + TextDirection.LeftRight_BottomTop, + @" +******* +******* +******* +0 你 4 +******* +******* +*******")] + + // RightLeft_TopBottom + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Center, + TextDirection.RightLeft_TopBottom, + @" +******* +******* +******* +4 2 0** +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Center, + TextDirection.RightLeft_TopBottom, + @" +******* +******* +******* +**4 2 0 +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Center, + TextDirection.RightLeft_TopBottom, + @" +******* +******* +******* +*4 2 0* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Center, + TextDirection.RightLeft_TopBottom, + @" +******* +******* +******* +4 2 0 +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Center, + TextDirection.RightLeft_TopBottom, + @" +******* +******* +******* +4 你 0* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Center, + TextDirection.RightLeft_TopBottom, + @" +******* +******* +******* +*4 你 0 +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Center, + TextDirection.RightLeft_TopBottom, + @" +******* +******* +******* +4 你 0* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Center, + TextDirection.RightLeft_TopBottom, + @" +******* +******* +******* +4 你 0 +******* +******* +*******")] + + // RightLeft_BottomTop + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Center, + TextDirection.RightLeft_BottomTop, + @" +******* +******* +******* +4 2 0** +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Center, + TextDirection.RightLeft_BottomTop, + @" +******* +******* +******* +**4 2 0 +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Center, + TextDirection.RightLeft_BottomTop, + @" +******* +******* +******* +*4 2 0* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Center, + TextDirection.RightLeft_BottomTop, + @" +******* +******* +******* +4 2 0 +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Center, + TextDirection.RightLeft_BottomTop, + @" +******* +******* +******* +4 你 0* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Center, + TextDirection.RightLeft_BottomTop, + @" +******* +******* +******* +*4 你 0 +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Center, + TextDirection.RightLeft_BottomTop, + @" +******* +******* +******* +4 你 0* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Center, + TextDirection.RightLeft_BottomTop, + @" +******* +******* +******* +4 你 0 +******* +******* +*******")] + + // Horizontal with alignment.Justified + // LeftRight_TopBottom + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Fill, + TextDirection.LeftRight_TopBottom, + @" +0 2 4** +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Fill, + TextDirection.LeftRight_TopBottom, + @" +**0 2 4 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Fill, + TextDirection.LeftRight_TopBottom, + @" +*0 2 4* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Fill, + TextDirection.LeftRight_TopBottom, + @" +0 2 4 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Fill, + TextDirection.LeftRight_TopBottom, + @" +0 你 4* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Fill, + TextDirection.LeftRight_TopBottom, + @" +*0 你 4 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Fill, + TextDirection.LeftRight_TopBottom, + @" +0 你 4* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Fill, + TextDirection.LeftRight_TopBottom, + @" +0 你 4 +******* +******* +******* +******* +******* +*******")] + + // LeftRight_BottomTop + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Fill, + TextDirection.LeftRight_BottomTop, + @" +0 2 4** +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Fill, + TextDirection.LeftRight_BottomTop, + @" +**0 2 4 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Fill, + TextDirection.LeftRight_BottomTop, + @" +*0 2 4* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Fill, + TextDirection.LeftRight_BottomTop, + @" +0 2 4 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Fill, + TextDirection.LeftRight_BottomTop, + @" +0 你 4* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Fill, + TextDirection.LeftRight_BottomTop, + @" +*0 你 4 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Fill, + TextDirection.LeftRight_BottomTop, + @" +0 你 4* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Fill, + TextDirection.LeftRight_BottomTop, + @" +0 你 4 +******* +******* +******* +******* +******* +*******")] + + // RightLeft_TopBottom + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Fill, + TextDirection.RightLeft_TopBottom, + @" +4 2 0** +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Fill, + TextDirection.RightLeft_TopBottom, + @" +**4 2 0 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Fill, + TextDirection.RightLeft_TopBottom, + @" +*4 2 0* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Fill, + TextDirection.RightLeft_TopBottom, + @" +4 2 0 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Fill, + TextDirection.RightLeft_TopBottom, + @" +4 你 0* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Fill, + TextDirection.RightLeft_TopBottom, + @" +*4 你 0 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Fill, + TextDirection.RightLeft_TopBottom, + @" +4 你 0* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Fill, + TextDirection.RightLeft_TopBottom, + @" +4 你 0 +******* +******* +******* +******* +******* +*******")] + + // RightLeft_BottomTop + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Fill, + TextDirection.RightLeft_BottomTop, + @" +4 2 0** +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Fill, + TextDirection.RightLeft_BottomTop, + @" +**4 2 0 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Fill, + TextDirection.RightLeft_BottomTop, + @" +*4 2 0* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Fill, + TextDirection.RightLeft_BottomTop, + @" +4 2 0 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Fill, + TextDirection.RightLeft_BottomTop, + @" +4 你 0* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Fill, + TextDirection.RightLeft_BottomTop, + @" +*4 你 0 +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Fill, + TextDirection.RightLeft_BottomTop, + @" +4 你 0* +******* +******* +******* +******* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Fill, + TextDirection.RightLeft_BottomTop, + @" +4 你 0 +******* +******* +******* +******* +******* +*******")] + + // Vertical with alignment.Left + // TopBottom_LeftRight + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Start, + TextDirection.TopBottom_LeftRight, + @" +0****** + ****** +2****** + ****** +4****** +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.End, + TextDirection.TopBottom_LeftRight, + @" +******* +******* +0****** + ****** +2****** + ****** +4******")] + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Center, + TextDirection.TopBottom_LeftRight, + @" +******* +0****** + ****** +2****** + ****** +4****** +*******")] + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Fill, + TextDirection.TopBottom_LeftRight, + @" +0****** + ****** + ****** +2****** + ****** + ****** +4******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Start, + TextDirection.TopBottom_LeftRight, + @" +0****** + ****** +你***** + ****** +4****** +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.End, + TextDirection.TopBottom_LeftRight, + @" +******* +******* +0****** + ****** +你***** + ****** +4******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Center, + TextDirection.TopBottom_LeftRight, + @" +******* +0****** + ****** +你***** + ****** +4****** +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Fill, + TextDirection.TopBottom_LeftRight, + @" +0****** + ****** + ****** +你***** + ****** + ****** +4******")] + + // TopBottom_RightLeft + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Start, + TextDirection.TopBottom_RightLeft, + @" +0****** + ****** +2****** + ****** +4****** +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.End, + TextDirection.TopBottom_RightLeft, + @" +******* +******* +0****** + ****** +2****** + ****** +4******")] + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Center, + TextDirection.TopBottom_RightLeft, + @" +******* +0****** + ****** +2****** + ****** +4****** +*******")] + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Fill, + TextDirection.TopBottom_RightLeft, + @" +0****** + ****** + ****** +2****** + ****** + ****** +4******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Start, + TextDirection.TopBottom_RightLeft, + @" +0****** + ****** +你***** + ****** +4****** +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.End, + TextDirection.TopBottom_RightLeft, + @" +******* +******* +0****** + ****** +你***** + ****** +4******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Center, + TextDirection.TopBottom_RightLeft, + @" +******* +0****** + ****** +你***** + ****** +4****** +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Fill, + TextDirection.TopBottom_RightLeft, + @" +0****** + ****** + ****** +你***** + ****** + ****** +4******")] + + // BottomTop_LeftRight + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Start, + TextDirection.BottomTop_LeftRight, + @" +4****** + ****** +2****** + ****** +0****** +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.End, + TextDirection.BottomTop_LeftRight, + @" +******* +******* +4****** + ****** +2****** + ****** +0******")] + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Center, + TextDirection.BottomTop_LeftRight, + @" +******* +4****** + ****** +2****** + ****** +0****** +*******")] + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Fill, + TextDirection.BottomTop_LeftRight, + @" +4****** + ****** + ****** +2****** + ****** + ****** +0******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Start, + TextDirection.BottomTop_LeftRight, + @" +4****** + ****** +你***** + ****** +0****** +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.End, + TextDirection.BottomTop_LeftRight, + @" +******* +******* +4****** + ****** +你***** + ****** +0******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Center, + TextDirection.BottomTop_LeftRight, + @" +******* +4****** + ****** +你***** + ****** +0****** +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Fill, + TextDirection.BottomTop_LeftRight, + @" +4****** + ****** + ****** +你***** + ****** + ****** +0******")] + + // BottomTop_RightLeft + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Start, + TextDirection.BottomTop_RightLeft, + @" +4****** + ****** +2****** + ****** +0****** +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.End, + TextDirection.BottomTop_RightLeft, + @" +******* +******* +4****** + ****** +2****** + ****** +0******")] + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Center, + TextDirection.BottomTop_RightLeft, + @" +******* +4****** + ****** +2****** + ****** +0****** +*******")] + [InlineData ( + "0 2 4", + Alignment.Start, + Alignment.Fill, + TextDirection.BottomTop_RightLeft, + @" +4****** + ****** + ****** +2****** + ****** + ****** +0******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Start, + TextDirection.BottomTop_RightLeft, + @" +4****** + ****** +你***** + ****** +0****** +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.End, + TextDirection.BottomTop_RightLeft, + @" +******* +******* +4****** + ****** +你***** + ****** +0******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Center, + TextDirection.BottomTop_RightLeft, + @" +******* +4****** + ****** +你***** + ****** +0****** +*******")] + [InlineData ( + "0 你 4", + Alignment.Start, + Alignment.Fill, + TextDirection.BottomTop_RightLeft, + @" +4****** + ****** + ****** +你***** + ****** + ****** +0******")] + + // Vertical with alignment.Right + // TopBottom_LeftRight + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Start, + TextDirection.TopBottom_LeftRight, + @" +******0 +****** +******2 +****** +******4 +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.End, + TextDirection.TopBottom_LeftRight, + @" +******* +******* +******0 +****** +******2 +****** +******4")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Center, + TextDirection.TopBottom_LeftRight, + @" +******* +******0 +****** +******2 +****** +******4 +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Fill, + TextDirection.TopBottom_LeftRight, + @" +******0 +****** +****** +******2 +****** +****** +******4")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Start, + TextDirection.TopBottom_LeftRight, + @" +*****0* +***** * +*****你 +***** * +*****4* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.End, + TextDirection.TopBottom_LeftRight, + @" +******* +******* +*****0* +***** * +*****你 +***** * +*****4*")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Center, + TextDirection.TopBottom_LeftRight, + @" +******* +*****0* +***** * +*****你 +***** * +*****4* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Fill, + TextDirection.TopBottom_LeftRight, + @" +*****0* +***** * +***** * +*****你 +***** * +***** * +*****4*")] + + // TopBottom_RightLeft + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Start, + TextDirection.TopBottom_RightLeft, + @" +******0 +****** +******2 +****** +******4 +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.End, + TextDirection.TopBottom_RightLeft, + @" +******* +******* +******0 +****** +******2 +****** +******4")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Center, + TextDirection.TopBottom_RightLeft, + @" +******* +******0 +****** +******2 +****** +******4 +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Fill, + TextDirection.TopBottom_RightLeft, + @" +******0 +****** +****** +******2 +****** +****** +******4")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Start, + TextDirection.TopBottom_RightLeft, + @" +*****0* +***** * +*****你 +***** * +*****4* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.End, + TextDirection.TopBottom_RightLeft, + @" +******* +******* +*****0* +***** * +*****你 +***** * +*****4*")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Center, + TextDirection.TopBottom_RightLeft, + @" +******* +*****0* +***** * +*****你 +***** * +*****4* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Fill, + TextDirection.TopBottom_RightLeft, + @" +*****0* +***** * +***** * +*****你 +***** * +***** * +*****4*")] + + // BottomTop_LeftRight + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Start, + TextDirection.BottomTop_LeftRight, + @" +******4 +****** +******2 +****** +******0 +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.End, + TextDirection.BottomTop_LeftRight, + @" +******* +******* +******4 +****** +******2 +****** +******0")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Center, + TextDirection.BottomTop_LeftRight, + @" +******* +******4 +****** +******2 +****** +******0 +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Fill, + TextDirection.BottomTop_LeftRight, + @" +******4 +****** +****** +******2 +****** +****** +******0")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Start, + TextDirection.BottomTop_LeftRight, + @" +*****4* +***** * +*****你 +***** * +*****0* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.End, + TextDirection.BottomTop_LeftRight, + @" +******* +******* +*****4* +***** * +*****你 +***** * +*****0*")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Center, + TextDirection.BottomTop_LeftRight, + @" +******* +*****4* +***** * +*****你 +***** * +*****0* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Fill, + TextDirection.BottomTop_LeftRight, + @" +*****4* +***** * +***** * +*****你 +***** * +***** * +*****0*")] + + // BottomTop_RightLeft + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Start, + TextDirection.BottomTop_RightLeft, + @" +******4 +****** +******2 +****** +******0 +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.End, + TextDirection.BottomTop_RightLeft, + @" +******* +******* +******4 +****** +******2 +****** +******0")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Center, + TextDirection.BottomTop_RightLeft, + @" +******* +******4 +****** +******2 +****** +******0 +*******")] + [InlineData ( + "0 2 4", + Alignment.End, + Alignment.Fill, + TextDirection.BottomTop_RightLeft, + @" +******4 +****** +****** +******2 +****** +****** +******0")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Start, + TextDirection.BottomTop_RightLeft, + @" +*****4* +***** * +*****你 +***** * +*****0* +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.End, + TextDirection.BottomTop_RightLeft, + @" +******* +******* +*****4* +***** * +*****你 +***** * +*****0*")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Center, + TextDirection.BottomTop_RightLeft, + @" +******* +*****4* +***** * +*****你 +***** * +*****0* +*******")] + [InlineData ( + "0 你 4", + Alignment.End, + Alignment.Fill, + TextDirection.BottomTop_RightLeft, + @" +*****4* +***** * +***** * +*****你 +***** * +***** * +*****0*")] + + // Vertical with alignment.Centered + // TopBottom_LeftRight + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Start, + TextDirection.TopBottom_LeftRight, + @" +***0*** +*** *** +***2*** +*** *** +***4*** +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.End, + TextDirection.TopBottom_LeftRight, + @" +******* +******* +***0*** +*** *** +***2*** +*** *** +***4***")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Center, + TextDirection.TopBottom_LeftRight, + @" +******* +***0*** +*** *** +***2*** +*** *** +***4*** +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Fill, + TextDirection.TopBottom_LeftRight, + @" +***0*** +*** *** +*** *** +***2*** +*** *** +*** *** +***4***")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Start, + TextDirection.TopBottom_LeftRight, + @" +**0**** +** **** +**你*** +** **** +**4**** +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.End, + TextDirection.TopBottom_LeftRight, + @" +******* +******* +**0**** +** **** +**你*** +** **** +**4****")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Center, + TextDirection.TopBottom_LeftRight, + @" +******* +**0**** +** **** +**你*** +** **** +**4**** +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Fill, + TextDirection.TopBottom_LeftRight, + @" +**0**** +** **** +** **** +**你*** +** **** +** **** +**4****")] + + // TopBottom_RightLeft + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Start, + TextDirection.TopBottom_RightLeft, + @" +***0*** +*** *** +***2*** +*** *** +***4*** +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.End, + TextDirection.TopBottom_RightLeft, + @" +******* +******* +***0*** +*** *** +***2*** +*** *** +***4***")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Center, + TextDirection.TopBottom_RightLeft, + @" +******* +***0*** +*** *** +***2*** +*** *** +***4*** +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Fill, + TextDirection.TopBottom_RightLeft, + @" +***0*** +*** *** +*** *** +***2*** +*** *** +*** *** +***4***")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Start, + TextDirection.TopBottom_RightLeft, + @" +**0**** +** **** +**你*** +** **** +**4**** +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.End, + TextDirection.TopBottom_RightLeft, + @" +******* +******* +**0**** +** **** +**你*** +** **** +**4****")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Center, + TextDirection.TopBottom_RightLeft, + @" +******* +**0**** +** **** +**你*** +** **** +**4**** +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Fill, + TextDirection.TopBottom_RightLeft, + @" +**0**** +** **** +** **** +**你*** +** **** +** **** +**4****")] + + // BottomTop_LeftRight + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Start, + TextDirection.BottomTop_LeftRight, + @" +***4*** +*** *** +***2*** +*** *** +***0*** +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.End, + TextDirection.BottomTop_LeftRight, + @" +******* +******* +***4*** +*** *** +***2*** +*** *** +***0***")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Center, + TextDirection.BottomTop_LeftRight, + @" +******* +***4*** +*** *** +***2*** +*** *** +***0*** +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Fill, + TextDirection.BottomTop_LeftRight, + @" +***4*** +*** *** +*** *** +***2*** +*** *** +*** *** +***0***")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Start, + TextDirection.BottomTop_LeftRight, + @" +**4**** +** **** +**你*** +** **** +**0**** +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.End, + TextDirection.BottomTop_LeftRight, + @" +******* +******* +**4**** +** **** +**你*** +** **** +**0****")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Center, + TextDirection.BottomTop_LeftRight, + @" +******* +**4**** +** **** +**你*** +** **** +**0**** +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Fill, + TextDirection.BottomTop_LeftRight, + @" +**4**** +** **** +** **** +**你*** +** **** +** **** +**0****")] + + // BottomTop_RightLeft + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Start, + TextDirection.BottomTop_RightLeft, + @" +***4*** +*** *** +***2*** +*** *** +***0*** +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.End, + TextDirection.BottomTop_RightLeft, + @" +******* +******* +***4*** +*** *** +***2*** +*** *** +***0***")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Center, + TextDirection.BottomTop_RightLeft, + @" +******* +***4*** +*** *** +***2*** +*** *** +***0*** +*******")] + [InlineData ( + "0 2 4", + Alignment.Center, + Alignment.Fill, + TextDirection.BottomTop_RightLeft, + @" +***4*** +*** *** +*** *** +***2*** +*** *** +*** *** +***0***")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Start, + TextDirection.BottomTop_RightLeft, + @" +**4**** +** **** +**你*** +** **** +**0**** +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.End, + TextDirection.BottomTop_RightLeft, + @" +******* +******* +**4**** +** **** +**你*** +** **** +**0****")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Center, + TextDirection.BottomTop_RightLeft, + @" +******* +**4**** +** **** +**你*** +** **** +**0**** +*******")] + [InlineData ( + "0 你 4", + Alignment.Center, + Alignment.Fill, + TextDirection.BottomTop_RightLeft, + @" +**4**** +** **** +** **** +**你*** +** **** +** **** +**0****")] + + // Vertical with alignment.Justified + // TopBottom_LeftRight + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Start, + TextDirection.TopBottom_LeftRight, + @" +0****** + ****** +2****** + ****** +4****** +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.End, + TextDirection.TopBottom_LeftRight, + @" +******* +******* +0****** + ****** +2****** + ****** +4******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Center, + TextDirection.TopBottom_LeftRight, + @" +******* +0****** + ****** +2****** + ****** +4****** +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Fill, + TextDirection.TopBottom_LeftRight, + @" +0****** + ****** + ****** +2****** + ****** + ****** +4******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Start, + TextDirection.TopBottom_LeftRight, + @" +0****** + ****** +你***** + ****** +4****** +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.End, + TextDirection.TopBottom_LeftRight, + @" +******* +******* +0****** + ****** +你***** + ****** +4******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Center, + TextDirection.TopBottom_LeftRight, + @" +******* +0****** + ****** +你***** + ****** +4****** +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Fill, + TextDirection.TopBottom_LeftRight, + @" +0****** + ****** + ****** +你***** + ****** + ****** +4******")] + + // TopBottom_RightLeft + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Start, + TextDirection.TopBottom_RightLeft, + @" +0****** + ****** +2****** + ****** +4****** +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.End, + TextDirection.TopBottom_RightLeft, + @" +******* +******* +0****** + ****** +2****** + ****** +4******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Center, + TextDirection.TopBottom_RightLeft, + @" +******* +0****** + ****** +2****** + ****** +4****** +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Fill, + TextDirection.TopBottom_RightLeft, + @" +0****** + ****** + ****** +2****** + ****** + ****** +4******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Start, + TextDirection.TopBottom_RightLeft, + @" +0****** + ****** +你***** + ****** +4****** +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.End, + TextDirection.TopBottom_RightLeft, + @" +******* +******* +0****** + ****** +你***** + ****** +4******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Center, + TextDirection.TopBottom_RightLeft, + @" +******* +0****** + ****** +你***** + ****** +4****** +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Fill, + TextDirection.TopBottom_RightLeft, + @" +0****** + ****** + ****** +你***** + ****** + ****** +4******")] + + // BottomTop_LeftRight + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Start, + TextDirection.BottomTop_LeftRight, + @" +4****** + ****** +2****** + ****** +0****** +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.End, + TextDirection.BottomTop_LeftRight, + @" +******* +******* +4****** + ****** +2****** + ****** +0******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Center, + TextDirection.BottomTop_LeftRight, + @" +******* +4****** + ****** +2****** + ****** +0****** +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Fill, + TextDirection.BottomTop_LeftRight, + @" +4****** + ****** + ****** +2****** + ****** + ****** +0******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Start, + TextDirection.BottomTop_LeftRight, + @" +4****** + ****** +你***** + ****** +0****** +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.End, + TextDirection.BottomTop_LeftRight, + @" +******* +******* +4****** + ****** +你***** + ****** +0******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Center, + TextDirection.BottomTop_LeftRight, + @" +******* +4****** + ****** +你***** + ****** +0****** +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Fill, + TextDirection.BottomTop_LeftRight, + @" +4****** + ****** + ****** +你***** + ****** + ****** +0******")] + + // BottomTop_RightLeft + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Start, + TextDirection.BottomTop_RightLeft, + @" +4****** + ****** +2****** + ****** +0****** +******* +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.End, + TextDirection.BottomTop_RightLeft, + @" +******* +******* +4****** + ****** +2****** + ****** +0******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Center, + TextDirection.BottomTop_RightLeft, + @" +******* +4****** + ****** +2****** + ****** +0****** +*******")] + [InlineData ( + "0 2 4", + Alignment.Fill, + Alignment.Fill, + TextDirection.BottomTop_RightLeft, + @" +4****** + ****** + ****** +2****** + ****** + ****** +0******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Start, + TextDirection.BottomTop_RightLeft, + @" +4****** + ****** +你***** + ****** +0****** +******* +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.End, + TextDirection.BottomTop_RightLeft, + @" +******* +******* +4****** + ****** +你***** + ****** +0******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Center, + TextDirection.BottomTop_RightLeft, + @" +******* +4****** + ****** +你***** + ****** +0****** +*******")] + [InlineData ( + "0 你 4", + Alignment.Fill, + Alignment.Fill, + TextDirection.BottomTop_RightLeft, + @" +4****** + ****** + ****** +你***** + ****** + ****** +0******")] + public void Draw_Text_Justification (string text, Alignment horizontalTextAlignment, Alignment alignment, TextDirection textDirection, string expectedText) + { + TextFormatter tf = new () + { + Alignment = horizontalTextAlignment, + VerticalAlignment = alignment, + Direction = textDirection, + ConstrainToSize = new (7, 7), + Text = text + }; + + Application.Driver?.FillRect (new (0, 0, 7, 7), (Rune)'*'); + tf.Draw (new (0, 0, 7, 7), Attribute.Default, Attribute.Default); + DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); + } + + [SetupFakeDriver] + [Theory] + [InlineData ("A", 0, 1, "", 0)] + [InlineData ("A", 1, 1, "A", 0)] + [InlineData ("A", 2, 2, " A", 1)] + [InlineData ("AB", 1, 1, "B", 0)] + [InlineData ("AB", 2, 2, " A\n B", 0)] + [InlineData ("ABC", 3, 2, " B\n C", 0)] + [InlineData ("ABC", 4, 2, " B\n C", 0)] + [InlineData ("ABC", 6, 2, " B\n C", 0)] + [InlineData ("こんにちは", 0, 1, "", 0)] + [InlineData ("こんにちは", 1, 0, "", 0)] + [InlineData ("こんにちは", 1, 1, "", 0)] + [InlineData ("こんにちは", 2, 1, "は", 0)] + [InlineData ("こんにちは", 2, 2, "ち\nは", 0)] + [InlineData ("こんにちは", 2, 3, "に\nち\nは", 0)] + [InlineData ("こんにちは", 2, 4, "ん\nに\nち\nは", 0)] + [InlineData ("こんにちは", 2, 5, "こ\nん\nに\nち\nは", 0)] + [InlineData ("こんにちは", 2, 6, "こ\nん\nに\nち\nは", 1)] + [InlineData ("ABCD\nこんにちは", 4, 7, " こ\n Aん\n Bに\n Cち\n Dは", 2)] + [InlineData ("こんにちは\nABCD", 3, 7, "こ \nんA\nにB\nちC\nはD", 2)] + public void Draw_Vertical_Bottom_Horizontal_Right (string text, int width, int height, string expectedText, int expectedY) + { + TextFormatter tf = new () + { + Text = text, + Alignment = Alignment.End, + Direction = TextDirection.TopBottom_LeftRight, + VerticalAlignment = Alignment.End + }; + + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = height; + + tf.Draw (new (Point.Empty, new (width, height)), Attribute.Default, Attribute.Default); + Rectangle rect = DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); + Assert.Equal (expectedY, rect.Y); + } + + [SetupFakeDriver] + [Theory] + [InlineData ("A", 1, 0, "")] + [InlineData ("A", 0, 1, "")] + [InlineData ("AB1 2", 1, 2, "2")] + [InlineData ("AB12", 1, 5, "2\n1\nB\nA")] + [InlineData ("AB\n12", 2, 5, "B2\nA1")] + [InlineData ("ABC 123 456", 2, 7, "6C\n5B\n4A\n \n3 \n2 \n1 ")] + [InlineData ("こんにちは", 1, 1, "")] + [InlineData ("こんにちは", 2, 1, "は")] + [InlineData ("こんにちは", 2, 5, "は\nち\nに\nん\nこ")] + [InlineData ("こんにちは", 2, 10, "は\nち\nに\nん\nこ")] + [InlineData ("こんにちは\nAB\n12", 4, 10, "はB2\nちA1\nに \nん \nこ ")] + public void Draw_Vertical_BottomTop_LeftRight (string text, int width, int height, string expectedText) + { + TextFormatter tf = new () + { + Text = text, + Direction = TextDirection.BottomTop_LeftRight + }; + + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = height; + tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); + + DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); + } + + [SetupFakeDriver] + [Theory] + [InlineData ("A", 1, 0, "")] + [InlineData ("A", 0, 1, "")] + [InlineData ("AB1 2", 1, 2, "2")] + [InlineData ("AB12", 1, 5, "2\n1\nB\nA")] + [InlineData ("AB\n12", 2, 5, "2B\n1A")] + [InlineData ("ABC 123 456", 2, 7, "C6\nB5\nA4\n \n 3\n 2\n 1")] + [InlineData ("こんにちは", 1, 1, "")] + [InlineData ("こんにちは", 2, 1, "は")] + [InlineData ("こんにちは", 2, 5, "は\nち\nに\nん\nこ")] + [InlineData ("こんにちは", 2, 10, "は\nち\nに\nん\nこ")] + [InlineData ("こんにちは\nAB\n12", 4, 10, "2Bは\n1Aち\n に\n ん\n こ")] + public void Draw_Vertical_BottomTop_RightLeft (string text, int width, int height, string expectedText) + { + TextFormatter tf = new () + { + Text = text, + Direction = TextDirection.BottomTop_RightLeft + }; + + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = height; + tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); + + DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); + } + + // Draw tests - Note that these depend on View + + [Fact] + [TestRespondersDisposed] + public void Draw_Vertical_Throws_IndexOutOfRangeException_With_Negative_Bounds () + { + Application.Init (new FakeDriver ()); + Dialog.DefaultShadow = ShadowStyle.None; + Button.DefaultShadow = ShadowStyle.None; + + Toplevel top = new (); + + var view = new View { Y = -2, Height = 10, TextDirection = TextDirection.TopBottom_LeftRight, Text = "view" }; + top.Add (view); + + Application.Iteration += (s, a) => + { + Assert.Equal (-2, view.Y); + + Application.RequestStop (); + }; + + try + { + Application.Run (top); + } + catch (IndexOutOfRangeException ex) + { + // After the fix this exception will not be caught. + Assert.IsType (ex); + } + + top.Dispose (); + + // Shutdown must be called to safely clean up Application if Init has been called + Application.Shutdown (); + } + + [SetupFakeDriver] + [Theory] + [InlineData ("A", 5, 5, "A")] + [InlineData ( + "AB12", + 5, + 5, + @" +A +B +1 +2")] + [InlineData ( + "AB\n12", + 5, + 5, + @" +A1 +B2")] + [InlineData ("", 5, 1, "")] + [InlineData ( + "Hello Worlds", + 1, + 12, + @" +H +e +l +l +o + +W +o +r +l +d +s")] + [InlineData ("Hello Worlds", 12, 1, @"HelloWorlds")] + public void Draw_Vertical_TopBottom_LeftRight (string text, int width, int height, string expectedText) + { + TextFormatter tf = new () + { + Text = text, + Direction = TextDirection.TopBottom_LeftRight + }; + + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = height; + tf.Draw (new (0, 0, 20, 20), Attribute.Default, Attribute.Default); + + DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); + } + + [SetupFakeDriver] + [Theory] + + // The expectedY param is to probe that the expectedText param start at that Y coordinate + [InlineData ("A", 0, "", 0)] + [InlineData ("A", 1, "A", 0)] + [InlineData ("A", 2, "A", 0)] + [InlineData ("A", 3, "A", 1)] + [InlineData ("AB", 1, "A", 0)] + [InlineData ("AB", 2, "A\nB", 0)] + [InlineData ("ABC", 2, "A\nB", 0)] + [InlineData ("ABC", 3, "A\nB\nC", 0)] + [InlineData ("ABC", 4, "A\nB\nC", 0)] + [InlineData ("ABC", 5, "A\nB\nC", 1)] + [InlineData ("ABC", 6, "A\nB\nC", 1)] + [InlineData ("ABC", 9, "A\nB\nC", 3)] + [InlineData ("ABCD", 2, "B\nC", 0)] + [InlineData ("こんにちは", 0, "", 0)] + [InlineData ("こんにちは", 1, "に", 0)] + [InlineData ("こんにちは", 2, "ん\nに", 0)] + [InlineData ("こんにちは", 3, "ん\nに\nち", 0)] + [InlineData ("こんにちは", 4, "こ\nん\nに\nち", 0)] + [InlineData ("こんにちは", 5, "こ\nん\nに\nち\nは", 0)] + [InlineData ("こんにちは", 6, "こ\nん\nに\nち\nは", 0)] + [InlineData ("ABCD\nこんにちは", 7, "Aこ\nBん\nCに\nDち\n は", 1)] + [InlineData ("こんにちは\nABCD", 7, "こA\nんB\nにC\nちD\nは ", 1)] + public void Draw_Vertical_TopBottom_LeftRight_Middle (string text, int height, string expectedText, int expectedY) + { + TextFormatter tf = new () + { + Text = text, + Direction = TextDirection.TopBottom_LeftRight, + VerticalAlignment = Alignment.Center + }; + + int width = text.ToRunes ().Max (r => r.GetColumns ()); + + if (text.Contains ("\n")) + { + width++; + } + + tf.ConstrainToWidth = width; + tf.ConstrainToHeight = height; + tf.Draw (new (0, 0, 5, height), Attribute.Default, Attribute.Default); + + Rectangle rect = DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); + Assert.Equal (expectedY, rect.Y); + } + + [SetupFakeDriver] + [Theory] + [InlineData ("A", 5, "A")] + [InlineData ( + "AB12", + 5, + @" +A +B +1 +2")] + [InlineData ( + "AB\n12", + 5, + @" +A1 +B2")] + [InlineData ("", 1, "")] + [InlineData ( + "AB1 2", + 2, + @" +A12 +B ")] + [InlineData ( + "こんにちは", + 1, + @" +こん")] + [InlineData ( + "こんにちは", + 2, + @" +こに +んち")] + [InlineData ( + "こんにちは", + 5, + @" +こ +ん +に +ち +は")] + public void Draw_Vertical_TopBottom_LeftRight_Top (string text, int height, string expectedText) + { + TextFormatter tf = new () + { + Text = text, + Direction = TextDirection.TopBottom_LeftRight + }; + + tf.ConstrainToWidth = 5; + tf.ConstrainToHeight = height; + tf.Draw (new (0, 0, 5, height), Attribute.Default, Attribute.Default); + + DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); + } + + [Theory] + [InlineData (14, 1, TextDirection.LeftRight_TopBottom, "Les Misęrables")] + [InlineData (1, 14, TextDirection.TopBottom_LeftRight, "L\ne\ns\n \nM\ni\ns\nę\nr\na\nb\nl\ne\ns")] + [InlineData ( + 4, + 4, + TextDirection.TopBottom_LeftRight, + @" +LMre +eias +ssb + ęl " + )] + public void Draw_With_Combining_Runes (int width, int height, TextDirection textDirection, string expected) + { + var driver = new FakeDriver (); + driver.Init (); + + var text = "Les Mise\u0328\u0301rables"; + + var tf = new TextFormatter (); + tf.Direction = textDirection; + tf.Text = text; + + Assert.True (tf.WordWrap); + + tf.ConstrainToSize = new (width, height); + + tf.Draw ( + new (0, 0, width, height), + new (ColorName16.White, ColorName16.Black), + new (ColorName16.Blue, ColorName16.Black), + default (Rectangle), + driver + ); + DriverAssert.AssertDriverContentsWithFrameAre (expected, _output, driver); + + driver.End (); + } + + [Fact] + [SetupFakeDriver] + public void FillRemaining_True_False () + { + ((FakeDriver)Application.Driver!).SetBufferSize (22, 5); + + Attribute [] attrs = + { + Attribute.Default, new (ColorName16.Green, ColorName16.BrightMagenta), + new (ColorName16.Blue, ColorName16.Cyan) + }; + var tf = new TextFormatter { ConstrainToSize = new (14, 3), Text = "Test\nTest long\nTest long long\n", MultiLine = true }; + + tf.Draw ( + new (1, 1, 19, 3), + attrs [1], + attrs [2]); + + Assert.False (tf.FillRemaining); + + DriverAssert.AssertDriverContentsWithFrameAre ( + @" + Test + Test long + Test long long", + _output); + + DriverAssert.AssertDriverAttributesAre ( + @" +000000000000000000000 +011110000000000000000 +011111111100000000000 +011111111111111000000 +000000000000000000000", + _output, + null, + attrs); + + tf.FillRemaining = true; + + tf.Draw ( + new (1, 1, 19, 3), + attrs [1], + attrs [2]); + + DriverAssert.AssertDriverAttributesAre ( + @" +000000000000000000000 +011111111111111111110 +011111111111111111110 +011111111111111111110 +000000000000000000000", + _output, + null, + attrs); + } + + [SetupFakeDriver] + [Theory] + [InlineData ("Hello World", 15, 1, "Hello World")] + [InlineData ( + "Well Done\nNice Work", + 15, + 2, + @" +Well Done +Nice Work")] + [InlineData ("你好 世界", 15, 1, "你好 世界")] + [InlineData ( + "做 得好\n幹 得好", + 15, + 2, + @" +做 得好 +幹 得好")] + public void Justify_Horizontal (string text, int width, int height, string expectedText) + { + TextFormatter tf = new () + { + Text = text, + Alignment = Alignment.Fill, + ConstrainToSize = new Size (width, height), + MultiLine = true + }; + + tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); + + DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); + } + + [Theory] + [InlineData (17, 1, TextDirection.LeftRight_TopBottom, 4, "This is a Tab")] + [InlineData (1, 17, TextDirection.TopBottom_LeftRight, 4, "T\nh\ni\ns\n \ni\ns\n \na\n \n \n \n \n \nT\na\nb")] + [InlineData (13, 1, TextDirection.LeftRight_TopBottom, 0, "This is a Tab")] + [InlineData (1, 13, TextDirection.TopBottom_LeftRight, 0, "T\nh\ni\ns\n \ni\ns\n \na\n \nT\na\nb")] + public void TabWith_PreserveTrailingSpaces_False ( + int width, + int height, + TextDirection textDirection, + int tabWidth, + string expected + ) + { + var driver = new FakeDriver (); + driver.Init (); + + var text = "This is a \tTab"; + var tf = new TextFormatter (); + tf.Direction = textDirection; + tf.TabWidth = tabWidth; + tf.Text = text; + tf.ConstrainToWidth = 20; + tf.ConstrainToHeight = 20; + + Assert.True (tf.WordWrap); + Assert.False (tf.PreserveTrailingSpaces); + + tf.Draw ( + new (0, 0, width, height), + new (ColorName16.White, ColorName16.Black), + new (ColorName16.Blue, ColorName16.Black), + default (Rectangle), + driver + ); + DriverAssert.AssertDriverContentsWithFrameAre (expected, _output, driver); + + driver.End (); + } + + [Theory] + [InlineData (17, 1, TextDirection.LeftRight_TopBottom, 4, "This is a Tab")] + [InlineData (1, 17, TextDirection.TopBottom_LeftRight, 4, "T\nh\ni\ns\n \ni\ns\n \na\n \n \n \n \n \nT\na\nb")] + [InlineData (13, 1, TextDirection.LeftRight_TopBottom, 0, "This is a Tab")] + [InlineData (1, 13, TextDirection.TopBottom_LeftRight, 0, "T\nh\ni\ns\n \ni\ns\n \na\n \nT\na\nb")] + public void TabWith_PreserveTrailingSpaces_True ( + int width, + int height, + TextDirection textDirection, + int tabWidth, + string expected + ) + { + var driver = new FakeDriver (); + driver.Init (); + + var text = "This is a \tTab"; + var tf = new TextFormatter (); + + tf.Direction = textDirection; + tf.TabWidth = tabWidth; + tf.PreserveTrailingSpaces = true; + tf.Text = text; + tf.ConstrainToWidth = 20; + tf.ConstrainToHeight = 20; + + Assert.True (tf.WordWrap); + + tf.Draw ( + new (0, 0, width, height), + new (ColorName16.White, ColorName16.Black), + new (ColorName16.Blue, ColorName16.Black), + default (Rectangle), + driver + ); + DriverAssert.AssertDriverContentsWithFrameAre (expected, _output, driver); + + driver.End (); + } + + [Theory] + [InlineData (17, 1, TextDirection.LeftRight_TopBottom, 4, "This is a Tab")] + [InlineData (1, 17, TextDirection.TopBottom_LeftRight, 4, "T\nh\ni\ns\n \ni\ns\n \na\n \n \n \n \n \nT\na\nb")] + [InlineData (13, 1, TextDirection.LeftRight_TopBottom, 0, "This is a Tab")] + [InlineData (1, 13, TextDirection.TopBottom_LeftRight, 0, "T\nh\ni\ns\n \ni\ns\n \na\n \nT\na\nb")] + public void TabWith_WordWrap_True ( + int width, + int height, + TextDirection textDirection, + int tabWidth, + string expected + ) + { + var driver = new FakeDriver (); + driver.Init (); + + var text = "This is a \tTab"; + var tf = new TextFormatter (); + + tf.Direction = textDirection; + tf.TabWidth = tabWidth; + tf.WordWrap = true; + tf.Text = text; + tf.ConstrainToWidth = 20; + tf.ConstrainToHeight = 20; + + Assert.False (tf.PreserveTrailingSpaces); + + tf.Draw ( + new (0, 0, width, height), + new (ColorName16.White, ColorName16.Black), + new (ColorName16.Blue, ColorName16.Black), + default (Rectangle), + driver + ); + DriverAssert.AssertDriverContentsWithFrameAre (expected, _output, driver); + + driver.End (); + } + + [Fact] + [SetupFakeDriver] + public void UICatalog_AboutBox_Text () + { + TextFormatter tf = new () + { + Text = UICatalogApp.GetAboutBoxMessage (), + Alignment = Alignment.Center, + VerticalAlignment = Alignment.Start, + WordWrap = false, + MultiLine = true, + HotKeySpecifier = (Rune)0xFFFF + }; + + Size tfSize = tf.FormatAndGetSize (); + Assert.Equal (new (59, 13), tfSize); + + ((FakeDriver)Application.Driver).SetBufferSize (tfSize.Width, tfSize.Height); + + Application.Driver.FillRect (Application.Screen, (Rune)'*'); + tf.Draw (Application.Screen, Attribute.Default, Attribute.Default); + + var expectedText = """ + UI Catalog: A comprehensive sample library and test app for + *********************************************************** + _______ _ _ _____ _ * + |__ __| (_) | | / ____| (_)* + | | ___ _ __ _ __ ___ _ _ __ __ _| || | __ _ _ _ * + | |/ _ \ '__| '_ ` _ \| | '_ \ / _` | || | |_ | | | | |* + | | __/ | | | | | | | | | | | (_| | || |__| | |_| | |* + |_|\___|_| |_| |_| |_|_|_| |_|\__,_|_(_)_____|\__,_|_|* + *********************************************************** + **********************v2 - Pre-Alpha*********************** + *********************************************************** + **********https://github.com/gui-cs/Terminal.Gui*********** + *********************************************************** + """; + + DriverAssert.AssertDriverContentsAre (expectedText.ReplaceLineEndings (), _output); + } + + #region FormatAndGetSizeTests + + // TODO: Add multi-line examples + // TODO: Add other TextDirection examples + + [Theory] + [SetupFakeDriver] + [InlineData ("界1234", 10, 10, TextDirection.LeftRight_TopBottom, 6, 1, @"界1234")] + [InlineData ("01234", 10, 10, TextDirection.LeftRight_TopBottom, 5, 1, @"01234")] + [InlineData ( + "界1234", + 10, + 10, + TextDirection.TopBottom_LeftRight, + 2, + 5, + """ + 界 + 1 + 2 + 3 + 4 + """)] + [InlineData ( + "01234", + 10, + 10, + TextDirection.TopBottom_LeftRight, + 1, + 5, + """ + 0 + 1 + 2 + 3 + 4 + """)] + [InlineData ( + "界1234", + 3, + 3, + TextDirection.LeftRight_TopBottom, + 3, + 2, + """ + 界1 + 234 + """)] + [InlineData ( + "01234", + 3, + 3, + TextDirection.LeftRight_TopBottom, + 3, + 2, + """ + 012 + 34 + """)] + [InlineData ( + "界1234", + 3, + 3, + TextDirection.TopBottom_LeftRight, + 3, + 3, + """ + 界3 + 1 4 + 2 + """)] + [InlineData ( + "01234", + 3, + 3, + TextDirection.TopBottom_LeftRight, + 2, + 3, + """ + 03 + 14 + 2 + """)] + [InlineData ("01234", 2, 1, TextDirection.LeftRight_TopBottom, 2, 1, @"01")] + public void FormatAndGetSize_Returns_Correct_Size ( + string text, + int width, + int height, + TextDirection direction, + int expectedWidth, + int expectedHeight, + string expectedDraw + ) + { + TextFormatter tf = new () + { + Direction = direction, + ConstrainToWidth = width, + ConstrainToHeight = height, + Text = text + }; + Assert.True (tf.WordWrap); + Size size = tf.FormatAndGetSize (); + Assert.Equal (new (expectedWidth, expectedHeight), size); + + tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); + + DriverAssert.AssertDriverContentsWithFrameAre (expectedDraw, _output); + } + + [Theory] + [SetupFakeDriver] + [InlineData ("界1234", 10, 10, TextDirection.LeftRight_TopBottom, 6, 1, @"界1234")] + [InlineData ("01234", 10, 10, TextDirection.LeftRight_TopBottom, 5, 1, @"01234")] + [InlineData ( + "界1234", + 10, + 10, + TextDirection.TopBottom_LeftRight, + 2, + 5, + """ + 界 + 1 + 2 + 3 + 4 + """)] + [InlineData ( + "01234", + 10, + 10, + TextDirection.TopBottom_LeftRight, + 1, + 5, + """ + 0 + 1 + 2 + 3 + 4 + """)] + [InlineData ("界1234", 3, 3, TextDirection.LeftRight_TopBottom, 3, 1, @"界1")] + [InlineData ("01234", 3, 3, TextDirection.LeftRight_TopBottom, 3, 1, @"012")] + [InlineData ( + "界1234", + 3, + 3, + TextDirection.TopBottom_LeftRight, + 2, + 3, + """ + 界 + 1 + 2 + """)] + [InlineData ( + "01234", + 3, + 3, + TextDirection.TopBottom_LeftRight, + 1, + 3, + """ + 0 + 1 + 2 + """)] + public void FormatAndGetSize_WordWrap_False_Returns_Correct_Size ( + string text, + int width, + int height, + TextDirection direction, + int expectedWidth, + int expectedHeight, + string expectedDraw + ) + { + TextFormatter tf = new () + { + Direction = direction, + ConstrainToSize = new (width, height), + Text = text, + WordWrap = false + }; + Assert.False (tf.WordWrap); + Size size = tf.FormatAndGetSize (); + Assert.Equal (new (expectedWidth, expectedHeight), size); + + tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); + + DriverAssert.AssertDriverContentsWithFrameAre (expectedDraw, _output); + } + + #endregion +} diff --git a/Tests/UnitTests/UnitTests.csproj b/Tests/UnitTests/UnitTests.csproj new file mode 100644 index 000000000..c37dc7cc9 --- /dev/null +++ b/Tests/UnitTests/UnitTests.csproj @@ -0,0 +1,84 @@ + + + + + + 2.0 + 2.0 + 2.0 + 2.0 + + + false + + true + true + portable + $(DefineConstants);JETBRAINS_ANNOTATIONS;CONTRACTS_FULL + enable + true + true + + + true + $(DefineConstants);DEBUG_IDISPOSABLE + + + true + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + PreserveNewest + + + + + + + + + + + + + + + False + + + [UICatalog]* + + + + + + + + + + False + + + \ No newline at end of file diff --git a/UnitTests/UnitTests.csproj.DotSettings b/Tests/UnitTests/UnitTests.csproj.DotSettings similarity index 100% rename from UnitTests/UnitTests.csproj.DotSettings rename to Tests/UnitTests/UnitTests.csproj.DotSettings diff --git a/UnitTests/UnitTests.sln b/Tests/UnitTests/UnitTests.sln similarity index 100% rename from UnitTests/UnitTests.sln rename to Tests/UnitTests/UnitTests.sln diff --git a/UnitTests/View/Adornment/AdornmentSubViewTests.cs b/Tests/UnitTests/View/Adornment/AdornmentSubViewTests.cs similarity index 78% rename from UnitTests/View/Adornment/AdornmentSubViewTests.cs rename to Tests/UnitTests/View/Adornment/AdornmentSubViewTests.cs index 9e1ef4be7..b7de7d31c 100644 --- a/UnitTests/View/Adornment/AdornmentSubViewTests.cs +++ b/Tests/UnitTests/View/Adornment/AdornmentSubViewTests.cs @@ -65,26 +65,4 @@ public class AdornmentSubViewTests (ITestOutputHelper output) Application.Top?.Dispose (); Application.ResetState (ignoreDisposed: true); } - - [Fact] - public void Setting_Thickness_Causes_Adornment_SubView_Layout () - { - var view = new View (); - var subView = new View (); - view.Margin.Add (subView); - view.BeginInit (); - view.EndInit (); - var raised = false; - - subView.SubviewLayout += LayoutStarted; - view.Margin.Thickness = new Thickness (1, 2, 3, 4); - view.Layout (); - Assert.True (raised); - - return; - void LayoutStarted (object sender, LayoutEventArgs e) - { - raised = true; - } - } } diff --git a/Tests/UnitTests/View/Adornment/AdornmentTests.cs b/Tests/UnitTests/View/Adornment/AdornmentTests.cs new file mode 100644 index 000000000..e74d6df39 --- /dev/null +++ b/Tests/UnitTests/View/Adornment/AdornmentTests.cs @@ -0,0 +1,73 @@ +using UnitTests; +using Xunit.Abstractions; + +namespace Terminal.Gui.ViewTests; + +public class AdornmentTests (ITestOutputHelper output) +{ + [Fact] + [SetupFakeDriver] + public void Border_Is_Cleared_After_Margin_Thickness_Change () + { + View view = new () { Text = "View", Width = 6, Height = 3, BorderStyle = LineStyle.Rounded }; + + // Remove border bottom thickness + view.Border!.Thickness = new (1, 1, 1, 0); + + // Add margin bottom thickness + view.Margin!.Thickness = new (0, 0, 0, 1); + + Assert.Equal (6, view.Width); + Assert.Equal (3, view.Height); + + view.Draw (); + + DriverAssert.AssertDriverContentsWithFrameAre ( + @" +╭────╮ +│View│ +", + output + ); + + // Add border bottom thickness + view.Border!.Thickness = new (1, 1, 1, 1); + + // Remove margin bottom thickness + view.Margin!.Thickness = new (0, 0, 0, 0); + + view.Draw (); + + Assert.Equal (6, view.Width); + Assert.Equal (3, view.Height); + + DriverAssert.AssertDriverContentsWithFrameAre ( + @" +╭────╮ +│View│ +╰────╯ +", + output + ); + + // Remove border bottom thickness + view.Border!.Thickness = new (1, 1, 1, 0); + + // Add margin bottom thickness + view.Margin!.Thickness = new (0, 0, 0, 1); + + Assert.Equal (6, view.Width); + Assert.Equal (3, view.Height); + + View.SetClipToScreen (); + view.Draw (); + + DriverAssert.AssertDriverContentsWithFrameAre ( + @" +╭────╮ +│View│ +", + output + ); + } +} diff --git a/UnitTests/View/Adornment/BorderTests.cs b/Tests/UnitTests/View/Adornment/BorderTests.cs similarity index 94% rename from UnitTests/View/Adornment/BorderTests.cs rename to Tests/UnitTests/View/Adornment/BorderTests.cs index 18a4b8ef6..42cb210b3 100644 --- a/UnitTests/View/Adornment/BorderTests.cs +++ b/Tests/UnitTests/View/Adornment/BorderTests.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; @@ -33,8 +35,8 @@ public class BorderTests (ITestOutputHelper output) superView.Draw (); var expected = @"─┤A├─"; - TestHelpers.AssertDriverContentsAre (expected, output); - TestHelpers.AssertDriverAttributesAre ("00000", output, null, view.ColorScheme.Normal); + DriverAssert.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverAttributesAre ("00000", output, null, view.ColorScheme.Normal); view.CanFocus = true; view.SetFocus (); @@ -43,7 +45,7 @@ public class BorderTests (ITestOutputHelper output) Assert.Equal (view.GetFocusColor (), view.Border.GetFocusColor ()); Assert.Equal (view.ColorScheme.Focus.Foreground, view.Border.GetFocusColor ().Foreground); Assert.Equal (view.ColorScheme.Normal.Foreground, view.Border.GetNormalColor ().Foreground); - TestHelpers.AssertDriverAttributesAre ("00100", output, null, view.ColorScheme.Normal, view.GetFocusColor ()); + DriverAssert.AssertDriverAttributesAre ("00100", output, null, view.ColorScheme.Normal, view.GetFocusColor ()); } [Fact] @@ -68,8 +70,8 @@ public class BorderTests (ITestOutputHelper output) view.Draw (); var expected = @"─┤A├─"; - TestHelpers.AssertDriverContentsAre (expected, output); - TestHelpers.AssertDriverAttributesAre ("00000", output, null, view.ColorScheme.Normal); + DriverAssert.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverAttributesAre ("00000", output, null, view.ColorScheme.Normal); } [Theory] @@ -201,7 +203,7 @@ public class BorderTests (ITestOutputHelper output) break; } - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Application.End (rs); win.Dispose (); } @@ -334,7 +336,7 @@ public class BorderTests (ITestOutputHelper output) break; } - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Application.End (rs); win.Dispose (); } @@ -468,7 +470,7 @@ public class BorderTests (ITestOutputHelper output) break; } - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Application.End (rs); win.Dispose (); } @@ -523,7 +525,7 @@ public class BorderTests (ITestOutputHelper output) break; } - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Application.End (rs); win.Dispose (); } @@ -637,7 +639,7 @@ public class BorderTests (ITestOutputHelper output) break; } - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); win.Dispose (); } @@ -742,7 +744,7 @@ public class BorderTests (ITestOutputHelper output) ║└─┘║ ╚═══╝"; - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Application.End (rs); top.Dispose (); } @@ -769,7 +771,7 @@ public class BorderTests (ITestOutputHelper output) ║└──────┘║ ╚════════╝"; - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Application.End (rs); top.Dispose (); } @@ -791,7 +793,7 @@ public class BorderTests (ITestOutputHelper output) │ │ └─┘"; - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); win.Dispose (); } @@ -874,7 +876,7 @@ public class BorderTests (ITestOutputHelper output) superView.EndInit (); superView.Draw (); - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } @@ -940,6 +942,6 @@ public class BorderTests (ITestOutputHelper output) superView.EndInit (); superView.Draw (); - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } } diff --git a/UnitTests/View/Adornment/MarginTests.cs b/Tests/UnitTests/View/Adornment/MarginTests.cs similarity index 85% rename from UnitTests/View/Adornment/MarginTests.cs rename to Tests/UnitTests/View/Adornment/MarginTests.cs index 0025d7725..92495c019 100644 --- a/UnitTests/View/Adornment/MarginTests.cs +++ b/Tests/UnitTests/View/Adornment/MarginTests.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; @@ -30,14 +32,14 @@ public class MarginTests (ITestOutputHelper output) Application.Top.EndInit (); Application.LayoutAndDraw(); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" MMM M M MMM", output ); - TestHelpers.AssertDriverAttributesAre ("0", output, null, Application.Top.GetNormalColor ()); + DriverAssert.AssertDriverAttributesAre ("0", output, null, Application.Top.GetNormalColor ()); Application.ResetState (true); } diff --git a/UnitTests/View/Adornment/PaddingTests.cs b/Tests/UnitTests/View/Adornment/PaddingTests.cs similarity index 82% rename from UnitTests/View/Adornment/PaddingTests.cs rename to Tests/UnitTests/View/Adornment/PaddingTests.cs index 0242bcc1d..f0bbd32af 100644 --- a/UnitTests/View/Adornment/PaddingTests.cs +++ b/Tests/UnitTests/View/Adornment/PaddingTests.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; @@ -25,13 +27,13 @@ public class PaddingTests (ITestOutputHelper output) view.EndInit (); view.Draw (); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" PPP P P PPP", output ); - TestHelpers.AssertDriverAttributesAre ("0", output, null, view.GetNormalColor ()); + DriverAssert.AssertDriverAttributesAre ("0", output, null, view.GetNormalColor ()); } } diff --git a/Tests/UnitTests/View/Adornment/ShadowStyletests.cs b/Tests/UnitTests/View/Adornment/ShadowStyletests.cs new file mode 100644 index 000000000..76574dfec --- /dev/null +++ b/Tests/UnitTests/View/Adornment/ShadowStyletests.cs @@ -0,0 +1,127 @@ +using UnitTests; +using Xunit.Abstractions; + +namespace Terminal.Gui.ViewTests; + +public class ShadowStyleTests (ITestOutputHelper output) +{ + [Theory] + [InlineData ( + ShadowStyle.None, + """ + 011 + 111 + 111 + """)] + [InlineData ( + ShadowStyle.Transparent, + """ + 031 + 131 + 111 + """)] + [InlineData ( + ShadowStyle.Opaque, + """ + 021 + 221 + 111 + """)] + [SetupFakeDriver] + public void ShadowView_Colors (ShadowStyle style, string expectedAttrs) + { + ((FakeDriver)Application.Driver!).SetBufferSize (5, 5); + Color fg = Color.Red; + Color bg = Color.Green; + + // 0 - View + // 1 - SuperView + // 2 - Opaque - fg is Black, bg is SuperView.Bg + // 3 - Transparent - fg is darker fg, bg is darker bg + Attribute [] attributes = + { + Attribute.Default, + new (fg, bg), + new (Color.Black, bg), + new (fg.GetDarkerColor (), bg.GetDarkerColor ()) + }; + + var superView = new Toplevel + { + Height = 3, + Width = 3, + Text = "012ABC!@#", + ColorScheme = new (new Attribute (fg, bg)) + }; + superView.TextFormatter.WordWrap = true; + + View view = new () + { + Width = Dim.Auto (), + Height = Dim.Auto (), + Text = "*", + ShadowStyle = style, + ColorScheme = new (Attribute.Default) + }; + superView.Add (view); + Application.TopLevels.Push (superView); + Application.LayoutAndDraw (true); + DriverAssert.AssertDriverAttributesAre (expectedAttrs, output, Application.Driver, attributes); + Application.ResetState (true); + } + + // Visual tests + [Theory] + [InlineData ( + ShadowStyle.None, + """ + 01#$ + AB#$ + !@#$ + !@#$ + """)] + [InlineData ( + ShadowStyle.Opaque, + """ + 01▖$ + AB▌$ + ▝▀▘$ + !@#$ + """)] + [InlineData ( + ShadowStyle.Transparent, + """ + 01#$ + AB#$ + !@#$ + !@#$ + """)] + [SetupFakeDriver] + public void Visual_Test (ShadowStyle style, string expected) + { + ((FakeDriver)Application.Driver!).SetBufferSize (5, 5); + + var superView = new Toplevel + { + Width = 4, + Height = 4, + Text = "!@#$".Repeat (4)! + }; + superView.TextFormatter.WordWrap = true; + + var view = new View + { + Text = "01\nAB", + Width = Dim.Auto (), + Height = Dim.Auto () + }; + view.ShadowStyle = style; + superView.Add (view); + Application.TopLevels.Push (superView); + Application.LayoutAndDraw (true); + + DriverAssert.AssertDriverContentsWithFrameAre (expected, output); + view.Dispose (); + Application.ResetState (true); + } +} diff --git a/UnitTests/View/ArrangementTests.cs b/Tests/UnitTests/View/ArrangementTests.cs similarity index 100% rename from UnitTests/View/ArrangementTests.cs rename to Tests/UnitTests/View/ArrangementTests.cs diff --git a/UnitTests/View/ColorSchemeTests.cs b/Tests/UnitTests/View/ColorSchemeTests.cs similarity index 100% rename from UnitTests/View/ColorSchemeTests.cs rename to Tests/UnitTests/View/ColorSchemeTests.cs diff --git a/UnitTests/View/DiagnosticsTests.cs b/Tests/UnitTests/View/DiagnosticsTests.cs similarity index 100% rename from UnitTests/View/DiagnosticsTests.cs rename to Tests/UnitTests/View/DiagnosticsTests.cs diff --git a/UnitTests/View/Draw/AllViewsDrawTests.cs b/Tests/UnitTests/View/Draw/AllViewsDrawTests.cs similarity index 96% rename from UnitTests/View/Draw/AllViewsDrawTests.cs rename to Tests/UnitTests/View/Draw/AllViewsDrawTests.cs index 64d6c543e..9cbac00b3 100644 --- a/UnitTests/View/Draw/AllViewsDrawTests.cs +++ b/Tests/UnitTests/View/Draw/AllViewsDrawTests.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.LayoutTests; diff --git a/UnitTests/View/Draw/ClearViewportTests.cs b/Tests/UnitTests/View/Draw/ClearViewportTests.cs similarity index 93% rename from UnitTests/View/Draw/ClearViewportTests.cs rename to Tests/UnitTests/View/Draw/ClearViewportTests.cs index b95f85fec..236e66506 100644 --- a/UnitTests/View/Draw/ClearViewportTests.cs +++ b/Tests/UnitTests/View/Draw/ClearViewportTests.cs @@ -1,5 +1,7 @@ #nullable enable using Moq; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; @@ -117,7 +119,7 @@ public class ClearViewportTests (ITestOutputHelper _output) superView.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─┐ │X│ @@ -127,7 +129,7 @@ public class ClearViewportTests (ITestOutputHelper _output) // On Draw exit the view is excluded from the clip, so this will do nothing. view.ClearViewport (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─┐ │X│ @@ -138,7 +140,7 @@ public class ClearViewportTests (ITestOutputHelper _output) view.ClearViewport (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─┐ │ │ @@ -167,7 +169,7 @@ public class ClearViewportTests (ITestOutputHelper _output) superView.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─┐ │X│ @@ -176,7 +178,7 @@ public class ClearViewportTests (ITestOutputHelper _output) View.SetClipToScreen (); view.ClearViewport (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─┐ │ │ @@ -226,7 +228,7 @@ public class ClearViewportTests (ITestOutputHelper _output) " ; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, _output); Assert.Equal (new (0, 0, 20, 10), pos); view.FillRect (view.Viewport); @@ -245,7 +247,7 @@ public class ClearViewportTests (ITestOutputHelper _output) " ; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, _output); top.Dispose (); } @@ -291,7 +293,7 @@ public class ClearViewportTests (ITestOutputHelper _output) " ; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, _output); Assert.Equal (new (0, 0, 20, 10), pos); view.FillRect (view.Viewport); @@ -309,7 +311,7 @@ public class ClearViewportTests (ITestOutputHelper _output) └──────────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, _output); top.Dispose (); } @@ -350,7 +352,7 @@ public class ClearViewportTests (ITestOutputHelper _output) Assert.Equal (new (0, 0, 20, 1), v.Frame); } - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" cccccccccccccccccccc", _output @@ -365,7 +367,7 @@ cccccccccccccccccccc", if (label) { - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( @" 111111111111111111110 111111111111111111110", @@ -376,7 +378,7 @@ cccccccccccccccccccc", } else { - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( @" 222222222222222222220 111111111111111111110", @@ -395,7 +397,7 @@ cccccccccccccccccccc", Assert.True (v.HasFocus); Application.LayoutAndDraw (); - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( @" 222222222222222222220 111111111111111111110", diff --git a/UnitTests/View/Draw/ClipTests.cs b/Tests/UnitTests/View/Draw/ClipTests.cs similarity index 82% rename from UnitTests/View/Draw/ClipTests.cs rename to Tests/UnitTests/View/Draw/ClipTests.cs index f09eb492b..7eccc918d 100644 --- a/UnitTests/View/Draw/ClipTests.cs +++ b/Tests/UnitTests/View/Draw/ClipTests.cs @@ -1,5 +1,6 @@ #nullable enable using System.Text; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; @@ -82,86 +83,86 @@ public class ClipTests (ITestOutputHelper _output) superView.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( - @" + DriverAssert.AssertDriverContentsWithFrameAre ( + @" ┌─┐ │X│ └─┘", - _output); + _output); Rectangle toFill = new (x, y, width, height); View.SetClipToScreen (); view.FillRect (toFill); - TestHelpers.AssertDriverContentsWithFrameAre ( - @" + DriverAssert.AssertDriverContentsWithFrameAre ( + @" ┌─┐ │ │ └─┘", - _output); + _output); // Now try to clear beyond Viewport (invalid; clipping should prevent) superView.SetNeedsDraw (); superView.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( - @" + DriverAssert.AssertDriverContentsWithFrameAre ( + @" ┌─┐ │X│ └─┘", - _output); + _output); toFill = new (-width, -height, width, height); view.FillRect (toFill); - TestHelpers.AssertDriverContentsWithFrameAre ( - @" + DriverAssert.AssertDriverContentsWithFrameAre ( + @" ┌─┐ │X│ └─┘", - _output); + _output); // Now try to clear beyond Viewport (valid) superView.SetNeedsDraw (); superView.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( - @" + DriverAssert.AssertDriverContentsWithFrameAre ( + @" ┌─┐ │X│ └─┘", - _output); + _output); toFill = new (-1, -1, width + 1, height + 1); View.SetClipToScreen (); view.FillRect (toFill); - TestHelpers.AssertDriverContentsWithFrameAre ( - @" + DriverAssert.AssertDriverContentsWithFrameAre ( + @" ┌─┐ │ │ └─┘", - _output); + _output); // Now clear too much size superView.SetNeedsDraw (); superView.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( - @" + DriverAssert.AssertDriverContentsWithFrameAre ( + @" ┌─┐ │X│ └─┘", - _output); + _output); toFill = new (0, 0, width * 2, height * 2); View.SetClipToScreen (); view.FillRect (toFill); - TestHelpers.AssertDriverContentsWithFrameAre ( - @" + DriverAssert.AssertDriverContentsWithFrameAre ( + @" ┌─┐ │ │ └─┘", - _output); + _output); } // TODO: Simplify this test to just use AddRune directly @@ -200,7 +201,7 @@ public class ClipTests (ITestOutputHelper _output) │これは広いルーンラインです。 """; - TestHelpers.AssertDriverContentsWithFrameAre (expectedOutput, _output); + DriverAssert.AssertDriverContentsWithFrameAre (expectedOutput, _output); var view = new View { @@ -228,7 +229,7 @@ public class ClipTests (ITestOutputHelper _output) │�│0123456789│�ンラインです。 """; - TestHelpers.AssertDriverContentsWithFrameAre (expectedOutput, _output); + DriverAssert.AssertDriverContentsWithFrameAre (expectedOutput, _output); } // TODO: Add more AddRune tests to cover all the cases where wide runes are clipped diff --git a/UnitTests/View/Draw/DrawEventTests.cs b/Tests/UnitTests/View/Draw/DrawEventTests.cs similarity index 88% rename from UnitTests/View/Draw/DrawEventTests.cs rename to Tests/UnitTests/View/Draw/DrawEventTests.cs index 7b1bf2c0e..dc6bfc160 100644 --- a/UnitTests/View/Draw/DrawEventTests.cs +++ b/Tests/UnitTests/View/Draw/DrawEventTests.cs @@ -1,13 +1,11 @@ #nullable enable -using System.Text; -using Xunit.Abstractions; +using UnitTests; namespace Terminal.Gui.ViewTests; [Trait ("Category", "Output")] -public class DrawEventTests (ITestOutputHelper _output) +public class DrawEventTests { - [Fact] [AutoInitShutdown] public void DrawContentComplete_Event_Is_Always_Called () diff --git a/UnitTests/View/Draw/DrawTests.cs b/Tests/UnitTests/View/Draw/DrawTests.cs similarity index 92% rename from UnitTests/View/Draw/DrawTests.cs rename to Tests/UnitTests/View/Draw/DrawTests.cs index 7cb246168..eed5c3532 100644 --- a/UnitTests/View/Draw/DrawTests.cs +++ b/Tests/UnitTests/View/Draw/DrawTests.cs @@ -1,6 +1,6 @@ #nullable enable using System.Text; -using Microsoft.VisualStudio.TestPlatform.Utilities; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; @@ -41,9 +41,9 @@ public class DrawTests (ITestOutputHelper _output) │豈 │ └────────┘ """; - TestHelpers.AssertDriverContentsWithFrameAre (expectedOutput, _output); + DriverAssert.AssertDriverContentsWithFrameAre (expectedOutput, _output); - TestHelpers.AssertDriverContentsAre (expectedOutput, _output); + DriverAssert.AssertDriverContentsAre (expectedOutput, _output); // This test has nothing to do with color - removing as it is not relevant and fragile top.Dispose (); @@ -80,7 +80,7 @@ public class DrawTests (ITestOutputHelper _output) ((FakeDriver)Application.Driver!).SetBufferSize (7, 7); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ Test @@ -94,7 +94,7 @@ public class DrawTests (ITestOutputHelper _output) _output ); - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( """ 000000 @@ -127,7 +127,7 @@ public class DrawTests (ITestOutputHelper _output) Assert.True (view.NeedsDraw); view.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ ┌┐ @@ -152,7 +152,7 @@ public class DrawTests (ITestOutputHelper _output) view.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ("──", _output); + DriverAssert.AssertDriverContentsWithFrameAre ("──", _output); } [Fact] @@ -170,7 +170,7 @@ public class DrawTests (ITestOutputHelper _output) view.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ │ @@ -195,7 +195,7 @@ public class DrawTests (ITestOutputHelper _output) view.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ │ @@ -221,7 +221,7 @@ public class DrawTests (ITestOutputHelper _output) view.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( "││", _output ); @@ -291,7 +291,7 @@ public class DrawTests (ITestOutputHelper _output) var rs = Application.Begin (top); top.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ 0s @@ -306,7 +306,7 @@ public class DrawTests (ITestOutputHelper _output) content.X = -1; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ s @@ -320,13 +320,13 @@ public class DrawTests (ITestOutputHelper _output) content.X = -2; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre (@"", _output); + DriverAssert.AssertDriverContentsWithFrameAre (@"", _output); content.X = 0; content.Y = -1; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ 1u @@ -341,7 +341,7 @@ public class DrawTests (ITestOutputHelper _output) content.Y = -6; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ 6w @@ -356,7 +356,7 @@ public class DrawTests (ITestOutputHelper _output) content.Y = -19; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ 9 @@ -366,12 +366,12 @@ public class DrawTests (ITestOutputHelper _output) content.Y = -20; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ("", _output); + DriverAssert.AssertDriverContentsWithFrameAre ("", _output); content.X = -2; content.Y = 0; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ("", _output); + DriverAssert.AssertDriverContentsWithFrameAre ("", _output); top.Dispose (); } @@ -411,7 +411,7 @@ public class DrawTests (ITestOutputHelper _output) Application.Begin (top); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ 01234 @@ -423,7 +423,7 @@ public class DrawTests (ITestOutputHelper _output) content.X = -1; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ 12345 @@ -435,7 +435,7 @@ public class DrawTests (ITestOutputHelper _output) content.Y = -1; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ ubVie @@ -445,12 +445,12 @@ public class DrawTests (ITestOutputHelper _output) content.Y = -2; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ("", _output); + DriverAssert.AssertDriverContentsWithFrameAre ("", _output); content.X = -20; content.Y = 0; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ("", _output); + DriverAssert.AssertDriverContentsWithFrameAre ("", _output); top.Dispose (); return; @@ -498,7 +498,7 @@ public class DrawTests (ITestOutputHelper _output) Application.Begin (top); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ 0s @@ -513,7 +513,7 @@ public class DrawTests (ITestOutputHelper _output) content.X = -1; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ s @@ -527,13 +527,13 @@ public class DrawTests (ITestOutputHelper _output) content.X = -2; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre (@"", _output); + DriverAssert.AssertDriverContentsWithFrameAre (@"", _output); content.X = 0; content.Y = -1; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ 1u @@ -548,7 +548,7 @@ public class DrawTests (ITestOutputHelper _output) content.Y = -6; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ 6w @@ -563,7 +563,7 @@ public class DrawTests (ITestOutputHelper _output) content.Y = -19; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( """ 9 @@ -573,12 +573,12 @@ public class DrawTests (ITestOutputHelper _output) content.Y = -20; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ("", _output); + DriverAssert.AssertDriverContentsWithFrameAre ("", _output); content.X = -2; content.Y = 0; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ("", _output); + DriverAssert.AssertDriverContentsWithFrameAre ("", _output); top.Dispose (); } @@ -591,7 +591,7 @@ public class DrawTests (ITestOutputHelper _output) var view = new View { Width = 10, Height = 1 }; view.DrawHotString (expected, Attribute.Default, Attribute.Default); - TestHelpers.AssertDriverContentsWithFrameAre (expected, _output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, _output); } // TODO: The tests below that use Label should use View instead. @@ -626,9 +626,9 @@ public class DrawTests (ITestOutputHelper _output) │𝔹 │ └────────┘ """; - TestHelpers.AssertDriverContentsWithFrameAre (expected, _output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, _output); - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); top.Dispose (); // This test has nothing to do with color - removing as it is not relevant and fragile @@ -688,7 +688,7 @@ public class DrawTests (ITestOutputHelper _output) RunState runState = Application.Begin (top); Application.RunIteration (ref runState); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" At 0,0 @@ -705,7 +705,7 @@ At 0,0 //Application.Refresh(); top.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" At 0,0 @@ -737,7 +737,7 @@ At 0,0 top.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" At 0,0 @@ -757,7 +757,7 @@ At 0,0 View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" At 0,0 @@ -789,7 +789,7 @@ At 0,0 RunState runState = Application.Begin (top); Application.RunIteration (ref runState); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" At 0,0 @@ -805,7 +805,7 @@ At 0,0 Assert.Equal (new (0, 0, 10, 1), view._needsDrawRect); top.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" At 0,0 A text wit" @@ -836,7 +836,7 @@ At 0,0 top.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" At 0,0 @@ -857,7 +857,7 @@ At 0,0 top.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" At 0,0 A text wit" diff --git a/Tests/UnitTests/View/Draw/NeedsDrawTests.cs b/Tests/UnitTests/View/Draw/NeedsDrawTests.cs new file mode 100644 index 000000000..21a09589f --- /dev/null +++ b/Tests/UnitTests/View/Draw/NeedsDrawTests.cs @@ -0,0 +1,67 @@ +#nullable enable +using UnitTests; + +namespace Terminal.Gui.ViewTests; + +[Trait ("Category", "Output")] +public class NeedsDrawTests () +{ + [Fact] + [AutoInitShutdown] + public void Frame_Set_After_Initialize_Update_NeededDisplay () + { + var frame = new FrameView (); + + var label = new Label + { + ColorScheme = Colors.ColorSchemes ["Menu"], X = 0, Y = 0, Text = "This should be the first line." + }; + + var view = new View + { + X = 0, // don't overcomplicate unit tests + Y = 1, + Height = Dim.Auto (DimAutoStyle.Text), + Width = Dim.Auto (DimAutoStyle.Text), + Text = "Press me!" + }; + + frame.Add (label, view); + + frame.X = Pos.Center (); + frame.Y = Pos.Center (); + frame.Width = 40; + frame.Height = 8; + + Toplevel top = new (); + + top.Add (frame); + + RunState runState = Application.Begin (top); + + top.SubviewsLaidOut += (s, e) => { Assert.Equal (new (0, 0, 80, 25), top._needsDrawRect); }; + + frame.SubviewsLaidOut += (s, e) => { Assert.Equal (new (0, 0, 40, 8), frame._needsDrawRect); }; + + label.SubviewsLaidOut += (s, e) => { Assert.Equal (new (0, 0, 38, 1), label._needsDrawRect); }; + + view.SubviewsLaidOut += (s, e) => { Assert.Equal (new (0, 0, 13, 1), view._needsDrawRect); }; + + Assert.Equal (new (0, 0, 80, 25), top.Frame); + Assert.Equal (new (20, 8, 40, 8), frame.Frame); + + Assert.Equal ( + new (20, 8, 60, 16), + new Rectangle ( + frame.Frame.Left, + frame.Frame.Top, + frame.Frame.Right, + frame.Frame.Bottom + ) + ); + Assert.Equal (new (0, 0, 30, 1), label.Frame); + Assert.Equal (new (0, 1, 9, 1), view.Frame); // this proves frame was set + Application.End (runState); + top.Dispose (); + } +} diff --git a/UnitTests/View/Draw/TransparentTests.cs b/Tests/UnitTests/View/Draw/TransparentTests.cs similarity index 95% rename from UnitTests/View/Draw/TransparentTests.cs rename to Tests/UnitTests/View/Draw/TransparentTests.cs index ce8a70c64..81747914a 100644 --- a/UnitTests/View/Draw/TransparentTests.cs +++ b/Tests/UnitTests/View/Draw/TransparentTests.cs @@ -1,5 +1,7 @@ #nullable enable using System.Text; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; @@ -42,7 +44,7 @@ public class TransparentTests (ITestOutputHelper _output) super.Layout (); super.Draw (); - _ = TestHelpers.AssertDriverContentsWithFrameAre ( + _ = DriverAssert.AssertDriverContentsWithFrameAre ( @" ░░░░░░░░░░░░░░░░░░░░ ░┌─────────────┐░░░░ @@ -96,7 +98,7 @@ public class TransparentTests (ITestOutputHelper _output) super.Layout (); super.Draw (); - _ = TestHelpers.AssertDriverContentsWithFrameAre ( + _ = DriverAssert.AssertDriverContentsWithFrameAre ( @" ░░░░░░░░░░░░░░░░░░░░ ░┌─────────────┐░░░░ diff --git a/UnitTests/View/InitTests.cs b/Tests/UnitTests/View/InitTests.cs similarity index 100% rename from UnitTests/View/InitTests.cs rename to Tests/UnitTests/View/InitTests.cs diff --git a/UnitTests/View/Keyboard/HotKeyTests.cs b/Tests/UnitTests/View/Keyboard/HotKeyTests.cs similarity index 100% rename from UnitTests/View/Keyboard/HotKeyTests.cs rename to Tests/UnitTests/View/Keyboard/HotKeyTests.cs diff --git a/UnitTests/View/Keyboard/KeyBindingsTests.cs b/Tests/UnitTests/View/Keyboard/KeyBindingsTests.cs similarity index 98% rename from UnitTests/View/Keyboard/KeyBindingsTests.cs rename to Tests/UnitTests/View/Keyboard/KeyBindingsTests.cs index a07730b7a..64685a9d6 100644 --- a/UnitTests/View/Keyboard/KeyBindingsTests.cs +++ b/Tests/UnitTests/View/Keyboard/KeyBindingsTests.cs @@ -1,4 +1,5 @@ -using Xunit.Abstractions; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; diff --git a/UnitTests/View/Keyboard/KeyboardEventTests.cs b/Tests/UnitTests/View/Keyboard/KeyboardEventTests.cs similarity index 99% rename from UnitTests/View/Keyboard/KeyboardEventTests.cs rename to Tests/UnitTests/View/Keyboard/KeyboardEventTests.cs index 7cbbcaa8f..1451a1321 100644 --- a/UnitTests/View/Keyboard/KeyboardEventTests.cs +++ b/Tests/UnitTests/View/Keyboard/KeyboardEventTests.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; // Alias Console to MockConsole so we don't accidentally use Console diff --git a/Tests/UnitTests/View/Layout/Dim.FillTests.cs b/Tests/UnitTests/View/Layout/Dim.FillTests.cs new file mode 100644 index 000000000..e09033e8c --- /dev/null +++ b/Tests/UnitTests/View/Layout/Dim.FillTests.cs @@ -0,0 +1,28 @@ +using UnitTests; +using Xunit.Abstractions; + +namespace Terminal.Gui.LayoutTests; + +public class DimFillTests (ITestOutputHelper output) +{ + private readonly ITestOutputHelper _output = output; + + [Fact] + [AutoInitShutdown] + public void DimFill_SizedCorrectly () + { + var view = new View { Width = Dim.Fill (), Height = Dim.Fill (), BorderStyle = LineStyle.Single }; + var top = new Toplevel (); + top.Add (view); + RunState rs = Application.Begin (top); + ((FakeDriver)Application.Driver!).SetBufferSize (32, 5); + + top.Layout (); + + //view.SetRelativeLayout (new (0, 0, 32, 5)); + Assert.Equal (32, view.Frame.Width); + Assert.Equal (5, view.Frame.Height); + top.Dispose (); + } + +} diff --git a/UnitTests/View/Layout/Dim.Tests.cs b/Tests/UnitTests/View/Layout/Dim.Tests.cs similarity index 57% rename from UnitTests/View/Layout/Dim.Tests.cs rename to Tests/UnitTests/View/Layout/Dim.Tests.cs index 9734de3c8..5b1698371 100644 --- a/UnitTests/View/Layout/Dim.Tests.cs +++ b/Tests/UnitTests/View/Layout/Dim.Tests.cs @@ -1,5 +1,6 @@ using System.Globalization; using System.Text; +using UnitTests; using Xunit.Abstractions; using static Terminal.Gui.Dim; @@ -20,88 +21,6 @@ public class DimTests Thread.CurrentThread.CurrentUICulture = culture; } - [Fact] - public void DimAbsolute_Calculate_ReturnsCorrectValue () - { - var dim = new DimAbsolute (10); - int result = dim.Calculate (0, 100, null, Dimension.None); - Assert.Equal (10, result); - } - - // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved - // TODO: A new test that calls SetRelativeLayout directly is needed. - [Fact] - [TestRespondersDisposed] - public void Dim_Validation_Do_Not_Throws_If_NewValue_Is_DimAbsolute_And_OldValue_Is_Null () - { - var t = new View { Width = 80, Height = 25, Text = "top" }; - - var w = new Window - { - X = 1, - Y = 2, - Width = 4, - Height = 5, - Title = "w" - }; - t.Add (w); - t.LayoutSubviews (); - - Assert.Equal (3, w.Width = 3); - Assert.Equal (4, w.Height = 4); - t.Dispose (); - } - - [Fact] - public void DimHeight_Set_To_Null_Throws () - { - Dim dim = Height (null); - Assert.Throws (() => dim.ToString ()); - } - - [Fact] - [TestRespondersDisposed] - public void DimHeight_SetsValue () - { - var testVal = Rectangle.Empty; - var testValview = new View { Frame = testVal }; - Dim dim = Height (testValview); - Assert.Equal ($"View(Height,View(){testVal})", dim.ToString ()); - testValview.Dispose (); - - testVal = new (1, 2, 3, 4); - testValview = new () { Frame = testVal }; - dim = Height (testValview); - Assert.Equal ($"View(Height,View(){testVal})", dim.ToString ()); - testValview.Dispose (); - } - - [Fact] - [TestRespondersDisposed] - public void Internal_Tests () - { - var dimFactor = new DimPercent (10); - Assert.Equal (10, dimFactor.GetAnchor (100)); - - var dimAbsolute = new DimAbsolute (10); - Assert.Equal (10, dimAbsolute.GetAnchor (0)); - - var dimFill = new DimFill (1); - Assert.Equal (99, dimFill.GetAnchor (100)); - - var dimCombine = new DimCombine (AddOrSubtract.Add, dimFactor, dimAbsolute); - Assert.Equal (dimCombine.Left, dimFactor); - Assert.Equal (dimCombine.Right, dimAbsolute); - Assert.Equal (20, dimCombine.GetAnchor (100)); - - var view = new View { Frame = new (20, 10, 20, 1) }; - var dimViewHeight = new DimView (view, Dimension.Height); - Assert.Equal (1, dimViewHeight.GetAnchor (0)); - var dimViewWidth = new DimView (view, Dimension.Width); - Assert.Equal (20, dimViewWidth.GetAnchor (0)); - - view.Dispose (); - } // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved // TODO: A new test that calls SetRelativeLayout directly is needed. @@ -334,168 +253,4 @@ public class DimTests Application.Run (t); t.Dispose (); } - - // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved - // TODO: A new test that calls SetRelativeLayout directly is needed. - [Fact] - [TestRespondersDisposed] - public void Referencing_SuperView_Does_Not_Throw () - { - var super = new View { Width = 10, Height = 10, Text = "super" }; - - var view = new View - { - Width = Width (super), // this is allowed - Height = Height (super), // this is allowed - Text = "view" - }; - - super.Add (view); - super.BeginInit (); - super.EndInit (); - - Exception exception = Record.Exception (super.LayoutSubviews); - Assert.Null (exception); - super.Dispose (); - } - - [Fact] - public void DimSized_Equals () - { - var n1 = 0; - var n2 = 0; - Dim dim1 = Absolute (n1); - Dim dim2 = Absolute (n2); - Assert.Equal (dim1, dim2); - - n1 = n2 = 1; - dim1 = Absolute (n1); - dim2 = Absolute (n2); - Assert.Equal (dim1, dim2); - - n1 = n2 = -1; - dim1 = Absolute (n1); - dim2 = Absolute (n2); - Assert.Equal (dim1, dim2); - - n1 = 0; - n2 = 1; - dim1 = Absolute (n1); - dim2 = Absolute (n2); - Assert.NotEqual (dim1, dim2); - } - - [Fact] - public void DimSized_SetsValue () - { - Dim dim = Absolute (0); - Assert.Equal ("Absolute(0)", dim.ToString ()); - - var testVal = 5; - dim = Absolute (testVal); - Assert.Equal ($"Absolute({testVal})", dim.ToString ()); - - testVal = -1; - dim = Absolute (testVal); - Assert.Equal ($"Absolute({testVal})", dim.ToString ()); - } - - // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved - // TODO: A new test that calls SetRelativeLayout directly is needed. - [Fact] - [TestRespondersDisposed] - public void Validation_Does_Not_Throw_If_NewValue_Is_DimAbsolute_And_OldValue_Is_Null () - { - var t = new View { Width = 80, Height = 25, Text = "top" }; - - var w = new Window - { - X = 1, - Y = 2, - Width = 4, - Height = 5, - Title = "w" - }; - t.Add (w); - t.LayoutSubviews (); - - Assert.Equal (3, w.Width = 3); - Assert.Equal (4, w.Height = 4); - t.Dispose (); - } - - [Fact] - [TestRespondersDisposed] - public void DimWidth_Equals () - { - var testRect1 = Rectangle.Empty; - var view1 = new View { Frame = testRect1 }; - var testRect2 = Rectangle.Empty; - var view2 = new View { Frame = testRect2 }; - - Dim dim1 = Width (view1); - Dim dim2 = Width (view1); - - // FIXED: Dim.Width should support Equals() and this should change to Equal. - Assert.Equal (dim1, dim2); - - dim2 = Width (view2); - Assert.NotEqual (dim1, dim2); - - testRect1 = new (0, 1, 2, 3); - view1 = new () { Frame = testRect1 }; - testRect2 = new (0, 1, 2, 3); - dim1 = Width (view1); - dim2 = Width (view1); - - // FIXED: Dim.Width should support Equals() and this should change to Equal. - Assert.Equal (dim1, dim2); - - testRect1 = new (0, -1, 2, 3); - view1 = new () { Frame = testRect1 }; - testRect2 = new (0, -1, 2, 3); - dim1 = Width (view1); - dim2 = Width (view1); - - // FIXED: Dim.Width should support Equals() and this should change to Equal. - Assert.Equal (dim1, dim2); - - testRect1 = new (0, -1, 2, 3); - view1 = new () { Frame = testRect1 }; - testRect2 = Rectangle.Empty; - view2 = new () { Frame = testRect2 }; - dim1 = Width (view1); - dim2 = Width (view2); - Assert.NotEqual (dim1, dim2); -#if DEBUG_IDISPOSABLE - - // HACK: Force clean up of Responders to avoid having to Dispose all the Views created above. - View.Instances.Clear (); - Assert.Empty (View.Instances); -#endif - } - - [Fact] - public void DimWidth_Set_To_Null_Throws () - { - Dim dim = Width (null); - Assert.Throws (() => dim.ToString ()); - } - - [Fact] - [TestRespondersDisposed] - public void DimWidth_SetsValue () - { - var testVal = Rectangle.Empty; - var testValView = new View { Frame = testVal }; - Dim dim = Width (testValView); - Assert.Equal ($"View(Width,View(){testVal})", dim.ToString ()); - testValView.Dispose (); - - testVal = new (1, 2, 3, 4); - testValView = new () { Frame = testVal }; - dim = Width (testValView); - Assert.Equal ($"View(Width,View(){testVal})", dim.ToString ()); - testValView.Dispose (); - } } diff --git a/UnitTests/View/Layout/LayoutTests.cs b/Tests/UnitTests/View/Layout/LayoutTests.cs similarity index 95% rename from UnitTests/View/Layout/LayoutTests.cs rename to Tests/UnitTests/View/Layout/LayoutTests.cs index 1b4110553..46b088394 100644 --- a/UnitTests/View/Layout/LayoutTests.cs +++ b/Tests/UnitTests/View/Layout/LayoutTests.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.LayoutTests; diff --git a/Tests/UnitTests/View/Layout/Pos.AnchorEndTests.cs b/Tests/UnitTests/View/Layout/Pos.AnchorEndTests.cs new file mode 100644 index 000000000..75f79af9c --- /dev/null +++ b/Tests/UnitTests/View/Layout/Pos.AnchorEndTests.cs @@ -0,0 +1,76 @@ +using UnitTests; +using UnitTests; +using Xunit.Abstractions; +using static Terminal.Gui.Dim; +using static Terminal.Gui.Pos; + +namespace Terminal.Gui.LayoutTests; + +public class PosAnchorEndTests (ITestOutputHelper output) +{ + + + // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved + // TODO: A new test that calls SetRelativeLayout directly is needed. + [Fact] + [AutoInitShutdown] + public void PosAnchorEnd_Equal_Inside_Window () + { + var viewWidth = 10; + var viewHeight = 1; + + var tv = new TextView + { + X = Pos.AnchorEnd (viewWidth), Y = Pos.AnchorEnd (viewHeight), Width = viewWidth, Height = viewHeight + }; + + var win = new Window (); + + win.Add (tv); + + Toplevel top = new (); + top.Add (win); + RunState rs = Application.Begin (top); + + Assert.Equal (new (0, 0, 80, 25), top.Frame); + Assert.Equal (new (0, 0, 80, 25), win.Frame); + Assert.Equal (new (68, 22, 10, 1), tv.Frame); + Application.End (rs); + top.Dispose (); + } + + //// TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved + //// TODO: A new test that calls SetRelativeLayout directly is needed. + //[Fact] + //[AutoInitShutdown] + //public void PosAnchorEnd_Equal_Inside_Window_With_MenuBar_And_StatusBar_On_Toplevel () + //{ + // var viewWidth = 10; + // var viewHeight = 1; + + // var tv = new TextView + // { + // X = Pos.AnchorEnd (viewWidth), Y = Pos.AnchorEnd (viewHeight), Width = viewWidth, Height = viewHeight + // }; + + // var win = new Window (); + + // win.Add (tv); + + // var menu = new MenuBar (); + // var status = new StatusBar (); + // Toplevel top = new (); + // top.Add (win, menu, status); + // RunState rs = Application.Begin (top); + + // Assert.Equal (new (0, 0, 80, 25), top.Frame); + // Assert.Equal (new (0, 0, 80, 1), menu.Frame); + // Assert.Equal (new (0, 24, 80, 1), status.Frame); + // Assert.Equal (new (0, 1, 80, 23), win.Frame); + // Assert.Equal (new (68, 20, 10, 1), tv.Frame); + + // Application.End (rs); + // top.Dispose (); + //} + +} diff --git a/UnitTests/View/Layout/Pos.CenterTests.cs b/Tests/UnitTests/View/Layout/Pos.CenterTests.cs similarity index 82% rename from UnitTests/View/Layout/Pos.CenterTests.cs rename to Tests/UnitTests/View/Layout/Pos.CenterTests.cs index a27dc5e22..26b834a22 100644 --- a/UnitTests/View/Layout/Pos.CenterTests.cs +++ b/Tests/UnitTests/View/Layout/Pos.CenterTests.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; using static Terminal.Gui.Dim; using static Terminal.Gui.Pos; @@ -8,65 +10,6 @@ public class PosCenterTests (ITestOutputHelper output) { private readonly ITestOutputHelper _output = output; - [Fact] - public void PosCenter_Constructor () - { - var posCenter = new PosCenter (); - Assert.NotNull (posCenter); - } - - [Fact] - public void PosCenter_ToString () - { - var posCenter = new PosCenter (); - var expectedString = "Center"; - - Assert.Equal (expectedString, posCenter.ToString ()); - } - - [Fact] - public void PosCenter_GetAnchor () - { - var posCenter = new PosCenter (); - var width = 50; - int expectedAnchor = width / 2; - - Assert.Equal (expectedAnchor, posCenter.GetAnchor (width)); - } - - [Fact] - public void PosCenter_CreatesCorrectInstance () - { - Pos pos = Center (); - Assert.IsType (pos); - } - - [Theory] - [InlineData (10, 2, 4)] - [InlineData (10, 10, 0)] - [InlineData (10, 11, 0)] - [InlineData (10, 12, -1)] - [InlineData (19, 20, 0)] - public void PosCenter_Calculate_ReturnsExpectedValue (int superviewDimension, int width, int expectedX) - { - var posCenter = new PosCenter (); - int result = posCenter.Calculate (superviewDimension, new DimAbsolute (width), null!, Dimension.Width); - Assert.Equal (expectedX, result); - } - - - [Fact] - public void PosCenter_Bigger_Than_SuperView () - { - var superView = new View { Width = 10, Height = 10 }; - var view = new View { X = Center (), Y = Center (), Width = 20, Height = 20 }; - superView.Add (view); - superView.LayoutSubviews (); - - Assert.Equal (-5, view.Frame.Left); - Assert.Equal (-5, view.Frame.Top); - } - [Theory] [AutoInitShutdown] [InlineData (1)] @@ -209,7 +152,7 @@ public class PosCenterTests (ITestOutputHelper output) break; } - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, _output); Application.End (rs); win.Dispose (); } @@ -379,7 +322,7 @@ public class PosCenterTests (ITestOutputHelper output) break; } - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, _output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, _output); Application.End (rs); win.Dispose (); } diff --git a/UnitTests/View/Layout/Pos.CombineTests.cs b/Tests/UnitTests/View/Layout/Pos.CombineTests.cs similarity index 81% rename from UnitTests/View/Layout/Pos.CombineTests.cs rename to Tests/UnitTests/View/Layout/Pos.CombineTests.cs index 8a71ef422..a3b8b5045 100644 --- a/UnitTests/View/Layout/Pos.CombineTests.cs +++ b/Tests/UnitTests/View/Layout/Pos.CombineTests.cs @@ -1,4 +1,5 @@ using Microsoft.VisualStudio.TestPlatform.Utilities; +using UnitTests; using Xunit.Abstractions; using static Terminal.Gui.Dim; using static Terminal.Gui.Pos; @@ -9,29 +10,6 @@ public class PosCombineTests (ITestOutputHelper output) { private readonly ITestOutputHelper _output = output; - // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved - // TODO: A new test that calls SetRelativeLayout directly is needed. - [Fact] - public void PosCombine_Referencing_Same_View () - { - var super = new View { Width = 10, Height = 10, Text = "super" }; - var view1 = new View { Width = 2, Height = 2, Text = "view1" }; - var view2 = new View { Width = 2, Height = 2, Text = "view2" }; - view2.X = Pos.AnchorEnd (0) - (Pos.Right (view2) - Pos.Left (view2)); - - super.Add (view1, view2); - super.BeginInit (); - super.EndInit (); - - Exception exception = Record.Exception (super.LayoutSubviews); - Assert.Null (exception); - Assert.Equal (new (0, 0, 10, 10), super.Frame); - Assert.Equal (new (0, 0, 2, 2), view1.Frame); - Assert.Equal (new (8, 0, 2, 2), view2.Frame); - - super.Dispose (); - } - // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved // TODO: A new test that calls SetRelativeLayout directly is needed. [Fact] diff --git a/UnitTests/View/Layout/Pos.Tests.cs b/Tests/UnitTests/View/Layout/Pos.Tests.cs similarity index 68% rename from UnitTests/View/Layout/Pos.Tests.cs rename to Tests/UnitTests/View/Layout/Pos.Tests.cs index abc217a32..d0683086a 100644 --- a/UnitTests/View/Layout/Pos.Tests.cs +++ b/Tests/UnitTests/View/Layout/Pos.Tests.cs @@ -1,4 +1,5 @@ -using Xunit.Abstractions; +using UnitTests; +using Xunit.Abstractions; using static Terminal.Gui.Dim; using static Terminal.Gui.Pos; @@ -35,38 +36,6 @@ public class PosTests () Application.Shutdown (); } - [Fact] - public void PosCombine_Calculate_ReturnsExpectedValue () - { - var posCombine = new PosCombine (AddOrSubtract.Add, new PosAbsolute (5), new PosAbsolute (3)); - var result = posCombine.Calculate (10, new DimAbsolute (2), null, Dimension.None); - Assert.Equal (8, result); - } - - [Fact] - public void PosFactor_Calculate_ReturnsExpectedValue () - { - var posFactor = new PosPercent (50); - var result = posFactor.Calculate (10, new DimAbsolute (2), null, Dimension.None); - Assert.Equal (5, result); - } - - [Fact] - public void PosFunc_Calculate_ReturnsExpectedValue () - { - var posFunc = new PosFunc (() => 5); - var result = posFunc.Calculate (10, new DimAbsolute (2), null, Dimension.None); - Assert.Equal (5, result); - } - - [Fact] - public void PosView_Calculate_ReturnsExpectedValue () - { - var posView = new PosView (new View { Frame = new Rectangle (5, 5, 10, 10) }, 0); - var result = posView.Calculate (10, new DimAbsolute (2), null, Dimension.None); - Assert.Equal (5, result); - } - // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved // TODO: A new test that calls SetRelativeLayout directly is needed. @@ -97,107 +66,6 @@ public class PosTests () v2.Dispose (); } - [Fact] - public void PosCombine_DoesNotReturn () - { - var v = new View { Id = "V" }; - - Pos pos = Pos.Left (v); - - Assert.Equal ( - $"View(Side=Left,Target=View(V){v.Frame})", - pos.ToString () - ); - - pos = Pos.X (v); - - Assert.Equal ( - $"View(Side=Left,Target=View(V){v.Frame})", - pos.ToString () - ); - - pos = Pos.Top (v); - - Assert.Equal ( - $"View(Side=Top,Target=View(V){v.Frame})", - pos.ToString () - ); - - pos = Pos.Y (v); - - Assert.Equal ( - $"View(Side=Top,Target=View(V){v.Frame})", - pos.ToString () - ); - - pos = Pos.Right (v); - - Assert.Equal ( - $"View(Side=Right,Target=View(V){v.Frame})", - pos.ToString () - ); - - pos = Pos.Bottom (v); - - Assert.Equal ( - $"View(Side=Bottom,Target=View(V){v.Frame})", - pos.ToString () - ); - } - - [Fact] - public void PosFunction_SetsValue () - { - var text = "Test"; - Pos pos = Pos.Func (() => text.Length); - Assert.Equal ("PosFunc(4)", pos.ToString ()); - - text = "New Test"; - Assert.Equal ("PosFunc(8)", pos.ToString ()); - - text = ""; - Assert.Equal ("PosFunc(0)", pos.ToString ()); - } - - [Fact] - [TestRespondersDisposed] - public void Internal_Tests () - { - var posFactor = new PosPercent (10); - Assert.Equal (10, posFactor.GetAnchor (100)); - - var posAnchorEnd = new PosAnchorEnd (1); - Assert.Equal (99, posAnchorEnd.GetAnchor (100)); - - var posCenter = new PosCenter (); - Assert.Equal (50, posCenter.GetAnchor (100)); - - var posAbsolute = new PosAbsolute (10); - Assert.Equal (10, posAbsolute.GetAnchor (0)); - - var posCombine = new PosCombine (AddOrSubtract.Add, posFactor, posAbsolute); - Assert.Equal (posCombine.Left, posFactor); - Assert.Equal (posCombine.Right, posAbsolute); - Assert.Equal (20, posCombine.GetAnchor (100)); - - posCombine = new (AddOrSubtract.Add, posAbsolute, posFactor); - Assert.Equal (posCombine.Left, posAbsolute); - Assert.Equal (posCombine.Right, posFactor); - Assert.Equal (20, posCombine.GetAnchor (100)); - - var view = new View { Frame = new (20, 10, 20, 1) }; - var posViewX = new PosView (view, Side.Left); - Assert.Equal (20, posViewX.GetAnchor (0)); - var posViewY = new PosView (view, Side.Top); - Assert.Equal (10, posViewY.GetAnchor (0)); - var posRight = new PosView (view, Side.Right); - Assert.Equal (40, posRight.GetAnchor (0)); - var posViewBottom = new PosView (view, Side.Bottom); - Assert.Equal (11, posViewBottom.GetAnchor (0)); - - view.Dispose (); - } - // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved // TODO: A new test that calls SetRelativeLayout directly is needed. // See: https://github.com/gui-cs/Terminal.Gui/issues/504 @@ -283,42 +151,6 @@ public class PosTests () } } - [Fact] - public void PosPercent_Equal () - { - int n1 = 0; - int n2 = 0; - Pos pos1 = Pos.Percent (n1); - Pos pos2 = Pos.Percent (n2); - Assert.Equal (pos1, pos2); - - n1 = n2 = 1; - pos1 = Pos.Percent (n1); - pos2 = Pos.Percent (n2); - Assert.Equal (pos1, pos2); - - n1 = n2 = 50; - pos1 = Pos.Percent (n1); - pos2 = Pos.Percent (n2); - Assert.Equal (pos1, pos2); - - n1 = n2 = 100; - pos1 = Pos.Percent (n1); - pos2 = Pos.Percent (n2); - Assert.Equal (pos1, pos2); - - n1 = 0; - n2 = 1; - pos1 = Pos.Percent (n1); - pos2 = Pos.Percent (n2); - Assert.NotEqual (pos1, pos2); - - n1 = 50; - n2 = 150; - pos1 = Pos.Percent (n1); - pos2 = Pos.Percent (n2); - Assert.NotEqual (pos1, pos2); - } // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved // TODO: A new test that calls SetRelativeLayout directly is needed. diff --git a/Tests/UnitTests/View/Layout/Pos.ViewTests.cs b/Tests/UnitTests/View/Layout/Pos.ViewTests.cs new file mode 100644 index 000000000..398dae7f8 --- /dev/null +++ b/Tests/UnitTests/View/Layout/Pos.ViewTests.cs @@ -0,0 +1,78 @@ +using UnitTests; +using Xunit.Abstractions; +using static Terminal.Gui.Pos; + +namespace Terminal.Gui.LayoutTests; + +public class PosViewTests (ITestOutputHelper output) +{ + private readonly ITestOutputHelper _output = output; + + // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved + // TODO: A new test that calls SetRelativeLayout directly is needed. + [Fact] + [TestRespondersDisposed] + public void Subtract_Operator () + { + Application.Init (new FakeDriver ()); + + var top = new Toplevel (); + + var view = new View { X = 0, Y = 0, Width = 20, Height = 20 }; + var field = new TextField { X = 0, Y = 0, Width = 20 }; + var count = 20; + List listViews = new (); + + for (var i = 0; i < count; i++) + { + field.Text = $"View {i}"; + var view2 = new View { X = 0, Y = field.Y, Width = 20, Text = field.Text }; + view.Add (view2); + Assert.Equal ($"View {i}", view2.Text); + Assert.Equal ($"Absolute({i})", field.Y.ToString ()); + listViews.Add (view2); + + Assert.Equal ($"Absolute({i})", field.Y.ToString ()); + field.Y += 1; + Assert.Equal ($"Absolute({i + 1})", field.Y.ToString ()); + } + + field.KeyDown += (s, k) => + { + if (k.KeyCode == KeyCode.Enter) + { + Assert.Equal ($"View {count - 1}", listViews [count - 1].Text); + view.Remove (listViews [count - 1]); + listViews [count - 1].Dispose (); + + Assert.Equal ($"Absolute({count})", field.Y.ToString ()); + field.Y -= 1; + count--; + Assert.Equal ($"Absolute({count})", field.Y.ToString ()); + } + }; + + Application.Iteration += (s, a) => + { + while (count > 0) + { + field.NewKeyDownEvent (new (KeyCode.Enter)); + } + + Application.RequestStop (); + }; + + var win = new Window (); + win.Add (view); + win.Add (field); + + top.Add (win); + + Application.Run (top); + top.Dispose (); + Assert.Equal (0, count); + + // Shutdown must be called to safely clean up Application if Init has been called + Application.Shutdown (); + } +} diff --git a/Tests/UnitTests/View/Layout/SetLayoutTests.cs b/Tests/UnitTests/View/Layout/SetLayoutTests.cs new file mode 100644 index 000000000..27605d541 --- /dev/null +++ b/Tests/UnitTests/View/Layout/SetLayoutTests.cs @@ -0,0 +1,41 @@ +using UnitTests; +using Xunit.Abstractions; + +namespace Terminal.Gui.LayoutTests; + +public class SetLayoutTests (ITestOutputHelper output) +{ + private readonly ITestOutputHelper _output = output; + + + [Fact] + [AutoInitShutdown] + public void Screen_Size_Change_Causes_Layout () + { + Application.Top = new (); + + var view = new View + { + X = 3, + Y = 2, + Width = 10, + Height = 1, + Text = "0123456789" + }; + Application.Top.Add (view); + + var rs = Application.Begin (Application.Top); + + Assert.Equal (new (0, 0, 80, 25), new Rectangle (0, 0, View.Driver.Cols, View.Driver.Rows)); + Assert.Equal (new (0, 0, View.Driver.Cols, View.Driver.Rows), Application.Top.Frame); + Assert.Equal (new (0, 0, 80, 25), Application.Top.Frame); + + ((FakeDriver)Application.Driver!).SetBufferSize (20, 10); + Assert.Equal (new (0, 0, View.Driver.Cols, View.Driver.Rows), Application.Top.Frame); + + Assert.Equal (new (0, 0, 20, 10), Application.Top.Frame); + + Application.End (rs); + + } +} diff --git a/UnitTests/View/Mouse/GetViewsUnderMouseTests.cs b/Tests/UnitTests/View/Mouse/GetViewsUnderMouseTests.cs similarity index 100% rename from UnitTests/View/Mouse/GetViewsUnderMouseTests.cs rename to Tests/UnitTests/View/Mouse/GetViewsUnderMouseTests.cs diff --git a/UnitTests/View/Mouse/MouseEnterLeaveTests.cs b/Tests/UnitTests/View/Mouse/MouseEnterLeaveTests.cs similarity index 100% rename from UnitTests/View/Mouse/MouseEnterLeaveTests.cs rename to Tests/UnitTests/View/Mouse/MouseEnterLeaveTests.cs diff --git a/UnitTests/View/Mouse/MouseTests.cs b/Tests/UnitTests/View/Mouse/MouseTests.cs similarity index 99% rename from UnitTests/View/Mouse/MouseTests.cs rename to Tests/UnitTests/View/Mouse/MouseTests.cs index 9c91735ac..1c94ecd45 100644 --- a/UnitTests/View/Mouse/MouseTests.cs +++ b/Tests/UnitTests/View/Mouse/MouseTests.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewMouseTests; diff --git a/UnitTests/View/Navigation/AddRemoveTests.cs b/Tests/UnitTests/View/Navigation/AddRemoveTests.cs similarity index 99% rename from UnitTests/View/Navigation/AddRemoveTests.cs rename to Tests/UnitTests/View/Navigation/AddRemoveTests.cs index ae84ba64f..253dd6dbd 100644 --- a/UnitTests/View/Navigation/AddRemoveTests.cs +++ b/Tests/UnitTests/View/Navigation/AddRemoveTests.cs @@ -1,4 +1,5 @@ -using Xunit.Abstractions; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; diff --git a/UnitTests/View/Navigation/AdvanceFocusTests.cs b/Tests/UnitTests/View/Navigation/AdvanceFocusTests.cs similarity index 100% rename from UnitTests/View/Navigation/AdvanceFocusTests.cs rename to Tests/UnitTests/View/Navigation/AdvanceFocusTests.cs diff --git a/UnitTests/View/Navigation/CanFocusTests.cs b/Tests/UnitTests/View/Navigation/CanFocusTests.cs similarity index 93% rename from UnitTests/View/Navigation/CanFocusTests.cs rename to Tests/UnitTests/View/Navigation/CanFocusTests.cs index 39fa34ad8..88bd8300a 100644 --- a/UnitTests/View/Navigation/CanFocusTests.cs +++ b/Tests/UnitTests/View/Navigation/CanFocusTests.cs @@ -1,4 +1,5 @@ -using Xunit.Abstractions; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; @@ -361,25 +362,4 @@ public class CanFocusTests () : TestsAllViews Application.Top.Dispose (); Application.ResetState (); } - - [Fact (Skip = "Causes crash on Ubuntu in Github Action. Bogus test anyway.")] - public void WindowDispose_CanFocusProblem () - { - // Arrange - Application.Init (); - using var top = new Toplevel (); - using var view = new View { X = 0, Y = 1, Text = nameof (WindowDispose_CanFocusProblem) }; - using var window = new Window (); - top.Add (window); - window.Add (view); - - // Act - RunState rs = Application.Begin (top); - Application.End (rs); - top.Dispose (); - Application.Shutdown (); - - // Assert does Not throw NullReferenceException - top.SetFocus (); - } } diff --git a/UnitTests/View/Navigation/EnabledTests.cs b/Tests/UnitTests/View/Navigation/EnabledTests.cs similarity index 99% rename from UnitTests/View/Navigation/EnabledTests.cs rename to Tests/UnitTests/View/Navigation/EnabledTests.cs index 708977904..46f8a782b 100644 --- a/UnitTests/View/Navigation/EnabledTests.cs +++ b/Tests/UnitTests/View/Navigation/EnabledTests.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; diff --git a/UnitTests/View/Navigation/HasFocusChangeEventTests.cs b/Tests/UnitTests/View/Navigation/HasFocusChangeEventTests.cs similarity index 99% rename from UnitTests/View/Navigation/HasFocusChangeEventTests.cs rename to Tests/UnitTests/View/Navigation/HasFocusChangeEventTests.cs index 24e4d4478..bba863af6 100644 --- a/UnitTests/View/Navigation/HasFocusChangeEventTests.cs +++ b/Tests/UnitTests/View/Navigation/HasFocusChangeEventTests.cs @@ -1,4 +1,5 @@ -using Xunit.Abstractions; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; diff --git a/UnitTests/View/Navigation/HasFocusTests.cs b/Tests/UnitTests/View/Navigation/HasFocusTests.cs similarity index 99% rename from UnitTests/View/Navigation/HasFocusTests.cs rename to Tests/UnitTests/View/Navigation/HasFocusTests.cs index 072d23c71..59d22ef73 100644 --- a/UnitTests/View/Navigation/HasFocusTests.cs +++ b/Tests/UnitTests/View/Navigation/HasFocusTests.cs @@ -1,4 +1,5 @@ -using Xunit.Abstractions; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; diff --git a/UnitTests/View/Navigation/NavigationTests.cs b/Tests/UnitTests/View/Navigation/NavigationTests.cs similarity index 99% rename from UnitTests/View/Navigation/NavigationTests.cs rename to Tests/UnitTests/View/Navigation/NavigationTests.cs index 97aef5df5..d72067663 100644 --- a/UnitTests/View/Navigation/NavigationTests.cs +++ b/Tests/UnitTests/View/Navigation/NavigationTests.cs @@ -1,4 +1,6 @@ using JetBrains.Annotations; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; diff --git a/UnitTests/View/Navigation/RestoreFocusTests.cs b/Tests/UnitTests/View/Navigation/RestoreFocusTests.cs similarity index 99% rename from UnitTests/View/Navigation/RestoreFocusTests.cs rename to Tests/UnitTests/View/Navigation/RestoreFocusTests.cs index e03c25fc8..8767f9c1b 100644 --- a/UnitTests/View/Navigation/RestoreFocusTests.cs +++ b/Tests/UnitTests/View/Navigation/RestoreFocusTests.cs @@ -1,4 +1,5 @@ -using Xunit.Abstractions; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; diff --git a/UnitTests/View/Navigation/SetFocusTests.cs b/Tests/UnitTests/View/Navigation/SetFocusTests.cs similarity index 99% rename from UnitTests/View/Navigation/SetFocusTests.cs rename to Tests/UnitTests/View/Navigation/SetFocusTests.cs index 832c88ac3..9cb6c311b 100644 --- a/UnitTests/View/Navigation/SetFocusTests.cs +++ b/Tests/UnitTests/View/Navigation/SetFocusTests.cs @@ -1,4 +1,5 @@ -using Xunit.Abstractions; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; diff --git a/UnitTests/View/Navigation/VisibleTests.cs b/Tests/UnitTests/View/Navigation/VisibleTests.cs similarity index 99% rename from UnitTests/View/Navigation/VisibleTests.cs rename to Tests/UnitTests/View/Navigation/VisibleTests.cs index e4a1e102b..aa037c16e 100644 --- a/UnitTests/View/Navigation/VisibleTests.cs +++ b/Tests/UnitTests/View/Navigation/VisibleTests.cs @@ -1,4 +1,5 @@ -using Xunit.Abstractions; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; diff --git a/UnitTests/View/Orientation/OrientationHelperTests.cs b/Tests/UnitTests/View/Orientation/OrientationHelperTests.cs similarity index 100% rename from UnitTests/View/Orientation/OrientationHelperTests.cs rename to Tests/UnitTests/View/Orientation/OrientationHelperTests.cs diff --git a/UnitTests/View/Orientation/OrientationTests.cs b/Tests/UnitTests/View/Orientation/OrientationTests.cs similarity index 100% rename from UnitTests/View/Orientation/OrientationTests.cs rename to Tests/UnitTests/View/Orientation/OrientationTests.cs diff --git a/UnitTests/View/SubviewTests.cs b/Tests/UnitTests/View/SubviewTests.cs similarity index 61% rename from UnitTests/View/SubviewTests.cs rename to Tests/UnitTests/View/SubviewTests.cs index 8dc057457..666a282e0 100644 --- a/UnitTests/View/SubviewTests.cs +++ b/Tests/UnitTests/View/SubviewTests.cs @@ -1,4 +1,5 @@ using System.Text; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; @@ -8,37 +9,6 @@ public class SubviewTests private readonly ITestOutputHelper _output; public SubviewTests (ITestOutputHelper output) { _output = output; } - [Fact] - [TestRespondersDisposed] - public void Added_Removed () - { - var v = new View { Frame = new Rectangle (0, 0, 10, 24) }; - var t = new View (); - - v.Added += (s, e) => - { - Assert.Same (v.SuperView, e.SuperView); - Assert.Same (t, e.SuperView); - Assert.Same (v, e.SubView); - }; - - v.Removed += (s, e) => - { - Assert.Same (t, e.SuperView); - Assert.Same (v, e.SubView); - Assert.True (v.SuperView == null); - }; - - t.Add (v); - Assert.True (t.Subviews.Count == 1); - - t.Remove (v); - Assert.True (t.Subviews.Count == 0); - - t.Dispose (); - v.Dispose (); - } - [Fact] [AutoInitShutdown] public void GetTopSuperView_Test () @@ -315,296 +285,4 @@ public class SubviewTests Assert.True (w.CanFocus); Assert.False (v1.CanFocus); Assert.False (v2.CanFocus); - } - - [Fact] - [TestRespondersDisposed] - public void IsAdded_Added_Removed () - { - var top = new Toplevel (); - var view = new View (); - Assert.False (view.IsAdded); - top.Add (view); - Assert.True (view.IsAdded); - top.Remove (view); - Assert.False (view.IsAdded); - - top.Dispose (); - view.Dispose (); - } - - // TODO: Consider a feature that will change the ContentSize to fit the subviews. - [Fact] - public void Add_Does_Not_Impact_ContentSize () - { - var view = new View (); - view.SetContentSize (new Size (1, 1)); - - var subview = new View () - { - X = 10, - Y = 10 - }; - - Assert.Equal (new Size (1, 1), view.GetContentSize ()); - view.Add (subview); - Assert.Equal (new Size (1, 1), view.GetContentSize ()); - } - - [Fact] - public void Remove_Does_Not_Impact_ContentSize () - { - var view = new View (); - view.SetContentSize (new Size (1, 1)); - - var subview = new View () - { - X = 10, - Y = 10 - }; - - Assert.Equal (new Size (1, 1), view.GetContentSize ()); - view.Add (subview); - Assert.Equal (new Size (1, 1), view.GetContentSize ()); - - view.SetContentSize (new Size (5, 5)); - Assert.Equal (new Size (5, 5), view.GetContentSize ()); - - view.Remove (subview); - Assert.Equal (new Size (5, 5), view.GetContentSize ()); - } - - [Fact] - public void MoveSubviewToStart () - { - View superView = new (); - - View subview1 = new View () - { - Id = "subview1" - }; - - View subview2 = new View () - { - Id = "subview2" - }; - - View subview3 = new View () - { - Id = "subview3" - }; - - superView.Add (subview1, subview2, subview3); - - superView.MoveSubviewToStart (subview2); - Assert.Equal(subview2, superView.Subviews [0]); - - superView.MoveSubviewToStart (subview3); - Assert.Equal (subview3, superView.Subviews [0]); - } - - - [Fact] - public void MoveSubviewTowardsFront () - { - View superView = new (); - - View subview1 = new View () - { - Id = "subview1" - }; - - View subview2 = new View () - { - Id = "subview2" - }; - - View subview3 = new View () - { - Id = "subview3" - }; - - superView.Add (subview1, subview2, subview3); - - superView.MoveSubviewTowardsStart (subview2); - Assert.Equal (subview2, superView.Subviews [0]); - - superView.MoveSubviewTowardsStart (subview3); - Assert.Equal (subview3, superView.Subviews [1]); - - // Already at front, what happens? - superView.MoveSubviewTowardsStart (subview2); - Assert.Equal (subview2, superView.Subviews [0]); - } - - [Fact] - public void MoveSubviewToEnd () - { - View superView = new (); - - View subview1 = new View () - { - Id = "subview1" - }; - - View subview2 = new View () - { - Id = "subview2" - }; - - View subview3 = new View () - { - Id = "subview3" - }; - - superView.Add (subview1, subview2, subview3); - - superView.MoveSubviewToEnd (subview1); - Assert.Equal (subview1, superView.Subviews [^1]); - - superView.MoveSubviewToEnd (subview2); - Assert.Equal (subview2, superView.Subviews [^1]); - } - - - [Fact] - public void MoveSubviewTowardsEnd () - { - View superView = new (); - - View subview1 = new View () - { - Id = "subview1" - }; - - View subview2 = new View () - { - Id = "subview2" - }; - - View subview3 = new View () - { - Id = "subview3" - }; - - superView.Add (subview1, subview2, subview3); - - superView.MoveSubviewTowardsEnd (subview2); - Assert.Equal (subview2, superView.Subviews [^1]); - - superView.MoveSubviewTowardsEnd (subview1); - Assert.Equal (subview1, superView.Subviews [1]); - - // Already at end, what happens? - superView.MoveSubviewTowardsEnd (subview2); - Assert.Equal (subview2, superView.Subviews [^1]); - } - - [Fact] - public void IsInHierarchy_ViewIsNull_ReturnsFalse () - { - // Arrange - var start = new View (); - - // Act - var result = View.IsInHierarchy (start, null); - - // Assert - Assert.False (result); - } - - [Fact] - public void IsInHierarchy_StartIsNull_ReturnsFalse () - { - // Arrange - var view = new View (); - - // Act - var result = View.IsInHierarchy (null, view); - - // Assert - Assert.False (result); - } - - [Fact] - public void IsInHierarchy_ViewIsStart_ReturnsTrue () - { - // Arrange - var start = new View (); - - // Act - var result = View.IsInHierarchy (start, start); - - // Assert - Assert.True (result); - } - - [Fact] - public void IsInHierarchy_ViewIsDirectSubview_ReturnsTrue () - { - // Arrange - var start = new View (); - var subview = new View (); - start.Add (subview); - - // Act - var result = View.IsInHierarchy (start, subview); - - // Assert - Assert.True (result); - } - - [Fact] - public void IsInHierarchy_ViewIsNestedSubview_ReturnsTrue () - { - // Arrange - var start = new View (); - var subview = new View (); - var nestedSubview = new View (); - start.Add (subview); - subview.Add (nestedSubview); - - // Act - var result = View.IsInHierarchy (start, nestedSubview); - - // Assert - Assert.True (result); - } - - [Fact] - public void IsInHierarchy_ViewIsNotInHierarchy_ReturnsFalse () - { - // Arrange - var start = new View (); - var subview = new View (); - - // Act - var result = View.IsInHierarchy (start, subview); - - // Assert - Assert.False (result); - } - - [Theory] - [CombinatorialData] - public void IsInHierarchy_ViewIsInAdornments_ReturnsTrue (bool includeAdornments) - { - // Arrange - var start = new View () - { - Id = "start" - }; - var inPadding = new View () - { - Id = "inPadding" - }; - - start.Padding.Add (inPadding); - - // Act - var result = View.IsInHierarchy (start, inPadding, includeAdornments: includeAdornments); - - // Assert - Assert.Equal(includeAdornments, result); - } -} + }} diff --git a/UnitTests/View/TextTests.cs b/Tests/UnitTests/View/TextTests.cs similarity index 78% rename from UnitTests/View/TextTests.cs rename to Tests/UnitTests/View/TextTests.cs index d1a96a45d..6370521ec 100644 --- a/UnitTests/View/TextTests.cs +++ b/Tests/UnitTests/View/TextTests.cs @@ -1,5 +1,7 @@ using System.Runtime.CompilerServices; using System.Text; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; @@ -9,32 +11,6 @@ namespace Terminal.Gui.ViewTests; /// public class TextTests (ITestOutputHelper output) { - // TextFormatter.Size should be empty unless DimAuto is set or ContentSize is set - [Theory] - [InlineData ("", 0, 0)] - [InlineData (" ", 0, 0)] - [InlineData ("01234", 0, 0)] - public void TextFormatter_Size_Default (string text, int expectedW, int expectedH) - { - var view = new View (); - view.Text = text; - view.Layout (); - Assert.Equal (new (expectedW, expectedH), view.TextFormatter.ConstrainToSize); - } - - // TextFormatter.Size should track ContentSize (without DimAuto) - [Theory] - [InlineData ("", 1, 1)] - [InlineData (" ", 1, 1)] - [InlineData ("01234", 1, 1)] - public void TextFormatter_Size_Tracks_ContentSize (string text, int expectedW, int expectedH) - { - var view = new View (); - view.SetContentSize (new (1, 1)); - view.Text = text; - view.Layout (); - Assert.Equal (new (expectedW, expectedH), view.TextFormatter.ConstrainToSize); - } [Fact] [SetupFakeDriver] @@ -59,7 +35,7 @@ HelloX Y "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); label.Width = 10; label.Height = 2; @@ -76,7 +52,7 @@ Hello X Y "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); } [Fact] @@ -109,7 +85,7 @@ o Y "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); label.Width = 2; label.Height = 10; @@ -132,7 +108,7 @@ Y " ; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Application.End (rs); top.Dispose (); } @@ -181,7 +157,7 @@ Y └─────────────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); view.Text = "Hello World"; view.Width = 11; @@ -211,7 +187,7 @@ Y └─────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); view.Width = Dim.Auto (); view.Height = Dim.Auto (); @@ -239,7 +215,7 @@ Y └─────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); view.TextDirection = TextDirection.TopBottom_LeftRight; Application.RunIteration (ref rs); @@ -264,7 +240,7 @@ Y └─────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); // Setting to false causes Width and Height to be set to the current ContentSize view.Width = 1; @@ -283,7 +259,7 @@ Y view.SetNeedsDraw (); view.Draw (); expected = @" HelloWorlds"; - TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Application.RunIteration (ref rs); @@ -308,7 +284,7 @@ Y └─────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); view.PreserveTrailingSpaces = true; Application.RunIteration (ref rs); @@ -333,7 +309,7 @@ Y └─────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); view.PreserveTrailingSpaces = false; Rectangle f = view.Frame; @@ -362,7 +338,7 @@ Y └─────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); view.Width = Dim.Auto (); view.Height = Dim.Auto (); @@ -389,7 +365,7 @@ Y └─────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Application.End (rs); top.Dispose (); } @@ -437,7 +413,7 @@ Y └──┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 4, 10), pos); text = "0123456789"; @@ -464,7 +440,7 @@ Y └──┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 4, 10), pos); top.Dispose (); } @@ -501,7 +477,7 @@ i e w "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); } [Fact] @@ -567,7 +543,7 @@ w "; └──────────────────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); verticalView.Text = $"最初の行{Environment.NewLine}二行目"; Application.RunIteration (ref rs); @@ -596,7 +572,7 @@ w "; └──────────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Application.End (rs); top.Dispose (); } @@ -660,7 +636,7 @@ w "; └────────────────────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); verticalView.Text = "最初の行二行目"; Application.RunIteration (ref rs); @@ -693,7 +669,7 @@ w "; └────────────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Application.End (rs); top.Dispose (); } @@ -858,7 +834,7 @@ w "; "; } - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, width + 2, 6), pos); top.Dispose (); } @@ -1016,166 +992,11 @@ w "; "; } - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 9, height + 2), pos); top.Dispose (); } - // Test that View.PreserveTrailingSpaces removes trailing spaces - [Fact] - public void PreserveTrailingSpaces_Removes_Trailing_Spaces () - { - var view = new View { Text = "Hello World " }; - Assert.Equal ("Hello World ", view.TextFormatter.Text); - - view.TextFormatter.WordWrap = true; - view.TextFormatter.ConstrainToSize = new (5, 3); - - view.PreserveTrailingSpaces = false; - Assert.Equal ($"Hello{Environment.NewLine}World", view.TextFormatter.Format ()); - - view.PreserveTrailingSpaces = true; - Assert.Equal ($"Hello{Environment.NewLine} {Environment.NewLine}World", view.TextFormatter.Format ()); - } - - // View.PreserveTrailingSpaces Gets or sets whether trailing spaces at the end of word-wrapped lines are preserved - // or not when is enabled. - // If trailing spaces at the end of wrapped lines will be removed when - // is formatted for display.The default is . - [Fact] - public void PreserveTrailingSpaces_Set_Get () - { - var view = new View { Text = "Hello World" }; - - Assert.False (view.PreserveTrailingSpaces); - - view.PreserveTrailingSpaces = true; - Assert.True (view.PreserveTrailingSpaces); - } - - // Setting TextFormatter DOES NOT update Text - [Fact] - public void SettingTextFormatterDoesNotUpdateText () - { - var view = new View (); - view.TextFormatter.Text = "Hello World"; - - Assert.True (string.IsNullOrEmpty (view.Text)); - } - - // Setting Text updates TextFormatter - [Fact] - public void SettingTextUpdatesTextFormatter () - { - var view = new View { Text = "Hello World" }; - - Assert.Equal ("Hello World", view.Text); - Assert.Equal ("Hello World", view.TextFormatter.Text); - } - - // Setting Text does NOT set the HotKey - [Fact] - public void Text_Does_Not_Set_HotKey () - { - var view = new View { HotKeySpecifier = (Rune)'_', Text = "_Hello World" }; - - Assert.NotEqual (Key.H, view.HotKey); - } - - // Test that TextFormatter is init only - [Fact] - public void TextFormatterIsInitOnly () - { - var view = new View (); - - // Use reflection to ensure the TextFormatter property is `init` only - Assert.Contains ( - typeof (IsExternalInit), - typeof (View).GetMethod ("set_TextFormatter") - .ReturnParameter.GetRequiredCustomModifiers ()); - } - - // Test that the Text property is set correctly. - [Fact] - public void TextProperty () - { - var view = new View { Text = "Hello World" }; - - Assert.Equal ("Hello World", view.Text); - } - - // Test view.UpdateTextFormatterText overridden in a subclass updates TextFormatter.Text - [Fact] - public void UpdateTextFormatterText_Overridden () - { - var view = new TestView { Text = "Hello World" }; - - Assert.Equal ("Hello World", view.Text); - Assert.Equal (">Hello World<", view.TextFormatter.Text); - } - - private class TestView : View - { - protected override void UpdateTextFormatterText () { TextFormatter.Text = $">{Text}<"; } - } - - [Fact] - public void TextDirection_Horizontal_Dims_Correct () - { - // Initializes a view with a vertical direction - var view = new View - { - Text = "01234", - TextDirection = TextDirection.LeftRight_TopBottom, - Width = Dim.Auto (DimAutoStyle.Text), - Height = Dim.Auto (DimAutoStyle.Text) - }; - Assert.True (view.NeedsLayout); - view.Layout (); - Assert.Equal (new (0, 0, 5, 1), view.Frame); - Assert.Equal (new (0, 0, 5, 1), view.Viewport); - - view.BeginInit (); - view.EndInit (); - Assert.Equal (new (0, 0, 5, 1), view.Frame); - Assert.Equal (new (0, 0, 5, 1), view.Viewport); - } - - // BUGBUG: this is a temporary test that helped identify #3469 - It needs to be expanded upon (and renamed) - [Fact] - public void TextDirection_Horizontal_Dims_Correct_WidthAbsolute () - { - var view = new View - { - Text = "01234", - TextDirection = TextDirection.LeftRight_TopBottom, - TextAlignment = Alignment.Center, - Width = 10, - Height = Dim.Auto (DimAutoStyle.Text) - }; - view.BeginInit (); - view.EndInit (); - Assert.Equal (new (0, 0, 10, 1), view.Frame); - Assert.Equal (new (0, 0, 10, 1), view.Viewport); - - Assert.Equal (new (10, 1), view.TextFormatter.ConstrainToSize); - } - - [Fact] - public void TextDirection_Vertical_Dims_Correct () - { - // Initializes a view with a vertical direction - var view = new View - { - TextDirection = TextDirection.TopBottom_LeftRight, - Text = "01234", - Width = Dim.Auto (DimAutoStyle.Text), - Height = Dim.Auto (DimAutoStyle.Text) - }; - view.Layout (); - Assert.Equal (new (0, 0, 1, 5), view.Frame); - Assert.Equal (new (0, 0, 1, 5), view.Viewport); - } [Fact] [SetupFakeDriver] @@ -1248,7 +1069,7 @@ w "; └──────────────────────────────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); verticalView.Text = $"最初の行{Environment.NewLine}二行目"; Assert.True (verticalView.TextFormatter.NeedsFormat); @@ -1297,7 +1118,7 @@ w "; └──────────────────────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); } [Fact] @@ -1312,6 +1133,6 @@ w "; view.EndInit (); view.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre (text, output); + DriverAssert.AssertDriverContentsWithFrameAre (text, output); } } diff --git a/UnitTests/View/ViewCommandTests.cs b/Tests/UnitTests/View/ViewCommandTests.cs similarity index 97% rename from UnitTests/View/ViewCommandTests.cs rename to Tests/UnitTests/View/ViewCommandTests.cs index a13243fae..728cc3bff 100644 --- a/UnitTests/View/ViewCommandTests.cs +++ b/Tests/UnitTests/View/ViewCommandTests.cs @@ -167,7 +167,8 @@ public class ViewCommandTests w.LayoutSubviews (); - Application.Begin (w); + Application.Top = w; + Application.TopLevels.Push(w); Assert.Same (Application.Top, w); // Click button 2 @@ -195,6 +196,8 @@ public class ViewCommandTests // Button A (IsDefault) should NOT have been accepted because B canceled Assert.Equal (1, A_AcceptedCount); Assert.Equal (2, B_AcceptedCount); + + Application.ResetState (true); } // See: https://github.com/gui-cs/Terminal.Gui/issues/3905 @@ -235,9 +238,12 @@ public class ViewCommandTests w.Add (btn); - w.LayoutSubviews (); - Application.Begin (w); + Application.Top = w; + Application.TopLevels.Push (w); + Assert.Same (Application.Top, w); + + w.LayoutSubviews (); // Click button just like a driver would var btnFrame = btn.FrameToScreen (); @@ -264,6 +270,8 @@ public class ViewCommandTests Assert.Equal (1, btnAcceptedCount); Assert.Equal (2, wAcceptedCount); + + Application.ResetState (true); } #endregion OnAccept/Accept tests diff --git a/UnitTests/View/ViewTests.cs b/Tests/UnitTests/View/ViewTests.cs similarity index 96% rename from UnitTests/View/ViewTests.cs rename to Tests/UnitTests/View/ViewTests.cs index 055c78244..f42cc4abd 100644 --- a/UnitTests/View/ViewTests.cs +++ b/Tests/UnitTests/View/ViewTests.cs @@ -1,19 +1,31 @@ using System.ComponentModel; using System.Text; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewTests; -public class ViewTests (ITestOutputHelper output) +public class ViewTests { + private ITestOutputHelper _output; + + public ViewTests (ITestOutputHelper output) + { + output = output; +#if DEBUG_IDISPOSABLE + View.DebugIDisposable = true; +#endif + } + // Generic lifetime (IDisposable) tests [Fact] [TestRespondersDisposed] public void Dispose_Works () { var r = new View (); -#if DEBUG_IDISPOSABL - Assert.Equals (3, View.Instances.Count); +#if DEBUG_IDISPOSABLE + Assert.Equal (4, View.Instances.Count); #endif r.Dispose (); @@ -338,7 +350,7 @@ public class ViewTests (ITestOutputHelper output) 111 ─────────── 222"; - TestHelpers.AssertDriverContentsAre (looksLike, output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); v.Dispose (); top.Dispose (); bottom.Dispose (); @@ -444,7 +456,7 @@ public class ViewTests (ITestOutputHelper output) Assert.True (view.Visible); ((FakeDriver)Application.Driver!).SetBufferSize (30, 5); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────────────────────────┐ │Testing visibility. │ @@ -452,7 +464,7 @@ public class ViewTests (ITestOutputHelper output) │ │ └────────────────────────────┘ ", - output + _output ); view.Visible = false; @@ -460,7 +472,7 @@ public class ViewTests (ITestOutputHelper output) var firstIteration = false; Application.RunIteration (ref rs, firstIteration); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────────────────────────┐ │ │ @@ -468,7 +480,7 @@ public class ViewTests (ITestOutputHelper output) │ │ └────────────────────────────┘ ", - output + _output ); Application.End (rs); top.Dispose (); diff --git a/Tests/UnitTests/ViewTestHelpers.cs b/Tests/UnitTests/ViewTestHelpers.cs new file mode 100644 index 000000000..63085ef24 --- /dev/null +++ b/Tests/UnitTests/ViewTestHelpers.cs @@ -0,0 +1,141 @@ +using System.Reflection; + +namespace UnitTests; + +/// +/// Helpers for View tests. +/// +public class ViewTestHelpers +{ + public static View CreateViewFromType (Type type, ConstructorInfo ctor) + { + View viewType = null; + + if (type.IsGenericType && type.IsTypeDefinition) + { + List gTypes = new (); + + foreach (Type args in type.GetGenericArguments ()) + { + gTypes.Add (typeof (object)); + } + + type = type.MakeGenericType (gTypes.ToArray ()); + + Assert.IsType (type, (View)Activator.CreateInstance (type)); + } + else + { + ParameterInfo [] paramsInfo = ctor.GetParameters (); + Type paramType; + List pTypes = new (); + + if (type.IsGenericType) + { + foreach (Type args in type.GetGenericArguments ()) + { + paramType = args.GetType (); + + if (args.Name == "T") + { + pTypes.Add (typeof (object)); + } + else + { + AddArguments (paramType, pTypes); + } + } + } + + foreach (ParameterInfo p in paramsInfo) + { + paramType = p.ParameterType; + + if (p.HasDefaultValue) + { + pTypes.Add (p.DefaultValue); + } + else + { + AddArguments (paramType, pTypes); + } + } + + if (type.IsGenericType && !type.IsTypeDefinition) + { + viewType = (View)Activator.CreateInstance (type); + Assert.IsType (type, viewType); + } + else + { + viewType = (View)ctor.Invoke (pTypes.ToArray ()); + Assert.IsType (type, viewType); + } + } + + return viewType; + } + + public static List GetAllViewClasses () + { + return typeof (View).Assembly.GetTypes () + .Where ( + myType => myType.IsClass + && !myType.IsAbstract + && myType.IsPublic + && myType.IsSubclassOf (typeof (View)) + ) + .ToList (); + } + + private static void AddArguments (Type paramType, List pTypes) + { + if (paramType == typeof (Rectangle)) + { + pTypes.Add (Rectangle.Empty); + } + else if (paramType == typeof (string)) + { + pTypes.Add (string.Empty); + } + else if (paramType == typeof (int)) + { + pTypes.Add (0); + } + else if (paramType == typeof (bool)) + { + pTypes.Add (true); + } + else if (paramType.Name == "IList") + { + pTypes.Add (new List ()); + } + else if (paramType.Name == "View") + { + var top = new Toplevel (); + var view = new View (); + top.Add (view); + pTypes.Add (view); + } + else if (paramType.Name == "View[]") + { + pTypes.Add (new View [] { }); + } + else if (paramType.Name == "Stream") + { + pTypes.Add (new MemoryStream ()); + } + else if (paramType.Name == "String") + { + pTypes.Add (string.Empty); + } + else if (paramType.Name == "TreeView`1[T]") + { + pTypes.Add (string.Empty); + } + else + { + pTypes.Add (null); + } + } +} diff --git a/UnitTests/Views/AllViewsTests.cs b/Tests/UnitTests/Views/AllViewsTests.cs similarity index 98% rename from UnitTests/Views/AllViewsTests.cs rename to Tests/UnitTests/Views/AllViewsTests.cs index 456c2be0b..9d8f30a35 100644 --- a/UnitTests/Views/AllViewsTests.cs +++ b/Tests/UnitTests/Views/AllViewsTests.cs @@ -1,6 +1,8 @@ using System.Collections; using System.Reflection; using System.Text; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -77,7 +79,7 @@ public class AllViewsTests (ITestOutputHelper output) : TestsAllViews { foreach (ConstructorInfo ctor in type.GetConstructors ()) { - View view = TestHelpers.CreateViewFromType (type, ctor); + View view = ViewTestHelpers.CreateViewFromType (type, ctor); if (view != null) { diff --git a/UnitTests/Views/AppendAutocompleteTests.cs b/Tests/UnitTests/Views/AppendAutocompleteTests.cs similarity index 86% rename from UnitTests/Views/AppendAutocompleteTests.cs rename to Tests/UnitTests/Views/AppendAutocompleteTests.cs index 6bdc1f067..53d63261d 100644 --- a/UnitTests/Views/AppendAutocompleteTests.cs +++ b/Tests/UnitTests/Views/AppendAutocompleteTests.cs @@ -1,3 +1,5 @@ +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.TextTests; @@ -14,7 +16,7 @@ public class AppendAutocompleteTests (ITestOutputHelper output) Application.Driver?.SendKeys ('f', ConsoleKey.F, false, false, false); tf.Draw (); tf.PositionCursor (); - TestHelpers.AssertDriverContentsAre ("fish", output); + DriverAssert.AssertDriverContentsAre ("fish", output); Assert.Equal ("f", tf.Text); // When cancelling autocomplete @@ -23,7 +25,7 @@ public class AppendAutocompleteTests (ITestOutputHelper output) // Suggestion should disappear View.SetClipToScreen (); tf.Draw (); - TestHelpers.AssertDriverContentsAre ("f", output); + DriverAssert.AssertDriverContentsAre ("f", output); Assert.Equal ("f", tf.Text); // Still has focus though @@ -46,7 +48,7 @@ public class AppendAutocompleteTests (ITestOutputHelper output) View.SetClipToScreen (); tf.Draw (); tf.PositionCursor (); - TestHelpers.AssertDriverContentsAre ("fish", output); + DriverAssert.AssertDriverContentsAre ("fish", output); Assert.Equal ("f", tf.Text); // When cancelling autocomplete @@ -55,7 +57,7 @@ public class AppendAutocompleteTests (ITestOutputHelper output) // Suggestion should disappear View.SetClipToScreen (); tf.Draw (); - TestHelpers.AssertDriverContentsAre ("f", output); + DriverAssert.AssertDriverContentsAre ("f", output); Assert.Equal ("f", tf.Text); // Should reappear when you press next letter @@ -63,7 +65,7 @@ public class AppendAutocompleteTests (ITestOutputHelper output) tf.PositionCursor (); View.SetClipToScreen (); tf.Draw (); - TestHelpers.AssertDriverContentsAre ("fish", output); + DriverAssert.AssertDriverContentsAre ("fish", output); Assert.Equal ("fi", tf.Text); Application.Top.Dispose (); } @@ -81,7 +83,7 @@ public class AppendAutocompleteTests (ITestOutputHelper output) View.SetClipToScreen (); tf.Draw (); tf.PositionCursor (); - TestHelpers.AssertDriverContentsAre ("fish", output); + DriverAssert.AssertDriverContentsAre ("fish", output); Assert.Equal ("f", tf.Text); // When cycling autocomplete @@ -90,7 +92,7 @@ public class AppendAutocompleteTests (ITestOutputHelper output) View.SetClipToScreen (); tf.Draw (); tf.PositionCursor (); - TestHelpers.AssertDriverContentsAre ("friend", output); + DriverAssert.AssertDriverContentsAre ("friend", output); Assert.Equal ("f", tf.Text); // Should be able to cycle in circles endlessly @@ -98,7 +100,7 @@ public class AppendAutocompleteTests (ITestOutputHelper output) View.SetClipToScreen (); tf.Draw (); tf.PositionCursor (); - TestHelpers.AssertDriverContentsAre ("fish", output); + DriverAssert.AssertDriverContentsAre ("fish", output); Assert.Equal ("f", tf.Text); Application.Top.Dispose (); } @@ -114,7 +116,7 @@ public class AppendAutocompleteTests (ITestOutputHelper output) View.SetClipToScreen (); tf.Draw (); tf.PositionCursor (); - TestHelpers.AssertDriverContentsAre ("fish", output); + DriverAssert.AssertDriverContentsAre ("fish", output); Assert.Equal ("f", tf.Text); // add a space then go back 1 @@ -123,7 +125,7 @@ public class AppendAutocompleteTests (ITestOutputHelper output) View.SetClipToScreen (); tf.Draw (); - TestHelpers.AssertDriverContentsAre ("f", output); + DriverAssert.AssertDriverContentsAre ("f", output); Assert.Equal ("f ", tf.Text); Application.Top.Dispose (); } @@ -139,14 +141,14 @@ public class AppendAutocompleteTests (ITestOutputHelper output) View.SetClipToScreen (); tf.Draw (); tf.PositionCursor (); - TestHelpers.AssertDriverContentsAre ("fish", output); + DriverAssert.AssertDriverContentsAre ("fish", output); Assert.Equal ("f", tf.Text); // x is typed and suggestion should disappear Application.Driver?.SendKeys ('x', ConsoleKey.X, false, false, false); View.SetClipToScreen (); tf.Draw (); - TestHelpers.AssertDriverContentsAre ("fx", output); + DriverAssert.AssertDriverContentsAre ("fx", output); Assert.Equal ("fx", tf.Text); Application.Top.Dispose (); } @@ -164,7 +166,7 @@ public class AppendAutocompleteTests (ITestOutputHelper output) View.SetClipToScreen (); tf.Draw (); tf.PositionCursor (); - TestHelpers.AssertDriverContentsAre ("", output); + DriverAssert.AssertDriverContentsAre ("", output); tf.NewKeyDownEvent (Key.M); tf.NewKeyDownEvent (Key.Y); tf.NewKeyDownEvent (Key.Space); @@ -175,14 +177,14 @@ public class AppendAutocompleteTests (ITestOutputHelper output) View.SetClipToScreen (); tf.Draw (); tf.PositionCursor (); - TestHelpers.AssertDriverContentsAre ("my fISH", output); + DriverAssert.AssertDriverContentsAre ("my fISH", output); Assert.Equal ("my f", tf.Text); // When tab completing the case of the whole suggestion should be applied Application.Driver?.SendKeys ('\t', ConsoleKey.Tab, false, false, false); View.SetClipToScreen (); tf.Draw (); - TestHelpers.AssertDriverContentsAre ("my FISH", output); + DriverAssert.AssertDriverContentsAre ("my FISH", output); Assert.Equal ("my FISH", tf.Text); Application.Top.Dispose (); } @@ -200,21 +202,21 @@ public class AppendAutocompleteTests (ITestOutputHelper output) View.SetClipToScreen (); tf.Draw (); tf.PositionCursor (); - TestHelpers.AssertDriverContentsAre ("", output); + DriverAssert.AssertDriverContentsAre ("", output); tf.NewKeyDownEvent (new Key ('f')); View.SetClipToScreen (); tf.Draw (); tf.PositionCursor (); - TestHelpers.AssertDriverContentsAre ("fish", output); + DriverAssert.AssertDriverContentsAre ("fish", output); Assert.Equal ("f", tf.Text); Application.Driver?.SendKeys ('\t', ConsoleKey.Tab, false, false, false); View.SetClipToScreen (); tf.Draw (); - TestHelpers.AssertDriverContentsAre ("fish", output); + DriverAssert.AssertDriverContentsAre ("fish", output); Assert.Equal ("fish", tf.Text); // Tab should autcomplete but not move focus @@ -240,7 +242,7 @@ public class AppendAutocompleteTests (ITestOutputHelper output) View.SetClipToScreen (); tf.Draw (); tf.PositionCursor (); - TestHelpers.AssertDriverContentsAre (expectRender, output); + DriverAssert.AssertDriverContentsAre (expectRender, output); Assert.Equal ("f", tf.Text); Application.Top.Dispose (); } @@ -271,7 +273,7 @@ public class AppendAutocompleteTests (ITestOutputHelper output) tf.Draw (); tf.PositionCursor (); - TestHelpers.AssertDriverContentsAre ("", output); + DriverAssert.AssertDriverContentsAre ("", output); return tf; } diff --git a/UnitTests/Views/BarTests.cs b/Tests/UnitTests/Views/BarTests.cs similarity index 100% rename from UnitTests/Views/BarTests.cs rename to Tests/UnitTests/Views/BarTests.cs diff --git a/UnitTests/Views/ButtonTests.cs b/Tests/UnitTests/Views/ButtonTests.cs similarity index 98% rename from UnitTests/Views/ButtonTests.cs rename to Tests/UnitTests/Views/ButtonTests.cs index dc7dcb5ce..1e2fad255 100644 --- a/UnitTests/Views/ButtonTests.cs +++ b/Tests/UnitTests/Views/ButtonTests.cs @@ -1,4 +1,6 @@ using System.ComponentModel; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -181,7 +183,7 @@ public class ButtonTests (ITestOutputHelper output) var expected = @$" {Glyphs.LeftBracket} {Glyphs.RightBracket} "; - TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, output); btn.Dispose (); btn = new () { Text = "_Test", IsDefault = true }; @@ -238,7 +240,7 @@ public class ButtonTests (ITestOutputHelper output) expected = @$" {Glyphs.LeftBracket}{Glyphs.LeftDefaultIndicator} abc {Glyphs.RightDefaultIndicator}{Glyphs.RightBracket} "; - TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 9, 1), btn.Viewport); Assert.Equal (new (1, 2, 9, 1), btn.Frame); @@ -588,7 +590,7 @@ public class ButtonTests (ITestOutputHelper output) └────────────────────────────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 30, 5), pos); top.Dispose (); } diff --git a/UnitTests/Views/CheckBoxTests.cs b/Tests/UnitTests/Views/CheckBoxTests.cs similarity index 94% rename from UnitTests/Views/CheckBoxTests.cs rename to Tests/UnitTests/Views/CheckBoxTests.cs index 511cf3be4..2f2de821f 100644 --- a/UnitTests/Views/CheckBoxTests.cs +++ b/Tests/UnitTests/Views/CheckBoxTests.cs @@ -1,5 +1,7 @@ using System.ComponentModel; +using UnitTests; using Xunit.Abstractions; + // ReSharper disable AccessToModifiedClosure namespace Terminal.Gui.ViewsTests; @@ -142,8 +144,6 @@ public class CheckBoxTests (ITestOutputHelper output) Assert.Equal (new (3, 4, 6, 1), ckb.Frame); } - - [Fact] [SetupFakeDriver] public void AllowCheckStateNone_Get_Set () @@ -174,21 +174,21 @@ public class CheckBoxTests (ITestOutputHelper output) [Fact] public void Commands_Select () { - Application.Navigation = new ApplicationNavigation (); - Application.Top = new Toplevel (); + Application.Navigation = new (); + Application.Top = new (); View otherView = new () { CanFocus = true }; var ckb = new CheckBox (); Application.Top.Add (ckb, otherView); Application.Top.SetFocus (); Assert.True (ckb.HasFocus); - int checkedStateChangingCount = 0; + var checkedStateChangingCount = 0; ckb.CheckedStateChanging += (s, e) => checkedStateChangingCount++; - int selectCount = 0; + var selectCount = 0; ckb.Selecting += (s, e) => selectCount++; - int acceptCount = 0; + var acceptCount = 0; ckb.Accepting += (s, e) => acceptCount++; Assert.Equal (CheckState.UnChecked, ckb.CheckedState); @@ -224,7 +224,7 @@ public class CheckBoxTests (ITestOutputHelper output) Assert.Equal (1, acceptCount); Application.Top.Dispose (); - Application.ResetState (false); + Application.ResetState (); } [Fact] @@ -257,13 +257,13 @@ public class CheckBoxTests (ITestOutputHelper output) var checkBox = new CheckBox { Text = "_Checkbox" }; Assert.True (checkBox.CanFocus); - int checkedStateChangingCount = 0; + var checkedStateChangingCount = 0; checkBox.CheckedStateChanging += (s, e) => checkedStateChangingCount++; - int selectCount = 0; + var selectCount = 0; checkBox.Selecting += (s, e) => selectCount++; - int acceptCount = 0; + var acceptCount = 0; checkBox.Accepting += (s, e) => acceptCount++; checkBox.HasFocus = true; @@ -293,7 +293,6 @@ public class CheckBoxTests (ITestOutputHelper output) Assert.Equal (0, acceptCount); } - [Fact] [SetupFakeDriver] public void Mouse_DoubleClick_Accepts () @@ -301,13 +300,14 @@ public class CheckBoxTests (ITestOutputHelper output) var checkBox = new CheckBox { Text = "_Checkbox" }; Assert.True (checkBox.CanFocus); - int checkedStateChangingCount = 0; + var checkedStateChangingCount = 0; checkBox.CheckedStateChanging += (s, e) => checkedStateChangingCount++; - int selectCount = 0; + var selectCount = 0; checkBox.Selecting += (s, e) => selectCount++; - int acceptCount = 0; + var acceptCount = 0; + checkBox.Accepting += (s, e) => { acceptCount++; @@ -327,7 +327,6 @@ public class CheckBoxTests (ITestOutputHelper output) Assert.Equal (0, checkedStateChangingCount); Assert.Equal (0, selectCount); Assert.Equal (1, acceptCount); - } #endregion Mouse Tests @@ -364,7 +363,7 @@ public class CheckBoxTests (ITestOutputHelper output) └────────────────────────────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 30, 5), pos); checkBox.CheckedState = CheckState.Checked; @@ -378,7 +377,7 @@ public class CheckBoxTests (ITestOutputHelper output) └────────────────────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 30, 5), pos); top.Dispose (); } @@ -426,7 +425,7 @@ public class CheckBoxTests (ITestOutputHelper output) └────────────────────────────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 30, 6), pos); checkBox1.CheckedState = CheckState.Checked; @@ -449,7 +448,7 @@ public class CheckBoxTests (ITestOutputHelper output) └────────────────────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 30, 6), pos); top.Dispose (); } @@ -485,7 +484,7 @@ public class CheckBoxTests (ITestOutputHelper output) └────────────────────────────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 30, 5), pos); checkBox.CheckedState = CheckState.Checked; @@ -499,7 +498,7 @@ public class CheckBoxTests (ITestOutputHelper output) └────────────────────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 30, 5), pos); top.Dispose (); } @@ -536,7 +535,7 @@ public class CheckBoxTests (ITestOutputHelper output) └────────────────────────────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 30, 5), pos); checkBox.CheckedState = CheckState.Checked; @@ -550,7 +549,7 @@ public class CheckBoxTests (ITestOutputHelper output) └────────────────────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 30, 5), pos); top.Dispose (); } @@ -571,7 +570,6 @@ public class CheckBoxTests (ITestOutputHelper output) void CheckBoxOnAccept (object sender, CommandEventArgs e) { accepted = true; } } - [Theory] [InlineData (CheckState.Checked)] [InlineData (CheckState.UnChecked)] @@ -614,6 +612,7 @@ public class CheckBoxTests (ITestOutputHelper output) ckb.CheckedStateChanging += OnCheckedStateChanging; Assert.Equal (initialState, ckb.CheckedState); + // AdvanceCheckState returns false if the state was changed, true if it was cancelled, null if it was not changed bool? ret = ckb.AdvanceCheckState (); Assert.True (ret); diff --git a/UnitTests/Views/ColorPicker16Tests.cs b/Tests/UnitTests/Views/ColorPicker16Tests.cs similarity index 97% rename from UnitTests/Views/ColorPicker16Tests.cs rename to Tests/UnitTests/Views/ColorPicker16Tests.cs index 162301e2b..38d46947f 100644 --- a/UnitTests/Views/ColorPicker16Tests.cs +++ b/Tests/UnitTests/Views/ColorPicker16Tests.cs @@ -1,4 +1,6 @@ -namespace Terminal.Gui.ViewsTests; +using UnitTests; + +namespace Terminal.Gui.ViewsTests; public class ColorPicker16Tests { diff --git a/UnitTests/Views/ColorPickerTests.cs b/Tests/UnitTests/Views/ColorPickerTests.cs similarity index 66% rename from UnitTests/Views/ColorPickerTests.cs rename to Tests/UnitTests/Views/ColorPickerTests.cs index 754e9e206..076e2a8fa 100644 --- a/UnitTests/Views/ColorPickerTests.cs +++ b/Tests/UnitTests/Views/ColorPickerTests.cs @@ -1,16 +1,235 @@ -using System.Reflection.Emit; -using Xunit.Abstractions; -using Color = Terminal.Gui.Color; +using UnitTests; namespace Terminal.Gui.ViewsTests; public class ColorPickerTests { + public ColorPickerTests () + { +#if DEBUG_IDISPOSABLE + View.DebugIDisposable = true; +#endif + } + + [Fact] + [SetupFakeDriver] + public void ColorPicker_ChangedEvent_Fires () + { + Color newColor = default; + var count = 0; + + var cp = new ColorPicker (); + + cp.ColorChanged += (s, e) => + { + count++; + newColor = e.CurrentValue; + + Assert.Equal (cp.SelectedColor, e.CurrentValue); + }; + + cp.SelectedColor = new (1, 2, 3); + Assert.Equal (1, count); + Assert.Equal (new (1, 2, 3), newColor); + + cp.SelectedColor = new (2, 3, 4); + + Assert.Equal (2, count); + Assert.Equal (new (2, 3, 4), newColor); + + // Set to same value + cp.SelectedColor = new (2, 3, 4); + + // Should have no effect + Assert.Equal (2, count); + } + + [Fact] + [SetupFakeDriver] + public void ColorPicker_ChangeValueOnUI_UpdatesAllUIElements () + { + ColorPicker cp = GetColorPicker (ColorModel.RGB, true); + + var otherView = new View { CanFocus = true }; + + Application.Top?.Add (otherView); // thi sets focus to otherView + Assert.True (otherView.HasFocus); + + cp.SetFocus (); + Assert.False (otherView.HasFocus); + + cp.Draw (); + + ColorBar r = GetColorBar (cp, ColorPickerPart.Bar1); + ColorBar g = GetColorBar (cp, ColorPickerPart.Bar2); + ColorBar b = GetColorBar (cp, ColorPickerPart.Bar3); + TextField hex = GetTextField (cp, ColorPickerPart.Hex); + TextField rTextField = GetTextField (cp, ColorPickerPart.Bar1); + TextField gTextField = GetTextField (cp, ColorPickerPart.Bar2); + TextField bTextField = GetTextField (cp, ColorPickerPart.Bar3); + + Assert.Equal ("R:", r.Text); + Assert.Equal (2, r.TrianglePosition); + Assert.Equal ("0", rTextField.Text); + Assert.Equal ("G:", g.Text); + Assert.Equal (2, g.TrianglePosition); + Assert.Equal ("0", gTextField.Text); + Assert.Equal ("B:", b.Text); + Assert.Equal (2, b.TrianglePosition); + Assert.Equal ("0", bTextField.Text); + Assert.Equal ("#000000", hex.Text); + + // Change value using text field + TextField rBarTextField = cp.Subviews.OfType ().First (tf => tf.Text == "0"); + + rBarTextField.SetFocus (); + rBarTextField.Text = "128"; + + otherView.SetFocus (); + Assert.True (otherView.HasFocus); + + cp.Draw (); + + Assert.Equal ("R:", r.Text); + Assert.Equal (9, r.TrianglePosition); + Assert.Equal ("128", rTextField.Text); + Assert.Equal ("G:", g.Text); + Assert.Equal (2, g.TrianglePosition); + Assert.Equal ("0", gTextField.Text); + Assert.Equal ("B:", b.Text); + Assert.Equal (2, b.TrianglePosition); + Assert.Equal ("0", bTextField.Text); + Assert.Equal ("#800000", hex.Text); + + Application.Top?.Dispose (); + } + + [Fact] + [SetupFakeDriver] + public void ColorPicker_ClickingAtEndOfBar_SetsMaxValue () + { + ColorPicker cp = GetColorPicker (ColorModel.RGB, false); + + cp.Draw (); + + // Click at the end of the Red bar + cp.Focused.RaiseMouseEvent ( + new () + { + Flags = MouseFlags.Button1Pressed, + Position = new (19, 0) // Assuming 0-based indexing + }); + + cp.Draw (); + + ColorBar r = GetColorBar (cp, ColorPickerPart.Bar1); + ColorBar g = GetColorBar (cp, ColorPickerPart.Bar2); + ColorBar b = GetColorBar (cp, ColorPickerPart.Bar3); + TextField hex = GetTextField (cp, ColorPickerPart.Hex); + + Assert.Equal ("R:", r.Text); + Assert.Equal (19, r.TrianglePosition); + Assert.Equal ("G:", g.Text); + Assert.Equal (2, g.TrianglePosition); + Assert.Equal ("B:", b.Text); + Assert.Equal (2, b.TrianglePosition); + Assert.Equal ("#FF0000", hex.Text); + + Application.Top?.Dispose (); + } + + [Fact] + [SetupFakeDriver] + public void ColorPicker_ClickingBeyondBar_ChangesToMaxValue () + { + ColorPicker cp = GetColorPicker (ColorModel.RGB, false); + + cp.Draw (); + + // Click beyond the bar + cp.Focused.RaiseMouseEvent ( + new () + { + Flags = MouseFlags.Button1Pressed, + Position = new (21, 0) // Beyond the bar + }); + + cp.Draw (); + + ColorBar r = GetColorBar (cp, ColorPickerPart.Bar1); + ColorBar g = GetColorBar (cp, ColorPickerPart.Bar2); + ColorBar b = GetColorBar (cp, ColorPickerPart.Bar3); + TextField hex = GetTextField (cp, ColorPickerPart.Hex); + + Assert.Equal ("R:", r.Text); + Assert.Equal (19, r.TrianglePosition); + Assert.Equal ("G:", g.Text); + Assert.Equal (2, g.TrianglePosition); + Assert.Equal ("B:", b.Text); + Assert.Equal (2, b.TrianglePosition); + Assert.Equal ("#FF0000", hex.Text); + + Application.Top?.Dispose (); + } + + [Fact] + [SetupFakeDriver] + public void ColorPicker_ClickingDifferentBars_ChangesFocus () + { + ColorPicker cp = GetColorPicker (ColorModel.RGB, false); + + cp.Draw (); + + // Click on Green bar + Application.RaiseMouseEvent ( + new () + { + Flags = MouseFlags.Button1Pressed, + ScreenPosition = new (0, 1) + }); + + //cp.Subviews.OfType () + // .Single () + // .OnMouseEvent ( + // new () + // { + // Flags = MouseFlags.Button1Pressed, + // Position = new (0, 1) + // }); + + cp.Draw (); + + Assert.IsAssignableFrom (cp.Focused); + + // Click on Blue bar + Application.RaiseMouseEvent ( + new () + { + Flags = MouseFlags.Button1Pressed, + ScreenPosition = new (0, 2) + }); + + //cp.Subviews.OfType () + // .Single () + // .OnMouseEvent ( + // new () + // { + // Flags = MouseFlags.Button1Pressed, + // Position = new (0, 2) + // }); + + cp.Draw (); + + Assert.IsAssignableFrom (cp.Focused); + + Application.Top?.Dispose (); + } + [Fact] [SetupFakeDriver] public void ColorPicker_Construct_DefaultValue () { - var cp = GetColorPicker (ColorModel.HSV, false); + ColorPicker cp = GetColorPicker (ColorModel.HSV, false); // Should be only a single text field (Hex) because ShowTextFields is false Assert.Single (cp.Subviews.OfType ()); @@ -18,36 +237,235 @@ public class ColorPickerTests cp.Draw (); // All bars should be at 0 with the triangle at 0 (+2 because of "H:", "S:" etc) - var h = GetColorBar (cp, ColorPickerPart.Bar1); + ColorBar h = GetColorBar (cp, ColorPickerPart.Bar1); Assert.Equal ("H:", h.Text); Assert.Equal (2, h.TrianglePosition); Assert.IsType (h); - var s = GetColorBar (cp, ColorPickerPart.Bar2); + ColorBar s = GetColorBar (cp, ColorPickerPart.Bar2); Assert.Equal ("S:", s.Text); Assert.Equal (2, s.TrianglePosition); Assert.IsType (s); - var v = GetColorBar (cp, ColorPickerPart.Bar3); + ColorBar v = GetColorBar (cp, ColorPickerPart.Bar3); Assert.Equal ("V:", v.Text); Assert.Equal (2, v.TrianglePosition); Assert.IsType (v); - var hex = GetTextField (cp, ColorPickerPart.Hex); + TextField hex = GetTextField (cp, ColorPickerPart.Hex); Assert.Equal ("#000000", hex.Text); } + [Fact] + [SetupFakeDriver] + public void ColorPicker_DisposesOldViews_OnModelChange () + { + ColorPicker cp = GetColorPicker (ColorModel.HSL, true); + + ColorBar b1 = GetColorBar (cp, ColorPickerPart.Bar1); + ColorBar b2 = GetColorBar (cp, ColorPickerPart.Bar2); + ColorBar b3 = GetColorBar (cp, ColorPickerPart.Bar3); + + TextField tf1 = GetTextField (cp, ColorPickerPart.Bar1); + TextField tf2 = GetTextField (cp, ColorPickerPart.Bar2); + TextField tf3 = GetTextField (cp, ColorPickerPart.Bar3); + + TextField hex = GetTextField (cp, ColorPickerPart.Hex); + +#if DEBUG_IDISPOSABLE + Assert.All (new View [] { b1, b2, b3, tf1, tf2, tf3, hex }, b => Assert.False (b.WasDisposed)); +#endif + cp.Style.ColorModel = ColorModel.RGB; + cp.ApplyStyleChanges (); + + ColorBar b1After = GetColorBar (cp, ColorPickerPart.Bar1); + ColorBar b2After = GetColorBar (cp, ColorPickerPart.Bar2); + ColorBar b3After = GetColorBar (cp, ColorPickerPart.Bar3); + + TextField tf1After = GetTextField (cp, ColorPickerPart.Bar1); + TextField tf2After = GetTextField (cp, ColorPickerPart.Bar2); + TextField tf3After = GetTextField (cp, ColorPickerPart.Bar3); + + TextField hexAfter = GetTextField (cp, ColorPickerPart.Hex); + + // Old bars should be disposed +#if DEBUG_IDISPOSABLE + Assert.All (new View [] { b1, b2, b3, tf1, tf2, tf3, hex }, b => Assert.True (b.WasDisposed)); +#endif + Assert.NotSame (hex, hexAfter); + + Assert.NotSame (b1, b1After); + Assert.NotSame (b2, b2After); + Assert.NotSame (b3, b3After); + + Assert.NotSame (tf1, tf1After); + Assert.NotSame (tf2, tf2After); + Assert.NotSame (tf3, tf3After); + } + + [Fact] + [SetupFakeDriver] + public void ColorPicker_EnterHexFor_ColorName () + { + ColorPicker cp = GetColorPicker (ColorModel.RGB, true, true); + Application.Navigation = new (); + Application.Top = new (); + Application.Top.Add (cp); + + cp.Draw (); + + TextField name = GetTextField (cp, ColorPickerPart.ColorName); + TextField hex = GetTextField (cp, ColorPickerPart.Hex); + + hex.SetFocus (); + + Assert.True (hex.HasFocus); + Assert.Same (hex, cp.Focused); + + hex.Text = ""; + name.Text = ""; + + Assert.Empty (hex.Text); + Assert.Empty (name.Text); + + Application.RaiseKeyDownEvent ('#'); + Assert.Empty (name.Text); + + //7FFFD4 + + Assert.Equal ("#", hex.Text); + Application.RaiseKeyDownEvent ('7'); + Application.RaiseKeyDownEvent ('F'); + Application.RaiseKeyDownEvent ('F'); + Application.RaiseKeyDownEvent ('F'); + Application.RaiseKeyDownEvent ('D'); + Assert.Empty (name.Text); + + Application.RaiseKeyDownEvent ('4'); + + Assert.True (hex.HasFocus); + + // Tab out of the hex field - should wrap to first focusable subview + Application.RaiseKeyDownEvent (Key.Tab); + Assert.False (hex.HasFocus); + Assert.NotSame (hex, cp.Focused); + + // Color name should be recognised as a known string and populated + Assert.Equal ("#7FFFD4", hex.Text); + Assert.Equal ("Aquamarine", name.Text); + + Application.Top?.Dispose (); + Application.ResetState (true); + } + + /// + /// In this version we use the Enter button to accept the typed text instead + /// of tabbing to the next view. + /// + [Fact] + [SetupFakeDriver] + public void ColorPicker_EnterHexFor_ColorName_AcceptVariation () + { + ColorPicker cp = GetColorPicker (ColorModel.RGB, true, true); + Application.Navigation = new (); + Application.Top = new (); + Application.Top.Add (cp); + + cp.Draw (); + + TextField name = GetTextField (cp, ColorPickerPart.ColorName); + TextField hex = GetTextField (cp, ColorPickerPart.Hex); + + hex.SetFocus (); + + Assert.True (hex.HasFocus); + Assert.Same (hex, cp.Focused); + + hex.Text = ""; + name.Text = ""; + + Assert.Empty (hex.Text); + Assert.Empty (name.Text); + + Application.RaiseKeyDownEvent ('#'); + Assert.Empty (name.Text); + + //7FFFD4 + + Assert.Equal ("#", hex.Text); + Application.RaiseKeyDownEvent ('7'); + Application.RaiseKeyDownEvent ('F'); + Application.RaiseKeyDownEvent ('F'); + Application.RaiseKeyDownEvent ('F'); + Application.RaiseKeyDownEvent ('D'); + Assert.Empty (name.Text); + + Application.RaiseKeyDownEvent ('4'); + + Assert.True (hex.HasFocus); + + // Should stay in the hex field (because accept not tab) + Application.RaiseKeyDownEvent (Key.Enter); + Assert.True (hex.HasFocus); + Assert.Same (hex, cp.Focused); + + // But still, Color name should be recognised as a known string and populated + Assert.Equal ("#7FFFD4", hex.Text); + Assert.Equal ("Aquamarine", name.Text); + + Application.Top?.Dispose (); + Application.ResetState (true); + } + + [Fact] + [SetupFakeDriver] + public void ColorPicker_InvalidHexInput_DoesNotChangeColor () + { + ColorPicker cp = GetColorPicker (ColorModel.RGB, true); + + cp.Draw (); + + // Enter invalid hex value + TextField hexField = cp.Subviews.OfType ().First (tf => tf.Text == "#000000"); + hexField.SetFocus (); + hexField.Text = "#ZZZZZZ"; + Assert.True (hexField.HasFocus); + Assert.Equal ("#ZZZZZZ", hexField.Text); + + ColorBar r = GetColorBar (cp, ColorPickerPart.Bar1); + ColorBar g = GetColorBar (cp, ColorPickerPart.Bar2); + ColorBar b = GetColorBar (cp, ColorPickerPart.Bar3); + TextField hex = GetTextField (cp, ColorPickerPart.Hex); + + Assert.Equal ("#ZZZZZZ", hex.Text); + + // Advance away from hexField to cause validation + cp.AdvanceFocus (NavigationDirection.Forward, null); + + cp.Draw (); + + Assert.Equal ("R:", r.Text); + Assert.Equal (2, r.TrianglePosition); + Assert.Equal ("G:", g.Text); + Assert.Equal (2, g.TrianglePosition); + Assert.Equal ("B:", b.Text); + Assert.Equal (2, b.TrianglePosition); + Assert.Equal ("#000000", hex.Text); + + Application.Top?.Dispose (); + } + [Fact] [SetupFakeDriver] public void ColorPicker_RGB_KeyboardNavigation () { - var cp = GetColorPicker (ColorModel.RGB, false); + ColorPicker cp = GetColorPicker (ColorModel.RGB, false); cp.Draw (); - var r = GetColorBar (cp, ColorPickerPart.Bar1); - var g = GetColorBar (cp, ColorPickerPart.Bar2); - var b = GetColorBar (cp, ColorPickerPart.Bar3); - var hex = GetTextField (cp, ColorPickerPart.Hex); + ColorBar r = GetColorBar (cp, ColorPickerPart.Bar1); + ColorBar g = GetColorBar (cp, ColorPickerPart.Bar2); + ColorBar b = GetColorBar (cp, ColorPickerPart.Bar3); + TextField hex = GetTextField (cp, ColorPickerPart.Hex); Assert.Equal ("R:", r.Text); Assert.Equal (2, r.TrianglePosition); @@ -79,7 +497,7 @@ public class ColorPickerTests Assert.Equal ("#1E0000", hex.Text); // Use cursor to move the triangle all the way to the right - for (int i = 0; i < 1000; i++) + for (var i = 0; i < 1000; i++) { Application.RaiseKeyDownEvent (Key.CursorRight); } @@ -98,14 +516,14 @@ public class ColorPickerTests [SetupFakeDriver] public void ColorPicker_RGB_MouseNavigation () { - var cp = GetColorPicker (ColorModel.RGB, false); + ColorPicker cp = GetColorPicker (ColorModel.RGB, false); cp.Draw (); - var r = GetColorBar (cp, ColorPickerPart.Bar1); - var g = GetColorBar (cp, ColorPickerPart.Bar2); - var b = GetColorBar (cp, ColorPickerPart.Bar3); - var hex = GetTextField (cp, ColorPickerPart.Hex); + ColorBar r = GetColorBar (cp, ColorPickerPart.Bar1); + ColorBar g = GetColorBar (cp, ColorPickerPart.Bar2); + ColorBar b = GetColorBar (cp, ColorPickerPart.Bar3); + TextField hex = GetTextField (cp, ColorPickerPart.Hex); Assert.Equal ("R:", r.Text); Assert.Equal (2, r.TrianglePosition); @@ -121,11 +539,11 @@ public class ColorPickerTests Assert.IsAssignableFrom (cp.Focused); cp.Focused.RaiseMouseEvent ( - new () - { - Flags = MouseFlags.Button1Pressed, - Position = new (3, 0) - }); + new () + { + Flags = MouseFlags.Button1Pressed, + Position = new (3, 0) + }); cp.Draw (); @@ -133,11 +551,11 @@ public class ColorPickerTests Assert.Equal ("#0F0000", hex.Text); cp.Focused.RaiseMouseEvent ( - new () - { - Flags = MouseFlags.Button1Pressed, - Position = new (4, 0) - }); + new () + { + Flags = MouseFlags.Button1Pressed, + Position = new (4, 0) + }); cp.Draw (); @@ -147,48 +565,29 @@ public class ColorPickerTests Application.Top?.Dispose (); } - - public static IEnumerable ColorPickerTestData () - { - yield return new object [] - { - new Color(255, 0), - "R:", 19, "G:", 2, "B:", 2, "#FF0000" - }; - - yield return new object [] - { - new Color(0, 255), - "R:", 2, "G:", 19, "B:", 2, "#00FF00" - }; - - yield return new object [] - { - new Color(0, 0, 255), - "R:", 2, "G:", 2, "B:", 19, "#0000FF" - }; - - yield return new object [] - { - new Color(125, 125, 125), - "R:", 11, "G:", 11, "B:", 11, "#7D7D7D" - }; - } - [Theory] [SetupFakeDriver] [MemberData (nameof (ColorPickerTestData))] - public void ColorPicker_RGB_NoText (Color c, string expectedR, int expectedRTriangle, string expectedG, int expectedGTriangle, string expectedB, int expectedBTriangle, string expectedHex) + public void ColorPicker_RGB_NoText ( + Color c, + string expectedR, + int expectedRTriangle, + string expectedG, + int expectedGTriangle, + string expectedB, + int expectedBTriangle, + string expectedHex + ) { - var cp = GetColorPicker (ColorModel.RGB, false); + ColorPicker cp = GetColorPicker (ColorModel.RGB, false); cp.SelectedColor = c; cp.Draw (); - var r = GetColorBar (cp, ColorPickerPart.Bar1); - var g = GetColorBar (cp, ColorPickerPart.Bar2); - var b = GetColorBar (cp, ColorPickerPart.Bar3); - var hex = GetTextField (cp, ColorPickerPart.Hex); + ColorBar r = GetColorBar (cp, ColorPickerPart.Bar1); + ColorBar g = GetColorBar (cp, ColorPickerPart.Bar2); + ColorBar b = GetColorBar (cp, ColorPickerPart.Bar3); + TextField hex = GetTextField (cp, ColorPickerPart.Hex); Assert.Equal (expectedR, r.Text); Assert.Equal (expectedRTriangle, r.TrianglePosition); @@ -201,50 +600,35 @@ public class ColorPickerTests Application.Top.Dispose (); } - public static IEnumerable ColorPickerTestData_WithTextFields () - { - yield return new object [] - { - new Color(255, 0), - "R:", 15, 255, "G:", 2, 0, "B:", 2, 0, "#FF0000" - }; - - yield return new object [] - { - new Color(0, 255), - "R:", 2, 0, "G:", 15, 255, "B:", 2, 0, "#00FF00" - }; - - yield return new object [] - { - new Color(0, 0, 255), - "R:", 2, 0, "G:", 2, 0, "B:", 15, 255, "#0000FF" - }; - - yield return new object [] - { - new Color(125, 125, 125), - "R:", 9, 125, "G:", 9, 125, "B:", 9, 125, "#7D7D7D" - }; - } - [Theory] [SetupFakeDriver] [MemberData (nameof (ColorPickerTestData_WithTextFields))] - public void ColorPicker_RGB_NoText_WithTextFields (Color c, string expectedR, int expectedRTriangle, int expectedRValue, string expectedG, int expectedGTriangle, int expectedGValue, string expectedB, int expectedBTriangle, int expectedBValue, string expectedHex) + public void ColorPicker_RGB_NoText_WithTextFields ( + Color c, + string expectedR, + int expectedRTriangle, + int expectedRValue, + string expectedG, + int expectedGTriangle, + int expectedGValue, + string expectedB, + int expectedBTriangle, + int expectedBValue, + string expectedHex + ) { - var cp = GetColorPicker (ColorModel.RGB, true); + ColorPicker cp = GetColorPicker (ColorModel.RGB, true); cp.SelectedColor = c; cp.Draw (); - var r = GetColorBar (cp, ColorPickerPart.Bar1); - var g = GetColorBar (cp, ColorPickerPart.Bar2); - var b = GetColorBar (cp, ColorPickerPart.Bar3); - var hex = GetTextField (cp, ColorPickerPart.Hex); - var rTextField = GetTextField (cp, ColorPickerPart.Bar1); - var gTextField = GetTextField (cp, ColorPickerPart.Bar2); - var bTextField = GetTextField (cp, ColorPickerPart.Bar3); + ColorBar r = GetColorBar (cp, ColorPickerPart.Bar1); + ColorBar g = GetColorBar (cp, ColorPickerPart.Bar2); + ColorBar b = GetColorBar (cp, ColorPickerPart.Bar3); + TextField hex = GetTextField (cp, ColorPickerPart.Hex); + TextField rTextField = GetTextField (cp, ColorPickerPart.Bar1); + TextField gTextField = GetTextField (cp, ColorPickerPart.Bar2); + TextField bTextField = GetTextField (cp, ColorPickerPart.Bar3); Assert.Equal (expectedR, r.Text); Assert.Equal (expectedRTriangle, r.TrianglePosition); @@ -260,235 +644,21 @@ public class ColorPickerTests Application.Top?.Dispose (); } - [Fact] - [SetupFakeDriver] - public void ColorPicker_ClickingAtEndOfBar_SetsMaxValue () - { - var cp = GetColorPicker (ColorModel.RGB, false); - - cp.Draw (); - - // Click at the end of the Red bar - cp.Focused.RaiseMouseEvent ( - new () - { - Flags = MouseFlags.Button1Pressed, - Position = new (19, 0) // Assuming 0-based indexing - }); - - cp.Draw (); - - var r = GetColorBar (cp, ColorPickerPart.Bar1); - var g = GetColorBar (cp, ColorPickerPart.Bar2); - var b = GetColorBar (cp, ColorPickerPart.Bar3); - var hex = GetTextField (cp, ColorPickerPart.Hex); - - Assert.Equal ("R:", r.Text); - Assert.Equal (19, r.TrianglePosition); - Assert.Equal ("G:", g.Text); - Assert.Equal (2, g.TrianglePosition); - Assert.Equal ("B:", b.Text); - Assert.Equal (2, b.TrianglePosition); - Assert.Equal ("#FF0000", hex.Text); - - Application.Top?.Dispose (); - } - - [Fact] - [SetupFakeDriver] - public void ColorPicker_ClickingBeyondBar_ChangesToMaxValue () - { - var cp = GetColorPicker (ColorModel.RGB, false); - - cp.Draw (); - - // Click beyond the bar - cp.Focused.RaiseMouseEvent ( - new () - { - Flags = MouseFlags.Button1Pressed, - Position = new (21, 0) // Beyond the bar - }); - - cp.Draw (); - - var r = GetColorBar (cp, ColorPickerPart.Bar1); - var g = GetColorBar (cp, ColorPickerPart.Bar2); - var b = GetColorBar (cp, ColorPickerPart.Bar3); - var hex = GetTextField (cp, ColorPickerPart.Hex); - - Assert.Equal ("R:", r.Text); - Assert.Equal (19, r.TrianglePosition); - Assert.Equal ("G:", g.Text); - Assert.Equal (2, g.TrianglePosition); - Assert.Equal ("B:", b.Text); - Assert.Equal (2, b.TrianglePosition); - Assert.Equal ("#FF0000", hex.Text); - - Application.Top?.Dispose (); - } - - [Fact] - [SetupFakeDriver] - public void ColorPicker_ChangeValueOnUI_UpdatesAllUIElements () - { - var cp = GetColorPicker (ColorModel.RGB, true); - - View otherView = new View () { CanFocus = true }; - - Application.Top?.Add (otherView); // thi sets focus to otherView - Assert.True (otherView.HasFocus); - - cp.SetFocus (); - Assert.False (otherView.HasFocus); - - cp.Draw (); - - var r = GetColorBar (cp, ColorPickerPart.Bar1); - var g = GetColorBar (cp, ColorPickerPart.Bar2); - var b = GetColorBar (cp, ColorPickerPart.Bar3); - var hex = GetTextField (cp, ColorPickerPart.Hex); - var rTextField = GetTextField (cp, ColorPickerPart.Bar1); - var gTextField = GetTextField (cp, ColorPickerPart.Bar2); - var bTextField = GetTextField (cp, ColorPickerPart.Bar3); - - Assert.Equal ("R:", r.Text); - Assert.Equal (2, r.TrianglePosition); - Assert.Equal ("0", rTextField.Text); - Assert.Equal ("G:", g.Text); - Assert.Equal (2, g.TrianglePosition); - Assert.Equal ("0", gTextField.Text); - Assert.Equal ("B:", b.Text); - Assert.Equal (2, b.TrianglePosition); - Assert.Equal ("0", bTextField.Text); - Assert.Equal ("#000000", hex.Text); - // Change value using text field - TextField rBarTextField = cp.Subviews.OfType ().First (tf => tf.Text == "0"); - - rBarTextField.SetFocus (); - rBarTextField.Text = "128"; - - otherView.SetFocus (); - Assert.True (otherView.HasFocus); - - cp.Draw (); - - Assert.Equal ("R:", r.Text); - Assert.Equal (9, r.TrianglePosition); - Assert.Equal ("128", rTextField.Text); - Assert.Equal ("G:", g.Text); - Assert.Equal (2, g.TrianglePosition); - Assert.Equal ("0", gTextField.Text); - Assert.Equal ("B:", b.Text); - Assert.Equal (2, b.TrianglePosition); - Assert.Equal ("0", bTextField.Text); - Assert.Equal ("#800000", hex.Text); - - Application.Top?.Dispose (); - } - - [Fact] - [SetupFakeDriver] - public void ColorPicker_InvalidHexInput_DoesNotChangeColor () - { - var cp = GetColorPicker (ColorModel.RGB, true); - - cp.Draw (); - - // Enter invalid hex value - TextField hexField = cp.Subviews.OfType ().First (tf => tf.Text == "#000000"); - hexField.SetFocus (); - hexField.Text = "#ZZZZZZ"; - Assert.True (hexField.HasFocus); - Assert.Equal ("#ZZZZZZ", hexField.Text); - - var r = GetColorBar (cp, ColorPickerPart.Bar1); - var g = GetColorBar (cp, ColorPickerPart.Bar2); - var b = GetColorBar (cp, ColorPickerPart.Bar3); - var hex = GetTextField (cp, ColorPickerPart.Hex); - - Assert.Equal ("#ZZZZZZ", hex.Text); - - // Advance away from hexField to cause validation - cp.AdvanceFocus (NavigationDirection.Forward, null); - - cp.Draw (); - - Assert.Equal ("R:", r.Text); - Assert.Equal (2, r.TrianglePosition); - Assert.Equal ("G:", g.Text); - Assert.Equal (2, g.TrianglePosition); - Assert.Equal ("B:", b.Text); - Assert.Equal (2, b.TrianglePosition); - Assert.Equal ("#000000", hex.Text); - - Application.Top?.Dispose (); - } - - [Fact] - [SetupFakeDriver] - public void ColorPicker_ClickingDifferentBars_ChangesFocus () - { - var cp = GetColorPicker (ColorModel.RGB, false); - - cp.Draw (); - - // Click on Green bar - Application.RaiseMouseEvent (new () - { - Flags = MouseFlags.Button1Pressed, - ScreenPosition = new (0, 1) - }); - //cp.Subviews.OfType () - // .Single () - // .OnMouseEvent ( - // new () - // { - // Flags = MouseFlags.Button1Pressed, - // Position = new (0, 1) - // }); - - cp.Draw (); - - Assert.IsAssignableFrom (cp.Focused); - - // Click on Blue bar - Application.RaiseMouseEvent (new () - { - Flags = MouseFlags.Button1Pressed, - ScreenPosition = new (0, 2) - }); - //cp.Subviews.OfType () - // .Single () - // .OnMouseEvent ( - // new () - // { - // Flags = MouseFlags.Button1Pressed, - // Position = new (0, 2) - // }); - - cp.Draw (); - - Assert.IsAssignableFrom (cp.Focused); - - Application.Top?.Dispose (); - } - [Fact] [SetupFakeDriver] public void ColorPicker_SwitchingColorModels_ResetsBars () { - var cp = GetColorPicker (ColorModel.RGB, false); + ColorPicker cp = GetColorPicker (ColorModel.RGB, false); cp.BeginInit (); cp.EndInit (); cp.SelectedColor = new (255, 0); cp.Draw (); - var r = GetColorBar (cp, ColorPickerPart.Bar1); - var g = GetColorBar (cp, ColorPickerPart.Bar2); - var b = GetColorBar (cp, ColorPickerPart.Bar3); - var hex = GetTextField (cp, ColorPickerPart.Hex); + ColorBar r = GetColorBar (cp, ColorPickerPart.Bar1); + ColorBar g = GetColorBar (cp, ColorPickerPart.Bar2); + ColorBar b = GetColorBar (cp, ColorPickerPart.Bar3); + TextField hex = GetTextField (cp, ColorPickerPart.Hex); Assert.Equal ("R:", r.Text); Assert.Equal (19, r.TrianglePosition); @@ -504,9 +674,9 @@ public class ColorPickerTests cp.Draw (); - var h = GetColorBar (cp, ColorPickerPart.Bar1); - var s = GetColorBar (cp, ColorPickerPart.Bar2); - var v = GetColorBar (cp, ColorPickerPart.Bar3); + ColorBar h = GetColorBar (cp, ColorPickerPart.Bar1); + ColorBar s = GetColorBar (cp, ColorPickerPart.Bar2); + ColorBar v = GetColorBar (cp, ColorPickerPart.Bar3); Assert.Equal ("H:", h.Text); Assert.Equal (2, h.TrianglePosition); @@ -523,7 +693,7 @@ public class ColorPickerTests [SetupFakeDriver] public void ColorPicker_SyncBetweenTextFieldAndBars () { - var cp = GetColorPicker (ColorModel.RGB, true); + ColorPicker cp = GetColorPicker (ColorModel.RGB, true); cp.Draw (); @@ -533,13 +703,13 @@ public class ColorPickerTests cp.Draw (); - var r = GetColorBar (cp, ColorPickerPart.Bar1); - var g = GetColorBar (cp, ColorPickerPart.Bar2); - var b = GetColorBar (cp, ColorPickerPart.Bar3); - var hex = GetTextField (cp, ColorPickerPart.Hex); - var rTextField = GetTextField (cp, ColorPickerPart.Bar1); - var gTextField = GetTextField (cp, ColorPickerPart.Bar2); - var bTextField = GetTextField (cp, ColorPickerPart.Bar3); + ColorBar r = GetColorBar (cp, ColorPickerPart.Bar1); + ColorBar g = GetColorBar (cp, ColorPickerPart.Bar2); + ColorBar b = GetColorBar (cp, ColorPickerPart.Bar3); + TextField hex = GetTextField (cp, ColorPickerPart.Hex); + TextField rTextField = GetTextField (cp, ColorPickerPart.Bar1); + TextField gTextField = GetTextField (cp, ColorPickerPart.Bar2); + TextField bTextField = GetTextField (cp, ColorPickerPart.Bar3); Assert.Equal ("R:", r.Text); Assert.Equal (9, r.TrianglePosition); @@ -555,19 +725,146 @@ public class ColorPickerTests Application.Top?.Dispose (); } - enum ColorPickerPart + [Fact] + [SetupFakeDriver] + public void ColorPicker_TabCompleteColorName () { - Bar1 = 0, - Bar2 = 1, - Bar3 = 2, - ColorName = 3, - Hex = 4, + ColorPicker cp = GetColorPicker (ColorModel.RGB, true, true); + Application.Navigation = new (); + Application.Top = new (); + Application.Top.Add (cp); + + cp.Draw (); + + ColorBar r = GetColorBar (cp, ColorPickerPart.Bar1); + ColorBar g = GetColorBar (cp, ColorPickerPart.Bar2); + ColorBar b = GetColorBar (cp, ColorPickerPart.Bar3); + TextField name = GetTextField (cp, ColorPickerPart.ColorName); + TextField hex = GetTextField (cp, ColorPickerPart.Hex); + + name.SetFocus (); + + Assert.True (name.HasFocus); + Assert.Same (name, cp.Focused); + + name.Text = ""; + Assert.Empty (name.Text); + + Application.RaiseKeyDownEvent (Key.A); + Application.RaiseKeyDownEvent (Key.Q); + + Assert.Equal ("aq", name.Text); + + // Auto complete the color name + Application.RaiseKeyDownEvent (Key.Tab); + + Assert.Equal ("Aquamarine", name.Text); + + // Tab out of the text field + Application.RaiseKeyDownEvent (Key.Tab); + + Assert.False (name.HasFocus); + Assert.NotSame (name, cp.Focused); + + Assert.Equal ("#7FFFD4", hex.Text); + + Application.Top?.Dispose (); + Application.ResetState (true); + } + + public static IEnumerable ColorPickerTestData () + { + yield return new object [] + { + new Color (255, 0), + "R:", 19, "G:", 2, "B:", 2, "#FF0000" + }; + + yield return new object [] + { + new Color (0, 255), + "R:", 2, "G:", 19, "B:", 2, "#00FF00" + }; + + yield return new object [] + { + new Color (0, 0, 255), + "R:", 2, "G:", 2, "B:", 19, "#0000FF" + }; + + yield return new object [] + { + new Color (125, 125, 125), + "R:", 11, "G:", 11, "B:", 11, "#7D7D7D" + }; + } + + public static IEnumerable ColorPickerTestData_WithTextFields () + { + yield return new object [] + { + new Color (255, 0), + "R:", 15, 255, "G:", 2, 0, "B:", 2, 0, "#FF0000" + }; + + yield return new object [] + { + new Color (0, 255), + "R:", 2, 0, "G:", 15, 255, "B:", 2, 0, "#00FF00" + }; + + yield return new object [] + { + new Color (0, 0, 255), + "R:", 2, 0, "G:", 2, 0, "B:", 15, 255, "#0000FF" + }; + + yield return new object [] + { + new Color (125, 125, 125), + "R:", 9, 125, "G:", 9, 125, "B:", 9, 125, "#7D7D7D" + }; + } + + [Fact] + public void TestColorNames () + { + var colors = new W3CColors (); + Assert.Contains ("Aquamarine", colors.GetColorNames ()); + Assert.DoesNotContain ("Save as", colors.GetColorNames ()); + } + + private ColorBar GetColorBar (ColorPicker cp, ColorPickerPart toGet) + { + if (toGet <= ColorPickerPart.Bar3) + { + return cp.Subviews.OfType ().ElementAt ((int)toGet); + } + + throw new NotSupportedException ("ColorPickerPart must be a bar"); + } + + private ColorPicker GetColorPicker (ColorModel colorModel, bool showTextFields, bool showName = false) + { + var cp = new ColorPicker { Width = 20, SelectedColor = new (0, 0) }; + cp.Style.ColorModel = colorModel; + cp.Style.ShowTextFields = showTextFields; + cp.Style.ShowColorName = showName; + cp.ApplyStyleChanges (); + + Application.Top = new() { Width = 20, Height = 5 }; + Application.Top.Add (cp); + + Application.Top.LayoutSubviews (); + Application.Top.SetFocus (); + + return cp; } private TextField GetTextField (ColorPicker cp, ColorPickerPart toGet) { - var hasBarValueTextFields = cp.Style.ShowTextFields; - var hasColorNameTextField = cp.Style.ShowColorName; + bool hasBarValueTextFields = cp.Style.ShowTextFields; + bool hasColorNameTextField = cp.Style.ShowColorName; switch (toGet) { @@ -598,277 +895,12 @@ public class ColorPickerTests } } - private ColorBar GetColorBar (ColorPicker cp, ColorPickerPart toGet) + private enum ColorPickerPart { - if (toGet <= ColorPickerPart.Bar3) - { - return cp.Subviews.OfType ().ElementAt ((int)toGet); - } - throw new NotSupportedException ("ColorPickerPart must be a bar"); - } - - [Fact] - [SetupFakeDriver] - public void ColorPicker_ChangedEvent_Fires () - { - Color newColor = default; - var count = 0; - - var cp = new ColorPicker (); - - cp.ColorChanged += (s, e) => - { - count++; - newColor = e.CurrentValue; - - Assert.Equal (cp.SelectedColor, e.CurrentValue); - }; - - cp.SelectedColor = new (1, 2, 3); - Assert.Equal (1, count); - Assert.Equal (new (1, 2, 3), newColor); - - cp.SelectedColor = new (2, 3, 4); - - Assert.Equal (2, count); - Assert.Equal (new (2, 3, 4), newColor); - - // Set to same value - cp.SelectedColor = new (2, 3, 4); - - // Should have no effect - Assert.Equal (2, count); - } - - [Fact] - [SetupFakeDriver] - public void ColorPicker_DisposesOldViews_OnModelChange () - { - var cp = GetColorPicker (ColorModel.HSL, true); - - var b1 = GetColorBar (cp, ColorPickerPart.Bar1); - var b2 = GetColorBar (cp, ColorPickerPart.Bar2); - var b3 = GetColorBar (cp, ColorPickerPart.Bar3); - - var tf1 = GetTextField (cp, ColorPickerPart.Bar1); - var tf2 = GetTextField (cp, ColorPickerPart.Bar2); - var tf3 = GetTextField (cp, ColorPickerPart.Bar3); - - var hex = GetTextField (cp, ColorPickerPart.Hex); - -#if DEBUG_IDISPOSABLE - Assert.All (new View [] { b1, b2, b3, tf1, tf2, tf3, hex }, b => Assert.False (b.WasDisposed)); -#endif - cp.Style.ColorModel = ColorModel.RGB; - cp.ApplyStyleChanges (); - - var b1After = GetColorBar (cp, ColorPickerPart.Bar1); - var b2After = GetColorBar (cp, ColorPickerPart.Bar2); - var b3After = GetColorBar (cp, ColorPickerPart.Bar3); - - var tf1After = GetTextField (cp, ColorPickerPart.Bar1); - var tf2After = GetTextField (cp, ColorPickerPart.Bar2); - var tf3After = GetTextField (cp, ColorPickerPart.Bar3); - - var hexAfter = GetTextField (cp, ColorPickerPart.Hex); - - // Old bars should be disposed -#if DEBUG_IDISPOSABLE - Assert.All (new View [] { b1, b2, b3, tf1, tf2, tf3, hex }, b => Assert.True (b.WasDisposed)); -#endif - Assert.NotSame (hex, hexAfter); - - Assert.NotSame (b1, b1After); - Assert.NotSame (b2, b2After); - Assert.NotSame (b3, b3After); - - Assert.NotSame (tf1, tf1After); - Assert.NotSame (tf2, tf2After); - Assert.NotSame (tf3, tf3After); - - } - - [Fact] - [SetupFakeDriver] - public void ColorPicker_TabCompleteColorName () - { - var cp = GetColorPicker (ColorModel.RGB, true, true); - Application.Navigation = new (); - Application.Top = new (); - Application.Top.Add (cp); - - cp.Draw (); - - var r = GetColorBar (cp, ColorPickerPart.Bar1); - var g = GetColorBar (cp, ColorPickerPart.Bar2); - var b = GetColorBar (cp, ColorPickerPart.Bar3); - var name = GetTextField (cp, ColorPickerPart.ColorName); - var hex = GetTextField (cp, ColorPickerPart.Hex); - - name.SetFocus (); - - Assert.True (name.HasFocus); - Assert.Same (name, cp.Focused); - - name.Text = ""; - Assert.Empty (name.Text); - - Application.RaiseKeyDownEvent (Key.A); - Application.RaiseKeyDownEvent (Key.Q); - - Assert.Equal ("aq", name.Text); - - - // Auto complete the color name - Application.RaiseKeyDownEvent (Key.Tab); - - Assert.Equal ("Aquamarine", name.Text); - - // Tab out of the text field - Application.RaiseKeyDownEvent (Key.Tab); - - Assert.False (name.HasFocus); - Assert.NotSame (name, cp.Focused); - - Assert.Equal ("#7FFFD4", hex.Text); - - Application.Top?.Dispose (); - Application.ResetState (ignoreDisposed: true); - } - - [Fact] - [SetupFakeDriver] - public void ColorPicker_EnterHexFor_ColorName () - { - var cp = GetColorPicker (ColorModel.RGB, true, true); - Application.Navigation = new (); - Application.Top = new (); - Application.Top.Add (cp); - - cp.Draw (); - - var name = GetTextField (cp, ColorPickerPart.ColorName); - var hex = GetTextField (cp, ColorPickerPart.Hex); - - hex.SetFocus (); - - Assert.True (hex.HasFocus); - Assert.Same (hex, cp.Focused); - - hex.Text = ""; - name.Text = ""; - - Assert.Empty (hex.Text); - Assert.Empty (name.Text); - - Application.RaiseKeyDownEvent ('#'); - Assert.Empty (name.Text); - //7FFFD4 - - Assert.Equal ("#", hex.Text); - Application.RaiseKeyDownEvent ('7'); - Application.RaiseKeyDownEvent ('F'); - Application.RaiseKeyDownEvent ('F'); - Application.RaiseKeyDownEvent ('F'); - Application.RaiseKeyDownEvent ('D'); - Assert.Empty (name.Text); - - Application.RaiseKeyDownEvent ('4'); - - Assert.True (hex.HasFocus); - - // Tab out of the hex field - should wrap to first focusable subview - Application.RaiseKeyDownEvent (Key.Tab); - Assert.False (hex.HasFocus); - Assert.NotSame (hex, cp.Focused); - - // Color name should be recognised as a known string and populated - Assert.Equal ("#7FFFD4", hex.Text); - Assert.Equal ("Aquamarine", name.Text); - - Application.Top?.Dispose (); - Application.ResetState (ignoreDisposed: true); - } - - /// - /// In this version we use the Enter button to accept the typed text instead - /// of tabbing to the next view. - /// - [Fact] - [SetupFakeDriver] - public void ColorPicker_EnterHexFor_ColorName_AcceptVariation () - { - var cp = GetColorPicker (ColorModel.RGB, true, true); - Application.Navigation = new (); - Application.Top = new (); - Application.Top.Add (cp); - - cp.Draw (); - - var name = GetTextField (cp, ColorPickerPart.ColorName); - var hex = GetTextField (cp, ColorPickerPart.Hex); - - hex.SetFocus (); - - Assert.True (hex.HasFocus); - Assert.Same (hex, cp.Focused); - - hex.Text = ""; - name.Text = ""; - - Assert.Empty (hex.Text); - Assert.Empty (name.Text); - - Application.RaiseKeyDownEvent ('#'); - Assert.Empty (name.Text); - //7FFFD4 - - Assert.Equal ("#", hex.Text); - Application.RaiseKeyDownEvent ('7'); - Application.RaiseKeyDownEvent ('F'); - Application.RaiseKeyDownEvent ('F'); - Application.RaiseKeyDownEvent ('F'); - Application.RaiseKeyDownEvent ('D'); - Assert.Empty (name.Text); - - Application.RaiseKeyDownEvent ('4'); - - Assert.True (hex.HasFocus); - - // Should stay in the hex field (because accept not tab) - Application.RaiseKeyDownEvent (Key.Enter); - Assert.True (hex.HasFocus); - Assert.Same (hex, cp.Focused); - - // But still, Color name should be recognised as a known string and populated - Assert.Equal ("#7FFFD4", hex.Text); - Assert.Equal ("Aquamarine", name.Text); - - Application.Top?.Dispose (); - Application.ResetState (ignoreDisposed: true); - } - - [Fact] - public void TestColorNames () - { - var colors = new W3CColors (); - Assert.Contains ("Aquamarine", colors.GetColorNames ()); - Assert.DoesNotContain ("Save as", colors.GetColorNames ()); - } - private ColorPicker GetColorPicker (ColorModel colorModel, bool showTextFields, bool showName = false) - { - var cp = new ColorPicker { Width = 20, SelectedColor = new (0, 0) }; - cp.Style.ColorModel = colorModel; - cp.Style.ShowTextFields = showTextFields; - cp.Style.ShowColorName = showName; - cp.ApplyStyleChanges (); - - Application.Top = new Toplevel () { Width = 20, Height = 5 }; - Application.Top.Add (cp); - - Application.Top.LayoutSubviews (); - Application.Top.SetFocus (); - - return cp; + Bar1 = 0, + Bar2 = 1, + Bar3 = 2, + ColorName = 3, + Hex = 4 } } diff --git a/UnitTests/Views/ComboBoxTests.cs b/Tests/UnitTests/Views/ComboBoxTests.cs similarity index 98% rename from UnitTests/Views/ComboBoxTests.cs rename to Tests/UnitTests/Views/ComboBoxTests.cs index 839b3ece7..bec3a7578 100644 --- a/UnitTests/Views/ComboBoxTests.cs +++ b/Tests/UnitTests/Views/ComboBoxTests.cs @@ -1,4 +1,6 @@ using System.Collections.ObjectModel; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -529,7 +531,7 @@ public class ComboBoxTests (ITestOutputHelper output) cb.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ▼ One @@ -550,7 +552,7 @@ Three ", cb.Subviews [1].GetNormalColor () }; - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( @" 000000 222222 @@ -569,7 +571,7 @@ Three ", View.SetClipToScreen (); cb.Draw (); - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( @" 000000 222222 @@ -588,7 +590,7 @@ Three ", View.SetClipToScreen (); cb.Draw (); - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( @" 000000 222222 @@ -613,7 +615,7 @@ Three ", View.SetClipToScreen (); cb.Draw (); - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( @" 000000 222222 @@ -632,7 +634,7 @@ Three ", View.SetClipToScreen (); cb.Draw (); - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( @" 000000 222222 @@ -651,7 +653,7 @@ Three ", View.SetClipToScreen (); cb.Draw (); - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( @" 000000 000002 @@ -915,7 +917,7 @@ Three ", Assert.Equal ("One", cb.Text); cb.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" One ▼ One @@ -930,7 +932,7 @@ One View.SetClipToScreen (); cb.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Two ▼ Two @@ -945,7 +947,7 @@ Two View.SetClipToScreen (); cb.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Three ▼ Three diff --git a/UnitTests/Views/ContextMenuTests.cs b/Tests/UnitTests/Views/ContextMenuTests.cs similarity index 96% rename from UnitTests/Views/ContextMenuTests.cs rename to Tests/UnitTests/Views/ContextMenuTests.cs index 8fa24b729..ec555edac 100644 --- a/UnitTests/Views/ContextMenuTests.cs +++ b/Tests/UnitTests/Views/ContextMenuTests.cs @@ -1,4 +1,6 @@ using System.Globalization; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -133,7 +135,7 @@ public class ContextMenuTests (ITestOutputHelper output) ((FakeDriver)Application.Driver!).SetBufferSize (20, 15); Assert.Equal (new Rectangle (0, 0, 20, 15), View.GetClip ()!.GetBounds ()); - TestHelpers.AssertDriverContentsWithFrameAre ("", output); + DriverAssert.AssertDriverContentsWithFrameAre ("", output); var top = new Toplevel { X = 2, Y = 2, Width = 15, Height = 4 }; top.Add (new TextField { X = Pos.Center (), Width = 10, Text = "Test" }); @@ -143,7 +145,7 @@ public class ContextMenuTests (ITestOutputHelper output) Assert.Equal (new Rectangle (2, 2, 15, 4), top.Frame); Assert.Equal (top, Application.Top); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Test", output @@ -153,7 +155,7 @@ public class ContextMenuTests (ITestOutputHelper output) Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Test ┌─────────────────── @@ -184,7 +186,7 @@ public class ContextMenuTests (ITestOutputHelper output) Assert.Equal (new Rectangle (0, 0, 20, 15), win.Frame); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────┐ │ │ @@ -212,7 +214,7 @@ public class ContextMenuTests (ITestOutputHelper output) Assert.Equal (new Rectangle (2, 2, 15, 4), testWindow.Frame); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────┐ │ │ @@ -236,7 +238,7 @@ public class ContextMenuTests (ITestOutputHelper output) Application.RunIteration (ref rsDialog); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────┐ │ │ @@ -268,7 +270,7 @@ public class ContextMenuTests (ITestOutputHelper output) ((FakeDriver)Application.Driver!).SetBufferSize (20, 15); Assert.Equal (new Rectangle (0, 0, 20, 15), View.GetClip ()!.GetBounds ()); - TestHelpers.AssertDriverContentsWithFrameAre ("", output); + DriverAssert.AssertDriverContentsWithFrameAre ("", output); // Don't use Dialog here as it has more layout logic. Use Window instead. var dialog = new Window { X = 2, Y = 2, Width = 15, Height = 4 }; @@ -279,7 +281,7 @@ public class ContextMenuTests (ITestOutputHelper output) Assert.Equal (new Rectangle (2, 2, 15, 4), dialog.Frame); Assert.Equal (dialog, Application.Top); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─────────────┐ │ Test │ @@ -293,7 +295,7 @@ public class ContextMenuTests (ITestOutputHelper output) var firstIteration = false; Application.RunIteration (ref rs, firstIteration); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─────────────┐ │ Test │ @@ -344,7 +346,7 @@ public class ContextMenuTests (ITestOutputHelper output) └──────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new Rectangle (0, 1, 8, 4), pos); cm.ForceMinimumPosToZero = false; @@ -358,7 +360,7 @@ public class ContextMenuTests (ITestOutputHelper output) ──────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new Rectangle (1, 0, 7, 3), pos); top.Dispose (); } @@ -451,7 +453,7 @@ public class ContextMenuTests (ITestOutputHelper output) └──────┘ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); menuItems = new MenuBarItem ( [ @@ -472,7 +474,7 @@ public class ContextMenuTests (ITestOutputHelper output) └─────────┘ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); top.Dispose (); } @@ -516,7 +518,7 @@ public class ContextMenuTests (ITestOutputHelper output) Assert.Equal (new Point (-1, -2), cm.Position); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │ One │ @@ -539,7 +541,7 @@ public class ContextMenuTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (new Point (-1, -2), cm.Position); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │ One │ @@ -564,7 +566,7 @@ public class ContextMenuTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (new Point (41, -2), cm.Position); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │ One │ @@ -587,7 +589,7 @@ public class ContextMenuTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (new Point (41, -2), cm.Position); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │ One │ @@ -611,7 +613,7 @@ public class ContextMenuTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (new Point (41, 9), cm.Position); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │ One │ @@ -634,7 +636,7 @@ public class ContextMenuTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (new Point (41, 9), cm.Position); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ ┌───────────┐│ One │ @@ -655,7 +657,7 @@ public class ContextMenuTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (new Point (41, 22), cm.Position); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │ One │ @@ -678,7 +680,7 @@ public class ContextMenuTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (new Point (41, 22), cm.Position); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌───────────┐ │ SubMenu1 │┌────────┐ @@ -699,7 +701,7 @@ public class ContextMenuTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (new Point (19, 10), cm.Position); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │ One │ @@ -722,7 +724,7 @@ public class ContextMenuTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (new Point (19, 10), cm.Position); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌───────────┐────┐ │ SubMenu1 │ │ @@ -809,7 +811,7 @@ public class ContextMenuTests (ITestOutputHelper output) └──────┘ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); cm.Position = new Point (5, 10); @@ -823,7 +825,7 @@ public class ContextMenuTests (ITestOutputHelper output) └──────┘ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); top.Dispose (); } @@ -942,7 +944,7 @@ public class ContextMenuTests (ITestOutputHelper output) │ One │ │ Two │"; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new Rectangle (0, 0, 8, 3), pos); cm.Hide (); @@ -981,7 +983,7 @@ public class ContextMenuTests (ITestOutputHelper output) │ Two └────"; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new Rectangle (0, 1, 5, 4), pos); cm.Hide (); @@ -1032,7 +1034,7 @@ public class ContextMenuTests (ITestOutputHelper output) └──────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new Rectangle (10, 5, 18, 5), pos); cm.Hide (); @@ -1056,7 +1058,7 @@ public class ContextMenuTests (ITestOutputHelper output) └──────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new Rectangle (5, 10, 13, 7), pos); cm.Hide (); @@ -1094,7 +1096,7 @@ public class ContextMenuTests (ITestOutputHelper output) └──────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new Rectangle (72, 21, 80, 4), pos); cm.Hide (); @@ -1145,7 +1147,7 @@ public class ContextMenuTests (ITestOutputHelper output) View "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new Rectangle (70, 20, 78, 5), pos); cm.Hide (); @@ -1179,7 +1181,7 @@ public class ContextMenuTests (ITestOutputHelper output) └──────┘ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); cm.Hide (); Assert.False (ContextMenu.IsShow); @@ -1188,7 +1190,7 @@ public class ContextMenuTests (ITestOutputHelper output) expected = ""; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); top.Dispose (); } @@ -1226,7 +1228,7 @@ public class ContextMenuTests (ITestOutputHelper output) Assert.Equal (new Rectangle (5, 11, 10, 5), Application.Top!.Subviews [0].Frame); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │ One │ @@ -1244,7 +1246,7 @@ public class ContextMenuTests (ITestOutputHelper output) Assert.Equal (new Rectangle (5, 11, 10, 5), Application.Top.Subviews [0].Frame); Assert.Equal (new Rectangle (5, 11, 15, 6), Application.Top.Subviews [1].Frame); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─────────────┐ │◄ Two │ @@ -1261,7 +1263,7 @@ public class ContextMenuTests (ITestOutputHelper output) Application.RunIteration (ref rs, firstIteration); Assert.Equal (new Rectangle (5, 11, 10, 5), Application.Top.Subviews [0].Frame); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │ One │ @@ -1319,7 +1321,7 @@ public class ContextMenuTests (ITestOutputHelper output) Assert.Equal (new Rectangle (5, 11, 10, 5), Application.Top.Subviews [0].Frame); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │ One │ @@ -1335,7 +1337,7 @@ public class ContextMenuTests (ITestOutputHelper output) Application.RunIteration (ref rs, firstIteration); Assert.Equal (new Rectangle (5, 11, 10, 5), Application.Top.Subviews [0].Frame); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │ One │ @@ -1352,7 +1354,7 @@ public class ContextMenuTests (ITestOutputHelper output) Application.RunIteration (ref rs, firstIteration); Assert.Equal (new Rectangle (5, 11, 10, 5), Application.Top.Subviews [0].Frame); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │ One │ @@ -1370,7 +1372,7 @@ public class ContextMenuTests (ITestOutputHelper output) Application.RunIteration (ref rs, firstIteration); Assert.Equal (new Rectangle (5, 11, 10, 5), Application.Top.Subviews [0].Frame); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │ One │ diff --git a/UnitTests/Views/DateFieldTests.cs b/Tests/UnitTests/Views/DateFieldTests.cs similarity index 99% rename from UnitTests/Views/DateFieldTests.cs rename to Tests/UnitTests/Views/DateFieldTests.cs index 574eb246a..851ed6c1b 100644 --- a/UnitTests/Views/DateFieldTests.cs +++ b/Tests/UnitTests/Views/DateFieldTests.cs @@ -1,5 +1,6 @@ using System.Globalization; using System.Runtime.InteropServices; +using UnitTests; namespace Terminal.Gui.ViewsTests; diff --git a/UnitTests/Views/DatePickerTests.cs b/Tests/UnitTests/Views/DatePickerTests.cs similarity index 99% rename from UnitTests/Views/DatePickerTests.cs rename to Tests/UnitTests/Views/DatePickerTests.cs index 75761d94f..85096ec4d 100644 --- a/UnitTests/Views/DatePickerTests.cs +++ b/Tests/UnitTests/Views/DatePickerTests.cs @@ -1,4 +1,5 @@ using System.Globalization; +using UnitTests; namespace Terminal.Gui.ViewsTests; diff --git a/UnitTests/Views/FrameViewTests.cs b/Tests/UnitTests/Views/FrameViewTests.cs similarity index 88% rename from UnitTests/Views/FrameViewTests.cs rename to Tests/UnitTests/Views/FrameViewTests.cs index ee43d04e8..0d559919e 100644 --- a/UnitTests/Views/FrameViewTests.cs +++ b/Tests/UnitTests/Views/FrameViewTests.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -45,14 +47,14 @@ public class FrameViewTests (ITestOutputHelper output) top.Add (fv); Application.Begin (top); Assert.Equal (new (0, 0, 0, 0), fv.Frame); - TestHelpers.AssertDriverContentsWithFrameAre (@"", output); + DriverAssert.AssertDriverContentsWithFrameAre (@"", output); fv.Height = 5; fv.Width = 5; Assert.Equal (new (0, 0, 5, 5), fv.Frame); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌───┐ │ │ @@ -67,7 +69,7 @@ public class FrameViewTests (ITestOutputHelper output) Assert.Equal (new (1, 2, 5, 5), fv.Frame); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌───┐ │ │ @@ -82,7 +84,7 @@ public class FrameViewTests (ITestOutputHelper output) Assert.Equal (new (-1, -2, 5, 5), fv.Frame); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" │ │ @@ -95,7 +97,7 @@ public class FrameViewTests (ITestOutputHelper output) Assert.Equal (new (7, 8, 5, 5), fv.Frame); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌── │ ", diff --git a/UnitTests/Views/GraphViewTests.cs b/Tests/UnitTests/Views/GraphViewTests.cs similarity index 97% rename from UnitTests/Views/GraphViewTests.cs rename to Tests/UnitTests/Views/GraphViewTests.cs index 4a7fe4a06..ef5230f66 100644 --- a/UnitTests/Views/GraphViewTests.cs +++ b/Tests/UnitTests/Views/GraphViewTests.cs @@ -1,5 +1,7 @@ using System.Text; +using UnitTests; using Terminal.Gui.ViewMouseTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -705,7 +707,7 @@ public class MultiBarSeriesTests │ MM MM MM ┼──┬M──┬M──┬M────── heytherebob "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // Shutdown must be called to safely clean up Application if Init has been called Application.Shutdown (); @@ -1123,7 +1125,7 @@ public class TextAnnotationTests 0┼┬┬┬┬┬┬┬┬ 0 5"; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // Shutdown must be called to safely clean up Application if Init has been called Application.Shutdown (); @@ -1149,7 +1151,7 @@ public class TextAnnotationTests 0┼┬┬┬┬┬┬┬┬ 0 5"; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // user scrolls up one unit of graph space gv.ScrollOffset = new PointF (0, 1f); @@ -1169,7 +1171,7 @@ public class TextAnnotationTests 1┼┬┬┬┬┬┬┬┬ 0 5"; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // Shutdown must be called to safely clean up Application if Init has been called Application.Shutdown (); @@ -1203,7 +1205,7 @@ public class TextAnnotationTests 0┼┬┬┬┬┬┬┬┬ 0 5"; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // Shutdown must be called to safely clean up Application if Init has been called Application.Shutdown (); @@ -1233,7 +1235,7 @@ public class TextAnnotationTests 0┼┬┬┬┬┬┬┬┬ 0 5"; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // Shutdown must be called to safely clean up Application if Init has been called Application.Shutdown (); @@ -1259,7 +1261,7 @@ public class TextAnnotationTests 0┼┬┬┬┬┬┬┬┬ 0 5"; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // user scrolls up one unit of graph space gv.ScrollOffset = new PointF (0, 1f); @@ -1278,7 +1280,7 @@ public class TextAnnotationTests 1┼┬┬┬┬┬┬┬┬ 0 5"; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // user scrolls up one unit of graph space gv.ScrollOffset = new PointF (0, 1f); @@ -1297,7 +1299,7 @@ public class TextAnnotationTests 1┼┬┬┬┬┬┬┬┬ 0 5"; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // Shutdown must be called to safely clean up Application if Init has been called Application.Shutdown (); @@ -1349,7 +1351,7 @@ public class LegendTests 0┼┬┬┬┬┬┬┬┬ 0 5"; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // Shutdown must be called to safely clean up Application if Init has been called Application.Shutdown (); @@ -1378,7 +1380,7 @@ public class LegendTests 0┼┬┬┬┬┬┬┬┬ 0 5"; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // Shutdown must be called to safely clean up Application if Init has been called Application.Shutdown (); @@ -1409,7 +1411,7 @@ public class PathAnnotationTests "; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // Shutdown must be called to safely clean up Application if Init has been called Application.Shutdown (); @@ -1434,7 +1436,7 @@ public class PathAnnotationTests "; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // Shutdown must be called to safely clean up Application if Init has been called Application.Shutdown (); @@ -1467,7 +1469,7 @@ public class PathAnnotationTests 0┼┬┬┬┬┬┬┬┬ 0 5"; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // Shutdown must be called to safely clean up Application if Init has been called Application.Shutdown (); @@ -1500,7 +1502,7 @@ public class PathAnnotationTests 0┼┬┬┬┬┬┬┬┬ 0 5"; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // Shutdown must be called to safely clean up Application if Init has been called Application.Shutdown (); @@ -1548,7 +1550,7 @@ public class PathAnnotationTests mount.Draw (); // should have the initial text - TestHelpers.AssertDriverContentsAre ("ff", null); + DriverAssert.AssertDriverContentsAre ("ff", null); // change the text and redraw view.Text = "ff1234"; @@ -1557,7 +1559,7 @@ public class PathAnnotationTests mount.Draw (); // should have the new text rendered - TestHelpers.AssertDriverContentsAre ("ff1234", null); + DriverAssert.AssertDriverContentsAre ("ff1234", null); } finally { @@ -1599,7 +1601,7 @@ public class PathAnnotationTests 0 5 "; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // Shutdown must be called to safely clean up Application if Init has been called Application.Shutdown (); @@ -1636,7 +1638,7 @@ public class PathAnnotationTests 0 5 "; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // Shutdown must be called to safely clean up Application if Init has been called Application.Shutdown (); diff --git a/UnitTests/Views/HexViewTests.cs b/Tests/UnitTests/Views/HexViewTests.cs similarity index 100% rename from UnitTests/Views/HexViewTests.cs rename to Tests/UnitTests/Views/HexViewTests.cs diff --git a/UnitTests/Views/LabelTests.cs b/Tests/UnitTests/Views/LabelTests.cs similarity index 95% rename from UnitTests/Views/LabelTests.cs rename to Tests/UnitTests/Views/LabelTests.cs index 061e4b7bd..03d8369ea 100644 --- a/UnitTests/Views/LabelTests.cs +++ b/Tests/UnitTests/Views/LabelTests.cs @@ -1,5 +1,7 @@ using System.ComponentModel; using Microsoft.VisualStudio.TestPlatform.ObjectModel; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -113,7 +115,7 @@ public class LabelTests (ITestOutputHelper output) └────────────────────────────┘ "; - TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, output); label.Text = "Say Hello 你 changed"; @@ -127,7 +129,7 @@ public class LabelTests (ITestOutputHelper output) └────────────────────────────┘ "; - TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, output); top.Dispose (); } @@ -153,7 +155,7 @@ public class LabelTests (ITestOutputHelper output) └────────────────────────────┘ "; - TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, output); label.Text = "Say Hello 你 changed"; @@ -167,7 +169,7 @@ public class LabelTests (ITestOutputHelper output) └────────────────────────────┘ "; - TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, output); top.Dispose (); } @@ -209,7 +211,7 @@ public class LabelTests (ITestOutputHelper output) tf2.Draw (new (new (0, 2), tfSize), label.GetNormalColor (), label.ColorScheme.HotNormal); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This label needs to be cleared before rewritten. This TextFormatter (tf1) without fill will not be cleared on rewritten. @@ -232,7 +234,7 @@ This TextFormatter (tf2) with fill will be cleared on rewritten. ", tf2.Text = "This TextFormatter (tf2) is rewritten."; tf2.Draw (new (new (0, 2), tfSize), label.GetNormalColor (), label.ColorScheme.HotNormal); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This label is rewritten. This TextFormatter (tf1) is rewritten.will not be cleared on rewritten. @@ -258,7 +260,7 @@ This TextFormatter (tf2) is rewritten. ", Demo Simple Rune "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 16, 1), pos); top.Dispose (); } @@ -294,7 +296,7 @@ n e "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 1, 16), pos); top.Dispose (); } @@ -319,7 +321,7 @@ e ズ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 2, 7), pos); top.Dispose (); } @@ -406,7 +408,7 @@ e │ │ └────────────────────────────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 30, 5), pos); top.Dispose (); } @@ -439,7 +441,7 @@ e └────────────────────────────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 30, 5), pos); top.Dispose (); } @@ -458,7 +460,7 @@ e label.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌┤Te├┐ │Test│ @@ -484,7 +486,7 @@ e Assert.Equal (new (0, 0, 4, 1), label.Viewport); Application.Begin (top); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" │Test│ └────┘", @@ -507,7 +509,7 @@ e Assert.Equal (new (0, 0, 4, 1), label.Viewport); Application.Begin (top); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" │Test│ └────┘", @@ -881,7 +883,7 @@ e " ; - TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Application.End (rs); top.Dispose (); } @@ -928,7 +930,7 @@ e └──────────────────────────────────────┘ "; - TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Application.End (rs); top.Dispose (); } @@ -982,7 +984,7 @@ e if (k.KeyCode == KeyCode.Enter) { ((FakeDriver)Application.Driver!).SetBufferSize (22, count + 4); - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expecteds [count], output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expecteds [count], output); Assert.Equal (new (0, 0, 22, count + 4), pos); if (count > 0) @@ -1076,7 +1078,7 @@ e └────────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 10, 4), pos); text = "0123456789"; @@ -1105,7 +1107,7 @@ e └────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 10, 4), pos); } @@ -1133,7 +1135,7 @@ e if (k.KeyCode == KeyCode.Enter) { ((FakeDriver)Application.Driver!).SetBufferSize (22, count + 4); - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expecteds [count], output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expecteds [count], output); Assert.Equal (new (0, 0, 22, count + 4), pos); if (count < 20) @@ -1223,7 +1225,7 @@ e └────────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 10, 4), pos); text = "0123456789"; @@ -1244,7 +1246,7 @@ e └────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 10, 4), pos); top.Dispose (); } @@ -1282,7 +1284,7 @@ e └────────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 10, 4), pos); text = "0123456789"; @@ -1302,7 +1304,7 @@ e └────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 10, 4), pos); top.Dispose (); } diff --git a/UnitTests/Views/LineViewTests.cs b/Tests/UnitTests/Views/LineViewTests.cs similarity index 94% rename from UnitTests/Views/LineViewTests.cs rename to Tests/UnitTests/Views/LineViewTests.cs index 7be90c829..c0360365c 100644 --- a/UnitTests/Views/LineViewTests.cs +++ b/Tests/UnitTests/Views/LineViewTests.cs @@ -1,4 +1,6 @@ -namespace Terminal.Gui.ViewsTests; +using UnitTests; + +namespace Terminal.Gui.ViewsTests; public class LineViewTests { diff --git a/UnitTests/Views/ListViewTests.cs b/Tests/UnitTests/Views/ListViewTests.cs similarity index 97% rename from UnitTests/Views/ListViewTests.cs rename to Tests/UnitTests/Views/ListViewTests.cs index add91a9a0..2c9eef208 100644 --- a/UnitTests/Views/ListViewTests.cs +++ b/Tests/UnitTests/Views/ListViewTests.cs @@ -2,6 +2,8 @@ using System.Collections.ObjectModel; using System.Collections.Specialized; using System.ComponentModel; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -60,7 +62,7 @@ public class ListViewTests (ITestOutputHelper output) Assert.Equal (-1, lv.SelectedItem); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────┐ │Line0 │ @@ -81,7 +83,7 @@ public class ListViewTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (-1, lv.SelectedItem); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────┐ │Line10 │ @@ -102,7 +104,7 @@ public class ListViewTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (0, lv.SelectedItem); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────┐ │Line0 │ @@ -123,7 +125,7 @@ public class ListViewTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (19, lv.SelectedItem); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────┐ │Line10 │ @@ -144,7 +146,7 @@ public class ListViewTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (19, lv.SelectedItem); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────┐ │Line0 │ @@ -165,7 +167,7 @@ public class ListViewTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (19, lv.SelectedItem); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────┐ │Line10 │ @@ -186,7 +188,7 @@ public class ListViewTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (19, lv.SelectedItem); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────┐ │Line0 │ @@ -207,7 +209,7 @@ public class ListViewTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (19, lv.SelectedItem); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────┐ │Line10 │ @@ -228,7 +230,7 @@ public class ListViewTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (0, lv.SelectedItem); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────┐ │Line0 │ @@ -249,7 +251,7 @@ public class ListViewTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (0, lv.SelectedItem); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────┐ │Line19 │ @@ -270,7 +272,7 @@ public class ListViewTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (0, lv.SelectedItem); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────┐ │Line0 │ @@ -306,7 +308,7 @@ public class ListViewTests (ITestOutputHelper output) Application.Begin (top); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Item 0 Item 1 @@ -320,7 +322,7 @@ Item 4", lv.SelectedItem = 6; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Item 2 Item 3 @@ -729,7 +731,7 @@ Item 6", Assert.Equal (-1, lv.SelectedItem); Assert.Equal ("", lv.Text); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─────┐ │One │ @@ -799,7 +801,7 @@ Item 6", Application.Begin (top); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Item 0 Item 1 @@ -812,7 +814,7 @@ Item 6", lv.TopItem = 1; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" tem 1 tem 2 diff --git a/UnitTests/Views/MenuBarTests.cs b/Tests/UnitTests/Views/MenuBarTests.cs similarity index 94% rename from UnitTests/Views/MenuBarTests.cs rename to Tests/UnitTests/Views/MenuBarTests.cs index 133f0175f..6deae87d4 100644 --- a/UnitTests/Views/MenuBarTests.cs +++ b/Tests/UnitTests/Views/MenuBarTests.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -103,7 +105,7 @@ public class MenuBarTests (ITestOutputHelper output) ); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @$" Nullable Checked ┌──────────────────────┐ @@ -378,7 +380,7 @@ public class MenuBarTests (ITestOutputHelper output) menu.ColorScheme.Disabled }; - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( @" 00000000000000", output, @@ -393,7 +395,7 @@ public class MenuBarTests (ITestOutputHelper output) ); top.Draw (); - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( @" 11111100000000 00000000000000 @@ -416,7 +418,7 @@ public class MenuBarTests (ITestOutputHelper output) top.Subviews [1].Layout(); top.Subviews [1].Draw (); - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( @" 11111100000000 00000000000000 @@ -438,7 +440,7 @@ public class MenuBarTests (ITestOutputHelper output) ); top.Subviews [1].Draw (); - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( @" 11111100000000 00000000000000 @@ -473,7 +475,7 @@ public class MenuBarTests (ITestOutputHelper output) Assert.Equal (new (0, 0, 40, 15), win.Frame); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ │ @@ -575,7 +577,7 @@ public class MenuBarTests (ITestOutputHelper output) Assert.Equal (new (2, 2, 15, 4), dialog.Frame); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ │ @@ -599,7 +601,7 @@ public class MenuBarTests (ITestOutputHelper output) menu.OpenMenu (); Application.RunIteration (ref rsDialog); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ │ @@ -627,7 +629,7 @@ public class MenuBarTests (ITestOutputHelper output) Application.RunIteration (ref rsDialog, firstIteration); Assert.Equal (items [0], menu.Menus [0].Title); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ │ @@ -661,7 +663,7 @@ public class MenuBarTests (ITestOutputHelper output) menu.OpenMenu (); Application.RunIteration (ref rsDialog); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────┐ │ │ @@ -700,7 +702,7 @@ public class MenuBarTests (ITestOutputHelper output) Button.DefaultShadow = ShadowStyle.None; Assert.Equal (new (0, 0, 40, 15), View.GetClip ()!.GetBounds()); - TestHelpers.AssertDriverContentsWithFrameAre (@"", output); + DriverAssert.AssertDriverContentsWithFrameAre (@"", output); List items = new () { @@ -784,7 +786,7 @@ public class MenuBarTests (ITestOutputHelper output) Assert.Equal (new (2, 2, 15, 4), dialog.Frame); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─────────────┐ │ File │ @@ -797,7 +799,7 @@ public class MenuBarTests (ITestOutputHelper output) menu.OpenMenu (); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─────────────┐ │ File │ @@ -819,7 +821,7 @@ public class MenuBarTests (ITestOutputHelper output) Application.RunIteration (ref rs); Assert.Equal (items [0], menu.Menus [0].Title); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─────────────┐ │ New │ @@ -842,7 +844,7 @@ public class MenuBarTests (ITestOutputHelper output) menu.OpenMenu (); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─────────────┐ │ Delete │ @@ -890,7 +892,7 @@ public class MenuBarTests (ITestOutputHelper output) ──────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 7, 4), pos); menu.CloseAllMenus (); @@ -904,7 +906,7 @@ public class MenuBarTests (ITestOutputHelper output) ──────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 7, 3), pos); menu.CloseAllMenus (); @@ -920,7 +922,7 @@ public class MenuBarTests (ITestOutputHelper output) └────── "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 1, 7, 4), pos); menu.CloseAllMenus (); @@ -935,7 +937,7 @@ public class MenuBarTests (ITestOutputHelper output) │ Two "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 7, 3), pos); top.Dispose (); } @@ -968,7 +970,7 @@ ne wo "; - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); menu.CloseAllMenus (); menu.Frame = new (-2, -2, menu.Frame.Width, menu.Frame.Height); @@ -979,7 +981,7 @@ wo wo "; - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); menu.CloseAllMenus (); menu.Frame = new (0, 0, menu.Frame.Width, menu.Frame.Height); @@ -992,7 +994,7 @@ wo Tw "; - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); menu.CloseAllMenus (); menu.Frame = new (0, 0, menu.Frame.Width, menu.Frame.Height); @@ -1004,7 +1006,7 @@ wo On "; - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); top.Dispose (); } @@ -1034,7 +1036,7 @@ wo └──────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 1, 8, 4), pos); top.Dispose (); } @@ -1064,7 +1066,7 @@ wo Two "; - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); top.Dispose (); } @@ -1112,7 +1114,7 @@ wo File Edit "; - var pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + var pos = DriverAsserts.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 11, 1), pos); Assert.True (Application.Top.ProcessKeyDown (new KeyEventArgs (Key.N))); @@ -1140,7 +1142,7 @@ wo File Edit "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAsserts.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 11, 1), pos); Assert.True (Application.Top.ProcessKeyDown (new KeyEventArgs (Key.CursorRight))); @@ -1214,7 +1216,7 @@ wo Assert.True (menu.NewKeyDownEvent (Key.F.WithAlt)); Assert.True (menu.IsMenuOpen); Application.Top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), output); Assert.True (Application.Top.Subviews [1].NewKeyDownEvent (Key.N)); Application.MainLoop.RunIteration (); @@ -1223,7 +1225,7 @@ wo Assert.True (menu.NewKeyDownEvent (Key.E.WithAlt)); Assert.True (menu.IsMenuOpen); Application.Top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (1), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (1), output); Assert.True (Application.Top.Subviews [1].NewKeyDownEvent (Key.C)); Application.MainLoop.RunIteration (); @@ -1482,7 +1484,7 @@ wo menu.OpenMenu (); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" File ┌────────────────────────────┐ @@ -1530,7 +1532,7 @@ wo menu.OpenMenu (); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" File Open Open a file Ctrl+O @@ -1592,13 +1594,13 @@ wo Assert.True (menu.IsMenuOpen); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), output); Assert.True (menu.NewMouseEvent (new () { Position = new (1, 0), Flags = MouseFlags.Button1Pressed, View = menu })); Assert.False (menu.IsMenuOpen); View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ClosedMenuText, output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ClosedMenuText, output); top.Dispose (); } @@ -1632,7 +1634,7 @@ wo Application.Begin (top); ((FakeDriver)Application.Driver!).SetBufferSize (40, 8); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1648,7 +1650,7 @@ wo Assert.True (win.NewKeyDownEvent (menu.Key)); top.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1664,7 +1666,7 @@ wo Assert.True (menu.NewKeyDownEvent (Key.CursorRight)); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1680,7 +1682,7 @@ wo Assert.True (menu._openMenu.NewKeyDownEvent (Key.CursorRight)); top.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1697,7 +1699,7 @@ wo View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1744,7 +1746,7 @@ wo { ((FakeDriver)Application.Driver!).SetBufferSize (40, 8); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1760,7 +1762,7 @@ wo Assert.True (win.NewKeyDownEvent (menu.Key)); top.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1776,7 +1778,7 @@ wo Assert.True (menu.NewKeyDownEvent (Key.CursorRight)); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1792,7 +1794,7 @@ wo Assert.True (menu._openMenu.NewKeyDownEvent (Key.CursorRight)); top.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1809,7 +1811,7 @@ wo View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1858,7 +1860,7 @@ wo RunState rs = Application.Begin (win); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1874,7 +1876,7 @@ wo Assert.True (win.NewKeyDownEvent (menu.Key)); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1890,7 +1892,7 @@ wo Assert.True (menu.NewKeyDownEvent (Key.CursorRight)); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1906,7 +1908,7 @@ wo Assert.True (menu._openMenu.NewKeyDownEvent (Key.CursorRight)); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1922,7 +1924,7 @@ wo Assert.True (menu._openMenu.NewKeyDownEvent (Key.CursorRight)); Application.RunIteration (ref rs); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1948,7 +1950,7 @@ wo Toplevel top = Application.Top; Application.LayoutAndDraw(); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1964,7 +1966,7 @@ wo Assert.True (top.NewKeyDownEvent (Key.F9)); top.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1980,7 +1982,7 @@ wo Assert.True (top.Subviews [0].NewKeyDownEvent (Key.CursorRight)); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -1998,7 +2000,7 @@ wo ); top.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -2017,7 +2019,7 @@ wo View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -2084,21 +2086,21 @@ wo Assert.True (menu.NewKeyDownEvent (menu.Key)); Assert.True (menu.IsMenuOpen); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), output); // Open second Assert.True (Application.Top.Subviews [1].NewKeyDownEvent (Key.CursorRight)); Assert.True (menu.IsMenuOpen); View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (1), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (1), output); // Close menu Assert.True (menu.NewKeyDownEvent (menu.Key)); Assert.False (menu.IsMenuOpen); View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ClosedMenuText, output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ClosedMenuText, output); top.Remove (menu); @@ -2132,21 +2134,21 @@ wo Assert.True (menu.IsMenuOpen); View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), output); // Open second Assert.True (top.Subviews [1].NewKeyDownEvent (Key.CursorRight)); Assert.True (menu.IsMenuOpen); View.SetClipToScreen (); Application.Top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (1), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (1), output); // Close menu Assert.True (menu.NewKeyDownEvent (menu.Key)); Assert.False (menu.IsMenuOpen); View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ClosedMenuText, output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ClosedMenuText, output); top.Dispose (); } @@ -2215,7 +2217,7 @@ wo View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ClosedMenuText, output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ClosedMenuText, output); for (var i = 0; i < expectedMenu.Menus.Length; i++) { @@ -2223,7 +2225,7 @@ wo Assert.True (menu.IsMenuOpen); View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (i), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (i), output); } top.Dispose (); @@ -2474,7 +2476,7 @@ Edit │ Copy Copies the selection. │ └──────────────────────────────┘ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); cancelClosing = true; Assert.True (menu.NewKeyDownEvent (menu.Key)); @@ -2489,7 +2491,7 @@ Edit │ Copy Copies the selection. │ └──────────────────────────────┘ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); cancelClosing = false; Assert.True (menu.NewKeyDownEvent (menu.Key)); @@ -2501,7 +2503,7 @@ Edit expected = @" Edit "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); void New () { miAction = "New"; } @@ -2650,7 +2652,7 @@ Edit Assert.True (menu.IsMenuOpen); Assert.False (tf.HasFocus); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), output); // Right - Edit has no sub menu; this tests that no sub menu shows Assert.True (menu._openMenu.NewKeyDownEvent (Key.CursorRight)); @@ -2661,7 +2663,7 @@ Edit Assert.Null (menu._openSubMenu); View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (1), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (1), output); // Right - Format Assert.True (menu._openMenu.NewKeyDownEvent (Key.CursorRight)); @@ -2669,7 +2671,7 @@ Edit Assert.False (tf.HasFocus); View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (2), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (2), output); // Left - Edit Assert.True (menu._openMenu.NewKeyDownEvent (Key.CursorLeft)); @@ -2677,21 +2679,21 @@ Edit Assert.False (tf.HasFocus); View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (1), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (1), output); Assert.True (menu._openMenu.NewKeyDownEvent (Key.CursorLeft)); Assert.True (menu.IsMenuOpen); Assert.False (tf.HasFocus); View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), output); Assert.True (Application.RaiseKeyDownEvent (menu.Key)); Assert.False (menu.IsMenuOpen); Assert.True (tf.HasFocus); View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ClosedMenuText, output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ClosedMenuText, output); top.Dispose (); } @@ -2751,7 +2753,7 @@ Edit Assert.True (menu.IsMenuOpen); Assert.False (tf.HasFocus); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), output); Assert.True ( menu.NewMouseEvent ( @@ -2762,7 +2764,7 @@ Edit Assert.False (tf.HasFocus); View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (1), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (1), output); Assert.True ( menu.NewMouseEvent ( @@ -2773,7 +2775,7 @@ Edit Assert.False (tf.HasFocus); View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (2), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (2), output); Assert.True ( menu.NewMouseEvent ( @@ -2784,7 +2786,7 @@ Edit Assert.False (tf.HasFocus); View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ClosedMenuText, output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ClosedMenuText, output); Assert.True ( menu.NewMouseEvent ( @@ -2795,14 +2797,14 @@ Edit Assert.False (tf.HasFocus); View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ExpectedSubMenuOpen (0), output); Assert.True (menu.NewMouseEvent (new () { Position = new (8, 0), Flags = MouseFlags.Button1Pressed, View = menu })); Assert.False (menu.IsMenuOpen); Assert.True (tf.HasFocus); View.SetClipToScreen (); top.Draw (); - TestHelpers.AssertDriverContentsAre (expectedMenu.ClosedMenuText, output); + DriverAssert.AssertDriverContentsAre (expectedMenu.ClosedMenuText, output); top.Dispose (); } @@ -2892,7 +2894,7 @@ Edit var firstIteration = false; Application.RunIteration (ref rs, firstIteration); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" File ┌────────────────────────────┐ @@ -2905,7 +2907,7 @@ Edit firstIteration = false; Application.RunIteration (ref rs, firstIteration); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" File", output @@ -3063,7 +3065,7 @@ Edit Numbers "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.True (menu.NewKeyDownEvent (menu.Key)); top.Draw (); @@ -3077,7 +3079,7 @@ Edit └────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.True (Application.Top.Subviews [1].NewKeyDownEvent (Key.CursorDown)); top.Draw (); @@ -3092,7 +3094,7 @@ Edit └─────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.True (Application.Top.Subviews [2].NewKeyDownEvent (Key.CursorLeft)); top.Draw (); @@ -3106,7 +3108,7 @@ Edit └────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.True (Application.Top.Subviews [1].NewKeyDownEvent (Key.Esc)); top.Draw (); @@ -3115,7 +3117,7 @@ Edit Numbers "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); top.Dispose (); } @@ -3167,7 +3169,7 @@ Edit Numbers "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 8, 1), pos); menu.NewMouseEvent ( @@ -3184,7 +3186,7 @@ Edit └────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 10, 6), pos); menu.NewMouseEvent ( @@ -3205,7 +3207,7 @@ Edit └─────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 25, 7), pos); Assert.False ( @@ -3227,7 +3229,7 @@ Edit └────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 10, 6), pos); menu.NewMouseEvent ( @@ -3239,7 +3241,7 @@ Edit Numbers "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 8, 1), pos); top.Dispose (); } @@ -3297,7 +3299,7 @@ Edit Two ► Three "; - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.True (menu._openMenu.NewKeyDownEvent (Key.CursorDown)); menu.Draw (); @@ -3310,7 +3312,7 @@ Edit Two ► Sub-Menu 1 Three Sub-Menu 2"; - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); } [Fact (Skip = "#3798 Broke. Will fix in #2975")] @@ -3363,7 +3365,7 @@ Edit Numbers "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 8, 1), pos); Assert.True (menu.NewKeyDownEvent (menu.Key)); @@ -3378,7 +3380,7 @@ Edit └────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 10, 6), pos); Assert.True (Application.Top.Subviews [1].NewKeyDownEvent (Key.CursorDown)); @@ -3395,7 +3397,7 @@ Edit └─────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 15, 7), pos); Assert.True (Application.Top.Subviews [2].NewKeyDownEvent (Key.Enter)); @@ -3410,7 +3412,7 @@ Edit └────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 10, 6), pos); Assert.True (Application.Top.Subviews [1].NewKeyDownEvent (Key.Esc)); @@ -3420,7 +3422,7 @@ Edit Numbers "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 8, 1), pos); top.Dispose (); } @@ -3475,7 +3477,7 @@ Edit Numbers "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 8, 1), pos); Assert.True (menu.NewMouseEvent (new () { Position = new (1, 0), Flags = MouseFlags.Button1Pressed, View = menu })); @@ -3490,7 +3492,7 @@ Edit └────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 10, 6), pos); Assert.False (menu.NewMouseEvent (new () { Position = new (1, 2), Flags = MouseFlags.Button1Clicked, View = Application.Top.Subviews [1] })); @@ -3506,7 +3508,7 @@ Edit └─────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 15, 7), pos); menu.NewMouseEvent (new () { Position = new (1, 1), Flags = MouseFlags.Button1Clicked, View = Application.Top.Subviews [2] }); @@ -3521,7 +3523,7 @@ Edit └────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 10, 6), pos); Assert.False (menu.NewMouseEvent (new () { Position = new (70, 2), Flags = MouseFlags.Button1Clicked, View = Application.Top })); @@ -3531,7 +3533,7 @@ Edit Numbers "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 8, 1), pos); top.Dispose (); } @@ -3589,7 +3591,7 @@ Edit Two ► Three "; - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.True (menu._openMenu.NewKeyDownEvent (Key.CursorDown)); Assert.True (menu._openMenu.NewKeyDownEvent (Key.Enter)); @@ -3604,7 +3606,7 @@ Edit Sub-Menu 1 Sub-Menu 2 "; - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); } [Fact (Skip = "#3798 Broke. Will fix in #2975")] @@ -3658,7 +3660,7 @@ Edit Numbers "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 8, 1), pos); Assert.True ( @@ -3675,7 +3677,7 @@ Edit Three "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 8, 4), pos); menu.NewMouseEvent ( @@ -3691,7 +3693,7 @@ Edit Sub-Menu 2 "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 13, 5), pos); menu.NewMouseEvent ( @@ -3706,7 +3708,7 @@ Edit Three "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 8, 4), pos); menu.NewMouseEvent ( @@ -3718,7 +3720,7 @@ Edit Numbers "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (1, 0, 8, 1), pos); top.Dispose (); } diff --git a/UnitTests/Views/MenuTests.cs b/Tests/UnitTests/Views/MenuTests.cs similarity index 100% rename from UnitTests/Views/MenuTests.cs rename to Tests/UnitTests/Views/MenuTests.cs diff --git a/UnitTests/Views/NumericUpDownTests.cs b/Tests/UnitTests/Views/NumericUpDownTests.cs similarity index 100% rename from UnitTests/Views/NumericUpDownTests.cs rename to Tests/UnitTests/Views/NumericUpDownTests.cs diff --git a/UnitTests/Views/ProgressBarTests.cs b/Tests/UnitTests/Views/ProgressBarTests.cs similarity index 99% rename from UnitTests/Views/ProgressBarTests.cs rename to Tests/UnitTests/Views/ProgressBarTests.cs index d5c163a76..2b56360a1 100644 --- a/UnitTests/Views/ProgressBarTests.cs +++ b/Tests/UnitTests/Views/ProgressBarTests.cs @@ -1,4 +1,5 @@ using System.Text; +using UnitTests; namespace Terminal.Gui.ViewsTests; diff --git a/UnitTests/Views/RadioGroupTests.cs b/Tests/UnitTests/Views/RadioGroupTests.cs similarity index 98% rename from UnitTests/Views/RadioGroupTests.cs rename to Tests/UnitTests/Views/RadioGroupTests.cs index 8eb95cb71..c5a9ea92e 100644 --- a/UnitTests/Views/RadioGroupTests.cs +++ b/Tests/UnitTests/Views/RadioGroupTests.cs @@ -1,4 +1,6 @@ using System.ComponentModel; +using UnitTests; +using UnitTests; using Xunit.Abstractions; // ReSharper disable AccessToModifiedClosure @@ -549,7 +551,7 @@ public class RadioGroupTests (ITestOutputHelper output) └────────────────────────────┘ "; - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 30, 5), pos); rg.Orientation = Orientation.Horizontal; @@ -570,7 +572,7 @@ public class RadioGroupTests (ITestOutputHelper output) └────────────────────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 30, 5), pos); rg.HorizontalSpace = 4; @@ -591,7 +593,7 @@ public class RadioGroupTests (ITestOutputHelper output) └────────────────────────────┘ "; - pos = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + pos = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Assert.Equal (new (0, 0, 30, 5), pos); top.Dispose (); } diff --git a/UnitTests/Views/ScrollBarTests.cs b/Tests/UnitTests/Views/ScrollBarTests.cs similarity index 93% rename from UnitTests/Views/ScrollBarTests.cs rename to Tests/UnitTests/Views/ScrollBarTests.cs index 616a112a0..4cc48f385 100644 --- a/UnitTests/Views/ScrollBarTests.cs +++ b/Tests/UnitTests/Views/ScrollBarTests.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; using static Unix.Terminal.Delegates; namespace Terminal.Gui.ViewsTests; @@ -230,7 +232,7 @@ public class ScrollBarTests (ITestOutputHelper output) #region Position [Fact] - public void Position_Event_Cancelables () + public void Position_Event_Cancels () { var changingCount = 0; var changedCount = 0; @@ -802,7 +804,7 @@ public class ScrollBarTests (ITestOutputHelper output) super.Layout (); super.Draw (); - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); } #endregion Draw @@ -905,39 +907,4 @@ public class ScrollBarTests (ITestOutputHelper output) Application.ResetState (true); } #endregion Mouse - - - - [Fact (Skip = "Disabled - Will put this feature in View")] - [AutoInitShutdown] - public void KeepContentInAllViewport_True_False () - { - var view = new View { Width = Dim.Fill (), Height = Dim.Fill () }; - view.Padding.Thickness = new (0, 0, 2, 0); - view.SetContentSize (new (view.Viewport.Width, 30)); - var scrollBar = new ScrollBar { Width = 2, Height = Dim.Fill (), ScrollableContentSize = view.GetContentSize ().Height }; - scrollBar.SliderPositionChanged += (_, e) => view.Viewport = view.Viewport with { Y = e.CurrentValue }; - view.Padding.Add (scrollBar); - var top = new Toplevel (); - top.Add (view); - Application.Begin (top); - - //Assert.False (scrollBar.KeepContentInAllViewport); - //scrollBar.KeepContentInAllViewport = true; - Assert.Equal (80, view.Padding.Viewport.Width); - Assert.Equal (25, view.Padding.Viewport.Height); - Assert.Equal (2, scrollBar.Viewport.Width); - Assert.Equal (25, scrollBar.Viewport.Height); - Assert.Equal (30, scrollBar.ScrollableContentSize); - - //scrollBar.KeepContentInAllViewport = false; - scrollBar.Position = 50; - Assert.Equal (scrollBar.GetSliderPosition (), scrollBar.ScrollableContentSize - 1); - Assert.Equal (scrollBar.GetSliderPosition (), view.Viewport.Y); - Assert.Equal (29, scrollBar.GetSliderPosition ()); - Assert.Equal (29, view.Viewport.Y); - - top.Dispose (); - } - } diff --git a/UnitTests/Views/ScrollSliderTests.cs b/Tests/UnitTests/Views/ScrollSliderTests.cs similarity index 99% rename from UnitTests/Views/ScrollSliderTests.cs rename to Tests/UnitTests/Views/ScrollSliderTests.cs index 6f5d1cd26..2e94d4b3e 100644 --- a/UnitTests/Views/ScrollSliderTests.cs +++ b/Tests/UnitTests/Views/ScrollSliderTests.cs @@ -1,6 +1,8 @@ using System.Diagnostics; using System.Runtime.InteropServices; using Microsoft.VisualStudio.TestPlatform.Utilities; +using UnitTests; +using UnitTests; using Xunit.Abstractions; using static Unix.Terminal.Delegates; @@ -1005,6 +1007,6 @@ public class ScrollSliderTests (ITestOutputHelper output) super.Layout (); super.Draw (); - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + _ = DriverAssert.AssertDriverContentsWithFrameAre (expected, output); } } diff --git a/UnitTests/Views/ShortcutTests.cs b/Tests/UnitTests/Views/ShortcutTests.cs similarity index 99% rename from UnitTests/Views/ShortcutTests.cs rename to Tests/UnitTests/Views/ShortcutTests.cs index bc2ba9645..e9c0edfeb 100644 --- a/UnitTests/Views/ShortcutTests.cs +++ b/Tests/UnitTests/Views/ShortcutTests.cs @@ -1,4 +1,5 @@ using JetBrains.Annotations; +using UnitTests; namespace Terminal.Gui.ViewsTests; diff --git a/UnitTests/Views/SliderTests.cs b/Tests/UnitTests/Views/SliderTests.cs similarity index 100% rename from UnitTests/Views/SliderTests.cs rename to Tests/UnitTests/Views/SliderTests.cs diff --git a/UnitTests/Views/SpinnerViewTests.cs b/Tests/UnitTests/Views/SpinnerViewTests.cs similarity index 83% rename from UnitTests/Views/SpinnerViewTests.cs rename to Tests/UnitTests/Views/SpinnerViewTests.cs index 0af6f0b50..bd2a116cd 100644 --- a/UnitTests/Views/SpinnerViewTests.cs +++ b/Tests/UnitTests/Views/SpinnerViewTests.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -56,14 +58,14 @@ public class SpinnerViewTests view.Draw (); var expected = "|"; - TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, output); view.AdvanceAnimation (); View.SetClipToScreen (); view.Draw (); expected = "/"; - TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, output); Application.Top.Dispose (); } @@ -75,19 +77,19 @@ public class SpinnerViewTests view.Draw (); var expected = @"\"; - TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, output); view.AdvanceAnimation (); view.Draw (); expected = @"\"; - TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, output); view.AdvanceAnimation (); view.Draw (); expected = @"\"; - TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + DriverAssert.AssertDriverContentsWithFrameAre (expected, output); // BUGBUG: Disabled due to xunit error //Task.Delay (400).Wait (); @@ -96,7 +98,7 @@ public class SpinnerViewTests //view.Draw (); //expected = "|"; - //TestHelpers.AssertDriverContentsWithFrameAre (expected, output); + //DriverAsserts.AssertDriverContentsWithFrameAre (expected, output); Application.Top.Dispose (); } diff --git a/UnitTests/Views/StatusBarTests.cs b/Tests/UnitTests/Views/StatusBarTests.cs similarity index 99% rename from UnitTests/Views/StatusBarTests.cs rename to Tests/UnitTests/Views/StatusBarTests.cs index 062a1e396..15ad8309b 100644 --- a/UnitTests/Views/StatusBarTests.cs +++ b/Tests/UnitTests/Views/StatusBarTests.cs @@ -1,4 +1,5 @@ -using Xunit.Abstractions; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; public class StatusBarTests diff --git a/UnitTests/Views/TabTests.cs b/Tests/UnitTests/Views/TabTests.cs similarity index 100% rename from UnitTests/Views/TabTests.cs rename to Tests/UnitTests/Views/TabTests.cs diff --git a/UnitTests/Views/TabViewTests.cs b/Tests/UnitTests/Views/TabViewTests.cs similarity index 94% rename from UnitTests/Views/TabViewTests.cs rename to Tests/UnitTests/Views/TabViewTests.cs index ac12a5556..0ec61e4ff 100644 --- a/UnitTests/Views/TabViewTests.cs +++ b/Tests/UnitTests/Views/TabViewTests.cs @@ -1,4 +1,6 @@ using System.Globalization; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -103,7 +105,7 @@ public class TabViewTests (ITestOutputHelper output) View tabRow = tv.Subviews [0]; Assert.Equal ("TabRow", tabRow.GetType ().Name); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ╭────┬────╮ │Tab1│Tab2│ @@ -186,7 +188,7 @@ public class TabViewTests (ITestOutputHelper output) View tabRow = tv.Subviews [0]; Assert.Equal ("TabRow", tabRow.GetType ().Name); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ╭────╮ │Tab1│ @@ -223,7 +225,7 @@ public class TabViewTests (ITestOutputHelper output) Assert.Equal (tab2, newChanged); Assert.Equal (tab2, tv.SelectedTab); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ╭────╮ │Tab2│ @@ -243,7 +245,7 @@ public class TabViewTests (ITestOutputHelper output) Assert.Equal (tab1, newChanged); Assert.Equal (tab1, tv.SelectedTab); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ╭────╮ │Tab1│ @@ -274,7 +276,7 @@ public class TabViewTests (ITestOutputHelper output) View tabRow = tv.Subviews [0]; Assert.Equal ("TabRow", tabRow.GetType ().Name); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ┌───────┐ │╭────╮ │ @@ -313,7 +315,7 @@ public class TabViewTests (ITestOutputHelper output) Assert.Equal (tab2, newChanged); Assert.Equal (tab2, tv.SelectedTab); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ┌───────┐ │╭────╮ │ @@ -335,7 +337,7 @@ public class TabViewTests (ITestOutputHelper output) Assert.Equal (tab1, newChanged); Assert.Equal (tab1, tv.SelectedTab); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ┌───────┐ │╭────╮ │ @@ -595,7 +597,7 @@ public class TabViewTests (ITestOutputHelper output) tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ││ │╰► @@ -619,7 +621,7 @@ public class TabViewTests (ITestOutputHelper output) tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" │T│ │ ╰► @@ -649,7 +651,7 @@ public class TabViewTests (ITestOutputHelper output) tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" │12│13│ │ ╰──┴──╮ @@ -666,7 +668,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" │12│13│ ├──╯ ╰──╮ @@ -685,7 +687,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" │1234567│ │ ╰► @@ -701,7 +703,7 @@ public class TabViewTests (ITestOutputHelper output) tv.Layout (); View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" │13│ ◄ ╰─────╮ @@ -718,7 +720,7 @@ public class TabViewTests (ITestOutputHelper output) tv.Layout (); View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" │abcdefg│ ◄ ╰╮ @@ -742,7 +744,7 @@ public class TabViewTests (ITestOutputHelper output) tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─┐ │h│ @@ -766,7 +768,7 @@ public class TabViewTests (ITestOutputHelper output) tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──┐ │hi│ @@ -795,7 +797,7 @@ public class TabViewTests (ITestOutputHelper output) tv.Layout (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │hi │ @@ -812,7 +814,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │hi2 │ @@ -832,7 +834,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │hi │ @@ -849,7 +851,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │hi2 │ @@ -867,7 +869,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │hi2 │ @@ -889,7 +891,7 @@ public class TabViewTests (ITestOutputHelper output) tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ╭╮ ││ @@ -912,7 +914,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ╭─╮ │T│ @@ -938,7 +940,7 @@ public class TabViewTests (ITestOutputHelper output) tv.Layout (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ╭──┬──╮ │12│13│ @@ -954,7 +956,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ╭──┬──╮ │12│13│ @@ -974,7 +976,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ╭───────╮ │1234567│ @@ -991,7 +993,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ╭──╮ │13│ @@ -1009,7 +1011,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ╭───────╮ │abcdefg│ @@ -1035,7 +1037,7 @@ public class TabViewTests (ITestOutputHelper output) tv.Layout (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ╭────╮ │Tab0│ @@ -1051,7 +1053,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ╭──────────────╮ │Les Misérables│ @@ -1075,7 +1077,7 @@ public class TabViewTests (ITestOutputHelper output) tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─┐ │h│ @@ -1099,7 +1101,7 @@ public class TabViewTests (ITestOutputHelper output) tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──┐ │hi│ @@ -1128,7 +1130,7 @@ public class TabViewTests (ITestOutputHelper output) tv.Layout (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │hi │ @@ -1146,7 +1148,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │hi │ @@ -1163,7 +1165,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │hi2 │ @@ -1181,7 +1183,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌────────┐ │hi2 │ @@ -1209,7 +1211,7 @@ public class TabViewTests (ITestOutputHelper output) tv.Layout (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────┐ │hi │ @@ -1225,7 +1227,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────┐ │hi2 │ @@ -1322,7 +1324,7 @@ public class TabViewTests (ITestOutputHelper output) Assert.Equal (tab1, tv.SelectedTab); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ╭────┬────┬────╮ │Tab1│Tab2│Tab3│ @@ -1339,7 +1341,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ╭────┬────┬────╮ │Tab1│Tab2│Tab3│ @@ -1356,7 +1358,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ╭────┬────┬────╮ │Tab1│Tab2│Tab3│ @@ -1389,7 +1391,7 @@ public class TabViewTests (ITestOutputHelper output) Assert.Equal (tab1, tv.SelectedTab); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ┌──────────────────┐ │hi │ @@ -1406,7 +1408,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────┐ │hi2 │ @@ -1423,7 +1425,7 @@ public class TabViewTests (ITestOutputHelper output) View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────┐ │hi3 │ diff --git a/UnitTests/Views/TableViewTests.cs b/Tests/UnitTests/Views/TableViewTests.cs similarity index 95% rename from UnitTests/Views/TableViewTests.cs rename to Tests/UnitTests/Views/TableViewTests.cs index 54793cf15..63dc829db 100644 --- a/UnitTests/Views/TableViewTests.cs +++ b/Tests/UnitTests/Views/TableViewTests.cs @@ -2,6 +2,8 @@ using System.Collections; using System.Data; using System.Globalization; using System.Reflection; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -83,7 +85,7 @@ public class TableViewTests (ITestOutputHelper output) │Hello│ │f │ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); var color = new Attribute (Color.Magenta, Color.BrightBlue); @@ -115,7 +117,7 @@ public class TableViewTests (ITestOutputHelper output) 00000000000000000000 01111101101111111110 "; - TestHelpers.AssertDriverAttributesAre (expected, output, Application.Driver, tv.ColorScheme.Normal, color); + DriverAssert.AssertDriverAttributesAre (expected, output, Application.Driver, tv.ColorScheme.Normal, color); top.Dispose (); } @@ -452,7 +454,7 @@ public class TableViewTests (ITestOutputHelper output) │1│2 │ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // get a style for the long column ColumnStyle style = tableView.Style.GetOrCreateColumnStyle (2); @@ -470,7 +472,7 @@ public class TableViewTests (ITestOutputHelper output) │1│2│aaaaaaaaaaaaaaaaaaa│ │1│2│aaa │ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // revert the style change style.MaxWidth = TableView.DefaultMaxCellWidth; @@ -489,7 +491,7 @@ public class TableViewTests (ITestOutputHelper output) │1│2│aaaaaaaaaaaaa... │ │1│2│aaa │ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // revert style change style.RepresentationGetter = null; @@ -516,7 +518,7 @@ public class TableViewTests (ITestOutputHelper output) │1│2│aaaaaaaaaaaaaaaaaaa│ │1│2│aaa │ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // Now test making the width too small for the MinAcceptableWidth // the Column won't fit so should not be rendered @@ -534,7 +536,7 @@ public class TableViewTests (ITestOutputHelper output) │1│2 │ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // setting width to 10 leaves just enough space for the column to // meet MinAcceptableWidth of 5. Column width includes terminator line @@ -549,7 +551,7 @@ public class TableViewTests (ITestOutputHelper output) │1│2│aaaa│ │1│2│aaa │ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); tableView.Viewport = new (0, 0, 25, 5); @@ -570,7 +572,7 @@ public class TableViewTests (ITestOutputHelper output) │1 │2 │aaaaaaaaaa│ │ │1 │2 │aaa │ │ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // MaxCellWidth limits MinCellWidth tableView.MaxCellWidth = 5; @@ -586,7 +588,7 @@ public class TableViewTests (ITestOutputHelper output) │1 │2 │aaaaa│ │ │1 │2 │aaa │ │ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); top.Dispose (); Application.Shutdown (); @@ -716,7 +718,7 @@ public class TableViewTests (ITestOutputHelper output) ├─┼─┼─► │1│2│3│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // Scroll right tableView.NewKeyDownEvent (new () { KeyCode = KeyCode.CursorRight }); @@ -732,7 +734,7 @@ public class TableViewTests (ITestOutputHelper output) ◄─┼─┼─► │2│3│4│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // Scroll right twice more (to end of columns) tableView.NewKeyDownEvent (new () { KeyCode = KeyCode.CursorRight }); @@ -747,7 +749,7 @@ public class TableViewTests (ITestOutputHelper output) ◄─┼─┼─┤ │4│5│6│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // Shutdown must be called to safely clean up Application if Init has been called Application.Shutdown (); @@ -793,7 +795,7 @@ public class TableViewTests (ITestOutputHelper output) │A│B│C│ │1│2│3│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // Scroll right tableView.NewKeyDownEvent (new () { KeyCode = KeyCode.CursorRight }); @@ -812,7 +814,7 @@ public class TableViewTests (ITestOutputHelper output) │B│C│D│ │2│3│4│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] @@ -853,7 +855,7 @@ public class TableViewTests (ITestOutputHelper output) │A│B│C│ │1│2│3│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // Scroll right tableView.NewKeyDownEvent (new () { KeyCode = KeyCode.CursorRight }); @@ -871,7 +873,7 @@ public class TableViewTests (ITestOutputHelper output) │D│E│F│ │4│5│6│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } @@ -959,7 +961,7 @@ public class TableViewTests (ITestOutputHelper output) 1 2 3 ───────"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] @@ -989,7 +991,7 @@ public class TableViewTests (ITestOutputHelper output) │1│2│3│ └─┴─┴─┘"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] @@ -1076,7 +1078,7 @@ public class TableViewTests (ITestOutputHelper output) ├─┼─┤ │1│2│ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); var expectedColors = @" 00000 @@ -1085,7 +1087,7 @@ public class TableViewTests (ITestOutputHelper output) 01020 "; - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( expectedColors, output, Application.Driver, @@ -1110,7 +1112,7 @@ public class TableViewTests (ITestOutputHelper output) ├─┼─┤ │1│5│ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); expectedColors = @" 00000 @@ -1122,7 +1124,7 @@ public class TableViewTests (ITestOutputHelper output) // now we only see 2 colors used (the selected cell color and Normal // cellHighlight should no longer be used because the delegate returned null // (now that the cell value is 5 - which does not match the conditional) - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( expectedColors, output, Application.Driver, @@ -1172,7 +1174,7 @@ public class TableViewTests (ITestOutputHelper output) ├─┼─┤ │1│2│ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); var expectedColors = @" 00000 @@ -1181,7 +1183,7 @@ public class TableViewTests (ITestOutputHelper output) 21222 "; - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( expectedColors, output, Application.Driver, @@ -1205,7 +1207,7 @@ public class TableViewTests (ITestOutputHelper output) ├─┼─┤ │1│5│ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); expectedColors = @" 00000 @@ -1217,7 +1219,7 @@ public class TableViewTests (ITestOutputHelper output) // now we only see 2 colors used (the selected cell color and Normal // rowHighlight should no longer be used because the delegate returned null // (now that the cell value is 5 - which does not match the conditional) - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( expectedColors, output, Application.Driver, @@ -1254,7 +1256,7 @@ public class TableViewTests (ITestOutputHelper output) ├─┼─┤ │1│2│ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); var expectedColors = @" 00000 @@ -1263,7 +1265,7 @@ public class TableViewTests (ITestOutputHelper output) 01000 "; - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( expectedColors, output, Application.Driver, @@ -1297,7 +1299,7 @@ public class TableViewTests (ITestOutputHelper output) ├─┼─┤ │1│2│ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); var expectedColors = @" 00000 @@ -1309,7 +1311,7 @@ public class TableViewTests (ITestOutputHelper output) var invertFocus = new Attribute (tv.ColorScheme.Focus.Background, tv.ColorScheme.Focus.Foreground); var invertHotNormal = new Attribute (tv.ColorScheme.HotNormal.Background, tv.ColorScheme.HotNormal.Foreground); - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( expectedColors, output, Application.Driver, @@ -1336,7 +1338,7 @@ public class TableViewTests (ITestOutputHelper output) ├─┼─┼────┤ │1│2│ │ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } @@ -1360,7 +1362,7 @@ public class TableViewTests (ITestOutputHelper output) ├─┼─┤ │1│2│ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] @@ -1380,7 +1382,7 @@ public class TableViewTests (ITestOutputHelper output) ├─┼──────┤ │1│2 │ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] @@ -1404,7 +1406,7 @@ public class TableViewTests (ITestOutputHelper output) ├─┼─► │1│2│ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] @@ -1423,7 +1425,7 @@ public class TableViewTests (ITestOutputHelper output) var expected = @" │1│2│ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] @@ -1443,7 +1445,7 @@ public class TableViewTests (ITestOutputHelper output) ┌─┬─┐ │1│2│ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] @@ -1466,7 +1468,7 @@ public class TableViewTests (ITestOutputHelper output) ├─┼─► │1│2│ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] @@ -1592,7 +1594,7 @@ public class TableViewTests (ITestOutputHelper output) │trap │p │ │zoo │o │"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); Assert.Equal (0, tv.SelectedRow); @@ -1672,7 +1674,7 @@ public class TableViewTests (ITestOutputHelper output) │1│2│3│ │1│2│3│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // ---------------- X=0 ----------------------- // click is before first cell @@ -1750,7 +1752,7 @@ public class TableViewTests (ITestOutputHelper output) │1│2│3│ │1│2│3│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); int? col; // ---------------- X=0 ----------------------- @@ -1862,13 +1864,13 @@ public class TableViewTests (ITestOutputHelper output) "; tableView.Draw (); - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // expect behavior to match when Table is null tableView.Table = null; tableView.Draw (); - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [InlineData (true)] @@ -1916,7 +1918,7 @@ public class TableViewTests (ITestOutputHelper output) ├─┼─┼─► │2│3│4│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [InlineData (true)] @@ -1968,7 +1970,7 @@ public class TableViewTests (ITestOutputHelper output) ◄─┼─┼─► │2│3│4│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // but if E and F are invisible so we shouldn't show right tableView.Style.GetOrCreateColumnStyle (4).Visible = false; @@ -1983,7 +1985,7 @@ public class TableViewTests (ITestOutputHelper output) View.SetClipToScreen (); tableView.Draw (); - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // now also A is invisible so we cannot scroll in either direction tableView.Style.GetOrCreateColumnStyle (0).Visible = false; @@ -1997,7 +1999,7 @@ public class TableViewTests (ITestOutputHelper output) View.SetClipToScreen (); tableView.Draw (); - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] @@ -2020,7 +2022,7 @@ public class TableViewTests (ITestOutputHelper output) ├─┼─┼─► │1│2│3│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // but if DEF are invisible we shouldn't be showing the indicator tableView.Style.GetOrCreateColumnStyle (3).Visible = false; @@ -2035,7 +2037,7 @@ public class TableViewTests (ITestOutputHelper output) tableView.SetNeedsDraw (); View.SetClipToScreen (); tableView.Draw (); - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] @@ -2115,7 +2117,7 @@ public class TableViewTests (ITestOutputHelper output) │A│C│D│ │1│3│4│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] @@ -2239,7 +2241,7 @@ public class TableViewTests (ITestOutputHelper output) │Int32 │System │System.ValueType │ │Single│System │System.ValueType │"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] @@ -2276,7 +2278,7 @@ public class TableViewTests (ITestOutputHelper output) │1│2│3│ └─┴─┴─┘"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); Attribute normal = tv.ColorScheme.Normal; tv.ColorScheme = new (tv.ColorScheme) { Focus = new (Color.Magenta, Color.White) }; @@ -2295,7 +2297,7 @@ public class TableViewTests (ITestOutputHelper output) 0101010 0000000"; - TestHelpers.AssertDriverAttributesAre (expected, output, Application.Driver, normal, focus); + DriverAssert.AssertDriverAttributesAre (expected, output, Application.Driver, normal, focus); } [Fact] @@ -2330,7 +2332,7 @@ A B C 1 2 3 1 2 3"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); Attribute normal = tv.ColorScheme.Normal; tv.ColorScheme = new (tv.ColorScheme) { Focus = new (Color.Magenta, Color.White) }; @@ -2348,7 +2350,7 @@ A B C 000000 111111"; - TestHelpers.AssertDriverAttributesAre (expected, output, Application.Driver, normal, focus); + DriverAssert.AssertDriverAttributesAre (expected, output, Application.Driver, normal, focus); } [Fact] @@ -2384,7 +2386,7 @@ A B C │1│2│3│ └─┴─┴─┘"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); Attribute normal = tv.ColorScheme.Normal; tv.ColorScheme = new (tv.ColorScheme) { Focus = new (Color.Magenta, Color.White) }; @@ -2404,7 +2406,7 @@ A B C 0111110 0000000"; - TestHelpers.AssertDriverAttributesAre (expected, output, Application.Driver, normal, focus); + DriverAssert.AssertDriverAttributesAre (expected, output, Application.Driver, normal, focus); } [Theory] @@ -2488,7 +2490,7 @@ A B C } } - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [InlineData (true)] @@ -2599,7 +2601,7 @@ A B C │☐│Tibbles│Cat │ │☐│Ripper │Dog │"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); #pragma warning disable xUnit2029 Assert.Empty (pets.Where (p => p.IsPicked)); @@ -2621,7 +2623,7 @@ A B C │☐│Tibbles│Cat │ │☐│Ripper │Dog │"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); tv.NewKeyDownEvent (Key.CursorDown); tv.NewKeyDownEvent (Key.Space); @@ -2641,7 +2643,7 @@ A B C │☑│Tibbles│Cat │ │☐│Ripper │Dog │"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); tv.NewKeyDownEvent (Key.CursorUp); tv.NewKeyDownEvent (Key.Space); @@ -2661,7 +2663,7 @@ A B C │☑│Tibbles│Cat │ │☐│Ripper │Dog │"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] @@ -2695,7 +2697,7 @@ A B C tv.NewKeyDownEvent (Key.Space); // Because at least 1 of the rows is not yet ticked we toggle them all to ticked - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); Assert.Contains (0, wrapper.CheckedRows); Assert.Contains (1, wrapper.CheckedRows); Assert.Contains (2, wrapper.CheckedRows); @@ -2712,7 +2714,7 @@ A B C │☑│1│2│ │☑│1│2│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // Untoggle the top 2 tv.NewKeyDownEvent (Key.Space); @@ -2727,7 +2729,7 @@ A B C │☐│1│2│ │☐│1│2│ │☑│1│2│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); Assert.Single (wrapper.CheckedRows, 2); } @@ -2757,7 +2759,7 @@ A B C │☑│1│2│ │☑│1│2│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); Assert.Contains (0, wrapper.CheckedRows); Assert.Contains (1, wrapper.CheckedRows); Assert.Contains (2, wrapper.CheckedRows); @@ -2777,7 +2779,7 @@ A B C │☐│1│2│ │☐│1│2│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); Assert.Empty (wrapper.CheckedRows); } @@ -2819,7 +2821,7 @@ A B C │☑│Tibbles│Cat │ │☑│Ripper │Dog │"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); tv.NewKeyDownEvent (Key.Space); @@ -2840,7 +2842,7 @@ A B C │☐│Ripper │Dog │ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] @@ -2865,7 +2867,7 @@ A B C │☐│1│2│ │☐│1│2│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); Assert.Empty (wrapper.CheckedRows); @@ -2885,7 +2887,7 @@ A B C │☐│1│2│ │☐│1│2│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); tv.NewKeyDownEvent (Key.CursorDown); tv.NewKeyDownEvent (Key.Space); @@ -2905,7 +2907,7 @@ A B C │☑│1│2│ │☐│1│2│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); // untoggle top one tv.NewKeyDownEvent (Key.CursorUp); @@ -2924,7 +2926,7 @@ A B C │☑│1│2│ │☐│1│2│"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] @@ -2958,7 +2960,7 @@ A B C │○│Ripper │Dog │ "; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); #pragma warning disable xUnit2029 Assert.Empty (pets.Where (p => p.IsPicked)); @@ -2980,7 +2982,7 @@ A B C │○│Tibbles│Cat │ │○│Ripper │Dog │"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); tv.NewKeyDownEvent (Key.CursorDown); tv.NewKeyDownEvent (Key.Space); @@ -3001,7 +3003,7 @@ A B C │◉│Tibbles│Cat │ │○│Ripper │Dog │"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); tv.NewKeyDownEvent (Key.CursorUp); tv.NewKeyDownEvent (Key.Space); @@ -3022,7 +3024,7 @@ A B C │○│Tibbles│Cat │ │○│Ripper │Dog │"; - TestHelpers.AssertDriverContentsAre (expected, output); + DriverAssert.AssertDriverContentsAre (expected, output); } [Fact] diff --git a/UnitTests/Views/TextFieldTests.cs b/Tests/UnitTests/Views/TextFieldTests.cs similarity index 98% rename from UnitTests/Views/TextFieldTests.cs rename to Tests/UnitTests/Views/TextFieldTests.cs index 03e9c1d39..a80e67961 100644 --- a/UnitTests/Views/TextFieldTests.cs +++ b/Tests/UnitTests/Views/TextFieldTests.cs @@ -1,6 +1,8 @@ using System.Globalization; using System.Reflection; using System.Text; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -17,7 +19,7 @@ public class TextFieldTests (ITestOutputHelper output) tf.Layout (); tf.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ắ", output @@ -27,7 +29,7 @@ public class TextFieldTests (ITestOutputHelper output) tf.Layout (); tf.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ắ", output @@ -37,7 +39,7 @@ public class TextFieldTests (ITestOutputHelper output) tf.Layout (); tf.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ắ", output @@ -47,7 +49,7 @@ public class TextFieldTests (ITestOutputHelper output) tf.Layout (); tf.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ắ", output @@ -170,7 +172,7 @@ public class TextFieldTests (ITestOutputHelper output) Assert.False (tf.HasFocus); tf.Draw (); - TestHelpers.AssertDriverContentsAre (expectedRender, output); + DriverAssert.AssertDriverContentsAre (expectedRender, output); Application.Top.Dispose (); } @@ -190,7 +192,7 @@ public class TextFieldTests (ITestOutputHelper output) Assert.False (tf.HasFocus); tf.Draw (); - TestHelpers.AssertDriverContentsAre ("Misérables", output); + DriverAssert.AssertDriverContentsAre ("Misérables", output); Application.Top.Dispose (); } @@ -203,7 +205,7 @@ public class TextFieldTests (ITestOutputHelper output) TextField tf = GetTextFieldsInView (); tf.Draw (); - TestHelpers.AssertDriverContentsAre ("", output); + DriverAssert.AssertDriverContentsAre ("", output); tf.Caption = "Enter txt"; Application.Driver?.SendKeys ('\t', ConsoleKey.Tab, false, false, false); @@ -212,13 +214,13 @@ public class TextFieldTests (ITestOutputHelper output) Assert.False (tf.HasFocus); View.SetClipToScreen (); tf.Draw (); - TestHelpers.AssertDriverContentsAre ("Enter txt", output); + DriverAssert.AssertDriverContentsAre ("Enter txt", output); // but disapear when text is added tf.Text = content; View.SetClipToScreen (); tf.Draw (); - TestHelpers.AssertDriverContentsAre (content, output); + DriverAssert.AssertDriverContentsAre (content, output); Application.Top.Dispose (); } @@ -229,21 +231,21 @@ public class TextFieldTests (ITestOutputHelper output) TextField tf = GetTextFieldsInView (); tf.Draw (); - TestHelpers.AssertDriverContentsAre ("", output); + DriverAssert.AssertDriverContentsAre ("", output); // Caption has no effect when focused tf.Caption = "Enter txt"; Assert.True (tf.HasFocus); View.SetClipToScreen (); tf.Draw (); - TestHelpers.AssertDriverContentsAre ("", output); + DriverAssert.AssertDriverContentsAre ("", output); Application.Driver?.SendKeys ('\t', ConsoleKey.Tab, false, false, false); Assert.False (tf.HasFocus); View.SetClipToScreen (); tf.Draw (); - TestHelpers.AssertDriverContentsAre ("Enter txt", output); + DriverAssert.AssertDriverContentsAre ("Enter txt", output); Application.Top.Dispose (); } @@ -1082,7 +1084,7 @@ public class TextFieldTests (ITestOutputHelper output) }; // TAB to jump between text fields. - TestHelpers.AssertDriverAttributesAre ("0000000", output, Application.Driver, attributes); + DriverAssert.AssertDriverAttributesAre ("0000000", output, Application.Driver, attributes); // Cursor is at the end Assert.Equal (32, _textField.CursorPosition); @@ -1093,7 +1095,7 @@ public class TextFieldTests (ITestOutputHelper output) Assert.Equal (4, _textField.CursorPosition); // TAB to jump between text fields. - TestHelpers.AssertDriverAttributesAre ("1111000", output, Application.Driver, attributes); + DriverAssert.AssertDriverAttributesAre ("1111000", output, Application.Driver, attributes); top.Dispose (); } @@ -1980,7 +1982,7 @@ public class TextFieldTests (ITestOutputHelper output) tf.SetRelativeLayout (new (100, 100)); tf.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Les Misérables", output @@ -1989,7 +1991,7 @@ Les Misérables", tf.Text = "Les Mise" + char.ConvertFromUtf32 (int.Parse ("0301", NumberStyles.HexNumber)) + "rables"; tf.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Les Misérables", output @@ -2000,7 +2002,7 @@ Les Misérables", View.SetClipToScreen (); tf.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Les Miśerables", output @@ -2173,7 +2175,7 @@ Les Miśerables", tf.EndInit (); tf.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ("\u241b", output); + DriverAssert.AssertDriverContentsWithFrameAre ("\u241b", output); tf.Dispose (); } diff --git a/UnitTests/Views/TextValidateFieldTests.cs b/Tests/UnitTests/Views/TextValidateFieldTests.cs similarity index 100% rename from UnitTests/Views/TextValidateFieldTests.cs rename to Tests/UnitTests/Views/TextValidateFieldTests.cs diff --git a/UnitTests/Views/TextViewTests.cs b/Tests/UnitTests/Views/TextViewTests.cs similarity index 99% rename from UnitTests/Views/TextViewTests.cs rename to Tests/UnitTests/Views/TextViewTests.cs index ab04015ec..aed7bd09e 100644 --- a/UnitTests/Views/TextViewTests.cs +++ b/Tests/UnitTests/Views/TextViewTests.cs @@ -2,6 +2,8 @@ using System.Reflection; using System.Text; using System.Text.RegularExpressions; using Xunit.Abstractions; +using UnitTests; +using UnitTests; namespace Terminal.Gui.ViewsTests; @@ -727,7 +729,7 @@ public class TextViewTests Assert.False (tv.WordWrap); Assert.Equal (Point.Empty, tv.CursorPosition); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This is the first line. This is the second line. @@ -741,7 +743,7 @@ This is the second line. Application.RunIteration (ref rs); Assert.Equal (new Point (2, 0), tv.CursorPosition); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Ths is the first line. This is the second line. @@ -755,7 +757,7 @@ This is the second line. Application.RunIteration (ref rs); Assert.Equal (new Point (22, 0), tv.CursorPosition); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Ths is the first line.This is the second line. ", @@ -766,7 +768,7 @@ Ths is the first line.This is the second line. Application.RunIteration (ref rs); Assert.Equal (new Point (0, 1), tv.CursorPosition); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Ths is the first line. This is the second line. @@ -801,7 +803,7 @@ This is the second line. Assert.True (tv.WordWrap); Assert.Equal (Point.Empty, tv.CursorPosition); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This is the first line. This is the second line. @@ -815,7 +817,7 @@ This is the second line. Application.RunIteration (ref rs); Assert.Equal (new Point (2, 0), tv.CursorPosition); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Ths is the first line. This is the second line. @@ -829,7 +831,7 @@ This is the second line. Application.RunIteration (ref rs); Assert.Equal (new Point (22, 0), tv.CursorPosition); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Ths is the first line.This is the second line. ", @@ -840,7 +842,7 @@ Ths is the first line.This is the second line. Application.RunIteration (ref rs); Assert.Equal (new Point (0, 1), tv.CursorPosition); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Ths is the first line. This is the second line. @@ -875,7 +877,7 @@ This is the second line. Assert.False (tv.WordWrap); Assert.Equal (Point.Empty, tv.CursorPosition); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This is the first line. This is the second line. @@ -889,7 +891,7 @@ This is the second line. Application.RunIteration (ref rs); Assert.Equal (new Point (2, 0), tv.CursorPosition); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Ths is the first line. This is the second line. @@ -903,7 +905,7 @@ This is the second line. Application.RunIteration (ref rs); Assert.Equal (new Point (22, 0), tv.CursorPosition); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Ths is the first line.This is the second line. ", @@ -914,7 +916,7 @@ Ths is the first line.This is the second line. Application.RunIteration (ref rs); Assert.Equal (new Point (0, 1), tv.CursorPosition); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Ths is the first line. This is the second line. @@ -948,7 +950,7 @@ This is the second line. Assert.True (tv.WordWrap); Assert.Equal (Point.Empty, tv.CursorPosition); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This is the first line. This is the second line. @@ -962,7 +964,7 @@ This is the second line. Application.RunIteration (ref rs); Assert.Equal (new Point (2, 0), tv.CursorPosition); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Ths is the first line. This is the second line. @@ -976,7 +978,7 @@ This is the second line. Application.RunIteration (ref rs); Assert.Equal (new Point (22, 0), tv.CursorPosition); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Ths is the first line.This is the second line. ", @@ -987,7 +989,7 @@ Ths is the first line.This is the second line. Application.RunIteration (ref rs); Assert.Equal (new Point (0, 1), tv.CursorPosition); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Ths is the first line. This is the second line. @@ -6366,7 +6368,7 @@ This is the second line. }; // TAB to jump between text fields. - TestHelpers.AssertDriverAttributesAre ("0000000", _output, Application.Driver, attributes); + DriverAssert.AssertDriverAttributesAre ("0000000", _output, Application.Driver, attributes); Assert.Empty (_textView.SelectedCellsList); _textView.NewKeyDownEvent (Key.CursorRight.WithCtrl.WithShift); @@ -6375,7 +6377,7 @@ This is the second line. Assert.Equal (new Point (4, 0), _textView.CursorPosition); // TAB to jump between text fields. - TestHelpers.AssertDriverAttributesAre ("1111000", _output, Application.Driver, attributes); + DriverAssert.AssertDriverAttributesAre ("1111000", _output, Application.Driver, attributes); Assert.Equal ("TAB ", Cell.ToString (_textView.SelectedCellsList [^1])); top.Dispose (); } @@ -6743,7 +6745,7 @@ This is the second line. Assert.Equal ("\tTAB to jump between text fields.", _textView.Text); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" TAB to jump between text field", _output @@ -6752,7 +6754,7 @@ TAB to jump between text field", _textView.TabWidth = 4; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" TAB to jump between text f", _output @@ -6763,7 +6765,7 @@ TAB to jump between text field", Assert.True (_textView.NeedsDraw); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" TAB to jump between text field", _output @@ -6830,7 +6832,7 @@ TAB to jump between text field", Application.LayoutAndDraw (); //this passes - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre ( + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─────────────┐ │ │ @@ -6858,7 +6860,7 @@ TAB to jump between text field", tv.InsertText ("\r\naaa\r\nbbb"); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─────────────┐ │ │ @@ -6908,7 +6910,7 @@ TAB to jump between text field", Application.LayoutAndDraw (); //this passes - Rectangle pos = TestHelpers.AssertDriverContentsWithFrameAre ( + Rectangle pos = DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─────────────┐ │ │ @@ -6936,7 +6938,7 @@ TAB to jump between text field", tv.InsertText ("\naaa\nbbb"); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌─────────────┐ │ │ @@ -7009,7 +7011,7 @@ TAB to jump between text field", Assert.Equal (Point.Empty, tv.CursorPosition); Assert.Equal (Point.Empty, cp); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This is the first line. This is the second line. @@ -7023,7 +7025,7 @@ This is the second line. Assert.Equal (new Point (12, 0), tv.CursorPosition); Assert.Equal (new Point (12, 0), cp); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This is the first line. This is the second line. @@ -7037,7 +7039,7 @@ This is the second line. Assert.Equal (new Point (4, 2), tv.CursorPosition); Assert.Equal (new Point (12, 0), cp); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This is @@ -7060,7 +7062,7 @@ line. Assert.Equal (new Point (0, 3), tv.CursorPosition); Assert.Equal (new Point (12, 0), cp); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This is @@ -7083,7 +7085,7 @@ line. Assert.Equal (new Point (1, 3), tv.CursorPosition); Assert.Equal (new Point (13, 0), cp); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This is @@ -7106,7 +7108,7 @@ line. Assert.Equal (new Point (0, 3), tv.CursorPosition); Assert.Equal (new Point (13, 0), cp); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This is @@ -8181,7 +8183,7 @@ line. Assert.Equal (Point.Empty, tv.CursorPosition); Assert.Equal (0, tv.LeftColumn); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" aaaa ", @@ -8193,7 +8195,7 @@ aaaa Application.LayoutAndDraw (); Assert.Equal (0, tv.LeftColumn); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" aaa ", @@ -8204,7 +8206,7 @@ aaa Application.LayoutAndDraw (); Assert.Equal (0, tv.LeftColumn); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" aa ", @@ -8215,7 +8217,7 @@ aa Application.LayoutAndDraw (); Assert.Equal (0, tv.LeftColumn); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" a ", @@ -8226,7 +8228,7 @@ a Application.LayoutAndDraw (); Assert.Equal (0, tv.LeftColumn); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ", @@ -8237,7 +8239,7 @@ a Application.LayoutAndDraw (); Assert.Equal (0, tv.LeftColumn); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ", @@ -8260,7 +8262,7 @@ a Assert.True (_textView.WordWrap); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" Line 1. Line 2.", @@ -8272,13 +8274,13 @@ Line 2.", Assert.True (_textView.NewKeyDownEvent (new Key (del))); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ("Line 2.", _output); + DriverAssert.AssertDriverContentsWithFrameAre ("Line 2.", _output); Assert.True (_textView.NewKeyDownEvent (Key.H.WithShift)); Assert.NotEqual (Rectangle.Empty, _textView._needsDrawRect); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" H Line 2.", @@ -8335,7 +8337,7 @@ Line 2.", top.Layout (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This is the first @@ -8355,7 +8357,7 @@ line. View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This is the first @@ -8441,7 +8443,7 @@ line. top.Layout (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This is the @@ -8860,7 +8862,7 @@ line. tv.EndInit (); tv.Draw (); - TestHelpers.AssertDriverContentsWithFrameAre ("\u241b", _output); + DriverAssert.AssertDriverContentsWithFrameAre ("\u241b", _output); tv.Dispose (); } @@ -8916,7 +8918,7 @@ line. Application.Begin (top); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This is the first line. This is the second line.", @@ -8928,7 +8930,7 @@ This is the second line.", tv.WordWrap = true; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" This is the @@ -8978,7 +8980,7 @@ Base Dialog Menu Error "; - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); + DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); Attribute [] attributes = { @@ -9007,12 +9009,12 @@ Error "; 2222225555 3333555555 4444455555"; - TestHelpers.AssertDriverAttributesAre (expectedColor, _output, Application.Driver, attributes); + DriverAssert.AssertDriverAttributesAre (expectedColor, _output, Application.Driver, attributes); tv.WordWrap = true; Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); - TestHelpers.AssertDriverAttributesAre (expectedColor, _output, Application.Driver, attributes); + DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); + DriverAssert.AssertDriverAttributesAre (expectedColor, _output, Application.Driver, attributes); tv.CursorPosition = new (6, 2); tv.SelectionStartColumn = 0; @@ -9032,7 +9034,7 @@ Menu ErTopLevel Base Dialogror "; - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); + DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); expectedColor = @" 0000000055 @@ -9042,7 +9044,7 @@ Dialogror "; 4400000000 1111555555 2222224445"; - TestHelpers.AssertDriverAttributesAre (expectedColor, _output, Application.Driver, attributes); + DriverAssert.AssertDriverAttributesAre (expectedColor, _output, Application.Driver, attributes); tv.Undo (); tv.CursorPosition = new (0, 3); @@ -9068,7 +9070,7 @@ ErTopLevel Base Dialog ror "; - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); + DriverAssert.AssertDriverContentsWithFrameAre (expectedText, _output); expectedColor = @" 0000000055 @@ -9079,7 +9081,7 @@ ror "; 1111555555 2222225555 4445555555"; - TestHelpers.AssertDriverAttributesAre (expectedColor, _output, Application.Driver, attributes); + DriverAssert.AssertDriverAttributesAre (expectedColor, _output, Application.Driver, attributes); Application.End (rs); top.Dispose (); diff --git a/UnitTests/Views/TileViewTests.cs b/Tests/UnitTests/Views/TileViewTests.cs similarity index 90% rename from UnitTests/Views/TileViewTests.cs rename to Tests/UnitTests/Views/TileViewTests.cs index 5a0f18238..a8301280e 100644 --- a/UnitTests/Views/TileViewTests.cs +++ b/Tests/UnitTests/Views/TileViewTests.cs @@ -1,4 +1,6 @@ -using Xunit.Abstractions; +using UnitTests; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -43,7 +45,7 @@ public class TileViewTests │ │ └──────────────────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -64,7 +66,7 @@ public class TileViewTests │ │ │ │ │ │ └────┴────┴────┴────┴───┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 0; x <= 5; x++) { @@ -95,7 +97,7 @@ public class TileViewTests │ ││ │ │ │ └────────┴┴────┴────┴───┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -116,7 +118,7 @@ public class TileViewTests │ │ │ │ │ │ │ │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 0; x <= 5; x++) { @@ -149,7 +151,7 @@ public class TileViewTests ││ │ │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -171,7 +173,7 @@ public class TileViewTests │ │ │ │ │ │ └────┴────┴────┴────┴───┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 10; x > 7; x--) { @@ -193,7 +195,7 @@ public class TileViewTests │ │ │ │ │ │ └────┴──┴──────┴────┴───┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 10; x < 12; x++) { @@ -215,7 +217,7 @@ public class TileViewTests │ │ │ │ │ │ └────┴─────┴───┴────┴───┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -236,7 +238,7 @@ public class TileViewTests │ │ │ │ │ │ │ │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 10; x > 7; x--) { @@ -260,7 +262,7 @@ public class TileViewTests │ │ │ │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 10; x < 12; x++) { @@ -283,7 +285,7 @@ public class TileViewTests │ │ │ │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -305,7 +307,7 @@ public class TileViewTests │ │ │ │ │ │ └────┴────┴────┴────┴───┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 20; x > 17; x--) { @@ -328,7 +330,7 @@ public class TileViewTests └────┴────┴────┴──┴─────┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 20; x < 23; x++) { @@ -350,7 +352,7 @@ public class TileViewTests │ │ │ │ │ │ └────┴────┴────┴──────┴─┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -372,7 +374,7 @@ public class TileViewTests │ │ │ │ │ │ │ │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 20; x > 17; x--) { @@ -394,7 +396,7 @@ public class TileViewTests │ │ │ │ │ │ │ │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 20; x < 24; x++) { @@ -416,7 +418,7 @@ public class TileViewTests │ │ │ │ │ │ │ │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -435,7 +437,7 @@ public class TileViewTests │ │ │ │ │ │ └────┴────┴────┴────┴───┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 5; x > 0; x--) { @@ -454,7 +456,7 @@ public class TileViewTests ││ │ │ │ │ └┴────────┴────┴────┴───┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 6; x < 10; x++) { @@ -478,7 +480,7 @@ public class TileViewTests │ ││ │ │ │ └────────┴┴────┴────┴───┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -497,7 +499,7 @@ public class TileViewTests │ │ │ │ │ │ │ │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 5; x >= 0; x--) { @@ -514,7 +516,7 @@ public class TileViewTests │ │ │ │ │ │ │ │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 6; x < 10; x++) { @@ -538,7 +540,7 @@ public class TileViewTests ││ │ │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -556,7 +558,7 @@ public class TileViewTests │ │ │ │ │ │ └────┴────┴────┴────┴───┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 10; x > 5; x--) { @@ -577,7 +579,7 @@ public class TileViewTests │ ││ │ │ │ └────┴┴────────┴────┴───┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 10; x < 15; x++) { @@ -599,7 +601,7 @@ public class TileViewTests │ │ ││ │ │ └────┴────────┴┴────┴───┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -618,7 +620,7 @@ public class TileViewTests │ │ │ │ │ │ │ │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 10; x > 5; x--) { @@ -640,7 +642,7 @@ public class TileViewTests ││ │ │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 10; x < 15; x++) { @@ -662,7 +664,7 @@ public class TileViewTests │ ││ │ │ ││ │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -681,7 +683,7 @@ public class TileViewTests │ │ │ │ │ │ └────┴────┴────┴────┴───┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 20; x > 15; x--) { @@ -703,7 +705,7 @@ public class TileViewTests │ │ │ ││ │ └────┴────┴────┴┴───────┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 20; x < 24; x++) { @@ -725,7 +727,7 @@ public class TileViewTests │ │ │ │ ││ └────┴────┴────┴───────┴┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -744,7 +746,7 @@ public class TileViewTests │ │ │ │ │ │ │ │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 20; x > 15; x--) { @@ -767,7 +769,7 @@ public class TileViewTests │ │ ││ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); for (var x = 20; x < 25; x++) { @@ -789,7 +791,7 @@ public class TileViewTests │ │ │ │ │ │ │ │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -915,7 +917,7 @@ public class TileViewTests │ │ │"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -939,7 +941,7 @@ public class TileViewTests 111111│222222│444444 111111│222222│444444 "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // It looks good but lets double check the measurements incase // anything is sticking out but drawn over @@ -1004,7 +1006,7 @@ public class TileViewTests │11111│222222│44444│ └─────┴──────┴─────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); tileView.Tiles.ElementAt (0).ContentView.Visible = false; tileView.Tiles.ElementAt (1).ContentView.Visible = true; @@ -1025,7 +1027,7 @@ public class TileViewTests │222222222222│44444│ └────────────┴─────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); tileView.Tiles.ElementAt (0).ContentView.Visible = true; tileView.Tiles.ElementAt (1).ContentView.Visible = false; @@ -1044,7 +1046,7 @@ public class TileViewTests │111111111111│44444│ └────────────┴─────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); tileView.Tiles.ElementAt (0).ContentView.Visible = true; tileView.Tiles.ElementAt (1).ContentView.Visible = true; @@ -1064,7 +1066,7 @@ public class TileViewTests │11111│222222222222│ └─────┴────────────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); tileView.Tiles.ElementAt (0).ContentView.Visible = true; tileView.Tiles.ElementAt (1).ContentView.Visible = false; @@ -1085,7 +1087,7 @@ public class TileViewTests │111111111111111111│ └──────────────────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); tileView.Tiles.ElementAt (0).ContentView.Visible = false; tileView.Tiles.ElementAt (1).ContentView.Visible = true; @@ -1106,7 +1108,7 @@ public class TileViewTests │222222222222222222│ └──────────────────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); tileView.Tiles.ElementAt (0).ContentView.Visible = false; tileView.Tiles.ElementAt (1).ContentView.Visible = false; @@ -1127,9 +1129,9 @@ public class TileViewTests │444444444444444444│ └──────────────────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); tileView.Tiles.ElementAt (0).ContentView.Visible = false; tileView.Tiles.ElementAt (1).ContentView.Visible = false; @@ -1150,7 +1152,7 @@ public class TileViewTests │ │ └──────────────────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -1174,7 +1176,7 @@ public class TileViewTests 111111│222222│444444 111111│222222│444444"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); tileView.Tiles.ElementAt (0).ContentView.Visible = false; tileView.Tiles.ElementAt (1).ContentView.Visible = true; @@ -1195,7 +1197,7 @@ public class TileViewTests 2222222222222│444444 2222222222222│444444"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); tileView.Tiles.ElementAt (0).ContentView.Visible = true; tileView.Tiles.ElementAt (1).ContentView.Visible = false; @@ -1216,7 +1218,7 @@ public class TileViewTests 1111111111111│444444 1111111111111│444444"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); tileView.Tiles.ElementAt (0).ContentView.Visible = true; tileView.Tiles.ElementAt (1).ContentView.Visible = true; @@ -1237,7 +1239,7 @@ public class TileViewTests 111111│2222222222222 111111│2222222222222"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); tileView.Tiles.ElementAt (0).ContentView.Visible = true; tileView.Tiles.ElementAt (1).ContentView.Visible = false; @@ -1258,7 +1260,7 @@ public class TileViewTests 11111111111111111111 11111111111111111111"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); tileView.Tiles.ElementAt (0).ContentView.Visible = false; tileView.Tiles.ElementAt (1).ContentView.Visible = true; @@ -1279,7 +1281,7 @@ public class TileViewTests 22222222222222222222 22222222222222222222"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); tileView.Tiles.ElementAt (0).ContentView.Visible = false; tileView.Tiles.ElementAt (1).ContentView.Visible = false; @@ -1300,9 +1302,9 @@ public class TileViewTests 44444444444444444444 44444444444444444444"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); tileView.Tiles.ElementAt (0).ContentView.Visible = false; tileView.Tiles.ElementAt (1).ContentView.Visible = false; @@ -1314,7 +1316,7 @@ public class TileViewTests @" "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -1338,7 +1340,7 @@ public class TileViewTests │11111│444444│22222│ └─────┴──────┴─────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -1369,7 +1371,7 @@ public class TileViewTests │11111│444444│22222│ └─────┴──────┴─────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -1393,7 +1395,7 @@ public class TileViewTests │11111│222222│44444│ │11111│222222│44444│ └─────┴──────┴─────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); Tile toRemove = tileView.Tiles.ElementAt (1); Tile removed = tileView.RemoveTile (1); @@ -1414,7 +1416,7 @@ public class TileViewTests │111111111│44444444│ │111111111│44444444│ └─────────┴────────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // cannot remove at this index because there is only one horizontal tile left Assert.Null (tileView.RemoveTile (2)); @@ -1434,7 +1436,7 @@ public class TileViewTests │444444444444444444│ │444444444444444444│ └──────────────────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); Assert.NotNull (tileView.RemoveTile (0)); Application.LayoutAndDraw (); @@ -1452,7 +1454,7 @@ public class TileViewTests │ │ │ │ └──────────────────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // cannot remove Assert.Null (tileView.RemoveTile (0)); @@ -1478,7 +1480,7 @@ public class TileViewTests │11111│222222│44444│ │11111│222222│44444│ └─────┴──────┴─────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // It looks good but lets double check the measurements incase // anything is sticking out but drawn over @@ -1541,7 +1543,7 @@ public class TileViewTests │11111│222222│44444│ │11111│222222│44444│ └─────┴──────┴─────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -1586,7 +1588,7 @@ public class TileViewTests │ │ │ └────┴───┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -1636,7 +1638,7 @@ public class TileViewTests │ │└─┘│ └────┴───┘ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -1674,14 +1676,14 @@ public class TileViewTests 11111111111 ─────────── 22222222222"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // Keyboard movement on splitter should have no effect if it is not focused bool handled = tileView.NewKeyDownEvent (Key.CursorDown); Assert.False (handled); tileView.SetNeedsDraw (); tileView.Draw (); - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -1702,7 +1704,7 @@ public class TileViewTests 11111111111 ─────◊───── 22222222222"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // Now move splitter line down tileView.NewKeyDownEvent (Key.CursorDown); @@ -1715,7 +1717,7 @@ public class TileViewTests 11111111111 11111111111 ─────◊─────"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // And 2 up line.NewKeyDownEvent (Key.CursorUp); @@ -1731,7 +1733,7 @@ public class TileViewTests ─────◊───── 22222222222 22222222222"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -1757,7 +1759,7 @@ public class TileViewTests 11111111111 ─────◊───── 22222222222"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // Now move splitter line down (allowed line.NewKeyDownEvent (Key.CursorDown); @@ -1769,7 +1771,7 @@ public class TileViewTests 11111111111 11111111111 ─────◊─────"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // And up 2 (only 1 is allowed because of minimum size of 1 on view1) line.NewKeyDownEvent (Key.CursorUp); @@ -1784,7 +1786,7 @@ public class TileViewTests 11111111111 ─────◊───── 22222222222"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Theory] @@ -1845,7 +1847,7 @@ public class TileViewTests ┌──┬───┬──┐ │11│222│ │ └──┴───┴──┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -1864,7 +1866,7 @@ public class TileViewTests ┌──┬───┬──┐ │ │111│22│ └──┴───┴──┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -1883,7 +1885,7 @@ public class TileViewTests ┌──┬───┬──┐ │11│ │22│ └──┴───┴──┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -1900,13 +1902,13 @@ public class TileViewTests 11111│22222 11111│22222 │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // Keyboard movement on splitter should have no effect if it is not focused tileView.NewKeyDownEvent (Key.CursorRight); tileView.SetNeedsDraw (); tileView.Draw (); - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -1924,7 +1926,7 @@ public class TileViewTests 11111│22222 11111◊22222 │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // Now while focused move the splitter 1 unit right line.NewKeyDownEvent (Key.CursorRight); @@ -1936,7 +1938,7 @@ public class TileViewTests 111111│2222 111111◊2222 │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // and 2 to the left line.NewKeyDownEvent (Key.CursorLeft); @@ -1950,7 +1952,7 @@ public class TileViewTests 1111│222222 1111◊222222 │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -1969,7 +1971,7 @@ public class TileViewTests 11111│22222 11111◊22222 │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // Now while focused move the splitter 1 unit right line.NewKeyDownEvent (Key.CursorRight); @@ -1981,7 +1983,7 @@ public class TileViewTests 111111│2222 111111◊2222 │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // Even when moving the splitter location it should stay a Percentage based one Assert.IsType (tileView.SplitterDistances.ElementAt (0)); @@ -1998,7 +2000,7 @@ public class TileViewTests 1111│222222 1111◊222222 │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // Even when moving the splitter location it should stay a Percentage based one Assert.IsType (tileView.SplitterDistances.ElementAt (0)); @@ -2018,7 +2020,7 @@ public class TileViewTests ┌────┬────┐ │1111◊2222│ └────┴────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // Now while focused move the splitter 1 unit right line.NewKeyDownEvent (Key.CursorRight); @@ -2030,7 +2032,7 @@ public class TileViewTests ┌─────┬───┐ │11111◊222│ └─────┴───┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // and 2 to the left line.NewKeyDownEvent (Key.CursorLeft); @@ -2044,7 +2046,7 @@ public class TileViewTests ┌───┬─────┐ │111◊22222│ └───┴─────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -2069,14 +2071,14 @@ public class TileViewTests 11111│22222 11111◊22222 │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // Keyboard movement on splitter should have no effect because it // would take us below the minimum splitter size line.NewKeyDownEvent (Key.CursorLeft); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // but we can continue to move the splitter right if we want line.NewKeyDownEvent (Key.CursorRight); @@ -2088,7 +2090,7 @@ public class TileViewTests 111111◊2222 │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -2113,14 +2115,14 @@ public class TileViewTests ┌────┬────┐ │1111◊2222│ └────┴────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // Keyboard movement on splitter should have no effect because it // would take us below the minimum splitter size line.NewKeyDownEvent (Key.CursorLeft); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // but we can continue to move the splitter right if we want line.NewKeyDownEvent (Key.CursorRight); @@ -2133,7 +2135,7 @@ public class TileViewTests │11111◊222│ └─────┴───┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -2160,14 +2162,14 @@ public class TileViewTests 11111│22222 11111◊22222 │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // Keyboard movement on splitter should have no effect because it // would take us below the minimum splitter size line.NewKeyDownEvent (Key.CursorRight); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // but we can continue to move the splitter left if we want line.NewKeyDownEvent (Key.CursorLeft); @@ -2180,7 +2182,7 @@ public class TileViewTests 1111◊222222 │ "; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -2208,14 +2210,14 @@ public class TileViewTests ┌────┬────┐ │1111◊2222│ └────┴────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // Keyboard movement on splitter should have no effect because it // would take us below the minimum splitter size line.NewKeyDownEvent (Key.CursorRight); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // but we can continue to move the splitter left if we want line.NewKeyDownEvent (Key.CursorLeft); @@ -2228,7 +2230,7 @@ public class TileViewTests │111◊22222│ └───┴─────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] @@ -2245,13 +2247,13 @@ public class TileViewTests ┌────┬────┐ │1111│2222│ └────┴────┘"; - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); // Keyboard movement on splitter should have no effect if it is not focused tileView.NewKeyDownEvent (Key.CursorRight); Application.LayoutAndDraw (); - TestHelpers.AssertDriverContentsAre (looksLike, _output); + DriverAssert.AssertDriverContentsAre (looksLike, _output); } [Fact] diff --git a/UnitTests/Views/TimeFieldTests.cs b/Tests/UnitTests/Views/TimeFieldTests.cs similarity index 99% rename from UnitTests/Views/TimeFieldTests.cs rename to Tests/UnitTests/Views/TimeFieldTests.cs index 1d901fcdc..81337e092 100644 --- a/UnitTests/Views/TimeFieldTests.cs +++ b/Tests/UnitTests/Views/TimeFieldTests.cs @@ -1,3 +1,5 @@ +using UnitTests; + namespace Terminal.Gui.ViewsTests; public class TimeFieldTests diff --git a/UnitTests/Views/ToplevelTests.cs b/Tests/UnitTests/Views/ToplevelTests.cs similarity index 84% rename from UnitTests/Views/ToplevelTests.cs rename to Tests/UnitTests/Views/ToplevelTests.cs index 8c45ad6f0..b7a776e9d 100644 --- a/UnitTests/Views/ToplevelTests.cs +++ b/Tests/UnitTests/Views/ToplevelTests.cs @@ -1,7 +1,16 @@ -namespace Terminal.Gui.ViewsTests; +using UnitTests; -public partial class ToplevelTests () +namespace Terminal.Gui.ViewsTests; + +public partial class ToplevelTests { + public ToplevelTests () + { +#if DEBUG_IDISPOSABLE + View.DebugIDisposable = true; +#endif + } + [Fact] public void Constructor_Default () { @@ -90,7 +99,7 @@ public partial class ToplevelTests () // The available height is lower than the Application.Top height minus // the menu bar and status bar, then the top can go beyond the bottom -// Assert.Equal (2, ny); + // Assert.Equal (2, ny); //Assert.NotNull (sb); menuBar = top.MenuBar; @@ -104,7 +113,7 @@ public partial class ToplevelTests () // The available height is lower than the Application.Top height minus // the status bar, then the top can go beyond the bottom -// Assert.Equal (2, ny); + // Assert.Equal (2, ny); //Assert.NotNull (sb); //statusBar = top.StatusBar; @@ -217,162 +226,6 @@ public partial class ToplevelTests () #endif } - [Fact (Skip = "#2491 - Test is broken until #2491 is more mature.")] - [AutoInitShutdown] - public void KeyBindings_Command () - { - var isRunning = false; - - var win1 = new Window { Id = "win1", Width = Dim.Percent (50), Height = Dim.Fill () }; - var lblTf1W1 = new Label { Id = "lblTf1W1", Text = "Enter text in TextField on Win1:" }; - - var tf1W1 = new TextField - { - Id = "tf1W1", X = Pos.Right (lblTf1W1) + 1, Width = Dim.Fill (), Text = "Text1 on Win1" - }; - - var lblTvW1 = new Label - { - Id = "lblTvW1", Y = Pos.Bottom (lblTf1W1) + 1, Text = "Enter text in TextView on Win1:" - }; - - var tvW1 = new TextView - { - Id = "tvW1", - X = Pos.Left (tf1W1), - Width = Dim.Fill (), - Height = 2, - Text = "First line Win1\nSecond line Win1" - }; - - var lblTf2W1 = new Label - { - Id = "lblTf2W1", Y = Pos.Bottom (lblTvW1) + 1, Text = "Enter text in TextField on Win1:" - }; - var tf2W1 = new TextField { Id = "tf2W1", X = Pos.Left (tf1W1), Width = Dim.Fill (), Text = "Text2 on Win1" }; - win1.Add (lblTf1W1, tf1W1, lblTvW1, tvW1, lblTf2W1, tf2W1); - - var win2 = new Window - { - Id = "win2", X = Pos.Right (win1) + 1, Width = Dim.Percent (50), Height = Dim.Fill () - }; - var lblTf1W2 = new Label { Id = "lblTf1W2", Text = "Enter text in TextField on Win2:" }; - - var tf1W2 = new TextField - { - Id = "tf1W2", X = Pos.Right (lblTf1W2) + 1, Width = Dim.Fill (), Text = "Text1 on Win2" - }; - - var lblTvW2 = new Label - { - Id = "lblTvW2", Y = Pos.Bottom (lblTf1W2) + 1, Text = "Enter text in TextView on Win2:" - }; - - var tvW2 = new TextView - { - Id = "tvW2", - X = Pos.Left (tf1W2), - Width = Dim.Fill (), - Height = 2, - Text = "First line Win1\nSecond line Win2" - }; - - var lblTf2W2 = new Label - { - Id = "lblTf2W2", Y = Pos.Bottom (lblTvW2) + 1, Text = "Enter text in TextField on Win2:" - }; - var tf2W2 = new TextField { Id = "tf2W2", X = Pos.Left (tf1W2), Width = Dim.Fill (), Text = "Text2 on Win2" }; - win2.Add (lblTf1W2, tf1W2, lblTvW2, tvW2, lblTf2W2, tf2W2); - - Toplevel top = new (); - top.Add (win1, win2); - top.Loaded += (s, e) => isRunning = true; - top.Closing += (s, e) => isRunning = false; - Application.Begin (top); - top.Running = true; - - Assert.Equal (new (0, 0, 40, 25), win1.Frame); - Assert.Equal (new (41, 0, 40, 25), win2.Frame); - Assert.Equal (win1, top.Focused); - Assert.Equal (tf1W1, top.MostFocused); - - Assert.True (isRunning); - Assert.True (Application.RaiseKeyDownEvent (Application.QuitKey)); - Assert.False (isRunning); - Assert.True (Application.RaiseKeyDownEvent (Key.Z.WithCtrl)); - - Assert.True (Application.RaiseKeyDownEvent (Key.F5)); // refresh - - Assert.True (Application.RaiseKeyDownEvent (Key.Tab)); - Assert.Equal (win1, top.Focused); - Assert.Equal (tvW1, top.MostFocused); - Assert.True (Application.RaiseKeyDownEvent (Key.Tab)); - Assert.Equal ($"\tFirst line Win1{Environment.NewLine}Second line Win1", tvW1.Text); - Assert.True (Application.RaiseKeyDownEvent (Key.Tab.WithShift)); - Assert.Equal ($"First line Win1{Environment.NewLine}Second line Win1", tvW1.Text); - - var prevMostFocusedSubview = top.MostFocused; - - Assert.True (Application.RaiseKeyDownEvent (Key.F6)); // move to next TabGroup (win2) - Assert.Equal (win2, top.Focused); - - Assert.True (Application.RaiseKeyDownEvent (Key.F6.WithShift)); // move to prev TabGroup (win1) - Assert.Equal (win1, top.Focused); - Assert.Equal (tf2W1, top.MostFocused); // BUGBUG: Should be prevMostFocusedSubview - We need to cache the last focused view in the TabGroup somehow - - prevMostFocusedSubview.SetFocus (); - - Assert.Equal (tvW1, top.MostFocused); - - tf2W1.SetFocus (); - Assert.True (Application.RaiseKeyDownEvent (Key.Tab)); // tf2W1 is last subview in win1 - tabbing should take us to first subview of win1 - Assert.Equal (win1, top.Focused); - Assert.Equal (tf1W1, top.MostFocused); - Assert.True (Application.RaiseKeyDownEvent (Key.CursorRight)); // move char to right in tf1W1. We're at last char so nav to next view - Assert.Equal (win1, top.Focused); - Assert.Equal (tvW1, top.MostFocused); - Assert.True (Application.RaiseKeyDownEvent (Key.CursorDown)); // move down to next view (tvW1) - Assert.Equal (win1, top.Focused); - Assert.Equal (tvW1, top.MostFocused); -#if UNIX_KEY_BINDINGS - Assert.True (Application.OnKeyDown (new (Key.I.WithCtrl))); - Assert.Equal (win1, top.GetFocused ()); - Assert.Equal (tf2W1, top.MostFocused); -#endif - Assert.True (Application.RaiseKeyDownEvent (Key.Tab.WithShift)); // Ignored. TextView eats shift-tab by default - Assert.Equal (win1, top.Focused); - Assert.Equal (tvW1, top.MostFocused); - tvW1.AllowsTab = false; - Assert.True (Application.RaiseKeyDownEvent (Key.Tab.WithShift)); - Assert.Equal (win1, top.Focused); - Assert.Equal (tf1W1, top.MostFocused); - Assert.True (Application.RaiseKeyDownEvent (Key.CursorLeft)); - Assert.Equal (win1, top.Focused); - Assert.Equal (tf2W1, top.MostFocused); - Assert.True (Application.RaiseKeyDownEvent (Key.CursorUp)); - Assert.Equal (win1, top.Focused); - Assert.Equal (tvW1, top.MostFocused); - - // nav to win2 - Assert.True (Application.RaiseKeyDownEvent (Key.F6)); - Assert.Equal (win2, top.Focused); - Assert.Equal (tf1W2, top.MostFocused); - Assert.True (Application.RaiseKeyDownEvent (Key.F6.WithShift)); - Assert.Equal (win1, top.Focused); - Assert.Equal (tf2W1, top.MostFocused); - Assert.True (Application.RaiseKeyDownEvent (Application.NextTabGroupKey)); - Assert.Equal (win2, top.Focused); - Assert.Equal (tf1W2, top.MostFocused); - Assert.True (Application.RaiseKeyDownEvent (Application.PrevTabGroupKey)); - Assert.Equal (win1, top.Focused); - Assert.Equal (tf2W1, top.MostFocused); - Assert.True (Application.RaiseKeyDownEvent (Key.CursorUp)); - Assert.Equal (win1, top.Focused); - Assert.Equal (tvW1, top.MostFocused); - - top.Dispose (); - } - [Fact] public void Added_Event_Should_Not_Be_Used_To_Initialize_Toplevel_Events () { @@ -793,7 +646,7 @@ public partial class ToplevelTests () Application.LayoutAndDraw (); Assert.Equal (new (0, 0, 19, 2), top.Frame); Assert.Equal (new (19, 2, 20, 3), window.Frame); - //TestHelpers.AssertDriverContentsWithFrameAre (@"", output); + //DriverAsserts.AssertDriverContentsWithFrameAre (@"", output); Application.End (rsWindow); Application.End (rsTop); diff --git a/UnitTests/Views/TreeTableSourceTests.cs b/Tests/UnitTests/Views/TreeTableSourceTests.cs similarity index 93% rename from UnitTests/Views/TreeTableSourceTests.cs rename to Tests/UnitTests/Views/TreeTableSourceTests.cs index d23569028..856a6809c 100644 --- a/UnitTests/Views/TreeTableSourceTests.cs +++ b/Tests/UnitTests/Views/TreeTableSourceTests.cs @@ -1,4 +1,6 @@ using System.Text; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -43,7 +45,7 @@ public class TreeTableSourceTests : IDisposable │├+Lost Highway│Exciting night road │ │└+Route 66 │Great race course │"; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); Assert.Equal (2, tv.Table.Rows); @@ -67,7 +69,7 @@ public class TreeTableSourceTests : IDisposable │└+Route 66 │Great race course │ "; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // when pressing left we should collapse the top route again tv.NewKeyDownEvent (Key.CursorLeft); @@ -83,7 +85,7 @@ public class TreeTableSourceTests : IDisposable │└+Route 66 │Great race course │ "; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); } [Fact] @@ -106,7 +108,7 @@ public class TreeTableSourceTests : IDisposable │├+Lost Highway│Exciting night road │ │└+Route 66 │Great race course │"; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); Assert.Equal (2, tv.Table.Rows); @@ -129,15 +131,15 @@ public class TreeTableSourceTests : IDisposable │└+Route 66 │Great race course │ "; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // Clicking to the right/left of the expand/collapse does nothing tv.NewMouseEvent (new MouseEventArgs { Position = new (3, 2), Flags = MouseFlags.Button1Clicked }); tv.Draw (); - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); tv.NewMouseEvent (new MouseEventArgs { Position = new (1, 2), Flags = MouseFlags.Button1Clicked }); tv.Draw (); - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); // Clicking on the + again should collapse tv.NewMouseEvent (new MouseEventArgs { Position = new (2, 2), Flags = MouseFlags.Button1Clicked }); @@ -151,7 +153,7 @@ public class TreeTableSourceTests : IDisposable │├+Lost Highway│Exciting night road │ │└+Route 66 │Great race course │"; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); } [Fact] @@ -177,7 +179,7 @@ public class TreeTableSourceTests : IDisposable │☐│└+Route 66 │Great race course │ "; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); Assert.Equal (2, tv.Table.Rows); @@ -208,7 +210,7 @@ public class TreeTableSourceTests : IDisposable │☐│└+Route 66 │Great race course │ "; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); tv.NewKeyDownEvent (Key.CursorDown); tv.NewKeyDownEvent (Key.Space); @@ -226,7 +228,7 @@ public class TreeTableSourceTests : IDisposable │☐│└+Route 66 │Great race course │ "; - TestHelpers.AssertDriverContentsAre (expected, _output); + DriverAssert.AssertDriverContentsAre (expected, _output); IDescribedThing [] selectedObjects = checkSource.CheckedRows.Select (treeSource.GetObjectOnRow).ToArray (); IDescribedThing selected = Assert.Single (selectedObjects); diff --git a/UnitTests/Views/TreeViewTests.cs b/Tests/UnitTests/Views/TreeViewTests.cs similarity index 97% rename from UnitTests/Views/TreeViewTests.cs rename to Tests/UnitTests/Views/TreeViewTests.cs index 21ba9a5f3..602a205bd 100644 --- a/UnitTests/Views/TreeViewTests.cs +++ b/Tests/UnitTests/Views/TreeViewTests.cs @@ -1,5 +1,7 @@ using System.ComponentModel; using System.Text; +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -714,7 +716,7 @@ public class TreeViewTests tv.Draw (); // Nothing expanded - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @"└+1 ", _output @@ -725,7 +727,7 @@ public class TreeViewTests tv.Draw (); // Normal drawing of the tree view - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" └-1 └-2 @@ -753,7 +755,7 @@ public class TreeViewTests tv.Draw (); // Nothing expanded - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @"└+1 ", _output @@ -765,7 +767,7 @@ public class TreeViewTests tv.Draw (); // Normal drawing of the tree view - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" └-1 └-2 @@ -793,7 +795,7 @@ public class TreeViewTests tv.Draw (); // Normal drawing of the tree view - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" └-1 └-2 @@ -827,7 +829,7 @@ public class TreeViewTests tv.LayoutSubviews (); tv.Draw (); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @"├-normal │ ├─pink │ └─normal @@ -847,7 +849,7 @@ public class TreeViewTests tv.Draw (); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @"├+normal └─pink ", @@ -883,7 +885,7 @@ public class TreeViewTests View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @"├-normal │ ├─pink │ └─normal @@ -903,7 +905,7 @@ public class TreeViewTests View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @"├+normal └─pink ", @@ -921,7 +923,7 @@ public class TreeViewTests View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @"└─pink ", _output @@ -959,7 +961,7 @@ public class TreeViewTests tv.Draw (); // Normal drawing of the tree view - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ├-root one │ ├─leaf 1 @@ -1034,7 +1036,7 @@ public class TreeViewTests tv.Draw (); // Normal drawing of the tree view - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ├-root one FFFFFFFFFF @@ -1074,7 +1076,7 @@ FFFFFFFFFF tv.Draw (); // Normal drawing of the tree view - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ─leaf 1 ─leaf 2 @@ -1130,7 +1132,7 @@ oot two tv.Draw (); // Normal drawing of the tree view - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ├-root one │ ├─leaf 1 @@ -1148,7 +1150,7 @@ oot two tv.Draw (); // Normal drawing of the tree view - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @"", _output ); @@ -1158,7 +1160,7 @@ oot two View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ├-root one │ ├─leaf 1 @@ -1173,7 +1175,7 @@ oot two View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ├-root one │ ├─leaf 1 @@ -1187,7 +1189,7 @@ oot two View.SetClipToScreen (); tv.Draw (); - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ├-root one │ ├─leaf 1 @@ -1223,7 +1225,7 @@ oot two var hotpink = new Attribute (Color.BrightMagenta, Color.Black); // Normal drawing of the tree view - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ├-normal │ ├─pink @@ -1234,7 +1236,7 @@ oot two ); // Should all be the same color - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( @" 0000000000 0000000000 @@ -1260,7 +1262,7 @@ oot two tv.Draw (); // Same text - TestHelpers.AssertDriverContentsAre ( + DriverAssert.AssertDriverContentsAre ( @" ├-normal │ ├─pink @@ -1272,7 +1274,7 @@ oot two // but now the item (only not lines) appear // in pink when they are the word "pink" - TestHelpers.AssertDriverAttributesAre ( + DriverAssert.AssertDriverAttributesAre ( @" 00000000 00001111 diff --git a/UnitTests/Views/ViewDisposalTest.cs b/Tests/UnitTests/Views/ViewDisposalTest.cs similarity index 99% rename from UnitTests/Views/ViewDisposalTest.cs rename to Tests/UnitTests/Views/ViewDisposalTest.cs index f171ff708..d7c0397e6 100644 --- a/UnitTests/Views/ViewDisposalTest.cs +++ b/Tests/UnitTests/Views/ViewDisposalTest.cs @@ -1,4 +1,5 @@ using System.Reflection; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; diff --git a/UnitTests/Views/WindowTests.cs b/Tests/UnitTests/Views/WindowTests.cs similarity index 97% rename from UnitTests/Views/WindowTests.cs rename to Tests/UnitTests/Views/WindowTests.cs index 1bcce1a97..73a53064f 100644 --- a/UnitTests/Views/WindowTests.cs +++ b/Tests/UnitTests/Views/WindowTests.cs @@ -1,3 +1,5 @@ +using UnitTests; +using UnitTests; using Xunit.Abstractions; namespace Terminal.Gui.ViewsTests; @@ -55,7 +57,7 @@ public class WindowTests Application.Begin (top); ((FakeDriver)Application.Driver!).SetBufferSize (20, 10); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────┐ │ File Edit │ @@ -72,7 +74,7 @@ public class WindowTests ((FakeDriver)Application.Driver!).SetBufferSize (40, 20); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────────────────────────┐ │ File Edit │ @@ -99,7 +101,7 @@ public class WindowTests ((FakeDriver)Application.Driver!).SetBufferSize (20, 10); - TestHelpers.AssertDriverContentsWithFrameAre ( + DriverAssert.AssertDriverContentsWithFrameAre ( @" ┌──────────────────┐ │ File Edit │ diff --git a/UnitTests/coverlet.runsettings b/Tests/UnitTests/coverlet.runsettings similarity index 100% rename from UnitTests/coverlet.runsettings rename to Tests/UnitTests/coverlet.runsettings diff --git a/Tests/UnitTests/xunit.runner.json b/Tests/UnitTests/xunit.runner.json new file mode 100644 index 000000000..c096d4186 --- /dev/null +++ b/Tests/UnitTests/xunit.runner.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", + "parallelizeTestCollections": false, + "parallelizeAssembly": false, + "stopOnFail": false +} \ No newline at end of file diff --git a/Tests/UnitTestsParallelizable/AssemblyInfo.cs b/Tests/UnitTestsParallelizable/AssemblyInfo.cs new file mode 100644 index 000000000..97d54f7cf --- /dev/null +++ b/Tests/UnitTestsParallelizable/AssemblyInfo.cs @@ -0,0 +1 @@ +global using CM = Terminal.Gui.ConfigurationManager; diff --git a/UnitTests/Drawing/AlignerTests.cs b/Tests/UnitTestsParallelizable/Drawing/AlignerTests.cs similarity index 100% rename from UnitTests/Drawing/AlignerTests.cs rename to Tests/UnitTestsParallelizable/Drawing/AlignerTests.cs diff --git a/UnitTests/Drawing/AttributeTests.cs b/Tests/UnitTestsParallelizable/Drawing/AttributeTests.cs similarity index 100% rename from UnitTests/Drawing/AttributeTests.cs rename to Tests/UnitTestsParallelizable/Drawing/AttributeTests.cs diff --git a/UnitTests/Drawing/CellTests.cs b/Tests/UnitTestsParallelizable/Drawing/CellTests.cs similarity index 95% rename from UnitTests/Drawing/CellTests.cs rename to Tests/UnitTestsParallelizable/Drawing/CellTests.cs index a7fc88073..4cef97335 100644 --- a/UnitTests/Drawing/CellTests.cs +++ b/Tests/UnitTestsParallelizable/Drawing/CellTests.cs @@ -3,7 +3,7 @@ using Xunit.Abstractions; namespace Terminal.Gui.DrawingTests; -public class CellTests (ITestOutputHelper output) +public class CellTests () { [Fact] public void Constructor_Defaults () diff --git a/UnitTests/Drawing/ColorSchemeTests.cs b/Tests/UnitTestsParallelizable/Drawing/ColorSchemeTests.cs similarity index 100% rename from UnitTests/Drawing/ColorSchemeTests.cs rename to Tests/UnitTestsParallelizable/Drawing/ColorSchemeTests.cs diff --git a/UnitTests/Drawing/ColorTests.Constructors.cs b/Tests/UnitTestsParallelizable/Drawing/ColorTests.Constructors.cs similarity index 90% rename from UnitTests/Drawing/ColorTests.Constructors.cs rename to Tests/UnitTestsParallelizable/Drawing/ColorTests.Constructors.cs index 98efa98df..7206467eb 100644 --- a/UnitTests/Drawing/ColorTests.Constructors.cs +++ b/Tests/UnitTestsParallelizable/Drawing/ColorTests.Constructors.cs @@ -66,28 +66,6 @@ public partial class ColorTests ); } - [Theory (Skip = "Relies on old ColorName mapping")] - [MemberData ( - nameof (ColorTestsTheoryDataGenerators.Constructor_WithColorName_AllChannelsCorrect), - MemberType = typeof (ColorTestsTheoryDataGenerators) - )] - public void Constructor_WithColorName_AllChannelsCorrect ( - ColorName16 cname, - ValueTuple expectedColorValues - ) - { - var color = new Color (cname); - - (byte r, byte g, byte b) = expectedColorValues; - - Assert.Multiple ( - () => Assert.Equal (r, color.R), - () => Assert.Equal (g, color.G), - () => Assert.Equal (b, color.B), - () => Assert.Equal (byte.MaxValue, color.A) - ); - } - [Theory] [CombinatorialData] public void Constructor_WithInt32_AllValuesCorrect ( diff --git a/UnitTests/Drawing/ColorTests.Operators.cs b/Tests/UnitTestsParallelizable/Drawing/ColorTests.Operators.cs similarity index 93% rename from UnitTests/Drawing/ColorTests.Operators.cs rename to Tests/UnitTestsParallelizable/Drawing/ColorTests.Operators.cs index e3f25a1ba..092f6707c 100644 --- a/UnitTests/Drawing/ColorTests.Operators.cs +++ b/Tests/UnitTestsParallelizable/Drawing/ColorTests.Operators.cs @@ -57,20 +57,7 @@ public partial class ColorTests Assert.Equal (rgba.GetHashCode (), color.GetHashCode ()); } - - [Theory (Skip = "Relies on old ColorName mapping")] - [Trait ("Category", "Operators")] - [MemberData ( - nameof (ColorTestsTheoryDataGenerators.ExplicitOperator_FromColorName_RoundTripsCorrectly), - MemberType = typeof (ColorTestsTheoryDataGenerators) - )] - public void ImplicitOperator_FromColorName_ReturnsCorrectColorValue (ColorName16 cname, Color expectedColor) - { - Color color = cname; - - Assert.Equal (expectedColor, color); - } - + [Theory] [CombinatorialData] [Trait ("Category", "Operators")] diff --git a/UnitTests/Drawing/ColorTests.ParsingAndFormatting.cs b/Tests/UnitTestsParallelizable/Drawing/ColorTests.ParsingAndFormatting.cs similarity index 88% rename from UnitTests/Drawing/ColorTests.ParsingAndFormatting.cs rename to Tests/UnitTestsParallelizable/Drawing/ColorTests.ParsingAndFormatting.cs index 82b6cc503..8b8ebed62 100644 --- a/UnitTests/Drawing/ColorTests.ParsingAndFormatting.cs +++ b/Tests/UnitTestsParallelizable/Drawing/ColorTests.ParsingAndFormatting.cs @@ -59,24 +59,6 @@ public partial class ColorTests Assert.Equal (constructedColor.Argb, parsedColor.Argb); } - [Theory (Skip = "Doesn't utilize W3ColorNames")] - [CombinatorialData] - public void ToString_WithInvariantCultureAndNullString_IsSameAsParameterless ( - [CombinatorialValues (0, 64, 128, 255)] byte r, - [CombinatorialValues (0, 64, 128, 255)] byte g, - [CombinatorialValues (0, 64, 128, 255)] byte b - ) - { - var expected = $"#{r:X2}{g:X2}{b:X2}"; - Color testColor = new (r, g, b); - - var testStringWithExplicitInvariantCulture = testColor.ToString (null, CultureInfo.InvariantCulture); - Assert.Equal (expected, testStringWithExplicitInvariantCulture); - - var parameterlessToStringValue = testColor.ToString (); - Assert.Equal (parameterlessToStringValue, testStringWithExplicitInvariantCulture); - } - [Theory] [MemberData ( nameof (ColorTestsTheoryDataGenerators.TryParse_string_Returns_False_For_Invalid_Inputs), @@ -146,7 +128,6 @@ public static partial class ColorTestsTheoryDataGenerators int expectedRgba = BinaryPrimitives.ReadInt32LittleEndian ([(byte)(i + 16), i, (byte)(i - 16), i]); values.Add ($"rgb({i - 16:D},{i:D},{i + 16:D})", expectedRgb); values.Add ($"rgb({i - 16:D},{i:D},{i + 16:D},{i:D})", expectedRgba); - values.Add ($"rgb({i - 16:D},{i:D},{i + 16:D})", expectedRgb); values.Add ($"rgba({i - 16:D},{i:D},{i + 16:D},{i:D})", expectedRgba); values.Add ($"#{i - 16:X2}{i:X2}{i + 16:X2}", expectedRgb); values.Add ($"#{i:X2}{i - 16:X2}{i:X2}{i + 16:X2}", expectedRgba); @@ -182,5 +163,6 @@ public static partial class ColorTestsTheoryDataGenerators } return values; + } } diff --git a/UnitTests/Drawing/ColorTests.TypeChecks.cs b/Tests/UnitTestsParallelizable/Drawing/ColorTests.TypeChecks.cs similarity index 100% rename from UnitTests/Drawing/ColorTests.TypeChecks.cs rename to Tests/UnitTestsParallelizable/Drawing/ColorTests.TypeChecks.cs diff --git a/UnitTests/Drawing/ColorTests.cs b/Tests/UnitTestsParallelizable/Drawing/ColorTests.cs similarity index 57% rename from UnitTests/Drawing/ColorTests.cs rename to Tests/UnitTestsParallelizable/Drawing/ColorTests.cs index 7fcf7ab93..28c37b11c 100644 --- a/UnitTests/Drawing/ColorTests.cs +++ b/Tests/UnitTestsParallelizable/Drawing/ColorTests.cs @@ -21,20 +21,6 @@ public partial class ColorTests Assert.Equal (expectedArgb, color.Argb); } - [Fact (Skip = "Relies on old ColorName mapping")] - public void Color_ColorName_Get_ReturnsClosestColorName () - { - // Arrange - var color = new Color (128, 64, 40); // Custom RGB color, closest to Yellow - var expectedColorName = ColorName16.Yellow; - - // Act - ColorName16 colorName = color.GetClosestNamedColor16 (); - - // Assert - Assert.Equal (expectedColorName, colorName); - } - [Fact] public void Color_IsClosestToNamedColor_ReturnsExpectedValue () { @@ -47,18 +33,6 @@ public partial class ColorTests Assert.True (color2.IsClosestToNamedColor16 (ColorName16.Red)); } - [Theory (Skip = "Test data is now bogus")] - [MemberData ( - nameof (ColorTestsTheoryDataGenerators.FindClosestColor_ReturnsClosestColor), - MemberType = typeof (ColorTestsTheoryDataGenerators) - )] - public void FindClosestColor_ReturnsClosestColor (Color inputColor, ColorName16 expectedColorName) - { - ColorName16 actualColorName = Color.GetClosestNamedColor16 (inputColor); - - Assert.Equal (expectedColorName, actualColorName); - } - [Theory] [CombinatorialData] public void Rgba_Returns_Expected_Value ( @@ -82,13 +56,13 @@ public static partial class ColorTestsTheoryDataGenerators public static TheoryData FindClosestColor_ReturnsClosestColor () { TheoryData data = []; - data.Add (new Color (0, 0), ColorName16.Black); - data.Add (new Color (255, 255, 255), ColorName16.White); - data.Add (new Color (5, 100, 255), ColorName16.BrightBlue); - data.Add (new Color (0, 255), ColorName16.BrightGreen); - data.Add (new Color (255, 70, 8), ColorName16.BrightRed); - data.Add (new Color (0, 128, 128), ColorName16.Cyan); - data.Add (new Color (128, 64, 32), ColorName16.Yellow); + data.Add (new (0, 0), ColorName16.Black); + data.Add (new (255, 255, 255), ColorName16.White); + data.Add (new (5, 100, 255), ColorName16.BrightBlue); + data.Add (new (0, 255), ColorName16.BrightGreen); + data.Add (new (255, 70, 8), ColorName16.BrightRed); + data.Add (new (0, 128, 128), ColorName16.Cyan); + data.Add (new (128, 64, 32), ColorName16.Yellow); return data; } diff --git a/UnitTests/Drawing/FillPairTests.cs b/Tests/UnitTestsParallelizable/Drawing/FillPairTests.cs similarity index 100% rename from UnitTests/Drawing/FillPairTests.cs rename to Tests/UnitTestsParallelizable/Drawing/FillPairTests.cs diff --git a/UnitTests/Drawing/GradientFillTests.cs b/Tests/UnitTestsParallelizable/Drawing/GradientFillTests.cs similarity index 100% rename from UnitTests/Drawing/GradientFillTests.cs rename to Tests/UnitTestsParallelizable/Drawing/GradientFillTests.cs diff --git a/UnitTests/Drawing/GradientTests.cs b/Tests/UnitTestsParallelizable/Drawing/GradientTests.cs similarity index 100% rename from UnitTests/Drawing/GradientTests.cs rename to Tests/UnitTestsParallelizable/Drawing/GradientTests.cs diff --git a/UnitTests/Drawing/PopularityPaletteWithThresholdTests.cs b/Tests/UnitTestsParallelizable/Drawing/PopularityPaletteWithThresholdTests.cs similarity index 100% rename from UnitTests/Drawing/PopularityPaletteWithThresholdTests.cs rename to Tests/UnitTestsParallelizable/Drawing/PopularityPaletteWithThresholdTests.cs diff --git a/UnitTests/Drawing/Region/DifferenceTests.cs b/Tests/UnitTestsParallelizable/Drawing/Region/DifferenceTests.cs similarity index 100% rename from UnitTests/Drawing/Region/DifferenceTests.cs rename to Tests/UnitTestsParallelizable/Drawing/Region/DifferenceTests.cs diff --git a/UnitTests/Drawing/Region/MergeRectanglesTests.cs b/Tests/UnitTestsParallelizable/Drawing/Region/MergeRectanglesTests.cs similarity index 100% rename from UnitTests/Drawing/Region/MergeRectanglesTests.cs rename to Tests/UnitTestsParallelizable/Drawing/Region/MergeRectanglesTests.cs diff --git a/UnitTests/Drawing/Region/RegionTests.cs b/Tests/UnitTestsParallelizable/Drawing/Region/RegionTests.cs similarity index 100% rename from UnitTests/Drawing/Region/RegionTests.cs rename to Tests/UnitTestsParallelizable/Drawing/Region/RegionTests.cs diff --git a/UnitTests/Drawing/Region/SubtractRectangleTests.cs b/Tests/UnitTestsParallelizable/Drawing/Region/SubtractRectangleTests.cs similarity index 100% rename from UnitTests/Drawing/Region/SubtractRectangleTests.cs rename to Tests/UnitTestsParallelizable/Drawing/Region/SubtractRectangleTests.cs diff --git a/UnitTests/Drawing/SixelEncoderTests.cs b/Tests/UnitTestsParallelizable/Drawing/SixelEncoderTests.cs similarity index 100% rename from UnitTests/Drawing/SixelEncoderTests.cs rename to Tests/UnitTestsParallelizable/Drawing/SixelEncoderTests.cs diff --git a/UnitTests/Drawing/SolidFillTests.cs b/Tests/UnitTestsParallelizable/Drawing/SolidFillTests.cs similarity index 100% rename from UnitTests/Drawing/SolidFillTests.cs rename to Tests/UnitTestsParallelizable/Drawing/SolidFillTests.cs diff --git a/UnitTests/Drawing/StraightLineTests.cs b/Tests/UnitTestsParallelizable/Drawing/StraightLineTests.cs similarity index 99% rename from UnitTests/Drawing/StraightLineTests.cs rename to Tests/UnitTestsParallelizable/Drawing/StraightLineTests.cs index 39c67d81e..cb284f9f7 100644 --- a/UnitTests/Drawing/StraightLineTests.cs +++ b/Tests/UnitTestsParallelizable/Drawing/StraightLineTests.cs @@ -307,7 +307,6 @@ public class StraightLineTests (ITestOutputHelper output) 3 )] [Theory] - [SetupFakeDriver] public void Viewport ( Orientation orientation, int x, diff --git a/UnitTests/Drawing/ThicknessTests.cs b/Tests/UnitTestsParallelizable/Drawing/ThicknessTests.cs similarity index 58% rename from UnitTests/Drawing/ThicknessTests.cs rename to Tests/UnitTestsParallelizable/Drawing/ThicknessTests.cs index c1a5cbae5..ca584d4af 100644 --- a/UnitTests/Drawing/ThicknessTests.cs +++ b/Tests/UnitTestsParallelizable/Drawing/ThicknessTests.cs @@ -1,9 +1,6 @@ -using System.Text; -using Xunit.Abstractions; +namespace Terminal.Gui.DrawingTests; -namespace Terminal.Gui.DrawingTests; - -public class ThicknessTests (ITestOutputHelper output) +public class ThicknessTests { [Fact] public void Constructor_Defaults () @@ -24,13 +21,13 @@ public class ThicknessTests (ITestOutputHelper output) Assert.Equal (3, t.Right); Assert.Equal (4, t.Bottom); - t = new Thickness (0, 0, 0, 0); + t = new (0, 0, 0, 0); Assert.Equal (0, t.Left); Assert.Equal (0, t.Top); Assert.Equal (0, t.Right); Assert.Equal (0, t.Bottom); - t = new Thickness (-1, 0, 0, 0); + t = new (-1, 0, 0, 0); Assert.Equal (-1, t.Left); Assert.Equal (0, t.Top); Assert.Equal (0, t.Right); @@ -47,252 +44,6 @@ public class ThicknessTests (ITestOutputHelper output) Assert.Equal (1, t.Bottom); } - [Fact] - [AutoInitShutdown] - public void DrawTests () - { - ((FakeDriver)Application.Driver!).SetBufferSize (60, 60); - var t = new Thickness (0, 0, 0, 0); - var r = new Rectangle (5, 5, 40, 15); - - Application.Driver?.FillRect ( - new Rectangle (0, 0, Application.Driver!.Cols, Application.Driver!.Rows), - (Rune)' ' - ); - t.Draw (r, ViewDiagnosticFlags.Thickness, "Test"); - - TestHelpers.AssertDriverContentsWithFrameAre ( - @" - Test (Left=0,Top=0,Right=0,Bottom=0)", - output - ); - - t = new Thickness (1, 1, 1, 1); - r = new Rectangle (5, 5, 40, 15); - - Application.Driver?.FillRect ( - new Rectangle (0, 0, Application.Driver!.Cols, Application.Driver!.Rows), - (Rune)' ' - ); - t.Draw (r, ViewDiagnosticFlags.Thickness, "Test"); - - TestHelpers.AssertDriverContentsWithFrameAre ( - @" - TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT - T T - T T - T T - T T - T T - T T - T T - T T - T T - T T - T T - T T - T T - TTTest (Left=1,Top=1,Right=1,Bottom=1)TT", - output - ); - - t = new Thickness (1, 2, 3, 4); - r = new Rectangle (5, 5, 40, 15); - - Application.Driver?.FillRect ( - new Rectangle (0, 0, Application.Driver!.Cols, Application.Driver!.Rows), - (Rune)' ' - ); - t.Draw (r, ViewDiagnosticFlags.Thickness, "Test"); - - TestHelpers.AssertDriverContentsWithFrameAre ( - @" - TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT - TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT - T TTT - T TTT - T TTT - T TTT - T TTT - T TTT - T TTT - T TTT - T TTT - TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT - TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT - TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT - TTTest (Left=1,Top=2,Right=3,Bottom=4)TT", - output - ); - - t = new Thickness (-1, 1, 1, 1); - r = new Rectangle (5, 5, 40, 15); - - Application.Driver?.FillRect ( - new Rectangle (0, 0, Application.Driver!.Cols, Application.Driver!.Rows), - (Rune)' ' - ); - t.Draw (r, ViewDiagnosticFlags.Thickness, "Test"); - - TestHelpers.AssertDriverContentsWithFrameAre ( - @" - TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT - T - T - T - T - T - T - T - T - T - T - T - T - T - TTest (Left=-1,Top=1,Right=1,Bottom=1)TT", - output - ); - } - - [Fact] - [AutoInitShutdown] - public void DrawTests_Ruler () - { - // Add a frame so we can see the ruler - var f = new FrameView { X = 0, Y = 0, Width = Dim.Fill (), Height = Dim.Fill () }; - - var top = new Toplevel (); - top.Add (f); - RunState rs = Application.Begin (top); - - ((FakeDriver)Application.Driver!).SetBufferSize (45, 20); - var t = new Thickness (0, 0, 0, 0); - var r = new Rectangle (2, 2, 40, 15); - Application.RunIteration (ref rs); - - t.Draw (r, ViewDiagnosticFlags.Ruler, "Test"); - - TestHelpers.AssertDriverContentsAre ( - @" -┌───────────────────────────────────────────┐ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ -│ │ -└───────────────────────────────────────────┘", - output - ); - - t = new Thickness (1, 1, 1, 1); - r = new Rectangle (1, 1, 40, 15); - top.SetNeedsDraw (); - Application.RunIteration (ref rs); - t.Draw (r, ViewDiagnosticFlags.Ruler, "Test"); - - TestHelpers.AssertDriverContentsAre ( - @" -┌───────────────────────────────────────────┐ -│|123456789|123456789|123456789|123456789 │ -│1 1 │ -│2 2 │ -│3 3 │ -│4 4 │ -│5 5 │ -│6 6 │ -│7 7 │ -│8 8 │ -│9 9 │ -│- - │ -│1 1 │ -│2 2 │ -│3 3 │ -│|123456789|123456789|123456789|123456789 │ -│ │ -│ │ -│ │ -└───────────────────────────────────────────┘", - output - ); - - t = new Thickness (1, 2, 3, 4); - r = new Rectangle (2, 2, 40, 15); - top.SetNeedsDraw (); - Application.RunIteration (ref rs); - t.Draw (r, ViewDiagnosticFlags.Ruler, "Test"); - - TestHelpers.AssertDriverContentsWithFrameAre ( - @" -┌───────────────────────────────────────────┐ -│ │ -│ |123456789|123456789|123456789|123456789 │ -│ 1 1 │ -│ 2 2 │ -│ 3 3 │ -│ 4 4 │ -│ 5 5 │ -│ 6 6 │ -│ 7 7 │ -│ 8 8 │ -│ 9 9 │ -│ - - │ -│ 1 1 │ -│ 2 2 │ -│ 3 3 │ -│ |123456789|123456789|123456789|123456789 │ -│ │ -│ │ -└───────────────────────────────────────────┘", - output - ); - - t = new Thickness (-1, 1, 1, 1); - r = new Rectangle (5, 5, 40, 15); - top.SetNeedsDraw (); - Application.RunIteration (ref rs); - t.Draw (r, ViewDiagnosticFlags.Ruler, "Test"); - - TestHelpers.AssertDriverContentsWithFrameAre ( - @" -┌───────────────────────────────────────────┐ -│ │ -│ │ -│ │ -│ │ -│ |123456789|123456789|123456789|123456789 -│ 1 -│ 2 -│ 3 -│ 4 -│ 5 -│ 6 -│ 7 -│ 8 -│ 9 -│ - -│ 1 -│ 2 -│ 3 -└────|123456789|123456789|123456789|123456789", - output - ); - top.Dispose (); - } - [Fact] public void Empty_Is_empty () { @@ -350,24 +101,24 @@ public class ThicknessTests (ITestOutputHelper output) Assert.Equal (5, inside.Width); Assert.Equal (1, inside.Height); - t = new Thickness (-1, 1, -1, 1); - r = new Rectangle (-1, -1, 3, 3); + t = new (-1, 1, -1, 1); + r = new (-1, -1, 3, 3); inside = t.GetInside (r); Assert.Equal (-2, inside.X); Assert.Equal (0, inside.Y); Assert.Equal (5, inside.Width); Assert.Equal (1, inside.Height); - t = new Thickness (-1, 1, -1, 1); - r = new Rectangle (1, 1, 3, 3); + t = new (-1, 1, -1, 1); + r = new (1, 1, 3, 3); inside = t.GetInside (r); Assert.Equal (0, inside.X); Assert.Equal (2, inside.Y); Assert.Equal (5, inside.Width); Assert.Equal (1, inside.Height); - t = new Thickness (-2, -1, 0, 1); - r = new Rectangle (-1, 0, 50, 60); + t = new (-2, -1, 0, 1); + r = new (-1, 0, 50, 60); inside = t.GetInside (r); Assert.Equal (-3, inside.X); Assert.Equal (-1, inside.Y); @@ -386,24 +137,24 @@ public class ThicknessTests (ITestOutputHelper output) Assert.Equal (5, inside.Width); Assert.Equal (5, inside.Height); - t = new Thickness (-1, -1, -1, -1); - r = new Rectangle (-1, -1, 3, 3); + t = new (-1, -1, -1, -1); + r = new (-1, -1, 3, 3); inside = t.GetInside (r); Assert.Equal (-2, inside.X); Assert.Equal (-2, inside.Y); Assert.Equal (5, inside.Width); Assert.Equal (5, inside.Height); - t = new Thickness (-1, -1, -1, -1); - r = new Rectangle (1, 1, 3, 3); + t = new (-1, -1, -1, -1); + r = new (1, 1, 3, 3); inside = t.GetInside (r); Assert.Equal (0, inside.X); Assert.Equal (0, inside.Y); Assert.Equal (5, inside.Width); Assert.Equal (5, inside.Height); - t = new Thickness (-1, -2, -3, -4); - r = new Rectangle (-1, 0, 50, 60); + t = new (-1, -2, -3, -4); + r = new (-1, 0, 50, 60); inside = t.GetInside (r); Assert.Equal (-2, inside.X); Assert.Equal (-2, inside.Y); @@ -422,24 +173,24 @@ public class ThicknessTests (ITestOutputHelper output) Assert.Equal (1, inside.Width); Assert.Equal (1, inside.Height); - t = new Thickness (1, 1, 1, 1); - r = new Rectangle (-1, -1, 3, 3); + t = new (1, 1, 1, 1); + r = new (-1, -1, 3, 3); inside = t.GetInside (r); Assert.Equal (0, inside.X); Assert.Equal (0, inside.Y); Assert.Equal (1, inside.Width); Assert.Equal (1, inside.Height); - t = new Thickness (1, 1, 1, 1); - r = new Rectangle (1, 1, 3, 3); + t = new (1, 1, 1, 1); + r = new (1, 1, 3, 3); inside = t.GetInside (r); Assert.Equal (2, inside.X); Assert.Equal (2, inside.Y); Assert.Equal (1, inside.Width); Assert.Equal (1, inside.Height); - t = new Thickness (1, 2, 3, 4); - r = new Rectangle (-1, 0, 50, 60); + t = new (1, 2, 3, 4); + r = new (-1, 0, 50, 60); inside = t.GetInside (r); Assert.Equal (0, inside.X); Assert.Equal (2, inside.Y); @@ -458,72 +209,72 @@ public class ThicknessTests (ITestOutputHelper output) Assert.Equal (0, inside.Width); Assert.Equal (0, inside.Height); - t = new Thickness (1, 1, 1, 1); - r = new Rectangle (0, 0, 1, 1); + t = new (1, 1, 1, 1); + r = new (0, 0, 1, 1); inside = t.GetInside (r); Assert.Equal (1, inside.X); Assert.Equal (1, inside.Y); Assert.Equal (0, inside.Width); Assert.Equal (0, inside.Height); - t = new Thickness (1, 1, 1, 1); - r = new Rectangle (1, 1, 1, 1); + t = new (1, 1, 1, 1); + r = new (1, 1, 1, 1); inside = t.GetInside (r); Assert.Equal (2, inside.X); Assert.Equal (2, inside.Y); Assert.Equal (0, inside.Width); Assert.Equal (0, inside.Height); - t = new Thickness (1, 1, 1, 1); - r = new Rectangle (0, 0, 1, 0); + t = new (1, 1, 1, 1); + r = new (0, 0, 1, 0); inside = t.GetInside (r); Assert.Equal (1, inside.X); Assert.Equal (1, inside.Y); Assert.Equal (0, inside.Width); Assert.Equal (0, inside.Height); - t = new Thickness (1, 1, 1, 1); - r = new Rectangle (0, 0, 0, 1); + t = new (1, 1, 1, 1); + r = new (0, 0, 0, 1); inside = t.GetInside (r); Assert.Equal (1, inside.X); Assert.Equal (1, inside.Y); Assert.Equal (0, inside.Width); Assert.Equal (0, inside.Height); - t = new Thickness (1, 1, 1, 1); - r = new Rectangle (-1, -1, 0, 1); + t = new (1, 1, 1, 1); + r = new (-1, -1, 0, 1); inside = t.GetInside (r); Assert.Equal (0, inside.X); Assert.Equal (0, inside.Y); Assert.Equal (0, inside.Width); Assert.Equal (0, inside.Height); - t = new Thickness (1, 1, 1, 1); - r = new Rectangle (0, 0, 2, 2); + t = new (1, 1, 1, 1); + r = new (0, 0, 2, 2); inside = t.GetInside (r); Assert.Equal (1, inside.X); Assert.Equal (1, inside.Y); Assert.Equal (0, inside.Width); Assert.Equal (0, inside.Height); - t = new Thickness (1, 1, 1, 1); - r = new Rectangle (-1, -1, 2, 2); + t = new (1, 1, 1, 1); + r = new (-1, -1, 2, 2); inside = t.GetInside (r); Assert.Equal (0, inside.X); Assert.Equal (0, inside.Y); Assert.Equal (0, inside.Width); Assert.Equal (0, inside.Height); - t = new Thickness (1, 1, 1, 1); - r = new Rectangle (1, 1, 2, 2); + t = new (1, 1, 1, 1); + r = new (1, 1, 2, 2); inside = t.GetInside (r); Assert.Equal (2, inside.X); Assert.Equal (2, inside.Y); Assert.Equal (0, inside.Width); Assert.Equal (0, inside.Height); - t = new Thickness (1, 2, 3, 4); - r = new Rectangle (-1, 0, 4, 6); + t = new (1, 2, 3, 4); + r = new (-1, 0, 4, 6); inside = t.GetInside (r); Assert.Equal (0, inside.X); Assert.Equal (2, inside.Y); @@ -542,40 +293,40 @@ public class ThicknessTests (ITestOutputHelper output) Assert.Equal (0, inside.Width); Assert.Equal (0, inside.Height); - t = new Thickness (0, 0, 0, 0); - r = new Rectangle (0, 0, 1, 1); + t = new (0, 0, 0, 0); + r = new (0, 0, 1, 1); inside = t.GetInside (r); Assert.Equal (0, inside.X); Assert.Equal (0, inside.Y); Assert.Equal (1, inside.Width); Assert.Equal (1, inside.Height); - t = new Thickness (0, 0, 0, 0); - r = new Rectangle (1, 1, 1, 1); + t = new (0, 0, 0, 0); + r = new (1, 1, 1, 1); inside = t.GetInside (r); Assert.Equal (1, inside.X); Assert.Equal (1, inside.Y); Assert.Equal (1, inside.Width); Assert.Equal (1, inside.Height); - t = new Thickness (0, 0, 0, 0); - r = new Rectangle (0, 0, 1, 0); + t = new (0, 0, 0, 0); + r = new (0, 0, 1, 0); inside = t.GetInside (r); Assert.Equal (0, inside.X); Assert.Equal (0, inside.Y); Assert.Equal (1, inside.Width); Assert.Equal (0, inside.Height); - t = new Thickness (0, 0, 0, 0); - r = new Rectangle (0, 0, 0, 1); + t = new (0, 0, 0, 0); + r = new (0, 0, 0, 1); inside = t.GetInside (r); Assert.Equal (0, inside.X); Assert.Equal (0, inside.Y); Assert.Equal (0, inside.Width); Assert.Equal (1, inside.Height); - t = new Thickness (0, 0, 0, 0); - r = new Rectangle (-1, -1, 0, 1); + t = new (0, 0, 0, 0); + r = new (-1, -1, 0, 1); inside = t.GetInside (r); Assert.Equal (-1, inside.X); Assert.Equal (-1, inside.Y); @@ -589,7 +340,7 @@ public class ThicknessTests (ITestOutputHelper output) var t = new Thickness (1, 2, 3, 4); Assert.Equal (4, t.Horizontal); - t = new Thickness (0); + t = new (0); Assert.Equal (0, t.Horizontal); } @@ -723,13 +474,11 @@ public class ThicknessTests (ITestOutputHelper output) Assert.Equal (expected, result); } - [Theory] [InlineData (0, 0, 0, 0, 0, 0, false)] [InlineData (0, 0, 0, 1, 0, 0, false)] [InlineData (0, 0, 1, 0, 0, 0, false)] [InlineData (0, 0, 1, 1, 0, 0, true)] - [InlineData (1, 1, 0, 0, 0, 0, false)] [InlineData (1, 1, 0, 1, 0, 0, false)] [InlineData (1, 1, 1, 0, 0, 0, false)] @@ -757,7 +506,7 @@ public class ThicknessTests (ITestOutputHelper output) var t = new Thickness (1, 2, 3, 4); Assert.Equal (6, t.Vertical); - t = new Thickness (0); + t = new (0); Assert.Equal (0, t.Vertical); } @@ -844,7 +593,6 @@ public class ThicknessTests (ITestOutputHelper output) 3, 4, 5)] - public void AddTest ( int left, int top, @@ -862,7 +610,7 @@ public class ThicknessTests (ITestOutputHelper output) { var t = new Thickness (left, top, right, bottom); var t2 = new Thickness (left2, top2, right2, bottom2); - var result = t.Add (t2); + Thickness result = t.Add (t2); Assert.Equal (expectedLeft, result.Left); Assert.Equal (expectedTop, result.Top); Assert.Equal (expectedRight, result.Right); diff --git a/UnitTests/FileServices/FileSystemColorProviderTests.cs b/Tests/UnitTestsParallelizable/FileServices/FileSystemColorProviderTests.cs similarity index 100% rename from UnitTests/FileServices/FileSystemColorProviderTests.cs rename to Tests/UnitTestsParallelizable/FileServices/FileSystemColorProviderTests.cs diff --git a/UnitTests/FileServices/FileSystemIconProviderTests.cs b/Tests/UnitTestsParallelizable/FileServices/FileSystemIconProviderTests.cs similarity index 100% rename from UnitTests/FileServices/FileSystemIconProviderTests.cs rename to Tests/UnitTestsParallelizable/FileServices/FileSystemIconProviderTests.cs diff --git a/UnitTests/FileServices/NerdFontsTests.cs b/Tests/UnitTestsParallelizable/FileServices/NerdFontsTests.cs similarity index 100% rename from UnitTests/FileServices/NerdFontsTests.cs rename to Tests/UnitTestsParallelizable/FileServices/NerdFontsTests.cs diff --git a/UnitTests/Input/Keyboard/KeyBindingTests.cs b/Tests/UnitTestsParallelizable/Input/Keyboard/KeyBindingTests.cs similarity index 100% rename from UnitTests/Input/Keyboard/KeyBindingTests.cs rename to Tests/UnitTestsParallelizable/Input/Keyboard/KeyBindingTests.cs diff --git a/UnitTests/Input/Keyboard/KeyBindingsTests.cs b/Tests/UnitTestsParallelizable/Input/Keyboard/KeyBindingsTests.cs similarity index 100% rename from UnitTests/Input/Keyboard/KeyBindingsTests.cs rename to Tests/UnitTestsParallelizable/Input/Keyboard/KeyBindingsTests.cs diff --git a/UnitTests/Input/Keyboard/KeyTests.cs b/Tests/UnitTestsParallelizable/Input/Keyboard/KeyTests.cs similarity index 95% rename from UnitTests/Input/Keyboard/KeyTests.cs rename to Tests/UnitTestsParallelizable/Input/Keyboard/KeyTests.cs index ecc08624b..0fcb4bead 100644 --- a/UnitTests/Input/Keyboard/KeyTests.cs +++ b/Tests/UnitTestsParallelizable/Input/Keyboard/KeyTests.cs @@ -180,9 +180,6 @@ public class KeyTests [InlineData ('!', (KeyCode)'!')] [InlineData ('\r', KeyCode.Enter)] [InlineData ('\t', KeyCode.Tab)] -#pragma warning disable xUnit1025 // InlineData should be unique within the Theory it belongs to - [InlineData ('\r', (KeyCode)13)] -#pragma warning restore xUnit1025 // InlineData should be unique within the Theory it belongs to [InlineData ('\n', (KeyCode)10)] [InlineData ('ó', (KeyCode)'ó')] [InlineData ('Ó', (KeyCode)'Ó')] @@ -292,10 +289,10 @@ public class KeyTests [Fact] public void NoShift_ShouldReturnCorrectValue () { - Key CAD = Key.Delete.WithCtrl.WithAlt; - Assert.Equal (KeyCode.Delete | KeyCode.CtrlMask | KeyCode.AltMask, CAD); + Key cad = Key.Delete.WithCtrl.WithAlt; + Assert.Equal (KeyCode.Delete | KeyCode.CtrlMask | KeyCode.AltMask, cad); - Assert.Equal (KeyCode.Delete | KeyCode.AltMask, CAD.NoCtrl); + Assert.Equal (KeyCode.Delete | KeyCode.AltMask, cad.NoCtrl); Key a = Key.A.WithCtrl.WithAlt.WithShift; Assert.Equal (KeyCode.A, a.NoCtrl.NoShift.NoAlt); @@ -412,15 +409,6 @@ public class KeyTests [InlineData (KeyCode.ShiftMask | KeyCode.AltMask | KeyCode.Null, "Alt+Shift")] [InlineData (KeyCode.AltMask | KeyCode.CtrlMask | KeyCode.Null, "Ctrl+Alt")] [InlineData (KeyCode.ShiftMask | KeyCode.CtrlMask | KeyCode.AltMask | KeyCode.Null, "Ctrl+Alt+Shift")] -#pragma warning disable xUnit1025 // InlineData should be unique within the Theory it belongs to - [InlineData (KeyCode.ShiftMask, "Shift")] - [InlineData (KeyCode.CtrlMask, "Ctrl")] - [InlineData (KeyCode.AltMask, "Alt")] - [InlineData (KeyCode.ShiftMask | KeyCode.CtrlMask, "Ctrl+Shift")] - [InlineData (KeyCode.ShiftMask | KeyCode.AltMask, "Alt+Shift")] - [InlineData (KeyCode.AltMask | KeyCode.CtrlMask, "Ctrl+Alt")] - [InlineData (KeyCode.ShiftMask | KeyCode.CtrlMask | KeyCode.AltMask, "Ctrl+Alt+Shift")] -#pragma warning restore xUnit1025 // InlineData should be unique within the Theory it belongs to [InlineData (KeyCode.CharMask, "CharMask")] [InlineData (KeyCode.SpecialMask, "Ctrl+Alt+Shift")] [InlineData ((KeyCode)'+', "+")] @@ -519,8 +507,8 @@ public class KeyTests Key a = Key.A; Assert.Equal (KeyCode.A | KeyCode.ShiftMask, a.WithShift); - Key CAD = Key.Delete.WithCtrl.WithAlt; - Assert.Equal (KeyCode.Delete | KeyCode.CtrlMask | KeyCode.AltMask, CAD); + Key cad = Key.Delete.WithCtrl.WithAlt; + Assert.Equal (KeyCode.Delete | KeyCode.CtrlMask | KeyCode.AltMask, cad); } // Test Equals diff --git a/UnitTests/Input/Mouse/MouseBindingTests.cs b/Tests/UnitTestsParallelizable/Input/Mouse/MouseBindingTests.cs similarity index 100% rename from UnitTests/Input/Mouse/MouseBindingTests.cs rename to Tests/UnitTestsParallelizable/Input/Mouse/MouseBindingTests.cs diff --git a/UnitTests/Input/Mouse/MouseBindingsTests.cs b/Tests/UnitTestsParallelizable/Input/Mouse/MouseBindingsTests.cs similarity index 100% rename from UnitTests/Input/Mouse/MouseBindingsTests.cs rename to Tests/UnitTestsParallelizable/Input/Mouse/MouseBindingsTests.cs diff --git a/UnitTests/Input/Mouse/MouseEventArgsTest.cs b/Tests/UnitTestsParallelizable/Input/Mouse/MouseEventArgsTest.cs similarity index 100% rename from UnitTests/Input/Mouse/MouseEventArgsTest.cs rename to Tests/UnitTestsParallelizable/Input/Mouse/MouseEventArgsTest.cs diff --git a/UnitTests/Input/ResponderTests.cs b/Tests/UnitTestsParallelizable/Input/ResponderTests.cs similarity index 99% rename from UnitTests/Input/ResponderTests.cs rename to Tests/UnitTestsParallelizable/Input/ResponderTests.cs index ed899aede..c45d37e2d 100644 --- a/UnitTests/Input/ResponderTests.cs +++ b/Tests/UnitTestsParallelizable/Input/ResponderTests.cs @@ -4,8 +4,6 @@ namespace Terminal.Gui.InputTests; public class ResponderTests { - - [Fact] public void KeyPressed_Handled_True_Cancels_KeyPress () { diff --git a/UnitTests/LocalPackagesTests.cs b/Tests/UnitTestsParallelizable/LocalPackagesTests.cs similarity index 93% rename from UnitTests/LocalPackagesTests.cs rename to Tests/UnitTestsParallelizable/LocalPackagesTests.cs index 04e5c7802..38c268cff 100644 --- a/UnitTests/LocalPackagesTests.cs +++ b/Tests/UnitTestsParallelizable/LocalPackagesTests.cs @@ -8,7 +8,7 @@ public class LocalPackagesTests public LocalPackagesTests () { // Define the local_packages path relative to the solution directory - _localPackagesPath = Path.Combine (Directory.GetCurrentDirectory (), "..", "..", "..", "..", "local_packages"); + _localPackagesPath = Path.Combine (Directory.GetCurrentDirectory (), "..", "..", "..", "..", "..", "local_packages"); } [Fact] diff --git a/Tests/UnitTestsParallelizable/README.md b/Tests/UnitTestsParallelizable/README.md new file mode 100644 index 000000000..5d1ebb4d3 --- /dev/null +++ b/Tests/UnitTestsParallelizable/README.md @@ -0,0 +1,2 @@ +# Automated Unit Tests for parallelizable code + diff --git a/UnitTests/Text/CollectionNavigatorTests.cs b/Tests/UnitTestsParallelizable/Text/CollectionNavigatorTests.cs similarity index 100% rename from UnitTests/Text/CollectionNavigatorTests.cs rename to Tests/UnitTestsParallelizable/Text/CollectionNavigatorTests.cs diff --git a/UnitTests/Text/RuneTests.cs b/Tests/UnitTestsParallelizable/Text/RuneTests.cs similarity index 100% rename from UnitTests/Text/RuneTests.cs rename to Tests/UnitTestsParallelizable/Text/RuneTests.cs diff --git a/UnitTests/Text/StringTests.cs b/Tests/UnitTestsParallelizable/Text/StringTests.cs similarity index 100% rename from UnitTests/Text/StringTests.cs rename to Tests/UnitTestsParallelizable/Text/StringTests.cs diff --git a/UnitTests/Text/TextFormatterTests.cs b/Tests/UnitTestsParallelizable/Text/TextFormatterTests.cs similarity index 53% rename from UnitTests/Text/TextFormatterTests.cs rename to Tests/UnitTestsParallelizable/Text/TextFormatterTests.cs index 786f566fd..18b7e5041 100644 --- a/UnitTests/Text/TextFormatterTests.cs +++ b/Tests/UnitTestsParallelizable/Text/TextFormatterTests.cs @@ -1,16 +1,14 @@ using System.Text; -using UICatalog; using Xunit.Abstractions; +using UnitTests; + // Alias Console to MockConsole so we don't accidentally use Console namespace Terminal.Gui.TextTests; public class TextFormatterTests { - public TextFormatterTests (ITestOutputHelper output) { _output = output; } - private readonly ITestOutputHelper _output; - [Theory] [InlineData ("")] [InlineData (null)] @@ -237,3978 +235,7 @@ public class TextFormatterTests public static IEnumerable CMGlyphs => new List { new object [] { $"{Glyphs.LeftBracket} Say Hello 你 {Glyphs.RightBracket}", 16, 15 } }; - [SetupFakeDriver] - [Theory] - [InlineData ("A", 0, "")] - [InlineData ("A", 1, "A")] - [InlineData ("A", 2, "A")] - [InlineData ("A", 3, " A")] - [InlineData ("AB", 1, "A")] - [InlineData ("AB", 2, "AB")] - [InlineData ("ABC", 3, "ABC")] - [InlineData ("ABC", 4, "ABC")] - [InlineData ("ABC", 5, " ABC")] - [InlineData ("ABC", 6, " ABC")] - [InlineData ("ABC", 9, " ABC")] - public void Draw_Horizontal_Centered (string text, int width, string expectedText) - { - TextFormatter tf = new () - { - Text = text, - Alignment = Alignment.Center - }; - tf.ConstrainToWidth = width; - tf.ConstrainToHeight = 1; - tf.Draw (new (0, 0, width, 1), Attribute.Default, Attribute.Default); - - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); - } - - [SetupFakeDriver] - [Theory] - [InlineData ("A", 0, "")] - [InlineData ("A", 1, "A")] - [InlineData ("A", 2, "A")] - [InlineData ("A B", 3, "A B")] - [InlineData ("A B", 1, "A")] - [InlineData ("A B", 2, "A")] - [InlineData ("A B", 4, "A B")] - [InlineData ("A B", 5, "A B")] - [InlineData ("A B", 6, "A B")] - [InlineData ("A B", 10, "A B")] - [InlineData ("ABC ABC", 10, "ABC ABC")] - public void Draw_Horizontal_Justified (string text, int width, string expectedText) - { - TextFormatter tf = new () - { - Text = text, - Alignment = Alignment.Fill - }; - - tf.ConstrainToWidth = width; - tf.ConstrainToHeight = 1; - tf.Draw (new (0, 0, width, 1), Attribute.Default, Attribute.Default); - - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); - } - - [SetupFakeDriver] - [Theory] - [InlineData ("A", 0, "")] - [InlineData ("A", 1, "A")] - [InlineData ("A", 2, "A")] - [InlineData ("AB", 1, "A")] - [InlineData ("AB", 2, "AB")] - [InlineData ("ABC", 3, "ABC")] - [InlineData ("ABC", 4, "ABC")] - [InlineData ("ABC", 6, "ABC")] - public void Draw_Horizontal_Left (string text, int width, string expectedText) - - { - TextFormatter tf = new () - { - Text = text, - Alignment = Alignment.Start - }; - - tf.ConstrainToWidth = width; - tf.ConstrainToHeight = 1; - tf.Draw (new (0, 0, width, 1), Attribute.Default, Attribute.Default); - - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); - } - - [SetupFakeDriver] - [Theory] - [InlineData ("A", 0, "")] - [InlineData ("A", 1, "A")] - [InlineData ("A", 2, " A")] - [InlineData ("AB", 1, "B")] - [InlineData ("AB", 2, "AB")] - [InlineData ("ABC", 3, "ABC")] - [InlineData ("ABC", 4, " ABC")] - [InlineData ("ABC", 6, " ABC")] - public void Draw_Horizontal_Right (string text, int width, string expectedText) - { - TextFormatter tf = new () - { - Text = text, - Alignment = Alignment.End - }; - - tf.ConstrainToWidth = width; - tf.ConstrainToHeight = 1; - - tf.Draw (new (Point.Empty, new (width, 1)), Attribute.Default, Attribute.Default); - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); - } - - [SetupFakeDriver] - [Theory] - [InlineData ("A", 1, 0, "")] - [InlineData ("A", 0, 1, "")] - [InlineData ("AB1 2", 2, 1, "2")] - [InlineData ("AB12", 5, 1, "21BA")] - [InlineData ("AB\n12", 5, 2, "21\nBA")] - [InlineData ("ABC 123 456", 7, 2, "CBA \n654 321")] - [InlineData ("こんにちは", 1, 1, "")] - [InlineData ("こんにちは", 2, 1, "は")] - [InlineData ("こんにちは", 5, 1, "はち")] - [InlineData ("こんにちは", 10, 1, "はちにんこ")] - [InlineData ("こんにちは\nAB\n12", 10, 3, "21 \nBA \nはちにんこ")] - public void Draw_Horizontal_RightLeft_BottomTop (string text, int width, int height, string expectedText) - { - TextFormatter tf = new () - { - Text = text, - Direction = TextDirection.RightLeft_BottomTop - }; - - tf.ConstrainToWidth = width; - tf.ConstrainToHeight = height; - tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); - - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); - } - - [SetupFakeDriver] - [Theory] - [InlineData ("A", 1, 0, "")] - [InlineData ("A", 0, 1, "")] - [InlineData ("AB1 2", 2, 1, "2")] - [InlineData ("AB12", 5, 1, "21BA")] - [InlineData ("AB\n12", 5, 2, "BA\n21")] - [InlineData ("ABC 123 456", 7, 2, "654 321\nCBA ")] - [InlineData ("こんにちは", 1, 1, "")] - [InlineData ("こんにちは", 2, 1, "は")] - [InlineData ("こんにちは", 5, 1, "はち")] - [InlineData ("こんにちは", 10, 1, "はちにんこ")] - [InlineData ("こんにちは\nAB\n12", 10, 3, "はちにんこ\nBA \n21 ")] - public void Draw_Horizontal_RightLeft_TopBottom (string text, int width, int height, string expectedText) - { - TextFormatter tf = new () - { - Text = text, - Direction = TextDirection.RightLeft_TopBottom - }; - - tf.ConstrainToWidth = width; - tf.ConstrainToHeight = height; - tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); - - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); - } - - [SetupFakeDriver] - [Theory] - - // Horizontal with Alignment.Start - // LeftRight_TopBottom - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Start, - TextDirection.LeftRight_TopBottom, - @" -0 2 4** -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Start, - TextDirection.LeftRight_TopBottom, - @" -**0 2 4 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Start, - TextDirection.LeftRight_TopBottom, - @" -*0 2 4* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Start, - TextDirection.LeftRight_TopBottom, - @" -0 2 4 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Start, - TextDirection.LeftRight_TopBottom, - @" -0 你 4* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Start, - TextDirection.LeftRight_TopBottom, - @" -*0 你 4 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Start, - TextDirection.LeftRight_TopBottom, - @" -0 你 4* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Start, - TextDirection.LeftRight_TopBottom, - @" -0 你 4 -******* -******* -******* -******* -******* -*******")] - - // LeftRight_BottomTop - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Start, - TextDirection.LeftRight_BottomTop, - @" -0 2 4** -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Start, - TextDirection.LeftRight_BottomTop, - @" -**0 2 4 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Start, - TextDirection.LeftRight_BottomTop, - @" -*0 2 4* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Start, - TextDirection.LeftRight_BottomTop, - @" -0 2 4 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Start, - TextDirection.LeftRight_BottomTop, - @" -0 你 4* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Start, - TextDirection.LeftRight_BottomTop, - @" -*0 你 4 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Start, - TextDirection.LeftRight_BottomTop, - @" -0 你 4* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Start, - TextDirection.LeftRight_BottomTop, - @" -0 你 4 -******* -******* -******* -******* -******* -*******")] - - // RightLeft_TopBottom - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Start, - TextDirection.RightLeft_TopBottom, - @" -4 2 0** -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Start, - TextDirection.RightLeft_TopBottom, - @" -**4 2 0 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Start, - TextDirection.RightLeft_TopBottom, - @" -*4 2 0* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Start, - TextDirection.RightLeft_TopBottom, - @" -4 2 0 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Start, - TextDirection.RightLeft_TopBottom, - @" -4 你 0* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Start, - TextDirection.RightLeft_TopBottom, - @" -*4 你 0 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Start, - TextDirection.RightLeft_TopBottom, - @" -4 你 0* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Start, - TextDirection.RightLeft_TopBottom, - @" -4 你 0 -******* -******* -******* -******* -******* -*******")] - - // RightLeft_BottomTop - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Start, - TextDirection.RightLeft_BottomTop, - @" -4 2 0** -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Start, - TextDirection.RightLeft_BottomTop, - @" -**4 2 0 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Start, - TextDirection.RightLeft_BottomTop, - @" -*4 2 0* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Start, - TextDirection.RightLeft_BottomTop, - @" -4 2 0 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Start, - TextDirection.RightLeft_BottomTop, - @" -4 你 0* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Start, - TextDirection.RightLeft_BottomTop, - @" -*4 你 0 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Start, - TextDirection.RightLeft_BottomTop, - @" -4 你 0* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Start, - TextDirection.RightLeft_BottomTop, - @" -4 你 0 -******* -******* -******* -******* -******* -*******")] - - // Horizontal with Alignment.End - // LeftRight_TopBottom - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.End, - TextDirection.LeftRight_TopBottom, - @" -******* -******* -******* -******* -******* -******* -0 2 4**")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.End, - TextDirection.LeftRight_TopBottom, - @" -******* -******* -******* -******* -******* -******* -**0 2 4")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.End, - TextDirection.LeftRight_TopBottom, - @" -******* -******* -******* -******* -******* -******* -*0 2 4*")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.End, - TextDirection.LeftRight_TopBottom, - @" -******* -******* -******* -******* -******* -******* -0 2 4")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.End, - TextDirection.LeftRight_TopBottom, - @" -******* -******* -******* -******* -******* -******* -0 你 4*")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.End, - TextDirection.LeftRight_TopBottom, - @" -******* -******* -******* -******* -******* -******* -*0 你 4")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.End, - TextDirection.LeftRight_TopBottom, - @" -******* -******* -******* -******* -******* -******* -0 你 4*")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.End, - TextDirection.LeftRight_TopBottom, - @" -******* -******* -******* -******* -******* -******* -0 你 4")] - - // LeftRight_BottomTop - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.End, - TextDirection.LeftRight_BottomTop, - @" -******* -******* -******* -******* -******* -******* -0 2 4**")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.End, - TextDirection.LeftRight_BottomTop, - @" -******* -******* -******* -******* -******* -******* -**0 2 4")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.End, - TextDirection.LeftRight_BottomTop, - @" -******* -******* -******* -******* -******* -******* -*0 2 4*")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.End, - TextDirection.LeftRight_BottomTop, - @" -******* -******* -******* -******* -******* -******* -0 2 4")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.End, - TextDirection.LeftRight_BottomTop, - @" -******* -******* -******* -******* -******* -******* -0 你 4*")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.End, - TextDirection.LeftRight_BottomTop, - @" -******* -******* -******* -******* -******* -******* -*0 你 4")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.End, - TextDirection.LeftRight_BottomTop, - @" -******* -******* -******* -******* -******* -******* -0 你 4*")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.End, - TextDirection.LeftRight_BottomTop, - @" -******* -******* -******* -******* -******* -******* -0 你 4")] - - // RightLeft_TopBottom - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.End, - TextDirection.RightLeft_TopBottom, - @" -******* -******* -******* -******* -******* -******* -4 2 0**")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.End, - TextDirection.RightLeft_TopBottom, - @" -******* -******* -******* -******* -******* -******* -**4 2 0")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.End, - TextDirection.RightLeft_TopBottom, - @" -******* -******* -******* -******* -******* -******* -*4 2 0*")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.End, - TextDirection.RightLeft_TopBottom, - @" -******* -******* -******* -******* -******* -******* -4 2 0")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.End, - TextDirection.RightLeft_TopBottom, - @" -******* -******* -******* -******* -******* -******* -4 你 0*")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.End, - TextDirection.RightLeft_TopBottom, - @" -******* -******* -******* -******* -******* -******* -*4 你 0")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.End, - TextDirection.RightLeft_TopBottom, - @" -******* -******* -******* -******* -******* -******* -4 你 0*")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.End, - TextDirection.RightLeft_TopBottom, - @" -******* -******* -******* -******* -******* -******* -4 你 0")] - - // RightLeft_BottomTop - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.End, - TextDirection.RightLeft_BottomTop, - @" -******* -******* -******* -******* -******* -******* -4 2 0**")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.End, - TextDirection.RightLeft_BottomTop, - @" -******* -******* -******* -******* -******* -******* -**4 2 0")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.End, - TextDirection.RightLeft_BottomTop, - @" -******* -******* -******* -******* -******* -******* -*4 2 0*")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.End, - TextDirection.RightLeft_BottomTop, - @" -******* -******* -******* -******* -******* -******* -4 2 0")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.End, - TextDirection.RightLeft_BottomTop, - @" -******* -******* -******* -******* -******* -******* -4 你 0*")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.End, - TextDirection.RightLeft_BottomTop, - @" -******* -******* -******* -******* -******* -******* -*4 你 0")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.End, - TextDirection.RightLeft_BottomTop, - @" -******* -******* -******* -******* -******* -******* -4 你 0*")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.End, - TextDirection.RightLeft_BottomTop, - @" -******* -******* -******* -******* -******* -******* -4 你 0")] - - // Horizontal with alignment.Centered - // LeftRight_TopBottom - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Center, - TextDirection.LeftRight_TopBottom, - @" -******* -******* -******* -0 2 4** -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Center, - TextDirection.LeftRight_TopBottom, - @" -******* -******* -******* -**0 2 4 -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Center, - TextDirection.LeftRight_TopBottom, - @" -******* -******* -******* -*0 2 4* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Center, - TextDirection.LeftRight_TopBottom, - @" -******* -******* -******* -0 2 4 -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Center, - TextDirection.LeftRight_TopBottom, - @" -******* -******* -******* -0 你 4* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Center, - TextDirection.LeftRight_TopBottom, - @" -******* -******* -******* -*0 你 4 -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Center, - TextDirection.LeftRight_TopBottom, - @" -******* -******* -******* -0 你 4* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Center, - TextDirection.LeftRight_TopBottom, - @" -******* -******* -******* -0 你 4 -******* -******* -*******")] - - // LeftRight_BottomTop - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Center, - TextDirection.LeftRight_BottomTop, - @" -******* -******* -******* -0 2 4** -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Center, - TextDirection.LeftRight_BottomTop, - @" -******* -******* -******* -**0 2 4 -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Center, - TextDirection.LeftRight_BottomTop, - @" -******* -******* -******* -*0 2 4* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Center, - TextDirection.LeftRight_BottomTop, - @" -******* -******* -******* -0 2 4 -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Center, - TextDirection.LeftRight_BottomTop, - @" -******* -******* -******* -0 你 4* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Center, - TextDirection.LeftRight_BottomTop, - @" -******* -******* -******* -*0 你 4 -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Center, - TextDirection.LeftRight_BottomTop, - @" -******* -******* -******* -0 你 4* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Center, - TextDirection.LeftRight_BottomTop, - @" -******* -******* -******* -0 你 4 -******* -******* -*******")] - - // RightLeft_TopBottom - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Center, - TextDirection.RightLeft_TopBottom, - @" -******* -******* -******* -4 2 0** -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Center, - TextDirection.RightLeft_TopBottom, - @" -******* -******* -******* -**4 2 0 -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Center, - TextDirection.RightLeft_TopBottom, - @" -******* -******* -******* -*4 2 0* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Center, - TextDirection.RightLeft_TopBottom, - @" -******* -******* -******* -4 2 0 -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Center, - TextDirection.RightLeft_TopBottom, - @" -******* -******* -******* -4 你 0* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Center, - TextDirection.RightLeft_TopBottom, - @" -******* -******* -******* -*4 你 0 -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Center, - TextDirection.RightLeft_TopBottom, - @" -******* -******* -******* -4 你 0* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Center, - TextDirection.RightLeft_TopBottom, - @" -******* -******* -******* -4 你 0 -******* -******* -*******")] - - // RightLeft_BottomTop - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Center, - TextDirection.RightLeft_BottomTop, - @" -******* -******* -******* -4 2 0** -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Center, - TextDirection.RightLeft_BottomTop, - @" -******* -******* -******* -**4 2 0 -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Center, - TextDirection.RightLeft_BottomTop, - @" -******* -******* -******* -*4 2 0* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Center, - TextDirection.RightLeft_BottomTop, - @" -******* -******* -******* -4 2 0 -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Center, - TextDirection.RightLeft_BottomTop, - @" -******* -******* -******* -4 你 0* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Center, - TextDirection.RightLeft_BottomTop, - @" -******* -******* -******* -*4 你 0 -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Center, - TextDirection.RightLeft_BottomTop, - @" -******* -******* -******* -4 你 0* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Center, - TextDirection.RightLeft_BottomTop, - @" -******* -******* -******* -4 你 0 -******* -******* -*******")] - - // Horizontal with alignment.Justified - // LeftRight_TopBottom - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Fill, - TextDirection.LeftRight_TopBottom, - @" -0 2 4** -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Fill, - TextDirection.LeftRight_TopBottom, - @" -**0 2 4 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Fill, - TextDirection.LeftRight_TopBottom, - @" -*0 2 4* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Fill, - TextDirection.LeftRight_TopBottom, - @" -0 2 4 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Fill, - TextDirection.LeftRight_TopBottom, - @" -0 你 4* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Fill, - TextDirection.LeftRight_TopBottom, - @" -*0 你 4 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Fill, - TextDirection.LeftRight_TopBottom, - @" -0 你 4* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Fill, - TextDirection.LeftRight_TopBottom, - @" -0 你 4 -******* -******* -******* -******* -******* -*******")] - - // LeftRight_BottomTop - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Fill, - TextDirection.LeftRight_BottomTop, - @" -0 2 4** -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Fill, - TextDirection.LeftRight_BottomTop, - @" -**0 2 4 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Fill, - TextDirection.LeftRight_BottomTop, - @" -*0 2 4* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Fill, - TextDirection.LeftRight_BottomTop, - @" -0 2 4 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Fill, - TextDirection.LeftRight_BottomTop, - @" -0 你 4* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Fill, - TextDirection.LeftRight_BottomTop, - @" -*0 你 4 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Fill, - TextDirection.LeftRight_BottomTop, - @" -0 你 4* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Fill, - TextDirection.LeftRight_BottomTop, - @" -0 你 4 -******* -******* -******* -******* -******* -*******")] - - // RightLeft_TopBottom - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Fill, - TextDirection.RightLeft_TopBottom, - @" -4 2 0** -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Fill, - TextDirection.RightLeft_TopBottom, - @" -**4 2 0 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Fill, - TextDirection.RightLeft_TopBottom, - @" -*4 2 0* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Fill, - TextDirection.RightLeft_TopBottom, - @" -4 2 0 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Fill, - TextDirection.RightLeft_TopBottom, - @" -4 你 0* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Fill, - TextDirection.RightLeft_TopBottom, - @" -*4 你 0 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Fill, - TextDirection.RightLeft_TopBottom, - @" -4 你 0* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Fill, - TextDirection.RightLeft_TopBottom, - @" -4 你 0 -******* -******* -******* -******* -******* -*******")] - - // RightLeft_BottomTop - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Fill, - TextDirection.RightLeft_BottomTop, - @" -4 2 0** -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Fill, - TextDirection.RightLeft_BottomTop, - @" -**4 2 0 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Fill, - TextDirection.RightLeft_BottomTop, - @" -*4 2 0* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Fill, - TextDirection.RightLeft_BottomTop, - @" -4 2 0 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Fill, - TextDirection.RightLeft_BottomTop, - @" -4 你 0* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Fill, - TextDirection.RightLeft_BottomTop, - @" -*4 你 0 -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Fill, - TextDirection.RightLeft_BottomTop, - @" -4 你 0* -******* -******* -******* -******* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Fill, - TextDirection.RightLeft_BottomTop, - @" -4 你 0 -******* -******* -******* -******* -******* -*******")] - - // Vertical with alignment.Left - // TopBottom_LeftRight - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Start, - TextDirection.TopBottom_LeftRight, - @" -0****** - ****** -2****** - ****** -4****** -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.End, - TextDirection.TopBottom_LeftRight, - @" -******* -******* -0****** - ****** -2****** - ****** -4******")] - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Center, - TextDirection.TopBottom_LeftRight, - @" -******* -0****** - ****** -2****** - ****** -4****** -*******")] - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Fill, - TextDirection.TopBottom_LeftRight, - @" -0****** - ****** - ****** -2****** - ****** - ****** -4******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Start, - TextDirection.TopBottom_LeftRight, - @" -0****** - ****** -你***** - ****** -4****** -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.End, - TextDirection.TopBottom_LeftRight, - @" -******* -******* -0****** - ****** -你***** - ****** -4******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Center, - TextDirection.TopBottom_LeftRight, - @" -******* -0****** - ****** -你***** - ****** -4****** -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Fill, - TextDirection.TopBottom_LeftRight, - @" -0****** - ****** - ****** -你***** - ****** - ****** -4******")] - - // TopBottom_RightLeft - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Start, - TextDirection.TopBottom_RightLeft, - @" -0****** - ****** -2****** - ****** -4****** -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.End, - TextDirection.TopBottom_RightLeft, - @" -******* -******* -0****** - ****** -2****** - ****** -4******")] - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Center, - TextDirection.TopBottom_RightLeft, - @" -******* -0****** - ****** -2****** - ****** -4****** -*******")] - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Fill, - TextDirection.TopBottom_RightLeft, - @" -0****** - ****** - ****** -2****** - ****** - ****** -4******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Start, - TextDirection.TopBottom_RightLeft, - @" -0****** - ****** -你***** - ****** -4****** -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.End, - TextDirection.TopBottom_RightLeft, - @" -******* -******* -0****** - ****** -你***** - ****** -4******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Center, - TextDirection.TopBottom_RightLeft, - @" -******* -0****** - ****** -你***** - ****** -4****** -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Fill, - TextDirection.TopBottom_RightLeft, - @" -0****** - ****** - ****** -你***** - ****** - ****** -4******")] - - // BottomTop_LeftRight - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Start, - TextDirection.BottomTop_LeftRight, - @" -4****** - ****** -2****** - ****** -0****** -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.End, - TextDirection.BottomTop_LeftRight, - @" -******* -******* -4****** - ****** -2****** - ****** -0******")] - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Center, - TextDirection.BottomTop_LeftRight, - @" -******* -4****** - ****** -2****** - ****** -0****** -*******")] - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Fill, - TextDirection.BottomTop_LeftRight, - @" -4****** - ****** - ****** -2****** - ****** - ****** -0******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Start, - TextDirection.BottomTop_LeftRight, - @" -4****** - ****** -你***** - ****** -0****** -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.End, - TextDirection.BottomTop_LeftRight, - @" -******* -******* -4****** - ****** -你***** - ****** -0******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Center, - TextDirection.BottomTop_LeftRight, - @" -******* -4****** - ****** -你***** - ****** -0****** -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Fill, - TextDirection.BottomTop_LeftRight, - @" -4****** - ****** - ****** -你***** - ****** - ****** -0******")] - - // BottomTop_RightLeft - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Start, - TextDirection.BottomTop_RightLeft, - @" -4****** - ****** -2****** - ****** -0****** -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.End, - TextDirection.BottomTop_RightLeft, - @" -******* -******* -4****** - ****** -2****** - ****** -0******")] - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Center, - TextDirection.BottomTop_RightLeft, - @" -******* -4****** - ****** -2****** - ****** -0****** -*******")] - [InlineData ( - "0 2 4", - Alignment.Start, - Alignment.Fill, - TextDirection.BottomTop_RightLeft, - @" -4****** - ****** - ****** -2****** - ****** - ****** -0******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Start, - TextDirection.BottomTop_RightLeft, - @" -4****** - ****** -你***** - ****** -0****** -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.End, - TextDirection.BottomTop_RightLeft, - @" -******* -******* -4****** - ****** -你***** - ****** -0******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Center, - TextDirection.BottomTop_RightLeft, - @" -******* -4****** - ****** -你***** - ****** -0****** -*******")] - [InlineData ( - "0 你 4", - Alignment.Start, - Alignment.Fill, - TextDirection.BottomTop_RightLeft, - @" -4****** - ****** - ****** -你***** - ****** - ****** -0******")] - - // Vertical with alignment.Right - // TopBottom_LeftRight - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Start, - TextDirection.TopBottom_LeftRight, - @" -******0 -****** -******2 -****** -******4 -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.End, - TextDirection.TopBottom_LeftRight, - @" -******* -******* -******0 -****** -******2 -****** -******4")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Center, - TextDirection.TopBottom_LeftRight, - @" -******* -******0 -****** -******2 -****** -******4 -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Fill, - TextDirection.TopBottom_LeftRight, - @" -******0 -****** -****** -******2 -****** -****** -******4")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Start, - TextDirection.TopBottom_LeftRight, - @" -*****0* -***** * -*****你 -***** * -*****4* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.End, - TextDirection.TopBottom_LeftRight, - @" -******* -******* -*****0* -***** * -*****你 -***** * -*****4*")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Center, - TextDirection.TopBottom_LeftRight, - @" -******* -*****0* -***** * -*****你 -***** * -*****4* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Fill, - TextDirection.TopBottom_LeftRight, - @" -*****0* -***** * -***** * -*****你 -***** * -***** * -*****4*")] - - // TopBottom_RightLeft - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Start, - TextDirection.TopBottom_RightLeft, - @" -******0 -****** -******2 -****** -******4 -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.End, - TextDirection.TopBottom_RightLeft, - @" -******* -******* -******0 -****** -******2 -****** -******4")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Center, - TextDirection.TopBottom_RightLeft, - @" -******* -******0 -****** -******2 -****** -******4 -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Fill, - TextDirection.TopBottom_RightLeft, - @" -******0 -****** -****** -******2 -****** -****** -******4")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Start, - TextDirection.TopBottom_RightLeft, - @" -*****0* -***** * -*****你 -***** * -*****4* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.End, - TextDirection.TopBottom_RightLeft, - @" -******* -******* -*****0* -***** * -*****你 -***** * -*****4*")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Center, - TextDirection.TopBottom_RightLeft, - @" -******* -*****0* -***** * -*****你 -***** * -*****4* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Fill, - TextDirection.TopBottom_RightLeft, - @" -*****0* -***** * -***** * -*****你 -***** * -***** * -*****4*")] - - // BottomTop_LeftRight - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Start, - TextDirection.BottomTop_LeftRight, - @" -******4 -****** -******2 -****** -******0 -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.End, - TextDirection.BottomTop_LeftRight, - @" -******* -******* -******4 -****** -******2 -****** -******0")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Center, - TextDirection.BottomTop_LeftRight, - @" -******* -******4 -****** -******2 -****** -******0 -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Fill, - TextDirection.BottomTop_LeftRight, - @" -******4 -****** -****** -******2 -****** -****** -******0")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Start, - TextDirection.BottomTop_LeftRight, - @" -*****4* -***** * -*****你 -***** * -*****0* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.End, - TextDirection.BottomTop_LeftRight, - @" -******* -******* -*****4* -***** * -*****你 -***** * -*****0*")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Center, - TextDirection.BottomTop_LeftRight, - @" -******* -*****4* -***** * -*****你 -***** * -*****0* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Fill, - TextDirection.BottomTop_LeftRight, - @" -*****4* -***** * -***** * -*****你 -***** * -***** * -*****0*")] - - // BottomTop_RightLeft - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Start, - TextDirection.BottomTop_RightLeft, - @" -******4 -****** -******2 -****** -******0 -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.End, - TextDirection.BottomTop_RightLeft, - @" -******* -******* -******4 -****** -******2 -****** -******0")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Center, - TextDirection.BottomTop_RightLeft, - @" -******* -******4 -****** -******2 -****** -******0 -*******")] - [InlineData ( - "0 2 4", - Alignment.End, - Alignment.Fill, - TextDirection.BottomTop_RightLeft, - @" -******4 -****** -****** -******2 -****** -****** -******0")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Start, - TextDirection.BottomTop_RightLeft, - @" -*****4* -***** * -*****你 -***** * -*****0* -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.End, - TextDirection.BottomTop_RightLeft, - @" -******* -******* -*****4* -***** * -*****你 -***** * -*****0*")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Center, - TextDirection.BottomTop_RightLeft, - @" -******* -*****4* -***** * -*****你 -***** * -*****0* -*******")] - [InlineData ( - "0 你 4", - Alignment.End, - Alignment.Fill, - TextDirection.BottomTop_RightLeft, - @" -*****4* -***** * -***** * -*****你 -***** * -***** * -*****0*")] - - // Vertical with alignment.Centered - // TopBottom_LeftRight - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Start, - TextDirection.TopBottom_LeftRight, - @" -***0*** -*** *** -***2*** -*** *** -***4*** -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.End, - TextDirection.TopBottom_LeftRight, - @" -******* -******* -***0*** -*** *** -***2*** -*** *** -***4***")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Center, - TextDirection.TopBottom_LeftRight, - @" -******* -***0*** -*** *** -***2*** -*** *** -***4*** -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Fill, - TextDirection.TopBottom_LeftRight, - @" -***0*** -*** *** -*** *** -***2*** -*** *** -*** *** -***4***")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Start, - TextDirection.TopBottom_LeftRight, - @" -**0**** -** **** -**你*** -** **** -**4**** -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.End, - TextDirection.TopBottom_LeftRight, - @" -******* -******* -**0**** -** **** -**你*** -** **** -**4****")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Center, - TextDirection.TopBottom_LeftRight, - @" -******* -**0**** -** **** -**你*** -** **** -**4**** -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Fill, - TextDirection.TopBottom_LeftRight, - @" -**0**** -** **** -** **** -**你*** -** **** -** **** -**4****")] - - // TopBottom_RightLeft - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Start, - TextDirection.TopBottom_RightLeft, - @" -***0*** -*** *** -***2*** -*** *** -***4*** -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.End, - TextDirection.TopBottom_RightLeft, - @" -******* -******* -***0*** -*** *** -***2*** -*** *** -***4***")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Center, - TextDirection.TopBottom_RightLeft, - @" -******* -***0*** -*** *** -***2*** -*** *** -***4*** -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Fill, - TextDirection.TopBottom_RightLeft, - @" -***0*** -*** *** -*** *** -***2*** -*** *** -*** *** -***4***")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Start, - TextDirection.TopBottom_RightLeft, - @" -**0**** -** **** -**你*** -** **** -**4**** -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.End, - TextDirection.TopBottom_RightLeft, - @" -******* -******* -**0**** -** **** -**你*** -** **** -**4****")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Center, - TextDirection.TopBottom_RightLeft, - @" -******* -**0**** -** **** -**你*** -** **** -**4**** -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Fill, - TextDirection.TopBottom_RightLeft, - @" -**0**** -** **** -** **** -**你*** -** **** -** **** -**4****")] - - // BottomTop_LeftRight - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Start, - TextDirection.BottomTop_LeftRight, - @" -***4*** -*** *** -***2*** -*** *** -***0*** -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.End, - TextDirection.BottomTop_LeftRight, - @" -******* -******* -***4*** -*** *** -***2*** -*** *** -***0***")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Center, - TextDirection.BottomTop_LeftRight, - @" -******* -***4*** -*** *** -***2*** -*** *** -***0*** -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Fill, - TextDirection.BottomTop_LeftRight, - @" -***4*** -*** *** -*** *** -***2*** -*** *** -*** *** -***0***")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Start, - TextDirection.BottomTop_LeftRight, - @" -**4**** -** **** -**你*** -** **** -**0**** -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.End, - TextDirection.BottomTop_LeftRight, - @" -******* -******* -**4**** -** **** -**你*** -** **** -**0****")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Center, - TextDirection.BottomTop_LeftRight, - @" -******* -**4**** -** **** -**你*** -** **** -**0**** -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Fill, - TextDirection.BottomTop_LeftRight, - @" -**4**** -** **** -** **** -**你*** -** **** -** **** -**0****")] - - // BottomTop_RightLeft - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Start, - TextDirection.BottomTop_RightLeft, - @" -***4*** -*** *** -***2*** -*** *** -***0*** -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.End, - TextDirection.BottomTop_RightLeft, - @" -******* -******* -***4*** -*** *** -***2*** -*** *** -***0***")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Center, - TextDirection.BottomTop_RightLeft, - @" -******* -***4*** -*** *** -***2*** -*** *** -***0*** -*******")] - [InlineData ( - "0 2 4", - Alignment.Center, - Alignment.Fill, - TextDirection.BottomTop_RightLeft, - @" -***4*** -*** *** -*** *** -***2*** -*** *** -*** *** -***0***")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Start, - TextDirection.BottomTop_RightLeft, - @" -**4**** -** **** -**你*** -** **** -**0**** -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.End, - TextDirection.BottomTop_RightLeft, - @" -******* -******* -**4**** -** **** -**你*** -** **** -**0****")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Center, - TextDirection.BottomTop_RightLeft, - @" -******* -**4**** -** **** -**你*** -** **** -**0**** -*******")] - [InlineData ( - "0 你 4", - Alignment.Center, - Alignment.Fill, - TextDirection.BottomTop_RightLeft, - @" -**4**** -** **** -** **** -**你*** -** **** -** **** -**0****")] - - // Vertical with alignment.Justified - // TopBottom_LeftRight - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Start, - TextDirection.TopBottom_LeftRight, - @" -0****** - ****** -2****** - ****** -4****** -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.End, - TextDirection.TopBottom_LeftRight, - @" -******* -******* -0****** - ****** -2****** - ****** -4******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Center, - TextDirection.TopBottom_LeftRight, - @" -******* -0****** - ****** -2****** - ****** -4****** -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Fill, - TextDirection.TopBottom_LeftRight, - @" -0****** - ****** - ****** -2****** - ****** - ****** -4******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Start, - TextDirection.TopBottom_LeftRight, - @" -0****** - ****** -你***** - ****** -4****** -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.End, - TextDirection.TopBottom_LeftRight, - @" -******* -******* -0****** - ****** -你***** - ****** -4******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Center, - TextDirection.TopBottom_LeftRight, - @" -******* -0****** - ****** -你***** - ****** -4****** -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Fill, - TextDirection.TopBottom_LeftRight, - @" -0****** - ****** - ****** -你***** - ****** - ****** -4******")] - - // TopBottom_RightLeft - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Start, - TextDirection.TopBottom_RightLeft, - @" -0****** - ****** -2****** - ****** -4****** -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.End, - TextDirection.TopBottom_RightLeft, - @" -******* -******* -0****** - ****** -2****** - ****** -4******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Center, - TextDirection.TopBottom_RightLeft, - @" -******* -0****** - ****** -2****** - ****** -4****** -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Fill, - TextDirection.TopBottom_RightLeft, - @" -0****** - ****** - ****** -2****** - ****** - ****** -4******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Start, - TextDirection.TopBottom_RightLeft, - @" -0****** - ****** -你***** - ****** -4****** -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.End, - TextDirection.TopBottom_RightLeft, - @" -******* -******* -0****** - ****** -你***** - ****** -4******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Center, - TextDirection.TopBottom_RightLeft, - @" -******* -0****** - ****** -你***** - ****** -4****** -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Fill, - TextDirection.TopBottom_RightLeft, - @" -0****** - ****** - ****** -你***** - ****** - ****** -4******")] - - // BottomTop_LeftRight - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Start, - TextDirection.BottomTop_LeftRight, - @" -4****** - ****** -2****** - ****** -0****** -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.End, - TextDirection.BottomTop_LeftRight, - @" -******* -******* -4****** - ****** -2****** - ****** -0******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Center, - TextDirection.BottomTop_LeftRight, - @" -******* -4****** - ****** -2****** - ****** -0****** -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Fill, - TextDirection.BottomTop_LeftRight, - @" -4****** - ****** - ****** -2****** - ****** - ****** -0******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Start, - TextDirection.BottomTop_LeftRight, - @" -4****** - ****** -你***** - ****** -0****** -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.End, - TextDirection.BottomTop_LeftRight, - @" -******* -******* -4****** - ****** -你***** - ****** -0******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Center, - TextDirection.BottomTop_LeftRight, - @" -******* -4****** - ****** -你***** - ****** -0****** -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Fill, - TextDirection.BottomTop_LeftRight, - @" -4****** - ****** - ****** -你***** - ****** - ****** -0******")] - - // BottomTop_RightLeft - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Start, - TextDirection.BottomTop_RightLeft, - @" -4****** - ****** -2****** - ****** -0****** -******* -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.End, - TextDirection.BottomTop_RightLeft, - @" -******* -******* -4****** - ****** -2****** - ****** -0******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Center, - TextDirection.BottomTop_RightLeft, - @" -******* -4****** - ****** -2****** - ****** -0****** -*******")] - [InlineData ( - "0 2 4", - Alignment.Fill, - Alignment.Fill, - TextDirection.BottomTop_RightLeft, - @" -4****** - ****** - ****** -2****** - ****** - ****** -0******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Start, - TextDirection.BottomTop_RightLeft, - @" -4****** - ****** -你***** - ****** -0****** -******* -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.End, - TextDirection.BottomTop_RightLeft, - @" -******* -******* -4****** - ****** -你***** - ****** -0******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Center, - TextDirection.BottomTop_RightLeft, - @" -******* -4****** - ****** -你***** - ****** -0****** -*******")] - [InlineData ( - "0 你 4", - Alignment.Fill, - Alignment.Fill, - TextDirection.BottomTop_RightLeft, - @" -4****** - ****** - ****** -你***** - ****** - ****** -0******")] - public void Draw_Text_Justification (string text, Alignment horizontalTextAlignment, Alignment alignment, TextDirection textDirection, string expectedText) - { - TextFormatter tf = new () - { - Alignment = horizontalTextAlignment, - VerticalAlignment = alignment, - Direction = textDirection, - ConstrainToSize = new (7, 7), - Text = text - }; - - Application.Driver?.FillRect (new (0, 0, 7, 7), (Rune)'*'); - tf.Draw (new (0, 0, 7, 7), Attribute.Default, Attribute.Default); - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); - } - - [SetupFakeDriver] - [Theory] - [InlineData ("A", 0, 1, "", 0)] - [InlineData ("A", 1, 1, "A", 0)] - [InlineData ("A", 2, 2, " A", 1)] - [InlineData ("AB", 1, 1, "B", 0)] - [InlineData ("AB", 2, 2, " A\n B", 0)] - [InlineData ("ABC", 3, 2, " B\n C", 0)] - [InlineData ("ABC", 4, 2, " B\n C", 0)] - [InlineData ("ABC", 6, 2, " B\n C", 0)] - [InlineData ("こんにちは", 0, 1, "", 0)] - [InlineData ("こんにちは", 1, 0, "", 0)] - [InlineData ("こんにちは", 1, 1, "", 0)] - [InlineData ("こんにちは", 2, 1, "は", 0)] - [InlineData ("こんにちは", 2, 2, "ち\nは", 0)] - [InlineData ("こんにちは", 2, 3, "に\nち\nは", 0)] - [InlineData ("こんにちは", 2, 4, "ん\nに\nち\nは", 0)] - [InlineData ("こんにちは", 2, 5, "こ\nん\nに\nち\nは", 0)] - [InlineData ("こんにちは", 2, 6, "こ\nん\nに\nち\nは", 1)] - [InlineData ("ABCD\nこんにちは", 4, 7, " こ\n Aん\n Bに\n Cち\n Dは", 2)] - [InlineData ("こんにちは\nABCD", 3, 7, "こ \nんA\nにB\nちC\nはD", 2)] - public void Draw_Vertical_Bottom_Horizontal_Right (string text, int width, int height, string expectedText, int expectedY) - { - TextFormatter tf = new () - { - Text = text, - Alignment = Alignment.End, - Direction = TextDirection.TopBottom_LeftRight, - VerticalAlignment = Alignment.End - }; - - tf.ConstrainToWidth = width; - tf.ConstrainToHeight = height; - - tf.Draw (new (Point.Empty, new (width, height)), Attribute.Default, Attribute.Default); - Rectangle rect = TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); - Assert.Equal (expectedY, rect.Y); - } - - [SetupFakeDriver] - [Theory] - [InlineData ("A", 1, 0, "")] - [InlineData ("A", 0, 1, "")] - [InlineData ("AB1 2", 1, 2, "2")] - [InlineData ("AB12", 1, 5, "2\n1\nB\nA")] - [InlineData ("AB\n12", 2, 5, "B2\nA1")] - [InlineData ("ABC 123 456", 2, 7, "6C\n5B\n4A\n \n3 \n2 \n1 ")] - [InlineData ("こんにちは", 1, 1, "")] - [InlineData ("こんにちは", 2, 1, "は")] - [InlineData ("こんにちは", 2, 5, "は\nち\nに\nん\nこ")] - [InlineData ("こんにちは", 2, 10, "は\nち\nに\nん\nこ")] - [InlineData ("こんにちは\nAB\n12", 4, 10, "はB2\nちA1\nに \nん \nこ ")] - public void Draw_Vertical_BottomTop_LeftRight (string text, int width, int height, string expectedText) - { - TextFormatter tf = new () - { - Text = text, - Direction = TextDirection.BottomTop_LeftRight - }; - - tf.ConstrainToWidth = width; - tf.ConstrainToHeight = height; - tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); - - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); - } - - [SetupFakeDriver] - [Theory] - [InlineData ("A", 1, 0, "")] - [InlineData ("A", 0, 1, "")] - [InlineData ("AB1 2", 1, 2, "2")] - [InlineData ("AB12", 1, 5, "2\n1\nB\nA")] - [InlineData ("AB\n12", 2, 5, "2B\n1A")] - [InlineData ("ABC 123 456", 2, 7, "C6\nB5\nA4\n \n 3\n 2\n 1")] - [InlineData ("こんにちは", 1, 1, "")] - [InlineData ("こんにちは", 2, 1, "は")] - [InlineData ("こんにちは", 2, 5, "は\nち\nに\nん\nこ")] - [InlineData ("こんにちは", 2, 10, "は\nち\nに\nん\nこ")] - [InlineData ("こんにちは\nAB\n12", 4, 10, "2Bは\n1Aち\n に\n ん\n こ")] - public void Draw_Vertical_BottomTop_RightLeft (string text, int width, int height, string expectedText) - { - TextFormatter tf = new () - { - Text = text, - Direction = TextDirection.BottomTop_RightLeft - }; - - tf.ConstrainToWidth = width; - tf.ConstrainToHeight = height; - tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); - - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); - } - - // Draw tests - Note that these depend on View - - [Fact] - [TestRespondersDisposed] - public void Draw_Vertical_Throws_IndexOutOfRangeException_With_Negative_Bounds () - { - Application.Init (new FakeDriver ()); - Dialog.DefaultShadow = ShadowStyle.None; - Button.DefaultShadow = ShadowStyle.None; - - Toplevel top = new (); - - var view = new View { Y = -2, Height = 10, TextDirection = TextDirection.TopBottom_LeftRight, Text = "view" }; - top.Add (view); - - Application.Iteration += (s, a) => - { - Assert.Equal (-2, view.Y); - - Application.RequestStop (); - }; - - try - { - Application.Run (top); - } - catch (IndexOutOfRangeException ex) - { - // After the fix this exception will not be caught. - Assert.IsType (ex); - } - - top.Dispose (); - - // Shutdown must be called to safely clean up Application if Init has been called - Application.Shutdown (); - } - - [SetupFakeDriver] - [Theory] - [InlineData ("A", 5, 5, "A")] - [InlineData ( - "AB12", - 5, - 5, - @" -A -B -1 -2")] - [InlineData ( - "AB\n12", - 5, - 5, - @" -A1 -B2")] - [InlineData ("", 5, 1, "")] - [InlineData ( - "Hello Worlds", - 1, - 12, - @" -H -e -l -l -o - -W -o -r -l -d -s")] - [InlineData ("Hello Worlds", 12, 1, @"HelloWorlds")] - public void Draw_Vertical_TopBottom_LeftRight (string text, int width, int height, string expectedText) - { - TextFormatter tf = new () - { - Text = text, - Direction = TextDirection.TopBottom_LeftRight - }; - - tf.ConstrainToWidth = width; - tf.ConstrainToHeight = height; - tf.Draw (new (0, 0, 20, 20), Attribute.Default, Attribute.Default); - - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); - } - - [SetupFakeDriver] - [Theory] - - // The expectedY param is to probe that the expectedText param start at that Y coordinate - [InlineData ("A", 0, "", 0)] - [InlineData ("A", 1, "A", 0)] - [InlineData ("A", 2, "A", 0)] - [InlineData ("A", 3, "A", 1)] - [InlineData ("AB", 1, "A", 0)] - [InlineData ("AB", 2, "A\nB", 0)] - [InlineData ("ABC", 2, "A\nB", 0)] - [InlineData ("ABC", 3, "A\nB\nC", 0)] - [InlineData ("ABC", 4, "A\nB\nC", 0)] - [InlineData ("ABC", 5, "A\nB\nC", 1)] - [InlineData ("ABC", 6, "A\nB\nC", 1)] - [InlineData ("ABC", 9, "A\nB\nC", 3)] - [InlineData ("ABCD", 2, "B\nC", 0)] - [InlineData ("こんにちは", 0, "", 0)] - [InlineData ("こんにちは", 1, "に", 0)] - [InlineData ("こんにちは", 2, "ん\nに", 0)] - [InlineData ("こんにちは", 3, "ん\nに\nち", 0)] - [InlineData ("こんにちは", 4, "こ\nん\nに\nち", 0)] - [InlineData ("こんにちは", 5, "こ\nん\nに\nち\nは", 0)] - [InlineData ("こんにちは", 6, "こ\nん\nに\nち\nは", 0)] - [InlineData ("ABCD\nこんにちは", 7, "Aこ\nBん\nCに\nDち\n は", 1)] - [InlineData ("こんにちは\nABCD", 7, "こA\nんB\nにC\nちD\nは ", 1)] - public void Draw_Vertical_TopBottom_LeftRight_Middle (string text, int height, string expectedText, int expectedY) - { - TextFormatter tf = new () - { - Text = text, - Direction = TextDirection.TopBottom_LeftRight, - VerticalAlignment = Alignment.Center - }; - - int width = text.ToRunes ().Max (r => r.GetColumns ()); - - if (text.Contains ("\n")) - { - width++; - } - - tf.ConstrainToWidth = width; - tf.ConstrainToHeight = height; - tf.Draw (new (0, 0, 5, height), Attribute.Default, Attribute.Default); - - Rectangle rect = TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); - Assert.Equal (expectedY, rect.Y); - } - - [SetupFakeDriver] - [Theory] - [InlineData ("A", 5, "A")] - [InlineData ( - "AB12", - 5, - @" -A -B -1 -2")] - [InlineData ( - "AB\n12", - 5, - @" -A1 -B2")] - [InlineData ("", 1, "")] - [InlineData ( - "AB1 2", - 2, - @" -A12 -B ")] - [InlineData ( - "こんにちは", - 1, - @" -こん")] - [InlineData ( - "こんにちは", - 2, - @" -こに -んち")] - [InlineData ( - "こんにちは", - 5, - @" -こ -ん -に -ち -は")] - public void Draw_Vertical_TopBottom_LeftRight_Top (string text, int height, string expectedText) - { - TextFormatter tf = new () - { - Text = text, - Direction = TextDirection.TopBottom_LeftRight - }; - - tf.ConstrainToWidth = 5; - tf.ConstrainToHeight = height; - tf.Draw (new (0, 0, 5, height), Attribute.Default, Attribute.Default); - - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); - } - - [Theory] - [InlineData (14, 1, TextDirection.LeftRight_TopBottom, "Les Misęrables")] - [InlineData (1, 14, TextDirection.TopBottom_LeftRight, "L\ne\ns\n \nM\ni\ns\nę\nr\na\nb\nl\ne\ns")] - [InlineData ( - 4, - 4, - TextDirection.TopBottom_LeftRight, - @" -LMre -eias -ssb - ęl " - )] - public void Draw_With_Combining_Runes (int width, int height, TextDirection textDirection, string expected) - { - var driver = new FakeDriver (); - driver.Init (); - - var text = "Les Mise\u0328\u0301rables"; - - var tf = new TextFormatter (); - tf.Direction = textDirection; - tf.Text = text; - - Assert.True (tf.WordWrap); - - tf.ConstrainToSize = new (width, height); - - tf.Draw ( - new (0, 0, width, height), - new (ColorName16.White, ColorName16.Black), - new (ColorName16.Blue, ColorName16.Black), - default (Rectangle), - driver - ); - TestHelpers.AssertDriverContentsWithFrameAre (expected, _output, driver); - - driver.End (); - } - - [Fact] - [SetupFakeDriver] - public void FillRemaining_True_False () - { - ((FakeDriver)Application.Driver!).SetBufferSize (22, 5); - - Attribute [] attrs = - { - Attribute.Default, new (ColorName16.Green, ColorName16.BrightMagenta), - new (ColorName16.Blue, ColorName16.Cyan) - }; - var tf = new TextFormatter { ConstrainToSize = new (14, 3), Text = "Test\nTest long\nTest long long\n", MultiLine = true }; - - tf.Draw ( - new (1, 1, 19, 3), - attrs [1], - attrs [2]); - - Assert.False (tf.FillRemaining); - - TestHelpers.AssertDriverContentsWithFrameAre ( - @" - Test - Test long - Test long long", - _output); - - TestHelpers.AssertDriverAttributesAre ( - @" -000000000000000000000 -011110000000000000000 -011111111100000000000 -011111111111111000000 -000000000000000000000", - _output, - null, - attrs); - - tf.FillRemaining = true; - - tf.Draw ( - new (1, 1, 19, 3), - attrs [1], - attrs [2]); - - TestHelpers.AssertDriverAttributesAre ( - @" -000000000000000000000 -011111111111111111110 -011111111111111111110 -011111111111111111110 -000000000000000000000", - _output, - null, - attrs); - } [Theory] [InlineData ("_k Before", true, 0, (KeyCode)'K')] // lower case should return uppercase Hotkey @@ -4835,39 +862,6 @@ ssb Assert.Equal (KeyCode.CtrlMask | KeyCode.Q, tf.HotKey); } - [SetupFakeDriver] - [Theory] - [InlineData ("Hello World", 15, 1, "Hello World")] - [InlineData ( - "Well Done\nNice Work", - 15, - 2, - @" -Well Done -Nice Work")] - [InlineData ("你好 世界", 15, 1, "你好 世界")] - [InlineData ( - "做 得好\n幹 得好", - 15, - 2, - @" -做 得好 -幹 得好")] - public void Justify_Horizontal (string text, int width, int height, string expectedText) - { - TextFormatter tf = new () - { - Text = text, - Alignment = Alignment.Fill, - ConstrainToSize = new Size (width, height), - MultiLine = true - }; - - tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); - - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); - } - [Theory] [InlineData ("")] [InlineData (null)] @@ -4975,66 +969,6 @@ Nice Work")] Assert.Equal (justifiedText, TextFormatter.Justify (text, width, fillChar)); } - [SetupFakeDriver] - [Theory] - [InlineData ("Hello World", 1, 15, "H\ne\nl\nl\no\n \n \n \n \n \nW\no\nr\nl\nd")] - [InlineData ( - "Well Done\nNice Work", - 2, - 15, - @" -WN -ei -lc -le - - - - - - - -DW -oo -nr -ek")] - [InlineData ("你好 世界", 2, 15, "你\n好\n \n \n \n \n \n \n \n \n \n \n \n世\n界")] - [InlineData ( - "做 得好\n幹 得好", - 4, - 15, - @" -做幹 - - - - - - - - - - - - -得得 -好好")] - public void Justify_Vertical (string text, int width, int height, string expectedText) - { - TextFormatter tf = new () - { - Text = text, - Direction = TextDirection.TopBottom_LeftRight, - VerticalAlignment = Alignment.Fill, - ConstrainToSize = new Size (width, height), - MultiLine = true - }; - - tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); - - TestHelpers.AssertDriverContentsWithFrameAre (expectedText, _output); - } - [Theory] [InlineData ("Single Line 界", 14)] [InlineData ("First Line 界\nSecond Line 界\nThird Line 界\n", 14)] @@ -6022,124 +1956,6 @@ ek")] } } - [Theory] - [InlineData (17, 1, TextDirection.LeftRight_TopBottom, 4, "This is a Tab")] - [InlineData (1, 17, TextDirection.TopBottom_LeftRight, 4, "T\nh\ni\ns\n \ni\ns\n \na\n \n \n \n \n \nT\na\nb")] - [InlineData (13, 1, TextDirection.LeftRight_TopBottom, 0, "This is a Tab")] - [InlineData (1, 13, TextDirection.TopBottom_LeftRight, 0, "T\nh\ni\ns\n \ni\ns\n \na\n \nT\na\nb")] - public void TabWith_PreserveTrailingSpaces_False ( - int width, - int height, - TextDirection textDirection, - int tabWidth, - string expected - ) - { - var driver = new FakeDriver (); - driver.Init (); - - var text = "This is a \tTab"; - var tf = new TextFormatter (); - tf.Direction = textDirection; - tf.TabWidth = tabWidth; - tf.Text = text; - tf.ConstrainToWidth = 20; - tf.ConstrainToHeight = 20; - - Assert.True (tf.WordWrap); - Assert.False (tf.PreserveTrailingSpaces); - - tf.Draw ( - new (0, 0, width, height), - new (ColorName16.White, ColorName16.Black), - new (ColorName16.Blue, ColorName16.Black), - default (Rectangle), - driver - ); - TestHelpers.AssertDriverContentsWithFrameAre (expected, _output, driver); - - driver.End (); - } - - [Theory] - [InlineData (17, 1, TextDirection.LeftRight_TopBottom, 4, "This is a Tab")] - [InlineData (1, 17, TextDirection.TopBottom_LeftRight, 4, "T\nh\ni\ns\n \ni\ns\n \na\n \n \n \n \n \nT\na\nb")] - [InlineData (13, 1, TextDirection.LeftRight_TopBottom, 0, "This is a Tab")] - [InlineData (1, 13, TextDirection.TopBottom_LeftRight, 0, "T\nh\ni\ns\n \ni\ns\n \na\n \nT\na\nb")] - public void TabWith_PreserveTrailingSpaces_True ( - int width, - int height, - TextDirection textDirection, - int tabWidth, - string expected - ) - { - var driver = new FakeDriver (); - driver.Init (); - - var text = "This is a \tTab"; - var tf = new TextFormatter (); - - tf.Direction = textDirection; - tf.TabWidth = tabWidth; - tf.PreserveTrailingSpaces = true; - tf.Text = text; - tf.ConstrainToWidth = 20; - tf.ConstrainToHeight = 20; - - Assert.True (tf.WordWrap); - - tf.Draw ( - new (0, 0, width, height), - new (ColorName16.White, ColorName16.Black), - new (ColorName16.Blue, ColorName16.Black), - default (Rectangle), - driver - ); - TestHelpers.AssertDriverContentsWithFrameAre (expected, _output, driver); - - driver.End (); - } - - [Theory] - [InlineData (17, 1, TextDirection.LeftRight_TopBottom, 4, "This is a Tab")] - [InlineData (1, 17, TextDirection.TopBottom_LeftRight, 4, "T\nh\ni\ns\n \ni\ns\n \na\n \n \n \n \n \nT\na\nb")] - [InlineData (13, 1, TextDirection.LeftRight_TopBottom, 0, "This is a Tab")] - [InlineData (1, 13, TextDirection.TopBottom_LeftRight, 0, "T\nh\ni\ns\n \ni\ns\n \na\n \nT\na\nb")] - public void TabWith_WordWrap_True ( - int width, - int height, - TextDirection textDirection, - int tabWidth, - string expected - ) - { - var driver = new FakeDriver (); - driver.Init (); - - var text = "This is a \tTab"; - var tf = new TextFormatter (); - - tf.Direction = textDirection; - tf.TabWidth = tabWidth; - tf.WordWrap = true; - tf.Text = text; - tf.ConstrainToWidth = 20; - tf.ConstrainToHeight = 20; - - Assert.False (tf.PreserveTrailingSpaces); - - tf.Draw ( - new (0, 0, width, height), - new (ColorName16.White, ColorName16.Black), - new (ColorName16.Blue, ColorName16.Black), - default (Rectangle), - driver - ); - TestHelpers.AssertDriverContentsWithFrameAre (expected, _output, driver); - - driver.End (); - } [Theory] [InlineData ("123456789", 3, "123")] @@ -6173,47 +1989,6 @@ ek")] Assert.Equal (new (expectedWidth, expectedHeight), tf.FormatAndGetSize ()); } - [Fact] - [SetupFakeDriver] - public void UICatalog_AboutBox_Text () - { - TextFormatter tf = new () - { - Text = UICatalogApp.GetAboutBoxMessage (), - Alignment = Alignment.Center, - VerticalAlignment = Alignment.Start, - WordWrap = false, - MultiLine = true, - HotKeySpecifier = (Rune)0xFFFF - }; - - Size tfSize = tf.FormatAndGetSize (); - Assert.Equal (new (59, 13), tfSize); - - ((FakeDriver)Application.Driver).SetBufferSize (tfSize.Width, tfSize.Height); - - Application.Driver.FillRect (Application.Screen, (Rune)'*'); - tf.Draw (Application.Screen, Attribute.Default, Attribute.Default); - - var expectedText = """ - UI Catalog: A comprehensive sample library and test app for - *********************************************************** - _______ _ _ _____ _ * - |__ __| (_) | | / ____| (_)* - | | ___ _ __ _ __ ___ _ _ __ __ _| || | __ _ _ _ * - | |/ _ \ '__| '_ ` _ \| | '_ \ / _` | || | |_ | | | | |* - | | __/ | | | | | | | | | | | (_| | || |__| | |_| | |* - |_|\___|_| |_| |_| |_|_|_| |_|\__,_|_(_)_____|\__,_|_|* - *********************************************************** - **********************v2 - Pre-Alpha*********************** - *********************************************************** - **********https://github.com/gui-cs/Terminal.Gui*********** - *********************************************************** - """; - - TestHelpers.AssertDriverContentsAre (expectedText.ReplaceLineEndings (), _output); - } - [Fact] public void WordWrap_BigWidth () { @@ -7111,199 +2886,4 @@ ek")] Assert.Equal (resultLines, wrappedLines); } - #region FormatAndGetSizeTests - - // TODO: Add multi-line examples - // TODO: Add other TextDirection examples - - [Theory] - [SetupFakeDriver] - [InlineData ("界1234", 10, 10, TextDirection.LeftRight_TopBottom, 6, 1, @"界1234")] - [InlineData ("01234", 10, 10, TextDirection.LeftRight_TopBottom, 5, 1, @"01234")] - [InlineData ( - "界1234", - 10, - 10, - TextDirection.TopBottom_LeftRight, - 2, - 5, - """ - 界 - 1 - 2 - 3 - 4 - """)] - [InlineData ( - "01234", - 10, - 10, - TextDirection.TopBottom_LeftRight, - 1, - 5, - """ - 0 - 1 - 2 - 3 - 4 - """)] - [InlineData ( - "界1234", - 3, - 3, - TextDirection.LeftRight_TopBottom, - 3, - 2, - """ - 界1 - 234 - """)] - [InlineData ( - "01234", - 3, - 3, - TextDirection.LeftRight_TopBottom, - 3, - 2, - """ - 012 - 34 - """)] - [InlineData ( - "界1234", - 3, - 3, - TextDirection.TopBottom_LeftRight, - 3, - 3, - """ - 界3 - 1 4 - 2 - """)] - [InlineData ( - "01234", - 3, - 3, - TextDirection.TopBottom_LeftRight, - 2, - 3, - """ - 03 - 14 - 2 - """)] - [InlineData ("01234", 2, 1, TextDirection.LeftRight_TopBottom, 2, 1, @"01")] - public void FormatAndGetSize_Returns_Correct_Size ( - string text, - int width, - int height, - TextDirection direction, - int expectedWidth, - int expectedHeight, - string expectedDraw - ) - { - TextFormatter tf = new () - { - Direction = direction, - ConstrainToWidth = width, - ConstrainToHeight = height, - Text = text - }; - Assert.True (tf.WordWrap); - Size size = tf.FormatAndGetSize (); - Assert.Equal (new (expectedWidth, expectedHeight), size); - - tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); - - TestHelpers.AssertDriverContentsWithFrameAre (expectedDraw, _output); - } - - [Theory] - [SetupFakeDriver] - [InlineData ("界1234", 10, 10, TextDirection.LeftRight_TopBottom, 6, 1, @"界1234")] - [InlineData ("01234", 10, 10, TextDirection.LeftRight_TopBottom, 5, 1, @"01234")] - [InlineData ( - "界1234", - 10, - 10, - TextDirection.TopBottom_LeftRight, - 2, - 5, - """ - 界 - 1 - 2 - 3 - 4 - """)] - [InlineData ( - "01234", - 10, - 10, - TextDirection.TopBottom_LeftRight, - 1, - 5, - """ - 0 - 1 - 2 - 3 - 4 - """)] - [InlineData ("界1234", 3, 3, TextDirection.LeftRight_TopBottom, 3, 1, @"界1")] - [InlineData ("01234", 3, 3, TextDirection.LeftRight_TopBottom, 3, 1, @"012")] - [InlineData ( - "界1234", - 3, - 3, - TextDirection.TopBottom_LeftRight, - 2, - 3, - """ - 界 - 1 - 2 - """)] - [InlineData ( - "01234", - 3, - 3, - TextDirection.TopBottom_LeftRight, - 1, - 3, - """ - 0 - 1 - 2 - """)] - public void FormatAndGetSize_WordWrap_False_Returns_Correct_Size ( - string text, - int width, - int height, - TextDirection direction, - int expectedWidth, - int expectedHeight, - string expectedDraw - ) - { - TextFormatter tf = new () - { - Direction = direction, - ConstrainToSize = new (width, height), - Text = text, - WordWrap = false - }; - Assert.False (tf.WordWrap); - Size size = tf.FormatAndGetSize (); - Assert.Equal (new (expectedWidth, expectedHeight), size); - - tf.Draw (new (0, 0, width, height), Attribute.Default, Attribute.Default); - - TestHelpers.AssertDriverContentsWithFrameAre (expectedDraw, _output); - } - - #endregion } diff --git a/Tests/UnitTestsParallelizable/UnitTests.Parallelizable.csproj b/Tests/UnitTestsParallelizable/UnitTests.Parallelizable.csproj new file mode 100644 index 000000000..d450dad11 --- /dev/null +++ b/Tests/UnitTestsParallelizable/UnitTests.Parallelizable.csproj @@ -0,0 +1,87 @@ + + + + + + 2.0 + 2.0 + 2.0 + 2.0 + + + false + + true + true + portable + $(DefineConstants);JETBRAINS_ANNOTATIONS;CONTRACTS_FULL + enable + true + true + + + + true + $(DefineConstants) + + + true + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + PreserveNewest + + + + + + + + + + False + + + [UICatalog]* + + + + + + + + + + False + + + \ No newline at end of file diff --git a/Tests/UnitTestsParallelizable/UnitTests.Parallelizable.csproj.DotSettings b/Tests/UnitTestsParallelizable/UnitTests.Parallelizable.csproj.DotSettings new file mode 100644 index 000000000..632c26816 --- /dev/null +++ b/Tests/UnitTestsParallelizable/UnitTests.Parallelizable.csproj.DotSettings @@ -0,0 +1,2 @@ + + CSharp120 \ No newline at end of file diff --git a/Tests/UnitTestsParallelizable/View/Adornment/AdornmentSubViewTests.cs b/Tests/UnitTestsParallelizable/View/Adornment/AdornmentSubViewTests.cs new file mode 100644 index 000000000..c44be1410 --- /dev/null +++ b/Tests/UnitTestsParallelizable/View/Adornment/AdornmentSubViewTests.cs @@ -0,0 +1,28 @@ +using Xunit.Abstractions; + +namespace Terminal.Gui.ViewTests; + +public class AdornmentSubViewTests () +{ + [Fact] + public void Setting_Thickness_Causes_Adornment_SubView_Layout () + { + var view = new View (); + var subView = new View (); + view.Margin.Add (subView); + view.BeginInit (); + view.EndInit (); + var raised = false; + + subView.SubviewLayout += LayoutStarted; + view.Margin.Thickness = new Thickness (1, 2, 3, 4); + view.Layout (); + Assert.True (raised); + + return; + void LayoutStarted (object sender, LayoutEventArgs e) + { + raised = true; + } + } +} diff --git a/UnitTests/View/Adornment/AdornmentTests.cs b/Tests/UnitTestsParallelizable/View/Adornment/AdornmentTests.cs similarity index 63% rename from UnitTests/View/Adornment/AdornmentTests.cs rename to Tests/UnitTestsParallelizable/View/Adornment/AdornmentTests.cs index baa51833a..e251157e2 100644 --- a/UnitTests/View/Adornment/AdornmentTests.cs +++ b/Tests/UnitTestsParallelizable/View/Adornment/AdornmentTests.cs @@ -1,11 +1,7 @@ -using Xunit.Abstractions; +namespace Terminal.Gui.ViewTests; -namespace Terminal.Gui.ViewTests; - -public class AdornmentTests (ITestOutputHelper output) +public class AdornmentTests { - private readonly ITestOutputHelper _output = output; - [Fact] public void Viewport_Location_Always_Empty_Size_Correct () { @@ -32,7 +28,7 @@ public class AdornmentTests (ITestOutputHelper output) Assert.Equal (new (0, 0, 14, 14), view.Viewport); var paddingThickness = 3; - view.Padding.Thickness = new Thickness (paddingThickness); + view.Padding.Thickness = new (paddingThickness); Assert.Equal (new (0, 0, 8, 8), view.Viewport); Assert.Equal (new (0, 0, view.Margin.Frame.Width, view.Margin.Frame.Height), view.Margin.Viewport); @@ -55,7 +51,6 @@ public class AdornmentTests (ITestOutputHelper output) [InlineData (1, 0, 0, 4, 4)] [InlineData (1, 0, 0, 4, 0)] [InlineData (1, 0, 0, 0, 4)] - [InlineData (0, 1, 0, 0, 0)] [InlineData (0, 1, 0, 1, 1)] [InlineData (0, 1, 0, 1, 0)] @@ -67,7 +62,6 @@ public class AdornmentTests (ITestOutputHelper output) [InlineData (1, 1, 0, 4, 4)] [InlineData (1, 1, 0, 4, 0)] [InlineData (1, 1, 0, 0, 4)] - [InlineData (0, 1, 1, 0, 0)] [InlineData (0, 1, 1, 1, 1)] [InlineData (0, 1, 1, 1, 0)] @@ -82,9 +76,9 @@ public class AdornmentTests (ITestOutputHelper output) public void Viewport_Width_Is_Frame_Width (int thickness, int x, int y, int w, int h) { var adornment = new Adornment (null); - adornment.Thickness = new Thickness (thickness); - adornment.Frame = new Rectangle (x, y, w, h); - Assert.Equal (new Rectangle (x, y, w, h), adornment.Frame); + adornment.Thickness = new (thickness); + adornment.Frame = new (x, y, w, h); + Assert.Equal (new (x, y, w, h), adornment.Frame); var expectedBounds = new Rectangle (0, 0, w, h); Assert.Equal (expectedBounds, adornment.Viewport); @@ -99,26 +93,26 @@ public class AdornmentTests (ITestOutputHelper output) parent.BeginInit (); parent.EndInit (); - Assert.Equal (new Rectangle (1, 2, 10, 10), parent.Frame); - Assert.Equal (new Rectangle (0, 0, 10, 10), parent.Viewport); - Assert.Equal (new Rectangle (0, 0, 10, 10), parent.Margin.Frame); - Assert.Equal (new Rectangle (0, 0, 10, 10), parent.Margin.Viewport); + Assert.Equal (new (1, 2, 10, 10), parent.Frame); + Assert.Equal (new (0, 0, 10, 10), parent.Viewport); + Assert.Equal (new (0, 0, 10, 10), parent.Margin.Frame); + Assert.Equal (new (0, 0, 10, 10), parent.Margin.Viewport); Assert.Null (parent.Margin.SuperView); Rectangle boundsAsScreen = parent.Margin.ViewportToScreen (new Rectangle (1, 2, 5, 5)); - Assert.Equal (new Rectangle (2, 4, 5, 5), boundsAsScreen); + Assert.Equal (new (2, 4, 5, 5), boundsAsScreen); } [Fact] public void SetAdornmentFrames_Sets_Frames_Correctly () { var parent = new View { X = 1, Y = 2, Width = 10, Height = 20 }; - parent.SetAdornmentFrames(); + parent.SetAdornmentFrames (); - Assert.Equal (new Rectangle (1, 2, 10, 20), parent.Frame); - Assert.Equal (new Rectangle (0, 0, 10, 20), parent.Viewport); - Assert.Equal (new Rectangle (0, 0, 10, 20), parent.Margin.Frame); - Assert.Equal (new Rectangle (0, 0, 10, 20), parent.Margin.Viewport); + Assert.Equal (new (1, 2, 10, 20), parent.Frame); + Assert.Equal (new (0, 0, 10, 20), parent.Viewport); + Assert.Equal (new (0, 0, 10, 20), parent.Margin.Frame); + Assert.Equal (new (0, 0, 10, 20), parent.Margin.Viewport); } [Fact] @@ -133,35 +127,35 @@ public class AdornmentTests (ITestOutputHelper output) }; var marginThickness = 1; - view.Margin.Thickness = new Thickness (marginThickness); + view.Margin.Thickness = new (marginThickness); var borderThickness = 2; - view.Border.Thickness = new Thickness (borderThickness); + view.Border.Thickness = new (borderThickness); var paddingThickness = 3; - view.Padding.Thickness = new Thickness (paddingThickness); + view.Padding.Thickness = new (paddingThickness); view.BeginInit (); view.EndInit (); - Assert.Equal (new Rectangle (1, 2, 20, 31), view.Frame); - Assert.Equal (new Rectangle (0, 0, 8, 19), view.Viewport); + Assert.Equal (new (1, 2, 20, 31), view.Frame); + Assert.Equal (new (0, 0, 8, 19), view.Viewport); // Margin.Frame is always the same as the view frame - Assert.Equal (new Rectangle (0, 0, 20, 31), view.Margin.Frame); + Assert.Equal (new (0, 0, 20, 31), view.Margin.Frame); // Border.Frame is View.Frame minus the Margin thickness Assert.Equal ( - new Rectangle (marginThickness, marginThickness, view.Frame.Width - marginThickness * 2, view.Frame.Height - marginThickness * 2), + new (marginThickness, marginThickness, view.Frame.Width - marginThickness * 2, view.Frame.Height - marginThickness * 2), view.Border.Frame); // Padding.Frame is View.Frame minus the Border thickness plus Margin thickness Assert.Equal ( - new Rectangle ( - marginThickness + borderThickness, - marginThickness + borderThickness, - view.Frame.Width - (marginThickness + borderThickness) * 2, - view.Frame.Height - (marginThickness + borderThickness) * 2), + new ( + marginThickness + borderThickness, + marginThickness + borderThickness, + view.Frame.Width - (marginThickness + borderThickness) * 2, + view.Frame.Height - (marginThickness + borderThickness) * 2), view.Padding.Frame); } @@ -176,13 +170,13 @@ public class AdornmentTests (ITestOutputHelper output) public void FrameToScreen_Retains_Frame_Size (int marginThickness, int w, int h) { var parent = new View { X = 1, Y = 2, Width = w, Height = h }; - parent.Margin.Thickness = new Thickness (marginThickness); + parent.Margin.Thickness = new (marginThickness); parent.BeginInit (); parent.EndInit (); - Assert.Equal (new Rectangle (1, 2, w, h), parent.Frame); - Assert.Equal (new Rectangle (0, 0, w, h), parent.Margin.Frame); + Assert.Equal (new (1, 2, w, h), parent.Frame); + Assert.Equal (new (0, 0, w, h), parent.Margin.Frame); Assert.Equal (parent.Frame, parent.Margin.FrameToScreen ()); } @@ -226,24 +220,24 @@ public class AdornmentTests (ITestOutputHelper output) Width = 20, Height = 20 }; - superView.Margin.Thickness = new Thickness (marginThickness); - superView.Border.Thickness = new Thickness (borderThickness); + superView.Margin.Thickness = new (marginThickness); + superView.Border.Thickness = new (borderThickness); var view = new View { X = x, Y = y, Width = 1, Height = 1 }; superView.Add (view); superView.BeginInit (); superView.EndInit (); - Assert.Equal (new Rectangle (x, y, 1, 1), view.Frame); - Assert.Equal (new Rectangle (0, 0, 20, 20), superView.Margin.Frame); + Assert.Equal (new (x, y, 1, 1), view.Frame); + Assert.Equal (new (0, 0, 20, 20), superView.Margin.Frame); Assert.Equal ( - new Rectangle (marginThickness, marginThickness, 20 - marginThickness * 2, 20 - marginThickness * 2), + new (marginThickness, marginThickness, 20 - marginThickness * 2, 20 - marginThickness * 2), superView.Border.Frame ); Assert.Equal ( - new Rectangle (superView.Frame.X + marginThickness, superView.Frame.Y + marginThickness, 20 - marginThickness * 2, 20 - marginThickness * 2), + new (superView.Frame.X + marginThickness, superView.Frame.Y + marginThickness, 20 - marginThickness * 2, 20 - marginThickness * 2), superView.Border.FrameToScreen () ); } @@ -257,13 +251,13 @@ public class AdornmentTests (ITestOutputHelper output) parent.BeginInit (); parent.EndInit (); - Assert.Equal (new Rectangle (1, 2, 10, 10), parent.Frame); - Assert.Equal (new Rectangle (0, 0, 10, 10), parent.Viewport); - Assert.Equal (new Rectangle (0, 0, 10, 10), parent.Margin.Frame); - Assert.Equal (new Rectangle (0, 0, 10, 10), parent.Margin.Viewport); + Assert.Equal (new (1, 2, 10, 10), parent.Frame); + Assert.Equal (new (0, 0, 10, 10), parent.Viewport); + Assert.Equal (new (0, 0, 10, 10), parent.Margin.Frame); + Assert.Equal (new (0, 0, 10, 10), parent.Margin.Viewport); Assert.Null (parent.Margin.SuperView); - Assert.Equal (new Rectangle (1, 2, 10, 10), parent.Margin.FrameToScreen ()); + Assert.Equal (new (1, 2, 10, 10), parent.Margin.FrameToScreen ()); } [Fact] @@ -272,23 +266,23 @@ public class AdornmentTests (ITestOutputHelper output) var view = new View (); Assert.Equal (Thickness.Empty, view.GetAdornmentsThickness ()); - view.Margin.Thickness = new Thickness (1); - Assert.Equal (new Thickness (1), view.GetAdornmentsThickness ()); + view.Margin.Thickness = new (1); + Assert.Equal (new (1), view.GetAdornmentsThickness ()); - view.Border.Thickness = new Thickness (1); - Assert.Equal (new Thickness (2), view.GetAdornmentsThickness ()); + view.Border.Thickness = new (1); + Assert.Equal (new (2), view.GetAdornmentsThickness ()); - view.Padding.Thickness = new Thickness (1); - Assert.Equal (new Thickness (3), view.GetAdornmentsThickness ()); + view.Padding.Thickness = new (1); + Assert.Equal (new (3), view.GetAdornmentsThickness ()); - view.Padding.Thickness = new Thickness (2); - Assert.Equal (new Thickness (4), view.GetAdornmentsThickness ()); + view.Padding.Thickness = new (2); + Assert.Equal (new (4), view.GetAdornmentsThickness ()); - view.Padding.Thickness = new Thickness (1, 2, 3, 4); - Assert.Equal (new Thickness (3, 4, 5, 6), view.GetAdornmentsThickness ()); + view.Padding.Thickness = new (1, 2, 3, 4); + Assert.Equal (new (3, 4, 5, 6), view.GetAdornmentsThickness ()); - view.Margin.Thickness = new Thickness (1, 2, 3, 4); - Assert.Equal (new Thickness (3, 5, 7, 9), view.GetAdornmentsThickness ()); + view.Margin.Thickness = new (1, 2, 3, 4); + Assert.Equal (new (3, 5, 7, 9), view.GetAdornmentsThickness ()); view.Dispose (); } @@ -296,14 +290,14 @@ public class AdornmentTests (ITestOutputHelper output) public void Setting_Viewport_Throws () { var adornment = new Adornment (null); - Assert.Throws (() => adornment.Viewport = new Rectangle (1, 2, 3, 4)); + Assert.Throws (() => adornment.Viewport = new (1, 2, 3, 4)); } [Fact] public void Setting_SuperView_Throws () { var adornment = new Adornment (null); - Assert.Throws (() => adornment.SuperView = new View ()); + Assert.Throws (() => adornment.SuperView = new ()); } [Fact] @@ -320,12 +314,12 @@ public class AdornmentTests (ITestOutputHelper output) parent.BeginInit (); parent.EndInit (); - Assert.Equal (new Rectangle (0, 0, 10, 10), parent.Frame); - Assert.Equal (new Rectangle (0, 0, 10, 10), parent.Viewport); + Assert.Equal (new (0, 0, 10, 10), parent.Frame); + Assert.Equal (new (0, 0, 10, 10), parent.Viewport); - parent.Margin.Thickness = new Thickness (1); - Assert.Equal (new Rectangle (0, 0, 10, 10), parent.Frame); - Assert.Equal (new Rectangle (0, 0, 8, 8), parent.Viewport); + parent.Margin.Thickness = new (1); + Assert.Equal (new (0, 0, 10, 10), parent.Frame); + Assert.Equal (new (0, 0, 8, 8), parent.Viewport); } [Fact] @@ -334,16 +328,16 @@ public class AdornmentTests (ITestOutputHelper output) var adornment = new Adornment (null); var super = new View (); var raised = false; + adornment.ThicknessChanged += (s, e) => { raised = true; - Assert.Equal (new Thickness (1, 2, 3, 4), adornment.Thickness); + Assert.Equal (new (1, 2, 3, 4), adornment.Thickness); }; - adornment.Thickness = new Thickness (1, 2, 3, 4); + adornment.Thickness = new (1, 2, 3, 4); Assert.True (raised); } - [Fact] public void Setting_Thickness_Causes_Parent_Layout () { @@ -353,18 +347,15 @@ public class AdornmentTests (ITestOutputHelper output) parent.EndInit (); parent.SubviewLayout += LayoutStarted; - parent.Margin.Thickness = new Thickness (1, 2, 3, 4); + parent.Margin.Thickness = new (1, 2, 3, 4); Assert.True (parent.NeedsLayout); Assert.True (parent.Margin.NeedsLayout); parent.Layout (); Assert.True (raised); return; - void LayoutStarted (object sender, LayoutEventArgs e) - { - raised = true; - } + void LayoutStarted (object sender, LayoutEventArgs e) { raised = true; } } [Fact] @@ -376,17 +367,15 @@ public class AdornmentTests (ITestOutputHelper output) parent.EndInit (); parent.Margin.SubviewLayout += LayoutStarted; - parent.Margin.Thickness = new Thickness (1, 2, 3, 4); + parent.Margin.Thickness = new (1, 2, 3, 4); Assert.True (parent.NeedsLayout); Assert.True (parent.Margin.NeedsLayout); parent.Layout (); Assert.True (raised); return; - void LayoutStarted (object sender, LayoutEventArgs e) - { - raised = true; - } + + void LayoutStarted (object sender, LayoutEventArgs e) { raised = true; } } [Fact] @@ -408,7 +397,6 @@ public class AdornmentTests (ITestOutputHelper output) [InlineData (0, 0, 1, 0, 0, 0, false)] [InlineData (0, 0, 1, 1, 0, 0, true)] [InlineData (0, 0, 1, 2, 0, 0, true)] - [InlineData (1, 1, 0, 0, 0, 0, false)] [InlineData (1, 1, 0, 1, 0, 0, false)] [InlineData (1, 1, 1, 0, 0, 0, false)] @@ -420,8 +408,8 @@ public class AdornmentTests (ITestOutputHelper output) public void Contains_Left_Only (int x, int y, int width, int height, int pointX, int pointY, bool expected) { Adornment adornment = new () { Id = "adornment" }; - adornment.Parent = new View () { Id = "parent" }; - adornment.Parent.Frame = new Rectangle (x, y, width, height); + adornment.Parent = new() { Id = "parent" }; + adornment.Parent.Frame = new (x, y, width, height); adornment.Thickness = new (1, 0, 0, 0); adornment.Frame = adornment.Parent.Frame with { Location = Point.Empty }; @@ -435,7 +423,6 @@ public class AdornmentTests (ITestOutputHelper output) [InlineData (0, 0, 1, 0, 0, 0, false)] [InlineData (0, 0, 1, 1, 0, 0, true)] [InlineData (0, 0, 1, 2, 0, 0, true)] - [InlineData (1, 1, 0, 0, 0, 0, false)] [InlineData (1, 1, 0, 1, 0, 0, false)] [InlineData (1, 1, 1, 0, 0, 0, false)] @@ -447,8 +434,8 @@ public class AdornmentTests (ITestOutputHelper output) public void Contains_Right_Only (int x, int y, int width, int height, int pointX, int pointY, bool expected) { Adornment adornment = new () { Id = "adornment" }; - adornment.Parent = new View () { Id = "parent" }; - adornment.Parent.Frame = new Rectangle (x, y, width, height); + adornment.Parent = new() { Id = "parent" }; + adornment.Parent.Frame = new (x, y, width, height); adornment.Thickness = new (0, 0, 1, 0); adornment.Frame = adornment.Parent.Frame with { Location = Point.Empty }; @@ -456,14 +443,12 @@ public class AdornmentTests (ITestOutputHelper output) Assert.Equal (expected, result); } - [Theory] [InlineData (0, 0, 0, 0, 0, 0, false)] [InlineData (0, 0, 0, 1, 0, 0, false)] [InlineData (0, 0, 1, 0, 0, 0, false)] [InlineData (0, 0, 1, 1, 0, 0, true)] [InlineData (0, 0, 1, 2, 0, 0, true)] - [InlineData (1, 1, 0, 0, 0, 0, false)] [InlineData (1, 1, 0, 1, 0, 0, false)] [InlineData (1, 1, 1, 0, 0, 0, false)] @@ -475,8 +460,8 @@ public class AdornmentTests (ITestOutputHelper output) public void Contains_Top_Only (int x, int y, int width, int height, int pointX, int pointY, bool expected) { Adornment adornment = new () { Id = "adornment" }; - adornment.Parent = new View () { Id = "parent" }; - adornment.Parent.Frame = new Rectangle (x, y, width, height); + adornment.Parent = new() { Id = "parent" }; + adornment.Parent.Frame = new (x, y, width, height); adornment.Thickness = new (0, 1, 0, 0); adornment.Frame = adornment.Parent.Frame with { Location = Point.Empty }; @@ -484,14 +469,12 @@ public class AdornmentTests (ITestOutputHelper output) Assert.Equal (expected, result); } - [Theory] [InlineData (0, 0, 0, 0, 0, 0, false)] [InlineData (0, 0, 0, 1, 0, 0, false)] [InlineData (0, 0, 1, 0, 0, 0, false)] [InlineData (0, 0, 1, 1, 0, 0, true)] [InlineData (0, 0, 1, 2, 0, 0, true)] - [InlineData (1, 1, 0, 0, 0, 0, false)] [InlineData (1, 1, 0, 1, 0, 0, false)] [InlineData (1, 1, 1, 0, 0, 0, false)] @@ -503,74 +486,12 @@ public class AdornmentTests (ITestOutputHelper output) public void Contains_TopLeft_Only (int x, int y, int width, int height, int pointX, int pointY, bool expected) { Adornment adornment = new () { Id = "adornment" }; - adornment.Parent = new View () { Id = "parent" }; - adornment.Parent.Frame = new Rectangle (x, y, width, height); + adornment.Parent = new() { Id = "parent" }; + adornment.Parent.Frame = new (x, y, width, height); adornment.Thickness = new (1, 1, 0, 0); adornment.Frame = adornment.Parent.Frame with { Location = Point.Empty }; bool result = adornment.Contains (new (pointX, pointY)); Assert.Equal (expected, result); } - - [Fact] - [SetupFakeDriver] - public void Border_Is_Cleared_After_Margin_Thickness_Change () - { - View view = new () { Text = "View", Width = 6, Height = 3, BorderStyle = LineStyle.Rounded }; - // Remove border bottom thickness - view.Border!.Thickness = new (1, 1, 1, 0); - // Add margin bottom thickness - view.Margin!.Thickness = new (0, 0, 0, 1); - - Assert.Equal (6, view.Width); - Assert.Equal (3, view.Height); - - view.Draw (); - - TestHelpers.AssertDriverContentsWithFrameAre ( - @" -╭────╮ -│View│ -", - output - ); - - // Add border bottom thickness - view.Border!.Thickness = new (1, 1, 1, 1); - // Remove margin bottom thickness - view.Margin!.Thickness = new (0, 0, 0, 0); - - view.Draw (); - - Assert.Equal (6, view.Width); - Assert.Equal (3, view.Height); - - TestHelpers.AssertDriverContentsWithFrameAre ( - @" -╭────╮ -│View│ -╰────╯ -", - output - ); - - // Remove border bottom thickness - view.Border!.Thickness = new (1, 1, 1, 0); - // Add margin bottom thickness - view.Margin!.Thickness = new (0, 0, 0, 1); - - Assert.Equal (6, view.Width); - Assert.Equal (3, view.Height); - - View.SetClipToScreen (); - view.Draw (); - - TestHelpers.AssertDriverContentsWithFrameAre ( - @" -╭────╮ -│View│ -", - output - ); - } } diff --git a/Tests/UnitTestsParallelizable/View/Adornment/ShadowStyletests.cs b/Tests/UnitTestsParallelizable/View/Adornment/ShadowStyletests.cs new file mode 100644 index 000000000..7885f314b --- /dev/null +++ b/Tests/UnitTestsParallelizable/View/Adornment/ShadowStyletests.cs @@ -0,0 +1,106 @@ +namespace Terminal.Gui.ViewTests; + +public class ShadowStyleTests +{ + [Fact] + public void Default_None () + { + var view = new View (); + Assert.Equal (ShadowStyle.None, view.ShadowStyle); + Assert.Equal (ShadowStyle.None, view.Margin!.ShadowStyle); + view.Dispose (); + } + + [Theory] + [InlineData (ShadowStyle.None)] + [InlineData (ShadowStyle.Opaque)] + [InlineData (ShadowStyle.Transparent)] + public void Set_View_Sets_Margin (ShadowStyle style) + { + var view = new View (); + + view.ShadowStyle = style; + Assert.Equal (style, view.ShadowStyle); + Assert.Equal (style, view.Margin!.ShadowStyle); + view.Dispose (); + } + + [Theory] + [InlineData (ShadowStyle.None, 0, 0, 0, 0)] + [InlineData (ShadowStyle.Opaque, 1, 0, 0, 1)] + [InlineData (ShadowStyle.Transparent, 1, 0, 0, 1)] + public void ShadowStyle_Button1Pressed_Causes_Movement (ShadowStyle style, int expectedLeft, int expectedTop, int expectedRight, int expectedBottom) + { + var superView = new View + { + Height = 10, Width = 10 + }; + + View view = new () + { + Width = Dim.Auto (), + Height = Dim.Auto (), + Text = "0123", + HighlightStyle = HighlightStyle.Pressed, + ShadowStyle = style, + CanFocus = true + }; + + superView.Add (view); + superView.BeginInit (); + superView.EndInit (); + + Thickness origThickness = view.Margin!.Thickness; + view.NewMouseEvent (new () { Flags = MouseFlags.Button1Pressed, Position = new (0, 0) }); + Assert.Equal (new (expectedLeft, expectedTop, expectedRight, expectedBottom), view.Margin.Thickness); + + view.NewMouseEvent (new () { Flags = MouseFlags.Button1Released, Position = new (0, 0) }); + Assert.Equal (origThickness, view.Margin.Thickness); + } + + [Theory] + [InlineData (ShadowStyle.None, 0, 0, 0, 0)] + [InlineData (ShadowStyle.Opaque, 0, 0, 1, 1)] + [InlineData (ShadowStyle.Transparent, 0, 0, 1, 1)] + public void ShadowStyle_Margin_Thickness (ShadowStyle style, int expectedLeft, int expectedTop, int expectedRight, int expectedBottom) + { + var superView = new View + { + Height = 10, Width = 10 + }; + + View view = new () + { + Width = Dim.Auto (), + Height = Dim.Auto (), + Text = "0123", + HighlightStyle = HighlightStyle.Pressed, + ShadowStyle = style, + CanFocus = true + }; + + superView.Add (view); + superView.BeginInit (); + superView.EndInit (); + + Assert.Equal (new (expectedLeft, expectedTop, expectedRight, expectedBottom), view.Margin.Thickness); + } + + + [Theory] + [InlineData (ShadowStyle.None, 3)] + [InlineData (ShadowStyle.Opaque, 4)] + [InlineData (ShadowStyle.Transparent, 4)] + public void Style_Changes_Margin_Thickness (ShadowStyle style, int expected) + { + var view = new View (); + view.Margin!.Thickness = new (3); + view.ShadowStyle = style; + Assert.Equal (new (3, 3, expected, expected), view.Margin.Thickness); + + view.ShadowStyle = ShadowStyle.None; + Assert.Equal (new (3), view.Margin.Thickness); + view.Dispose (); + } + +} diff --git a/Tests/UnitTestsParallelizable/View/Adornment/ToScreenTests.cs b/Tests/UnitTestsParallelizable/View/Adornment/ToScreenTests.cs new file mode 100644 index 000000000..2d8f03de1 --- /dev/null +++ b/Tests/UnitTestsParallelizable/View/Adornment/ToScreenTests.cs @@ -0,0 +1,14 @@ +using Xunit.Abstractions; + +namespace Terminal.Gui.ViewTests; + +/// +/// Test the and methods. +/// DOES NOT TEST View.xxxToScreen methods. Those are in ./View/Layout/ToScreenTests.cs +/// +/// +public class AdornmentToScreenTests (ITestOutputHelper output) +{ + private readonly ITestOutputHelper _output = output; + +} diff --git a/UnitTests/View/Draw/NeedsDrawTests.cs b/Tests/UnitTestsParallelizable/View/Draw/NeedsDrawTests.cs similarity index 79% rename from UnitTests/View/Draw/NeedsDrawTests.cs rename to Tests/UnitTestsParallelizable/View/Draw/NeedsDrawTests.cs index 6637bc768..58bf23cdf 100644 --- a/UnitTests/View/Draw/NeedsDrawTests.cs +++ b/Tests/UnitTestsParallelizable/View/Draw/NeedsDrawTests.cs @@ -2,7 +2,7 @@ namespace Terminal.Gui.ViewTests; [Trait ("Category", "Output")] -public class NeedsDrawTests () +public class NeedsDrawTests { [Fact] public void NeedsDraw_False_If_Width_Height_Zero () @@ -11,10 +11,10 @@ public class NeedsDrawTests () view.BeginInit (); view.EndInit (); Assert.True (view.NeedsDraw); + //Assert.False (view.SubViewNeedsDraw); } - [Fact] public void NeedsDraw_True_Initially_If_Width_Height_Not_Zero () { @@ -31,7 +31,7 @@ public class NeedsDrawTests () Assert.True (view1.NeedsDraw); Assert.True (view2.NeedsDraw); - superView.Layout (); // NeedsDraw is always false if Layout is needed + superView.Layout (); // NeedsDraw is always false if Layout is needed superView.Draw (); @@ -48,14 +48,13 @@ public class NeedsDrawTests () Assert.True (view2.NeedsDraw); } - [Fact] public void NeedsDraw_True_After_Constructor () { var view = new View { Width = 2, Height = 2 }; Assert.True (view.NeedsDraw); - view = new View { Width = 2, Height = 2, BorderStyle = LineStyle.Single }; + view = new() { Width = 2, Height = 2, BorderStyle = LineStyle.Single }; Assert.True (view.NeedsDraw); } @@ -89,14 +88,13 @@ public class NeedsDrawTests () view.EndInit (); Assert.True (view.NeedsDraw); - view = new View { Width = 2, Height = 2, BorderStyle = LineStyle.Single }; + view = new() { Width = 2, Height = 2, BorderStyle = LineStyle.Single }; view.BeginInit (); view.NeedsDraw = false; view.EndInit (); Assert.True (view.NeedsDraw); } - [Fact] public void NeedsDraw_After_SetLayoutNeeded () { @@ -144,6 +142,7 @@ public class NeedsDrawTests () public void NeedsDraw_False_After_SetRelativeLayout_Relative_Dims () { var view = new View { Width = Dim.Percent (50), Height = Dim.Percent (50) }; + View superView = new () { Id = "superView", @@ -169,7 +168,6 @@ public class NeedsDrawTests () Assert.True (superView.NeedsDraw); } - [Fact] public void NeedsDraw_False_After_SetRelativeLayout_10x10 () { @@ -244,7 +242,7 @@ public class NeedsDrawTests () var view = new View { - Id = "view", + Id = "view" }; view.Frame = new (0, 1, 2, 3); @@ -294,66 +292,5 @@ public class NeedsDrawTests () Assert.Equal (new (3, 3, 5, 5), view.Frame); Assert.Equal (new (1, 1, 5, 5), view.Viewport); Assert.Equal (new (1, 1, 5, 5), view._needsDrawRect); - - } - - - [Fact] - [AutoInitShutdown] - public void Frame_Set_After_Initialize_Update_NeededDisplay () - { - var frame = new FrameView (); - - var label = new Label - { - ColorScheme = Colors.ColorSchemes ["Menu"], X = 0, Y = 0, Text = "This should be the first line." - }; - - var view = new View - { - X = 0, // don't overcomplicate unit tests - Y = 1, - Height = Dim.Auto (DimAutoStyle.Text), - Width = Dim.Auto (DimAutoStyle.Text), - Text = "Press me!" - }; - - frame.Add (label, view); - - frame.X = Pos.Center (); - frame.Y = Pos.Center (); - frame.Width = 40; - frame.Height = 8; - - Toplevel top = new (); - - top.Add (frame); - - RunState runState = Application.Begin (top); - - top.SubviewsLaidOut += (s, e) => { Assert.Equal (new (0, 0, 80, 25), top._needsDrawRect); }; - - frame.SubviewsLaidOut += (s, e) => { Assert.Equal (new (0, 0, 40, 8), frame._needsDrawRect); }; - - label.SubviewsLaidOut += (s, e) => { Assert.Equal (new (0, 0, 38, 1), label._needsDrawRect); }; - - view.SubviewsLaidOut += (s, e) => { Assert.Equal (new (0, 0, 13, 1), view._needsDrawRect); }; - - Assert.Equal (new (0, 0, 80, 25), top.Frame); - Assert.Equal (new (20, 8, 40, 8), frame.Frame); - - Assert.Equal ( - new (20, 8, 60, 16), - new Rectangle ( - frame.Frame.Left, - frame.Frame.Top, - frame.Frame.Right, - frame.Frame.Bottom - ) - ); - Assert.Equal (new (0, 0, 30, 1), label.Frame); - Assert.Equal (new (0, 1, 9, 1), view.Frame); // this proves frame was set - Application.End (runState); - top.Dispose (); } } diff --git a/UnitTests/View/Layout/Dim.AutoTests.DimTypes.cs b/Tests/UnitTestsParallelizable/View/Layout/Dim.AutoTests.DimTypes.cs similarity index 100% rename from UnitTests/View/Layout/Dim.AutoTests.DimTypes.cs rename to Tests/UnitTestsParallelizable/View/Layout/Dim.AutoTests.DimTypes.cs diff --git a/UnitTests/View/Layout/Dim.AutoTests.MinMax.cs b/Tests/UnitTestsParallelizable/View/Layout/Dim.AutoTests.MinMax.cs similarity index 100% rename from UnitTests/View/Layout/Dim.AutoTests.MinMax.cs rename to Tests/UnitTestsParallelizable/View/Layout/Dim.AutoTests.MinMax.cs diff --git a/UnitTests/View/Layout/Dim.AutoTests.PosTypes.cs b/Tests/UnitTestsParallelizable/View/Layout/Dim.AutoTests.PosTypes.cs similarity index 100% rename from UnitTests/View/Layout/Dim.AutoTests.PosTypes.cs rename to Tests/UnitTestsParallelizable/View/Layout/Dim.AutoTests.PosTypes.cs diff --git a/UnitTests/View/Layout/Dim.AutoTests.cs b/Tests/UnitTestsParallelizable/View/Layout/Dim.AutoTests.cs similarity index 96% rename from UnitTests/View/Layout/Dim.AutoTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/Dim.AutoTests.cs index 0d569e675..e9a141c0a 100644 --- a/UnitTests/View/Layout/Dim.AutoTests.cs +++ b/Tests/UnitTestsParallelizable/View/Layout/Dim.AutoTests.cs @@ -1,4 +1,5 @@ using System.Text; +using UnitTests; using Xunit.Abstractions; using static Terminal.Gui.Dim; @@ -993,41 +994,6 @@ public partial class DimAutoTests (ITestOutputHelper output) Assert.Equal (new (5, 5), view.Frame.Size); } - [Fact] - [SetupFakeDriver] - public void DimAutoStyle_Content_Pos_AnchorEnd_Locates_Correctly () - { - (((FakeDriver)Application.Driver)!).SetBufferSize(10,10); - - DimAutoTestView view = new (Auto (DimAutoStyle.Content), Auto (DimAutoStyle.Content)); - - View subView = new () - { - Width = 5, - Height = 1 - }; - view.Add (subView); - - view.Layout (); - Assert.Equal (new (5, 1), view.Frame.Size); - Assert.Equal (new (0, 0), view.Frame.Location); - - view.X = 0; - view.Y = Pos.AnchorEnd (1); - view.Layout (); - Assert.Equal (new (5, 1), view.Frame.Size); - Assert.Equal (new (0, 9), view.Frame.Location); - - view.Y = Pos.AnchorEnd (); - view.Layout (); - Assert.Equal (new (5, 1), view.Frame.Size); - Assert.Equal (new (0, 9), view.Frame.Location); - - view.Y = Pos.AnchorEnd () - 1; - view.Layout (); - Assert.Equal (new (5, 1), view.Frame.Size); - Assert.Equal (new (0, 8), view.Frame.Location); - } #endregion DimAutoStyle.Content tests diff --git a/UnitTests/View/Layout/Dim.CombineTests.cs b/Tests/UnitTestsParallelizable/View/Layout/Dim.CombineTests.cs similarity index 100% rename from UnitTests/View/Layout/Dim.CombineTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/Dim.CombineTests.cs diff --git a/UnitTests/View/Layout/Dim.FillTests.cs b/Tests/UnitTestsParallelizable/View/Layout/Dim.FillTests.cs similarity index 88% rename from UnitTests/View/Layout/Dim.FillTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/Dim.FillTests.cs index 5e1ba315a..ec43c9538 100644 --- a/UnitTests/View/Layout/Dim.FillTests.cs +++ b/Tests/UnitTestsParallelizable/View/Layout/Dim.FillTests.cs @@ -1,4 +1,5 @@ -using Xunit.Abstractions; +using UnitTests; +using Xunit.Abstractions; namespace Terminal.Gui.LayoutTests; @@ -6,24 +7,6 @@ public class DimFillTests (ITestOutputHelper output) { private readonly ITestOutputHelper _output = output; - [Fact] - [AutoInitShutdown] - public void DimFill_SizedCorrectly () - { - var view = new View { Width = Dim.Fill (), Height = Dim.Fill (), BorderStyle = LineStyle.Single }; - var top = new Toplevel (); - top.Add (view); - RunState rs = Application.Begin (top); - ((FakeDriver)Application.Driver!).SetBufferSize (32, 5); - - top.Layout (); - - //view.SetRelativeLayout (new (0, 0, 32, 5)); - Assert.Equal (32, view.Frame.Width); - Assert.Equal (5, view.Frame.Height); - top.Dispose (); - } - [Fact] public void DimFill_Equal () diff --git a/UnitTests/View/Layout/Dim.FuncTests.cs b/Tests/UnitTestsParallelizable/View/Layout/Dim.FuncTests.cs similarity index 100% rename from UnitTests/View/Layout/Dim.FuncTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/Dim.FuncTests.cs diff --git a/UnitTests/View/Layout/Dim.PercentTests.cs b/Tests/UnitTestsParallelizable/View/Layout/Dim.PercentTests.cs similarity index 100% rename from UnitTests/View/Layout/Dim.PercentTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/Dim.PercentTests.cs diff --git a/Tests/UnitTestsParallelizable/View/Layout/Dim.Tests.cs b/Tests/UnitTestsParallelizable/View/Layout/Dim.Tests.cs new file mode 100644 index 000000000..d844841c0 --- /dev/null +++ b/Tests/UnitTestsParallelizable/View/Layout/Dim.Tests.cs @@ -0,0 +1,245 @@ +using System.Globalization; +using System.Text; +using UnitTests; +using Xunit.Abstractions; +using static Terminal.Gui.Dim; + +namespace Terminal.Gui.LayoutTests; + +public class DimTests +{ + [Fact] + public void DimAbsolute_Calculate_ReturnsCorrectValue () + { + var dim = new DimAbsolute (10); + int result = dim.Calculate (0, 100, null, Dimension.None); + Assert.Equal (10, result); + } + + // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved + // TODO: A new test that calls SetRelativeLayout directly is needed. + [Fact] + public void Dim_Validation_Do_Not_Throws_If_NewValue_Is_DimAbsolute_And_OldValue_Is_Null () + { + var t = new View { Width = 80, Height = 25, Text = "top" }; + + var w = new View + { + BorderStyle = LineStyle.Single, + X = 1, + Y = 2, + Width = 4, + Height = 5, + Title = "w" + }; + t.Add (w); + t.LayoutSubviews (); + + Assert.Equal (3, w.Width = 3); + Assert.Equal (4, w.Height = 4); + t.Dispose (); + } + + [Fact] + public void DimHeight_Set_To_Null_Throws () + { + Dim dim = Height (null); + Assert.Throws (() => dim.ToString ()); + } + + [Fact] + public void DimHeight_SetsValue () + { + var testVal = Rectangle.Empty; + var testValview = new View { Frame = testVal }; + Dim dim = Height (testValview); + Assert.Equal ($"View(Height,View(){testVal})", dim.ToString ()); + testValview.Dispose (); + + testVal = new (1, 2, 3, 4); + testValview = new () { Frame = testVal }; + dim = Height (testValview); + Assert.Equal ($"View(Height,View(){testVal})", dim.ToString ()); + testValview.Dispose (); + } + + [Fact] + public void Internal_Tests () + { + var dimFactor = new DimPercent (10); + Assert.Equal (10, dimFactor.GetAnchor (100)); + + var dimAbsolute = new DimAbsolute (10); + Assert.Equal (10, dimAbsolute.GetAnchor (0)); + + var dimFill = new DimFill (1); + Assert.Equal (99, dimFill.GetAnchor (100)); + + var dimCombine = new DimCombine (AddOrSubtract.Add, dimFactor, dimAbsolute); + Assert.Equal (dimCombine.Left, dimFactor); + Assert.Equal (dimCombine.Right, dimAbsolute); + Assert.Equal (20, dimCombine.GetAnchor (100)); + + var view = new View { Frame = new (20, 10, 20, 1) }; + var dimViewHeight = new DimView (view, Dimension.Height); + Assert.Equal (1, dimViewHeight.GetAnchor (0)); + var dimViewWidth = new DimView (view, Dimension.Width); + Assert.Equal (20, dimViewWidth.GetAnchor (0)); + + view.Dispose (); + } + + // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved + // TODO: A new test that calls SetRelativeLayout directly is needed. + [Fact] + public void Referencing_SuperView_Does_Not_Throw () + { + var super = new View { Width = 10, Height = 10, Text = "super" }; + + var view = new View + { + Width = Width (super), // this is allowed + Height = Height (super), // this is allowed + Text = "view" + }; + + super.Add (view); + super.BeginInit (); + super.EndInit (); + + Exception exception = Record.Exception (super.LayoutSubviews); + Assert.Null (exception); + super.Dispose (); + } + + [Fact] + public void DimSized_Equals () + { + var n1 = 0; + var n2 = 0; + Dim dim1 = Absolute (n1); + Dim dim2 = Absolute (n2); + Assert.Equal (dim1, dim2); + + n1 = n2 = 1; + dim1 = Absolute (n1); + dim2 = Absolute (n2); + Assert.Equal (dim1, dim2); + + n1 = n2 = -1; + dim1 = Absolute (n1); + dim2 = Absolute (n2); + Assert.Equal (dim1, dim2); + + n1 = 0; + n2 = 1; + dim1 = Absolute (n1); + dim2 = Absolute (n2); + Assert.NotEqual (dim1, dim2); + } + + [Fact] + public void DimSized_SetsValue () + { + Dim dim = Absolute (0); + Assert.Equal ("Absolute(0)", dim.ToString ()); + + var testVal = 5; + dim = Absolute (testVal); + Assert.Equal ($"Absolute({testVal})", dim.ToString ()); + + testVal = -1; + dim = Absolute (testVal); + Assert.Equal ($"Absolute({testVal})", dim.ToString ()); + } + + // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved + // TODO: A new test that calls SetRelativeLayout directly is needed. + [Fact] + public void Validation_Does_Not_Throw_If_NewValue_Is_DimAbsolute_And_OldValue_Is_Null () + { + var t = new View { Width = 80, Height = 25, Text = "top" }; + + var w = new Window + { + X = 1, + Y = 2, + Width = 4, + Height = 5, + Title = "w" + }; + t.Add (w); + t.LayoutSubviews (); + + Assert.Equal (3, w.Width = 3); + Assert.Equal (4, w.Height = 4); + t.Dispose (); + } + + [Fact] + public void DimWidth_Equals () + { + var testRect1 = Rectangle.Empty; + var view1 = new View { Frame = testRect1 }; + var testRect2 = Rectangle.Empty; + var view2 = new View { Frame = testRect2 }; + + Dim dim1 = Width (view1); + Dim dim2 = Width (view1); + + // FIXED: Dim.Width should support Equals() and this should change to Equal. + Assert.Equal (dim1, dim2); + + dim2 = Width (view2); + Assert.NotEqual (dim1, dim2); + + testRect1 = new (0, 1, 2, 3); + view1 = new () { Frame = testRect1 }; + testRect2 = new (0, 1, 2, 3); + dim1 = Width (view1); + dim2 = Width (view1); + + // FIXED: Dim.Width should support Equals() and this should change to Equal. + Assert.Equal (dim1, dim2); + + testRect1 = new (0, -1, 2, 3); + view1 = new () { Frame = testRect1 }; + testRect2 = new (0, -1, 2, 3); + dim1 = Width (view1); + dim2 = Width (view1); + + // FIXED: Dim.Width should support Equals() and this should change to Equal. + Assert.Equal (dim1, dim2); + + testRect1 = new (0, -1, 2, 3); + view1 = new () { Frame = testRect1 }; + testRect2 = Rectangle.Empty; + view2 = new () { Frame = testRect2 }; + dim1 = Width (view1); + dim2 = Width (view2); + Assert.NotEqual (dim1, dim2); + } + + [Fact] + public void DimWidth_Set_To_Null_Throws () + { + Dim dim = Width (null); + Assert.Throws (() => dim.ToString ()); + } + + [Fact] + public void DimWidth_SetsValue () + { + var testVal = Rectangle.Empty; + var testValView = new View { Frame = testVal }; + Dim dim = Width (testValView); + Assert.Equal ($"View(Width,View(){testVal})", dim.ToString ()); + testValView.Dispose (); + + testVal = new (1, 2, 3, 4); + testValView = new () { Frame = testVal }; + dim = Width (testValView); + Assert.Equal ($"View(Width,View(){testVal})", dim.ToString ()); + testValView.Dispose (); + } +} diff --git a/UnitTests/View/Layout/Dim.ViewTests.cs b/Tests/UnitTestsParallelizable/View/Layout/Dim.ViewTests.cs similarity index 76% rename from UnitTests/View/Layout/Dim.ViewTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/Dim.ViewTests.cs index 2df83b531..6c8d3247a 100644 --- a/UnitTests/View/Layout/Dim.ViewTests.cs +++ b/Tests/UnitTestsParallelizable/View/Layout/Dim.ViewTests.cs @@ -1,12 +1,9 @@ -using Xunit.Abstractions; -using static Terminal.Gui.Dim; +using static Terminal.Gui.Dim; namespace Terminal.Gui.LayoutTests; -public class DimViewTests (ITestOutputHelper output) +public class DimViewTests { - private readonly ITestOutputHelper _output = output; - [Fact] public void DimView_Equal () { @@ -24,29 +21,27 @@ public class DimViewTests (ITestOutputHelper output) Assert.NotEqual (dim1, dim2); } - [Fact] public void DimView_Calculate_ReturnsCorrectValue () { var view = new View { Width = 10 }; view.Layout (); var dim = new DimView (view, Dimension.Width); - var result = dim.Calculate (0, 100, null, Dimension.None); + int result = dim.Calculate (0, 100, null, Dimension.None); Assert.Equal (10, result); } // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved // TODO: A new test that calls SetRelativeLayout directly is needed. [Fact] - [TestRespondersDisposed] public void Dim_Referencing_SuperView_Does_Not_Throw () { var super = new View { Width = 10, Height = 10, Text = "super" }; var view = new View { - Width = Dim.Width (super), // this is allowed - Height = Dim.Height (super), // this is allowed + Width = Width (super), // this is allowed + Height = Height (super), // this is allowed Text = "view" }; diff --git a/UnitTests/View/Layout/FrameTests.cs b/Tests/UnitTestsParallelizable/View/Layout/FrameTests.cs similarity index 83% rename from UnitTests/View/Layout/FrameTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/FrameTests.cs index cc9ba8608..a58475158 100644 --- a/UnitTests/View/Layout/FrameTests.cs +++ b/Tests/UnitTestsParallelizable/View/Layout/FrameTests.cs @@ -1,53 +1,84 @@ -using Xunit.Abstractions; +namespace Terminal.Gui.LayoutTests; -namespace Terminal.Gui.LayoutTests; - -public class FrameTests (ITestOutputHelper output) +public class FrameTests { - private readonly ITestOutputHelper _output = output; - [Fact] public void Frame_Empty_Default () { View view = new (); - Assert.Equal(Rectangle.Empty, view.Frame); + Assert.Equal (Rectangle.Empty, view.Frame); - view.BeginInit(); - view.EndInit(); + view.BeginInit (); + view.EndInit (); Assert.Equal (Rectangle.Empty, view.Frame); } [Fact] - public void Frame_Set_Sets () + public void Frame_Empty_Initializer_Overrides_Base () { - Rectangle frame = new (1, 2, 3, 4); - View view = new (); + // Prove TestView is correct + FrameTestView view = new (); Assert.True (view.NeedsLayout); - Assert.Equal (Rectangle.Empty, view.Frame); - view.Frame = frame; - Assert.Equal (frame, view.Frame); - Assert.False (view.NeedsLayout); + view.Layout (); + Assert.Equal (new (10, 20, 30, 40), view.Frame); + Assert.Equal (10, view.X.GetAnchor (0)); + Assert.Equal (20, view.Y.GetAnchor (0)); + Assert.Equal (30, view.Width!.GetAnchor (0)); + Assert.Equal (40, view.Height!.GetAnchor (0)); + Assert.Equal (new (0, 0, 30, 40), view.Viewport); - Assert.Equal(view.X, frame.X); - Assert.Equal (view.Y, frame.Y); - Assert.Equal (view.Width, frame.Width); - Assert.Equal (view.Height, frame.Height); - } - - [Fact] - public void Frame_Initializer_Sets () - { + // Set Frame via init Rectangle frame = new (1, 2, 3, 4); - View view = new () - { - Frame = frame, - }; + view = new () + { + Frame = frame + }; Assert.Equal (frame, view.Frame); Assert.False (view.NeedsLayout); Assert.Equal (frame.Size, view.Viewport.Size); + Assert.Equal (view.X, frame.X); + Assert.Equal (view.Y, frame.Y); + Assert.Equal (view.Width, frame.Width); + Assert.Equal (view.Height, frame.Height); + + // Set Frame via init to empty + frame = Rectangle.Empty; + + view = new () + { + Frame = frame + }; + Assert.Equal (frame, view.Frame); + Assert.False (view.NeedsLayout); + Assert.Equal (frame.Size, view.Viewport.Size); + + Assert.Equal (view.X, frame.X); + Assert.Equal (view.Y, frame.Y); + Assert.Equal (view.Width, frame.Width); + Assert.Equal (view.Height, frame.Height); + + // Set back to original state + view.X = Pos.Func (() => 10); + view.Y = Pos.Func (() => 20); + view.Width = Dim.Func (() => 30); + view.Height = Dim.Func (() => 40); + Assert.True (view.NeedsLayout); + + view.Layout (); + Assert.Equal (new (10, 20, 30, 40), view.Frame); + Assert.Equal (10, view.X.GetAnchor (0)); + Assert.Equal (20, view.Y.GetAnchor (0)); + Assert.Equal (30, view.Width!.GetAnchor (0)); + Assert.Equal (40, view.Height!.GetAnchor (0)); + Assert.Equal (new (0, 0, 30, 40), view.Viewport); + + view.Frame = frame; + Assert.Equal (frame, view.Frame); + Assert.False (view.NeedsLayout); + Assert.Equal (frame.Size, view.Viewport.Size); Assert.Equal (view.X, frame.X); Assert.Equal (view.Y, frame.Y); @@ -55,14 +86,14 @@ public class FrameTests (ITestOutputHelper output) Assert.Equal (view.Height, frame.Height); } - [Fact] public void Frame_Empty_Initializer_Sets () { Rectangle frame = new (1, 2, 3, 4); + View view = new () { - Frame = frame, + Frame = frame }; Assert.Equal (frame, view.Frame); @@ -100,71 +131,18 @@ public class FrameTests (ITestOutputHelper output) Assert.Equal (view.Y, Rectangle.Empty.Y); Assert.Equal (view.Width, Rectangle.Empty.Width); Assert.Equal (view.Height, Rectangle.Empty.Height); - } - [Fact] - public void Frame_Empty_Initializer_Overrides_Base () + public void Frame_Initializer_Sets () { - // Prove TestView is correct - FrameTestView view = new (); - Assert.True (view.NeedsLayout); - - view.Layout (); - Assert.Equal (new Rectangle(10, 20, 30, 40), view.Frame); - Assert.Equal (10, view.X.GetAnchor(0)); - Assert.Equal (20, view.Y.GetAnchor(0)); - Assert.Equal (30, view.Width!.GetAnchor(0)); - Assert.Equal (40, view.Height!.GetAnchor(0)); - Assert.Equal (new Rectangle (0, 0, 30, 40), view.Viewport); - - // Set Frame via init Rectangle frame = new (1, 2, 3, 4); - view = new () + + View view = new () { - Frame = frame, + Frame = frame }; - Assert.Equal (frame, view.Frame); - Assert.False (view.NeedsLayout); - Assert.Equal (frame.Size, view.Viewport.Size); - Assert.Equal (view.X, frame.X); - Assert.Equal (view.Y, frame.Y); - Assert.Equal (view.Width, frame.Width); - Assert.Equal (view.Height, frame.Height); - - // Set Frame via init to empty - frame = Rectangle.Empty; - view = new () - { - Frame = frame, - }; - Assert.Equal (frame, view.Frame); - Assert.False (view.NeedsLayout); - Assert.Equal (frame.Size, view.Viewport.Size); - - Assert.Equal (view.X, frame.X); - Assert.Equal (view.Y, frame.Y); - Assert.Equal (view.Width, frame.Width); - Assert.Equal (view.Height, frame.Height); - - // Set back to original state - view.X = Pos.Func (() => 10); - view.Y = Pos.Func (() => 20); - view.Width = Dim.Func (() => 30); - view.Height = Dim.Func (() => 40); - Assert.True (view.NeedsLayout); - - view.Layout (); - Assert.Equal (new Rectangle (10, 20, 30, 40), view.Frame); - Assert.Equal (10, view.X.GetAnchor (0)); - Assert.Equal (20, view.Y.GetAnchor (0)); - Assert.Equal (30, view.Width!.GetAnchor (0)); - Assert.Equal (40, view.Height!.GetAnchor (0)); - Assert.Equal (new Rectangle (0, 0, 30, 40), view.Viewport); - - view.Frame = frame; Assert.Equal (frame, view.Frame); Assert.False (view.NeedsLayout); Assert.Equal (frame.Size, view.Viewport.Size); @@ -175,22 +153,9 @@ public class FrameTests (ITestOutputHelper output) Assert.Equal (view.Height, frame.Height); } - private class FrameTestView : View - { - public FrameTestView () - { - X = Pos.Func (() => 10); - Y = Pos.Func (() => 20); - Width = Dim.Func (() => 30); - Height = Dim.Func (() => 40); - } - } - - // Moved this test from AbsoluteLayoutTests // TODO: Refactor as Theory [Fact] - [TestRespondersDisposed] public void Frame_Set () { var frame = new Rectangle (1, 2, 3, 4); @@ -200,14 +165,14 @@ public class FrameTests (ITestOutputHelper output) Assert.Equal (Rectangle.Empty, v.Frame); v.Dispose (); - v = new View { Frame = frame }; + v = new() { Frame = frame }; Assert.Equal (frame, v.Frame); v.Frame = newFrame; Assert.Equal (newFrame, v.Frame); Assert.Equal ( - new Rectangle (0, 0, newFrame.Width, newFrame.Height), + new (0, 0, newFrame.Width, newFrame.Height), v.Viewport ); // With Absolute Viewport *is* deterministic before Layout Assert.Equal (Pos.Absolute (1), v.X); @@ -216,12 +181,12 @@ public class FrameTests (ITestOutputHelper output) Assert.Equal (Dim.Absolute (40), v.Height); v.Dispose (); - v = new View { X = frame.X, Y = frame.Y, Text = "v" }; + v = new() { X = frame.X, Y = frame.Y, Text = "v" }; v.Frame = newFrame; Assert.Equal (newFrame, v.Frame); Assert.Equal ( - new Rectangle (0, 0, newFrame.Width, newFrame.Height), + new (0, 0, newFrame.Width, newFrame.Height), v.Viewport ); // With Absolute Viewport *is* deterministic before Layout Assert.Equal (Pos.Absolute (1), v.X); @@ -230,13 +195,13 @@ public class FrameTests (ITestOutputHelper output) Assert.Equal (Dim.Absolute (40), v.Height); v.Dispose (); - newFrame = new Rectangle (10, 20, 30, 40); - v = new View { Frame = frame }; + newFrame = new (10, 20, 30, 40); + v = new() { Frame = frame }; v.Frame = newFrame; Assert.Equal (newFrame, v.Frame); Assert.Equal ( - new Rectangle (0, 0, newFrame.Width, newFrame.Height), + new (0, 0, newFrame.Width, newFrame.Height), v.Viewport ); // With Absolute Viewport *is* deterministic before Layout Assert.Equal (Pos.Absolute (10), v.X); @@ -245,12 +210,12 @@ public class FrameTests (ITestOutputHelper output) Assert.Equal (Dim.Absolute (40), v.Height); v.Dispose (); - v = new View { X = frame.X, Y = frame.Y, Text = "v" }; + v = new() { X = frame.X, Y = frame.Y, Text = "v" }; v.Frame = newFrame; Assert.Equal (newFrame, v.Frame); Assert.Equal ( - new Rectangle (0, 0, newFrame.Width, newFrame.Height), + new (0, 0, newFrame.Width, newFrame.Height), v.Viewport ); // With Absolute Viewport *is* deterministic before Layout Assert.Equal (Pos.Absolute (10), v.X); @@ -260,21 +225,39 @@ public class FrameTests (ITestOutputHelper output) v.Dispose (); } - private class TestFrameEventsView : View + [Fact] + public void Frame_Set_Sets () { - public int OnFrameChangedCallCount { get; private set; } - public int FrameChangedEventCallCount { get; private set; } + Rectangle frame = new (1, 2, 3, 4); + View view = new (); + Assert.True (view.NeedsLayout); + Assert.Equal (Rectangle.Empty, view.Frame); - public TestFrameEventsView () - { - FrameChanged += (sender, args) => FrameChangedEventCallCount++; - } + view.Frame = frame; + Assert.Equal (frame, view.Frame); + Assert.False (view.NeedsLayout); - protected override void OnFrameChanged (in Rectangle frame) - { - OnFrameChangedCallCount++; - base.OnFrameChanged (frame); - } + Assert.Equal (view.X, frame.X); + Assert.Equal (view.Y, frame.Y); + Assert.Equal (view.Width, frame.Width); + Assert.Equal (view.Height, frame.Height); + } + + [Fact] + public void FrameChanged_Event_Raised_When_Frame_Changes () + { + // Arrange + var view = new TestFrameEventsView (); + var initialFrame = new Rectangle (0, 0, 10, 10); + var newFrame = new Rectangle (0, 0, 20, 20); + view.Frame = initialFrame; + Assert.Equal (1, view.FrameChangedEventCallCount); + + // Act + view.Frame = newFrame; + + // Assert + Assert.Equal (2, view.FrameChangedEventCallCount); } [Fact] @@ -294,20 +277,28 @@ public class FrameTests (ITestOutputHelper output) Assert.Equal (2, view.OnFrameChangedCallCount); } - [Fact] - public void FrameChanged_Event_Raised_When_Frame_Changes () + private class FrameTestView : View { - // Arrange - var view = new TestFrameEventsView (); - var initialFrame = new Rectangle (0, 0, 10, 10); - var newFrame = new Rectangle (0, 0, 20, 20); - view.Frame = initialFrame; - Assert.Equal (1, view.FrameChangedEventCallCount); + public FrameTestView () + { + X = Pos.Func (() => 10); + Y = Pos.Func (() => 20); + Width = Dim.Func (() => 30); + Height = Dim.Func (() => 40); + } + } - // Act - view.Frame = newFrame; + private class TestFrameEventsView : View + { + public TestFrameEventsView () { FrameChanged += (sender, args) => FrameChangedEventCallCount++; } - // Assert - Assert.Equal (2, view.FrameChangedEventCallCount); + public int FrameChangedEventCallCount { get; private set; } + public int OnFrameChangedCallCount { get; private set; } + + protected override void OnFrameChanged (in Rectangle frame) + { + OnFrameChangedCallCount++; + base.OnFrameChanged (frame); + } } } diff --git a/UnitTests/View/Layout/Pos.AbsoluteTests.cs b/Tests/UnitTestsParallelizable/View/Layout/Pos.AbsoluteTests.cs similarity index 100% rename from UnitTests/View/Layout/Pos.AbsoluteTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/Pos.AbsoluteTests.cs diff --git a/UnitTests/View/Layout/Pos.AlignTests.cs b/Tests/UnitTestsParallelizable/View/Layout/Pos.AlignTests.cs similarity index 100% rename from UnitTests/View/Layout/Pos.AlignTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/Pos.AlignTests.cs diff --git a/UnitTests/View/Layout/Pos.AnchorEndTests.cs b/Tests/UnitTestsParallelizable/View/Layout/Pos.AnchorEndTests.cs similarity index 55% rename from UnitTests/View/Layout/Pos.AnchorEndTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/Pos.AnchorEndTests.cs index f69faca9f..73cd8a354 100644 --- a/UnitTests/View/Layout/Pos.AnchorEndTests.cs +++ b/Tests/UnitTestsParallelizable/View/Layout/Pos.AnchorEndTests.cs @@ -1,10 +1,9 @@ using Xunit.Abstractions; -using static Terminal.Gui.Dim; using static Terminal.Gui.Pos; namespace Terminal.Gui.LayoutTests; -public class PosAnchorEndTests (ITestOutputHelper output) +public class PosAnchorEndTests () { [Fact] public void PosAnchorEnd_Constructor () @@ -170,128 +169,6 @@ public class PosAnchorEndTests (ITestOutputHelper output) Assert.Equal (expectedXPosition, view.Frame.X); } - // This test used to be Dialog_In_Window_With_TextField_And_Button_AnchorEnd in DialogTests. - [Fact] - [SetupFakeDriver] - public void PosAnchorEnd_View_And_Button () - { - ((FakeDriver)Application.Driver!).SetBufferSize (20, 5); - - // Override CM - Button.DefaultShadow = ShadowStyle.None; - - var b = $"{Glyphs.LeftBracket} Ok {Glyphs.RightBracket}"; - - var frame = new FrameView { Width = 18, Height = 3 }; - Assert.Equal (16, frame.Viewport.Width); - - Button btn = null; - - int Btn_Width () { return btn?.Viewport.Width ?? 0; } - - btn = new () { Text = "Ok", X = Pos.AnchorEnd (0) - Pos.Func (Btn_Width) }; - - var view = new View - { - Text = "0123456789abcdefghij", - - // Dim.Fill (1) fills remaining space minus 1 (16 - 1 = 15) - // Dim.Function (Btn_Width) is 6 - // Width should be 15 - 6 = 9 - Width = Dim.Fill (1) - Dim.Func (Btn_Width), - Height = 1 - }; - - frame.Add (btn, view); - frame.BeginInit(); // Needed to enable Border - frame.EndInit(); - frame.Layout (); - - Assert.Equal (6, btn.Viewport.Width); - Assert.Equal (10, btn.Frame.X); // frame.Viewport.Width (16) - btn.Frame.Width (6) = 10 - Assert.Equal (0, btn.Frame.Y); - Assert.Equal (6, btn.Frame.Width); - Assert.Equal (1, btn.Frame.Height); - - Assert.Equal (9, view.Viewport.Width); // frame.Viewport.Width (16) - Dim.Fill (1) - Dim.Function (6) = 9 - Assert.Equal (0, view.Frame.X); - Assert.Equal (0, view.Frame.Y); - Assert.Equal (9, view.Frame.Width); - Assert.Equal (1, view.Frame.Height); - - frame.Draw (); - var expected = $@" -┌────────────────┐ -│012345678 {b}│ -└────────────────┘ -"; - _ = TestHelpers.AssertDriverContentsWithFrameAre (expected, output); - } - - - // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved - // TODO: A new test that calls SetRelativeLayout directly is needed. - [Fact] - [AutoInitShutdown] - public void PosAnchorEnd_Equal_Inside_Window () - { - var viewWidth = 10; - var viewHeight = 1; - - var tv = new TextView - { - X = Pos.AnchorEnd (viewWidth), Y = Pos.AnchorEnd (viewHeight), Width = viewWidth, Height = viewHeight - }; - - var win = new Window (); - - win.Add (tv); - - Toplevel top = new (); - top.Add (win); - RunState rs = Application.Begin (top); - - Assert.Equal (new (0, 0, 80, 25), top.Frame); - Assert.Equal (new (0, 0, 80, 25), win.Frame); - Assert.Equal (new (68, 22, 10, 1), tv.Frame); - Application.End (rs); - top.Dispose (); - } - - //// TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved - //// TODO: A new test that calls SetRelativeLayout directly is needed. - //[Fact] - //[AutoInitShutdown] - //public void PosAnchorEnd_Equal_Inside_Window_With_MenuBar_And_StatusBar_On_Toplevel () - //{ - // var viewWidth = 10; - // var viewHeight = 1; - - // var tv = new TextView - // { - // X = Pos.AnchorEnd (viewWidth), Y = Pos.AnchorEnd (viewHeight), Width = viewWidth, Height = viewHeight - // }; - - // var win = new Window (); - - // win.Add (tv); - - // var menu = new MenuBar (); - // var status = new StatusBar (); - // Toplevel top = new (); - // top.Add (win, menu, status); - // RunState rs = Application.Begin (top); - - // Assert.Equal (new (0, 0, 80, 25), top.Frame); - // Assert.Equal (new (0, 0, 80, 1), menu.Frame); - // Assert.Equal (new (0, 24, 80, 1), status.Frame); - // Assert.Equal (new (0, 1, 80, 23), win.Frame); - // Assert.Equal (new (68, 20, 10, 1), tv.Frame); - - // Application.End (rs); - // top.Dispose (); - //} - [Fact] public void PosAnchorEnd_Calculate_ReturnsExpectedValue () { diff --git a/Tests/UnitTestsParallelizable/View/Layout/Pos.CenterTests.cs b/Tests/UnitTestsParallelizable/View/Layout/Pos.CenterTests.cs new file mode 100644 index 000000000..69e0ac81c --- /dev/null +++ b/Tests/UnitTestsParallelizable/View/Layout/Pos.CenterTests.cs @@ -0,0 +1,67 @@ +using Xunit.Abstractions; +using static Terminal.Gui.Pos; + +namespace Terminal.Gui.LayoutTests; + +public class PosCenterTests (ITestOutputHelper output) +{ + private readonly ITestOutputHelper _output = output; + + [Fact] + public void PosCenter_Constructor () + { + var posCenter = new PosCenter (); + Assert.NotNull (posCenter); + } + + [Fact] + public void PosCenter_ToString () + { + var posCenter = new PosCenter (); + var expectedString = "Center"; + + Assert.Equal (expectedString, posCenter.ToString ()); + } + + [Fact] + public void PosCenter_GetAnchor () + { + var posCenter = new PosCenter (); + var width = 50; + int expectedAnchor = width / 2; + + Assert.Equal (expectedAnchor, posCenter.GetAnchor (width)); + } + + [Fact] + public void PosCenter_CreatesCorrectInstance () + { + Pos pos = Center (); + Assert.IsType (pos); + } + + [Theory] + [InlineData (10, 2, 4)] + [InlineData (10, 10, 0)] + [InlineData (10, 11, 0)] + [InlineData (10, 12, -1)] + [InlineData (19, 20, 0)] + public void PosCenter_Calculate_ReturnsExpectedValue (int superviewDimension, int width, int expectedX) + { + var posCenter = new PosCenter (); + int result = posCenter.Calculate (superviewDimension, new DimAbsolute (width), null!, Dimension.Width); + Assert.Equal (expectedX, result); + } + + [Fact] + public void PosCenter_Bigger_Than_SuperView () + { + var superView = new View { Width = 10, Height = 10 }; + var view = new View { X = Center (), Y = Center (), Width = 20, Height = 20 }; + superView.Add (view); + superView.LayoutSubviews (); + + Assert.Equal (-5, view.Frame.Left); + Assert.Equal (-5, view.Frame.Top); + } +} diff --git a/Tests/UnitTestsParallelizable/View/Layout/Pos.CombineTests.cs b/Tests/UnitTestsParallelizable/View/Layout/Pos.CombineTests.cs new file mode 100644 index 000000000..402c95932 --- /dev/null +++ b/Tests/UnitTestsParallelizable/View/Layout/Pos.CombineTests.cs @@ -0,0 +1,36 @@ +using Microsoft.VisualStudio.TestPlatform.Utilities; +using UnitTests; +using Xunit.Abstractions; +using static Terminal.Gui.Dim; +using static Terminal.Gui.Pos; + +namespace Terminal.Gui.LayoutTests; + +public class PosCombineTests (ITestOutputHelper output) +{ + private readonly ITestOutputHelper _output = output; + + // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved + // TODO: A new test that calls SetRelativeLayout directly is needed. + [Fact] + public void PosCombine_Referencing_Same_View () + { + var super = new View { Width = 10, Height = 10, Text = "super" }; + var view1 = new View { Width = 2, Height = 2, Text = "view1" }; + var view2 = new View { Width = 2, Height = 2, Text = "view2" }; + view2.X = Pos.AnchorEnd (0) - (Pos.Right (view2) - Pos.Left (view2)); + + super.Add (view1, view2); + super.BeginInit (); + super.EndInit (); + + Exception exception = Record.Exception (super.LayoutSubviews); + Assert.Null (exception); + Assert.Equal (new (0, 0, 10, 10), super.Frame); + Assert.Equal (new (0, 0, 2, 2), view1.Frame); + Assert.Equal (new (8, 0, 2, 2), view2.Frame); + + super.Dispose (); + } + +} diff --git a/UnitTests/View/Layout/Pos.FuncTests.cs b/Tests/UnitTestsParallelizable/View/Layout/Pos.FuncTests.cs similarity index 100% rename from UnitTests/View/Layout/Pos.FuncTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/Pos.FuncTests.cs diff --git a/UnitTests/View/Layout/Pos.PercentTests.cs b/Tests/UnitTestsParallelizable/View/Layout/Pos.PercentTests.cs similarity index 100% rename from UnitTests/View/Layout/Pos.PercentTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/Pos.PercentTests.cs diff --git a/Tests/UnitTestsParallelizable/View/Layout/Pos.Tests.cs b/Tests/UnitTestsParallelizable/View/Layout/Pos.Tests.cs new file mode 100644 index 000000000..fcfc40456 --- /dev/null +++ b/Tests/UnitTestsParallelizable/View/Layout/Pos.Tests.cs @@ -0,0 +1,135 @@ +namespace Terminal.Gui.LayoutTests; + +public class PosTests +{ + [Fact] + public void PosCombine_Calculate_ReturnsExpectedValue () + { + var posCombine = new PosCombine (AddOrSubtract.Add, new PosAbsolute (5), new PosAbsolute (3)); + int result = posCombine.Calculate (10, new DimAbsolute (2), null, Dimension.None); + Assert.Equal (8, result); + } + + [Fact] + public void PosFactor_Calculate_ReturnsExpectedValue () + { + var posFactor = new PosPercent (50); + int result = posFactor.Calculate (10, new DimAbsolute (2), null, Dimension.None); + Assert.Equal (5, result); + } + + [Fact] + public void PosFunc_Calculate_ReturnsExpectedValue () + { + var posFunc = new PosFunc (() => 5); + int result = posFunc.Calculate (10, new DimAbsolute (2), null, Dimension.None); + Assert.Equal (5, result); + } + + [Fact] + public void PosView_Calculate_ReturnsExpectedValue () + { + var posView = new PosView (new() { Frame = new (5, 5, 10, 10) }, 0); + int result = posView.Calculate (10, new DimAbsolute (2), null, Dimension.None); + Assert.Equal (5, result); + } + + [Fact] + public void PosCombine_DoesNotReturn () + { + var v = new View { Id = "V" }; + + Pos pos = Pos.Left (v); + + Assert.Equal ( + $"View(Side=Left,Target=View(V){v.Frame})", + pos.ToString () + ); + + pos = Pos.X (v); + + Assert.Equal ( + $"View(Side=Left,Target=View(V){v.Frame})", + pos.ToString () + ); + + pos = Pos.Top (v); + + Assert.Equal ( + $"View(Side=Top,Target=View(V){v.Frame})", + pos.ToString () + ); + + pos = Pos.Y (v); + + Assert.Equal ( + $"View(Side=Top,Target=View(V){v.Frame})", + pos.ToString () + ); + + pos = Pos.Right (v); + + Assert.Equal ( + $"View(Side=Right,Target=View(V){v.Frame})", + pos.ToString () + ); + + pos = Pos.Bottom (v); + + Assert.Equal ( + $"View(Side=Bottom,Target=View(V){v.Frame})", + pos.ToString () + ); + } + + [Fact] + public void PosFunction_SetsValue () + { + var text = "Test"; + Pos pos = Pos.Func (() => text.Length); + Assert.Equal ("PosFunc(4)", pos.ToString ()); + + text = "New Test"; + Assert.Equal ("PosFunc(8)", pos.ToString ()); + + text = ""; + Assert.Equal ("PosFunc(0)", pos.ToString ()); + } + + [Fact] + public void PosPercent_Equal () + { + var n1 = 0; + var n2 = 0; + Pos pos1 = Pos.Percent (n1); + Pos pos2 = Pos.Percent (n2); + Assert.Equal (pos1, pos2); + + n1 = n2 = 1; + pos1 = Pos.Percent (n1); + pos2 = Pos.Percent (n2); + Assert.Equal (pos1, pos2); + + n1 = n2 = 50; + pos1 = Pos.Percent (n1); + pos2 = Pos.Percent (n2); + Assert.Equal (pos1, pos2); + + n1 = n2 = 100; + pos1 = Pos.Percent (n1); + pos2 = Pos.Percent (n2); + Assert.Equal (pos1, pos2); + + n1 = 0; + n2 = 1; + pos1 = Pos.Percent (n1); + pos2 = Pos.Percent (n2); + Assert.NotEqual (pos1, pos2); + + n1 = 50; + n2 = 150; + pos1 = Pos.Percent (n1); + pos2 = Pos.Percent (n2); + Assert.NotEqual (pos1, pos2); + } +} diff --git a/UnitTests/View/Layout/Pos.ViewTests.cs b/Tests/UnitTestsParallelizable/View/Layout/Pos.ViewTests.cs similarity index 70% rename from UnitTests/View/Layout/Pos.ViewTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/Pos.ViewTests.cs index b97ae2111..c1531140c 100644 --- a/UnitTests/View/Layout/Pos.ViewTests.cs +++ b/Tests/UnitTestsParallelizable/View/Layout/Pos.ViewTests.cs @@ -1,12 +1,9 @@ -using Xunit.Abstractions; -using static Terminal.Gui.Pos; +using static Terminal.Gui.Pos; namespace Terminal.Gui.LayoutTests; -public class PosViewTests (ITestOutputHelper output) +public class PosViewTests { - private readonly ITestOutputHelper _output = output; - [Fact] public void PosView_Equal () { @@ -28,7 +25,6 @@ public class PosViewTests (ITestOutputHelper output) /// Tests Pos.Left, Pos.X, Pos.Top, Pos.Y, Pos.Right, and Pos.Bottom set operations [Fact] - [TestRespondersDisposed] public void PosView_Side_SetsValue () { string side; // used in format string @@ -245,90 +241,5 @@ public class PosViewTests (ITestOutputHelper output) $"Combine(View(Side={side},Target=View(){testRect}){(testInt < 0 ? '-' : '+')}Absolute({testInt}))", pos.ToString () ); - -#if DEBUG_IDISPOSABLE - - // HACK: Force clean up of Responders to avoid having to Dispose all the Views created above. - View.Instances.Clear (); -#endif - } - - [Fact] - public void PosView_Side_SetToNull_Throws () - { - Assert.Throws (() => X (null)); - Assert.Throws (() => Y (null)); - Assert.Throws (() => Left (null)); - Assert.Throws (() => Right (null)); - Assert.Throws (() => Bottom (null)); - Assert.Throws (() => Top (null)); - } - - // TODO: This actually a SetRelativeLayout/LayoutSubViews test and should be moved - // TODO: A new test that calls SetRelativeLayout directly is needed. - [Fact] - [TestRespondersDisposed] - public void Subtract_Operator () - { - Application.Init (new FakeDriver ()); - - var top = new Toplevel (); - - var view = new View { X = 0, Y = 0, Width = 20, Height = 20 }; - var field = new TextField { X = 0, Y = 0, Width = 20 }; - var count = 20; - List listViews = new (); - - for (var i = 0; i < count; i++) - { - field.Text = $"View {i}"; - var view2 = new View { X = 0, Y = field.Y, Width = 20, Text = field.Text }; - view.Add (view2); - Assert.Equal ($"View {i}", view2.Text); - Assert.Equal ($"Absolute({i})", field.Y.ToString ()); - listViews.Add (view2); - - Assert.Equal ($"Absolute({i})", field.Y.ToString ()); - field.Y += 1; - Assert.Equal ($"Absolute({i + 1})", field.Y.ToString ()); - } - - field.KeyDown += (s, k) => - { - if (k.KeyCode == KeyCode.Enter) - { - Assert.Equal ($"View {count - 1}", listViews [count - 1].Text); - view.Remove (listViews [count - 1]); - listViews [count - 1].Dispose (); - - Assert.Equal ($"Absolute({count})", field.Y.ToString ()); - field.Y -= 1; - count--; - Assert.Equal ($"Absolute({count})", field.Y.ToString ()); - } - }; - - Application.Iteration += (s, a) => - { - while (count > 0) - { - field.NewKeyDownEvent (new (KeyCode.Enter)); - } - - Application.RequestStop (); - }; - - var win = new Window (); - win.Add (view); - win.Add (field); - - top.Add (win); - - Application.Run (top); - top.Dispose (); - Assert.Equal (0, count); - - // Shutdown must be called to safely clean up Application if Init has been called - Application.Shutdown (); } } diff --git a/UnitTests/View/Layout/ScreenToTests.cs b/Tests/UnitTestsParallelizable/View/Layout/ScreenToTests.cs similarity index 97% rename from UnitTests/View/Layout/ScreenToTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/ScreenToTests.cs index c2de37443..174fb2f02 100644 --- a/UnitTests/View/Layout/ScreenToTests.cs +++ b/Tests/UnitTestsParallelizable/View/Layout/ScreenToTests.cs @@ -1,185 +1,8 @@ -using Xunit.Abstractions; - -namespace Terminal.Gui.LayoutTests; +namespace Terminal.Gui.LayoutTests; /// Tests for view coordinate mapping (e.g. etc...). public class ScreenToTests { - private readonly ITestOutputHelper _output; - public ScreenToTests (ITestOutputHelper output) { _output = output; } - - /// - /// Tests that screen to bounds mapping works correctly when the view has no superview and there ARE Adornments on the - /// view. - /// - [Theory] - [InlineData (0, 0, 0, 0, -1, -1)] - [InlineData (0, 0, 1, 1, 0, 0)] - [InlineData (0, 0, 9, 9, 8, 8)] - [InlineData (0, 0, 11, 11, 10, 10)] - [InlineData (1, 1, 0, 0, -2, -2)] - [InlineData (1, 1, 1, 1, -1, -1)] - [InlineData (1, 1, 9, 9, 7, 7)] - [InlineData (1, 1, 11, 11, 9, 9)] - public void ScreenToViewport_NoSuper_HasAdornments (int viewX, int viewY, int x, int y, int expectedX, int expectedY) - { - var view = new View - { - X = viewX, - Y = viewY, - Width = 10, - Height = 10, - BorderStyle = LineStyle.Single - }; - view.Layout (); - - Point actual = view.ScreenToViewport (new (x, y)); - Assert.Equal (expectedX, actual.X); - Assert.Equal (expectedY, actual.Y); - } - - /// - /// Tests that screen to bounds mapping works correctly when the view has no superview and there are no Adornments on - /// the view. - /// - [Theory] - [InlineData (0, 0, 0, 0, 0, 0)] - [InlineData (0, 0, 1, 1, 1, 1)] - [InlineData (0, 0, 9, 9, 9, 9)] - [InlineData (0, 0, 11, 11, 11, 11)] // it's ok for the view to return coordinates outside of its bounds - [InlineData (1, 1, 0, 0, -1, -1)] - [InlineData (1, 1, 1, 1, 0, 0)] - [InlineData (1, 1, 9, 9, 8, 8)] - [InlineData (1, 1, 11, 11, 10, 10)] // it's ok for the view to return coordinates outside of its bounds - public void ScreenToViewport_NoSuper_NoAdornments (int viewX, int viewY, int x, int y, int expectedX, int expectedY) - { - var view = new View { X = viewX, Y = viewY, Width = 10, Height = 10 }; - view.Layout (); - - Point actual = view.ScreenToViewport (new (x, y)); - Assert.Equal (expectedX, actual.X); - Assert.Equal (expectedY, actual.Y); - } - - /// Tests that screen to bounds mapping works correctly when the view has as superview it DOES have Adornments - [Theory] - [InlineData (0, 0, 0, 0, -1, -1)] // it's ok for the view to return coordinates outside of its bounds - [InlineData (0, 0, 1, 1, 0, 0)] - [InlineData (0, 0, 9, 9, 8, 8)] - [InlineData (0, 0, 11, 11, 10, 10)] // it's ok for the view to return coordinates outside of its bounds - [InlineData (1, 1, 0, 0, -2, -2)] - [InlineData (1, 1, 1, 1, -1, -1)] - [InlineData (1, 1, 9, 9, 7, 7)] - [InlineData (1, 1, 11, 11, 9, 9)] // it's ok for the view to return coordinates outside of its bounds - public void ScreenToViewport_SuperHasAdornments (int viewX, int viewY, int x, int y, int expectedX, int expectedY) - { - var super = new View - { - X = 0, - Y = 0, - Width = 10, - Height = 10, - BorderStyle = LineStyle.Single - }; - var view = new View { X = viewX, Y = viewY, Width = 5, Height = 5 }; - super.Add (view); - super.Layout (); - - Point actual = view.ScreenToViewport (new (x, y)); - Assert.Equal (expectedX, actual.X); - Assert.Equal (expectedY, actual.Y); - } - - /// Tests that screen to bounds mapping works correctly when the view has as superview it DOES have Adornments - [Theory] - [InlineData (0, 0, 0, 0, -1, -1)] // it's ok for the view to return coordinates outside of its bounds - [InlineData (0, 0, 1, 1, 0, 0)] - [InlineData (0, 0, 9, 9, 8, 8)] - [InlineData (0, 0, 11, 11, 10, 10)] // it's ok for the view to return coordinates outside of its bounds - [InlineData (1, 1, 0, 0, -2, -2)] - [InlineData (1, 1, 1, 1, -1, -1)] - [InlineData (1, 1, 9, 9, 7, 7)] - [InlineData (1, 1, 11, 11, 9, 9)] // it's ok for the view to return coordinates outside of its bounds - public void ScreenToViewport_SuperHasAdornments_Positive_Viewport (int viewX, int viewY, int x, int y, int expectedX, int expectedY) - { - var super = new View - { - X = 0, - Y = 0, - Width = 10, - Height = 10, - BorderStyle = LineStyle.Single, - }; - var view = new View { X = viewX, Y = viewY, Width = 5, Height = 5 }; - view.SetContentSize (new (6, 6)); - super.Add (view); - super.Layout (); - - view.Viewport = new (1, 1, 5, 5); - - Point actual = view.ScreenToViewport (new (x, y)); - Assert.Equal (expectedX, actual.X); - Assert.Equal (expectedY, actual.Y); - } - - /// Tests that screen to bounds mapping works correctly when the view has as superview it does not have Adornments - [Theory] - [InlineData (0, 0, 0, 0, 0, 0)] - [InlineData (0, 0, 1, 1, 1, 1)] - [InlineData (0, 0, 9, 9, 9, 9)] - [InlineData (0, 0, 11, 11, 11, 11)] // it's ok for the view to return coordinates outside of its bounds - [InlineData (1, 1, 0, 0, -1, -1)] - [InlineData (1, 1, 1, 1, 0, 0)] - [InlineData (1, 1, 9, 9, 8, 8)] - [InlineData (1, 1, 11, 11, 10, 10)] // it's ok for the view to return coordinates outside of its bounds - public void ScreenToViewport_SuperHasNoAdornments (int viewX, int viewY, int x, int y, int expectedX, int expectedY) - { - var super = new View { X = 0, Y = 0, Width = 10, Height = 10 }; - var view = new View { X = viewX, Y = viewY, Width = 5, Height = 5 }; - super.Add (view); - super.Layout (); - - Point actual = view.ScreenToViewport (new (x, y)); - Assert.Equal (expectedX, actual.X); - Assert.Equal (expectedY, actual.Y); - } - - /// Tests that screen to bounds mapping works correctly when the view has as superview it DOES have Adornments - [Theory] - [InlineData (0, 0, 0, 0, -2, -2)] // it's ok for the view to return coordinates outside of its bounds - [InlineData (0, 0, 1, 1, -1, -1)] - [InlineData (0, 0, 9, 9, 7, 7)] - //[InlineData (0, 0, 11, 11, 10, 10)] // it's ok for the view to return coordinates outside of its bounds - //[InlineData (1, 1, 0, 0, -2, -2)] - //[InlineData (1, 1, 1, 1, -1, -1)] - //[InlineData (1, 1, 9, 9, 7, 7)] - //[InlineData (1, 1, 11, 11, 9, 9)] // it's ok for the view to return coordinates outside of its bounds - public void ScreenToViewport_HasAdornments_Positive_Viewport (int viewX, int viewY, int x, int y, int expectedX, int expectedY) - { - var super = new View - { - X = 0, - Y = 0, - Width = 10, - Height = 10, - BorderStyle = LineStyle.Single, - }; - var view = new View - { - X = viewX, Y = viewY, Width = 5, Height = 5, - BorderStyle = LineStyle.Single, - }; - view.SetContentSize (new (10, 10)); - super.Add (view); - super.Layout (); - - view.Viewport = view.Viewport with { Location = new (1, 1) }; - - Point actual = view.ScreenToViewport (new (x, y)); - Assert.Equal (expectedX, actual.X); - Assert.Equal (expectedY, actual.Y); - } - /// /// Tests that screen to view mapping works correctly when the view has no superview and there ARE Adornments on the /// view. @@ -283,4 +106,178 @@ public class ScreenToTests Assert.Equal (expectedX, actual.X); Assert.Equal (expectedY, actual.Y); } + + /// Tests that screen to bounds mapping works correctly when the view has as superview it DOES have Adornments + [Theory] + [InlineData (0, 0, 0, 0, -2, -2)] // it's ok for the view to return coordinates outside of its bounds + [InlineData (0, 0, 1, 1, -1, -1)] + [InlineData (0, 0, 9, 9, 7, 7)] + + //[InlineData (0, 0, 11, 11, 10, 10)] // it's ok for the view to return coordinates outside of its bounds + //[InlineData (1, 1, 0, 0, -2, -2)] + //[InlineData (1, 1, 1, 1, -1, -1)] + //[InlineData (1, 1, 9, 9, 7, 7)] + //[InlineData (1, 1, 11, 11, 9, 9)] // it's ok for the view to return coordinates outside of its bounds + public void ScreenToViewport_HasAdornments_Positive_Viewport (int viewX, int viewY, int x, int y, int expectedX, int expectedY) + { + var super = new View + { + X = 0, + Y = 0, + Width = 10, + Height = 10, + BorderStyle = LineStyle.Single + }; + + var view = new View + { + X = viewX, Y = viewY, Width = 5, Height = 5, + BorderStyle = LineStyle.Single + }; + view.SetContentSize (new (10, 10)); + super.Add (view); + super.Layout (); + + view.Viewport = view.Viewport with { Location = new (1, 1) }; + + Point actual = view.ScreenToViewport (new (x, y)); + Assert.Equal (expectedX, actual.X); + Assert.Equal (expectedY, actual.Y); + } + + /// + /// Tests that screen to bounds mapping works correctly when the view has no superview and there ARE Adornments on the + /// view. + /// + [Theory] + [InlineData (0, 0, 0, 0, -1, -1)] + [InlineData (0, 0, 1, 1, 0, 0)] + [InlineData (0, 0, 9, 9, 8, 8)] + [InlineData (0, 0, 11, 11, 10, 10)] + [InlineData (1, 1, 0, 0, -2, -2)] + [InlineData (1, 1, 1, 1, -1, -1)] + [InlineData (1, 1, 9, 9, 7, 7)] + [InlineData (1, 1, 11, 11, 9, 9)] + public void ScreenToViewport_NoSuper_HasAdornments (int viewX, int viewY, int x, int y, int expectedX, int expectedY) + { + var view = new View + { + X = viewX, + Y = viewY, + Width = 10, + Height = 10, + BorderStyle = LineStyle.Single + }; + view.Layout (); + + Point actual = view.ScreenToViewport (new (x, y)); + Assert.Equal (expectedX, actual.X); + Assert.Equal (expectedY, actual.Y); + } + + /// + /// Tests that screen to bounds mapping works correctly when the view has no superview and there are no Adornments on + /// the view. + /// + [Theory] + [InlineData (0, 0, 0, 0, 0, 0)] + [InlineData (0, 0, 1, 1, 1, 1)] + [InlineData (0, 0, 9, 9, 9, 9)] + [InlineData (0, 0, 11, 11, 11, 11)] // it's ok for the view to return coordinates outside of its bounds + [InlineData (1, 1, 0, 0, -1, -1)] + [InlineData (1, 1, 1, 1, 0, 0)] + [InlineData (1, 1, 9, 9, 8, 8)] + [InlineData (1, 1, 11, 11, 10, 10)] // it's ok for the view to return coordinates outside of its bounds + public void ScreenToViewport_NoSuper_NoAdornments (int viewX, int viewY, int x, int y, int expectedX, int expectedY) + { + var view = new View { X = viewX, Y = viewY, Width = 10, Height = 10 }; + view.Layout (); + + Point actual = view.ScreenToViewport (new (x, y)); + Assert.Equal (expectedX, actual.X); + Assert.Equal (expectedY, actual.Y); + } + + /// Tests that screen to bounds mapping works correctly when the view has as superview it DOES have Adornments + [Theory] + [InlineData (0, 0, 0, 0, -1, -1)] // it's ok for the view to return coordinates outside of its bounds + [InlineData (0, 0, 1, 1, 0, 0)] + [InlineData (0, 0, 9, 9, 8, 8)] + [InlineData (0, 0, 11, 11, 10, 10)] // it's ok for the view to return coordinates outside of its bounds + [InlineData (1, 1, 0, 0, -2, -2)] + [InlineData (1, 1, 1, 1, -1, -1)] + [InlineData (1, 1, 9, 9, 7, 7)] + [InlineData (1, 1, 11, 11, 9, 9)] // it's ok for the view to return coordinates outside of its bounds + public void ScreenToViewport_SuperHasAdornments (int viewX, int viewY, int x, int y, int expectedX, int expectedY) + { + var super = new View + { + X = 0, + Y = 0, + Width = 10, + Height = 10, + BorderStyle = LineStyle.Single + }; + var view = new View { X = viewX, Y = viewY, Width = 5, Height = 5 }; + super.Add (view); + super.Layout (); + + Point actual = view.ScreenToViewport (new (x, y)); + Assert.Equal (expectedX, actual.X); + Assert.Equal (expectedY, actual.Y); + } + + /// Tests that screen to bounds mapping works correctly when the view has as superview it DOES have Adornments + [Theory] + [InlineData (0, 0, 0, 0, -1, -1)] // it's ok for the view to return coordinates outside of its bounds + [InlineData (0, 0, 1, 1, 0, 0)] + [InlineData (0, 0, 9, 9, 8, 8)] + [InlineData (0, 0, 11, 11, 10, 10)] // it's ok for the view to return coordinates outside of its bounds + [InlineData (1, 1, 0, 0, -2, -2)] + [InlineData (1, 1, 1, 1, -1, -1)] + [InlineData (1, 1, 9, 9, 7, 7)] + [InlineData (1, 1, 11, 11, 9, 9)] // it's ok for the view to return coordinates outside of its bounds + public void ScreenToViewport_SuperHasAdornments_Positive_Viewport (int viewX, int viewY, int x, int y, int expectedX, int expectedY) + { + var super = new View + { + X = 0, + Y = 0, + Width = 10, + Height = 10, + BorderStyle = LineStyle.Single + }; + var view = new View { X = viewX, Y = viewY, Width = 5, Height = 5 }; + view.SetContentSize (new (6, 6)); + super.Add (view); + super.Layout (); + + view.Viewport = new (1, 1, 5, 5); + + Point actual = view.ScreenToViewport (new (x, y)); + Assert.Equal (expectedX, actual.X); + Assert.Equal (expectedY, actual.Y); + } + + /// Tests that screen to bounds mapping works correctly when the view has as superview it does not have Adornments + [Theory] + [InlineData (0, 0, 0, 0, 0, 0)] + [InlineData (0, 0, 1, 1, 1, 1)] + [InlineData (0, 0, 9, 9, 9, 9)] + [InlineData (0, 0, 11, 11, 11, 11)] // it's ok for the view to return coordinates outside of its bounds + [InlineData (1, 1, 0, 0, -1, -1)] + [InlineData (1, 1, 1, 1, 0, 0)] + [InlineData (1, 1, 9, 9, 8, 8)] + [InlineData (1, 1, 11, 11, 10, 10)] // it's ok for the view to return coordinates outside of its bounds + public void ScreenToViewport_SuperHasNoAdornments (int viewX, int viewY, int x, int y, int expectedX, int expectedY) + { + var super = new View { X = 0, Y = 0, Width = 10, Height = 10 }; + var view = new View { X = viewX, Y = viewY, Width = 5, Height = 5 }; + super.Add (view); + super.Layout (); + + Point actual = view.ScreenToViewport (new (x, y)); + Assert.Equal (expectedX, actual.X); + Assert.Equal (expectedY, actual.Y); + } } diff --git a/UnitTests/View/Layout/SetLayoutTests.cs b/Tests/UnitTestsParallelizable/View/Layout/SetLayoutTests.cs similarity index 92% rename from UnitTests/View/Layout/SetLayoutTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/SetLayoutTests.cs index d348fe2b1..b521b39fd 100644 --- a/UnitTests/View/Layout/SetLayoutTests.cs +++ b/Tests/UnitTestsParallelizable/View/Layout/SetLayoutTests.cs @@ -1,96 +1,14 @@ -using Xunit.Abstractions; +namespace Terminal.Gui.LayoutTests; -namespace Terminal.Gui.LayoutTests; - -public class SetLayoutTests (ITestOutputHelper output) +public class SetLayoutTests { - private readonly ITestOutputHelper _output = output; - - - [Fact] - [AutoInitShutdown] - public void Screen_Size_Change_Causes_Layout () - { - Application.Top = new (); - - var view = new View - { - X = 3, - Y = 2, - Width = 10, - Height = 1, - Text = "0123456789" - }; - Application.Top.Add (view); - - var rs = Application.Begin (Application.Top); - - Assert.Equal (new (0, 0, 80, 25), new Rectangle (0, 0, View.Driver.Cols, View.Driver.Rows)); - Assert.Equal (new (0, 0, View.Driver.Cols, View.Driver.Rows), Application.Top.Frame); - Assert.Equal (new (0, 0, 80, 25), Application.Top.Frame); - - ((FakeDriver)Application.Driver!).SetBufferSize (20, 10); - Assert.Equal (new (0, 0, View.Driver.Cols, View.Driver.Rows), Application.Top.Frame); - - Assert.Equal (new (0, 0, 20, 10), Application.Top.Frame); - - Application.End (rs); - - } - - [Fact] - [TestRespondersDisposed] - public void LayoutSubviews () - { - var superRect = new Rectangle (0, 0, 100, 100); - var super = new View { Frame = superRect, Text = "super" }; - var v1 = new View { X = 0, Y = 0, Width = 10, Height = 10 }; - - var v2 = new View { X = 10, Y = 10, Width = 10, Height = 10 }; - - super.Add (v1, v2); - - super.LayoutSubviews (); - Assert.Equal (new (0, 0, 10, 10), v1.Frame); - Assert.Equal (new (10, 10, 10, 10), v2.Frame); - super.Dispose (); - } - - [Fact] - public void LayoutSubviews_No_SuperView () - { - var root = new View (); - - var first = new View - { - Id = "first", - X = 1, - Y = 2, - Height = 3, - Width = 4 - }; - root.Add (first); - - var second = new View { Id = "second" }; - root.Add (second); - - second.X = Pos.Right (first) + 1; - - root.LayoutSubviews (); - - Assert.Equal (6, second.Frame.X); - root.Dispose (); - first.Dispose (); - second.Dispose (); - } - [Fact] public void Add_Does_Not_Call_Layout () { var superView = new View { Id = "superView" }; var view = new View { Id = "view" }; - bool layoutStartedRaised = false; - bool layoutCompleteRaised = false; + var layoutStartedRaised = false; + var layoutCompleteRaised = false; superView.SubviewLayout += (sender, e) => layoutStartedRaised = true; superView.SubviewsLaidOut += (sender, e) => layoutCompleteRaised = true; @@ -105,438 +23,9 @@ public class SetLayoutTests (ITestOutputHelper output) Assert.False (layoutStartedRaised); Assert.False (layoutCompleteRaised); - } [Fact] - public void LayoutSubViews_Raises_LayoutStarted_LayoutComplete () - { - var superView = new View { Id = "superView" }; - int layoutStartedRaised = 0; - int layoutCompleteRaised = 0; - superView.SubviewLayout += (sender, e) => layoutStartedRaised++; - superView.SubviewsLaidOut += (sender, e) => layoutCompleteRaised++; - - superView.SetNeedsLayout (); - superView.LayoutSubviews (); - Assert.Equal (1, layoutStartedRaised); - Assert.Equal (1, layoutCompleteRaised); - - superView.BeginInit (); - superView.EndInit (); - superView.LayoutSubviews (); - Assert.Equal (3, layoutStartedRaised); - Assert.Equal (3, layoutCompleteRaised); - } - - [Fact] - public void LayoutSubviews_RootHas_SuperView () - { - var top = new View (); - var root = new View (); - top.Add (root); - - var first = new View - { - Id = "first", - X = 1, - Y = 2, - Height = 3, - Width = 4 - }; - root.Add (first); - - var second = new View { Id = "second" }; - root.Add (second); - - second.X = Pos.Right (first) + 1; - - root.LayoutSubviews (); - - Assert.Equal (6, second.Frame.X); - root.Dispose (); - top.Dispose (); - first.Dispose (); - second.Dispose (); - } - - [Fact] - public void LayoutSubviews_ViewThatRefsSubView_Throws () - { - var root = new View (); - var super = new View (); - root.Add (super); - var sub = new View (); - super.Add (sub); - super.Width = Dim.Width (sub); - Assert.Throws (() => root.Layout ()); - root.Dispose (); - super.Dispose (); - } - - [Fact] - public void LayoutSubviews_Uses_ContentSize () - { - var superView = new View () - { - Width = 5, - Height = 5, - }; - superView.SetContentSize (new (10, 10)); - var view = new View () - { - X = Pos.Center () - }; - superView.Add (view); - - superView.LayoutSubviews (); - - Assert.Equal (5, view.Frame.X); - superView.Dispose (); - } - - // Test OnLayoutStarted/OnLayoutComplete - ensure that they are called at right times - [Fact] - public void LayoutSubviews_LayoutStarted_Complete () - { - var superView = new View (); - var view = new View (); - - var layoutStartedCount = 0; - var layoutCompleteCount = 0; - - var borderLayoutStartedCount = 0; - var borderLayoutCompleteCount = 0; - - view.SubviewLayout += (sender, e) => layoutStartedCount++; - view.SubviewsLaidOut += (sender, e) => layoutCompleteCount++; - - view.Border.SubviewLayout += (sender, e) => borderLayoutStartedCount++; - view.Border.SubviewsLaidOut += (sender, e) => borderLayoutCompleteCount++; - - - superView.Add (view); - Assert.Equal (0, borderLayoutStartedCount); - Assert.Equal (0, borderLayoutCompleteCount); - Assert.Equal (0, layoutStartedCount); - Assert.Equal (0, layoutCompleteCount); - - superView.BeginInit (); - Assert.Equal (0, borderLayoutStartedCount); - Assert.Equal (0, borderLayoutCompleteCount); - Assert.Equal (0, layoutStartedCount); - Assert.Equal (0, layoutCompleteCount); - - superView.EndInit (); - Assert.Equal (1, borderLayoutStartedCount); - Assert.Equal (1, borderLayoutCompleteCount); - Assert.Equal (2, layoutStartedCount); - Assert.Equal (2, layoutCompleteCount); - - superView.LayoutSubviews (); - Assert.Equal (1, borderLayoutStartedCount); - Assert.Equal (1, borderLayoutCompleteCount); - Assert.Equal (3, layoutStartedCount); - Assert.Equal (3, layoutCompleteCount); - - superView.SetNeedsLayout (); - superView.LayoutSubviews (); - Assert.Equal (1, borderLayoutStartedCount); - Assert.Equal (1, borderLayoutCompleteCount); - Assert.Equal (4, layoutStartedCount); - Assert.Equal (4, layoutCompleteCount); - - superView.Dispose (); - } - - [Fact] - public void LayoutSubviews_Honors_IsLayoutNeeded () - { - // No adornment subviews - var superView = new View (); - var view = new View (); - - var layoutStartedCount = 0; - var layoutCompleteCount = 0; - - var borderLayoutStartedCount = 0; - var borderLayoutCompleteCount = 0; - - view.SubviewLayout += (sender, e) => layoutStartedCount++; - view.SubviewsLaidOut += (sender, e) => layoutCompleteCount++; - - view.Border.SubviewLayout += (sender, e) => borderLayoutStartedCount++; - view.Border.SubviewsLaidOut += (sender, e) => borderLayoutCompleteCount++; - - - superView.Add (view); - - superView.LayoutSubviews (); - Assert.Equal (0, borderLayoutStartedCount); - Assert.Equal (0, borderLayoutCompleteCount); - Assert.Equal (1, layoutStartedCount); - Assert.Equal (1, layoutCompleteCount); - - superView.LayoutSubviews (); - Assert.Equal (0, borderLayoutStartedCount); - Assert.Equal (0, borderLayoutCompleteCount); - Assert.Equal (1, layoutStartedCount); - Assert.Equal (1, layoutCompleteCount); - - superView.SetNeedsLayout (); - superView.LayoutSubviews (); - Assert.Equal (0, borderLayoutStartedCount); - Assert.Equal (0, borderLayoutCompleteCount); - Assert.Equal (2, layoutStartedCount); - Assert.Equal (2, layoutCompleteCount); - - // With Border subview - view.Border.Add (new View ()); - superView.LayoutSubviews (); - Assert.Equal (1, borderLayoutStartedCount); - Assert.Equal (1, borderLayoutCompleteCount); - Assert.Equal (3, layoutStartedCount); - Assert.Equal (3, layoutCompleteCount); - - superView.LayoutSubviews (); - Assert.Equal (1, borderLayoutStartedCount); - Assert.Equal (1, borderLayoutCompleteCount); - Assert.Equal (3, layoutStartedCount); - Assert.Equal (3, layoutCompleteCount); - - superView.SetNeedsLayout (); - superView.LayoutSubviews (); - Assert.Equal (2, borderLayoutStartedCount); - Assert.Equal (2, borderLayoutCompleteCount); - Assert.Equal (4, layoutStartedCount); - - superView.Dispose (); - } - - [Fact] - public void Set_X_PosAbsolute_Layout_Is_Implicit () - { - var v = new View (); - - v.X = 1; - Assert.False (v.NeedsLayout); - Assert.Equal (1, v.Frame.X); - - v.X = 2; - Assert.False (v.NeedsLayout); - Assert.Equal (2, v.Frame.X); - - v.X = Pos.Absolute (3); - Assert.False (v.NeedsLayout); - Assert.Equal (3, v.Frame.X); - - v.X = Pos.Absolute (3) + 1; - Assert.False (v.NeedsLayout); - Assert.Equal (4, v.Frame.X); - - v.X = 1 + Pos.Absolute (1) + 1; - Assert.False (v.NeedsLayout); - Assert.Equal (3, v.Frame.X); - - } - - [Fact] - public void Set_X_Non_PosAbsolute_Explicit_Layout_Required () - { - var v = new View (); - - v.X = Pos.Center (); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.X); - - v.X = Pos.Percent (50); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.X); - - v.X = Pos.Align (Alignment.Center); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.X); - - v.X = Pos.Func (() => 10); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.X); - - v.X = Pos.AnchorEnd (); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.X); - - v.X = Pos.Top (new View ()); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.X); - } - - - [Fact] - public void Set_Y_PosAbsolute_Layout_Is_Implicit () - { - var v = new View (); - - v.Y = 1; - Assert.False (v.NeedsLayout); - Assert.Equal (1, v.Frame.Y); - - v.Y = 2; - Assert.False (v.NeedsLayout); - Assert.Equal (2, v.Frame.Y); - - v.Y = Pos.Absolute (3); - Assert.False (v.NeedsLayout); - Assert.Equal (3, v.Frame.Y); - - v.Y = Pos.Absolute (3) + 1; - Assert.False (v.NeedsLayout); - Assert.Equal (4, v.Frame.Y); - - v.Y = 1 + Pos.Absolute (1) + 1; - Assert.False (v.NeedsLayout); - Assert.Equal (3, v.Frame.Y); - - } - - [Fact] - public void Set_Y_Non_PosAbsolute_Explicit_Layout_Required () - { - var v = new View (); - - v.Y = Pos.Center (); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.Y); - - v.Y = Pos.Percent (50); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.Y); - - v.Y = Pos.Align (Alignment.Center); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.Y); - - v.Y = Pos.Func (() => 10); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.Y); - - v.Y = Pos.AnchorEnd (); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.Y); - - v.Y = Pos.Top (new View ()); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.Y); - } - - - [Fact] - public void Set_Width_DimAbsolute_Layout_Is_Implicit () - { - var v = new View (); - - v.Width = 1; - Assert.False (v.NeedsLayout); - Assert.Equal (1, v.Frame.Width); - - v.Width = 2; - Assert.False (v.NeedsLayout); - Assert.Equal (2, v.Frame.Width); - - v.Width = Dim.Absolute (3); - Assert.False (v.NeedsLayout); - Assert.Equal (3, v.Frame.Width); - - v.Width = Dim.Absolute (3) + 1; - Assert.False (v.NeedsLayout); - Assert.Equal (4, v.Frame.Width); - - v.Width = 1 + Dim.Absolute (1) + 1; - Assert.False (v.NeedsLayout); - Assert.Equal (3, v.Frame.Width); - - } - - [Fact] - public void Set_Width_Non_DimAbsolute_Explicit_Layout_Required () - { - var v = new View (); - - v.Width = Dim.Auto(); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.Width); - - v.Width = Dim.Percent (50); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.Width); - - v.Width = Dim.Fill (); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.Width); - - v.Width = Dim.Func (() => 10); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.Width); - - v.Width = Dim.Width(new View ()); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.Width); - } - - [Fact] - public void Set_Height_DimAbsolute_Layout_Is_Implicit () - { - var v = new View (); - - v.Height = 1; - Assert.False (v.NeedsLayout); - Assert.Equal (1, v.Frame.Height); - - v.Height = 2; - Assert.False (v.NeedsLayout); - Assert.Equal (2, v.Frame.Height); - - v.Height = Dim.Absolute (3); - Assert.False (v.NeedsLayout); - Assert.Equal (3, v.Frame.Height); - - v.Height = Dim.Absolute (3) + 1; - Assert.False (v.NeedsLayout); - Assert.Equal (4, v.Frame.Height); - - v.Height = 1 + Dim.Absolute (1) + 1; - Assert.False (v.NeedsLayout); - Assert.Equal (3, v.Frame.Height); - - } - - [Fact] - public void Set_Height_Non_DimAbsolute_Explicit_Layout_Required () - { - var v = new View (); - - v.Height = Dim.Auto (); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.Height); - - v.Height = Dim.Percent (50); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.Height); - - v.Height = Dim.Fill (); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.Height); - - v.Height = Dim.Func (() => 10); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.Height); - - v.Height = Dim.Height (new View ()); - Assert.True (v.NeedsLayout); - Assert.Equal (0, v.Frame.Height); - } - - [Fact] - [TestRespondersDisposed] public void Change_Height_or_Width_MakesComputed () { var v = new View { Frame = Rectangle.Empty }; @@ -546,7 +35,6 @@ public class SetLayoutTests (ITestOutputHelper output) } [Fact] - [TestRespondersDisposed] public void Change_X_or_Y_Absolute () { var frame = new Rectangle (1, 2, 3, 4); @@ -570,7 +58,6 @@ public class SetLayoutTests (ITestOutputHelper output) } [Fact] - [TestRespondersDisposed] public void Change_X_or_Y_MakesComputed () { var v = new View { Frame = Rectangle.Empty }; @@ -580,7 +67,6 @@ public class SetLayoutTests (ITestOutputHelper output) } [Fact] - [TestRespondersDisposed] public void Change_X_Y_Height_Width_Absolute () { var v = new View { Frame = Rectangle.Empty }; @@ -671,6 +157,7 @@ public class SetLayoutTests (ITestOutputHelper output) v = new () { Frame = frame }; v.Layout (); Assert.Equal (frame, v.Frame); + Assert.Equal ( new (0, 0, frame.Width, frame.Height), v.Viewport @@ -684,6 +171,7 @@ public class SetLayoutTests (ITestOutputHelper output) v = new () { Frame = frame, Text = "v" }; v.Layout (); Assert.Equal (frame, v.Frame); + Assert.Equal ( new (0, 0, frame.Width, frame.Height), v.Viewport @@ -725,44 +213,6 @@ public class SetLayoutTests (ITestOutputHelper output) v.Dispose (); } - /// - /// This tests the special case in LayoutSubviews. See https://github.com/gui-cs/Terminal.Gui/issues/2461 - [Fact] - public void Nested_SubViews_Ref_Topmost_SuperView () - { - var superView = new View { Width = 80, Height = 25, Text = "superView" }; - - var subView1 = new View - { - Id = "subView1 - refs superView", - Width = Dim.Width (superView) - 2, // 78 - Height = Dim.Height (superView) - 2 // 23 - }; - superView.Add (subView1); - - var subView1OfSubView1 = new View () - { - Id = "subView1OfSubView1 - refs superView", - Width = Dim.Width (superView) - 4, // 76 - Height = Dim.Height (superView) - 4 // 21 - }; - subView1.Add (subView1OfSubView1); - - superView.Layout (); - - Assert.Equal (80, superView.Frame.Width); - Assert.Equal (25, superView.Frame.Height); - Assert.Equal (78, subView1.Frame.Width); - Assert.Equal (23, subView1.Frame.Height); - //Assert.Equal (76, subView2.Frame.Width); - //Assert.Equal (21, subView2.Frame.Height); - - Assert.Equal (76, subView1OfSubView1.Frame.Width); - Assert.Equal (21, subView1OfSubView1.Frame.Height); - - superView.Dispose (); - } - /// This is an intentionally obtuse test. See https://github.com/gui-cs/Terminal.Gui/issues/2461 [Fact] public void Does_Not_Throw_If_Nested_SubViews_Ref_Topmost_SuperView () @@ -812,4 +262,509 @@ public class SetLayoutTests (ITestOutputHelper output) Assert.Equal (19, v2.Frame.Height); t.Dispose (); } + + [Fact] + public void LayoutSubviews () + { + var superRect = new Rectangle (0, 0, 100, 100); + var super = new View { Frame = superRect, Text = "super" }; + var v1 = new View { X = 0, Y = 0, Width = 10, Height = 10 }; + + var v2 = new View { X = 10, Y = 10, Width = 10, Height = 10 }; + + super.Add (v1, v2); + + super.LayoutSubviews (); + Assert.Equal (new (0, 0, 10, 10), v1.Frame); + Assert.Equal (new (10, 10, 10, 10), v2.Frame); + super.Dispose (); + } + + [Fact] + public void LayoutSubviews_Honors_IsLayoutNeeded () + { + // No adornment subviews + var superView = new View (); + var view = new View (); + + var layoutStartedCount = 0; + var layoutCompleteCount = 0; + + var borderLayoutStartedCount = 0; + var borderLayoutCompleteCount = 0; + + view.SubviewLayout += (sender, e) => layoutStartedCount++; + view.SubviewsLaidOut += (sender, e) => layoutCompleteCount++; + + view.Border.SubviewLayout += (sender, e) => borderLayoutStartedCount++; + view.Border.SubviewsLaidOut += (sender, e) => borderLayoutCompleteCount++; + + superView.Add (view); + + superView.LayoutSubviews (); + Assert.Equal (0, borderLayoutStartedCount); + Assert.Equal (0, borderLayoutCompleteCount); + Assert.Equal (1, layoutStartedCount); + Assert.Equal (1, layoutCompleteCount); + + superView.LayoutSubviews (); + Assert.Equal (0, borderLayoutStartedCount); + Assert.Equal (0, borderLayoutCompleteCount); + Assert.Equal (1, layoutStartedCount); + Assert.Equal (1, layoutCompleteCount); + + superView.SetNeedsLayout (); + superView.LayoutSubviews (); + Assert.Equal (0, borderLayoutStartedCount); + Assert.Equal (0, borderLayoutCompleteCount); + Assert.Equal (2, layoutStartedCount); + Assert.Equal (2, layoutCompleteCount); + + // With Border subview + view.Border.Add (new View ()); + superView.LayoutSubviews (); + Assert.Equal (1, borderLayoutStartedCount); + Assert.Equal (1, borderLayoutCompleteCount); + Assert.Equal (3, layoutStartedCount); + Assert.Equal (3, layoutCompleteCount); + + superView.LayoutSubviews (); + Assert.Equal (1, borderLayoutStartedCount); + Assert.Equal (1, borderLayoutCompleteCount); + Assert.Equal (3, layoutStartedCount); + Assert.Equal (3, layoutCompleteCount); + + superView.SetNeedsLayout (); + superView.LayoutSubviews (); + Assert.Equal (2, borderLayoutStartedCount); + Assert.Equal (2, borderLayoutCompleteCount); + Assert.Equal (4, layoutStartedCount); + + superView.Dispose (); + } + + // Test OnLayoutStarted/OnLayoutComplete - ensure that they are called at right times + [Fact] + public void LayoutSubviews_LayoutStarted_Complete () + { + var superView = new View (); + var view = new View (); + + var layoutStartedCount = 0; + var layoutCompleteCount = 0; + + var borderLayoutStartedCount = 0; + var borderLayoutCompleteCount = 0; + + view.SubviewLayout += (sender, e) => layoutStartedCount++; + view.SubviewsLaidOut += (sender, e) => layoutCompleteCount++; + + view.Border.SubviewLayout += (sender, e) => borderLayoutStartedCount++; + view.Border.SubviewsLaidOut += (sender, e) => borderLayoutCompleteCount++; + + superView.Add (view); + Assert.Equal (0, borderLayoutStartedCount); + Assert.Equal (0, borderLayoutCompleteCount); + Assert.Equal (0, layoutStartedCount); + Assert.Equal (0, layoutCompleteCount); + + superView.BeginInit (); + Assert.Equal (0, borderLayoutStartedCount); + Assert.Equal (0, borderLayoutCompleteCount); + Assert.Equal (0, layoutStartedCount); + Assert.Equal (0, layoutCompleteCount); + + superView.EndInit (); + Assert.Equal (1, borderLayoutStartedCount); + Assert.Equal (1, borderLayoutCompleteCount); + Assert.Equal (2, layoutStartedCount); + Assert.Equal (2, layoutCompleteCount); + + superView.LayoutSubviews (); + Assert.Equal (1, borderLayoutStartedCount); + Assert.Equal (1, borderLayoutCompleteCount); + Assert.Equal (3, layoutStartedCount); + Assert.Equal (3, layoutCompleteCount); + + superView.SetNeedsLayout (); + superView.LayoutSubviews (); + Assert.Equal (1, borderLayoutStartedCount); + Assert.Equal (1, borderLayoutCompleteCount); + Assert.Equal (4, layoutStartedCount); + Assert.Equal (4, layoutCompleteCount); + + superView.Dispose (); + } + + [Fact] + public void LayoutSubviews_No_SuperView () + { + var root = new View (); + + var first = new View + { + Id = "first", + X = 1, + Y = 2, + Height = 3, + Width = 4 + }; + root.Add (first); + + var second = new View { Id = "second" }; + root.Add (second); + + second.X = Pos.Right (first) + 1; + + root.LayoutSubviews (); + + Assert.Equal (6, second.Frame.X); + root.Dispose (); + first.Dispose (); + second.Dispose (); + } + + [Fact] + public void LayoutSubViews_Raises_LayoutStarted_LayoutComplete () + { + var superView = new View { Id = "superView" }; + var layoutStartedRaised = 0; + var layoutCompleteRaised = 0; + superView.SubviewLayout += (sender, e) => layoutStartedRaised++; + superView.SubviewsLaidOut += (sender, e) => layoutCompleteRaised++; + + superView.SetNeedsLayout (); + superView.LayoutSubviews (); + Assert.Equal (1, layoutStartedRaised); + Assert.Equal (1, layoutCompleteRaised); + + superView.BeginInit (); + superView.EndInit (); + superView.LayoutSubviews (); + Assert.Equal (3, layoutStartedRaised); + Assert.Equal (3, layoutCompleteRaised); + } + + [Fact] + public void LayoutSubviews_RootHas_SuperView () + { + var top = new View (); + var root = new View (); + top.Add (root); + + var first = new View + { + Id = "first", + X = 1, + Y = 2, + Height = 3, + Width = 4 + }; + root.Add (first); + + var second = new View { Id = "second" }; + root.Add (second); + + second.X = Pos.Right (first) + 1; + + root.LayoutSubviews (); + + Assert.Equal (6, second.Frame.X); + root.Dispose (); + top.Dispose (); + first.Dispose (); + second.Dispose (); + } + + [Fact] + public void LayoutSubviews_Uses_ContentSize () + { + var superView = new View + { + Width = 5, + Height = 5 + }; + superView.SetContentSize (new (10, 10)); + + var view = new View + { + X = Pos.Center () + }; + superView.Add (view); + + superView.LayoutSubviews (); + + Assert.Equal (5, view.Frame.X); + superView.Dispose (); + } + + [Fact] + public void LayoutSubviews_ViewThatRefsSubView_Throws () + { + var root = new View (); + var super = new View (); + root.Add (super); + var sub = new View (); + super.Add (sub); + super.Width = Dim.Width (sub); + Assert.Throws (() => root.Layout ()); + root.Dispose (); + super.Dispose (); + } + + /// + /// This tests the special case in LayoutSubviews. See https://github.com/gui-cs/Terminal.Gui/issues/2461 + /// + [Fact] + public void Nested_SubViews_Ref_Topmost_SuperView () + { + var superView = new View { Width = 80, Height = 25, Text = "superView" }; + + var subView1 = new View + { + Id = "subView1 - refs superView", + Width = Dim.Width (superView) - 2, // 78 + Height = Dim.Height (superView) - 2 // 23 + }; + superView.Add (subView1); + + var subView1OfSubView1 = new View + { + Id = "subView1OfSubView1 - refs superView", + Width = Dim.Width (superView) - 4, // 76 + Height = Dim.Height (superView) - 4 // 21 + }; + subView1.Add (subView1OfSubView1); + + superView.Layout (); + + Assert.Equal (80, superView.Frame.Width); + Assert.Equal (25, superView.Frame.Height); + Assert.Equal (78, subView1.Frame.Width); + Assert.Equal (23, subView1.Frame.Height); + + //Assert.Equal (76, subView2.Frame.Width); + //Assert.Equal (21, subView2.Frame.Height); + + Assert.Equal (76, subView1OfSubView1.Frame.Width); + Assert.Equal (21, subView1OfSubView1.Frame.Height); + + superView.Dispose (); + } + + [Fact] + public void Set_Height_DimAbsolute_Layout_Is_Implicit () + { + var v = new View (); + + v.Height = 1; + Assert.False (v.NeedsLayout); + Assert.Equal (1, v.Frame.Height); + + v.Height = 2; + Assert.False (v.NeedsLayout); + Assert.Equal (2, v.Frame.Height); + + v.Height = Dim.Absolute (3); + Assert.False (v.NeedsLayout); + Assert.Equal (3, v.Frame.Height); + + v.Height = Dim.Absolute (3) + 1; + Assert.False (v.NeedsLayout); + Assert.Equal (4, v.Frame.Height); + + v.Height = 1 + Dim.Absolute (1) + 1; + Assert.False (v.NeedsLayout); + Assert.Equal (3, v.Frame.Height); + } + + [Fact] + public void Set_Height_Non_DimAbsolute_Explicit_Layout_Required () + { + var v = new View (); + + v.Height = Dim.Auto (); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.Height); + + v.Height = Dim.Percent (50); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.Height); + + v.Height = Dim.Fill (); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.Height); + + v.Height = Dim.Func (() => 10); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.Height); + + v.Height = Dim.Height (new ()); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.Height); + } + + [Fact] + public void Set_Width_DimAbsolute_Layout_Is_Implicit () + { + var v = new View (); + + v.Width = 1; + Assert.False (v.NeedsLayout); + Assert.Equal (1, v.Frame.Width); + + v.Width = 2; + Assert.False (v.NeedsLayout); + Assert.Equal (2, v.Frame.Width); + + v.Width = Dim.Absolute (3); + Assert.False (v.NeedsLayout); + Assert.Equal (3, v.Frame.Width); + + v.Width = Dim.Absolute (3) + 1; + Assert.False (v.NeedsLayout); + Assert.Equal (4, v.Frame.Width); + + v.Width = 1 + Dim.Absolute (1) + 1; + Assert.False (v.NeedsLayout); + Assert.Equal (3, v.Frame.Width); + } + + [Fact] + public void Set_Width_Non_DimAbsolute_Explicit_Layout_Required () + { + var v = new View (); + + v.Width = Dim.Auto (); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.Width); + + v.Width = Dim.Percent (50); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.Width); + + v.Width = Dim.Fill (); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.Width); + + v.Width = Dim.Func (() => 10); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.Width); + + v.Width = Dim.Width (new ()); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.Width); + } + + [Fact] + public void Set_X_Non_PosAbsolute_Explicit_Layout_Required () + { + var v = new View (); + + v.X = Pos.Center (); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.X); + + v.X = Pos.Percent (50); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.X); + + v.X = Pos.Align (Alignment.Center); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.X); + + v.X = Pos.Func (() => 10); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.X); + + v.X = Pos.AnchorEnd (); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.X); + + v.X = Pos.Top (new ()); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.X); + } + + [Fact] + public void Set_X_PosAbsolute_Layout_Is_Implicit () + { + var v = new View (); + + v.X = 1; + Assert.False (v.NeedsLayout); + Assert.Equal (1, v.Frame.X); + + v.X = 2; + Assert.False (v.NeedsLayout); + Assert.Equal (2, v.Frame.X); + + v.X = Pos.Absolute (3); + Assert.False (v.NeedsLayout); + Assert.Equal (3, v.Frame.X); + + v.X = Pos.Absolute (3) + 1; + Assert.False (v.NeedsLayout); + Assert.Equal (4, v.Frame.X); + + v.X = 1 + Pos.Absolute (1) + 1; + Assert.False (v.NeedsLayout); + Assert.Equal (3, v.Frame.X); + } + + [Fact] + public void Set_Y_Non_PosAbsolute_Explicit_Layout_Required () + { + var v = new View (); + + v.Y = Pos.Center (); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.Y); + + v.Y = Pos.Percent (50); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.Y); + + v.Y = Pos.Align (Alignment.Center); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.Y); + + v.Y = Pos.Func (() => 10); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.Y); + + v.Y = Pos.AnchorEnd (); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.Y); + + v.Y = Pos.Top (new ()); + Assert.True (v.NeedsLayout); + Assert.Equal (0, v.Frame.Y); + } + + [Fact] + public void Set_Y_PosAbsolute_Layout_Is_Implicit () + { + var v = new View (); + + v.Y = 1; + Assert.False (v.NeedsLayout); + Assert.Equal (1, v.Frame.Y); + + v.Y = 2; + Assert.False (v.NeedsLayout); + Assert.Equal (2, v.Frame.Y); + + v.Y = Pos.Absolute (3); + Assert.False (v.NeedsLayout); + Assert.Equal (3, v.Frame.Y); + + v.Y = Pos.Absolute (3) + 1; + Assert.False (v.NeedsLayout); + Assert.Equal (4, v.Frame.Y); + + v.Y = 1 + Pos.Absolute (1) + 1; + Assert.False (v.NeedsLayout); + Assert.Equal (3, v.Frame.Y); + } } diff --git a/UnitTests/View/Layout/SetRelativeLayoutTests.cs b/Tests/UnitTestsParallelizable/View/Layout/SetRelativeLayoutTests.cs similarity index 98% rename from UnitTests/View/Layout/SetRelativeLayoutTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/SetRelativeLayoutTests.cs index 547700de2..3ac89f638 100644 --- a/UnitTests/View/Layout/SetRelativeLayoutTests.cs +++ b/Tests/UnitTestsParallelizable/View/Layout/SetRelativeLayoutTests.cs @@ -1,13 +1,11 @@ -using Xunit.Abstractions; +using UnitTests; +using Xunit.Abstractions; using static Terminal.Gui.Dim; namespace Terminal.Gui.LayoutTests; public class SetRelativeLayoutTests { - private readonly ITestOutputHelper _output; - public SetRelativeLayoutTests (ITestOutputHelper output) { _output = output; } - [Fact] public void AbsolutePosDim_DontChange () { @@ -233,7 +231,6 @@ public class SetRelativeLayoutTests } [Fact] - [TestRespondersDisposed] public void PosCombine_Plus_Absolute () { var superView = new View { Width = 10, Height = 10 }; diff --git a/UnitTests/View/Layout/ToScreenTests.cs b/Tests/UnitTestsParallelizable/View/Layout/ToScreenTests.cs similarity index 59% rename from UnitTests/View/Layout/ToScreenTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/ToScreenTests.cs index eed7b12f1..714cd715c 100644 --- a/UnitTests/View/Layout/ToScreenTests.cs +++ b/Tests/UnitTestsParallelizable/View/Layout/ToScreenTests.cs @@ -1,18 +1,14 @@ using Xunit.Abstractions; -using static System.Net.Mime.MediaTypeNames; namespace Terminal.Gui.LayoutTests; /// -/// Test the and methods. -/// DOES NOT TEST Adornment.xxxToScreen methods. Those are in ./Adornment/ToScreenTests.cs +/// Test the and methods. +/// DOES NOT TEST Adornment.xxxToScreen methods. Those are in ./Adornment/ToScreenTests.cs /// /// -public class ToScreenTests (ITestOutputHelper output) +public class ToScreenTests () { - private readonly ITestOutputHelper _output = output; - - // Test FrameToScreen [Theory] [InlineData (0, 0, 0, 0)] @@ -56,6 +52,7 @@ public class ToScreenTests (ITestOutputHelper output) Rectangle actual = view.FrameToScreen (); Assert.Equal (expected, actual); } + [Theory] [InlineData (0, 0)] [InlineData (1, 1)] @@ -71,7 +68,7 @@ public class ToScreenTests (ITestOutputHelper output) view.Frame = frame; // Act - var screen = view.FrameToScreen (); + Rectangle screen = view.FrameToScreen (); // Assert Assert.Equal (expectedX, screen.X); @@ -93,7 +90,7 @@ public class ToScreenTests (ITestOutputHelper output) view.Frame = frame; // Act - var screen = view.FrameToScreen (); + Rectangle screen = view.FrameToScreen (); // Assert Assert.Equal (expectedX, screen.X); @@ -114,7 +111,7 @@ public class ToScreenTests (ITestOutputHelper output) view.BorderStyle = LineStyle.Single; view.Frame = frame; - var subviewOfBorder = new View () + var subviewOfBorder = new View { X = 1, // screen should be 1 Y = 0, @@ -127,7 +124,7 @@ public class ToScreenTests (ITestOutputHelper output) view.EndInit (); // Act - var screen = subviewOfBorder.FrameToScreen (); + Rectangle screen = subviewOfBorder.FrameToScreen (); // Assert Assert.Equal (expectedX, screen.X); @@ -148,16 +145,16 @@ public class ToScreenTests (ITestOutputHelper output) adornment.Frame = adornmentFrame; adornment.Thickness = new (1); - var subviewOfAdornment = new View () + var subviewOfAdornment = new View { Id = "subviewOfAdornment", X = 1, // screen should be 1 Y = 0, Width = 1, - Height = 1, + Height = 1 }; - var subviewOfSubview = new View () + var subviewOfSubview = new View { Id = "subviewOfSubview", X = 2, // screen should be 3 (the subviewOfAdornment location is 1) @@ -172,7 +169,7 @@ public class ToScreenTests (ITestOutputHelper output) adornment.EndInit (); // Act - var screen = subviewOfSubview.FrameToScreen (); + Rectangle screen = subviewOfSubview.FrameToScreen (); // Assert Assert.Equal (expectedX, screen.X); @@ -189,7 +186,7 @@ public class ToScreenTests (ITestOutputHelper output) // Arrange var frame = new Rectangle (x, 0, 10, 10); - var superView = new View () + var superView = new View { X = 0, Y = 0, @@ -204,7 +201,7 @@ public class ToScreenTests (ITestOutputHelper output) superView.LayoutSubviews (); // Act - var screen = view.FrameToScreen (); + Rectangle screen = view.FrameToScreen (); // Assert Assert.Equal (expectedX, screen.X); @@ -221,7 +218,7 @@ public class ToScreenTests (ITestOutputHelper output) // Arrange var frame = new Rectangle (x, 0, 10, 10); - var superView = new View () + var superView = new View { X = 0, Y = 0, @@ -237,7 +234,7 @@ public class ToScreenTests (ITestOutputHelper output) superView.LayoutSubviews (); // Act - var screen = view.FrameToScreen (); + Rectangle screen = view.FrameToScreen (); // Assert Assert.Equal (expectedX, screen.X); @@ -254,7 +251,7 @@ public class ToScreenTests (ITestOutputHelper output) // Arrange var frame = new Rectangle (x, 0, 10, 10); - var superSuperView = new View () + var superSuperView = new View { X = 0, Y = 0, @@ -262,7 +259,7 @@ public class ToScreenTests (ITestOutputHelper output) Width = Dim.Fill () }; - var superView = new View () + var superView = new View { X = 0, Y = 0, @@ -279,7 +276,7 @@ public class ToScreenTests (ITestOutputHelper output) superView.LayoutSubviews (); // Act - var screen = view.FrameToScreen (); + Rectangle screen = view.FrameToScreen (); // Assert Assert.Equal (expectedX, screen.X); @@ -296,7 +293,7 @@ public class ToScreenTests (ITestOutputHelper output) // Arrange var frame = new Rectangle (x, 0, 10, 10); - var superSuperView = new View () + var superSuperView = new View { X = 0, Y = 0, @@ -305,7 +302,7 @@ public class ToScreenTests (ITestOutputHelper output) }; superSuperView.BorderStyle = LineStyle.Single; - var superView = new View () + var superView = new View { X = 0, Y = 0, @@ -323,7 +320,7 @@ public class ToScreenTests (ITestOutputHelper output) superSuperView.Layout (); // Act - var screen = view.FrameToScreen (); + Rectangle screen = view.FrameToScreen (); // Assert Assert.Equal (expectedX, screen.X); @@ -345,18 +342,16 @@ public class ToScreenTests (ITestOutputHelper output) view.SetContentSize (new (20, 20)); Point testPoint = new (0, 0); - Assert.Equal (new Point (1, 1), view.ContentToScreen (testPoint)); + Assert.Equal (new (1, 1), view.ContentToScreen (testPoint)); } [Theory] [InlineData (0, 0, 1)] [InlineData (1, 0, 2)] [InlineData (-1, 0, 0)] - [InlineData (0, 1, 2)] [InlineData (1, 1, 3)] [InlineData (-1, 1, 1)] - [InlineData (0, -1, 0)] [InlineData (1, -1, 1)] [InlineData (-1, -1, -1)] @@ -372,7 +367,7 @@ public class ToScreenTests (ITestOutputHelper output) view.BorderStyle = LineStyle.Single; // Act - var screen = view.ContentToScreen (new (contentX, 0)); + Point screen = view.ContentToScreen (new (contentX, 0)); // Assert Assert.Equal (expectedX, screen.X); @@ -383,12 +378,10 @@ public class ToScreenTests (ITestOutputHelper output) [InlineData (1, 0, 1)] [InlineData (-1, 0, -1)] [InlineData (11, 0, 11)] - [InlineData (0, 1, 1)] [InlineData (1, 1, 2)] [InlineData (-1, 1, 0)] [InlineData (11, 1, 12)] - [InlineData (0, -1, -1)] [InlineData (1, -1, 0)] [InlineData (-1, -1, -2)] @@ -399,7 +392,7 @@ public class ToScreenTests (ITestOutputHelper output) // Arrange var frame = new Rectangle (frameX, 0, 10, 10); - var superView = new View () + var superView = new View { X = 0, Y = 0, @@ -415,7 +408,7 @@ public class ToScreenTests (ITestOutputHelper output) superView.LayoutSubviews (); // Act - var screen = view.ContentToScreen (new (contentX, 0)); + Point screen = view.ContentToScreen (new (contentX, 0)); // Assert Assert.Equal (expectedX, screen.X); @@ -570,7 +563,6 @@ public class ToScreenTests (ITestOutputHelper output) // Assert.Equal (expectedX, screen.X); //} - //[Theory] //[InlineData (0, 0, 3)] //[InlineData (1, 0, 4)] @@ -640,12 +632,12 @@ public class ToScreenTests (ITestOutputHelper output) }; view.Layout (); - Rectangle testRect = new Rectangle (0, 0, 1, 1); - Assert.Equal (new Point (0, 0), view.ViewportToScreen (testRect).Location); - view.Viewport = view.Viewport with { Location = new Point (1, 1) }; + var testRect = new Rectangle (0, 0, 1, 1); + Assert.Equal (new (0, 0), view.ViewportToScreen (testRect).Location); + view.Viewport = view.Viewport with { Location = new (1, 1) }; - Assert.Equal (new Rectangle (1, 1, 10, 10), view.Viewport); - Assert.Equal (new Point (0, 0), view.ViewportToScreen (testRect).Location); + Assert.Equal (new (1, 1, 10, 10), view.Viewport); + Assert.Equal (new (0, 0), view.ViewportToScreen (testRect).Location); } [Theory] @@ -664,7 +656,7 @@ public class ToScreenTests (ITestOutputHelper output) view.Layout (); // Act - var screen = view.ViewportToScreen (new Point (viewportX, 0)); + Point screen = view.ViewportToScreen (new Point (viewportX, 0)); // Assert Assert.Equal (expectedX, screen.X); @@ -675,12 +667,10 @@ public class ToScreenTests (ITestOutputHelper output) [InlineData (1, 0, 2)] [InlineData (-1, 0, 0)] [InlineData (11, 0, 12)] - [InlineData (0, 1, 2)] [InlineData (1, 1, 3)] [InlineData (-1, 1, 1)] [InlineData (11, 1, 13)] - [InlineData (0, -1, 0)] [InlineData (1, -1, 1)] [InlineData (-1, -1, -1)] @@ -696,7 +686,7 @@ public class ToScreenTests (ITestOutputHelper output) view.Frame = frame; // Act - var screen = view.ViewportToScreen (new Point (viewportX, 0)); + Point screen = view.ViewportToScreen (new Point (viewportX, 0)); // Assert Assert.Equal (expectedX, screen.X); @@ -707,12 +697,10 @@ public class ToScreenTests (ITestOutputHelper output) [InlineData (1, 0, 1)] [InlineData (-1, 0, -1)] [InlineData (11, 0, 11)] - [InlineData (0, 1, 1)] [InlineData (1, 1, 2)] [InlineData (-1, 1, 0)] [InlineData (11, 1, 12)] - [InlineData (0, -1, -1)] [InlineData (1, -1, 0)] [InlineData (-1, -1, -2)] @@ -723,7 +711,7 @@ public class ToScreenTests (ITestOutputHelper output) // Arrange var frame = new Rectangle (frameX, 0, 10, 10); - var superView = new View () + var superView = new View { X = 0, Y = 0, @@ -738,7 +726,7 @@ public class ToScreenTests (ITestOutputHelper output) superView.LayoutSubviews (); // Act - var screen = view.ViewportToScreen (new Point (viewportX, 0)); + Point screen = view.ViewportToScreen (new Point (viewportX, 0)); // Assert Assert.Equal (expectedX, screen.X); @@ -749,12 +737,10 @@ public class ToScreenTests (ITestOutputHelper output) [InlineData (1, 0, 2)] [InlineData (-1, 0, 0)] [InlineData (11, 0, 12)] - [InlineData (0, 1, 2)] [InlineData (1, 1, 3)] [InlineData (-1, 1, 1)] [InlineData (11, 1, 13)] - [InlineData (0, -1, 0)] [InlineData (1, -1, 1)] [InlineData (-1, -1, -1)] @@ -765,7 +751,7 @@ public class ToScreenTests (ITestOutputHelper output) // Arrange var frame = new Rectangle (frameX, 0, 10, 10); - var superView = new View () + var superView = new View { X = 0, Y = 0, @@ -781,7 +767,7 @@ public class ToScreenTests (ITestOutputHelper output) superView.LayoutSubviews (); // Act - var screen = view.ViewportToScreen (new Point (viewportX, 0)); + Point screen = view.ViewportToScreen (new Point (viewportX, 0)); // Assert Assert.Equal (expectedX, screen.X); @@ -792,12 +778,10 @@ public class ToScreenTests (ITestOutputHelper output) [InlineData (1, 0, 1)] [InlineData (-1, 0, -1)] [InlineData (11, 0, 11)] - [InlineData (0, 1, 1)] [InlineData (1, 1, 2)] [InlineData (-1, 1, 0)] [InlineData (11, 1, 12)] - [InlineData (0, -1, -1)] [InlineData (1, -1, 0)] [InlineData (-1, -1, -2)] @@ -808,7 +792,7 @@ public class ToScreenTests (ITestOutputHelper output) // Arrange var frame = new Rectangle (frameX, 0, 10, 10); - var superSuperView = new View () + var superSuperView = new View { X = 0, Y = 0, @@ -816,7 +800,7 @@ public class ToScreenTests (ITestOutputHelper output) Width = Dim.Fill () }; - var superView = new View () + var superView = new View { X = 0, Y = 0, @@ -833,7 +817,7 @@ public class ToScreenTests (ITestOutputHelper output) superView.LayoutSubviews (); // Act - var screen = view.ViewportToScreen (new Point (viewportX, 0)); + Point screen = view.ViewportToScreen (new Point (viewportX, 0)); // Assert Assert.Equal (expectedX, screen.X); @@ -844,12 +828,10 @@ public class ToScreenTests (ITestOutputHelper output) [InlineData (1, 0, 3)] [InlineData (-1, 0, 1)] [InlineData (11, 0, 13)] - [InlineData (0, 1, 3)] [InlineData (1, 1, 4)] [InlineData (-1, 1, 2)] [InlineData (11, 1, 14)] - [InlineData (0, -1, 1)] [InlineData (1, -1, 2)] [InlineData (-1, -1, 0)] @@ -860,7 +842,7 @@ public class ToScreenTests (ITestOutputHelper output) // Arrange var frame = new Rectangle (frameX, 0, 10, 10); - var superSuperView = new View () + var superSuperView = new View { X = 0, Y = 0, @@ -869,7 +851,7 @@ public class ToScreenTests (ITestOutputHelper output) }; superSuperView.BorderStyle = LineStyle.Single; - var superView = new View () + var superView = new View { X = 0, Y = 0, @@ -887,24 +869,21 @@ public class ToScreenTests (ITestOutputHelper output) superView.Layout (); // Act - var screen = view.ViewportToScreen (new Point (viewportX, 0)); + Point screen = view.ViewportToScreen (new Point (viewportX, 0)); // Assert Assert.Equal (expectedX, screen.X); } - [Theory] [InlineData (0, 0, 2)] [InlineData (1, 0, 3)] [InlineData (-1, 0, 1)] [InlineData (11, 0, 13)] - [InlineData (0, 1, 3)] [InlineData (1, 1, 4)] [InlineData (-1, 1, 2)] [InlineData (11, 1, 14)] - [InlineData (0, -1, 1)] [InlineData (1, -1, 2)] [InlineData (-1, -1, 0)] @@ -915,7 +894,7 @@ public class ToScreenTests (ITestOutputHelper output) // Arrange var frame = new Rectangle (frameX, 0, 10, 10); - var superSuperView = new View () + var superSuperView = new View { X = 0, Y = 0, @@ -924,7 +903,7 @@ public class ToScreenTests (ITestOutputHelper output) }; superSuperView.BorderStyle = LineStyle.Single; - var superView = new View () + var superView = new View { X = 0, Y = 0, @@ -944,300 +923,9 @@ public class ToScreenTests (ITestOutputHelper output) superView.LayoutSubviews (); // Act - var screen = view.ViewportToScreen (new Point (testX, 0)); + Point screen = view.ViewportToScreen (new Point (testX, 0)); // Assert Assert.Equal (expectedX, screen.X); } - - - [Fact] - [AutoInitShutdown] - public void ScreenToView_ViewToScreen_GetViewsUnderMouse_Full_Top () - { - Application.Top = new (); - Application.Top.BorderStyle = LineStyle.Single; - - var view = new View - { - X = 3, - Y = 2, - Width = 10, - Height = 1, - Text = "0123456789" - }; - Application.Top.Add (view); - - var rs = Application.Begin (Application.Top); - - Assert.Equal (new (0, 0, 80, 25), new Rectangle (0, 0, View.Driver.Cols, View.Driver.Rows)); - Assert.Equal (new (0, 0, View.Driver.Cols, View.Driver.Rows), Application.Top.Frame); - Assert.Equal (new (0, 0, 80, 25), Application.Top.Frame); - - ((FakeDriver)Application.Driver!).SetBufferSize (20, 10); - Assert.Equal (new (0, 0, View.Driver.Cols, View.Driver.Rows), Application.Top.Frame); - Assert.Equal (new (0, 0, 20, 10), Application.Top.Frame); - - - _ = TestHelpers.AssertDriverContentsWithFrameAre ( - @" -┌──────────────────┐ -│ │ -│ │ -│ 0123456789 │ -│ │ -│ │ -│ │ -│ │ -│ │ -└──────────────────┘" - , - _output - ); - - // top - Assert.Equal (Point.Empty, Application.Top.ScreenToFrame (new (0, 0))); - Point screen = Application.Top.Margin.ViewportToScreen (new Point (0, 0)); - Assert.Equal (0, screen.X); - Assert.Equal (0, screen.Y); - screen = Application.Top.Border.ViewportToScreen (new Point (0, 0)); - Assert.Equal (0, screen.X); - Assert.Equal (0, screen.Y); - screen = Application.Top.Padding.ViewportToScreen (new Point (0, 0)); - Assert.Equal (1, screen.X); - Assert.Equal (1, screen.Y); - screen = Application.Top.ViewportToScreen (new Point (0, 0)); - Assert.Equal (1, screen.X); - Assert.Equal (1, screen.Y); - screen = Application.Top.ViewportToScreen (new Point (-1, -1)); - Assert.Equal (0, screen.X); - Assert.Equal (0, screen.Y); - var found = View.GetViewsUnderMouse (new Point(0, 0)).LastOrDefault (); - Assert.Equal (Application.Top.Border, found); - - Assert.Equal (0, found.Frame.X); - Assert.Equal (0, found.Frame.Y); - Assert.Equal (new (3, 2), Application.Top.ScreenToFrame (new (3, 2))); - screen = Application.Top.ViewportToScreen (new Point (3, 2)); - Assert.Equal (4, screen.X); - Assert.Equal (3, screen.Y); - found = View.GetViewsUnderMouse (new Point(screen.X, screen.Y)).LastOrDefault (); - Assert.Equal (view, found); - - //Assert.Equal (0, found.FrameToScreen ().X); - //Assert.Equal (0, found.FrameToScreen ().Y); - found = View.GetViewsUnderMouse (new Point(3, 2)).LastOrDefault (); - Assert.Equal (Application.Top, found); - - //Assert.Equal (3, found.FrameToScreen ().X); - //Assert.Equal (2, found.FrameToScreen ().Y); - Assert.Equal (new (13, 2), Application.Top.ScreenToFrame (new (13, 2))); - screen = Application.Top.ViewportToScreen (new Point (12, 2)); - Assert.Equal (13, screen.X); - Assert.Equal (3, screen.Y); - found = View.GetViewsUnderMouse (new Point(screen.X, screen.Y)).LastOrDefault (); - Assert.Equal (view, found); - - //Assert.Equal (9, found.FrameToScreen ().X); - //Assert.Equal (0, found.FrameToScreen ().Y); - screen = Application.Top.ViewportToScreen (new Point (13, 2)); - Assert.Equal (14, screen.X); - Assert.Equal (3, screen.Y); - found = View.GetViewsUnderMouse (new Point(13, 2)).LastOrDefault (); - Assert.Equal (Application.Top, found); - - //Assert.Equal (13, found.FrameToScreen ().X); - //Assert.Equal (2, found.FrameToScreen ().Y); - Assert.Equal (new (14, 3), Application.Top.ScreenToFrame (new (14, 3))); - screen = Application.Top.ViewportToScreen (new Point (14, 3)); - Assert.Equal (15, screen.X); - Assert.Equal (4, screen.Y); - found = View.GetViewsUnderMouse (new Point(14, 3)).LastOrDefault (); - Assert.Equal (Application.Top, found); - - //Assert.Equal (14, found.FrameToScreen ().X); - //Assert.Equal (3, found.FrameToScreen ().Y); - - // view - Assert.Equal (new (-4, -3), view.ScreenToFrame (new (0, 0))); - screen = view.Margin.ViewportToScreen (new Point (-3, -2)); - Assert.Equal (1, screen.X); - Assert.Equal (1, screen.Y); - screen = view.Border.ViewportToScreen (new Point (-3, -2)); - Assert.Equal (1, screen.X); - Assert.Equal (1, screen.Y); - screen = view.Padding.ViewportToScreen (new Point (-3, -2)); - Assert.Equal (1, screen.X); - Assert.Equal (1, screen.Y); - screen = view.ViewportToScreen (new Point (-3, -2)); - Assert.Equal (1, screen.X); - Assert.Equal (1, screen.Y); - screen = view.ViewportToScreen (new Point (-4, -3)); - Assert.Equal (0, screen.X); - Assert.Equal (0, screen.Y); - found = View.GetViewsUnderMouse (new Point(0, 0)).LastOrDefault (); - Assert.Equal (Application.Top.Border, found); - - Assert.Equal (new (-1, -1), view.ScreenToFrame (new (3, 2))); - screen = view.ViewportToScreen (new Point (0, 0)); - Assert.Equal (4, screen.X); - Assert.Equal (3, screen.Y); - found = View.GetViewsUnderMouse (new Point(4, 3)).LastOrDefault (); - Assert.Equal (view, found); - - Assert.Equal (new (9, -1), view.ScreenToFrame (new (13, 2))); - screen = view.ViewportToScreen (new Point (10, 0)); - Assert.Equal (14, screen.X); - Assert.Equal (3, screen.Y); - found = View.GetViewsUnderMouse (new Point(14, 3)).LastOrDefault (); - Assert.Equal (Application.Top, found); - - Assert.Equal (new (10, 0), view.ScreenToFrame (new (14, 3))); - screen = view.ViewportToScreen (new Point (11, 1)); - Assert.Equal (15, screen.X); - Assert.Equal (4, screen.Y); - found = View.GetViewsUnderMouse (new Point(15, 4)).LastOrDefault (); - Assert.Equal (Application.Top, found); - - Application.Top.Dispose (); - Application.ResetState (ignoreDisposed: true); - } - - [Fact] - [AutoInitShutdown] - public void ScreenToView_ViewToScreen_GetViewsUnderMouse_Smaller_Top () - { - Application.Top = new () - { - X = 3, - Y = 2, - Width = 20, - Height = 10, - BorderStyle = LineStyle.Single - }; - - var view = new View - { - X = 3, - Y = 2, - Width = 10, - Height = 1, - Text = "0123456789" - }; - Application.Top.Add (view); - - Application.Begin (Application.Top); - - Assert.Equal (new (0, 0, 80, 25), new Rectangle (0, 0, View.Driver.Cols, View.Driver.Rows)); - Assert.NotEqual (new (0, 0, View.Driver.Cols, View.Driver.Rows), Application.Top.Frame); - Assert.Equal (new (3, 2, 20, 10), Application.Top.Frame); - - ((FakeDriver)Application.Driver!).SetBufferSize (30, 20); - Assert.Equal (new (0, 0, 30, 20), new Rectangle (0, 0, View.Driver.Cols, View.Driver.Rows)); - Assert.NotEqual (new (0, 0, View.Driver.Cols, View.Driver.Rows), Application.Top.Frame); - Assert.Equal (new (3, 2, 20, 10), Application.Top.Frame); - - Rectangle frame = TestHelpers.AssertDriverContentsWithFrameAre ( - @" - ┌──────────────────┐ - │ │ - │ │ - │ 0123456789 │ - │ │ - │ │ - │ │ - │ │ - │ │ - └──────────────────┘" - , - _output - ); - - // mean the output started at col 3 and line 2 - // which result with a width of 23 and a height of 10 on the output - Assert.Equal (new (3, 2, 23, 10), frame); - - // top - Assert.Equal (new (-3, -2), Application.Top.ScreenToFrame (new (0, 0))); - Point screen = Application.Top.Margin.ViewportToScreen (new Point (-3, -2)); - Assert.Equal (0, screen.X); - Assert.Equal (0, screen.Y); - screen = Application.Top.Border.ViewportToScreen (new Point (-3, -2)); - Assert.Equal (0, screen.X); - Assert.Equal (0, screen.Y); - screen = Application.Top.Padding.ViewportToScreen (new Point (-3, -2)); - Assert.Equal (1, screen.X); - Assert.Equal (1, screen.Y); - screen = Application.Top.ViewportToScreen (new Point (-3, -2)); - Assert.Equal (1, screen.X); - Assert.Equal (1, screen.Y); - screen = Application.Top.ViewportToScreen (new Point (-4, -3)); - Assert.Equal (0, screen.X); - Assert.Equal (0, screen.Y); - var found = View.GetViewsUnderMouse (new Point(-4, -3)).LastOrDefault (); - Assert.Null (found); - Assert.Equal (Point.Empty, Application.Top.ScreenToFrame (new (3, 2))); - screen = Application.Top.ViewportToScreen (new Point (0, 0)); - Assert.Equal (4, screen.X); - Assert.Equal (3, screen.Y); - Assert.Equal (Application.Top.Border, View.GetViewsUnderMouse (new Point(3, 2)).LastOrDefault ()); - - //Assert.Equal (0, found.FrameToScreen ().X); - //Assert.Equal (0, found.FrameToScreen ().Y); - Assert.Equal (new (10, 0), Application.Top.ScreenToFrame (new (13, 2))); - screen = Application.Top.ViewportToScreen (new Point (10, 0)); - Assert.Equal (14, screen.X); - Assert.Equal (3, screen.Y); - Assert.Equal (Application.Top.Border, View.GetViewsUnderMouse (new Point(13, 2)).LastOrDefault ()); - - //Assert.Equal (10, found.FrameToScreen ().X); - //Assert.Equal (0, found.FrameToScreen ().Y); - Assert.Equal (new (11, 1), Application.Top.ScreenToFrame (new (14, 3))); - screen = Application.Top.ViewportToScreen (new Point (11, 1)); - Assert.Equal (15, screen.X); - Assert.Equal (4, screen.Y); - Assert.Equal (Application.Top, View.GetViewsUnderMouse (new Point(14, 3)).LastOrDefault ()); - - // view - Assert.Equal (new (-7, -5), view.ScreenToFrame (new (0, 0))); - screen = view.Margin.ViewportToScreen (new Point (-6, -4)); - Assert.Equal (1, screen.X); - Assert.Equal (1, screen.Y); - screen = view.Border.ViewportToScreen (new Point (-6, -4)); - Assert.Equal (1, screen.X); - Assert.Equal (1, screen.Y); - screen = view.Padding.ViewportToScreen (new Point (-6, -4)); - Assert.Equal (1, screen.X); - Assert.Equal (1, screen.Y); - screen = view.ViewportToScreen (new Point (-6, -4)); - Assert.Equal (1, screen.X); - Assert.Equal (1, screen.Y); - Assert.Null (View.GetViewsUnderMouse (new Point(1, 1)).LastOrDefault ()); - Assert.Equal (new (-4, -3), view.ScreenToFrame (new (3, 2))); - screen = view.ViewportToScreen (new Point (-3, -2)); - Assert.Equal (4, screen.X); - Assert.Equal (3, screen.Y); - Assert.Equal (Application.Top, View.GetViewsUnderMouse (new Point(4, 3)).LastOrDefault ()); - Assert.Equal (new (-1, -1), view.ScreenToFrame (new (6, 4))); - screen = view.ViewportToScreen (new Point (0, 0)); - Assert.Equal (7, screen.X); - Assert.Equal (5, screen.Y); - Assert.Equal (view, View.GetViewsUnderMouse (new Point(7, 5)).LastOrDefault ()); - Assert.Equal (new (6, -1), view.ScreenToFrame (new (13, 4))); - screen = view.ViewportToScreen (new Point (7, 0)); - Assert.Equal (14, screen.X); - Assert.Equal (5, screen.Y); - Assert.Equal (view, View.GetViewsUnderMouse (new Point(14, 5)).LastOrDefault ()); - Assert.Equal (new (7, -2), view.ScreenToFrame (new (14, 3))); - screen = view.ViewportToScreen (new Point (8, -1)); - Assert.Equal (15, screen.X); - Assert.Equal (4, screen.Y); - Assert.Equal (Application.Top, View.GetViewsUnderMouse (new Point(15, 4)).LastOrDefault ()); - Assert.Equal (new (16, -2), view.ScreenToFrame (new (23, 3))); - screen = view.ViewportToScreen (new Point (17, -1)); - Assert.Equal (24, screen.X); - Assert.Equal (4, screen.Y); - Assert.Null (View.GetViewsUnderMouse (new Point(24, 4)).LastOrDefault ()); - Application.Top.Dispose (); - } } diff --git a/UnitTests/View/Layout/TopologicalSortTests.cs b/Tests/UnitTestsParallelizable/View/Layout/TopologicalSortTests.cs similarity index 100% rename from UnitTests/View/Layout/TopologicalSortTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/TopologicalSortTests.cs diff --git a/UnitTests/View/Layout/ViewportTests.cs b/Tests/UnitTestsParallelizable/View/Layout/ViewportTests.cs similarity index 100% rename from UnitTests/View/Layout/ViewportTests.cs rename to Tests/UnitTestsParallelizable/View/Layout/ViewportTests.cs diff --git a/Tests/UnitTestsParallelizable/View/SubviewTests.cs b/Tests/UnitTestsParallelizable/View/SubviewTests.cs new file mode 100644 index 000000000..7362ea625 --- /dev/null +++ b/Tests/UnitTestsParallelizable/View/SubviewTests.cs @@ -0,0 +1,330 @@ +using Xunit.Abstractions; + +namespace Terminal.Gui.ViewTests; + +public class SubviewTests +{ + private readonly ITestOutputHelper _output; + public SubviewTests (ITestOutputHelper output) { _output = output; } + + [Fact] + public void Added_Removed () + { + var v = new View { Frame = new Rectangle (0, 0, 10, 24) }; + var t = new View (); + + v.Added += (s, e) => + { + Assert.Same (v.SuperView, e.SuperView); + Assert.Same (t, e.SuperView); + Assert.Same (v, e.SubView); + }; + + v.Removed += (s, e) => + { + Assert.Same (t, e.SuperView); + Assert.Same (v, e.SubView); + Assert.True (v.SuperView == null); + }; + + t.Add (v); + Assert.True (t.Subviews.Count == 1); + + t.Remove (v); + Assert.True (t.Subviews.Count == 0); + + t.Dispose (); + v.Dispose (); + } + + + [Fact] + public void IsAdded_Added_Removed () + { + var top = new Toplevel (); + var view = new View (); + Assert.False (view.IsAdded); + top.Add (view); + Assert.True (view.IsAdded); + top.Remove (view); + Assert.False (view.IsAdded); + + top.Dispose (); + view.Dispose (); + } + + // TODO: Consider a feature that will change the ContentSize to fit the subviews. + [Fact] + public void Add_Does_Not_Impact_ContentSize () + { + var view = new View (); + view.SetContentSize (new Size (1, 1)); + + var subview = new View () + { + X = 10, + Y = 10 + }; + + Assert.Equal (new Size (1, 1), view.GetContentSize ()); + view.Add (subview); + Assert.Equal (new Size (1, 1), view.GetContentSize ()); + } + + [Fact] + public void Remove_Does_Not_Impact_ContentSize () + { + var view = new View (); + view.SetContentSize (new Size (1, 1)); + + var subview = new View () + { + X = 10, + Y = 10 + }; + + Assert.Equal (new Size (1, 1), view.GetContentSize ()); + view.Add (subview); + Assert.Equal (new Size (1, 1), view.GetContentSize ()); + + view.SetContentSize (new Size (5, 5)); + Assert.Equal (new Size (5, 5), view.GetContentSize ()); + + view.Remove (subview); + Assert.Equal (new Size (5, 5), view.GetContentSize ()); + } + + [Fact] + public void MoveSubviewToStart () + { + View superView = new (); + + View subview1 = new View () + { + Id = "subview1" + }; + + View subview2 = new View () + { + Id = "subview2" + }; + + View subview3 = new View () + { + Id = "subview3" + }; + + superView.Add (subview1, subview2, subview3); + + superView.MoveSubviewToStart (subview2); + Assert.Equal(subview2, superView.Subviews [0]); + + superView.MoveSubviewToStart (subview3); + Assert.Equal (subview3, superView.Subviews [0]); + } + + + [Fact] + public void MoveSubviewTowardsFront () + { + View superView = new (); + + View subview1 = new View () + { + Id = "subview1" + }; + + View subview2 = new View () + { + Id = "subview2" + }; + + View subview3 = new View () + { + Id = "subview3" + }; + + superView.Add (subview1, subview2, subview3); + + superView.MoveSubviewTowardsStart (subview2); + Assert.Equal (subview2, superView.Subviews [0]); + + superView.MoveSubviewTowardsStart (subview3); + Assert.Equal (subview3, superView.Subviews [1]); + + // Already at front, what happens? + superView.MoveSubviewTowardsStart (subview2); + Assert.Equal (subview2, superView.Subviews [0]); + } + + [Fact] + public void MoveSubviewToEnd () + { + View superView = new (); + + View subview1 = new View () + { + Id = "subview1" + }; + + View subview2 = new View () + { + Id = "subview2" + }; + + View subview3 = new View () + { + Id = "subview3" + }; + + superView.Add (subview1, subview2, subview3); + + superView.MoveSubviewToEnd (subview1); + Assert.Equal (subview1, superView.Subviews [^1]); + + superView.MoveSubviewToEnd (subview2); + Assert.Equal (subview2, superView.Subviews [^1]); + } + + + [Fact] + public void MoveSubviewTowardsEnd () + { + View superView = new (); + + View subview1 = new View () + { + Id = "subview1" + }; + + View subview2 = new View () + { + Id = "subview2" + }; + + View subview3 = new View () + { + Id = "subview3" + }; + + superView.Add (subview1, subview2, subview3); + + superView.MoveSubviewTowardsEnd (subview2); + Assert.Equal (subview2, superView.Subviews [^1]); + + superView.MoveSubviewTowardsEnd (subview1); + Assert.Equal (subview1, superView.Subviews [1]); + + // Already at end, what happens? + superView.MoveSubviewTowardsEnd (subview2); + Assert.Equal (subview2, superView.Subviews [^1]); + } + + [Fact] + public void IsInHierarchy_ViewIsNull_ReturnsFalse () + { + // Arrange + var start = new View (); + + // Act + var result = View.IsInHierarchy (start, null); + + // Assert + Assert.False (result); + } + + [Fact] + public void IsInHierarchy_StartIsNull_ReturnsFalse () + { + // Arrange + var view = new View (); + + // Act + var result = View.IsInHierarchy (null, view); + + // Assert + Assert.False (result); + } + + [Fact] + public void IsInHierarchy_ViewIsStart_ReturnsTrue () + { + // Arrange + var start = new View (); + + // Act + var result = View.IsInHierarchy (start, start); + + // Assert + Assert.True (result); + } + + [Fact] + public void IsInHierarchy_ViewIsDirectSubview_ReturnsTrue () + { + // Arrange + var start = new View (); + var subview = new View (); + start.Add (subview); + + // Act + var result = View.IsInHierarchy (start, subview); + + // Assert + Assert.True (result); + } + + [Fact] + public void IsInHierarchy_ViewIsNestedSubview_ReturnsTrue () + { + // Arrange + var start = new View (); + var subview = new View (); + var nestedSubview = new View (); + start.Add (subview); + subview.Add (nestedSubview); + + // Act + var result = View.IsInHierarchy (start, nestedSubview); + + // Assert + Assert.True (result); + } + + [Fact] + public void IsInHierarchy_ViewIsNotInHierarchy_ReturnsFalse () + { + // Arrange + var start = new View (); + var subview = new View (); + + // Act + var result = View.IsInHierarchy (start, subview); + + // Assert + Assert.False (result); + } + + [Theory] + [CombinatorialData] + public void IsInHierarchy_ViewIsInAdornments_ReturnsTrue (bool includeAdornments) + { + // Arrange + var start = new View () + { + Id = "start" + }; + var inPadding = new View () + { + Id = "inPadding" + }; + + start.Padding.Add (inPadding); + + // Act + var result = View.IsInHierarchy (start, inPadding, includeAdornments: includeAdornments); + + // Assert + Assert.Equal(includeAdornments, result); + } +} diff --git a/Tests/UnitTestsParallelizable/View/TextTests.cs b/Tests/UnitTestsParallelizable/View/TextTests.cs new file mode 100644 index 000000000..31ca7eea8 --- /dev/null +++ b/Tests/UnitTestsParallelizable/View/TextTests.cs @@ -0,0 +1,194 @@ +using System.Runtime.CompilerServices; +using System.Text; +using Xunit.Abstractions; + +namespace Terminal.Gui.ViewTests; + +/// +/// Tests of the and properties. +/// +public class TextTests () +{ + // TextFormatter.Size should be empty unless DimAuto is set or ContentSize is set + [Theory] + [InlineData ("", 0, 0)] + [InlineData (" ", 0, 0)] + [InlineData ("01234", 0, 0)] + public void TextFormatter_Size_Default (string text, int expectedW, int expectedH) + { + var view = new View (); + view.Text = text; + view.Layout (); + Assert.Equal (new (expectedW, expectedH), view.TextFormatter.ConstrainToSize); + } + + // TextFormatter.Size should track ContentSize (without DimAuto) + [Theory] + [InlineData ("", 1, 1)] + [InlineData (" ", 1, 1)] + [InlineData ("01234", 1, 1)] + public void TextFormatter_Size_Tracks_ContentSize (string text, int expectedW, int expectedH) + { + var view = new View (); + view.SetContentSize (new (1, 1)); + view.Text = text; + view.Layout (); + Assert.Equal (new (expectedW, expectedH), view.TextFormatter.ConstrainToSize); + } + + // Test that View.PreserveTrailingSpaces removes trailing spaces + [Fact] + public void PreserveTrailingSpaces_Removes_Trailing_Spaces () + { + var view = new View { Text = "Hello World " }; + Assert.Equal ("Hello World ", view.TextFormatter.Text); + + view.TextFormatter.WordWrap = true; + view.TextFormatter.ConstrainToSize = new (5, 3); + + view.PreserveTrailingSpaces = false; + Assert.Equal ($"Hello{Environment.NewLine}World", view.TextFormatter.Format ()); + + view.PreserveTrailingSpaces = true; + Assert.Equal ($"Hello{Environment.NewLine} {Environment.NewLine}World", view.TextFormatter.Format ()); + } + + // View.PreserveTrailingSpaces Gets or sets whether trailing spaces at the end of word-wrapped lines are preserved + // or not when is enabled. + // If trailing spaces at the end of wrapped lines will be removed when + // is formatted for display.The default is . + [Fact] + public void PreserveTrailingSpaces_Set_Get () + { + var view = new View { Text = "Hello World" }; + + Assert.False (view.PreserveTrailingSpaces); + + view.PreserveTrailingSpaces = true; + Assert.True (view.PreserveTrailingSpaces); + } + + // Setting TextFormatter DOES NOT update Text + [Fact] + public void SettingTextFormatterDoesNotUpdateText () + { + var view = new View (); + view.TextFormatter.Text = "Hello World"; + + Assert.True (string.IsNullOrEmpty (view.Text)); + } + + // Setting Text updates TextFormatter + [Fact] + public void SettingTextUpdatesTextFormatter () + { + var view = new View { Text = "Hello World" }; + + Assert.Equal ("Hello World", view.Text); + Assert.Equal ("Hello World", view.TextFormatter.Text); + } + + // Setting Text does NOT set the HotKey + [Fact] + public void Text_Does_Not_Set_HotKey () + { + var view = new View { HotKeySpecifier = (Rune)'_', Text = "_Hello World" }; + + Assert.NotEqual (Key.H, view.HotKey); + } + + // Test that TextFormatter is init only + [Fact] + public void TextFormatterIsInitOnly () + { + var view = new View (); + + // Use reflection to ensure the TextFormatter property is `init` only + Assert.Contains ( + typeof (IsExternalInit), + typeof (View).GetMethod ("set_TextFormatter") + .ReturnParameter.GetRequiredCustomModifiers ()); + } + + // Test that the Text property is set correctly. + [Fact] + public void TextProperty () + { + var view = new View { Text = "Hello World" }; + + Assert.Equal ("Hello World", view.Text); + } + + // Test view.UpdateTextFormatterText overridden in a subclass updates TextFormatter.Text + [Fact] + public void UpdateTextFormatterText_Overridden () + { + var view = new TestView { Text = "Hello World" }; + + Assert.Equal ("Hello World", view.Text); + Assert.Equal (">Hello World<", view.TextFormatter.Text); + } + + private class TestView : View + { + protected override void UpdateTextFormatterText () { TextFormatter.Text = $">{Text}<"; } + } + + [Fact] + public void TextDirection_Horizontal_Dims_Correct () + { + // Initializes a view with a vertical direction + var view = new View + { + Text = "01234", + TextDirection = TextDirection.LeftRight_TopBottom, + Width = Dim.Auto (DimAutoStyle.Text), + Height = Dim.Auto (DimAutoStyle.Text) + }; + Assert.True (view.NeedsLayout); + view.Layout (); + Assert.Equal (new (0, 0, 5, 1), view.Frame); + Assert.Equal (new (0, 0, 5, 1), view.Viewport); + + view.BeginInit (); + view.EndInit (); + Assert.Equal (new (0, 0, 5, 1), view.Frame); + Assert.Equal (new (0, 0, 5, 1), view.Viewport); + } + + // BUGBUG: this is a temporary test that helped identify #3469 - It needs to be expanded upon (and renamed) + [Fact] + public void TextDirection_Horizontal_Dims_Correct_WidthAbsolute () + { + var view = new View + { + Text = "01234", + TextDirection = TextDirection.LeftRight_TopBottom, + TextAlignment = Alignment.Center, + Width = 10, + Height = Dim.Auto (DimAutoStyle.Text) + }; + view.BeginInit (); + view.EndInit (); + Assert.Equal (new (0, 0, 10, 1), view.Frame); + Assert.Equal (new (0, 0, 10, 1), view.Viewport); + + Assert.Equal (new (10, 1), view.TextFormatter.ConstrainToSize); + } + + [Fact] + public void TextDirection_Vertical_Dims_Correct () + { + // Initializes a view with a vertical direction + var view = new View + { + TextDirection = TextDirection.TopBottom_LeftRight, + Text = "01234", + Width = Dim.Auto (DimAutoStyle.Text), + Height = Dim.Auto (DimAutoStyle.Text) + }; + view.Layout (); + Assert.Equal (new (0, 0, 1, 5), view.Frame); + Assert.Equal (new (0, 0, 1, 5), view.Viewport); + } +} diff --git a/UnitTests/View/TitleTests.cs b/Tests/UnitTestsParallelizable/View/TitleTests.cs similarity index 100% rename from UnitTests/View/TitleTests.cs rename to Tests/UnitTestsParallelizable/View/TitleTests.cs diff --git a/Tests/UnitTestsParallelizable/coverlet.runsettings b/Tests/UnitTestsParallelizable/coverlet.runsettings new file mode 100644 index 000000000..760e3718a --- /dev/null +++ b/Tests/UnitTestsParallelizable/coverlet.runsettings @@ -0,0 +1,23 @@ + + + + + + + opencover + [UnitTests]*,[UICatalog]*,[coverlet.*.tests?]*,[*]Coverlet.Core* + + + + + false + true + true + true + false + TestResults/ + + + + + \ No newline at end of file diff --git a/Tests/UnitTestsParallelizable/xunit.runner.json b/Tests/UnitTestsParallelizable/xunit.runner.json new file mode 100644 index 000000000..66c35c65f --- /dev/null +++ b/Tests/UnitTestsParallelizable/xunit.runner.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", + "parallelizeTestCollections": true, + "parallelizeAssembly": true, + "stopOnFail": false +} \ No newline at end of file diff --git a/UICatalog/Scenarios/Clipping.cs b/UICatalog/Scenarios/Clipping.cs index 4d8a701d6..fddcb8ddb 100644 --- a/UICatalog/Scenarios/Clipping.cs +++ b/UICatalog/Scenarios/Clipping.cs @@ -1,6 +1,5 @@ -using System.Text; -using System.Timers; -using Terminal.Gui; +using Terminal.Gui; +using Timer = System.Timers.Timer; namespace UICatalog.Scenarios; @@ -20,21 +19,22 @@ public class Clipping : Scenario Window app = new () { - Title = GetQuitKeyAndName (), + Title = GetQuitKeyAndName () + //BorderStyle = LineStyle.None }; app.DrawingContent += (s, e) => - { - app!.FillRect (app!.Viewport, Glyphs.Dot); - e.Cancel = true; - }; + { + app!.FillRect (app!.Viewport, Glyphs.Dot); + e.Cancel = true; + }; - var arrangementEditor = new ArrangementEditor () + var arrangementEditor = new ArrangementEditor { X = Pos.AnchorEnd (), Y = 0, - AutoSelectViewToEdit = true, + AutoSelectViewToEdit = true }; app.Add (arrangementEditor); @@ -48,7 +48,7 @@ public class Clipping : Scenario Y = Pos.AnchorEnd (), Width = Dim.Fill (), Id = "tiledProgressBar", - BidirectionalMarquee = true, + BidirectionalMarquee = true }; tiledView1.Add (tiledProgressBar1); @@ -62,6 +62,7 @@ public class Clipping : Scenario Id = "tiledProgressBar", BidirectionalMarquee = true, ProgressBarStyle = ProgressBarStyle.MarqueeBlocks + // BorderStyle = LineStyle.Rounded }; tiledView2.Add (tiledProgressBar2); @@ -84,7 +85,6 @@ public class Clipping : Scenario //}; //overlappedView1.Add (progressBar); - //View overlappedView2 = CreateOverlappedView (2, 32, 4); //View overlappedView3 = CreateOverlappedView (3, 34, 6); @@ -92,7 +92,7 @@ public class Clipping : Scenario //app.Add (overlappedView2); //app.Add (overlappedView3); - Timer progressTimer = new Timer (150) + var progressTimer = new Timer (150) { AutoReset = true }; @@ -109,8 +109,6 @@ public class Clipping : Scenario progressTimer.Stop (); app.Dispose (); Application.Shutdown (); - - return; } private View CreateOverlappedView (int id, Pos x, Pos y) @@ -130,6 +128,7 @@ public class Clipping : Scenario TabStop = TabBehavior.TabGroup, Arrangement = ViewArrangement.Movable | ViewArrangement.Overlapped | ViewArrangement.Resizable }; + return overlapped; } @@ -148,8 +147,9 @@ public class Clipping : Scenario CanFocus = true, // Can't drag without this? BUGBUG TabStop = TabBehavior.TabStop, Arrangement = ViewArrangement.Movable | ViewArrangement.Resizable, - ShadowStyle = ShadowStyle.Transparent, + ShadowStyle = ShadowStyle.Transparent }; + //tiled.Padding.Thickness = new (1); //tiled.Padding.Diagnostics = ViewDiagnosticFlags.Thickness; @@ -159,7 +159,7 @@ public class Clipping : Scenario { Title = "FrameView", Width = 15, - Height = 3, + Height = 3 }; tiled.Add (fv); diff --git a/UICatalog/Scenarios/Shortcuts.cs b/UICatalog/Scenarios/Shortcuts.cs index 32d82491b..2a7724358 100644 --- a/UICatalog/Scenarios/Shortcuts.cs +++ b/UICatalog/Scenarios/Shortcuts.cs @@ -6,6 +6,7 @@ using System.Collections.ObjectModel; using System.Linq; using System.Timers; using Terminal.Gui; +using Timer = System.Timers.Timer; namespace UICatalog.Scenarios; diff --git a/UICatalog/UICatalog.cs b/UICatalog/UICatalog.cs index 3ff3035dd..e661097d6 100644 --- a/UICatalog/UICatalog.cs +++ b/UICatalog/UICatalog.cs @@ -455,7 +455,7 @@ public class UICatalogApp scenario.TopLevelColorScheme = _topLevelColorScheme; #if DEBUG_IDISPOSABLE - + View.DebugIDisposable = true; // Measure how long it takes for the app to shut down var sw = new Stopwatch (); string scenarioName = scenario.GetName (); @@ -685,6 +685,10 @@ public class UICatalogApp private static void VerifyObjectsWereDisposed () { #if DEBUG_IDISPOSABLE + if (!View.DebugIDisposable) + { + return; + } // Validate there are no outstanding Responder-based instances // after a scenario was selected to run. This proves the main UI Catalog @@ -1356,7 +1360,7 @@ public class UICatalogApp //CanExecute = () => false }); - return menuItems.ToArray (); + return menuItems.ToArray ()!; } // TODO: This should be an ConfigurationManager setting diff --git a/UICatalog/UICatalog.csproj b/UICatalog/UICatalog.csproj index aba324a4c..f0b5a8760 100644 --- a/UICatalog/UICatalog.csproj +++ b/UICatalog/UICatalog.csproj @@ -1,55 +1,53 @@  - - Exe - net8.0 - UICatalog.UICatalogApp - 12 - - - - 2.0 - 2.0 - 2.0 - 2.0 - Linux - - - TRACE - - - TRACE;DEBUG_IDISPOSABLE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + UICatalog.UICatalogApp + Exe + + + + 2.0 + 2.0 + 2.0 + 2.0 + Linux + + + TRACE + + + TRACE;DEBUG_IDISPOSABLE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/UnitTests/README.md b/UnitTests/README.md deleted file mode 100644 index 3f3731b09..000000000 --- a/UnitTests/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Automated Unit Tests - -`Terminal.Gui` uses [xunit](https://xunit.net/) for automated unit tests run automatically with Github Actions. - -See the [Testing wiki](https://github.com/gui-cs/Terminal.Gui/wiki/Testing) for details on how to add more tests. diff --git a/UnitTests/TestHelpers.cs b/UnitTests/TestHelpers.cs deleted file mode 100644 index ed687e61b..000000000 --- a/UnitTests/TestHelpers.cs +++ /dev/null @@ -1,759 +0,0 @@ -using System.Diagnostics; -using System.Globalization; -using System.Reflection; -using System.Text; -using System.Text.RegularExpressions; -using Xunit.Abstractions; -using Xunit.Sdk; -using static Terminal.Gui.ConfigurationManager; - -namespace Terminal.Gui; - -/// -/// This class enables test functions annotated with the [AutoInitShutdown] attribute to -/// automatically call Application.Init at start of the test and Application.Shutdown after the -/// test exits. -/// This is necessary because a) Application is a singleton and Init/Shutdown must be called -/// as a pair, and b) all unit test functions should be atomic.. -/// -[AttributeUsage (AttributeTargets.Class | AttributeTargets.Method)] -public class AutoInitShutdownAttribute : BeforeAfterTestAttribute -{ - /// - /// Initializes a [AutoInitShutdown] attribute, which determines if/how Application.Init and Application.Shutdown - /// are automatically called Before/After a test runs. - /// - /// If true, Application.Init will be called Before the test runs. - /// - /// Determines which IConsoleDriver (FakeDriver, WindowsDriver, CursesDriver, NetDriver) - /// will be used when Application.Init is called. If null FakeDriver will be used. Only valid if - /// is true. - /// - /// - /// If true, will force the use of . Only valid if - /// == and is true. - /// - /// - /// Only valid if is true. Only - /// valid if == and is true. - /// - /// - /// Only valid if is true. Only valid if - /// == and is true. - /// - /// Determines what config file locations will load from. - /// If true and is true, the test will fail. - public AutoInitShutdownAttribute ( - bool autoInit = true, - Type consoleDriverType = null, - bool useFakeClipboard = true, - bool fakeClipboardAlwaysThrowsNotSupportedException = false, - bool fakeClipboardIsSupportedAlwaysTrue = false, - ConfigLocations configLocation = ConfigLocations.Default, // DefaultOnly is the default for tests - bool verifyShutdown = false - ) - { - AutoInit = autoInit; - CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.GetCultureInfo ("en-US"); - _driverType = consoleDriverType ?? typeof (FakeDriver); - FakeDriver.FakeBehaviors.UseFakeClipboard = useFakeClipboard; - - FakeDriver.FakeBehaviors.FakeClipboardAlwaysThrowsNotSupportedException = - fakeClipboardAlwaysThrowsNotSupportedException; - FakeDriver.FakeBehaviors.FakeClipboardIsSupportedAlwaysFalse = fakeClipboardIsSupportedAlwaysTrue; - Locations = configLocation; - _verifyShutdown = verifyShutdown; - } - - private readonly bool _verifyShutdown; - private readonly Type _driverType; - - public override void After (MethodInfo methodUnderTest) - { - Debug.WriteLine ($"After: {methodUnderTest.Name}"); - - // Turn off diagnostic flags in case some test left them on - View.Diagnostics = ViewDiagnosticFlags.Off; - - if (AutoInit) - { - // try - { - if (!_verifyShutdown) - { - Application.ResetState (ignoreDisposed: true); - } - - Application.Shutdown (); -#if DEBUG_IDISPOSABLE - if (View.Instances.Count == 0) - { - Assert.Empty (View.Instances); - } - else - { - View.Instances.Clear (); - } -#endif - } - //catch (Exception e) - //{ - // Assert.Fail ($"Application.Shutdown threw an exception after the test exited: {e}"); - //} - //finally - { -#if DEBUG_IDISPOSABLE - View.Instances.Clear (); - Application.ResetState (true); -#endif - } - } - - // Reset to defaults - Locations = ConfigLocations.Default; - Reset (); - - // Enable subsequent tests that call Init to get all config files (the default). - //Locations = ConfigLocations.All; - } - - public override void Before (MethodInfo methodUnderTest) - { - Debug.WriteLine ($"Before: {methodUnderTest.Name}"); - - if (AutoInit) - { -#if DEBUG_IDISPOSABLE - - // Clear out any lingering Responder instances from previous tests - if (View.Instances.Count == 0) - { - Assert.Empty (View.Instances); - } - else - { - View.Instances.Clear (); - } -#endif - Application.Init ((IConsoleDriver)Activator.CreateInstance (_driverType)); - } - } - - private bool AutoInit { get; } -} - -/// -/// Enables test functions annotated with the [TestRespondersDisposed] attribute to ensure all Views are disposed. -/// -/// -/// On Before, sets Configuration.Locations to ConfigLocations.DefaultOnly. -/// On After, sets Configuration.Locations to ConfigLocations.All. -/// -[AttributeUsage (AttributeTargets.Class | AttributeTargets.Method)] -public class TestRespondersDisposed : BeforeAfterTestAttribute -{ - public TestRespondersDisposed () { CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.GetCultureInfo ("en-US"); } - - public override void After (MethodInfo methodUnderTest) - { - Debug.WriteLine ($"After: {methodUnderTest.Name}"); - base.After (methodUnderTest); - -#if DEBUG_IDISPOSABLE - Assert.Empty (View.Instances); -#endif - } - - public override void Before (MethodInfo methodUnderTest) - { - Debug.WriteLine ($"Before: {methodUnderTest.Name}"); - - base.Before (methodUnderTest); -#if DEBUG_IDISPOSABLE - - // Clear out any lingering Responder instances from previous tests - View.Instances.Clear (); - Assert.Empty (View.Instances); -#endif - } -} - -// TODO: Make this inherit from TestRespondersDisposed so that all tests that don't dispose Views correctly can be identified and fixed -/// -/// Enables test functions annotated with the [SetupFakeDriver] attribute to set Application.Driver to new -/// FakeDriver(). The driver is set up with 25 rows and columns. -/// -/// -/// On Before, sets Configuration.Locations to ConfigLocations.DefaultOnly. -/// On After, sets Configuration.Locations to ConfigLocations.All. -/// -[AttributeUsage (AttributeTargets.Class | AttributeTargets.Method)] -public class SetupFakeDriverAttribute : BeforeAfterTestAttribute -{ - public override void After (MethodInfo methodUnderTest) - { - Debug.WriteLine ($"After: {methodUnderTest.Name}"); - - // Turn off diagnostic flags in case some test left them on - View.Diagnostics = ViewDiagnosticFlags.Off; - - Application.ResetState (true); - Assert.Null (Application.Driver); - Assert.Equal (new (0, 0, 2048, 2048), Application.Screen); - base.After (methodUnderTest); - } - - public override void Before (MethodInfo methodUnderTest) - { - Debug.WriteLine ($"Before: {methodUnderTest.Name}"); - - Application.ResetState (true); - Assert.Null (Application.Driver); - Application.Driver = new FakeDriver { Rows = 25, Cols = 25 }; - Assert.Equal (new (0, 0, 25, 25), Application.Screen); - // Ensures subscribing events, at least for the SizeChanged event - Application.SubscribeDriverEvents (); - - base.Before (methodUnderTest); - } -} - -[AttributeUsage (AttributeTargets.Class | AttributeTargets.Method)] -public class TestDateAttribute : BeforeAfterTestAttribute -{ - public TestDateAttribute () { CultureInfo.CurrentCulture = CultureInfo.InvariantCulture; } - private readonly CultureInfo _currentCulture = CultureInfo.CurrentCulture; - - public override void After (MethodInfo methodUnderTest) - { - CultureInfo.CurrentCulture = _currentCulture; - Assert.Equal (CultureInfo.CurrentCulture, _currentCulture); - } - - public override void Before (MethodInfo methodUnderTest) { Assert.Equal (CultureInfo.CurrentCulture, CultureInfo.InvariantCulture); } -} - -internal partial class TestHelpers -{ - private const char SpaceChar = ' '; - private static readonly Rune SpaceRune = (Rune)SpaceChar; -#pragma warning disable xUnit1013 // Public method should be marked as test - /// - /// Verifies are found at the locations specified by - /// . is a bitmap of indexes into - /// (e.g. "00110" means the attribute at expectedAttributes[1] is expected - /// at the 3rd and 4th columns of the 1st row of driver.Contents). - /// - /// - /// Numbers between 0 and 9 for each row/col of the console. Must be valid indexes into - /// . - /// - /// - /// The IConsoleDriver to use. If null will be used. - /// - public static void AssertDriverAttributesAre ( - string expectedLook, - ITestOutputHelper output, - IConsoleDriver driver = null, - params Attribute [] expectedAttributes - ) - { -#pragma warning restore xUnit1013 // Public method should be marked as test - - if (expectedAttributes.Length > 10) - { - throw new ArgumentException ("This method only works for UIs that use at most 10 colors"); - } - - expectedLook = expectedLook.Trim (); - driver ??= Application.Driver; - - Cell [,] contents = driver.Contents; - - var line = 0; - - foreach (string lineString in expectedLook.Split ('\n').Select (l => l.Trim ())) - { - for (var c = 0; c < lineString.Length; c++) - { - Attribute? val = contents [line, c].Attribute; - - List match = expectedAttributes.Where (e => e == val).ToList (); - - switch (match.Count) - { - case 0: - output.WriteLine ( - $"{Application.ToString (driver)}\n" - + $"Expected Attribute {val} (PlatformColor = {val.Value.PlatformColor}) at Contents[{line},{c}] {contents [line, c]} ((PlatformColor = {contents [line, c].Attribute.Value.PlatformColor}) was not found.\n" - + $" Expected: {string.Join (",", expectedAttributes.Select (c => c))}\n" - + $" But Was: " - ); - Assert.Empty (match); - return; - case > 1: - throw new ArgumentException ( - $"Bad value for expectedColors, {match.Count} Attributes had the same Value" - ); - } - - char colorUsed = Array.IndexOf (expectedAttributes, match [0]).ToString () [0]; - char userExpected = lineString [c]; - - if (colorUsed != userExpected) - { - output.WriteLine ($"{Application.ToString (driver)}"); - output.WriteLine ($"Unexpected Attribute at Contents[{line},{c}] {contents [line, c]}."); - output.WriteLine ($" Expected: {userExpected} ({expectedAttributes [int.Parse (userExpected.ToString ())]})"); - output.WriteLine ($" But Was: {colorUsed} ({val})"); - Assert.Equal (userExpected, colorUsed); - return; - } - } - - line++; - } - } - -#pragma warning disable xUnit1013 // Public method should be marked as test - /// Asserts that the driver contents match the expected contents, optionally ignoring any trailing whitespace. - /// - /// - /// The IConsoleDriver to use. If null will be used. - /// - public static void AssertDriverContentsAre ( - string expectedLook, - ITestOutputHelper output, - IConsoleDriver driver = null, - bool ignoreLeadingWhitespace = false - ) - { -#pragma warning restore xUnit1013 // Public method should be marked as test - var actualLook = Application.ToString (driver ?? Application.Driver); - - if (string.Equals (expectedLook, actualLook)) - { - return; - } - - // get rid of trailing whitespace on each line (and leading/trailing whitespace of start/end of full string) - expectedLook = TrailingWhiteSpaceRegEx ().Replace (expectedLook, "").Trim (); - actualLook = TrailingWhiteSpaceRegEx ().Replace (actualLook, "").Trim (); - - if (ignoreLeadingWhitespace) - { - expectedLook = LeadingWhitespaceRegEx ().Replace (expectedLook, "").Trim (); - actualLook = LeadingWhitespaceRegEx ().Replace (actualLook, "").Trim (); - } - - // standardize line endings for the comparison - expectedLook = expectedLook.Replace ("\r\n", "\n"); - actualLook = actualLook.Replace ("\r\n", "\n"); - - // If test is about to fail show user what things looked like - if (!string.Equals (expectedLook, actualLook)) - { - output?.WriteLine ("Expected:" + Environment.NewLine + expectedLook); - output?.WriteLine (" But Was:" + Environment.NewLine + actualLook); - } - - Assert.Equal (expectedLook, actualLook); - } - - /// - /// Asserts that the driver contents are equal to the provided string. - /// - /// - /// - /// The IConsoleDriver to use. If null will be used. - /// - public static Rectangle AssertDriverContentsWithFrameAre ( - string expectedLook, - ITestOutputHelper output, - IConsoleDriver driver = null - ) - { - List> lines = new (); - var sb = new StringBuilder (); - driver ??= Application.Driver; - int x = -1; - int y = -1; - int w = -1; - int h = -1; - - Cell [,] contents = driver.Contents; - - for (var rowIndex = 0; rowIndex < driver.Rows; rowIndex++) - { - List runes = []; - - for (var colIndex = 0; colIndex < driver.Cols; colIndex++) - { - Rune runeAtCurrentLocation = contents [rowIndex, colIndex].Rune; - - if (runeAtCurrentLocation != SpaceRune) - { - if (x == -1) - { - x = colIndex; - y = rowIndex; - - for (var i = 0; i < colIndex; i++) - { - runes.InsertRange (i, [SpaceRune]); - } - } - - if (runeAtCurrentLocation.GetColumns () > 1) - { - colIndex++; - } - - if (colIndex + 1 > w) - { - w = colIndex + 1; - } - - h = rowIndex - y + 1; - } - - if (x > -1) - { - runes.Add (runeAtCurrentLocation); - } - - // See Issue #2616 - //foreach (var combMark in contents [r, c].CombiningMarks) { - // runes.Add (combMark); - //} - } - - if (runes.Count > 0) - { - lines.Add (runes); - } - } - - // Remove unnecessary empty lines - if (lines.Count > 0) - { - for (int r = lines.Count - 1; r > h - 1; r--) - { - lines.RemoveAt (r); - } - } - - // Remove trailing whitespace on each line - foreach (List row in lines) - { - for (int c = row.Count - 1; c >= 0; c--) - { - Rune rune = row [c]; - - if (rune != (Rune)' ' || row.Sum (x => x.GetColumns ()) == w) - { - break; - } - - row.RemoveAt (c); - } - } - - // Convert Rune list to string - for (var r = 0; r < lines.Count; r++) - { - var line = StringExtensions.ToString (lines [r]); - - if (r == lines.Count - 1) - { - sb.Append (line); - } - else - { - sb.AppendLine (line); - } - } - - var actualLook = sb.ToString (); - - if (string.Equals (expectedLook, actualLook)) - { - return new (x > -1 ? x : 0, y > -1 ? y : 0, w > -1 ? w : 0, h > -1 ? h : 0); - } - - // standardize line endings for the comparison - expectedLook = expectedLook.ReplaceLineEndings (); - actualLook = actualLook.ReplaceLineEndings (); - - // Remove the first and the last line ending from the expectedLook - if (expectedLook.StartsWith (Environment.NewLine)) - { - expectedLook = expectedLook [Environment.NewLine.Length..]; - } - - if (expectedLook.EndsWith (Environment.NewLine)) - { - expectedLook = expectedLook [..^Environment.NewLine.Length]; - } - - // If test is about to fail show user what things looked like - if (!string.Equals (expectedLook, actualLook)) - { - output?.WriteLine ("Expected:" + Environment.NewLine + expectedLook); - output?.WriteLine (" But Was:" + Environment.NewLine + actualLook); - } - - Assert.Equal (expectedLook, actualLook); - - return new (x > -1 ? x : 0, y > -1 ? y : 0, w > -1 ? w : 0, h > -1 ? h : 0); - } - -#pragma warning disable xUnit1013 // Public method should be marked as test - /// - /// Verifies two strings are equivalent. If the assert fails, output will be generated to standard output showing - /// the expected and actual look. - /// - /// - /// - /// A string containing the expected look. Newlines should be specified as "\r\n" as they will - /// be converted to to make tests platform independent. - /// - /// - public static void AssertEqual (ITestOutputHelper output, string expectedLook, string actualLook) - { - // Convert newlines to platform-specific newlines - expectedLook = ReplaceNewLinesToPlatformSpecific (expectedLook); - - // If test is about to fail show user what things looked like - if (!string.Equals (expectedLook, actualLook)) - { - output?.WriteLine ("Expected:" + Environment.NewLine + expectedLook); - output?.WriteLine (" But Was:" + Environment.NewLine + actualLook); - } - - Assert.Equal (expectedLook, actualLook); - } -#pragma warning restore xUnit1013 // Public method should be marked as test - - public static View CreateViewFromType (Type type, ConstructorInfo ctor) - { - View viewType = null; - - if (type.IsGenericType && type.IsTypeDefinition) - { - List gTypes = new (); - - foreach (Type args in type.GetGenericArguments ()) - { - gTypes.Add (typeof (object)); - } - - type = type.MakeGenericType (gTypes.ToArray ()); - - Assert.IsType (type, (View)Activator.CreateInstance (type)); - } - else - { - ParameterInfo [] paramsInfo = ctor.GetParameters (); - Type paramType; - List pTypes = new (); - - if (type.IsGenericType) - { - foreach (Type args in type.GetGenericArguments ()) - { - paramType = args.GetType (); - - if (args.Name == "T") - { - pTypes.Add (typeof (object)); - } - else - { - AddArguments (paramType, pTypes); - } - } - } - - foreach (ParameterInfo p in paramsInfo) - { - paramType = p.ParameterType; - - if (p.HasDefaultValue) - { - pTypes.Add (p.DefaultValue); - } - else - { - AddArguments (paramType, pTypes); - } - } - - if (type.IsGenericType && !type.IsTypeDefinition) - { - viewType = (View)Activator.CreateInstance (type); - Assert.IsType (type, viewType); - } - else - { - viewType = (View)ctor.Invoke (pTypes.ToArray ()); - Assert.IsType (type, viewType); - } - } - - return viewType; - } - - public static List GetAllViewClasses () - { - return typeof (View).Assembly.GetTypes () - .Where ( - myType => myType.IsClass - && !myType.IsAbstract - && myType.IsPublic - && myType.IsSubclassOf (typeof (View)) - ) - .ToList (); - } - - /// - /// Verifies the console used all the when rendering. If one or more of the - /// expected colors are not used then the failure will output both the colors that were found to be used and which of - /// your expectations was not met. - /// - /// if null uses - /// - internal static void AssertDriverUsedColors (IConsoleDriver driver = null, params Attribute [] expectedColors) - { - driver ??= Application.Driver; - Cell [,] contents = driver.Contents; - - List toFind = expectedColors.ToList (); - - // Contents 3rd column is an Attribute - HashSet colorsUsed = new (); - - for (var r = 0; r < driver.Rows; r++) - { - for (var c = 0; c < driver.Cols; c++) - { - Attribute? val = contents [r, c].Attribute; - - if (val.HasValue) - { - colorsUsed.Add (val.Value); - - Attribute match = toFind.FirstOrDefault (e => e == val); - - // need to check twice because Attribute is a struct and therefore cannot be null - if (toFind.Any (e => e == val)) - { - toFind.Remove (match); - } - } - } - } - - if (!toFind.Any ()) - { - return; - } - - var sb = new StringBuilder (); - sb.AppendLine ("The following colors were not used:" + string.Join ("; ", toFind.Select (a => a.ToString ()))); - sb.AppendLine ("Colors used were:" + string.Join ("; ", colorsUsed.Select (a => a.ToString ()))); - - throw new (sb.ToString ()); - } - - private static void AddArguments (Type paramType, List pTypes) - { - if (paramType == typeof (Rectangle)) - { - pTypes.Add (Rectangle.Empty); - } - else if (paramType == typeof (string)) - { - pTypes.Add (string.Empty); - } - else if (paramType == typeof (int)) - { - pTypes.Add (0); - } - else if (paramType == typeof (bool)) - { - pTypes.Add (true); - } - else if (paramType.Name == "IList") - { - pTypes.Add (new List ()); - } - else if (paramType.Name == "View") - { - var top = new Toplevel (); - var view = new View (); - top.Add (view); - pTypes.Add (view); - } - else if (paramType.Name == "View[]") - { - pTypes.Add (new View [] { }); - } - else if (paramType.Name == "Stream") - { - pTypes.Add (new MemoryStream ()); - } - else if (paramType.Name == "String") - { - pTypes.Add (string.Empty); - } - else if (paramType.Name == "TreeView`1[T]") - { - pTypes.Add (string.Empty); - } - else - { - pTypes.Add (null); - } - } - - [GeneratedRegex ("^\\s+", RegexOptions.Multiline)] - private static partial Regex LeadingWhitespaceRegEx (); - - private static string ReplaceNewLinesToPlatformSpecific (string toReplace) - { - string replaced = toReplace; - - replaced = Environment.NewLine.Length switch - { - 2 when !replaced.Contains ("\r\n") => replaced.Replace ("\n", Environment.NewLine), - 1 => replaced.Replace ("\r\n", Environment.NewLine), - var _ => replaced - }; - - return replaced; - } - - [GeneratedRegex ("\\s+$", RegexOptions.Multiline)] - private static partial Regex TrailingWhiteSpaceRegEx (); -} - -public class TestsAllViews -{ - public static IEnumerable AllViewTypes => - typeof (View).Assembly - .GetTypes () - .Where (type => type.IsClass && !type.IsAbstract && type.IsPublic && (type.IsSubclassOf (typeof (View)) || type == typeof (View))) - .Select (type => new object [] { type }); - - public static View CreateInstanceIfNotGeneric (Type type) - { - if (type.IsGenericType) - { - // Return null for generic types - return null; - } - - return Activator.CreateInstance (type) as View; - } -} diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj deleted file mode 100644 index c574ea37c..000000000 --- a/UnitTests/UnitTests.csproj +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - 2.0 - 2.0 - 2.0 - 2.0 - - - net8.0 - 12 - false - - true - true - portable - $(DefineConstants);JETBRAINS_ANNOTATIONS;CONTRACTS_FULL - enable - true - true - - - true - $(DefineConstants);DEBUG_IDISPOSABLE - - - true - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - PreserveNewest - - - - - - - - - - - - - False - - - [UICatalog]* - - - - - - - - - - False - - - diff --git a/UnitTests/View/Adornment/ShadowStyletests.cs b/UnitTests/View/Adornment/ShadowStyletests.cs deleted file mode 100644 index bc1088789..000000000 --- a/UnitTests/View/Adornment/ShadowStyletests.cs +++ /dev/null @@ -1,222 +0,0 @@ -using Xunit.Abstractions; - -namespace Terminal.Gui.ViewTests; - -public class ShadowStyleTests (ITestOutputHelper output) -{ - [Fact] - public void Default_None () - { - var view = new View (); - Assert.Equal (ShadowStyle.None, view.ShadowStyle); - Assert.Equal (ShadowStyle.None, view.Margin.ShadowStyle); - view.Dispose (); - } - - [Theory] - [InlineData (ShadowStyle.None)] - [InlineData (ShadowStyle.Opaque)] - [InlineData (ShadowStyle.Transparent)] - public void Set_View_Sets_Margin (ShadowStyle style) - { - var view = new View (); - - view.ShadowStyle = style; - Assert.Equal (style, view.ShadowStyle); - Assert.Equal (style, view.Margin.ShadowStyle); - view.Dispose (); - } - - [Theory] - [InlineData (ShadowStyle.None, 0, 0, 0, 0)] - [InlineData (ShadowStyle.Opaque, 1, 0, 0, 1)] - [InlineData (ShadowStyle.Transparent, 1, 0, 0, 1)] - public void ShadowStyle_Button1Pressed_Causes_Movement (ShadowStyle style, int expectedLeft, int expectedTop, int expectedRight, int expectedBottom) - { - var superView = new View - { - Height = 10, Width = 10 - }; - - View view = new () - { - Width = Dim.Auto (), - Height = Dim.Auto (), - Text = "0123", - HighlightStyle = HighlightStyle.Pressed, - ShadowStyle = style, - CanFocus = true - }; - - superView.Add (view); - superView.BeginInit (); - superView.EndInit (); - - Thickness origThickness = view.Margin.Thickness; - view.NewMouseEvent (new () { Flags = MouseFlags.Button1Pressed, Position = new (0, 0) }); - Assert.Equal (new (expectedLeft, expectedTop, expectedRight, expectedBottom), view.Margin.Thickness); - - view.NewMouseEvent (new () { Flags = MouseFlags.Button1Released, Position = new (0, 0) }); - Assert.Equal (origThickness, view.Margin.Thickness); - } - - [Theory] - [InlineData (ShadowStyle.None, 0, 0, 0, 0)] - [InlineData (ShadowStyle.Opaque, 0, 0, 1, 1)] - [InlineData (ShadowStyle.Transparent, 0, 0, 1, 1)] - public void ShadowStyle_Margin_Thickness (ShadowStyle style, int expectedLeft, int expectedTop, int expectedRight, int expectedBottom) - { - var superView = new View - { - Height = 10, Width = 10 - }; - - View view = new () - { - Width = Dim.Auto (), - Height = Dim.Auto (), - Text = "0123", - HighlightStyle = HighlightStyle.Pressed, - ShadowStyle = style, - CanFocus = true - }; - - superView.Add (view); - superView.BeginInit (); - superView.EndInit (); - - Assert.Equal (new (expectedLeft, expectedTop, expectedRight, expectedBottom), view.Margin.Thickness); - } - - [Theory (Skip = "#3761 Broke - Need to figure out transparent margin.")] - [InlineData ( - ShadowStyle.None, - """ - 011 - 111 - 111 - """)] - [InlineData ( - ShadowStyle.Transparent, - """ - 031 - 131 - 111 - """)] - [InlineData ( - ShadowStyle.Opaque, - """ - 021 - 221 - 111 - """)] - [SetupFakeDriver] - public void ShadowView_Colors (ShadowStyle style, string expectedAttrs) - { - Color fg = Color.Red; - Color bg = Color.Green; - - // 0 - View - // 1 - SuperView - // 2 - Opaque - fg is Black, bg is SuperView.Bg - // 3 - Transparent - fg is darker fg, bg is darker bg - Attribute [] attributes = - { - Attribute.Default, - new (fg, bg), - new (Color.Black, bg), - new (fg.GetDarkerColor (), bg.GetDarkerColor ()) - }; - - var superView = new View - { - Height = 3, - Width = 3, - Text = "012ABC!@#", - ColorScheme = new (new Attribute (fg, bg)) - }; - superView.TextFormatter.WordWrap = true; - - View view = new () - { - Width = Dim.Auto (), - Height = Dim.Auto (), - Text = " ", - ShadowStyle = style, - ColorScheme = new (Attribute.Default) - }; - superView.Add (view); - superView.Layout (); - superView.Draw (); - TestHelpers.AssertDriverAttributesAre (expectedAttrs, output, Application.Driver, attributes); - } - - [Theory (Skip = "#3761 Broke - Need to figure out transparent margin.")] - [InlineData (ShadowStyle.None, 3)] - [InlineData (ShadowStyle.Opaque, 4)] - [InlineData (ShadowStyle.Transparent, 4)] - public void Style_Changes_Magin_Thickness (ShadowStyle style, int expected) - { - var view = new View (); - view.Margin.Thickness = new (3); - view.ShadowStyle = style; - Assert.Equal (new (3, 3, expected, expected), view.Margin.Thickness); - - view.ShadowStyle = ShadowStyle.None; - Assert.Equal (new (3), view.Margin.Thickness); - view.Dispose (); - } - - // Visual tests - [Theory (Skip = "#3761 Broke - Need to figure out transparent margin.")] - [InlineData ( - ShadowStyle.None, - """ - 01#$ - AB#$ - !@#$ - !@#$ - """)] - [InlineData ( - ShadowStyle.Opaque, - """ - 01▖$ - AB▌$ - ▝▀▘$ - !@#$ - """)] - [InlineData ( - ShadowStyle.Transparent, - """ - 01#$ - AB#$ - !@#$ - !@#$ - """)] - [SetupFakeDriver] - public void Visual_Test (ShadowStyle style, string expected) - { - var superView = new View - { - Width = 4, - Height = 4, - Text = "!@#$".Repeat (4) - }; - superView.TextFormatter.WordWrap = true; - - var view = new View - { - Text = "01\nAB", - Width = Dim.Auto (), - Height = Dim.Auto () - }; - view.ShadowStyle = style; - superView.Add (view); - superView.BeginInit (); - superView.EndInit (); - superView.Draw (); - - TestHelpers.AssertDriverContentsWithFrameAre (expected, output); - view.Dispose (); - } -} diff --git a/UnitTests/View/Adornment/ToScreenTests.cs b/UnitTests/View/Adornment/ToScreenTests.cs deleted file mode 100644 index 621f52b2f..000000000 --- a/UnitTests/View/Adornment/ToScreenTests.cs +++ /dev/null @@ -1,514 +0,0 @@ -using Xunit.Abstractions; - -namespace Terminal.Gui.ViewTests; - -/// -/// Test the and methods. -/// DOES NOT TEST View.xxxToScreen methods. Those are in ./View/Layout/ToScreenTests.cs -/// -/// -public class AdornmentToScreenTests (ITestOutputHelper output) -{ - private readonly ITestOutputHelper _output = output; - - [Theory] - [InlineData (0, 0)] - [InlineData (1, 1)] - [InlineData (-1, -1)] - [InlineData (11, 11)] - public void FrameToScreen_NoSuperView_WithoutAdornments (int x, int expectedX) - { - // We test with only X because Y is equivalent. Height/Width are irrelevant. - // Arrange - var frame = new Rectangle (x, 0, 10, 10); - - var view = new View (); - view.Frame = frame; - - // Act - var marginScreen = view.Margin.FrameToScreen(); - var borderScreen = view.Border.FrameToScreen (); - var paddingScreen = view.Padding.FrameToScreen (); - - // Assert - Assert.Equal(expectedX, marginScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left, borderScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left + view.Border.Thickness.Left, paddingScreen.X); - } - - [Theory] - [InlineData (0, 0)] - [InlineData (1, 1)] - [InlineData (-1, -1)] - [InlineData (11, 11)] - public void FrameToScreen_NoSuperView_WithAdornments (int x, int expectedX) - { - // We test with only X because Y is equivalent. Height/Width are irrelevant. - // Arrange - var frame = new Rectangle (x, 0, 10, 10); - - var view = new View (); - view.Border.Thickness = new (1); - view.Frame = frame; - - // Act - var marginScreen = view.Margin.FrameToScreen (); - var borderScreen = view.Border.FrameToScreen (); - var paddingScreen = view.Padding.FrameToScreen (); - - // Assert - Assert.Equal (expectedX, marginScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left, borderScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left + view.Border.Thickness.Left, paddingScreen.X); - } - - [Theory] - [InlineData (0, 0)] - [InlineData (1, 1)] - [InlineData (-1, -1)] - [InlineData (11, 11)] - public void FrameToScreen_SuperView_WithoutAdornments (int x, int expectedX) - { - // We test with only X because Y is equivalent. Height/Width are irrelevant. - // Arrange - var frame = new Rectangle (x, 0, 10, 10); - - var superView = new View () - { - X = 0, - Y = 0, - Height = Dim.Fill (), - Width = Dim.Fill () - }; - - var view = new View (); - view.Frame = frame; - - superView.Add (view); - superView.LayoutSubviews (); - - // Act - var marginScreen = view.Margin.FrameToScreen (); - var borderScreen = view.Border.FrameToScreen (); - var paddingScreen = view.Padding.FrameToScreen (); - - // Assert - Assert.Equal (expectedX, marginScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left, borderScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left + view.Border.Thickness.Left, paddingScreen.X); - } - - [Theory] - [InlineData (0, 3)] - [InlineData (1, 4)] - [InlineData (-1, 2)] - [InlineData (11, 14)] - public void FrameToScreen_SuperView_WithAdornments (int x, int expectedX) - { - // We test with only X because Y is equivalent. Height/Width are irrelevant. - // Arrange - var frame = new Rectangle (x, 0, 10, 10); - - var superView = new View () - { - X = 0, - Y = 0, - Height = Dim.Fill (), - Width = Dim.Fill () - }; - superView.Margin.Thickness = new (1); - superView.Border.Thickness = new (1); - superView.Padding.Thickness = new (1); - - var view = new View (); - view.Frame = frame; - - superView.Add (view); - superView.LayoutSubviews (); - - // Act - var marginScreen = view.Margin.FrameToScreen (); - var borderScreen = view.Border.FrameToScreen (); - var paddingScreen = view.Padding.FrameToScreen (); - - // Assert - Assert.Equal (expectedX, marginScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left, borderScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left + view.Border.Thickness.Left, paddingScreen.X); - } - - [Theory] - [InlineData (0, 0)] - [InlineData (1, 1)] - [InlineData (-1, -1)] - [InlineData (11, 11)] - public void FrameToScreen_NestedSuperView_WithoutAdornments (int x, int expectedX) - { - // We test with only X because Y is equivalent. Height/Width are irrelevant. - // Arrange - var frame = new Rectangle (x, 0, 10, 10); - - var superSuperView = new View () - { - X = 0, - Y = 0, - Height = Dim.Fill (), - Width = Dim.Fill () - }; - - var superView = new View () - { - X = 0, - Y = 0, - Height = Dim.Fill (), - Width = Dim.Fill () - }; - - superSuperView.Add (superView); - - var view = new View (); - view.Frame = frame; - - superView.Add (view); - superView.LayoutSubviews (); - - // Act - var marginScreen = view.Margin.FrameToScreen (); - var borderScreen = view.Border.FrameToScreen (); - var paddingScreen = view.Padding.FrameToScreen (); - - // Assert - Assert.Equal (expectedX, marginScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left, borderScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left + view.Border.Thickness.Left, paddingScreen.X); - } - - [Theory] - [InlineData (0, 6)] - [InlineData (1, 7)] - [InlineData (-1, 5)] - [InlineData (11, 17)] - public void FrameToScreen_NestedSuperView_WithAdornments (int x, int expectedX) - { - // We test with only X because Y is equivalent. Height/Width are irrelevant. - // Arrange - var frame = new Rectangle (x, 0, 10, 10); - - var superSuperView = new View () - { - X = 0, - Y = 0, - Height = Dim.Fill (), - Width = Dim.Fill () - }; - superSuperView.Margin.Thickness = new (1); - superSuperView.Border.Thickness = new (1); - superSuperView.Padding.Thickness = new (1); - - var superView = new View () - { - X = 0, - Y = 0, - Height = Dim.Fill (), - Width = Dim.Fill () - }; - superView.Margin.Thickness = new (1); - superView.Border.Thickness = new (1); - superView.Padding.Thickness = new (1); - superSuperView.Add (superView); - - var view = new View (); - view.Frame = frame; - - superView.Add (view); - superView.LayoutSubviews (); - - // Act - var marginScreen = view.Margin.FrameToScreen (); - var borderScreen = view.Border.FrameToScreen (); - var paddingScreen = view.Padding.FrameToScreen (); - - // Assert - Assert.Equal (expectedX, marginScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left, borderScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left + view.Border.Thickness.Left, paddingScreen.X); - } - - // Adornment.ViewportToScreen tests ============================ - - [Theory] - [InlineData (0, 0, 0)] - [InlineData (1, 0, 1)] - [InlineData (-1, 0, -1)] - [InlineData (11, 0, 11)] - public void ViewportToScreen_NoSuperView_WithoutAdornments (int frameX, int testX, int expectedX) - { - // We test with only X because Y is equivalent. Height/Width are irrelevant. - // Arrange - var frame = new Rectangle (frameX, 0, 10, 10); - - var view = new View (); - view.Frame = frame; - - // Act - var marginScreen = view.Margin.ViewportToScreen (new Point (testX, 0)); - var borderScreen = view.Border.ViewportToScreen (new Point (testX, 0)); - var paddingScreen = view.Padding.ViewportToScreen (new Point (testX, 0)); - - // Assert - Assert.Equal (expectedX, marginScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left, borderScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left + view.Border.Thickness.Left, paddingScreen.X); - } - - [Theory] - [InlineData (0, 0, 0)] - [InlineData (1, 0, 1)] - [InlineData (-1, 0, -1)] - [InlineData (11, 0, 11)] - - [InlineData (0, 1, 1)] - [InlineData (1, 1, 2)] - [InlineData (-1, 1, 0)] - [InlineData (11, 1, 12)] - - [InlineData (0, -1, -1)] - [InlineData (1, -1, 0)] - [InlineData (-1, -1, -2)] - [InlineData (11, -1, 10)] - public void ViewportToScreen_NoSuperView_WithAdornments (int frameX, int testX, int expectedX) - { - // We test with only X because Y is equivalent. Height/Width are irrelevant. - // Arrange - var frame = new Rectangle (frameX, 0, 10, 10); - - var view = new View (); - view.Margin.Thickness = new (1); - view.Border.Thickness = new (1); - view.Padding.Thickness = new (1); - // Total thickness is 3 (view.Viewport will be Frame.Width - 6) - view.Frame = frame; - - Assert.Equal(4, view.Viewport.Width); - - // Act - var marginScreen = view.Margin.ViewportToScreen (new Point (testX, 0)); - var borderScreen = view.Border.ViewportToScreen (new Point (testX, 0)); - var paddingScreen = view.Padding.ViewportToScreen (new Point (testX, 0)); - - // Assert - Assert.Equal (expectedX, marginScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left, borderScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left + view.Border.Thickness.Left, paddingScreen.X); - } - - [Theory] - [InlineData (0, 0, 0)] - [InlineData (1, 0, 1)] - [InlineData (-1, 0, -1)] - [InlineData (11, 0, 11)] - - [InlineData (0, 1, 1)] - [InlineData (1, 1, 2)] - [InlineData (-1, 1, 0)] - [InlineData (11, 1, 12)] - - [InlineData (0, -1, -1)] - [InlineData (1, -1, 0)] - [InlineData (-1, -1, -2)] - [InlineData (11, -1, 10)] - public void ViewportToScreen_SuperView_WithoutAdornments (int frameX, int testX, int expectedX) - { - // We test with only X because Y is equivalent. Height/Width are irrelevant. - // Arrange - var frame = new Rectangle (frameX, 0, 10, 10); - - var superView = new View () - { - X = 0, - Y = 0, - Height = Dim.Fill (), - Width = Dim.Fill () - }; - - var view = new View (); - view.Frame = frame; - - superView.Add (view); - superView.LayoutSubviews (); - - // Act - var marginScreen = view.Margin.ViewportToScreen (new Point (testX, 0)); - var borderScreen = view.Border.ViewportToScreen (new Point (testX, 0)); - var paddingScreen = view.Padding.ViewportToScreen (new Point (testX, 0)); - - // Assert - Assert.Equal (expectedX, marginScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left, borderScreen.X); - Assert.Equal (expectedX + view.Border.Thickness.Left, paddingScreen.X); - } - - [Theory] - [InlineData (0, 0, 1)] - [InlineData (1, 0, 2)] - [InlineData (-1, 0, 0)] - [InlineData (11, 0, 12)] - - [InlineData (0, 1, 2)] - [InlineData (1, 1, 3)] - [InlineData (-1, 1, 1)] - [InlineData (11, 1, 13)] - - [InlineData (0, -1, 0)] - [InlineData (1, -1, 1)] - [InlineData (-1, -1, -1)] - [InlineData (11, -1, 11)] - public void ViewportToScreen_SuperView_WithAdornments (int frameX, int testX, int expectedX) - { - // We test with only X because Y is equivalent. Height/Width are irrelevant. - // Arrange - var frame = new Rectangle (frameX, 0, 10, 10); - - var superView = new View () - { - X = 0, - Y = 0, - Height = Dim.Fill (), - Width = Dim.Fill () - }; - superView.Border.Thickness = new (1); - - var view = new View (); - view.Frame = frame; - - superView.Add (view); - superView.LayoutSubviews (); - - // Act - var marginScreen = view.Margin.ViewportToScreen (new Point (testX, 0)); - var borderScreen = view.Border.ViewportToScreen (new Point (testX, 0)); - var paddingScreen = view.Padding.ViewportToScreen (new Point (testX, 0)); - - // Assert - Assert.Equal (expectedX, marginScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left, borderScreen.X); - Assert.Equal (expectedX + view.Border.Thickness.Left, paddingScreen.X); - } - - [Theory] - [InlineData (0, 0, 0)] - [InlineData (1, 0, 1)] - [InlineData (-1, 0, -1)] - [InlineData (11, 0, 11)] - - [InlineData (0, 1, 1)] - [InlineData (1, 1, 2)] - [InlineData (-1, 1, 0)] - [InlineData (11, 1, 12)] - - [InlineData (0, -1, -1)] - [InlineData (1, -1, 0)] - [InlineData (-1, -1, -2)] - [InlineData (11, -1, 10)] - public void ViewportToScreen_NestedSuperView_WithoutAdornments (int frameX, int testX, int expectedX) - { - // We test with only X because Y is equivalent. Height/Width are irrelevant. - // Arrange - var frame = new Rectangle (frameX, 0, 10, 10); - - var superSuperView = new View () - { - X = 0, - Y = 0, - Height = Dim.Fill (), - Width = Dim.Fill () - }; - - var superView = new View () - { - X = 0, - Y = 0, - Height = Dim.Fill (), - Width = Dim.Fill () - }; - - superSuperView.Add (superView); - - var view = new View (); - view.Frame = frame; - - superView.Add (view); - superView.LayoutSubviews (); - - // Act - var marginScreen = view.Margin.ViewportToScreen (new Point (testX, 0)); - var borderScreen = view.Border.ViewportToScreen (new Point (testX, 0)); - var paddingScreen = view.Padding.ViewportToScreen (new Point (testX, 0)); - - // Assert - Assert.Equal (expectedX, marginScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left, borderScreen.X); - Assert.Equal (expectedX + view.Border.Thickness.Left, paddingScreen.X); - } - - [Theory] - [InlineData (0, 0, 6)] - [InlineData (1, 0, 7)] - [InlineData (-1, 0, 5)] - [InlineData (11, 0, 17)] - - [InlineData (0, 1, 7)] - [InlineData (1, 1, 8)] - [InlineData (-1, 1, 6)] - [InlineData (11, 1, 18)] - - [InlineData (0, -1, 5)] - [InlineData (1, -1, 6)] - [InlineData (-1, -1, 4)] - [InlineData (11, -1, 16)] - public void ViewportToScreen_NestedSuperView_WithAdornments (int frameX, int testX, int expectedX) - { - // We test with only X because Y is equivalent. Height/Width are irrelevant. - // Arrange - var frame = new Rectangle (frameX, 0, 10, 10); - - var superSuperView = new View () - { - X = 0, - Y = 0, - Height = Dim.Fill (), - Width = Dim.Fill () - }; - superSuperView.Margin.Thickness = new (1); - superSuperView.Border.Thickness = new (1); - superSuperView.Padding.Thickness = new (1); - - var superView = new View () - { - X = 0, - Y = 0, - Height = Dim.Fill (), - Width = Dim.Fill () - }; - superView.Margin.Thickness = new (1); - superView.Border.Thickness = new (1); - superView.Padding.Thickness = new (1); - superSuperView.Add (superView); - - var view = new View (); - view.Frame = frame; - - superView.Add (view); - superView.LayoutSubviews (); - - // Act - var marginScreen = view.Margin.ViewportToScreen (new Point (testX, 0)); - var borderScreen = view.Border.ViewportToScreen (new Point (testX, 0)); - var paddingScreen = view.Padding.ViewportToScreen (new Point (testX, 0)); - - // Assert - Assert.Equal (expectedX, marginScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left, borderScreen.X); - Assert.Equal (expectedX + view.Margin.Thickness.Left + view.Border.Thickness.Left, paddingScreen.X); - } -} diff --git a/local_packages/Terminal.Gui.2.0.0.nupkg b/local_packages/Terminal.Gui.2.0.0.nupkg index ce992089290f5947233250ef23c74491b9fd2de5..9e06cdd9938e24a5f81fddbc0e0ff8ba0305669c 100644 GIT binary patch delta 659420 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

b1|5peY*0y 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

E%)CGk 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

=3ndYJ4>DI2aQUe8Q;*4c^{W+=Qq$FAcf` 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�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

K>1dI*dHw!1 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 delta 658911 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

;+(bS~AeISG~0mHaw6&w2E|pc@GZj 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≤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%0D= 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
!5>T~HM=+YxM1N>C)!E@mSK#Tv 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Ν#&8PkYv+yyAQrXHJy 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

xSvg+jb=Nef!uZ50R=}zTYueYJQhUFAwjfq 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%0Dm4nLCr!R=@Xdq6{vKYS{yf0<_4nn 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%0DJ>Kr{>V4}1 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 DmZ%wz

j!*i_cV~}Gf7##iq|Ba_*^@H+b1JibRyfO3 zn4yIY=zoZ_xJaV;`D>vv#DAGVElcb9f6c5+G&-Gx2Z5FWNpMLcI(HMRSj_ZH{Z&Nb z4=mr_ZNspJ!4+w4N$mB=jX;1XH-cajgu&{^w@o^WY#Oi%x8*=vln<}o zdgUC)-JRe9J&d!RX$F*n4`UcdKol(bce;D`F6rt|7!FEM6-`N1s(-2`4|?#v;eN7t z%)dsTi3BjJX(y`j7#~y&0@mK85dMUfx`7O9b(nx2eiYBO4B{^^@N|J%B-m`P1m~i7 z5ZXkXPLl5EmLe`uPi?jZ{CwJ8YBjzb#(1)9!fdA#VOayVp z0`)kHl2|uR!!d=&^MC0|4cLG<5Ib(w)KrrP;h8v5)d&Nu<-k@H>VDpA95-LY)kpThrcu5ZGI*hG8S9yRs#d@00xPc74lb-69A!DeoD!jw zkZo)0-zF?zc)RBQhF=>T9n-KYXd$DzhEZ<2$HZg*H2op+rhlHd-+ppPBLBh1c-%uF z1B{vStz&S`T#$tfI3!TdcVGt$$1KN7H2@gWl#yJq4Ywp>GxQd`2TgRFl>A1=szOes z@v;iGnM@2nfLvAW=E9*RaFwU|^$T#6*A=iS_?xA6iYGN;FPKEehaApm zw7lem=Y|~%oS@mS;V_#{=S}_K1ZRbUTTe>?L~PM=#(yI^!=A`l#U3HL3d2!)LYbbb z|H=LhrpUFbmBE&ECkVIa5x^F|5-$r=2=d`rv;rp)%-qq|`T+KZIc~0)^s4vs@?5X} z%ovK<=IP;*{G)CF+|vt9a_w8eOYbR=O{F+Il_9BQd%y#SKi_8z3Nugb7xWo6$~-Nu z%Mk@yK7S248*&WhE)o(TZYM=idj(X7NKYz)w>O8sSM9a)U_%anP=)2^QrB6rn36-A zZSBM-YJylhnBkRS{e{I32=NzkrV05`sxs}a&!Lk=B)2{cCZSS2Xb~xn>f}K%iM4w0 zvb~$y9b*xfc-_N!*V+tdubfMdC9wMqeOk*_3i+Z zR`q+4Mwl=yse?g%b8NBv+%R;Hk}OKM*cSCv*}KPhi0#D~1HygDqL^P^iZc;*k+uOL z)-@f^bs1=%O7etZb}`U~mm~o?K)D0H2{hnLvBBPETUq-O!5>?f`#OuRW-M<1ON)BC zxPR;IV=^{|IF9x(RyZta0fRLieWIbM3=*`ussCBtGk}y4M4VIx`L_Fx<{#v_s8I*hto7YYJYt>>qw0FF)UYt_$^5h|L*e`|Kw+2-plRA zmR&Jxzj|Q*&_<|(z$uZ7bcmzEF*~)3N0g0Wa4o#|EGR1op$T4UMhaEXkA$!-bFJsp zFY`^F=GSm%a*-F+umkYROtC(xKOB1w$IM@1Z{T`EbHQREIAIZ_Nr{TKnGWJ9M}O*# zH}W;-h1Aagj)(FF0R-Ai?F4<2PqKIUA}*i3JcZD?03FpiB=kY-No}B(Sen5TQf4w0 zTo>VH<+a}H#dX|@)WM$%f(p)~0YVHfv4H@Ylpu=Y5YPfoLO`w*r-6~0FxZ4iq4w1V z!q7R!HTmge+X9nBS0A7j*uD~%jB3}(ewMQ z)_HC3KnJ83b?w=lt9S#+uETObDe9v>q?p5?5$k3gAxj|L9NSZ+y9JS< zA1EyiMmJyKcxnunGQ#S2aK_k44lG7_0o}v{tD>2xeY&u66G-?I)+Lm`x@3K=2v@ei zzoBPY%J;S_YGiFXihpmTXj|B)jWK07ueP|)G={ff?u9-6&lC$WF82oRE7f&ai|Pfc zeX=z-97C4F^akJm&OzBE8KR`Ufs&9*DsPdL5e)tilp24D;tj1U8N6B*Fyyax;UJ9K zq7WVfaRdG`Swo}~tXjHvgxL||zXg!h4)$QP>$Yn4AWo{29Djv6JHFapAM)1zY!yeJ zIn{B1NpuO=fJ3R1zA~{8-|yw=y_V>dBRI01p8pQ0r$P_`23M( zqLr^@qK?-eaAD%Ar}h<2Kjq?l{U-&k;pdKdfrpy($5VU|(z?lwAB{@m=$_{TpW?gU zq@mcQF3*DmoqvX2TGwD0G4lss;5G1vkUz<^p9a)ue9-HkX8t_Q{OMuOckwN89yF(; zncOPoCsa-*KKLnL#OeGDAs@$}GJ>INqTTA&G)OVOM+=5-fdR&f%uXZn2d||>7BrGh z23s4Bxk8O6ZD~vh;oCUW7Jd5_LMa!GR`LWqI+wzI$bYV(Tgr`J(V~Jiz`ARifQ%(*bfx)1N?|4LV$#Em2#-BE;EtA$)&==n>3LgG8H5_#-sw3 zhcGHQ{e8iYnk$H(AMSrkF&2=5jL!mJ#!97626Bxl(r+n$JT7*U!$s)#vq|3S<>u5k z*UE`BSg8o1d z-+US{$R2O*ik8|Z&X{_opSDL(w4Ehfc$@Im%|}~6_ekG;MZ-~-R`7ldq=)QHU#RX} z;igDwNA@~);zlzWi)gS$r_uIP_Cx|B80Wbt!IPf%z{99kxTpL(J(pPH;+dj8{X+uh ztoag&5P+-A#Z0~g24)adQl3Ro&)1qE88TyMXjcy7pvfdWCdEVx)02P zB+DdLj_~h_>s`&wodEzAd$I!~@cpf&@+QWUok?hj_56xEL?dni6x5GXi!jW=M6a~1 zwmedMPF~};L)0G6R?K^E=zRH;hr%#5NoV#m>c83Cih1)px&Ia9;#^tTnd3^K5dZpC z`|^Bl461kttOc59OrGL6N*R#;B8!EK|82B#W9ozDrFb4chIYtV)d?sxL@eAHWbBY` zk<^NL9J1Id^(JxvO+Q3T2Y%+rAb7v#ym@&?D${>;SSz!&;Y}ovEV)+GMO-@h0569-J8Rr7=`IF-aO znW-a|U(~P1Wc<3JTNNxcvOqhSaypN}?z2+Rw+a)nEmvm3D>?lsHLvu!sP&>IUf9(CKgrS;pVcd!)LgbN z1}~W!YeFCt#FJiw2$hjib6Q02zRx8_mIXf14L7y2W6Ug%gYoI#=}?5&?CX9bo*VH` zOOl~I%RC<;Zs^Z&YP}^^Ocsfp*@tb3XBjN)2L)9@=OnZeG8t@G$%UfiOo&8wT@|_r z_s~Lt9$~hq-A6D*0&lG63g;gWa>kb?#;pX<@dN`vA0o}#t=oxW6Y`aimP@d>dI#%O zoWi>*B*CPtn`U}C3uh}YB;SDXN%bg zO>B1}c3=?{t^r(bc+iv&PQSdB-adDP0H8C&W}wngV*yvWf(ktBb4&=*Wwo3rt|-LyD0|dSxU#M zSiqv;1!g46uaQ+q1!HcRxjSN^hbDZdDG)O$P+R5yN~LhxuNUkX5=?FDj?w`BX@%crjN?5NjR)UVw9u{53hXOl)mxufZk1 z?g36MK%xMdbK9=+CQ-Lu4h7rG_*!5WaWhXTCi2~x%-Hb;F1z7x`K||!w(q_nAHM%u z>Pfm1IP<%#SPL#F5ZtN=GPm|W^iH<9?GN?C<*+Yw+}=c~EL$#a`7uM%>_Sm*@ublb zfoxZ^jQ{I}98Xsxr?PkEmJ{_S8~cI5CMdhISPcVYQYEFkflj=)Z{;JjiVSwK$#~=* z&Q)XW<`8&tcZFuUqrp2ZnAX4im38o?z&jP2lT~c*b(33ZJvfMEpz6}Q?SgC~Lo7d7 z7mBQLk$f5h3zIl%6{~!Pe4m`dpP=R!RTiucxl}K)qD}U?xYKa%b*iRiHVax6+;n@M z;KK$ez^JF(8RG~6U3(BT9djNIktR{9=*I%?4B? zZ9E>E1k z&x=PKB>>XR;#*Y71(dSM15~_5J{CE4%GY6B={7YDJGnl$%K+|u+-C~%KMc)a9zNV~nDpfGEB-j`WAj}LBP-BjWgw|Zc}UC@sI;cD*-xDbLWglm zu@*O=0`@vxY$=Q+rM017pj!rAIqx50(yShIALNU5-oo)EVa|-=+;()3if()sH(^Yt z9jV>IZyr?mdj6W^n<;>)xI%Vj>;#RAWo=> zrIc4Far)4P+3;S7a$e)n*<?8zInCx?A{(Q=^R#~;u+5zyU^pv{l!_(iSl;^Qk@1}S4R1xWl(Q1Iz$G&@SkR2 zB7JD?AGs4`CU~IV6GoD64)Mh<8Uz_V-)Aw+tIBh{0<7Z<4_0z8%aYm~RHtj6W5$o| zXGv;KfPsK9C-~kdnixSKY_y6lm@=M#TFLNA`p4VamM1}!y!0dev$x>oX`V>J$ysvJ zF4`Vhbq<=mmry_KE}uiR`sg5b@_g9Y%={vF!Zk)#rJFhUJS@5K>}YG#Ea(?gDMmeL z1DC9c!7=}o`%#dtL*`52URXIT%z|D6DIzt(00&v=9`R9|`QX9;M-9Y+(KeSI04ujc!DTw0vQ zspo6(HGYZUwB77r)J!mfl{<@<(NDBO!7xm^;sUgmGel^6@Q!`4Q-1bs$?YQ!_AvD0 zTV1m>Ev_B4fFicw&g(!LU{wIxHN-}+JmE_M13nvODUvzoL6NoWUni=~p0o?X{8c%n z%^!NrcaY;aG-^l^{*<#&OSM8IJC>q$V{?{*R{ZeQ%MOYRe5!A5aAGue&0<`UwSvma zaBv{q__{&;X}gnbr@|}Hb)YVMpUe5Zo2~)YfnLYJRH5jeUXexp?4Y)C4wf@_krca& zhPa99*3#`FIOa^(SKJ&w>i)QZE++n@d^2-2sv!JxH`L@3mQ_rJ2Zvy+;d1w-Xy8zr za896E%2lGNP_;=AU8iD0&hb~89~{)aXbULcUCQ2UV!yrQ=_PHEMl!VwWzpCU#8D*j z$BA{#pEHE3#YWqVee8n%kMf~?#iU6a0%z%Y2BQ9FLP^X`to$6xxDrufC?(d~6*B`K zDo)~SB?`1^!^#4nuK3O`7BNxk*aqF!3u0wYWtuPYUCY-W zs20O9P832@&w^n9a|b|Nbv?4X85a*lOEYxQx^8kQr>Kam&hr1DMEFT%FqozLDl+c; zZ~JYd=#N9ub77V5AZqz{o1Ly5_6^Xx0Q-ZOLFL(!l`#4gOiYLrgo!I$&zKKi!yyZtYVp;*z8vuw0D`2P2%X#}`yn1F(2045+=o9zticT(h)3d9ZQ7 zD2MI>G?&H8R_dy-P?tf5kqzVw^y1w1+ktnz{4ZZbEU|3toSnQH55jch+Q%lm7N)1k-l>ye zURo_{J`XzPLU<r_=YHI($@)hA-r)c(#cTM9r)x$#kO19+9Fw_fq@%M z(Moi>pvxpk|E#Nv9PYkpcS`}Ax^Xh>e*cVJLv?3kZ(YW%*AGb`-83P_aM#)5PsQr&BngJp4rio)YB4T{pD52Ce4#W?6Ng^r zsOxyCQVJlVrYr9T;N&6*MDQwmr6V4EAHkLiIM8y$zE#pz*^ozI#jhg2_ancni|cAFo*54YUQ8>6Ao;H+CH|KKa(UPgBs5mURjaLAoGr3Ko>hORYxXO>I68 zBufHITN+dl2`oEv@!z;EWSclSHZxx3$hlp*S1ATNK@9bNOZ(c6@Ece;rW0Q_k?K6v zSt>X!Va2{RM<78dvZ&Kq?tvgU&d+F^-_E9)j18x5FA> z3rghBB;FBh?FZ2HDnzvSPmUS8oUu}!R<1P9vN1(FfGu&`h*b2&o28fZ7GPs6$HVHZ zNhYuD_WD~{4;OKN4$GQ)?SgRAIZgdDCX{Wu3v9$MG{1@u(Me`#Pc#X(34|RgyY{!m zNqLE;^JrtgCqe+gJy`b_e|<`Vw5!V425^P67pJ2y|9{sdQYn)Vv63Ql>?>Rn~-a z3Q)Ni{gw=#M>}?t75bOtP&!K6;x9(j`El*b&_0Ch8S$q!ysqdOAo0gE$>>OZ31}D_ z$Q@=%kg^W4k$O_n4pc+(MQV77cT{g8=%r1}GSZGOvMyE>WQMrpfV=U$rGbw97bg%C zS;xv`_g4$k*xLIun|Vso{ah+8U9Wr_e!>w~Eic*9=$N-@pDuwpwFM>N_!6u@yHY0p zZj-QUX6a1_6n2^y3nPOw(WE8hdDfKARZlZnhcN}I_62=|8a!l(6t;HNo6Z7U}t(kaZ?MqATK95O>c|Q zcML#eVg&cpHJ!?>_}3jK6Jr%q0{Z5lf1-W^AEyc{MQ};kMdDwr&rZCWruyNxhIgkl zTlqjFk0BKT#|tOqq_N8hDc>^ zI^k>2f)*?M9A%jlBoOru^6QYLCY27ajo}Kyo@6vxjQcH9B*$5GFr(^Btg&S<0{TX# z=G#{B>ToAYp~r#Y<-eB5I0=EUW=;e1-A>TuE5_*%trI*gz&VAnK9=yJGf5R*wtNhU z+dHy*m+3tzSd@$i9oNP$^hFKfm5=Z{Bv2}Qn5Tdj9g^C3)|I5UPb0E8_XUc04`b=Z zq+)(>=pM=c=S)Bo8`NBW%Tw0DM7`+0@pSr(A;gP)hNIPW0&{FUNP}gc)H6 z=*PJpr0No&nv2yyOQG8CHJENwd|#juZUaLYkH_WoH5HvrGZ$Our&=9i<(1pn2~{io z9-Xnth@bN=*PE+@?y;DkjOecWNyvOaTSNRI1aiEMG zx7v|^Vnwz@oa$H?nWU&JE8tJ}G@iDi55O!#>O;Lkggw({L0~+DJvlUv zyno!J;wWT_!WQHFw_XB zANg7SQsHA~{s>>@NK~V)s;wh*uEsDCnfP8zZrMzrvY_umG~*F-6K0ha_m$1G4KvM> z*=|7sY)5R{pq!dk{q^-L8UC76)o$&y(7>5rI%@(sK?=^a$!%jh*Op19_LsDhPOr6U ztL_HP)W7cxjs4LjU4D~F4$yyC1ieH-94pL+FAV!;h#iAupTrLF@HIQ#qdjey7n$tJ zY9#zU*4-Zx#zc^;O3 z`>e$F5GoTPqg!`T*N9M1HO{aKWnGng+|3y3Rs;v0It2;MV!J0S{pw~A0=o+Yl;&UW zjeKLn-~T3LRa;IFpA*}ly)U)0S+KqkB0ag%=m8MJ<*doODFu?$!JasU!|9Q$Z_7z-v9Jw52pzIBd2 z&)z=Lg!aAK50i|n#ftw{Jt{g-eY?UOlk2RkizG;ArfP7J4{yHypn~1|9+2kh+K$Ab zeU-A}daNJt^pUw!&{X{PSKWku1D$1=*$~O+94V^~O)*wcqp@ffD;ov`3QQ&P2l9v` zd-o8u5XIlPcTQ)X?7E+FxsUJb2}zeBUywKg(qVfs(FSsq=-4P69vkgyMJ(kOO9Oml zMp05I`T6{lQr1jQ*L~8r!UWPws9QlFith$lV|;J7(_HVnZQ0-NbXPYlr4&bwvP*fg zXOMU0l*bOD@`yblxoGe}(c5U@o!{ReRt>(mJF<{wR`N%U9Nv&rU%2c)6ka-6l^J9t z!;joz)pzvyxv;C-N(lO6_O#SFn0~Li8OCjUC-R5?jmE3O8By98?KeJ12q-yUJm|Z> zBBANL+q>An{%%NO>HU2!hI%DSVYWdi1=^N)T=Cw>^Pb@(Dss^aw_CAuav|PwpLp$N*;%DvEO5nw`-LMul+ck7@dvt_d2}8%f)9>&xD0 zFp1oYZrGKF7cAZEw3)&9vVvY4Xlkx=m*@&V z5nmVRkw!ykj2FfOLgNj%^lXH1m1Z^#xanI9DNW@U8O$3x{>PS|4rM<1q-noHmdGs_ z>rukBvCBY&P~fT?GeGyZl0+{IIXw<>7eTnB+OA6wZ<`<%4<8Y?7_l0r(XU66zM4uI=m>Is0mvq+_ds)4B*%!kB1LwvDMEGjkQ!{RXvD`)eg^jXB ztRf}47~2|C@32l}pPNt8gs945)i%tLqI(=}1}b8`>ye0vK8PzuIMQqbs<#v+2ZD%^ zZY^0HRkR))dc{M(YQ|eri3Dehs`>1=T^K{MW4heo2_=-Zsp5hYXm!ef%PtH#^6R5p z*`Y{RGZNJZWWMVh-pY6dB#!Os3H-j&`2eo#McGnl!5JR-auoDF+3sxGSBL7aiIuww z0Yn!&GLXt8{Dj#T3FjCCXyon#pNr~f4wrGBHG6iHzMgj`)9>R zwgW)^N!3hRMa^xh$1t@Xc4kdAQKgG7x`zVIXThNFt!Z&H-9yS`- z%~7=N$tKwQs9i5!z7AgA4gTKlAtK$^Zpn%TiE3q5x7+^PqncIH7Qdq8Jy)Nl2~xZ9 z<=)w^M@6u~5dTUDCk^h~LB5uV?c*ydh$+hMfxlqHeOAPgR}67k102?mG;?$}b8)i` zW6)L(K;^YvS&~B&hB*vPP_XE1>=5!N=X){a--mb@>1NnN?!}Jvr3gFy{vkO|3yE?F z;u`|;?WByqScxS_je3M!v#%T)toja+1vrNsAdE3EtAwB$^TcxnxH;BMPljs!Wzfiq zf#8*DVD*lvUy}=PW=9l2P=5agF!c|JM&Rzpu)85f;awwxFu{ytD+)6C$d%{}2@Oj* zw{Sg7C3 zm&_qcX~`#h9x}Lg+hTt|!-EVYyW4N~YT2mS4gVB{45x@!#zSsULPiYb)MC{D2~FQr zA=MTR?(29X(Jx;SA%uRq5|L1;b|@ucojNmgA}ywnTfz&O8*-KWcnIkS)nh1iO(?$Z zQj`EM8oX?A=Yhzk7+jLQxEhkRcrmD(R#xMbR5C80TUyY-v09J+H5z%pDo)qq#P<7o z@7p2h_2J{%%uU?aL;a9;7~>YS5{NbYA(xv|ean_5u0&dHQy_dq^)PYPT=_y!wArV@_rY(%A- zQ6EA$iPFu`wnjs*MOD1qu4~@BbefFdgg6x&611B54Y7m)mUbI=T>1-$Dvw^fdk-rE zMAqb8&fmkdD@jc!u4ARvVPuk{K-~)OOvfbY(`?^z7qH^f7}2ldAE&R8f5``LHW8H~yr?HO_20v~<h(!EN6B)K3c2|K9WCf5_rFl;Y8lh=fR}#OF+voN(8GSp!!QWd7$trac9W*oxYVzJyvr z_D;Fg{T}YJGW3*#xJuP>zP@UW`DCf*A4kerDjBssl}YN3;R;NMa&&nO7?{+texh)K z-HPLsskH`Shvmr zJTT5fXaiSV4hfMn&7FgyN7bvbX%p$2jqsQ3vzp*v<0)3yCg(lAodUk`pa4$iM#=O{ z5-1>1OTjK%m10=@;njm7i=`#5*Jv!=#T7w7GJswMw`0Q(^t5%ecrl^jOxWJKv!zfa zV{R!`B)HSfv2o-x?PhSpI)}+30&XVC`Q{_w^=x6CX_#&Fv!UTeIP3xV!Ty7hS69>O zP(3LWBT1Pf7tHQDaie6_j(e*XO(I`gca|M1>IwY#O)#k&mWw{6c00|`itV|m$gk~r}@5LeA!Gt2s;Y>52;NSGkc$S@~# zw#R-vT&%St#Vyv|Ps?^GMfK`#%iczu1&5AS2I3cIk^qI2-kX&S1R-Jas~>pV(zWyxKNargKqF)yFBEl(s?^Wk& zVzneGF7Pj@j1nB*d1DTYXpEzu@~sj{CgUI5lAA%(U3$C<&DY8Km$0$3?BLB=q=R19 zURVkxA*-!XhMB2lKW7uLD?S=(4bCH?u+yss(FTo5Aw+aZfaeNqn#elfHea~TfayPa zh!>7$R8|aN=z#93X4w$E=lQ2yR*p*L14dlNq28WPqH536upVunVNFx6QLWF#2Ph$U){*THkZ+a{D-TnT=W72?rJ~LwI zUPeBjGlphOG!02B@HZDvmB~+akjs26rOLYW<1pr1Yl%;&eGo;{$n*tNS-WcQ*9Lo@ z$62Hum;8`sE(I3!Hl*7^NLozDCQkJo)@sR9lqS=9OYcJ1Gg9(K7SjOW`J@OxOcQ&V zBh6Jq zQ_uS3qcz2Sz#}HlO560@Az9pzpZLSq_09I?;^@b>YsgKNinmj(6p>T{`l7=q1GbT0 zIFGCe>V^o zAnAXa$pM27olp=EcyJI9Sf8Hxe-2Tws~v!XOuxZUe->9Qweiz^Lwq`T#{WTlUNONW zr@}CUckBRw|02n!jh*L_KW`BIpGaCjavb3QL6ZK*W~iVSRp$TIrUcl+9>D)!kbcK# zu-X4>j`@EZm&D90QJb0DR%)ZAXG|aJF`4adEQ#{~G(h zg*N{)0iY3h*8za{-&J~X01!gCS%C2!0p$Pf5OnJ#IQBsv-Q6KVlLyX diff --git a/local_packages/Terminal.Gui.2.0.0.snupkg b/local_packages/Terminal.Gui.2.0.0.snupkg index 6d812094777d73ad8b4826da4110336e68fd57e2..057069fa86e69955868fadfe2ec5c85a5433fa99 100644 GIT binary patch literal 216962 zcmb5VXH-*L*ZvKnqS8cqSCL)=(wm5YKmh5HP9h*hAQCzO73ob6(xi8l8flRxB_u~d zsz9Ve1QO{Gkj}gDocsPi&-3ja0|J9VHhZr%*PPeCrfS)=%b@ud?l017&eLdlR4siFLm!ORsrH|DeN?=f%3%{0*Hye&zHmG>pPIxz zY^W&A26+K~ynjRIH^tST&u>TdD$BUZLaITfgUPcG+UD**xMcF;v;W2;=M`*^KVMQ9 zr2enziz*nfHIlIup_fT>mF4km_x!6$69s%C4cz`e>tzCabB#r1%VzIC-5qK?lJjnG zZX-3}O5eqQz(2hh{%y0`KVJlz%&2K?%(TR`T2$zhx|K!$vtNH`o%W4zRvWANx9G4a zi#G3{b(zEV%p(u2u#^og67lc%JvpPQtYpRbQItkq)5Ygn4OO?RHB!iUP#UE!f@lgO7k z3)u4Qi>4}Ylo(FQ(2z;xBhToTyY0sPmUBjL{YA{@%U;CW?;V9|tSR+1N;!1ZI=?P5 z&cB_0^Qr1&z|~8FW|ANOe&1W6fasfF>hJvPxazwr z$!2_cQQ;wRZu4-OkwksZyy<*Yy0V`*`&}o>sM7BPi;wzM6U*|iNIp)g7UjLh_1LTu zjmIG;8NMvyUFZ~)R>+0CoDV@wR*ThJrRQfSQv z=DFq`xBH_R5}NOS>N+mkFTkHz+l+B2Y>T>8xUj5)4E^f^tgT-$-!^NxUB98jJNb5vHR2;gM+`jY6BlO8=EmiB-~YNio1QF>tXkOz#A~-hTZ}#Wu}e7Xz!b68 zM5L~_L&yEI;qqeBsIQD&sts{U_*&hwzcVZ1?kyf1E6-j3NO?WvYQ>VNyH~OG4H)4y ztWx=%>3;CF@F%m%B9lY==tGXciBvEpnV4)RYON3)8i{ zA`tVv>f-vr*EbdVkKTQ4Z!sCg7n#TZ&FC2ApVHtrb;2_5_A}v;F@qWC3MVzNA!6@$YocX1c;DoosmNTmEZ;<{xq&p49K31}^s7*0$;| zetv(73;ywqk7j%6ul>B&i=UTzPw_{7lo_8!9N3Z$HZ=t2e#M-4IK0h5f}zJ_AJY!1 zSGncFML$kiSE#+ny~9@~H6&73XZx1*!;Pu9TtlgnB4P+akcQO4I>d`mP>!+J(#W3~ zP?9K#hv)|shYWX+gAX{5WBR-V><0A56W8wa7g-IY6Pponfh*yvq>BiH;ESyp>bf(9 zW|;IoZign0sa*Se)dlNA)x^7(i+coLt!Xlpjtw>w1M0Nzx-GpNq9ewVxevsVDMmT> zm343KKKC-F9@r+edOxP|AYB<9@+00LpI6RSHwZ6E5lr#d!}@9Vmskytk=W|&p1R?F4&~M{ z@Z9w-;u}~ewTLJ>h!nRHPY}X9I-g7H6A?~aq$>!9VByxkrj0a8H3lP1_0x?-rs8>Z z)=T&w=jbbIi<0yaYQfxUS?YHkikZgs%j#3Bv=vHphf+xVWNl@8cejb}lW9a9G9*|K zncW611M}yo(fxK9kI2=E9QUtxW1Nb&*Y_@5 zA6|cqBM(^&8T>BL9aJH~$RW!17aQ`PuMSTUJIFf08pqF*@=V5W6d|0OG}O|j_4tZ3 zhAzwKS$(-R^@>-|xWsr^fykU$QtOiDWfV}zHsC=FA=@Yiu+lXq5Q6x`ux=2q--qwjoB4X%19Y zUq$ptMh86oU~Z>y!M-`5>tWhqXvdR3*PPHKk@4UdiEK0!l!G=R?E?3r zj(i;kF8d&!)BF)()t&<#K1CjH$P+uI0(vdVfV|b1aoTNBB+|^)KcvA&(>^oB#5@UZwsLke6ux1 zU2`TsW$aa-iB{8vshnJcYTzn-q?>Y|W=7udf~f~Wh$&W_zC8{P=0(Pa-I*AD-B8YNm+l3eod}}v!Ht~v zRdq-^FDf8<-b~+{DFHIzFL>5_p{X2R&1fKgT$N3bq`!7b$_ELg3*-w2j5$Tm5t|o> z)X9*8Tga5Y;a3y(TD*;<8$ez$3NL%Ysn>ja9-fg4mMV}MN+yXXDoG`ls0>CB?Z_hI zofgXV<#n=CZ+H#+3ylX9h(8U{iE?wGS8F;_1&srZ#74w!=}?kk5G{~@&oYMkaZ=x4 z0@4e+OX?$ogGG>OZH7YLeJ~ea61GlAEtNT`5iIyay$eIV&a^79|-OM`l zjZ{U}4^}u%uv{CuFjXQp2;6Y6Eb?WTu8^mQT}ugY7ZJSr)nyC=d_+uTu|eZs{sqUt z6Pg?-KN)_D!;Y$24)74)lb;^kJbu%M*J--XMe;}R1&g#shTRV@+zz~-zV&Likb1bB zGzDZWJsY>^h9NoP3He^I3XkS#{u8y5^1!DvWw-%fQWx1m*-3@eyNW&@<|QMPU#c5x zl-Aaz`#+YNdJXI*a71*;0po2{V=!tr?_k>2SatpI;!2gLt%x^O1`GvdLm@zsuo^E- zK~x$|x{~e$UpP)^Aoe~fszpcyU+1}#m+w6&Z-=gG-pJ4i0g{IFfdo&#K~n--@&x&T z@-zCP{sC6I5;MOAcy5&zLxIpBHPILG(QD{ov))*l8gZX&eZYGBw(my{u6+$CLTzNz zV4CBMle=td9e#rmIHzFt*4Ol9GsBmIKlZEra1CZ`&7t2;OWI0n8#XxbkRqic-+VNc zM+SMWNUhE|C{JG}O-2NAvy0}03m>kF*^O8=9k7#(V8vXCDZ3m(JdD?mZ{7)RHzz5X zm8`nlSLuJH&MbU<{lPdascxNnjb^*J_FFpdrw7V`HOT?to`WnFFZkdR^E2I#y zVwH+?-saqGwC1>b5gGGs$V0(5d{S^KFpE6GGc@CWpJ7@;EnMMuWb06DSMl;%`Wh+^ zht(ST&7c>qESfWyK|bw?-gocQ-TWy8>TxZh|L|pR&6h00VsRujf1Ruyo}KUto9X0qi3M`;%^4gy)|t-?isj;I zs2%I~pt|I)tCKINfeUwuU&c&Agr6t*wTW9?mPMIb%=cEBzkVshk@g^|HMxIN&B*vs zSk-$+a2f=hm^nbd4I9Lu8jte0=ii%FOk6r7+_sIM3smY$BfQtvdlWXw?oh8U+JLLV za~;E<4&j%vRy`Tj9aMq68F!{IL!(eNPw4TX@0&Y*&Y8PkFw}eJH1aK;f<(rl{^Bp4 zQp~Y-fhD5?95;N-WsPK z3|~e(oZ0<(FeYVzbb)w$EPbwmiKJbI^;PSuolQR8e-=%S2YB>rUQ%sPz zb4>ic3HSA~tMwPNX7v@zLvz4`+v4sYN#dec*=9{`6OA&vmGO$cWb20`?86U7?qw(W z!a-592cH)oVg%4v6kKAFRka^-dTU)-{zR(hjf`uFBPKU)1{Cn8r5k zV@}vTZOg|9mIP(w6)EP}61^v@(h150dgQf!u7F>zdwpnw307uV7)yogWMznB zIDwZZCVu1UuEZ^@RK^@*+*U zPPtgNfM*f+6vEaDPui@RPA-f4dnXY6&T`+P2nuD-ZLbaF@Sf8OeZC&w-B!P3MdE&B z&n*V~=b%#goIfCdZJ+h{NUU|j*kctoDBFBurlZgOiXff)rGoWkPJxQ{&a$^Y(oCH~ zXr{8!z%GmP)q-zW3?pvH@$rLN(3X)S@C1x-h2355D3~wO|uJy7hUc(8Lk_SVI&`15SWF zNda!_2A3L7W9-_vHZ5KRGuot1F?H^yC&qhA+ba!nniZ*8YD%pnYO=qu@nPWYEZ^fE zelzw}lciIJ_)@M0)F6Cn94?sl;K{cp0dobI-aS4 z#to*PlKj|O>w`Rn*sTbHlaVHS=V#25n!O#uG9gy6DqkKfIE3UbmHAiPoDlb}D9(mc zuXQo^K?PP~n?c-Cjz=F(e*{$*uYCBrwTovg!&TVmt=_hK$kV-C4FS-2kYCFAt54l=E)8nNojmL#8RaPKg+m51_d7CAce3qK66&uV5)`xJ ze0|_z`5`cguYVk*tR>b7n`|PSbMrOeVmU);hc) zE&OFMeL8G%+(NUrvm-Ro1%y+#>eHk3(064GSv|G6SG0n@eack^>pJEc%~$qu#}k@k zz8U~eijwiy3eS!e+W;0xA)_D*Lca{H_EL7K?gM>tuc&S-um}KMHtN#KsEE#>vw!&BPw^6RkWUD9 zU9!Cd&8aX?KN+pN!EE2|5y+M|>v5F8dfbi4xF+k!i?~;I0{`8@xGj&TE1UJC?X3TE zy=g3NkMnc>!n4yAP%%nh=1!V%gPJO~perwd3HueU&mGI8fgr0i$*@;S`$43kvoNAtlo-bYzixE9!OTPYj6A=Gmdnn|*0rWyeoFx9z z)Bu&r+`Y*tk*GMiK?WhNiSqn{!Sv7&zf8SUCn$0S$i+P0{}Yx1$_#8%2|OcLxg!a1 z(LP>YWE{_ki(qtOj`=?0{08G7&fgSf7+|>#IxjWn3u7xm7NwI-N#Kz8q7VkQB<6Gi zqiXUO-Pm1h)dyxvIe&s&idT!vkfEI8&`Pxu{apt#?h6pGJ|bQnQ~%=_K$`{&$JkLC zeK-Yn?~07eDs$&-y;rLI2?C+AyX$MZYTsRJ!3+!QLQw<*nDGuv$bLK*=p0RQe5;}N zNH4g>!W$-4?>Lz^=^Ii`<+4BhVJ;BGGY-Bw18a(fG9ok`ijuc*U-lTM1dqRv4&K$m z(|()e34QSwKUepw=-Ql4OG2t(ysQtN87^AYRT)TIYs6vzwd0Ob+2C<`E4Y}qt8r>l zl`P8YD~dF)4EK#gzG+r!sCJKbZ_1!ZadJoK8iSR!>bh4l7;I)QCUi=nT}uPmvd+gv zP!;_ys}AnJH75>QSiv9uu&U3N*mgos;*Gy$i0RDohemsCWAxZ#l@>il9F$;BfGd$Z zG`C@S&~Ulu`-qDAJLE1aV$*}{$m+o`6Ef??_gkgZ?-$Ul3Pmj+)$XqrCZEW4ls)FS zC5QuOFc>&GS8$L68Z$dSv^{jGagVkKbmpuNcRU~fB)jAS>DQqjy9=58JKgr2HuENf zqu=ql?B5XGxdvhym)K8{pf%h7w$=6BdNQGTgMwE!>48-Zq6R|KJgb;}rXhe!=s470 z4v}I(!msq<>e18;a}Qfy1Z-Sx>)^|9%!K@{X!;2nw@}En+u0{}&pSJEF7RCcoEbql zRrsD~d=5%zx2r&r^WR)?^XIyxuS31$z1<*>nCvz6BPZ_4xa#lj6;C@kAq-iL2A==i zJ|(zKUrZyFPYceq)~ywIt(rg+n#@|>jmTi}g@MEqcWOi$uqKL5ek;DKWu>^xy>cFx z`D*$(18}R3c!UvzYT1d&Gjw|#Nnwf{RAWa|3mQfeF%Mm`hdk<0e~+K8?#hu0LPLKxj7)95X+w0n zyKIm3bD@RsVezlU8fQ4rU#>Bbj`Z`??%$6SI8Sq6n8&qpdb2)w>(_SSsaf zPanr;N(-^x(G`#GBfdx+TJ5`;bnSn(p2hOR1NLa=4|658Ol?{3~>o|(6*8~=I& z>{Dkpgn|b(IZDifF4|_~7G7Jw`lLpQev+}ZmwD&am;D@TLkovN7b`MqI5mev`fw%@ zVEOJZT{q;_JJTVajSx-`Cz_QwDj%6XTyY4-1%I(@Uca~5sv;Q)7f$M+gGhkuCWJ<@ zY1kj`^lRGtp8KADG3v2P8&{^Wy5SPBPd|OL(yAvAs zrL+ERdE84}n9;{O7P2W9zEYLV%7?~SQfpUh%`1mKd&m$Ugp%_D8aU2vZpLLNGtcO0 z^f@VDQ6gtRUrZXJx|2v5t!n;Y!TscTWJ0_-<}y&^x>fer9p-f3xVFT9XK32gt9)S| zvJ%${XPNG3W`xF>LA5<&h7;mPxM{nO*<)u04(c-KwxO?w2bZ9+AKZdtKO`HPs0%gR zt1p~@S*;{eC3d*e8evF*DhKiT-%aJlz-b>wu+HxMYu$vsOAhnYM@f2pF|PwTG#m@> z4_=gYr0-4cuA#NWTH~)y)jau`cccby-ID34whDobT36G9J|*{WNQ7y|*FqU#@1Azt zTDoVP?I#(m!u8!|n9F=>doU&O>o>B_2(>XmyCv!O28$s2I;*sosb3A(!R)_uAdqLB zpnLRuQ_8*mp+Hx(@UoYs6!EukUj9U{5K+F|8(bk7t0yf`iu25%rg4IcM_bge%D21V zIaM4LfLu$AKLJvLNp7CEB@MCU-_pP3R`u=IC7?-~l>?5%hFsWP9s$9-T;Sv%AU@Xa zA*_Vxwe|eTvWAWQ-pXI_H;Uws|4nP>#^zWj6R9_EwSm0MEUf@B#@2|WgvI!DN=WBR>AWQ;=IQ0NpU~F5lG9wDf35nXcTq(fk3603g8K0dKEDvDBj>X zdD<@iKu#$@NykVH&R;Bx5dl#x-U&fqwg4hB4=Bg}4eGTP0p4~(AZzt3Pv{Hp4I1ld z))Yt4-WdPK$@CD`a>pm0FC_+;T5A;OJ6|jEmd)APz9{$MU&BxZa`(@(v_u$h(1mIC zsH|v|b|yTI-X%VBMqL@j>fq0*4gMeLId7!;47Vw6-=PAu3$tu>Ej=f&|Nfz6_TS~K zc&cM*3fK8iTC4?{vT^1(<#3OZ#U)K6zi(C`G@&|S?iascvrwr#uW9CkTz($Q3+u64 zkApIFd%8Zn$mBM$KwWOQ7eu`u;~ubXyu11i2s1v5;{@FI2i%EFKAe3W*KMCK`_Qam zeN>ZPvqvgyYWCXaJm@#fdtmvy`xbUsRKT+1ec*W}^{dgdyabNag#yUMoSKWHU4nQ< zKpFNse$a&)k~>9`p$?X>-5WCRZC!qKzdpwPEV+MG>3iKm;C}B9QhJ8lp#5r`cHfVb zzB)6DKis38nP;mD6c_AdPChMP2AP&D;IkpzVqE*!YTa%6BK(2lN~!q%nb{phUVWbEOla4t4J@FXITZoObf7tUMN{UQ%De|GHo zlDZ7h%VsME>!nSYBf&o%$cQWGMrk|ZEZH!MN2UVHj02LXiW8shmW679vGlY8NQ@o} z3uK`VWn-J2};_t@i;s@`Zl}P&Bc8`p9Q*e@8jgV1y5&Cca$*8nVOg7f$ z7x&khQt$Vsn0=iN@tF3a^sqj2hi+qod`_1g{83Np9|09^+^Z70k7Qdq!w;^gL&VSuZ6wd^j&7jGI=uPhF&gi{!GX#Y?eUF0NcefN-*-DP9 ztKx-z8T1~#{|I(c^>u|EeW{ zisw5hjwH+`ntN<+)DtCDlKyK&D#cj*p+qzO(qX<7ZwJ?p@bFXQ``nM^GE@QCA6j65Ga&(k~*)PP*K2c_w(yeGAiesujZJ%X0Pi{N;pB8=z!z%)B$k zzt2~sh(7B){m>V@=R@j5Z~1pWXh{Z`FRO$&AO#_XF%aqrj+qZiXpVq6N`i_X?Lu?# z^m|#dz?-q7nfF{|WN4K4CXF>S3zO3o&!|cim46qd;<;l$rDLxrv^QdZe{IOXGk7S) z(GAi~K-pFzsRr3_bLQC*@o)jJb{;feveT{qXv|G~W7BU@H+ZINhfzlJO9*c>l%fi! z6-f6PR`3^8Y$c+3Q&k-!1<8K{;k0q|rtNr;fa%%e{R}%Ag1R8urvjNJdSX5e@UTIX zJ{Iyfv;#^Ow|Ut*jmZq=g23Deq|t!JZb5lgp7Z-~MmZ|-;_fE^oP?3d>gwtsWmXZj zKUSR>os!7+U3@ZeE|8labVb8)E{^qA(TA6EHR@~K_gkJE74s6rj$$+(sB`V>l~mn& zl01S!ZPvOccfrMtWWwe?9kAt=hyTAX>3O;3r=fcvTr&JVe+WXKw}J|Lb+rawGM?Yo zX9d{^&)-UUil=ObIRN1x9p((;_~S6pI9+}-bL;qnsQJm*d$RnoA)Ri}!fKYael<1` zP4#<@@t-qTdE{V6Kl42$V_(79Ogjyn{HaEP7l-JBdM$-ZIK=5$ti&ov`&tb0_E;T{ zZS7HXi-5CuwXd>AMT5@u6D(RHk_TIx@Vr^0`6z{p1kTA=#y}RE@613V zC3jO~dwdU8`r5o?yOh&NF?IF#RQ^bxj=*dE1i6;z{tce6uE2V2 z55QUgv9V&l1)k^QlBoCZPzI=J+$Yra(ar)i2Ou}vuv>l)uW`)-odbYc?XeS&9~y&S zsGuH4;2ZB4*p)o*^(b1B!UcoYfw~)Aw#n$?b!!p#7cl`TeQ9joC^TkWIt=zNqd0=l z8o&f9lKgp1W7}^3TDI@i zl6GQ3Nso55DPFTtsDH3ouaM+Y4|q;+pvMWQ0v}k?V4Mb?H_=)XMj%4 z=aOW54*T;wRq^>1o4AH-kKU*t)Fn&Y9GWHhOls}s&fm9v09j>7ndh>SCn2DnjmBigj5T70nRpvN=u9A3#@Pk7v+@Qe2$VQGHxDvQ(4T zs7SluOKJ!f=Xv)0@t^@X0g$19D@TlzfIC)ee6|{QcNk5?aP4s#?67(eJX_*e)uA-B z9nz}fx}njv2XUJR@oS27W6*udLZJhKt!)HjAVWFbqZe!&Tv)DKF1XM$Y~9%bZN4!t zn7|EX^bO;a35s`rmjT!jaD+nX=qgI;V2;~13aCU;b53>af>KgFAFY`(D~aoSEy_xRww5DAj{MsQ!~)M#u9w4^mRs}F9g8;$yQl=6nU_l z4yb=sOMwD?JEI~^^}OBDi!}ajTH;HXPaCN9Bw@=YkW?Rx8CNr|lZ-G94)^!~ngDl!-JIgHZ!JKpHYZDVgJcAYi9AVQf zo}&Hxc8<30tagi6?*|9yMGcV3Vs|Hm#jb|2X^uHNk_OJgC&|MJDy1M+D8MnXHl?}1*;_N<8<#WRM?veR~XvwP=e&{G#_NOo?YktL?k zh|R@#5s(I}?BcMqkCNBD);pdtl|DBm0S(1oO+X&SxEBC2T=M8xAk%osDN_)CB?KA{ zkgb1-5pYx)Hl4H0ddnnOyL0f8^R_VOib$RTpx~?8##;^EykFNniRaXv^YTPP$Q{~y zw0YF=D(SIB>G5+A*GOVq82*Vs&upk|9M>i{uy_{GGjr+8+}#>kVQF%*S$WawbNyic zkEa2uy1h8|&&hg&J3Uf{`jJbXRQG2|=2sW0dWg2ymYzGHN?B+3PR#fYc~I6_;Q@7U zxZuaJxHZ9gp`OVOfO9DhY2N!i#cBq@gsZR{5;MIH_YboqD}-QItJ?j9KL=Q5xIT;A zVHE`2qvWDcY<*3dRTRzgeL<7J?dnSSigIZC&;7Tb53@`_$9>{v;B*HuW!Qh%p%3@J z6c2q(3q@8Qyu1vhUP-15WHPH_+jhEK@qE>X`{LY{Nl(N;v&l5le_$(wj^4Vh;Jb-~ zjIS<|Z8$RS+W<8KXZ-U0(5S6kKlt$|;_~r@1(w5WM~1~O`|35tpV13fBU8US%g1aX zbp`y`n`Gd+#xRko3+c1^wB1jHKl_^Nua_{)>8VCr0UYUWc_Q>0_|xWk)r{$Ql7L!5 zi647zhe03};4*+e>h-#b7pctMKWkNma&M=N$Y=fGoJB2JW|lMEFTmU=aZBu52wxUd zh^&w{?7P8#(!OVN&!bK*ZHxnTK26uPB9RWI)bL{~uT}qnUchYw%b_U~qtD&$3DBe8sTbXZ`GlrA4-chmgxuG%K&}~bwhNf;dz^#__$vb!Eg4p z@1vQ=W?d!|(>LW$+Rry*{=hr#(Qd)!uyCVtl971r6^7Z%EiV9!Q9AWasrw`PY5;Um zZC++F*>^XN98D;KJ`D=-8=*M zX@c2374ZaTl(M`I!%9-b0E6o+)Hb?#L)gB38F2SF$~};_;?MszVVoFN;FbGZ1z}~v}2r& z;wASev$7d&IP4JAD^Xh^T9Qrb2htob+px;P*92pk|5SMxhyuW~QGhs2Yy_=7gi9NB zrlKj0a}tp%)kRPGx^wE(aU$5>ZzP!?QPDMj2cc8}QGmdCDKb+f`1xJWZ4u7Jc?2@# z&8ZwkZA!+DLO62(Ty_sgb9Oas^!FTq5(Nj0Y9PtT6=DwXw8v-k!FP`%%Yha6yY?O5 zt?*_{%v(Hl`ken{a$e2c6O=+<$8aFm4D_SQio{}f9R9o-oVyRx zjb;s)y^(-f-ecF8WdH|T0S*l0QV*04(cOTj0#a%pFowY!KmfJG1Z=WcPc!`ww&jt( z+)7+-&GqtV%JpxNvg~TYU!W$4tH$l{#&p3&csr>xHVQJB3>>*uBD;Lf^BM(TE8?EOuY2L7R}S>SS-9Rk#D4G^*^UILHnh(;+u?s$2T9!&w3x`VuGli6 zohFcq&oREgQ0R=;Q(F-PCnM+fC>$Jzq-^;i=fzVPHsK zJi!Qm*@4g=IL|!!GFciK+M^g^e@lINUR5 zQI?sQ+Ynk6f=qy3BqR)>3<7QE8o04sv>lwG= zGw6MtKov2Pcy1L(Z|)=}IK3p!5Y3Q0&(V@(yumN{n7gsa)^L6RyKQPxBTcX z&bS$kzgUZpMXrbwR=xx;Uhs{R7^E4Sr2%If0Kggk%^}Ao`&sICOy$^YiBhNW|wd||Vwu|D`r8#TbuKO+V0$cIlK*_C&ENp)Y z8F~y4;p+?l`cj%05ormR4qHfm`?^%h>CXX(3I=ewr%35~d`3NNR6e{>j?99h!lfeY z0d@?FFxX;MaHN}6D^C}IMulALb_9kE$#ic%7bpy_le`~W+y^IqqB%ZkQ5Y8ZhWb{g z^7V7+I5=d;Zh#9I1>=rjf?x3JT+zmC;TezNqF6CeRxx)D-=@mUgnhSeZoXo|Q!#7us}#Mq1^nn;J)F zG9XGZdI?Vu`n^!{z<($nuq_KVZ`BYfpE-d-_q8!Rkl2XtnfrY>W0`y#*D%sQ*k>Yc zX^YTd^GsO7(>E6~&;y<&Wf?)07CVBz955%)0uWbO>o->cuP#kTs3MlGMk(0Ql{?vH zQ@m6{Bne}MZ+e3VCh8PvF|(#=aLGK`-b#abjvDc%^oE3o*gU`^jVTpiBm@yE99 zU9%IF(e(z(FW_(ecPFVAX~InWy`nThQaw-98M9y4o|cv{8L z;h|l~)L+iyz<5Wzl(Z%b$RjnpF_KqY_Cmzz>R&bw7r9-YvU(KpNp{Mi*%%1GPOs#9 z&v_iZ{P02ev&6{r-}WlR1n^J0?@7whq@*SZe{3$EL1-S49dEM%3X}66sxOb_RlNA; zC-Iy_F`Yd8)Ewo6zy?jIm{6;snzFJ5^f)T zNSjcBiUtkXFhh8D z8%N!hWVTH?YkB4;sA~X&qwP4KC~je8ciHaD1n2_V~>0=Sn(DND{NIxFg&5>^?WN(_TyZ12v&YuWmVw;tjj8WO7;KkJjUii~F zIY<{ZLwL)ZPWSgY->YCNW*2DkpIyhb6y^=(_+{-1CGo4v}5;pr#Yh@OXAbm>8TsfD6TI7IWKF>Y$@ib_gNF_b21agSZYL@@`aL) zsmo;Sjb%Ixzt>8iA1gWv3w}23u6#!~|EOGt(z@-7^qo9~lrIOOz;vJR%#7T_Y9#q^ zT{QcHA6JiJ$|DyUyE5z~q~_ate-EwNB)3Y$;TEm>1!c4T+bNmK%nSs%x{a#-D~|93ll|X)GuAt_01}n>e7vm^(yM5Yj@8HWhRjK4KNAC3xJ=)u&?f!jW&-k8 zt=|pf%&`;a>6oB?hsEQ}WNapy!h6<(z|B*gb7mpZmp8<>)+>$Y1Tg@UYG~f%SvT;M z`dZV4iJlfk%XUFL56+Q7QlW1ogy88^)i`xkb8OiUp8|Q)p2O%HJ@t30KAd`5xU3-b|Dw%nhH&gSxS##-n zNnRfx8DvNKhCg(>ey8<6?E*ABHHg==taV`Z4vQ%xS*;2r;c_3(F0bL3p_ zu@9&ULl<~uDmV_75Kq>sSdwUHPr~!*Iw{(BJ!%!VcqN&%fD&zTROwNey@?In@ z^%8b~F^2o==pODzC+80LV%pfBZTlp`QR;F1NT|0H>ZDUulMlqf+8G~6<=}*EgC4fQ z8wXZ_Dw~$Q)e|be4Wt!7FiX`0YrthBL6U=KBcwPhNNM=Ws??y-vGZE=#O9Uhv(cPq zfH@1HwnOn%VFBybijFy&Auc2?>@!%9;V%K#xtnBm@xJckJ&LaAnAhk>!euYG&W5%x zF5m9L^ky)5K)F;^#dp=uFPrr;F(j)PE7>jrmeV2*s>n5V`f*f#(F78BzD(ujnoLec zKNj|xo9oLF;7l8T7B50NPqQs2)R`O9i?MQQC&#rOnNIx`bm*`cpW)rLw8uM~$O=p! zufzc}j9#5LV3-;ZyfO66egq17^D`PZzW1d?q(NSC_}E7{39B8*oL7+e8FJnOMooCC z#>57@6h(lCMmrqC*1MkOJk9PMhROHFYu7N3b~d0d{!U8KjkO~D+;7(ftJ{ZNVdIe6 zc0=?2PF@00&J^vO|CG9zeLZBFFPcM(%ubuVak{RC2@ii)#+I=hhiv-chXA^Kf-fmg; z$i@xEwoc=BWihb>7l&c~03=4;R(3MBm4<($F2z^<-!Sw4rFty_d zkgok2;r}5a$k_i{L4V@qa6>q^<3IoXpq6;7``@t!VB{D@DX+`$2lwgbYZ!I>V1Ic7 zaKQf0tpP(j5hQ>jb`_p=hl29$i^S(SgIv_Jm&iB~MXm_x^IC9~wXUMTi$xo(>YY}5 zmv?A^AtY%vfYt)Mp@?Y|a}m$2RwEls_^*`sUt_bnK<`|T`{ksFt`xWOFB>@XNda?6 z$D8{Z{{Y{g$;+#>-K&4Z^_iFUH`=zfv+6n2n{Y*rvTTkU7BhZkA63us6ZDhpzM#aE z`~`4T=6bFVKUj!ruy&h5XtLO?#Q3;@{#nlR37w5i*GYv%yi074$*yaTwTi)HLbLQa zss4lG{^2XXY`xtEsHQGA1wlVAP*kTH3y36;@t+F2XA7!3= z-j#M>kzVp@dn#>d;#{NtRpGIP2`}P*&4if(WC)Nn|A9iC>8ETCXV-uHfOGlFq7~c!7zOzQ-xu2f`lHU;4SzG|+Fc3#BO+Q4)Pl2cu1-QV3e6tCb2=Glqy zKL2NoSu%Ed+wcGeULVqc1}7)+aUV{ySdO}wLViGXdKrOf`qa}hNtdQ~qT9p8TgGWn$O6ZLw6vWktByrW4DgA?8d-*=OA4!`dj z4J}t2ep8+f7%EE&kQo1*6mY8X3nTFnIV9Ej;0J4W)Cb+_Xl)0L)tpyj#vvM?wyMNV zeM&yFJ3qB5^9! {m!0yxc)Zcdd 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 -Z{eI&&ko*_JY&h=r$pP5Ldd3=Y@XI$n#xRhscD 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[^QH`XHqXx?lSL@NosgnL;!=!3u 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 literal 216810 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 z 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 !JsC5)_pZkQu@rt-Be$$@>xq?2%3QL&t9`;n{ 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