Tig 95e55465b5 Merge branch 'v2_develop' into copilot/restructure-scenarios-standalone 1 nedēļu atpakaļ
..
Application 95e55465b5 Merge branch 'v2_develop' into copilot/restructure-scenarios-standalone 1 nedēļu atpakaļ
Configuration a84b2c4896 Fixes #4419, #4148, #4408 - Toplevel is GONE - Replaced by Runnable (#4422) 1 nedēļu atpakaļ
Drawing a84b2c4896 Fixes #4419, #4148, #4408 - Toplevel is GONE - Replaced by Runnable (#4422) 1 nedēļu atpakaļ
Drivers a84b2c4896 Fixes #4419, #4148, #4408 - Toplevel is GONE - Replaced by Runnable (#4422) 1 nedēļu atpakaļ
Examples dc6ddcb898 WIP: submitting #4429 1 nedēļu atpakaļ
FileServices a84b2c4896 Fixes #4419, #4148, #4408 - Toplevel is GONE - Replaced by Runnable (#4422) 1 nedēļu atpakaļ
Input a84b2c4896 Fixes #4419, #4148, #4408 - Toplevel is GONE - Replaced by Runnable (#4422) 1 nedēļu atpakaļ
Resources a84b2c4896 Fixes #4419, #4148, #4408 - Toplevel is GONE - Replaced by Runnable (#4422) 1 nedēļu atpakaļ
Text a84b2c4896 Fixes #4419, #4148, #4408 - Toplevel is GONE - Replaced by Runnable (#4422) 1 nedēļu atpakaļ
ViewBase a84b2c4896 Fixes #4419, #4148, #4408 - Toplevel is GONE - Replaced by Runnable (#4422) 1 nedēļu atpakaļ
Views a84b2c4896 Fixes #4419, #4148, #4408 - Toplevel is GONE - Replaced by Runnable (#4422) 1 nedēļu atpakaļ
AssemblyInfo.cs cab22566ea Fixes #4107 - Revamps Terminal.Gui's `namespace` (#4109) 6 mēneši atpakaļ
LocalPackagesTests.cs a84b2c4896 Fixes #4419, #4148, #4408 - Toplevel is GONE - Replaced by Runnable (#4422) 1 nedēļu atpakaļ
README.md a84b2c4896 Fixes #4419, #4148, #4408 - Toplevel is GONE - Replaced by Runnable (#4422) 1 nedēļu atpakaļ
TestDateAttribute.cs b9f55a5a96 Fixes #4410, #4413, #4414, #4415 - `MessageBox` nullable, `Clipboard` refactor, fence for legacy/modern App, and makes internal classes thread safe. (#4411) 2 nedēļas atpakaļ
TestSetup.cs b9f55a5a96 Fixes #4410, #4413, #4414, #4415 - `MessageBox` nullable, `Clipboard` refactor, fence for legacy/modern App, and makes internal classes thread safe. (#4411) 2 nedēļas atpakaļ
UnitTests.Parallelizable.csproj a84b2c4896 Fixes #4419, #4148, #4408 - Toplevel is GONE - Replaced by Runnable (#4422) 1 nedēļu atpakaļ
UnitTests.Parallelizable.csproj.DotSettings b0f32811eb Fixes #3930 - Splits tests to `Tests/UnitTests`, `Tests/IntegrationTests`, `Tests/StressTests` (#3954) 9 mēneši atpakaļ
runsettings.coverage.xml dc0d8f2f85 Fixes #4429 - Timeouts lost (#4430) 1 nedēļu atpakaļ
runsettings.xml dc0d8f2f85 Fixes #4429 - Timeouts lost (#4430) 1 nedēļu atpakaļ
xunit.runner.json dc0d8f2f85 Fixes #4429 - Timeouts lost (#4430) 1 nedēļu atpakaļ

README.md

UnitTests.Parallelizable

This project contains unit tests that can run in parallel without interference. Tests here must not depend on global state or static Application infrastructure.

Important Notes

  • Many tests in UnitTests blindly use the the legacy model they don't actually need to
  • These tests CAN be rewritten to remove unnecessary dependencies and migrated here
  • Many tests APPEAR to be integration tests but are just poorly written and cover multiple surface areas - these can be split into focused unit tests
  • When in doubt, analyze if the test truly needs global state or can be refactored

Example Migrations

Simple Property Test (no changes needed)

// Before (in UnitTests)
[Fact]
public void Constructor_Sets_Defaults ()
{
    var view = new Button ();
    Assert.Empty (view.Text);
}

// After (in UnitTests.Parallelizable) - just move it!
[Fact]
public void Constructor_Sets_Defaults ()
{
    var view = new Button ();
    Assert.Empty (view.Text);
}

Remove Unnecessary [SetupFakeApplication]

// Before (in UnitTests)
[Fact]
[SetupFakeApplication]
public void Event_Fires_When_Property_Changes ()
{
    var view = new Button ();
    var fired = false;
    view.TextChanged += (s, e) => fired = true;
    view.Text = "Hello";
    Assert.True (fired);
}

// After (in UnitTests.Parallelizable) - remove attribute!
[Fact]
public void Event_Fires_When_Property_Changes ()
{
    var view = new Button ();
    var fired = false;
    view.TextChanged += (s, e) => fired = true;
    view.Text = "Hello";
    Assert.True (fired);
}

Replace Application.Begin with View Initialization

// Before (in UnitTests)
[Fact]
[AutoInitShutdown]
public void Focus_Test ()
{
    var view = new Button ();
    var top = new Runnable ();
    top.Add (view);
    Application.Begin (top);
    view.SetFocus ();
    Assert.True (view.HasFocus);
    top.Dispose ();
}

// After (in UnitTests.Parallelizable) - use BeginInit/EndInit!
[Fact]
public void Focus_Test ()
{
    var superView = new View ();
    var view = new Button ();
    superView.Add (view);
    superView.BeginInit ();
    superView.EndInit ();
    view.SetFocus ();
    Assert.True (view.HasFocus);
}

Running Tests

Tests in this project run in parallel automatically. To run them:

dotnet test Tests/UnitTestsParallelizable/UnitTests.Parallelizable.csproj

See Also