Balkenbreiten hingen bisher an einer im ViewModel hart codierten Pixelkonstante; Grid.ColumnDefinitions ließ sich dafür nicht binden (AVLN3000, kein Setter bei kompilierten Bindings), deshalb neuer FractionWidthConverter (MultiBinding gegen die gerenderte Breite einer Track-Border statt Grid-Sternspalten). Tagesüberblick zeigt jetzt denselben gestapelten Balken statt vier Einzelzeilen. AbsenceTooltip und TodayUnexcusedPercent waren berechnet aber ungebunden, jetzt sichtbar. Status-Zeilen bekommen zusätzlich zur Farbe ein vorangestelltes Symbol (Barrierefreiheit). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
38 lines
1.2 KiB
C#
38 lines
1.2 KiB
C#
using System.Globalization;
|
|
using LehrerApp.Desktop.Converters;
|
|
using Xunit;
|
|
|
|
namespace LehrerApp.Desktop.Tests;
|
|
|
|
public sealed class FractionWidthConverterTests
|
|
{
|
|
[Fact]
|
|
public void Convert_MultipliziertTrackbreiteMitAnteil()
|
|
{
|
|
var result = FractionWidthConverter.Instance.Convert(
|
|
[200d, 0.25d], typeof(double), null, CultureInfo.InvariantCulture);
|
|
|
|
Assert.Equal(50d, result);
|
|
}
|
|
|
|
[Fact]
|
|
public void Convert_LiefertNullBreiteBeiUngueltigenWerten()
|
|
{
|
|
// Bounds.Width kann vor dem ersten Layout-Pass NaN sein (Element noch nicht gemessen) —
|
|
// darf nicht zu einer negativen oder undefinierten Breite führen.
|
|
Assert.Equal(0d, FractionWidthConverter.Instance.Convert(
|
|
[double.NaN, 0.5d], typeof(double), null, CultureInfo.InvariantCulture));
|
|
Assert.Equal(0d, FractionWidthConverter.Instance.Convert(
|
|
["not a double", 0.5d], typeof(double), null, CultureInfo.InvariantCulture));
|
|
}
|
|
|
|
[Fact]
|
|
public void Convert_ClamptNegativeErgebnisseAufNull()
|
|
{
|
|
var result = FractionWidthConverter.Instance.Convert(
|
|
[100d, -0.2d], typeof(double), null, CultureInfo.InvariantCulture);
|
|
|
|
Assert.Equal(0d, result);
|
|
}
|
|
}
|