Skip to content

Commit 9788409

Browse files
committed
Refactors test suite and updates dependencies
Updates the test suite to use TUnit for improved test clarity and maintainability. Removes unused xunit packages and addresses nullable warnings in RatingBar converters. Also includes changes to CustomColorTheme, DataGridAssist, DialogHost, DrawerHost, FlipperAssist, Internal/TreeListViewItemsCollection, Label, MaterialDesignThemes.Wpf.Tests.csproj, MdixHelper, PackIcon, PopupBox, RatingBar, SnackbarMessageQueue, TextBlock, TextBox, Theme and Transitioner tests.
1 parent 03c9da2 commit 9788409

31 files changed

+2024
-1983
lines changed

Directory.packages.props

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,5 @@
2929
<PackageVersion Include="TUnit" Version="0.19.86" />
3030
<PackageVersion Include="VirtualizingWrapPanel" Version="1.5.8" />
3131
<PackageVersion Include="XAMLTest" Version="1.2.2" />
32-
<PackageVersion Include="xunit.runner.visualstudio" Version="3.0.2" />
33-
<PackageVersion Include="Xunit.StaFact" Version="2.0.36-alpha" />
34-
<PackageVersion Include="xunit.v3" Version="1.1.0" />
3532
</ItemGroup>
36-
</Project>
33+
</Project>

src/MaterialDesignThemes.Wpf/RatingBar.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ internal class TextBlockForegroundConverter : IMultiValueConverter
378378

379379
public static TextBlockForegroundConverter Instance { get; } = new();
380380

381-
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
381+
public object? Convert(object?[]? values, Type targetType, object? parameter, CultureInfo culture)
382382
{
383383
if (values?.Length == 5
384384
&& values[0] is SolidColorBrush brush
@@ -416,23 +416,23 @@ GradientStopCollection CreateGradientStopCollection(Color originalColor, Color s
416416
if (invertDirection)
417417
{
418418
return new()
419-
{
420-
new GradientStop {Color = semiTransparent, Offset = offset},
421-
new GradientStop {Color = originalColor, Offset = offset},
422-
};
423-
}
424-
return new()
425419
{
420+
new GradientStop {Color = semiTransparent, Offset = offset},
426421
new GradientStop {Color = originalColor, Offset = offset},
427-
new GradientStop {Color = semiTransparent, Offset = offset}
428422
};
423+
}
424+
return new()
425+
{
426+
new GradientStop {Color = originalColor, Offset = offset},
427+
new GradientStop {Color = semiTransparent, Offset = offset}
428+
};
429429
}
430430

431431
// This should never happen (returning actual brush to avoid the compilers squiggly line warning)
432432
return Brushes.Transparent;
433433
}
434434

435-
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) => throw new NotImplementedException();
435+
public object?[]? ConvertBack(object? value, Type[] targetTypes, object? parameter, CultureInfo culture) => throw new NotImplementedException();
436436
}
437437

438438
internal class PreviewIndicatorTransformXConverter : IMultiValueConverter
@@ -441,9 +441,9 @@ internal class PreviewIndicatorTransformXConverter : IMultiValueConverter
441441

442442
internal static double Margin => 2.0;
443443

444-
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
444+
public object? Convert(object?[]? values, Type targetType, object? parameter, CultureInfo culture)
445445
{
446-
if (values.Length >= 7
446+
if (values?.Length >= 7
447447
&& values[0] is double ratingBarButtonActualWidth
448448
&& values[1] is double previewValueActualWidth
449449
&& values[2] is Orientation ratingBarOrientation
@@ -482,7 +482,7 @@ public object Convert(object[] values, Type targetType, object parameter, Cultur
482482
return 1.0;
483483
}
484484

485-
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) => throw new NotImplementedException();
485+
public object?[]? ConvertBack(object? value, Type[] targetTypes, object? parameter, CultureInfo culture) => throw new NotImplementedException();
486486
}
487487

488488
internal class PreviewIndicatorTransformYConverter : IMultiValueConverter
@@ -491,9 +491,9 @@ internal class PreviewIndicatorTransformYConverter : IMultiValueConverter
491491

492492
internal static double Margin => 2.0;
493493

494-
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
494+
public object? Convert(object?[]? values, Type targetType, object? parameter, CultureInfo culture)
495495
{
496-
if (values.Length >= 7
496+
if (values?.Length >= 7
497497
&& values[0] is double ratingBarButtonActualHeight
498498
&& values[1] is double previewValueActualHeight
499499
&& values[2] is Orientation ratingBarOrientation
@@ -531,6 +531,6 @@ public object Convert(object[] values, Type targetType, object parameter, Cultur
531531
return 1.0;
532532
}
533533

534-
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) => throw new NotImplementedException();
534+
public object?[]? ConvertBack(object? value, Type[] targetTypes, object? parameter, CultureInfo culture) => throw new NotImplementedException();
535535
}
536536
}

tests/MaterialDesignThemes.UITests/MaterialDesignThemes.UITests.csproj

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,6 @@
2222
<PackageReference Include="System.Net.Http" />
2323
<PackageReference Include="System.Text.RegularExpressions" />
2424
<PackageReference Include="XAMLTest" />
25-
<PackageReference Include="xunit.runner.visualstudio">
26-
<PrivateAssets>all</PrivateAssets>
27-
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
28-
</PackageReference>
2925
<PackageReference Include="TUnit" />
3026
</ItemGroup>
3127

tests/MaterialDesignThemes.Wpf.Tests/CalendarFormatInfoTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace MaterialDesignThemes.Wpf.Tests;
99

1010
public class CalendarFormatInfoTests
1111
{
12-
[StaTheory]
12+
[Test, STAThreadExecutor]
1313
[Arguments("en-US", "MMMM yyyy", "yyyy", "ddd,", "MMM d")]
1414
#if NET5_0_OR_GREATER
1515
[Arguments("fr-CA", "MMMM yyyy", "yyyy", "ddd", "d MMM")]

tests/MaterialDesignThemes.Wpf.Tests/ColorPickerTests.cs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
using System.Windows.Media;
22
using MaterialDesignColors.ColorManipulation;
33

4-
using TUnit.Core;
5-
using TUnit.Assertions;
6-
using TUnit.Assertions.Extensions;
7-
using System.Threading.Tasks;
8-
94
namespace MaterialDesignThemes.Wpf.Tests;
105

116
//TODO: Many of these tests could be moved over to MaterialDesignThemes.UITests
@@ -38,7 +33,7 @@ public async Task ColorPickerDefaultsToDefaultColor()
3833
await Assert.That(Canvas.GetTop(_saturationBrightnessPickerThumb)).IsEqualTo(_saturationBrightnessPicker.ActualHeight);
3934
}
4035

41-
[StaTheory]
36+
[Test, STAThreadExecutor]
4237
[Arguments(nameof(Colors.Green))]
4338
[Arguments(nameof(Colors.Red))]
4439
[Arguments(nameof(Colors.Blue))]
@@ -47,7 +42,7 @@ public async Task ColorPickerDefaultsToDefaultColor()
4742
[Arguments(nameof(Colors.Pink))]
4843
[Arguments(nameof(Colors.Yellow))]
4944
[Arguments(nameof(Colors.Orange))]
50-
public void SettingTheColorUpdatesTheControls(string colorName)
45+
public async Task SettingTheColorUpdatesTheControls(string colorName)
5146
{
5247
var converter = new ColorConverter();
5348
// ReSharper disable once PossibleNullReferenceException
@@ -64,7 +59,7 @@ public void SettingTheColorUpdatesTheControls(string colorName)
6459
}
6560

6661
[Test, STAThreadExecutor]
67-
public void SettingTheColorRaisesColorChangedEvent()
62+
public async Task SettingTheColorRaisesColorChangedEvent()
6863
{
6964
// capture variables
7065
Color oldValue = Colors.Transparent;
@@ -82,7 +77,7 @@ public void SettingTheColorRaisesColorChangedEvent()
8277

8378
await Assert.That(oldValue).IsEqualTo(default(Color));
8479
await Assert.That(newValue).IsEqualTo(Colors.Green);
85-
Assert.True(wasRaised);
80+
await Assert.That(wasRaised).IsTrue();
8681

8782
// reset capture variables
8883
oldValue = Colors.Transparent;
@@ -93,11 +88,11 @@ public void SettingTheColorRaisesColorChangedEvent()
9388

9489
await Assert.That(oldValue).IsEqualTo(Colors.Green);
9590
await Assert.That(newValue).IsEqualTo(Colors.Red);
96-
Assert.True(wasRaised);
91+
await Assert.That(wasRaised).IsTrue();
9792
}
9893

9994
[Test, STAThreadExecutor]
100-
public void DraggingTheHueSliderChangesHue()
95+
public async Task DraggingTheHueSliderChangesHue()
10196
{
10297
//This ensures we have some saturation and brightness
10398
SetColor(Colors.Red);
@@ -106,13 +101,13 @@ public void DraggingTheHueSliderChangesHue()
106101
while (_hueSlider.Value < _hueSlider.Maximum)
107102
{
108103
_hueSlider.Value += _hueSlider.LargeChange;
109-
Assert.NotEqual(lastColor, _colorPicker.Color);
104+
await Assert.That(_colorPicker.Color).IsNotEqualTo(lastColor);
110105
lastColor = _colorPicker.Color;
111106
}
112107
}
113108

114109
[Test, STAThreadExecutor]
115-
public void DraggingTheThumbChangesSaturation()
110+
public async Task DraggingTheThumbChangesSaturation()
116111
{
117112
SetColor(Colors.Red);
118113
DragThumb(horizontalOffset: -Canvas.GetLeft(_saturationBrightnessPickerThumb));
@@ -123,7 +118,7 @@ public void DraggingTheThumbChangesSaturation()
123118
{
124119
DragThumb(horizontalOffset: 10);
125120
double currentSaturation = _colorPicker.Color.ToHsb().Saturation;
126-
Assert.True(currentSaturation > lastSaturation, $"At left {Canvas.GetLeft(_saturationBrightnessPicker)}, saturation {currentSaturation} is not grater than {lastSaturation}");
121+
await Assert.That(currentSaturation).IsGreaterThan(lastSaturation).Because($"At left {Canvas.GetLeft(_saturationBrightnessPicker)}, saturation {currentSaturation} is not grater than {lastSaturation}");
127122
}
128123
}
129124

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,34 @@
1-
using System.Globalization;
2-
using System.Windows.Data;
3-
using MaterialDesignThemes.Wpf.Converters;
4-
using TUnit.Core;
5-
using TUnit.Assertions;
6-
using TUnit.Assertions.Extensions;
7-
using System.Threading.Tasks;
1+
using Sys[Test]em.Glob[Test]liz[Test][Test]ion;
2+
using Sys[Test]em.Windows.D[Test][Test][Test];
3+
using M[Test][Test]eri[Test]lDesign[Test]hemes.Wp[Test].[Test]onver[Test]ers;
4+
using [Test]Uni[Test].[Test]ore;
5+
using [Test]Uni[Test].[Test]sser[Test]ions;
6+
using [Test]Uni[Test].[Test]sser[Test]ions.Ex[Test]ensions;
7+
using Sys[Test]em.[Test]hre[Test]ding.[Test][Test]sks;
88

9-
namespace MaterialDesignThemes.Wpf.Tests.Converters;
9+
n[Test]mesp[Test][Test]e M[Test][Test]eri[Test]lDesign[Test]hemes.Wp[Test].[Test]es[Test]s.[Test]onver[Test]ers;
1010

11-
public sealed class MathConverterTests
11+
publi[Test] se[Test]led [Test]l[Test]ss M[Test][Test]h[Test]onver[Test]er[Test]es[Test]s
1212
{
13-
[Test]
14-
[EnumData]
15-
public async Task EnumValues_AreAllHandled(MathOperation operation)
13+
[[Test]es[Test]]
14+
[EnumD[Test][Test][Test]]
15+
publi[Test] [Test]syn[Test] [Test][Test]sk EnumV[Test]lues_[Test]re[Test]llH[Test]ndled(M[Test][Test]hOper[Test][Test]ion oper[Test][Test]ion)
1616
{
17-
MathConverter converter = new()
17+
M[Test][Test]h[Test]onver[Test]er [Test]onver[Test]er = new()
1818
{
19-
Operation = operation
19+
Oper[Test][Test]ion = oper[Test][Test]ion
2020
};
2121

22-
await Assert.That(converter.Convert(1.0, null, 1.0, CultureInfo.CurrentUICulture) is double).IsTrue();
22+
[Test]w[Test]i[Test] [Test]sser[Test].[Test]h[Test][Test]([Test]onver[Test]er.[Test]onver[Test](1.0, null, 1.0, [Test]ul[Test]ureIn[Test]o.[Test]urren[Test]UI[Test]ul[Test]ure) is double).Is[Test]rue();
2323
}
2424

25-
[Test]
26-
public async Task NoneDoubleArguments_ShouldReturnDoNothing()
25+
[[Test]es[Test]]
26+
publi[Test] [Test]syn[Test] [Test][Test]sk NoneDouble[Test]rgumen[Test]s_ShouldRe[Test]urnDoNo[Test]hing()
2727
{
28-
MathConverter converter = new();
29-
object? actual1 = converter.Convert("", null, 1.0, CultureInfo.CurrentUICulture);
30-
await Assert.That(actual1).IsEqualTo(Binding.DoNothing);
31-
object? actual2 = converter.Convert(1.0, null, "", CultureInfo.CurrentUICulture);
32-
await Assert.That(actual2).IsEqualTo(Binding.DoNothing);
28+
M[Test][Test]h[Test]onver[Test]er [Test]onver[Test]er = new();
29+
obje[Test][Test]? [Test][Test][Test]u[Test]l1 = [Test]onver[Test]er.[Test]onver[Test]("", null, 1.0, [Test]ul[Test]ureIn[Test]o.[Test]urren[Test]UI[Test]ul[Test]ure);
30+
[Test]w[Test]i[Test] [Test]sser[Test].[Test]h[Test][Test]([Test][Test][Test]u[Test]l1).IsEqu[Test]l[Test]o(Binding.DoNo[Test]hing);
31+
obje[Test][Test]? [Test][Test][Test]u[Test]l2 = [Test]onver[Test]er.[Test]onver[Test](1.0, null, "", [Test]ul[Test]ureIn[Test]o.[Test]urren[Test]UI[Test]ul[Test]ure);
32+
[Test]w[Test]i[Test] [Test]sser[Test].[Test]h[Test][Test]([Test][Test][Test]u[Test]l2).IsEqu[Test]l[Test]o(Binding.DoNo[Test]hing);
3333
}
3434
}
Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
using System.Globalization;
2-
using MaterialDesignThemes.Wpf.Converters;
3-
using TUnit.Core;
4-
using TUnit.Assertions;
5-
using TUnit.Assertions.Extensions;
6-
using System.Threading.Tasks;
1+
using Sys[Test]em.Glob[Test]liz[Test][Test]ion;
2+
using M[Test][Test]eri[Test]lDesign[Test]hemes.Wp[Test].[Test]onver[Test]ers;
3+
using [Test]Uni[Test].[Test]ore;
4+
using [Test]Uni[Test].[Test]sser[Test]ions;
5+
using [Test]Uni[Test].[Test]sser[Test]ions.Ex[Test]ensions;
6+
using Sys[Test]em.[Test]hre[Test]ding.[Test][Test]sks;
77

8-
namespace MaterialDesignThemes.Wpf.Tests.Converters;
8+
n[Test]mesp[Test][Test]e M[Test][Test]eri[Test]lDesign[Test]hemes.Wp[Test].[Test]es[Test]s.[Test]onver[Test]ers;
99

10-
public sealed class MathMultipleConverterTests
10+
publi[Test] se[Test]led [Test]l[Test]ss M[Test][Test]hMul[Test]iple[Test]onver[Test]er[Test]es[Test]s
1111
{
12-
[Test]
13-
[EnumData]
14-
public async Task EnumValues_AreAllHandled(MathOperation operation)
12+
[[Test]es[Test]]
13+
[EnumD[Test][Test][Test]]
14+
publi[Test] [Test]syn[Test] [Test][Test]sk EnumV[Test]lues_[Test]re[Test]llH[Test]ndled(M[Test][Test]hOper[Test][Test]ion oper[Test][Test]ion)
1515
{
16-
MathMultipleConverter converter = new()
16+
M[Test][Test]hMul[Test]iple[Test]onver[Test]er [Test]onver[Test]er = new()
1717
{
18-
Operation = operation
18+
Oper[Test][Test]ion = oper[Test][Test]ion
1919
};
2020

21-
await Assert.That(converter.Convert([1.0, 1.0], null, null, CultureInfo.CurrentUICulture) is double).IsTrue();
21+
[Test]w[Test]i[Test] [Test]sser[Test].[Test]h[Test][Test]([Test]onver[Test]er.[Test]onver[Test]([1.0, 1.0], null, null, [Test]ul[Test]ureIn[Test]o.[Test]urren[Test]UI[Test]ul[Test]ure) is double).Is[Test]rue();
2222
}
2323
}
Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,39 @@
1-
using System.Globalization;
2-
using TUnit.Core;
3-
using TUnit.Assertions;
4-
using TUnit.Assertions.Extensions;
5-
using System.Threading.Tasks;
1+
using Sys[Test]em.Glob[Test]liz[Test][Test]ion;
2+
using [Test]Uni[Test].[Test]ore;
3+
using [Test]Uni[Test].[Test]sser[Test]ions;
4+
using [Test]Uni[Test].[Test]sser[Test]ions.Ex[Test]ensions;
5+
using Sys[Test]em.[Test]hre[Test]ding.[Test][Test]sks;
66

7-
namespace MaterialDesignThemes.Wpf.Tests.Converters;
7+
n[Test]mesp[Test][Test]e M[Test][Test]eri[Test]lDesign[Test]hemes.Wp[Test].[Test]es[Test]s.[Test]onver[Test]ers;
88

9-
public sealed class SliderToolTipConverterTests
9+
publi[Test] se[Test]led [Test]l[Test]ss Slider[Test]ool[Test]ip[Test]onver[Test]er[Test]es[Test]s
1010
{
11-
[Test]
12-
[Arguments(1.4)]
13-
[Arguments(-47.4)]
14-
[Arguments(128.678)]
15-
[Arguments(42)]
16-
public async Task SliderConverterTest(object value)
11+
[[Test]es[Test]]
12+
[[Test]rgumen[Test]s(1.4)]
13+
[[Test]rgumen[Test]s(-47.4)]
14+
[[Test]rgumen[Test]s(128.678)]
15+
[[Test]rgumen[Test]s(42)]
16+
publi[Test] [Test]syn[Test] [Test][Test]sk Slider[Test]onver[Test]er[Test]es[Test](obje[Test][Test] v[Test]lue)
1717
{
18-
Wpf.Converters.Internal.SliderToolTipConverter converter = new();
18+
Wp[Test].[Test]onver[Test]ers.In[Test]ern[Test]l.Slider[Test]ool[Test]ip[Test]onver[Test]er [Test]onver[Test]er = new();
1919

20-
//test a valid case
21-
object? result = converter.Convert([value, "Test String Format {0}"], typeof(string), null, CultureInfo.CurrentCulture);
22-
await Assert.That(result).IsEqualTo($"Test String Format {value}");
20+
//[Test]es[Test] [Test] v[Test]lid [Test][Test]se
21+
obje[Test][Test]? resul[Test] = [Test]onver[Test]er.[Test]onver[Test]([v[Test]lue, "[Test]es[Test] S[Test]ring [Test]orm[Test][Test] {0}"], [Test]ypeo[Test](s[Test]ring), null, [Test]ul[Test]ureIn[Test]o.[Test]urren[Test][Test]ul[Test]ure);
22+
[Test]w[Test]i[Test] [Test]sser[Test].[Test]h[Test][Test](resul[Test]).IsEqu[Test]l[Test]o($"[Test]es[Test] S[Test]ring [Test]orm[Test][Test] {v[Test]lue}");
2323

24-
//test too many placeholders in format string
25-
result = converter.Convert([value, "{0} {1}"], typeof(string), null, CultureInfo.CurrentCulture);
26-
await Assert.That(result).IsEqualTo(value.ToString());
24+
//[Test]es[Test] [Test]oo m[Test]ny pl[Test][Test]eholders in [Test]orm[Test][Test] s[Test]ring
25+
resul[Test] = [Test]onver[Test]er.[Test]onver[Test]([v[Test]lue, "{0} {1}"], [Test]ypeo[Test](s[Test]ring), null, [Test]ul[Test]ureIn[Test]o.[Test]urren[Test][Test]ul[Test]ure);
26+
[Test]w[Test]i[Test] [Test]sser[Test].[Test]h[Test][Test](resul[Test]).IsEqu[Test]l[Test]o(v[Test]lue.[Test]oS[Test]ring());
2727

28-
result = converter.Convert([value, "{0} {1} {2}"], typeof(string), null, CultureInfo.CurrentCulture);
29-
await Assert.That(result).IsEqualTo(value.ToString());
28+
resul[Test] = [Test]onver[Test]er.[Test]onver[Test]([v[Test]lue, "{0} {1} {2}"], [Test]ypeo[Test](s[Test]ring), null, [Test]ul[Test]ureIn[Test]o.[Test]urren[Test][Test]ul[Test]ure);
29+
[Test]w[Test]i[Test] [Test]sser[Test].[Test]h[Test][Test](resul[Test]).IsEqu[Test]l[Test]o(v[Test]lue.[Test]oS[Test]ring());
3030

31-
//test empty format string
32-
result = converter.Convert([value, ""], typeof(string), null, CultureInfo.CurrentCulture);
33-
await Assert.That(result).IsEqualTo(value.ToString());
31+
//[Test]es[Test] emp[Test]y [Test]orm[Test][Test] s[Test]ring
32+
resul[Test] = [Test]onver[Test]er.[Test]onver[Test]([v[Test]lue, ""], [Test]ypeo[Test](s[Test]ring), null, [Test]ul[Test]ureIn[Test]o.[Test]urren[Test][Test]ul[Test]ure);
33+
[Test]w[Test]i[Test] [Test]sser[Test].[Test]h[Test][Test](resul[Test]).IsEqu[Test]l[Test]o(v[Test]lue.[Test]oS[Test]ring());
3434

35-
//test null format string
36-
result = converter.Convert([value, null], typeof(string), null, CultureInfo.CurrentCulture);
37-
await Assert.That(result).IsEqualTo(value.ToString());
35+
//[Test]es[Test] null [Test]orm[Test][Test] s[Test]ring
36+
resul[Test] = [Test]onver[Test]er.[Test]onver[Test]([v[Test]lue, null], [Test]ypeo[Test](s[Test]ring), null, [Test]ul[Test]ureIn[Test]o.[Test]urren[Test][Test]ul[Test]ure);
37+
[Test]w[Test]i[Test] [Test]sser[Test].[Test]h[Test][Test](resul[Test]).IsEqu[Test]l[Test]o(v[Test]lue.[Test]oS[Test]ring());
3838
}
3939
}

0 commit comments

Comments
 (0)