- .NET 8 WPF app with full MVVM architecture - One-click boost: CPU, RAM, GPU, network, services, timer resolution - Real-time system monitor (LibreHardwareMonitor) - Auto game detection (30+ games) - RAM optimizer with kernel-level cleanup - Network optimizer (TCP registry tweaks) - Service manager, process manager, shader cache cleaner - Desktop widget overlay - Debug log viewer - Custom dark gaming theme with trans pride colors - 84 unit tests (xUnit) - Inno Setup installer script - Landing page website
176 lines
6.3 KiB
C#
176 lines
6.3 KiB
C#
using System.Globalization;
|
|
using System.Windows;
|
|
using System.Windows.Media;
|
|
using SpdUp.Converters;
|
|
|
|
namespace SpdUp.Tests;
|
|
|
|
/// <summary>
|
|
/// Tests for WPF value converters.
|
|
/// </summary>
|
|
public class ConverterTests
|
|
{
|
|
private static readonly CultureInfo Culture = CultureInfo.InvariantCulture;
|
|
|
|
// ── BoolToVisibilityConverter ─────────────────────────────
|
|
|
|
[Fact]
|
|
public void BoolToVisibility_True_ReturnsVisible()
|
|
{
|
|
var conv = new BoolToVisibilityConverter();
|
|
var result = conv.Convert(true, typeof(Visibility), null!, Culture);
|
|
Assert.Equal(Visibility.Visible, result);
|
|
}
|
|
|
|
[Fact]
|
|
public void BoolToVisibility_False_ReturnsCollapsed()
|
|
{
|
|
var conv = new BoolToVisibilityConverter();
|
|
var result = conv.Convert(false, typeof(Visibility), null!, Culture);
|
|
Assert.Equal(Visibility.Collapsed, result);
|
|
}
|
|
|
|
[Fact]
|
|
public void BoolToVisibility_ConvertBack_Visible_ReturnsTrue()
|
|
{
|
|
var conv = new BoolToVisibilityConverter();
|
|
var result = conv.ConvertBack(Visibility.Visible, typeof(bool), null!, Culture);
|
|
Assert.Equal(true, result);
|
|
}
|
|
|
|
[Fact]
|
|
public void BoolToVisibility_ConvertBack_Collapsed_ReturnsFalse()
|
|
{
|
|
var conv = new BoolToVisibilityConverter();
|
|
var result = conv.ConvertBack(Visibility.Collapsed, typeof(bool), null!, Culture);
|
|
Assert.Equal(false, result);
|
|
}
|
|
|
|
// ── InverseBoolToVisibilityConverter ──────────────────────
|
|
|
|
[Fact]
|
|
public void InverseBoolToVisibility_True_ReturnsCollapsed()
|
|
{
|
|
var conv = new InverseBoolToVisibilityConverter();
|
|
var result = conv.Convert(true, typeof(Visibility), null!, Culture);
|
|
Assert.Equal(Visibility.Collapsed, result);
|
|
}
|
|
|
|
[Fact]
|
|
public void InverseBoolToVisibility_False_ReturnsVisible()
|
|
{
|
|
var conv = new InverseBoolToVisibilityConverter();
|
|
var result = conv.Convert(false, typeof(Visibility), null!, Culture);
|
|
Assert.Equal(Visibility.Visible, result);
|
|
}
|
|
|
|
// ── PercentToColorConverter ──────────────────────────────
|
|
|
|
[Theory]
|
|
[InlineData(95f, 255, 69, 58)] // red for > 90
|
|
[InlineData(91f, 255, 69, 58)] // red at boundary
|
|
[InlineData(80f, 255, 159, 10)] // orange for > 70
|
|
[InlineData(71f, 255, 159, 10)] // orange at boundary
|
|
[InlineData(50f, 48, 209, 88)] // green for <= 70
|
|
[InlineData(0f, 48, 209, 88)] // green at zero
|
|
public void PercentToColor_ReturnsCorrectColor(float pct, byte r, byte g, byte b)
|
|
{
|
|
var conv = new PercentToColorConverter();
|
|
var result = conv.Convert(pct, typeof(Brush), null!, Culture) as SolidColorBrush;
|
|
|
|
Assert.NotNull(result);
|
|
Assert.Equal(r, result.Color.R);
|
|
Assert.Equal(g, result.Color.G);
|
|
Assert.Equal(b, result.Color.B);
|
|
}
|
|
|
|
[Fact]
|
|
public void PercentToColor_ConvertBack_Throws()
|
|
{
|
|
var conv = new PercentToColorConverter();
|
|
Assert.Throws<NotSupportedException>(() =>
|
|
conv.ConvertBack(null!, typeof(float), null!, Culture));
|
|
}
|
|
|
|
// ── NullToVisibilityConverter ────────────────────────────
|
|
|
|
[Fact]
|
|
public void NullToVisibility_Null_ReturnsCollapsed()
|
|
{
|
|
var conv = new NullToVisibilityConverter();
|
|
var result = conv.Convert(null!, typeof(Visibility), null!, Culture);
|
|
Assert.Equal(Visibility.Collapsed, result);
|
|
}
|
|
|
|
[Fact]
|
|
public void NullToVisibility_NotNull_ReturnsVisible()
|
|
{
|
|
var conv = new NullToVisibilityConverter();
|
|
var result = conv.Convert("something", typeof(Visibility), null!, Culture);
|
|
Assert.Equal(Visibility.Visible, result);
|
|
}
|
|
|
|
// ── FloatFormatConverter ─────────────────────────────────
|
|
|
|
[Fact]
|
|
public void FloatFormat_DefaultFormat_OneDecimal()
|
|
{
|
|
var conv = new FloatFormatConverter();
|
|
var result = (string)conv.Convert(42.567f, typeof(string), null!, CultureInfo.InvariantCulture);
|
|
// Converter uses current culture internally, so parse back to float
|
|
Assert.True(float.TryParse(result, System.Globalization.NumberStyles.Float, CultureInfo.CurrentCulture, out var parsed));
|
|
Assert.Equal(42.6f, parsed, 0.05f);
|
|
}
|
|
|
|
[Fact]
|
|
public void FloatFormat_CustomFormat()
|
|
{
|
|
var conv = new FloatFormatConverter();
|
|
var result = (string)conv.Convert(42.567f, typeof(string), "F2", CultureInfo.InvariantCulture);
|
|
Assert.True(float.TryParse(result, System.Globalization.NumberStyles.Float, CultureInfo.CurrentCulture, out var parsed));
|
|
Assert.Equal(42.57f, parsed, 0.005f);
|
|
}
|
|
|
|
// ── BoostButtonTextConverter ─────────────────────────────
|
|
|
|
[Fact]
|
|
public void BoostButtonText_True_ReturnsStopText()
|
|
{
|
|
var conv = new BoostButtonTextConverter();
|
|
var result = conv.Convert(true, typeof(string), null!, Culture);
|
|
Assert.Contains("STOP", result as string ?? "");
|
|
}
|
|
|
|
[Fact]
|
|
public void BoostButtonText_False_ReturnsBoostText()
|
|
{
|
|
var conv = new BoostButtonTextConverter();
|
|
var result = conv.Convert(false, typeof(string), null!, Culture);
|
|
Assert.Contains("BOOST", result as string ?? "");
|
|
}
|
|
|
|
// ── BoostButtonColorConverter ────────────────────────────
|
|
|
|
[Fact]
|
|
public void BoostButtonColor_True_ReturnsRed()
|
|
{
|
|
var conv = new BoostButtonColorConverter();
|
|
var result = conv.Convert(true, typeof(Brush), null!, Culture) as SolidColorBrush;
|
|
|
|
Assert.NotNull(result);
|
|
Assert.Equal(255, result.Color.R);
|
|
Assert.Equal(69, result.Color.G);
|
|
}
|
|
|
|
[Fact]
|
|
public void BoostButtonColor_False_ReturnsGreen()
|
|
{
|
|
var conv = new BoostButtonColorConverter();
|
|
var result = conv.Convert(false, typeof(Brush), null!, Culture) as SolidColorBrush;
|
|
|
|
Assert.NotNull(result);
|
|
Assert.Equal(48, result.Color.R);
|
|
Assert.Equal(209, result.Color.G);
|
|
}
|
|
}
|