From 5ec758d790360bc81371b88409d5b263e288cba9 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Wed, 10 May 2023 14:58:58 +0600 Subject: [PATCH] Fix TokenParser --- .../Composition/Expressions/TokenParser.cs | 2 +- .../CompositionAnimationParserTests.cs | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 tests/Avalonia.Base.UnitTests/Composition/CompositionAnimationParserTests.cs diff --git a/src/Avalonia.Base/Rendering/Composition/Expressions/TokenParser.cs b/src/Avalonia.Base/Rendering/Composition/Expressions/TokenParser.cs index 8ecc0028ce..3991300fb5 100644 --- a/src/Avalonia.Base/Rendering/Composition/Expressions/TokenParser.cs +++ b/src/Avalonia.Base/Rendering/Composition/Expressions/TokenParser.cs @@ -243,7 +243,7 @@ namespace Avalonia.Rendering.Composition.Expressions else if (ch == '-') { if (len != 0) - return false; + break; len = c + 1; } else diff --git a/tests/Avalonia.Base.UnitTests/Composition/CompositionAnimationParserTests.cs b/tests/Avalonia.Base.UnitTests/Composition/CompositionAnimationParserTests.cs new file mode 100644 index 0000000000..fc6ea969d8 --- /dev/null +++ b/tests/Avalonia.Base.UnitTests/Composition/CompositionAnimationParserTests.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using Avalonia.Animation.Easings; +using Avalonia.Base.UnitTests.Rendering; +using Avalonia.Rendering; +using Avalonia.Rendering.Composition; +using Avalonia.Rendering.Composition.Expressions; +using Avalonia.Rendering.Composition.Server; +using Avalonia.Threading; +using Avalonia.UnitTests; +using Xunit; +using Xunit.Sdk; + +namespace Avalonia.Base.UnitTests.Composition; + +public class CompositionAnimationParserTests +{ + [Theory, + InlineData("Vector3(0.5+(4.0-0.5)* -2, 1, 0).X", -6.5)] + public void EvaluatesExpressionCorrectly(string expression, double value) + { + var expr = ExpressionParser.Parse(expression); + var ctx = new ExpressionEvaluationContext + { + ForeignFunctionInterface = BuiltInExpressionFfi.Instance, + }; + var res = expr.Evaluate(ref ctx); + double doubleRes; + if (res.Type == VariantType.Scalar) + doubleRes = res.Scalar; + else if (res.Type == VariantType.Double) + doubleRes = res.Double; + else + throw new Exception("Invalid result type: " + res.Type); + Assert.Equal(value, doubleRes); + } +} \ No newline at end of file