diff --git a/src/Spectre.Console/StyleParser.cs b/src/Spectre.Console/StyleParser.cs index 24a910f..7ab6642 100644 --- a/src/Spectre.Console/StyleParser.cs +++ b/src/Spectre.Console/StyleParser.cs @@ -96,6 +96,21 @@ namespace Spectre.Console return null; } } + else if (int.TryParse(part, out var number)) + { + if (number < 0) + { + error = $"Color number must be greater than or equal to 0 (was {number})"; + return null; + } + else if (number > 255) + { + error = $"Color number must be less than or equal to 255 (was {number})"; + return null; + } + + color = number; + } else { error = !foreground diff --git a/test/Spectre.Console.Tests/Unit/StyleTests.cs b/test/Spectre.Console.Tests/Unit/StyleTests.cs index f90bde0..fa1088b 100644 --- a/test/Spectre.Console.Tests/Unit/StyleTests.cs +++ b/test/Spectre.Console.Tests/Unit/StyleTests.cs @@ -275,6 +275,31 @@ namespace Spectre.Console.Tests.Unit result.Background.ShouldBe(Color.Blue); } + [Theory] + [InlineData("12 on 24")] + public void Should_Parse_Colors_Numbers_Correctly(string style) + { + // Given, When + var result = Style.Parse(style); + + // Then + result.Foreground.ShouldBe(Color.Blue); + result.Background.ShouldBe(Color.DeepSkyBlue4_1); + } + + [Theory] + [InlineData("-12", "Color number must be greater than or equal to 0 (was -12)")] + [InlineData("256", "Color number must be less than or equal to 255 (was 256)")] + public void Should_Return_Error_If_Color_Number_Is_Invalid(string style, string expected) + { + // Given, When + var result = Record.Exception(() => Style.Parse(style)); + + // Then + result.ShouldNotBeNull(); + result.Message.ShouldBe(expected); + } + [Theory] [InlineData("rgb()", "Invalid RGB color 'rgb()'.")] [InlineData("rgb(", "Invalid RGB color 'rgb('.")]