< Summary

Information
Class: UIBlazor.Components.ToolViews.DiffViewLine
Assembly: UIBlazor
File(s): /home/runner/work/InvAit/InvAit/UIBlazor/Components/ToolViews/DiffViewLine.razor
Tag: 71_26091983037
Line coverage
0%
Covered lines: 0
Uncovered lines: 52
Coverable lines: 52
Total lines: 109
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 38
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
BuildRenderTree(...)0%420200%
get_Model()100%210%
get_Text()100%210%
.ctor(...)100%210%
get_Text()100%210%
get_Characters()100%210%
get_HasChanges()100%210%
get_IsFullyChanged()100%210%
get_CharacterCss()100%210%
get_WordCss()100%210%
GetWords()0%210140%
BuildWord(...)0%2040%

File(s)

/home/runner/work/InvAit/InvAit/UIBlazor/Components/ToolViews/DiffViewLine.razor

#LineLine coverage
 1@using DiffPlex.DiffBuilder.Model;
 2
 03@if (!string.IsNullOrEmpty(Model?.Text))
 4{
 05    @if (Model.Type == ChangeType.Unchanged)
 6    {
 07        @Model.Text
 8    }
 09    else if (Model.SubPieces is not null && Model.SubPieces.Count > 0)
 10    {
 011        @foreach (var word in GetWords())
 12        {
 013            @if (!word.HasChanges)
 14            {
 015                @word.Text
 16            }
 017            else if (word.IsFullyChanged)
 18            {
 019                <span class="@word.CharacterCss">@word.Text</span>
 20            }
 21            else
 22            {
 23                <span class="@word.WordCss">
 024                    @foreach (var ch in word.Characters)
 25                    {
 026                        @if (ch.IsChanged)
 27                        {
 028                            <span class="@ch.CssClass">@ch.Text</span>
 29                        }
 30                        else
 31                        {
 032                            @ch.Text
 33                        }
 34                    }
 35                </span>
 36            }
 37        }
 38    }
 39    else
 40    {
 041        @Model.Text
 42    }
 43}
 44
 45@code {
 046    [Parameter, EditorRequired] public DiffPiece Model { get; set; } = default!;
 47
 048    private sealed record CharInfo(string Text, bool IsChanged, string CssClass);
 49
 050    private sealed record WordGroup(
 051        string Text,
 052        List<CharInfo> Characters,
 053        bool HasChanges,
 054        bool IsFullyChanged,
 055        string CharacterCss,
 056        string WordCss);
 57
 58    private List<WordGroup> GetWords()
 59    {
 060        var words = new List<WordGroup>();
 061        var currentChars = new List<CharInfo>();
 62
 063        foreach (var sub in Model.SubPieces)
 64        {
 065            if (sub.Type == ChangeType.Imaginary) continue;
 066            var text = sub.Text ?? "";
 067            if (text.Length == 0) continue;
 68
 069            var isChanged = sub.Type != ChangeType.Unchanged;
 070            var info = new CharInfo(text, isChanged, $"{sub.Type.ToString().ToLower()}-character");
 71
 072            if (text.All(char.IsWhiteSpace))
 73            {
 074                if (currentChars.Count > 0)
 75                {
 076                    words.Add(BuildWord(currentChars));
 077                    currentChars = [];
 78                }
 079                words.Add(BuildWord([info]));
 80            }
 81            else
 82            {
 083                currentChars.Add(info);
 84            }
 85        }
 86
 087        if (currentChars.Count > 0)
 088            words.Add(BuildWord(currentChars));
 89
 090        return words;
 91    }
 92
 93    private static WordGroup BuildWord(List<CharInfo> chars)
 94    {
 095        var text = string.Concat(chars.Select(c => c.Text));
 096        var changed = chars.Where(c => c.IsChanged).ToList();
 097        var hasChanges = changed.Count > 0;
 098        var isFullyChanged = changed.Count == chars.Count;
 099        var dominantType = changed.FirstOrDefault()?.CssClass.Replace("-character", "") ?? "unchanged";
 100
 0101        return new WordGroup(
 0102            text,
 0103            chars,
 0104            hasChanges,
 0105            isFullyChanged,
 0106            $"{dominantType}-character",
 0107            $"{dominantType}-word");
 108    }
 109}