Browse Source

WIP: added hittest range tests for FormattedTextImpl and code to shared project

donandren 9 years ago
parent
commit
af07f02ec3

+ 1 - 0
tests/Avalonia.RenderTests/Avalonia.RenderTests.projitems

@@ -9,6 +9,7 @@
     <Import_RootNamespace>Avalonia.RenderTests</Import_RootNamespace>
   </PropertyGroup>
   <ItemGroup>
+    <Compile Include="Media\FormattedTextImplTests.cs" />
     <Compile Include="Controls\ImageTests.cs" />
     <Compile Include="Controls\BorderTests.cs" />
     <Compile Include="Media\ImageBrushTests.cs" />

+ 41 - 1
tests/Avalonia.RenderTests/Media/FormattedTextImplTests.cs

@@ -8,6 +8,7 @@ using System.Linq;
 using Avalonia.Media;
 using Xunit;
 using Avalonia.Platform;
+using System.Globalization;
 
 #if AVALONIA_CAIRO
 namespace Avalonia.Cairo.RenderTests.Media
@@ -113,7 +114,7 @@ namespace Avalonia.Direct2D1.RenderTests.Media
                     fmt.Constraint = new Size(widthConstraint, 10000);
                 }
 
-                var lines = fmt.GetLines();
+                var lines = fmt.GetLines().ToArray();
                 Assert.Equal(linesCount, lines.Count());
             }
         }
@@ -139,5 +140,44 @@ namespace Avalonia.Direct2D1.RenderTests.Media
             }
         }
 
+
+        [Theory]
+        [InlineData("x", 0, 1, "0,0,7.20,13.59")]
+        [InlineData(stringword, 0, 4, "0,0,28.80,13.59")]
+        [InlineData(stringmiddlenewlines, 10, 10, "0,13.59,57.61,13.59")]
+        [InlineData(stringmiddlenewlines, 10, 20, "0,13.59,57.61,13.59;0,27.19,64.81,13.59")]
+        [InlineData(stringmiddlenewlines, 10, 15, "0,13.59,57.61,13.59;0,27.19,36.01,13.59")]
+        [InlineData(stringmiddlenewlines, 15, 15, "36.01,13.59,21.60,13.59;0,27.19,64.81,13.59")]
+        public void Should_HitTestRange_Correctly(string input,
+                            int index, int length,
+                            string expectedRects)
+        {
+            //parse expected result
+            var rects = expectedRects.Split(';').Select(s =>
+            {
+                double[] v = s.Split(',')
+                .Select(sd => double.Parse(sd, CultureInfo.InvariantCulture)).ToArray();
+                return new Rect(v[0], v[1], v[2], v[3]);
+            }).ToArray();
+
+            using (var fmt = Create(input, FontSize))
+            {
+                var htRes = fmt.HitTestTextRange(index, length).ToArray();
+
+                Assert.Equal(rects.Length, htRes.Length);
+
+                for (int i = 0; i < rects.Length; i++)
+                {
+                    var exr = rects[i];
+                    var r = htRes[i];
+
+                    Assert.Equal(exr.X, r.X, 2);
+                    Assert.Equal(exr.Y, r.Y, 2);
+                    Assert.Equal(exr.Width, r.Width, 2);
+                    Assert.Equal(exr.Height, r.Height, 2);
+                }
+            }
+        }
+
     }
 }