Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
f9123cf
Updating to xUnit v3 1.x
Keboo Mar 7, 2025
86ee7ba
Adding MTP
Keboo Mar 7, 2025
35dd15d
Starting conversion to TUnit
Keboo Mar 7, 2025
0896401
Tests all compile
Keboo Mar 14, 2025
b025312
Adds cancellation tokens to async delays
Keboo Apr 25, 2025
857fcf0
WIP
Keboo Apr 25, 2025
d90b472
Refactors test suite and updates dependencies
Keboo May 9, 2025
6090704
Updates test framework and fixes assertions
Keboo May 30, 2025
5feeb41
Reverting stupid
Keboo May 30, 2025
a9cfce8
Save point
Keboo May 30, 2025
5fb172e
Assert.True
Keboo May 30, 2025
a89d951
Updates tests to be async
Keboo May 30, 2025
93c173e
Removes TUnit dependencies from tests
Keboo May 30, 2025
e92ae66
Tests are now compiling
Keboo May 30, 2025
dbf6a5b
Updates test framework for DecimalUpDown
Keboo Jun 13, 2025
b8fd9a7
Fixing member data sources
Keboo Jun 13, 2025
8eca7b3
Refactors code for brevity and adds tests
Keboo Jun 13, 2025
5b65a58
Updates screenshot artifact path
Keboo Jun 13, 2025
bd166d4
Fixes artifact upload path
Keboo Jun 20, 2025
66e3264
Updates coordinate assertion method
Keboo Jun 20, 2025
69cd173
Updates NuGet package versions
Keboo Jun 20, 2025
407f626
Fixes UI test failures
Keboo Jun 23, 2025
7b3b253
Fixes combo box test assertion
Keboo Jun 23, 2025
af69b3a
Updates artifact path for .NET 9
Keboo Jun 23, 2025
110e8bc
Adds success recorder in auto suggest box tests
Keboo Jun 23, 2025
dc9a112
Skips flaky GetDialogSession test
Keboo Jun 23, 2025
7a321dd
Skips failing saturation drag test
Keboo Jun 27, 2025
4dafa6b
Ensures DialogHost is properly unloaded
Keboo Jun 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Refactors code for brevity and adds tests
Updates collection initialization to use more concise syntax.
Adds tests for the ButtonProgressAssist, CheckBoxAssist, ColorPicker, and DataGridAssist classes.
Adds a new test executor and removes redundant STAThreadExecutor attributes.
Adds NotInParallel attribute to CalendarFormatInfoTests and DialogHostTests.
Refactors the PreviewIndicatorTransformXConverter and PreviewIndicatorTransformYConverter.
  • Loading branch information
Keboo committed Jun 27, 2025
commit 8eca7b31b259bbf15beebfbc8508a6f862391e8f
4 changes: 2 additions & 2 deletions src/MaterialDesignThemes.Wpf/DialogHost.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public class DialogHost : ContentControl
/// </summary>
public static readonly RoutedCommand CloseDialogCommand = new();

private static readonly HashSet<WeakReference<DialogHost>> LoadedInstances = new();
private static readonly HashSet<WeakReference<DialogHost>> LoadedInstances = [];

private DialogOpenedEventHandler? _asyncShowOpenedEventHandler;
private DialogClosingEventHandler? _asyncShowClosingEventHandler;
Expand Down Expand Up @@ -221,7 +221,7 @@ private static DialogHost GetInstance(object? dialogIdentifier)
if (LoadedInstances.Count == 0)
throw new InvalidOperationException("No loaded DialogHost instances.");

List<DialogHost> targets = new();
List<DialogHost> targets = [];
foreach (var instance in LoadedInstances.ToList())
{
if (instance.TryGetTarget(out DialogHost? dialogInstance))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ namespace MaterialDesignThemes.Wpf.Internal;

public class TreeListViewItemsCollection : ObservableCollection<object?>
{
private List<int> ItemLevels { get; } = new();
private List<bool> ItemIsExpanded { get; } = new();
private List<int> ItemLevels { get; } = [];
private List<bool> ItemIsExpanded { get; } = [];

public TreeListViewItemsCollection(object? wrappedSource)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

<ItemGroup>
<Using Include="MaterialDesignThemes.Wpf" />
<Using Include="MaterialDesignThemes.UITests.TUnit"/>
<Using Include="MaterialDesignThemes.Tests.TUnit"/>
<Using Include="XamlTest" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
using TUnit.Assertions.AssertConditions.Interfaces;
using TUnit.Assertions.AssertionBuilders;

namespace MaterialDesignThemes.UITests.TUnit;
namespace MaterialDesignThemes.Tests.TUnit;

public static class IsCloseToExtensions
{
Expand Down
80 changes: 42 additions & 38 deletions tests/MaterialDesignThemes.Wpf.Tests/ButtonProgressAssistTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,109 +2,113 @@

namespace MaterialDesignThemes.Wpf.Tests;

[TestExecutor<STAThreadExecutor>]
public class ButtonProgressAssistTests
{
private readonly Button _testElement;

public ButtonProgressAssistTests()
{
_testElement = new Button();
}

[Test, STAThreadExecutor]
[Test]
public async Task TestMinimumProperty()
{
Button testElement = new();

// Assert defaults
await Assert.That(ButtonProgressAssist.MinimumProperty.Name).IsEqualTo("Minimum");
await Assert.That(ButtonProgressAssist.GetMinimum(_testElement)).IsEqualTo(default);
await Assert.That(ButtonProgressAssist.GetMinimum(testElement)).IsEqualTo(default);

// Assert setting works
ButtonProgressAssist.SetMinimum(_testElement, 133.14);
await Assert.That(ButtonProgressAssist.GetMinimum(_testElement)).IsEqualTo(133.14);
ButtonProgressAssist.SetMinimum(testElement, 133.14);
await Assert.That(ButtonProgressAssist.GetMinimum(testElement)).IsEqualTo(133.14);
}

[Test, STAThreadExecutor]
[Test]
public async Task TestMaximumProperty()
{
Button testElement = new();
// Assert defaults
await Assert.That(ButtonProgressAssist.MaximumProperty.Name).IsEqualTo("Maximum");
await Assert.That(ButtonProgressAssist.GetMaximum(_testElement)).IsEqualTo(100.0);
await Assert.That(ButtonProgressAssist.GetMaximum(testElement)).IsEqualTo(100.0);

// Assert setting works
ButtonProgressAssist.SetMaximum(_testElement, 39.56);
await Assert.That(ButtonProgressAssist.GetMaximum(_testElement)).IsEqualTo(39.56);
ButtonProgressAssist.SetMaximum(testElement, 39.56);
await Assert.That(ButtonProgressAssist.GetMaximum(testElement)).IsEqualTo(39.56);
}

[Test, STAThreadExecutor]
[Test]
public async Task TestValueProperty()
{
Button testElement = new();
// Assert defaults
await Assert.That(ButtonProgressAssist.ValueProperty.Name).IsEqualTo("Value");
await Assert.That(ButtonProgressAssist.GetValue(_testElement)).IsEqualTo(default);
await Assert.That(ButtonProgressAssist.GetValue(testElement)).IsEqualTo(default);

// Assert setting works
ButtonProgressAssist.SetValue(_testElement, 99.1);
await Assert.That(ButtonProgressAssist.GetValue(_testElement)).IsEqualTo(99.1);
ButtonProgressAssist.SetValue(testElement, 99.1);
await Assert.That(ButtonProgressAssist.GetValue(testElement)).IsEqualTo(99.1);
}

[Test, STAThreadExecutor]
[Test]
public async Task TestIsIndeterminateProperty()
{
Button testElement = new();
// Assert defaults
await Assert.That(ButtonProgressAssist.IsIndeterminateProperty.Name).IsEqualTo("IsIndeterminate");
await Assert.That(ButtonProgressAssist.GetIsIndeterminate(_testElement)).IsEqualTo(default);
await Assert.That(ButtonProgressAssist.GetIsIndeterminate(testElement)).IsEqualTo(default);

// Assert setting works
ButtonProgressAssist.SetIsIndeterminate(_testElement, false);
await Assert.That(ButtonProgressAssist.GetIsIndeterminate(_testElement)).IsFalse();
ButtonProgressAssist.SetIsIndeterminate(testElement, false);
await Assert.That(ButtonProgressAssist.GetIsIndeterminate(testElement)).IsFalse();
}

[Test, STAThreadExecutor]
[Test]
public async Task TestIndicatorForegroundProperty()
{
Button testElement = new();
// Assert defaults
await Assert.That(ButtonProgressAssist.IndicatorForegroundProperty.Name).IsEqualTo("IndicatorForeground");
await Assert.That(ButtonProgressAssist.GetIndicatorForeground(_testElement)).IsEqualTo(default);
await Assert.That(ButtonProgressAssist.GetIndicatorForeground(testElement)).IsEqualTo(default);

// Assert setting works
ButtonProgressAssist.SetIndicatorForeground(_testElement, Brushes.LightBlue);
await Assert.That(ButtonProgressAssist.GetIndicatorForeground(_testElement)).IsEqualTo(Brushes.LightBlue);
ButtonProgressAssist.SetIndicatorForeground(testElement, Brushes.LightBlue);
await Assert.That(ButtonProgressAssist.GetIndicatorForeground(testElement)).IsEqualTo(Brushes.LightBlue);
}

[Test, STAThreadExecutor]
[Test]
public async Task TestIndicatorBackgroundProperty()
{
Button testElement = new();
// Assert defaults
await Assert.That(ButtonProgressAssist.IndicatorBackgroundProperty.Name).IsEqualTo("IndicatorBackground");
await Assert.That(ButtonProgressAssist.GetIndicatorBackground(_testElement)).IsEqualTo(default);
await Assert.That(ButtonProgressAssist.GetIndicatorBackground(testElement)).IsEqualTo(default);

// Assert setting works
ButtonProgressAssist.SetIndicatorBackground(_testElement, Brushes.DarkGoldenrod);
await Assert.That(ButtonProgressAssist.GetIndicatorBackground(_testElement)).IsEqualTo(Brushes.DarkGoldenrod);
ButtonProgressAssist.SetIndicatorBackground(testElement, Brushes.DarkGoldenrod);
await Assert.That(ButtonProgressAssist.GetIndicatorBackground(testElement)).IsEqualTo(Brushes.DarkGoldenrod);
}

[Test, STAThreadExecutor]
[Test]
public async Task TestIsIndicatorVisibleProperty()
{
Button testElement = new();
// Assert defaults
await Assert.That(ButtonProgressAssist.IsIndicatorVisibleProperty.Name).IsEqualTo("IsIndicatorVisible");
await Assert.That(ButtonProgressAssist.GetIsIndicatorVisible(_testElement)).IsEqualTo(default);
await Assert.That(ButtonProgressAssist.GetIsIndicatorVisible(testElement)).IsEqualTo(default);

// Assert setting works
ButtonProgressAssist.SetIsIndicatorVisible(_testElement, true);
await Assert.That(ButtonProgressAssist.GetIsIndicatorVisible(_testElement)).IsTrue();
ButtonProgressAssist.SetIsIndicatorVisible(testElement, true);
await Assert.That(ButtonProgressAssist.GetIsIndicatorVisible(testElement)).IsTrue();
}

[Test, STAThreadExecutor]
[Test]
public async Task TestOpacityProperty()
{
Button testElement = new();
// Assert defaults
await Assert.That(ButtonProgressAssist.OpacityProperty.Name).IsEqualTo("Opacity");
await Assert.That(ButtonProgressAssist.GetOpacity(_testElement)).IsEqualTo(default);
await Assert.That(ButtonProgressAssist.GetOpacity(testElement)).IsEqualTo(default);

// Assert setting works
ButtonProgressAssist.SetOpacity(_testElement, 311);
await Assert.That(ButtonProgressAssist.GetOpacity(_testElement)).IsEqualTo(311);
ButtonProgressAssist.SetOpacity(testElement, 311);
await Assert.That(ButtonProgressAssist.GetOpacity(testElement)).IsEqualTo(311);
}

}
32 changes: 14 additions & 18 deletions tests/MaterialDesignThemes.Wpf.Tests/CalendarFormatInfoTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

namespace MaterialDesignThemes.Wpf.Tests;

[NotInParallel(nameof(CalendarFormatInfo))]
[TestExecutor<STAThreadExecutor>]
public class CalendarFormatInfoTests
{
[Test, STAThreadExecutor]
[Test]
[Arguments("en-US", "MMMM yyyy", "yyyy", "ddd,", "MMM d")]
#if NET5_0_OR_GREATER
[Arguments("fr-CA", "MMMM yyyy", "yyyy", "ddd", "d MMM")]
Expand All @@ -19,13 +21,7 @@ public async Task TestFromCultureInfo(string cultureName, string yearMonth, stri

await Assert.That(result.YearMonthPattern).IsEqualTo(yearMonth);

/* Unmerged change from project 'MaterialDesignThemes.Wpf.Tests(net6.0-windows)'
Before:
await Assert.That(result.ComponentOnePattern).IsEqualTo(componentOne);
After:
Assert.Equal(result.ComponentOnePattern);
*/
await Assert.That(result.ComponentOnePattern).IsEqualTo(componentOne).IsEqualTo(componentOne);
await Assert.That(result.ComponentOnePattern).IsEqualTo(componentOne);
await Assert.That(result.ComponentTwoPattern).IsEqualTo(componentTwo);
await Assert.That(result.ComponentThreePattern).IsEqualTo(componentThree);
}
Expand Down Expand Up @@ -60,7 +56,7 @@ public async Task CanParseDayOfWeek(string s, string pattern, string separator,
await Assert.That(result.IsFirst).IsEqualTo(isFirst);
}

[Test, STAThreadExecutor]
[Test]
public async Task SettingYearPattern()
{
const string cultureName = "en-001";
Expand All @@ -73,7 +69,7 @@ public async Task SettingYearPattern()
await Assert.That(result.ComponentThreePattern).IsEqualTo("yyyy");
}

[Test, STAThreadExecutor]
[Test]
public async Task SettingYearPatternOfMultipleCultures()
{
string[] cultureNames = { "en-001", "en-150" };
Expand All @@ -85,7 +81,7 @@ public async Task SettingYearPatternOfMultipleCultures()
}
}

[Test, STAThreadExecutor]
[Test]
public async Task SettingDayOfWeekStyle()
{
const string cultureName = "en-001";
Expand All @@ -100,41 +96,41 @@ public async Task SettingDayOfWeekStyle()
await Assert.That(result.ComponentTwoPattern).IsEqualTo("d MMM@");
}

[Test, STAThreadExecutor]
[Test]
public async Task SettingDayOfWeekStyleOfMultipleCultures()
{
string[] cultureNames = { "en-001", "en-150" };
CalendarFormatInfo.SetDayOfWeekStyle(cultureNames, new CalendarFormatInfo.DayOfWeekStyle("Z", "@", true));
foreach (var cultureName in cultureNames)
foreach (string cultureName in cultureNames)
{
var result = CalendarFormatInfo.FromCultureInfo(CultureInfo.GetCultureInfo(cultureName));
await Assert.That(result.ComponentOnePattern).IsEqualTo("d MMM");
await Assert.That(result.ComponentTwoPattern).IsEqualTo("Z@");
}
}

[Test, STAThreadExecutor]
[Test]
public async Task ResettingDayOfWeekStyle()
{
const string cultureName = "en-001";
CalendarFormatInfo.SetDayOfWeekStyle(cultureName, new CalendarFormatInfo.DayOfWeekStyle("Z", "@", true));
CalendarFormatInfo.ResetDayOfWeekStyle(cultureName);
var result = CalendarFormatInfo.FromCultureInfo(CultureInfo.GetCultureInfo(cultureName));
await Assert.That(result.ComponentOnePattern).IsEqualTo("d MMM");
await Assert.That(result.ComponentTwoPattern).IsEqualTo("ddd");
await Assert.That(result.ComponentTwoPattern).IsEqualTo("ddd,");
}

[Test, STAThreadExecutor]
[Test]
public async Task ResettingDayOfWeekStyleOfMultipleCultures()
{
string[] cultureNames = { "en-001", "en-150" };
CalendarFormatInfo.SetDayOfWeekStyle(cultureNames, new CalendarFormatInfo.DayOfWeekStyle("Z", "@", true));
CalendarFormatInfo.ResetDayOfWeekStyle(cultureNames);
foreach (var cultureName in cultureNames)
foreach (string cultureName in cultureNames)
{
var result = CalendarFormatInfo.FromCultureInfo(CultureInfo.GetCultureInfo(cultureName));
await Assert.That(result.ComponentOnePattern).IsEqualTo("d MMM");
await Assert.That(result.ComponentTwoPattern).IsEqualTo("ddd");
await Assert.That(result.ComponentTwoPattern).IsEqualTo("ddd,");
}
}
}
16 changes: 6 additions & 10 deletions tests/MaterialDesignThemes.Wpf.Tests/CheckBoxAssistTests.cs
Original file line number Diff line number Diff line change
@@ -1,23 +1,19 @@
namespace MaterialDesignThemes.Wpf.Tests;

[TestExecutor<STAThreadExecutor>]
public class CheckBoxAssistTests
{
private readonly CheckBox _testElement;

public CheckBoxAssistTests()
{
_testElement = new CheckBox();
}

[Test, STAThreadExecutor]
public async Task TestCheckBoxSizeProperty()
{
CheckBox testElement = new();

// Assert defaults
await Assert.That(CheckBoxAssist.CheckBoxSizeProperty.Name).IsEqualTo("CheckBoxSize");
await Assert.That(CheckBoxAssist.GetCheckBoxSize(_testElement)).IsEqualTo(18.0);
await Assert.That(CheckBoxAssist.GetCheckBoxSize(testElement)).IsEqualTo(18.0);

// Assert setting works
CheckBoxAssist.SetCheckBoxSize(_testElement, 27.1);
await Assert.That(CheckBoxAssist.GetCheckBoxSize(_testElement)).IsEqualTo(27.1);
CheckBoxAssist.SetCheckBoxSize(testElement, 27.1);
await Assert.That(CheckBoxAssist.GetCheckBoxSize(testElement)).IsEqualTo(27.1);
}
}
Loading