public void TryConvertNamedDirectionToAngle_UnknownDirection_ArgumentOutOfRangeException()
        {
            // Arrange
            var definition = new LinearGradientDefinition();

            // Act
            Action action = () => definition.TryConvertNamedDirectionToAngle("to down", out var result);

            // Assert
            action.Should().Throw <ArgumentOutOfRangeException>();
        }
        public void IsMatch_ProvidedToken_CorrectMatchResult(string token, bool expectedMatch)
        {
            // Arrange
            var definition = new LinearGradientDefinition();

            // Act
            var isMatch = definition.IsMatch(token);

            // Assert
            isMatch.Should().Be(expectedMatch);
        }
        public void TryConvertNamedDirectionToAngle_InvalidToken_NoSuccessZeroAngle(string token)
        {
            // Arrange
            var definition = new LinearGradientDefinition();

            // Act
            var success = definition.TryConvertNamedDirectionToAngle(token, out var result);

            // Assert
            success.Should().Be(false);
            result.Should().BeApproximately(0, 0.00001d);
        }
        public void TryConvertNamedDirectionToAngle_ValidToken_ConvertedAngle(string token, double expectedAngle)
        {
            // Arrange
            var definition = new LinearGradientDefinition();

            // Act
            var success = definition.TryConvertNamedDirectionToAngle(token, out var result);

            // Assert
            success.Should().Be(true);
            result.Should().BeApproximately(expectedAngle, 0.00001d);
        }
        public void TryConvertDegreeToAngle_CssToken_ConvertedCorrectly(string token, double expectedResult, bool expectedSuccess)
        {
            // Arrange
            var definition = new LinearGradientDefinition();

            // Act
            var success = definition.TryConvertDegreeToAngle(token, out var result);

            // Assert
            success.Should().Be(expectedSuccess);
            result.Should().BeApproximately(expectedResult, 0.00001d);
        }
        public void Parse_ValidGradientCss_ExpectedGradientReturned(string css, LinearGradient expectedGradient)
        {
            // Arrange
            var reader     = new CssReader(css);
            var builder    = new GradientBuilder();
            var definition = new LinearGradientDefinition();

            // Act
            definition.Parse(reader, builder);

            // Assert
            var result = builder.Build();

            using (new AssertionScope())
            {
                result.Should().HaveCount(1);
                var linearGradient = result[0] as LinearGradient;
                linearGradient.Should().NotBeNull();
                linearGradient.Should().BeEquivalentTo(expectedGradient);
            }
        }