Browse Source

Merge pull request #755 from jkoritzinsky/CodeCoverage-Support

Code Coverage information
Steven Kirk 9 years ago
parent
commit
a8c9acf919

+ 5 - 0
appveyor.yml

@@ -20,6 +20,11 @@ build_script:
 - ps: .\build.ps1 -Target "AppVeyor" -Platform "$env:platform" -Configuration "$env:configuration"
 after_build:
 - .\packages\JetBrains.dotMemoryUnit.2.1.20150828.125449\tools\dotMemoryUnit.exe -targetExecutable="%xunit20%\xunit.console.x86.exe" -returnTargetExitCode  --"tests\Avalonia.LeakTests\bin\Release\Avalonia.LeakTests.dll"
+
+- "SET PATH=C:\\Python34;C:\\Python34\\Scripts;%PATH%"
+- pip install codecov
+- codecov -f "./artifacts/coverage.xml"
+
 test: off
 artifacts:
   - path: artifacts\nuget\*.nupkg

+ 26 - 6
build.cake

@@ -10,6 +10,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 #tool "nuget:?package=xunit.runner.console&version=2.1.0"
+#tool "nuget:?package=OpenCover"
 
 ///////////////////////////////////////////////////////////////////////////////
 // USINGS
@@ -92,6 +93,7 @@ var artifactsDir = (DirectoryPath)Directory("./artifacts");
 var nugetRoot = artifactsDir.Combine("nuget");
 var zipRoot = artifactsDir.Combine("zip");
 var binRoot = artifactsDir.Combine("bin");
+var testsRoot = artifactsDir.Combine("tests");
 
 var dirSuffix = configuration;
 var dirSuffixSkia = (isPlatformAnyCPU ? "x86" : platform) + "/" + configuration;
@@ -585,6 +587,7 @@ Task("Clean")
     CleanDirectory(nugetRoot);
     CleanDirectory(zipRoot);
     CleanDirectory(binRoot);
+    CleanDirectory(testsRoot);
 });
 
 Task("Restore-NuGet-Packages")
@@ -670,18 +673,35 @@ Task("Run-Unit-Tests")
         "./tools/xunit.runner.console/tools/xunit.console.x86.exe" :
         "./tools/xunit.runner.console/tools/xunit.console.exe";
 
-    var settings = new XUnit2Settings 
+    var xUnitSettings = new XUnit2Settings 
     { 
         ToolPath = toolPath,
-        Parallelism = ParallelismOption.None 
+        Parallelism = ParallelismOption.None,
+        ShadowCopy = false
     };
 
-    settings.NoAppDomain = !isRunningOnWindows;
+    xUnitSettings.NoAppDomain = !isRunningOnWindows;
 
-    foreach (var file in unitTests)
+    var openCoverOutput = artifactsDir.GetFilePath(new FilePath("./coverage.xml"));
+    var openCoverSettings = new OpenCoverSettings()
+        .WithFilter("+[Avalonia.*]* -[*Test*]* -[ControlCatalog*]*")
+        .WithFilter("-[Avalonia.*]OmniXaml.* -[Avalonia.*]Glass.*")
+        .WithFilter("-[Avalonia.HtmlRenderer]TheArtOfDev.HtmlRenderer.* +[Avalonia.HtmlRenderer]TheArtOfDev.HtmlRenderer.Avalonia.* -[Avalonia.ReactiveUI]*");
+    
+    foreach(var test in unitTests)
     {
-        Information("Running test " + file.GetFilenameWithoutExtension());
-        XUnit2(file.FullPath, settings);
+        CopyDirectory(test.GetDirectory(), testsRoot);
+    }
+
+    if(isRunningOnWindows)
+    {
+        OpenCover(context => {
+            context.XUnit2(unitTests.Select(test => testsRoot.GetFilePath(test).FullPath), xUnitSettings);
+        }, openCoverOutput, openCoverSettings);
+    }
+    else
+    {
+        XUnit2(unitTests.Select(test => test.FullPath), xUnitSettings);
     }
 });
 

+ 1 - 0
tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj

@@ -99,6 +99,7 @@
     <Compile Include="AvaloniaObjectTests.cs" />
     <Compile Include="ControlTests.cs" />
     <Compile Include="ExpressionObserverTests.cs" />
+    <Compile Include="MemberSelectorTests.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>

+ 47 - 0
tests/Avalonia.LeakTests/MemberSelectorTests.cs

@@ -0,0 +1,47 @@
+using Avalonia.Markup.Xaml.Templates;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace Avalonia.LeakTests
+{
+    public class MemberSelectorTests
+    {
+        [Fact]
+        public void Should_Not_Hold_Reference_To_Object()
+        {
+            WeakReference dataRef = null;
+
+            var selector = new MemberSelector() { MemberName = "Child.StringValue" };
+
+            Action run = () =>
+            {
+                var data = new Item()
+                {
+                    Child = new Item() { StringValue = "Value1" }
+                };
+
+                Assert.Same("Value1", selector.Select(data));
+
+                dataRef = new WeakReference(data);
+            };
+
+            run();
+
+            GC.Collect();
+
+            Assert.False(dataRef.IsAlive);
+        }
+
+        private class Item
+        {
+            public Item Child { get; set; }
+            public int IntValue { get; set; }
+
+            public string StringValue { get; set; }
+        }
+    }
+}

+ 0 - 26
tests/Avalonia.Markup.Xaml.UnitTests/Templates/MemberSelectorTests.cs

@@ -9,32 +9,6 @@ namespace Avalonia.Markup.Xaml.UnitTests.Templates
 {
     public class MemberSelectorTests
     {
-        [Fact]
-        public void Should_Not_Hold_Reference_To_Object()
-        {
-            WeakReference dataRef = null;
-
-            var selector = new MemberSelector() { MemberName = "Child.StringValue" };
-
-            Action run = () =>
-            {
-                var data = new Item()
-                {
-                    Child = new Item() { StringValue = "Value1" }
-                };
-
-                Assert.Same("Value1", selector.Select(data));
-
-                dataRef = new WeakReference(data);
-            };
-
-            run();
-
-            GC.Collect();
-
-            Assert.False(dataRef.IsAlive);
-        }
-
         [Fact]
         public void Should_Select_Child_Property_Value()
         {