2026-09-25 21:40:33 +01:00
|
|
|
using Avalonia.Controls;
|
|
|
|
|
using Avalonia.Headless.XUnit;
|
|
|
|
|
using Avalonia.VisualTree;
|
|
|
|
|
using PostIt.Controls;
|
2026-10-03 22:47:47 +01:00
|
|
|
using PostIt.Models;
|
2026-09-25 21:40:33 +01:00
|
|
|
using PostIt.ViewModels;
|
|
|
|
|
|
|
|
|
|
namespace PostIt.Tests;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// The <see cref="StatusBar"/> surfaces the page's action status
|
|
|
|
|
/// (success / warning / error message). The user reported being
|
|
|
|
|
/// unable to copy these messages — the status text was a
|
|
|
|
|
/// <c>TextBlock</c>, which Avalonia does not make selectable. It is
|
|
|
|
|
/// now a <see cref="SelectableTextBlock"/> so the message can be
|
|
|
|
|
/// selected and copied (Ctrl+C / context menu). This test pins that:
|
|
|
|
|
/// if the message control regresses to a plain <c>TextBlock</c>,
|
|
|
|
|
/// selectability is lost and the test fails.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class StatusBarTests
|
|
|
|
|
{
|
|
|
|
|
[AvaloniaFact]
|
|
|
|
|
public void Status_message_is_rendered_by_a_SelectableTextBlock()
|
|
|
|
|
{
|
2026-10-03 22:47:47 +01:00
|
|
|
var bar = new StatusBar {
|
|
|
|
|
DataContext =
|
|
|
|
|
StatusNotice.Error("Échec de la suppression : boom") };
|
2026-09-25 21:40:33 +01:00
|
|
|
var window = new Window { Content = bar };
|
|
|
|
|
window.Show();
|
|
|
|
|
|
|
|
|
|
var message = bar.GetVisualDescendants()
|
|
|
|
|
.OfType<SelectableTextBlock>()
|
|
|
|
|
.FirstOrDefault();
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(message);
|
|
|
|
|
Assert.Equal("Échec de la suppression : boom", message!.Text);
|
|
|
|
|
}
|
2026-10-03 22:47:47 +01:00
|
|
|
}
|