mirror of
				https://github.com/nsnail/spectre.console.git
				synced 2025-11-04 10:35:27 +08:00 
			
		
		
		
	Improve exception if a (multi)selection prompt is used incorrectly
Before this commit, the selection prompt would throw an `InvalidOperationException` (Sequence contains no elements) and the multi selection prompt would throw an `ArgumentOutOfRangeException` (Index was out of range. Must be non-negative and less than the size of the collection.) Both would occur because the prompts were never meant to be empty.
This commit is contained in:
		
				
					committed by
					
						
						Patrik Svensson
					
				
			
			
				
	
			
			
			
						parent
						
							b470af11f7
						
					
				
				
					commit
					c70a8b8fc5
				
			@@ -127,6 +127,23 @@ public sealed class MultiSelectionPromptTests
 | 
			
		||||
        // Then
 | 
			
		||||
        action.ShouldThrow<ArgumentOutOfRangeException>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [Fact] public void Should_Throw_Meaningful_Exception_For_Empty_Prompt()
 | 
			
		||||
    {
 | 
			
		||||
        // Given
 | 
			
		||||
        var console = new TestConsole();
 | 
			
		||||
        console.Profile.Capabilities.Interactive = true;
 | 
			
		||||
        console.Input.PushKey(ConsoleKey.Spacebar);
 | 
			
		||||
 | 
			
		||||
        var prompt = new MultiSelectionPrompt<string>();
 | 
			
		||||
 | 
			
		||||
        // When
 | 
			
		||||
        Action action = () => prompt.Show(console);
 | 
			
		||||
 | 
			
		||||
        // Then
 | 
			
		||||
        var exception = action.ShouldThrow<InvalidOperationException>();
 | 
			
		||||
        exception.Message.ShouldBe("Cannot show an empty selection prompt. Please call the AddChoice() method to configure the prompt.");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
file sealed class CustomItem
 | 
			
		||||
 
 | 
			
		||||
@@ -114,6 +114,22 @@ public sealed class SelectionPromptTests
 | 
			
		||||
        // Then
 | 
			
		||||
        selection.ShouldBe(choices[1]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [Fact] public void Should_Throw_Meaningful_Exception_For_Empty_Prompt()
 | 
			
		||||
    {
 | 
			
		||||
        // Given
 | 
			
		||||
        var console = new TestConsole();
 | 
			
		||||
        console.Profile.Capabilities.Interactive = true;
 | 
			
		||||
 | 
			
		||||
        var prompt = new SelectionPrompt<string>();
 | 
			
		||||
 | 
			
		||||
        // When
 | 
			
		||||
        Action action = () => prompt.Show(console);
 | 
			
		||||
 | 
			
		||||
        // Then
 | 
			
		||||
        var exception = action.ShouldThrow<InvalidOperationException>();
 | 
			
		||||
        exception.Message.ShouldBe("Cannot show an empty selection prompt. Please call the AddChoice() method to configure the prompt.");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
file sealed class CustomSelectionItem
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user