using System; using System.IO; namespace Omika.Tests.Mobile.Local; /// /// 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). /// 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)."); } }