diff --git a/tests/Avalonia.UnitTests/TestRoot.cs b/tests/Avalonia.UnitTests/TestRoot.cs index 90532d64a1..9ec053f075 100644 --- a/tests/Avalonia.UnitTests/TestRoot.cs +++ b/tests/Avalonia.UnitTests/TestRoot.cs @@ -49,8 +49,6 @@ namespace Avalonia.UnitTests public ILayoutManager LayoutManager => AvaloniaLocator.Current.GetService(); - public IRenderTarget RenderTarget => null; - public IRenderer Renderer { get; set; } public IAccessKeyHandler AccessKeyHandler => null; diff --git a/tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs b/tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs index 047cb05c26..cec95d4807 100644 --- a/tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs +++ b/tests/Avalonia.Visuals.UnitTests/Rendering/DeferredRendererTests.cs @@ -129,102 +129,98 @@ namespace Avalonia.Visuals.UnitTests.Rendering [Fact] public void Frame_Should_Create_Layer_For_Root() { - throw new NotImplementedException(); - //var loop = new Mock(); - //var root = new TestRoot(); - //var rootLayer = new Mock(); - //var dispatcher = new ImmediateDispatcher(); - - //var sceneBuilder = new Mock(); - //sceneBuilder.Setup(x => x.UpdateAll(It.IsAny())) - // .Callback(scene => - // { - // scene.Size = root.ClientSize; - // scene.Layers.Add(root).Dirty.Add(new Rect(root.ClientSize)); - // }); - - //var layers = new Mock(); - //layers.Setup(x => x.CreateLayer(root, root.ClientSize, 96, 96)).Returns(CreateLayer()); - - //var renderInterface = new Mock(); - - //var target = new DeferredRenderer( - // root, - // loop.Object, - // sceneBuilder: sceneBuilder.Object, - // layerFactory: layers.Object, - // dispatcher: dispatcher); - - //target.Start(); - //RunFrame(loop); - - //layers.Verify(x => x.CreateLayer(root, root.ClientSize, 96, 96)); + var loop = new Mock(); + var root = new TestRoot(); + var rootLayer = new Mock(); + var dispatcher = new ImmediateDispatcher(); + + var sceneBuilder = new Mock(); + sceneBuilder.Setup(x => x.UpdateAll(It.IsAny())) + .Callback(scene => + { + scene.Size = root.ClientSize; + scene.Layers.Add(root).Dirty.Add(new Rect(root.ClientSize)); + }); + + var renderInterface = new Mock(); + + var target = new DeferredRenderer( + root, + loop.Object, + sceneBuilder: sceneBuilder.Object, + //layerFactory: layers.Object, + dispatcher: dispatcher); + + target.Start(); + RunFrame(loop); + + var context = Mock.Get(root.CreateRenderTarget().CreateDrawingContext(null)); + context.Verify(x => x.CreateLayer(root.ClientSize)); } [Fact] public void Should_Create_And_Delete_Layers_For_Transparent_Controls() { - throw new NotImplementedException(); - //Border border; - //var root = new TestRoot - //{ - // Width = 100, - // Height = 100, - // Child = new Border - // { - // Background = Brushes.Red, - // Child = border = new Border - // { - // Background = Brushes.Green, - // } - // } - //}; - - //root.Measure(Size.Infinity); - //root.Arrange(new Rect(root.DesiredSize)); - - //var loop = new Mock(); - //var layerFactory = new MockRenderLayerFactory(new Dictionary - //{ - // { root, CreateLayer() }, - // { border, CreateLayer() }, - //}); - - //var target = new DeferredRenderer( - // root, - // loop.Object, - // layerFactory: layerFactory, - // dispatcher: new ImmediateDispatcher()); - //root.Renderer = target; - - //target.Start(); - //RunFrame(loop); - - //var rootContext = layerFactory.GetMockDrawingContext(root); - //var borderContext = layerFactory.GetMockDrawingContext(border); - - //rootContext.Verify(x => x.FillRectangle(Brushes.Red, new Rect(0, 0, 100, 100), 0), Times.Once); - //rootContext.Verify(x => x.FillRectangle(Brushes.Green, new Rect(0, 0, 100, 100), 0), Times.Once); - //borderContext.Verify(x => x.FillRectangle(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); - - //rootContext.ResetCalls(); - //borderContext.ResetCalls(); - //border.Opacity = 0.5; - //RunFrame(loop); - - //rootContext.Verify(x => x.FillRectangle(Brushes.Red, new Rect(0, 0, 100, 100), 0), Times.Once); - //rootContext.Verify(x => x.FillRectangle(Brushes.Green, new Rect(0, 0, 100, 100), 0), Times.Never); - //borderContext.Verify(x => x.FillRectangle(Brushes.Green, new Rect(0, 0, 100, 100), 0), Times.Once); - - //rootContext.ResetCalls(); - //borderContext.ResetCalls(); - //border.Opacity = 1; - //RunFrame(loop); - - //layerFactory.GetMockBitmap(border).Verify(x => x.Dispose()); - //rootContext.Verify(x => x.FillRectangle(Brushes.Red, new Rect(0, 0, 100, 100), 0), Times.Once); - //rootContext.Verify(x => x.FillRectangle(Brushes.Green, new Rect(0, 0, 100, 100), 0), Times.Once); - //borderContext.Verify(x => x.FillRectangle(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); + Border border; + var root = new TestRoot + { + Width = 100, + Height = 100, + Child = new Border + { + Background = Brushes.Red, + Child = border = new Border + { + Background = Brushes.Green, + } + } + }; + + root.Measure(Size.Infinity); + root.Arrange(new Rect(root.DesiredSize)); + + var rootLayer = CreateLayer(); + var borderLayer = CreateLayer(); + var renderTargetContext = Mock.Get(root.CreateRenderTarget().CreateDrawingContext(null)); + renderTargetContext.SetupSequence(x => x.CreateLayer(It.IsAny())) + .Returns(rootLayer) + .Returns(borderLayer); + + var loop = new Mock(); + var target = new DeferredRenderer( + root, + loop.Object, + dispatcher: new ImmediateDispatcher()); + root.Renderer = target; + + target.Start(); + RunFrame(loop); + + var rootContext = Mock.Get(rootLayer.CreateDrawingContext(null)); + var borderContext = Mock.Get(borderLayer.CreateDrawingContext(null)); + + rootContext.Verify(x => x.FillRectangle(Brushes.Red, new Rect(0, 0, 100, 100), 0), Times.Once); + rootContext.Verify(x => x.FillRectangle(Brushes.Green, new Rect(0, 0, 100, 100), 0), Times.Once); + borderContext.Verify(x => x.FillRectangle(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); + + rootContext.ResetCalls(); + borderContext.ResetCalls(); + border.Opacity = 0.5; + RunFrame(loop); + + rootContext.Verify(x => x.FillRectangle(Brushes.Red, new Rect(0, 0, 100, 100), 0), Times.Once); + rootContext.Verify(x => x.FillRectangle(Brushes.Green, new Rect(0, 0, 100, 100), 0), Times.Never); + borderContext.Verify(x => x.FillRectangle(Brushes.Green, new Rect(0, 0, 100, 100), 0), Times.Once); + + rootContext.ResetCalls(); + borderContext.ResetCalls(); + border.Opacity = 1; + RunFrame(loop); + + Mock.Get(borderLayer).Verify(x => x.Dispose()); + rootContext.Verify(x => x.FillRectangle(Brushes.Red, new Rect(0, 0, 100, 100), 0), Times.Once); + rootContext.Verify(x => x.FillRectangle(Brushes.Green, new Rect(0, 0, 100, 100), 0), Times.Once); + borderContext.Verify(x => x.FillRectangle(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } private void IgnoreFirstFrame(Mock loop, Mock sceneBuilder)