diff --git a/src/Spectre.Console/Live/Progress/ProgressTask.cs b/src/Spectre.Console/Live/Progress/ProgressTask.cs index c239de0..c0acfac 100644 --- a/src/Spectre.Console/Live/Progress/ProgressTask.cs +++ b/src/Spectre.Console/Live/Progress/ProgressTask.cs @@ -224,6 +224,11 @@ public sealed class ProgressTask : IProgress private double GetPercentage() { + if (MaxValue == 0) + { + return 100; + } + var percentage = (Value / MaxValue) * 100; percentage = Math.Min(100, Math.Max(0, percentage)); return percentage; diff --git a/src/Tests/Spectre.Console.Tests/Unit/Live/Progress/ProgressTests.cs b/src/Tests/Spectre.Console.Tests/Unit/Live/Progress/ProgressTests.cs index 65b463b..e8be9ec 100644 --- a/src/Tests/Spectre.Console.Tests/Unit/Live/Progress/ProgressTests.cs +++ b/src/Tests/Spectre.Console.Tests/Unit/Live/Progress/ProgressTests.cs @@ -118,6 +118,31 @@ public sealed class ProgressTests task.Value.ShouldBe(20); } + [Fact] + public void Setting_Max_Value_To_Zero_Should_Make_Percentage_OneHundred() + { + // Given + var console = new TestConsole() + .Interactive(); + + var task = default(ProgressTask); + var progress = new Progress(console) + .Columns(new[] { new ProgressBarColumn() }) + .AutoRefresh(false) + .AutoClear(false); + + // When + progress.Start(ctx => + { + task = ctx.AddTask("foo"); + task.MaxValue = 0; + }); + + // Then + task.Value.ShouldBe(0); + task.Percentage.ShouldBe(100); + } + [Fact] public void Setting_Value_Should_Override_Incremented_Value() {