< Summary

Information
Class: MyNet.UI.Dialogs.MessageBox.MessageBoxService
Assembly: MyNet.UI
File(s): https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.UI/Dialogs/MessageBox/MessageBoxService.cs
Tag: 323_28699572109
Line coverage
89%
Covered lines: 25
Uncovered lines: 3
Coverable lines: 28
Total lines: 77
Line coverage: 89.2%
Branch coverage
25%
Covered branches: 1
Total branches: 4
Branch coverage: 25%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ShowAsync(...)100%11100%
ShowAsync()100%11100%
Create()100%210%
MapResult(...)25%5466.66%

File(s)

https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.UI/Dialogs/MessageBox/MessageBoxService.cs

#LineLine coverage
 1// -----------------------------------------------------------------------
 2// <copyright file="MessageBoxService.cs" company="Stéphane ANDRE">
 3// Copyright (c) Stéphane ANDRE. All rights reserved.
 4// </copyright>
 5// -----------------------------------------------------------------------
 6
 7using System;
 8using System.Threading;
 9using System.Threading.Tasks;
 10using MyNet.UI.Dialogs.ContentDialogs;
 11
 12namespace MyNet.UI.Dialogs.MessageBox;
 13
 14/// <summary>
 15/// Provides a service for displaying message boxes to the user.
 16/// Uses <see cref="IContentDialogService"/> directly to avoid a circular dependency
 17/// with <see cref="IDialogService"/>.
 18/// </summary>
 19/// <param name="factory">The factory used to create message box view models.</param>
 20/// <param name="contentDialogService">The content dialog service used to display the message box.</param>
 21public sealed class MessageBoxService(IMessageBoxFactory factory, IContentDialogService contentDialogService) : IMessage
 22{
 23    /// <inheritdoc />
 24    public Task<MessageBoxResult> ShowAsync(
 25        string message,
 26        string? title = null,
 27        MessageSeverity severity = MessageSeverity.Information,
 28        MessageBoxResultOption buttons = MessageBoxResultOption.Ok,
 29        MessageBoxResult defaultResult = MessageBoxResult.Ok,
 30        CancellationToken cancellationToken = default)
 31    {
 932        var options = new MessageBoxOptions
 933        {
 934            Message = message,
 935            Title = title,
 936            Severity = severity,
 937            Buttons = buttons,
 938            DefaultResult = defaultResult
 939        };
 40
 941        return ShowAsync(options, cancellationToken);
 42    }
 43
 44    /// <inheritdoc />
 45    public async Task<MessageBoxResult> ShowAsync(
 46        MessageBoxOptions options,
 47        CancellationToken cancellationToken = default)
 48    {
 949        ArgumentNullException.ThrowIfNull(options);
 50
 951        var messageBox = factory.Create(options);
 52
 953        var dialogOptions = new DialogOptions
 954        {
 955            Dialog = messageBox,
 956            IsModal = true
 957        };
 58
 959        var result = await contentDialogService
 960            .ShowAsync(messageBox, dialogOptions, cancellationToken)
 961            .ConfigureAwait(false);
 62
 963        return MapResult(result, options.DefaultResult);
 964    }
 65
 66    /// <inheritdoc />
 067    public IMessageBoxBuilder Create() => new MessageBoxBuilder(this);
 68
 69    private static MessageBoxResult MapResult(DialogResult<MessageBoxResult> result, MessageBoxResult defaultResult)
 970        => result.Outcome switch
 971        {
 1872            DialogOutcome.Success when result.Value is var value => value,
 073            DialogOutcome.Cancelled => MessageBoxResult.Cancel,
 074            _ => defaultResult
 975        };
 76}
 77