Skip to content

Commit e94c9fe

Browse files
sallergaAdam Sällergård
andauthored
Fix unknown command throws System.InvalidOperationException: Enumeration already finished (#542)
* Update tests to run .NET 8 * Don't call enumerator.Current if MoveNext is not called or returns false in CommandArgumentEnumerator. --------- Co-authored-by: Adam Sällergård <[email protected]>
1 parent 14f9a49 commit e94c9fe

File tree

3 files changed

+7
-4
lines changed

3 files changed

+7
-4
lines changed

src/CommandLineUtils/Internal/CommandLineProcessor.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -519,10 +519,12 @@ public void Dispose()
519519
private sealed class CommandArgumentEnumerator : IEnumerator<CommandArgument>
520520
{
521521
private readonly IEnumerator<CommandArgument> _enumerator;
522+
private bool _currentValid;
522523

523524
public CommandArgumentEnumerator(IEnumerator<CommandArgument> enumerator)
524525
{
525526
_enumerator = enumerator;
527+
_currentValid = false;
526528
}
527529

528530
public CommandArgument Current => _enumerator.Current;
@@ -533,9 +535,10 @@ public CommandArgumentEnumerator(IEnumerator<CommandArgument> enumerator)
533535

534536
public bool MoveNext()
535537
{
536-
if (Current == null || !Current.MultipleValues)
538+
if (!_currentValid || !Current.MultipleValues)
537539
{
538-
return _enumerator.MoveNext();
540+
_currentValid = _enumerator.MoveNext();
541+
return _currentValid;
539542
}
540543

541544
// If current argument allows multiple values, we don't move forward and

test/CommandLineUtils.Tests/McMaster.Extensions.CommandLineUtils.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net7.0;net6.0</TargetFrameworks>
4+
<TargetFrameworks>net8.0;net7.0;net6.0</TargetFrameworks>
55
<TargetFrameworks Condition="'$(TestFullFramework)' != 'false'">$(TargetFrameworks);net472</TargetFrameworks>
66
<!-- Once xunit supports nullable reference types, I might reconsider -->
77
<Nullable>annotations</Nullable>

test/Hosting.CommandLine.Tests/McMaster.Extensions.Hosting.CommandLine.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net7.0;net6.0</TargetFrameworks>
4+
<TargetFrameworks>net8.0;net7.0;net6.0</TargetFrameworks>
55
<TargetFrameworks Condition="'$(TestFullFramework)' != 'false'">$(TargetFrameworks);net472</TargetFrameworks>
66
</PropertyGroup>
77

0 commit comments

Comments
 (0)