Przeglądaj źródła

Fix build errors in SceneGraph and DeferredRenderer tests.

Jeremy Koritzinsky 7 lat temu
rodzic
commit
952f89883d

+ 1 - 4
src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs

@@ -159,10 +159,7 @@ namespace Avalonia.Rendering.SceneGraph
             EnsureDrawOperationsCreated();
             var old = _drawOperations[index];
             _drawOperations[index] = operation.Clone();
-            if (old is IDisposable disposable)
-            {
-                disposable.Dispose();
-            }
+            old.Dispose();
         }
 
         /// <summary>

+ 1 - 1
tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs

@@ -359,7 +359,7 @@ namespace Avalonia.Visuals.UnitTests.Rendering
 
         private Mock<IDrawingContextImpl> GetLayerContext(DeferredRenderer renderer, IControl layerRoot)
         {
-            return Mock.Get(renderer.Layers[layerRoot].Bitmap.CreateDrawingContext(null));
+            return Mock.Get(renderer.Layers[layerRoot].Bitmap.Item.CreateDrawingContext(null));
         }
 
         private void IgnoreFirstFrame(Mock<IRenderLoop> loop, Mock<ISceneBuilder> sceneBuilder)

+ 7 - 6
tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/DeferredDrawingContextImplTests.cs

@@ -3,6 +3,7 @@ using System.Linq;
 using Avalonia.Media;
 using Avalonia.Rendering.SceneGraph;
 using Avalonia.UnitTests;
+using Avalonia.Utilities;
 using Avalonia.VisualTree;
 using Moq;
 using Xunit;
@@ -111,7 +112,7 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph
         public void Should_Not_Replace_Identical_DrawOperation()
         {
             var node = new VisualNode(new TestRoot(), null);
-            var operation = new RectangleNode(Matrix.Identity, Brushes.Red, null, new Rect(0, 0, 100, 100), 0);
+            var operation = RefCountable.Create(new RectangleNode(Matrix.Identity, Brushes.Red, null, new Rect(0, 0, 100, 100), 0));
             var layers = new SceneLayers(node.Visual);
             var target = new DeferredDrawingContextImpl(null, layers);
 
@@ -133,7 +134,7 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph
         public void Should_Replace_Different_DrawOperation()
         {
             var node = new VisualNode(new TestRoot(), null);
-            var operation = new RectangleNode(Matrix.Identity, Brushes.Red, null, new Rect(0, 0, 100, 100), 0);
+            var operation = RefCountable.Create(new RectangleNode(Matrix.Identity, Brushes.Red, null, new Rect(0, 0, 100, 100), 0));
             var layers = new SceneLayers(node.Visual);
             var target = new DeferredDrawingContextImpl(null, layers);
 
@@ -175,10 +176,10 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph
             var node = new VisualNode(new TestRoot(), null);
 
             node.LayerRoot = node.Visual;
-            node.AddDrawOperation(new RectangleNode(Matrix.Identity, Brushes.Red, null, new Rect(0, 0, 10, 100), 0));
-            node.AddDrawOperation(new RectangleNode(Matrix.Identity, Brushes.Red, null, new Rect(0, 0, 20, 100), 0));
-            node.AddDrawOperation(new RectangleNode(Matrix.Identity, Brushes.Red, null, new Rect(0, 0, 30, 100), 0));
-            node.AddDrawOperation(new RectangleNode(Matrix.Identity, Brushes.Red, null, new Rect(0, 0, 40, 100), 0));
+            node.AddDrawOperation(RefCountable.Create(new RectangleNode(Matrix.Identity, Brushes.Red, null, new Rect(0, 0, 10, 100), 0)));
+            node.AddDrawOperation(RefCountable.Create(new RectangleNode(Matrix.Identity, Brushes.Red, null, new Rect(0, 0, 20, 100), 0)));
+            node.AddDrawOperation(RefCountable.Create(new RectangleNode(Matrix.Identity, Brushes.Red, null, new Rect(0, 0, 30, 100), 0)));
+            node.AddDrawOperation(RefCountable.Create(new RectangleNode(Matrix.Identity, Brushes.Red, null, new Rect(0, 0, 40, 100), 0)));
 
             var layers = new SceneLayers(node.Visual);
             var target = new DeferredDrawingContextImpl(null, layers);

+ 22 - 6
tests/Avalonia.Visuals.UnitTests/Rendering/SceneGraph/VisualNodeTests.cs

@@ -1,5 +1,6 @@
 using System;
 using Avalonia.Rendering.SceneGraph;
+using Avalonia.Utilities;
 using Avalonia.VisualTree;
 using Moq;
 using Xunit;
@@ -43,7 +44,7 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph
             var node = new VisualNode(Mock.Of<IVisual>(), null);
             var collection = node.DrawOperations;
 
-            node.AddDrawOperation(Mock.Of<IDrawOperation>());
+            node.AddDrawOperation(RefCountable.Create(Mock.Of<IDrawOperation>()));
 
             Assert.NotSame(collection, node.DrawOperations);
         }
@@ -52,7 +53,7 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph
         public void Cloned_Nodes_Should_Share_DrawOperations_Collection()
         {
             var node1 = new VisualNode(Mock.Of<IVisual>(), null);
-            node1.AddDrawOperation(Mock.Of<IDrawOperation>());
+            node1.AddDrawOperation(RefCountable.Create(Mock.Of<IDrawOperation>()));
 
             var node2 = node1.Clone(null);
 
@@ -63,18 +64,33 @@ namespace Avalonia.Visuals.UnitTests.Rendering.SceneGraph
         public void Adding_DrawOperation_To_Cloned_Node_Should_Create_New_Collection()
         {
             var node1 = new VisualNode(Mock.Of<IVisual>(), null);
-            var operation1 = Mock.Of<IDrawOperation>();
+            var operation1 = RefCountable.Create(Mock.Of<IDrawOperation>());
             node1.AddDrawOperation(operation1);
 
             var node2 = node1.Clone(null);
-            var operation2 = Mock.Of<IDrawOperation>();
+            var operation2 = RefCountable.Create(Mock.Of<IDrawOperation>());
             node2.ReplaceDrawOperation(0, operation2);
 
             Assert.NotSame(node1.DrawOperations, node2.DrawOperations);
             Assert.Equal(1, node1.DrawOperations.Count);
             Assert.Equal(1, node2.DrawOperations.Count);
-            Assert.Same(operation1, node1.DrawOperations[0]);
-            Assert.Same(operation2, node2.DrawOperations[0]);
+            Assert.Same(operation1.Item, node1.DrawOperations[0].Item);
+            Assert.Same(operation2.Item, node2.DrawOperations[0].Item);
+        }
+
+        [Fact]
+        public void DrawOperations_In_Cloned_Node_Are_Cloned()
+        {
+            var node1 = new VisualNode(Mock.Of<IVisual>(), null);
+            var operation1 = RefCountable.Create(Mock.Of<IDrawOperation>());
+            node1.AddDrawOperation(operation1);
+
+            var node2 = node1.Clone(null);
+            var operation2 = RefCountable.Create(Mock.Of<IDrawOperation>());
+            node2.AddDrawOperation(operation2);
+            
+            Assert.Same(node1.DrawOperations[0].Item, node2.DrawOperations[0].Item);
+            Assert.NotSame(node1.DrawOperations[0], node2.DrawOperations[0]);
         }
     }
 }