Bladeren bron

Run Avalonia.Base.UnitTests on netfx/mono

Nikita Tsukanov 6 jaren geleden
bovenliggende
commit
4b234f73df

+ 5 - 0
build/NetFX.props

@@ -3,4 +3,9 @@
     <FrameworkPathOverride>/usr/lib/mono/4.6.1-api</FrameworkPathOverride>
     <FrameworkPathOverride Condition="$([MSBuild]::IsOsPlatform('OSX'))">/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/4.6.1-api</FrameworkPathOverride>
   </PropertyGroup>
+  <PropertyGroup Condition=" '$(TargetFramework)' == 'net47' and '$(OS)' == 'Unix' ">
+    <FrameworkPathOverride>/usr/lib/mono/4.7-api/</FrameworkPathOverride>
+    <FrameworkPathOverride Condition="$([MSBuild]::IsOsPlatform('OSX'))">/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/4.7-api</FrameworkPathOverride>
+  </PropertyGroup>
+
 </Project>

+ 8 - 0
build/UnitTests.NetFX.props

@@ -0,0 +1,8 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildThisFileDirectory)/NetFX.props" />	
+  <ItemGroup Condition="$(TargetFramework.StartsWith('net4'))">
+    <Content Include="$(MSBuildThisFileDirectory)/xunit.runner.mono.json" Link="xunit.runner.json" >
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+</Project>

+ 1 - 0
build/xunit.runner.mono.json

@@ -0,0 +1 @@
+{ "appDomain": "denied" }

+ 28 - 19
nukebuild/Build.cs

@@ -5,6 +5,7 @@ using System.IO;
 using System.Linq;
 using System.Runtime.InteropServices;
 using System.Threading;
+using System.Xml.Linq;
 using Nuke.Common;
 using Nuke.Common.Git;
 using Nuke.Common.ProjectModel;
@@ -92,16 +93,24 @@ partial class Build : NukeBuild
                 );
         });
     
-    void RunCoreTest(string project, bool coreOnly = false)
+    void RunCoreTest(string project)
     {
         if(!project.EndsWith(".csproj"))
             project = System.IO.Path.Combine(project, System.IO.Path.GetFileName(project)+".csproj");
         Information("Running tests from " + project);
-        var frameworks = new List<string>(){"netcoreapp2.0"};
+        XDocument xdoc;
+        using (var s = File.OpenRead(project))
+            xdoc = XDocument.Load(s);
+
+        List<string> frameworks = null;
+        var targets = xdoc.Root.Descendants("TargetFrameworks").FirstOrDefault();
+        if (targets != null)
+            frameworks = targets.Value.Split(';').Where(f => !string.IsNullOrWhiteSpace(f)).ToList();
+        else 
+            frameworks = new List<string> {xdoc.Root.Descendants("TargetFramework").First().Value};
+        
         foreach(var fw in frameworks)
         {
-            if(!fw.StartsWith("netcoreapp") && coreOnly)
-                continue;
             Information("Running for " + fw);
             DotNetTest(c =>
             {
@@ -124,18 +133,18 @@ partial class Build : NukeBuild
         .DependsOn(Compile)
         .Executes(() =>
         {
-            RunCoreTest("./tests/Avalonia.Animation.UnitTests", false);
-            RunCoreTest("./tests/Avalonia.Base.UnitTests", false);
-            RunCoreTest("./tests/Avalonia.Controls.UnitTests", false);
-            RunCoreTest("./tests/Avalonia.Input.UnitTests", false);
-            RunCoreTest("./tests/Avalonia.Interactivity.UnitTests", false);
-            RunCoreTest("./tests/Avalonia.Layout.UnitTests", false);
-            RunCoreTest("./tests/Avalonia.Markup.UnitTests", false);
-            RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests", false);
-            RunCoreTest("./tests/Avalonia.Styling.UnitTests", false);
-            RunCoreTest("./tests/Avalonia.Visuals.UnitTests", false);
-            RunCoreTest("./tests/Avalonia.Skia.UnitTests", false);
-            RunCoreTest("./tests/Avalonia.ReactiveUI.UnitTests", false);
+            RunCoreTest("./tests/Avalonia.Animation.UnitTests");
+            RunCoreTest("./tests/Avalonia.Base.UnitTests");
+            RunCoreTest("./tests/Avalonia.Controls.UnitTests");
+            RunCoreTest("./tests/Avalonia.Input.UnitTests");
+            RunCoreTest("./tests/Avalonia.Interactivity.UnitTests");
+            RunCoreTest("./tests/Avalonia.Layout.UnitTests");
+            RunCoreTest("./tests/Avalonia.Markup.UnitTests");
+            RunCoreTest("./tests/Avalonia.Markup.Xaml.UnitTests");
+            RunCoreTest("./tests/Avalonia.Styling.UnitTests");
+            RunCoreTest("./tests/Avalonia.Visuals.UnitTests");
+            RunCoreTest("./tests/Avalonia.Skia.UnitTests");
+            RunCoreTest("./tests/Avalonia.ReactiveUI.UnitTests");
         });
 
     Target RunRenderTests => _ => _
@@ -143,9 +152,9 @@ partial class Build : NukeBuild
         .DependsOn(Compile)
         .Executes(() =>
         {
-            RunCoreTest("./tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj", true);
+            RunCoreTest("./tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj");
             if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
-                RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj", true);
+                RunCoreTest("./tests/Avalonia.Direct2D1.RenderTests/Avalonia.Direct2D1.RenderTests.csproj");
         });
     
     Target RunDesignerTests => _ => _
@@ -153,7 +162,7 @@ partial class Build : NukeBuild
         .DependsOn(Compile)
         .Executes(() =>
         {
-            RunCoreTest("./tests/Avalonia.DesignerSupport.Tests", false);
+            RunCoreTest("./tests/Avalonia.DesignerSupport.Tests");
         });
 
     [PackageExecutable("JetBrains.dotMemoryUnit", "dotMemoryUnit.exe")] readonly Tool DotMemoryUnit;

+ 3 - 1
tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj

@@ -1,9 +1,11 @@
 <Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
   <PropertyGroup>
-    <TargetFrameworks>netcoreapp2.0</TargetFrameworks>
+    <TargetFrameworks>netcoreapp2.0;net47</TargetFrameworks>
     <OutputType>Library</OutputType>
+    <IsTestProject>true</IsTestProject>
   </PropertyGroup>
   <Import Project="..\..\build\UnitTests.NetCore.targets" />
+  <Import Project="..\..\build\UnitTests.NetFX.props" />
   <Import Project="..\..\build\Moq.props" />
   <Import Project="..\..\build\XUnit.props" />
   <Import Project="..\..\build\Rx.props" />

+ 13 - 11
tests/Avalonia.Base.UnitTests/Data/Core/Plugins/DataAnnotationsValidationPluginTests.cs

@@ -4,6 +4,7 @@
 using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
+using System.Linq;
 using Avalonia.Data;
 using Avalonia.Data.Core.Plugins;
 using Avalonia.UnitTests;
@@ -86,17 +87,18 @@ namespace Avalonia.Markup.UnitTests.Data.Plugins
             validator.SetValue("123456", BindingPriority.LocalValue);
             validator.SetValue("abcdefghijklm", BindingPriority.LocalValue);
 
-            Assert.Equal(new[]
-            {
-                new BindingNotification(null),
-                new BindingNotification("123456"),
-                new BindingNotification(
-                    new AggregateException(
-                        new ValidationException("The PhoneNumber field is not a valid phone number."),
-                        new ValidationException("The field PhoneNumber must be a string or array type with a maximum length of '10'.")),
-                    BindingErrorType.DataValidationError,
-                    "abcdefghijklm"),
-            }, result);
+            Assert.Equal(3, result.Count);
+            Assert.Equal(new BindingNotification(null), result[0]);
+            Assert.Equal(new BindingNotification("123456"), result[1]);
+            var errorResult = (BindingNotification)result[2];
+            Assert.Equal(BindingErrorType.DataValidationError, errorResult.ErrorType);
+            Assert.Equal("abcdefghijklm", errorResult.Value);
+            var exceptions = ((AggregateException)(errorResult.Error)).InnerExceptions;
+            Assert.True(exceptions.Any(ex =>
+                ex.Message.Contains("The PhoneNumber field is not a valid phone number.")));
+            Assert.True(exceptions.Any(ex =>
+                ex.Message.Contains("The field PhoneNumber must be a string or array type with a maximum length of '10'.")));
+
         }
 
         private class Data