Files
Omika/tests/Omika.Tests/Mobile/Local/InterventionsViewMarginRegressionTests.cs
T
2026-10-23 18:46:50 +02:00

51 lines
1.9 KiB
C#

using System;
using System.IO;
namespace Omika.Tests.Mobile.Local;
/// <summary>
/// Régression du micro-lot 36b : un Margin mixte
/// "{DynamicResource SpaceS},0,0,0" résolvait SpaceS (un Double) sur une
/// propriété Thickness et levait une InvalidCastException au runtime
/// ("Unable to cast object of type 'System.Double' to type
/// 'Avalonia.Thickness'"), avalée par le ContentPresenter : toute la page
/// Interventions était vide.
///
/// Le correctif remplace ces marges par une Thickness statique.
/// Ce test verrouille le XAML source pour empêcher la réintroduction du
/// pattern mixte (DynamicResource suivi de littéraux séparés par des virgules).
/// </summary>
public sealed class InterventionsViewMarginRegressionTests
{
[Fact]
public void InterventionsView_AucunDynamicResourceDoubleMelangeADesThickness()
{
var xaml = File.ReadAllText(Path.Combine(
FindRepoRoot(), "src", "Omika.App", "Views", "InterventionsView.axaml"));
// Le pattern exact à l'origine de l'InvalidCastException.
Assert.DoesNotContain("{DynamicResource SpaceS},0,0,0", xaml);
// Garde-fou général : aucun DynamicResource immédiatement suivi de
// littéraux séparés par des virgules (mélange illégal pour les
// propriétés composites comme Thickness).
Assert.DoesNotMatch(@"\{DynamicResource [^}]+\},", xaml);
}
private static string FindRepoRoot()
{
var directory = new DirectoryInfo(AppContext.BaseDirectory);
while (directory is not null)
{
if (File.Exists(Path.Combine(directory.FullName, "Omika.slnx")))
{
return directory.FullName;
}
directory = directory.Parent;
}
throw new InvalidOperationException("Racine du dépôt Omika introuvable (Omika.slnx absent de la chaîne).");
}
}