51 lines
1.9 KiB
C#
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).");
|
|
}
|
|
}
|