Files
Phil-icyou 19ba425e79 Initial commit: SpdUp Windows Gaming Booster v1.0.0
- .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
2026-03-08 17:34:45 +01:00

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);
}
}