From 7a60b790b046af0ae3a2e5e98565699b60073eb2 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 14 Jan 2018 23:53:50 +0100 Subject: [PATCH 1/9] Added failing test for #1341. --- .../Avalonia.RenderTests/Shapes/PathTests.cs | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/Avalonia.RenderTests/Shapes/PathTests.cs b/tests/Avalonia.RenderTests/Shapes/PathTests.cs index 9a580794f8..fab867f428 100644 --- a/tests/Avalonia.RenderTests/Shapes/PathTests.cs +++ b/tests/Avalonia.RenderTests/Shapes/PathTests.cs @@ -362,5 +362,28 @@ namespace Avalonia.Direct2D1.RenderTests.Shapes await RenderToFile(target); CompareImages(); } + + [Fact] + public async Task Path_With_Rotated_Geometry() + { + var target = new Border + { + Width = 200, + Height = 200, + Background = Brushes.White, + Child = new Path + { + Fill = Brushes.Red, + Data = new RectangleGeometry + { + Rect = new Rect(50, 50, 100, 100), + Transform = new RotateTransform(45), + } + } + }; + + await RenderToFile(target); + CompareImages(); + } } } From 438bc89a9066391483c721c9f443c4c2970beca1 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Mon, 15 Jan 2018 00:07:24 +0100 Subject: [PATCH 2/9] Preserve defining geometry transform. Previous logic was overwriting `DefiningGeometry`'s transform with the transform calculated by the layout pass. Be sure to apply both transforms to the `RenderedGeometry`. --- src/Avalonia.Controls/Shapes/Shape.cs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Controls/Shapes/Shape.cs b/src/Avalonia.Controls/Shapes/Shape.cs index 2ea681891d..a1848a95b1 100644 --- a/src/Avalonia.Controls/Shapes/Shape.cs +++ b/src/Avalonia.Controls/Shapes/Shape.cs @@ -61,12 +61,26 @@ namespace Avalonia.Controls.Shapes { get { - if (_renderedGeometry == null) + if (_renderedGeometry == null && DefiningGeometry != null) { - if (DefiningGeometry != null) + if (_transform == Matrix.Identity) + { + _renderedGeometry = DefiningGeometry; + } + else { _renderedGeometry = DefiningGeometry.Clone(); - _renderedGeometry.Transform = new MatrixTransform(_transform); + + if (_renderedGeometry.Transform == null || + _renderedGeometry.Transform.Value == Matrix.Identity) + { + _renderedGeometry.Transform = new MatrixTransform(_transform); + } + else + { + _renderedGeometry.Transform = new MatrixTransform( + _renderedGeometry.Transform.Value * _transform); + } } } @@ -193,6 +207,7 @@ namespace Avalonia.Controls.Shapes return finalSize; } + private Size CalculateShapeSizeAndSetTransform(Size availableSize) { // This should probably use GetRenderBounds(strokeThickness) but then the calculations From 062f67cd189e4a50d470702b0a070aac351caf86 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Mon, 15 Jan 2018 00:10:44 +0100 Subject: [PATCH 3/9] Added expected test output. --- .../Path/Path_With_Rotated_Geometry.expected.png | Bin 0 -> 1100 bytes .../Path/Path_With_Rotated_Geometry.expected.png | Bin 0 -> 1149 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/TestFiles/Direct2D1/Shapes/Path/Path_With_Rotated_Geometry.expected.png create mode 100644 tests/TestFiles/Skia/Shapes/Path/Path_With_Rotated_Geometry.expected.png diff --git a/tests/TestFiles/Direct2D1/Shapes/Path/Path_With_Rotated_Geometry.expected.png b/tests/TestFiles/Direct2D1/Shapes/Path/Path_With_Rotated_Geometry.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..767690045966974d1b2f61cc8feb121c93054348 GIT binary patch literal 1100 zcmdVa-A|HX0LI}r#6%D^=d6?&Lsx5SlZwikYe1B+m6>Z(H?xa=q4|KH|T25VH z*7}%H(Q*Te5Up8lW>QAB8EMWW#Kiobh+8dE{HXi+Gdh6x$HRT?87I`Fr=@b)v22Q> zxC*%}1J7>qVy(sd(=5wc5o`w^QHgi=sQ7F)}QAW7h9{DUsoC=GRBkD@EL)oynX-ssL=MG^V^%{ zp1R)`BI`Sk&T69T#jM8a%O5Aiwema8A$%4#%`&zMl+wYF4B6ZKLJq#IamUNoh2D6X zbWISoxwxEvFfq*60dH}6zCqQg(A%NaI z2atSh3847;et=Qt3cy=ifPkRi1cb~G5Z+q^;5E+!IFJ1Wu-@2CenZF@0d_k9TrB}{ z8wuDgBsZj}ya1)03*-jlUUEbDF9Nia1jO|akl8?hMM!RFSNZ^0WKzx=-&1du@{?*V za~Q7@qjDp=8*0bq<xhzbRj}nZ5kmT{aG*Ou@^E>@NC2 zUlG?PFGOgnD`}s&%N94umGN?v4&=>Aj*RD~ElBNTC{n3I-m^!@cqz0OS!u^sP4^%V z*|Alt%t*T(TQ7YTnHIp-Ynn$o0@(5lpOKOPwmefa(iXs0Z>U2mT-fSObI6Y_Y(<7o z;x0*o3tLg+Q)HeCTaihNeB{7Z2TpuX?;N1zl3 K(_|JYUGWb9wxlKi literal 0 HcmV?d00001 diff --git a/tests/TestFiles/Skia/Shapes/Path/Path_With_Rotated_Geometry.expected.png b/tests/TestFiles/Skia/Shapes/Path/Path_With_Rotated_Geometry.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..7f258aa9de35ce524d04e6a97c285fd2ff3ce625 GIT binary patch literal 1149 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yu@pObhHwBu4M$1`kZa=U;uumf z=j~nFAQ?}Q){EQ=kDfd_2n;dij_rzsML7* zUoE>J=bSJ9y?1#$=-vPSs1WC$r*H4?QEL1@=O3SvkVjChh6rcP2h~^=op+DdswpKV z&cEHQDkS#x=h-f$M91fEpNVpITh{O1?GbSz^|_820LH(-|1@U z%q>=nRq@H%y^vQa(do9IsUYX%n{{vcJ!YJ+E8ggGNadTfjJlB8hW9D16AgC!b?@(L zX_Pgd9j?OjYRAK?N{J4~{mR8Tn=SwSVxDL)!R&i;M~mZ@-45<5JPY3P1}iNre!D(F zm{T@e-a|=f*Hw3gPLCHs_Khk^3$1HeCv~)}`yvjKxR?%-aM}-&*tw6{)5R(HFFQ~= z?HGrOAg6DSFi;Vnc^FWU#gz)6qK5{_Y(Qz}9%-ONnRyvd;>Ojp!Jn>F3C{lU%k<}0 z?Vq2Pe)XDh;)nl)^#1;n+w)J(w_h86$mJQQil>~M%b{h@xPS)Fo~1v*MI|TgoP*HB z4V{%hdk%N)${iWdcgvyav*d9tqM>b88mJ5y97ZfkN_8)i98yl7T`?trj%Fam7I6Up$yGiryc^eK0KjAI> z(Bu#&#J-;6$xI8No=%I3=?+I66W=-RKP9`RD0oo1kg6OU;HjICRfT89xd2d2UI2d!Wbyk`46Z{ z_N6wEIkOJLe5DLzuKd<`=YDr{-qydN_wK9P*QuDB`%Y(kpZT3dkexY0xWhu?$VZ@& zjWW_e=9xkulTj8VdgUKT^essAP92cR`35LD;uWQ`H)u!uPF6Uc1+!~Evaw7bmFb9jK|34^DrpUXO@geCx4r>2Vl literal 0 HcmV?d00001 From 589b76e9cd0579a9a62c3cec773d565976b9e446 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Thu, 18 Jan 2018 23:30:26 +0100 Subject: [PATCH 4/9] Moved render tests for each platform to their own directory. The test .cs files stay in the `Avalonia.RenderTests` directory but the D2D and Skia render test .csprojs are moved to their own directory: include the test files by using a glob in the .csproj. This avoids the hack we were having to do to get `BaseIntermediateOutputPath` to work - we no longer have this problem as now each .csproj has its own directory, it can use the default directory for intermediate files. --- ...ia.Direct2D1.RenderTests.v3.ncrunchproject | 3 ++ ...valonia.Skia.RenderTests.v3.ncrunchproject | 6 ++-- Avalonia.sln | 12 +++---- .../Avalonia.Direct2D1.RenderTests.csproj | 16 ++------- .../Properties/AssemblyInfo.cs | 2 -- tests/Avalonia.RenderTests/.gitignore | 2 -- .../Avalonia.RenderTests.projitems | 33 ------------------ .../Avalonia.RenderTests.shproj | 16 --------- .../Controls/TextBlockTests.cs | 5 +-- .../Properties/AssemblyInfo.cs | 2 -- tests/Avalonia.RenderTests/TestBase.cs | 2 +- .../Avalonia.Skia.RenderTests.csproj | 20 ++--------- .../Cairo/SVGPath/SVGPath.expected.png | Bin 1041 -> 0 bytes .../TextBlock/Wrapping_NoWrap.expected.png | Bin 0 -> 1206 bytes 14 files changed, 20 insertions(+), 99 deletions(-) rename tests/{Avalonia.RenderTests => Avalonia.Direct2D1.RenderTests}/Avalonia.Direct2D1.RenderTests.csproj (69%) delete mode 100644 tests/Avalonia.RenderTests/.gitignore delete mode 100644 tests/Avalonia.RenderTests/Avalonia.RenderTests.projitems delete mode 100644 tests/Avalonia.RenderTests/Avalonia.RenderTests.shproj rename tests/{Avalonia.RenderTests => Avalonia.Skia.RenderTests}/Avalonia.Skia.RenderTests.csproj (69%) delete mode 100644 tests/TestFiles/Cairo/SVGPath/SVGPath.expected.png create mode 100644 tests/TestFiles/Skia/Controls/TextBlock/Wrapping_NoWrap.expected.png diff --git a/.ncrunch/Avalonia.Direct2D1.RenderTests.v3.ncrunchproject b/.ncrunch/Avalonia.Direct2D1.RenderTests.v3.ncrunchproject index 04ab17c4e1..2627a59093 100644 --- a/.ncrunch/Avalonia.Direct2D1.RenderTests.v3.ncrunchproject +++ b/.ncrunch/Avalonia.Direct2D1.RenderTests.v3.ncrunchproject @@ -1,5 +1,8 @@  + + ..\TestFiles\Direct2D1\**.* + 3000 True diff --git a/.ncrunch/Avalonia.Skia.RenderTests.v3.ncrunchproject b/.ncrunch/Avalonia.Skia.RenderTests.v3.ncrunchproject index a8c3abe8f2..7fe2430013 100644 --- a/.ncrunch/Avalonia.Skia.RenderTests.v3.ncrunchproject +++ b/.ncrunch/Avalonia.Skia.RenderTests.v3.ncrunchproject @@ -1,7 +1,9 @@  - 1000 - True + + ..\TestFiles\Skia\**.* + + 3000 True \ No newline at end of file diff --git a/Avalonia.sln b/Avalonia.sln index a29f3dd754..679ef1579e 100644 --- a/Avalonia.sln +++ b/Avalonia.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.27004.2008 +VisualStudioVersion = 15.0.27130.2024 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Base", "src\Avalonia.Base\Avalonia.Base.csproj", "{B09B78D8-9B26-48B0-9149-D64A2F120F3F}" EndProject @@ -45,11 +45,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Layout.UnitTests", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Interactivity.UnitTests", "tests\Avalonia.Interactivity.UnitTests\Avalonia.Interactivity.UnitTests.csproj", "{08478EF5-44E8-42E9-92D6-15E00EC038D8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Direct2D1.RenderTests", "tests\Avalonia.RenderTests\Avalonia.Direct2D1.RenderTests.csproj", "{DABFD304-D6A4-4752-8123-C2CCF7AC7831}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Direct2D1.RenderTests", "tests\Avalonia.Direct2D1.RenderTests\Avalonia.Direct2D1.RenderTests.csproj", "{DABFD304-D6A4-4752-8123-C2CCF7AC7831}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Input.UnitTests", "tests\Avalonia.Input.UnitTests\Avalonia.Input.UnitTests.csproj", "{AC18926A-E784-40FE-B09D-BB0FE2B599F0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Direct2D1.UnitTests", "tests\Avalonia.Direct2D1.UnitTests\Avalonia.Direct2D1.UnitTests.csproj", "{EFB11458-9CDF-41C0-BE4F-44AF45A4CAB8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Direct2D1.UnitTests", "tests\Avalonia.Direct2D1.UnitTests\Avalonia.Direct2D1.UnitTests.csproj", "{EFB11458-9CDF-41C0-BE4F-44AF45A4CAB8}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Markup.Xaml.UnitTests", "tests\Avalonia.Markup.Xaml.UnitTests\Avalonia.Markup.Xaml.UnitTests.csproj", "{99135EAB-653D-47E4-A378-C96E1278CA44}" EndProject @@ -114,8 +114,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.DesignerSupport.Te EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.DesignerSupport.TestApp", "tests\Avalonia.DesignerSupport.TestApp\Avalonia.DesignerSupport.TestApp.csproj", "{F1381F98-4D24-409A-A6C5-1C5B1E08BB08}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Avalonia.RenderTests", "tests\Avalonia.RenderTests\Avalonia.RenderTests.shproj", "{48840EDD-24BF-495D-911E-2EB12AE75D3B}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VirtualizationTest", "samples\VirtualizationTest\VirtualizationTest.csproj", "{FBCAF3D0-2808-4934-8E96-3F607594517B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Interop", "Interop", "{A0CC0258-D18C-4AB3-854F-7101680FC3F9}" @@ -176,7 +174,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Direct3DInteropSample", "sa EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Win32.Interop", "src\Windows\Avalonia.Win32.Interop\Avalonia.Win32.Interop.csproj", "{CBC4FF2F-92D4-420B-BE21-9FE0B930B04E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Skia.RenderTests", "tests\Avalonia.RenderTests\Avalonia.Skia.RenderTests.csproj", "{E1582370-37B3-403C-917F-8209551B1634}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Skia.RenderTests", "tests\Avalonia.Skia.RenderTests\Avalonia.Skia.RenderTests.csproj", "{E1582370-37B3-403C-917F-8209551B1634}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Remote.Protocol", "src\Avalonia.Remote.Protocol\Avalonia.Remote.Protocol.csproj", "{D78A720C-C0C6-478B-8564-F167F9BDD01B}" EndProject @@ -200,7 +198,6 @@ Global src\Shared\RenderHelpers\RenderHelpers.projitems*{3e908f67-5543-4879-a1dc-08eace79b3cd}*SharedItemsImports = 4 src\Windows\Avalonia.Win32\Avalonia.Win32.Shared.projitems*{40759a76-d0f2-464e-8000-6ff0f5c4bd7c}*SharedItemsImports = 4 src\Shared\PlatformSupport\PlatformSupport.projitems*{4488ad85-1495-4809-9aa4-ddfe0a48527e}*SharedItemsImports = 4 - tests\Avalonia.RenderTests\Avalonia.RenderTests.projitems*{48840edd-24bf-495d-911e-2eb12ae75d3b}*SharedItemsImports = 13 src\Shared\PlatformSupport\PlatformSupport.projitems*{4a1abb09-9047-4bd5-a4ad-a055e52c5ee0}*SharedItemsImports = 4 src\Shared\PlatformSupport\PlatformSupport.projitems*{7863ea94-f0fb-4386-bf8c-e5bfa761560a}*SharedItemsImports = 4 src\Shared\PlatformSupport\PlatformSupport.projitems*{7b92af71-6287-4693-9dcb-bd5b6e927e23}*SharedItemsImports = 4 @@ -2643,7 +2640,6 @@ Global {57E0455D-D565-44BB-B069-EE1AA20F8337} = {9B9E3891-2366-4253-A952-D08BCEB71098} {52F55355-D120-42AC-8116-8410A7D602FA} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} {F1381F98-4D24-409A-A6C5-1C5B1E08BB08} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} - {48840EDD-24BF-495D-911E-2EB12AE75D3B} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B} {FBCAF3D0-2808-4934-8E96-3F607594517B} = {9B9E3891-2366-4253-A952-D08BCEB71098} {A0CC0258-D18C-4AB3-854F-7101680FC3F9} = {9B9E3891-2366-4253-A952-D08BCEB71098} {C7A69145-60B6-4882-97D6-A3921DD43978} = {A0CC0258-D18C-4AB3-854F-7101680FC3F9} diff --git a/tests/Avalonia.RenderTests/Avalonia.Direct2D1.RenderTests.csproj b/tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj similarity index 69% rename from tests/Avalonia.RenderTests/Avalonia.Direct2D1.RenderTests.csproj rename to tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj index 6af8fd8963..42d99cc19a 100644 --- a/tests/Avalonia.RenderTests/Avalonia.Direct2D1.RenderTests.csproj +++ b/tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj @@ -1,19 +1,9 @@ - - - obj-Direct2D1 - - + netcoreapp2.0 - bin\Direct2D\$(Configuration) - false - False - $(DefineConstants);AVALONIA_DIRECT2D - Library - - + @@ -33,7 +23,5 @@ - - \ No newline at end of file diff --git a/tests/Avalonia.Direct2D1.UnitTests/Properties/AssemblyInfo.cs b/tests/Avalonia.Direct2D1.UnitTests/Properties/AssemblyInfo.cs index a8edd50b31..a462e5b079 100644 --- a/tests/Avalonia.Direct2D1.UnitTests/Properties/AssemblyInfo.cs +++ b/tests/Avalonia.Direct2D1.UnitTests/Properties/AssemblyInfo.cs @@ -4,7 +4,5 @@ using System.Reflection; using Xunit; -[assembly: AssemblyTitle("Avalonia.Direct2D1.UnitTests")] - // Don't run tests in parallel. [assembly: CollectionBehavior(DisableTestParallelization = true)] \ No newline at end of file diff --git a/tests/Avalonia.RenderTests/.gitignore b/tests/Avalonia.RenderTests/.gitignore deleted file mode 100644 index 76146e97c7..0000000000 --- a/tests/Avalonia.RenderTests/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -obj-Skia/ -obj-Skia/* \ No newline at end of file diff --git a/tests/Avalonia.RenderTests/Avalonia.RenderTests.projitems b/tests/Avalonia.RenderTests/Avalonia.RenderTests.projitems deleted file mode 100644 index ff729a6b48..0000000000 --- a/tests/Avalonia.RenderTests/Avalonia.RenderTests.projitems +++ /dev/null @@ -1,33 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - 48840edd-24bf-495d-911e-2eb12ae75d3b - - - Avalonia.RenderTests - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/Avalonia.RenderTests/Avalonia.RenderTests.shproj b/tests/Avalonia.RenderTests/Avalonia.RenderTests.shproj deleted file mode 100644 index e3bed80491..0000000000 --- a/tests/Avalonia.RenderTests/Avalonia.RenderTests.shproj +++ /dev/null @@ -1,16 +0,0 @@ - - - - 48840edd-24bf-495d-911e-2eb12ae75d3b - 14.0 - - - - - - - - - - - \ No newline at end of file diff --git a/tests/Avalonia.RenderTests/Controls/TextBlockTests.cs b/tests/Avalonia.RenderTests/Controls/TextBlockTests.cs index a5d06a1b0e..80b850635d 100644 --- a/tests/Avalonia.RenderTests/Controls/TextBlockTests.cs +++ b/tests/Avalonia.RenderTests/Controls/TextBlockTests.cs @@ -1,6 +1,7 @@ // Copyright (c) The Avalonia Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. +using System.Threading.Tasks; using Avalonia.Controls; using Avalonia.Layout; using Avalonia.Media; @@ -20,7 +21,7 @@ namespace Avalonia.Direct2D1.RenderTests.Controls } [Fact] - public void Wrapping_NoWrap() + public async Task Wrapping_NoWrap() { Decorator target = new Decorator { @@ -38,7 +39,7 @@ namespace Avalonia.Direct2D1.RenderTests.Controls } }; - RenderToFile(target); + await RenderToFile(target); CompareImages(); } } diff --git a/tests/Avalonia.RenderTests/Properties/AssemblyInfo.cs b/tests/Avalonia.RenderTests/Properties/AssemblyInfo.cs index d5ba64ac05..a462e5b079 100644 --- a/tests/Avalonia.RenderTests/Properties/AssemblyInfo.cs +++ b/tests/Avalonia.RenderTests/Properties/AssemblyInfo.cs @@ -4,7 +4,5 @@ using System.Reflection; using Xunit; -[assembly: AssemblyTitle("Avalonia.Direct2D1.RenderTests")] - // Don't run tests in parallel. [assembly: CollectionBehavior(DisableTestParallelization = true)] \ No newline at end of file diff --git a/tests/Avalonia.RenderTests/TestBase.cs b/tests/Avalonia.RenderTests/TestBase.cs index cf38ef3818..ae359c5c5f 100644 --- a/tests/Avalonia.RenderTests/TestBase.cs +++ b/tests/Avalonia.RenderTests/TestBase.cs @@ -46,7 +46,7 @@ namespace Avalonia.Direct2D1.RenderTests public TestBase(string outputPath) { - var testFiles = Path.GetFullPath(@"..\..\..\..\..\TestFiles\"); + var testFiles = Path.GetFullPath(@"..\..\..\..\TestFiles\"); #if AVALONIA_SKIA var platform = "Skia"; #else diff --git a/tests/Avalonia.RenderTests/Avalonia.Skia.RenderTests.csproj b/tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj similarity index 69% rename from tests/Avalonia.RenderTests/Avalonia.Skia.RenderTests.csproj rename to tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj index 370cfac6dd..4a297a340d 100644 --- a/tests/Avalonia.RenderTests/Avalonia.Skia.RenderTests.csproj +++ b/tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj @@ -1,21 +1,10 @@ - - - obj-Skia - - - - + netcoreapp2.0 - bin\Skia\$(Configuration) - false - False - $(DefineConstants);AVALONIA_SKIA;AVALONIA_SKIA_SKIP_FAIL - Library + AVALONIA_SKIA;AVALONIA_SKIA_SKIP_FAIL - - + @@ -35,9 +24,6 @@ - - - \ No newline at end of file diff --git a/tests/TestFiles/Cairo/SVGPath/SVGPath.expected.png b/tests/TestFiles/Cairo/SVGPath/SVGPath.expected.png deleted file mode 100644 index 98300488100e4bb5bba799d456efa2cb4ba367e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1041 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957Y)yEX7WqAsj$Z!;#X#z`%UM)5S5Q zV$R!H4+|d|2(-$Zf0ws95Yhm|4l5X}8cGDT6l57hTS6LEDlB7~!u2NP!S9WW4;pSu zR9_>r<8PYDM#fD% zGed5_oxpfvl1pCCrfpG*#%{~;9AOrdZ7j3C%d@(lOx`!h*6^T$8Ex@KvZ+Kl&qSSw;C z={>Y&oHy^qF2fLwe6y!NHTqtDPnA12ef{ajz8elV-m3HW*8IOAF`|Bx!OS`F-HSf2 z_}plI&~0(BT(Re!jdy>|I(q)2+Kt!QKTESuCdI5W?_F4|cl`PDX7`AR4?mw-=Qa#B0Ohp$D&_Wm+nqJerq!4 zx8Ca<+TD8DC(}aSE;=?r_T>AHUe%h4z71c0RhKYsk$LSWGbh1yR>98(_k(Meep;Rp z^?1j>hq0DZ)w}*NAB>CBc>iSjw9~$&Y*+Sr{M4;Dop|&Flg2JR*^3s2pOg73F)=>y%0 z6YI+_P5Cs3;}iboFyt=akR{0Fs#U_y7O^ diff --git a/tests/TestFiles/Skia/Controls/TextBlock/Wrapping_NoWrap.expected.png b/tests/TestFiles/Skia/Controls/TextBlock/Wrapping_NoWrap.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..2296e02d68707f6276a8a875cb38fa99ad3309b5 GIT binary patch literal 1206 zcmc&z>rdJT6vaAiYo|?@Ewh_W+c=G}K_@j<1R0CgQmeCF8^t2NWsV9~Xng>(wwvoC z(G;DEI@qj*WfjS!VtEKI%LG(pTK6-Eh}kNL7K!C0D0JBU5&Lk?$vq!V?#;dTUVdJ7 zXvha4AP^`NbuROgUzPhf6zpeS;V{cDZ{d)+ND%1P_9J^`LH_!1-8nP~1Pc3o9{~#D z&y{{NoSaoi{(@LdZYZm-0@an(5XfLc6*>AeI0>9~4bqb5&pD0CL|$&hT7U<&%V*yW z%1>dOpTD1gN?rAQSvSBG5R|Zx<6TghPC>Zh_JK-M1VgV1cLp-*C8Hidb=0* z{s98AGOh?U0*q%QbR<&db0x1vC7MvPYm2d(3O!IeyMjNrZ5of@ z6>D^I7r7x4TD?04L-Vzs2%J2|#SlM{Hn(0?p}|!X;ImPMvy#>Lz6WeE_yS>|V{6cO zfGh>Zz+Q?PPz!OYaNA>*Bc0G@^K3RTWEQr}cEa_Wi84hY)*u#3;fV9Y-iHn*b8}%( zFKwB$xTzUwoMDpEEuCzBZKEtXq$G`NM&xxGC9xJ0#)-)s8})#!*zV(dnwnoo{H9xK1|gN$^Pue6@TCIc;i=iPA<#M))_7g^jZF;1D78Ksvh2^W(hs<2Y@@VE%aIPz(+q=cM}n<^lnmMN zdW=F#C(7{izI88}FJf^^_;YUI)+s(v`sS>Jk+QfB<&UI0c4;j`lq7&vsKr!bF+r+W za8P5{3RFF$g^Ap>W_q)?TEC-uscXVkwMhtfQ@Ww+?aJlt*9FNw{kI-qqe|MGWf31el_O@3}8) zGc@&P_17oa@j4TF^(Ra1{o{>aQu@k+KU!Mh^xXPRI2K?1pZ(_P{&xz4!)bvXLFJJX S;fKrjyFq2;We$H Date: Fri, 19 Jan 2018 22:55:48 +0100 Subject: [PATCH 5/9] Update cake script with new render test locations. --- build.cake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.cake b/build.cake index 61fda13695..01aefff093 100644 --- a/build.cake +++ b/build.cake @@ -197,8 +197,8 @@ Task("Run-Render-Tests") .IsDependentOn("Build") .WithCriteria(() => !parameters.SkipTests && parameters.IsRunningOnWindows) .Does(() => { - RunCoreTest("./tests/Avalonia.RenderTests/Avalonia.Skia.RenderTests.csproj", parameters, true); - RunCoreTest("./tests/Avalonia.RenderTests/Avalonia.Direct2D1.RenderTests.csproj", parameters, true); + RunCoreTest("./tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj", parameters, true); + RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj", parameters, true); }); Task("Run-Designer-Unit-Tests") From f102ef9c1ff359f8490cbb28612e12714190916d Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 21 Jan 2018 15:59:25 +0100 Subject: [PATCH 6/9] Updated cake to latest version. --- tools/packages.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/packages.config b/tools/packages.config index e0dd39bd2b..e52a2c7e98 100644 --- a/tools/packages.config +++ b/tools/packages.config @@ -1,4 +1,4 @@ - + From 6133837600153d459511995e258f533163897bba Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 21 Jan 2018 20:12:13 +0100 Subject: [PATCH 7/9] Locate tests directory in code. Rather than using a hard-coded path. --- tests/Avalonia.RenderTests/TestBase.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tests/Avalonia.RenderTests/TestBase.cs b/tests/Avalonia.RenderTests/TestBase.cs index ae359c5c5f..321dbc4fbe 100644 --- a/tests/Avalonia.RenderTests/TestBase.cs +++ b/tests/Avalonia.RenderTests/TestBase.cs @@ -46,7 +46,8 @@ namespace Avalonia.Direct2D1.RenderTests public TestBase(string outputPath) { - var testFiles = Path.GetFullPath(@"..\..\..\..\TestFiles\"); + var testPath = GetTestsDirectory(); + var testFiles = Path.Combine(testPath, "TestFiles"); #if AVALONIA_SKIA var platform = "Skia"; #else @@ -142,6 +143,18 @@ namespace Avalonia.Direct2D1.RenderTests } } + private string GetTestsDirectory() + { + var path = Directory.GetCurrentDirectory(); + + while (path.Length > 0 && Path.GetFileName(path) != "tests") + { + path = Path.GetDirectoryName(path); + } + + return path; + } + private class TestThreadingInterface : IPlatformThreadingInterface { public bool CurrentThreadIsLoopThread => MainThread.ManagedThreadId == Thread.CurrentThread.ManagedThreadId; From 7458f28ca9a2e31378ce1f92f6c9f1fe8a53dbeb Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 21 Jan 2018 23:39:53 +0100 Subject: [PATCH 8/9] Fix intermittently failing test. Fixed in https://ci.appveyor.com/project/AvaloniaUI/Avalonia/build/0.1.4466: this should prevent that by keeping both of the data objects alive. --- .../Data/ExpressionObserverTests_Observable.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/Avalonia.Markup.UnitTests/Data/ExpressionObserverTests_Observable.cs b/tests/Avalonia.Markup.UnitTests/Data/ExpressionObserverTests_Observable.cs index 62d5c28f49..aa78c100c1 100644 --- a/tests/Avalonia.Markup.UnitTests/Data/ExpressionObserverTests_Observable.cs +++ b/tests/Avalonia.Markup.UnitTests/Data/ExpressionObserverTests_Observable.cs @@ -103,20 +103,22 @@ namespace Avalonia.Markup.UnitTests.Data { using (var sync = UnitTestSynchronizationContext.Begin()) { - var data = new Class1(); - var target = new ExpressionObserver(data, "Next^.Foo", true); + var data1 = new Class1(); + var data2 = new Class2("foo"); + var target = new ExpressionObserver(data1, "Next^.Foo", true); var result = new List(); var sub = target.Subscribe(x => result.Add(x)); - data.Next.OnNext(new Class2("foo")); + data1.Next.OnNext(data2); sync.ExecutePostedCallbacks(); Assert.Equal(new[] { new BindingNotification("foo") }, result); sub.Dispose(); - Assert.Equal(0, data.PropertyChangedSubscriptionCount); + Assert.Equal(0, data1.PropertyChangedSubscriptionCount); - GC.KeepAlive(data); + GC.KeepAlive(data1); + GC.KeepAlive(data2); } } From 51a47b3a946d693d54abbec0e9dd3b184aba1969 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Mon, 22 Jan 2018 00:07:19 +0100 Subject: [PATCH 9/9] Instance can be null here. Was causing intermittently failing test: https://ci.appveyor.com/project/AvaloniaUI/Avalonia/build/0.1.4468 --- .../Data/Plugins/AvaloniaPropertyAccessorPlugin.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Markup/Avalonia.Markup/Data/Plugins/AvaloniaPropertyAccessorPlugin.cs b/src/Markup/Avalonia.Markup/Data/Plugins/AvaloniaPropertyAccessorPlugin.cs index 3f6f15ed5b..90eabc69fb 100644 --- a/src/Markup/Avalonia.Markup/Data/Plugins/AvaloniaPropertyAccessorPlugin.cs +++ b/src/Markup/Avalonia.Markup/Data/Plugins/AvaloniaPropertyAccessorPlugin.cs @@ -104,7 +104,7 @@ namespace Avalonia.Markup.Data.Plugins protected override void SubscribeCore(IObserver observer) { - _subscription = Instance.GetWeakObservable(_property).Subscribe(observer); + _subscription = Instance?.GetWeakObservable(_property).Subscribe(observer); } } }