From 4515d897059ff75db4c9686d4fb4de2ede6b3c07 Mon Sep 17 00:00:00 2001 From: Frank Ray <52075808+FrankRay78@users.noreply.github.com> Date: Fri, 22 Nov 2024 11:44:00 +0000 Subject: [PATCH] ProgressTask.GetPercentage() returns 100 when max value is 0 (#1694) --- .../Live/Progress/ProgressTask.cs | 5 ++++ .../Unit/Live/Progress/ProgressTests.cs | 25 +++++++++++++++++++ 2 files changed, 30 insertions(+) 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() {