浏览代码

Special case for hit testing in unit tests.

When not in a unit test, only update the scene from the render loop.
Steven Kirk 9 年之前
父节点
当前提交
db26fe3626

+ 12 - 4
src/Avalonia.Visuals/Rendering/DeferredRenderer.cs

@@ -33,8 +33,12 @@ namespace Avalonia.Rendering
 
 
             _root = root;
             _root = root;
             _scene = new Scene(root);
             _scene = new Scene(root);
-            _renderLoop = renderLoop;
-            _renderLoop.Tick += OnRenderLoopTick;
+
+            if (renderLoop != null)
+            {
+                _renderLoop = renderLoop;
+                _renderLoop.Tick += OnRenderLoopTick;
+            }
         }
         }
 
 
         public bool DrawFps { get; set; }
         public bool DrawFps { get; set; }
@@ -53,13 +57,17 @@ namespace Avalonia.Rendering
 
 
         public void Dispose()
         public void Dispose()
         {
         {
-            _renderLoop.Tick -= OnRenderLoopTick;
+            if (_renderLoop != null)
+            {
+                _renderLoop.Tick -= OnRenderLoopTick;
+            }
         }
         }
 
 
         public IEnumerable<IVisual> HitTest(Point p, Func<IVisual, bool> filter)
         public IEnumerable<IVisual> HitTest(Point p, Func<IVisual, bool> filter)
         {
         {
-            if (_needsUpdate)
+            if (_renderLoop == null && _needsUpdate)
             {
             {
+                // When unit testing the renderLoop may be null, so update the scene manually.
                 UpdateScene();
                 UpdateScene();
             }
             }
 
 

+ 0 - 1
tests/Avalonia.Visuals.UnitTests/VisualTree/VisualExtensionsTests_GetVisualsAt.cs

@@ -456,7 +456,6 @@ namespace Avalonia.Visuals.UnitTests.VisualTree
             return UnitTestApplication.Start(
             return UnitTestApplication.Start(
                 new TestServices(
                 new TestServices(
                     renderInterface: new MockRenderInterface(),
                     renderInterface: new MockRenderInterface(),
-                    renderLoop: Mock.Of<IRenderLoop>(),
                     renderer: (root, loop) => new DeferredRenderer(root, loop)));
                     renderer: (root, loop) => new DeferredRenderer(root, loop)));
         }
         }
     }
     }