diff --git a/src/Spectre.Console.Tests/Expectations/ProgressTests.Foo.verified.txt b/src/Spectre.Console.Tests/Expectations/ProgressTests.Should_Reduce_Width_If_Needed.verified.txt similarity index 100% rename from src/Spectre.Console.Tests/Expectations/ProgressTests.Foo.verified.txt rename to src/Spectre.Console.Tests/Expectations/ProgressTests.Should_Reduce_Width_If_Needed.verified.txt diff --git a/src/Spectre.Console.Tests/Unit/ProgressTests.cs b/src/Spectre.Console.Tests/Unit/ProgressTests.cs index 5bb724c..00dd482 100644 --- a/src/Spectre.Console.Tests/Unit/ProgressTests.cs +++ b/src/Spectre.Console.Tests/Unit/ProgressTests.cs @@ -59,7 +59,7 @@ namespace Spectre.Console.Tests.Unit } [Fact] - public Task Foo() + public Task Should_Reduce_Width_If_Needed() { // Given var console = new PlainConsole(width: 20); @@ -87,5 +87,29 @@ namespace Spectre.Console.Tests.Unit // Then return Verifier.Verify(console.Output); } + + [Fact] + public void Setting_Max_Value_Should_Set_The_MaxValue_And_Cap_Value() + { + // Given + var task = default(ProgressTask); + var console = new PlainConsole(); + var progress = new Progress(console) + .Columns(new[] { new ProgressBarColumn() }) + .AutoRefresh(false) + .AutoClear(false); + + // When + progress.Start(ctx => + { + task = ctx.AddTask("foo"); + task.Increment(100); + task.MaxValue = 20; + }); + + // Then + task.MaxValue.ShouldBe(20); + task.Value.ShouldBe(20); + } } } diff --git a/src/Spectre.Console/Progress/ProgressTask.cs b/src/Spectre.Console/Progress/ProgressTask.cs index 58c3c83..3a9861c 100644 --- a/src/Spectre.Console/Progress/ProgressTask.cs +++ b/src/Spectre.Console/Progress/ProgressTask.cs @@ -167,7 +167,7 @@ namespace Spectre.Console if (maxValue != null) { - _maxValue += maxValue.Value; + _maxValue = maxValue.Value; } if (increment != null) @@ -175,6 +175,12 @@ namespace Spectre.Console Value += increment.Value; } + // Need to cap the max value? + if (Value > _maxValue) + { + Value = _maxValue; + } + var timestamp = DateTime.Now; var threshold = timestamp - TimeSpan.FromSeconds(30);