Skip to content

Commit df4803d

Browse files
committed
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.
1 parent 2a85a27 commit df4803d

23 files changed

+485
-453
lines changed

src/MaterialDesignThemes.Wpf/DialogHost.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public class DialogHost : ContentControl
5050
/// </summary>
5151
public static readonly RoutedCommand CloseDialogCommand = new();
5252

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

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

224-
List<DialogHost> targets = new();
224+
List<DialogHost> targets = [];
225225
foreach (var instance in LoadedInstances.ToList())
226226
{
227227
if (instance.TryGetTarget(out DialogHost? dialogInstance))

src/MaterialDesignThemes.Wpf/Internal/TreeListViewItemsCollection.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ namespace MaterialDesignThemes.Wpf.Internal;
66

77
public class TreeListViewItemsCollection : ObservableCollection<object?>
88
{
9-
private List<int> ItemLevels { get; } = new();
10-
private List<bool> ItemIsExpanded { get; } = new();
9+
private List<int> ItemLevels { get; } = [];
10+
private List<bool> ItemIsExpanded { get; } = [];
1111

1212
public TreeListViewItemsCollection(object? wrappedSource)
1313
{

tests/MaterialDesignThemes.UITests/MaterialDesignThemes.UITests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
<ItemGroup>
2929
<Using Include="MaterialDesignThemes.Wpf" />
30-
<Using Include="MaterialDesignThemes.UITests.TUnit"/>
30+
<Using Include="MaterialDesignThemes.Tests.TUnit"/>
3131
<Using Include="XamlTest" />
3232
</ItemGroup>
3333

tests/MaterialDesignThemes.UITests/TUnit/IsCloseToExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using TUnit.Assertions.AssertConditions.Interfaces;
55
using TUnit.Assertions.AssertionBuilders;
66

7-
namespace MaterialDesignThemes.UITests.TUnit;
7+
namespace MaterialDesignThemes.Tests.TUnit;
88

99
public static class IsCloseToExtensions
1010
{

tests/MaterialDesignThemes.Wpf.Tests/ButtonProgressAssistTests.cs

Lines changed: 42 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,109 +2,113 @@
22

33
namespace MaterialDesignThemes.Wpf.Tests;
44

5+
[TestExecutor<STAThreadExecutor>]
56
public class ButtonProgressAssistTests
67
{
7-
private readonly Button _testElement;
88

9-
public ButtonProgressAssistTests()
10-
{
11-
_testElement = new Button();
12-
}
13-
14-
[Test, STAThreadExecutor]
9+
[Test]
1510
public async Task TestMinimumProperty()
1611
{
12+
Button testElement = new();
13+
1714
// Assert defaults
1815
await Assert.That(ButtonProgressAssist.MinimumProperty.Name).IsEqualTo("Minimum");
19-
await Assert.That(ButtonProgressAssist.GetMinimum(_testElement)).IsEqualTo(default);
16+
await Assert.That(ButtonProgressAssist.GetMinimum(testElement)).IsEqualTo(default);
2017

2118
// Assert setting works
22-
ButtonProgressAssist.SetMinimum(_testElement, 133.14);
23-
await Assert.That(ButtonProgressAssist.GetMinimum(_testElement)).IsEqualTo(133.14);
19+
ButtonProgressAssist.SetMinimum(testElement, 133.14);
20+
await Assert.That(ButtonProgressAssist.GetMinimum(testElement)).IsEqualTo(133.14);
2421
}
2522

26-
[Test, STAThreadExecutor]
23+
[Test]
2724
public async Task TestMaximumProperty()
2825
{
26+
Button testElement = new();
2927
// Assert defaults
3028
await Assert.That(ButtonProgressAssist.MaximumProperty.Name).IsEqualTo("Maximum");
31-
await Assert.That(ButtonProgressAssist.GetMaximum(_testElement)).IsEqualTo(100.0);
29+
await Assert.That(ButtonProgressAssist.GetMaximum(testElement)).IsEqualTo(100.0);
3230

3331
// Assert setting works
34-
ButtonProgressAssist.SetMaximum(_testElement, 39.56);
35-
await Assert.That(ButtonProgressAssist.GetMaximum(_testElement)).IsEqualTo(39.56);
32+
ButtonProgressAssist.SetMaximum(testElement, 39.56);
33+
await Assert.That(ButtonProgressAssist.GetMaximum(testElement)).IsEqualTo(39.56);
3634
}
3735

38-
[Test, STAThreadExecutor]
36+
[Test]
3937
public async Task TestValueProperty()
4038
{
39+
Button testElement = new();
4140
// Assert defaults
4241
await Assert.That(ButtonProgressAssist.ValueProperty.Name).IsEqualTo("Value");
43-
await Assert.That(ButtonProgressAssist.GetValue(_testElement)).IsEqualTo(default);
42+
await Assert.That(ButtonProgressAssist.GetValue(testElement)).IsEqualTo(default);
4443

4544
// Assert setting works
46-
ButtonProgressAssist.SetValue(_testElement, 99.1);
47-
await Assert.That(ButtonProgressAssist.GetValue(_testElement)).IsEqualTo(99.1);
45+
ButtonProgressAssist.SetValue(testElement, 99.1);
46+
await Assert.That(ButtonProgressAssist.GetValue(testElement)).IsEqualTo(99.1);
4847
}
4948

50-
[Test, STAThreadExecutor]
49+
[Test]
5150
public async Task TestIsIndeterminateProperty()
5251
{
52+
Button testElement = new();
5353
// Assert defaults
5454
await Assert.That(ButtonProgressAssist.IsIndeterminateProperty.Name).IsEqualTo("IsIndeterminate");
55-
await Assert.That(ButtonProgressAssist.GetIsIndeterminate(_testElement)).IsEqualTo(default);
55+
await Assert.That(ButtonProgressAssist.GetIsIndeterminate(testElement)).IsEqualTo(default);
5656

5757
// Assert setting works
58-
ButtonProgressAssist.SetIsIndeterminate(_testElement, false);
59-
await Assert.That(ButtonProgressAssist.GetIsIndeterminate(_testElement)).IsFalse();
58+
ButtonProgressAssist.SetIsIndeterminate(testElement, false);
59+
await Assert.That(ButtonProgressAssist.GetIsIndeterminate(testElement)).IsFalse();
6060
}
6161

62-
[Test, STAThreadExecutor]
62+
[Test]
6363
public async Task TestIndicatorForegroundProperty()
6464
{
65+
Button testElement = new();
6566
// Assert defaults
6667
await Assert.That(ButtonProgressAssist.IndicatorForegroundProperty.Name).IsEqualTo("IndicatorForeground");
67-
await Assert.That(ButtonProgressAssist.GetIndicatorForeground(_testElement)).IsEqualTo(default);
68+
await Assert.That(ButtonProgressAssist.GetIndicatorForeground(testElement)).IsEqualTo(default);
6869

6970
// Assert setting works
70-
ButtonProgressAssist.SetIndicatorForeground(_testElement, Brushes.LightBlue);
71-
await Assert.That(ButtonProgressAssist.GetIndicatorForeground(_testElement)).IsEqualTo(Brushes.LightBlue);
71+
ButtonProgressAssist.SetIndicatorForeground(testElement, Brushes.LightBlue);
72+
await Assert.That(ButtonProgressAssist.GetIndicatorForeground(testElement)).IsEqualTo(Brushes.LightBlue);
7273
}
7374

74-
[Test, STAThreadExecutor]
75+
[Test]
7576
public async Task TestIndicatorBackgroundProperty()
7677
{
78+
Button testElement = new();
7779
// Assert defaults
7880
await Assert.That(ButtonProgressAssist.IndicatorBackgroundProperty.Name).IsEqualTo("IndicatorBackground");
79-
await Assert.That(ButtonProgressAssist.GetIndicatorBackground(_testElement)).IsEqualTo(default);
81+
await Assert.That(ButtonProgressAssist.GetIndicatorBackground(testElement)).IsEqualTo(default);
8082

8183
// Assert setting works
82-
ButtonProgressAssist.SetIndicatorBackground(_testElement, Brushes.DarkGoldenrod);
83-
await Assert.That(ButtonProgressAssist.GetIndicatorBackground(_testElement)).IsEqualTo(Brushes.DarkGoldenrod);
84+
ButtonProgressAssist.SetIndicatorBackground(testElement, Brushes.DarkGoldenrod);
85+
await Assert.That(ButtonProgressAssist.GetIndicatorBackground(testElement)).IsEqualTo(Brushes.DarkGoldenrod);
8486
}
8587

86-
[Test, STAThreadExecutor]
88+
[Test]
8789
public async Task TestIsIndicatorVisibleProperty()
8890
{
91+
Button testElement = new();
8992
// Assert defaults
9093
await Assert.That(ButtonProgressAssist.IsIndicatorVisibleProperty.Name).IsEqualTo("IsIndicatorVisible");
91-
await Assert.That(ButtonProgressAssist.GetIsIndicatorVisible(_testElement)).IsEqualTo(default);
94+
await Assert.That(ButtonProgressAssist.GetIsIndicatorVisible(testElement)).IsEqualTo(default);
9295

9396
// Assert setting works
94-
ButtonProgressAssist.SetIsIndicatorVisible(_testElement, true);
95-
await Assert.That(ButtonProgressAssist.GetIsIndicatorVisible(_testElement)).IsTrue();
97+
ButtonProgressAssist.SetIsIndicatorVisible(testElement, true);
98+
await Assert.That(ButtonProgressAssist.GetIsIndicatorVisible(testElement)).IsTrue();
9699
}
97100

98-
[Test, STAThreadExecutor]
101+
[Test]
99102
public async Task TestOpacityProperty()
100103
{
104+
Button testElement = new();
101105
// Assert defaults
102106
await Assert.That(ButtonProgressAssist.OpacityProperty.Name).IsEqualTo("Opacity");
103-
await Assert.That(ButtonProgressAssist.GetOpacity(_testElement)).IsEqualTo(default);
107+
await Assert.That(ButtonProgressAssist.GetOpacity(testElement)).IsEqualTo(default);
104108

105109
// Assert setting works
106-
ButtonProgressAssist.SetOpacity(_testElement, 311);
107-
await Assert.That(ButtonProgressAssist.GetOpacity(_testElement)).IsEqualTo(311);
110+
ButtonProgressAssist.SetOpacity(testElement, 311);
111+
await Assert.That(ButtonProgressAssist.GetOpacity(testElement)).IsEqualTo(311);
108112
}
109113

110114
}

tests/MaterialDesignThemes.Wpf.Tests/CalendarFormatInfoTests.cs

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
namespace MaterialDesignThemes.Wpf.Tests;
44

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

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

22-
/* Unmerged change from project 'MaterialDesignThemes.Wpf.Tests(net6.0-windows)'
23-
Before:
24-
await Assert.That(result.ComponentOnePattern).IsEqualTo(componentOne);
25-
After:
26-
Assert.Equal(result.ComponentOnePattern);
27-
*/
28-
await Assert.That(result.ComponentOnePattern).IsEqualTo(componentOne).IsEqualTo(componentOne);
24+
await Assert.That(result.ComponentOnePattern).IsEqualTo(componentOne);
2925
await Assert.That(result.ComponentTwoPattern).IsEqualTo(componentTwo);
3026
await Assert.That(result.ComponentThreePattern).IsEqualTo(componentThree);
3127
}
@@ -60,7 +56,7 @@ public async Task CanParseDayOfWeek(string s, string pattern, string separator,
6056
await Assert.That(result.IsFirst).IsEqualTo(isFirst);
6157
}
6258

63-
[Test, STAThreadExecutor]
59+
[Test]
6460
public async Task SettingYearPattern()
6561
{
6662
const string cultureName = "en-001";
@@ -73,7 +69,7 @@ public async Task SettingYearPattern()
7369
await Assert.That(result.ComponentThreePattern).IsEqualTo("yyyy");
7470
}
7571

76-
[Test, STAThreadExecutor]
72+
[Test]
7773
public async Task SettingYearPatternOfMultipleCultures()
7874
{
7975
string[] cultureNames = { "en-001", "en-150" };
@@ -85,7 +81,7 @@ public async Task SettingYearPatternOfMultipleCultures()
8581
}
8682
}
8783

88-
[Test, STAThreadExecutor]
84+
[Test]
8985
public async Task SettingDayOfWeekStyle()
9086
{
9187
const string cultureName = "en-001";
@@ -100,41 +96,41 @@ public async Task SettingDayOfWeekStyle()
10096
await Assert.That(result.ComponentTwoPattern).IsEqualTo("d MMM@");
10197
}
10298

103-
[Test, STAThreadExecutor]
99+
[Test]
104100
public async Task SettingDayOfWeekStyleOfMultipleCultures()
105101
{
106102
string[] cultureNames = { "en-001", "en-150" };
107103
CalendarFormatInfo.SetDayOfWeekStyle(cultureNames, new CalendarFormatInfo.DayOfWeekStyle("Z", "@", true));
108-
foreach (var cultureName in cultureNames)
104+
foreach (string cultureName in cultureNames)
109105
{
110106
var result = CalendarFormatInfo.FromCultureInfo(CultureInfo.GetCultureInfo(cultureName));
111107
await Assert.That(result.ComponentOnePattern).IsEqualTo("d MMM");
112108
await Assert.That(result.ComponentTwoPattern).IsEqualTo("Z@");
113109
}
114110
}
115111

116-
[Test, STAThreadExecutor]
112+
[Test]
117113
public async Task ResettingDayOfWeekStyle()
118114
{
119115
const string cultureName = "en-001";
120116
CalendarFormatInfo.SetDayOfWeekStyle(cultureName, new CalendarFormatInfo.DayOfWeekStyle("Z", "@", true));
121117
CalendarFormatInfo.ResetDayOfWeekStyle(cultureName);
122118
var result = CalendarFormatInfo.FromCultureInfo(CultureInfo.GetCultureInfo(cultureName));
123119
await Assert.That(result.ComponentOnePattern).IsEqualTo("d MMM");
124-
await Assert.That(result.ComponentTwoPattern).IsEqualTo("ddd");
120+
await Assert.That(result.ComponentTwoPattern).IsEqualTo("ddd,");
125121
}
126122

127-
[Test, STAThreadExecutor]
123+
[Test]
128124
public async Task ResettingDayOfWeekStyleOfMultipleCultures()
129125
{
130126
string[] cultureNames = { "en-001", "en-150" };
131127
CalendarFormatInfo.SetDayOfWeekStyle(cultureNames, new CalendarFormatInfo.DayOfWeekStyle("Z", "@", true));
132128
CalendarFormatInfo.ResetDayOfWeekStyle(cultureNames);
133-
foreach (var cultureName in cultureNames)
129+
foreach (string cultureName in cultureNames)
134130
{
135131
var result = CalendarFormatInfo.FromCultureInfo(CultureInfo.GetCultureInfo(cultureName));
136132
await Assert.That(result.ComponentOnePattern).IsEqualTo("d MMM");
137-
await Assert.That(result.ComponentTwoPattern).IsEqualTo("ddd");
133+
await Assert.That(result.ComponentTwoPattern).IsEqualTo("ddd,");
138134
}
139135
}
140136
}
Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
11
namespace MaterialDesignThemes.Wpf.Tests;
22

3+
[TestExecutor<STAThreadExecutor>]
34
public class CheckBoxAssistTests
45
{
5-
private readonly CheckBox _testElement;
6-
7-
public CheckBoxAssistTests()
8-
{
9-
_testElement = new CheckBox();
10-
}
11-
126
[Test, STAThreadExecutor]
137
public async Task TestCheckBoxSizeProperty()
148
{
9+
CheckBox testElement = new();
10+
1511
// Assert defaults
1612
await Assert.That(CheckBoxAssist.CheckBoxSizeProperty.Name).IsEqualTo("CheckBoxSize");
17-
await Assert.That(CheckBoxAssist.GetCheckBoxSize(_testElement)).IsEqualTo(18.0);
13+
await Assert.That(CheckBoxAssist.GetCheckBoxSize(testElement)).IsEqualTo(18.0);
1814

1915
// Assert setting works
20-
CheckBoxAssist.SetCheckBoxSize(_testElement, 27.1);
21-
await Assert.That(CheckBoxAssist.GetCheckBoxSize(_testElement)).IsEqualTo(27.1);
16+
CheckBoxAssist.SetCheckBoxSize(testElement, 27.1);
17+
await Assert.That(CheckBoxAssist.GetCheckBoxSize(testElement)).IsEqualTo(27.1);
2218
}
2319
}

0 commit comments

Comments
 (0)