• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

lduchosal / ipnetwork / 960

15 May 2026 07:18AM UTC coverage: 0.0% (-94.1%) from 94.053%
960

Pull #411

appveyor

web-flow
Merge ef6b054ce into 4cec191ae
Pull Request #411: Bump MSTest.TestFramework from 4.2.2 to 4.2.3

0 of 2438 relevant lines covered (0.0%)

0.0 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/ConsoleApplication/TextFormatter.cs
1
// <copyright file="TextFormatter.cs" company="IPNetwork">
2
// Copyright (c) IPNetwork. All rights reserved.
3
// </copyright>
4

5
namespace System.Net;
6

7
using System.Collections.Generic;
8
using System.IO;
9
using System.Numerics;
10

11
/// <summary>
12
/// Renders action results as human-readable text.
13
/// </summary>
14
public class TextFormatter : IFormatter
15
{
16
    private readonly TextWriter _writer;
17

18
    /// <summary>
19
    /// Initializes a new instance of the <see cref="TextFormatter"/> class.
20
    /// </summary>
21
    public TextFormatter(TextWriter writer)
×
22
    {
×
23
        _writer = writer;
×
24
    }
×
25

26
    /// <inheritdoc/>
27
    public void Write(ActionOutput output, ProgramContext ac)
28
    {
×
29
        output.WriteTo(this, ac);
×
30
    }
×
31

32
    /// <inheritdoc/>
33
    public void Write(ActionOutput.Networks output, ProgramContext ac)
34
    {
×
35
        WriteNetworkList(output.Items, ac);
×
36
    }
×
37

38
    /// <inheritdoc/>
39
    public void Write(ActionOutput.NetworkGroups output, ProgramContext ac)
40
    {
×
41
        for (int i = 0; i < output.Groups.Count; i++)
×
42
        {
×
43
            var group = output.Groups[i];
×
44
            if (group.Count == 0)
×
45
            {
×
46
                _writer.WriteLine("Unable to subnet ipnetwork {0} into cidr {1}", output.InputNetworks[i], output.SubnetCidr);
×
47
            }
×
48
            else
49
            {
×
50
                WriteNetworkList(group, ac);
×
51
            }
×
52

53
            WriteSeparator(output.Groups.Count, i + 1);
×
54
        }
×
55
    }
×
56

57
    /// <inheritdoc/>
58
    public void Write(ActionOutput.SubtractResults output, ProgramContext ac)
59
    {
×
60
        foreach (var ipn in output.Items)
×
61
        {
×
62
            _writer.WriteLine("{0}", ipn);
×
63
        }
×
64
    }
×
65

66
    /// <inheritdoc/>
67
    public void Write(ActionOutput.ContainResults output, ProgramContext ac)
68
    {
×
69
        foreach (var r in output.Items)
×
70
        {
×
71
            _writer.WriteLine("{0} contains {1} : {2}", r.Network, r.Test, r.Contains);
×
72
        }
×
73
    }
×
74

75
    /// <inheritdoc/>
76
    public void Write(ActionOutput.OverlapResults output, ProgramContext ac)
77
    {
×
78
        foreach (var r in output.Items)
×
79
        {
×
80
            _writer.WriteLine("{0} overlaps {1} : {2}", r.Network, r.Test, r.Overlaps);
×
81
        }
×
82
    }
×
83

84
    /// <inheritdoc/>
85
    public void Write(ActionOutput.IpAddresses output, ProgramContext ac)
86
    {
×
87
        foreach (var ipnetwork in output.InputNetworks)
×
88
        {
×
89
            if (ipnetwork.Cidr < 16)
×
90
            {
×
91
                Console.Error.WriteLine(
×
92
                    "WARNING: listing all IP addresses in {0} ({1} addresses). This may take a very long time.",
×
93
                    ipnetwork,
×
94
                    ipnetwork.Total);
×
95
            }
×
96
        }
×
97

98
        foreach (string addr in output.Items)
×
99
        {
×
100
            _writer.WriteLine("{0}", addr);
×
101
        }
×
102
    }
×
103

104
    /// <inheritdoc/>
105
    public void Write(ActionOutput.Error output, ProgramContext ac)
106
    {
×
107
        _writer.WriteLine(output.Message);
×
108
    }
×
109

110
    /// <inheritdoc/>
111
    public void Write(ActionOutput.UsageInfo output, ProgramContext ac)
112
    {
×
113
        if (output.Errors.Count > 0)
×
114
        {
×
115
            foreach (string error in output.Errors)
×
116
            {
×
117
                _writer.WriteLine(error);
×
118
            }
×
119

120
            return;
×
121
        }
122

123
        WriteUsageHelp(output);
×
124
    }
×
125

126
    private void WriteUsageHelp(ActionOutput.UsageInfo output)
127
    {
×
128
        _writer.WriteLine("Usage: {0}", output.Synopsis);
×
129
        _writer.WriteLine("Version: {0}", output.Version);
×
130

131
        foreach (var group in output.OptionGroups)
×
132
        {
×
133
            _writer.WriteLine();
×
134
            _writer.WriteLine(group.Name);
×
135

136
            int maxWidth = ComputeMaxFlagWidth(group.Options);
×
137

138
            foreach (var opt in group.Options)
×
139
            {
×
140
                string flagPart = opt.ArgName is not null
×
141
                    ? $"-{opt.Flag} {opt.ArgName}"
×
142
                    : $"-{opt.Flag}";
×
143
                _writer.WriteLine("\t{0} : {1}", flagPart.PadRight(maxWidth), opt.Description);
×
144
                if (opt.Example is not null)
×
145
                {
×
146
                    _writer.WriteLine("\t{0}   {1}", new string(' ', maxWidth), opt.Example);
×
147
                }
×
148
            }
×
149
        }
×
150

151
        _writer.WriteLine();
×
152
        _writer.WriteLine("networks  : {0} ", output.NetworksDescription);
×
153
        _writer.WriteLine("            ({0} )", string.Join(" ", output.NetworksExamples));
×
154
    }
×
155

156
    private static int ComputeMaxFlagWidth(List<UsageOption> options)
157
    {
×
158
        int maxWidth = 0;
×
159
        foreach (var opt in options)
×
160
        {
×
161
            int width = 1 + opt.Flag.Length;
×
162
            if (opt.ArgName is not null)
×
163
            {
×
164
                width += 1 + opt.ArgName.Length;
×
165
            }
×
166

167
            if (width > maxWidth)
×
168
            {
×
169
                maxWidth = width;
×
170
            }
×
171
        }
×
172

173
        return maxWidth;
×
174
    }
×
175

176
    private void WriteNetworkList(List<IPNetwork2> networks, ProgramContext ac)
177
    {
×
178
        for (int i = 0; i < networks.Count; i++)
×
179
        {
×
180
            WriteNetwork(networks[i], ac);
×
181
            WriteSeparator(networks.Count, i + 1);
×
182
        }
×
183
    }
×
184

185
    private void WriteNetwork(IPNetwork2 ipn, ProgramContext ac)
186
    {
×
187
        if (ac.IPNetwork) { _writer.WriteLine("IPNetwork   : {0}", ipn); }
×
188
        if (ac.Network) { _writer.WriteLine("Network     : {0}", ipn.Network); }
×
189
        if (ac.Netmask) { _writer.WriteLine("Netmask     : {0}", ipn.Netmask); }
×
190
        if (ac.Cidr) { _writer.WriteLine("Cidr        : {0}", ipn.Cidr); }
×
191
        if (ac.Broadcast) { _writer.WriteLine("Broadcast   : {0}", ipn.Broadcast); }
×
192
        if (ac.FirstUsable) { _writer.WriteLine("FirstUsable : {0}", ipn.FirstUsable); }
×
193
        if (ac.LastUsable) { _writer.WriteLine("LastUsable  : {0}", ipn.LastUsable); }
×
194
        if (ac.Usable) { _writer.WriteLine("Usable      : {0}", ipn.Usable); }
×
195
        if (ac.Total) { _writer.WriteLine("Total       : {0}", ipn.Total); }
×
196
    }
×
197

198
    private void WriteSeparator(BigInteger max, BigInteger index)
199
    {
×
200
        if (max > 1 && index != max)
×
201
        {
×
202
            _writer.WriteLine("--");
×
203
        }
×
204
    }
×
205
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc