mirror of
https://github.com/Tyrrrz/CliFx.git
synced 2025-10-25 15:19:17 +00:00
Rename ProgressReporter to ProgressTicker
This commit is contained in:
@@ -9,7 +9,7 @@ using NUnit.Framework;
|
|||||||
namespace CliFx.Tests.Utilities
|
namespace CliFx.Tests.Utilities
|
||||||
{
|
{
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class ProgressReporterTests
|
public class ProgressTickerTests
|
||||||
{
|
{
|
||||||
[Test]
|
[Test]
|
||||||
public void Report_Test()
|
public void Report_Test()
|
||||||
@@ -20,14 +20,14 @@ namespace CliFx.Tests.Utilities
|
|||||||
using (var stdout = new StringWriter(formatProvider))
|
using (var stdout = new StringWriter(formatProvider))
|
||||||
{
|
{
|
||||||
var console = new VirtualConsole(TextReader.Null, false, stdout, false, TextWriter.Null, false);
|
var console = new VirtualConsole(TextReader.Null, false, stdout, false, TextWriter.Null, false);
|
||||||
var reporter = console.CreateProgressReporter();
|
var ticker = console.CreateProgressTicker();
|
||||||
|
|
||||||
var progressValues = Enumerable.Range(0, 100).Select(p => p / 100.0).ToArray();
|
var progressValues = Enumerable.Range(0, 100).Select(p => p / 100.0).ToArray();
|
||||||
var progressStringValues = progressValues.Select(p => p.ToString("P2", formatProvider)).ToArray();
|
var progressStringValues = progressValues.Select(p => p.ToString("P2", formatProvider)).ToArray();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
foreach (var progress in progressValues)
|
foreach (var progress in progressValues)
|
||||||
reporter.Report(progress);
|
ticker.Report(progress);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
stdout.ToString().Should().ContainAll(progressStringValues);
|
stdout.ToString().Should().ContainAll(progressStringValues);
|
||||||
@@ -41,13 +41,13 @@ namespace CliFx.Tests.Utilities
|
|||||||
using (var stdout = new StringWriter())
|
using (var stdout = new StringWriter())
|
||||||
{
|
{
|
||||||
var console = new VirtualConsole(stdout);
|
var console = new VirtualConsole(stdout);
|
||||||
var reporter = console.CreateProgressReporter();
|
var ticker = console.CreateProgressTicker();
|
||||||
|
|
||||||
var progressValues = Enumerable.Range(0, 100).Select(p => p / 100.0).ToArray();
|
var progressValues = Enumerable.Range(0, 100).Select(p => p / 100.0).ToArray();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
foreach (var progress in progressValues)
|
foreach (var progress in progressValues)
|
||||||
reporter.Report(progress);
|
ticker.Report(progress);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
stdout.ToString().Should().BeEmpty();
|
stdout.ToString().Should().BeEmpty();
|
||||||
@@ -8,8 +8,8 @@ namespace CliFx.Utilities
|
|||||||
public static class Extensions
|
public static class Extensions
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a progress reporter for this console.
|
/// Creates a <see cref="ProgressTicker"/> bound to this console.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static ProgressReporter CreateProgressReporter(this IConsole console) => new ProgressReporter(console);
|
public static ProgressTicker CreateProgressTicker(this IConsole console) => new ProgressTicker(console);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,18 +4,18 @@ using CliFx.Services;
|
|||||||
namespace CliFx.Utilities
|
namespace CliFx.Utilities
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Utility that provides continuous progress reporting to the console.
|
/// Utility for rendering current progress to the console that erases and rewrites output on every tick.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class ProgressReporter : IProgress<double>
|
public class ProgressTicker : IProgress<double>
|
||||||
{
|
{
|
||||||
private readonly IConsole _console;
|
private readonly IConsole _console;
|
||||||
|
|
||||||
private string _lastOutput = "";
|
private string _lastOutput = "";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes an instance of <see cref="ProgressReporter"/>.
|
/// Initializes an instance of <see cref="ProgressTicker"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ProgressReporter(IConsole console)
|
public ProgressTicker(IConsole console)
|
||||||
{
|
{
|
||||||
_console = console;
|
_console = console;
|
||||||
}
|
}
|
||||||
@@ -33,7 +33,7 @@ namespace CliFx.Utilities
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reports progress and renders it to console.
|
/// Erases previous output and renders new progress to the console.
|
||||||
/// If console's stdout is redirected, this method returns without doing anything.
|
/// If console's stdout is redirected, this method returns without doing anything.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Report(double progress)
|
public void Report(double progress)
|
||||||
10
Readme.md
10
Readme.md
@@ -265,15 +265,17 @@ var app = new CliApplicationBuilder()
|
|||||||
|
|
||||||
### Report progress
|
### Report progress
|
||||||
|
|
||||||
CliFx comes with a simple utility for rendering progress to the console, `ProgressReporter`. It implements a well-known `IProgress<double>` interface so you can pass it to methods that are aware of this abstraction.
|
CliFx comes with a simple utility for reporting progress to the console, `ProgressTicker`, which renders progress in-place on every tick.
|
||||||
|
|
||||||
To avoid polluting output when it's not bound to a console, `ProgressReporter` will simply no-op if stdout is redirected.
|
It implements a well-known `IProgress<double>` interface so you can pass it to methods that are aware of this abstraction.
|
||||||
|
|
||||||
|
To avoid polluting output when it's not bound to a console, `ProgressTicker` will simply no-op if stdout is redirected.
|
||||||
|
|
||||||
```c#
|
```c#
|
||||||
var progressReporter = console.CreateProgressReporter();
|
var progressTicker = console.CreateProgressTicker();
|
||||||
|
|
||||||
for (var i = 0.0; i <= 1; i += 0.01)
|
for (var i = 0.0; i <= 1; i += 0.01)
|
||||||
progressReporter.Report(i);
|
progressTicker.Report(i);
|
||||||
```
|
```
|
||||||
|
|
||||||
### Testing
|
### Testing
|
||||||
|
|||||||
Reference in New Issue
Block a user