diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index f480464dc..f5fe4c7c9 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,25 +3,25 @@ "isRoot": true, "tools": { "dotnet-reportgenerator-globaltool": { - "version": "4.6.1", + "version": "4.7.1", "commands": [ "reportgenerator" ] }, "fake-cli": { - "version": "5.20.1", + "version": "5.20.3", "commands": [ "fake" ] }, "xmldocmd": { - "version": "2.1.0", + "version": "2.3.0", "commands": [ "xmldocmd" ] }, "altcode.gendarme-tool": { - "version": "2020.6.12.11211-pre-release", + "version": "2020.7.21.12091-pre-release", "commands": [ "gendarme" ] diff --git a/.gitignore b/.gitignore index 2bdab9cb2..c7e51a611 100644 --- a/.gitignore +++ b/.gitignore @@ -69,3 +69,9 @@ Demo/MultiTest/**/coverage.xml TestResults/ AltCover/Abstract.fs Tests.Visualizer/Reports/ +.fake +.ionide +AltCover.Engine/Abstract.fsi +Sample22/Sample22.fsproj +Sample22/coverage.xml +buildsample*.fsx.lock diff --git a/.travis.yml b/.travis.yml index f2cf341ca..768cf78ab 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: csharp mono: latest dist: xenial -dotnet: 3.1.301 +dotnet: 3.1.403 addons: apt: sources: diff --git a/AltCover.Api.Tests/altcover.api.tests.core.fsproj b/AltCover.Api.Tests/AltCover.Api.Tests.fsproj similarity index 77% rename from AltCover.Api.Tests/altcover.api.tests.core.fsproj rename to AltCover.Api.Tests/AltCover.Api.Tests.fsproj index 5e736cf76..639932e1b 100644 --- a/AltCover.Api.Tests/altcover.api.tests.core.fsproj +++ b/AltCover.Api.Tests/AltCover.Api.Tests.fsproj @@ -1,15 +1,15 @@  - netcoreapp3.0;net47 + netcoreapp3.0;net472 false AltCover.Api.Tests $(AssetTargetFallback);netcoreapp1.0; false - Exe - Library + Exe + Library - $(AssemblySearchPaths);{GAC} + $(AssemblySearchPaths);{GAC} $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ --keyfile:$(ProjectDir)..\Build\Infrastructure.snk @@ -37,45 +37,45 @@ + - - + + - - + + ..\ThirdParty\Unquote.dll all runtime; build; native; contentfiles; analyzers - + - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - - + + + + - - + \ No newline at end of file diff --git a/AltCover.Api.Tests/FSApiTests.fs b/AltCover.Api.Tests/FSApiTests.fs index d2b2e53cd..b930b32c7 100644 --- a/AltCover.Api.Tests/FSApiTests.fs +++ b/AltCover.Api.Tests/FSApiTests.fs @@ -10,20 +10,8 @@ open System.Xml.Schema open AltCover open Microsoft.FSharp.Reflection -open Swensen.Unquote - -#if NETCOREAPP3_0 -[] -type TestAttribute() = class - inherit Attribute() -end -#else -type TestAttribute = NUnit.Framework.TestAttribute -#endif module FSApiTests = - let SolutionDir() = - SolutionRoot.location [] let FormatFromCoverletMeetsSpec() = @@ -127,7 +115,7 @@ module FSApiTests = [] let OpenCoverToLcov() = use stream= - Assembly.GetExecutingAssembly().GetManifestResourceStream("altcover.api.tests.core.HandRolledMonoCoverage.xml") + Assembly.GetExecutingAssembly().GetManifestResourceStream("AltCover.Api.Tests.HandRolledMonoCoverage.xml") let doc = XDocument.Load(stream) use stream2 = new MemoryStream() CoverageFormats.ConvertToLcov doc stream2 @@ -136,7 +124,7 @@ module FSApiTests = let result = rdr.ReadToEnd().Replace("\r", String.Empty) use stream3 = - Assembly.GetExecutingAssembly().GetManifestResourceStream("altcover.api.tests.core.HandRolledMonoCoverage.lcov") + Assembly.GetExecutingAssembly().GetManifestResourceStream("AltCover.Api.Tests.HandRolledMonoCoverage.lcov") use rdr2 = new StreamReader(stream3) let expected = rdr2.ReadToEnd().Replace("\r", String.Empty) @@ -145,7 +133,7 @@ module FSApiTests = [] let OpenCoverToBarChart() = use stream= - Assembly.GetExecutingAssembly().GetManifestResourceStream("altcover.api.tests.core.HandRolledMonoCoverage.xml") + Assembly.GetExecutingAssembly().GetManifestResourceStream("AltCover.Api.Tests.HandRolledMonoCoverage.xml") let doc = XDocument.Load stream use mstream = new MemoryStream() let rewrite = Xhtml.ConvertToBarChart doc @@ -155,7 +143,7 @@ module FSApiTests = let result = rdr.ReadToEnd().Replace("\r", String.Empty) use stream2 = - Assembly.GetExecutingAssembly().GetManifestResourceStream("altcover.api.tests.core.HandRolledMonoCoverage.html") + Assembly.GetExecutingAssembly().GetManifestResourceStream("AltCover.Api.Tests.HandRolledMonoCoverage.html") use rdr2 = new StreamReader(stream2) let expected = rdr2.ReadToEnd().Replace("⑂", "\u2442").Replace("\r", String.Empty) @@ -165,7 +153,7 @@ module FSApiTests = [] let OpenCoverToNCover() = use stream= - Assembly.GetExecutingAssembly().GetManifestResourceStream("altcover.api.tests.core.HandRolledMonoCoverage.xml") + Assembly.GetExecutingAssembly().GetManifestResourceStream("AltCover.Api.Tests.HandRolledMonoCoverage.xml") let doc = XDocument.Load stream use mstream = new MemoryStream() let rewrite = CoverageFormats.ConvertToNCover doc @@ -175,7 +163,7 @@ module FSApiTests = let result = rdr.ReadToEnd().Replace("\r", String.Empty) use stream2 = - Assembly.GetExecutingAssembly().GetManifestResourceStream("altcover.api.tests.core.HandRolledToNCover.xml") + Assembly.GetExecutingAssembly().GetManifestResourceStream("AltCover.Api.Tests.HandRolledToNCover.xml") use rdr2 = new StreamReader(stream2) let time = (rewrite.Descendants(XName.Get "coverage") |> Seq.head).Attribute(XName.Get "startTime").Value @@ -196,7 +184,7 @@ module FSApiTests = [] let FormatsConvertToXmlDocument() = use stream = - Assembly.GetExecutingAssembly().GetManifestResourceStream("altcover.api.tests.core.HandRolledMonoCoverage.html") + Assembly.GetExecutingAssembly().GetManifestResourceStream("AltCover.Api.Tests.HandRolledMonoCoverage.html") use rdr = new StreamReader(stream) let expected = rdr.ReadToEnd().Replace("html >", "html>").Replace("\r", String.Empty).Replace("⑂", "\u2442") rdr.BaseStream.Position <- 0L @@ -213,7 +201,7 @@ module FSApiTests = [] let FormatsConvertToXDocument() = use stream = - Assembly.GetExecutingAssembly().GetManifestResourceStream("altcover.api.tests.core.HandRolledMonoCoverage.html") + Assembly.GetExecutingAssembly().GetManifestResourceStream("AltCover.Api.Tests.HandRolledMonoCoverage.html") use rdr = new StreamReader(stream) let expected = rdr.ReadToEnd().Replace("\r", String.Empty).Replace("⑂", "\u2442") rdr.BaseStream.Position <- 0L @@ -242,7 +230,7 @@ module FSApiTests = [] let NCoverToCobertura() = use stream= - Assembly.GetExecutingAssembly().GetManifestResourceStream("altcover.api.tests.core.Sample1WithNCover.xml") + Assembly.GetExecutingAssembly().GetManifestResourceStream("AltCover.Api.Tests.Sample1WithNCover.xml") let doc = XDocument.Load(stream) doc.Descendants() |> Seq.map (fun n -> n.Attribute(XName.Get "excluded")) @@ -257,7 +245,7 @@ module FSApiTests = let result = rdr.ReadToEnd().Replace("\r", String.Empty) use stream3 = - Assembly.GetExecutingAssembly().GetManifestResourceStream("altcover.api.tests.core.Sample1WithNCover.cob.xml") + Assembly.GetExecutingAssembly().GetManifestResourceStream("AltCover.Api.Tests.Sample1WithNCover.cob.xml") use rdr2 = new StreamReader(stream3) let coverage = cob.Descendants(XName.Get "coverage") |> Seq.head @@ -272,7 +260,7 @@ module FSApiTests = [] let NCoverToBarChart() = use stream= - Assembly.GetExecutingAssembly().GetManifestResourceStream("altcover.api.tests.core.GenuineNCover158.Xml") + Assembly.GetExecutingAssembly().GetManifestResourceStream("AltCover.Api.Tests.GenuineNCover158.Xml") let doc = XDocument.Load stream use mstream = new MemoryStream() let rewrite = Xhtml.ConvertToBarChart doc @@ -282,7 +270,7 @@ module FSApiTests = let result = rdr.ReadToEnd().Replace("html >", "html>").Replace("\r", String.Empty) use stream2 = - Assembly.GetExecutingAssembly().GetManifestResourceStream("altcover.api.tests.core.GenuineNCover158Chart.html") + Assembly.GetExecutingAssembly().GetManifestResourceStream("AltCover.Api.Tests.GenuineNCover158Chart.html") use rdr2 = new StreamReader(stream2) let expected = rdr2.ReadToEnd().Replace("\r", String.Empty) @@ -292,7 +280,7 @@ module FSApiTests = [] let OpenCoverBranchCompression() = use stream= - Assembly.GetExecutingAssembly().GetManifestResourceStream("altcover.api.tests.core.Compressible.xml") + Assembly.GetExecutingAssembly().GetManifestResourceStream("AltCover.Api.Tests.Compressible.xml") let doc = XDocument.Load stream [("CompressInterior", true, false) @@ -307,7 +295,7 @@ module FSApiTests = let result = rdr.ReadToEnd().Replace("\r", String.Empty) use stream2 = - Assembly.GetExecutingAssembly().GetManifestResourceStream("altcover.api.tests.core."+ test + ".xml") + Assembly.GetExecutingAssembly().GetManifestResourceStream("AltCover.Api.Tests."+ test + ".xml") use rdr2 = new StreamReader(stream2) let expected = rdr2.ReadToEnd().Replace("\r", String.Empty) @@ -430,10 +418,13 @@ module FSApiTests = test <@ DotNet.ToTestArguments prep coll combined = "/p:AltCover=\"true\" /p:AltCoverReportFormat=\"OpenCover\" /p:AltCoverShowStatic=\"-\" /p:AltCoverShowSummary=\"R\" /p:AltCoverForce=\"true\" /p:AltCoverFailFast=\"true\"" @> +#if SOURCEMAP + let SolutionDir() = + SolutionRoot.location + let internal mangleFile (f:String) = f.Replace(@"C:\Users\steve\Documents\GitHub\altcover", SolutionRoot.location).Replace('\\', Path.DirectorySeparatorChar) -#if SOURCEMAP [] let NCoverFindsFiles() = use stream = diff --git a/AltCover.Api.Tests/Program.fs b/AltCover.Api.Tests/Program.fs index d2c16df0b..2685bb00a 100644 --- a/AltCover.Api.Tests/Program.fs +++ b/AltCover.Api.Tests/Program.fs @@ -1,17 +1,13 @@ -namespace AltCover.Expecto.Tests +namespace Tests #if NETCOREAPP3_0 open Expecto -open Mono.Cecil -open Mono.Cecil.Cil -open Mono.Cecil.Rocks -open Swensen.Unquote - -module TestMain = - let sync = System.Object() +module ExpectoMain = let regular = [ + Tests.TestCommonTests.ExerciseItAll, "TestCommonTests.ExerciseItAll" + Tests.TestCommonTests.SelfTest, "TestCommonTests.SelfTest" Tests.FSApiTests.FormatFromCoverletMeetsSpec, "FSApiTests.FormatFromCoverlet" Tests.FSApiTests.PostprocessShouldRestoreBranchOnlyOpenCoverState, "FSApiTests.PostprocessShouldRestoreBranchOnlyOpenCoverState" Tests.FSApiTests.OpenCoverToLcov, "FSApiTests.OpenCoverToLcov" @@ -36,47 +32,16 @@ module TestMain = [] let consistencyCheck() = - let here = System.Reflection.Assembly.GetExecutingAssembly().Location - let def = Mono.Cecil.AssemblyDefinition.ReadAssembly(here) - - let testMethods = def.MainModule.GetTypes() - |> Seq.collect (fun t -> t.Methods) - |> Seq.filter (fun m -> m.CustomAttributes |> isNull |> not) - |> Seq.filter (fun m -> m.CustomAttributes |> Seq.exists (fun a -> a.AttributeType.Name = "TestAttribute")) - |> Seq.map (fun m -> m.DeclaringType.FullName + "::" + m.Name) - - let lookup = def.MainModule.GetAllTypes() - |> Seq.filter (fun t -> t.Methods |> Seq.exists(fun m -> m.Name = "Invoke")) - |> Seq.map (fun t -> (t.FullName.Replace("/","+"), t.Methods |> Seq.find(fun m -> m.Name = "Invoke"))) - |> Map.ofSeq - - let calls = regular - |> List.map (fst - >> (fun f -> f.GetType().FullName.Replace("/","+")) - >> (fun f -> Map.find f lookup) - >> (fun f -> f.Body.Instructions |> Seq.find (fun i -> i.OpCode = OpCodes.Call)) - >> (fun i -> let m = (i.Operand :?> MethodDefinition) - m.DeclaringType.FullName + "::" + m.Name)) - |> Set.ofList - - let omitted = testMethods - |> Seq.filter (fun t -> (Set.contains t calls) |> not) - |> Seq.toList - - // cover all but the special cases - test <@ omitted = [] @> + ExpectoTestCommon.consistencyCheck regular [] [] let tests = - testList "AltCover.Api.Tests" - <| ((((consistencyCheck, "ConsistencyCheck") :: regular) - |> List.map (fun (f,name) -> testCase name f)) - @ specials) + ExpectoTestCommon.makeTests "AltCoverApiTests" consistencyCheck regular specials ignore -module Program = - [] - let main argv = +module UnitTestStub = + [] + let unitTestStub argv = let writeResults = TestResults.writeNUnitSummary ("AltCover.Api.TestResults.xml", "AltCover.Api.Tests") let config = defaultConfig.appendSummaryHandler writeResults - runTestsWithArgs config argv TestMain.tests + runTestsWithArgs config argv ExpectoMain.tests #endif \ No newline at end of file diff --git a/AltCover.Avalonia.FuncUI/AltCover.Avalonia.FuncUI.fsproj b/AltCover.Avalonia.FuncUI/AltCover.Avalonia.FuncUI.fsproj index a1caf0e38..42499f630 100644 --- a/AltCover.Avalonia.FuncUI/AltCover.Avalonia.FuncUI.fsproj +++ b/AltCover.Avalonia.FuncUI/AltCover.Avalonia.FuncUI.fsproj @@ -16,7 +16,7 @@ $(ProjectDir)..\_Intermediate/$(AssemblyName).FuncUI/$(Configuration)+$(Platform)/ --keyfile:$(ProjectDir)..\Build\Infrastructure.snk - + TRACE;DEBUG;CODE_ANALYSIS;$(GlobalDefineConstants) true @@ -28,44 +28,39 @@ TRACE;$(GlobalDefineConstants) - - + - - - - - - - - - - - - + + + + + + + + all runtime; build; native; contentfiles; analyzers - - - - - + + + + + - - - + + + - - - + + + - + - + \ No newline at end of file diff --git a/AltCover.Avalonia/altcover.avalonia.fsproj b/AltCover.Avalonia/AltCover.Avalonia.fsproj similarity index 91% rename from AltCover.Avalonia/altcover.avalonia.fsproj rename to AltCover.Avalonia/AltCover.Avalonia.fsproj index 4d85154e6..17e46fb10 100644 --- a/AltCover.Avalonia/altcover.avalonia.fsproj +++ b/AltCover.Avalonia/AltCover.Avalonia.fsproj @@ -51,8 +51,8 @@ - - + + all runtime; build; native; contentfiles; analyzers @@ -62,10 +62,11 @@ + - + \ No newline at end of file diff --git a/AltCover.Avalonia/MainWindow.fs b/AltCover.Avalonia/MainWindow.fs index 12b0d1f66..a2f88cbc2 100644 --- a/AltCover.Avalonia/MainWindow.fs +++ b/AltCover.Avalonia/MainWindow.fs @@ -9,6 +9,7 @@ open System.Xml.XPath open GuiCommon +open AltCover.FontSupport open Avalonia.Controls open Avalonia.Markup.Xaml open Avalonia.Media @@ -116,10 +117,22 @@ type MainWindow() as this = this.FindControl("Menu").IsVisible <- true this.FindControl("Grid").IsVisible <- true + member private this.UpdateTextFonts (text:TextBlock) text2 = + [ text; text2 ] + |> List.iter (fun t -> + let (_, logfont) = LogFont.TryParse(Persistence.readFont()) + t.FontFamily <- FontFamily(logfont.faceName) + t.FontSize <- float logfont.height + t.FontWeight <- enum logfont.weight + t.FontStyle <- match logfont.italic with + | 0uy -> FontStyle.Normal + | 255uy -> FontStyle.Italic + | _ -> FontStyle.Oblique) + member private this.PrepareDoubleTap (context:CoverageTreeContext,TreeViewItem>) (xpath: XPathNavigator) = - let visbleName = (context.Row.Header :?> StackPanel).Tag.ToString() + let visibleName = (context.Row.Header :?> StackPanel).Tag.ToString() let tagByCoverage (buff : TextBlock) (lines : FormattedTextLine list) (n : CodeTag) = let start = (n.Column - 1) + @@ -169,7 +182,9 @@ type MainWindow() as this = FormattedTextStyleSpan(start, 7, tag)) Dispatcher.UIThread.Post(fun _ -> textBox.FormattedText.Spans <- formats - text2.FormattedText.Spans <- linemark) + textBox.Tag <- formats + text2.FormattedText.Spans <- linemark + text2.Tag <- linemark) context.Row.DoubleTapped |> Event.add (fun _ -> @@ -181,15 +196,11 @@ type MainWindow() as this = this.DisplayMessage MessageType.Info <| String.Format (System.Globalization.CultureInfo.CurrentCulture, - Resource.GetResourceString "No source location", visbleName) + Resource.GetResourceString "No source location", visibleName) let showSource (info:Source) (line:int) = try - [ text; text2 ] - |> List.iter (fun t -> - t.FontFamily <- FontFamily(Persistence.readFont()) - t.FontSize <- 16.0 - t.FontStyle <- FontStyle.Normal) + this.UpdateTextFonts text text2 text.Text <- File.ReadAllText info.FullName let textLines = text.FormattedText.GetLines() |> Seq.toList text2.Text <- String.Join (Environment.NewLine, @@ -241,6 +252,52 @@ type MainWindow() as this = filter) ofd.Filters <- List(filterBits) this.Title <- "AltCover.Visualizer" + + let p = Environment.OSVersion.Platform |> int + let isWindows = p <= 3 + + let respondToFont font = + font.ToString() |> Persistence.saveFont + let text = this.FindControl("Source") + let text2 = this.FindControl("Lines") + this.UpdateTextFonts text text2 + [ text; text2 ] + |> Seq.iter (fun t -> + let tmp = t.Text + t.Text <- String.Empty + t.Text <- tmp + t.FormattedText.Spans <- match t.Tag with + | :? list as l -> l + | _ -> []) + let h = (text.FormattedText.GetLines() |> Seq.head).Height + let pad = (h - 16.0)/2.0 + let margin = Thickness(0.0, pad) + this.FindControl("Branches").Children + |> Seq.cast + |> Seq.iter (fun pic -> pic.Margin <- margin) + + let fontItem = this.FindControl("Font") + + if + isWindows + then + fontItem.IsVisible <- true + fontItem.Click + |> Event.add (fun _ -> + let hwnd = this.PlatformImpl.Handle.Handle + Fonts.SelectWin32(Persistence.readFont(), hwnd) + |> Option.ofObj + |> Option.iter respondToFont) + else if + Fonts.Wish().Any() + then fontItem.IsVisible <- true + fontItem.Click + |> Event.add (fun _ -> + Persistence.readFont() + |> Fonts.SelectWish + |> Option.ofObj + |> Option.iter respondToFont) + [ "open"; "refresh"; "font"; "showAbout"; "exit" ] |> Seq.iter (fun n -> let cap = n.First().ToString().ToUpper() + n.Substring(1) @@ -274,9 +331,10 @@ type MainWindow() as this = async { (ofd.ShowAsync(this) |> Async.AwaitTask - |> Async.RunSynchronously).FirstOrDefault() + |> Async.RunSynchronously) |> Option.ofObj - |> openFile.Trigger + |> Option.map (fun x -> x.FirstOrDefault() |> Option.ofObj) + |> Option.iter openFile.Trigger } |> Async.Start) let click = @@ -347,10 +405,13 @@ type MainWindow() as this = this.Title <- "AltCover.Visualizer" tree.Items.OfType() |> Seq.iter (fun x -> x.Dispose()) - this.FindControl("Source").Text <- - String.Empty - this.FindControl("Lines").Text <- - String.Empty + let t1 = this.FindControl("Source") + let t2 = this.FindControl("Lines") + [t1; t2] + |> Seq.iter (fun t -> + t.Text <- String.Empty + t.FormattedText.Spans <- [] + t.Tag <- t.FormattedText.Spans) this.FindControl("Branches").Children.Clear() tree.Items <- auxModel.Model this.UpdateMRU info.FullName true diff --git a/AltCover.Cake/altcover.cake.core.csproj b/AltCover.Cake/AltCover.Cake.csproj similarity index 74% rename from AltCover.Cake/altcover.cake.core.csproj rename to AltCover.Cake/AltCover.Cake.csproj index 7c6caaa24..65ec9392a 100644 --- a/AltCover.Cake/altcover.cake.core.csproj +++ b/AltCover.Cake/AltCover.Cake.csproj @@ -1,7 +1,8 @@  - netstandard2.0;net46 + netstandard2.0;net472 + netstandard2.0 false AltCover.Cake AltCover.Cake @@ -41,23 +42,14 @@ all runtime; build; native; contentfiles; analyzers - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + - - - - - - - - - \ No newline at end of file diff --git a/altcover.datacollector/altcover.datacollector.core.csproj b/AltCover.DataCollector/AltCover.DataCollector.csproj similarity index 92% rename from altcover.datacollector/altcover.datacollector.core.csproj rename to AltCover.DataCollector/AltCover.DataCollector.csproj index 0a5a0a935..b8fbe36ec 100644 --- a/altcover.datacollector/altcover.datacollector.core.csproj +++ b/AltCover.DataCollector/AltCover.DataCollector.csproj @@ -1,7 +1,8 @@ - netstandard2.0;net46 + netstandard2.0;net472 + netstandard2.0 AltCover AltCover.DataCollector false @@ -30,7 +31,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/altcover.datacollector/DataCollector.cs b/AltCover.DataCollector/DataCollector.cs similarity index 100% rename from altcover.datacollector/DataCollector.cs rename to AltCover.DataCollector/DataCollector.cs diff --git a/altcover.datacollector/Properties/AssemblyInfo.cs b/AltCover.DataCollector/Properties/AssemblyInfo.cs similarity index 100% rename from altcover.datacollector/Properties/AssemblyInfo.cs rename to AltCover.DataCollector/Properties/AssemblyInfo.cs diff --git a/altcover.datacollector/Resources/Resources.Designer.cs b/AltCover.DataCollector/Resources/Resources.Designer.cs similarity index 100% rename from altcover.datacollector/Resources/Resources.Designer.cs rename to AltCover.DataCollector/Resources/Resources.Designer.cs diff --git a/altcover.datacollector/Resources/Resources.eo.resx b/AltCover.DataCollector/Resources/Resources.eo.resx similarity index 100% rename from altcover.datacollector/Resources/Resources.eo.resx rename to AltCover.DataCollector/Resources/Resources.eo.resx diff --git a/altcover.datacollector/Resources/Resources.resx b/AltCover.DataCollector/Resources/Resources.resx similarity index 100% rename from altcover.datacollector/Resources/Resources.resx rename to AltCover.DataCollector/Resources/Resources.resx diff --git a/AltCover.DotNet/altcover.dotnet.core.fsproj b/AltCover.DotNet/AltCover.DotNet.fsproj similarity index 73% rename from AltCover.DotNet/altcover.dotnet.core.fsproj rename to AltCover.DotNet/AltCover.DotNet.fsproj index 80d3c5e0f..2275862f9 100644 --- a/AltCover.DotNet/altcover.dotnet.core.fsproj +++ b/AltCover.DotNet/AltCover.DotNet.fsproj @@ -1,7 +1,8 @@  - netstandard2.0;net45 + netstandard2.0;net472 + netstandard2.0 AltCover.DotNet AltCover.DotNet false @@ -44,29 +45,19 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + - - - - - - - - - \ No newline at end of file diff --git a/AltCover/Abstract.fsi b/AltCover.Engine/Abstract.fs similarity index 100% rename from AltCover/Abstract.fsi rename to AltCover.Engine/Abstract.fs diff --git a/AltCover/altcover.core.fsproj b/AltCover.Engine/AltCover.Engine.fsproj similarity index 64% rename from AltCover/altcover.core.fsproj rename to AltCover.Engine/AltCover.Engine.fsproj index 3a724d138..6b1fb80f5 100644 --- a/AltCover/altcover.core.fsproj +++ b/AltCover.Engine/AltCover.Engine.fsproj @@ -1,23 +1,22 @@  - Exe - netcoreapp2.0;netstandard2.0;net45 + netstandard2.0;net472 + netstandard2.0 AltCover - AltCover + AltCover.Engine false - RUNNER;NETCOREAPP2_0 - RUNNER + RUNNER true true true - AltCover.ico $(ProjectDir)../ - $(AssemblySearchPaths);{GAC} + $(AssemblySearchPaths);{GAC} $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ $(OutputPath)\$(TargetFramework)\$(AssemblyName).xml + --keyfile:$(SolutionDir)Build\Infrastructure.snk @@ -31,7 +30,7 @@ TRACE;$(GlobalDefineConstants) - --keyfile:$(SolutionDir)Build\Infrastructure.snk --staticlink:Manatee.Json + @@ -71,58 +70,48 @@ - Recorder.snk - - - - + all runtime; build; native; contentfiles; analyzers - - - ..\ThirdParty\Mono.Options.dll - - + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + - - - - $(SolutionDir)_Binaries\AltCover.Recorder\$(Configuration)+$(Platform)\netstandard2.0\AltCover.Recorder.dll + + ..\ThirdParty\Mono.Options.dll - + + + $(SolutionDir)_Binaries\AltCover.Recorder\$(Configuration)+$(Platform)\net20\AltCover.Recorder.dll - + ..\ThirdParty\BlackFox.CommandLine.dll - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - + @@ -135,9 +124,4 @@ - - - - - \ No newline at end of file diff --git a/AltCover/AltCover.fs b/AltCover.Engine/AltCover.fs similarity index 100% rename from AltCover/AltCover.fs rename to AltCover.Engine/AltCover.fs diff --git a/AltCover/AltCover.fsi b/AltCover.Engine/AltCover.fsi similarity index 100% rename from AltCover/AltCover.fsi rename to AltCover.Engine/AltCover.fsi diff --git a/AltCover/Args.fs b/AltCover.Engine/Args.fs similarity index 100% rename from AltCover/Args.fs rename to AltCover.Engine/Args.fs diff --git a/AltCover/AssemblyInfo.fs b/AltCover.Engine/AssemblyInfo.fs similarity index 56% rename from AltCover/AssemblyInfo.fs rename to AltCover.Engine/AssemblyInfo.fs index cb3677ba9..16215a5ec 100644 --- a/AltCover/AssemblyInfo.fs +++ b/AltCover.Engine/AssemblyInfo.fs @@ -1,19 +1,17 @@ -namespace AltCover - -open System -open System.Runtime.CompilerServices -open System.Runtime.InteropServices - -[] -[] -#if NETCOREAPP2_0 -[] -#endif -#if DEBUG -// Self-test signing key -[] -#endif -[] -[] -[] +namespace AltCover + +open System +open System.Runtime.CompilerServices +open System.Runtime.InteropServices + +[] +[] +#if DEBUG +// Self-test signing key +[] +[] +#endif +[] +[] +[] () \ No newline at end of file diff --git a/AltCover/Augment.fs b/AltCover.Engine/Augment.fs similarity index 92% rename from AltCover/Augment.fs rename to AltCover.Engine/Augment.fs index b83e170dc..91d51c671 100644 --- a/AltCover/Augment.fs +++ b/AltCover.Engine/Augment.fs @@ -12,13 +12,19 @@ module internal Augment = module Augment = #endif +#if !ValidateGendarmeEmulation + [] + let internal charIndexOf (name:string) (token:char) = + name.IndexOf(token) +#endif + type System.Object with member self.IsNotNull with get() = self |> isNull |> not -#if !GUI -#if !WEAKNAME +#if !(GUI || ValidateGendarmeEmulation) type System.String with member self.X with get() = @@ -28,7 +34,6 @@ module Augment = System.Double.TryParse(self, System.Globalization.NumberStyles.Number, System.Globalization.CultureInfo.InvariantCulture) -#endif #endif type internal Either<'a, 'b> = Choice<'b, 'a> @@ -47,29 +52,23 @@ module Augment = Justification = "Idiomatic F# style")>] let Left x : Either<'a, 'b> = Choice2Of2 x -#if !GUI let internal (|Right|Left|) = -#else - let (|Right|Left|) = -#endif function | Choice1Of2 x -> Right x | Choice2Of2 x -> Left x -#if !WEAKNAME -#if !GUI +#if !(GUI || ValidateGendarmeEmulation) let internal doWithStream (create : unit -> 'a) (action : 'a -> unit) = use stream = create() action stream #endif -#endif #if !GUI type System.Boolean with member self.ToInt32 with get() = if self then 1 else 0 -#if !WEAKNAME +#if !ValidateGendarmeEmulation type System.Int32 with member self.Increment (b : bool) = self + b.ToInt32 diff --git a/AltCover/Cobertura.fs b/AltCover.Engine/Cobertura.fs similarity index 100% rename from AltCover/Cobertura.fs rename to AltCover.Engine/Cobertura.fs diff --git a/AltCover/Command.fs b/AltCover.Engine/Command.fs similarity index 100% rename from AltCover/Command.fs rename to AltCover.Engine/Command.fs diff --git a/AltCover/Command.fsi b/AltCover.Engine/Command.fsi similarity index 100% rename from AltCover/Command.fsi rename to AltCover.Engine/Command.fsi diff --git a/AltCover/CommandLine.fs b/AltCover.Engine/CommandLine.fs similarity index 96% rename from AltCover/CommandLine.fs rename to AltCover.Engine/CommandLine.fs index fe2c368f0..71b81a747 100644 --- a/AltCover/CommandLine.fs +++ b/AltCover.Engine/CommandLine.fs @@ -17,9 +17,7 @@ open BlackFox.CommandLine open Mono.Options open System.Diagnostics.CodeAnalysis -#if NETCOREAPP2_0 -#else -[] +[] module internal Process = type System.Diagnostics.Process with // Work around observed unreliability of WaitForExit() @@ -37,15 +35,14 @@ module internal Process = | :? SystemException | :? InvalidOperationException | :? System.ComponentModel.Win32Exception -> () - if System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" && "Mono.Runtime" - |> Type.GetType - |> isNull then // only rely on .net Framework on Windows + if "Mono.Runtime" + |> Type.GetType + |> isNull then self.WaitForExit() else loop() open Process -#endif module internal Zip = let internal save (document : XDocument) (report : string) (zip : bool) = @@ -194,11 +191,7 @@ module internal CommandLine = proc.Start() |> ignore proc.BeginErrorReadLine() proc.BeginOutputReadLine() - #if NETCOREAPP2_0 - proc.WaitForExit() - #else proc.WaitForExitCustom() - #endif proc.ExitCode * (!dropReturnCode |> not).ToInt32 @@ -265,6 +258,8 @@ module internal CommandLine = |> SecurityException |> raise + [] let internal stripNulls (x : String) = let descape (s : string) = s.Replace(char 0, ';') @@ -436,4 +431,13 @@ module internal CommandLine = |> (Output.warnOn warn) let internal writeErrorResourceWithFormatItems s x = Format.Local(s, x) - |> Output.error \ No newline at end of file + |> Output.error + + [] + let internal toConsole() = + Output.error <- writeErr + Output.usage <- usageBase + Output.echo <- writeErr + Output.info <- writeOut \ No newline at end of file diff --git a/AltCover/Exemption.fs b/AltCover.Engine/Exemption.fs similarity index 86% rename from AltCover/Exemption.fs rename to AltCover.Engine/Exemption.fs index d903ab4a2..9519831db 100644 --- a/AltCover/Exemption.fs +++ b/AltCover.Engine/Exemption.fs @@ -3,8 +3,6 @@ open System.Diagnostics.CodeAnalysis [] -[] #if !GUI type internal Exemption = #else diff --git a/AltCover/Filter.fs b/AltCover.Engine/Filter.fs similarity index 92% rename from AltCover/Filter.fs rename to AltCover.Engine/Filter.fs index e90a4aebe..e2cd121ec 100644 --- a/AltCover/Filter.fs +++ b/AltCover.Engine/Filter.fs @@ -224,4 +224,14 @@ module internal Filter = && m.CustomAttributes |> Seq.exists (fun x -> - x.AttributeType.FullName = typeof.FullName) \ No newline at end of file + x.AttributeType.FullName = typeof.FullName) + +[] +[] +() \ No newline at end of file diff --git a/AltCover/Gendarme.fs b/AltCover.Engine/Gendarme.fs similarity index 100% rename from AltCover/Gendarme.fs rename to AltCover.Engine/Gendarme.fs diff --git a/AltCover/Instrument.fs b/AltCover.Engine/Instrument.fs similarity index 85% rename from AltCover/Instrument.fs rename to AltCover.Engine/Instrument.fs index d882dcd1d..ce6d691c7 100644 --- a/AltCover/Instrument.fs +++ b/AltCover.Engine/Instrument.fs @@ -16,6 +16,12 @@ open Mono.Cecil open Mono.Cecil.Cil open Mono.Cecil.Rocks +[] +() + [] type internal RecorderRefs = { Visit : MethodReference @@ -26,9 +32,7 @@ type internal RecorderRefs = Push = null Pop = null } -// // -// // State object passed from visit to visit -// // +// State object passed from visit to visit [] type internal InstrumentContext = { InstrumentedAssemblies : string list @@ -47,9 +51,7 @@ type internal InstrumentContext = MethodBody = null MethodWorker = null } // to save fetching repeatedly -// // -// // Module to handle instrumentation visitor -// // +// Module to handle instrumentation visitor module internal Instrument = let private resources = ResourceManager("AltCover.JSONFragments", Assembly.GetExecutingAssembly()) @@ -60,12 +62,9 @@ module internal Instrument = Justification = "partitioned into closures")>] module internal I = -#if NETCOREAPP2_0 -#else - let monoRuntime = - ("Mono.Runtime" - |> Type.GetType).IsNotNull -#endif + //let monoRuntime = + // ("Mono.Runtime" + // |> Type.GetType).IsNotNull let dependencies = (resources.GetString "frameworkDependencies").Replace("version", version) @@ -76,11 +75,9 @@ module internal Instrument = (resources.GetString "frameworkLibraries") .Replace("AltCover.Recorder.g/version", "AltCover.Recorder.g/" + version) - // // - // // Locate the method that must be called to register a code point for coverage visit. - // // - // // The assembly containing the recorder method - // // A representation of the method to call to signal a coverage visit. + // Locate the method that must be called to register a code point for coverage visit. + // param name="assembly">The assembly containing the recorder method + // returns>A representation of the method to call to signal a coverage visit. let internal recordingMethod(recordingAssembly : AssemblyDefinition) = recordingAssembly.MainModule.GetAllTypes() |> Seq.filter (fun t -> t.FullName = "AltCover.Recorder.Instance") @@ -92,11 +89,9 @@ module internal Instrument = |> Seq.toList |> List.rev - // // - // // Applies a new key to an assembly name - // // - // // The name to update - // // The possibly empty key to use + // Applies a new key to an assembly name + // param name="assemblyName">The name to update + // param name="key">The possibly empty key to use let internal updateStrongNaming (assembly : AssemblyDefinition) (key : StrongNameKeyData option) = let assemblyName = assembly.Name @@ -111,11 +106,9 @@ module internal Instrument = assemblyName.HasPublicKey <- true assemblyName.PublicKey <- key'.PublicKey |> Seq.toArray // sets token implicitly - // // - // // Locate the key, if any, which was used to name this assembly. - // // - // // The name of the assembly - // // A key, if we have a match. + // Locate the key, if any, which was used to name this assembly. + // param name="name">The name of the assembly + // returns>A key, if we have a match. [] @@ -128,11 +121,9 @@ module internal Instrument = | (false, _) -> None | (_, record) -> Some record.Pair - // // - // // Locate the key, if any, which was used to name this assembly. - // // - // // The name of the assembly - // // A key, if we have a match. + // Locate the key, if any, which was used to name this assembly. + // param name="name">The name of the assembly + // returns>A key, if we have a match. let internal knownToken(name : AssemblyNameReference) = let pktoken = name.PublicKeyToken if pktoken.Length <> 8 then @@ -157,20 +148,18 @@ module internal Instrument = (assembly :> IDisposable).Dispose() reraise() - // // - // // Create the new assembly that will record visits, based on the prototype. - // // - // // A representation of the assembly used to record all coverage visits. + // Create the new assembly that will record visits, based on the prototype. + // returns>A representation of the assembly used to record all coverage visits. [] let internal prepareAssembly(location : string) = let definition = AssemblyDefinition.ReadAssembly(location) guard definition (fun () -> // set the timer interval in ticks - #if NETCOREAPP2_0 - #else - if monoRuntime |> not then ProgramDatabase.readSymbols definition - #endif + + //if monoRuntime |> not then + ProgramDatabase.readSymbols definition + definition.Name.Name <- (extractName definition) + ".g" let pair = CoverageParameters.recorderStrongNameKey @@ -220,18 +209,6 @@ module internal Instrument = worker.InsertBefore(head, worker.Create(OpCodes.Ret)) initialBody |> Seq.iter worker.Remove)) - #if NETCOREAPP2_0 - #else - let internal createSymbolWriter pdb isWindows isMono = - match (isWindows, isMono) with - | (true, true) -> Mono.Cecil.Mdb.MdbWriterProvider() :> ISymbolWriterProvider - | (true, false) -> - match pdb with - | ".pdb" -> Mono.Cecil.Pdb.PdbWriterProvider() :> ISymbolWriterProvider - | _ -> Mono.Cecil.Mdb.MdbWriterProvider() :> ISymbolWriterProvider - | _ -> null - #endif - let private nugetCache = Path.Combine (Path.Combine @@ -291,21 +268,17 @@ module internal Instrument = let hook = resolver.GetType().GetMethod("add_ResolveFailure") hook.Invoke(resolver, [| hookResolveHandler :> obj |]) |> ignore - #if NETCOREAPP2_0 let internal findProvider pdb write = match (pdb, write) with | (".pdb", true) -> Mono.Cecil.Pdb.PdbWriterProvider() :> ISymbolWriterProvider | (_, true) -> Mono.Cecil.Mdb.MdbWriterProvider() :> ISymbolWriterProvider | _ -> null - #endif - - // // - // // Commit an instrumented assembly to disk - // // - // // The instrumented assembly object - // // The full path of the output file - // // Can raise "System.Security.Cryptography.CryptographicException: Keyset does not exist" at random - // // when asked to strongname. This writes a new .pdb/.mdb alongside the instrumented assembly + + // Commit an instrumented assembly to disk + // param name="assembly">The instrumented assembly object + // param name="path">The full path of the output file + // remark>Can raise "System.Security.Cryptography.CryptographicException: Keyset does not exist" at random + // when asked to strongname. This writes a new .pdb/.mdb alongside the instrumented assembly let internal writeAssembly (assembly : AssemblyDefinition) (path : string) = let pkey = Mono.Cecil.WriterParameters() let isWindows = System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" @@ -314,7 +287,7 @@ module internal Instrument = ProgramDatabase.getPdbWithFallback assembly |> Option.defaultValue "x.pdb" |> Path.GetExtension - #if NETCOREAPP2_0 + let separatePdb = ProgramDatabase.getPdbFromImage assembly |> Option.filter (fun s -> s <> (assembly.Name.Name + ".pdb")) @@ -323,26 +296,19 @@ module internal Instrument = // Once Cecil 0.10 beta6 is taken out of the equation, this works // apart from renaming assemblies like AltCover.Recorder to AltCover.Recorder.g // or for assemblies with embedded .pdb information (on *nix) - pkey.WriteSymbols <- (isWindows || separatePdb) && assembly.MainModule.HasSymbols + // 8-AUG-2020 + //Non-windows embedded symbols => do not write, else + //Unhandled exception. System.Runtime.InteropServices.MarshalDirectiveException: Cannot marshal 'parameter #2': Invalid managed/unmanaged type combination (Marshaling to and from COM interface pointers isn't supported). + // at Mono.Cecil.Pdb.SymWriter.CoCreateInstance(Guid& rclsid, Object pUnkOuter, UInt32 dwClsContext, Guid& riid, Object& ppv) + // at Mono.Cecil.Pdb.SymWriter..ctor() in C:/sources/cecil/symbols/pdb/Mono.Cecil.Pdb/SymWriter.cs:line 39 + // at Mono.Cecil.Pdb.NativePdbWriterProvider.CreateWriter(ModuleDefinition module, String pdb) in C:/sources/cecil/symbols/pdb/Mono.Cecil.Pdb/PdbHelper.cs:line 81 + + let shouldWrite = assembly.MainModule.HasSymbols && + (isWindows || separatePdb) pkey.SymbolWriterProvider <- - findProvider pdb pkey.WriteSymbols - #else - // Assembly with pdb writing fails on mono on Windows when writing with - // System.NullReferenceException : Object reference not set to an instance of an object. - // from deep inside Cecil - // Pdb writing fails on mono on non-Windows with - // System.DllNotFoundException : ole32.dll - // at (wrapper managed-to-native) Mono.Cecil.Pdb.SymWriter:CoCreateInstance - // Mdb writing now fails in .net framework, it throws - // Mono.CompilerServices.SymbolWriter.MonoSymbolFileException : - // Exception of type 'Mono.CompilerServices.SymbolWriter.MonoSymbolFileException' was thrown. - // If there are portable .pdbs on mono, those fail to write, too with - // Mono.CompilerServices.SymbolWriter.MonoSymbolFileException : - // Exception of type 'Mono.CompilerServices.SymbolWriter.MonoSymbolFileException' was thrown. - pkey.WriteSymbols <- isWindows - pkey.SymbolWriterProvider <- - createSymbolWriter pdb isWindows monoRuntime - #endif + findProvider pdb shouldWrite + pkey.WriteSymbols <- pkey.SymbolWriterProvider.IsNotNull + knownKey assembly.Name |> Option.iter (fun key -> pkey.StrongNameKeyBlob <- key.Blob |> List.toArray) @@ -364,12 +330,10 @@ module internal Instrument = Justification = "Could be refactored; no obvious IL trace in the .ctor which triggers this" ); AutoSerializable(false); Sealed>] type internal SubstituteInstruction(oldValue : Instruction, newValue : Instruction) = - // // - // // Adjust the IL for exception handling - // // - // // The exception handler - // // The uninstrumented location - // // Where it has moved to + // Adjust the IL for exception handling + // param name="handler">The exception handler + // param name="oldBoundary">The uninstrumented location + // param name="newBoundary">Where it has moved to member this.SubstituteExceptionBoundary(handler : ExceptionHandler) = if handler.FilterStart = oldValue then handler.FilterStart <- newValue if handler.HandlerEnd = oldValue then handler.HandlerEnd <- newValue @@ -377,12 +341,10 @@ module internal Instrument = if handler.TryEnd = oldValue then handler.TryEnd <- newValue if handler.TryStart = oldValue then handler.TryStart <- newValue - // // - // // Adjust the IL to substitute an opcode - // // - // // Instruction being processed - // // Type we are looking for - // // Type to replace it with + // Adjust the IL to substitute an opcode + // param name="instruction">Instruction being processed + // param name="oldOperand">Type we are looking for + // param name="newOperand">Type to replace it with member this.SubstituteInstructionOperand(instruction : Instruction) = // Performance reasons - only 3 types of operators have operands of Instruction types // instruction.Operand getter - is rather slow to execute it for every operator @@ -411,12 +373,10 @@ module internal Instrument = methodWorker.InsertAfter(instrLoadPointId, counterMethodCall) instrLoadModuleId - // // - // // Determine new names for input strong-named assemblies; if we have a key and - // // the assembly was already strong-named then give it the new key token, otherwise - // // set that there is no strongname. - // // - // // The assembly object being operated upon + // Determine new names for input strong-named assemblies; if we have a key and + // the assembly was already strong-named then give it the new key token, otherwise + // set that there is no strongname. + // param name="assembly">The assembly object being operated upon let internal updateStrongReferences (assembly : AssemblyDefinition) (assemblies : string list) = let effectiveKey = @@ -454,6 +414,8 @@ module internal Instrument = assemblyReferenceSubstitutions.[original] <- updated) assemblyReferenceSubstitutions + [] let internal injectJSON (json:String) = //let o = JObject.Parse json let o = JsonValue.Parse json @@ -800,12 +762,10 @@ module internal Instrument = let recordingAssembly = prepareAssembly(recorder.Assembly.Location) { state with RecordingAssembly = recordingAssembly } - // // - // // Perform visitor operations - // // - // // Contextual information for the visit - // // The node being visited - // // Updated state + // Perform visitor operations + // param name="state">Contextual information for the visit + // param name="node">The node being visited + // returns>Updated state let internal instrumentationVisitorCore (state : InstrumentContext) (node : Node) = match node with | Start _ -> visitStart state @@ -844,10 +804,8 @@ module internal Instrument = instrumentationVisitorWrapper instrumentationVisitorCore state node // "Public" API - // // - // // Higher-order function that returns a visitor - // // - // // List of assembly paths to visit - // // Stateful visitor function + // Higher-order function that returns a visitor + // param name="assemblies">List of assembly paths to visit + // returns>Stateful visitor function let internal instrumentGenerator(assemblies : string list) = Visitor.encloseState I.instrumentationVisitor (InstrumentContext.Build assemblies) \ No newline at end of file diff --git a/AltCover/JSONFragments.resx b/AltCover.Engine/JSONFragments.resx similarity index 100% rename from AltCover/JSONFragments.resx rename to AltCover.Engine/JSONFragments.resx diff --git a/AltCover/LCov.fs b/AltCover.Engine/LCov.fs similarity index 91% rename from AltCover/LCov.fs rename to AltCover.Engine/LCov.fs index 10d24e787..11f83f1c5 100644 --- a/AltCover/LCov.fs +++ b/AltCover.Engine/LCov.fs @@ -36,13 +36,33 @@ module internal LCov = let internal multiSortByNameAndStartLine (l : (string * XElement seq) seq) = multiSort lineOfMethod l + // from a real sample e.g. https://pastebin.com/588FggQg + (* +TN: +SF:... +FNF:0 +FNH:0 +DA:5,59 +LF:1 +LH:1 +BRF:0 +BRH:0 +end_of_record +TN: +SF:... +FN:4,(anonymous_0) +... + *) + // it looks like TN: records precede every SF: record + + // from e.g. https://manpages.debian.org/unstable/lcov/geninfo.1.en.html + // Following is a quick description of the tracefile format as used by + // genhtml, geninfo and lcov. + + // A tracefile is made up of several human-readable lines of text, divided into sections. + let internal convertReport (report : XDocument) (format : ReportFormat) (stream : Stream) = doWithStream (fun () -> new StreamWriter(stream)) (fun writer -> - //If available, a tracefile begins with the testname which - // is stored in the following format: - // - // TN: - writer.WriteLine "TN:" match format with | ReportFormat.NCover -> report.Descendants("method".X) @@ -54,6 +74,11 @@ module internal LCov = (m.Descendants("seqpnt".X) |> Seq.head).Attribute("document".X).Value) |> I.multiSortByNameAndStartLine |> Seq.iter (fun (f, methods) -> + //If available, a tracefile begins with the testname which + // is stored in the following format: + // + // TN: + writer.WriteLine "TN:" // For each source file referenced in the .da file, there is a section // containing filename and coverage data: // @@ -140,13 +165,18 @@ module internal LCov = // // end_of_record writer.WriteLine "end_of_record") - | _ -> - // For each source file referenced in the .da file, there is a section - // containing filename and coverage data: - // - // SF: + | _ -> // ReportFormat.OpenCover, ReportFormat.OpenCoverWithTracking report.Descendants("File".X) |> Seq.iter (fun f -> + //If available, a tracefile begins with the testname which + // is stored in the following format: + // + // TN: + writer.WriteLine "TN:" + // For each source file referenced in the .da file, there is a section + // containing filename and coverage data: + // + // SF: writer.WriteLine("SF:" + f.Attribute("fullPath".X).Value) let uid = f.Attribute("uid".X).Value let p = f.Parent.Parent @@ -278,4 +308,4 @@ module internal LCov = let internal summary (report : XDocument) (format : ReportFormat) result = doWithStream(fun () -> File.OpenWrite(!path |> Option.get)) (convertReport report format) - (result, 0uy, String.Empty) \ No newline at end of file + (result, 0uy, String.Empty) diff --git a/AltCover/Main.fs b/AltCover.Engine/Main.fs similarity index 95% rename from AltCover/Main.fs rename to AltCover.Engine/Main.fs index 55f61713a..f79393d32 100644 --- a/AltCover/Main.fs +++ b/AltCover.Engine/Main.fs @@ -447,18 +447,20 @@ module internal Main = List.unzip sorted + let internal isMSBuild (assembly : Assembly option) = + assembly + |> Option.map (fun a -> Path.GetFileName(a.Location).Equals("MSBuild.dll")) + |> Option.defaultValue false + + [] let internal doInstrumentation arguments = -#if NETCOREAPP2_0 let dotnetBuild = Assembly.GetEntryAssembly() // is null for unit tests |> Option.ofObj - |> Option.map (fun a -> Path.GetFileName(a.Location).Equals("MSBuild.dll")) - |> Option.defaultValue false + |> isMSBuild -#else - let dotnetBuild = false - -#endif let check1 = declareOptions() |> CommandLine.parseCommandLine arguments @@ -511,12 +513,16 @@ module internal Main = Runner.init() Runner.doCoverage arguments (declareOptions()) | Select "ImportModule" _ -> - Path.Combine - (Assembly.GetExecutingAssembly().Location |> Path.GetDirectoryName, - "AltCover.PowerShell.dll") - |> Path.GetFullPath - |> sprintf "Import-Module %A" - |> (Output.info) + let here = Assembly.GetExecutingAssembly().Location |> Path.GetDirectoryName + let parent = here |> Path.GetDirectoryName + Directory.GetDirectories(parent) + |> Seq.sort + |> Seq.collect (fun d -> Directory.GetFiles(d, + "AltCover.PowerShell.dll", + SearchOption.TopDirectoryOnly)) + |> Seq.tryHead + |> Option.map (sprintf "Import-Module %A") + |> Option.iter Output.info 0 | Select "version" _ -> CommandLine.writeResourceWithFormatItems "AltCover.Version" diff --git a/AltCover/Naming.fs b/AltCover.Engine/Naming.fs similarity index 100% rename from AltCover/Naming.fs rename to AltCover.Engine/Naming.fs diff --git a/AltCover/OpenCover.fs b/AltCover.Engine/OpenCover.fs similarity index 99% rename from AltCover/OpenCover.fs rename to AltCover.Engine/OpenCover.fs index 062354f06..14c057e98 100644 --- a/AltCover/OpenCover.fs +++ b/AltCover.Engine/OpenCover.fs @@ -416,6 +416,12 @@ module internal OpenCover = summary.SetAttributeValue("minCyclomaticComplexity".X, Math.Min(min, max)) summary.SetAttributeValue("numClasses".X, classes) summary.SetAttributeValue("numMethods".X, methods)) + + if head.Descendants("Method".X) |> Seq.isEmpty && + //head.Attributes("skippedDueTo".X) |> Seq.isEmpty && + s.Excluded = Nothing + then head.Parent.Remove() + { s with Stack = if s.Excluded = Nothing then tail else s.Stack diff --git a/AltCover/PostProcess.fs b/AltCover.Engine/PostProcess.fs similarity index 93% rename from AltCover/PostProcess.fs rename to AltCover.Engine/PostProcess.fs index 67088c43a..56b37de7a 100644 --- a/AltCover/PostProcess.fs +++ b/AltCover.Engine/PostProcess.fs @@ -172,6 +172,24 @@ module internal PostProcess = | null -> (false, Unchecked.defaultof<'b>) | _ -> d.TryGetValue key + let internal fillTrackedVisits + (document : XmlAbstraction) + (tracks : Dictionary) + (attribute : string) = + document.RootElement.GetElementsByTagName "TrackedMethod" + |> Seq.iter (fun xel -> + let (ok, index) = xel.GetAttribute("uid") |> Int32.TryParse + if ok && tracks.ContainsKey index + then + let times = tracks.[index].Tracks + |> Seq.map (fun t -> match t with + | Time tx -> sprintf "%d" tx + | _ -> String.Empty) // never happens + |> Seq.filter (fun s -> s.Length > 0) + let attrVal = String.Join(";", times) + if attrVal.Length > 0 + then xel.SetAttribute attribute attrVal) + let internal action orderAttr (counts : Dictionary>) @@ -180,6 +198,11 @@ module internal PostProcess = match format with | ReportFormat.OpenCoverWithTracking | ReportFormat.OpenCover -> + if counts.ContainsKey Track.Entry + then fillTrackedVisits document counts.[Track.Entry] "entry" + if counts.ContainsKey Track.Exit + then fillTrackedVisits document counts.[Track.Exit] "exit" + let scoreToString raw = (sprintf "%.2f" raw).TrimEnd([| '0' |]).TrimEnd([| '.' |]) diff --git a/AltCover/Primitive.fs b/AltCover.Engine/Primitive.fs similarity index 100% rename from AltCover/Primitive.fs rename to AltCover.Engine/Primitive.fs diff --git a/AltCover/Primitive.fsi b/AltCover.Engine/Primitive.fsi similarity index 100% rename from AltCover/Primitive.fsi rename to AltCover.Engine/Primitive.fsi diff --git a/AltCover/ProgramDatabase.fs b/AltCover.Engine/ProgramDatabase.fs similarity index 97% rename from AltCover/ProgramDatabase.fs rename to AltCover.Engine/ProgramDatabase.fs index 2db0c9159..7228f7e2e 100644 --- a/AltCover/ProgramDatabase.fs +++ b/AltCover.Engine/ProgramDatabase.fs @@ -1,83 +1,83 @@ -namespace AltCover - -open System -open System.Collections.Generic -open System.IO - -open Mono.Cecil -open Mono.Cecil.Cil -open Mono.Cecil.Mdb -open Mono.Cecil.Pdb - -[] -module internal ProgramDatabase = - // "Public" "field" - let internal symbolFolders = List() - - // Implementation details - module private I = - - // We no longer have to violate Cecil encapsulation to get the PDB path - // but we do to get the embedded PDB info - let internal getEmbed = - (typeof.Assembly.GetTypes() - |> Seq.filter (fun m -> m.FullName = "Mono.Cecil.Mixin") - |> Seq.head).GetMethod("GetEmbeddedPortablePdbEntry") - - let internal getEmbeddedPortablePdbEntry(assembly : AssemblyDefinition) = - getEmbed.Invoke(null, [| assembly.MainModule.GetDebugHeader() :> obj |]) :?> ImageDebugHeaderEntry - - let internal getSymbolsByFolder fileName folderName = - let name = Path.Combine(folderName, fileName) - let fallback = Path.ChangeExtension(name, ".pdb") - if File.Exists(fallback) then - Some fallback - else - let fallback2 = name + ".mdb" - // Note -- the assembly path, not the mdb path, because GetSymbolReader wants the assembly path for Mono - if File.Exists(fallback2) then Some name else None - - // "Public" API - let internal getPdbFromImage(assembly : AssemblyDefinition) = - Some assembly.MainModule - |> Option.filter (fun x -> x.HasDebugHeader) - |> Option.map (fun x -> x.GetDebugHeader()) - |> Option.filter (fun x -> x.HasEntries) - |> Option.bind (fun x -> x.Entries |> Seq.tryFind (fun t -> true)) - |> Option.map (fun x -> x.Data) - |> Option.filter (fun x -> x.Length > 0x18) - |> Option.map (fun x -> - x - |> Seq.skip 0x18 // size of the debug header - |> Seq.takeWhile (fun x -> x <> byte 0) - |> Seq.toArray - |> System.Text.Encoding.UTF8.GetString) - |> Option.filter (fun s -> s.Length > 0) - |> Option.filter (fun s -> - File.Exists s || (s = (assembly.Name.Name + ".pdb") && (assembly - |> I.getEmbeddedPortablePdbEntry).IsNotNull)) - - let internal getPdbWithFallback(assembly : AssemblyDefinition) = - match getPdbFromImage assembly with - | None -> - let foldername = Path.GetDirectoryName assembly.MainModule.FileName - let filename = Path.GetFileName assembly.MainModule.FileName - foldername :: (Seq.toList symbolFolders) - |> Seq.map (I.getSymbolsByFolder filename) - |> Seq.choose id - |> Seq.tryFind (fun _ -> true) - | pdbpath -> pdbpath - - // Ensure that we read symbols from the .pdb path we discovered. - // Cecil currently only does the Path.ChangeExtension(path, ".pdb") fallback if left to its own devices - // Will fail with InvalidOperationException if there is a malformed file with the expected name - let internal readSymbols(assembly : AssemblyDefinition) = - getPdbWithFallback assembly - |> Option.iter (fun pdbpath -> - let provider : ISymbolReaderProvider = - if pdbpath.EndsWith(".pdb", StringComparison.OrdinalIgnoreCase) - then PdbReaderProvider() :> ISymbolReaderProvider - else MdbReaderProvider() :> ISymbolReaderProvider - - let reader = provider.GetSymbolReader(assembly.MainModule, pdbpath) +namespace AltCover + +open System +open System.Collections.Generic +open System.IO + +open Mono.Cecil +open Mono.Cecil.Cil +open Mono.Cecil.Mdb +open Mono.Cecil.Pdb + +[] +module internal ProgramDatabase = + // "Public" "field" + let internal symbolFolders = List() + + // Implementation details + module private I = + + // We no longer have to violate Cecil encapsulation to get the PDB path + // but we do to get the embedded PDB info + let internal getEmbed = + (typeof.Assembly.GetTypes() + |> Seq.filter (fun m -> m.FullName = "Mono.Cecil.Mixin") + |> Seq.head).GetMethod("GetEmbeddedPortablePdbEntry") + + let internal getEmbeddedPortablePdbEntry(assembly : AssemblyDefinition) = + getEmbed.Invoke(null, [| assembly.MainModule.GetDebugHeader() :> obj |]) :?> ImageDebugHeaderEntry + + let internal getSymbolsByFolder fileName folderName = + let name = Path.Combine(folderName, fileName) + let fallback = Path.ChangeExtension(name, ".pdb") + if File.Exists(fallback) then + Some fallback + else + let fallback2 = name + ".mdb" + // Note -- the assembly path, not the mdb path, because GetSymbolReader wants the assembly path for Mono + if File.Exists(fallback2) then Some name else None + + // "Public" API + let internal getPdbFromImage(assembly : AssemblyDefinition) = + Some assembly.MainModule + |> Option.filter (fun x -> x.HasDebugHeader) + |> Option.map (fun x -> x.GetDebugHeader()) + |> Option.filter (fun x -> x.HasEntries) + |> Option.bind (fun x -> x.Entries |> Seq.tryFind (fun t -> true)) + |> Option.map (fun x -> x.Data) + |> Option.filter (fun x -> x.Length > 0x18) + |> Option.map (fun x -> + x + |> Seq.skip 0x18 // size of the debug header + |> Seq.takeWhile (fun x -> x <> byte 0) + |> Seq.toArray + |> System.Text.Encoding.UTF8.GetString) + |> Option.filter (fun s -> s.Length > 0) + |> Option.filter (fun s -> + File.Exists s || (s = (assembly.Name.Name + ".pdb") && (assembly + |> I.getEmbeddedPortablePdbEntry).IsNotNull)) + + let internal getPdbWithFallback(assembly : AssemblyDefinition) = + match getPdbFromImage assembly with + | None -> + let foldername = Path.GetDirectoryName assembly.MainModule.FileName + let filename = Path.GetFileName assembly.MainModule.FileName + foldername :: (Seq.toList symbolFolders) + |> Seq.map (I.getSymbolsByFolder filename) + |> Seq.choose id + |> Seq.tryFind (fun _ -> true) + | pdbpath -> pdbpath + + // Ensure that we read symbols from the .pdb path we discovered. + // Cecil currently only does the Path.ChangeExtension(path, ".pdb") fallback if left to its own devices + // Will fail with InvalidOperationException if there is a malformed file with the expected name + let internal readSymbols(assembly : AssemblyDefinition) = + getPdbWithFallback assembly + |> Option.iter (fun pdbpath -> + let provider : ISymbolReaderProvider = + if pdbpath.EndsWith(".pdb", StringComparison.OrdinalIgnoreCase) + then PdbReaderProvider() :> ISymbolReaderProvider + else MdbReaderProvider() :> ISymbolReaderProvider + + let reader = provider.GetSymbolReader(assembly.MainModule, pdbpath) assembly.MainModule.ReadSymbols(reader)) \ No newline at end of file diff --git a/AltCover/Report.fs b/AltCover.Engine/Report.fs similarity index 100% rename from AltCover/Report.fs rename to AltCover.Engine/Report.fs diff --git a/AltCover/Runner.fs b/AltCover.Engine/Runner.fs similarity index 99% rename from AltCover/Runner.fs rename to AltCover.Engine/Runner.fs index 35cf8fa24..1958da87e 100644 --- a/AltCover/Runner.fs +++ b/AltCover.Engine/Runner.fs @@ -459,10 +459,12 @@ module internal Runner = let internal addCoberturaSummary() = summaries <- Cobertura.summary :: summaries + let internal initSummary() = + summaries <- [ standardSummary ] + // "Public" let internal declareOptions() = - I.summaries <- [] - I.summaries <- I.standardSummary :: I.summaries + I.initSummary() [ ("r|recorderDirectory=", (fun x -> if CommandLine.validateDirectory "--recorderDirectory" x then diff --git a/AltCover/Strings.eo.resx b/AltCover.Engine/Strings.eo.resx similarity index 100% rename from AltCover/Strings.eo.resx rename to AltCover.Engine/Strings.eo.resx diff --git a/AltCover/Strings.resx b/AltCover.Engine/Strings.resx similarity index 100% rename from AltCover/Strings.resx rename to AltCover.Engine/Strings.resx diff --git a/AltCover/TaskIO.fs b/AltCover.Engine/TaskIO.fs similarity index 100% rename from AltCover/TaskIO.fs rename to AltCover.Engine/TaskIO.fs diff --git a/AltCover/Tasks.fs b/AltCover.Engine/Tasks.fs similarity index 96% rename from AltCover/Tasks.fs rename to AltCover.Engine/Tasks.fs index cd66d3bef..ef0d7633f 100644 --- a/AltCover/Tasks.fs +++ b/AltCover.Engine/Tasks.fs @@ -1,12 +1,10 @@ namespace AltCover open System -#if NETCOREAPP2_0 open System.IO open System.Reflection open System.Xml open System.Xml.Linq -#endif open System.Diagnostics.CodeAnalysis open Microsoft.Build.Utilities @@ -284,7 +282,7 @@ type Echo() = Console.ForegroundColor <- original true -#if NETCOREAPP2_0 + type RunSettings() = inherit Task(null) @@ -316,13 +314,13 @@ type RunSettings() = else XDocument() - let X n = XName.Get n + let xname n = XName.Get n let ensureHas (parent : XContainer) childName = - match parent.Descendants(X childName) |> Seq.tryHead with + match parent.Descendants(xname childName) |> Seq.tryHead with | Some child -> child | _ -> - let extra = XElement(X childName) + let extra = XElement(xname childName) parent.Add extra extra @@ -339,14 +337,14 @@ type RunSettings() = let name = AssemblyName.GetAssemblyName(expected) let altcover = XElement - (X "InProcDataCollector", XAttribute(X "friendlyName", "AltCover"), + (xname "InProcDataCollector", XAttribute(xname "friendlyName", "AltCover"), XAttribute - (X "uri", + (xname "uri", "InProcDataCollector://AltCover/Recorder/" + name.Version.ToString()), XAttribute - (X "assemblyQualifiedName", "AltCover.DataCollector, " + name.FullName), - XAttribute(X "codebase", expected), - XElement(X "Configuration", XElement(X "Offload", XText("true")))) + (xname "assemblyQualifiedName", "AltCover.DataCollector, " + name.FullName), + XAttribute(xname "codebase", expected), + XElement(xname "Configuration", XElement(xname "Offload", XText("true")))) ip2.Add(altcover) self.Extended <- Path.ChangeExtension(tempFile, ".altcover.runsettings") @@ -354,5 +352,4 @@ type RunSettings() = result finally - File.Delete(tempFile) -#endif \ No newline at end of file + File.Delete(tempFile) \ No newline at end of file diff --git a/AltCover/Tasks.fsi b/AltCover.Engine/Tasks.fsi similarity index 99% rename from AltCover/Tasks.fsi rename to AltCover.Engine/Tasks.fsi index f3547e0c2..de22cd260 100644 --- a/AltCover/Tasks.fsi +++ b/AltCover.Engine/Tasks.fsi @@ -302,7 +302,6 @@ type Echo = member Text : string with get, set end // ``` -#if NETCOREAPP2_0 // ## Task `AltCover.RunSettings` // Used by the .net core implementation to inject an AltCover data collector, by creating a temporary run-settings file that includes AltCover as well as any user-defined settings. // @@ -334,5 +333,4 @@ type RunSettings = /// member TestSetting : string with get, set end -#endif // ``` \ No newline at end of file diff --git a/AltCover/TypeSafe.fs b/AltCover.Engine/TypeSafe.fs similarity index 100% rename from AltCover/TypeSafe.fs rename to AltCover.Engine/TypeSafe.fs diff --git a/AltCover/TypeSafe.fsi b/AltCover.Engine/TypeSafe.fsi similarity index 100% rename from AltCover/TypeSafe.fsi rename to AltCover.Engine/TypeSafe.fsi diff --git a/AltCover/Visitor.fs b/AltCover.Engine/Visitor.fs similarity index 98% rename from AltCover/Visitor.fs rename to AltCover.Engine/Visitor.fs index 01442d3aa..d28aabc28 100644 --- a/AltCover/Visitor.fs +++ b/AltCover.Engine/Visitor.fs @@ -164,7 +164,7 @@ type internal KeyRecord = [] type internal SequenceType = | Genuine - | FakeAfterReturn + | FakeAtReturn [] module internal KeyStore = @@ -415,6 +415,8 @@ module internal Visitor = [] + [] let internal locateMatch file dict = let find = findClosestMatch file dict @@ -511,8 +513,9 @@ module internal Visitor = then Exemption.Automatic else exemption + // actually all vestigial classes now the first line is commented out let internal stripInterfaces (t:TypeDefinition) = - t.BaseType.IsNotNull || + // t.BaseType.IsNotNull || t.Methods |> Seq.exists (fun m -> m.IsAbstract |> not) let private visitModule (x : ModuleDefinition) included (buildSequence : Node -> seq) = @@ -689,7 +692,8 @@ module internal Visitor = nesting > 0) |> Seq.length - if mname.StartsWith("<", StringComparison.Ordinal) && mname.IndexOf('|') > 0 then + if mname.StartsWith("<", StringComparison.Ordinal) && + charIndexOf mname '|' > 0 then let index = (indexOfMatchingClosingAngleBracket mname) - 1 cSharpContainingMethod mname t index (methodCallsMethod m) else @@ -713,7 +717,7 @@ module internal Visitor = (mx.FullName <> m.FullName) && (methodCallsMethod m mx || methodConstructsType t mx || methodLoadsMethod m mx)) - else if n.IndexOf('@') >= 0 then + else if charIndexOf n '@' >= 0 then let tx = if n.EndsWith("T", StringComparison.Ordinal) then match t.Methods @@ -776,7 +780,7 @@ module internal Visitor = let internal fakeSequencePoint genuine (seq : SequencePoint) (instruction : Instruction) = match seq with | null -> - if genuine = FakeAfterReturn && instruction.IsNotNull + if genuine = FakeAtReturn && instruction.IsNotNull && instruction.OpCode = OpCodes.Ret then SequencePoint(instruction, Document(null)) else @@ -788,7 +792,7 @@ module internal Visitor = instructions |> Seq.map (fun i -> let seq = dbg.GetSequencePoint i - fakeSequencePoint genuine seq i.Previous) + fakeSequencePoint genuine seq i) |> Seq.tryFind isSequencePoint let internal findSequencePoint (dbg : MethodDebugInformation) (instructions : Instruction seq) = @@ -828,7 +832,7 @@ module internal Visitor = if isNull state || finish = state.Previous then None else Some(state, state.Next)) start |> Seq.toList - findEffectiveSequencePoint FakeAfterReturn dbg range + findEffectiveSequencePoint FakeAtReturn dbg range let rec internal lastOfSequencePoint (dbg : MethodDebugInformation) (i : Instruction) = let n = i.Next diff --git a/AltCover/WhatIfExtension.fs b/AltCover.Engine/WhatIfExtension.fs similarity index 100% rename from AltCover/WhatIfExtension.fs rename to AltCover.Engine/WhatIfExtension.fs diff --git a/AltCover/WhatIfExtension.fsi b/AltCover.Engine/WhatIfExtension.fsi similarity index 100% rename from AltCover/WhatIfExtension.fsi rename to AltCover.Engine/WhatIfExtension.fsi diff --git a/AltCover.GlobalTool/runtimeconfig.template.json b/AltCover.Engine/runtimeconfig.template.json similarity index 100% rename from AltCover.GlobalTool/runtimeconfig.template.json rename to AltCover.Engine/runtimeconfig.template.json diff --git a/AltCover.Fake.DotNet.Testing.AltCover/altcover.fake.dotnet.testing.altcover.core.fsproj b/AltCover.Fake.DotNet.Testing.AltCover/AltCover.Fake.DotNet.Testing.AltCover.fsproj similarity index 75% rename from AltCover.Fake.DotNet.Testing.AltCover/altcover.fake.dotnet.testing.altcover.core.fsproj rename to AltCover.Fake.DotNet.Testing.AltCover/AltCover.Fake.DotNet.Testing.AltCover.fsproj index 48ef6c8c6..24ca8875e 100644 --- a/AltCover.Fake.DotNet.Testing.AltCover/altcover.fake.dotnet.testing.altcover.core.fsproj +++ b/AltCover.Fake.DotNet.Testing.AltCover/AltCover.Fake.DotNet.Testing.AltCover.fsproj @@ -1,7 +1,8 @@  - netstandard2.0;net462 + netstandard2.0;net472 + netstandard2.0 AltCover.Fake.DotNet.Testing.AltCover AltCover.Fake.DotNet.Testing.AltCover false @@ -31,15 +32,15 @@ - - - - - - - - - + + + + + + + + + @@ -57,11 +58,11 @@ all runtime; build; native; contentfiles; analyzers - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -70,7 +71,7 @@ - + \ No newline at end of file diff --git a/AltCover.Fake/altcover.fake.core.fsproj b/AltCover.Fake/AltCover.Fake.fsproj similarity index 83% rename from AltCover.Fake/altcover.fake.core.fsproj rename to AltCover.Fake/AltCover.Fake.fsproj index af0a02607..00c41e0d1 100644 --- a/AltCover.Fake/altcover.fake.core.fsproj +++ b/AltCover.Fake/AltCover.Fake.fsproj @@ -1,7 +1,8 @@  - netstandard2.0;net46 + netstandard2.0;net472 + netstandard2.0 AltCover.Fake AltCover.Fake false @@ -44,20 +45,19 @@ - - + + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + \ No newline at end of file diff --git a/AltCover.Fake/Fake.fs b/AltCover.Fake/Fake.fs index 2aa2c5d12..8eab114fe 100644 --- a/AltCover.Fake/Fake.fs +++ b/AltCover.Fake/Fake.fs @@ -49,7 +49,7 @@ type Command private () = let target = match toolType with | Framework _ -> "AltCover.exe" - | _ -> "AltCover.NetCoreApp.dll" + | _ -> "AltCover.dll" match Directory.GetFiles(root, target, SearchOption.AllDirectories) |> Seq.tryHead with | Some path -> path |> Path.GetFullPath @@ -89,6 +89,11 @@ module DotNet = (result, (if f.Name <> "Common@" then f.GetValue self else common)) + let internal extractParameters (o : DotNet.TestOptions) = + let t = o.Common.GetType() + let p = t.GetProperty("CustomParams") + p.GetValue(o.Common, null) :?> string Option + type DotNet.TestOptions with // NOTE: the MSBuildParams member of TestOptions did not exist in Fake 5.0.0 @@ -96,12 +101,6 @@ module DotNet = [] member private self.ExtendCustomParams options = - let custom = self.Common.CustomParams - - let extended = - match custom with - | None -> Some options - | Some thing -> Some(thing + " " + options) // the constructors are version dependent let optionsConstructor = self.Common.GetType().GetConstructors().[0] @@ -111,6 +110,11 @@ module DotNet = |> Array.map activate let common = optionsConstructor.Invoke(args) + let extended = + match self |> extractParameters with + | None -> Some options + | Some thing -> Some(thing + " " + options) + self.Common.GetType().GetFields(BindingFlags.NonPublic ||| BindingFlags.Instance) |> Array.iter (setCustomParams common extended self.Common) let testOptionsConstructor = self.GetType().GetConstructors().[0] diff --git a/AltCover.NetCoreApp/altcover.netcoreapp.core.fsproj b/AltCover.FontSupport/AltCover.FontSupport.csproj similarity index 50% rename from AltCover.NetCoreApp/altcover.netcoreapp.core.fsproj rename to AltCover.FontSupport/AltCover.FontSupport.csproj index 8ae05d87b..6b54cad4f 100644 --- a/AltCover.NetCoreApp/altcover.netcoreapp.core.fsproj +++ b/AltCover.FontSupport/AltCover.FontSupport.csproj @@ -1,54 +1,40 @@ - Exe - netcoreapp2.0;net45 - AltCover.NetCoreApp + netstandard2.0;net472 + AltCover.FontSupport + AltCover.FontSupport false true true true - $(SolutionDir)AltCover/AltCover.ico - $(ProjectDir)../ + $(ProjectDir)../ + true + $(SolutionDir)\Build\Infrastructure.snk $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ - --keyfile:$(SolutionDir)Build\Infrastructure.snk - - 4 - true - + TRACE;DEBUG;CODE_ANALYSIS - - + - + + all - runtime; build; native; contentfiles; analyzers + runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - + all - runtime; build; native; contentfiles; analyzers; buildtransitive + runtime; build; native; contentfiles; analyzers - - - - \ No newline at end of file diff --git a/AltCover.FontSupport/AssemblyInfo.cs b/AltCover.FontSupport/AssemblyInfo.cs new file mode 100644 index 000000000..a3e4efd11 --- /dev/null +++ b/AltCover.FontSupport/AssemblyInfo.cs @@ -0,0 +1,19 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("AltCover.FontSupport")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCulture("")] +[assembly: System.CLSCompliant(true)] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("BF222DBB-6E7F-4AF5-9B5F-D43026DF5DD7")] \ No newline at end of file diff --git a/AltCover.FontSupport/ChooseFont.cs b/AltCover.FontSupport/ChooseFont.cs new file mode 100644 index 000000000..e23f8a23b --- /dev/null +++ b/AltCover.FontSupport/ChooseFont.cs @@ -0,0 +1,719 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Runtime.InteropServices; + +namespace AltCover.FontSupport +{ + internal static class NativeMethods + { + [DllImport("comdlg32", CharSet = CharSet.Ansi, EntryPoint = "ChooseFont", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + public extern static bool ChooseFont(IntPtr lpcf); + } + + public static class Fonts + { + public static IEnumerable Wish() + { +#if NETSTANDARD2_0 + return Fake.Core.ProcessUtils.findFilesOnPath("wish"); +#else + return Enumerable.Empty(); +#endif + } + + public static LogFont SelectWish(string font) + { + var info = new ProcessStartInfo() + { + Arguments = String.Empty, + CreateNoWindow = true, + ErrorDialog = false, + FileName = Wish().FirstOrDefault(), + RedirectStandardError = true, + RedirectStandardInput = true, + RedirectStandardOutput = true + }; + + //Console.WriteLine("font in '{0}'", font); + var _ = LogFont.TryParse(font, out var lf); + var tkfont = lf.ToWishString(); + //Console.WriteLine("font in '{0}'", tkfont); + + using (var wish = Process.Start(info)) + { + var si = wish.StandardInput; + si.WriteLine("wm geometry . 1x1"); + si.WriteLine("wm attributes . -alpha 0.0"); + si.WriteLine("proc fontchosen {f} {"); + si.WriteLine(" puts stdout \"***fontchosen***\""); + si.WriteLine(" puts stdout $f"); + si.WriteLine(" destroy ."); + si.WriteLine("}"); + si.WriteLine("proc closeout {} {"); + si.WriteLine(" [expr {"); + si.WriteLine(" [tk fontchooser configure -visible] ?"); + si.WriteLine(" \"raise\" : \"destroy\" }] ."); + si.WriteLine("}"); + si.WriteLine("bind . <> closeout"); + si.WriteLine("tk fontchooser configure -parent . -font " + + tkfont + " -command fontchosen"); + si.WriteLine("tk fontchooser show"); + wish.WaitForExit(); + var found = false; + + var so = wish.StandardOutput; + while (!found) + { + var sol = so.ReadLine(); + found = string.IsNullOrEmpty(sol) || + sol.Equals("***fontchosen***"); + } + + if (!found) + return null; + + var line = so.ReadLine(); + //Console.WriteLine("font out '{0}'", line); + + if (!LogFont.TryWishParse(line, out var fontOut)) + return null; + //Console.WriteLine("font out'{0}'", fontOut); + return fontOut; + } + } + + [SuppressMessage("Gendarme.Rules.Design", "Generic.AvoidMethodWithUnusedGenericTypeRule", + Justification = "private method, not for morts.")] + private static IntPtr Allocate() + { + var size = Marshal.SizeOf(); + return Marshal.AllocHGlobal(size); + } + + public static LogFont SelectWin32(string font, IntPtr handle) + { + var _ = LogFont.TryParse(font, out LogFont logfont); + IntPtr pLogfont = Allocate(); //Marshal.AllocHGlobal(Marshal.SizeOf(logfont)); + try + { + // Fudge-factor here + logfont.height = -(int)Math.Round(Math.Abs(logfont.height * 4.0 / 3.0)); + logfont.italic = (byte)(logfont.italic == (byte)0 ? 0 : 255); + Marshal.StructureToPtr(logfont, pLogfont, false); + + ChooseFont choosefont = new ChooseFont(); + IntPtr pChoosefont = Allocate(); //Marshal.AllocHGlobal(Marshal.SizeOf(choosefont)); + try + { + choosefont.structSize = Marshal.SizeOf(choosefont); + choosefont.owner = handle; + choosefont.minSize = 64; + choosefont.maxSize = 64; + choosefont.options = (int)ChooseFontOptions.ScreenFonts + | (int)ChooseFontOptions.ForceFontExist + | (int)ChooseFontOptions.InactiveFonts + | (int)ChooseFontOptions.InitToLogFont + | (int)ChooseFontOptions.ScaledOnly + | (int)ChooseFontOptions.FixedPitchOnly; + choosefont.logFont = pLogfont; + choosefont.pointSize = logfont.height * 10; + + Marshal.StructureToPtr(choosefont, pChoosefont, false); + + if (NativeMethods.ChooseFont(pChoosefont)) + { + var chosen = Marshal.PtrToStructure(pChoosefont, typeof(ChooseFont)) as ChooseFont; + var newfont = Marshal.PtrToStructure(chosen.logFont, typeof(LogFont)) as LogFont; + newfont.height = chosen.pointSize / 10; + return newfont; + } + + return null; + } + finally + { + Marshal.FreeHGlobal(pChoosefont); + } + } + finally + { + Marshal.FreeHGlobal(pLogfont); + } + } + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi), + SuppressMessage("Gendarme.Rules.Performance", "AvoidUnusedPrivateFieldsRule", + Justification = "Represents a native structure"), + SuppressMessage("Gendarme.Rules.Design", "AvoidVisibleFieldsRule", + Justification = "Represents a native structure"), + SuppressMessage("Gendarme.Rules.Security", "NativeFieldsShouldNotBeVisibleRule", + Justification = "Represents a native structure"), + SuppressMessage("Gendarme.Rules.BadPractice", "PreferSafeHandleRule", + Justification = "Represents a native structure") + ] + public class ChooseFont + { + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public int structSize; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + [SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Justification = "Represents a native structure")] + public IntPtr owner; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + [SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Justification = "Represents a native structure")] + public IntPtr dc; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + [SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Justification = "Represents a native structure")] + public IntPtr logFont; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public int pointSize; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public int options; //flags + + [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Justification = "Queen's English, m80")] + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public int colours; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + [SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Justification = "Represents a native structure")] + public IntPtr customData; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + [SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Justification = "Represents a native structure")] + public IntPtr hook; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public string templateName; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + [SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Justification = "Represents a native structure")] + public IntPtr instance; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public string style; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public short fontType; + + private readonly short alignmentDummy; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public int minSize; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public int maxSize; + } + + [Flags, + Serializable] + public enum ChooseFontOptions + { + ScreenFonts = 0x00000001, + PrinterFonts = 0x00000002, + Both = (ScreenFonts | PrinterFonts), + ShowHelp = 0x00000004, + EnableHook = 0x00000008, + EnableTemplate = 0x00000010, + EnableTemplateHandle = 0x00000020, + InitToLogFont = 0x00000040, + UseStyle = 0x00000080, + Effects = 0x00000100, + Apply = 0x00000200, + AnsiOnly = 0x00000400, + ScriptsOnly = AnsiOnly, + NoVectorFonts = 0x00000800, + + [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", + Justification = "Seriously, u wot m8!?")] + NoOemFonts = NoVectorFonts, + + NoSimulations = 0x00001000, + LimitSize = 0x00002000, + FixedPitchOnly = 0x00004000, + + [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", + Justification = "Seriously, u wot m8!?")] + Wysiwyg = 0x00008000, + + ForceFontExist = 0x00010000, + ScaledOnly = 0x00020000, + TTOnly = 0x00040000, + NoFace = 0x00080000, + NoStyle = 0x00100000, + NoSize = 0x00200000, + SelectScript = 0x00400000, + NoScript = 0x00800000, + NoVerticalFonts = 0x01000000, + InactiveFonts = 0x02000000 + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi), + SuppressMessage("Gendarme.Rules.Design", "AvoidVisibleFieldsRule", + Justification = "Represents a native structure"), + SuppressMessage("Gendarme.Rules.Smells", "AvoidSpeculativeGeneralityRule", + Justification = "Seriously, u wot m8!?") + ] + public class LogFont + { + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public int height; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public int width; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public int escapement; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public int orientation; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public int weight; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public byte italic; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public byte underline; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", + Justification = "Seriously, u wot m8!?")] + public byte strikeOut; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public byte charSet; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public byte outPrecision; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public byte clipPrecision; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public byte quality; + + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public byte pitchAndFamily; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] + [SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Justification = "Represents a native structure")] + public string faceName = string.Empty; + + public LogFont() + { + var p = (int)Environment.OSVersion.Platform; + var isWindows = p <= 3; + + faceName = isWindows ? "Courier New" : "Monospace"; + weight = (int)FontWeight.Normal; + height = 10; + } + + [SuppressMessage("Microsoft.Globalization", "CA1307:SpecifyStringComparison", + Justification = "Preferred overload, no comparison exists in netstd2.0/net472")] + private static int CharIndexOf(string name, char token) + { + return name.IndexOf(token); + } + + // Pango-style text + [SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", + Justification = "validate local variable ''(*decode)'', which was reassigned from parameter 'decode', before using it -- u wot m8!?")] + public static bool TryParse(string encoded, out LogFont decode) + { + decode = new LogFont(); + if (string.IsNullOrEmpty(encoded)) + return false; + var core = encoded; + + // discard variations + var at = CharIndexOf(core, '@'); + if (at >= 0) + core = core.Substring(0, at); + + core = core.TrimEnd(); + + // look for a size + var end = core.LastIndexOfAny(new char[] { ' ', ',' }); + if (end >= 0) + { + var size = core.Substring(end + 1).TrimEnd(); + if (size.EndsWith("px", StringComparison.Ordinal)) + size = size.Substring(0, size.Length - 2); + var sized = Int32.TryParse(size, out int fontsize); + if (sized) + { + decode.height = fontsize; + core = core.Substring(0, end); + } + } + + // style words + end = core.LastIndexOfAny(new char[] { ' ', ',' }); + while (end >= 0) + { + var slug = core.Substring(end + 1).TrimEnd(); + bool matched(string item, LogFont font) + { + switch (item) + { + case "Normal": + break; + + case "Roman": + break; // todo + case "Oblique": + font.italic = 127; + break; + + case "Italic": + font.italic = 255; + break; + + case "Small-Caps": + break; // todo + case "Thin": + font.weight = (int)FontWeight.Thin; + break; + + case "Ultra-Light": + case "Extra-Light": + font.weight = (int)FontWeight.Ultralight; + break; + + case "Light": + font.weight = (int)FontWeight.Light; + break; + + case "Semi-Light": + case "Demi-Light": + font.weight = (int)FontWeight.Semilight; + break; + + case "Book": + font.weight = (int)FontWeight.Book; + break; + + case "Regular": + font.weight = (int)FontWeight.Normal; + break; + + case "Medium": + font.weight = (int)FontWeight.Medium; + break; + + case "Semi-Bold": + case "Demi-Bold": + font.weight = (int)FontWeight.Semibold; + break; + + case "Bold": + font.weight = (int)FontWeight.Bold; + break; + + case "Ultra-Bold": + case "Extra-Bold": + font.weight = (int)FontWeight.Ultrabold; + break; + + case "Heavy": + case "Black": + font.weight = (int)FontWeight.Heavy; + break; + + case "Ultra-Heavy": + case "Extra-Heavy": + case "Ultra-Black": + case "Extra-Black": + font.weight = (int)FontWeight.Ultraheavy; + break; + + case "Ultra-Condensed": + break; // todo + case "Extra-Condensed": + break; // todo + case "Condensed": + break; // todo + case "Semi-Condensed": + break; // todo + case "Semi-Expanded": + break; // todo + case "Expanded": + break; // todo + case "Extra-Expanded": + break; // todo + case "Ultra-Expanded": + break; // todo + case "Not-Rotated": + break; // todo + case "South": + break; // todo + case "Upside-Down": + break; // todo + case "North": + break; // todo + case "Rotated-Left": + break; // todo + case "East": + break; // todo + case "Rotated-Right": + break; // todo + case "West": + break; // todo + default: + return false; + } + return true; + } + + if (!matched(slug, decode)) + { + break; + } + + core = core.Substring(0, end); + end = core.LastIndexOfAny(new char[] { ' ', ',' }); + } + + // Family list, just want the first one + core = core.TrimEnd(' ', ','); + end = CharIndexOf(core, ','); + if (end >= 0) + core = core.Substring(0, end); + + decode.faceName = core; + + return core.Length > 0; + } + + // Tcl/Tk-style text like {Consolas} 12 bold roman + [SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", + Justification = "validate local variable ''(*decode)'', which was reassigned from parameter 'decode', before using it -- u wot m8!?")] + public static bool TryWishParse(string encoded, out LogFont decode) + { + decode = new LogFont(); + if (string.IsNullOrEmpty(encoded)) + return false; + + var core = encoded; + core = core.TrimEnd(); + + var curly = CharIndexOf(core, '}'); + if (curly > 0) + { + decode.faceName = core.Substring(1, curly - 1); + core = core.Substring(curly + 1); + } + else + { + var space = CharIndexOf(core, ' '); + if (space < 0) + return false; + decode.faceName = core.Substring(0, space); + core = core.Substring(space + 1); + } + + foreach (var token in core.Split(' ')) + { + if (token.Equals("italic", StringComparison.OrdinalIgnoreCase)) + decode.italic = 255; + if (token.Equals("bold", StringComparison.OrdinalIgnoreCase)) + decode.weight = (int)FontWeight.Bold; + if (Int32.TryParse(token, out var points)) + decode.height = points; + } + + return true; + } + + public override string ToString() + + { + // Pango names like Fira Code Bold Oblique 17 + // This is not quite sufficient + // NORMAL: the font is upright. + // OBLIQUE: the font is slanted, but in a roman style. + // ITALIC: the font is slanted in an italic style. + // + // AOB?? + var slant = string.Empty; + if (this.italic != 0) slant = "Italic "; + return FormattableString.Invariant($"{faceName}, {(FontWeight)weight} {slant}{height}"); + } + + public string ToWishString() + { + // Tk names like {{Consolas} 12 bold roman} + var w = "normal"; + if (weight > (int)FontWeight.Normal) w = "bold"; + var i = "italic"; + if (italic == 0) i = "roman"; + return FormattableString.Invariant($"{{{{{faceName}}} {height} {w} {i}}}"); + } + } + + [Serializable] + public enum FontWeight + { + DoNotCare = 0, + Thin = 100, + + [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", + Justification = "Seriously, u wot m8!?")] + Ultralight = 200, + + Light = 300, + + [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", + Justification = "Seriously, u wot m8!?")] + Semilight = 350, + + Book = 380, + Normal = 400, //aka Regular + Medium = 500, + + [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", + Justification = "Seriously, u wot m8!?")] + Semibold = 600, + + Bold = 700, + + [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", + Justification = "Seriously, u wot m8!?")] + Ultrabold = 800, + + Heavy = 900, + + [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", + Justification = "Seriously, u wot m8!?")] + Ultraheavy = 1000 + } + + [SuppressMessage("Gendarme.Rules.Design", "EnumsShouldUseInt32Rule", + Justification = "Represents a byte-valued field"), + SuppressMessage("Microsoft.Design", "CA1028:EnumStorageShouldBeInt32", + Justification = "Represents a byte-valued field"), + Serializable] + public enum FontCharSet : byte + { + Ansi = 0, + Default = 1, + Symbol = 2, + + [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", + Justification = "Seriously, u wot m8!?")] + ShiftJIS = 128, + + Hangeul = 129, + Hangul = 129, + GB2312 = 134, + ChineseBig5 = 136, + + [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", + Justification = "Seriously, u wot m8!?")] + Oem = 255, + + [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", + Justification = "Seriously, u wot m8!?")] + Johab = 130, + + Hebrew = 177, + Arabic = 178, + Greek = 161, + Turkish = 162, + Vietnamese = 163, + Thai = 222, + EastEurope = 238, + Russian = 204, + Mac = 77, + Baltic = 186, + } + + [SuppressMessage("Gendarme.Rules.Design", "EnumsShouldUseInt32Rule", + Justification = "Represents a byte-valued field"), + SuppressMessage("Microsoft.Design", "CA1028:EnumStorageShouldBeInt32", + Justification = "Represents a byte-valued field"), + Serializable] + public enum FontPrecision : byte + { + Default = 0, + String = 1, + Character = 2, + Stroke = 3, + TT = 4, + Device = 5, + Raster = 6, + TTOnly = 7, + Outlines = 8, + ScreenOutline = 9, + PSOnly = 10, + } + + [SuppressMessage("Gendarme.Rules.Design", "EnumsShouldUseInt32Rule", + Justification = "Represents a byte-valued field"), + SuppressMessage("Microsoft.Design", "CA1028:EnumStorageShouldBeInt32", + Justification = "Represents a byte-valued field"), + Serializable] + public enum FontClipPrecision : byte + { + Default = 0, + Character = 1, + Stroke = 2, + Mask = 0xf, + LHAngles = (1 << 4), + TTAlways = (2 << 4), + + [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", + Justification = "Seriously, u wot m8!?")] + DFADisable = (4 << 4), + + Embedded = (8 << 4), + } + + [SuppressMessage("Gendarme.Rules.Design", "EnumsShouldUseInt32Rule", + Justification = "Represents a byte-valued field"), + SuppressMessage("Microsoft.Design", "CA1028:EnumStorageShouldBeInt32", + Justification = "Represents a byte-valued field"), + Serializable] + public enum FontQuality : byte + { + Default = 0, + Draft = 1, + Proof = 2, + NonAntiAliased = 3, + AntiAliased = 4, + ClearType = 5, + ClearTypeNatural = 6, + } + + [Flags, + SuppressMessage("Gendarme.Rules.Design", "EnumsShouldUseInt32Rule", + Justification = "Represents a byte-valued field"), + SuppressMessage("Microsoft.Design", "CA1028:EnumStorageShouldBeInt32", + Justification = "Represents a byte-valued field"), + SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue", + Justification = "Seriously, u wot m8!?"), + Serializable] + public enum FontPitchAndFamilyOptions : byte + { + Default = 0, + Fixed = 1, + Variable = 2, + DoNotCare = (0 << 4), + Roman = (1 << 4), + Swiss = (2 << 4), + Modern = (3 << 4), + Script = (4 << 4), + Decorative = (5 << 4), + } +} \ No newline at end of file diff --git a/AltCover.GlobalTool/global-altcover.core.fsproj b/AltCover.GlobalTool/global-altcover.core.fsproj deleted file mode 100644 index 490c53895..000000000 --- a/AltCover.GlobalTool/global-altcover.core.fsproj +++ /dev/null @@ -1,49 +0,0 @@ - - - - altcover - True - Exe - netcoreapp2.1 - global-altcover - false - true - true - true - $(SolutionDir)AltCover/AltCover.ico - $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ - $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ - --keyfile:$(SolutionDir)Build\Infrastructure.snk - TRACE;GLOBALTOOL - - - - $(DefineConstants);DEBUG;CODE_ANALYSIS - 4 - true - - - - - - PreserveNewest - - - - - - - - all - runtime; build; native; contentfiles; analyzers - - - - - - - - - - - \ No newline at end of file diff --git a/AltCover.PowerShell/altcover.powershell.core.fsproj b/AltCover.PowerShell/AltCover.PowerShell.fsproj similarity index 60% rename from AltCover.PowerShell/altcover.powershell.core.fsproj rename to AltCover.PowerShell/AltCover.PowerShell.fsproj index 106dc44a5..d13bb92eb 100644 --- a/AltCover.PowerShell/altcover.powershell.core.fsproj +++ b/AltCover.PowerShell/AltCover.PowerShell.fsproj @@ -1,7 +1,8 @@  - netstandard2.0;net47 + netstandard2.0;net472 + netstandard2.0 AltCover.PowerShell AltCover.PowerShell false @@ -12,7 +13,6 @@ $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ $(OutputPath)\$(TargetFramework)\$(AssemblyName).xml - true @@ -47,47 +47,23 @@ All - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - + - - - - - - - - - \ No newline at end of file diff --git a/AltCover.PowerShell/XhtmlReports.fs b/AltCover.PowerShell/XhtmlReports.fs index 184ad790b..3b8674f17 100644 --- a/AltCover.PowerShell/XhtmlReports.fs +++ b/AltCover.PowerShell/XhtmlReports.fs @@ -47,6 +47,8 @@ type ConvertToBarChartCommand() = /// /// Create transformed document /// + [] override self.ProcessRecord() = let here = Directory.GetCurrentDirectory() try diff --git a/altcover.recorder.core.sln b/AltCover.Recorder.sln similarity index 76% rename from altcover.recorder.core.sln rename to AltCover.Recorder.sln index 615148b15..9048b5409 100644 --- a/altcover.recorder.core.sln +++ b/AltCover.Recorder.sln @@ -3,11 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29318.209 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "altcover.recorder.core", "AltCover.Recorder\altcover.recorder.core.fsproj", "{85B49E3C-F5B0-40F5-8DB5-1464BEC10E3A}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.Recorder", "AltCover.Recorder\AltCover.Recorder.fsproj", "{85B49E3C-F5B0-40F5-8DB5-1464BEC10E3A}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "altcover.recorder.tests.core", "Recorder.Tests\altcover.recorder.tests.core.fsproj", "{7F197884-A015-4D01-9543-AF0837A4BE33}" -EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "altcover.shadow.core", "AltCover.Shadow\altcover.shadow.core.fsproj", "{6B75CB41-5A32-4689-9659-6ACC264EA0EF}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.Recorder.Tests", "Recorder.Tests\AltCover.Recorder.Tests.fsproj", "{7F197884-A015-4D01-9543-AF0837A4BE33}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build Items", "Build Items", "{97367D43-64EF-48E1-B6B4-D951C783E6E1}" ProjectSection(SolutionItems) = preProject @@ -49,9 +47,6 @@ Global {7F197884-A015-4D01-9543-AF0837A4BE33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7F197884-A015-4D01-9543-AF0837A4BE33}.Debug|Any CPU.Build.0 = Debug|Any CPU {7F197884-A015-4D01-9543-AF0837A4BE33}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6B75CB41-5A32-4689-9659-6ACC264EA0EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6B75CB41-5A32-4689-9659-6ACC264EA0EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6B75CB41-5A32-4689-9659-6ACC264EA0EF}.Release|Any CPU.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/AltCover.Recorder/altcover.recorder.core.fsproj b/AltCover.Recorder/AltCover.Recorder.fsproj similarity index 67% rename from AltCover.Recorder/altcover.recorder.core.fsproj rename to AltCover.Recorder/AltCover.Recorder.fsproj index e5e6a1669..3fd4ceb0a 100644 --- a/AltCover.Recorder/altcover.recorder.core.fsproj +++ b/AltCover.Recorder/AltCover.Recorder.fsproj @@ -1,7 +1,7 @@  - netstandard2.0;net20 + net20 AltCover.Recorder AltCover.Recorder false @@ -10,20 +10,20 @@ true $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ - --keyfile:$(ProjectDir)..\Build\Infrastructure.snk --standalone $(StaticLink) --staticlink:ICSharpCode.SharpZipLib - NET2 - TRACE;$(ExtraDefines) + TRACE + --keyfile:$(ProjectDir)..\Build\Infrastructure.snk --standalone --staticlink:ICSharpCode.SharpZipLib - TRACE;DEBUG;CODE_ANALYSIS;$(ExtraDefines) + TRACE;DEBUG;CODE_ANALYSIS 4 52 true + --keyfile:$(ProjectDir)..\Build\Infrastructure.snk @@ -33,24 +33,26 @@ - - all runtime; build; native; contentfiles; analyzers - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + ..\ThirdParty\ziplib.net20\ICSharpCode.SharpZipLib.dll + + + + + \ No newline at end of file diff --git a/AltCover.Recorder/Base.fs b/AltCover.Recorder/Base.fs index 95b302b35..1885c9e4e 100644 --- a/AltCover.Recorder/Base.fs +++ b/AltCover.Recorder/Base.fs @@ -1,12 +1,8 @@ #if RUNNER namespace AltCover #else -#if AVALONIA -namespace AltCover -#else namespace AltCover.Recorder #endif -#endif open System open System.Collections.Generic @@ -20,10 +16,15 @@ type internal ReportFormat = | OpenCover = 1 | OpenCoverWithTracking = 2 -#if !AVALONIA - #if !RUNNER open ICSharpCode.SharpZipLib.Zip +[] +[] +[] +type internal ExcludeFromCodeCoverageAttribute() = + inherit Attribute() #endif type internal Sampling = @@ -32,7 +33,7 @@ type internal Sampling = // TODO isolate where #if RUNNER -[] #endif @@ -43,20 +44,12 @@ type internal Tag = | Both = 3 | Table = 4 -#if NET2 -[] -#else -[] -#endif +[] [] type internal Pair = { Time : int64; Call : int } -#if NET2 -[] -#else -[] -#endif +[] [] type internal Track = | Null @@ -64,12 +57,11 @@ type internal Track = | Call of int | Both of Pair | Table of Dictionary> + with + static member internal Entry = "\u2611" // BALLOT BOX WITH CHECK + static member internal Exit = "\u2612" // BALLOT BOX WITH X and [] -#if NET2 -[] -#else -[] -#endif + [] internal PointVisit = { mutable Count : int64 @@ -168,12 +160,23 @@ module internal Counter = then t1 else t2 + [] + let +#if !DEBUG + inline +#endif + internal selectNodes (node:XmlNode) name = + node.SelectNodes(name) + |> Seq.cast + // // // // Save sequence point hit counts to xml report file // // // // The coverage results to incorporate // // The coverage file to update as a stream - [] let internal updateReport (postProcess : XmlDocument -> unit) @@ -209,12 +212,7 @@ module internal Counter = let (m, i, m', s, v) = xmlByFormat format - #if NET2 - let - #else - use - #endif - moduleNodes = coverageDocument.SelectNodes(m) + let moduleNodes = selectNodes coverageDocument m moduleNodes |> Seq.cast |> Seq.map (fun el -> el.GetAttribute(i), el) @@ -225,23 +223,13 @@ module internal Counter = // affectedModule.Descendants(XName.Get("seqpnt")) // Get the methods, then flip their // contents before concatenating - #if NET2 - let - #else - use - #endif - nn = affectedModule.SelectNodes(m') + let nn = selectNodes affectedModule m' nn |> Seq.cast |> Seq.collect (fun (method : XmlElement) -> s |> Seq.collect (fun (name, flag) -> - #if NET2 - let - #else - use - #endif - nodes = method.SelectNodes(name) + let nodes = selectNodes method name nodes |> Seq.cast |> Seq.map (fun x -> (x, flag)) @@ -306,7 +294,7 @@ module internal Counter = ))) hitcount #endif - [] let doFlush postProcess pointProcess own counts format coverageFile outputFile = @@ -335,7 +323,7 @@ module internal Counter = 1L #endif - [] [ Stream try + ZipConstants.DefaultCodePage <- 65001 //UTF-8 as System.IO.Compression.ZipFile uses internally let zip = new ZipFile(container) try let entryName = report |> Path.GetFileName @@ -402,5 +391,4 @@ module internal Counter = | :? ZipException -> use reader = new MemoryStream() I.doFlush postProcess pointProcess own counts format reader target -#endif // !RUNNER -#endif // !AVALONIA \ No newline at end of file +#endif // !RUNNER \ No newline at end of file diff --git a/AltCover.Recorder/Recorder.fs b/AltCover.Recorder/Recorder.fs index a76a5a0fd..eaf5772c5 100644 --- a/AltCover.Recorder/Recorder.fs +++ b/AltCover.Recorder/Recorder.fs @@ -35,10 +35,10 @@ module Instance = /// This property's IL code is modified to store the user chosen override if applicable /// [] - [] - [] let @@ -68,7 +68,7 @@ module Instance = [] let Token = "AltCover" - [] let mutable internal supervision = @@ -133,11 +133,13 @@ module Instance = //let s = sprintf "push %d -> %A" x self.caller //System.Diagnostics.Debug.WriteLine(s) member self.Pop() = - self.caller <- + let (stack, head) = match self.caller with | [] - | [ 0 ] -> [ 0 ] - | _ :: xs -> xs + | [ 0 ] ->([ 0 ], None) + | h :: xs -> (xs, Some h) + self.caller <- stack + head //let s = sprintf "pop -> %A"self.caller //System.Diagnostics.Debug.WriteLine(s) @@ -223,10 +225,9 @@ module Instance = if counts.Count > 0 then clear() trace.OnVisit counts moduleId hitPointId context) - [] + [] let internal logException moduleId hitPointId context x = let text = [| sprintf "ModuleId = %A" moduleId @@ -356,19 +357,26 @@ module Instance = then I.payloadSelector I.isOpenCoverRunner else Null) moduleId hitPointId + // The moduleId strings are not the hash or guids normally found there let Push caller = I.push caller - let Pop() = I.pop() + if CoverageFormat = ReportFormat.OpenCoverWithTracking && + I.isOpenCoverRunner() + then I.visitSelection (Time DateTime.UtcNow.Ticks) Track.Entry caller + let Pop() = let caller = I.pop() + if CoverageFormat = ReportFormat.OpenCoverWithTracking && + I.isOpenCoverRunner() && + caller.IsSome + then I.visitSelection (Time DateTime.UtcNow.Ticks) Track.Exit caller.Value + // Used by the datacollector let FlushFinish() = I.flushAll ProcessExit -#if SHADOW [] [] -() -#endif \ No newline at end of file +() \ No newline at end of file diff --git a/AltCover.Recorder/Tracer.fs b/AltCover.Recorder/Tracer.fs index 6de84335b..6bbdb1c76 100644 --- a/AltCover.Recorder/Tracer.fs +++ b/AltCover.Recorder/Tracer.fs @@ -2,15 +2,11 @@ namespace AltCover.Recorder open System open System.Collections.Generic +open System.Diagnostics.CodeAnalysis open System.IO open System.IO.Compression -open System.Threading -#if NET2 -[] -#else -[] -#endif +[] type internal Close = | DomainUnload | ProcessExit @@ -38,12 +34,12 @@ type Tracer = | null -> false | _ -> this.Runner - [] - [] + [] member private this.MakeConnection f = let fs = File.OpenWrite f let s = new DeflateStream(fs, CompressionMode.Compress) @@ -65,7 +61,9 @@ type Tracer = try this.Stream.Flush() this.Formatter.Close() - with :? ObjectDisposedException -> () + with + | :? ObjectDisposedException + | :? NullReferenceException -> () member private this.PushContext context = match context with diff --git a/AltCover.Shadow/altcover.shadow.core.fsproj b/AltCover.Shadow/altcover.shadow.core.fsproj deleted file mode 100644 index 32c205475..000000000 --- a/AltCover.Shadow/altcover.shadow.core.fsproj +++ /dev/null @@ -1,54 +0,0 @@ - - - - AltCover.Shadow - netstandard2.0;net20 - AltCover.Recorder - false - $(ProjectDir)../ - $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ - $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ - NET2 - --keyfile:$(ProjectDir)..\Build\Infrastructure.snk - - - - TRACE;$(ExtraDefines) - - - - SHADOW;TRACE;DEBUG;CODE_ANALYSIS;$(ExtraDefines) - 4 - 52 - true - - - - - - - - - - - - - - - ResXFileCodeGenerator - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - \ No newline at end of file diff --git a/AltCover.Toolkit/altcover.toolkit.core.fsproj b/AltCover.Toolkit/AltCover.Toolkit.fsproj similarity index 78% rename from AltCover.Toolkit/altcover.toolkit.core.fsproj rename to AltCover.Toolkit/AltCover.Toolkit.fsproj index 304bb9372..d44013c2d 100644 --- a/AltCover.Toolkit/altcover.toolkit.core.fsproj +++ b/AltCover.Toolkit/AltCover.Toolkit.fsproj @@ -1,7 +1,8 @@  - netstandard2.0;net45 + netstandard2.0;net472 + netstandard2.0 AltCover.Toolkit AltCover.Toolkit false @@ -62,29 +63,19 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + - - - - - - - - - - + \ No newline at end of file diff --git a/AltCover.Toolkit/CoverageFormats.fs b/AltCover.Toolkit/CoverageFormats.fs index 9ec43374a..ce9d690c2 100644 --- a/AltCover.Toolkit/CoverageFormats.fs +++ b/AltCover.Toolkit/CoverageFormats.fs @@ -94,16 +94,21 @@ module CoverageFormats = let xpath = ".//SequencePoint[@sl='" + sl + "' and @sc='" + sc + "' and @el='" + el + "' and @ec='" + ec + "' and @fileid='" + uid + "']" - let sp = Extensions.XPathSelectElement(target, xpath) - let v = parse <| sp.Attribute(XName.Get "vc").Value - let visits = (max 0 v) + (max 0 vc) - sp.Attribute(XName.Get "vc").Value <- visits.ToString - (System.Globalization.CultureInfo.InvariantCulture))) - - rewrite.Descendants(XName.Get "Class") - |> Seq.filter (fun c -> c.Descendants(XName.Get "Method") |> Seq.isEmpty) - |> Seq.toList // reify before making changes - |> Seq.iter (fun c -> c.Remove()) + xpath + |> target.XPathSelectElement + |> Option.ofObj + |> Option.iter (fun sp -> + let v = parse <| sp.Attribute(XName.Get "vc").Value + let visits = (max 0 v) + (max 0 vc) + sp.Attribute(XName.Get "vc").Value <- visits.ToString + (System.Globalization.CultureInfo.InvariantCulture)))) + + // This is done at generation time now + // There is no filtering done here + // rewrite.Descendants(XName.Get "Class") + // |> Seq.filter (fun c -> c.Descendants(XName.Get "Method") |> Seq.isEmpty) + // |> Seq.toList // reify before making changes + // |> Seq.iter (fun c -> c.Remove()) let dec = rewrite.Declaration dec.Encoding <- "utf-8" @@ -130,7 +135,7 @@ module CoverageFormats = m.SetAttribute("class", c.Replace('/', '+')) let name = m.Attribute(XName.Get "name").Value let lead = name.Substring(name.LastIndexOf("::", StringComparison.Ordinal) + 2) - m.SetAttribute("name", lead.Substring(0, lead.IndexOf('(')))) + m.SetAttribute("name", lead.Substring(0, charIndexOf lead '('))) rewrite.Descendants(XName.Get "module") |> Seq.iter (fun m -> diff --git a/AltCover.Toolkit/OpenCover.fs b/AltCover.Toolkit/OpenCover.fs index 06239445a..45854b68f 100644 --- a/AltCover.Toolkit/OpenCover.fs +++ b/AltCover.Toolkit/OpenCover.fs @@ -173,12 +173,12 @@ module OpenCover = // Fix offset, sc, ec in let debugInfo = methodDef |> Option.map (fun md -> md.DebugInformation) - |> Option.filter (fun dbg -> dbg |> isNull |> not) + |> Option.filter (isNull >> not) m.Descendants(XName.Get "MethodPoint") |> Seq.tryHead |> Option.iter (fun x -> let a = x.Attributes() - |> Seq.filter (fun s -> s.Name.ToString().Contains("{") |> not) + |> Seq.filter (fun s -> charIndexOf (s.Name.ToString()) '{' < 0) |> Seq.cast |> Seq.toArray x.RemoveAttributes() diff --git a/AltCover.Toolkit/xsd/OpenCover.xsd b/AltCover.Toolkit/xsd/OpenCover.xsd index bd906ea5b..dd88e15e5 100644 --- a/AltCover.Toolkit/xsd/OpenCover.xsd +++ b/AltCover.Toolkit/xsd/OpenCover.xsd @@ -177,6 +177,9 @@ + + + diff --git a/AltCover.Toolkit/xsd/OpenCoverStrict.xsd b/AltCover.Toolkit/xsd/OpenCoverStrict.xsd index 940681162..adba2674d 100644 --- a/AltCover.Toolkit/xsd/OpenCoverStrict.xsd +++ b/AltCover.Toolkit/xsd/OpenCoverStrict.xsd @@ -130,7 +130,8 @@ - + + @@ -159,6 +160,9 @@ + + + diff --git a/AltCover.UICommon/AltCover.UICommon.fsproj b/AltCover.UICommon/AltCover.UICommon.fsproj index 0c67ce86d..712148d46 100644 --- a/AltCover.UICommon/AltCover.UICommon.fsproj +++ b/AltCover.UICommon/AltCover.UICommon.fsproj @@ -1,34 +1,31 @@  - netstandard2.0;net45 + netstandard2.0;net472 + netstandard2.0 AltCover.UICommon AltCover.UICommon false - false - AltCover.UICommon true true true - - $(AssemblySearchPaths);{GAC} - GUI $(ProjectDir)../ $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ + --keyfile:$(ProjectDir)..\Build\Infrastructure.snk + false TRACE;DEBUG;CODE_ANALYSIS;$(GlobalDefineConstants) - --tailcalls+ --keyfile:$(ProjectDir)..\Build\Infrastructure.snk 4 true + true TRACE;$(GlobalDefineConstants) - --keyfile:$(ProjectDir)..\Build\Infrastructure.snk @@ -75,8 +72,8 @@ - - + + @@ -93,7 +90,6 @@ - - + \ No newline at end of file diff --git a/AltCover.UICommon/Configuration.fs b/AltCover.UICommon/Configuration.fs index c07332f07..c4fe32939 100644 --- a/AltCover.UICommon/Configuration.fs +++ b/AltCover.UICommon/Configuration.fs @@ -3,6 +3,7 @@ #if NETSTANDARD2_0 open System +open System.Diagnostics.CodeAnalysis open System.IO open System.Reflection open System.Xml @@ -10,6 +11,11 @@ open System.Xml.Linq open System.Xml.Schema open System.Xml.XPath +[] +() + module Configuration = let private defaultDocument() = @@ -17,11 +23,13 @@ module Configuration = doc.Add(XElement(XName.Get "AltCover.Visualizer")) doc - [] + [] let private ensureFile() = let profileDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) let dir = Directory.CreateDirectory(Path.Combine(profileDir, ".altcover")) @@ -51,6 +59,8 @@ module Configuration = printfn "%A" x (file, defaultDocument()) + [] let SaveSchemaDir (s : string) = let file, config = ensureFile() @@ -85,11 +95,13 @@ module Configuration = let ReadFont() = let _, config = ensureFile() match config.XPathSelectElements("//Font") |> Seq.toList with - | [] -> "Monospace 10" + | [] -> "Monospace Normal 10" | x :: _ -> x.FirstNode.ToString() + [] let ReadSchemaDir() = - let file, config = ensureFile() + let _, config = ensureFile() let node = config.XPathSelectElements("AltCover.Visualizer") @@ -125,6 +137,8 @@ module Configuration = |> Seq.iter (fun path -> inject.Add(XElement(XName.Get "RecentlyOpened", path))) config.Save file + [] let ReadCoverageFiles sink = let _, config = ensureFile() @@ -134,6 +148,8 @@ module Configuration = |> Seq.toList |> sink + [] let SaveGeometry location size = let file, config = ensureFile() config.XPathSelectElements("//Geometry") diff --git a/AltCover.UICommon/CoverageFileTree.fs b/AltCover.UICommon/CoverageFileTree.fs index b2356a289..0c1bea61a 100644 --- a/AltCover.UICommon/CoverageFileTree.fs +++ b/AltCover.UICommon/CoverageFileTree.fs @@ -47,10 +47,10 @@ module CoverageFileTree = let fullname = x.Navigator.GetAttribute("fullname", String.Empty) let args = - if String.IsNullOrEmpty(fullname) || x.Name.IndexOf('(') > 0 then + if String.IsNullOrEmpty(fullname) || charIndexOf x.Name '(' > 0 then String.Empty else - let bracket = fullname.IndexOf('(') + let bracket = charIndexOf fullname '(' if bracket < 0 then String.Empty else fullname.Substring(bracket) let displayname = x.Name + args @@ -142,8 +142,11 @@ module CoverageFileTree = |> Set.ofSeq let modularize = + let contains (s:String) c = + s.IndexOf(c, StringComparison.Ordinal) >= 0 + classnames - |> Seq.filter (fun cn -> cn.Contains("+") || cn.Contains("/")) + |> Seq.filter (fun cn -> contains cn "+" || contains cn "/") |> Seq.map (fun cn -> cn.Split([| "+"; "/" |], StringSplitOptions.RemoveEmptyEntries).[0]) |> Seq.distinct @@ -206,6 +209,8 @@ module CoverageFileTree = methods |> Seq.iter (applyToModel model) + [] let DoSelected (environment:CoverageModelDisplay<'TModel, 'TRow, 'TIcon>) index = let current = environment.GetFileInfo index match CoverageFile.LoadCoverageFile current with diff --git a/altcover.visualizer.core.sln b/AltCover.Visualizer.FuncUI.sln similarity index 80% rename from altcover.visualizer.core.sln rename to AltCover.Visualizer.FuncUI.sln index 1dc654006..a5a9dec9d 100644 --- a/altcover.visualizer.core.sln +++ b/AltCover.Visualizer.FuncUI.sln @@ -3,13 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29324.140 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "altcover.avalonia", "AltCover.Avalonia\altcover.avalonia.fsproj", "{48032486-334E-4D3A-B6B6-4E3165A33FBD}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.Avalonia", "AltCover.Avalonia\AltCover.Avalonia.fsproj", "{48032486-334E-4D3A-B6B6-4E3165A33FBD}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.Avalonia.FuncUI", "AltCover.Avalonia.FuncUI\AltCover.Avalonia.FuncUI.fsproj", "{15C2C311-8D52-422C-9C79-F31D91228DE8}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "altcover.visualizer.core", "AltCover.Visualizer\altcover.visualizer.core.fsproj", "{218DBE5A-CC62-4649-97BC-BC47EC5B4D32}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.Visualizer", "AltCover.Visualizer\AltCover.Visualizer.fsproj", "{218DBE5A-CC62-4649-97BC-BC47EC5B4D32}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "altcover.visualizer.tests.core", "Tests.Visualizer\altcover.visualizer.tests.core.fsproj", "{93D327EE-100B-4837-A0CA-499ADEEADCD2}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.Visualizer.Tests", "Tests.Visualizer\AltCover.Visualizer.Tests.fsproj", "{93D327EE-100B-4837-A0CA-499ADEEADCD2}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build Items", "Build Items", "{97367D43-64EF-48E1-B6B4-D951C783E6E1}" ProjectSection(SolutionItems) = preProject @@ -40,7 +40,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build Items", "Build Items" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-cli", "Build\dotnet-cli.csproj", "{1EF1ED60-3D8B-446C-BC70-397009F794DA}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "AltCover.UICommon", "AltCover.UICommon\AltCover.UICommon.fsproj", "{D3383B16-5069-4E9C-9A86-920FA408E925}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.UICommon", "AltCover.UICommon\AltCover.UICommon.fsproj", "{D3383B16-5069-4E9C-9A86-920FA408E925}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AltCover.FontSupport", "AltCover.FontSupport\AltCover.FontSupport.csproj", "{660BB1CF-D777-4C8F-8145-84A6A497C91E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -69,6 +71,10 @@ Global {D3383B16-5069-4E9C-9A86-920FA408E925}.Debug|Any CPU.Build.0 = Debug|Any CPU {D3383B16-5069-4E9C-9A86-920FA408E925}.Release|Any CPU.ActiveCfg = Release|Any CPU {D3383B16-5069-4E9C-9A86-920FA408E925}.Release|Any CPU.Build.0 = Release|Any CPU + {660BB1CF-D777-4C8F-8145-84A6A497C91E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {660BB1CF-D777-4C8F-8145-84A6A497C91E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {660BB1CF-D777-4C8F-8145-84A6A497C91E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {660BB1CF-D777-4C8F-8145-84A6A497C91E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/AltCover.Visualizer.sln b/AltCover.Visualizer.sln new file mode 100644 index 000000000..8f8c6c391 --- /dev/null +++ b/AltCover.Visualizer.sln @@ -0,0 +1,82 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29324.140 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.Avalonia", "AltCover.Avalonia\AltCover.Avalonia.fsproj", "{48032486-334E-4D3A-B6B6-4E3165A33FBD}" +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.Visualizer", "AltCover.Visualizer\AltCover.Visualizer.fsproj", "{218DBE5A-CC62-4649-97BC-BC47EC5B4D32}" +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.Visualizer.Tests", "Tests.Visualizer\AltCover.Visualizer.Tests.fsproj", "{93D327EE-100B-4837-A0CA-499ADEEADCD2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build Items", "Build Items", "{97367D43-64EF-48E1-B6B4-D951C783E6E1}" + ProjectSection(SolutionItems) = preProject + .travis.yml = .travis.yml + Build\actions.fsx = Build\actions.fsx + Build\AddStrongName.fsx = Build\AddStrongName.fsx + Build\AltCover.nuspec = Build\AltCover.nuspec + nupkg\build\netstandard2.0\AltCover.props = nupkg\build\netstandard2.0\AltCover.props + nupkg\build\netstandard2.0\AltCover.targets = nupkg\build\netstandard2.0\AltCover.targets + Build\Apply-Xslt.ps1 = Build\Apply-Xslt.ps1 + appveyor.yml = appveyor.yml + Build\build.fsx = Build\build.fsx + Build\common-rules.xml = Build\common-rules.xml + .config\dotnet-tools.json = .config\dotnet-tools.json + Build\get-token.fsx = Build\get-token.fsx + global.json = global.json + Build\Infrastructure.snk = Build\Infrastructure.snk + Build\msbuildtest.proj = Build\msbuildtest.proj + Build\pester.ps1 = Build\pester.ps1 + Build\Pester.Tests.ps1 = Build\Pester.Tests.ps1 + Build\powershell.ps1 = Build\powershell.ps1 + Build\Recorder.snk = Build\Recorder.snk + ReleaseNotes.md = ReleaseNotes.md + Build\SelfTest.snk = Build\SelfTest.snk + Build\setup.fsx = Build\setup.fsx + Build\targets.fsx = Build\targets.fsx + EndProjectSection +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.UICommon", "AltCover.UICommon\AltCover.UICommon.fsproj", "{D3383B16-5069-4E9C-9A86-920FA408E925}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AltCover.FontSupport", "AltCover.FontSupport\AltCover.FontSupport.csproj", "{660BB1CF-D777-4C8F-8145-84A6A497C91E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NuGet", "Build\NuGet.csproj", "{7E26A341-127C-4A51-A12B-E8D03F0B9BE5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {48032486-334E-4D3A-B6B6-4E3165A33FBD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {48032486-334E-4D3A-B6B6-4E3165A33FBD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {48032486-334E-4D3A-B6B6-4E3165A33FBD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {48032486-334E-4D3A-B6B6-4E3165A33FBD}.Release|Any CPU.Build.0 = Release|Any CPU + {218DBE5A-CC62-4649-97BC-BC47EC5B4D32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {218DBE5A-CC62-4649-97BC-BC47EC5B4D32}.Debug|Any CPU.Build.0 = Debug|Any CPU + {218DBE5A-CC62-4649-97BC-BC47EC5B4D32}.Release|Any CPU.ActiveCfg = Release|Any CPU + {218DBE5A-CC62-4649-97BC-BC47EC5B4D32}.Release|Any CPU.Build.0 = Release|Any CPU + {93D327EE-100B-4837-A0CA-499ADEEADCD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {93D327EE-100B-4837-A0CA-499ADEEADCD2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {93D327EE-100B-4837-A0CA-499ADEEADCD2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D3383B16-5069-4E9C-9A86-920FA408E925}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D3383B16-5069-4E9C-9A86-920FA408E925}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D3383B16-5069-4E9C-9A86-920FA408E925}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D3383B16-5069-4E9C-9A86-920FA408E925}.Release|Any CPU.Build.0 = Release|Any CPU + {660BB1CF-D777-4C8F-8145-84A6A497C91E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {660BB1CF-D777-4C8F-8145-84A6A497C91E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {660BB1CF-D777-4C8F-8145-84A6A497C91E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {660BB1CF-D777-4C8F-8145-84A6A497C91E}.Release|Any CPU.Build.0 = Release|Any CPU + {7E26A341-127C-4A51-A12B-E8D03F0B9BE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E26A341-127C-4A51-A12B-E8D03F0B9BE5}.Release|Any CPU.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {7E26A341-127C-4A51-A12B-E8D03F0B9BE5} = {97367D43-64EF-48E1-B6B4-D951C783E6E1} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {6FB9BBB1-003A-4CBC-A45E-EC9A2CBEC828} + EndGlobalSection +EndGlobal diff --git a/AltCover.Visualizer/altcover.visualizer.core.fsproj b/AltCover.Visualizer/AltCover.Visualizer.fsproj similarity index 82% rename from AltCover.Visualizer/altcover.visualizer.core.fsproj rename to AltCover.Visualizer/AltCover.Visualizer.fsproj index a9e538913..4a13294db 100644 --- a/AltCover.Visualizer/altcover.visualizer.core.fsproj +++ b/AltCover.Visualizer/AltCover.Visualizer.fsproj @@ -2,11 +2,11 @@ WinExe - net45;netcoreapp2.1 + netcoreapp2.1;net472 AltCover.Visualizer AltCover.Visualizer false - x86 + x86 True altcover.visualizer AltCover.Visualizer @@ -14,8 +14,8 @@ true true - $(AssemblySearchPaths);{GAC} - + $(AssemblySearchPaths);{GAC} + GUI $(ProjectDir)../ $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ @@ -41,8 +41,8 @@ - - + + @@ -51,18 +51,18 @@ - + all runtime; build; native; contentfiles; analyzers - - + + ..\ThirdParty\Mono.Options.dll - + False @@ -82,7 +82,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -93,8 +93,7 @@ - - + diff --git a/altcover.core.sln b/AltCover.sln similarity index 74% rename from altcover.core.sln rename to AltCover.sln index fef4d0264..5530f0c52 100644 --- a/altcover.core.sln +++ b/AltCover.sln @@ -2,35 +2,33 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29209.62 MinimumVisualStudioVersion = 15.0.26124.0 -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "altcover.core", "AltCover\altcover.core.fsproj", "{26C01B27-9A3E-4460-BB43-5383C8E818FB}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.Engine", "AltCover.Engine\AltCover.Engine.fsproj", "{26C01B27-9A3E-4460-BB43-5383C8E818FB}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "altcover.powershell.core", "AltCover.PowerShell\altcover.powershell.core.fsproj", "{208B8925-5626-4E5D-A00B-6A993D850524}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.PowerShell", "AltCover.PowerShell\AltCover.PowerShell.fsproj", "{208B8925-5626-4E5D-A00B-6A993D850524}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "global-altcover.core", "AltCover.GlobalTool\global-altcover.core.fsproj", "{C6408656-6016-4F72-8897-63AA3FF4F3C0}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.Toolkit", "AltCover.Toolkit\AltCover.Toolkit.fsproj", "{62218EAC-A2E9-462B-9DF6-96C79629CE63}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "altcover.toolkit.core", "AltCover.Toolkit\altcover.toolkit.core.fsproj", "{62218EAC-A2E9-462B-9DF6-96C79629CE63}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AltCover.Cake", "AltCover.Cake\AltCover.Cake.csproj", "{9BBD2D49-C8BD-4213-A97C-F5F3191ACCBD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "altcover.cake.core", "AltCover.Cake\altcover.cake.core.csproj", "{9BBD2D49-C8BD-4213-A97C-F5F3191ACCBD}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.Fake", "AltCover.Fake\AltCover.Fake.fsproj", "{E59E33B2-F14C-498A-823C-5E573926EF30}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "altcover.fake.core", "AltCover.Fake\altcover.fake.core.fsproj", "{E59E33B2-F14C-498A-823C-5E573926EF30}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.Tests", "Tests\AltCover.Tests.fsproj", "{440A79BE-7038-44EA-B683-3ED8EFAEC39C}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "altcover.tests.core", "Tests\altcover.tests.core.fsproj", "{440A79BE-7038-44EA-B683-3ED8EFAEC39C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample1", "Sample1\Sample1.csproj", "{B2591DB3-481E-4A79-A849-AD6C6547BA7F}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "sample1.core", "Sample1\sample1.core.csproj", "{B2591DB3-481E-4A79-A849-AD6C6547BA7F}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Sample2", "Sample2\Sample2.fsproj", "{FB3B5250-DF9C-478B-BAD4-1D28D89D437A}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "sample2.core", "Sample2\sample2.core.fsproj", "{FB3B5250-DF9C-478B-BAD4-1D28D89D437A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample3", "Sample3\Sample3.csproj", "{D4FE2C23-980A-46B0-8ECC-DD27FDF11C28}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "sample3.core", "Sample3\sample3.core.csproj", "{D4FE2C23-980A-46B0-8ECC-DD27FDF11C28}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Sample4", "Sample4\Sample4.fsproj", "{358265A1-C7B3-48E8-9707-2F344ECAAE9F}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "sample4.core", "Sample4\sample4.core.fsproj", "{358265A1-C7B3-48E8-9707-2F344ECAAE9F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample5", "Sample5\Sample5.csproj", "{8510ED92-510C-42D7-9E4D-85810B4DE86B}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "sample5.core", "Sample5\sample5.core.csproj", "{8510ED92-510C-42D7-9E4D-85810B4DE86B}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Sample6", "Sample6\Sample6.fsproj", "{54F49C6B-AF20-42E4-95A0-386296CB9125}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "sample6.core", "Sample6\sample6.core.fsproj", "{54F49C6B-AF20-42E4-95A0-386296CB9125}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Sample7", "Sample7\Sample7.fsproj", "{8E0DC7BC-C322-466C-8409-B69A12062AB6}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "sample7.core", "Sample7\sample7.core.fsproj", "{8E0DC7BC-C322-466C-8409-B69A12062AB6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "sample10.core", "Sample10\sample10.core.csproj", "{6D52273D-097D-4C30-82D1-5F276FAB4187}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample10", "Sample10\Sample10.csproj", "{6D52273D-097D-4C30-82D1-5F276FAB4187}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{2837CE07-B91F-4B8A-89B5-E7BE39A8F340}" EndProject @@ -46,6 +44,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build Items", "Build Items" appveyor.yml = appveyor.yml Build\build.fsx = Build\build.fsx Build\common-rules.xml = Build\common-rules.xml + Build\coverletArgs.runsettings = Build\coverletArgs.runsettings + Build\coverletArgs.sample.runsettings = Build\coverletArgs.sample.runsettings .config\dotnet-tools.json = .config\dotnet-tools.json Build\get-token.fsx = Build\get-token.fsx global.json = global.json @@ -53,7 +53,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build Items", "Build Items" Build\msbuildtest.proj = Build\msbuildtest.proj Build\pester.ps1 = Build\pester.ps1 Build\Pester.Tests.ps1 = Build\Pester.Tests.ps1 - Build\powershell.ps1 = Build\powershell.ps1 Build\prepareDocumentation.ps1 = Build\prepareDocumentation.ps1 Build\Recorder.snk = Build\Recorder.snk ReleaseNotes.md = ReleaseNotes.md @@ -68,33 +67,35 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documents", "Documents", "{ ReleaseNotes.md = ReleaseNotes.md EndProjectSection EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "altcover.fake.dotnet.testing.altcover.core", "AltCover.Fake.DotNet.Testing.AltCover\altcover.fake.dotnet.testing.altcover.core.fsproj", "{D431AAE4-AD1F-4531-BFBD-A202868B328D}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.Fake.DotNet.Testing.AltCover", "AltCover.Fake.DotNet.Testing.AltCover\AltCover.Fake.DotNet.Testing.AltCover.fsproj", "{D431AAE4-AD1F-4531-BFBD-A202868B328D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample11", "Sample11\Sample11.csproj", "{B206AF1F-A0F3-45F2-8751-383728CCED02}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "sample11.core", "Sample11\sample11.core.csproj", "{B206AF1F-A0F3-45F2-8751-383728CCED02}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample12", "Sample12\Sample12.csproj", "{8CCA1249-0561-43D5-9E60-AB284477B48F}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "sample12.core", "Sample12\sample12.core.csproj", "{8CCA1249-0561-43D5-9E60-AB284477B48F}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Sample13", "Sample13\Sample13.fsproj", "{D588F8AA-50D3-455D-A070-04EAA48A2E93}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "sample13.core", "Sample13\sample13.core.fsproj", "{D588F8AA-50D3-455D-A070-04EAA48A2E93}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AltCover.DataCollector", "AltCover.DataCollector\AltCover.DataCollector.csproj", "{4AB7CAB3-2463-4289-9E34-B783070477AD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "altcover.datacollector.core", "altcover.datacollector\altcover.datacollector.core.csproj", "{4AB7CAB3-2463-4289-9E34-B783070477AD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample16", "Sample16\Sample16.csproj", "{792FD866-D256-4695-8C76-C14C49BB0207}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "sample16.core", "Sample16\sample16.core.csproj", "{792FD866-D256-4695-8C76-C14C49BB0207}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Sample17", "Sample17\Sample17.fsproj", "{5DB22786-389D-4193-AFDE-144FD59CF586}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "sample17.core", "Sample17\sample17.core.fsproj", "{5DB22786-389D-4193-AFDE-144FD59CF586}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NuGet", "Build\NuGet.csproj", "{AEFA8F43-5D00-4068-BC15-978041B17A00}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-cli", "Build\dotnet-cli.csproj", "{AEFA8F43-5D00-4068-BC15-978041B17A00}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.ValidateGendarmeEmulation", "ValidateGendarmeEmulation\AltCover.ValidateGendarmeEmulation.fsproj", "{3D639272-2787-47AA-9B83-1FE1686323D1}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "altcover.weaknametests.core", "WeakNameTests\altcover.weaknametests.core.fsproj", "{3D639272-2787-47AA-9B83-1FE1686323D1}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Sample18", "Sample18\Sample18.fsproj", "{8F488261-3FF5-4983-AE1E-17B151507552}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "altcover.netcoreapp.core", "AltCover.NetCoreApp\altcover.netcoreapp.core.fsproj", "{778014AA-1077-4C6F-B177-BEAAA2030B0B}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.Api.Tests", "AltCover.Api.Tests\AltCover.Api.Tests.fsproj", "{40FF8254-82F7-4875-A731-EB746B12F83B}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "sample18.core", "Sample18\sample18.core.fsproj", "{8F488261-3FF5-4983-AE1E-17B151507552}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover.DotNet", "AltCover.DotNet\AltCover.DotNet.fsproj", "{9CD47BC5-6C03-4BE5-ACD8-FC8F06942140}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "altcover.api.tests.core", "AltCover.Api.Tests\altcover.api.tests.core.fsproj", "{40FF8254-82F7-4875-A731-EB746B12F83B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample21", "Sample21\Sample21.csproj", "{978C8A9B-1470-4FD0-BA83-268B21599FFB}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "altcover.dotnet.core", "AltCover.DotNet\altcover.dotnet.core.fsproj", "{9CD47BC5-6C03-4BE5-ACD8-FC8F06942140}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "AltCover", "AltCover\AltCover.fsproj", "{4DB2D351-2F9A-411A-B12E-46AB2EA9AFF1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample21", "Sample21\Sample21.csproj", "{978C8A9B-1470-4FD0-BA83-268B21599FFB}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample23", "Sample23\Sample23.csproj", "{C5548F5A-AED5-45C5-8E27-71E38647B87D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -116,12 +117,6 @@ Global {208B8925-5626-4E5D-A00B-6A993D850524}.Release|Any CPU.ActiveCfg = Release|Any CPU {208B8925-5626-4E5D-A00B-6A993D850524}.Release|Any CPU.Build.0 = Release|Any CPU {208B8925-5626-4E5D-A00B-6A993D850524}.Release|x86.ActiveCfg = Release|Any CPU - {C6408656-6016-4F72-8897-63AA3FF4F3C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C6408656-6016-4F72-8897-63AA3FF4F3C0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C6408656-6016-4F72-8897-63AA3FF4F3C0}.Debug|x86.ActiveCfg = Debug|Any CPU - {C6408656-6016-4F72-8897-63AA3FF4F3C0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C6408656-6016-4F72-8897-63AA3FF4F3C0}.Release|Any CPU.Build.0 = Release|Any CPU - {C6408656-6016-4F72-8897-63AA3FF4F3C0}.Release|x86.ActiveCfg = Release|Any CPU {62218EAC-A2E9-462B-9DF6-96C79629CE63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {62218EAC-A2E9-462B-9DF6-96C79629CE63}.Debug|Any CPU.Build.0 = Debug|Any CPU {62218EAC-A2E9-462B-9DF6-96C79629CE63}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -232,12 +227,6 @@ Global {3D639272-2787-47AA-9B83-1FE1686323D1}.Debug|x86.ActiveCfg = Debug|Any CPU {3D639272-2787-47AA-9B83-1FE1686323D1}.Release|Any CPU.ActiveCfg = Release|Any CPU {3D639272-2787-47AA-9B83-1FE1686323D1}.Release|x86.ActiveCfg = Release|Any CPU - {778014AA-1077-4C6F-B177-BEAAA2030B0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {778014AA-1077-4C6F-B177-BEAAA2030B0B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {778014AA-1077-4C6F-B177-BEAAA2030B0B}.Debug|x86.ActiveCfg = Debug|Any CPU - {778014AA-1077-4C6F-B177-BEAAA2030B0B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {778014AA-1077-4C6F-B177-BEAAA2030B0B}.Release|Any CPU.Build.0 = Release|Any CPU - {778014AA-1077-4C6F-B177-BEAAA2030B0B}.Release|x86.ActiveCfg = Release|Any CPU {8F488261-3FF5-4983-AE1E-17B151507552}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8F488261-3FF5-4983-AE1E-17B151507552}.Debug|Any CPU.Build.0 = Debug|Any CPU {8F488261-3FF5-4983-AE1E-17B151507552}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -257,11 +246,23 @@ Global {978C8A9B-1470-4FD0-BA83-268B21599FFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {978C8A9B-1470-4FD0-BA83-268B21599FFB}.Debug|Any CPU.Build.0 = Debug|Any CPU {978C8A9B-1470-4FD0-BA83-268B21599FFB}.Debug|x86.ActiveCfg = Debug|Any CPU - {978C8A9B-1470-4FD0-BA83-268B21599FFB}.Debug|x86.Build.0 = Debug|Any CPU {978C8A9B-1470-4FD0-BA83-268B21599FFB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {978C8A9B-1470-4FD0-BA83-268B21599FFB}.Release|Any CPU.Build.0 = Release|Any CPU {978C8A9B-1470-4FD0-BA83-268B21599FFB}.Release|x86.ActiveCfg = Release|Any CPU {978C8A9B-1470-4FD0-BA83-268B21599FFB}.Release|x86.Build.0 = Release|Any CPU + {4DB2D351-2F9A-411A-B12E-46AB2EA9AFF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4DB2D351-2F9A-411A-B12E-46AB2EA9AFF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4DB2D351-2F9A-411A-B12E-46AB2EA9AFF1}.Debug|x86.ActiveCfg = Debug|Any CPU + {4DB2D351-2F9A-411A-B12E-46AB2EA9AFF1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4DB2D351-2F9A-411A-B12E-46AB2EA9AFF1}.Release|Any CPU.Build.0 = Release|Any CPU + {4DB2D351-2F9A-411A-B12E-46AB2EA9AFF1}.Release|x86.ActiveCfg = Release|Any CPU + {4DB2D351-2F9A-411A-B12E-46AB2EA9AFF1}.Release|x86.Build.0 = Release|Any CPU + {C5548F5A-AED5-45C5-8E27-71E38647B87D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C5548F5A-AED5-45C5-8E27-71E38647B87D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C5548F5A-AED5-45C5-8E27-71E38647B87D}.Debug|x86.ActiveCfg = Debug|Any CPU + {C5548F5A-AED5-45C5-8E27-71E38647B87D}.Debug|x86.Build.0 = Debug|Any CPU + {C5548F5A-AED5-45C5-8E27-71E38647B87D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C5548F5A-AED5-45C5-8E27-71E38647B87D}.Release|x86.ActiveCfg = Release|Any CPU + {C5548F5A-AED5-45C5-8E27-71E38647B87D}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -283,6 +284,7 @@ Global {AEFA8F43-5D00-4068-BC15-978041B17A00} = {97367D43-64EF-48E1-B6B4-D951C783E6E1} {8F488261-3FF5-4983-AE1E-17B151507552} = {2837CE07-B91F-4B8A-89B5-E7BE39A8F340} {978C8A9B-1470-4FD0-BA83-268B21599FFB} = {2837CE07-B91F-4B8A-89B5-E7BE39A8F340} + {C5548F5A-AED5-45C5-8E27-71E38647B87D} = {2837CE07-B91F-4B8A-89B5-E7BE39A8F340} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C31111CF-68A2-403F-9B06-9625FCBD48E3} diff --git a/AltCover/AltCover.fsproj b/AltCover/AltCover.fsproj new file mode 100644 index 000000000..af0397788 --- /dev/null +++ b/AltCover/AltCover.fsproj @@ -0,0 +1,70 @@ + + + + Exe + netcoreapp2.1;netcoreapp2.0;net472 + altcover + True + AltCover + AltCover + false + true + true + true + AltCover.ico + $(ProjectDir)../ + + $(AssemblySearchPaths);{GAC} + $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ + $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ + $(OutputPath)\$(TargetFramework)\$(AssemblyName).xml + --keyfile:$(SolutionDir)Build\Infrastructure.snk + + + + TRACE;DEBUG;CODE_ANALYSIS + TRACE;DEBUG;CODE_ANALYSIS;GLOBALTOOL + 4 + true + + 52 + true + + + TRACE + TRACE;GLOBALTOOL + + + + + PreserveNewest + + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + \ No newline at end of file diff --git a/AltCover.GlobalTool/DotnetToolSettings.xml b/AltCover/DotnetToolSettings.xml similarity index 58% rename from AltCover.GlobalTool/DotnetToolSettings.xml rename to AltCover/DotnetToolSettings.xml index f67c34170..f520e938a 100644 --- a/AltCover.GlobalTool/DotnetToolSettings.xml +++ b/AltCover/DotnetToolSettings.xml @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/AltCover/EntryPoint.fs b/AltCover/EntryPoint.fs deleted file mode 100644 index a7fd3e3c9..000000000 --- a/AltCover/EntryPoint.fs +++ /dev/null @@ -1,18 +0,0 @@ -namespace AltCover - -module internal EntryPoint = - let internal toConsole() = - Output.error <- CommandLine.writeErr - Output.usage <- CommandLine.usageBase - Output.echo <- CommandLine.writeErr - Output.info <- CommandLine.writeOut - Output.warn <- CommandLine.writeOut - - [] - [] - let private main arguments = - toConsole() - AltCover.Main.effectiveMain arguments \ No newline at end of file diff --git a/AltCover.NetCoreApp/Program.fs b/AltCover/Program.fs similarity index 68% rename from AltCover.NetCoreApp/Program.fs rename to AltCover/Program.fs index 43594c9cc..4bcea1ffb 100644 --- a/AltCover.NetCoreApp/Program.fs +++ b/AltCover/Program.fs @@ -12,20 +12,18 @@ open AltCover.Main [] () -module DotNetAltCover = - let internal toConsole() = - Output.error <- CommandLine.writeErr - Output.usage <- CommandLine.usageBase - Output.echo <- CommandLine.writeErr - Output.info <- CommandLine.writeOut +#if DEBUG +[] +type internal Marker = + DummyValueForReflectiveAccess = 0 +#endif +module EntryPoint = [] - [] let private main arguments = - toConsole() + CommandLine.toConsole() let result = #if GLOBALTOOL let first = diff --git a/Build/AddStrongName.fsx b/Build/AddStrongName.fsx index b51e4382b..f6f62d5e6 100644 --- a/Build/AddStrongName.fsx +++ b/Build/AddStrongName.fsx @@ -45,7 +45,7 @@ let rest = // The meat of the script starts here --------------------------------- // load files let stream = new FileStream(!keyName, FileMode.Open, FileAccess.Read) -let key = new StrongNameKeyPair(stream) +let key = StrongNameKeyPair(stream) let definition = AssemblyDefinition.ReadAssembly(!assemblyName) // Do what CorFlags /32BIT+ /Force does if required diff --git a/Build/AltCover.Fake.DotNet.Testing.AltCover.md b/Build/AltCover.Fake.DotNet.Testing.AltCover.md new file mode 100644 index 000000000..2ffe69f4d --- /dev/null +++ b/Build/AltCover.Fake.DotNet.Testing.AltCover.md @@ -0,0 +1,46 @@ +# The AltCover.Fake package -- AltCover.Fake.DotNet.Testing.dll + +This provides helpers to drive command-line AltCover (or `dotnet test` with AltCover) from any of the other packages. In these scenarios, AltCover operates outside the Fake build process. +The slightly awkward `AltCoverFake` namespace was chosen to allow co-existence with the previous in-process API's `AltCover.Fake` names. + +Requires Fake 5.18 or later + +## Composing the AltCover command line + +### Basic elements + +Start with one of these + +* [`module Abstract`](Abstract-fsapidoc) -- This holds the weakly ("stringly") typed equivalent of the command line options in a C# friendly manner as interfaces with the values expressed as read-only properties. +* [`module Primitive`](Primitive-fsapidoc) -- This holds the weakly ("stringly") typed equivalent of the command line options. +* [`module TypeSafe`](TypeSafe-fsapidoc) -- This holds the strongly-typed equivalent of the command line options. + +### The common expression of the command line elements + +Make one of these + +* [`module AltCover`](AltCover-fsapidoc) -- This represents the AltCover command line options and its validation. + +### Use with `dotnet test` + +* [`module DotNet`](DotNet-fsapidoc) -- This represents the further `dotnet test` command line options. +* [`module Fake`](Fake-fsapidoc) -- This is the Fake toolkit integration via extension methods for type `Fake.DotNet.DotNet.TestOptions`. + +### Use as a command + +* [`module AltCoverCommand`](AltCoverCommand-fsapidoc) -- This represents the various `AltCover` operations available, and their execution from a Fake script. + +### Example +(based on [the AltCover build script here](https://github.com/SteveGilham/altcover/blob/master/Build/targets.fsx#L984-L1004)) + +``` +!!./docs/AltCover.Fake.DotNet.Testing.AltCover/BuildSample_1.fsx +``` + +### Example +(based on [the AltCover build script here](https://github.com/SteveGilham/altcover/blob/master/Build/targets.fsx#L3578-L3591)) + +``` +!!./docs/AltCover.Fake.DotNet.Testing.AltCover/BuildSample_2.fsx + +``` diff --git a/Build/Fake-and-Cake-integration.md b/Build/Fake-and-Cake-integration.md new file mode 100644 index 000000000..3cc451021 --- /dev/null +++ b/Build/Fake-and-Cake-integration.md @@ -0,0 +1,22 @@ +# F# Fake and Cake integration v7.x + +APIs for use with build scripting tools are provided in the `AltCover.Cake.dll` and `AltCover.Fake.dll` assemblies, which are present in the `AltCover.Api` nuget package + +* [Fake integration](#fake-integration) +* [Cake integration](#cake-integration) + +# Fake integration +Found in `AltCover.Fake.dll` +Detailed API documentation is [presented here](AltCover.Fake/Fake-fsapidoc). + +### Example +Driving `dotnet test` in a Fake script (based on [the AltCover build script here](https://github.com/SteveGilham/altcover/blob/master/Build/targets.fsx#L3425-L3454)) +``` +!!./docs/BuildSample_1.fsx + +``` + +# Cake integration + +Found in `AltCover.Cake.dll` +Detailed API documentation is [presented here](AltCover.Cake/AltCover.Cake-apidoc). \ No newline at end of file diff --git a/Build/dotnet-cli.csproj b/Build/NuGet.csproj similarity index 58% rename from Build/dotnet-cli.csproj rename to Build/NuGet.csproj index 453ee5030..77407467a 100644 --- a/Build/dotnet-cli.csproj +++ b/Build/NuGet.csproj @@ -1,7 +1,7 @@  - net47 + net472 @@ -9,16 +9,19 @@ - + + all runtime; build; native; contentfiles; analyzers + - + - + + \ No newline at end of file diff --git a/Build/Pester.Tests.ps1 b/Build/Pester.Tests.ps1 index 2471303d1..0e3bf9e16 100644 --- a/Build/Pester.Tests.ps1 +++ b/Build/Pester.Tests.ps1 @@ -68,7 +68,7 @@ Describe "Invoke-Altcover" { #"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0" $w | Should -Be "A total of 0 visits recorded" - $summary = Invoke-AltCover -InformationAction Continue -Runner -RecorderDirectory $o -WorkingDirectory "./Sample2" -Executable "dotnet" -CommandLine @("test", "--no-build", "--configuration", "Debug", "--framework", "netcoreapp2.1", "sample2.core.fsproj") + $summary = Invoke-AltCover -InformationAction Continue -Runner -RecorderDirectory $o -WorkingDirectory "./Sample2" -Executable "dotnet" -CommandLine @("test", "--no-build", "--configuration", "Debug", "--framework", "netcoreapp2.1", "Sample2.fsproj") $xm2 = [xml](Get-Content $x) Remove-Item -Force -Recurse $o $result = [string]::Join(" ", $xm2.coverage.module.method.seqpnt.visitcount) diff --git a/Build/actions.fsx b/Build/actions.fsx index ae25603ab..446826c4b 100644 --- a/Build/actions.fsx +++ b/Build/actions.fsx @@ -12,6 +12,7 @@ open Fake.IO.Globbing.Operators open HeyRed.MarkdownSharp open NUnit.Framework +open Swensen.Unquote open YamlDotNet.RepresentationModel open AltCoverFake.DotNet.Testing @@ -68,27 +69,14 @@ open System.Runtime.CompilerServices #if DEBUG [] -#if NETSTANDARD2_0 -[] -[] -#else -#if NETCOREAPP2_0 -[] -[] -[] -#else [] [] [] [] [] [] -[] -[] [] [] -#endif -#endif #else [] #endif @@ -452,7 +440,10 @@ a:hover {color: #ecc;} let coverageDocument = XDocument.Load(XmlReader.Create(coverageFile)) Check4Content coverageDocument - let Check4Visits(coverageDocument : XDocument) = + let ticksNow () = let now = System.DateTime.UtcNow + now.Ticks + + let Check4Visits before (coverageDocument : XDocument) = let recorded = coverageDocument.Descendants(XName.Get("SequencePoint")) |> Seq.map (fun x -> x.Attribute(XName.Get("vc")).Value) @@ -472,12 +463,24 @@ a:hover {color: #ecc;} sp.Descendants(XName.Get("Time")) |> Seq.sumBy (fun x -> x.Attribute(XName.Get("vc")).Value |> Int32.Parse) Assert.That(vc, Is.EqualTo vx, sp.Value)) - let tracked = """ - - + let trackedFormat = """ + + """ coverageDocument.Descendants(XName.Get("TrackedMethods")) |> Seq.iter (fun x -> + // entry and exit times need to be tested + let times = x.Descendants(XName.Get("TrackedMethod")) + |> Seq.map(fun m -> (m.Attribute(XName.Get("uid")).Value, m.Attribute(XName.Get("entry")).Value, m.Attribute(XName.Get("exit")).Value)) + |> Seq.sortBy(fun (u,_ , _) -> Int32.Parse u) + |> Seq.collect(fun (_, entry, exit) -> let first = entry.TrimEnd('L') |> Int64.Parse + let second = exit.TrimEnd('L') |> Int64.Parse + test <@ before <= first @> + test <@ first <= second @> + test <@ second <= ticksNow() @> + [entry; exit]) + |> Seq.toArray + let tracked = String.Format(trackedFormat, times.[0], times.[1], times.[2], times.[3]) Assert.That (x.ToString().Replace("\r\n", "\n"), Is.EqualTo <| tracked.Replace("\r\n", "\n"))) @@ -503,17 +506,17 @@ a:hover {color: #ecc;} "" ]) printfn "TrackRefs OK" - let CheckSample4Visits x = + let CheckSample4Visits before x = do use coverageFile = new FileStream(x, FileMode.Open, FileAccess.Read, FileShare.None, 4096, FileOptions.SequentialScan) let coverageDocument = XDocument.Load(XmlReader.Create(coverageFile)) - Check4Visits coverageDocument + Check4Visits before coverageDocument - let CheckSample4 x = + let CheckSample4 before x = do use coverageFile = new FileStream(x, FileMode.Open, FileAccess.Read, FileShare.None, 4096, FileOptions.SequentialScan) let coverageDocument = XDocument.Load(XmlReader.Create(coverageFile)) Check4Content coverageDocument - Check4Visits coverageDocument \ No newline at end of file + Check4Visits before coverageDocument \ No newline at end of file diff --git a/Build/build.fsx.lock b/Build/build.fsx.lock index aaa4b1923..72083d242 100644 --- a/Build/build.fsx.lock +++ b/Build/build.fsx.lock @@ -12,159 +12,162 @@ NUGET BlackFox.VsWhere (1.1) FSharp.Core (>= 4.2.3) Microsoft.Win32.Registry (>= 4.7) - Dotnet.ProjInfo (0.42.1) + Dotnet.ProjInfo (0.44) FSharp.Core (>= 4.6.2) Microsoft.NETFramework.ReferenceAssemblies (>= 1.0) System.ValueTuple (>= 4.4) - Dotnet.ProjInfo.Workspace (0.42.1) - Dotnet.ProjInfo (>= 0.42.1) + Dotnet.ProjInfo.Workspace (0.44) + Dotnet.ProjInfo (>= 0.44) FSharp.Core (>= 4.6.2) Microsoft.NETFramework.ReferenceAssemblies (>= 1.0) Sln (>= 0.3) - Dotnet.ProjInfo.Workspace.FCS (0.42.1) - Dotnet.ProjInfo.Workspace (>= 0.42.1) - FSharp.Compiler.Service (>= 36.0.3) + Dotnet.ProjInfo.Workspace.FCS (0.44) + Dotnet.ProjInfo.Workspace (>= 0.44) + FSharp.Compiler.Service (>= 37.0) FSharp.Core (>= 4.6.2) Microsoft.NETFramework.ReferenceAssemblies (>= 1.0) - Fake.Core.CommandLineParsing (5.20.1) + Fake.Core.CommandLineParsing (5.20.3) FParsec (>= 1.1.1) - FSharp.Core (>= 4.7.1) - Fake.Core.Context (5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Core.Environment (5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Core.FakeVar (5.20.1) - Fake.Core.Context (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Core.Process (5.20.1) - Fake.Core.Environment (>= 5.20.1) - Fake.Core.FakeVar (>= 5.20.1) - Fake.Core.String (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - Fake.IO.FileSystem (>= 5.20.1) - FSharp.Core (>= 4.7.1) - System.Collections.Immutable (>= 1.7) - Fake.Core.SemVer (5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Core.String (5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Core.Target (5.20.1) - Fake.Core.CommandLineParsing (>= 5.20.1) - Fake.Core.Context (>= 5.20.1) - Fake.Core.Environment (>= 5.20.1) - Fake.Core.FakeVar (>= 5.20.1) - Fake.Core.Process (>= 5.20.1) - Fake.Core.String (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - FSharp.Control.Reactive (>= 4.2) - FSharp.Core (>= 4.7.1) - Fake.Core.Tasks (5.20.1) - Fake.Core.Trace (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Core.Trace (5.20.1) - Fake.Core.Environment (>= 5.20.1) - Fake.Core.FakeVar (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Core.Xml (5.20.1) - Fake.Core.String (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.DotNet.AssemblyInfoFile (5.20.1) - Fake.Core.Environment (>= 5.20.1) - Fake.Core.String (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - Fake.IO.FileSystem (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.DotNet.Cli (5.20.1) - Fake.Core.Environment (>= 5.20.1) - Fake.Core.Process (>= 5.20.1) - Fake.Core.String (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - Fake.DotNet.MSBuild (>= 5.20.1) - Fake.DotNet.NuGet (>= 5.20.1) - Fake.IO.FileSystem (>= 5.20.1) - FSharp.Core (>= 4.7.1) + FSharp.Core (>= 4.7.2) + Fake.Core.Context (5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Core.Environment (5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Core.FakeVar (5.20.3) + Fake.Core.Context (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Core.Process (5.20.3) + Fake.Core.Environment (>= 5.20.3) + Fake.Core.FakeVar (>= 5.20.3) + Fake.Core.String (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + Fake.IO.FileSystem (>= 5.20.3) + FSharp.Core (>= 4.7.2) + System.Collections.Immutable (>= 1.7.1) + Fake.Core.SemVer (5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Core.String (5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Core.Target (5.20.3) + Fake.Core.CommandLineParsing (>= 5.20.3) + Fake.Core.Context (>= 5.20.3) + Fake.Core.Environment (>= 5.20.3) + Fake.Core.FakeVar (>= 5.20.3) + Fake.Core.Process (>= 5.20.3) + Fake.Core.String (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + FSharp.Control.Reactive (>= 4.4.2) + FSharp.Core (>= 4.7.2) + Fake.Core.Tasks (5.20.3) + Fake.Core.Trace (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Core.Trace (5.20.3) + Fake.Core.Environment (>= 5.20.3) + Fake.Core.FakeVar (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Core.Xml (5.20.3) + Fake.Core.String (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.DotNet.AssemblyInfoFile (5.20.3) + Fake.Core.Environment (>= 5.20.3) + Fake.Core.String (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + Fake.IO.FileSystem (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.DotNet.Cli (5.20.3) + Fake.Core.Environment (>= 5.20.3) + Fake.Core.Process (>= 5.20.3) + Fake.Core.String (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + Fake.DotNet.MSBuild (>= 5.20.3) + Fake.DotNet.NuGet (>= 5.20.3) + Fake.IO.FileSystem (>= 5.20.3) + FSharp.Core (>= 4.7.2) Mono.Posix.NETStandard (>= 1.0) Newtonsoft.Json (>= 12.0.3) - Fake.DotNet.FxCop (5.20.1) - BlackFox.VsWhere (>= 1.0) - Fake.Core.Process (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - Fake.Core.Xml (>= 5.20.1) - Fake.IO.FileSystem (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.DotNet.MSBuild (5.20.1) - BlackFox.VsWhere (>= 1.0) - Fake.Core.Environment (>= 5.20.1) - Fake.Core.Process (>= 5.20.1) - Fake.Core.String (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - Fake.IO.FileSystem (>= 5.20.1) - FSharp.Core (>= 4.7.1) - MSBuild.StructuredLogger (>= 2.1.117) - Fake.DotNet.NuGet (5.20.1) - Fake.Core.Environment (>= 5.20.1) - Fake.Core.Process (>= 5.20.1) - Fake.Core.SemVer (>= 5.20.1) - Fake.Core.String (>= 5.20.1) - Fake.Core.Tasks (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - Fake.Core.Xml (>= 5.20.1) - Fake.IO.FileSystem (>= 5.20.1) - Fake.Net.Http (>= 5.20.1) - FSharp.Core (>= 4.7.1) + Fake.DotNet.FxCop (5.20.3) + BlackFox.VsWhere (>= 1.1) + Fake.Core.Process (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + Fake.Core.Xml (>= 5.20.3) + Fake.IO.FileSystem (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.DotNet.MSBuild (5.20.3) + BlackFox.VsWhere (>= 1.1) + Fake.Core.Environment (>= 5.20.3) + Fake.Core.Process (>= 5.20.3) + Fake.Core.String (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + Fake.IO.FileSystem (>= 5.20.3) + FSharp.Core (>= 4.7.2) + MSBuild.StructuredLogger (>= 2.1.176) + Fake.DotNet.NuGet (5.20.3) + Fake.Core.Environment (>= 5.20.3) + Fake.Core.Process (>= 5.20.3) + Fake.Core.SemVer (>= 5.20.3) + Fake.Core.String (>= 5.20.3) + Fake.Core.Tasks (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + Fake.Core.Xml (>= 5.20.3) + Fake.IO.FileSystem (>= 5.20.3) + Fake.Net.Http (>= 5.20.3) + FSharp.Core (>= 4.7.2) Newtonsoft.Json (>= 12.0.3) - NuGet.Protocol (>= 5.5.1) - Fake.DotNet.Testing.Coverlet (5.20.1) - Fake.DotNet.Cli (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.DotNet.Testing.NUnit (5.20.1) - Fake.Core.Environment (>= 5.20.1) - Fake.Core.Process (>= 5.20.1) - Fake.Core.String (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - Fake.IO.FileSystem (>= 5.20.1) - Fake.Testing.Common (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.DotNet.Testing.OpenCover (5.20.1) - Fake.Core.Environment (>= 5.20.1) - Fake.Core.Process (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - Fake.IO.FileSystem (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.DotNet.Testing.XUnit2 (5.20.1) - Fake.Core.Process (>= 5.20.1) - Fake.Core.String (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - Fake.IO.FileSystem (>= 5.20.1) - Fake.Testing.Common (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.IO.FileSystem (5.20.1) - Fake.Core.String (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Net.Http (5.20.1) - Fake.Core.Trace (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Testing.Common (5.20.1) - Fake.Core.Trace (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Testing.ReportGenerator (5.20.1) - Fake.Core.Process (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - Fake.DotNet.Cli (>= 5.20.1) - Fake.IO.FileSystem (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Tools.Git (5.20.1) - Fake.Core.Environment (>= 5.20.1) - Fake.Core.Process (>= 5.20.1) - Fake.Core.SemVer (>= 5.20.1) - Fake.Core.String (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - Fake.IO.FileSystem (>= 5.20.1) - FSharp.Core (>= 4.7.1) + NuGet.Protocol (>= 5.6) + Fake.DotNet.Testing.Coverlet (5.20.3) + Fake.DotNet.Cli (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.DotNet.Testing.NUnit (5.20.3) + Fake.Core.Environment (>= 5.20.3) + Fake.Core.Process (>= 5.20.3) + Fake.Core.String (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + Fake.IO.FileSystem (>= 5.20.3) + Fake.Testing.Common (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.DotNet.Testing.OpenCover (5.20.3) + Fake.Core.Environment (>= 5.20.3) + Fake.Core.Process (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + Fake.IO.FileSystem (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.DotNet.Testing.XUnit2 (5.20.3) + Fake.Core.Process (>= 5.20.3) + Fake.Core.String (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + Fake.IO.FileSystem (>= 5.20.3) + Fake.Testing.Common (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.IO.FileSystem (5.20.3) + Fake.Core.String (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Net.Http (5.20.3) + Fake.Core.Trace (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Testing.Common (5.20.3) + Fake.Core.Trace (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Testing.ReportGenerator (5.20.3) + Fake.Core.Process (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + Fake.DotNet.Cli (>= 5.20.3) + Fake.IO.FileSystem (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Tools.Git (5.20.3) + Fake.Core.Environment (>= 5.20.3) + Fake.Core.Process (>= 5.20.3) + Fake.Core.SemVer (>= 5.20.3) + Fake.Core.String (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + Fake.IO.FileSystem (>= 5.20.3) + FSharp.Core (>= 4.7.2) FParsec (1.1.1) FSharp.Core (>= 4.3.4) - FSharp.Compiler.Service (36.0.3) + FSharp.Compiler.Service (37.0) FSharp.Core (>= 4.6.2) + Microsoft.Build.Framework (>= 16.6) + Microsoft.Build.Tasks.Core (>= 16.6) + Microsoft.Build.Utilities.Core (>= 16.6) System.Buffers (>= 4.5) System.Collections.Immutable (>= 1.5) System.Memory (>= 4.5.3) @@ -172,11 +175,11 @@ NUGET System.Reflection.Metadata (>= 1.6) System.Reflection.TypeExtensions (>= 4.3) System.Runtime.Loader (>= 4.0) - FSharp.Control.Reactive (4.4) - FSharp.Core (>= 4.7) - System.Reactive (>= 4.3.2) + FSharp.Control.Reactive (4.4.2) + FSharp.Core (>= 4.7.2) + System.Reactive (>= 4.4.1) FSharp.Core (4.7.2) - FSharpLint.Core (0.16.3) + FSharpLint.Core (0.16.5) Dotnet.ProjInfo (>= 0.41) Dotnet.ProjInfo.Workspace (>= 0.41) Dotnet.ProjInfo.Workspace.FCS (>= 0.41) @@ -184,16 +187,18 @@ NUGET FSharp.Compiler.Service (>= 36.0.1) FSharp.Core (>= 4.6.2) Newtonsoft.Json (>= 12.0.3) + Fuchu (1.1) + FSharp.Core (>= 4.3.4) Markdown (2.2.1) System.Collections (>= 4.0.11) System.Runtime.Extensions (>= 4.1) System.Text.RegularExpressions (>= 4.1) - Microsoft.Build (16.6) - Microsoft.Build.Framework (16.6) + Microsoft.Build (16.7) + Microsoft.Build.Framework (16.7) System.Security.Permissions (>= 4.7) - Microsoft.Build.Tasks.Core (16.6) - Microsoft.Build.Framework (>= 16.6) - Microsoft.Build.Utilities.Core (>= 16.6) + Microsoft.Build.Tasks.Core (16.7) + Microsoft.Build.Framework (>= 16.7) + Microsoft.Build.Utilities.Core (>= 16.7) Microsoft.Win32.Registry (>= 4.3) System.CodeDom (>= 4.4) System.Collections.Immutable (>= 1.5) @@ -202,15 +207,20 @@ NUGET System.Resources.Extensions (>= 4.6) System.Security.Permissions (>= 4.7) System.Threading.Tasks.Dataflow (>= 4.9) - Microsoft.Build.Utilities.Core (16.6) - Microsoft.Build.Framework (>= 16.6) + Microsoft.Build.Tasks.Git (1.0) + Microsoft.Build.Utilities.Core (16.7) + Microsoft.Build.Framework (>= 16.7) Microsoft.Win32.Registry (>= 4.3) System.Collections.Immutable (>= 1.5) System.Security.Permissions (>= 4.7) System.Text.Encoding.CodePages (>= 4.0.1) - Microsoft.NETCore.Platforms (3.1.1) + Microsoft.NETCore.Platforms (3.1.3) Microsoft.NETCore.Targets (3.1) Microsoft.NETFramework.ReferenceAssemblies (1.0) + Microsoft.SourceLink.Common (1.0) + Microsoft.SourceLink.GitHub (1.0) + Microsoft.Build.Tasks.Git (>= 1.0) + Microsoft.SourceLink.Common (>= 1.0) Microsoft.Win32.Primitives (4.3) Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Targets (>= 1.1) @@ -221,40 +231,39 @@ NUGET System.Security.AccessControl (>= 4.7) System.Security.Principal.Windows (>= 4.7) Mono.Posix.NETStandard (1.0) - MSBuild.StructuredLogger (2.1.133) + MSBuild.StructuredLogger (2.1.176) Microsoft.Build (>= 16.4) Microsoft.Build.Framework (>= 16.4) Microsoft.Build.Tasks.Core (>= 16.4) Microsoft.Build.Utilities.Core (>= 16.4) - System.IO.Compression (>= 4.3) + Microsoft.SourceLink.GitHub (>= 1.0) NETStandard.Library (2.0.3) Microsoft.NETCore.Platforms (>= 1.1) Newtonsoft.Json (12.0.3) - NuGet.Common (5.6) - NuGet.Frameworks (>= 5.6) + NuGet.Common (5.7) + NuGet.Frameworks (>= 5.7) System.Diagnostics.Process (>= 4.3) System.Threading.Thread (>= 4.3) - NuGet.Configuration (5.6) - NuGet.Common (>= 5.6) + NuGet.Configuration (5.7) + NuGet.Common (>= 5.7) System.Security.Cryptography.ProtectedData (>= 4.3) - NuGet.Frameworks (5.6) - NuGet.Packaging (5.6) + NuGet.Frameworks (5.7) + NuGet.Packaging (5.7) Newtonsoft.Json (>= 9.0.1) - NuGet.Configuration (>= 5.6) - NuGet.Versioning (>= 5.6) + NuGet.Configuration (>= 5.7) + NuGet.Versioning (>= 5.7) System.Dynamic.Runtime (>= 4.3) - NuGet.Protocol (5.6) - NuGet.Packaging (>= 5.6) + System.Security.Cryptography.Cng (>= 5.0.0-preview.3.20214.6) + System.Security.Cryptography.Pkcs (>= 5.0.0-preview.3.20214.6) + NuGet.Protocol (5.7) + NuGet.Packaging (>= 5.7) System.Dynamic.Runtime (>= 4.3) - NuGet.Versioning (5.6) + NuGet.Versioning (5.7) NUnit (3.12) NETStandard.Library (>= 2.0) runtime.native.System (4.3.1) Microsoft.NETCore.Platforms (>= 1.1.1) Microsoft.NETCore.Targets (>= 1.1.3) - runtime.native.System.IO.Compression (4.3.2) - Microsoft.NETCore.Platforms (>= 1.1.1) - Microsoft.NETCore.Targets (>= 1.1.3) Sln (0.3) System.Buffers (4.5.1) System.CodeDom (4.7) @@ -305,6 +314,9 @@ NUGET System.Runtime (>= 4.3) System.Runtime.Extensions (>= 4.3) System.Threading (>= 4.3) + System.Formats.Asn1 (5.0.0-preview.8.20407.11) + System.Buffers (>= 4.5.1) + System.Memory (>= 4.5.4) System.Globalization (4.3) Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Targets (>= 1.1) @@ -315,22 +327,6 @@ NUGET System.Runtime (>= 4.3) System.Text.Encoding (>= 4.3) System.Threading.Tasks (>= 4.3) - System.IO.Compression (4.3) - Microsoft.NETCore.Platforms (>= 1.1) - runtime.native.System (>= 4.3) - runtime.native.System.IO.Compression (>= 4.3) - System.Buffers (>= 4.3) - System.Collections (>= 4.3) - System.Diagnostics.Debug (>= 4.3) - System.IO (>= 4.3) - System.Resources.ResourceManager (>= 4.3) - System.Runtime (>= 4.3) - System.Runtime.Extensions (>= 4.3) - System.Runtime.Handles (>= 4.3) - System.Runtime.InteropServices (>= 4.3) - System.Text.Encoding (>= 4.3) - System.Threading (>= 4.3) - System.Threading.Tasks (>= 4.3) System.IO.FileSystem (4.3) Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Targets (>= 1.1) @@ -438,6 +434,12 @@ NUGET System.Runtime (>= 4.3) System.Security.AccessControl (4.7) System.Security.Principal.Windows (>= 4.7) + System.Security.Cryptography.Cng (5.0.0-preview.8.20407.11) + System.Security.Cryptography.Pkcs (5.0.0-preview.8.20407.11) + System.Buffers (>= 4.5.1) + System.Formats.Asn1 (>= 5.0.0-preview.8.20407.11) + System.Memory (>= 4.5.4) + System.Security.Cryptography.Cng (>= 5.0.0-preview.8.20407.11) System.Security.Cryptography.ProtectedData (4.7) System.Memory (>= 4.5.3) System.Security.Permissions (4.7) @@ -477,4 +479,6 @@ NUGET System.Runtime (>= 4.3) System.Runtime.Handles (>= 4.3) System.ValueTuple (4.5) + Unquote (5.0) + FSharp.Core (>= 4.6.2) YamlDotNet (8.1.2) diff --git a/Build/common-rules.xml b/Build/common-rules.xml index 3f0a4c3c7..2e0e38afd 100644 --- a/Build/common-rules.xml +++ b/Build/common-rules.xml @@ -1,13 +1,13 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/Build/coverletArgs.runsettings b/Build/coverletArgs.runsettings index 931ce1446..ca62363da 100644 --- a/Build/coverletArgs.runsettings +++ b/Build/coverletArgs.runsettings @@ -4,8 +4,8 @@ - opencover - [*]*Uncoverlet,[*.Tests]*,[*.XTests]*,[xunit*]*,[Sample*]*,[AltCover.Record*]M*,[NUnit*]*,[*]*Tests.* + opencover + [*]*Uncoverlet,[xunit*]*,[Sample*]*,[AltCover.Record*]M*,[NUnit*]*,[*]*UnitTestStub CompilerGenerated diff --git a/Build/coverletArgs.sample.runsettings b/Build/coverletArgs.sample.runsettings index 29b06cf8c..4f01ac27a 100644 --- a/Build/coverletArgs.sample.runsettings +++ b/Build/coverletArgs.sample.runsettings @@ -4,8 +4,8 @@ - opencover - + opencover + [AltCover.Recorder.g]* diff --git a/Build/dump-uncovered.ps1 b/Build/dump-uncovered.ps1 new file mode 100644 index 000000000..bccf0ebe8 --- /dev/null +++ b/Build/dump-uncovered.ps1 @@ -0,0 +1,17 @@ +$files = Get-ChildItem -recurse ./_Reports/_UnitTest*/*.html + +$files | % { + $file = $_.FullName + $lines = Get-Content $file + $mark = $false + $lines | ? { + ($_ -like '*class="coverableline"*') } | ? { + -not( ($_ -like '*class="orange"*') -or ($_ -like '*class="green"*')) } | % { + $mark = $true + Write-Host $_ + } + if ($mark) { + Write-Host $file + Write-Host " " + } +} \ No newline at end of file diff --git a/Build/get-token.fsx b/Build/get-token.fsx index 06e99c208..adca936d1 100644 --- a/Build/get-token.fsx +++ b/Build/get-token.fsx @@ -5,7 +5,7 @@ open System.Security.Cryptography let key = fsi.CommandLineArgs.[1] let stream = new FileStream(key, System.IO.FileMode.Open, System.IO.FileAccess.Read) -let pair = new StrongNameKeyPair(stream) +let pair = StrongNameKeyPair(stream) // get the public key token as 8 bytes from the end of a SHA1 hash of the key material let hash = new SHA1CryptoServiceProvider() diff --git a/Build/msbuildtest.proj b/Build/msbuildtest.proj index e4ce47573..eda2c3025 100644 --- a/Build/msbuildtest.proj +++ b/Build/msbuildtest.proj @@ -1,8 +1,8 @@ + AssemblyFile="$(MSBuildThisFileDirectory)../_Packaging/Unpack/tools/netcoreapp2.0/AltCover.Engine.dll" /> + AssemblyFile="$(MSBuildThisFileDirectory)../_Packaging/Unpack/tools/netcoreapp2.0/AltCover.Engine.dll" /> @@ -12,21 +12,15 @@ - - + - - - - - + AssemblyFilter="@(AssemblyFilter)" /> + + \ No newline at end of file diff --git a/Build/paket.lock b/Build/paket.lock index 0b1a93c53..a1216f80f 100644 --- a/Build/paket.lock +++ b/Build/paket.lock @@ -15,96 +15,98 @@ NUGET FSharp.Core (>= 4.0.0.1) - restriction: >= net45 FSharp.Core (>= 4.2.3) - restriction: && (< net45) (>= netstandard2.0) Microsoft.Win32.Registry (>= 4.7) - restriction: && (< net45) (>= netstandard2.0) - Fake.Core.CommandLineParsing (5.20.1) - restriction: >= netstandard2.0 + Fake.Core.CommandLineParsing (5.20.3) - restriction: >= netstandard2.0 FParsec (>= 1.1.1) - restriction: >= netstandard2.0 - FSharp.Core (>= 4.7.1) - restriction: >= netstandard2.0 - Fake.Core.Context (5.20.1) - restriction: >= netstandard2.0 - FSharp.Core (>= 4.7.1) - restriction: >= netstandard2.0 - Fake.Core.Environment (5.20.1) - FSharp.Core (>= 4.7.1) - restriction: >= netstandard2.0 - Fake.Core.FakeVar (5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Context (>= 5.20.1) - restriction: >= netstandard2.0 - FSharp.Core (>= 4.7.1) - restriction: >= netstandard2.0 - Fake.Core.Process (5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Environment (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.FakeVar (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.String (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Trace (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.IO.FileSystem (>= 5.20.1) - restriction: >= netstandard2.0 - FSharp.Core (>= 4.7.1) - restriction: >= netstandard2.0 - System.Collections.Immutable (>= 1.7) - restriction: >= netstandard2.0 - Fake.Core.SemVer (5.20.1) - restriction: >= netstandard2.0 - FSharp.Core (>= 4.7.1) - restriction: >= netstandard2.0 - Fake.Core.String (5.20.1) - restriction: >= netstandard2.0 - FSharp.Core (>= 4.7.1) - restriction: >= netstandard2.0 - Fake.Core.Target (5.20.1) - Fake.Core.CommandLineParsing (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Context (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Environment (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.FakeVar (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Process (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.String (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Trace (>= 5.20.1) - restriction: >= netstandard2.0 - FSharp.Control.Reactive (>= 4.2) - restriction: >= netstandard2.0 - FSharp.Core (>= 4.7.1) - restriction: >= netstandard2.0 - Fake.Core.Tasks (5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Trace (>= 5.20.1) - restriction: >= netstandard2.0 - FSharp.Core (>= 4.7.1) - restriction: >= netstandard2.0 - Fake.Core.Trace (5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Environment (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.FakeVar (>= 5.20.1) - restriction: >= netstandard2.0 - FSharp.Core (>= 4.7.1) - restriction: >= netstandard2.0 - Fake.Core.Xml (5.20.1) - restriction: >= netstandard2.0 - Fake.Core.String (>= 5.20.1) - restriction: >= netstandard2.0 - FSharp.Core (>= 4.7.1) - restriction: >= netstandard2.0 - Fake.DotNet.Cli (5.20.1) - Fake.Core.Environment (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Process (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.String (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Trace (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.DotNet.MSBuild (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.DotNet.NuGet (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.IO.FileSystem (>= 5.20.1) - restriction: >= netstandard2.0 - FSharp.Core (>= 4.7.1) - restriction: >= netstandard2.0 + FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 + Fake.Core.Context (5.20.3) - restriction: >= netstandard2.0 + FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 + Fake.Core.Environment (5.20.3) + FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 + Fake.Core.FakeVar (5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Context (>= 5.20.3) - restriction: >= netstandard2.0 + FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 + Fake.Core.Process (5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Environment (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.FakeVar (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.String (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Trace (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.IO.FileSystem (>= 5.20.3) - restriction: >= netstandard2.0 + FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 + System.Collections.Immutable (>= 1.7.1) - restriction: >= netstandard2.0 + Fake.Core.SemVer (5.20.3) - restriction: >= netstandard2.0 + FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 + Fake.Core.String (5.20.3) - restriction: >= netstandard2.0 + FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 + Fake.Core.Target (5.20.3) + Fake.Core.CommandLineParsing (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Context (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Environment (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.FakeVar (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Process (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.String (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Trace (>= 5.20.3) - restriction: >= netstandard2.0 + FSharp.Control.Reactive (>= 4.4.2) - restriction: >= netstandard2.0 + FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 + Fake.Core.Tasks (5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Trace (>= 5.20.3) - restriction: >= netstandard2.0 + FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 + Fake.Core.Trace (5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Environment (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.FakeVar (>= 5.20.3) - restriction: >= netstandard2.0 + FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 + Fake.Core.Xml (5.20.3) - restriction: >= netstandard2.0 + Fake.Core.String (>= 5.20.3) - restriction: >= netstandard2.0 + FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 + Fake.DotNet.Cli (5.20.3) + Fake.Core.Environment (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Process (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.String (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Trace (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.DotNet.MSBuild (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.DotNet.NuGet (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.IO.FileSystem (>= 5.20.3) - restriction: >= netstandard2.0 + FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 Mono.Posix.NETStandard (>= 1.0) - restriction: >= netstandard2.0 Newtonsoft.Json (>= 12.0.3) - restriction: >= netstandard2.0 - Fake.DotNet.MSBuild (5.20.1) - restriction: >= netstandard2.0 - BlackFox.VsWhere (>= 1.0) - restriction: >= netstandard2.0 - Fake.Core.Environment (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Process (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.String (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Trace (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.IO.FileSystem (>= 5.20.1) - restriction: >= netstandard2.0 - FSharp.Core (>= 4.7.1) - restriction: >= netstandard2.0 - MSBuild.StructuredLogger (>= 2.1.117) - restriction: >= netstandard2.0 - Fake.DotNet.NuGet (5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Environment (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Process (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.SemVer (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.String (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Tasks (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Trace (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Xml (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.IO.FileSystem (>= 5.20.1) - restriction: >= netstandard2.0 - Fake.Net.Http (>= 5.20.1) - restriction: >= netstandard2.0 - FSharp.Core (>= 4.7.1) - restriction: >= netstandard2.0 + Fake.DotNet.MSBuild (5.20.3) - restriction: >= netstandard2.0 + BlackFox.VsWhere (>= 1.1) - restriction: >= netstandard2.0 + Fake.Core.Environment (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Process (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.String (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Trace (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.IO.FileSystem (>= 5.20.3) - restriction: >= netstandard2.0 + FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 + MSBuild.StructuredLogger (>= 2.1.176) - restriction: >= netstandard2.0 + Fake.DotNet.NuGet (5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Environment (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Process (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.SemVer (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.String (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Tasks (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Trace (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Xml (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.IO.FileSystem (>= 5.20.3) - restriction: >= netstandard2.0 + Fake.Net.Http (>= 5.20.3) - restriction: >= netstandard2.0 + FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 Newtonsoft.Json (>= 12.0.3) - restriction: >= netstandard2.0 - NuGet.Protocol (>= 5.5.1) - restriction: >= netstandard2.0 - Fake.IO.FileSystem (5.20.1) - restriction: >= netstandard2.0 - Fake.Core.String (>= 5.20.1) - restriction: >= netstandard2.0 - FSharp.Core (>= 4.7.1) - restriction: >= netstandard2.0 - Fake.Net.Http (5.20.1) - restriction: >= netstandard2.0 - Fake.Core.Trace (>= 5.20.1) - restriction: >= netstandard2.0 - FSharp.Core (>= 4.7.1) - restriction: >= netstandard2.0 + NuGet.Protocol (>= 5.6) - restriction: >= netstandard2.0 + Fake.IO.FileSystem (5.20.3) - restriction: >= netstandard2.0 + Fake.Core.String (>= 5.20.3) - restriction: >= netstandard2.0 + FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 + Fake.Net.Http (5.20.3) - restriction: >= netstandard2.0 + Fake.Core.Trace (>= 5.20.3) - restriction: >= netstandard2.0 + FSharp.Core (>= 4.7.2) - restriction: >= netstandard2.0 FParsec (1.1.1) - restriction: >= netstandard2.0 FSharp.Core (>= 4.3.4) - restriction: || (>= net45) (>= netstandard2.0) System.ValueTuple (>= 4.4) - restriction: >= net45 - FSharp.Control.Reactive (4.4) - restriction: >= netstandard2.0 - FSharp.Core (>= 4.7) - restriction: || (>= net46) (>= netstandard2.0) - System.Reactive (>= 4.3.2) - restriction: || (>= net46) (>= netstandard2.0) + FSharp.Control.Reactive (4.4.2) - restriction: >= netstandard2.0 + FSharp.Core (>= 4.7.2) - restriction: || (>= net46) (>= netstandard2.0) + System.Reactive (>= 4.4.1) - restriction: || (>= net46) (>= netstandard2.0) FSharp.Core (4.7.2) - Microsoft.Build (16.6) - restriction: >= netstandard2.0 - Microsoft.Build.Framework (>= 16.6) - restriction: || (>= net472) (>= netcoreapp2.1) + Microsoft.Bcl.AsyncInterfaces (1.1.1) - restriction: || (&& (>= monoandroid) (>= netcoreapp2.1)) (&& (>= monotouch) (>= netcoreapp2.1)) (&& (>= net461) (>= netcoreapp2.1)) (>= net472) (&& (< netcoreapp2.0) (>= netcoreapp2.1)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) (&& (>= netcoreapp2.1) (>= uap10.1)) (&& (>= netcoreapp2.1) (>= xamarinios)) (&& (>= netcoreapp2.1) (>= xamarinmac)) (&& (>= netcoreapp2.1) (>= xamarintvos)) (&& (>= netcoreapp2.1) (>= xamarinwatchos)) + System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (>= net461) (&& (< netcoreapp2.1) (>= netstandard2.0)) (>= netstandard2.1) + Microsoft.Build (16.7) - restriction: >= netstandard2.0 + Microsoft.Build.Framework (>= 16.7) - restriction: || (>= net472) (>= netcoreapp2.1) Microsoft.VisualStudio.Setup.Configuration.Interop (>= 1.16.30) - restriction: >= net472 Microsoft.Win32.Registry (>= 4.3) - restriction: >= netcoreapp2.1 System.Collections.Immutable (>= 1.5) - restriction: || (>= net472) (>= netcoreapp2.1) @@ -112,12 +114,13 @@ NUGET System.Reflection.Metadata (>= 1.6) - restriction: >= netcoreapp2.1 System.Security.Principal.Windows (>= 4.7) - restriction: >= netcoreapp2.1 System.Text.Encoding.CodePages (>= 4.0.1) - restriction: >= netcoreapp2.1 + System.Text.Json (>= 4.7) - restriction: || (>= net472) (>= netcoreapp2.1) System.Threading.Tasks.Dataflow (>= 4.9) - restriction: || (>= net472) (>= netcoreapp2.1) - Microsoft.Build.Framework (16.6) - restriction: >= netstandard2.0 + Microsoft.Build.Framework (16.7) - restriction: >= netstandard2.0 System.Security.Permissions (>= 4.7) - restriction: && (< net472) (>= netstandard2.0) - Microsoft.Build.Tasks.Core (16.6) - restriction: >= netstandard2.0 - Microsoft.Build.Framework (>= 16.6) - restriction: >= netstandard2.0 - Microsoft.Build.Utilities.Core (>= 16.6) - restriction: >= netstandard2.0 + Microsoft.Build.Tasks.Core (16.7) - restriction: >= netstandard2.0 + Microsoft.Build.Framework (>= 16.7) - restriction: >= netstandard2.0 + Microsoft.Build.Utilities.Core (>= 16.7) - restriction: >= netstandard2.0 Microsoft.VisualStudio.Setup.Configuration.Interop (>= 1.16.30) - restriction: >= net472 Microsoft.Win32.Registry (>= 4.3) - restriction: && (< net472) (>= netstandard2.0) System.CodeDom (>= 4.4) - restriction: && (< net472) (>= netstandard2.0) @@ -127,15 +130,20 @@ NUGET System.Resources.Extensions (>= 4.6) - restriction: >= netstandard2.0 System.Security.Permissions (>= 4.7) - restriction: && (< net472) (>= netstandard2.0) System.Threading.Tasks.Dataflow (>= 4.9) - restriction: >= netstandard2.0 - Microsoft.Build.Utilities.Core (16.6) - restriction: >= netstandard2.0 - Microsoft.Build.Framework (>= 16.6) - restriction: >= netstandard2.0 + Microsoft.Build.Tasks.Git (1.0) - restriction: >= netstandard2.0 + Microsoft.Build.Utilities.Core (16.7) - restriction: >= netstandard2.0 + Microsoft.Build.Framework (>= 16.7) - restriction: >= netstandard2.0 Microsoft.VisualStudio.Setup.Configuration.Interop (>= 1.16.30) - restriction: >= net472 Microsoft.Win32.Registry (>= 4.3) - restriction: && (< net472) (>= netstandard2.0) System.Collections.Immutable (>= 1.5) - restriction: >= netstandard2.0 System.Security.Permissions (>= 4.7) - restriction: && (< net472) (>= netstandard2.0) System.Text.Encoding.CodePages (>= 4.0.1) - restriction: && (< net472) (>= netstandard2.0) - Microsoft.NETCore.Platforms (3.1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.4) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.5) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< netcoreapp5.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.2) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.4) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.5) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.6) (< win8)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (>= netcoreapp2.0) (&& (>= netcoreapp5.0) (< netstandard1.2)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (>= netcoreapp5.0) (< portable-net45+win8+wpa81)) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.1) (< portable-net45+win8+wpa81)) (&& (< netstandard1.1) (>= uap10.0) (< win8)) (&& (< netstandard1.2) (>= uap10.0) (< win8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) - Microsoft.NETCore.Targets (3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.4) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.5) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.2) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.4) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.5) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.6) (< win8)) (&& (< net45) (>= net46) (< netstandard1.2)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< net45) (>= net46) (>= netstandard1.5) (< netstandard2.0)) (&& (< net45) (>= net46) (< netstandard1.5)) (&& (< net45) (>= net461) (< netstandard1.2)) (&& (< net45) (>= net461) (< netstandard1.3)) (&& (< net45) (>= net461) (>= netstandard1.5) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard1.5)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.1) (< portable-net45+win8+wpa81)) (&& (< netstandard1.1) (>= uap10.0) (< win8)) (&& (< netstandard1.2) (>= uap10.0) (< win8)) (&& (< netstandard1.2) (>= uap10.1) (< win8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) + Microsoft.NETCore.Platforms (3.1.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.4) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.5) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net46) (< netcoreapp5.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.2)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< net45) (>= net46) (>= netstandard1.5) (< netstandard2.0)) (&& (< net45) (>= net46) (< netstandard1.5)) (&& (< net45) (>= net461) (< netstandard1.2)) (&& (< net45) (>= net461) (< netstandard1.3)) (&& (< net45) (>= net461) (>= netstandard1.5) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard1.5)) (&& (>= netcoreapp1.1) (< netstandard1.2)) (&& (>= netcoreapp1.1) (< netstandard1.3)) (&& (>= netcoreapp1.1) (< netstandard1.4)) (&& (>= netcoreapp1.1) (< netstandard1.5)) (&& (>= netcoreapp1.1) (< netstandard1.6)) (&& (>= netcoreapp1.1) (< netstandard2.0)) (&& (>= netcoreapp1.1) (>= uap10.1)) (>= netcoreapp2.0) (&& (>= netcoreapp5.0) (< netstandard1.2)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (>= netcoreapp5.0) (< portable-net45+win8+wpa81)) (&& (>= netcoreapp5.0) (>= uap10.1)) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (< netstandard1.2) (>= uap10.0) (< win8)) (&& (< netstandard1.2) (>= uap10.1) (< win8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.5) (< portable-net45+win8+wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) + Microsoft.NETCore.Targets (3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.4) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.5) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.2)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< net45) (>= net46) (>= netstandard1.5) (< netstandard2.0)) (&& (< net45) (>= net46) (< netstandard1.5)) (&& (< net45) (>= net461) (< netstandard1.2)) (&& (< net45) (>= net461) (< netstandard1.3)) (&& (< net45) (>= net461) (>= netstandard1.5) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard1.5)) (&& (>= netcoreapp1.1) (< netstandard1.2)) (&& (>= netcoreapp1.1) (< netstandard1.3)) (&& (>= netcoreapp1.1) (< netstandard1.4)) (&& (>= netcoreapp1.1) (< netstandard1.5)) (&& (>= netcoreapp1.1) (< netstandard1.6)) (&& (>= netcoreapp1.1) (< netstandard2.0)) (&& (>= netcoreapp1.1) (>= uap10.1)) (&& (>= netcoreapp5.0) (< netstandard1.2)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (>= netcoreapp5.0) (< portable-net45+win8+wpa81)) (&& (>= netcoreapp5.0) (>= uap10.1)) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (< netstandard1.2) (>= uap10.0) (< win8)) (&& (< netstandard1.2) (>= uap10.1) (< win8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.5) (< portable-net45+win8+wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) + Microsoft.SourceLink.Common (1.0) - restriction: >= netstandard2.0 + Microsoft.SourceLink.GitHub (1.0) - restriction: >= netstandard2.0 + Microsoft.Build.Tasks.Git (>= 1.0) + Microsoft.SourceLink.Common (>= 1.0) Microsoft.VisualStudio.Setup.Configuration.Interop (1.16.30) - restriction: >= net472 Microsoft.Win32.Primitives (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net46) (< netcoreapp5.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) @@ -149,12 +157,12 @@ NUGET Microsoft.Win32.SystemEvents (4.7) - restriction: >= netcoreapp3.0 Microsoft.NETCore.Platforms (>= 3.1) - restriction: >= netcoreapp2.0 Mono.Posix.NETStandard (1.0) - restriction: >= netstandard2.0 - MSBuild.StructuredLogger (2.1.133) - restriction: >= netstandard2.0 + MSBuild.StructuredLogger (2.1.176) - restriction: >= netstandard2.0 Microsoft.Build (>= 16.4) - restriction: >= netstandard2.0 Microsoft.Build.Framework (>= 16.4) - restriction: >= netstandard2.0 Microsoft.Build.Tasks.Core (>= 16.4) - restriction: >= netstandard2.0 Microsoft.Build.Utilities.Core (>= 16.4) - restriction: >= netstandard2.0 - System.IO.Compression (>= 4.3) - restriction: >= netstandard2.0 + Microsoft.SourceLink.GitHub (>= 1.0) - restriction: >= netstandard2.0 NETStandard.Library (2.0.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (>= net45) (< netstandard1.3)) (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81)) (&& (< net45) (>= netstandard2.0)) (&& (>= net46) (< netstandard1.4)) (>= net461) (>= netcoreapp2.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81)) (&& (< netstandard1.0) (>= portable-net45+win8) (< win8)) (&& (< netstandard1.0) (< portable-net45+win8) (>= portable-net45+win8+wpa81)) (&& (< netstandard1.0) (>= portable-net45+win8+wp8+wpa81) (< portable-net45+win8+wpa81)) (&& (< netstandard1.0) (>= win8)) (&& (< netstandard1.3) (< win8) (>= wpa81)) (&& (< netstandard1.5) (>= uap10.0)) (>= uap10.1) (>= wp8) Microsoft.Win32.Primitives (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81)) (&& (>= net46) (< netstandard1.4)) (&& (< netstandard1.5) (>= uap10.0) (< uap10.1)) @@ -201,14 +209,14 @@ NUGET System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81)) (&& (>= net46) (< netstandard1.4)) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (< netstandard1.5) (>= uap10.0) (< uap10.1)) System.Xml.XDocument (>= 4.3) - restriction: || (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81)) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (< netstandard1.5) (>= uap10.0) (< uap10.1)) Newtonsoft.Json (12.0.3) - restriction: >= netstandard2.0 - NuGet.Common (5.6) - restriction: >= netstandard2.0 - NuGet.Frameworks (>= 5.6) - restriction: >= netstandard2.0 + NuGet.Common (5.7) - restriction: >= netstandard2.0 + NuGet.Frameworks (>= 5.7) - restriction: >= netstandard2.0 System.Diagnostics.Process (>= 4.3) - restriction: && (< net472) (>= netstandard2.0) System.Threading.Thread (>= 4.3) - restriction: && (< net472) (>= netstandard2.0) - NuGet.Configuration (5.6) - restriction: >= netstandard2.0 - NuGet.Common (>= 5.6) - restriction: >= netstandard2.0 + NuGet.Configuration (5.7) - restriction: >= netstandard2.0 + NuGet.Common (>= 5.7) - restriction: >= netstandard2.0 System.Security.Cryptography.ProtectedData (>= 4.3) - restriction: && (< net472) (>= netstandard2.0) - NuGet.Frameworks (5.6) - restriction: >= netstandard2.0 + NuGet.Frameworks (5.7) - restriction: >= netstandard2.0 NuGet.Packaging (5.6) - restriction: >= netstandard2.0 Newtonsoft.Json (>= 9.0.1) - restriction: >= netstandard2.0 NuGet.Configuration (>= 5.6) - restriction: >= netstandard2.0 @@ -217,25 +225,25 @@ NUGET NuGet.Protocol (5.6) - restriction: >= netstandard2.0 NuGet.Packaging (>= 5.6) - restriction: >= netstandard2.0 System.Dynamic.Runtime (>= 4.3) - restriction: && (< net472) (>= netstandard2.0) - NuGet.Versioning (5.6) - restriction: >= netstandard2.0 - runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) - runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) - runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) - runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) - runtime.fedora.27-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) - runtime.fedora.28-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) - runtime.native.System (4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp5.0) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net46) (< netcoreapp5.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.0) (>= netstandard1.3) (< win8)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< netstandard1.0) (>= netstandard1.3) (< portable-net45+win8)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) + NuGet.Versioning (5.7) - restriction: >= netstandard2.0 + runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + runtime.fedora.27-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + runtime.fedora.28-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + runtime.native.System (4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net46) (< netcoreapp5.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.0) (>= netstandard1.3) (< win8)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< netstandard1.0) (>= netstandard1.3) (< portable-net45+win8)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1.1) Microsoft.NETCore.Targets (>= 1.1.3) - runtime.native.System.IO.Compression (4.3.2) - restriction: || (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (>= netcoreapp5.0) + runtime.native.System.IO.Compression (4.3.2) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.2)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1.1) Microsoft.NETCore.Targets (>= 1.1.3) - runtime.native.System.Net.Http (4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + runtime.native.System.Net.Http (4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1.1) Microsoft.NETCore.Targets (>= 1.1.3) runtime.native.System.Security.Cryptography.Apple (4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (>= 4.3.1) - runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) + runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) @@ -251,26 +259,26 @@ NUGET runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) runtime.ubuntu.18.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) - runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) - runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) - runtime.opensuse.42.3-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + runtime.opensuse.42.3-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) - runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) - runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) - runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) - runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) - runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) - runtime.ubuntu.18.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + runtime.ubuntu.18.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) System.AppContext (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.6)) (>= netcoreapp5.0) - System.Buffers (4.5.1) - restriction: || (&& (>= monoandroid) (>= netstandard2.0)) (&& (>= monoandroid) (>= uap10.1)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard2.0) (< win8)) (&& (>= monotouch) (>= net46)) (&& (>= monotouch) (>= netstandard2.0)) (&& (>= monotouch) (>= uap10.1)) (&& (>= net45) (>= uap10.1)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (&& (>= net46) (< netstandard1.1)) (&& (>= net46) (< netstandard2.0)) (&& (>= net46) (>= xamarintvos)) (&& (>= net46) (>= xamarinwatchos)) (>= net461) (>= netcoreapp5.0) (&& (< netstandard1.1) (>= netstandard2.0) (>= win8)) (&& (< netstandard1.1) (>= uap10.1)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard2.0) (>= uap10.1)) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (&& (>= uap10.1) (< win8) (< wpa81)) (&& (>= uap10.1) (>= xamarintvos)) (&& (>= uap10.1) (>= xamarinwatchos)) (>= xamarinios) (>= xamarinmac) + System.Buffers (4.5.1) - restriction: || (&& (>= monoandroid) (>= netcoreapp2.1)) (&& (>= monoandroid) (>= netstandard2.0)) (&& (>= monoandroid) (>= uap10.1)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard2.0) (< win8)) (&& (>= monotouch) (>= net46)) (&& (>= monotouch) (>= netcoreapp2.1)) (&& (>= monotouch) (>= netstandard2.0)) (&& (>= monotouch) (>= uap10.1)) (&& (>= net45) (>= uap10.1)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (&& (>= net46) (< netstandard1.1)) (&& (>= net46) (< netstandard2.0)) (&& (>= net46) (>= xamarintvos)) (&& (>= net46) (>= xamarinwatchos)) (>= net461) (&& (< netcoreapp2.0) (>= netcoreapp2.1)) (&& (>= netcoreapp2.1) (>= xamarintvos)) (&& (>= netcoreapp2.1) (>= xamarinwatchos)) (&& (>= netcoreapp5.0) (< netstandard1.2)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (< netstandard1.1) (>= netstandard2.0) (>= win8)) (&& (< netstandard1.1) (>= uap10.1)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard2.0) (>= uap10.1)) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (&& (>= uap10.1) (< win8) (< wpa81)) (&& (>= uap10.1) (>= xamarintvos)) (&& (>= uap10.1) (>= xamarinwatchos)) (>= xamarinios) (>= xamarinmac) System.Diagnostics.Debug (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81) System.Diagnostics.Tracing (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81) System.Resources.ResourceManager (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81) System.Runtime (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81) System.Threading (>= 4.3) - restriction: && (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81) System.CodeDom (4.7) - restriction: && (< net472) (>= netstandard2.0) - System.Collections (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) + System.Collections (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= netstandard2.0) (>= uap10.0) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) @@ -297,7 +305,7 @@ NUGET System.Text.Encoding (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.Diagnostics.Contracts (4.3) - restriction: >= netcoreapp5.0 System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) - System.Diagnostics.Debug (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard2.0)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) + System.Diagnostics.Debug (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard2.0)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard2.0) (>= uap10.0) (< win8) (< wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) @@ -346,7 +354,7 @@ NUGET System.Drawing.Common (4.7) - restriction: >= netcoreapp3.0 Microsoft.NETCore.Platforms (>= 3.1) - restriction: >= netcoreapp2.0 Microsoft.Win32.SystemEvents (>= 4.7) - restriction: >= netcoreapp2.0 - System.Dynamic.Runtime (4.3) - restriction: || (&& (< net472) (>= netstandard2.0)) (&& (>= netstandard2.0) (>= uap10.0)) + System.Dynamic.Runtime (4.3) - restriction: || (&& (< net472) (>= netstandard2.0)) (>= netcoreapp5.0) (&& (>= netstandard2.0) (>= uap10.0)) System.Collections (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Globalization (>= 4.3) - restriction: >= netcoreapp5.0 @@ -362,7 +370,7 @@ NUGET System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Threading (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) - System.Globalization (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard2.0)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) + System.Globalization (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard2.0)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) @@ -378,13 +386,13 @@ NUGET System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.Runtime.Extensions (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.Runtime.InteropServices (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) - System.IO (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) + System.IO (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net46) (< netcoreapp5.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.2)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp5.0) Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp5.0) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp5.0) System.Text.Encoding (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp5.0) System.Threading.Tasks (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp5.0) - System.IO.Compression (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (>= netstandard2.0) + System.IO.Compression (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net45) (< netcoreapp5.0) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) runtime.native.System (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (< netcoreapp5.0) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) runtime.native.System.IO.Compression (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) @@ -410,7 +418,7 @@ NUGET System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.Runtime.Extensions (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.Text.Encoding (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) - System.IO.FileSystem (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net46) (< netcoreapp5.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) + System.IO.FileSystem (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net46) (< netcoreapp5.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) Microsoft.NETCore.Targets (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.IO (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) @@ -421,13 +429,13 @@ NUGET System.Threading.Tasks (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.IO.FileSystem.Primitives (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net46) (< netcoreapp5.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) - System.Linq (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) + System.Linq (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= netstandard2.0) (>= uap10.0) (< win8) (< wpa81)) System.Collections (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.6) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.6) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) - System.Linq.Expressions (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) + System.Linq.Expressions (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard2.0) (>= uap10.0) (< win8) (< wpa81)) System.Collections (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Globalization (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) @@ -446,7 +454,7 @@ NUGET System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Threading (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Linq.Queryable (4.3) - restriction: && (>= netstandard2.0) (>= uap10.0) - System.Memory (4.5.4) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard2.0) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.6) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= net45) (< netstandard1.3) (>= uap10.0)) (&& (< net45) (>= net46) (< netstandard1.2)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (>= netstandard1.4) (< netstandard1.5)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< net45) (>= net46) (>= netstandard1.5) (< netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.5) (>= netstandard1.6)) (&& (>= net46) (< netstandard1.3) (>= uap10.0)) (&& (>= net46) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard2.0)) (>= net461) (>= netcoreapp2.0) (&& (>= netcoreapp5.0) (< netstandard1.2)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (>= uap10.1) + System.Memory (4.5.4) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard2.0) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.6) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (>= net45) (< netstandard1.3) (>= uap10.0)) (&& (< net45) (>= net46) (< netstandard1.2)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (>= netstandard1.4) (< netstandard1.5)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< net45) (>= net46) (>= netstandard1.5) (< netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.5) (>= netstandard1.6)) (&& (>= net46) (< netstandard1.3) (>= uap10.0)) (&& (>= net46) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard2.0)) (>= net461) (>= netcoreapp2.0) (&& (>= netcoreapp5.0) (< netstandard1.2)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (>= uap10.1) System.Buffers (>= 4.5.1) - restriction: || (>= monoandroid) (>= monotouch) (&& (>= net45) (< netstandard2.0)) (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (&& (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81)) (>= net461) (&& (< netstandard1.1) (>= portable-net45+win8+wpa81) (< win8)) (&& (< netstandard1.1) (>= win8)) (&& (< netstandard2.0) (< uap10.1) (>= wpa81)) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) System.Diagnostics.Debug (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos) System.Globalization (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos) @@ -499,8 +507,8 @@ NUGET System.Net.Primitives (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.Threading.Tasks (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) - System.Numerics.Vectors (4.5) - restriction: || (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) (&& (>= netstandard2.0) (>= uap10.1)) - System.ObjectModel (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) + System.Numerics.Vectors (4.5) - restriction: || (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) (&& (< netcoreapp2.0) (>= netcoreapp2.1)) (&& (>= netstandard2.0) (>= uap10.1)) + System.ObjectModel (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= netstandard2.0) (>= uap10.0) (< win8) (< wpa81)) System.Collections (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) @@ -513,15 +521,15 @@ NUGET System.Runtime.InteropServices.WindowsRuntime (>= 4.3) - restriction: && (< net46) (< netcoreapp3.0) (>= netstandard2.0) (< uap10.0) System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (>= net46) (&& (< netcoreapp3.0) (>= netstandard2.0)) (>= uap10.0) System.ValueTuple (>= 4.5) - restriction: || (>= net46) (&& (>= uap10.0) (< uap10.1)) - System.Reflection (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.4) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.5) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard2.0)) (&& (>= netcoreapp1.1) (< netstandard1.2)) (&& (>= netcoreapp1.1) (< netstandard1.3)) (&& (>= netcoreapp1.1) (< netstandard1.4)) (&& (>= netcoreapp1.1) (< netstandard1.5)) (&& (>= netcoreapp1.1) (< netstandard1.6)) (&& (>= netcoreapp1.1) (< netstandard2.0)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (< netstandard1.2) (>= uap10.0) (< win8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) + System.Reflection (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.4) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.5) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.2)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.5)) (&& (< net45) (>= net46) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard1.2)) (&& (< net45) (>= net461) (< netstandard1.3)) (&& (< net45) (>= net461) (< netstandard1.5)) (&& (< net45) (>= net461) (< netstandard2.0)) (&& (>= netcoreapp1.1) (< netstandard1.2)) (&& (>= netcoreapp1.1) (< netstandard1.3)) (&& (>= netcoreapp1.1) (< netstandard1.4)) (&& (>= netcoreapp1.1) (< netstandard1.5)) (&& (>= netcoreapp1.1) (< netstandard1.6)) (&& (>= netcoreapp1.1) (< netstandard2.0)) (&& (>= netcoreapp1.1) (>= uap10.1)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (< netstandard1.2) (>= uap10.0) (< win8)) (&& (< netstandard1.2) (>= uap10.1) (< win8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= netstandard2.0) (>= uap10.0) (< win8) (< wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp5.0) Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp5.0) System.IO (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp5.0) System.Reflection.Primitives (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp5.0) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp5.0) - System.Reflection.Emit (4.7) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp5.0) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) + System.Reflection.Emit (4.7) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp5.0) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= netstandard2.0) (>= uap10.0) (< win8) (< wpa81)) System.Reflection.Emit.ILGeneration (>= 4.7) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.1) (>= portable-net45+win8+wpa81) (< win8)) (>= netcoreapp5.0) (&& (< netstandard1.1) (>= win8)) (&& (< netstandard2.0) (>= wpa81)) (>= uap10.1) - System.Reflection.Emit.ILGeneration (4.7) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net45) (< netcoreapp5.0) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard2.0) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard2.0) (< win8)) (&& (>= netcoreapp5.0) (< netstandard1.2)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (>= netcoreapp5.0) (< portable-net45+win8+wpa81)) (&& (>= netcoreapp5.0) (< portable-net45+wp8)) (&& (>= netcoreapp5.0) (>= uap10.1)) (&& (< netstandard1.2) (>= netstandard1.6) (>= uap10.1) (< win8)) (&& (< netstandard1.2) (>= netstandard1.6) (< win8) (>= wpa81)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.3) (>= netstandard2.0) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard2.0) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= netstandard1.6) (< portable-net45+wp8) (< win8)) (&& (>= netstandard1.6) (>= uap10.1) (< win8) (< wpa81)) (&& (>= netstandard2.0) (< portable-net45+win8+wpa81)) (&& (>= netstandard2.0) (>= uap10.1) (< win8) (< wpa81)) + System.Reflection.Emit.ILGeneration (4.7) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net45) (< netcoreapp5.0) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard2.0) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard2.0) (< win8)) (&& (>= netcoreapp5.0) (< netstandard1.2)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (>= netcoreapp5.0) (< portable-net45+win8+wpa81)) (&& (>= netcoreapp5.0) (< portable-net45+wp8)) (&& (>= netcoreapp5.0) (>= uap10.0)) (&& (>= netcoreapp5.0) (>= uap10.1)) (&& (< netstandard1.1) (>= netstandard2.0) (>= uap10.0) (< win8)) (&& (< netstandard1.2) (>= netstandard1.6) (>= uap10.1) (< win8)) (&& (< netstandard1.2) (>= netstandard1.6) (< win8) (>= wpa81)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= netstandard1.6) (< portable-net45+wp8) (< win8)) (&& (>= netstandard1.6) (>= uap10.1) (< win8) (< wpa81)) (&& (>= netstandard2.0) (< portable-net45+win8+wpa81)) (&& (>= netstandard2.0) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard2.0) (>= uap10.1) (< win8) (< wpa81)) System.Reflection.Emit.Lightweight (4.7) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (>= netcoreapp5.0) (< netstandard1.2)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (>= netcoreapp5.0) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) System.Reflection (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< netstandard2.0) (< win8) (< wp8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Reflection.Emit.ILGeneration (>= 4.7) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< netstandard2.0) (< win8) (< wp8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< netstandard2.1) (< xamarinios) (< xamarinmac)) (>= netcoreapp5.0) (&& (< netstandard2.0) (>= wpa81)) (&& (>= portable-net45+win8+wp8+wpa81) (< portable-net45+wp8) (< win8)) (&& (< portable-net45+wp8) (>= win8)) (>= uap10.1) @@ -535,11 +543,11 @@ NUGET System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Reflection.Metadata (1.8.1) - restriction: || (&& (< net472) (>= netstandard2.0)) (>= netcoreapp2.1) System.Collections.Immutable (>= 1.7.1) - restriction: || (&& (>= net45) (< netstandard2.0)) (&& (< net45) (< netcoreapp3.1) (>= netstandard2.0)) (&& (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81)) (>= net461) (&& (< netstandard1.1) (>= portable-net45+win8+wpa81) (< win8)) (&& (< netstandard1.1) (>= win8)) (&& (< netstandard2.0) (>= wpa81)) - System.Reflection.Primitives (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.4) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.5) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (>= netcoreapp1.1) (< netstandard1.2)) (&& (>= netcoreapp1.1) (< netstandard1.3)) (&& (>= netcoreapp1.1) (< netstandard1.4)) (&& (>= netcoreapp1.1) (< netstandard1.5)) (&& (>= netcoreapp1.1) (< netstandard1.6)) (&& (>= netcoreapp1.1) (< netstandard2.0)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (< netstandard1.2) (>= uap10.0) (< win8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) + System.Reflection.Primitives (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.4) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.5) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.2)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (>= netstandard1.5) (< netstandard2.0)) (&& (< net45) (>= net46) (< netstandard1.5)) (&& (< net45) (>= net461) (< netstandard1.2)) (&& (< net45) (>= net461) (< netstandard1.3)) (&& (< net45) (>= net461) (>= netstandard1.5) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard1.5)) (&& (>= netcoreapp1.1) (< netstandard1.2)) (&& (>= netcoreapp1.1) (< netstandard1.3)) (&& (>= netcoreapp1.1) (< netstandard1.4)) (&& (>= netcoreapp1.1) (< netstandard1.5)) (&& (>= netcoreapp1.1) (< netstandard1.6)) (&& (>= netcoreapp1.1) (< netstandard2.0)) (&& (>= netcoreapp1.1) (>= uap10.1)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (< netstandard1.2) (>= uap10.0) (< win8)) (&& (< netstandard1.2) (>= uap10.1) (< win8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= netstandard2.0) (>= uap10.0) (< win8) (< wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) - System.Reflection.TypeExtensions (4.7) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< net472) (>= netstandard2.0)) (>= netcoreapp5.0) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) + System.Reflection.TypeExtensions (4.7) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< net472) (>= netstandard2.0)) (>= netcoreapp5.0) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= netstandard2.0) (>= uap10.0) (< win8) (< wpa81)) System.Diagnostics.Contracts (>= 4.3) - restriction: >= netcoreapp5.0 System.Diagnostics.Debug (>= 4.3) - restriction: >= netcoreapp5.0 System.Linq (>= 4.3) - restriction: >= netcoreapp5.0 @@ -550,26 +558,26 @@ NUGET System.Runtime.Extensions (>= 4.3) - restriction: >= netcoreapp5.0 System.Resources.Extensions (4.7.1) - restriction: >= netstandard2.0 System.Memory (>= 4.5.4) - restriction: || (&& (< monoandroid) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) - System.Resources.ResourceManager (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.0) (>= netstandard1.3) (< win8)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< net45) (>= net46) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard2.0)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (< netstandard1.0) (>= netstandard1.3) (< portable-net45+win8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) + System.Resources.ResourceManager (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.0) (>= netstandard1.3) (< win8)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< net45) (>= net46) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard2.0)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (< netstandard1.0) (>= netstandard1.3) (< portable-net45+win8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= netstandard2.0) (>= uap10.0) (< win8) (< wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Globalization (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Reflection (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) - System.Runtime (4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.2) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.4) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.5) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.6) (< win8)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< net45) (>= net46) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard2.0)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.1) (< portable-net45+win8+wpa81)) (&& (< netstandard1.1) (>= uap10.0) (< win8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) + System.Runtime (4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.4) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.5) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.2)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.5)) (&& (< net45) (>= net46) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard1.2)) (&& (< net45) (>= net461) (< netstandard1.3)) (&& (< net45) (>= net461) (< netstandard1.5)) (&& (< net45) (>= net461) (< netstandard2.0)) (&& (< net45) (>= net462) (< netstandard1.2)) (&& (< net45) (>= net462) (< netstandard1.3)) (&& (< net45) (>= net462) (< netstandard1.4)) (&& (< net45) (>= net462) (< netstandard1.5)) (&& (< net45) (>= net462) (< netstandard1.6)) (&& (< net45) (>= net462) (< netstandard2.0)) (&& (>= net462) (< netstandard1.3) (>= uap10.0)) (&& (>= net462) (< netstandard1.5) (>= uap10.0)) (&& (>= net462) (>= uap10.1)) (&& (>= netcoreapp1.1) (< netstandard1.2)) (&& (>= netcoreapp1.1) (< netstandard1.3)) (&& (>= netcoreapp1.1) (< netstandard1.4)) (&& (>= netcoreapp1.1) (< netstandard1.5)) (&& (>= netcoreapp1.1) (< netstandard1.6)) (&& (>= netcoreapp1.1) (< netstandard2.0)) (&& (>= netcoreapp1.1) (>= uap10.1)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (< netstandard1.2) (>= uap10.0) (< win8)) (&& (< netstandard1.2) (>= uap10.1) (< win8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.4) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.5) (< portable-net45+win8+wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard2.0) (>= uap10.0) (< win8) (< wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.2) (< win8) (< wp8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp5.0) Microsoft.NETCore.Targets (>= 1.1.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.2) (< win8) (< wp8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp5.0) - System.Runtime.CompilerServices.Unsafe (4.7.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.0) (>= netstandard2.0) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard2.0) (< win8)) (&& (>= monotouch) (>= net46)) (&& (>= monotouch) (>= netstandard2.0)) (&& (< net45) (>= net46) (>= netstandard2.0)) (&& (>= net46) (< netstandard1.0) (>= netstandard2.0)) (&& (>= net46) (< netstandard1.1)) (&& (>= net46) (< netstandard2.0)) (&& (>= net46) (>= xamarintvos)) (&& (>= net46) (>= xamarinwatchos)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (>= netcoreapp2.0) (< netstandard2.0)) (&& (< netcoreapp2.0) (>= netcoreapp2.1)) (&& (>= netcoreapp2.1) (< netcoreapp3.1)) (&& (< netstandard1.0) (>= netstandard2.0) (>= win8)) (&& (< netstandard1.1) (>= netstandard2.0) (>= win8)) (&& (>= netstandard2.0) (>= uap10.0)) (&& (>= netstandard2.0) (>= wp8)) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (&& (< netstandard2.0) (>= xamarinios)) (&& (< netstandard2.0) (>= xamarinmac)) (>= uap10.1) + System.Runtime.CompilerServices.Unsafe (4.7.1) - restriction: || (&& (>= monoandroid) (>= netcoreapp2.1)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.0) (>= netstandard2.0) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard2.0) (< win8)) (&& (>= monotouch) (>= net46)) (&& (>= monotouch) (>= netcoreapp2.1)) (&& (>= monotouch) (>= netstandard2.0)) (&& (< net45) (>= net46) (>= netstandard2.0)) (&& (>= net46) (< netstandard1.0) (>= netstandard2.0)) (&& (>= net46) (< netstandard1.1)) (&& (>= net46) (< netstandard2.0)) (&& (>= net46) (>= xamarintvos)) (&& (>= net46) (>= xamarinwatchos)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (>= netcoreapp2.0) (< netstandard2.0)) (&& (< netcoreapp2.0) (>= netcoreapp2.1)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) (&& (>= netcoreapp2.1) (< netcoreapp3.1)) (&& (>= netcoreapp2.1) (>= xamarinios)) (&& (>= netcoreapp2.1) (>= xamarinmac)) (&& (>= netcoreapp2.1) (>= xamarintvos)) (&& (>= netcoreapp2.1) (>= xamarinwatchos)) (&& (>= netcoreapp3.0) (< netcoreapp3.1)) (&& (< netstandard1.0) (>= netstandard2.0) (>= win8)) (&& (< netstandard1.1) (>= netstandard2.0) (>= win8)) (&& (>= netstandard2.0) (>= uap10.0)) (&& (>= netstandard2.0) (>= wp8)) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (&& (< netstandard2.0) (>= xamarinios)) (&& (< netstandard2.0) (>= xamarinmac)) (>= uap10.1) System.Runtime (>= 4.3) - restriction: && (< net45) (>= netstandard1.0) (< netstandard2.0) (< win8) (< wp8) (< wpa81) - System.Runtime.Extensions (4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard2.0)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) + System.Runtime.Extensions (4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard2.0)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= netstandard2.0) (>= uap10.0) (< win8) (< wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp5.0) Microsoft.NETCore.Targets (>= 1.1.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp5.0) System.Runtime (>= 4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp5.0) - System.Runtime.Handles (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (>= netcoreapp5.0) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) + System.Runtime.Handles (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net46) (< netcoreapp5.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) Microsoft.NETCore.Targets (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) - System.Runtime.InteropServices (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard2.0)) (>= netcoreapp5.0) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) + System.Runtime.InteropServices (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net46) (< netcoreapp5.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard2.0)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= uap10.1) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp1.1) Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp1.1) System.Reflection (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp1.1) @@ -586,7 +594,7 @@ NUGET System.Threading (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.1) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Runtime.InteropServices.WindowsRuntime (4.3) - restriction: && (< net46) (< netcoreapp3.0) (>= netstandard2.0) (< uap10.0) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) - System.Runtime.Numerics (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) + System.Runtime.Numerics (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) System.Globalization (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.3) (< win8) (< wpa81)) (>= netcoreapp5.0) @@ -647,7 +655,7 @@ NUGET System.Runtime.InteropServices (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.Security.Cryptography.Primitives (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.Text.Encoding (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) - System.Security.Cryptography.OpenSsl (4.7) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) + System.Security.Cryptography.OpenSsl (4.7) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3) (>= netstandard1.6)) (&& (< net45) (>= net46) (< netstandard1.4) (>= netstandard1.6)) (&& (< netstandard1.3) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= netstandard1.6) (>= uap10.0) (< win8) (< wpa81)) System.Collections (>= 4.3) - restriction: && (>= netstandard1.6) (< netstandard2.0) System.IO (>= 4.3) - restriction: && (>= netstandard1.6) (< netstandard2.0) System.Resources.ResourceManager (>= 4.3) - restriction: && (>= netstandard1.6) (< netstandard2.0) @@ -660,7 +668,7 @@ NUGET System.Security.Cryptography.Encoding (>= 4.3) - restriction: && (>= netstandard1.6) (< netstandard2.0) System.Security.Cryptography.Primitives (>= 4.3) - restriction: && (>= netstandard1.6) (< netstandard2.0) System.Text.Encoding (>= 4.3) - restriction: && (>= netstandard1.6) (< netstandard2.0) - System.Security.Cryptography.Primitives (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) + System.Security.Cryptography.Primitives (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) System.Diagnostics.Debug (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.Globalization (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.IO (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) @@ -670,7 +678,7 @@ NUGET System.Threading.Tasks (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) System.Security.Cryptography.ProtectedData (4.7) - restriction: && (< net472) (>= netstandard2.0) System.Memory (>= 4.5.3) - restriction: && (< monoandroid) (< net46) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac) - System.Security.Cryptography.X509Certificates (4.3.2) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) + System.Security.Cryptography.X509Certificates (4.3.2) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) runtime.native.System (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< netcoreapp5.0) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) runtime.native.System.Net.Http (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< netcoreapp5.0) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) @@ -701,7 +709,7 @@ NUGET System.Windows.Extensions (>= 4.7) - restriction: >= netcoreapp3.0 System.Security.Principal.Windows (4.7) - restriction: || (&& (>= monoandroid) (>= netstandard2.0)) (&& (>= monotouch) (>= netstandard2.0)) (&& (< net45) (>= netstandard2.0)) (>= netcoreapp2.0) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (>= xamarinios) (>= xamarinmac) Microsoft.NETCore.Platforms (>= 3.1) - restriction: || (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) - System.Text.Encoding (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) + System.Text.Encoding (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net46) (< netcoreapp5.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (< netstandard1.4) (>= netstandard2.0)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.2)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (>= netcoreapp5.0) (< portable-net45+win8+wpa81)) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) @@ -713,6 +721,17 @@ NUGET Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) System.Text.Encoding (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) + System.Text.Encodings.Web (4.7.1) - restriction: || (&& (>= monoandroid) (>= netcoreapp2.1)) (&& (>= monotouch) (>= netcoreapp2.1)) (&& (>= net461) (>= netcoreapp2.1)) (>= net472) (&& (< netcoreapp2.0) (>= netcoreapp2.1)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) (&& (>= netcoreapp2.1) (>= uap10.1)) (&& (>= netcoreapp2.1) (>= xamarinios)) (&& (>= netcoreapp2.1) (>= xamarinmac)) (&& (>= netcoreapp2.1) (>= xamarintvos)) (&& (>= netcoreapp2.1) (>= xamarinwatchos)) (&& (>= netcoreapp3.0) (< netcoreapp3.1)) + System.Memory (>= 4.5.4) - restriction: || (&& (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< netstandard2.1)) (>= net461) (>= uap10.1) + System.Text.Json (4.7.2) - restriction: || (>= net472) (>= netcoreapp2.1) + Microsoft.Bcl.AsyncInterfaces (>= 1.1) - restriction: || (>= monoandroid) (>= monotouch) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (< netcoreapp2.0) (>= netstandard2.0)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) + System.Buffers (>= 4.5.1) - restriction: || (>= monoandroid) (>= monotouch) (>= net461) (&& (< netcoreapp2.0) (>= netstandard2.0)) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) + System.Memory (>= 4.5.4) - restriction: || (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (>= uap10.1) + System.Numerics.Vectors (>= 4.5) - restriction: || (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) + System.Runtime.CompilerServices.Unsafe (>= 4.7.1) - restriction: || (>= monoandroid) (>= monotouch) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (< netcoreapp2.0) (>= netstandard2.0)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) (&& (>= netcoreapp3.0) (< netcoreapp3.1)) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) + System.Text.Encodings.Web (>= 4.7.1) - restriction: || (>= monoandroid) (>= monotouch) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (< netcoreapp2.0) (>= netstandard2.0)) (&& (>= netcoreapp2.1) (< netcoreapp3.0)) (&& (>= netcoreapp3.0) (< netcoreapp3.1)) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos) + System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (&& (< monoandroid) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (>= uap10.1) + System.ValueTuple (>= 4.5) - restriction: >= net461 System.Text.RegularExpressions (4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.2)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (>= netcoreapp5.0) (< portable-net45+win8+wpa81)) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) System.Collections (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (< netcoreapp1.1) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Globalization (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (< netcoreapp1.1) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) @@ -720,15 +739,15 @@ NUGET System.Runtime (>= 4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.6) (< win8) (< wpa81)) (>= netcoreapp1.1) System.Runtime.Extensions (>= 4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (< netcoreapp1.1) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Threading (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (< netcoreapp1.1) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) - System.Threading (4.3) - restriction: || (&& (>= monoandroid) (>= uap10.1)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.0) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< netstandard1.1) (>= netstandard2.0) (< win8)) (&& (>= monotouch) (>= net46)) (&& (>= monotouch) (>= netstandard2.0)) (&& (>= monotouch) (>= uap10.1)) (&& (>= net45) (>= uap10.1)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (< net45) (>= net46) (< netstandard2.0)) (&& (< net45) (>= net461) (< netstandard2.0)) (&& (>= net46) (< netstandard1.1)) (&& (>= net46) (>= xamarintvos)) (&& (>= net46) (>= xamarinwatchos)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (< netstandard1.0) (>= netstandard1.3) (< portable-net45+win8)) (&& (< netstandard1.1) (>= uap10.1) (< win8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= netstandard2.0) (>= xamarintvos)) (&& (>= netstandard2.0) (>= xamarinwatchos)) (&& (< netstandard2.0) (>= xamarinios)) (&& (< netstandard2.0) (>= xamarinmac)) (&& (>= uap10.1) (< win8) (< wpa81)) (&& (>= uap10.1) (>= xamarinios)) (&& (>= uap10.1) (>= xamarinmac)) (&& (>= uap10.1) (>= xamarintvos)) (&& (>= uap10.1) (>= xamarinwatchos)) + System.Threading (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.0) (>= netstandard1.3) (< win8)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (< netstandard1.0) (>= netstandard1.3) (< portable-net45+win8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard1.6) (< portable-net45+win8+wpa81)) (&& (>= netstandard2.0) (>= uap10.0) (< win8) (< wpa81)) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) System.Threading.Tasks (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) - System.Threading.Tasks (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard2.0) (< win8) (< wpa81) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< net46) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (>= netcoreapp5.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) + System.Threading.Tasks (4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.6) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.4) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.5) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net46) (< netcoreapp5.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.2)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (>= netcoreapp5.0) System.Threading.Tasks.Dataflow (4.11.1) - restriction: >= netstandard2.0 - System.Threading.Tasks.Extensions (4.5.4) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (>= net46) (>= netstandard2.0)) (&& (< netcoreapp3.0) (>= netstandard2.0)) (&& (>= netcoreapp5.0) (< netstandard1.2)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (>= netcoreapp5.0) (< portable-net45+win8+wpa81)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard2.0) (>= uap10.0)) + System.Threading.Tasks.Extensions (4.5.4) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (>= net46) (>= netstandard2.0)) (&& (>= net461) (>= netcoreapp2.1)) (>= net472) (&& (< netcoreapp2.0) (>= netcoreapp2.1)) (&& (>= netcoreapp2.1) (>= uap10.1)) (&& (< netcoreapp3.0) (>= netstandard2.0)) (&& (>= netcoreapp5.0) (< netstandard1.2)) (&& (>= netcoreapp5.0) (< netstandard1.3)) (&& (>= netcoreapp5.0) (< netstandard1.4)) (&& (>= netcoreapp5.0) (< netstandard1.5)) (&& (>= netcoreapp5.0) (< netstandard1.6)) (&& (>= netcoreapp5.0) (< netstandard2.0)) (&& (>= netcoreapp5.0) (< portable-net45+win8+wpa81)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) (&& (>= netstandard2.0) (>= uap10.0)) System.Runtime.CompilerServices.Unsafe (>= 4.5.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (< netcoreapp2.1) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< monoandroid) (< netstandard1.0) (>= portable-net45+win8+wp8+wpa81) (< win8)) (&& (>= net45) (< netstandard2.0)) (>= net461) (&& (< netstandard1.0) (>= win8)) (&& (< netstandard2.0) (>= wpa81)) (>= wp8) System.Threading.Thread (4.3) - restriction: || (&& (< monoandroid) (< net46) (< netcoreapp5.0) (>= netstandard2.0) (< xamarinios) (< xamarinmac)) (&& (< net472) (>= netstandard2.0)) System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (< netcoreapp5.0) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos) @@ -739,7 +758,7 @@ NUGET Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net451) (>= netstandard1.2) (< win81) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net451) (>= netstandard1.2) (< win81) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net451) (>= netstandard1.2) (< win81) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= netcoreapp5.0) - System.ValueTuple (4.5) - restriction: || (&& (>= net45) (>= netstandard2.0)) (&& (>= net46) (>= netstandard2.0)) (&& (>= netstandard2.0) (>= uap10.0)) + System.ValueTuple (4.5) - restriction: || (&& (>= net45) (>= netstandard2.0)) (&& (>= net46) (>= netstandard2.0)) (&& (>= net461) (>= netcoreapp2.1)) (>= net472) (&& (>= netstandard2.0) (>= uap10.0)) System.Windows.Extensions (4.7) - restriction: >= netcoreapp3.0 System.Drawing.Common (>= 4.7) - restriction: >= netcoreapp3.0 System.Xml.ReaderWriter (4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.2) (>= netstandard1.3) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.4) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (< netstandard1.3) (>= netstandard1.6) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= net46) (< netstandard1.3)) (&& (< net45) (>= net46) (< netstandard1.4)) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81) (< wp8)) (&& (>= netstandard1.3) (< portable-net45+win8+wpa81)) (&& (< netstandard1.3) (>= uap10.0) (< win8) (< wpa81)) (&& (< netstandard1.5) (>= uap10.0) (< win8) (< wpa81)) diff --git a/Build/pester.ps1 b/Build/pester.ps1 index 10a4875dc..95b272090 100644 --- a/Build/pester.ps1 +++ b/Build/pester.ps1 @@ -1,10 +1,10 @@ -param([string]$ACV="0.0.0.0") +param([string]$ACV="0.0.0.0", [string]$ReportName="!:!", [string]$FolderName="!:!") -Import-Module "./_Packaging/Module/tools/netcoreapp2.0/AltCover.PowerShell.dll" -Import-Module "./packages/pester/5.0.2/Pester.psm1" +Import-Module "./_Packaging/$($FolderName)/tools/netcoreapp2.0/AltCover.PowerShell.dll" +Import-Module "./packages/pester/5.0.4/tools/Pester.psm1" Invoke-Altcover -? -# Invoke-Pester -Script @{ Path='.\Build'; Parameters = @{ ACV = $ACV}} -EnableExit -OutputFormat NUnitXml -OutputFile "./_Reports/PesterReport.xml" +# Invoke-Pester -Script @{ Path='.\Build'; Parameters = @{ ACV = $ACV}} -EnableExit -OutputFormat NUnitXml -OutputFile "./_Reports/$($ReportName).xml" $configuration = [PesterConfiguration]::Default $configuration.Run.Path = '.\Build' @@ -12,6 +12,6 @@ $configuration.Run.Exit = $true $configuration.TestResult.Enabled = $true # $configuration.TestResult.OutputFormat = "NUnit2.5" -$configuration.TestResult.OutputPath = "./_Reports/PesterReport.xml" +$configuration.TestResult.OutputPath = "./_Reports/$($ReportName).xml" Invoke-Pester -Configuration $configuration \ No newline at end of file diff --git a/Build/powershell.ps1 b/Build/powershell.ps1 deleted file mode 100644 index 365890e4f..000000000 --- a/Build/powershell.ps1 +++ /dev/null @@ -1,18 +0,0 @@ -param([string]$ACV="0.0.0.0") - -Import-Module "./_Packaging/Unpack/tools/net45/AltCover.PowerShell.dll" -Import-Module "./packages/pester/5.0.2/Pester.psm1" - -Invoke-Altcover -? -# Invoke-Pester -Script @{ Path='.\Build'; Parameters = @{ ACV = $ACV}} -EnableExit -OutputFormat NUnitXml -OutputFile "./_Reports/PoshReport.xml" - - -$configuration = [PesterConfiguration]::Default -$configuration.Run.Path = '.\Build' -$configuration.Run.Exit = $true - -$configuration.TestResult.Enabled = $true -# $configuration.TestResult.OutputFormat = "NUnit2.5" -$configuration.TestResult.OutputPath = "./_Reports/PoshReport.xml" - -Invoke-Pester -Configuration $configuration diff --git a/Build/prepareDocumentation.ps1 b/Build/prepareDocumentation.ps1 index 795e724f4..4fb2898a1 100644 --- a/Build/prepareDocumentation.ps1 +++ b/Build/prepareDocumentation.ps1 @@ -1,7 +1,10 @@ -Import-Module "./_Binaries/AltCover.PowerShell/Release+AnyCPU/net47/AltCover.PowerShell.dll" +## TODO -- AltCover => AltCover.Engine + +Import-Module "./_Binaries/AltCover.PowerShell/Release+AnyCPU/netstandard2.0/AltCover.PowerShell.dll" ## clear first dir -recurse "./docs/*apidoc.md" | del -force +dir -recurse "./docs/*.fsx.lock" | del -force ## Documentation @@ -275,7 +278,7 @@ The full command line is $header | Out-File -Encoding UTF8 $mdfile -$resources = [xml](Get-Content "./AltCover/Strings.resx") +$resources = [xml](Get-Content "./AltCover.Engine/Strings.resx") $helptext = $resources.root.data | ? { $_.name -eq "HelpText" } | % { $_.value } @@ -370,7 +373,35 @@ In release 5.3, the writing the collected data has been offloaded to an in-proce $footer | Out-File -Encoding UTF8 -Append $mdfile +### docs/AltCover.Fake.DotNet.Testing.AltCover/index.md + +$lines = Get-Content "./Build/AltCover.Fake.DotNet.Testing.AltCover.md" +$lines | % { + if ($_ -like "!!*") { + Get-Content ($_.Substring(2)) + } + else { $_ } +} | Set-Content "./docs/AltCover.Fake.DotNet.Testing.AltCover/index.md" + +### docs/Fake-and-Cake-integration.md + +$lines = Get-Content "./Build/Fake-and-Cake-integration.md" +$lines | % { + if ($_ -like "!!*") { + Get-Content ($_.Substring(2)) + } + else { $_ } +} | Set-Content "./docs/Fake-and-Cake-integration.md" + + +##----------------------------------------- + Write-Host "In node.js prompt, 'harp server C:\Users\steve\Documents\GitHub\altcover\docs'" +Write-Host "" +Write-Host "Touch test examples like" +Write-Host "dotnet fake run .\docs\AltCover.Fake.DotNet.Testing.AltCover\BuildSample_1.fsx" +Write-Host "dotnet fake run .\docs\AltCover.Fake.DotNet.Testing.AltCover\BuildSample_2.fsx" +Write-Host "dotnet fake run .\docs\BuildSample_1.fsx" diff --git a/Build/setup.fsx b/Build/setup.fsx index 00710756a..c8e463172 100644 --- a/Build/setup.fsx +++ b/Build/setup.fsx @@ -1,18 +1,17 @@ #r "paket: nuget BlackFox.VsWhere >= 1.0.0 -nuget Fake.Core.Target >= 5.20.1 -nuget Fake.Core.Environment >= 5.20.1 -nuget Fake.Core.Process >= 5.20.1 -nuget Fake.DotNet.Cli >= 5.20.1 -nuget Fake.DotNet.NuGet >= 5.20.1 -nuget Fake.IO.FileSystem >= 5.20.1 //" +nuget Fake.Core.Target >= 5.20.3 +nuget Fake.Core.Environment >= 5.20.3 +nuget Fake.Core.Process >= 5.20.3 +nuget Fake.DotNet.Cli >= 5.20.3 +nuget Fake.DotNet.NuGet >= 5.20.3 +nuget Fake.IO.FileSystem >= 5.20.3 //" #r "System.Xml" #r "System.Xml.Linq" open System open System.IO -open System.Xml open System.Xml.Linq open Fake.Core @@ -21,13 +20,14 @@ open Fake.DotNet open Fake.DotNet.NuGet.Restore open Fake.IO open Fake.IO.FileSystemOperators +open Fake.IO.Globbing.Operators let consoleBefore = (Console.ForegroundColor, Console.BackgroundColor) -Shell.copyFile "./AltCover/Abstract.fs" "./AltCover/Abstract.fsi" +Shell.copyFile "./AltCover.Engine/Abstract.fsi" "./AltCover.Engine/Abstract.fs" // Really bootstrap -let dotnetPath = "dotnet" |> Fake.Core.ProcessUtils.tryFindFileOnPath +let dotnetPath = "dotnet" |> ProcessUtils.tryFindFileOnPath let dotnetOptions (o : DotNet.Options) = match dotnetPath with @@ -37,11 +37,11 @@ let dotnetOptions (o : DotNet.Options) = DotNet.restore (fun o -> { o with Packages = [ "./packages" ] - Common = dotnetOptions o.Common }) "./Build/dotnet-cli.csproj" + Common = dotnetOptions o.Common }) "./Build/NuGet.csproj" let toolPackages = let xml = - "./Build/dotnet-cli.csproj" + "./Build/NuGet.csproj" |> Path.getFullName |> XDocument.Load xml.Descendants(XName.Get("PackageReference")) @@ -74,36 +74,38 @@ let restore (o : RestorePackageParams) = { o with ToolPath = nuget } let build = """// generated by dotnet fake run .\Build\setup.fsx // includes by source all of AltCoverFake.DotNet.Testing.AltCover #r "paket: -nuget Fake.Core.Target >= 5.20.1 -nuget Fake.Core.Environment >= 5.20.1 -nuget Fake.Core.Process >= 5.20.1 -nuget Fake.DotNet.AssemblyInfoFile >= 5.20.1 -nuget Fake.DotNet.Cli >= 5.20.1 -nuget Fake.DotNet.FxCop >= 5.20.1 -nuget Fake.DotNet.MSBuild >= 5.20.1 -nuget Fake.DotNet.NuGet >= 5.20.1 -nuget Fake.DotNet.Testing.NUnit >= 5.20.1 -nuget Fake.DotNet.Testing.OpenCover >= 5.20.1 -nuget Fake.DotNet.Testing.XUnit2 >= 5.20.1 -nuget Fake.IO.FileSystem >= 5.20.1 -nuget Fake.DotNet.Testing.Coverlet >= 5.20.1 -nuget Fake.Testing.ReportGenerator >= 5.20.1 -nuget Fake.Tools.Git >= 5.20.1 +nuget Fake.Core.Target >= 5.20.3 +nuget Fake.Core.Environment >= 5.20.3 +nuget Fake.Core.Process >= 5.20.3 +nuget Fake.DotNet.AssemblyInfoFile >= 5.20.3 +nuget Fake.DotNet.Cli >= 5.20.3 +nuget Fake.DotNet.FxCop >= 5.20.3 +nuget Fake.DotNet.MSBuild >= 5.20.3 +nuget Fake.DotNet.NuGet >= 5.20.3 +nuget Fake.DotNet.Testing.NUnit >= 5.20.3 +nuget Fake.DotNet.Testing.OpenCover >= 5.20.3 +nuget Fake.DotNet.Testing.XUnit2 >= 5.20.3 +nuget Fake.IO.FileSystem >= 5.20.3 +nuget Fake.DotNet.Testing.Coverlet >= 5.20.3 +nuget Fake.Testing.ReportGenerator >= 5.20.3 +nuget Fake.Tools.Git >= 5.20.3 nuget AltCode.Fake.DotNet.Gendarme >= 5.18.1.24 nuget BlackFox.CommandLine >= 1.0.0 nuget BlackFox.VsWhere >= 1.1.0 nuget FSharpLint.Core >= 0.16.3 nuget Markdown >= 2.2.1 nuget NUnit >= 3.12.0 +nuget Fuchu >= 1.1.0 +nuget Unquote >= 5.0.0 nuget YamlDotNet >= 8.1.2 //" #r "System.IO.Compression.FileSystem.dll" #r "System.Xml" #r "System.Xml.Linq" -#load "../AltCover/Abstract.fs" -#load "../AltCover/Primitive.fs" -#load "../AltCover/TypeSafe.fs" -#load "../AltCover/AltCover.fs" -#load "../AltCover/Args.fs" +#load "../AltCover.Engine/Abstract.fs" +#load "../AltCover.Engine/Primitive.fs" +#load "../AltCover.Engine/TypeSafe.fs" +#load "../AltCover.Engine/AltCover.fs" +#load "../AltCover.Engine/Args.fs" #load "../AltCover.Fake.DotNet.Testing.AltCover/AltCoverCommand.fs" #load "../AltCover.DotNet/DotNet.fs" #load "../AltCover.Fake/Fake.fs" @@ -136,7 +138,7 @@ _Target "FxCop" (fun _ -> let check t pf (f : string) = let destination = t @@ (f.Substring pf) - printfn "%A" destination + // printfn "%A" destination destination |> File.Exists |> not @@ -146,8 +148,24 @@ _Target "FxCop" (fun _ -> let rules = target @@ "Rules" Shell.copyDir rules dixon (fun _ -> true))) -// Restore the NuGet packages used by the build and the Framework version +// Set up the Visuailzer test data +_Target "AttachReports" ( fun _ -> + let tr = "./Tests.Visualizer/Reports" + Directory.ensure tr + Shell.cleanDir tr + + let sample20 = "./Sample20" |> Path.getFullName + + (!!"./Sample20/Reports/*") + |> Seq.iter (fun f -> + let name = f |> Path.GetFileName + let text = f |> File.ReadAllText + let report = tr @@ name + File.WriteAllText (report, text.Replace(@"C:\temp\", sample20 + "/")) + ) +) +// Restore the NuGet packages used by the build and the Framework version _Target "Preparation" (fun _ -> RestoreMSSolutionPackages restore "./MCS.sln") let defaultTarget() = @@ -157,4 +175,7 @@ let defaultTarget() = "FxCop" =?> ("Preparation", Environment.isWindows) +"AttachReports" +==> "Preparation" + Target.runOrDefault <| defaultTarget() \ No newline at end of file diff --git a/Build/setup.fsx.lock b/Build/setup.fsx.lock index 6f08ab948..c146dae49 100644 --- a/Build/setup.fsx.lock +++ b/Build/setup.fsx.lock @@ -5,99 +5,99 @@ NUGET BlackFox.VsWhere (1.1) FSharp.Core (>= 4.2.3) Microsoft.Win32.Registry (>= 4.7) - Fake.Core.CommandLineParsing (5.20.1) + Fake.Core.CommandLineParsing (5.20.3) FParsec (>= 1.1.1) - FSharp.Core (>= 4.7.1) - Fake.Core.Context (5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Core.Environment (5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Core.FakeVar (5.20.1) - Fake.Core.Context (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Core.Process (5.20.1) - Fake.Core.Environment (>= 5.20.1) - Fake.Core.FakeVar (>= 5.20.1) - Fake.Core.String (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - Fake.IO.FileSystem (>= 5.20.1) - FSharp.Core (>= 4.7.1) - System.Collections.Immutable (>= 1.7) - Fake.Core.SemVer (5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Core.String (5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Core.Target (5.20.1) - Fake.Core.CommandLineParsing (>= 5.20.1) - Fake.Core.Context (>= 5.20.1) - Fake.Core.Environment (>= 5.20.1) - Fake.Core.FakeVar (>= 5.20.1) - Fake.Core.Process (>= 5.20.1) - Fake.Core.String (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - FSharp.Control.Reactive (>= 4.2) - FSharp.Core (>= 4.7.1) - Fake.Core.Tasks (5.20.1) - Fake.Core.Trace (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Core.Trace (5.20.1) - Fake.Core.Environment (>= 5.20.1) - Fake.Core.FakeVar (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Core.Xml (5.20.1) - Fake.Core.String (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.DotNet.Cli (5.20.1) - Fake.Core.Environment (>= 5.20.1) - Fake.Core.Process (>= 5.20.1) - Fake.Core.String (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - Fake.DotNet.MSBuild (>= 5.20.1) - Fake.DotNet.NuGet (>= 5.20.1) - Fake.IO.FileSystem (>= 5.20.1) - FSharp.Core (>= 4.7.1) + FSharp.Core (>= 4.7.2) + Fake.Core.Context (5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Core.Environment (5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Core.FakeVar (5.20.3) + Fake.Core.Context (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Core.Process (5.20.3) + Fake.Core.Environment (>= 5.20.3) + Fake.Core.FakeVar (>= 5.20.3) + Fake.Core.String (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + Fake.IO.FileSystem (>= 5.20.3) + FSharp.Core (>= 4.7.2) + System.Collections.Immutable (>= 1.7.1) + Fake.Core.SemVer (5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Core.String (5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Core.Target (5.20.3) + Fake.Core.CommandLineParsing (>= 5.20.3) + Fake.Core.Context (>= 5.20.3) + Fake.Core.Environment (>= 5.20.3) + Fake.Core.FakeVar (>= 5.20.3) + Fake.Core.Process (>= 5.20.3) + Fake.Core.String (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + FSharp.Control.Reactive (>= 4.4.2) + FSharp.Core (>= 4.7.2) + Fake.Core.Tasks (5.20.3) + Fake.Core.Trace (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Core.Trace (5.20.3) + Fake.Core.Environment (>= 5.20.3) + Fake.Core.FakeVar (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Core.Xml (5.20.3) + Fake.Core.String (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.DotNet.Cli (5.20.3) + Fake.Core.Environment (>= 5.20.3) + Fake.Core.Process (>= 5.20.3) + Fake.Core.String (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + Fake.DotNet.MSBuild (>= 5.20.3) + Fake.DotNet.NuGet (>= 5.20.3) + Fake.IO.FileSystem (>= 5.20.3) + FSharp.Core (>= 4.7.2) Mono.Posix.NETStandard (>= 1.0) Newtonsoft.Json (>= 12.0.3) - Fake.DotNet.MSBuild (5.20.1) - BlackFox.VsWhere (>= 1.0) - Fake.Core.Environment (>= 5.20.1) - Fake.Core.Process (>= 5.20.1) - Fake.Core.String (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - Fake.IO.FileSystem (>= 5.20.1) - FSharp.Core (>= 4.7.1) - MSBuild.StructuredLogger (>= 2.1.117) - Fake.DotNet.NuGet (5.20.1) - Fake.Core.Environment (>= 5.20.1) - Fake.Core.Process (>= 5.20.1) - Fake.Core.SemVer (>= 5.20.1) - Fake.Core.String (>= 5.20.1) - Fake.Core.Tasks (>= 5.20.1) - Fake.Core.Trace (>= 5.20.1) - Fake.Core.Xml (>= 5.20.1) - Fake.IO.FileSystem (>= 5.20.1) - Fake.Net.Http (>= 5.20.1) - FSharp.Core (>= 4.7.1) + Fake.DotNet.MSBuild (5.20.3) + BlackFox.VsWhere (>= 1.1) + Fake.Core.Environment (>= 5.20.3) + Fake.Core.Process (>= 5.20.3) + Fake.Core.String (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + Fake.IO.FileSystem (>= 5.20.3) + FSharp.Core (>= 4.7.2) + MSBuild.StructuredLogger (>= 2.1.176) + Fake.DotNet.NuGet (5.20.3) + Fake.Core.Environment (>= 5.20.3) + Fake.Core.Process (>= 5.20.3) + Fake.Core.SemVer (>= 5.20.3) + Fake.Core.String (>= 5.20.3) + Fake.Core.Tasks (>= 5.20.3) + Fake.Core.Trace (>= 5.20.3) + Fake.Core.Xml (>= 5.20.3) + Fake.IO.FileSystem (>= 5.20.3) + Fake.Net.Http (>= 5.20.3) + FSharp.Core (>= 4.7.2) Newtonsoft.Json (>= 12.0.3) - NuGet.Protocol (>= 5.5.1) - Fake.IO.FileSystem (5.20.1) - Fake.Core.String (>= 5.20.1) - FSharp.Core (>= 4.7.1) - Fake.Net.Http (5.20.1) - Fake.Core.Trace (>= 5.20.1) - FSharp.Core (>= 4.7.1) + NuGet.Protocol (>= 5.6) + Fake.IO.FileSystem (5.20.3) + Fake.Core.String (>= 5.20.3) + FSharp.Core (>= 4.7.2) + Fake.Net.Http (5.20.3) + Fake.Core.Trace (>= 5.20.3) + FSharp.Core (>= 4.7.2) FParsec (1.1.1) FSharp.Core (>= 4.3.4) - FSharp.Control.Reactive (4.4) - FSharp.Core (>= 4.7) - System.Reactive (>= 4.3.2) + FSharp.Control.Reactive (4.4.2) + FSharp.Core (>= 4.7.2) + System.Reactive (>= 4.4.1) FSharp.Core (4.7.2) - Microsoft.Build (16.6) - Microsoft.Build.Framework (16.6) + Microsoft.Build (16.7) + Microsoft.Build.Framework (16.7) System.Security.Permissions (>= 4.7) - Microsoft.Build.Tasks.Core (16.6) - Microsoft.Build.Framework (>= 16.6) - Microsoft.Build.Utilities.Core (>= 16.6) + Microsoft.Build.Tasks.Core (16.7) + Microsoft.Build.Framework (>= 16.7) + Microsoft.Build.Utilities.Core (>= 16.7) Microsoft.Win32.Registry (>= 4.3) System.CodeDom (>= 4.4) System.Collections.Immutable (>= 1.5) @@ -106,14 +106,19 @@ NUGET System.Resources.Extensions (>= 4.6) System.Security.Permissions (>= 4.7) System.Threading.Tasks.Dataflow (>= 4.9) - Microsoft.Build.Utilities.Core (16.6) - Microsoft.Build.Framework (>= 16.6) + Microsoft.Build.Tasks.Git (1.0) + Microsoft.Build.Utilities.Core (16.7) + Microsoft.Build.Framework (>= 16.7) Microsoft.Win32.Registry (>= 4.3) System.Collections.Immutable (>= 1.5) System.Security.Permissions (>= 4.7) System.Text.Encoding.CodePages (>= 4.0.1) - Microsoft.NETCore.Platforms (3.1.1) + Microsoft.NETCore.Platforms (3.1.3) Microsoft.NETCore.Targets (3.1) + Microsoft.SourceLink.Common (1.0) + Microsoft.SourceLink.GitHub (1.0) + Microsoft.Build.Tasks.Git (>= 1.0) + Microsoft.SourceLink.Common (>= 1.0) Microsoft.Win32.Primitives (4.3) Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Targets (>= 1.1) @@ -124,36 +129,35 @@ NUGET System.Security.AccessControl (>= 4.7) System.Security.Principal.Windows (>= 4.7) Mono.Posix.NETStandard (1.0) - MSBuild.StructuredLogger (2.1.133) + MSBuild.StructuredLogger (2.1.176) Microsoft.Build (>= 16.4) Microsoft.Build.Framework (>= 16.4) Microsoft.Build.Tasks.Core (>= 16.4) Microsoft.Build.Utilities.Core (>= 16.4) - System.IO.Compression (>= 4.3) + Microsoft.SourceLink.GitHub (>= 1.0) Newtonsoft.Json (12.0.3) - NuGet.Common (5.6) - NuGet.Frameworks (>= 5.6) + NuGet.Common (5.7) + NuGet.Frameworks (>= 5.7) System.Diagnostics.Process (>= 4.3) System.Threading.Thread (>= 4.3) - NuGet.Configuration (5.6) - NuGet.Common (>= 5.6) + NuGet.Configuration (5.7) + NuGet.Common (>= 5.7) System.Security.Cryptography.ProtectedData (>= 4.3) - NuGet.Frameworks (5.6) - NuGet.Packaging (5.6) + NuGet.Frameworks (5.7) + NuGet.Packaging (5.7) Newtonsoft.Json (>= 9.0.1) - NuGet.Configuration (>= 5.6) - NuGet.Versioning (>= 5.6) + NuGet.Configuration (>= 5.7) + NuGet.Versioning (>= 5.7) System.Dynamic.Runtime (>= 4.3) - NuGet.Protocol (5.6) - NuGet.Packaging (>= 5.6) + System.Security.Cryptography.Cng (>= 5.0.0-preview.3.20214.6) + System.Security.Cryptography.Pkcs (>= 5.0.0-preview.3.20214.6) + NuGet.Protocol (5.7) + NuGet.Packaging (>= 5.7) System.Dynamic.Runtime (>= 4.3) - NuGet.Versioning (5.6) + NuGet.Versioning (5.7) runtime.native.System (4.3.1) Microsoft.NETCore.Platforms (>= 1.1.1) Microsoft.NETCore.Targets (>= 1.1.3) - runtime.native.System.IO.Compression (4.3.2) - Microsoft.NETCore.Platforms (>= 1.1.1) - Microsoft.NETCore.Targets (>= 1.1.3) System.Buffers (4.5.1) System.CodeDom (4.7) System.Collections (4.3) @@ -203,6 +207,9 @@ NUGET System.Runtime (>= 4.3) System.Runtime.Extensions (>= 4.3) System.Threading (>= 4.3) + System.Formats.Asn1 (5.0.0-preview.8.20407.11) + System.Buffers (>= 4.5.1) + System.Memory (>= 4.5.4) System.Globalization (4.3) Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Targets (>= 1.1) @@ -213,22 +220,6 @@ NUGET System.Runtime (>= 4.3) System.Text.Encoding (>= 4.3) System.Threading.Tasks (>= 4.3) - System.IO.Compression (4.3) - Microsoft.NETCore.Platforms (>= 1.1) - runtime.native.System (>= 4.3) - runtime.native.System.IO.Compression (>= 4.3) - System.Buffers (>= 4.3) - System.Collections (>= 4.3) - System.Diagnostics.Debug (>= 4.3) - System.IO (>= 4.3) - System.Resources.ResourceManager (>= 4.3) - System.Runtime (>= 4.3) - System.Runtime.Extensions (>= 4.3) - System.Runtime.Handles (>= 4.3) - System.Runtime.InteropServices (>= 4.3) - System.Text.Encoding (>= 4.3) - System.Threading (>= 4.3) - System.Threading.Tasks (>= 4.3) System.IO.FileSystem (4.3) Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Targets (>= 1.1) @@ -332,6 +323,12 @@ NUGET System.Runtime (>= 4.3) System.Security.AccessControl (4.7) System.Security.Principal.Windows (>= 4.7) + System.Security.Cryptography.Cng (5.0.0-preview.8.20407.11) + System.Security.Cryptography.Pkcs (5.0.0-preview.8.20407.11) + System.Buffers (>= 4.5.1) + System.Formats.Asn1 (>= 5.0.0-preview.8.20407.11) + System.Memory (>= 4.5.4) + System.Security.Cryptography.Cng (>= 5.0.0-preview.8.20407.11) System.Security.Cryptography.ProtectedData (4.7) System.Memory (>= 4.5.3) System.Security.Permissions (4.7) diff --git a/Build/targets.fsx b/Build/targets.fsx index f926c2a67..a0c459288 100644 --- a/Build/targets.fsx +++ b/Build/targets.fsx @@ -1,4 +1,3 @@ -// dir -Recurse *ssemblyAttributes.cs | % { del -Force $_.FullName } // Downloads/docker-machine-Windows-x86_64 create --driver virtualbox open System @@ -29,6 +28,7 @@ open Fake.Tools.Git open FSharpLint.Application open FSharpLint.Framework open NUnit.Framework +open Swensen.Unquote let Copyright = ref String.Empty let Version = ref String.Empty @@ -37,22 +37,20 @@ let consoleBefore = (Console.ForegroundColor, Console.BackgroundColor) let AltCoverFilter(p : Primitive.PrepareOptions) = { p with MethodFilter = "WaitForExitCustom" :: (p.MethodFilter |> Seq.toList) - AssemblyExcludeFilter = "Tests" :: (p.AssemblyExcludeFilter |> Seq.toList) AssemblyFilter = [ @"\.DataCollector"; "Sample" ] @ (p.AssemblyFilter |> Seq.toList) LocalSource = true TypeFilter = - [ @"System\."; @"Sample3\.Class2"; "Microsoft"; "ICSharpCode" ] @ (p.TypeFilter |> Seq.toList) } + [ @"System\."; @"Sample3\.Class2"; "Microsoft"; "ICSharpCode"; "UnitTestStub" ] @ (p.TypeFilter |> Seq.toList) } let AltCoverFilterTypeSafe(p : TypeSafe.PrepareOptions) = { p with MethodFilter = [TypeSafe.Raw "WaitForExitCustom"] |> p.MethodFilter.Join - AssemblyExcludeFilter = [ TypeSafe.Raw "Tests"] |> p.AssemblyExcludeFilter.Join AssemblyFilter = [ @"\.DataCollector"; "Sample" ] |> Seq.map TypeSafe.Raw |> p.AssemblyFilter.Join LocalSource = TypeSafe.Set TypeFilter = - [ @"System\."; @"Sample3\.Class2"; "Microsoft"; "ICSharpCode" ] + [ @"System\."; @"Sample3\.Class2"; "Microsoft"; "ICSharpCode"; "UnitTestStub"; "SolutionRoot" ] |> Seq.map TypeSafe.Raw |> p.TypeFilter.Join } @@ -62,28 +60,26 @@ let AltCoverApiFilter(p : Primitive.PrepareOptions) = AssemblyFilter = [ "?^AltCover\." ] @ (p.AssemblyFilter |> Seq.toList) LocalSource = true TypeFilter = - [ @"System\."; @"Sample3\.Class2"; "Microsoft"; "ICSharpCode"; " Seq.toList) } + [ @"System\."; @"Sample3\.Class2"; "Microsoft"; "ICSharpCode"; " Seq.toList) } let AltCoverFilterX(p : Primitive.PrepareOptions) = { p with MethodFilter = "WaitForExitCustom" :: (p.MethodFilter |> Seq.toList) - AssemblyExcludeFilter = "Tests" :: (p.AssemblyExcludeFilter |> Seq.toList) AssemblyFilter = [ @"\.DataCollector"; "Sample" ] @ (p.AssemblyFilter |> Seq.toList) LocalSource = true TypeFilter = - [ @"System\."; @"Sample3\.Class2"; "Tests"; "Microsoft"; "ICSharpCode"; " Seq.toList) } let AltCoverFilterXTypeSafe(p : TypeSafe.PrepareOptions) = { p with MethodFilter = [TypeSafe.Raw "WaitForExitCustom"] |> p.MethodFilter.Join - AssemblyExcludeFilter = [ TypeSafe.Raw "Tests"] |> p.AssemblyExcludeFilter.Join AssemblyFilter = [ @"\.DataCollector"; "Sample" ] |> Seq.map TypeSafe.Raw |> p.AssemblyFilter.Join LocalSource = TypeSafe.Set TypeFilter = - [ @"System\."; @"Sample3\.Class2"; "Tests"; "Microsoft"; "ICSharpCode" ] + [ @"System\."; @"Sample3\.Class2"; "Microsoft"; "ICSharpCode"; "UnitTestStub"; "SolutionRoot" ] |> Seq.map TypeSafe.Raw |> p.TypeFilter.Join } @@ -156,7 +152,7 @@ let pwsh = let toolPackages = let xml = - "./Build/dotnet-cli.csproj" + "./Build/NuGet.csproj" |> Path.getFullName |> XDocument.Load xml.Descendants(XName.Get("PackageReference")) @@ -174,6 +170,9 @@ let openCoverConsole = let nunitConsole = ("./packages/" + (packageVersion "NUnit.ConsoleRunner") + "/tools/nunit3-console.exe") |> Path.getFullName +let xmldoc2cmdletdoc = + ("./packages/" + (packageVersion "XmlDoc2CmdletDoc") + "/tools/netcoreapp2.1/XmlDoc2CmdletDoc.dll") + |> Path.getFullName let cliArguments = { MSBuild.CliArguments.Create() with @@ -198,7 +197,7 @@ let NuGetAltCover = toolPackages |> Seq.filter (fun kv -> kv.Key = "altcover") |> Seq.map (fun _ -> - ("./packages/" + (packageVersion "altcover") + "/tools/net45/AltCover.exe") + ("./packages/" + (packageVersion "altcover") + "/tools/net472/AltCover.exe") |> Path.getFullName) |> Seq.filter File.Exists |> Seq.tryHead @@ -270,9 +269,19 @@ let uncovered (path : string) = (f |> Path.GetDirectoryName |> Path.GetFileName) numeric + // if numeric > 0 then + // printfn "%A" xml numeric)) |> Seq.toList +let coverageSummary _ = + let numbers = uncovered "_Reports/_Unit*/Summary.xml" + if numbers + |> List.tryFind (fun n -> n > 0) + |> Option.isSome + || !misses > 1 + then Assert.Fail("Coverage is too low") + let msbuildRelease proj = MSBuild.build (fun p -> { p with @@ -298,12 +307,12 @@ let msbuildDebug proj = let dotnetBuildRelease proj = DotNet.build (fun p -> { p.WithCommon dotnetOptions with Configuration = DotNet.BuildConfiguration.Release } - |> buildWithCLIArguments) proj + |> buildWithCLIArguments) (Path.GetFullPath proj) let dotnetBuildDebug proj = DotNet.build (fun p -> { p.WithCommon dotnetOptions with Configuration = DotNet.BuildConfiguration.Debug } - |> buildWithCLIArguments) proj + |> buildWithCLIArguments) (Path.GetFullPath proj) // Information.getCurrentHash() let commitHash = Information.getCurrentSHA1 (".") @@ -321,6 +330,13 @@ _Target "RebuildPaketLock" ignore _Target "Preparation" ignore +_Target "PreClean" (fun _ -> +// dir -Recurse *ssemblyAttributes.cs | % { del -Force $_.FullName } + !!"**/*ssemblyAttributes.cs" + |> Seq.map Path.GetFullPath + |> Seq.toList + |> List.iter File.delete) + _Target "Clean" (fun _ -> printfn "Cleaning the build and deploy folders" Actions.Clean()) @@ -345,7 +361,7 @@ _Target "SetVersion" (fun _ -> Copyright := "Copyright " + copy Directory.ensure "./_Generated" - Shell.copyFile "./AltCover/Abstract.fs" "./AltCover/Abstract.fsi" + Shell.copyFile "./AltCover.Engine/Abstract.fsi" "./AltCover.Engine/Abstract.fs" Actions.InternalsVisibleTo(!Version) let v' = !Version @@ -381,13 +397,12 @@ module SolutionRoot = if File.Exists(path) then File.ReadAllText(path) else String.Empty if not (old.Equals(hack)) then File.WriteAllText(path, hack) - [ "./AltCover.Recorder/altcover.recorder.core.fsproj" // net20 resgen - "./AltCover.Shadow/altcover.shadow.core.fsproj" // net20 resgen - "./Recorder.Tests/altcover.recorder.tests.core.fsproj" - "./AltCover.Avalonia/altcover.avalonia.fsproj" + [ "./AltCover.Recorder/AltCover.Recorder.fsproj" // net20 resgen ?? https://docs.microsoft.com/en-us/visualstudio/msbuild/generateresource-task?view=vs-2019 + "./Recorder.Tests/AltCover.Recorder.Tests.fsproj" + "./AltCover.Avalonia/AltCover.Avalonia.fsproj" "./AltCover.Avalonia.FuncUI/AltCover.Avalonia.FuncUI.fsproj" - "./AltCover.Visualizer/altcover.visualizer.core.fsproj" // GAC - "./Tests.Visualizer/altcover.visualizer.tests.core.fsproj" ] + "./AltCover.Visualizer/AltCover.Visualizer.fsproj" // GAC + "./Tests.Visualizer/AltCover.Visualizer.Tests.fsproj" ] |> Seq.iter (fun f -> let dir = Path.GetDirectoryName f let proj = Path.GetFileName f @@ -399,9 +414,43 @@ _Target "Compilation" ignore _Target "BuildRelease" (fun _ -> try - [ "./altcover.recorder.core.sln"; "./altcover.visualizer.core.sln"; "MCS.sln" ] |> Seq.iter msbuildRelease // gac+net20; mono - - [ "./altcover.core.sln" ] |> Seq.iter dotnetBuildRelease + [ "./AltCover.Recorder.sln"; "./AltCover.Visualizer.sln"; "MCS.sln" ] |> Seq.iter msbuildRelease // gac+net20; mono + + [ "./AltCover.sln" ] |> Seq.iter dotnetBuildRelease + + // document cmdlets ahead of packaging + let packages = + let xml = + "./AltCover.PowerShell/AltCover.PowerShell.fsproj" + |> Path.getFullName + |> XDocument.Load + xml.Descendants(XName.Get("PackageReference")) + |> Seq.map + (fun x -> + let incl = x.Attribute(XName.Get("Include")) + let update = x.Attribute(XName.Get("Update")) + let version = x.Attribute(XName.Get("Version")).Value + if incl |> isNull + then (update.Value, version) + else (incl.Value, version)) + |> Map.ofSeq + let packageVersionPart (p : string) = nugetCache + + "/" + p.ToLowerInvariant() + "/" + (packages.Item p) + + "/lib/netstandard2.0/" + + Shell.copyFile + ("./_Binaries/AltCover.PowerShell/Release+AnyCPU/netstandard2.0/FSharp.Core.dll") + ((packageVersionPart "FSharp.Core") + "FSharp.Core.dll") + Shell.copyFile + ("./_Binaries/AltCover.PowerShell/Release+AnyCPU/netstandard2.0/System.Management.Automation.dll") + ((packageVersionPart "PowerShellStandard.Library") + "System.Management.Automation.dll") + + let cmdlets = "./_Binaries/AltCover.PowerShell/Release+AnyCPU/netstandard2.0/AltCover.PowerShell.dll" + |> Path.getFullName + if Environment.isWindows then // the Jolt comment reader library is sadly windows/fullframework bound + Actions.RunDotnet dotnetOptions "" + ("--roll-forward Major " + xmldoc2cmdletdoc + " -strict " + cmdlets) + "documenting cmdlets" with x -> printfn "%A" x reraise()) @@ -418,14 +467,14 @@ _Target "BuildDebug" (fun _ -> Shell.copyFile "/tmp/.AltCover_SourceLink/Sample14.SourceLink.Class3.cs" "./Sample14/Sample14/Class3.txt" - [ "./altcover.recorder.core.sln"; "./altcover.visualizer.core.sln"; "MCS.sln" ] |> Seq.iter msbuildDebug // gac+net20; mono + [ "./AltCover.Recorder.sln"; "./AltCover.Visualizer.sln"; "MCS.sln" ] |> Seq.iter msbuildDebug // gac+net20; mono - [ "./altcover.core.sln"; "./Sample14/Sample14.sln" ] |> Seq.iter dotnetBuildDebug + [ "./AltCover.sln"; "./Sample14/Sample14.sln" ] |> Seq.iter dotnetBuildDebug Shell.copy "./_SourceLink" (!!"./Sample14/Sample14/bin/Debug/netcoreapp2.1/*")) _Target "BuildMonoSamples" (fun _ -> - [ "./Sample8/sample8.core.csproj" ] |> Seq.iter dotnetBuildDebug // build to embed on non-Windows + [ "./Sample8/Sample8.csproj" ] |> Seq.iter dotnetBuildDebug // build to embed on non-Windows let mcs = "_Binaries/MCS/Release+AnyCPU/MCS.exe" [ ("./_Mono/Sample1", @@ -456,7 +505,7 @@ _Target "Lint" (fun _ -> { Lint.OptionalLintParameters.Default with Configuration = FromFile(Path.getFullName "./fsharplint.json") } - [ + [ !!"**/*.fsproj" |> Seq.collect (fun n -> !!(Path.GetDirectoryName n @@ "*.fs")) |> Seq.distinct; @@ -469,13 +518,7 @@ _Target "Lint" (fun _ -> | Lint.LintResult.Failure x -> failwithf "%A" x | Lint.LintResult.Success w -> w - |> Seq.filter (fun x -> - match x.Details.SuggestedFix with - | Some l -> - match l.Force() with - | Some fix -> fix.FromText <> "AltCover_Fake" // special case - | _ -> false - | _ -> false)) + |> Seq.filter (fun x -> x.Details.SuggestedFix |> Option.isSome)) |> Seq.fold (fun _ x -> printfn "Info: %A\r\n Range: %A\r\n Fix: %A\r\n====" x.Details.Message x.Details.Range x.Details.SuggestedFix @@ -490,24 +533,26 @@ _Target "Gendarme" (fun _ -> // Needs debug because release is compiled --standa Directory.ensure "./_Reports" [ ("./Build/common-rules.xml", - [ "_Binaries/AltCover.NetCoreApp/Debug+AnyCPU/netcoreapp2.0/AltCover.NetCoreApp.dll" + [ "_Binaries/AltCover.Engine/Debug+AnyCPU/netstandard2.0/AltCover.Engine.dll" "_Binaries/AltCover/Debug+AnyCPU/netcoreapp2.0/AltCover.dll" - "_Binaries/AltCover.Shadow/Debug+AnyCPU/netstandard2.0/AltCover.Shadow.dll" + "_Binaries/AltCover.Recorder/Debug+AnyCPU/net20/AltCover.Recorder.dll" "_Binaries/AltCover.PowerShell/Debug+AnyCPU/netstandard2.0/AltCover.PowerShell.dll" "_Binaries/AltCover.Fake/Debug+AnyCPU/netstandard2.0/AltCover.Fake.dll" "_Binaries/AltCover.DotNet/Debug+AnyCPU/netstandard2.0/AltCover.DotNet.dll" "_Binaries/AltCover.Toolkit/Debug+AnyCPU/netstandard2.0/AltCover.Toolkit.dll" "_Binaries/AltCover.UICommon/Debug+AnyCPU/netstandard2.0/AltCover.UICommon.dll" - "_Binaries/AltCover.Visualizer/Debug+AnyCPU/netcoreapp2.1/AltCover.Visualizer.dll" + "_Binaries/AltCover.Visualizer/Debug+AnyCPU/netcoreapp2.1/AltCover.Visualizer.dll" // GTK3 (obsolete) "_Binaries/AltCover.Fake.DotNet.Testing.AltCover/Debug+AnyCPU/netstandard2.0/AltCover.Fake.DotNet.Testing.AltCover.dll" ]) ("./Build/common-rules.xml", - [ "_Binaries/AltCover.Visualizer/Debug+AnyCPU/net45/AltCover.Visualizer.exe" ]) -// ("./Build/common-rules.xml", + [ "_Binaries/AltCover/Debug+AnyCPU/netcoreapp2.1/AltCover.dll" // global tool build + "_Binaries/AltCover.Visualizer/Debug+AnyCPU/net472/AltCover.Visualizer.exe" ]) // GTK2 +// ("./Build/common-rules.xml", // Avalonia generated code breaks everything // [ "_Binaries/AltCover.Visualizer.Avalonia/Debug+AnyCPU/netcoreapp2.1/AltCover.Visualizer.dll" ]) // ("./Build/common-rules.xml", // [ "_Binaries/AltCover.Visualizer.FuncUI/Debug+AnyCPU/netcoreapp3.0/AltCover.Visualizer.dll" ]) ("./Build/csharp-rules.xml", [ "_Binaries/AltCover.DataCollector/Debug+AnyCPU/netstandard2.0/AltCover.DataCollector.dll" + "_Binaries/AltCover.FontSupport/Debug+AnyCPU/netstandard2.0/AltCover.FontSupport.dll" "_Binaries/AltCover.Cake/Debug+AnyCPU/netstandard2.0/AltCover.Cake.dll" ]) ] |> Seq.iter (fun (ruleset, files) -> Gendarme.run @@ -611,41 +656,48 @@ _Target "FxCop" (fun _ -> standardRules ] - [ ([ "_Binaries/AltCover.NetCoreApp/Debug+AnyCPU/net45/AltCover.NetCoreApp.exe" - "_Binaries/AltCover.DataCollector/Debug+AnyCPU/net46/AltCover.DataCollector.dll" ], // TODO netcore support + [ ( + (if String.IsNullOrEmpty(Environment.environVar "APPVEYOR_BUILD_VERSION") + then + [ "_Binaries/AltCover.FontSupport/Debug+AnyCPU/net472/AltCover.FontSupport.dll" + "_Binaries/AltCover/Debug+AnyCPU/net472/AltCover.exe" + "_Binaries/AltCover.DataCollector/Debug+AnyCPU/net472/AltCover.DataCollector.dll" ] + else // HACK HACK HACK + [ "_Binaries/AltCover/Debug+AnyCPU/net472/AltCover.exe" + "_Binaries/AltCover.DataCollector/Debug+AnyCPU/net472/AltCover.DataCollector.dll" ]), // TODO netcore support [], standardRules) - ([ "_Binaries/AltCover.Fake/Debug+AnyCPU/net46/AltCover.Fake.dll" ], + ([ "_Binaries/AltCover.Fake/Debug+AnyCPU/net472/AltCover.Fake.dll" ], [], List.concat [ defaultRules cantStrongName // can't strongname this as Fake isn't strongnamed ]) - ([ "_Binaries/AltCover.Fake.DotNet.Testing.AltCover/Debug+AnyCPU/net462/AltCover.Fake.DotNet.Testing.AltCover.dll" ], + ([ "_Binaries/AltCover.Fake.DotNet.Testing.AltCover/Debug+AnyCPU/net472/AltCover.Fake.DotNet.Testing.AltCover.dll" ], [], defaultRules) - ([ "_Binaries/AltCover.Cake/Debug+AnyCPU/net46/AltCover.Cake.dll" + ([ "_Binaries/AltCover.Cake/Debug+AnyCPU/net472/AltCover.Cake.dll" ], [], List.concat [ defaultCSharpRules cantStrongName // can't strongname this as Cake isn't strongnamed ]) - ([ "_Binaries/AltCover.Toolkit/Debug+AnyCPU/net45/AltCover.Toolkit.dll" - "_Binaries/AltCover.DotNet/Debug+AnyCPU/net45/AltCover.DotNet.dll"], + ([ "_Binaries/AltCover.Toolkit/Debug+AnyCPU/net472/AltCover.Toolkit.dll" + "_Binaries/AltCover.DotNet/Debug+AnyCPU/net472/AltCover.DotNet.dll"], [], defaultRules) - ([ "_Binaries/AltCover.PowerShell/Debug+AnyCPU/net47/AltCover.PowerShell.dll" ], + ([ "_Binaries/AltCover.PowerShell/Debug+AnyCPU/net472/AltCover.PowerShell.dll" ], [], defaultRules) - ([ "_Binaries/AltCover.UICommon/Debug+AnyCPU/net45/AltCover.UICommon.dll" - "_Binaries/AltCover.Visualizer/Debug+AnyCPU/net45/AltCover.Visualizer.exe"], + ([ "_Binaries/AltCover.UICommon/Debug+AnyCPU/net472/AltCover.UICommon.dll" + "_Binaries/AltCover.Visualizer/Debug+AnyCPU/net472/AltCover.Visualizer.exe"], [], defaultRules) - ([ "_Binaries/AltCover.Shadow/Debug+AnyCPU/net20/AltCover.Shadow.dll" ], + ([ "_Binaries/AltCover.Recorder/Debug+AnyCPU/net20/AltCover.Recorder.dll" ], [], "-Microsoft.Naming#CA1703:ResourceStringsShouldBeSpelledCorrectly" :: defaultRules) // Esperanto resources in-line - ([ "_Binaries/AltCover/Debug+AnyCPU/net45/AltCover.exe" ], + ([ "_Binaries/AltCover.Engine/Debug+AnyCPU/net472/AltCover.Engine.dll" ], [], List.concat [ defaultRules @@ -674,7 +726,7 @@ _Target "FxCop" (fun _ -> reraise()) try - [ "_Binaries/AltCover.PowerShell/Debug+AnyCPU/net47/AltCover.PowerShell.dll" ] + [ "_Binaries/AltCover.PowerShell/Debug+AnyCPU/net472/AltCover.PowerShell.dll" ] |> FxCop.run { FxCop.Params.Create() with WorkingDirectory = "." @@ -691,7 +743,16 @@ _Target "FxCop" (fun _ -> reraise()) // Unit Test -_Target "UnitTest" ignore +_Target "UnitTest" (fun _ -> + + printfn "Dump uncovered lines" + CreateProcess.fromRawCommand pwsh [ "-NoProfile"; "./Build/dump-uncovered.ps1" ] + |> CreateProcess.withWorkingDirectory "." + |> Proc.run + |> (Actions.AssertResult "pwsh") + + coverageSummary()) + _Target "UncoveredUnitTest" ignore _Target "JustUnitTest" (fun _ -> @@ -706,7 +767,7 @@ _Target "JustUnitTest" (fun _ -> WorkingDir = "." ResultSpecs = [ "./_Reports/JustUnitTestReport.xml" ] }) - !!(@"_Binaries/AltCover.Recorder.Tests/Debug+AnyCPU/net47/AltCover.Recorder.Tests.dll") + !!(@"_Binaries/AltCover.Recorder.Tests/Debug+AnyCPU/net472/AltCover.Recorder.Tests.dll") |> NUnit3.run (fun p -> { p with ToolPath = nunitConsole @@ -724,8 +785,10 @@ _Target "JustUnitTest" (fun _ -> reraise()) _Target "BuildForUnitTestDotNet" (fun _ -> - !!(@"./*Tests/*tests.core.fsproj") - |> Seq.filter (fun s -> s.Contains("visualizer") |> not) + msbuildDebug "./Recorder.Tests/AltCover.Recorder.Tests.fsproj" + + !!(@"./*Test*/*Tests.fsproj") + |> Seq.filter (fun s -> s.Contains("Recorder") |> not) // net20 |> Seq.iter (DotNet.build (fun p -> { p.WithCommon dotnetOptions with @@ -736,7 +799,7 @@ _Target "BuildForUnitTestDotNet" (fun _ -> _Target "UnitTestDotNet" (fun _ -> Directory.ensure "./_Reports" try - !!(@"./*Tests/*tests.core.fsproj") + !!(@"./*Test*/*Tests.fsproj") |> Seq.iter (DotNet.test (fun p -> { p.WithCommon dotnetOptions with @@ -749,8 +812,13 @@ _Target "UnitTestDotNet" (fun _ -> reraise()) _Target "BuildForCoverlet" (fun _ -> - !!(@"./*Tests/*tests.core.fsproj") - |> Seq.filter (fun s -> s.Contains("visualizer") |> not) // incomplete + msbuildDebug "./Recorder.Tests/AltCover.Recorder.Tests.fsproj" + let l = !!(@"./*Tests/*Tests.fsproj") + |> Seq.filter (fun s -> s.Contains("Visualizer") |> not // incomplete + && s.Contains("Recorder") |> not) // net20 + |> Seq.toList + + ("./ValidateGendarmeEmulation/AltCover.ValidateGendarmeEmulation.fsproj" :: l) |> Seq.iter (DotNet.build (fun p -> { p.WithCommon dotnetOptions with @@ -761,9 +829,12 @@ _Target "BuildForCoverlet" (fun _ -> _Target "UnitTestDotNetWithCoverlet" (fun _ -> Directory.ensure "./_Reports" try + let l = !!(@"./*Tests/*Tests.fsproj") + |> Seq.filter (fun s -> s.Contains("Visualizer") |> not) // incomplete + |> Seq.toList + let xml = - !!(@"./*Tests/*tests.core.fsproj") - |> Seq.filter (fun s -> s.Contains("visualizer") |> not) // incomplete + ("./ValidateGendarmeEmulation/AltCover.ValidateGendarmeEmulation.fsproj" :: l) |> Seq.fold (fun l f -> let here = Path.GetDirectoryName f let tr = here @@ "TestResults" @@ -808,13 +879,14 @@ _Target "UnitTestDotNetWithCoverlet" (fun _ -> _Target "UnitTestWithOpenCover" (fun _ -> Directory.ensure "./_Reports/_UnitTestWithOpenCover" - let testFiles = - !!(@"_Binaries/*Test*/Debug+AnyCPU/net4*/AltCover*Test*.dll") - |> Seq.filter (fun f -> Path.GetFileName(f) <> "AltCover.Fake.DotNet.Testing.AltCover.dll") - |> Seq.filter (fun f -> Path.GetFileName(f) <> "AltCover.Recorder.Tests.dll") - |> Seq.filter (fun s -> s.Contains("Visualizer") |> not) // incomplete + let testFiles = "./_Binaries/AltCover.ValidateGendarmeEmulation/Debug+AnyCPU/net472/AltCover.ValidateGendarmeEmulation.dll" :: + (!!(@"_Binaries/*Test*/Debug+AnyCPU/net472/AltCover*Test*.dll") + |> Seq.filter (fun f -> Path.GetFileName(f) <> "AltCover.Fake.DotNet.Testing.AltCover.dll") + |> Seq.filter (fun f -> Path.GetFileName(f) <> "AltCover.Recorder.Tests.dll") + |> Seq.filter (fun f -> Path.GetFileName(f) <> "AltCover.Tests.Visualizer.dll") + |> Seq.toList) - let Recorder4Files = !!(@"_Binaries/*Tests/Debug+AnyCPU/net47/*Recorder.Tests.dll") + let Recorder4Files = !!(@"_Binaries/*Tests/Debug+AnyCPU/net472/*Recorder.Tests.dll") let RecorderFiles = !!(@"_Binaries/*Tests/Debug+AnyCPU/net20/AltCover*Test*.dll") let coverage = Path.getFullName "_Reports/UnitTestWithOpenCover.xml" @@ -828,7 +900,7 @@ _Target "UnitTestWithOpenCover" (fun _ -> ExePath = openCoverConsole TestRunnerExePath = nunitConsole Filter = - "+[AltCover]* +[AltCover.Recorder]* +[AltCover.Runner]* +[AltCover.WeakName.Testing]Alt* +[AltCover.Toolkit]* +[AltCover.DotNet]* -[*]AltCover.SolutionRoot -[*]Microsoft.* -[*]System.* -[Sample*]* -[*]ICSharpCode.*" + "+[AltCover]* +[AltCover.*]* -[*]Microsoft.* -[*]System.* -[Sample*]* -[*]ICSharpCode.* -[FSharp.Core]* -[Gendarme.*]* -[xunit.*]*" MergeByHash = true ReturnTargetCode = Fake.DotNet.Testing.OpenCover.ReturnTargetCodeType.Yes OptionalArguments = @@ -845,7 +917,7 @@ _Target "UnitTestWithOpenCover" (fun _ -> ExePath = openCoverConsole TestRunnerExePath = nunitConsole Filter = - "+[AltCover]* +[AltCover.Recorder]* +[AltCover.Runner]* +[AltCover.WeakName.Testing]Alt* -[*]Microsoft.* -[*]System.* -[Sample*]* -[*]ICSharpCode.*" + "+[AltCover.Recorder]* +[AltCover.Recorder.Tests]* -[*]ICSharpCode.* -[*]System.*" MergeByHash = true ReturnTargetCode = Fake.DotNet.Testing.OpenCover.ReturnTargetCodeType.Yes OptionalArguments = @@ -861,7 +933,7 @@ _Target "UnitTestWithOpenCover" (fun _ -> ExePath = openCoverConsole TestRunnerExePath = nunitConsole Filter = - "+[AltCover]* +[AltCover.Recorder]* +[AltCover.Runner]* +[AltCover.WeakName.Testing]Alt* -[*]Microsoft.* -[*]System.* -[Sample*]* -[*]ICSharpCode.*" + "+[AltCover.Recorder]* +[AltCover.Recorder.Tests]* -[*]ICSharpCode.* -[*]System.*" MergeByHash = true ReturnTargetCode = Fake.DotNet.Testing.OpenCover.ReturnTargetCodeType.Yes OptionalArguments = @@ -895,15 +967,15 @@ _Target "UnitTestWithAltCover" (fun _ -> let keyfile = Path.getFullName "Build/SelfTest.snk" let shadowkeyfile = Path.getFullName "Build/Infrastructure.snk" let reports = Path.getFullName "./_Reports" - let altcover = Path.getFullName "./_Binaries/AltCover/Debug+AnyCPU/net45/AltCover.exe" + let altcover = Path.getFullName "./_Binaries/AltCover/Release+AnyCPU/net472/AltCover.exe" let sn = "sn" |> Fake.Core.ProcessUtils.tryFindFileOnPath // net4x tests -- TODO API - let testDirectory = Path.getFullName "_Binaries/AltCover.Tests/Debug+AnyCPU/net47" - let weakDir = Path.getFullName "_Binaries/AltCover.WeakName.Testing/Debug+AnyCPU/net47" + let testDirectory = Path.getFullName "_Binaries/AltCover.Tests/Debug+AnyCPU/net472" + let weakDir = Path.getFullName "_Binaries/AltCover.ValidateGendarmeEmulation/Debug+AnyCPU/net472" let Recorder4Dir = - Path.getFullName "_Binaries/AltCover.Recorder.Tests/Debug+AnyCPU/net47" - let apiDir = Path.getFullName "_Binaries/AltCover.Api.Tests/Debug+AnyCPU/net47" + Path.getFullName "_Binaries/AltCover.Recorder.Tests/Debug+AnyCPU/net472" + let apiDir = Path.getFullName "_Binaries/AltCover.Api.Tests/Debug+AnyCPU/net472" let altReport = reports @@ "UnitTestWithAltCover.xml" @@ -915,7 +987,7 @@ _Target "UnitTestWithAltCover" (fun _ -> InputDirectories = [| "."; weakDir; Recorder4Dir; apiDir |] OutputDirectories = [| "./__UnitTestWithAltCover" - weakDir @@ "__WeakNameTestWithAltCover" + weakDir @@ "__ValidateGendarmeEmulationWithAltCover" Recorder4Dir @@ "__RecorderTestWithAltCover" apiDir @@ "__ApiTestWithAltCover" |] StrongNameKey = keyfile @@ -938,11 +1010,11 @@ _Target "UnitTestWithAltCover" (fun _ -> printfn "Unit test the instrumented net4x code" try - [ !!"_Binaries/AltCover.Tests/Debug+AnyCPU/net47/__UnitTestWithAltCover/*.Tests.dll" - !!"_Binaries/AltCover.Api.Tests/Debug+AnyCPU/net47/__ApiTestWithAltCover/*.Tests.dll" - !!"_Binaries/AltCover.WeakName.Testing/Debug+AnyCPU/net47/__WeakNameTestWithAltCover/Alt*Test*.dll" - !!"_Binaries/AltCover.Recorder.Tests/Debug+AnyCPU/net47/__RecorderTestWithAltCover/Alt*Test*.dll" - !!"_Binaries/AltCover.Tests/Debug+AnyCPU/net461/__UnitTestWithAltCover/*ple2.dll" ] + [ !!"_Binaries/AltCover.Tests/Debug+AnyCPU/net472/__UnitTestWithAltCover/*.Tests.dll" + !!"_Binaries/AltCover.Api.Tests/Debug+AnyCPU/net472/__ApiTestWithAltCover/*.Tests.dll" + !!"_Binaries/AltCover.ValidateGendarmeEmulation/Debug+AnyCPU/net472/__ValidateGendarmeEmulationWithAltCover/Alt*Valid*.dll" + !!"_Binaries/AltCover.Recorder.Tests/Debug+AnyCPU/net472/__RecorderTestWithAltCover/Alt*Test*.dll" + !!"_Binaries/AltCover.Tests/Debug+AnyCPU/net472/__UnitTestWithAltCover/*ple2.dll" ] |> Seq.concat |> Seq.distinct |> NUnit3.run (fun p -> @@ -1000,50 +1072,54 @@ _Target "UnitTestWithAltCoverRunner" (fun _ -> let keyfile = Path.getFullName "Build/SelfTest.snk" let shadowkeyfile = Path.getFullName "Build/Infrastructure.snk" let reports = Path.getFullName "./_Reports" - let altcover = Path.getFullName "./_Binaries/AltCover/Debug+AnyCPU/net45/AltCover.exe" + let altcover = Path.getFullName "./_Binaries/AltCover/Release+AnyCPU/net472/AltCover.exe" + + // Only use + let baseFilter = AltCoverFilterTypeSafe let tests = [ ( - Path.getFullName "_Binaries/AltCover.Tests/Debug+AnyCPU/net47", // test directory + Path.getFullName "_Binaries/AltCover.Tests/Debug+AnyCPU/net472", // test directory "./__UnitTestWithAltCoverRunner", // relative output "UnitTestWithAltCoverRunner.xml", // coverage report "./_Reports/UnitTestWithAltCoverRunnerReport.xml", // relative nunit reporting [ Path.getFullName // test assemblies - "_Binaries/AltCover.Tests/Debug+AnyCPU/net47/__UnitTestWithAltCoverRunner/AltCover.Tests.dll" + "_Binaries/AltCover.Tests/Debug+AnyCPU/net472/__UnitTestWithAltCoverRunner/AltCover.Tests.dll" Path.getFullName - "_Binaries/AltCover.Tests/Debug+AnyCPU/net47/__UnitTestWithAltCoverRunner/Sample2.dll" ], - AltCoverFilterTypeSafe, + "_Binaries/AltCover.Tests/Debug+AnyCPU/net472/__UnitTestWithAltCoverRunner/Sample2.dll" ], + baseFilter, keyfile ) ( - Path.getFullName "_Binaries/AltCover.Api.Tests/Debug+AnyCPU/net47", // test directory + Path.getFullName "_Binaries/AltCover.Api.Tests/Debug+AnyCPU/net472", // test directory "./__ApiTestWithAltCoverRunner", // relative output "ApiTestWithAltCoverRunner.xml", // coverage report "./_Reports/ApiTestWithAltCoverRunnerReport.xml", // relative nunit reporting [ Path.getFullName // test assemblies - "_Binaries/AltCover.Api.Tests/Debug+AnyCPU/net47/__ApiTestWithAltCoverRunner/AltCover.Api.Tests.dll" ], - AltCoverFilterTypeSafe, + "_Binaries/AltCover.Api.Tests/Debug+AnyCPU/net472/__ApiTestWithAltCoverRunner/AltCover.Api.Tests.dll" ], + baseFilter, keyfile ) ( - Path.getFullName "_Binaries/AltCover.WeakName.Testing/Debug+AnyCPU/net47", - "./__WeakNameTestWithAltCoverRunner", - "WeakNameTestWithAltCoverRunner.xml", - "./_Reports/WeakNameTestWithAltCoverRunnerReport.xml", + Path.getFullName "_Binaries/AltCover.ValidateGendarmeEmulation/Debug+AnyCPU/net472", + "./__ValidateGendarmeEmulationWithAltCoverRunner", + "ValidateGendarmeEmulationWithAltCoverRunner.xml", + "./_Reports/ValidateGendarmeEmulationWithAltCoverRunnerReport.xml", [ Path.getFullName - "_Binaries/AltCover.WeakName.Testing/Debug+AnyCPU/net47/__WeakNameTestWithAltCoverRunner/AltCover.WeakName.Testing.dll" ], - (fun x -> { x with TypeFilter = TypeSafe.Filters [ TypeSafe.Raw "WeakNameTest"; TypeSafe.Raw "SolutionRoot" ]}) >> AltCoverFilterXTypeSafe, + "_Binaries/AltCover.ValidateGendarmeEmulation/Debug+AnyCPU/net472/__ValidateGendarmeEmulationWithAltCoverRunner/AltCover.ValidateGendarmeEmulation.dll" ], + // only use // (* >> (fun x -> { x with AssemblyExcludeFilter = TypeSafe.Filters [] }) *), + AltCoverFilterXTypeSafe, keyfile ) ( - Path.getFullName "_Binaries/AltCover.Recorder.Tests/Debug+AnyCPU/net47", + Path.getFullName "_Binaries/AltCover.Recorder.Tests/Debug+AnyCPU/net472", "./__RecorderTestWithAltCoverRunner", "RecorderTestWithAltCoverRunner.xml", "./_Reports/RecorderTestWithAltCoverRunnerReport.xml", [ Path.getFullName - "_Binaries/AltCover.Recorder.Tests/Debug+AnyCPU/net47/__RecorderTestWithAltCoverRunner/AltCover.Recorder.Tests.dll" ], - AltCoverFilterTypeSafe, + "_Binaries/AltCover.Recorder.Tests/Debug+AnyCPU/net472/__RecorderTestWithAltCoverRunner/AltCover.Recorder.Tests.dll" ], + baseFilter, shadowkeyfile ) ( @@ -1053,20 +1129,11 @@ _Target "UnitTestWithAltCoverRunner" (fun _ -> "./_Reports/RecorderTest2WithAltCoverRunnerReport.xml", [ Path.getFullName "_Binaries/AltCover.Recorder.Tests/Debug+AnyCPU/net20/__RecorderTest2WithAltCoverRunner/AltCover.Recorder.Tests.dll" ], - AltCoverFilterTypeSafe, + baseFilter >> (fun p -> { p with AttributeFilter = + [TypeSafe.Raw "EntryPoint"] + |> p.AttributeFilter.Join}), shadowkeyfile ) - ( - Path.getFullName "_Binaries/AltCover.Tests.Visualizer/Debug+AnyCPU/net471", - "./__GTKVTestWithAltCoverRunner", - "GTKVTestWithAltCoverRunner.xml", - "./_Reports/GTKVTestWithAltCoverRunnerReport.xml", - [ Path.getFullName - "_Binaries/AltCover.Tests.Visualizer/Debug+AnyCPU/net471/__GTKVTestWithAltCoverRunner/AltCover.Tests.Visualizer.dll" ], - (fun x -> { x with TypeFilter = TypeSafe.Filters [ TypeSafe.Raw "Gui" ] - AssemblyFilter = TypeSafe.Filters [ TypeSafe.Raw "\\-sharp" ]}) >> AltCoverFilterTypeSafe, - keyfile - ) ] tests @@ -1122,8 +1189,7 @@ _Target "UnitTestWithAltCoverRunner" (fun _ -> let xmlreports = pester :: (tests - |> List.map (fun (_, _, report, _, _, _, _) -> reports @@ report) - |> List.filter (fun f -> f.Contains("GTKV") |> not)) + |> List.map (fun (_, _, report, _, _, _, _) -> reports @@ report)) ReportGenerator.generateReports (fun p -> { p with @@ -1172,7 +1238,7 @@ _Target "UnitTestWithAltCoverCore" (fun _ -> Directory.ensure "./_Reports/_UnitTestWithAltCover" let keyfile = Path.getFullName "Build/SelfTest.snk" let reports = Path.getFullName "./_Reports" - let altcover = Path.getFullName "./_Binaries/AltCover/Debug+AnyCPU/netcoreapp2.0/AltCover.dll" + let altcover = Path.getFullName "./_Binaries/AltCover/Release+AnyCPU/netcoreapp2.0/AltCover.dll" let tests = [ @@ -1180,7 +1246,7 @@ _Target "UnitTestWithAltCoverCore" (fun _ -> Path.getFullName "_Binaries/AltCover.Tests/Debug+AnyCPU/netcoreapp3.0", // testDirectory Path.getFullName "Tests/_Binaries/AltCover.Tests/Debug+AnyCPU/netcoreapp3.0", // output reports @@ "UnitTestWithAltCoverCore.xml", // report - "altcover.tests.core.fsproj", // project + "AltCover.Tests.fsproj", // project Path.getFullName "Tests", // workingDirectory AltCoverFilter >> (fun p -> { p with AssemblyExcludeFilter = [ "?^AltCover$" ]}) // filter ) @@ -1188,7 +1254,7 @@ _Target "UnitTestWithAltCoverCore" (fun _ -> Path.getFullName "_Binaries/AltCover.Recorder.Tests/Debug+AnyCPU/netcoreapp3.0", Path.getFullName "Recorder.Tests/_Binaries/AltCover.Recorder.Tests/Debug+AnyCPU/netcoreapp3.0", reports @@ "RecorderTestWithAltCoverCore.xml", - "altcover.recorder.tests.core.fsproj", + "AltCover.Recorder.Tests.fsproj", Path.getFullName "Recorder.Tests", AltCoverFilterG ) @@ -1196,17 +1262,17 @@ _Target "UnitTestWithAltCoverCore" (fun _ -> Path.getFullName "_Binaries/AltCover.Api.Tests/Debug+AnyCPU/netcoreapp3.0", // testDirectory Path.getFullName "AltCover.Api.Tests/_Binaries/AltCover.Api.Tests/Debug+AnyCPU/netcoreapp3.0", // output reports @@ "ApiUnitTestWithAltCoverCore.xml", // report - "altcover.api.tests.core.fsproj", // project + "AltCover.Api.Tests.fsproj", // project Path.getFullName "AltCover.Api.Tests", // workingDirectory AltCoverApiFilter // filter ) ( - Path.getFullName "_Binaries/AltCover.WeakName.Testing/Debug+AnyCPU/netcoreapp3.0", // testDirectory - Path.getFullName "WeakNameTests/_Binaries/AltCover.WeakName.Testing/Debug+AnyCPU/netcoreapp3.0", // output - reports @@ "WeakNameUnitTestWithAltCoverCore.xml", // report - "altcover.weaknametests.core.fsproj", // project - Path.getFullName "WeakNameTests", // workingDirectory - (fun p -> { p with TypeFilter = [ "> AltCoverFilter // filter + Path.getFullName "_Binaries/AltCover.ValidateGendarmeEmulation/Debug+AnyCPU/netcoreapp3.0", // testDirectory + Path.getFullName "AltCover.ValidateGendarmeEmulation/_Binaries/AltCover.ValidateGendarmeEmulation/Debug+AnyCPU/netcoreapp3.0", // output + reports @@ "ValidateGendarmeEmulationUnitTestWithAltCoverCore.xml", // report + "AltCover.ValidateGendarmeEmulation.fsproj", // project + Path.getFullName "ValidateGendarmeEmulations", // workingDirectory + (fun p -> { p with TypeFilter = [ "> AltCoverFilter // filter ) ] @@ -1264,7 +1330,7 @@ _Target "UnitTestWithAltCoverCoreRunner" (fun _ -> let keyfile = Path.getFullName "Build/SelfTest.snk" let reports = Path.getFullName "./_Reports" let altcover = - Path.getFullName "./_Binaries/AltCover/Debug+AnyCPU/netcoreapp2.0/AltCover.dll" + Path.getFullName "./_Binaries/AltCover/Release+AnyCPU/netcoreapp2.0/AltCover.dll" let tests = [ @@ -1272,24 +1338,24 @@ _Target "UnitTestWithAltCoverCoreRunner" (fun _ -> Path.getFullName "_Binaries/AltCover.Tests/Debug+AnyCPU/netcoreapp3.0", // testDirectory Path.getFullName "Tests/_Binaries/AltCover.Tests/Debug+AnyCPU/netcoreapp3.0", // output reports @@ "UnitTestWithAltCoverCoreRunner.xml", // report - Path.getFullName "./Tests/altcover.tests.core.fsproj" + Path.getFullName "./Tests/AltCover.Tests.fsproj" ) ( Path.getFullName "_Binaries/AltCover.Api.Tests/Debug+AnyCPU/netcoreapp3.0", // testDirectory Path.getFullName "AltCover.Api.Tests/_Binaries/AltCover.Api.Tests/Debug+AnyCPU/netcoreapp3.0", // output reports @@ "ApiTestWithAltCoverCoreRunner.xml", // report - Path.getFullName "./AltCover.Api.Tests/altcover.api.tests.core.fsproj" + Path.getFullName "./AltCover.Api.Tests/AltCover.Api.Tests.fsproj" ) ( Path.getFullName "_Binaries/AltCover.Recorder.Tests/Debug+AnyCPU/netcoreapp3.0", Path.getFullName "Recorder.Tests/_Binaries/AltCover.Recorder.Tests/Debug+AnyCPU/netcoreapp3.0", reports @@ "RecorderTestWithAltCoverCoreRunner.xml", - Path.getFullName "./Recorder.Tests/altcover.recorder.tests.core.fsproj") + Path.getFullName "./Recorder.Tests/AltCover.Recorder.Tests.fsproj") ( - Path.getFullName "_Binaries/AltCover.WeakName.Testing/Debug+AnyCPU/netcoreapp3.0", // testDirectory - Path.getFullName "WeakNameTests/_Binaries/AltCover.WeakName.Testing/Debug+AnyCPU/netcoreapp3.0", // output - reports @@ "WeakNameUnitTestWithAltCoverCoreRunner.xml", // report - Path.getFullName "WeakNameTests/altcover.weaknametests.core.fsproj") // project + Path.getFullName "_Binaries/AltCover.ValidateGendarmeEmulation/Debug+AnyCPU/netcoreapp3.0", // testDirectory + Path.getFullName "ValidateGendarmeEmulation/_Binaries/AltCover.ValidateGendarmeEmulation/Debug+AnyCPU/netcoreapp3.0", // output + reports @@ "ValidateGendarmeEmulationUnitTestWithAltCoverCoreRunner.xml", // report + Path.getFullName "ValidateGendarmeEmulation/AltCover.ValidateGendarmeEmulation.fsproj") // project ] tests @@ -1302,7 +1368,7 @@ _Target "UnitTestWithAltCoverCoreRunner" (fun _ -> ({ Primitive.PrepareOptions.Create() with XmlReport = report OutputDirectories = [| output |] - TypeFilter = [ "SolutionRoot"; "Expecto"; "WeakNameTests" ] + TypeFilter = [ "SolutionRoot"; "Expecto" ] VisibleBranches = true StrongNameKey = keyfile SingleVisit = true @@ -1355,8 +1421,8 @@ _Target "OperationalTest" ignore _Target "FSharpTypes" (fun _ -> Directory.ensure "./_Reports" let simpleReport = (Path.getFullName "./_Reports") @@ ("AltCoverFSharpTypes.xml") - let binRoot = Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net45" - let sampleRoot = Path.getFullName "_Binaries/Sample2/Debug+AnyCPU/net461" + let binRoot = Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net472" + let sampleRoot = Path.getFullName "_Binaries/Sample2/Debug+AnyCPU/net472" let instrumented = "__FSharpTypes" let prep = @@ -1364,7 +1430,7 @@ _Target "FSharpTypes" (fun _ -> ({ Primitive.PrepareOptions.Create() with XmlReport = simpleReport OutputDirectories = [| "./" + instrumented |] - AssemblyFilter = [ "Adapter"; "nunit" ] + AssemblyFilter = [ "Adapter"; "nunit"; "FSharp" ] TypeFilter = [ "System\\."; "Microsoft\\." ] InPlace = false ReportFormat = "NCover" @@ -1386,7 +1452,7 @@ _Target "FSharpTypesDotNet" (fun _ -> // obsolete // Test the --inplace operation Shell.cleanDir sampleRoot - "sample2.core.fsproj" + "Sample2.fsproj" |> DotNet.test (fun o -> { o.WithCommon(withWorkingDirectoryVM "Sample2") with Configuration = DotNet.BuildConfiguration.Debug @@ -1414,7 +1480,7 @@ _Target "FSharpTypesDotNet" (fun _ -> // obsolete Assert.That(Path.Combine(sampleRoot, "__Saved") |> Directory.Exists) printfn "Execute the instrumented tests" - "sample2.core.fsproj" + "Sample2.fsproj" |> DotNet.test (fun o -> { o.WithCommon(withWorkingDirectoryVM "Sample2") with Configuration = DotNet.BuildConfiguration.Debug @@ -1433,7 +1499,7 @@ _Target "FSharpTests" (fun _ -> // Test the --inplace operation Shell.cleanDir sampleRoot - "sample7.core.fsproj" + "Sample7.fsproj" |> DotNet.test (fun o -> { o.WithCommon(withWorkingDirectoryVM "Sample7") with Configuration = DotNet.BuildConfiguration.Debug } |> testWithCLIArguments) @@ -1458,7 +1524,7 @@ _Target "FSharpTests" (fun _ -> printfn "Execute the instrumented tests" - let sample7 = Path.getFullName "./Sample7/sample7.core.fsproj" + let sample7 = Path.getFullName "./Sample7/Sample7.fsproj" let (dotnetexe, args) = defaultDotNetTestCommandLine None sample7 let collect = @@ -1505,7 +1571,7 @@ _Target "FSharpTypesDotNetRunner" (fun _ -> Actions.ValidateFSharpTypes simpleReport [ "main" ] printfn "Execute the instrumented tests" - let sample2 = Path.getFullName "./Sample2/sample2.core.fsproj" + let sample2 = Path.getFullName "./Sample2/Sample2.fsproj" let (dotnetexe, args) = defaultDotNetTestCommandLine (Some "netcoreapp2.1") sample2 let collect = @@ -1538,7 +1604,7 @@ _Target "FSharpTypesDotNetCollecter" (fun _ -> printfn "Build and test normally" Shell.cleanDir sampleRoot - "sample2.core.fsproj" + "Sample2.fsproj" |> DotNet.test (fun o -> { o.WithCommon(withWorkingDirectoryVM "Sample2") with Configuration = DotNet.BuildConfiguration.Debug } |> testWithCLIArguments) @@ -1567,7 +1633,7 @@ _Target "FSharpTypesDotNetCollecter" (fun _ -> Assert.That(Path.Combine(sampleRoot, "__Saved") |> Directory.Exists) printfn "Execute the instrumented tests" - "sample2.core.fsproj" + "Sample2.fsproj" |> DotNet.test (fun o -> { o.WithCommon(withWorkingDirectoryVM "Sample2") with Configuration = DotNet.BuildConfiguration.Debug @@ -1592,22 +1658,22 @@ _Target "FSharpTypesDotNetCollecter" (fun _ -> _Target "BasicCSharp" (fun _ -> Actions.SimpleInstrumentingRun "_Binaries/Sample1/Debug+AnyCPU/net20" - "_Binaries/AltCover/Debug+AnyCPU/net45" "BasicCSharp") + "_Binaries/AltCover/Release+AnyCPU/net472" "BasicCSharp") _Target "BasicCSharpMono" (fun _ -> Actions.SimpleInstrumentingRun "_Mono/Sample1" - "_Binaries/AltCover/Debug+AnyCPU/net45" "BasicCSharpMono") + "_Binaries/AltCover/Release+AnyCPU/net472" "BasicCSharpMono") _Target "BasicCSharpUnderMono" (fun _ -> monoOnWindows |> Actions.SimpleInstrumentingRunUnderMono "_Binaries/Sample1/Debug+AnyCPU/net20" - "_Binaries/AltCover/Debug+AnyCPU/net45" "BasicCSharpUnderMono") + "_Binaries/AltCover/Release+AnyCPU/net472" "BasicCSharpUnderMono") _Target "BasicCSharpMonoUnderMono" (fun _ -> monoOnWindows |> Actions.SimpleInstrumentingRunUnderMono "_Mono/Sample1" - "_Binaries/AltCover/Debug+AnyCPU/net45" "BasicCSharpMono") + "_Binaries/AltCover/Release+AnyCPU/net472" "BasicCSharpMono") _Target "CSharpMonoWithDotNet" (fun _ -> Directory.ensure "./_Reports" @@ -1655,7 +1721,7 @@ _Target "CSharpDotNetWithDotNet" (fun _ -> Save = false }) |> AltCoverCommand.Prepare { AltCoverCommand.Options.Create prep with - ToolPath = "_Binaries/AltCover/Debug+AnyCPU/netcoreapp2.0/AltCover.dll" + ToolPath = "_Binaries/AltCover/Release+AnyCPU/netcoreapp2.0/AltCover.dll" ToolType = dotnetAltcover WorkingDirectory = "." } |> AltCoverCommand.run @@ -1667,7 +1733,7 @@ _Target "CSharpDotNetWithDotNet" (fun _ -> _Target "CSharpDotNetWithFramework" (fun _ -> Directory.ensure "./_Reports" let simpleReport = (Path.getFullName "./_Reports") @@ ("CSharpDotNetWithFramework.xml") - let binRoot = Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net45" + let binRoot = Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net472" let sampleRoot = Path.getFullName "_Binaries/Sample1/Debug+AnyCPU/netcoreapp2.0" let instrumented = Path.getFullName "_Binaries/Sample1/__Instrumented.CSharpDotNetWithFramework" @@ -1694,7 +1760,7 @@ _Target "CSharpDotNetWithFramework" (fun _ -> _Target "SelfTest" (fun _ -> Directory.ensure "./_Reports/_Instrumented" - let targetDir = "_Binaries/AltCover.Tests/Debug+AnyCPU/net47" + let targetDir = "_Binaries/AltCover.Tests/Debug+AnyCPU/net472" let reports = Path.getFullName "./_Reports" let report = reports @@ "OpenCoverSelfTest.xml" let altReport = reports @@ "AltCoverSelfTest.xml" @@ -1725,7 +1791,7 @@ _Target "SelfTest" (fun _ -> { p with WorkingDir = targetDir ExePath = openCoverConsole - TestRunnerExePath = "./_Binaries/AltCover/Debug+AnyCPU/net45/AltCover.exe" + TestRunnerExePath = "./_Binaries/AltCover/Release+AnyCPU/net472/AltCover.exe" Filter = OpenCoverFilter MergeByHash = true OptionalArguments = @@ -1753,9 +1819,9 @@ _Target "SelfTest" (fun _ -> |> AltCoverFilter) |> AltCoverCommand.Prepare { AltCoverCommand.Options.Create prep with - ToolPath = "_Binaries/AltCover.Tests/Debug+AnyCPU/net47/__SelfTest/AltCover.exe" + ToolPath = "_Binaries/AltCover.Tests/Debug+AnyCPU/net472/__SelfTest/AltCover.exe" ToolType = frameworkAltcover - WorkingDirectory = "_Binaries/AltCover.Tests/Debug+AnyCPU/net47" } + WorkingDirectory = "_Binaries/AltCover.Tests/Debug+AnyCPU/net472" } |> AltCoverCommand.run ReportGenerator.generateReports (fun p -> @@ -1774,7 +1840,7 @@ _Target "RecordResumeTest" (fun _ -> | Some test -> Trace.traceImportant "Using the NuGet package" test - | _ -> Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net45/AltCover.exe" + | _ -> Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net472/AltCover.exe" let prep = AltCover.PrepareOptions.Primitive @@ -1852,7 +1918,7 @@ _Target "RecordResumeTrackingTest" (fun _ -> | Some test -> Trace.traceImportant "Using the NuGet package" test - | _ -> Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net45/AltCover.exe" + | _ -> Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net472/AltCover.exe" let prep = AltCover.PrepareOptions.Primitive @@ -2000,7 +2066,7 @@ _Target "RecordResumeTestDotNet" (fun _ -> _Target "RecordResumeTestUnderMono" (fun _ -> // Fails : System.EntryPointNotFoundException: CreateZStream Directory.ensure "./_Reports" let simpleReport = (Path.getFullName "./_Reports") @@ ("RecordResumeTestUnderMono.xml") - let binRoot = Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net45" + let binRoot = Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net472" let sampleRoot = Path.getFullName "_Binaries/Sample8/Debug+AnyCPU/net20" let instrumented = "__RecordResumeTestUnderMono" @@ -2080,46 +2146,36 @@ _Target "RecordResumeTestUnderMono" (fun _ -> // Fails : System.EntryPointNotFo // Packaging _Target "Packaging" (fun _ -> - let AltCover = Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net45/AltCover.exe" + let AltCover = Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net472/AltCover.exe" + let engine = Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net472/AltCover.Engine.dll" let config = AltCover + ".config" + let manatee = + Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net472/Manatee.Json.dll" let fox = - Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net45/BlackFox.CommandLine.dll" - let fscore = Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net45/FSharp.Core.dll" + Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net472/BlackFox.CommandLine.dll" + let fscore = Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net472/FSharp.Core.dll" let options = - Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net45/Mono.Options.dll" + Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net472/Mono.Options.dll" let recorder = - Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net45/AltCover.Recorder.dll" - let posh = - Path.getFullName - "_Binaries/AltCover.PowerShell/Release+AnyCPU/net47/AltCover.PowerShell.dll" + Path.getFullName "_Binaries/AltCover/Release+AnyCPU/net472/AltCover.Recorder.dll" let poshHelp = Path.getFullName - "_Binaries/AltCover.PowerShell/Release+AnyCPU/net47/AltCover.PowerShell.dll-Help.xml" + "_Binaries/AltCover.PowerShell/Release+AnyCPU/netstandard2.0/AltCover.PowerShell.dll-Help.xml" if (poshHelp |> File.Exists |> not) && (Environment.isWindows |> not) then File.WriteAllText(poshHelp, "DUMMY TEXT") - let toolkit = - Path.getFullName "_Binaries/AltCover.Toolkit/Release+AnyCPU/net45/AltCover.Toolkit.dll" - let dotnet = - Path.getFullName "_Binaries/AltCover.DotNet/Release+AnyCPU/net45/AltCover.DotNet.dll" - let cake = - Path.getFullName "_Binaries/AltCover.Cake/Release+AnyCPU/net46/AltCover.Cake.dll" - let fake = - Path.getFullName "_Binaries/AltCover.Fake/Release+AnyCPU/net46/AltCover.Fake.dll" - let fake2 = - Path.getFullName - "_Binaries/AltCover.Fake.DotNet.Testing.AltCover/Release+AnyCPU/net462/AltCover.Fake.DotNet.Testing.AltCover.dll" + let vis = Path.getFullName - "_Binaries/AltCover.Visualizer/Release+AnyCPU/net45/AltCover.Visualizer.exe" + "_Binaries/AltCover.Visualizer/Release+AnyCPU/net472/AltCover.Visualizer.exe" let uic = Path.getFullName - "_Binaries/AltCover.Visualizer/Release+AnyCPU/net45/AltCover.UICommon.dll" + "_Binaries/AltCover.Visualizer/Release+AnyCPU/net472/AltCover.UICommon.dll" let packable = Path.getFullName "./_Binaries/README.html" let libFiles path = Seq.concat - [ !!"./_Binaries/AltCover/Release+AnyCPU/net45/Mono.C*.dll" - !!"./_Binaries/AltCover/Release+AnyCPU/net45/Newton*.dll" ] + [ !!"./_Binaries/AltCover/Release+AnyCPU/net472/Mono.C*.dll" + !!"./_Binaries/AltCover/Release+AnyCPU/net472/Newton*.dll" ] |> Seq.map (fun f -> (f |> Path.getFullName, Some path, None)) |> Seq.toList @@ -2132,37 +2188,32 @@ _Target "Packaging" (fun _ -> (Path.getFullName "./AltCover.UICommon/logo.*", Some "", None) ] let applicationFiles = - [ (AltCover, Some "tools/net45", None) - (config, Some "tools/net45", None) - (recorder, Some "tools/net45", None) - (posh, Some "tools/net45", None) - (poshHelp, Some "tools/net45", None) - (toolkit, Some "tools/net45", None) - (vis, Some "tools/net45", None) - (uic, Some "tools/net45", None) - (fscore, Some "tools/net45", None) - (fox, Some "tools/net45", None) - (options, Some "tools/net45", None) + [ (AltCover, Some "tools/net472", None) + (engine, Some "tools/net472", None) + (config, Some "tools/net472", None) + (recorder, Some "tools/net472", None) + (vis, Some "tools/net472", None) + (uic, Some "tools/net472", None) + (fscore, Some "tools/net472", None) + (manatee, Some "tools/net472", None) + (fox, Some "tools/net472", None) + (options, Some "tools/net472", None) (packable, Some "", None) ] let apiFiles = - [ (AltCover, Some "lib/net45", None) - (config, Some "lib/net45", None) - (recorder, Some "lib/net45", None) - (posh, Some "lib/net45", None) - (poshHelp, Some "lib/net45", None) - (toolkit, Some "lib/net45", None) - (dotnet, Some "lib/net45", None) - (cake, Some "lib/net45", None) - (fake, Some "lib/net45", None) - (fscore, Some "lib/net45", None) - (fox, Some "lib/net45", None) - (options, Some "lib/net45", None) + [ (AltCover, Some "lib/net472", None) + (engine, Some "lib/net472", None) + (config, Some "lib/net472", None) + (recorder, Some "lib/net472", None) + (fscore, Some "lib/net472", None) + (manatee, Some "lib/net472", None) + (fox, Some "lib/net472", None) + (options, Some "lib/net472", None) (packable, Some "", None) ] let resourceFiles path = - [ "_Binaries/AltCover/Release+AnyCPU/net45" - "_Binaries/AltCover.Visualizer/Release+AnyCPU/net45" ] + [ "_Binaries/AltCover/Release+AnyCPU/net472" + "_Binaries/AltCover.Visualizer/Release+AnyCPU/net472" ] |> List.map (fun f -> Directory.GetDirectories(Path.getFullName f) |> Seq.collect (fun d -> Directory.GetFiles(d, "*.resources.dll"))) @@ -2262,26 +2313,18 @@ _Target "Packaging" (fun _ -> None)) |> Seq.toList - let publishapi = (Path.getFullName "./_Publish.api").Length + let publishapi = (Path.getFullName "./_Publish").Length let netstdFiles where = - (!!"./_Publish.api/**/*.*") - |> Seq.filter (fun f -> - let n = f |> Path.GetFileName - n.StartsWith("System.", StringComparison.OrdinalIgnoreCase) |> not) + (!!"./_Publish/**/*.*") |> Seq.map (fun x -> (x, Some(where + Path.GetDirectoryName(x).Substring(publishapi).Replace("\\", "/")), None)) |> Seq.toList - let apiNetcoreAppFiles where = - (!!"./_Binaries/AltCover.NetCoreApp/Release+AnyCPU/netcoreapp2.0/AltCover.NetCoreApp.*") - |> Seq.map (fun x -> (x, Some(where + Path.GetFileName x), None)) - |> Seq.toList - let globalFiles = - (!!"./_Binaries/global-altcover/Release+AnyCPU/netcoreapp2.1/global-altcover.*") + (!!"./_Binaries/AltCover/Release+AnyCPU/netcoreapp2.1/AltCover.*") |> Seq.map (fun x -> (x, Some("tools/netcoreapp2.1/any/" + Path.GetFileName x), None)) |> Seq.toList @@ -2302,7 +2345,7 @@ _Target "Packaging" (fun _ -> |> Seq.toList let auxFiles = - (!!"./_Binaries/global-altcover/Release+AnyCPU/netcoreapp2.1/*.xml") + (!!"./_Binaries/AltCover/Release+AnyCPU/netcoreapp2.1/*.xml") |> Seq.map (fun x -> (x, Some("tools/netcoreapp2.1/any/" + Path.GetFileName x), None)) |> Seq.toList @@ -2310,8 +2353,8 @@ _Target "Packaging" (fun _ -> printfn "Executing on %A" Environment.OSVersion [ (List.concat [ applicationFiles - resourceFiles "tools/net45/" - libFiles "tools/net45/" + resourceFiles "tools/net472/" + libFiles "tools/net472/" netcoreFiles "tools/netcoreapp2.0/" poshFiles "tools/netcoreapp2.0/" poshHelpFiles "tools/netcoreapp2.0/" @@ -2321,9 +2364,8 @@ _Target "Packaging" (fun _ -> (List.concat [ apiFiles - resourceFiles "lib/net45/" - libFiles "lib/net45/" - apiNetcoreAppFiles "lib/netstandard2.0/" + resourceFiles "lib/net472/" + libFiles "lib/net472/" netstdFiles "lib/netstandard2.0" cakeFiles "lib/netstandard2.0/" dataFiles "lib/netstandard2.0/" @@ -2359,15 +2401,10 @@ _Target "Packaging" (fun _ -> housekeepingVis ], [], "_Packaging.visualizer", "./_Generated/altcover.visualizer.nuspec", "altcover.visualizer") - let frameworkFake2Files = - [ (fake2, Some "lib/net45", None) - (fox, Some "lib/net45", None) ] - (List.concat [ fake2Files "lib/netstandard2.0/" fox2Files "lib/netstandard2.0/" [ (packable, Some "", None) ] - frameworkFake2Files housekeeping ], [ // make these explicit, as this package implies an opt-in ("Fake.Core.Environment", "5.18.1") @@ -2381,7 +2418,7 @@ _Target "Packaging" (fun _ -> Directory.ensure workingDir Directory.ensure outputPath - NuGet (fun p -> + NuGetPack (fun p -> { p with Authors = [ "Steve Gilham" ] Project = project @@ -2414,7 +2451,7 @@ _Target "Packaging" (fun _ -> _Target "PrepareFrameworkBuild" ignore _Target "PrepareDotNetBuild" (fun _ -> - let netcoresource = Path.getFullName "./AltCover/altcover.core.fsproj" + let netcoresource = Path.getFullName "./AltCover/AltCover.fsproj" let publish = Path.getFullName "./_Publish" DotNet.publish (fun options -> @@ -2422,17 +2459,12 @@ _Target "PrepareDotNetBuild" (fun _ -> OutputPath = Some publish Configuration = DotNet.BuildConfiguration.Release Framework = Some "netcoreapp2.0" }) netcoresource - DotNet.publish (fun options -> - { options with - OutputPath = Some(publish + ".api") - Configuration = DotNet.BuildConfiguration.Release - Framework = Some "netstandard2.0" }) netcoresource DotNet.publish (fun options -> { options with OutputPath = Some(publish + ".visualizer") Configuration = DotNet.BuildConfiguration.Release Framework = Some "netcoreapp2.1" }) - (Path.getFullName "./AltCover.Avalonia/altcover.avalonia.fsproj") + (Path.getFullName "./AltCover.Avalonia/AltCover.Avalonia.fsproj") // dotnet tooling mods [ ("DotnetTool", "./_Generated/altcover.global.nuspec", @@ -2485,16 +2517,62 @@ _Target "Deployment" ignore _Target "Unpack" (fun _ -> !!"./_Pack*/*.nupkg" |> Seq.iter (fun nugget -> - let packdir = Path.GetDirectoryName nugget + let packdir = Path.GetDirectoryName nugget let unpack = Path.getFullName (packdir @@ "Unpack") - System.IO.Compression.ZipFile.ExtractToDirectory(nugget, unpack))) + System.IO.Compression.ZipFile.ExtractToDirectory(nugget, unpack)) + + // C# style API documentation + let packages = + let xml = + [ + "./AltCover.PowerShell/AltCover.PowerShell.fsproj" + "./AltCover.Cake/AltCover.Cake.csproj" + ] + |> List.map (Path.getFullName >> XDocument.Load) + xml + |> List.map (fun x -> x.Descendants(XName.Get("PackageReference"))) + |> Seq.concat + |> Seq.map + (fun x -> + let incl = x.Attribute(XName.Get("Include")) + let update = x.Attribute(XName.Get("Update")) + let version = x.Attribute(XName.Get("Version")).Value + if incl |> isNull + then (update.Value, version) + else (incl.Value, version)) + |> Seq.distinctBy fst + |> Map.ofSeq + let packageVersionPart (p : string) = nugetCache + + "/" + p.ToLowerInvariant() + "/" + (packages.Item p) + + "/lib/netstandard2.0/" + + let unpacked = "./_Packaging.api/Unpack/lib/netstandard2.0/" + Shell.copyFile (unpacked + "Cake.Core.dll") + ((packageVersionPart "Cake.Core") + "Cake.Core.dll") + Shell.copyFile (unpacked + "Cake.Common.dll") + ((packageVersionPart "Cake.Common") + "Cake.Common.dll") + Shell.copyFile (unpacked + "System.Management.Automation.dll") + ((packageVersionPart "PowerShellStandard.Library") + "System.Management.Automation.dll") + + [ + "AltCover.Cake" + "AltCover.DotNet" + "AltCover.Engine" // beware static linkage -- maybe copy from debug? + "AltCover.PowerShell" + "AltCover.Toolkit" + ] + |> List.iter (fun n -> + Shell.copyFile (unpacked + n + ".xml") ("./_Binaries/" + n + "/Release+AnyCPU/netstandard2.0/" + n + ".xml") + Actions.RunDotnet dotnetOptions "xmldocmd" + (unpacked + n + ".dll ./_Documentation/" + n + " --visibility public --skip-unbrowsable --clean") + ("documenting " + n))) _Target "WindowsPowerShell" (fun _ -> Directory.ensure "./_Documentation" let v = (!Version).Split([| '-' |]).[0] CreateProcess.fromRawCommand "powershell.exe" - [ "-NoProfile"; "./Build/powershell.ps1"; "-ACV"; v ] + [ "-NoProfile"; "./Build/pester.ps1"; "-ACV"; v; "-ReportName"; "PoshReport"; "-FolderName"; "Unpack" ] |> CreateProcess.withWorkingDirectory "." |> Proc.run |> (Actions.AssertResult "powershell")) @@ -2517,7 +2595,7 @@ _Target "Pester" (fun _ -> InputDirectories = [ i ] StrongNameKey = key TypeFilter = [ "System\\."; "DotNet" ] - AssemblyFilter = [ "^AltCover$"; "Recorder"; "DataCollector" ] + AssemblyFilter = [ "AltCover.Engine"; "Recorder"; "DataCollector"; "FSharp" ] InPlace = true ReportFormat = "OpenCover" Save = true @@ -2530,7 +2608,7 @@ _Target "Pester" (fun _ -> |> AltCoverCommand.run printfn "Execute the instrumented tests" - CreateProcess.fromRawCommand pwsh [ "-NoProfile"; "./Build/pester.ps1"; "-ACV"; v ] + CreateProcess.fromRawCommand pwsh [ "-NoProfile"; "./Build/pester.ps1"; "-ACV"; v; "-ReportName"; "PesterReport"; "-FolderName"; "Module" ] |> CreateProcess.withWorkingDirectory "." |> Proc.run |> (Actions.AssertResult "pwsh") @@ -2562,7 +2640,7 @@ _Target "SimpleReleaseTest" (fun _ -> | Some test -> Trace.traceImportant "Using the NuGet package" Path.GetDirectoryName test - | _ -> Path.getFullName "_Packaging/Unpack/tools/net45" + | _ -> Path.getFullName "_Packaging/Unpack/tools/net472" Actions.SimpleInstrumentingRun "_Binaries/Sample1/Debug+AnyCPU/net20" unpack "SimpleReleaseTest") @@ -2573,7 +2651,7 @@ _Target "SimpleZipReleaseTest" (fun _ -> | Some test -> Trace.traceImportant "Using the NuGet package" Path.GetDirectoryName test - | _ -> Path.getFullName "_Packaging/Unpack/tools/net45" + | _ -> Path.getFullName "_Packaging/Unpack/tools/net472" let reportSigil = "SimpleZipReleaseTest" @@ -2621,7 +2699,7 @@ _Target "SimpleMonoReleaseTest" (fun _ -> | Some test -> Trace.traceImportant "Using the NuGet package" Path.GetDirectoryName test - | _ -> Path.getFullName "_Packaging/Unpack/tools/net45" + | _ -> Path.getFullName "_Packaging/Unpack/tools/net472" Actions.SimpleInstrumentingRun "_Mono/Sample1" unpack "SimpleMonoReleaseTest") @@ -2632,7 +2710,7 @@ _Target "ReleaseDotNetWithFramework" (fun _ -> | Some test -> Trace.traceImportant "Using the NuGet package" Path.GetDirectoryName test - | _ -> Path.getFullName "_Packaging/Unpack/tools/net45" + | _ -> Path.getFullName "_Packaging/Unpack/tools/net472" let simpleReport = (Path.getFullName "./_Reports") @@ ("ReleaseDotNetWithFramework.xml") @@ -2743,7 +2821,7 @@ _Target "ReleaseFSharpTypesDotNetRunner" (fun _ -> Actions.ValidateFSharpTypes x [ "main" ] printfn "Execute the instrumented tests" - let sample2 = Path.getFullName "./Sample2/sample2.core.fsproj" + let sample2 = Path.getFullName "./Sample2/Sample2.fsproj" let runner = Path.getFullName "_Packaging/Unpack/tools/netcoreapp2.0/AltCover.dll" let (dotnetexe, args) = defaultDotNetTestCommandLine (Some "netcoreapp2.1") sample2 @@ -2783,7 +2861,8 @@ _Target "ReleaseFSharpTypesX86DotNetRunner" (fun _ -> |> printfn "%A" printfn "Build the sample2 code as x86" - "./altcover.core.sln" + "./AltCover.sln" + |> Path.GetFullPath |> DotNet.build (fun p -> { p with Configuration = DotNet.BuildConfiguration.Debug @@ -2814,7 +2893,7 @@ _Target "ReleaseFSharpTypesX86DotNetRunner" (fun _ -> |> AltCoverCommand.run Actions.ValidateFSharpTypes x [ "main" ] printfn "Execute the instrumented tests" - let sample2 = Path.getFullName "./Sample2/sample2.core.fsproj" + let sample2 = Path.getFullName "./Sample2/Sample2.fsproj" // Run let (dotnetexe, args) = @@ -2870,7 +2949,7 @@ _Target "ReleaseXUnitFSharpTypesDotNet" (fun _ -> Actions.ValidateFSharpTypes x [ "main" ] printfn "Execute the instrumented tests" - "sample4.core.fsproj" + "Sample4.fsproj" |> DotNet.test (fun o -> { o.WithCommon(withWorkingDirectoryVM "Sample4") with Configuration = DotNet.BuildConfiguration.Debug @@ -2909,7 +2988,7 @@ _Target "ReleaseXUnitFSharpTypesDotNetRunner" (fun _ -> Actions.ValidateFSharpTypes x [ "main" ] printfn "Execute the instrumented tests" - let sample4 = Path.getFullName "./Sample4/sample4.core.fsproj" + let sample4 = Path.getFullName "./Sample4/Sample4.fsproj" let runner = Path.getFullName "_Packaging/Unpack/tools/netcoreapp2.0/AltCover.dll" let (dotnetexe, args) = defaultDotNetTestCommandLine (Some "netcoreapp2.1") sample4 @@ -2958,7 +3037,7 @@ _Target "OpenCoverForPester" (fun _ -> |> AltCoverCommand.run printfn "Execute the instrumented tests" - let sample = Path.getFullName "./Sample18/sample18.core.fsproj" + let sample = Path.getFullName "./Sample18/Sample18.fsproj" let runner = Path.getFullName "_Packaging/Unpack/tools/netcoreapp2.0/AltCover.dll" let (dotnetexe, args) = defaultDotNetTestCommandLine (Some "netcoreapp3.0") sample @@ -3136,7 +3215,7 @@ _Target "ReleaseXUnitFSharpTypesShowVisualized" (fun _ -> |> AltCoverCommand.run printfn "Execute the instrumented tests" - let sample4 = Path.getFullName "./Sample4/sample4.core.fsproj" + let sample4 = Path.getFullName "./Sample4/Sample4.fsproj" let runner = Path.getFullName "_Packaging/Unpack/tools/netcoreapp2.0/AltCover.dll" let (dotnetexe, args) = defaultDotNetTestCommandLine (Some "netcoreapp2.1") sample4 @@ -3182,6 +3261,7 @@ _Target "ReleaseXUnitFSharpTypesDotNetFullRunner" (fun _ -> let i = Path.getFullName "_Binaries/Sample4/Debug+AnyCPU/netcoreapp2.1" Shell.cleanDir o + let before = Actions.ticksNow() let prep = AltCover.PrepareOptions.Primitive ({ Primitive.PrepareOptions.Create() with @@ -3201,7 +3281,7 @@ _Target "ReleaseXUnitFSharpTypesDotNetFullRunner" (fun _ -> Actions.CheckSample4Content x printfn "Execute the instrumented tests" - let sample4 = Path.getFullName "./Sample4/sample4.core.fsproj" + let sample4 = Path.getFullName "./Sample4/Sample4.fsproj" let runner = Path.getFullName "_Packaging/Unpack/tools/netcoreapp2.0/AltCover.dll" let (dotnetexe, args) = defaultDotNetTestCommandLine (Some "netcoreapp2.1") sample4 @@ -3218,7 +3298,7 @@ _Target "ReleaseXUnitFSharpTypesDotNetFullRunner" (fun _ -> ToolType = dotnetAltcover WorkingDirectory = o } |> AltCoverCommand.run - Actions.CheckSample4Visits x) + Actions.CheckSample4Visits before x) _Target "MSBuildTest" (fun _ -> Directory.ensure "./_Reports" @@ -3227,12 +3307,13 @@ _Target "MSBuildTest" (fun _ -> let x = Path.getFullName "./_Reports/MSBuildTest.xml" // Run + let before = Actions.ticksNow() Shell.cleanDir (sample @@ "_Binaries") DotNet.msbuild (fun opt -> opt.WithCommon(fun o' -> { dotnetOptions o' with WorkingDirectory = sample })) (build @@ "msbuildtest.proj") printfn "Checking samples4 output" - Actions.CheckSample4 x + Actions.CheckSample4 before x // touch-test framework let unpack = @@ -3240,7 +3321,7 @@ _Target "MSBuildTest" (fun _ -> | Some test -> Trace.traceImportant "Using the NuGet package" Path.GetDirectoryName test - | _ -> Path.getFullName "_Packaging/Unpack/tools/net45" + | _ -> Path.getFullName "_Packaging/Unpack/tools/net472" MSBuild.build (fun p -> { p with @@ -3249,9 +3330,10 @@ _Target "MSBuildTest" (fun _ -> [ "Configuration", "Debug" "MSBuildTest", "true" "AltCoverPath", unpack.Replace('\\', '/') - "DebugSymbols", "True" ] }) "./Sample4/Sample4.fsproj") + "DebugSymbols", "True" ] }) "./Sample4/Sample4LongForm.fsproj") _Target "ApiUse" (fun _ -> + let before = Actions.ticksNow() try Directory.ensure "./_ApiUse" Shell.cleanDir ("./_ApiUse") @@ -3272,7 +3354,7 @@ _Target "ApiUse" (fun _ -> repo.SetAttributeValue(XName.Get "value", Path.getFullName "./_Packaging") config.Save "./_ApiUse/_DotnetTest/NuGet.config" - let fsproj = XDocument.Load "./Sample4/sample4.core.fsproj" + let fsproj = XDocument.Load "./Sample4/Sample4.fsproj" let targets = fsproj.Descendants(XName.Get("TargetFrameworks")) |> Seq.head targets.SetValue "netcoreapp2.1" let pack = fsproj.Descendants(XName.Get("PackageReference")) |> Seq.head @@ -3424,12 +3506,12 @@ Target.runOrDefault "DoIt" File.WriteAllText("./_ApiUse/DriveApi.fsx", script.Replace("{0}","\"" + ver + "\"")) - let dependencies = """version 5.245.1 + let dependencies = """version 5.249.0 // [ FAKE GROUP ] group NetcoreBuild source https://api.nuget.org/v3/index.json - nuget Fake.Core.Target >= 5.20.1 - nuget Fake.DotNet.Cli >= 5.20.1 + nuget Fake.Core.Target >= 5.20.3 + nuget Fake.DotNet.Cli >= 5.20.3 source {0} nuget AltCover.Api {1} source {2} @@ -3445,7 +3527,7 @@ group NetcoreBuild "running fake script returned with a non-zero exit code" let x = Path.getFullName "./_ApiUse/_DotnetTest/coverage.netcoreapp2.1.xml" - Actions.CheckSample4 x + Actions.CheckSample4 before x finally [ "altcover"; "altcover.api"; "altcover.fake" ] |> List.iter (fun f -> @@ -3472,7 +3554,7 @@ _Target "DotnetTestIntegration" (fun _ -> repo.SetAttributeValue(XName.Get "value", Path.getFullName "./_Packaging") config.Save (d @@ "NuGet.config") - let projpath = "./" + p + "/" + p.ToLowerInvariant() + ".core." + t + let projpath = "./" + p + "/" + p + "." + t printfn "%s -> %s" d projpath let fsproj = XDocument.Load projpath @@ -3495,6 +3577,7 @@ _Target "DotnetTestIntegration" (fun _ -> ) printfn "Simple positive case ------------------------------------------------" + let before = Actions.ticksNow() let p0 = Primitive.PrepareOptions.Create() let c0 = Primitive.CollectOptions.Create() @@ -3511,14 +3594,14 @@ _Target "DotnetTestIntegration" (fun _ -> |> testWithCLIArguments) "dotnettest.fsproj" let x = Path.getFullName "./_DotnetTest/coverage.netcoreapp2.1.xml" - Actions.CheckSample4 x + Actions.CheckSample4 before x printfn "optest failing instrumentation ------------------------------------------------" let xx0 = Path.getFullName "./_Reports/nonesuch.xml" let pf0 = - { p0 with AssemblyFilter = [| "NUnit" |] + { p0 with AssemblyFilter = [| "NUnit" |] StrongNameKey = "./_Reports/nonesuch.junk" XmlReport = xx0 } |> AltCover.PrepareOptions.Primitive @@ -3669,6 +3752,24 @@ _Target "DotnetTestIntegration" (fun _ -> let cover37 = XDocument.Load "./RegressionTesting/issue37/coverage.xml" Assert.That(cover37.Descendants(XName.Get("BranchPoint")) |> Seq.length, Is.EqualTo 2) + + // printfn "Regression test issue 94 ------------------------------------------------" + // let proj = XDocument.Load "./Sample22/Sample22.xml" + // let pack = proj.Descendants(XName.Get("PackageReference")) |> Seq.head + // let inject = + // XElement + // (XName.Get "PackageReference", XAttribute(XName.Get "Include", "altcover"), + // XAttribute(XName.Get "Version", !Version)) + // pack.AddBeforeSelf inject + // proj.Save "./Sample22/Sample22.fsproj" + + // let p4 = { p0 with AssemblyFilter = [ "NUnit" ] } + // let pp4 = AltCover.PrepareOptions.Primitive p4 + // DotNet.test (fun to' -> + // { ((to'.WithCommon(withWorkingDirectoryVM "Sample22")).WithAltCoverOptions + // pp4 cc0 ForceTrue) with Configuration = DotNet.BuildConfiguration.Release } + // |> testWithCLIArguments) "" + finally let folder = (nugetCache @@ "altcover") @@ !Version Shell.mkdir folder @@ -3820,18 +3921,23 @@ _Target "Issue67" (fun _ -> Shell.mkdir folder Shell.deleteDir folder) -_Target "Issue72" (fun _ -> +_Target "Issue72" (fun _ -> // Confusing switch case coverage @ https://github.com/SteveGilham/altcover/issues/72 try Directory.ensure "./Sample16/Test/_Issue72" Shell.cleanDir ("./Sample16/Test/_Issue72") + Directory.ensure "./Sample16/Test/_Issue72b" + Shell.cleanDir ("./Sample16/Test/_Issue72b") let config = XDocument.Load "./Build/NuGet.config.dotnettest" let repo = config.Descendants(XName.Get("add")) |> Seq.head repo.SetAttributeValue(XName.Get "value", Path.getFullName "./_Packaging") config.Save "./Sample16/Test/_Issue72/NuGet.config" + config.Save "./Sample16/Test/_Issue72b/NuGet.config" Shell.copy "./Sample16/Test/_Issue72" (!!"./Sample16/Test/Test/*.cs") Shell.copy "./Sample16/Test/_Issue72" (!!"./Sample16/Test/Test/*.json") + Shell.copy "./Sample16/Test/_Issue72b" (!!"./Sample16/Test/Test/*.cs") + Shell.copy "./Sample16/Test/_Issue72b" (!!"./Sample16/Test/Test/*.json") let csproj = XDocument.Load "./Sample16/Test/Test/Test.csproj" @@ -3842,13 +3948,14 @@ _Target "Issue72" (fun _ -> XAttribute(XName.Get "Version", !Version)) pack.AddBeforeSelf inject csproj.Save "./Sample16/Test/_Issue72/Test.csproj" + csproj.Save "./Sample16/Test/_Issue72b/Test2.csproj" let p0 = { Primitive.PrepareOptions.Create() with LocalSource = true VisibleBranches = false TypeFilter = [ "UnitTest" ] - XmlReport = "./original.xml" } + XmlReport = "./original.$(ProjectName).xml" } let pp0 = AltCover.PrepareOptions.Primitive p0 let c0 = Primitive.CollectOptions.Create() @@ -3861,7 +3968,7 @@ _Target "Issue72" (fun _ -> |> testWithCLIArguments) "" do use coverageFile = - new FileStream("./Sample16/Test/_Issue72/original.xml", FileMode.Open, + new FileStream("./Sample16/Test/_Issue72/original.Test.xml", FileMode.Open, FileAccess.Read, FileShare.None, 4096, FileOptions.SequentialScan) let coverageDocument = XDocument.Load(XmlReader.Create(coverageFile)) @@ -3869,17 +3976,19 @@ _Target "Issue72" (fun _ -> coverageDocument.Descendants(XName.Get("BranchPoint")) |> Seq.map (fun x -> x.Attribute(XName.Get("vc")).Value) |> Seq.toList - Assert.That - (found, - Is.EquivalentTo [ "1"; "4"; "4"; "0"; "3"; "1"; "2"; "1"; "1"; "1"; "5"; "5" ], - sprintf "original: %A" found) + test <@ (found, "first") = (["1"; "4"; "3"; "1"; "2"; "1"; "1"; "1"; "5"; "5"], "first") @> // 3.1.401 + // [ "1"; "4"; "4"; "0"; "3"; "1"; "2"; "1"; "1"; "1"; "5"; "5" ] @> + // Assert.That + // (found, + // Is.EquivalentTo [ "1"; "4"; "4"; "0"; "3"; "1"; "2"; "1"; "1"; "1"; "5"; "5" ], + // sprintf "original: %A" found) let p1 = { Primitive.PrepareOptions.Create() with LocalSource = true VisibleBranches = true TypeFilter = [ "UnitTest" ] - XmlReport = "./combined.xml" } + XmlReport = "./combined.$(ProjectName).xml" } let pp1 = AltCover.PrepareOptions.Primitive p1 let c0 = Primitive.CollectOptions.Create() @@ -3892,7 +4001,7 @@ _Target "Issue72" (fun _ -> |> testWithCLIArguments) "" do use coverageFile = - new FileStream("./Sample16/Test/_Issue72/combined.xml", FileMode.Open, + new FileStream("./Sample16/Test/_Issue72/combined.Test.xml", FileMode.Open, FileAccess.Read, FileShare.None, 4096, FileOptions.SequentialScan) let coverageDocument = XDocument.Load(XmlReader.Create(coverageFile)) @@ -3900,9 +4009,23 @@ _Target "Issue72" (fun _ -> coverageDocument.Descendants(XName.Get("BranchPoint")) |> Seq.map (fun x -> x.Attribute(XName.Get("vc")).Value) |> Seq.toList - Assert.That - (found, Is.EquivalentTo [ "1"; "4"; "1"; "1"; "1"; "1"; "5"; "5" ], - sprintf "combined: %A" found) + test <@ (found, "second") = ([ "1"; "4"; "1"; "1"; "1"; "1"; "5"; "5" ], "second") @> + // Assert.That + // (found, Is.EquivalentTo [ "1"; "4"; "1"; "1"; "1"; "1"; "5"; "5" ], + // sprintf "combined: %A" found) + + // Issue 98 optest + printfn "----------------------------- issue 98 ----------------------------------------" + Shell.cleanDir ("./Sample16/Test/_Intermediate") + let psln = AltCover.PrepareOptions.Primitive {p0 with XmlReport = "$(SolutionDir)/_Reports/solution.$(ProjectName).xml"} + DotNet.test (fun p -> + (({ p.WithCommon(withWorkingDirectoryVM "./Sample16/Test") with + Configuration = DotNet.BuildConfiguration.Debug + NoBuild = false }).WithAltCoverOptions psln cc0 ForceTrue) + .WithAltCoverImportModule().WithAltCoverGetVersion() + |> testWithCLIArguments) "Issue72.sln" + test <@ File.Exists ("./Sample16/Test/_Reports/solution.Test.xml") @> + test <@ File.Exists ("./Sample16/Test/_Reports/solution.Test2.xml") @> finally let folder = (nugetCache @@ "altcover") @@ !Version @@ -3916,7 +4039,7 @@ _Target "DotnetGlobalIntegration" (fun _ -> Directory.ensure working Shell.cleanDir working - let fsproj = XDocument.Load "./Sample4/sample4.core.fsproj" + let fsproj = XDocument.Load "./Sample4/Sample4.fsproj" let targets = fsproj.Descendants(XName.Get("TargetFrameworks")) |> Seq.head targets.SetValue "netcoreapp2.1" fsproj.Save "./_DotnetGlobalTest/dotnetglobal.fsproj" @@ -3949,6 +4072,8 @@ _Target "DotnetGlobalIntegration" (fun _ -> |> List.iter (AltCoverCommand.Options.Create >> AltCoverCommand.run) + let before = Actions.ticksNow() + Actions.Run("altcover", ".", ["TargetsPath"]) "altcover target" let prep = AltCover.PrepareOptions.Primitive @@ -3976,7 +4101,7 @@ _Target "DotnetGlobalIntegration" (fun _ -> |> AltCoverCommand.Collect { AltCoverCommand.Options.Create collect with WorkingDirectory = working } |> AltCoverCommand.run - Actions.CheckSample4Visits x + Actions.CheckSample4Visits before x let command = """$ImportModule = (altcover ImportModule | Out-String).Trim().Split()[1].Trim(@([char]34)); Import-Module $ImportModule; ConvertTo-BarChart -?""" CreateProcess.fromRawCommand pwsh [ "-NoProfile"; "-Command"; command ] @@ -4005,24 +4130,8 @@ _Target "MakeDocumentation" (fun _ -> _Target "BulkReport" (fun _ -> printfn "Overall coverage reporting" - Directory.ensure "./_Reports/_BulkReport" - !!"./_Reports/*.xml" - |> Seq.filter (fun f -> - not <| f.EndsWith("Report.xml", StringComparison.OrdinalIgnoreCase)) - |> Seq.toList - |> ReportGenerator.generateReports (fun p -> - { p with - ToolType = ToolType.CreateLocalTool() - ReportTypes = [ ReportGenerator.ReportType.Html ] - TargetDir = "_Reports/_BulkReport" }) - - let numbers = uncovered @"_Reports/_Unit*/Summary.xml" - if numbers - |> List.tryFind (fun n -> n > 0) - |> Option.isSome - || !misses > 1 - then Assert.Fail("Coverage is too low") + // coverageSummary () let issue71 = !!(@"./**/*.exn") |> Seq.toList match issue71 with @@ -4087,10 +4196,16 @@ Target.activateFinal "ResetConsoleColours" "Compilation" ==> "UnitTestWithOpenCover" +//=?> ("UnitTestWithOpenCover", +// (!!(@"_Binaries/*Test*/Debug+AnyCPU/net4*/AltCover*Test*.dll") +// |> Seq.length) < 6) =?> ("UnitTest", Environment.isWindows) // OpenCover Mono support "Compilation" ==> "UnitTestWithAltCover" +//=?> ("UnitTestWithAltCover", +// (!!(@"_Binaries/*Test*/Debug+AnyCPU/net4*/AltCover*Test*.dll") +// |> Seq.length) < 6) ==> "UnitTest" "Compilation" diff --git a/altcover.inspector/Program.cs b/Demo/inspector/Program.cs similarity index 100% rename from altcover.inspector/Program.cs rename to Demo/inspector/Program.cs diff --git a/altcover.inspector/Program.fs b/Demo/inspector/Program.fs similarity index 100% rename from altcover.inspector/Program.fs rename to Demo/inspector/Program.fs diff --git a/altcover.inspector/altcover.inspector.csproj b/Demo/inspector/inspector.csproj similarity index 100% rename from altcover.inspector/altcover.inspector.csproj rename to Demo/inspector/inspector.csproj diff --git a/altcover.inspector/altcover.inspector.fsproj b/Demo/inspector/inspector.fsproj similarity index 100% rename from altcover.inspector/altcover.inspector.fsproj rename to Demo/inspector/inspector.fsproj diff --git a/MCS.sln b/MCS.sln index f318c4eab..99364190d 100644 --- a/MCS.sln +++ b/MCS.sln @@ -5,7 +5,7 @@ VisualStudioVersion = 16.0.29728.190 MinimumVisualStudioVersion = 10.0.40219.1 Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "MCS", "MCS\MCS.fsproj", "{FBAA818A-A049-4149-9032-31C8D244AEA6}" EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Sample4", "Sample4\Sample4.fsproj", "{607161F1-86BE-471A-9837-3D19BFAAA5FA}" +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Sample4", "Sample4\Sample4LongForm.fsproj", "{607161F1-86BE-471A-9837-3D19BFAAA5FA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/README.md b/README.md index 0f0f63255..dc24d7f2a 100644 --- a/README.md +++ b/README.md @@ -35,16 +35,10 @@ In particular, while instrumenting .net core assemblies "just works" with this a ### Why altcover? -- the back-story of why it was ever a thing -Back in 2010, the new .net version finally removed the deprecated profiling APIs that the free NCover 1.5.x series relied upon. The first version of AltCover was written to both fill a gap in functionality, and to give me an excuse for a ground-up F# project to work on. As such, it saw real production use for about a year and a half, until OpenCover reached a point where it could be used for .net4/x64 work (and I could find time to adapt everything downstream that consumed NCover format input). +Back in 2010, the new .net version finally removed the deprecated profiling APIs that the free NCover 1.5.x series relied upon. The first version of AltCover was written to both fill a gap in functionality, and to give me an excuse for a ground-up F# project to work on. As such, it saw real production use for about a year and a half, until [OpenCover](https://github.com/OpenCover/opencover) reached a point where it could be used for .net4/x64 work (and I could find time to adapt everything downstream that consumed NCover format input). Fast forwards to autumn 2017, and I get the chance to dust the project off, with the intention of saying that it worked on Mono, too -- and realise that it's _déja vu_ all over again, because .net core didn't yet have profiler based coverage tools either, and the same approach would work there as well. -### Other notes - -1. On old-fashioned .net framework, the `ProcessExit` event handling window of ~2s is sufficient for processing significant bodies of code under test (several 10s of kloc, as observed in production back in the '10-'11 timeframe); under `dotnet test` [the `vstest.console` process imposes a 100ms guillotine](https://github.com/Microsoft/vstest/issues/1900#issuecomment-457488472), even though .net Core imposes no time-limit of its own. This is about enough time to fill in an NCover report for a program of no more than 1kloc, hence the development of a "write it all promptly to file and post-process" `Runner` mode. With version 5.3 and above, the `dotnet test` integration now hooks the VSTest in-process data collection, allowing an indefinite window to write collected data from memory, thus removing the file I/O bottleneck. - -2. Under Mono on non-Windows platforms the default values of `--debug:full` or `--debug:pdbonly` generate no symbols from F# projects -- and without symbols, such assemblies cannot be instrumented. Unlike with C# projects, where the substitution appears to be automatic, to use the necessary `--debug:portable` option involves explicitly hand editing the old-school `.fsproj` file to have `portable`. - ## Continuous Integration | | | | @@ -62,7 +56,11 @@ See the [current project](https://github.com/SteveGilham/altcover/projects/8) an All `To do` and `On Hold` items are implicitly up for grabs and `Help Wanted`; most of the current project items are XML manipulation or GUI programming. -I am considering retiring the legacy framework/Mono support after the release of .net 5, contingent on having suitable replacements for Framework-only static analysis tools. +### Possible retirement/obsolescence of support + +tl;dr -- legacy framework/Mono support is not going away any time soon. + +Despite earlier ruminations on the subject, as .net 4.7.2 can consume `netstandard2.0` libraries (everything but the recorder), and .net core 2+ can consume `net20` libraries (the recorder), legacy framework/Mono support will continue after the release of .net 5 and until such a time as it is no longer possible to retain those API levels. Framework builds apart from the minimum (executable entry-points and the recorder) remain until I have suitable replacements for Framework-only static analysis tooling (i.e. can convince FxCop to consume `netstandard20`). ## Building @@ -72,22 +70,20 @@ I am considering retiring the legacy framework/Mono support after the release of It is assumed that the following are available -.net core SDK 3.1.301 (`dotnet`) -- try https://www.microsoft.com/net/download -PowerShell Core 7.0.1 or later (`pwsh`) -- try https://github.com/powershell/powershell +.net core SDK 3.1.401 (`dotnet`) -- try https://www.microsoft.com/net/download +PowerShell Core 7.0.3 or later (`pwsh`) -- try https://github.com/powershell/powershell The build may target netstandard2.0 or netcoreapp2.x, but does not need any pre-3.1 runtimes to be installed. #### Windows -You will need Visual Studio VS2019 (Community Edition) v16.6.2 or later with F# language support (or just the associated build tools and your editor of choice). The NUnit3 Test Runner will simplify the basic in-IDE development cycle. Note that some of the unit tests expect that the separate build of test assemblies under Mono, full .net framework and .net core has taken place; there will be around 20 failures when running the unit tests in Visual Studio from clean when those expected assemblies are not found. +You will need Visual Studio VS2019 (Community Edition) v16.7 or later with F# language support (or just the associated build tools and your editor of choice). The NUnit3 Test Runner will simplify the basic in-IDE development cycle. Note that some of the unit tests expect that the separate build of test assemblies under Mono, full .net framework and .net core has taken place; there will many failures when running the unit tests in Visual Studio from clean when those expected assemblies are not found. For GTK# support, the GTK# latest 2.12 install is expected -- try https://www.mono-project.com/download/stable/#download-win -- while the latest releases of the GTK#3 libraries will download the native support if the expected version is not detected. -In preparation for the .net 5 unification, on Windows, the default full build uses new-style projects under `altcover.core.sln` with a few test/helper old-style projects built from `MCS.sln`; and the build for release only needs these. - #### *nix -It is assumed that `mono` (version 6.8.x) and `dotnet` are on the `PATH` already, and everything is built from the command line, with your favourite editor used for coding. +It is assumed that `mono` (version 6.10.x) and `dotnet` are on the `PATH` already, and everything is built from the command line, with your favourite editor used for coding. ### Bootstrapping @@ -106,7 +102,7 @@ If there's a passing build on the CI servers for this commit, then it's likely t ### Unit Tests -The tests in the `AltCover.Test` project are ordered in the same dependency order as the code within the AltCover project (the later `Runner` tests aside). While working on any given layer, it would make sense to comment out all the tests for later files so as to show what is and isn't being covered by explicit testing, rather than merely being cascaded through. +The tests in the `AltCover.Test` project are broadly ordered in the same dependency order as the code within the AltCover project (the later `Runner` tests aside). While working on any given layer, it would make sense to comment out all the tests for later files so as to show what is and isn't being covered by explicit testing, rather than merely being cascaded through. ## Thanks to diff --git a/AltCover.Recorder/Adapter.fs b/Recorder.Tests/Adapter.fs similarity index 100% rename from AltCover.Recorder/Adapter.fs rename to Recorder.Tests/Adapter.fs diff --git a/Recorder.Tests/altcover.recorder.tests.core.fsproj b/Recorder.Tests/AltCover.Recorder.Tests.fsproj similarity index 81% rename from Recorder.Tests/altcover.recorder.tests.core.fsproj rename to Recorder.Tests/AltCover.Recorder.Tests.fsproj index 573f321b7..6fb5a0292 100644 --- a/Recorder.Tests/altcover.recorder.tests.core.fsproj +++ b/Recorder.Tests/AltCover.Recorder.Tests.fsproj @@ -1,13 +1,13 @@  - netcoreapp3.0;net47;net20 + netcoreapp3.0;net472;net20 false AltCover.Recorder.Tests false NETCOREAPP2_0 NET2 - NET4 + NET4 $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ @@ -24,9 +24,10 @@ + - + @@ -42,7 +43,7 @@ all runtime; build; native; contentfiles; analyzers - + @@ -53,7 +54,7 @@ - + @@ -61,19 +62,20 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + + - + 4.3.0 @@ -84,5 +86,4 @@ 4.3.0 - \ No newline at end of file diff --git a/Recorder.Tests/Program.fs b/Recorder.Tests/Program.fs index 584284a58..ee95a60b8 100644 --- a/Recorder.Tests/Program.fs +++ b/Recorder.Tests/Program.fs @@ -12,6 +12,6 @@ namespace Tests.Recorder.Unknown #endif #endif -module Program = +module UnitTestStub = [] let main _ = 0 \ No newline at end of file diff --git a/Recorder.Tests/Recorder.Tests.fs b/Recorder.Tests/Recorder.Tests.fs index c30a6da7b..bc6fe5a1f 100644 --- a/Recorder.Tests/Recorder.Tests.fs +++ b/Recorder.Tests/Recorder.Tests.fs @@ -16,7 +16,6 @@ namespace Tests.Recorder.Unknown open System open System.Collections.Generic -open System.Diagnostics open System.IO open System.IO.Compression open System.Reflection @@ -27,6 +26,8 @@ open System.Xml open AltCover.Recorder open NUnit.Framework +#nowarn "25" // partial pattern match + module AltCoverTests = [] @@ -100,12 +101,12 @@ module AltCoverTests = let key = " " Instance.I.recording <- false - Instance.Visit("key", 17) + Instance.Visit "key" 17 Instance.I.recording <- true Instance.CoverageFormat <- ReportFormat.NCover - Instance.Visit(key, 23) + Instance.Visit key 23 Instance.CoverageFormat <- ReportFormat.OpenCoverWithTracking - Instance.Visit(key, 23) + Instance.Visit key 23 Assert.True( Adapter.VisitsSeq() |> Seq.length = 1 ) Assert.True( Adapter.VisitsEntrySeq key @@ -121,12 +122,14 @@ module AltCoverTests = [] let JunkUspidGivesNegativeIndex() = let key = " " - let index = Counter.I.findIndexFromUspid(0, key) + let index = Counter.I.findIndexFromUspid 0 key Assert.True( index < 0 ) [] let PayloadGeneratedIsAsExpected() = try + Instance.I.isRunner <- false + Instance.CoverageFormat <- ReportFormat.OpenCoverWithTracking Assert.True( Instance.I.callerId() = 0 ) Assert.True( Adapter.PayloadSelector false = Adapter.Null() ) Assert.True( Adapter.PayloadSelector true = Adapter.Null() ) @@ -144,6 +147,7 @@ module AltCoverTests = Assert.True(( Adapter.PayloadSelector true = (Adapter.Call 4321) )) finally Instance.Pop() + Instance.CoverageFormat <- ReportFormat.NCover let result2 = Adapter.PayloadSelection(1311693406324658740L, 1000L, true) let expected2 = Adapter.Time 1311693406324658000L @@ -154,16 +158,83 @@ module AltCoverTests = Assert.True( Adapter.Null() |> Adapter.untime |> Seq.isEmpty ) - match Adapter.untime probed |> Seq.toList with - | [ probe ] -> - Assert.True( probe % 1000L = 0L ) - Assert.True( probe <= v2 ) - Assert.True( probe >= (1000L * (v1 / 1000L)) ) - | _ -> Assert.True( false ) + let [ probe ] = Adapter.untime probed |> Seq.toList + Assert.True( probe % 1000L = 0L ) + Assert.True( probe <= v2 ) + Assert.True( probe >= (1000L * (v1 / 1000L)) ) Assert.True( Instance.I.callerId() = 0 ) Instance.Pop() Assert.True( Instance.I.callerId() = 0 ) + [] + let PayloadWithEntryExitGeneratedIsAsExpected() = + try + Instance.I.isRunner <- true + Instance.CoverageFormat <- ReportFormat.OpenCoverWithTracking + Adapter.VisitsClear() + + Assert.True( Instance.I.callerId() = 0 ) + Assert.True( Adapter.PayloadSelector false = Adapter.Null() ) + Assert.True( Adapter.PayloadSelector true = Adapter.Null() ) + Instance.Push 4321 + Assert.True( Adapter.PayloadSelector false = Adapter.Null() ) + Assert.True( Adapter.PayloadSelector true = (Adapter.Call 4321) ) + try + Instance.Push 6789 + // 0x1234123412341234 == 1311693406324658740 + let result = Adapter.PayloadSelection(1311693406324658740L, 1000L, true) + let expected = Adapter.NewBoth(1311693406324658000L, 6789) + Assert.True(( result = expected )) + finally + Instance.Pop() + Assert.True(( Adapter.PayloadSelector true = (Adapter.Call 4321) )) + finally + Instance.Pop() + Instance.I.isRunner <- false + Instance.CoverageFormat <- ReportFormat.NCover + + let result2 = Adapter.PayloadSelection(1311693406324658740L, 1000L, true) + let expected2 = Adapter.Time 1311693406324658000L + Assert.True(( result2 = expected2 )) + let v1 = DateTime.UtcNow.Ticks + let probed = Adapter.PayloadControl(1000L, true) + let v2 = DateTime.UtcNow.Ticks + Assert.True( Adapter.Null() + |> Adapter.untime + |> Seq.isEmpty ) + let [ probe ] = Adapter.untime probed |> Seq.toList + Assert.True( probe % 1000L = 0L ) + Assert.True( probe <= v2 ) + Assert.True( probe >= (1000L * (v1 / 1000L)) ) + Assert.True( Instance.I.callerId() = 0 ) + Instance.Pop() + Assert.True( Instance.I.callerId() = 0 ) + Assert.That(Instance.I.visits.Keys, Is.EquivalentTo [Track.Entry; Track.Exit]) + Assert.That(Instance.I.visits.[Track.Entry].Keys, Is.EquivalentTo [4321; 6789]) + Assert.That(Instance.I.visits.[Track.Exit].Keys, Is.EquivalentTo [4321; 6789]) + let a = Instance.I.visits.[Track.Entry].[4321] + Assert.That (a.Count, Is.EqualTo 0L) + Assert.That (a.Tracks |> Seq.length, Is.EqualTo 1) + let b = Instance.I.visits.[Track.Entry].[6789] + Assert.That (b.Count, Is.EqualTo 0L) + Assert.That (b.Tracks |> Seq.length, Is.EqualTo 1) + let c = Instance.I.visits.[Track.Exit].[6789] + Assert.That (c.Count, Is.EqualTo 0L) + Assert.That (c.Tracks |> Seq.length, Is.EqualTo 1) + let d = Instance.I.visits.[Track.Exit].[4321] + Assert.That (d.Count, Is.EqualTo 0L) + Assert.That (d.Tracks |> Seq.length, Is.EqualTo 1) + + let a2 = a.Tracks |> Seq.head |> Adapter.untime |> Seq.head + let b2 = b.Tracks |> Seq.head |> Adapter.untime |> Seq.head + Assert.That (b2 >= a2) + let c2 = c.Tracks |> Seq.head |> Adapter.untime |> Seq.head + Assert.That (c2 >= b2) + let d2 = d.Tracks |> Seq.head |> Adapter.untime |> Seq.head + Assert.That (d2 >= c2, sprintf "%A >= %A" d2 c2) + + Adapter.VisitsClear() + [] let RealIdShouldIncrementCountSynchronously() = GetMyMethodName "=>" @@ -174,7 +245,7 @@ module AltCoverTests = Instance.I.visits.Clear() Instance.I.trace <- Adapter.MakeNullTrace null let key = " " - Instance.I.visitSelection((Adapter.Null()), key, 23) + Instance.I.visitSelection (Adapter.Null()) key 23 Assert.That (Instance.I.visits.Count, Is.EqualTo 1, "A visit that should have happened, didn't") @@ -188,19 +259,32 @@ module AltCoverTests = Instance.I.trace <- save) GetMyMethodName "<=" + let strip before (all:HashSet) = + before + |> Seq.iter (fun x -> + Assert.That(all.Contains x) + all.Remove x |> ignore) + + [] + let StripWorks() = + let b1 = [ "1" ] + let a1 = [ "1"; "2" ] + let a1' = HashSet(a1) + strip b1 a1' + let stripped1 = a1' |> Seq.toList + Assert.That(stripped1, Is.EquivalentTo [ "2" ]) + Assert.Throws( fun () -> strip b1 a1') |> ignore + [] let ExceptionLoggedToFile() = let path = Instance.ReportFile |> Path.GetFullPath let where = path |> Path.GetDirectoryName let before = Directory.GetFiles(where, "*.exn") - Instance.I.logException("a", "b", "c", "ex") + Instance.I.logException "a" "b" "c" "ex" let after = Directory.GetFiles(where, "*.exn") Assert.That(after.Length, Is.GreaterThan before.Length) let all = HashSet(after) - before - |> Seq.iter (fun x -> - Assert.That(all.Contains x) - all.Remove x |> ignore) + strip before all Assert.That(all.Count, Is.EqualTo 1) let file = all |> Seq.head let lines = file |> File.ReadAllLines @@ -250,6 +334,7 @@ module AltCoverTests = Assert.That(exn.Message, Is.EqualTo unique) #if NETCOREAPP2_0 + [] let NullRefShouldBeHandled() = GetMyMethodName "=>" @@ -261,14 +346,12 @@ module AltCoverTests = let path = Instance.ReportFile |> Path.GetFullPath let where = path |> Path.GetDirectoryName let before = Directory.GetFiles(where, "*.exn") - Instance.I.visitImpl(key, 23, (Adapter.Null())) + Instance.I.visitImpl key 23 (Adapter.Null()) let after = Directory.GetFiles(where, "*.exn") Assert.That(after.Length, Is.GreaterThan before.Length) let all = HashSet(after) - before - |> Seq.iter (fun x -> - Assert.That(all.Contains x) - all.Remove x |> ignore) + strip before all + Assert.That(all.Count, Is.EqualTo 1) let file = all |> Seq.head let lines = file |> File.ReadAllLines @@ -294,8 +377,8 @@ module AltCoverTests = try Instance.I.visits.Clear() let key = " " - Instance.I.visitImpl(key, 23, (Adapter.Null())) - Instance.I.visitImpl("key", 42, (Adapter.Null())) + Instance.I.visitImpl key 23 (Adapter.Null()) + Instance.I.visitImpl "key" 42 (Adapter.Null()) Assert.That(Instance.I.visits.Count, Is.EqualTo 2) finally Instance.I.visits.Clear()) @@ -308,8 +391,8 @@ module AltCoverTests = try Instance.I.visits.Clear() let key = " " - Instance.I.visitImpl(key, 23, (Adapter.Null())) - Instance.I.visitImpl(key, 42, (Adapter.Null())) + Instance.I.visitImpl key 23 (Adapter.Null()) + Instance.I.visitImpl key 42 (Adapter.Null()) Assert.That(Instance.I.visits.Count, Is.EqualTo 1) Assert.That(Instance.I.visits.[key].Count, Is.EqualTo 2) finally @@ -324,8 +407,8 @@ module AltCoverTests = try Instance.I.visits.Clear() let key = " " - Instance.I.visitImpl(key, 23, (Adapter.Null())) - Instance.I.visitImpl(key, 23, (Adapter.Null())) + Instance.I.visitImpl key 23 (Adapter.Null()) + Instance.I.visitImpl key 23 (Adapter.Null()) Assert.That(Instance.I.visits.[key].[23].Count, Is.EqualTo 2) Assert.That(Instance.I.visits.[key].[23].Tracks, Is.Empty) finally @@ -341,8 +424,8 @@ module AltCoverTests = Instance.I.visits.Clear() let key = " " let payload = Adapter.Time DateTime.UtcNow.Ticks - Instance.I.visitImpl(key, 23, (Adapter.Null())) - Instance.I.visitImpl(key, 23, payload) + Instance.I.visitImpl key 23 (Adapter.Null()) + Instance.I.visitImpl key 23 payload Assert.That(Instance.I.visits.[key].[23].Count, Is.EqualTo 1) Assert.That(Instance.I.visits.[key].[23].Tracks, Is.EquivalentTo [ payload ]) finally @@ -652,10 +735,37 @@ module AltCoverTests = Console.SetOut saved) GetMyMethodName "<=" + let trywith<'a when 'a :> exn> f g = + try + f() + with + | :? 'a -> g() + + let trywithrelease<'a when 'a :> exn> f = + trywith f Instance.I.mutex.ReleaseMutex + + [] + let CanTryWith() = + let mutable flag = false + let setFlag = (fun () -> flag <- true) + trywith + (fun () -> ()) + setFlag + Assert.That(flag, Is.False) + + trywith + (fun () -> InvalidOperationException() |> raise) + setFlag + Assert.That(flag, Is.True) + + Instance.I.mutex.WaitOne(1000) |> ignore + trywithrelease + (fun () -> InvalidOperationException() |> raise) + let PauseLeavesExpectedTraces() = GetMyMethodName "=>" lock Adapter.Lock (fun () -> - try + trywithrelease (fun () -> let saved = Console.Out let here = Directory.GetCurrentDirectory() let where = Assembly.GetExecutingAssembly().Location |> Path.GetDirectoryName @@ -699,21 +809,20 @@ module AltCoverTests = [ "1"; "1"; "1"; "1"; "1"; "1"; "0"; String.Empty; "X"; "-1" ]) finally Instance.I.trace <- save - if File.Exists Instance.ReportFile then File.Delete Instance.ReportFile + AltCoverCoreTests.maybeDeleteFile Instance.ReportFile Adapter.VisitsClear() Instance.I.isRunner <- false Console.SetOut saved Directory.SetCurrentDirectory(here) - try - Directory.Delete(unique) - with :? IOException -> () - with :? AbandonedMutexException -> Instance.I.mutex.ReleaseMutex()) + AltCoverCoreTests.maybeIOException + (fun () -> Directory.Delete(unique)) + )) GetMyMethodName "<=" let ResumeLeavesExpectedTraces() = GetMyMethodName "=>" lock Adapter.Lock (fun () -> - try + trywithrelease (fun () -> let saved = Console.Out let here = Directory.GetCurrentDirectory() let where = Assembly.GetExecutingAssembly().Location |> Path.GetDirectoryName @@ -764,22 +873,21 @@ module AltCoverTests = finally Adapter.Reset() Instance.I.trace <- save - if File.Exists Instance.ReportFile then File.Delete Instance.ReportFile + AltCoverCoreTests.maybeDeleteFile Instance.ReportFile Adapter.VisitsClear() Console.SetOut saved Directory.SetCurrentDirectory(here) File.Delete tag - try - Directory.Delete(unique) - with :? IOException -> () - with :? AbandonedMutexException -> Instance.I.mutex.ReleaseMutex()) + AltCoverCoreTests.maybeIOException + (fun () -> Directory.Delete(unique)) + )) GetMyMethodName "<=" let FlushLeavesExpectedTraces() = GetMyMethodName "=>" lock Adapter.Lock (fun () -> Instance.I.isRunner <- false - try + trywithrelease (fun () -> let saved = Console.Out let here = Directory.GetCurrentDirectory() let where = Assembly.GetExecutingAssembly().Location |> Path.GetDirectoryName @@ -823,21 +931,20 @@ module AltCoverTests = Is.EquivalentTo [ "11"; "10"; "9"; "8"; "7"; "6"; "4"; "3"; "2"; "1" ]) finally Instance.I.trace <- save - if File.Exists Instance.ReportFile then File.Delete Instance.ReportFile + AltCoverCoreTests.maybeDeleteFile Instance.ReportFile Adapter.VisitsClear() Console.SetOut saved Directory.SetCurrentDirectory(here) - try - Directory.Delete(unique) - with :? IOException -> () - with :? AbandonedMutexException -> Instance.I.mutex.ReleaseMutex()) + AltCoverCoreTests.maybeIOException + (fun () -> Directory.Delete(unique)) + )) GetMyMethodName "<=" [] let SupervisedFlushLeavesExpectedTraces() = GetMyMethodName "=>" lock Adapter.Lock (fun () -> - try + trywithrelease (fun () -> let saved = Console.Out let here = Directory.GetCurrentDirectory() let where = Assembly.GetExecutingAssembly().Location |> Path.GetDirectoryName @@ -882,14 +989,13 @@ module AltCoverTests = finally Instance.I.trace <- save Instance.supervision <- false - if File.Exists Instance.ReportFile then File.Delete Instance.ReportFile + AltCoverCoreTests.maybeDeleteFile Instance.ReportFile Adapter.VisitsClear() Console.SetOut saved Directory.SetCurrentDirectory(here) - try - Directory.Delete(unique) - with :? IOException -> () - with :? AbandonedMutexException -> Instance.I.mutex.ReleaseMutex()) + AltCoverCoreTests.maybeIOException + (fun () -> Directory.Delete(unique)) + )) GetMyMethodName "<=" [] @@ -929,12 +1035,11 @@ module AltCoverTests = |> Seq.map (fun x -> x.GetAttribute("visitcount")), Is.EquivalentTo [ "11"; "10"; "9"; "8"; "7"; "6"; "4"; "3"; "2"; "1" ]) finally - if File.Exists reportFile then File.Delete reportFile + AltCoverCoreTests.maybeDeleteFile reportFile Console.SetOut saved Directory.SetCurrentDirectory(here) - try - Directory.Delete(unique) - with :? IOException -> () + AltCoverCoreTests.maybeIOException + (fun () -> Directory.Delete(unique)) [] let FlushLeavesExpectedTracesWhenBroken() = @@ -971,12 +1076,11 @@ module AltCoverTests = (after.OuterXml, Is.EqualTo "") finally - if File.Exists reportFile then File.Delete reportFile + AltCoverCoreTests.maybeDeleteFile reportFile Console.SetOut saved Directory.SetCurrentDirectory(here) - try - Directory.Delete(unique) - with :? IOException -> () + AltCoverCoreTests.maybeIOException + (fun () -> Directory.Delete(unique)) #if !NET2 [] @@ -1020,12 +1124,11 @@ module AltCoverTests = |> Seq.map (fun x -> x.GetAttribute("visitcount")), Is.EquivalentTo [ "11"; "10"; "9"; "8"; "7"; "6"; "4"; "3"; "2"; "1" ]) finally - if File.Exists reportFile then File.Delete reportFile + AltCoverCoreTests.maybeDeleteFile reportFile Console.SetOut saved Directory.SetCurrentDirectory(here) - try - Directory.Delete(unique) - with :? IOException -> () + AltCoverCoreTests.maybeIOException + (fun () -> Directory.Delete(unique)) [] let ZipFlushLeavesExpectedTracesWhenBroken() = @@ -1062,14 +1165,13 @@ module AltCoverTests = (after.OuterXml, Is.EqualTo "") finally - if File.Exists reportFile then File.Delete reportFile - if File.Exists outputFile then File.Delete outputFile - if File.Exists zipFile then File.Delete zipFile + AltCoverCoreTests.maybeDeleteFile reportFile + AltCoverCoreTests.maybeDeleteFile outputFile + AltCoverCoreTests.maybeDeleteFile zipFile Console.SetOut saved Directory.SetCurrentDirectory(here) - try - Directory.Delete(unique) - with :? IOException -> () + AltCoverCoreTests.maybeIOException + (fun () -> Directory.Delete(unique)) [] let ZipFlushLeavesExpectedTracesWhenBrokenInPlace() = @@ -1103,18 +1205,17 @@ module AltCoverTests = let zipInfo = FileInfo(zipFile) Assert.That(zipInfo.Length, Is.EqualTo 0) finally - if File.Exists zipFile then File.Delete zipFile + AltCoverCoreTests.maybeDeleteFile zipFile Console.SetOut saved Directory.SetCurrentDirectory(here) - try - Directory.Delete(unique) - with :? IOException -> () + AltCoverCoreTests.maybeIOException + (fun () -> Directory.Delete(unique)) let ZipFlushLeavesExpectedTraces() = GetMyMethodName "=>" lock Adapter.Lock (fun () -> Instance.I.isRunner <- false - try + trywithrelease (fun () -> let saved = Console.Out let here = Directory.GetCurrentDirectory() let where = Assembly.GetExecutingAssembly().Location |> Path.GetDirectoryName @@ -1167,14 +1268,13 @@ module AltCoverTests = Is.EquivalentTo [ "11"; "10"; "9"; "8"; "7"; "6"; "4"; "3"; "2"; "1" ]) finally Instance.I.trace <- save - if File.Exists Instance.ReportFile then File.Delete Instance.ReportFile + AltCoverCoreTests.maybeDeleteFile Instance.ReportFile Adapter.VisitsClear() Console.SetOut saved Directory.SetCurrentDirectory(here) - try - Directory.Delete(unique) - with :? IOException -> () - with :? AbandonedMutexException -> Instance.I.mutex.ReleaseMutex()) + AltCoverCoreTests.maybeIOException + (fun () -> Directory.Delete(unique)) + )) GetMyMethodName "<=" #endif @@ -1182,6 +1282,8 @@ module AltCoverTests = // run only once in Framework mode to avoid contention [] let MailboxFunctionsAsExpected() = + let dummy = AltCover.Recorder.ExcludeFromCodeCoverageAttribute() + Assert.That(dummy, Is.Not.Null) RealIdShouldIncrementCount() PauseLeavesExpectedTraces() ResumeLeavesExpectedTraces() diff --git a/Recorder.Tests/Tracer.Tests.fs b/Recorder.Tests/Tracer.Tests.fs index 5b4a947bd..b82516be1 100644 --- a/Recorder.Tests/Tracer.Tests.fs +++ b/Recorder.Tests/Tracer.Tests.fs @@ -12,6 +12,8 @@ namespace Tests.Recorder.Unknown #endif #endif +#nowarn "25" // partial pattern match + open System open System.Collections.Generic open System.IO @@ -22,18 +24,47 @@ open NUnit.Framework //[] module AltCoverCoreTests = + let maybeIOException f = + try + f() + with :? IOException -> () + + let maybeDeleteFile f = + if File.Exists f + then File.Delete f + + let maybeReraise f g = + try + f() + with _ -> + g() + reraise() + + [] + let ExcerciseItAll() = + let where = Assembly.GetExecutingAssembly().Location |> Path.GetDirectoryName + let unique = Path.Combine(Path.Combine(where, Guid.NewGuid().ToString()), "nonesuch.txt") + maybeDeleteFile unique + maybeIOException (fun () -> + maybeReraise (fun () -> File.Delete unique) ignore + ) + maybeIOException (fun () -> + maybeReraise (fun () -> IOException() |> raise) ignore + ) [] let WillNotConnectSpontaneously() = let where = Assembly.GetExecutingAssembly().Location |> Path.GetDirectoryName let unique = Path.Combine(where, Guid.NewGuid().ToString()) let mutable client = Tracer.Create unique - try - client <- client.OnStart() - Assert.True(client.IsConnected |> not) - with _ -> - client.Close() - reraise() + let close = (fun () -> client.Close()) + + maybeReraise + (fun () -> + client <- client.OnStart() + Assert.True(client.IsConnected |> not) + close()) + close [] let ValidTokenWillConnect() = @@ -53,15 +84,15 @@ module AltCoverCoreTests = use formatter = new System.IO.BinaryReader(stream) let rec sink() = - try + maybeIOException (fun () -> let id = formatter.ReadString() let strike = formatter.ReadInt32() let tag = formatter.ReadByte() |> int (id, strike, match enum tag with - | Tag.Time -> Adapter.Time <| formatter.ReadInt64() + //| Tag.Time -> Adapter.Time <| formatter.ReadInt64() | Tag.Call -> Adapter.Call <| formatter.ReadInt32() - | Tag.Both -> Adapter.NewBoth((formatter.ReadInt64()), (formatter.ReadInt32())) + //| Tag.Both -> Adapter.NewBoth((formatter.ReadInt64()), (formatter.ReadInt32())) | Tag.Table -> Assert.True(( id = String.Empty )) Assert.True(( strike = 0 )) @@ -95,7 +126,7 @@ module AltCoverCoreTests = (Adapter.NewBoth ((formatter.ReadInt64()), (formatter.ReadInt32()))) tracking() - | Tag.Table -> Assert.True( false, "No nested tables!!") + //| Tag.Table -> Assert.True( false, "No nested tables!!") | _ -> sequencePoint (pts - 1) tracking() else @@ -105,8 +136,7 @@ module AltCoverCoreTests = Adapter.Table t | _ -> Adapter.Null()) |> hits.Add - sink() - with :? System.IO.IOException -> () + sink()) sink() hits @@ -193,52 +223,52 @@ module AltCoverCoreTests = (expected |> Seq.skip 1 |> Seq.head), "unexpected result") - match results + + let [ n'; p'; d' ] = + results |> Seq.head |> Adapter.untable - |> Seq.toList with - | [ n'; p'; d' ] -> - let n = n' :?> String - let p = p' :?> int - let d = d' :?> Dictionary> - Assert.True( n |> Seq.isEmpty ) - Assert.True(( p = 0 )) - Assert.True(( d.Count = 1 )) - Assert.True( d.["name"] - |> Seq.sortBy (fun kv -> kv.Key) - |> Seq.map (fun kv -> kv.Key) - |> Seq.toList = - (t.["name"] - |> Seq.sortBy (fun kv -> kv.Key) - |> Seq.map (fun kv -> kv.Key) - |> Seq.toList) ) - let left = - d.["name"] - |> Seq.sortBy (fun kv -> kv.Key) - |> Seq.map (fun kv -> kv.Value.Count) |> Seq.toList + let n = n' :?> String + let p = p' :?> int + let d = d' :?> Dictionary> + Assert.True( n |> Seq.isEmpty ) + Assert.True(( p = 0 )) + Assert.True(( d.Count = 1 )) + Assert.True( d.["name"] + |> Seq.sortBy (fun kv -> kv.Key) + |> Seq.map (fun kv -> kv.Key) + |> Seq.toList = + (t.["name"] + |> Seq.sortBy (fun kv -> kv.Key) + |> Seq.map (fun kv -> kv.Key) + |> Seq.toList) ) + let left = + d.["name"] + |> Seq.sortBy (fun kv -> kv.Key) + |> Seq.map (fun kv -> kv.Value.Count) + |> Seq.toList - let right = - t.["name"] - |> Seq.sortBy (fun kv -> kv.Key) - |> Seq.map (fun kv -> kv.Value.Count) - |> Seq.toList + let right = + t.["name"] + |> Seq.sortBy (fun kv -> kv.Key) + |> Seq.map (fun kv -> kv.Value.Count) + |> Seq.toList - Assert.True(( left = right )) - let left2 = - d.["name"] - |> Seq.sortBy (fun kv -> kv.Key) - |> Seq.map (fun kv -> kv.Value.Tracks |> Seq.toList) - |> Seq.toList + Assert.True(( left = right )) + let left2 = + d.["name"] + |> Seq.sortBy (fun kv -> kv.Key) + |> Seq.map (fun kv -> kv.Value.Tracks |> Seq.toList) + |> Seq.toList - let right2 = - t.["name"] - |> Seq.sortBy (fun kv -> kv.Key) - |> Seq.map (fun kv -> kv.Value.Tracks |> Seq.toList) - |> Seq.toList + let right2 = + t.["name"] + |> Seq.sortBy (fun kv -> kv.Key) + |> Seq.map (fun kv -> kv.Value.Tracks |> Seq.toList) + |> Seq.toList - Assert.True(( left2 = right2 )) - | _ -> Assert.True( false ) + Assert.True(( left2 = right2 )) finally Adapter.VisitsClear() diff --git a/ReleaseNotes.md b/ReleaseNotes.md index 0e0869900..342aeac27 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -2,6 +2,35 @@ Q. Never mind the fluff -- how do I get started? A. Start with the Quick Start guide : https://github.com/SteveGilham/altcover/wiki/QuickStart-Guide +# 7.1.795 (Genbu series release 7) +* [BUGFIX] Make LCov tracefile output follow what is actually generated, and not just what the `man` page says +* As well as interfaces, hide other types with no non-abstract methods (e.g. plain enums) in the coverage +* Show the branch in `public int string Ternary(bool select) => !select ? Left : Right;` just like it is shown in `public int Ternary (bool select, int left, int right) { return select ? left : right; }`. +* For records, add `entry` and `exit` attributes as semicolon separated lists of the UTC times in ticks at which the method was entered and returns +* For `dotnet test ... /p:AltCoverXmlReport=...` , if the value for the report file path contains one of the following literals + * $(ProjectName) + * $(SolutionDir) + * $([System.Guid]::NewGuid()) + then substitute in the actual values of those build parameters where they haven't already been replaced by MSBuild. + Example: Using `/p:AltCoverXmlReport=$(SolutionDir)/_Reports/solution.$(ProjectName).xml` with `dotnet test` of a solution to place distinctly named report files in a common folder. +Also +* Rationalise .net versions to help speed up the build and ease the net5.0 transition + * Clear out some corner case differences between .net core and .net framework builds based on old work-arounds for symbol writing for the instrumented files + * Build the recorder at `net20` only and use the same assembly everywhere + * Move all the core logic from `AltCover.exe/.dll` to `AltCover.Engine.dll` + * Unify the three different entry-point assembly instances into the now shim-like `AltCover.exe/.dll` + * Build everything against `netstandard2.0` except executable shims and unit tests (tests at `netcoreapp3.0` by default) + * Build `AltCover.exe/.dll` against `net472` for framework support, `netcoreapp2.1` for the global tool and `netcoreapp2.0` for everywhere else + * Build the GTK2 visualizer against `net472` for consistency + * `net472` debug builds for published libraries are retained purely for FxCop consumption +* Collect coverage from unit tests at build time too + +# 7.1.783 (Genbu series release 6a) +* [Visualizer-global-tool] + * [BUGFIX] Don't NRE when cancelling a File Open dialog when Avalonia uses its GTK binding (Linux) + * Support font selection on Windows natively (monospace fonts only) + * On non-Windows platforms, if Tcl/Tk `wish` is present, use that to perform font selection (choose wisely) + # 7.1.782 (Genbu series release 6) * [BUGFIX] Don't throw NRE when encountering an interface with a default method implementation * Omit interfaces without default method implementations from coverage recording, to match the behaviour of OpenCover (Issue #91) diff --git a/Sample1/sample1.core.csproj b/Sample1/Sample1.csproj similarity index 100% rename from Sample1/sample1.core.csproj rename to Sample1/Sample1.csproj diff --git a/Sample10/sample10.core.csproj b/Sample10/Sample10.csproj similarity index 98% rename from Sample10/sample10.core.csproj rename to Sample10/Sample10.csproj index 6ffeb713e..64586d161 100644 --- a/Sample10/sample10.core.csproj +++ b/Sample10/Sample10.csproj @@ -16,9 +16,9 @@ - + - + all runtime; build; native; contentfiles; analyzers diff --git a/Sample11/sample11.core.csproj b/Sample11/Sample11.csproj similarity index 86% rename from Sample11/sample11.core.csproj rename to Sample11/Sample11.csproj index 1ea8b1760..e8dba0efe 100644 --- a/Sample11/sample11.core.csproj +++ b/Sample11/Sample11.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net461 + netstandard2.0;net472 Sample11 false $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ @@ -17,9 +17,9 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Sample12/sample12.core.csproj b/Sample12/Sample12.csproj similarity index 88% rename from Sample12/sample12.core.csproj rename to Sample12/Sample12.csproj index 5038205af..d878ac699 100644 --- a/Sample12/sample12.core.csproj +++ b/Sample12/Sample12.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp2.0;net462 + netcoreapp2.0;net472 Sample12 false @@ -17,10 +17,9 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - \ No newline at end of file diff --git a/Sample13/sample13.core.fsproj b/Sample13/Sample13.fsproj similarity index 90% rename from Sample13/sample13.core.fsproj rename to Sample13/Sample13.fsproj index 49347c666..1fb6ed999 100644 --- a/Sample13/sample13.core.fsproj +++ b/Sample13/Sample13.fsproj @@ -12,7 +12,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/Sample15/Sample15/Sample15.fsproj b/Sample15/Sample15/Sample15.fsproj index 7ec4be2ca..839d470db 100644 --- a/Sample15/Sample15/Sample15.fsproj +++ b/Sample15/Sample15/Sample15.fsproj @@ -1,68 +1,33 @@ - - - + - Debug - AnyCPU - 2.0 - 36beb42e-f38e-4cae-85f4-254581ebb300 - Library - Sample15 - Sample15 true - v4.6.2 + net472 true Sample15 - true full - false false bin\$(Configuration)\ - DEBUG;TRACE 3 bin\$(Configuration)\$(AssemblyName).XML pdbonly - true true bin\$(Configuration)\ - TRACE 3 bin\$(Configuration)\$(AssemblyName).XML - - 11 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - + + - - ..\packages\FSharp.Core.4.5.2\lib\net45\FSharp.Core.dll - - - - - - ..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - True - - \ No newline at end of file diff --git a/Sample15/Sample15/packages.config b/Sample15/Sample15/packages.config deleted file mode 100644 index 79f3a9eca..000000000 --- a/Sample15/Sample15/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Sample16/sample16.core.csproj b/Sample16/Sample16.csproj similarity index 88% rename from Sample16/sample16.core.csproj rename to Sample16/Sample16.csproj index 8b8aa79b3..29ab2f072 100644 --- a/Sample16/sample16.core.csproj +++ b/Sample16/Sample16.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net461 + netstandard2.0;net472 Sample16 false @@ -15,6 +15,7 @@ $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ + @@ -27,9 +28,9 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Sample16/Test/Issue72.sln b/Sample16/Test/Issue72.sln new file mode 100644 index 000000000..568b88dab --- /dev/null +++ b/Sample16/Test/Issue72.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29306.81 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample16", "..\Sample16.csproj", "{A1CF912B-AEFA-4FE7-951E-B4FDBB921AD9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Test", "_Issue72\Test.csproj", "{28E8C986-A229-40C7-A2C5-F73A5C4A7153}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Test2", "_Issue72b\Test2.csproj", "{C6ED2087-CC79-4206-BB08-3D9F9F2D4813}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A1CF912B-AEFA-4FE7-951E-B4FDBB921AD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A1CF912B-AEFA-4FE7-951E-B4FDBB921AD9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A1CF912B-AEFA-4FE7-951E-B4FDBB921AD9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A1CF912B-AEFA-4FE7-951E-B4FDBB921AD9}.Release|Any CPU.Build.0 = Release|Any CPU + {28E8C986-A229-40C7-A2C5-F73A5C4A7153}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {28E8C986-A229-40C7-A2C5-F73A5C4A7153}.Debug|Any CPU.Build.0 = Debug|Any CPU + {28E8C986-A229-40C7-A2C5-F73A5C4A7153}.Release|Any CPU.ActiveCfg = Release|Any CPU + {28E8C986-A229-40C7-A2C5-F73A5C4A7153}.Release|Any CPU.Build.0 = Release|Any CPU + {C6ED2087-CC79-4206-BB08-3D9F9F2D4813}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C6ED2087-CC79-4206-BB08-3D9F9F2D4813}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C6ED2087-CC79-4206-BB08-3D9F9F2D4813}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C6ED2087-CC79-4206-BB08-3D9F9F2D4813}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {FB3BB358-5322-458C-A326-B25DE13DE7DF} + EndGlobalSection +EndGlobal diff --git a/Sample16/Test/sample16.core.sln b/Sample16/Test/Sample16.sln similarity index 87% rename from Sample16/Test/sample16.core.sln rename to Sample16/Test/Sample16.sln index d822ddb75..9b5cf2ba8 100644 --- a/Sample16/Test/sample16.core.sln +++ b/Sample16/Test/Sample16.sln @@ -3,9 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29306.81 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "sample16.core", "..\sample16.core.csproj", "{A1CF912B-AEFA-4FE7-951E-B4FDBB921AD9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample16", "..\Sample16.csproj", "{A1CF912B-AEFA-4FE7-951E-B4FDBB921AD9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test", "Test\Test.csproj", "{28E8C986-A229-40C7-A2C5-F73A5C4A7153}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Test", "Test\Test.csproj", "{28E8C986-A229-40C7-A2C5-F73A5C4A7153}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Sample16/Test/Test/Test.csproj b/Sample16/Test/Test/Test.csproj index d95dbecb6..59a61ccb6 100644 --- a/Sample16/Test/Test/Test.csproj +++ b/Sample16/Test/Test/Test.csproj @@ -13,7 +13,7 @@ - + diff --git a/Sample17/sample17.core.fsproj b/Sample17/Sample17.fsproj similarity index 78% rename from Sample17/sample17.core.fsproj rename to Sample17/Sample17.fsproj index e5e00c531..2a73f38c0 100644 --- a/Sample17/sample17.core.fsproj +++ b/Sample17/Sample17.fsproj @@ -1,7 +1,7 @@  - netcoreapp2.0;net46 + netcoreapp2.0;net472 Sample17 $(AssetTargetFallback);netcoreapp1.0; @@ -21,12 +21,11 @@ - - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Sample18/sample18.core.fsproj b/Sample18/Sample18.fsproj similarity index 76% rename from Sample18/sample18.core.fsproj rename to Sample18/Sample18.fsproj index 6d286600b..46048df3e 100644 --- a/Sample18/sample18.core.fsproj +++ b/Sample18/Sample18.fsproj @@ -1,13 +1,13 @@ - netcoreapp3.0;net47 + netcoreapp3.0;net472 false Sample18 false $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ - --keyfile:$(ProjectDir)..\Build\Infrastructure.snk - + --keyfile:$(ProjectDir)..\Build\Infrastructure.snk + @@ -18,14 +18,14 @@ all runtime; build; native; contentfiles; analyzers - + - - + + ..\ThirdParty\Unquote.dll - + all runtime; build; native; contentfiles; analyzers @@ -33,14 +33,13 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + \ No newline at end of file diff --git a/Sample2/sample2.core.fsproj b/Sample2/Sample2.fsproj similarity index 82% rename from Sample2/sample2.core.fsproj rename to Sample2/Sample2.fsproj index faf6cf006..f87e77bfc 100644 --- a/Sample2/sample2.core.fsproj +++ b/Sample2/Sample2.fsproj @@ -1,7 +1,7 @@  - netcoreapp2.1;net461 + netcoreapp2.1;net472 Sample2 $(AssetTargetFallback);netcoreapp1.0; false @@ -24,28 +24,27 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + ..\ThirdParty\Unquote.dll - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + \ No newline at end of file diff --git a/Sample20/AbstractClass.cs b/Sample20/AbstractClass.cs new file mode 100644 index 000000000..6baaf0f8a --- /dev/null +++ b/Sample20/AbstractClass.cs @@ -0,0 +1,54 @@ +using System; + +namespace Test +{ + public abstract class AbstractClass + { + public AbstractClass() + { + Console.WriteLine("AbstractClass constructed"); + } + + public abstract void Method1(); + + public abstract void Method2(); + } + + public class AbstractClass_SampleImpl1 : AbstractClass + { + public AbstractClass_SampleImpl1() + : base() + { + Console.WriteLine("SampleImpl1 constructed"); + } + + public override void Method1() + { + throw new NotImplementedException(); + } + + public override void Method2() + { + throw new NotImplementedException(); + } + } + + public class AbstractClass_SampleImpl2 : AbstractClass + { + public AbstractClass_SampleImpl2() + : base() + { + Console.WriteLine("SampleImpl2 constructed"); + } + + public override void Method1() + { + throw new NotImplementedException(); + } + + public override void Method2() + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Sample20/AnalyzerTestClass.cs b/Sample20/AnalyzerTestClass.cs new file mode 100644 index 000000000..45f269a8e --- /dev/null +++ b/Sample20/AnalyzerTestClass.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; + +namespace Test +{ + public class AnalyzerTestClass + { + public AnalyzerTestClass() + { + Console.WriteLine(".ctor"); + } + + public string DoSomething( + string value, + string[] stringArray, + Guid id, + IEnumerable stringEnumerable, + IList stringList, + decimal dec, + int i, + long l, + Dictionary dict, + out int g, + float fff, + double dou, + bool bo, + byte by, + char ch, + object o, + sbyte sby, + short sh, + uint ui, + ulong ul, + ushort usho) + { + g = 0; + return null; + } + + public void GenericMethod(T1 t1, T2 t2, int i) + { + } + + public string AutoProperty { get; set; } + } +} diff --git a/Sample20/AsyncClass.cs b/Sample20/AsyncClass.cs new file mode 100644 index 000000000..1b291474b --- /dev/null +++ b/Sample20/AsyncClass.cs @@ -0,0 +1,15 @@ +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; + +namespace Test +{ + public class AsyncClass : DelegatingHandler + { + protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + request.Properties.Add("hello", true); + return await base.SendAsync(request, cancellationToken); + } + } +} diff --git a/Sample20/ClassWithExcludes.cs b/Sample20/ClassWithExcludes.cs new file mode 100644 index 000000000..1c3e70976 --- /dev/null +++ b/Sample20/ClassWithExcludes.cs @@ -0,0 +1,22 @@ + +namespace Test +{ + public class ClassWithExcludes + { + public string IncludedProperty { get; set; } + + [CoverageExclude] + public string ExcludedProperty { get; set; } + + public void IncludedMethod() + { + this.IncludedProperty = "Test"; + } + + [CoverageExclude] + public void ExcludedMethod() + { + this.ExcludedProperty = "Test"; + } + } +} diff --git a/Sample20/CodeContract_Contract.cs b/Sample20/CodeContract_Contract.cs new file mode 100644 index 000000000..bba545197 --- /dev/null +++ b/Sample20/CodeContract_Contract.cs @@ -0,0 +1,16 @@ +using System; +using System.Diagnostics.Contracts; + +namespace Test +{ + [ContractClassFor(typeof(CodeContract_Interface))] + internal abstract class CodeContract_Contract : CodeContract_Interface + { + public int Calculate(int value) + { + Contract.Requires(value != 0, "Value must not be zero"); + + return default(int); + } + } +} diff --git a/Sample20/CodeContract_Interface.cs b/Sample20/CodeContract_Interface.cs new file mode 100644 index 000000000..4dec321c4 --- /dev/null +++ b/Sample20/CodeContract_Interface.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.Contracts; +using System.Linq; +using System.Text; + +namespace Test +{ + [ContractClass(typeof(CodeContract_Contract))] + public interface CodeContract_Interface + { + int Calculate(int value); + } +} diff --git a/Sample20/CodeContract_Target.cs b/Sample20/CodeContract_Target.cs new file mode 100644 index 000000000..b8dbe9a3d --- /dev/null +++ b/Sample20/CodeContract_Target.cs @@ -0,0 +1,18 @@ + +namespace Test +{ + public class CodeContract_Target : CodeContract_Interface + { + public int Calculate(int value) + { + if (value < 0) + { + return 0; + } + else + { + return 1; + } + } + } +} diff --git a/Sample20/CoverageExcludeAttribute.cs b/Sample20/CoverageExcludeAttribute.cs new file mode 100644 index 000000000..9729c2bdf --- /dev/null +++ b/Sample20/CoverageExcludeAttribute.cs @@ -0,0 +1,10 @@ +using System; + +namespace Test +{ + [CoverageExclude] + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Class)] + public class CoverageExcludeAttribute : Attribute + { + } +} diff --git a/Sample20/GenericClass.cs b/Sample20/GenericClass.cs new file mode 100644 index 000000000..3babeec8e --- /dev/null +++ b/Sample20/GenericClass.cs @@ -0,0 +1,49 @@ +using System; + +namespace Test +{ + public abstract class AbstractGenericClass : ISomeClassInterface + where TModel : SomeModel + where TState : IState + { + public abstract bool Process(ISomeObjectInterface someObject); + + public virtual bool PostProcess(ISomeObjectInterface someObject) + { + return true; + } + } + + public class GenericClass : AbstractGenericClass + where TModel : SomeModel + where TState : IState + { + public override bool Process(ISomeObjectInterface someObject) + { + Console.WriteLine("Process"); + return true; + } + + public override bool PostProcess(ISomeObjectInterface someObject) + { + Console.WriteLine("PostProcess"); + return true; + } + } + + public class SomeModel + { + } + + public interface IState + { + } + + public interface ISomeClassInterface + { + } + + public interface ISomeObjectInterface + { + } +} \ No newline at end of file diff --git a/Sample20/NotMatchingFileName.cs b/Sample20/NotMatchingFileName.cs new file mode 100644 index 000000000..db71cf194 --- /dev/null +++ b/Sample20/NotMatchingFileName.cs @@ -0,0 +1,8 @@ + +namespace Test +{ + public class SomeClass + { + public string Property1 { get; set; } + } +} diff --git a/Sample20/PartialClass.cs b/Sample20/PartialClass.cs new file mode 100644 index 000000000..1be933e23 --- /dev/null +++ b/Sample20/PartialClass.cs @@ -0,0 +1,36 @@ +using System; + +namespace Test +{ + partial class PartialClass + { + public void ExecutedMethod_1() + { + Console.WriteLine("Test"); + } + + public void UnExecutedMethod_1() + { + Console.WriteLine("Test"); + } + + private int someProperty; + + public int SomeProperty + { + get { return this.someProperty; } + + set + { + if (value < 0) + { + this.someProperty = 0; + } + else + { + this.someProperty = value; + } + } + } + } +} diff --git a/Sample20/PartialClass2.cs b/Sample20/PartialClass2.cs new file mode 100644 index 000000000..8f8e36740 --- /dev/null +++ b/Sample20/PartialClass2.cs @@ -0,0 +1,17 @@ +using System; + +namespace Test +{ + partial class PartialClass + { + public void ExecutedMethod_2() + { + Console.WriteLine("Test"); + } + + public void UnExecutedMethod_2() + { + Console.WriteLine("Test"); + } + } +} diff --git a/Sample20/PartialClassWithAutoProperties.cs b/Sample20/PartialClassWithAutoProperties.cs new file mode 100644 index 000000000..cd0e7dfa2 --- /dev/null +++ b/Sample20/PartialClassWithAutoProperties.cs @@ -0,0 +1,8 @@ + +namespace Test +{ + public partial class PartialClassWithAutoProperties + { + public string Property1 { get; set; } + } +} diff --git a/Sample20/PartialClassWithAutoProperties2.cs b/Sample20/PartialClassWithAutoProperties2.cs new file mode 100644 index 000000000..8302b1ecb --- /dev/null +++ b/Sample20/PartialClassWithAutoProperties2.cs @@ -0,0 +1,10 @@ + +namespace Test +{ + public partial class PartialClassWithAutoProperties + { + public string Property2 { get; set; } + + public string ExpressionBodiedProperty => "Test"; + } +} diff --git a/Sample20/Program.cs b/Sample20/Program.cs new file mode 100644 index 000000000..aa1469567 --- /dev/null +++ b/Sample20/Program.cs @@ -0,0 +1,70 @@ +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; + +namespace Test +{ + public class Program + { + public static void Main(string[] args) + { + new TestClass().SampleFunction(); + + new TestClass2("Test").ExecutedMethod(); + new TestClass2("Test").SampleFunction("Munich"); + + new PartialClass().ExecutedMethod_1(); + new PartialClass().ExecutedMethod_2(); + new PartialClass().SomeProperty = -10; + + new PartialClassWithAutoProperties().Property1 = "Test"; + new PartialClassWithAutoProperties().Property2 = "Test"; + + new SomeClass().Property1 = "Test"; + + new ClassWithExcludes().IncludedMethod(); + new ClassWithExcludes().ExcludedMethod(); + + new GenericClass().Process(null); + new GenericClass().PostProcess(null); + + new CodeContract_Target().Calculate(-1); + + new AbstractClass_SampleImpl1(); + new AbstractClass_SampleImpl2(); + + CallAsyncMethod(); + + try + { + new CodeContract_Target().Calculate(0); + } + catch (System.ArgumentException) + { + } + } + + private static async void CallAsyncMethod() + { + var expected = new HttpResponseMessage(); + var handler = new AsyncClass() { InnerHandler = new EchoHandler(expected) }; + var invoker = new HttpMessageInvoker(handler, false); + var actual = await invoker.SendAsync(new HttpRequestMessage(), new CancellationToken()); + } + + private class EchoHandler : DelegatingHandler + { + private HttpResponseMessage _response; + + public EchoHandler(HttpResponseMessage response) + { + this._response = response; + } + + protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + return Task.FromResult(this._response); + } + } + } +} diff --git a/Sample20/Reports/Cobertura_altcover.xml b/Sample20/Reports/Cobertura_altcover.xml new file mode 100644 index 000000000..dfac9dcd9 --- /dev/null +++ b/Sample20/Reports/Cobertura_altcover.xml @@ -0,0 +1,698 @@ + + + + C:\temp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sample20/Reports/Cobertura_coverlet.xml b/Sample20/Reports/Cobertura_coverlet.xml new file mode 100644 index 000000000..58b6ff4df --- /dev/null +++ b/Sample20/Reports/Cobertura_coverlet.xml @@ -0,0 +1,760 @@ + + + + C:\temp\ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sample20/Reports/DynamicCodeCoverage.xml b/Sample20/Reports/DynamicCodeCoverage.xml new file mode 100644 index 000000000..efc15063b --- /dev/null +++ b/Sample20/Reports/DynamicCodeCoverage.xml @@ -0,0 +1,373 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sample20/Reports/MultiDynamicCodeCoverage.xml b/Sample20/Reports/MultiDynamicCodeCoverage.xml new file mode 100644 index 000000000..c37cb7cd1 --- /dev/null +++ b/Sample20/Reports/MultiDynamicCodeCoverage.xml @@ -0,0 +1,397 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sample20/Reports/MultiNCover1.5.8.xml b/Sample20/Reports/MultiNCover1.5.8.xml new file mode 100644 index 000000000..5f1f18b38 --- /dev/null +++ b/Sample20/Reports/MultiNCover1.5.8.xml @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sample20/Reports/MultiOpenCover.xml b/Sample20/Reports/MultiOpenCover.xml new file mode 100644 index 000000000..528b48511 --- /dev/null +++ b/Sample20/Reports/MultiOpenCover.xml @@ -0,0 +1,1300 @@ + + + + + + C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll + mscorlib + + + + + C:\temp\Test.exe + Test + + + + + + + + + + + + + <Module> + + + + + Test.ClassWithExcludes + + + + 100663297 + System.String Test.ClassWithExcludes::get_IncludedProperty() + + + + + + + 100663298 + System.Void Test.ClassWithExcludes::set_IncludedProperty(System.String) + + + + + + 100663299 + System.String Test.ClassWithExcludes::get_ExcludedProperty() + + + 100663300 + System.Void Test.ClassWithExcludes::set_ExcludedProperty(System.String) + + + + 100663301 + System.Void Test.ClassWithExcludes::IncludedMethod() + + + + + + + + + + + 100663302 + System.Void Test.ClassWithExcludes::ExcludedMethod() + + + + + 100663303 + System.Void Test.ClassWithExcludes::.ctor() + + + + + + + + Test.CoverageExcludeAttribute + + + + + Test.AbstractGenericClass`2 + + + + 100663306 + System.Boolean Test.AbstractGenericClass`2::PostProcess(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + 100663307 + System.Void Test.AbstractGenericClass`2::.ctor() + + + + + + + + + Test.GenericClass`2 + + + + 100663308 + System.Boolean Test.GenericClass`2::Process(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + + 100663309 + System.Boolean Test.GenericClass`2::PostProcess(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + + 100663310 + System.Void Test.GenericClass`2::.ctor() + + + + + + + + + Test.SomeModel + + + + 100663311 + System.Void Test.SomeModel::.ctor() + + + + + + + + + Test.SomeClass + + + + 100663312 + System.String Test.SomeClass::get_Property1() + + + + + + + 100663313 + System.Void Test.SomeClass::set_Property1(System.String) + + + + + + + 100663314 + System.Void Test.SomeClass::.ctor() + + + + + + + + + Test.PartialClassWithAutoProperties + + + + 100663315 + System.String Test.PartialClassWithAutoProperties::get_Property2() + + + + + + + 100663316 + System.Void Test.PartialClassWithAutoProperties::set_Property2(System.String) + + + + + + + 100663317 + System.String Test.PartialClassWithAutoProperties::get_Property1() + + + + + + + 100663318 + System.Void Test.PartialClassWithAutoProperties::set_Property1(System.String) + + + + + + + 100663319 + System.Void Test.PartialClassWithAutoProperties::.ctor() + + + + + + + + + Test.PartialClass + + + + 100663324 + System.Int32 Test.PartialClass::get_SomeProperty() + + + + + + + + + + + + 100663325 + System.Void Test.PartialClass::set_SomeProperty(System.Int32) + + + + + + + + + + + + + + + + + + + + + 100663320 + System.Void Test.PartialClass::ExecutedMethod_2() + + + + + + + + + + + + 100663321 + System.Void Test.PartialClass::UnExecutedMethod_2() + + + + + + + + + + + + 100663322 + System.Void Test.PartialClass::ExecutedMethod_1() + + + + + + + + + + + + 100663323 + System.Void Test.PartialClass::UnExecutedMethod_1() + + + + + + + + + + + + 100663326 + System.Void Test.PartialClass::.ctor() + + + + + + + + + Test.Program + + + + 100663327 + System.Void Test.Program::Main(System.String[]) + + + + + + + + + + + + + + + + + + + + + + + + 100663328 + System.Void Test.Program::.ctor() + + + + + + + + + Test.TestClass + + + + 100663329 + System.Void Test.TestClass::SampleFunction() + + + + + + + + + + + + + + + + + + + + + + + + + + 100663330 + System.Void Test.TestClass::.ctor() + + + + + + + + + Test.TestClass/NestedClass + + + + 100663331 + System.Void Test.TestClass/NestedClass::SampleFunction() + + + + + + + + + + + + 100663332 + System.Void Test.TestClass/NestedClass::.ctor() + + + + + + + + + Test.TestClass2 + + + + 100663333 + System.String Test.TestClass2::get_ExecutedProperty() + + + + + + + 100663334 + System.Void Test.TestClass2::set_ExecutedProperty(System.String) + + + + + + + 100663335 + System.String Test.TestClass2::get_UnExecutedProperty() + + + + + + + 100663336 + System.Void Test.TestClass2::set_UnExecutedProperty(System.String) + + + + + + + 100663337 + System.Void Test.TestClass2::.ctor() + + + + + + + + + + + + + + + 100663338 + System.Void Test.TestClass2::.ctor(System.String) + + + + + + + + + + + + + + + 100663339 + System.Void Test.TestClass2::ExecutedMethod() + + + + + + + + + + + + + 100663340 + System.Void Test.TestClass2::UnExecutedMethod() + + + + + + + + + + + + + 100663341 + System.Void Test.TestClass2::SampleFunction(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663342 + System.String Test.TestClass2::DoSomething(System.String,System.String[],System.Guid,System.Collections.Generic.IEnumerable`1<System.String>,System.Collections.Generic.IList`1<System.String>,System.Decimal,System.Int32,System.Collections.Generic.Dictionary`2<System.String,System.Int32>,System.Int32&,System.Single,System.Double,System.Boolean,System.Byte,System.Char,System.Object,System.SByte,System.Int16,System.UInt32,System.UInt64,System.UInt16) + + + + + + + + + + + + + 100663343 + System.Int32 Test.TestClass2::<SampleFunction>b__0(System.Int32) + + + + + + + + + + + + Test.TestClass2/<>c__DisplayClass3 + + + + 100663344 + System.Void Test.TestClass2/<>c__DisplayClass3::.ctor() + + + + + + + 100663345 + System.Boolean Test.TestClass2/<>c__DisplayClass3::<SampleFunction>b__1(System.String) + + + + + + + + + + + + <PrivateImplementationDetails>{F3884DA4-FC0C-4E74-B1F5-2C044EEAC1F7} + + + + + + C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll + System.Core + + + + + + + + + C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll + mscorlib + + + + + C:\temp\Test.exe + Test + + + + + + + + + + + + + <Module> + + + + + Test.ClassWithExcludes + + + + 100663297 + System.String Test.ClassWithExcludes::get_IncludedProperty() + + + + + + + 100663298 + System.Void Test.ClassWithExcludes::set_IncludedProperty(System.String) + + + + + + 100663299 + System.String Test.ClassWithExcludes::get_ExcludedProperty() + + + 100663300 + System.Void Test.ClassWithExcludes::set_ExcludedProperty(System.String) + + + + 100663301 + System.Void Test.ClassWithExcludes::IncludedMethod() + + + + + + + + + + + 100663302 + System.Void Test.ClassWithExcludes::ExcludedMethod() + + + + + 100663303 + System.Void Test.ClassWithExcludes::.ctor() + + + + + + + + Test.CoverageExcludeAttribute + + + + + Test.AbstractGenericClass`2 + + + + 100663306 + System.Boolean Test.AbstractGenericClass`2::PostProcess(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + 100663307 + System.Void Test.AbstractGenericClass`2::.ctor() + + + + + + + + + Test.GenericClass`2 + + + + 100663308 + System.Boolean Test.GenericClass`2::Process(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + + 100663309 + System.Boolean Test.GenericClass`2::PostProcess(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + + 100663310 + System.Void Test.GenericClass`2::.ctor() + + + + + + + + + Test.SomeModel + + + + 100663311 + System.Void Test.SomeModel::.ctor() + + + + + + + + + Test.SomeClass + + + + 100663312 + System.String Test.SomeClass::get_Property1() + + + + + + + 100663313 + System.Void Test.SomeClass::set_Property1(System.String) + + + + + + + 100663314 + System.Void Test.SomeClass::.ctor() + + + + + + + + + Test.PartialClassWithAutoProperties + + + + 100663315 + System.String Test.PartialClassWithAutoProperties::get_Property2() + + + + + + + 100663316 + System.Void Test.PartialClassWithAutoProperties::set_Property2(System.String) + + + + + + + 100663317 + System.String Test.PartialClassWithAutoProperties::get_Property1() + + + + + + + 100663318 + System.Void Test.PartialClassWithAutoProperties::set_Property1(System.String) + + + + + + + 100663319 + System.Void Test.PartialClassWithAutoProperties::.ctor() + + + + + + + + + Test.PartialClass + + + + 100663324 + System.Int32 Test.PartialClass::get_SomeProperty() + + + + + + + + + + + + 100663325 + System.Void Test.PartialClass::set_SomeProperty(System.Int32) + + + + + + + + + + + + + + + + + + + + + 100663320 + System.Void Test.PartialClass::ExecutedMethod_2() + + + + + + + + + + + + 100663321 + System.Void Test.PartialClass::UnExecutedMethod_2() + + + + + + + + + + + + 100663322 + System.Void Test.PartialClass::ExecutedMethod_1() + + + + + + + + + + + + 100663323 + System.Void Test.PartialClass::UnExecutedMethod_1() + + + + + + + + + + + + 100663326 + System.Void Test.PartialClass::.ctor() + + + + + + + + + Test.Program + + + + 100663327 + System.Void Test.Program::Main(System.String[]) + + + + + + + + + + + + + + + + + + + + + + + + 100663328 + System.Void Test.Program::.ctor() + + + + + + + + + Test.TestClass + + + + 100663329 + System.Void Test.TestClass::SampleFunction() + + + + + + + + + + + + + + + + + + + + + + + + + + 100663330 + System.Void Test.TestClass::.ctor() + + + + + + + + + Test.TestClass/NestedClass + + + + 100663331 + System.Void Test.TestClass/NestedClass::SampleFunction() + + + + + + + + + + + + 100663332 + System.Void Test.TestClass/NestedClass::.ctor() + + + + + + + + + Test.TestClass2 + + + + 100663333 + System.String Test.TestClass2::get_ExecutedProperty() + + + + + + + 100663334 + System.Void Test.TestClass2::set_ExecutedProperty(System.String) + + + + + + + 100663335 + System.String Test.TestClass2::get_UnExecutedProperty() + + + + + + + 100663336 + System.Void Test.TestClass2::set_UnExecutedProperty(System.String) + + + + + + + 100663337 + System.Void Test.TestClass2::.ctor() + + + + + + + + + + + + + + + 100663338 + System.Void Test.TestClass2::.ctor(System.String) + + + + + + + + + + + + + + + 100663339 + System.Void Test.TestClass2::ExecutedMethod() + + + + + + + + + + + + + 100663340 + System.Void Test.TestClass2::UnExecutedMethod() + + + + + + + + + + + + + 100663341 + System.Void Test.TestClass2::SampleFunction(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663342 + System.String Test.TestClass2::DoSomething(System.String,System.String[],System.Guid,System.Collections.Generic.IEnumerable`1<System.String>,System.Collections.Generic.IList`1<System.String>,System.Decimal,System.Int32,System.Collections.Generic.Dictionary`2<System.String,System.Int32>,System.Int32&,System.Single,System.Double,System.Boolean,System.Byte,System.Char,System.Object,System.SByte,System.Int16,System.UInt32,System.UInt64,System.UInt16) + + + + + + + + + + + + + 100663343 + System.Int32 Test.TestClass2::<SampleFunction>b__0(System.Int32) + + + + + + + + + + + + Test.TestClass2/<>c__DisplayClass3 + + + + 100663344 + System.Void Test.TestClass2/<>c__DisplayClass3::.ctor() + + + + + + + 100663345 + System.Boolean Test.TestClass2/<>c__DisplayClass3::<SampleFunction>b__1(System.String) + + + + + + + + + + + + <PrivateImplementationDetails>{F3884DA4-FC0C-4E74-B1F5-2C044EEAC1F7} + + + + + + C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll + System.Core + + + + + \ No newline at end of file diff --git a/Sample20/Reports/MultiPartcover2.2.xml b/Sample20/Reports/MultiPartcover2.2.xml new file mode 100644 index 000000000..46ee167d0 --- /dev/null +++ b/Sample20/Reports/MultiPartcover2.2.xml @@ -0,0 +1,461 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Start target + open driver pipe + modify target environment variables + create target process + wait for driver connection + driver connected successfully + send rules to the driver + wait for rules confirm + Wait results + instrument data is being received + InstrumentDataReceiveCountersBegin + assembly count: 2 + load assembly Test (5 types) + load assembly Test (5 types) + InstrumentDataReceiveCountersEnd + file list is being received + 5 files to load + file list load is complete + instrument data load complete + functions loading is being started + functions count 0 + functions loading is complete + request target shutdown + Walk results + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Start target + open driver pipe + modify target environment variables + create target process + wait for driver connection + driver connected successfully + send rules to the driver + wait for rules confirm + Wait results + instrument data is being received + InstrumentDataReceiveCountersBegin + assembly count: 2 + load assembly Test (5 types) + load assembly Test (5 types) + InstrumentDataReceiveCountersEnd + file list is being received + 5 files to load + file list load is complete + instrument data load complete + functions loading is being started + functions count 0 + functions loading is complete + request target shutdown + Walk results + + + + + \ No newline at end of file diff --git a/Sample20/Reports/MultiPartcover2.3.xml b/Sample20/Reports/MultiPartcover2.3.xml new file mode 100644 index 000000000..5a0e5c7d3 --- /dev/null +++ b/Sample20/Reports/MultiPartcover2.3.xml @@ -0,0 +1,292 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sample20/Reports/MultiVisualStudio2010.coveragexml b/Sample20/Reports/MultiVisualStudio2010.coveragexml new file mode 100644 index 000000000..9c062d6ef Binary files /dev/null and b/Sample20/Reports/MultiVisualStudio2010.coveragexml differ diff --git a/Sample20/Reports/MultidotCover.xml b/Sample20/Reports/MultidotCover.xml new file mode 100644 index 000000000..39ae9b33a --- /dev/null +++ b/Sample20/Reports/MultidotCover.xml @@ -0,0 +1,776 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sample20/Reports/NCover1.5.8.xml b/Sample20/Reports/NCover1.5.8.xml new file mode 100644 index 000000000..60d57fc67 --- /dev/null +++ b/Sample20/Reports/NCover1.5.8.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sample20/Reports/OpenCover.xml b/Sample20/Reports/OpenCover.xml new file mode 100644 index 000000000..171cbed24 --- /dev/null +++ b/Sample20/Reports/OpenCover.xml @@ -0,0 +1,1175 @@ + + + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll + 2016-07-16T11:43:57.1242712Z + mscorlib + + + + + C:\temp\Test.exe + 2016-08-29T19:43:12.0957434Z + Test + + + + + + + + + + + + + + + + + + + + + <Module> + + + + + Test.AnalyzerTestClass + + + + 100663300 + System.String Test.AnalyzerTestClass::get_AutoProperty() + + + + + + + + + + 100663301 + System.Void Test.AnalyzerTestClass::set_AutoProperty(System.String) + + + + + + + + + + 100663297 + System.Void Test.AnalyzerTestClass::.ctor() + + + + + + + + + + + + + 100663298 + System.String Test.AnalyzerTestClass::DoSomething(System.String,System.String[],System.Guid,System.Collections.Generic.IEnumerable`1<System.String>,System.Collections.Generic.IList`1<System.String>,System.Decimal,System.Int32,System.Int64,System.Collections.Generic.Dictionary`2<System.String,System.Int32>,System.Int32&,System.Single,System.Double,System.Boolean,System.Byte,System.Char,System.Object,System.SByte,System.Int16,System.UInt32,System.UInt64,System.UInt16,ICSharpCode.NRefactory.PatternMatching.INode) + + + + + + + + + + + + + 100663299 + System.Void Test.AnalyzerTestClass::GenericMethod(T1,T2,System.Int32) + + + + + + + + + + + + + Test.AsyncClass + + + + 100663302 + System.Threading.Tasks.Task`1<System.Net.Http.HttpResponseMessage> Test.AsyncClass::SendAsync(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken) + + + + + + + 100663303 + System.Void Test.AsyncClass::.ctor() + + + + + + + 100663304 + System.Threading.Tasks.Task`1<System.Net.Http.HttpResponseMessage> Test.AsyncClass::<>n__0(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken) + + + + + + + + + Test.AsyncClass/<SendAsync>d__0 + + + + 100663367 + System.Void Test.AsyncClass/<SendAsync>d__0::.ctor() + + + + + + + 100663368 + System.Void Test.AsyncClass/<SendAsync>d__0::MoveNext() + + + + + + + + + + + + + 100663369 + System.Void Test.AsyncClass/<SendAsync>d__0::SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) + + + + + + + + + Test.ClassWithExcludes + + + + 100663305 + System.String Test.ClassWithExcludes::get_IncludedProperty() + + + + + + + + + + 100663306 + System.Void Test.ClassWithExcludes::set_IncludedProperty(System.String) + + + + + + + + + 100663307 + System.String Test.ClassWithExcludes::get_ExcludedProperty() + + + + + + 100663308 + System.Void Test.ClassWithExcludes::set_ExcludedProperty(System.String) + + + + + + + 100663309 + System.Void Test.ClassWithExcludes::IncludedMethod() + + + + + + + + + + + 100663310 + System.Void Test.ClassWithExcludes::ExcludedMethod() + + + + + + + 100663311 + System.Void Test.ClassWithExcludes::.ctor() + + + + + + + + + Test.CodeContract_Contract + + + + 100663312 + System.Int32 Test.CodeContract_Contract::Calculate(System.Int32) + + + + + + + + + + + + + 100663313 + System.Void Test.CodeContract_Contract::.ctor() + + + + + + + + + Test.CodeContract_Target + + + + 100663315 + System.Int32 Test.CodeContract_Target::Calculate(System.Int32) + + + + + + + + + + + + + + + + + + + 100663316 + System.Void Test.CodeContract_Target::.ctor() + + + + + + + + Test.CoverageExcludeAttribute + + + + + Test.AbstractGenericClass`2 + + + + 100663319 + System.Boolean Test.AbstractGenericClass`2::PostProcess(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + 100663320 + System.Void Test.AbstractGenericClass`2::.ctor() + + + + + + + + + Test.GenericClass`2 + + + + 100663321 + System.Boolean Test.GenericClass`2::Process(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + + 100663322 + System.Boolean Test.GenericClass`2::PostProcess(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + + 100663323 + System.Void Test.GenericClass`2::.ctor() + + + + + + + + + Test.SomeModel + + + + 100663324 + System.Void Test.SomeModel::.ctor() + + + + + + + + + Test.SomeClass + + + + 100663325 + System.String Test.SomeClass::get_Property1() + + + + + + + + + + 100663326 + System.Void Test.SomeClass::set_Property1(System.String) + + + + + + + + + + 100663327 + System.Void Test.SomeClass::.ctor() + + + + + + + + + Test.PartialClassWithAutoProperties + + + + 100663328 + System.String Test.PartialClassWithAutoProperties::get_Property2() + + + + + + + + + + 100663329 + System.Void Test.PartialClassWithAutoProperties::set_Property2(System.String) + + + + + + + + + + 100663330 + System.String Test.PartialClassWithAutoProperties::get_ExpressionBodiedProperty() + + + + + + + + + + 100663331 + System.String Test.PartialClassWithAutoProperties::get_Property1() + + + + + + + + + + 100663332 + System.Void Test.PartialClassWithAutoProperties::set_Property1(System.String) + + + + + + + + + + 100663333 + System.Void Test.PartialClassWithAutoProperties::.ctor() + + + + + + + + + Test.PartialClass + + + + 100663338 + System.Int32 Test.PartialClass::get_SomeProperty() + + + + + + + + + + + + 100663339 + System.Void Test.PartialClass::set_SomeProperty(System.Int32) + + + + + + + + + + + + + + + + + + + + + 100663334 + System.Void Test.PartialClass::ExecutedMethod_2() + + + + + + + + + + + + 100663335 + System.Void Test.PartialClass::UnExecutedMethod_2() + + + + + + + + + + + + 100663336 + System.Void Test.PartialClass::ExecutedMethod_1() + + + + + + + + + + + + 100663337 + System.Void Test.PartialClass::UnExecutedMethod_1() + + + + + + + + + + + + 100663340 + System.Void Test.PartialClass::.ctor() + + + + + + + + + Test.Program + + + + 100663341 + System.Void Test.Program::Main(System.String[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663342 + System.Void Test.Program::CSharp_ExecuteTest1() + + + + + + + + + + + + 100663343 + System.Void Test.Program::CSharp_ExecuteTest2() + + + + + + + + + + + + 100663344 + System.Void Test.Program::CallAsyncMethod() + + + + + + + 100663345 + System.Void Test.Program::.ctor() + + + + + + + + + Test.Program/EchoHandler + + + + 100663370 + System.Void Test.Program/EchoHandler::.ctor(System.Net.Http.HttpResponseMessage) + + + + + + + + + + + + + 100663371 + System.Threading.Tasks.Task`1<System.Net.Http.HttpResponseMessage> Test.Program/EchoHandler::SendAsync(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken) + + + + + + + + + + + + + + Test.Program/<CallAsyncMethod>d__3 + + + + 100663372 + System.Void Test.Program/<CallAsyncMethod>d__3::.ctor() + + + + + + + 100663373 + System.Void Test.Program/<CallAsyncMethod>d__3::MoveNext() + + + + + + + + + + + + + + + 100663374 + System.Void Test.Program/<CallAsyncMethod>d__3::SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) + + + + + + + + + Test.AbstractClass + + + + 100663346 + System.Void Test.AbstractClass::.ctor() + + + + + + + + + + + + + + + Test.AbstractClass_SampleImpl1 + + + + 100663349 + System.Void Test.AbstractClass_SampleImpl1::.ctor() + + + + + + + + + + + + + 100663350 + System.Void Test.AbstractClass_SampleImpl1::Method1() + + + + + + + + + + + 100663351 + System.Void Test.AbstractClass_SampleImpl1::Method2() + + + + + + + + + + + + + Test.AbstractClass_SampleImpl2 + + + + 100663352 + System.Void Test.AbstractClass_SampleImpl2::.ctor() + + + + + + + + + + + + + 100663353 + System.Void Test.AbstractClass_SampleImpl2::Method1() + + + + + + + + + + + 100663354 + System.Void Test.AbstractClass_SampleImpl2::Method2() + + + + + + + + + + + + + Test.TestClass + + + + 100663355 + System.Void Test.TestClass::SampleFunction() + + + + + + + + + + + + + + + + + + + + + + + + 100663356 + System.Void Test.TestClass::.ctor() + + + + + + + + + Test.TestClass/NestedClass + + + + 100663375 + System.Void Test.TestClass/NestedClass::SampleFunction() + + + + + + + + + + + + 100663376 + System.Void Test.TestClass/NestedClass::.ctor() + + + + + + + + + Test.TestClass2 + + + + 100663357 + System.String Test.TestClass2::get_ExecutedProperty() + + + + + + + + + + 100663358 + System.Void Test.TestClass2::set_ExecutedProperty(System.String) + + + + + + + + + + 100663359 + System.String Test.TestClass2::get_UnExecutedProperty() + + + + + + + + + + 100663360 + System.Void Test.TestClass2::set_UnExecutedProperty(System.String) + + + + + + + + + + 100663361 + System.Void Test.TestClass2::.ctor() + + + + + + + + + + + + + + + 100663362 + System.Void Test.TestClass2::.ctor(System.String) + + + + + + + + + + + + + + + 100663363 + System.Void Test.TestClass2::ExecutedMethod() + + + + + + + + + + + + + 100663364 + System.Void Test.TestClass2::UnExecutedMethod() + + + + + + + + + + + + + 100663365 + System.Void Test.TestClass2::SampleFunction(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663366 + System.String Test.TestClass2::DoSomething(System.String,System.String[],System.Guid,System.Collections.Generic.IEnumerable`1<System.String>,System.Collections.Generic.IList`1<System.String>,System.Decimal,System.Int32,System.Collections.Generic.Dictionary`2<System.String,System.Int32>,System.Int32&,System.Single,System.Double,System.Boolean,System.Byte,System.Char,System.Object,System.SByte,System.Int16,System.UInt32,System.UInt64,System.UInt16) + + + + + + + + + + + + + + + Test.TestClass2/<>c__DisplayClass14_0 + + + + 100663377 + System.Void Test.TestClass2/<>c__DisplayClass14_0::.ctor() + + + + + + + 100663378 + System.Boolean Test.TestClass2/<>c__DisplayClass14_0::<SampleFunction>b__1(System.String) + + + + + + + + + + + + Test.TestClass2/<>c + + + + 100663379 + System.Void Test.TestClass2/<>c::.cctor() + + + + + + + 100663380 + System.Void Test.TestClass2/<>c::.ctor() + + + + + + + 100663381 + System.Int32 Test.TestClass2/<>c::<SampleFunction>b__14_0(System.Int32) + + + + + + + + + + + + <PrivateImplementationDetails> + + + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll + 2016-07-16T11:43:57.1711464Z + System.Core + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Net.Http\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Net.Http.dll + 2016-07-16T11:43:55.5773993Z + System.Net.Http + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll + 2016-07-16T11:43:55.5461496Z + System + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll + 2016-07-16T11:43:53.9992781Z + System.Configuration + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll + 2016-07-16T11:43:55.4992744Z + System.Xml + + + + diff --git a/Sample20/Reports/OpenCoverWithTrackedMethods.xml b/Sample20/Reports/OpenCoverWithTrackedMethods.xml new file mode 100644 index 000000000..e159993e8 --- /dev/null +++ b/Sample20/Reports/OpenCoverWithTrackedMethods.xml @@ -0,0 +1,2249 @@ + + + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll + 2016-07-16T11:44:20.6085999Z + mscorlib + + + + C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\MSTest.exe + 2015-07-06T22:51:38Z + MSTest + + + + C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.Common\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.Common.dll + 2016-08-14T20:15:34.2701771Z + Microsoft.VisualStudio.QualityTools.Common + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll + 2016-07-16T11:43:55.5461496Z + System + + + + C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.ExecutionCommon\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.ExecutionCommon.dll + 2016-08-14T20:15:34.7858591Z + Microsoft.VisualStudio.QualityTools.ExecutionCommon + + + + C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.Resource\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.Resource.dll + 2016-08-14T20:15:34.9577509Z + Microsoft.VisualStudio.QualityTools.Resource + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll + 2016-07-16T11:43:53.9992781Z + System.Configuration + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll + 2016-07-16T11:43:55.4992744Z + System.Xml + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.CommandLine\v4.0_14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.CommandLine.dll + 2016-08-14T20:15:34.0982877Z + Microsoft.VisualStudio.QualityTools.CommandLine + + + + C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.TMI\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.TMI.dll + 2016-08-14T20:15:36.1766323Z + Microsoft.VisualStudio.QualityTools.TMI + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll + 2016-07-16T11:44:20.5773501Z + System.Data + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c561934e089\System.Numerics.dll + 2016-07-16T11:43:55.4992744Z + System.Numerics + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.Web\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web.dll + 2016-07-16T11:44:19.4211026Z + System.Web + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll + 2016-07-16T11:43:57.1711464Z + System.Core + + + + C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Tip\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Tip.dll + 2016-08-14T20:15:36.0047389Z + Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Tip + + + + C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel.dll + 2016-08-14T20:15:35.832846Z + Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel + + + + C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.UnitTestFramework\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll + 2016-08-14T20:15:36.348528Z + Microsoft.VisualStudio.QualityTools.UnitTestFramework + + + + C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.Tips.UnitTest.AssemblyResolver\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.Tips.UnitTest.AssemblyResolver.dll + 2016-08-14T20:15:35.6609526Z + Microsoft.VisualStudio.QualityTools.Tips.UnitTest.AssemblyResolver + + + + + C:\temp\Test.exe + 2016-08-29T19:43:12.0957434Z + Test + + + + + + + + + + + + + + + + + + + + + <Module> + + + + + Test.AnalyzerTestClass + + + + 100663300 + System.String Test.AnalyzerTestClass::get_AutoProperty() + + + + + + + + + + 100663301 + System.Void Test.AnalyzerTestClass::set_AutoProperty(System.String) + + + + + + + + + + 100663297 + System.Void Test.AnalyzerTestClass::.ctor() + + + + + + + + + + + + + 100663298 + System.String Test.AnalyzerTestClass::DoSomething(System.String,System.String[],System.Guid,System.Collections.Generic.IEnumerable`1<System.String>,System.Collections.Generic.IList`1<System.String>,System.Decimal,System.Int32,System.Int64,System.Collections.Generic.Dictionary`2<System.String,System.Int32>,System.Int32&,System.Single,System.Double,System.Boolean,System.Byte,System.Char,System.Object,System.SByte,System.Int16,System.UInt32,System.UInt64,System.UInt16,ICSharpCode.NRefactory.PatternMatching.INode) + + + + + + + + + + + + + 100663299 + System.Void Test.AnalyzerTestClass::GenericMethod(T1,T2,System.Int32) + + + + + + + + + + + + + Test.AsyncClass + + + + 100663302 + System.Threading.Tasks.Task`1<System.Net.Http.HttpResponseMessage> Test.AsyncClass::SendAsync(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken) + + + + + + + 100663303 + System.Void Test.AsyncClass::.ctor() + + + + + + + 100663304 + System.Threading.Tasks.Task`1<System.Net.Http.HttpResponseMessage> Test.AsyncClass::<>n__0(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken) + + + + + + + + + Test.AsyncClass/<SendAsync>d__0 + + + + 100663367 + System.Void Test.AsyncClass/<SendAsync>d__0::.ctor() + + + + + + + 100663368 + System.Void Test.AsyncClass/<SendAsync>d__0::MoveNext() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663369 + System.Void Test.AsyncClass/<SendAsync>d__0::SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) + + + + + + + + + Test.ClassWithExcludes + + + + 100663305 + System.String Test.ClassWithExcludes::get_IncludedProperty() + + + + + + + + + + 100663306 + System.Void Test.ClassWithExcludes::set_IncludedProperty(System.String) + + + + + + + + + + + + + + + + + + + + 100663307 + System.String Test.ClassWithExcludes::get_ExcludedProperty() + + + + + + + + + + 100663308 + System.Void Test.ClassWithExcludes::set_ExcludedProperty(System.String) + + + + + + + + + + + + + + + + + + + + 100663309 + System.Void Test.ClassWithExcludes::IncludedMethod() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663310 + System.Void Test.ClassWithExcludes::ExcludedMethod() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663311 + System.Void Test.ClassWithExcludes::.ctor() + + + + + + + + + Test.CodeContract_Contract + + + + 100663312 + System.Int32 Test.CodeContract_Contract::Calculate(System.Int32) + + + + + + + + + + + + + 100663313 + System.Void Test.CodeContract_Contract::.ctor() + + + + + + + + + Test.CodeContract_Target + + + + 100663315 + System.Int32 Test.CodeContract_Target::Calculate(System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663316 + System.Void Test.CodeContract_Target::.ctor() + + + + + + + + + Test.CoverageExcludeAttribute + + + + 100663317 + System.Void Test.CoverageExcludeAttribute::.ctor() + + + + + + + + + Test.AbstractGenericClass`2 + + + + 100663319 + System.Boolean Test.AbstractGenericClass`2::PostProcess(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + 100663320 + System.Void Test.AbstractGenericClass`2::.ctor() + + + + + + + + + Test.GenericClass`2 + + + + 100663321 + System.Boolean Test.GenericClass`2::Process(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663322 + System.Boolean Test.GenericClass`2::PostProcess(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663323 + System.Void Test.GenericClass`2::.ctor() + + + + + + + + + Test.SomeModel + + + + 100663324 + System.Void Test.SomeModel::.ctor() + + + + + + + + + Test.SomeClass + + + + 100663325 + System.String Test.SomeClass::get_Property1() + + + + + + + + + + 100663326 + System.Void Test.SomeClass::set_Property1(System.String) + + + + + + + + + + + + + + + + + + + + 100663327 + System.Void Test.SomeClass::.ctor() + + + + + + + + + Test.PartialClassWithAutoProperties + + + + 100663328 + System.String Test.PartialClassWithAutoProperties::get_Property2() + + + + + + + + + + 100663329 + System.Void Test.PartialClassWithAutoProperties::set_Property2(System.String) + + + + + + + + + + + + + + + + + + + + 100663330 + System.String Test.PartialClassWithAutoProperties::get_ExpressionBodiedProperty() + + + + + + + + + + 100663331 + System.String Test.PartialClassWithAutoProperties::get_Property1() + + + + + + + + + + 100663332 + System.Void Test.PartialClassWithAutoProperties::set_Property1(System.String) + + + + + + + + + + + + + + + + + + + + 100663333 + System.Void Test.PartialClassWithAutoProperties::.ctor() + + + + + + + + + Test.PartialClass + + + + 100663338 + System.Int32 Test.PartialClass::get_SomeProperty() + + + + + + + + + + + + 100663339 + System.Void Test.PartialClass::set_SomeProperty(System.Int32) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663334 + System.Void Test.PartialClass::ExecutedMethod_2() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663335 + System.Void Test.PartialClass::UnExecutedMethod_2() + + + + + + + + + + + + 100663336 + System.Void Test.PartialClass::ExecutedMethod_1() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663337 + System.Void Test.PartialClass::UnExecutedMethod_1() + + + + + + + + + + + + 100663340 + System.Void Test.PartialClass::.ctor() + + + + + + + + + Test.Program + + + + 100663341 + System.Void Test.Program::Main(System.String[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663342 + System.Void Test.Program::CSharp_ExecuteTest1() + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663343 + System.Void Test.Program::CSharp_ExecuteTest2() + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663344 + System.Void Test.Program::CallAsyncMethod() + + + + + + + 100663345 + System.Void Test.Program::.ctor() + + + + + + + + + Test.Program/EchoHandler + + + + 100663370 + System.Void Test.Program/EchoHandler::.ctor(System.Net.Http.HttpResponseMessage) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663371 + System.Threading.Tasks.Task`1<System.Net.Http.HttpResponseMessage> Test.Program/EchoHandler::SendAsync(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test.Program/<CallAsyncMethod>d__3 + + + + 100663372 + System.Void Test.Program/<CallAsyncMethod>d__3::.ctor() + + + + + + + 100663373 + System.Void Test.Program/<CallAsyncMethod>d__3::MoveNext() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663374 + System.Void Test.Program/<CallAsyncMethod>d__3::SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) + + + + + + + + + Test.AbstractClass + + + + 100663346 + System.Void Test.AbstractClass::.ctor() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test.AbstractClass_SampleImpl1 + + + + 100663349 + System.Void Test.AbstractClass_SampleImpl1::.ctor() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663350 + System.Void Test.AbstractClass_SampleImpl1::Method1() + + + + + + + + + + + 100663351 + System.Void Test.AbstractClass_SampleImpl1::Method2() + + + + + + + + + + + + + Test.AbstractClass_SampleImpl2 + + + + 100663352 + System.Void Test.AbstractClass_SampleImpl2::.ctor() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663353 + System.Void Test.AbstractClass_SampleImpl2::Method1() + + + + + + + + + + + 100663354 + System.Void Test.AbstractClass_SampleImpl2::Method2() + + + + + + + + + + + + + Test.TestClass + + + + 100663355 + System.Void Test.TestClass::SampleFunction() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663356 + System.Void Test.TestClass::.ctor() + + + + + + + + + Test.TestClass/NestedClass + + + + 100663375 + System.Void Test.TestClass/NestedClass::SampleFunction() + + + + + + + + + + + + 100663376 + System.Void Test.TestClass/NestedClass::.ctor() + + + + + + + + + Test.TestClass2 + + + + 100663357 + System.String Test.TestClass2::get_ExecutedProperty() + + + + + + + + + + + + + + + + + + + + 100663358 + System.Void Test.TestClass2::set_ExecutedProperty(System.String) + + + + + + + + + + + + + + + + + + + + 100663359 + System.String Test.TestClass2::get_UnExecutedProperty() + + + + + + + + + + 100663360 + System.Void Test.TestClass2::set_UnExecutedProperty(System.String) + + + + + + + + + + 100663361 + System.Void Test.TestClass2::.ctor() + + + + + + + + + + + + + + + 100663362 + System.Void Test.TestClass2::.ctor(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663363 + System.Void Test.TestClass2::ExecutedMethod() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663364 + System.Void Test.TestClass2::UnExecutedMethod() + + + + + + + + + + + + + 100663365 + System.Void Test.TestClass2::SampleFunction(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663366 + System.String Test.TestClass2::DoSomething(System.String,System.String[],System.Guid,System.Collections.Generic.IEnumerable`1<System.String>,System.Collections.Generic.IList`1<System.String>,System.Decimal,System.Int32,System.Collections.Generic.Dictionary`2<System.String,System.Int32>,System.Int32&,System.Single,System.Double,System.Boolean,System.Byte,System.Char,System.Object,System.SByte,System.Int16,System.UInt32,System.UInt64,System.UInt16) + + + + + + + + + + + + + + + Test.TestClass2/<>c__DisplayClass14_0 + + + + 100663377 + System.Void Test.TestClass2/<>c__DisplayClass14_0::.ctor() + + + + + + + 100663378 + System.Boolean Test.TestClass2/<>c__DisplayClass14_0::<SampleFunction>b__1(System.String) + + + + + + + + + + + + + + + + + + + + + + Test.TestClass2/<>c + + + + 100663379 + System.Void Test.TestClass2/<>c::.cctor() + + + + + + + 100663380 + System.Void Test.TestClass2/<>c::.ctor() + + + + + + + 100663381 + System.Int32 Test.TestClass2/<>c::<SampleFunction>b__14_0(System.Int32) + + + + + + + + + + + + + + + + + + + + + + <PrivateImplementationDetails> + + + + + + + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Net.Http\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Net.Http.dll + 2016-07-16T11:43:55.5773993Z + System.Net.Http + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.ControllerObject\v4.0_14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.ControllerObject.dll + 2016-08-14T20:15:34.4420711Z + Microsoft.VisualStudio.QualityTools.ControllerObject + + + + C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PrivateAssemblies\Microsoft.VisualStudio.TeamSystem.Licensing.dll + 2015-07-06T22:51:38Z + Microsoft.VisualStudio.TeamSystem.Licensing + + + + C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.Common\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.Common.dll + 2016-08-14T20:15:34.2701771Z + Microsoft.VisualStudio.QualityTools.Common + + + + C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PrivateAssemblies\Microsoft.VisualStudio.TeamSystem.Licensing.dll + 2015-07-06T22:51:38Z + Microsoft.VisualStudio.TeamSystem.Licensing + + + + C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.Common\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.Common.dll + 2016-08-14T20:15:34.2701771Z + Microsoft.VisualStudio.QualityTools.Common + + + + C:\temp\ICSharpCode.NRefactory.dll + 2015-09-02T19:41:12.8563378Z + ICSharpCode.NRefactory + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll + 2016-07-16T11:43:55.5461496Z + System + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll + 2016-07-16T11:43:57.1711464Z + System.Core + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll + 2016-07-16T11:43:55.4992744Z + System.Xml + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Net.Http\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Net.Http.dll + 2016-07-16T11:43:55.5773993Z + System.Net.Http + + + + C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.AgentProcessManager\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.AgentProcessManager.dll + 2016-08-14T20:15:33.9263914Z + Microsoft.VisualStudio.QualityTools.AgentProcessManager + + + + C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.DataCollectionAgentObject\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.DataCollectionAgentObject.dll + 2016-08-14T20:15:34.6139657Z + Microsoft.VisualStudio.QualityTools.DataCollectionAgentObject + + + + C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.Common\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.Common.dll + 2016-08-14T20:15:34.2701771Z + Microsoft.VisualStudio.QualityTools.Common + + + + C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.ExecutionCommon\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.ExecutionCommon.dll + 2016-08-14T20:15:34.7858591Z + Microsoft.VisualStudio.QualityTools.ExecutionCommon + + + + C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.AgentObject\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.AgentObject.dll + 2016-08-14T20:15:33.7544957Z + Microsoft.VisualStudio.QualityTools.AgentObject + + + + C:\WINDOWS\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter.dll + 2016-08-14T20:15:35.4890597Z + Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter + + + + C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PrivateAssemblies\DataCollectors\Microsoft.VisualStudio.PerformanceTools.DataCollection.dll + 2015-07-06T22:51:38Z + Microsoft.VisualStudio.PerformanceTools.DataCollection + + + + C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PrivateAssemblies\DataCollectors\Microsoft.VisualStudio.PerformanceTools.DataCollection.Editor.dll + 2015-07-06T22:51:38Z + Microsoft.VisualStudio.PerformanceTools.DataCollection.Editor + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll + 2016-07-16T11:43:55.4680251Z + System.Windows.Forms + + + + C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll + 2016-07-16T11:43:59.3586429Z + System.Drawing + + + + C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PrivateAssemblies\DataCollectors\VSPerfControl.Interop.dll + 2015-07-06T22:51:38Z + VSPerfControl.Interop + + + + diff --git a/Sample20/Reports/OpenCover_altcover.xml b/Sample20/Reports/OpenCover_altcover.xml new file mode 100644 index 000000000..aaa27cba1 --- /dev/null +++ b/Sample20/Reports/OpenCover_altcover.xml @@ -0,0 +1,938 @@ + + + + + + + C:\temp\Test.dll + 2018-10-17T19:02:11.4516973Z + Test + + + + + + + + + + + + + + + + + + + <Module> + + + + + Test.AbstractClass + + + + 100663297 + System.Void Test.AbstractClass::.ctor() + + + + + + + + + + + + + + + Test.AbstractClass_SampleImpl1 + + + + 100663300 + System.Void Test.AbstractClass_SampleImpl1::.ctor() + + + + + + + + + + + + + 100663301 + System.Void Test.AbstractClass_SampleImpl1::Method1() + + + + + + + + + + + 100663302 + System.Void Test.AbstractClass_SampleImpl1::Method2() + + + + + + + + + + + + + Test.AbstractClass_SampleImpl2 + + + + 100663303 + System.Void Test.AbstractClass_SampleImpl2::.ctor() + + + + + + + + + + + + + 100663304 + System.Void Test.AbstractClass_SampleImpl2::Method1() + + + + + + + + + + + 100663305 + System.Void Test.AbstractClass_SampleImpl2::Method2() + + + + + + + + + + + + + Test.AnalyzerTestClass + + + + 100663306 + System.Void Test.AnalyzerTestClass::.ctor() + + + + + + + + + + + + + 100663307 + System.String Test.AnalyzerTestClass::DoSomething(System.String,System.String[],System.Guid,System.Collections.Generic.IEnumerable`1<System.String>,System.Collections.Generic.IList`1<System.String>,System.Decimal,System.Int32,System.Int64,System.Collections.Generic.Dictionary`2<System.String,System.Int32>,System.Int32&,System.Single,System.Double,System.Boolean,System.Byte,System.Char,System.Object,System.SByte,System.Int16,System.UInt32,System.UInt64,System.UInt16) + + + + + + + + + + + + + 100663308 + System.Void Test.AnalyzerTestClass::GenericMethod(T1,T2,System.Int32) + + + + + + + + + + + + + Test.AsyncClass + + + + 100663311 + System.Threading.Tasks.Task`1<System.Net.Http.HttpResponseMessage> Test.AsyncClass::SendAsync(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken) + + + + + + + 100663312 + System.Void Test.AsyncClass::.ctor() + + + + + + + + + Test.AsyncClass/<SendAsync>d__0 + + + + 100663366 + System.Void Test.AsyncClass/<SendAsync>d__0::MoveNext() + + + + + + + + + + + + + 100663367 + System.Void Test.AsyncClass/<SendAsync>d__0::SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) + + + + + + + + + Test.ClassWithExcludes + + + + 100663318 + System.Void Test.ClassWithExcludes::IncludedMethod() + + + + + + + + + + + + 100663319 + System.Void Test.ClassWithExcludes::ExcludedMethod() + + + + + + + + + + + + 100663320 + System.Void Test.ClassWithExcludes::.ctor() + + + + + + + + + Test.CodeContract_Contract + + + + 100663321 + System.Int32 Test.CodeContract_Contract::Calculate(System.Int32) + + + + + + + + + + + + + 100663322 + System.Void Test.CodeContract_Contract::.ctor() + + + + + + + + + Test.CodeContract_Interface + + + + + Test.CodeContract_Target + + + + 100663324 + System.Int32 Test.CodeContract_Target::Calculate(System.Int32) + + + + + + + + + + + + + + + + + + + 100663325 + System.Void Test.CodeContract_Target::.ctor() + + + + + + + + + Test.CoverageExcludeAttribute + + + + 100663326 + System.Void Test.CoverageExcludeAttribute::.ctor() + + + + + + + + + Test.AbstractGenericClass`2 + + + + 100663328 + System.Boolean Test.AbstractGenericClass`2::PostProcess(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + 100663329 + System.Void Test.AbstractGenericClass`2::.ctor() + + + + + + + + + Test.GenericClass`2 + + + + 100663330 + System.Boolean Test.GenericClass`2::Process(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + + 100663331 + System.Boolean Test.GenericClass`2::PostProcess(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + + 100663332 + System.Void Test.GenericClass`2::.ctor() + + + + + + + + + Test.SomeModel + + + + 100663333 + System.Void Test.SomeModel::.ctor() + + + + + + + + + Test.IState + + + + + Test.ISomeClassInterface`2 + + + + + Test.ISomeObjectInterface`2 + + + + + Test.SomeClass + + + + 100663336 + System.Void Test.SomeClass::.ctor() + + + + + + + + + Test.PartialClass + + + + 100663337 + System.Void Test.PartialClass::ExecutedMethod_1() + + + + + + + + + + + + 100663338 + System.Void Test.PartialClass::UnExecutedMethod_1() + + + + + + + + + + + + 100663339 + System.Int32 Test.PartialClass::get_SomeProperty() + + + + + + + + + + + + 100663340 + System.Void Test.PartialClass::set_SomeProperty(System.Int32) + + + + + + + + + + + + + + + + + + + + + 100663341 + System.Void Test.PartialClass::ExecutedMethod_2() + + + + + + + + + + + + 100663342 + System.Void Test.PartialClass::UnExecutedMethod_2() + + + + + + + + + + + + 100663343 + System.Void Test.PartialClass::.ctor() + + + + + + + + + Test.PartialClassWithAutoProperties + + + + 100663348 + System.String Test.PartialClassWithAutoProperties::get_ExpressionBodiedProperty() + + + + + + + + + + 100663349 + System.Void Test.PartialClassWithAutoProperties::.ctor() + + + + + + + + + Test.Program + + + + 100663350 + System.Void Test.Program::Main(System.String[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663351 + System.Void Test.Program::CallAsyncMethod() + + + + + + + 100663352 + System.Void Test.Program::.ctor() + + + + + + + + + Test.Program/EchoHandler + + + + 100663368 + System.Void Test.Program/EchoHandler::.ctor(System.Net.Http.HttpResponseMessage) + + + + + + + + + + + + + 100663369 + System.Threading.Tasks.Task`1<System.Net.Http.HttpResponseMessage> Test.Program/EchoHandler::SendAsync(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken) + + + + + + + + + + + + + + Test.Program/<CallAsyncMethod>d__1 + + + + 100663371 + System.Void Test.Program/<CallAsyncMethod>d__1::MoveNext() + + + + + + + + + + + + + + + 100663372 + System.Void Test.Program/<CallAsyncMethod>d__1::SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine) + + + + + + + + + Test.TestClass + + + + 100663353 + System.Void Test.TestClass::SampleFunction() + + + + + + + + + + + + + + + + + + + + + + + + 100663354 + System.Void Test.TestClass::.ctor() + + + + + + + + + Test.TestClass/NestedClass + + + + 100663373 + System.Void Test.TestClass/NestedClass::SampleFunction() + + + + + + + + + + + + 100663374 + System.Void Test.TestClass/NestedClass::.ctor() + + + + + + + + + Test.TestClass2 + + + + 100663359 + System.Void Test.TestClass2::.ctor() + + + + + + + + + + + + + + + 100663360 + System.Void Test.TestClass2::.ctor(System.String) + + + + + + + + + + + + + + + 100663361 + System.Void Test.TestClass2::ExecutedMethod() + + + + + + + + + + + + + 100663362 + System.Void Test.TestClass2::UnExecutedMethod() + + + + + + + + + + + + + 100663363 + System.Void Test.TestClass2::SampleFunction(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100663364 + System.String Test.TestClass2::DoSomething(System.String,System.String[],System.Guid,System.Collections.Generic.IEnumerable`1<System.String>,System.Collections.Generic.IList`1<System.String>,System.Decimal,System.Int32,System.Collections.Generic.Dictionary`2<System.String,System.Int32>,System.Int32&,System.Single,System.Double,System.Boolean,System.Byte,System.Char,System.Object,System.SByte,System.Int16,System.UInt32,System.UInt64,System.UInt16) + + + + + + + + + + + + + + + Test.TestClass2/<>c__DisplayClass14_0 + + + + 100663376 + System.Boolean Test.TestClass2/<>c__DisplayClass14_0::<SampleFunction>b__1(System.String) + + + + + + + + + + + + Test.TestClass2/<>c + + + + 100663379 + System.Int32 Test.TestClass2/<>c::<SampleFunction>b__14_0(System.Int32) + + + + + + + + + + + + <PrivateImplementationDetails> + + + + + <PrivateImplementationDetails>/__StaticArrayInitTypeSize=16 + + + + + + diff --git a/Sample20/Reports/OpenCover_coverlet.xml b/Sample20/Reports/OpenCover_coverlet.xml new file mode 100644 index 000000000..c8d9a8cf9 --- /dev/null +++ b/Sample20/Reports/OpenCover_coverlet.xml @@ -0,0 +1,816 @@ + + + + + + Test.dll + 2018-10-17T07:20:55 + Test + + + + + + + + + + + + + + + + + + + + + Test.AbstractClass + + + + + System.Void Test.AbstractClass::.ctor() + + + + + + + + + + + + + + + Test.AbstractClass_SampleImpl1 + + + + + System.Void Test.AbstractClass_SampleImpl1::Method1() + + + + + + + + + + + + System.Void Test.AbstractClass_SampleImpl1::Method2() + + + + + + + + + + + + System.Void Test.AbstractClass_SampleImpl1::.ctor() + + + + + + + + + + + + + + + Test.AbstractClass_SampleImpl2 + + + + + System.Void Test.AbstractClass_SampleImpl2::Method1() + + + + + + + + + + + + System.Void Test.AbstractClass_SampleImpl2::Method2() + + + + + + + + + + + + System.Void Test.AbstractClass_SampleImpl2::.ctor() + + + + + + + + + + + + + + + Test.AnalyzerTestClass + + + + + System.String Test.AnalyzerTestClass::DoSomething(System.String,System.String[],System.Guid,System.Collections.Generic.IEnumerable`1<System.String>,System.Collections.Generic.IList`1<System.String>,System.Decimal,System.Int32,System.Int64,System.Collections.Generic.Dictionary`2<System.String,System.Int32>,System.Int32&,System.Single,System.Double,System.Boolean,System.Byte,System.Char,System.Object,System.SByte,System.Int16,System.UInt32,System.UInt64,System.UInt16) + + + + + + + + + + + + + + System.Void Test.AnalyzerTestClass::GenericMethod(T1,T2,System.Int32) + + + + + + + + + + + + System.String Test.AnalyzerTestClass::get_AutoProperty() + + + + + + + + + + + System.Void Test.AnalyzerTestClass::.ctor() + + + + + + + + + + + + + + + Test.AsyncClass/<SendAsync>d__0 + + + + + System.Void Test.AsyncClass/<SendAsync>d__0::MoveNext() + + + + + + + + + + + + + + + + + Test.ClassWithExcludes + + + + + System.String Test.ClassWithExcludes::get_IncludedProperty() + + + + + + + + + + + System.String Test.ClassWithExcludes::get_ExcludedProperty() + + + + + + + + + + + System.Void Test.ClassWithExcludes::IncludedMethod() + + + + + + + + + + + + + System.Void Test.ClassWithExcludes::ExcludedMethod() + + + + + + + + + + + + + + Test.CodeContract_Contract + + + + + System.Int32 Test.CodeContract_Contract::Calculate(System.Int32) + + + + + + + + + + + + + + + Test.CodeContract_Target + + + + + System.Int32 Test.CodeContract_Target::Calculate(System.Int32) + + + + + + + + + + + + + + + + + + + + + Test.AbstractGenericClass`2 + + + + + System.Boolean Test.AbstractGenericClass`2::PostProcess(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + + + Test.GenericClass`2 + + + + + System.Boolean Test.GenericClass`2::Process(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + + + System.Boolean Test.GenericClass`2::PostProcess(Test.ISomeObjectInterface`2<TModel,TState>) + + + + + + + + + + + + + + + Test.SomeClass + + + + + System.String Test.SomeClass::get_Property1() + + + + + + + + + + + + Test.PartialClass + + + + + System.Void Test.PartialClass::ExecutedMethod_1() + + + + + + + + + + + + + System.Void Test.PartialClass::UnExecutedMethod_1() + + + + + + + + + + + + + System.Int32 Test.PartialClass::get_SomeProperty() + + + + + + + + + + + System.Void Test.PartialClass::set_SomeProperty(System.Int32) + + + + + + + + + + + + + + + + + + + + + + + Test.PartialClass + + + + + System.Void Test.PartialClass::ExecutedMethod_2() + + + + + + + + + + + + + System.Void Test.PartialClass::UnExecutedMethod_2() + + + + + + + + + + + + + + Test.PartialClassWithAutoProperties + + + + + System.String Test.PartialClassWithAutoProperties::get_Property1() + + + + + + + + + + + + Test.PartialClassWithAutoProperties + + + + + System.String Test.PartialClassWithAutoProperties::get_Property2() + + + + + + + + + + + System.String Test.PartialClassWithAutoProperties::get_ExpressionBodiedProperty() + + + + + + + + + + + + Test.Program + + + + + System.Void Test.Program::Main(System.String[]) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test.Program/EchoHandler + + + + + System.Threading.Tasks.Task`1<System.Net.Http.HttpResponseMessage> Test.Program/EchoHandler::SendAsync(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken) + + + + + + + + + + + + + System.Void Test.Program/EchoHandler::.ctor(System.Net.Http.HttpResponseMessage) + + + + + + + + + + + + + + + Test.Program/<CallAsyncMethod>d__1 + + + + + System.Void Test.Program/<CallAsyncMethod>d__1::MoveNext() + + + + + + + + + + + + + + + + + + + Test.TestClass + + + + + System.Void Test.TestClass::SampleFunction() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test.TestClass/NestedClass + + + + + System.Void Test.TestClass/NestedClass::SampleFunction() + + + + + + + + + + + + + + + + + Test.TestClass2 + + + + + System.String Test.TestClass2::get_ExecutedProperty() + + + + + + + + + + + System.String Test.TestClass2::get_UnExecutedProperty() + + + + + + + + + + + System.Void Test.TestClass2::ExecutedMethod() + + + + + + + + + + + + + + System.Void Test.TestClass2::UnExecutedMethod() + + + + + + + + + + + + + + System.Void Test.TestClass2::SampleFunction(System.String) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + System.String Test.TestClass2::DoSomething(System.String,System.String[],System.Guid,System.Collections.Generic.IEnumerable`1<System.String>,System.Collections.Generic.IList`1<System.String>,System.Decimal,System.Int32,System.Collections.Generic.Dictionary`2<System.String,System.Int32>,System.Int32&,System.Single,System.Double,System.Boolean,System.Byte,System.Char,System.Object,System.SByte,System.Int16,System.UInt32,System.UInt64,System.UInt16) + + + + + + + + + + + + + + System.Void Test.TestClass2::.ctor() + + + + + + + + + + + + + + + + System.Void Test.TestClass2::.ctor(System.String) + + + + + + + + + + + + + + + + + diff --git a/Sample20/Reports/Partcover2.2.xml b/Sample20/Reports/Partcover2.2.xml new file mode 100644 index 000000000..87a1e9d95 --- /dev/null +++ b/Sample20/Reports/Partcover2.2.xml @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sample20/Reports/Partcover2.3.0.35109.xml b/Sample20/Reports/Partcover2.3.0.35109.xml new file mode 100644 index 000000000..2e10b9b3c --- /dev/null +++ b/Sample20/Reports/Partcover2.3.0.35109.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sample20/Reports/Partcover2.3.xml b/Sample20/Reports/Partcover2.3.xml new file mode 100644 index 000000000..66d9ae463 --- /dev/null +++ b/Sample20/Reports/Partcover2.3.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sample20/Reports/Partcover4.0.10620.xml b/Sample20/Reports/Partcover4.0.10620.xml new file mode 100644 index 000000000..9b3f3c875 --- /dev/null +++ b/Sample20/Reports/Partcover4.0.10620.xml @@ -0,0 +1,399 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sample20/Reports/VisualStudio2010.coveragexml b/Sample20/Reports/VisualStudio2010.coveragexml new file mode 100644 index 000000000..15e9daf8b Binary files /dev/null and b/Sample20/Reports/VisualStudio2010.coveragexml differ diff --git a/Sample20/Reports/VisualStudio2012.coveragexml b/Sample20/Reports/VisualStudio2012.coveragexml new file mode 100644 index 000000000..170228f01 Binary files /dev/null and b/Sample20/Reports/VisualStudio2012.coveragexml differ diff --git a/Sample20/Reports/VisualStudio2013.coveragexml b/Sample20/Reports/VisualStudio2013.coveragexml new file mode 100644 index 000000000..5b0386f0f Binary files /dev/null and b/Sample20/Reports/VisualStudio2013.coveragexml differ diff --git a/Sample20/Reports/dotCover.xml b/Sample20/Reports/dotCover.xml new file mode 100644 index 000000000..e36e1ebc0 --- /dev/null +++ b/Sample20/Reports/dotCover.xml @@ -0,0 +1,388 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sample20/Reports/lcov.info b/Sample20/Reports/lcov.info new file mode 100644 index 000000000..315a707c5 --- /dev/null +++ b/Sample20/Reports/lcov.info @@ -0,0 +1,436 @@ +TN: +SF:C:\temp\AnalyzerTestClass.cs +FN:46,System.String Test.AnalyzerTestClass::get_AutoProperty() +FN:46,System.Void Test.AnalyzerTestClass::set_AutoProperty(System.String) +FN:9,System.Void Test.AnalyzerTestClass::.ctor() +FN:37,System.String Test.AnalyzerTestClass::DoSomething(System.String,System.String[],System.Guid,System.Collections.Generic.IEnumerable`1,System.Collections.Generic.IList`1,System.Decimal,System.Int32,System.Int64,System.Collections.Generic.Dictionary`2,System.Int32&,System.Single,System.Double,System.Boolean,System.Byte,System.Char,System.Object,System.SByte,System.Int16,System.UInt32,System.UInt64,System.UInt16,ICSharpCode.NRefactory.PatternMatching.INode) +FN:43,System.Void Test.AnalyzerTestClass::GenericMethod(T1,T2,System.Int32) +FNDA:0,System.String Test.AnalyzerTestClass::get_AutoProperty() +FNDA:0,System.Void Test.AnalyzerTestClass::set_AutoProperty(System.String) +FNDA:0,System.Void Test.AnalyzerTestClass::.ctor() +FNDA:0,System.String Test.AnalyzerTestClass::DoSomething(System.String,System.String[],System.Guid,System.Collections.Generic.IEnumerable`1,System.Collections.Generic.IList`1,System.Decimal,System.Int32,System.Int64,System.Collections.Generic.Dictionary`2,System.Int32&,System.Single,System.Double,System.Boolean,System.Byte,System.Char,System.Object,System.SByte,System.Int16,System.UInt32,System.UInt64,System.UInt16,ICSharpCode.NRefactory.PatternMatching.INode) +FNDA:0,System.Void Test.AnalyzerTestClass::GenericMethod(T1,T2,System.Int32) +FNF:5 +FNH:0 +BRF:0 +BRH:0 +DA:46,0 +DA:46,0 +DA:9,0 +DA:10,0 +DA:11,0 +DA:12,0 +DA:37,0 +DA:38,0 +DA:39,0 +DA:40,0 +DA:43,0 +DA:44,0 +LH:0 +LF:12 +end_of_record +SF:C:\temp\AsyncClass.cs +FN:10,System.Void Test.AsyncClass/d__0::MoveNext() +FNDA:1,System.Void Test.AsyncClass/d__0::MoveNext() +FNF:1 +FNH:1 +BRF:0 +BRH:0 +DA:10,1 +DA:11,1 +DA:12,1 +DA:13,1 +LH:4 +LF:4 +end_of_record +SF:C:\temp\ClassWithExcludes.cs +FN:6,System.String Test.ClassWithExcludes::get_IncludedProperty() +FN:6,System.Void Test.ClassWithExcludes::set_IncludedProperty(System.String) +FN:12,System.Void Test.ClassWithExcludes::IncludedMethod() +FNDA:0,System.String Test.ClassWithExcludes::get_IncludedProperty() +FNDA:1,System.Void Test.ClassWithExcludes::set_IncludedProperty(System.String) +FNDA:1,System.Void Test.ClassWithExcludes::IncludedMethod() +FNF:6 +FNH:2 +BRF:0 +BRH:0 +DA:6,0 +DA:6,1 +DA:12,1 +DA:13,1 +DA:14,1 +LH:4 +LF:5 +end_of_record +SF:C:\temp\CodeContract_Contract.cs +FN:10,System.Int32 Test.CodeContract_Contract::Calculate(System.Int32) +FNDA:0,System.Int32 Test.CodeContract_Contract::Calculate(System.Int32) +FNF:1 +FNH:0 +BRF:0 +BRH:0 +DA:10,0 +DA:11,0 +DA:13,0 +DA:14,0 +LH:0 +LF:4 +end_of_record +SF:C:\temp\CodeContract_Target.cs +FN:7,System.Int32 Test.CodeContract_Target::Calculate(System.Int32) +FNDA:2,System.Int32 Test.CodeContract_Target::Calculate(System.Int32) +FNF:1 +FNH:1 +BRDA:8,43,0,1 +BRDA:8,43,1,1 +BRF:2 +BRH:2 +DA:7,2 +DA:8,2 +DA:9,1 +DA:10,1 +DA:13,1 +DA:14,1 +DA:16,2 +LH:7 +LF:7 +end_of_record +SF:C:\temp\GenericClass.cs +FN:12,System.Boolean Test.AbstractGenericClass`2::PostProcess(Test.ISomeObjectInterface`2) +FN:22,System.Boolean Test.GenericClass`2::Process(Test.ISomeObjectInterface`2) +FN:28,System.Boolean Test.GenericClass`2::PostProcess(Test.ISomeObjectInterface`2) +FNDA:0,System.Boolean Test.AbstractGenericClass`2::PostProcess(Test.ISomeObjectInterface`2) +FNDA:1,System.Boolean Test.GenericClass`2::Process(Test.ISomeObjectInterface`2) +FNDA:1,System.Boolean Test.GenericClass`2::PostProcess(Test.ISomeObjectInterface`2) +FNF:3 +FNH:2 +BRF:0 +BRH:0 +DA:12,0 +DA:13,0 +DA:14,0 +DA:22,1 +DA:23,1 +DA:24,1 +DA:25,1 +DA:28,1 +DA:29,1 +DA:30,1 +DA:31,1 +LH:8 +LF:11 +end_of_record +SF:C:\temp\NotMatchingFileName.cs +FN:6,System.String Test.SomeClass::get_Property1() +FN:6,System.Void Test.SomeClass::set_Property1(System.String) +FNDA:0,System.String Test.SomeClass::get_Property1() +FNDA:1,System.Void Test.SomeClass::set_Property1(System.String) +FNF:2 +FNH:1 +BRF:0 +BRH:0 +DA:6,0 +DA:6,1 +LH:1 +LF:2 +end_of_record +SF:C:\temp\PartialClassWithAutoProperties2.cs +FN:6,System.String Test.PartialClassWithAutoProperties::get_Property2() +FN:6,System.Void Test.PartialClassWithAutoProperties::set_Property2(System.String) +FN:8,System.String Test.PartialClassWithAutoProperties::get_ExpressionBodiedProperty() +FNDA:0,System.String Test.PartialClassWithAutoProperties::get_Property2() +FNDA:1,System.Void Test.PartialClassWithAutoProperties::set_Property2(System.String) +FNDA:0,System.String Test.PartialClassWithAutoProperties::get_ExpressionBodiedProperty() +FNF:3 +FNH:1 +BRF:0 +BRH:0 +DA:6,0 +DA:6,1 +DA:8,0 +LH:1 +LF:3 +end_of_record +SF:C:\temp\PartialClassWithAutoProperties.cs +FN:6,System.String Test.PartialClassWithAutoProperties::get_Property1() +FN:6,System.Void Test.PartialClassWithAutoProperties::set_Property1(System.String) +FNDA:0,System.String Test.PartialClassWithAutoProperties::get_Property1() +FNDA:1,System.Void Test.PartialClassWithAutoProperties::set_Property1(System.String) +FNF:2 +FNH:1 +BRF:0 +BRH:0 +DA:6,0 +DA:6,1 +LH:1 +LF:2 +end_of_record +SF:C:\temp\PartialClass2.cs +FN:8,System.Void Test.PartialClass::ExecutedMethod_2() +FN:13,System.Void Test.PartialClass::UnExecutedMethod_2() +FNDA:1,System.Void Test.PartialClass::ExecutedMethod_2() +FNDA:0,System.Void Test.PartialClass::UnExecutedMethod_2() +FNF:2 +FNH:1 +BRF:0 +BRH:0 +DA:8,1 +DA:9,1 +DA:10,1 +DA:13,0 +DA:14,0 +DA:15,0 +LH:3 +LF:6 +end_of_record +SF:C:\temp\PartialClass.cs +FN:21,System.Int32 Test.PartialClass::get_SomeProperty() +FN:24,System.Void Test.PartialClass::set_SomeProperty(System.Int32) +FN:8,System.Void Test.PartialClass::ExecutedMethod_1() +FN:13,System.Void Test.PartialClass::UnExecutedMethod_1() +FNDA:0,System.Int32 Test.PartialClass::get_SomeProperty() +FNDA:1,System.Void Test.PartialClass::set_SomeProperty(System.Int32) +FNDA:1,System.Void Test.PartialClass::ExecutedMethod_1() +FNDA:0,System.Void Test.PartialClass::UnExecutedMethod_1() +FNF:4 +FNH:2 +BRDA:25,81,0,1 +BRDA:25,81,1,- +BRF:2 +BRH:1 +DA:21,0 +DA:21,0 +DA:21,0 +DA:24,1 +DA:25,1 +DA:26,1 +DA:27,1 +DA:28,1 +DA:30,0 +DA:31,0 +DA:32,0 +DA:33,1 +DA:8,1 +DA:9,1 +DA:10,1 +DA:13,0 +DA:14,0 +DA:15,0 +LH:9 +LF:18 +end_of_record +SF:C:\temp\Program.cs +FN:12,System.Void Test.Program::Main(System.String[]) +FN:51,System.Void Test.Program::CSharp_ExecuteTest1() +FN:57,System.Void Test.Program::CSharp_ExecuteTest2() +FN:73,System.Void Test.Program/EchoHandler::.ctor(System.Net.Http.HttpResponseMessage) +FN:79,System.Threading.Tasks.Task`1 Test.Program/EchoHandler::SendAsync(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken) +FN:62,System.Void Test.Program/d__3::MoveNext() +FNDA:1,System.Void Test.Program::Main(System.String[]) +FNDA:0,System.Void Test.Program::CSharp_ExecuteTest1() +FNDA:0,System.Void Test.Program::CSharp_ExecuteTest2() +FNDA:1,System.Void Test.Program/EchoHandler::.ctor(System.Net.Http.HttpResponseMessage) +FNDA:1,System.Threading.Tasks.Task`1 Test.Program/EchoHandler::SendAsync(System.Net.Http.HttpRequestMessage,System.Threading.CancellationToken) +FNDA:1,System.Void Test.Program/d__3::MoveNext() +FNF:6 +FNH:4 +BRF:0 +BRH:0 +DA:12,1 +DA:13,1 +DA:15,1 +DA:16,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:22,1 +DA:23,1 +DA:25,1 +DA:27,1 +DA:28,1 +DA:30,1 +DA:31,1 +DA:33,1 +DA:35,1 +DA:36,1 +DA:38,1 +DA:41,1 +DA:42,1 +DA:43,1 +DA:44,0 +DA:45,0 +DA:46,0 +DA:47,1 +DA:51,0 +DA:52,0 +DA:53,0 +DA:57,0 +DA:58,0 +DA:59,0 +DA:73,1 +DA:74,1 +DA:75,1 +DA:76,1 +DA:79,1 +DA:80,1 +DA:81,1 +DA:62,1 +DA:63,1 +DA:64,1 +DA:65,1 +DA:66,1 +DA:67,1 +LH:35 +LF:44 +end_of_record +SF:C:\temp\AbstractClass.cs +FN:7,System.Void Test.AbstractClass::.ctor() +FN:20,System.Void Test.AbstractClass_SampleImpl1::.ctor() +FN:26,System.Void Test.AbstractClass_SampleImpl1::Method1() +FN:31,System.Void Test.AbstractClass_SampleImpl1::Method2() +FN:39,System.Void Test.AbstractClass_SampleImpl2::.ctor() +FN:45,System.Void Test.AbstractClass_SampleImpl2::Method1() +FN:50,System.Void Test.AbstractClass_SampleImpl2::Method2() +FNDA:2,System.Void Test.AbstractClass::.ctor() +FNDA:1,System.Void Test.AbstractClass_SampleImpl1::.ctor() +FNDA:0,System.Void Test.AbstractClass_SampleImpl1::Method1() +FNDA:0,System.Void Test.AbstractClass_SampleImpl1::Method2() +FNDA:1,System.Void Test.AbstractClass_SampleImpl2::.ctor() +FNDA:0,System.Void Test.AbstractClass_SampleImpl2::Method1() +FNDA:0,System.Void Test.AbstractClass_SampleImpl2::Method2() +FNF:7 +FNH:3 +BRF:0 +BRH:0 +DA:7,2 +DA:8,2 +DA:9,2 +DA:10,2 +DA:20,1 +DA:21,1 +DA:22,1 +DA:23,1 +DA:26,0 +DA:27,0 +DA:31,0 +DA:32,0 +DA:39,1 +DA:40,1 +DA:41,1 +DA:42,1 +DA:45,0 +DA:46,0 +DA:50,0 +DA:51,0 +LH:12 +LF:20 +end_of_record +SF:C:\temp\TestClass.cs +FN:8,System.Void Test.TestClass::SampleFunction() +FN:30,System.Void Test.TestClass/NestedClass::SampleFunction() +FNDA:1,System.Void Test.TestClass::SampleFunction() +FNDA:0,System.Void Test.TestClass/NestedClass::SampleFunction() +FNF:2 +FNH:1 +BRDA:17,181,0,1 +BRDA:17,181,1,- +BRF:2 +BRH:1 +DA:8,1 +DA:9,1 +DA:14,1 +DA:15,1 +DA:17,1 +DA:18,1 +DA:19,1 +DA:20,1 +DA:22,0 +DA:23,0 +DA:24,0 +DA:25,1 +DA:30,0 +DA:31,0 +DA:35,0 +LH:9 +LF:15 +end_of_record +SF:C:\temp\TestClass2.cs +FN:13,System.String Test.TestClass2::get_ExecutedProperty() +FN:13,System.Void Test.TestClass2::set_ExecutedProperty(System.String) +FN:15,System.String Test.TestClass2::get_UnExecutedProperty() +FN:15,System.Void Test.TestClass2::set_UnExecutedProperty(System.String) +FN:11,System.Void Test.TestClass2::.ctor() +FN:11,System.Void Test.TestClass2::.ctor(System.String) +FN:30,System.Void Test.TestClass2::ExecutedMethod() +FN:36,System.Void Test.TestClass2::UnExecutedMethod() +FN:42,System.Void Test.TestClass2::SampleFunction(System.String) +FN:80,System.String Test.TestClass2::DoSomething(System.String,System.String[],System.Guid,System.Collections.Generic.IEnumerable`1,System.Collections.Generic.IList`1,System.Decimal,System.Int32,System.Collections.Generic.Dictionary`2,System.Int32&,System.Single,System.Double,System.Boolean,System.Byte,System.Char,System.Object,System.SByte,System.Int16,System.UInt32,System.UInt64,System.UInt16) +FN:54,System.Boolean Test.TestClass2/<>c__DisplayClass14_0::b__1(System.String) +FN:45,System.Int32 Test.TestClass2/<>c::b__14_0(System.Int32) +FNDA:1,System.String Test.TestClass2::get_ExecutedProperty() +FNDA:2,System.Void Test.TestClass2::set_ExecutedProperty(System.String) +FNDA:0,System.String Test.TestClass2::get_UnExecutedProperty() +FNDA:0,System.Void Test.TestClass2::set_UnExecutedProperty(System.String) +FNDA:0,System.Void Test.TestClass2::.ctor() +FNDA:2,System.Void Test.TestClass2::.ctor(System.String) +FNDA:1,System.Void Test.TestClass2::ExecutedMethod() +FNDA:0,System.Void Test.TestClass2::UnExecutedMethod() +FNDA:1,System.Void Test.TestClass2::SampleFunction(System.String) +FNDA:0,System.String Test.TestClass2::DoSomething(System.String,System.String[],System.Guid,System.Collections.Generic.IEnumerable`1,System.Collections.Generic.IList`1,System.Decimal,System.Int32,System.Collections.Generic.Dictionary`2,System.Int32&,System.Single,System.Double,System.Boolean,System.Byte,System.Char,System.Object,System.SByte,System.Int16,System.UInt32,System.UInt64,System.UInt16) +FNDA:3,System.Boolean Test.TestClass2/<>c__DisplayClass14_0::b__1(System.String) +FNDA:4,System.Int32 Test.TestClass2/<>c::b__14_0(System.Int32) +FNF:12 +FNH:7 +BRDA:54,232,0,1 +BRDA:54,232,1,- +BRF:2 +BRH:1 +DA:13,1 +DA:13,2 +DA:15,0 +DA:15,0 +DA:11,0 +DA:17,0 +DA:18,0 +DA:19,0 +DA:20,0 +DA:21,0 +DA:11,2 +DA:23,2 +DA:24,2 +DA:25,2 +DA:26,2 +DA:27,2 +DA:30,1 +DA:31,1 +DA:32,1 +DA:33,1 +DA:36,0 +DA:37,0 +DA:38,0 +DA:39,0 +DA:42,1 +DA:43,1 +DA:45,1 +DA:47,1 +DA:47,1 +DA:47,4 +DA:48,4 +DA:49,4 +DA:50,4 +DA:47,5 +DA:52,1 +DA:54,1 +DA:55,1 +DA:56,1 +DA:57,1 +DA:58,1 +DA:80,0 +DA:81,0 +DA:82,0 +DA:83,0 +DA:54,3 +DA:45,4 +LH:30 +LF:46 +end_of_record diff --git a/Sample20/Reports/mprof-report.xml b/Sample20/Reports/mprof-report.xml new file mode 100644 index 000000000..f59990260 --- /dev/null +++ b/Sample20/Reports/mprof-report.xml @@ -0,0 +1,564 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sample20/Test.csproj b/Sample20/Test.csproj new file mode 100644 index 000000000..2d9796dd6 --- /dev/null +++ b/Sample20/Test.csproj @@ -0,0 +1,6 @@ + + + netcoreapp2.0 + false + + diff --git a/Sample20/TestClass.cs b/Sample20/TestClass.cs new file mode 100644 index 000000000..5c2edb182 --- /dev/null +++ b/Sample20/TestClass.cs @@ -0,0 +1,38 @@ +using System; + +namespace Test +{ + class TestClass + { + public void SampleFunction() + { + string test = string.Format( + "{0} {1}", + "Hello", + "World"); + + Console.WriteLine(test); + int i = 10; + + if (i > 0 || i > 1) + { + Console.WriteLine(i + " is greater that 0"); + } + else + { + Console.WriteLine(i + " is not greater that 0"); + } + } + + public class NestedClass + { + public void SampleFunction() + { + Console.WriteLine( + "{0} {1}", + "Hello", + "World"); + } + } + } +} \ No newline at end of file diff --git a/Sample20/TestClass2.cs b/Sample20/TestClass2.cs new file mode 100644 index 000000000..0f9299786 --- /dev/null +++ b/Sample20/TestClass2.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Test +{ + class TestClass2 + { + private string name; + + private Dictionary dict = new Dictionary(); + + public string ExecutedProperty { get; set; } + + public string UnExecutedProperty { get; set; } + + public TestClass2() + { + this.name = "Nobody"; + this.ExecutedProperty = "Nobody"; + } + + public TestClass2(string name) + { + this.name = name; + this.ExecutedProperty = name + name; + } + + public void ExecutedMethod() + { + Console.WriteLine(this.name); + Console.WriteLine(this.ExecutedProperty); + } + + public void UnExecutedMethod() + { + Console.WriteLine(this.name); + Console.WriteLine(this.ExecutedProperty); + } + + public void SampleFunction(string city) + { + int[] values = new int[] { 0, 1, 2, 3 }; + + var doubled = values.Select(i => i * 2); + + foreach (var item in doubled) + { + Console.WriteLine(item); + } + + string[] cities = new string[] { "Berlin", "Munich", "Paris" }; + + if (cities.SingleOrDefault(c => c.Equals(city, StringComparison.OrdinalIgnoreCase)) != null) + { + Console.WriteLine("Found " + city); + } + } + + public string DoSomething(string value, + string[] stringArray, + Guid id, + IEnumerable stringEnumerable, + IList stringList, + decimal dec, + int i, + Dictionary dict, + out int g, + float fff, + double dou, + bool bo, + byte by, + char ch, + object o, + sbyte sby, + short sh, + uint ui, + ulong ul, + ushort usho) + { + g = 0; + return null; + } + } +} diff --git a/Sample21/Sample21.csproj b/Sample21/Sample21.csproj index 3f10f7338..196b87a71 100644 --- a/Sample21/Sample21.csproj +++ b/Sample21/Sample21.csproj @@ -1,23 +1,25 @@ + - netcoreapp3.0;net47 - 8.0 + netcoreapp3.0;net472 + 8.0 false - + - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers diff --git a/Sample22/Program.fs b/Sample22/Program.fs new file mode 100644 index 000000000..0695f84c6 --- /dev/null +++ b/Sample22/Program.fs @@ -0,0 +1 @@ +module Program = let [] main _ = 0 diff --git a/Sample22/Sample22.xml b/Sample22/Sample22.xml new file mode 100644 index 000000000..86294a3cd --- /dev/null +++ b/Sample22/Sample22.xml @@ -0,0 +1,32 @@ + + + + netcoreapp2.1 + TRACE;DEBUG;CODE_ANALYSIS;GUI + + false + false + + + + 4 + true + + 52 + true + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sample22/TestCommon.fs b/Sample22/TestCommon.fs new file mode 100644 index 000000000..a652f29cd --- /dev/null +++ b/Sample22/TestCommon.fs @@ -0,0 +1,157 @@ +namespace Tests + +open System +open System.IO +open System.Reflection + +#if NETCOREAPP3_0 +open AltCover +open Expecto +open Mono.Cecil +open Mono.Cecil.Cil +open Mono.Cecil.Rocks +#endif + +type Assert = NUnit.Framework.Assert +type Does = NUnit.Framework.Does +type Is = NUnit.Framework.Is + +#if NETCOREAPP3_0 +[] +type TestAttribute() = class + inherit Attribute() +end +#else +type TestAttribute = NUnit.Framework.TestAttribute +#endif + +[] +module TestCommon = + let SolutionDir() = + AltCover.SolutionRoot.location + + let maybeIOException f = + try + f() + with + | :? System.UnauthorizedAccessException + | :? IOException -> () + + let maybeDeleteFile f = + if File.Exists f + then File.Delete f + + let maybeReraise f g = + try + f() + with _ -> + g() + reraise() + + let maybe a b c = + if a + then b + else c + + let test x = Swensen.Unquote.Assertions.test x + + let test' x message = + try + test x + with + | fail -> Swensen.Unquote.AssertionFailedException(message + Environment.NewLine + fail.Message, fail) |> raise + +module TestCommonTests = + [] + let ExerciseItAll() = + let where = Assembly.GetExecutingAssembly().Location |> Path.GetDirectoryName + let unique = Path.Combine(Path.Combine(where, Guid.NewGuid().ToString()), "nonesuch.txt") + let realDir = Path.Combine(where, Guid.NewGuid().ToString()) + realDir + |> Directory.CreateDirectory + |> ignore + let another = Path.Combine(realDir, "another.txt") + do use _dummy = File.Create another + () + maybeDeleteFile another + maybeDeleteFile unique + maybeIOException (fun () -> + maybeReraise (fun () -> File.Delete unique) ignore + ) + maybeIOException (fun () -> + maybeReraise (fun () -> IOException() |> raise) ignore + ) + maybeIOException (fun () -> System.UnauthorizedAccessException() |> raise ) + + test <@ (maybe true 1 2) = 1 @> + test <@ (maybe false 1 2) = 2 @> + test <@ SolutionDir() |> String.IsNullOrEmpty |> not @> + test <@ SolutionDir() = AltCover.SolutionRoot.location @> + test <@ where.StartsWith(AltCover.SolutionRoot.location, StringComparison.Ordinal) @> + + [] + let SelfTest() = + test <@ true @> +#if NETCOREAPP3_0 + Assert.Throws( +#else +#if (ValidateGendarmeEmulation || GUI) + Assert.Throws( +#else + Assert.Throws( +#endif +#endif + fun () -> test <@ false @> ) |> ignore + Assert.Throws( + fun () -> test' <@ false @> "junk") |> ignore + +#if NETCOREAPP3_0 +module ExpectoTestCommon = + let sync = System.Object() + + let consistencyCheck (regular:((unit -> unit)*string) list) expected = + let here = System.Reflection.Assembly.GetExecutingAssembly().Location + let def = Mono.Cecil.AssemblyDefinition.ReadAssembly(here) + + let testMethods = def.MainModule.GetTypes() + |> Seq.collect (fun t -> t.Methods) + |> Seq.filter (fun m -> m.CustomAttributes.IsNotNull) + |> Seq.filter (fun m -> m.CustomAttributes |> Seq.exists (fun a -> a.AttributeType.Name = "TestAttribute")) + |> Seq.map (fun m -> m.DeclaringType.FullName + "::" + m.Name) + + let lookup = def.MainModule.GetAllTypes() + |> Seq.filter (fun t -> t.Methods |> Seq.exists(fun m -> m.Name = "Invoke")) + |> Seq.map (fun t -> (t.FullName.Replace("/","+"), t.Methods |> Seq.find(fun m -> m.Name = "Invoke"))) + |> Map.ofSeq + + let calls = regular + |> List.map (fst + >> (fun f -> f.GetType().FullName.Replace("/","+")) + >> (fun f -> Map.find f lookup) + >> (fun f -> f.Body.Instructions + // Where the test assembly is itself instrumented + // we have to allow for calls to AltCover.Recorder.Instance::Visit + // or the coverlet equivalent + // having been injected into the local function reference + + |> Seq.find (fun i -> i.OpCode = OpCodes.Call + && i.Operand.GetType().Name.Equals("MethodDefinition", StringComparison.Ordinal)) + ) + >> (fun i -> let m = (i.Operand :?> MethodDefinition) + m.DeclaringType.FullName + "::" + m.Name)) + |> Set.ofList + + let omitted = testMethods + |> Seq.filter (fun t -> (Set.contains t calls) |> not) + |> Seq.toList + + // cover all but the special cases + TestCommon.test <@ omitted = expected @> + + let makeTests name (check:unit -> unit) (regular:((unit -> unit)*string) list) specials pretest = + testList name + <| (((check, "ConsistencyCheck") :: regular + |> List.map (fun (f,name) -> testCase name (fun () -> lock sync (fun () -> + pretest() + f())))) @ specials) +#endif \ No newline at end of file diff --git a/Sample22/UnitTest1.fs b/Sample22/UnitTest1.fs new file mode 100644 index 000000000..79d731698 --- /dev/null +++ b/Sample22/UnitTest1.fs @@ -0,0 +1,69 @@ +module Sample22 + +open System.Xml.Linq +open NUnit.Framework +open Tests + +[] +let Setup () = + () + +let rec RecursiveValidateOpenCover result expected' depth zero expectSkipped = + let x name = XName.Get(name) + let rcount = result |> Seq.length + + let expected = + expected' + |> Seq.filter (fun (el : XElement) -> + el.Name.LocalName <> "Module" || expectSkipped || "skippedDueTo" + |> x + |> el.Attributes + |> Seq.isEmpty) + |> Seq.toList + + let ecount = expected |> Seq.length + test' <@ rcount = ecount @> + ("Mismatch at depth " + depth.ToString() + " : " + expected.ToString() + " but got" + + (result |> Seq.toList).ToString()) + Seq.zip result expected + |> Seq.iter + (fun (r : XElement, e : XElement) -> + test <@ r.Name = e.Name @> + let ra = r.Attributes() + let ea = e.Attributes() + Seq.zip ra ea + |> Seq.iter + (fun (a1 : XAttribute, a2 : XAttribute) -> + test <@ a1.Name = a2.Name @> + match a1.Name.ToString() with + | "bev" + | "visited" + | "visitedSequencePoints" + | "visitedBranchPoints" + | "visitedClasses" + | "visitedMethods" + | "sequenceCoverage" + | "branchCoverage" + | "uspid" + | "minCrapScore" + | "maxCrapScore" + | "crapScore" + | "hash" -> () + | "fullPath" -> + test' + <@ a1.Value.Replace("\\", "/").Replace("altcover", "AltCover"). + EndsWith(a2.Value.Replace("\\", "/").Replace("altcover", "AltCover")) @> + (a1.Name.ToString() + " : " + r.ToString() + " -> document") + | "vc" -> + let expected = + maybe zero "0" a2.Value + test' <@ expected = a1.Value @> (r.ToString() + " -> visitcount") + | _ -> + test' <@ a1.Value = a2.Value @> + (r.ToString() + " -> " + a1.Name.ToString())) + RecursiveValidateOpenCover (r.Elements()) (e.Elements()) (depth + 1) zero + expectSkipped) + +[] +let Test1 () = + Assert.Pass() \ No newline at end of file diff --git a/AltCover.NetCoreApp/runtimeconfig.template.json b/Sample22/runtimeconfig.template.json similarity index 100% rename from AltCover.NetCoreApp/runtimeconfig.template.json rename to Sample22/runtimeconfig.template.json diff --git a/Sample23/Async97.cs b/Sample23/Async97.cs new file mode 100644 index 000000000..43f5b99fe --- /dev/null +++ b/Sample23/Async97.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.IO; + +namespace Sample23 +{ + public class Async97 + { + public async Task DoSomething(byte[] buffer, string file) + { + try + { + using (var source = File.OpenRead(file)) + return await source.ReadAsync(buffer, 0, buffer.Length); + } + catch (Exception) + { + return null; + } + } + } +} \ No newline at end of file diff --git a/Sample23/Sample23.csproj b/Sample23/Sample23.csproj new file mode 100644 index 000000000..b89a05bea --- /dev/null +++ b/Sample23/Sample23.csproj @@ -0,0 +1,28 @@ + + + + net472;netcoreapp2.1 + false + false + $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ + $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + \ No newline at end of file diff --git a/Sample23/Strings.cs b/Sample23/Strings.cs new file mode 100644 index 000000000..c73ca39da --- /dev/null +++ b/Sample23/Strings.cs @@ -0,0 +1,38 @@ +// based upon https://github.com/kkokosa/Strings.Abbreviations + +namespace String.Abbreviations +{ + public static class Strings + { + /** + * All strings are duplicated for various case, to have them interned. + **/ + private const string Brb = "Be right back"; + private const string Brb_TitleCase = "Be Right Back"; + private const string Imho = "In my humble opinion"; + private const string Imho_TitleCase = "In My Humble Opinion"; + private const string Eos = "En osaa sanoa"; // "Eng. 'Cannot say / I have no opinion.'"; + private const string Lmao = "Laughing my ass off"; + private const string Lmao_TitleCase = "Laughing My Ass Off"; + private const string Rotfl = "Rolling on the floor laughing"; + private const string Rotfl_TitleCase = "Rolling On The Floor Laughing"; + private const string Ama = "Ask me anything"; + private const string Ama_TitleCase = "Ask Me Anything"; + private const string Yolo = "You only live once"; + private const string Yolo_TitleCase = "You Only Live Once"; + + public static string BRB(bool titleCase = false) => !titleCase ? Brb : Brb_TitleCase; + + public static string IMHO(bool titleCase = false) => !titleCase ? Imho : Imho_TitleCase; + + public static string EOS() => Eos; // No title case in Finnish + + public static string LMAO(bool titleCase = false) => !titleCase ? Lmao : Lmao_TitleCase; + + public static string ROTFL(bool titleCase = false) => !titleCase ? Rotfl : Rotfl_TitleCase; + + public static string AMA(bool titleCase = false) => !titleCase ? Ama : Ama_TitleCase; + + public static string YOLO(bool titleCase = false) => !titleCase ? Yolo : Yolo_TitleCase; + } +} \ No newline at end of file diff --git a/Sample3/sample3.core.csproj b/Sample3/Sample3.csproj similarity index 91% rename from Sample3/sample3.core.csproj rename to Sample3/Sample3.csproj index b85ec2678..6049259cb 100644 --- a/Sample3/sample3.core.csproj +++ b/Sample3/Sample3.csproj @@ -1,7 +1,7 @@ - netstandard2.0;net461 + netstandard2.0;net472 Sample3 false $(ProjectDir)../ @@ -25,9 +25,9 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Sample4/Sample4.fsproj b/Sample4/Sample4.fsproj index 6200f44c4..a02bee3e0 100644 --- a/Sample4/Sample4.fsproj +++ b/Sample4/Sample4.fsproj @@ -1,109 +1,56 @@ - - - - - + + + - $(ProjectDir)../ - Debug - AnyCPU - 2.0 - 607161f1-86be-471a-9837-3d19bfaaa5fa - Library - Sample4 + netcoreapp2.1;net472 + false Sample4 - v4.7 - 4.4.1.0 - true - Sample4 - false - - - legacy\ - net47\ - $(SolutionDir)_Binaries\$(AssemblyName)\$(Configuration)+$(Platform)\$(PathTerminal) - $(SolutionDir)_Intermediate\$(AssemblyName)\$(Configuration)+$(Platform)\$(PathTerminal) + false - - true - full - portable - false - false - DEBUG;TRACE - 3 - --keyfile:$(SolutionDir)\Build\Infrastructure.snk + + + $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ + $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ - - pdbonly - portable - true - true - TRACE - 3 - --keyfile:$(SolutionDir)\Build\Infrastructure.snk --standalone + + $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ + $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ - - 11 - - - - - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets - - - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - + - + - - ..\packages\FSharp.Core.4.5.2\lib\net45\FSharp.Core.dll - - - - - - + + all + runtime; build; native; contentfiles; analyzers + + + + + ..\ThirdParty\Unquote.dll - - ..\packages\xunit.abstractions.2.0.3\lib\net35\xunit.abstractions.dll - - - ..\packages\xunit.assert.2.4.1\lib\netstandard1.1\xunit.assert.dll - - - ..\packages\xunit.extensibility.core.2.4.1\lib\net452\xunit.core.dll - - - ..\packages\xunit.extensibility.execution.2.4.1\lib\net452\xunit.execution.desktop.dll - + + + all + runtime; build; native; contentfiles; analyzers + + - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + @@ -112,11 +59,6 @@ - + \ No newline at end of file diff --git a/Sample4/Sample4LongForm.fsproj b/Sample4/Sample4LongForm.fsproj new file mode 100644 index 000000000..c5d9f8939 --- /dev/null +++ b/Sample4/Sample4LongForm.fsproj @@ -0,0 +1,122 @@ + + + + + + + $(ProjectDir)../ + Debug + AnyCPU + 2.0 + 607161f1-86be-471a-9837-3d19bfaaa5fa + Library + Sample4 + Sample4 + v4.7 + 4.4.1.0 + true + Sample4 + false + + + legacy\ + net47\ + $(SolutionDir)_Binaries\$(AssemblyName)\$(Configuration)+$(Platform)\$(PathTerminal) + $(SolutionDir)_Intermediate\$(AssemblyName)\$(Configuration)+$(Platform)\$(PathTerminal) + + + true + full + portable + false + false + DEBUG;TRACE + 3 + --keyfile:$(SolutionDir)\Build\Infrastructure.snk + + + pdbonly + portable + true + true + TRACE + 3 + --keyfile:$(SolutionDir)\Build\Infrastructure.snk --standalone + + + 11 + + + + + $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets + + + + + + + + + + + ..\packages\FSharp.Core.4.5.2\lib\net45\FSharp.Core.dll + + + + + + + ..\ThirdParty\Unquote.dll + + + ..\packages\xunit.abstractions.2.0.3\lib\net35\xunit.abstractions.dll + + + ..\packages\xunit.assert.2.4.1\lib\netstandard1.1\xunit.assert.dll + + + ..\packages\xunit.extensibility.core.2.4.1\lib\net452\xunit.core.dll + + + ..\packages\xunit.extensibility.execution.2.4.1\lib\net452\xunit.execution.desktop.dll + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sample4/sample4.core.fsproj b/Sample4/sample4.core.fsproj deleted file mode 100644 index 8b720e217..000000000 --- a/Sample4/sample4.core.fsproj +++ /dev/null @@ -1,65 +0,0 @@ - - - - - netcoreapp2.1;net47 - false - Sample4 - false - - - - $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ - $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ - - - $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ - $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ - - - - - - - - - all - runtime; build; native; contentfiles; analyzers - - - - - - ..\ThirdParty\Unquote.dll - - - - all - runtime; build; native; contentfiles; analyzers - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Sample5/sample5.core.csproj b/Sample5/Sample5.csproj similarity index 89% rename from Sample5/sample5.core.csproj rename to Sample5/Sample5.csproj index 5da9f29ab..3bea45d66 100644 --- a/Sample5/sample5.core.csproj +++ b/Sample5/Sample5.csproj @@ -1,7 +1,7 @@ - netstandard2.0;net461 + netstandard2.0;net472 Sample5 false @@ -22,9 +22,9 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Sample6/sample6.core.fsproj b/Sample6/Sample6.fsproj similarity index 78% rename from Sample6/sample6.core.fsproj rename to Sample6/Sample6.fsproj index 9406d7e18..976b09c40 100644 --- a/Sample6/sample6.core.fsproj +++ b/Sample6/Sample6.fsproj @@ -1,7 +1,7 @@  - netcoreapp2.0;net461 + netcoreapp2.0;net472 Sample6 $(AssetTargetFallback);netcoreapp1.0; @@ -19,9 +19,9 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -29,7 +29,6 @@ - - + \ No newline at end of file diff --git a/Sample7/sample7.core.fsproj b/Sample7/Sample7.fsproj similarity index 91% rename from Sample7/sample7.core.fsproj rename to Sample7/Sample7.fsproj index c2d93b71f..533a430e9 100644 --- a/Sample7/sample7.core.fsproj +++ b/Sample7/Sample7.fsproj @@ -21,9 +21,9 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -31,6 +31,6 @@ - + \ No newline at end of file diff --git a/Sample8/sample8.core.csproj b/Sample8/Sample8.csproj similarity index 100% rename from Sample8/sample8.core.csproj rename to Sample8/Sample8.csproj diff --git a/Sample9/sample9.csproj b/Sample9/sample9.csproj index 1a08a46b6..2d2c7fadb 100644 --- a/Sample9/sample9.csproj +++ b/Sample9/sample9.csproj @@ -1,7 +1,7 @@ - net471 + net472 @@ -13,7 +13,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Tests.Visualizer/AltCover.Visualizer.Tests.fsproj b/Tests.Visualizer/AltCover.Visualizer.Tests.fsproj new file mode 100644 index 000000000..8891f2bfb --- /dev/null +++ b/Tests.Visualizer/AltCover.Visualizer.Tests.fsproj @@ -0,0 +1,72 @@ + + + + netcoreapp3.0;net472 + false + false + AltCover.Tests.Visualizer + GUI + $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ + $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ + + + + TRACE;DEBUG;CODE_ANALYSIS;$(GlobalDefineConstants) + --tailcalls+ --keyfile:$(ProjectDir)..\Build\Infrastructure.snk + + + TRACE;$(GlobalDefineConstants) + --keyfile:$(ProjectDir)..\Build\Infrastructure.snk + + + + + + + + ..\ThirdParty\Unquote.dll + + + + all + runtime; build; native; contentfiles; analyzers + + + + + + + + + + + + + + + AssemblyInfo.fs + + + AssemblyVersion.fs + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + \ No newline at end of file diff --git a/Tests.Visualizer/Program.fs b/Tests.Visualizer/Program.fs index 9cde23a32..bdb6ef0c3 100644 --- a/Tests.Visualizer/Program.fs +++ b/Tests.Visualizer/Program.fs @@ -1,2 +1,34 @@ -namespace Dummy -module Program = let [] main _ = 0 +namespace Tests + +#if NETCOREAPP3_0 + +open Expecto + +module TestMain = + let regular = [ + Tests.TestCommonTests.ExerciseItAll, "TestCommonTests.ExerciseItAll" + Tests.TestCommonTests.SelfTest, "TestCommonTests.SelfTest" + Tests.VisualizerTests.AugmentNullableDetectNulls, "VisualizerTests.AugmentNullableDetectNulls" + Tests.VisualizerTests.AugmentNonNullableDetectNoNulls, "VisualizerTests.AugmentNonNullableDetectNoNulls" + Tests.VisualizerTests.DefaultHelperPassesThrough, "VisualizerTests.DefaultHelperPassesThrough" + ] + + let specials = + [] + + let consistencyCheck() = + ExpectoTestCommon.consistencyCheck regular [] + + [] + let tests = + ExpectoTestCommon.makeTests "AltCover.Visualizer" + consistencyCheck regular specials + ignore + +module UnitTestStub = + [] + let unitTestStub argv = + let writeResults = TestResults.writeNUnitSummary ("AltCover.Visualizer.TestResults.xml", "AltCover.Visualizer.Tests") + let config = defaultConfig.appendSummaryHandler writeResults + runTestsWithArgs config argv TestMain.tests +#endif \ No newline at end of file diff --git a/Tests.Visualizer/GtkVisualizerTests.fs b/Tests.Visualizer/UICommonTests.fs similarity index 54% rename from Tests.Visualizer/GtkVisualizerTests.fs rename to Tests.Visualizer/UICommonTests.fs index 1d81b6627..5a00708d4 100644 --- a/Tests.Visualizer/GtkVisualizerTests.fs +++ b/Tests.Visualizer/UICommonTests.fs @@ -1,27 +1,24 @@ -namespace Tests.Visualizer - -open System -open System.IO -open System.Reflection +namespace Tests open AltCover -open NUnit.Framework -open Swensen.Unquote -[] -type AltCoverTests() = - class +module VisualizerTests = // Augment.fs [] - member self.AugmentNullableDetectNulls() = + let AugmentNullableDetectNulls() = let input = [ "string"; null; "another string" ] let nulls = input |> List.map (fun x -> x.IsNotNull |> not) test <@ nulls = [ false; true; false ] @> [] - member self.AugmentNonNullableDetectNoNulls() = + let AugmentNonNullableDetectNoNulls() = let input = [ 1; 2 ;3 ] test <@ input |> List.forall (fun x -> x.IsNotNull) @> - end \ No newline at end of file + + // CoverageFile.fs + + [] + let DefaultHelperPassesThrough() = + test <@ Transformer.defaultHelper null null |> isNull @> \ No newline at end of file diff --git a/Tests.Visualizer/altcover.visualizer.tests.core.fsproj b/Tests.Visualizer/altcover.visualizer.tests.core.fsproj deleted file mode 100644 index 9cb837fe5..000000000 --- a/Tests.Visualizer/altcover.visualizer.tests.core.fsproj +++ /dev/null @@ -1,60 +0,0 @@ - - - - net471;netcoreapp2.1 - x86 - - false - false - AltCover.Tests.Visualizer - $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ - $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ - - - - --tailcalls+ --keyfile:$(SolutionDir)Build\Infrastructure.snk - - - --keyfile:$(SolutionDir)Build\Infrastructure.snk - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - ..\ThirdParty\Unquote.dll - - - - - - - AssemblyInfo.fs - - - AssemblyVersion.fs - - - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - \ No newline at end of file diff --git a/Tests/altcover.tests.core.fsproj b/Tests/AltCover.Tests.fsproj similarity index 70% rename from Tests/altcover.tests.core.fsproj rename to Tests/AltCover.Tests.fsproj index d20f99fb4..695cb427a 100644 --- a/Tests/altcover.tests.core.fsproj +++ b/Tests/AltCover.Tests.fsproj @@ -1,22 +1,23 @@  - netcoreapp3.0;net47 + netcoreapp3.0;net472 false AltCover.Tests $(AssetTargetFallback);netcoreapp1.0; false - Exe - Library + Exe + Library + MONO - $(AssemblySearchPaths);{GAC} + $(AssemblySearchPaths);{GAC} $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ - TRACE;NETCOREAPP2_0;NETCOREAPP2_1; - TRACE + TRACE;NETCOREAPP2_0;NETCOREAPP2_1 + TRACE;$(ExtraDefines) --keyfile:$(ProjectDir)..\Build\Infrastructure.snk @@ -28,6 +29,7 @@ + @@ -69,56 +71,57 @@ - - + + - - + + ..\ThirdParty\Unquote.dll - + all runtime; build; native; contentfiles; analyzers - - - - + + + + - - + + ..\ThirdParty\Mono.Options.dll - + - - - - - + + + + + + - - - - - - + + + + + + + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + diff --git a/Tests/AltCoverFSharpTypes.n3.xml b/Tests/AltCoverFSharpTypes.n3.xml index c0fe3db68..bf954caf6 100644 --- a/Tests/AltCoverFSharpTypes.n3.xml +++ b/Tests/AltCoverFSharpTypes.n3.xml @@ -1,9 +1,9 @@  - + - + ./_Binaries/Sample4/Debug+AnyCPU/netcoreapp2.1/Sample4.dll 2018-06-13T15:08:24.8840000Z Sample4 @@ -73,24 +73,24 @@ - + Tests.DU/MyUnion - - + + 100663319 Tests.DU/MyUnion Tests.DU/MyUnion::as_bar() - - - - - - - - + + + + + + + + diff --git a/Tests/OpenCoverForPester.coverlet.xml b/Tests/OpenCoverForPester.coverlet.xml index 75bf8f066..15893f7af 100644 --- a/Tests/OpenCoverForPester.coverlet.xml +++ b/Tests/OpenCoverForPester.coverlet.xml @@ -1,9 +1,9 @@  - + - + Sample18.dll 2020-03-28T12:20:44 Sample18 @@ -131,7 +131,7 @@ - + Tests.DU/MyUnion @@ -145,37 +145,25 @@ - - + + 100663322 Tests.DU/MyUnion Tests.DU/MyUnion::AsBar() - - - - - + + + + + - - - - - - - - - - - - - - - - - + + + + + diff --git a/Tests/Program.fs b/Tests/Program.fs index 447350683..7f065f025 100644 --- a/Tests/Program.fs +++ b/Tests/Program.fs @@ -1,17 +1,14 @@ -namespace AltCover.Expecto.Tests +namespace Tests #if NETCOREAPP3_0 open AltCover open Expecto -open Mono.Cecil -open Mono.Cecil.Cil -open Mono.Cecil.Rocks -open Swensen.Unquote -module TestMain = - let sync = System.Object() +module ExpectoMain = let regular = [ + Tests.TestCommonTests.ExerciseItAll, "TestCommonTests.ExerciseItAll" + Tests.TestCommonTests.SelfTest, "TestCommonTests.SelfTest" Tests.AltCoverRunnerTests.MaxTimeFirst, "Runner.MaxTimeFirst" Tests.AltCoverRunnerTests.MaxTimeLast, "Runner.MaxTimeLast" Tests.AltCoverRunnerTests.MinTimeFirst, "Runner.MinTimeFirst" @@ -98,6 +95,8 @@ module TestMain = Tests.AltCoverRunnerTests.JunkPayloadShouldReportAsExpected, "Runner.JunkPayloadShouldReportAsExpected" Tests.AltCoverRunnerTests.TrackingPayloadShouldReportAsExpected, "Runner.TrackingPayloadShouldReportAsExpected" Tests.AltCoverRunnerTests.PointProcessShouldCaptureTimes, "Runner.PointProcessShouldCaptureTimes" + Tests.AltCoverRunnerTests.PostprocessShouldHandleNullCase, "Runner.PostprocessShouldHandleNullCase" + Tests.AltCoverRunnerTests.PostprocessShouldHandleEntryAndExitTimes, "RunnerTests.PostprocessShouldHandleEntryAndExitTimes" Tests.AltCoverRunnerTests.PostprocessShouldRestoreKnownOpenCoverState, "Runner.PostprocessShouldRestoreKnownOpenCoverState" Tests.AltCoverRunnerTests.PostprocessShouldRestoreKnownOpenCoverStateFromMono, "Runner.PostprocessShouldRestoreKnownOpenCoverStateFromMono" Tests.AltCoverRunnerTests.PostprocessShouldRestoreDegenerateOpenCoverState, "Runner.PostprocessShouldRestoreDegenerateOpenCoverState" @@ -166,6 +165,7 @@ module TestMain = Tests.AltCoverTests.ValidateAutomaticExemption, "Tests.ValidateAutomaticExemption" Tests.AltCoverTests.DetectLocalSource, "Tests.DetectLocalSource" Tests.AltCoverTests.LocateMatchShouldChooseLongerWildCardPath, "Tests.LocateMatchShouldChooseLongerWildCardPath" + Tests.AltCoverTests.DebugBuildTernaryTestInContext, "Tests.DebugBuildTernaryTestInContext" Tests.AltCoverTests.ReleaseBuildTernaryTest, "Tests.ReleaseBuildTernaryTest" Tests.AltCoverTests.ReleaseBuildTernaryTestInContext, "Tests.ReleaseBuildTernaryTestInContext" Tests.AltCoverTests.ReleaseBuildTernaryTestInContextWithCoalescence, "Tests.ReleaseBuildTernaryTestInContextWithCoalescence" @@ -261,7 +261,7 @@ module TestMain = Tests.AltCoverTests2.ShouldBeAbleToLocateAReference, "Tests2.ShouldBeAbleToLocateAReference" Tests.AltCoverTests2.ShouldBeAbleToPrepareTheAssembly, "Tests2.ShouldBeAbleToPrepareTheAssembly" Tests.AltCoverTests2.ShouldGetTrackingStyleIfSet, "Tests2.ShouldGetTrackingStyleIfSet" - Tests.AltCoverTests2.ShouldSymbolWriterOnWindowsOnly, "Tests2.ShouldSymbolWriterOnWindowsOnly" + Tests.AltCoverTests2.ShouldSymbolWriterAsExpected, "Tests2.ShouldSymbolWriterAsExpected" Tests.AltCoverTests2.ShouldGetNewFilePathFromPreparedAssembly, "Tests2.ShouldGetNewFilePathFromPreparedAssembly" Tests.AltCoverTests2.ShouldWriteMonoAssemblyOK, "Tests2.ShouldWriteMonoAssemblyOK" Tests.AltCoverTests2.ShouldGetVisitFromWrittenAssembly, "Tests2.ShouldGetVisitFromWrittenAssembly" @@ -420,6 +420,7 @@ module TestMain = Tests.AltCoverTests3.StoresAsExpected, "Tests3.StoresAsExpected" Tests.AltCoverTests3.ImportModuleIsAsExpected, "Tests3.ImportModuleIsAsExpected" Tests.AltCoverTests3.VersionIsAsExpected, "Tests3.VersionIsAsExpected" + Tests.AltCoverTests3.TargetsPathIsAsExpected, "Tests3.TargetsPathIsAsExpected" Tests.AltCoverTests3.UsageIsAsExpected, "Tests3.UsageIsAsExpected" Tests.AltCoverTests3.ErrorResponseIsAsExpected, "Tests3.ErrorResponseIsAsExpected" Tests.AltCoverTests3.LoggingCanBeExercised, "Tests3.LoggingCanBeExercised" @@ -431,13 +432,10 @@ module TestMain = Tests.AltCoverTests3.EmptyPowerShellIsJustTheDefaults, "Tests3.EmptyPowerShellIsJustTheDefaults" Tests.AltCoverTests3.EmptyVersionIsJustTheDefaults, "Tests3.EmptyVersionIsJustTheDefaults" Tests.AltCoverTests3.EchoWorks, "Tests3.EchoWorks" -#if NETCOREAPP2_0 Tests.AltCoverTests3.RunSettingsFailsIfCollectorNotFound, "Tests3.RunSettingsFailsIfCollectorNotFound" Tests.AltCoverTests3.RunSettingsWorksIfOK, "Tests3.RunSettingsWorksIfOK" Tests.AltCoverTests3.RunSettingsExtendsOK, "Tests3.RunSettingsExtendsOK" Tests.AltCoverTests3.RunSettingsRecoversOK, "Tests3.RunSettingsRecoversOK" -#else -#endif Tests.AltCoverXTests.CollectOptionsCanBeValidated, "XTests.CollectOptionsCanBeValidated" Tests.AltCoverXTests.TypeSafeEmptyThresholdCanBeValidated, "XTests.TypeSafeEmptyThresholdCanBeValidated" Tests.AltCoverXTests.TypeSafeCollectOptionsCanBeValidated, "XTests.TypeSafeCollectOptionsCanBeValidated" @@ -457,6 +455,7 @@ module TestMain = Tests.AltCoverXTests.TypeSafePrepareOptionsCanBeValidatedAndDetectInconsistency, "XTests.TypeSafePrepareOptionsCanBeValidatedAndDetectInconsistency" Tests.AltCoverXTests.PrepareOptionsCanBeValidatedWithErrors, "XTests.PrepareOptionsCanBeValidatedWithErrors" Tests.AltCoverXTests.NullListsAreEmpty, "XTests.NullListsAreEmpty" + Tests.AltCoverXTests.ValidateAssemblyOption, "XTests.ValidateAssemblyOption" Tests.AltCoverXTests.ADotNetDryRunLooksAsExpected, "XTests.ADotNetDryRunLooksAsExpected" Tests.AltCoverXTests.ADryRunLooksAsExpected, "XTests.ADryRunLooksAsExpected" Tests.AltCoverXTests.AfterAssemblyCommitsThatAssembly, "XTests.AfterAssemblyCommitsThatAssembly" @@ -471,55 +470,24 @@ module TestMain = { 0 .. 31 } |> Seq.map (fun i -> testCase (sprintf "Tests2.ShouldUpdateHandlerOK(%d)" i) <| (fun () -> - lock sync (fun () -> + lock ExpectoTestCommon.sync (fun () -> AltCover.Main.init() Tests.AltCoverTests2.ShouldUpdateHandlerOK i))) |> Seq.toList let consistencyCheck() = - let here = System.Reflection.Assembly.GetExecutingAssembly().Location - let def = Mono.Cecil.AssemblyDefinition.ReadAssembly(here) - - let testMethods = def.MainModule.GetTypes() - |> Seq.collect (fun t -> t.Methods) - |> Seq.filter (fun m -> m.CustomAttributes.IsNotNull) - |> Seq.filter (fun m -> m.CustomAttributes |> Seq.exists (fun a -> a.AttributeType.Name = "TestAttribute")) - |> Seq.map (fun m -> m.DeclaringType.FullName + "::" + m.Name) - - let lookup = def.MainModule.GetAllTypes() - |> Seq.filter (fun t -> t.Methods |> Seq.exists(fun m -> m.Name = "Invoke")) - |> Seq.map (fun t -> (t.FullName.Replace("/","+"), t.Methods |> Seq.find(fun m -> m.Name = "Invoke"))) - |> Map.ofSeq - - let calls = regular - |> List.map (fst - >> (fun f -> f.GetType().FullName.Replace("/","+")) - >> (fun f -> Map.find f lookup) - >> (fun f -> f.Body.Instructions |> Seq.find (fun i -> i.OpCode = OpCodes.Call)) - >> (fun i -> let m = (i.Operand :?> MethodDefinition) - m.DeclaringType.FullName + "::" + m.Name)) - |> Set.ofList - - let omitted = testMethods - |> Seq.filter (fun t -> (Set.contains t calls) |> not) - |> Seq.toList - - // cover all but the special cases - test <@ omitted = ["Tests.AltCoverTests2::ShouldUpdateHandlerOK"] @> + ExpectoTestCommon.consistencyCheck regular ["Tests.AltCoverTests2::ShouldUpdateHandlerOK"] [] let tests = - testList "AltCoverTests" - <| (((consistencyCheck, "ConsistencyCheck") :: regular - |> List.map (fun (f,name) -> testCase name (fun () -> lock sync (fun () -> - AltCover.Main.init() - AltCover.Runner.init() - f())))) @ specials) + ExpectoTestCommon.makeTests "AltCoverTests" consistencyCheck regular specials + (fun () -> AltCover.Main.init() + AltCover.Runner.init()) -module Program = - [] - let main argv = +module UnitTestStub = + [] + let unitTestStub argv = let writeResults = TestResults.writeNUnitSummary ("AltCover.TestResults.xml", "AltCover.Tests") let config = defaultConfig.appendSummaryHandler writeResults - runTestsWithArgs config argv TestMain.tests + runTestsWithArgs config argv ExpectoMain.tests #endif \ No newline at end of file diff --git a/Tests/Runner.Tests.fs b/Tests/Runner.Tests.fs index f0e960d14..8ef972322 100644 --- a/Tests/Runner.Tests.fs +++ b/Tests/Runner.Tests.fs @@ -3,7 +3,6 @@ namespace Tests open System open System.Collections.Generic -open System.Diagnostics.CodeAnalysis open System.IO open System.IO.Compression open System.Reflection @@ -15,20 +14,8 @@ open System.Xml.Schema open AltCover open Microsoft.FSharp.Reflection open Mono.Options -open Swensen.Unquote -type Assert = NUnit.Framework.Assert -type Does = NUnit.Framework.Does -type Is = NUnit.Framework.Is - -#if NETCOREAPP2_1 -[] -type TestAttribute() = class - inherit Attribute() -end -#else -type TestAttribute = NUnit.Framework.TestAttribute -#endif +#nowarn "25" // partial pattern match module AltCoverUsage = let internal usageText = @@ -247,12 +234,10 @@ module AltCoverRunnerTests = |> Seq.map (fun x -> x.GetAttribute("visitcount")), Is.EquivalentTo [ "11"; "10"; "9"; "8"; "7"; "6"; "4"; "3"; "2"; "1" ]) finally - if File.Exists reportFile then File.Delete reportFile + maybeDeleteFile reportFile Console.SetOut saved Directory.SetCurrentDirectory(here) - try - Directory.Delete(unique) - with :? IOException -> () + maybeIOException (fun () -> Directory.Delete(unique)) [] let FlushLeavesExpectedTracesWhenDiverted() = @@ -297,12 +282,10 @@ module AltCoverRunnerTests = |> Seq.map (fun x -> x.GetAttribute("visitcount")), Is.EquivalentTo [ "11"; "10"; "9"; "8"; "7"; "6"; "4"; "3"; "2"; "1" ]) finally - if File.Exists reportFile then File.Delete reportFile + maybeDeleteFile reportFile Console.SetOut saved Directory.SetCurrentDirectory(here) - try - Directory.Delete(unique) - with :? IOException -> () + maybeIOException (fun () -> Directory.Delete(unique)) // Runner.fs and CommandLine.fs [] @@ -343,7 +326,7 @@ module AltCoverRunnerTests = files |> Seq.filter (fun x -> x.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) |> Seq.head - EntryPoint.toConsole() + CommandLine.toConsole() let saved = (Console.Out, Console.Error) let e0 = Console.Out.Encoding let e1 = Console.Error.Encoding @@ -351,18 +334,19 @@ module AltCoverRunnerTests = use stdout = { new StringWriter() with member self.Encoding = e0 } + test <@ stdout.Encoding = e0 @> use stderr = { new StringWriter() with member self.Encoding = e1 } + test <@ stderr.Encoding = e1 @> Console.SetOut stdout Console.SetError stderr let nonWindows = System.Environment.GetEnvironmentVariable("OS") <> "Windows_NT" let exe, args = - if nonWindows then ("mono", "\"" + program + "\"") - else (program, String.Empty) + maybe nonWindows ("mono", "\"" + program + "\"") (program, String.Empty) let r = CommandLine.I.launch exe args @@ -372,8 +356,8 @@ module AltCoverRunnerTests = let result = stdout.ToString() let quote = - if System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" then "\"" - else String.Empty + maybe (System.Environment.GetEnvironmentVariable("OS") = "Windows_NT") + "\"" String.Empty let expected = "Command line : '" + quote + exe + quote + " " + args + "\'" @@ -490,7 +474,6 @@ module AltCoverRunnerTests = let options = Runner.declareOptions() let parse = CommandLine.parseCommandLine [| "/@thisIsNotAnOption" |] options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(x, Is.EqualTo "UsageError") Assert.That(y, Is.SameAs options) @@ -502,7 +485,6 @@ module AltCoverRunnerTests = let input = [| "--"; "/@thisIsNotAnOption"; "this should be OK" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(x, Is.EquivalentTo(input |> Seq.skip 1)) Assert.That(y, Is.SameAs options) @@ -514,10 +496,8 @@ module AltCoverRunnerTests = let input = [| "--?" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) match CommandLine.processHelpOption parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(x, Is.EqualTo "HelpText") Assert.That(y, Is.SameAs options) @@ -526,7 +506,6 @@ module AltCoverRunnerTests = Runner.executable := None match CommandLine.parseCommandLine [| "/x"; "x" |] options |> CommandLine.processHelpOption with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty)) @@ -542,12 +521,10 @@ module AltCoverRunnerTests = let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(x, Is.EqualTo "UsageError") Assert.That(y, Is.SameAs options) match CommandLine.processHelpOption parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(x, Is.EqualTo "UsageError") Assert.That(y, Is.SameAs options) @@ -556,7 +533,6 @@ module AltCoverRunnerTests = Runner.executable := None match CommandLine.parseCommandLine [| "/x"; "x" |] options |> CommandLine.processHelpOption with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty)) @@ -572,12 +548,10 @@ module AltCoverRunnerTests = let input = [| "-x"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match !Runner.executable with - | None -> Assert.Fail() | Some x -> Assert.That(Path.GetFileName x, Is.EqualTo unique) finally Runner.executable := None) @@ -599,7 +573,6 @@ module AltCoverRunnerTests = let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -618,7 +591,6 @@ module AltCoverRunnerTests = let input = [| "-x"; blank |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -635,12 +607,10 @@ module AltCoverRunnerTests = let input = [| "-w"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match Runner.workingDirectory with - | None -> Assert.Fail() | Some x -> Assert.That(x, Is.EqualTo unique) finally Runner.workingDirectory <- None @@ -660,7 +630,6 @@ module AltCoverRunnerTests = let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -678,7 +647,6 @@ module AltCoverRunnerTests = let input = [| "-w"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -694,7 +662,6 @@ module AltCoverRunnerTests = let input = [| "-w" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -711,12 +678,10 @@ module AltCoverRunnerTests = let input = [| "-r"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match Runner.recordingDirectory with - | None -> Assert.Fail() | Some x -> Assert.That(x, Is.EqualTo unique) finally Runner.recordingDirectory <- None @@ -736,7 +701,6 @@ module AltCoverRunnerTests = let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -754,7 +718,6 @@ module AltCoverRunnerTests = let input = [| "-r"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -770,7 +733,6 @@ module AltCoverRunnerTests = let input = [| "-r" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -786,7 +748,6 @@ module AltCoverRunnerTests = let input = [| "--collect" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -803,7 +764,6 @@ module AltCoverRunnerTests = let input = [| "--collect"; "--collect" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -817,22 +777,20 @@ module AltCoverRunnerTests = lock LCov.path (fun () -> try LCov.path := None - Runner.I.summaries <- [ Runner.I.standardSummary ] + Runner.I.initSummary() let options = Runner.declareOptions() let unique = "some exe" let input = [| "-l"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match !LCov.path with - | None -> Assert.Fail() | Some x -> Assert.That(Path.GetFileName x, Is.EqualTo unique) Assert.That(Runner.I.summaries.Length, Is.EqualTo 2) finally - Runner.I.summaries <- [ Runner.I.standardSummary ] + Runner.I.initSummary() LCov.path := None) [] @@ -841,7 +799,7 @@ module AltCoverRunnerTests = lock LCov.path (fun () -> try LCov.path := None - Runner.I.summaries <- [ Runner.I.standardSummary ] + Runner.I.initSummary() let options = Runner.declareOptions() let unique = Guid.NewGuid().ToString() @@ -853,13 +811,12 @@ module AltCoverRunnerTests = let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") Assert.That(CommandLine.error |> Seq.head, Is.EqualTo "--lcovReport : specify this only once") finally - Runner.I.summaries <- [ Runner.I.standardSummary ] + Runner.I.initSummary() LCov.path := None) [] @@ -868,18 +825,17 @@ module AltCoverRunnerTests = lock LCov.path (fun () -> try LCov.path := None - Runner.I.summaries <- [ Runner.I.standardSummary ] + Runner.I.initSummary() let options = Runner.declareOptions() let blank = " " let input = [| "-l"; blank |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") finally - Runner.I.summaries <- [ Runner.I.standardSummary ] + Runner.I.initSummary() LCov.path := None) [] @@ -891,12 +847,10 @@ module AltCoverRunnerTests = let input = [| "-t"; "57" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match Runner.threshold with - | None -> Assert.Fail() | Some x -> Assert.That(x, Is.EqualTo { Statements = 57uy Branches = 0uy @@ -917,12 +871,10 @@ module AltCoverRunnerTests = let input = [| "-t"; "M57C42S16B7AM14AC101" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match Runner.threshold with - | None -> Assert.Fail() | Some x -> Assert.That(x, Is.EqualTo { Statements = 16uy Branches = 7uy @@ -943,12 +895,10 @@ module AltCoverRunnerTests = let input = [| "-t"; "M100C255S100B100AM100AC255" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match Runner.threshold with - | None -> Assert.Fail() | Some x -> Assert.That(x, Is.EqualTo { Statements = 100uy Branches = 100uy @@ -969,12 +919,10 @@ module AltCoverRunnerTests = let input = [| "-t"; "M0C0S0B0AM0AC0" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match Runner.threshold with - | None -> Assert.Fail() | Some x -> Assert.That(x, Is.EqualTo { Statements = 0uy Branches = 0uy @@ -995,7 +943,6 @@ module AltCoverRunnerTests = let input = [| "-t"; "23"; "/t"; "42" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1012,7 +959,6 @@ module AltCoverRunnerTests = let input = [| "-t"; "-111" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1028,7 +974,6 @@ module AltCoverRunnerTests = let input = [| "-t"; "S" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1044,7 +989,6 @@ module AltCoverRunnerTests = let input = [| "-t"; "X666" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1060,7 +1004,6 @@ module AltCoverRunnerTests = let input = [| "-t"; "S101" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1076,7 +1019,6 @@ module AltCoverRunnerTests = let input = [| "-t"; "M101" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1092,7 +1034,6 @@ module AltCoverRunnerTests = let input = [| "-t"; "B101" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1108,7 +1049,6 @@ module AltCoverRunnerTests = let input = [| "-t"; "C256" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1124,7 +1064,6 @@ module AltCoverRunnerTests = let input = [| "-t"; " " |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1140,7 +1079,6 @@ module AltCoverRunnerTests = let input = [| "-t" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1153,22 +1091,20 @@ module AltCoverRunnerTests = lock Cobertura.path (fun () -> try Cobertura.path := None - Runner.I.summaries <- [ Runner.I.standardSummary ] + Runner.I.initSummary() let options = Runner.declareOptions() let unique = "some exe" let input = [| "-c"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match !Cobertura.path with - | None -> Assert.Fail() | Some x -> Assert.That(Path.GetFileName x, Is.EqualTo unique) Assert.That(Runner.I.summaries.Length, Is.EqualTo 2) finally - Runner.I.summaries <- [ Runner.I.standardSummary ] + Runner.I.initSummary() Cobertura.path := None) [] @@ -1177,7 +1113,7 @@ module AltCoverRunnerTests = lock Cobertura.path (fun () -> try Cobertura.path := None - Runner.I.summaries <- [ Runner.I.standardSummary ] + Runner.I.initSummary() let options = Runner.declareOptions() let unique = Guid.NewGuid().ToString() @@ -1189,13 +1125,12 @@ module AltCoverRunnerTests = let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") Assert.That(CommandLine.error |> Seq.head, Is.EqualTo "--cobertura : specify this only once") finally - Runner.I.summaries <- [ Runner.I.standardSummary ] + Runner.I.initSummary() Cobertura.path := None) [] @@ -1204,18 +1139,17 @@ module AltCoverRunnerTests = lock Cobertura.path (fun () -> try Cobertura.path := None - Runner.I.summaries <- [ Runner.I.standardSummary ] + Runner.I.initSummary() let options = Runner.declareOptions() let blank = " " let input = [| "-c"; blank |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") finally - Runner.I.summaries <- [ Runner.I.standardSummary ] + Runner.I.initSummary() Cobertura.path := None) [] @@ -1228,12 +1162,10 @@ module AltCoverRunnerTests = let input = [| "-o"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match Runner.output with - | None -> Assert.Fail() | Some x -> Assert.That(Path.GetFileName x, Is.EqualTo unique) finally Runner.output <- None @@ -1255,7 +1187,6 @@ module AltCoverRunnerTests = let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1273,7 +1204,6 @@ module AltCoverRunnerTests = let input = [| "-o"; blank |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1289,7 +1219,6 @@ module AltCoverRunnerTests = let input = [| "--dropReturnCode" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -1306,7 +1235,6 @@ module AltCoverRunnerTests = let input = [| "--dropReturnCode"; "--dropReturnCode" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1363,18 +1291,11 @@ module AltCoverRunnerTests = let input = [| "--teamcity" + a |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match Runner.summaryFormat with - | x when v = x -> -#if NETCOREAPP2_0 - () -#else - Assert.Pass() -#endif - | _ -> Assert.Fail(sprintf "%A %A => %A" a v Runner.summaryFormat) )) + | x when v = x -> ())) [] let ParsingMultipleTCGivesFailure() = @@ -1385,7 +1306,6 @@ module AltCoverRunnerTests = let input = [| "--teamcity"; "--teamcity" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1401,7 +1321,6 @@ module AltCoverRunnerTests = let input = [| "--teamcity:junk" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError")) @@ -1415,7 +1334,6 @@ module AltCoverRunnerTests = let options = Runner.declareOptions() let parse = Runner.J.requireExe(Right([], options)) match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1435,7 +1353,6 @@ module AltCoverRunnerTests = Assert.That(z, Is.SameAs options) Assert.That(x, Is.EqualTo "xxx") Assert.That(y, Is.EquivalentTo [ "b" ]) - | _ -> Assert.Fail() finally Runner.executable := None) @@ -1450,7 +1367,6 @@ module AltCoverRunnerTests = let parse = Runner.J.requireExe(Right([ "a"; "b" ], options)) match parse with | Right([], z) -> Assert.That(z, Is.SameAs options) - | _ -> Assert.Fail() finally Runner.collect := false Runner.executable := None) @@ -1465,7 +1381,6 @@ module AltCoverRunnerTests = let options = Runner.declareOptions() let parse = Runner.J.requireExe(Right([ "b" ], options)) match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1485,7 +1400,6 @@ module AltCoverRunnerTests = | Right _ -> Assert.That(parse, Is.SameAs input) Assert.That(Option.isSome Runner.workingDirectory) - | _ -> Assert.Fail() finally Runner.workingDirectory <- None @@ -1501,7 +1415,6 @@ module AltCoverRunnerTests = | Right _ -> Assert.That(parse, Is.SameAs input) Assert.That(Runner.workingDirectory, Is.EqualTo(Some "ShouldAcceptWorker")) - | _ -> Assert.Fail() finally Runner.workingDirectory <- None @@ -1514,7 +1427,6 @@ module AltCoverRunnerTests = let input = (Right([], options)) let parse = Runner.J.requireRecorder input match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1524,22 +1436,13 @@ module AltCoverRunnerTests = [] let ShouldRequireRecorderDll() = Runner.init() + let path = Path.Combine(SolutionRoot.location, "_Mono/Sample1") try - let where = Assembly.GetExecutingAssembly().Location - let path = - Path.Combine(where.Substring(0, where.IndexOf("_Binaries")), "_Mono/Sample1") - - let path' = - if Directory.Exists path then path - else - Path.Combine - (where.Substring(0, where.IndexOf("_Binaries")), "../_Mono/Sample1") - Runner.recordingDirectory <- Some path' + Runner.recordingDirectory <- Some path let options = Runner.declareOptions() let input = (Right([], options)) let parse = Runner.J.requireRecorder input match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1568,7 +1471,6 @@ module AltCoverRunnerTests = let parse = Runner.J.requireRecorder input match parse with | Right _ -> Assert.That(parse, Is.SameAs input) - | _ -> Assert.Fail() finally Runner.recordingDirectory <- None @@ -1589,8 +1491,7 @@ module AltCoverRunnerTests = #if NETCOREAPP2_0 [ "dotnet"; path ] #else - if nonWindows then [ "mono"; path ] - else [ path ] + maybe nonWindows [ "mono"; path ] [ path ] #endif let r = CommandLine.processTrailingArguments args <| DirectoryInfo(where) @@ -1616,7 +1517,7 @@ module AltCoverRunnerTests = files |> Seq.filter (fun x -> x.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) |> Seq.head - EntryPoint.toConsole() + CommandLine.toConsole() let saved = (Console.Out, Console.Error) let e0 = Console.Out.Encoding let e1 = Console.Error.Encoding @@ -1624,10 +1525,12 @@ module AltCoverRunnerTests = use stdout = { new StringWriter() with member self.Encoding = e0 } + test <@ stdout.Encoding = e0 @> use stderr = { new StringWriter() with member self.Encoding = e1 } + test <@ stderr.Encoding = e1 @> Console.SetOut stdout Console.SetError stderr @@ -1637,8 +1540,7 @@ module AltCoverRunnerTests = let nonWindows = System.Environment.GetEnvironmentVariable("OS") <> "Windows_NT" let args = - if nonWindows then "mono" :: baseArgs - else baseArgs + maybe nonWindows ("mono" :: baseArgs) baseArgs let r = CommandLine.processTrailingArguments args <| DirectoryInfo(path) Assert.That(r, Is.EqualTo 0) @@ -1647,8 +1549,8 @@ module AltCoverRunnerTests = let result = stdout.ToString() let quote = - if System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" then "\"" - else String.Empty + maybe (System.Environment.GetEnvironmentVariable("OS") = "Windows_NT") + "\"" String.Empty let expected = "Command line : '" + quote + args.Head + quote + " " @@ -1675,7 +1577,7 @@ module AltCoverRunnerTests = Console.SetError stderr let unique = Guid.NewGuid().ToString() let main = - typeof.Assembly.GetType("AltCover.EntryPoint") + typeof.Assembly.GetType("AltCover.EntryPoint") .GetMethod("main", BindingFlags.NonPublic ||| BindingFlags.Static) let returnCode = main.Invoke(null, [| [| "RuNN"; "-r"; unique |] |]) Assert.That(returnCode, Is.EqualTo 255) @@ -1738,7 +1640,7 @@ module AltCoverRunnerTests = files |> Seq.filter (fun x -> x.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) |> Seq.head - EntryPoint.toConsole() + CommandLine.toConsole() let saved = (Console.Out, Console.Error) Runner.workingDirectory <- Some path let e0 = Console.Out.Encoding @@ -1747,10 +1649,12 @@ module AltCoverRunnerTests = use stdout = { new StringWriter() with member self.Encoding = e0 } + test <@ stdout.Encoding = e0 @> use stderr = { new StringWriter() with member self.Encoding = e1 } + test <@ stderr.Encoding = e1 @> Console.SetOut stdout Console.SetError stderr @@ -1760,8 +1664,7 @@ module AltCoverRunnerTests = let nonWindows = System.Environment.GetEnvironmentVariable("OS") <> "Windows_NT" let args = - if nonWindows then "mono" :: baseArgs - else baseArgs + maybe nonWindows ("mono" :: baseArgs) baseArgs let r = Runner.J.getPayload args Assert.That(r, Is.EqualTo 0) @@ -1770,8 +1673,8 @@ module AltCoverRunnerTests = let result = stdout.ToString() let quote = - if System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" then "\"" - else String.Empty + maybe (System.Environment.GetEnvironmentVariable("OS") = "Windows_NT") + "\"" String.Empty let expected = "Command line : '" + quote + args.Head + quote + " " @@ -1845,13 +1748,11 @@ module AltCoverRunnerTests = |> Seq.map (fun x -> x.GetAttribute("visitcount")), Is.EquivalentTo [ "11"; "10"; "9"; "8"; "7"; "6"; "4"; "3"; "2"; "1" ]) finally - if File.Exists reportFile then File.Delete reportFile - if File.Exists junkfile then File.Delete junkfile + maybeDeleteFile reportFile + maybeDeleteFile junkfile Console.SetOut saved Directory.SetCurrentDirectory(here) - try - Directory.Delete(unique) - with :? IOException -> () + maybeIOException (fun () -> Directory.Delete(unique)) [] let ZipWriteLeavesExpectedTraces() = @@ -1929,12 +1830,10 @@ module AltCoverRunnerTests = finally Assert.That(junkfile |> File.Exists |> not) Assert.That(junkfile2 |> File.Exists |> not) - if File.Exists reportFile then File.Delete reportFile + maybeDeleteFile reportFile Console.SetOut saved Directory.SetCurrentDirectory(here) - try - Directory.Delete(unique) - with :? IOException -> () + maybeIOException (fun () -> Directory.Delete(unique)) [] let NullPayloadShouldReportNothing() = @@ -1992,7 +1891,7 @@ module AltCoverRunnerTests = Assert.That (counts.["c"].[3].Count, Is.EqualTo 1) Assert.That (counts.["c"].[3].Tracks, Is.Empty) - if File.Exists(unique + ".acv") then File.Delete(unique + ".acv") + maybeDeleteFile (unique + ".acv") [] let CollectShouldReportAsExpected() = @@ -2002,11 +1901,9 @@ module AltCoverRunnerTests = let counts = Dictionary>() let where = Assembly.GetExecutingAssembly().Location |> Path.GetDirectoryName let unique = Path.Combine(where, Guid.NewGuid().ToString()) - - let r = - Runner.J.getMonitor counts unique (fun l -> + let processing name (l : String list) = use sink = - new DeflateStream(File.OpenWrite(unique + ".0.acv"), + new DeflateStream(File.OpenWrite(name + ".0.acv"), CompressionMode.Compress) use formatter = new BinaryWriter(sink) l @@ -2015,7 +1912,15 @@ module AltCoverRunnerTests = formatter.Write i formatter.Write 0uy x) - |> List.length) [ "a"; "b"; String.Empty; "c" ] + |> List.length + let test = Path.Combine(where, Guid.NewGuid().ToString()) + let dryrun = processing test [ "a"; "b"; String.Empty; "c" ] + Assert.That (dryrun, Is.EqualTo 4) + Assert.That(File.Exists(test + ".0.acv")) + + let r = + Runner.J.getMonitor counts unique (processing unique) + [ "a"; "b"; String.Empty; "c" ] Assert.That(r, Is.EqualTo 0) Assert.That(File.Exists(unique + ".acv") |> not) let doc = Runner.J.loadReport(unique + ".acv") @@ -2111,7 +2016,8 @@ module AltCoverRunnerTests = formatter.Write(Tag.Both |> byte) formatter.Write(b.Time) formatter.Write(b.Call) - | _ -> tx |> (sprintf "%A") |> Assert.Fail) + //| _ -> tx |> (sprintf "%A") |> Assert.Fail + ) formatter.Write(Tag.Null |> byte))) formatter.Write String.Empty x) @@ -2173,6 +2079,95 @@ module AltCoverRunnerTests = Is.EqualTo """""") + [] + let PostprocessShouldHandleNullCase() = + let minimal = """ + + +""" + let after = XmlDocument() + use reader= new StringReader(minimal) + after.Load(reader) + let empty = Dictionary>() + Runner.J.postProcess empty ReportFormat.OpenCover after + let summary = after.DocumentElement.SelectNodes("//Summary") + |> Seq.cast + |> Seq.toList + + test <@ summary |> Seq.length = 1 @> + let attr = (summary |> Seq.head).GetAttribute("minCrapScore") + test <@ attr = "0" @> + + [] + let PostprocessShouldHandleEntryAndExitTimes() = + let minimal = """ + + + + + + Sample4.dll + 2020-11-07T13:49:28.5801620Z + Sample4 + + + + + + + + +""" + let after = XmlDocument() + use reader= new StringReader(minimal) + after.Load(reader) + let epoch = DateTime(2020, 11, 7) + let ticks = epoch.Ticks // = 637403040000000000 + let v1 = PointVisit.Create() + v1.Track (Time (ticks + 10L)) + v1.Track (Call 23) + v1.Track (Time (ticks + 20L)) + let v2 = PointVisit.Create() + v2.Track (Time (ticks + 11L)) + let v3 = PointVisit.Create() + v3.Track (Time (ticks + 30L)) + let v4 = PointVisit.Create() + v4.Track (Call 42) + + let entries = Dictionary() + entries.Add(1, v1) + entries.Add(2, v3) + let exits = Dictionary() + exits.Add(1, v2) + exits.Add(2, v4) + + let counts = Dictionary>() + counts.Add(Track.Entry, entries) + counts.Add(Track.Exit, exits) + Runner.J.postProcess counts ReportFormat.OpenCover after + let processed = after.DocumentElement.OuterXml.Replace("\r\n","\n") + + let expected = """ + + + + +Sample4.dll +2020-11-07T13:49:28.5801620Z +Sample4 + + + + + + + + +""" + + Assert.That (processed, Is.EqualTo <| expected.Replace("\r",String.Empty).Replace("\n",String.Empty)) + test <@ processed = expected.Replace("\r",String.Empty).Replace("\n",String.Empty) @> + [] let PostprocessShouldRestoreKnownOpenCoverState() = Runner.init() @@ -2469,10 +2464,13 @@ module AltCoverRunnerTests = let result = PostProcess.lookUpVisitsByToken key visits match (result.Count, result.Tracks |> Seq.toList) with | (0L, []) -> () - | _ -> Assert.Fail(sprintf "%A" result) +// | _ -> Assert.Fail(sprintf "%A" result) [] let EmptyNCoverGeneratesExpectedSummary() = + let resetInfo () = Output.info <- ignore + resetInfo() + Output.info "info" Runner.init() let report = XDocument() let builder = System.Text.StringBuilder() @@ -2492,10 +2490,13 @@ module AltCoverRunnerTests = let collected = task.Summary.Replace("\r",String.Empty).Replace("\n", "|") Assert.That(collected, Is.EqualTo expected)) finally - Output.info <- ignore + resetInfo() [] let EmptyNCoverGeneratesExpectedTCSummary() = + let resetInfo () = Output.info <- ignore + resetInfo() + Output.info "info" Runner.init() let report = XDocument() let builder = System.Text.StringBuilder() @@ -2517,10 +2518,13 @@ module AltCoverRunnerTests = let collected = task.Summary.Replace("\r",String.Empty).Replace("\n", "|") Assert.That(collected, Is.EqualTo expected, collected)) finally - Output.info <- ignore + resetInfo() [] let EmptyNCoverGeneratesExpectedSummaries() = + let resetInfo () = Output.info <- ignore + resetInfo() + Output.info "info" Runner.init() let report = XDocument() let builder = System.Text.StringBuilder() @@ -2542,10 +2546,13 @@ module AltCoverRunnerTests = let collected = task.Summary.Replace("\r",String.Empty).Replace("\n", "|") Assert.That(collected, Is.EqualTo expected, collected)) finally - Output.info <- ignore + resetInfo() [] let NCoverShouldGeneratePlausibleSummary() = + let resetInfo () = Output.info <- ignore + resetInfo() + Output.info "info" Runner.init() let resource = Assembly.GetExecutingAssembly().GetManifestResourceNames() @@ -2577,10 +2584,13 @@ module AltCoverRunnerTests = "##teamcity[buildStatisticValue key='CodeCoverageAbsCTotal' value='1']|##teamcity[buildStatisticValue key='CodeCoverageAbsCCovered' value='1']|##teamcity[buildStatisticValue key='CodeCoverageAbsMTotal' value='1']|##teamcity[buildStatisticValue key='CodeCoverageAbsMCovered' value='1']|##teamcity[buildStatisticValue key='CodeCoverageAbsSTotal' value='10']|##teamcity[buildStatisticValue key='CodeCoverageAbsSCovered' value='8']|") )) finally - Output.info <- ignore + resetInfo() [] let EmptyOpenCoverGeneratesExpectedSummary() = + let resetInfo () = Output.info <- ignore + resetInfo() + Output.info "info" Runner.init() let report = XDocument.Load(new System.IO.StringReader(""" @@ -2600,10 +2610,13 @@ module AltCoverRunnerTests = + "==== Alternative Results (includes all methods including those without corresponding source) ====|" + "Alternative Visited Classes 0 of 0 (n/a)|Alternative Visited Methods 0 of 0 (n/a)|"))) finally - Output.info <- ignore + resetInfo() [] let EmptyOpenCoverGeneratesExpectedTCSummary() = + let resetInfo () = Output.info <- ignore + resetInfo() + Output.info "info" Runner.init() let report = XDocument.Load(new System.IO.StringReader(""" @@ -2627,10 +2640,13 @@ module AltCoverRunnerTests = "##teamcity[buildStatisticValue key='CodeCoverageAbsBTotal' value='0']|" + "##teamcity[buildStatisticValue key='CodeCoverageAbsBCovered' value='0']|"))) finally - Output.info <- ignore + resetInfo() [] let EmptyOpenCoverGeneratesExpectedSummaries() = + let resetInfo () = Output.info <- ignore + resetInfo() + Output.info "info" Runner.init() let report = XDocument.Load(new System.IO.StringReader(""" @@ -2658,10 +2674,13 @@ module AltCoverRunnerTests = "##teamcity[buildStatisticValue key='CodeCoverageAbsRTotal' value='0']|" + "##teamcity[buildStatisticValue key='CodeCoverageAbsRCovered' value='0']|"))) finally - Output.info <- ignore + resetInfo() [] let OpenCoverShouldGeneratePlausibleSummary() = + let resetInfo () = Output.info <- ignore + resetInfo() + Output.info "info" Runner.init() let resource = Assembly.GetExecutingAssembly().GetManifestResourceNames() @@ -2722,7 +2741,7 @@ module AltCoverRunnerTests = + "##teamcity[buildStatisticValue key='CodeCoverageAbsBTotal' value='3']|##teamcity[buildStatisticValue key='CodeCoverageAbsBCovered' value='2']|") )) finally - Output.info <- ignore) + resetInfo()) [] let OpenCoverShouldGeneratePlausibleLcov() = @@ -2882,11 +2901,7 @@ module AltCoverRunnerTests = use stream = Assembly.GetExecutingAssembly() -#if LEGACY - .GetManifestResourceStream("coverage-04.xsd") -#else - .GetManifestResourceStream("altcover.tests.core.coverage-04.xsd") -#endif + .GetManifestResourceStream("AltCover.Tests.coverage-04.xsd") use reader = new StreamReader(stream) use xreader = XmlReader.Create(reader) schemas.Add(String.Empty, xreader) |> ignore diff --git a/Tests/Sample21.coverage.netcoreapp3.0.xml b/Tests/Sample21.coverage.netcoreapp3.0.xml new file mode 100644 index 000000000..9df421e7a --- /dev/null +++ b/Tests/Sample21.coverage.netcoreapp3.0.xml @@ -0,0 +1,175 @@ + + + + + + + C:\Users\steve\Documents\GitHub\altcover\Sample21\bin\Debug\netcoreapp3.0\__Saved\Sample21.dll + 2020-07-18T14:22:40.3674073Z + Sample21 + + + + + + + + AutoGeneratedProgram + + + + 100663297 + System.Void AutoGeneratedProgram::Main(System.String[]) + + + + + + + + + + + 100663298 + System.Void AutoGeneratedProgram::.ctor() + + + + + + + + + Sample21.Tests + + + + 100663299 + System.Void Sample21.Tests::Setup() + + + + + + + + + + + 100663300 + System.Void Sample21.Tests::Test1() + + + + + + + + + + + + + + + + + 100663301 + System.Void Sample21.Tests::.ctor() + + + + + + + + + Sample21.Traditional + + + + 100663303 + System.String Sample21.Traditional::DoSomething() + + + + + + + + + + + + 100663304 + System.Void Sample21.Traditional::.ctor() + + + + + + + + + Sample21.IModern + + + + 100663305 + System.String Sample21.IModern::DoSomething() + + + + + + + + + + + + + + Sample21.Modern1 + + + + 100663306 + System.Void Sample21.Modern1::.ctor() + + + + + + + + + Sample21.Modern2 + + + + 100663307 + System.String Sample21.Modern2::DoSomething() + + + + + + + + + + + + 100663308 + System.Void Sample21.Modern2::.ctor() + + + + + + + + + + \ No newline at end of file diff --git a/Tests/TestCommon.fs b/Tests/TestCommon.fs new file mode 100644 index 000000000..a652f29cd --- /dev/null +++ b/Tests/TestCommon.fs @@ -0,0 +1,157 @@ +namespace Tests + +open System +open System.IO +open System.Reflection + +#if NETCOREAPP3_0 +open AltCover +open Expecto +open Mono.Cecil +open Mono.Cecil.Cil +open Mono.Cecil.Rocks +#endif + +type Assert = NUnit.Framework.Assert +type Does = NUnit.Framework.Does +type Is = NUnit.Framework.Is + +#if NETCOREAPP3_0 +[] +type TestAttribute() = class + inherit Attribute() +end +#else +type TestAttribute = NUnit.Framework.TestAttribute +#endif + +[] +module TestCommon = + let SolutionDir() = + AltCover.SolutionRoot.location + + let maybeIOException f = + try + f() + with + | :? System.UnauthorizedAccessException + | :? IOException -> () + + let maybeDeleteFile f = + if File.Exists f + then File.Delete f + + let maybeReraise f g = + try + f() + with _ -> + g() + reraise() + + let maybe a b c = + if a + then b + else c + + let test x = Swensen.Unquote.Assertions.test x + + let test' x message = + try + test x + with + | fail -> Swensen.Unquote.AssertionFailedException(message + Environment.NewLine + fail.Message, fail) |> raise + +module TestCommonTests = + [] + let ExerciseItAll() = + let where = Assembly.GetExecutingAssembly().Location |> Path.GetDirectoryName + let unique = Path.Combine(Path.Combine(where, Guid.NewGuid().ToString()), "nonesuch.txt") + let realDir = Path.Combine(where, Guid.NewGuid().ToString()) + realDir + |> Directory.CreateDirectory + |> ignore + let another = Path.Combine(realDir, "another.txt") + do use _dummy = File.Create another + () + maybeDeleteFile another + maybeDeleteFile unique + maybeIOException (fun () -> + maybeReraise (fun () -> File.Delete unique) ignore + ) + maybeIOException (fun () -> + maybeReraise (fun () -> IOException() |> raise) ignore + ) + maybeIOException (fun () -> System.UnauthorizedAccessException() |> raise ) + + test <@ (maybe true 1 2) = 1 @> + test <@ (maybe false 1 2) = 2 @> + test <@ SolutionDir() |> String.IsNullOrEmpty |> not @> + test <@ SolutionDir() = AltCover.SolutionRoot.location @> + test <@ where.StartsWith(AltCover.SolutionRoot.location, StringComparison.Ordinal) @> + + [] + let SelfTest() = + test <@ true @> +#if NETCOREAPP3_0 + Assert.Throws( +#else +#if (ValidateGendarmeEmulation || GUI) + Assert.Throws( +#else + Assert.Throws( +#endif +#endif + fun () -> test <@ false @> ) |> ignore + Assert.Throws( + fun () -> test' <@ false @> "junk") |> ignore + +#if NETCOREAPP3_0 +module ExpectoTestCommon = + let sync = System.Object() + + let consistencyCheck (regular:((unit -> unit)*string) list) expected = + let here = System.Reflection.Assembly.GetExecutingAssembly().Location + let def = Mono.Cecil.AssemblyDefinition.ReadAssembly(here) + + let testMethods = def.MainModule.GetTypes() + |> Seq.collect (fun t -> t.Methods) + |> Seq.filter (fun m -> m.CustomAttributes.IsNotNull) + |> Seq.filter (fun m -> m.CustomAttributes |> Seq.exists (fun a -> a.AttributeType.Name = "TestAttribute")) + |> Seq.map (fun m -> m.DeclaringType.FullName + "::" + m.Name) + + let lookup = def.MainModule.GetAllTypes() + |> Seq.filter (fun t -> t.Methods |> Seq.exists(fun m -> m.Name = "Invoke")) + |> Seq.map (fun t -> (t.FullName.Replace("/","+"), t.Methods |> Seq.find(fun m -> m.Name = "Invoke"))) + |> Map.ofSeq + + let calls = regular + |> List.map (fst + >> (fun f -> f.GetType().FullName.Replace("/","+")) + >> (fun f -> Map.find f lookup) + >> (fun f -> f.Body.Instructions + // Where the test assembly is itself instrumented + // we have to allow for calls to AltCover.Recorder.Instance::Visit + // or the coverlet equivalent + // having been injected into the local function reference + + |> Seq.find (fun i -> i.OpCode = OpCodes.Call + && i.Operand.GetType().Name.Equals("MethodDefinition", StringComparison.Ordinal)) + ) + >> (fun i -> let m = (i.Operand :?> MethodDefinition) + m.DeclaringType.FullName + "::" + m.Name)) + |> Set.ofList + + let omitted = testMethods + |> Seq.filter (fun t -> (Set.contains t calls) |> not) + |> Seq.toList + + // cover all but the special cases + TestCommon.test <@ omitted = expected @> + + let makeTests name (check:unit -> unit) (regular:((unit -> unit)*string) list) specials pretest = + testList name + <| (((check, "ConsistencyCheck") :: regular + |> List.map (fun (f,name) -> testCase name (fun () -> lock sync (fun () -> + pretest() + f())))) @ specials) +#endif \ No newline at end of file diff --git a/Tests/Tests.fs b/Tests/Tests.fs index 43a4ce871..3eb922143 100644 --- a/Tests/Tests.fs +++ b/Tests/Tests.fs @@ -13,7 +13,8 @@ open Mono.Cecil open Mono.Cecil.Cil open Mono.Cecil.Rocks open N -open Swensen.Unquote + +#nowarn "25" [] type ProxyObject() = @@ -34,16 +35,12 @@ type ProxyObject() = #endif let t = assembly.ExportedTypes |> Seq.filter (fun t -> t.FullName = typeName) this.Type <- Seq.tryHead t - match this.Type with - | None -> () - | Some t -> this.Object <- Activator.CreateInstance(t, args) + this.Object <- Activator.CreateInstance(this.Type |> Option.get, args) member this.InvokeMethod(methodName : string, args : obj []) = - match this.Type with - | None -> null - | Some t -> - let methodinfo = t.GetMethod(methodName) - methodinfo.Invoke(this.Object, args) + let t = this.Type |> Option.get + let methodinfo = t.GetMethod(methodName) + methodinfo.Invoke(this.Object, args) [] module Extensions = @@ -55,8 +52,12 @@ module Extensions = else i |> sbyte |> Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue module AltCoverTests = - let SolutionDir() = - SolutionRoot.location + +#if NETCOREAPP2_0 + let dir = Path.Combine(SolutionDir(), "_Binaries/AltCover.Tests/Debug+AnyCPU/netcoreapp3.0") +#else + let dir = Path.Combine(SolutionDir(), "_Binaries/AltCover.Tests/Debug+AnyCPU/net472") +#endif let monoSample1path = Path.Combine(SolutionDir(), "_Mono/Sample1/Sample1.exe") #if NETCOREAPP2_0 @@ -65,7 +66,7 @@ module AltCoverTests = let sample8path = Path.Combine(SolutionDir(), "_Binaries/Sample8/Debug+AnyCPU/netcoreapp2.0/Sample8.dll") #else let sample1path = Path.Combine(SolutionDir(), "_Binaries/Sample1/Debug+AnyCPU/net20/Sample1.exe") - let sample4path = Path.Combine(SolutionDir(), "_Binaries/Sample4/Debug+AnyCPU/net47/Sample4.dll") + let sample4path = Path.Combine(SolutionDir(), "_Binaries/Sample4/Debug+AnyCPU/net472/Sample4.dll") let sample8path = Path.Combine(SolutionDir(), "_Binaries/Sample8/Debug+AnyCPU/net20/Sample8.exe") #endif let recorderSnk = typeof.Assembly.GetManifestResourceNames() @@ -77,18 +78,6 @@ module AltCoverTests = let private FF(a,b,c) = { Scope = a; Regex = b; Sense = c } - // Hack for running while instrumented - let Hack() = - let where = Assembly.GetExecutingAssembly().Location - - let dir = - where - |> Path.GetDirectoryName - |> Path.GetFileName - match dir.IndexOf "__" with - | 0 -> "/.." - | _ -> String.Empty - // Augment.fs [] let ZeroIsNotVisited() = @@ -109,123 +98,120 @@ module AltCoverTests = // ProgramDatabase.fs [] let ShouldGetPdbFromImage() = - let where = Assembly.GetExecutingAssembly().Location - let pdb = Path.ChangeExtension(where, ".pdb") - if File.Exists(pdb) then - // Hack for running while instrumented - let files = - Directory.GetFiles(Path.GetDirectoryName(where) + Hack()) - |> Seq.filter - (fun x -> - x.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) - || x.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) - |> Seq.filter (fun f -> f |> Path.GetFileNameWithoutExtension <> "testhost") - |> Seq.filter (fun f -> f |> Path.GetFileName <> "AltCover.Tests.exe") - |> Seq.filter (fun f -> f |> Path.GetFileName <> "CompilerAttributes.dll") - |> Seq.map (fun x -> (x, Mono.Cecil.AssemblyDefinition.ReadAssembly x)) - |> Seq.filter (fun x -> - (fst x) + ".mdb" - |> File.Exists - |> not) - |> Seq.filter - (fun x -> - not - <| (snd x).FullName.StartsWith("altcode.", StringComparison.OrdinalIgnoreCase)) + let files = + Directory.GetFiles(dir) + |> Seq.filter + (fun x -> + x.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) + || x.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter (fun f -> f |> Path.GetFileNameWithoutExtension <> "testhost") + |> Seq.filter (fun f -> f |> Path.GetFileName <> "AltCover.Tests.exe") + |> Seq.filter (fun f -> f |> Path.GetFileName <> "CompilerAttributes.dll") + |> Seq.map (fun x -> (x, Mono.Cecil.AssemblyDefinition.ReadAssembly x)) + |> Seq.filter (fun x -> + (fst x) + ".mdb" + |> File.Exists + |> not) + |> Seq.filter + (fun x -> + not + <| (snd x).FullName.StartsWith("altcode.", StringComparison.OrdinalIgnoreCase)) #if NETCOREAPP2_0 - |> Seq.filter - (fun x -> - not - <| (snd x).FullName.StartsWith("Expecto", StringComparison.OrdinalIgnoreCase)) - |> Seq.filter - (fun x -> - not - <| (snd x).FullName.StartsWith("Mono.", StringComparison.OrdinalIgnoreCase)) - |> Seq.filter - (fun x -> - not - <| (snd x).FullName.StartsWith("BlackFox.", StringComparison.OrdinalIgnoreCase)) - |> Seq.filter - (fun x -> - not - <| (snd x).FullName.StartsWith("Microsoft.", StringComparison.OrdinalIgnoreCase)) - |> Seq.filter - (fun x -> - not - <| (snd x).FullName.StartsWith("Manatee.", StringComparison.OrdinalIgnoreCase)) - |> Seq.filter - (fun x -> - not - <| (snd x).FullName.StartsWith("Newtonsoft.", StringComparison.OrdinalIgnoreCase)) - |> Seq.filter - (fun x -> - not - <| (snd x).FullName.StartsWith("NuGet.", StringComparison.OrdinalIgnoreCase)) - |> Seq.filter - (fun x -> - not - <| (snd x).FullName.StartsWith("nunit", StringComparison.OrdinalIgnoreCase)) - |> Seq.filter - (fun x -> - not - <| (snd x) - .FullName.StartsWith("FSharp.", StringComparison.OrdinalIgnoreCase)) - // for coverlet - |> Seq.filter - (fun x -> - not - <| (snd x) - .FullName.StartsWith("coverlet", StringComparison.OrdinalIgnoreCase)) - |> Seq.filter - (fun x -> - not - <| (snd x) - .FullName.StartsWith("AltCover,", StringComparison.OrdinalIgnoreCase)) - |> Seq.filter - (fun x -> - not - <| (snd x).FullName.StartsWith("System.", StringComparison.OrdinalIgnoreCase)) - |> Seq.filter - (fun x -> - not - <| (snd x).FullName.StartsWith("Unquote", StringComparison.OrdinalIgnoreCase)) - |> Seq.filter - (fun x -> - not - <| (snd x).FullName.StartsWith("xunit", StringComparison.OrdinalIgnoreCase)) - |> Seq.filter - (fun x -> - not - <| (snd x) - .FullName.StartsWith("AltCover.Recorder", - StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not + <| (snd x).FullName.StartsWith("Expecto", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not + <| (snd x).FullName.StartsWith("ICSharp", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not + <| (snd x).FullName.StartsWith("Mono.", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not + <| (snd x).FullName.StartsWith("BlackFox.", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not + <| (snd x).FullName.StartsWith("Microsoft.", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not + <| (snd x).FullName.StartsWith("Manatee.", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not + <| (snd x).FullName.StartsWith("Newtonsoft.", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not + <| (snd x).FullName.StartsWith("NuGet.", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not + <| (snd x).FullName.StartsWith("nunit", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not + <| (snd x) + .FullName.StartsWith("FSharp.", StringComparison.OrdinalIgnoreCase)) + // for coverlet + |> Seq.filter + (fun x -> + not + <| (snd x) + .FullName.StartsWith("coverlet", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not + <| (snd x) + .FullName.StartsWith("AltCover,", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not + <| (snd x).FullName.StartsWith("System.", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not + <| (snd x).FullName.StartsWith("Unquote", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not + <| (snd x).FullName.StartsWith("xunit", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not + <| (snd x) + .FullName.StartsWith("AltCover.Recorder", + StringComparison.OrdinalIgnoreCase)) #else - |> Seq.filter (fun x -> (snd x).FullName.EndsWith("PublicKeyToken=c02b1a9f5b7cade8", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter (fun x -> (snd x).FullName.EndsWith("PublicKeyToken=c02b1a9f5b7cade8", StringComparison.OrdinalIgnoreCase)) #endif - |> Seq.toList - test <@ files <> [] @> - files - |> Seq.iter - (fun x -> - let pdb = AltCover.ProgramDatabase.getPdbFromImage(snd x) - match pdb with - | None -> Assert.Fail("No .pdb for " + (fst x)) - | Some name -> - let probe = Path.ChangeExtension((fst x), ".pdb") - let file = FileInfo(probe) - let filename = file.Name.Replace("\\", "/") - Assert.That - ("/" + name.Replace("\\", "/"), Does.EndWith("/" + filename), - (fst x) + " -> " + name)) -#if MONO -// Mono doesn't embed -#else + |> Seq.toList + test <@ files <> [] @> + files + |> Seq.iter + (fun x -> + let pdb = AltCover.ProgramDatabase.getPdbFromImage(snd x) + match pdb with + | Some name -> + let probe = Path.ChangeExtension((fst x), ".pdb") + let file = FileInfo(probe) + let filename = file.Name.Replace("\\", "/") + Assert.That + ("/" + name.Replace("\\", "/"), Does.EndWith("/" + filename), + (fst x) + " -> " + name)) + +#if !MONO // Mono doesn't embed [] let ShouldGetEmbeddedPdbFromImage() = let target = sample8path let image = Mono.Cecil.AssemblyDefinition.ReadAssembly target let pdb = AltCover.ProgramDatabase.getPdbFromImage image match pdb with - | None -> Assert.Fail("No .pdb for " + target) | Some name -> Assert.That (name, Is.EqualTo "Sample8.pdb", @@ -234,8 +220,6 @@ module AltCoverTests = [] let ShouldGetNoMdbFromMonoImage() = - // Hack for running while instrumented - let where = Assembly.GetExecutingAssembly().Location let path = Path.GetDirectoryName monoSample1path let files = Directory.GetFiles(path) @@ -252,15 +236,11 @@ module AltCoverTests = let probe = (fst x) + ".mdb" let pdb = AltCover.ProgramDatabase.getPdbFromImage(snd x) match pdb with - | None -> Assert.That(File.Exists probe, probe + " not found") - | Some name -> Assert.Fail("Suddenly, an .mdb for " + (fst x))) + | None -> Assert.That(File.Exists probe, probe + " not found")) [] let ShouldGetPdbWithFallback() = - // Hack for running while instrumented - let where = Assembly.GetExecutingAssembly().Location - let files = Directory.GetFiles(Path.GetDirectoryName(where) + Hack()) - files + Directory.GetFiles(dir) |> Seq.filter (fun x -> x.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) @@ -290,18 +270,9 @@ module AltCoverTests = [] let ShouldGetForeignPdbWithFallback() = - // Hack for running while instrumented - let where = Assembly.GetExecutingAssembly().Location - let path = Path.Combine(where.Substring(0, where.IndexOf("_Binaries")), "packages") -#if NETCOREAPP2_0 - let path' = - if Directory.Exists path then path - else Path.Combine(where.Substring(0, where.IndexOf("_Binaries")), "../packages") -#else - let path' = path -#endif + let path = Path.Combine(SolutionDir(), "packages") // Looking for the Mono.Options symbols - let files = Directory.GetFiles(path', "*.pdb", SearchOption.AllDirectories) + let files = Directory.GetFiles(path, "*.pdb", SearchOption.AllDirectories) files |> Seq.filter (fun p -> Path.ChangeExtension(p, ".dll") |> File.Exists) |> Seq.iter (fun p -> @@ -311,26 +282,17 @@ module AltCoverTests = let pdb = AltCover.ProgramDatabase.getPdbWithFallback(def) let normalized = Path.Combine(Path.GetDirectoryName p, Path.GetFileName p) match pdb with - | None -> Assert.Fail("Not found " + p) | Some name -> Assert.That(name, Is.EqualTo normalized) with :? BadImageFormatException -> ()) [] let ShouldGetForeignPdbWithFallbackWhenNotColocated() = try - // Hack for running while instrumented let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(where.Substring(0, where.IndexOf("_Binaries")), "packages") -#if NETCOREAPP2_0 - let path' = - if Directory.Exists path then path - else Path.Combine(where.Substring(0, where.IndexOf("_Binaries")), "../packages") -#else - let path' = path -#endif + Path.Combine(SolutionDir(), "packages") // Looking for the Mono.Options symbols - let files = Directory.GetFiles(path', "*.pdb", SearchOption.AllDirectories) + let files = Directory.GetFiles(path, "*.pdb", SearchOption.AllDirectories) files |> Seq.filter (fun p -> Path.ChangeExtension(p, ".dll") |> File.Exists) |> Seq.iter (fun p -> @@ -349,7 +311,6 @@ module AltCoverTests = let pdb = AltCover.ProgramDatabase.getPdbWithFallback(def) let normalized = Path.Combine(Path.GetDirectoryName p, Path.GetFileName p) match pdb with - | None -> Assert.Fail("Not found " + p) | Some name -> Assert.That(name, Is.EqualTo normalized) AltCover.ProgramDatabase.readSymbols def @@ -360,8 +321,6 @@ module AltCoverTests = [] let ShouldGetMdbWithFallback() = - // Hack for running while instrumented - let where = Assembly.GetExecutingAssembly().Location let path = Path.GetDirectoryName monoSample1path let files = Directory.GetFiles(path) files @@ -374,7 +333,7 @@ module AltCoverTests = let def = Mono.Cecil.AssemblyDefinition.ReadAssembly x let mdb = AltCover.ProgramDatabase.getPdbWithFallback(def) match mdb with - | None -> Assert.That(File.Exists(x + ".mdb"), Is.Not.True, "No .mdb for " + x) +// | None -> Assert.That(File.Exists(x + ".mdb"), Is.Not.True, "No .mdb for " + x) | Some name -> let probe = x + ".mdb" let file = FileInfo(probe) @@ -385,46 +344,36 @@ module AltCoverTests = [] let ShouldGetSymbolsFromPdb() = - let where = Assembly.GetExecutingAssembly().Location - let pdb = Path.ChangeExtension(where, ".pdb") - if File.Exists(pdb) then - // Hack for running while instrumented - let files = - Directory.GetFiles(Path.GetDirectoryName(where) + Hack()) - files - |> Seq.filter - (fun x -> - x.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) - || x.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) - |> Seq.filter (fun f -> f |> Path.GetFileNameWithoutExtension <> "testhost") - |> Seq.filter (fun f -> f |> Path.GetFileName <> "AltCover.Tests.exe") - |> Seq.map Mono.Cecil.AssemblyDefinition.ReadAssembly - |> Seq.filter - (fun x -> - not - <| x.FullName.StartsWith("altcode.", StringComparison.OrdinalIgnoreCase)) -#if COVERLET - |> Seq.filter - (fun x -> - not <| x.FullName.StartsWith("AltCover,", StringComparison.OrdinalIgnoreCase)) - |> Seq.filter - (fun x -> - not - <| x.FullName.StartsWith - ("AltCover.Recorder", StringComparison.OrdinalIgnoreCase)) -#endif - |> Seq.filter - (fun x -> - x.FullName.EndsWith - ("PublicKeyToken=c02b1a9f5b7cade8", StringComparison.OrdinalIgnoreCase)) - |> Seq.iter (fun def -> - AltCover.ProgramDatabase.readSymbols def - Assert.That(def.MainModule.HasSymbols, def.MainModule.FileName)) + Directory.GetFiles(dir) + |> Seq.filter + (fun x -> + x.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) + || x.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter (fun f -> f |> Path.GetFileNameWithoutExtension <> "testhost") + |> Seq.filter (fun f -> f |> Path.GetFileName <> "AltCover.Tests.exe") + |> Seq.map Mono.Cecil.AssemblyDefinition.ReadAssembly + |> Seq.filter + (fun x -> + not + <| x.FullName.StartsWith("altcode.", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not <| x.FullName.StartsWith("AltCover,", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + not + <| x.FullName.StartsWith + ("AltCover.Recorder", StringComparison.OrdinalIgnoreCase)) + |> Seq.filter + (fun x -> + x.FullName.EndsWith + ("PublicKeyToken=c02b1a9f5b7cade8", StringComparison.OrdinalIgnoreCase)) + |> Seq.iter (fun def -> + AltCover.ProgramDatabase.readSymbols def + Assert.That(def.MainModule.HasSymbols, def.MainModule.FileName)) [] let ShouldGetSymbolsFromEmbeddedPdb() = - let where = Assembly.GetExecutingAssembly().Location - let here = where |> Path.GetDirectoryName let target = sample8path let image = Mono.Cecil.AssemblyDefinition.ReadAssembly target AltCover.ProgramDatabase.readSymbols image @@ -432,10 +381,7 @@ module AltCoverTests = [] let ShouldNotGetSymbolsWhenNoPdb() = - // Hack for running while instrumented - let where = Assembly.GetExecutingAssembly().Location - let files = Directory.GetFiles(Path.GetDirectoryName(where) + Hack()) - files + Directory.GetFiles(dir) |> Seq.filter (fun x -> x.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) @@ -669,8 +615,7 @@ module AltCoverTests = [] let Sample3Class1IsCSharpAutoproperty() = let sample3 = - Path.Combine - (Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Sample3.dll") + Path.Combine(dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly(sample3) def.MainModule.Types |> Seq.filter (fun t -> t.Name = "Class1") @@ -682,7 +627,7 @@ module AltCoverTests = let Sample3Class2IsNotCSharpAutoproperty() = let sample3 = Path.Combine - (Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Sample3.dll") + (dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly(sample3) def.MainModule.Types |> Seq.filter (fun t -> t.Name = "Class2") @@ -716,8 +661,8 @@ module AltCoverTests = let indirect3 = indirect2 |> Seq.filter (fun t -> t.HasNestedTypes) - |> Seq.collect (fun t -> t.NestedTypes) - |> Seq.map (fun t -> t.FullName) + // |> Seq.collect (fun t -> t.NestedTypes) + // |> Seq.map (fun t -> t.FullName) |> Seq.toList Assert.That @@ -823,9 +768,8 @@ module AltCoverTests = let ValidateAutomaticExemption() = try CoverageParameters.showGenerated := true - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + Hack(), "Sample4.dll") + Path.Combine(dir, "Sample4.dll") use def = Mono.Cecil.AssemblyDefinition.ReadAssembly path let items = def.MainModule.GetAllTypes() @@ -849,7 +793,7 @@ module AltCoverTests = let toolPackages = let xml = - Path.Combine(SolutionRoot.location, "./Build/dotnet-cli.csproj") + Path.Combine(SolutionDir(), "./Build/NuGet.csproj") |> Path.GetFullPath |> XDocument.Load xml.Descendants(XName.Get("PackageReference")) @@ -860,7 +804,7 @@ module AltCoverTests = let libPackages = let xml = - Path.Combine(SolutionRoot.location, "./MCS/packages.config") + Path.Combine(SolutionDir(), "./MCS/packages.config") |> Path.GetFullPath |> XDocument.Load xml.Descendants(XName.Get("package")) @@ -871,11 +815,11 @@ module AltCoverTests = CoverageParameters.local := false CoverageParameters.nameFilters.Clear() - let fscore = Path.Combine(SolutionRoot.location, "packages/FSharp.Core.4.5.2/lib/net45") // stable retro version - let mono = Path.Combine(SolutionRoot.location, "packages/Mono.Cecil." + + let fscore = Path.Combine(SolutionDir(), "packages/FSharp.Core.4.5.2/lib/net45") // stable retro version + let mono = Path.Combine(SolutionDir(), "packages/Mono.Cecil." + (libPackages.Item "mono.cecil") + "/lib/net40") - let nuget = Path.Combine(SolutionRoot.location, "packages/nuget.commandline/" + + let nuget = Path.Combine(SolutionDir(), "packages/nuget.commandline/" + (toolPackages.Item "nuget.commandline") + "/tools") let exe = Path.Combine(nuget, "NuGet.exe") @@ -933,6 +877,46 @@ module AltCoverTests = let find = Visitor.I.findClosestMatch file dict Assert.That(find, Is.EqualTo (Some (pp1, String.Empty))) + [] + let DebugBuildTernaryTestInContext() = + let sample23 = + Path.Combine(dir, "Sample23.dll") + let def = Mono.Cecil.AssemblyDefinition.ReadAssembly(sample23) + let symbols23 = Path.ChangeExtension(sample23, ".pdb") + + let r = Mono.Cecil.Pdb.PdbReaderProvider() + use rr = r.GetSymbolReader(def.MainModule, symbols23) + def.MainModule.ReadSymbols(rr) + + let method = + (def.MainModule.GetAllTypes() + |> Seq.filter (fun t -> t.Name = "Strings") + |> Seq.head).Methods + |> Seq.filter (fun m -> m.Name = "BRB") + |> Seq.head + Visitor.visit [] [] // cheat reset + try + CoverageParameters.theReportFormat <- Some ReportFormat.OpenCover + CoverageParameters.nameFilters.Clear() + let deeper = + Visitor.I.deeper <| Node.Method(method, Inspections.Instrument, None, Exemption.None) |> Seq.toList + Assert.That(deeper.Length, Is.EqualTo 3) + deeper + |> List.skip 1 + |> List.iteri (fun i node -> + match node with + | (BranchPoint b) -> Assert.That(b.Uid, Is.EqualTo i, "branch point number")) + deeper + |> List.take 1 + |> List.iteri (fun i node -> + match node with + | (MethodPoint(_, _, n, b, Exemption.None)) -> + Assert.That(n, Is.EqualTo i, "point number") + Assert.That(b, Is.True, "flag " + i.ToString())) + finally + CoverageParameters.nameFilters.Clear() + CoverageParameters.theReportFormat <- None + [] let ReleaseBuildTernaryTest() = let nop = Instruction.Create(OpCodes.Nop) @@ -941,18 +925,18 @@ module AltCoverTests = // transparent Assert.That(Visitor.I.fakeSequencePoint Genuine seq nop, Is.SameAs seq) - Assert.That(Visitor.I.fakeSequencePoint FakeAfterReturn seq nop, Is.SameAs seq) + Assert.That(Visitor.I.fakeSequencePoint FakeAtReturn seq nop, Is.SameAs seq) Assert.That(Visitor.I.fakeSequencePoint Genuine null null, Is.Null) - Assert.That(Visitor.I.fakeSequencePoint FakeAfterReturn null null, Is.Null) + Assert.That(Visitor.I.fakeSequencePoint FakeAtReturn null null, Is.Null) Assert.That(Visitor.I.fakeSequencePoint Genuine null nop, Is.Null) - Assert.That(Visitor.I.fakeSequencePoint FakeAfterReturn null nop, Is.Null) + Assert.That(Visitor.I.fakeSequencePoint FakeAtReturn null nop, Is.Null) Assert.That(Visitor.I.fakeSequencePoint Genuine null ret, Is.Null) // One fake-out - Assert.That(Visitor.I.fakeSequencePoint FakeAfterReturn null ret, Is.Not.Null) + Assert.That(Visitor.I.fakeSequencePoint FakeAtReturn null ret, Is.Not.Null) [] let ReleaseBuildTernaryTestInContext() = @@ -990,16 +974,14 @@ module AltCoverTests = |> List.skip 1 |> List.iteri (fun i node -> match node with - | (BranchPoint b) -> Assert.That(b.Uid, Is.EqualTo i, "branch point number") - | _ -> Assert.Fail("branch point expected")) + | (BranchPoint b) -> Assert.That(b.Uid, Is.EqualTo i, "branch point number")) deeper |> List.take 1 |> List.iteri (fun i node -> match node with | (MethodPoint(_, _, n, b, Exemption.None)) -> Assert.That(n, Is.EqualTo i, "point number") - Assert.That(b, Is.True, "flag " + i.ToString()) - | _ -> Assert.Fail("sequence point expected")) + Assert.That(b, Is.True, "flag " + i.ToString())) finally CoverageParameters.nameFilters.Clear() CoverageParameters.theReportFormat <- None @@ -1041,16 +1023,14 @@ module AltCoverTests = |> List.skip 1 |> List.iteri (fun i node -> match node with - | (BranchPoint b) -> Assert.That(b.Uid, Is.EqualTo i, "branch point number") - | _ -> Assert.Fail("branch point expected")) + | (BranchPoint b) -> Assert.That(b.Uid, Is.EqualTo i, "branch point number")) deeper |> List.take 1 |> List.iteri (fun i node -> match node with | (MethodPoint(_, _, n, b, Exemption.Automatic)) -> Assert.That(n, Is.EqualTo i, "point number") - Assert.That(b, Is.True, "flag " + i.ToString()) - | _ -> Assert.Fail("sequence point expected")) + Assert.That(b, Is.True, "flag " + i.ToString())) finally CoverageParameters.coalesceBranches := false CoverageParameters.nameFilters.Clear() @@ -1060,7 +1040,7 @@ module AltCoverTests = let CSharpNestedMethods() = let sample3 = Path.Combine - (Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Sample5.dll") + (dir, "Sample5.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly(sample3) let methods = @@ -1185,7 +1165,7 @@ module AltCoverTests = let FSharpNestedMethods() = let sample3 = Path.Combine - (Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Sample6.dll") + (dir, "Sample6.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly(sample3) let methods = @@ -1215,9 +1195,7 @@ module AltCoverTests = Some "FI@11::Specialize" //System.Int32 Sample6.Module/FI@10T::Invoke(Microsoft.FSharp.Collections.FSharpList`1) Some "Module::F1" //System.Void Sample6.Module/F1@18::.ctor() Some "Module::F1" //System.Int32 Sample6.Module/F1@18::Invoke(System.Object) -#if !NETCOREAPP3_0 -//LEGACY -// F# 4.5.1 +// F# version dependent below Some "fetchUrlAsync@25-4::Invoke" //"System.Void Sample6.Module/fetchUrlAsync@27-5::.ctor(System.String,Microsoft.FSharp.Control.FSharpAsyncBuilder)" Some "fetchUrlAsync@25-4::Invoke" //"Microsoft.FSharp.Control.FSharpAsync`1 Sample6.Module/fetchUrlAsync@27-5::Invoke(System.IO.StreamReader)" Some "fetchUrlAsync@23-3::Invoke" //"System.Void Sample6.Module/fetchUrlAsync@26-4::.ctor(System.String,Microsoft.FSharp.Control.FSharpAsyncBuilder)" @@ -1232,21 +1210,7 @@ module AltCoverTests = Some "fetchUrlAsync@21::Invoke" //"Microsoft.FSharp.Control.FSharpAsync`1 Sample6.Module/fetchUrlAsync@23-1::Invoke(Microsoft.FSharp.Core.Unit)" Some "Module::F2" //"System.Void Sample6.Module/fetchUrlAsync@22::.ctor()" Some "Module::F2" //"Microsoft.FSharp.Control.FSharpAsync`1 Sample6.Module/fetchUrlAsync@22::Invoke(System.String)" -#else -// F# > 4.5.1 - Some "fetchUrlAsync@25-4::Invoke" //System.Void Sample6.Module/fetchUrlAsync@26-5::.ctor(System.String,Microsoft.FSharp.Control.FSharpAsyncBuilder) - Some "fetchUrlAsync@25-4::Invoke" //Microsoft.FSharp.Control.FSharpAsync`1 Sample6.Module/fetchUrlAsync@26-5::Invoke(System.IO.StreamReader) - Some "fetchUrlAsync@23-3::Invoke" //System.Void Sample6.Module/fetchUrlAsync@25-4::.ctor(System.String,Microsoft.FSharp.Control.FSharpAsyncBuilder) - Some "fetchUrlAsync@23-3::Invoke" //Microsoft.FSharp.Control.FSharpAsync`1 Sample6.Module/fetchUrlAsync@25-4::Invoke(System.IO.Stream) - Some "fetchUrlAsync@23-2::Invoke" //System.Void Sample6.Module/fetchUrlAsync@23-3::.ctor(System.String,Microsoft.FSharp.Control.FSharpAsyncBuilder) - Some "fetchUrlAsync@23-2::Invoke" //Microsoft.FSharp.Control.FSharpAsync`1 Sample6.Module/fetchUrlAsync@23-3::Invoke(System.Net.WebResponse) - Some "fetchUrlAsync@22-1::Invoke" //System.Void Sample6.Module/fetchUrlAsync@23-2::.ctor(System.String,Microsoft.FSharp.Control.FSharpAsyncBuilder) - Some "fetchUrlAsync@22-1::Invoke" //Microsoft.FSharp.Control.FSharpAsync`1 Sample6.Module/fetchUrlAsync@23-2::Invoke(System.Net.WebResponse) - Some "fetchUrlAsync@21::Invoke" //System.Void Sample6.Module/fetchUrlAsync@22-1::.ctor(System.String,Microsoft.FSharp.Control.FSharpAsyncBuilder) - Some "fetchUrlAsync@21::Invoke" //Microsoft.FSharp.Control.FSharpAsync`1 Sample6.Module/fetchUrlAsync@22-1::Invoke(Microsoft.FSharp.Core.Unit) - Some "Module::F2" //System.Void Sample6.Module/fetchUrlAsync@21::.ctor() - Some "Module::F2" //Microsoft.FSharp.Control.FSharpAsync`1 Sample6.Module/fetchUrlAsync@21::Invoke(System.String) -#endif + ] //methods |> Seq.iter (fun x -> printfn "%A" x.FullName) @@ -1417,7 +1381,7 @@ module AltCoverTests = let Sample3Class1PropertyIsNotSignificant() = let sample3 = Path.Combine - (Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Sample3.dll") + (dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly(sample3) def.MainModule.Types |> Seq.filter (fun t -> t.Name = "Class1") @@ -1429,7 +1393,7 @@ module AltCoverTests = let Sample3Class2IPropertyIsSignificant() = let sample3 = Path.Combine - (Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Sample3.dll") + (dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly(sample3) def.MainModule.Types |> Seq.filter (fun t -> t.Name = "Class2") @@ -1486,25 +1450,22 @@ module AltCoverTests = |> List.skip 10 |> List.iteri (fun i node -> match node with - | (BranchPoint b) -> Assert.That(b.Uid, Is.EqualTo i, "branch point number") - | _ -> Assert.Fail()) + | (BranchPoint b) -> Assert.That(b.Uid, Is.EqualTo i, "branch point number")) deeper |> List.take 10 |> List.iteri (fun i node -> match node with | (MethodPoint(_, _, n, b, Exemption.None)) -> Assert.That(n, Is.EqualTo i, "point number") - Assert.That(b, Is.False, "flag") - | _ -> Assert.Fail()) + Assert.That(b, Is.False, "flag")) finally CoverageParameters.nameFilters.Clear() CoverageParameters.theReportFormat <- None [] let BranchPointsAreComputedForSwitch() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + Hack(), "Sample16.dll") + Path.Combine(dir, "Sample16.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let method = @@ -1538,9 +1499,7 @@ module AltCoverTests = |> List.mapi (fun i node -> match node with | (BranchPoint b) -> Assert.That(b.Uid, Is.EqualTo i, "branch point number") - Some b - | _ -> Assert.Fail("branch point expected") - None) + Some b) |> List.choose id deeper |> List.take 21 @@ -1548,8 +1507,7 @@ module AltCoverTests = match node with | (MethodPoint(_, _, n, b, Exemption.Declared)) -> Assert.That(n, Is.EqualTo i, "point number") - Assert.That(b, Is.True, "flag " + i.ToString()) - | _ -> Assert.Fail("sequence point expected")) + Assert.That(b, Is.True, "flag " + i.ToString())) Assert.That ( branches @@ -1563,9 +1521,8 @@ module AltCoverTests = [] let BranchPointsAreComputedForMatch() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + Hack(), "Sample17.dll") + Path.Combine(dir, "Sample17.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let method = @@ -1593,16 +1550,14 @@ module AltCoverTests = |> List.skip 9 |> List.iteri (fun i node -> match node with - | (BranchPoint b) -> Assert.That(b.Uid, Is.EqualTo i, "branch point number") - | _ -> Assert.Fail("branch point expected")) + | (BranchPoint b) -> Assert.That(b.Uid, Is.EqualTo i, "branch point number")) deeper |> List.take 9 |> List.iteri (fun i node -> match node with | (MethodPoint(_, _, n, b, Exemption.StaticAnalysis)) -> Assert.That(n, Is.EqualTo i, "point number") - Assert.That(b, Is.True, "flag " + i.ToString()) - | _ -> Assert.Fail("sequence point expected")) + Assert.That(b, Is.True, "flag " + i.ToString())) finally CoverageParameters.coalesceBranches := false CoverageParameters.nameFilters.Clear() @@ -1669,8 +1624,7 @@ module AltCoverTests = |> Seq.filter Visitor.I.stripInterfaces |> Seq.map (fun t -> let flag = - if t.Name <> "Program" then Inspections.Instrument - else Inspections.Ignore + maybe (t.Name <> "Program") Inspections.Instrument Inspections.Ignore let node = Node.Type(t, flag, Exemption.None) List.concat [ [ node ] @@ -1721,9 +1675,6 @@ module AltCoverTests = let def = match Seq.head deeper with | Node.Assembly(def', Inspections.Instrument, []) -> def' - | _ -> - Assert.Fail() - null let assembly = Node.Assembly(def, Inspections.Instrument, []) @@ -1760,9 +1711,6 @@ module AltCoverTests = let def = match Seq.head deeper with | Node.Assembly(def', Inspections.Ignore, []) -> def' - | _ -> - Assert.Fail() - null let assembly = Node.Assembly(def, Inspections.Ignore, []) @@ -1831,9 +1779,6 @@ module AltCoverTests = let def = match accumulator.[1] with | Node.Assembly(def', Inspections.Instrument, ux) -> def' - | _ -> - Assert.Fail() - null let assembly = Node.Assembly(def, Inspections.Instrument, ux) @@ -1850,9 +1795,8 @@ module AltCoverTests = [] let TrackingDetectsTests() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + Hack(), "Sample2.dll") + Path.Combine(dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def try @@ -1874,9 +1818,8 @@ module AltCoverTests = [] let TrackingDetectsExpectedTests() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + Hack(), "Sample2.dll") + Path.Combine(dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def try @@ -1901,7 +1844,7 @@ module AltCoverTests = let TrackingDetectsTestsByFullType() = let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + Hack(), "Sample2.dll") + Path.Combine(dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def try @@ -1926,7 +1869,7 @@ module AltCoverTests = let TrackingDetectsMethods() = let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + Hack(), "Sample2.dll") + Path.Combine(dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def try @@ -1968,7 +1911,7 @@ module AltCoverTests = let TypeNamesAreExtracted() = let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + Hack(), "Sample3.dll") + Path.Combine(dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path let names = @@ -1983,7 +1926,7 @@ module AltCoverTests = let FullTypeNamesAreExtracted() = let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + Hack(), "Sample3.dll") + Path.Combine(dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path let names = @@ -2000,7 +1943,7 @@ module AltCoverTests = let TypeRefNamesAreExtracted() = let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + Hack(), "Sample3.dll") + Path.Combine(dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path let names = @@ -2018,7 +1961,7 @@ module AltCoverTests = let FullTypeRefNamesAreExtracted() = let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + Hack(), "Sample3.dll") + Path.Combine(dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path let names = @@ -2041,7 +1984,7 @@ module AltCoverTests = let MethodNamesAreExtracted() = let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + Hack(), "Sample3.dll") + Path.Combine(dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path let names = @@ -2063,7 +2006,7 @@ module AltCoverTests = let FullMethodNamesAreExtracted() = let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + Hack(), "Sample3.dll") + Path.Combine(dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path let names = @@ -2144,8 +2087,7 @@ module AltCoverTests = a1.Name.ToString() + " : " + r.ToString() + " -> document") | "visitcount" -> let expected = - if zero then "0" - else a2.Value + maybe zero "0" a2.Value Assert.That (a1.Value, Is.EqualTo(expected), r.ToString() + " -> visitcount") | _ -> @@ -2196,8 +2138,8 @@ module AltCoverTests = [] let ShouldGenerateExpectedXmlReportForNCoverWithTopLevel() = let path = sample4path - let path5 = sample4path.Replace("4", "5").Replace("57", "461").Replace("netcoreapp2.1", "netstandard2.0") - let path6 = sample4path.Replace("4", "6").Replace("67", "461").Replace("2.1", "2.0") + let path5 = sample4path.Replace("4", "5").Replace("572", "472").Replace("netcoreapp2.1", "netstandard2.0") + let path6 = sample4path.Replace("4", "6").Replace("672", "472").Replace("2.1", "2.0") try Main.init() @@ -2205,15 +2147,15 @@ module AltCoverTests = Visitor.visit [ visitor1 ] (Visitor.I.toSeq (path, [])) let names1 = document1.Descendants(XName.Get "method") |> Seq.filter (fun mx -> mx.Attribute(XName.Get "excluded").Value = "true") - |> Seq.map (fun mx -> mx.Attribute(XName.Get "name").Value) - |> Seq.filter (fun n -> n <> "Main") - |> Seq.sortBy (fun n -> BitConverter.ToInt32( - n.ToCharArray() - |> Seq.take 4 - |> Seq.rev - |> Seq.map byte - |> Seq.toArray, - 0)) + // |> Seq.map (fun mx -> mx.Attribute(XName.Get "name").Value) + // |> Seq.filter (fun n -> n <> "Main") + // |> Seq.sortBy (fun n -> BitConverter.ToInt32( + // n.ToCharArray() + // |> Seq.take 4 + // |> Seq.rev + // |> Seq.map byte + // |> Seq.toArray, + // 0)) |> Seq.toList test <@ List.isEmpty names1 @> @@ -2303,16 +2245,16 @@ module AltCoverTests = Visitor.visit [ visitor6 ] (Visitor.I.toSeq (path6, [])) let names6 = document6.Descendants(XName.Get "method") |> Seq.filter (fun mx -> mx.Attribute(XName.Get "excluded").Value = "false") - |> Seq.map (fun mx -> (mx.Attribute(XName.Get "name").Value + " ", - mx.Attribute(XName.Get "class").Value)) - |> Seq.sortBy (fun (n, _) -> BitConverter.ToInt32( - n.ToCharArray() - |> Seq.take 4 - |> Seq.rev - |> Seq.map byte - |> Seq.toArray, - 0)) - |> Seq.map (fun (n,c) -> c + "." + n.Trim()) + // |> Seq.map (fun mx -> (mx.Attribute(XName.Get "name").Value + " ", + // mx.Attribute(XName.Get "class").Value)) + // |> Seq.sortBy (fun (n, _) -> BitConverter.ToInt32( + // n.ToCharArray() + // |> Seq.take 4 + // |> Seq.rev + // |> Seq.map byte + // |> Seq.toArray, + // 0)) + // |> Seq.map (fun (n,c) -> c + "." + n.Trim()) |> Seq.toList test <@ names6 |> List.isEmpty @> @@ -2361,16 +2303,16 @@ module AltCoverTests = Visitor.visit [ visitor8 ] (Visitor.I.toSeq (path5, [])) let names8 = document8.Descendants(XName.Get "method") |> Seq.filter (fun mx -> mx.Attribute(XName.Get "excluded").Value = "false") - |> Seq.map (fun mx -> (mx.Attribute(XName.Get "name").Value + " ", - mx.Attribute(XName.Get "class").Value)) - |> Seq.sortBy (fun (n, _) -> BitConverter.ToInt32( - n.ToCharArray() - |> Seq.take 4 - |> Seq.rev - |> Seq.map byte - |> Seq.toArray, - 0)) - |> Seq.map (fun (n,c) -> c + "." + n.Trim()) + // |> Seq.map (fun mx -> (mx.Attribute(XName.Get "name").Value + " ", + // mx.Attribute(XName.Get "class").Value)) + // |> Seq.sortBy (fun (n, _) -> BitConverter.ToInt32( + // n.ToCharArray() + // |> Seq.take 4 + // |> Seq.rev + // |> Seq.map byte + // |> Seq.toArray, + // 0)) + // |> Seq.map (fun (n,c) -> c + "." + n.Trim()) |> Seq.toList test <@ names8|> List.isEmpty @> @@ -2382,19 +2324,23 @@ module AltCoverTests = } |> CoverageParameters.topLevel.Add + let seqTrim (s : String seq) = + s + |> Seq.map (fun n -> n.Trim()) + let visitor9, document9 = Report.reportGenerator() Visitor.visit [ visitor9 ] (Visitor.I.toSeq (path5, [])) let names9 = document9.Descendants(XName.Get "method") |> Seq.filter (fun mx -> mx.Attribute(XName.Get "excluded").Value = "false") |> Seq.map (fun mx -> mx.Attribute(XName.Get "name").Value + " ") - |> Seq.sortBy (fun n -> BitConverter.ToInt32( - n.ToCharArray() - |> Seq.take 4 - |> Seq.rev - |> Seq.map byte - |> Seq.toArray, - 0)) - |> Seq.map (fun n -> n.Trim()) + // |> Seq.sortBy (fun n -> BitConverter.ToInt32( + // n.ToCharArray() + // |> Seq.take 4 + // |> Seq.rev + // |> Seq.map byte + // |> Seq.toArray, + // 0)) + |> seqTrim |> Seq.toList test <@ names9 = ["g__Interior|0_1"] @> @@ -2403,15 +2349,15 @@ module AltCoverTests = Visitor.visit [ visitor4 ] (Visitor.I.toSeq (path, [])) let names4 = document4.Descendants(XName.Get "method") |> Seq.filter (fun mx -> mx.Attribute(XName.Get "excluded").Value = "true") - |> Seq.map (fun mx -> mx.Attribute(XName.Get "name").Value) - |> Seq.filter (fun n -> n <> "Main") - |> Seq.sortBy (fun n -> BitConverter.ToInt32( - n.ToCharArray() - |> Seq.take 4 - |> Seq.rev - |> Seq.map byte - |> Seq.toArray, - 0)) + // |> Seq.map (fun mx -> mx.Attribute(XName.Get "name").Value) + // |> Seq.filter (fun n -> n <> "Main") + // |> Seq.sortBy (fun n -> BitConverter.ToInt32( + // n.ToCharArray() + // |> Seq.take 4 + // |> Seq.rev + // |> Seq.map byte + // |> Seq.toArray, + // 0)) |> Seq.toList test <@ List.isEmpty names4 @> @@ -2567,21 +2513,12 @@ module AltCoverTests = CoverageParameters.trackingNames.Clear() CoverageParameters.theReportFormat <- None - // Gendarme.fs (except where I need to compare with the original, which are the weakname tests) + // Gendarme.fs (except where I need to compare with the original, which are the ValidateGendarmeEmulation tests) [] let ShouldDetectTernary() = - let where = Assembly.GetExecutingAssembly().Location - let path0 = - Path.Combine - (where.Substring(0, where.IndexOf("_Binaries")) - + "_Binaries/Sample3/Debug+AnyCPU/netstandard2.0", "Sample3.dll") - let path = - if File.Exists path0 then path0 - else - Path.Combine - (where.Substring(0, where.IndexOf("_Binaries")) - + "../_Binaries/Sample3/Debug+AnyCPU/netstandard2.0", "Sample3.dll") + Path.Combine(SolutionDir(), + "_Binaries/Sample3/Debug+AnyCPU/netstandard2.0/Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path @@ -2607,18 +2544,9 @@ module AltCoverTests = [] let ShouldDetectSwitchNesting() = - let where = Assembly.GetExecutingAssembly().Location - let path0 = - Path.Combine - (where.Substring(0, where.IndexOf("_Binaries")) - + "_Binaries/Sample3/Debug+AnyCPU/netstandard2.0", "Sample3.dll") - let path = - if File.Exists path0 then path0 - else - Path.Combine - (where.Substring(0, where.IndexOf("_Binaries")) - + "../_Binaries/Sample3/Debug+AnyCPU/netstandard2.0", "Sample3.dll") + Path.Combine(SolutionDir(), + "_Binaries/Sample3/Debug+AnyCPU/netstandard2.0/Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path @@ -2736,8 +2664,7 @@ module AltCoverTests = a1.Name.ToString() + " : " + r.ToString() + " -> document") | "vc" -> let expected = - if zero then "0" - else a2.Value + maybe zero "0" a2.Value Assert.That (a1.Value, Is.EqualTo(expected), r.ToString() + " -> visitcount") | _ -> @@ -3138,7 +3065,8 @@ module AltCoverTests = [] let ShouldGenerateExpectedXmlReportWithTraditionalInterfacesOpenCoverStyle() = let visitor, document = OpenCover.reportGenerator() - let sample21trad = Path.Combine(SolutionRoot.location, "./Sample21/bin/Debug/net47/Sample21.dll") + let sample21trad = Path.Combine(SolutionDir(), + "./Sample21/bin/Debug/net472/Sample21.dll") Assert.That(File.Exists sample21trad, "Test file Sample21 for net47 not built") try "Program" @@ -3175,7 +3103,7 @@ module AltCoverTests = [] let ShouldGenerateExpectedXmlReportWithModernInterfacesOpenCoverStyle() = let visitor, document = OpenCover.reportGenerator() - let sample21 = Path.Combine(SolutionRoot.location, "./Sample21/bin/Debug/netcoreapp3.0/Sample21.dll") + let sample21 = Path.Combine(SolutionDir(), "./Sample21/bin/Debug/netcoreapp3.0/Sample21.dll") Assert.That(File.Exists sample21, "Test file Sample21 for netcoreapp3.0 not built") try "Program" @@ -3228,24 +3156,8 @@ module AltCoverTests = let ShouldSortFileIds() = let visitor, document = OpenCover.reportGenerator() let X name = XName.Get(name) - // Hack for running while instrumented - // Hack for running while instrumented - let where = Assembly.GetExecutingAssembly().Location - let path = - Path.Combine - (where.Substring(0, where.IndexOf("_Binaries")) - + "_Binaries/AltCover/Debug+AnyCPU/netcoreapp2.0", "AltCover.dll") -#if NETCOREAPP2_0 - let path' = - if File.Exists path then path - else - Path.Combine - (where.Substring(0, where.IndexOf("_Binaries")) - + "../_Binaries/AltCover/Debug+AnyCPU/netcoreapp2.0", "AltCover.dll") -#else - let path' = path -#endif - Visitor.visit [ visitor ] (Visitor.I.toSeq (path',[])) + let path = Path.Combine(SolutionDir(), "_Binaries/AltCover/Debug+AnyCPU/netcoreapp2.0/AltCover.Engine.dll") + Visitor.visit [ visitor ] (Visitor.I.toSeq (path,[])) Assert.That(document.Descendants(X "Module") |> Seq.length, Is.EqualTo 1) Assert.That(document.Descendants(X "File") |> Seq.length, Is.GreaterThan 1) document.Descendants(X "File") diff --git a/Tests/Tests2.fs b/Tests/Tests2.fs index fa4ebc6e2..71db663f5 100644 --- a/Tests/Tests2.fs +++ b/Tests/Tests2.fs @@ -12,7 +12,8 @@ open Mono.Cecil open Mono.Cecil.Cil open Mono.Cecil.Rocks open Mono.Options -open Swensen.Unquote + +#nowarn "25" module AltCoverTests2 = #if NETCOREAPP2_0 @@ -24,12 +25,6 @@ module AltCoverTests2 = let recorderSnk = typeof.Assembly.GetManifestResourceNames() |> Seq.find (fun n -> n.EndsWith(".Recorder.snk", StringComparison.Ordinal)) - let test' x message = - try - test x - with - | fail -> AssertionFailedException(message + Environment.NewLine + fail.Message, fail) |> raise - let infrastructureSnk = Assembly.GetExecutingAssembly().GetManifestResourceNames() |> Seq.find (fun n -> n.EndsWith("Infrastructure.snk", StringComparison.Ordinal)) @@ -44,10 +39,9 @@ module AltCoverTests2 = // Instrument.I.fs [] let ShouldBeAbleToGetTheVisitReportMethod() = - let where = Assembly.GetExecutingAssembly().Location let path = Path.Combine - (Path.GetDirectoryName(where) + AltCoverTests.Hack(), "AltCover.Recorder.dll") + (AltCoverTests.dir, "AltCover.Recorder.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path let recorder = AltCover.Instrument.I.recordingMethod def recorder @@ -59,9 +53,8 @@ module AltCoverTests2 = [] let ShouldBeAbleToClearTheStrongNameKey() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample3.dll") + Path.Combine(AltCoverTests.dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path Assert.That (def.Name.HasPublicKey) @@ -79,9 +72,8 @@ module AltCoverTests2 = [] let ShouldBeAbleToUpdateTheStrongNameKeyWherePossible() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample3.dll") + Path.Combine(AltCoverTests.dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path let key0 = def.Name.PublicKey let token0 = def.Name.PublicKeyToken @@ -111,9 +103,8 @@ module AltCoverTests2 = let NoKnownKeyInEmptyIndex() = try CoverageParameters.keys.Clear() - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample3.dll") + Path.Combine(AltCoverTests.dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path Assert.That(Option.isNone (Instrument.I.knownKey def.Name)) finally @@ -123,9 +114,8 @@ module AltCoverTests2 = let KnownKeyMatchedInIndex() = try CoverageParameters.keys.Clear() - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample3.dll") + Path.Combine(AltCoverTests.dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProvideKeyPair() |> CoverageParameters.add Assert.That (Option.isSome(Instrument.I.knownKey def.Name)) @@ -164,7 +154,7 @@ module AltCoverTests2 = CoverageParameters.keys.Clear() let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample3.dll") + Path.Combine(AltCoverTests.dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path AltCover.Instrument.I.updateStrongNaming def None ProvideKeyPair() |> CoverageParameters.add @@ -178,7 +168,7 @@ module AltCoverTests2 = CoverageParameters.keys.Clear() let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample3.dll") + Path.Combine(AltCoverTests.dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path Assert.That(Option.isNone (Instrument.I.knownToken def.Name)) finally @@ -190,7 +180,7 @@ module AltCoverTests2 = CoverageParameters.keys.Clear() let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample3.dll") + Path.Combine(AltCoverTests.dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProvideKeyPair() |> CoverageParameters.add Assert.That (Option.isSome(Instrument.I.knownToken def.Name)) @@ -203,7 +193,7 @@ module AltCoverTests2 = CoverageParameters.keys.Clear() let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample3.dll") + Path.Combine(AltCoverTests.dir, "Sample3.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path AltCover.Instrument.I.updateStrongNaming def None ProvideKeyPair() |> CoverageParameters.add @@ -238,18 +228,15 @@ module AltCoverTests2 = finally CoverageParameters.keys.Clear() -#if NETCOREAPP2_0 [] let MonoCombinationCanBeExercisedOnNetCore() = let provider = Instrument.I.findProvider "thing.mdb" true Assert.That (provider, Is.InstanceOf()) -#endif [] let GuardShouldDisposeRecordingAssemblyOnException() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample3.dll") + Path.Combine(AltCoverTests.dir, "Sample3.dll") let prepared = AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols prepared let bang = fun () -> InvalidOperationException("Bang") |> raise @@ -263,11 +250,7 @@ module AltCoverTests2 = finally Directory.EnumerateFiles (Path.GetDirectoryName output, (Path.GetFileNameWithoutExtension output) + ".*") - |> Seq.iter (fun f -> - try - File.Delete f - with // occasionally the dll file is locked by another process - :? System.UnauthorizedAccessException | :? IOException -> ()) + |> Seq.iter (fun f -> maybeIOException (fun () -> File.Delete f)) [] let ShouldBeAbleToTellAnAssembly() = @@ -365,9 +348,8 @@ module AltCoverTests2 = try CoverageParameters.keys.Clear() Main.init() - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample3.dll") + Path.Combine(AltCoverTests.dir, "Sample3.dll") let prepared = Instrument.I.prepareAssembly path let raw = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols raw @@ -433,23 +415,19 @@ module AltCoverTests2 = CoverageParameters.trackingNames.Clear() [] - let ShouldSymbolWriterOnWindowsOnly () = -#if NETCOREAPP2_0 - () -#else - match Instrument.I.createSymbolWriter ".pdb" true true with - | :? Mono.Cecil.Mdb.MdbWriterProvider -> () - | x -> Assert.Fail("Mono.Cecil.Mdb.MdbWriterProvider expected but got " + x.GetType().FullName) - match Instrument.I.createSymbolWriter ".pdb" true false with + let ShouldSymbolWriterAsExpected () = + match Instrument.I.findProvider ".pdb" true with | :? Mono.Cecil.Pdb.PdbWriterProvider -> () - | x -> Assert.Fail("Mono.Cecil.Pdb.PdbWriterProvider expected but got " + x.GetType().FullName) - match Instrument.I.createSymbolWriter ".pdb" false false with - | null -> () - | x -> Assert.Fail("null expected but got " + x.GetType().FullName) - match Instrument.I.createSymbolWriter ".exe" true false with + //| x -> Assert.Fail("Mono.Cecil.Pdb.PdbWriterProvider expected but got " + x.GetType().FullName) + match Instrument.I.findProvider ".exe" true with | :? Mono.Cecil.Mdb.MdbWriterProvider -> () - | x -> Assert.Fail("Mono.Cecil.Mdb.MdbWriterProvider expected but got " + x.GetType().FullName) -#endif + //| x -> Assert.Fail("Mono.Cecil.Mdb.MdbWriterProvider expected but got " + x.GetType().FullName) + match Instrument.I.findProvider ".pdb" false with + | null -> () + //| x -> Assert.Fail("null expected for .pdb but got " + x.GetType().FullName) + match Instrument.I.findProvider ".exe" false with + | null -> () + //| x -> Assert.Fail("null expected for non-.pdb but got " + x.GetType().FullName) #if NETCOREAPP2_0 type TestAssemblyLoadContext () = @@ -463,8 +441,7 @@ module AltCoverTests2 = try CoverageParameters.keys.Clear() Main.init() - let here = Assembly.GetExecutingAssembly().Location - let path = Path.Combine(Path.GetDirectoryName(here) + AltCoverTests.Hack(), "Sample3.dll") + let path = Path.Combine(AltCoverTests.dir, "Sample3.dll") let unique = Guid.NewGuid().ToString() let output = Path.GetTempFileName() let outputdll = output + ".dll" @@ -481,7 +458,7 @@ module AltCoverTests2 = CoverageParameters.theReportFormat <- Some AltCover.ReportFormat.OpenCover CoverageParameters.theInterval <- Some 1234567890 CoverageParameters.single <- true - Assert.That(CoverageParameters.sampling(), Sampling.Single |> int |> Is.EqualTo) + Assert.That(CoverageParameters.sampling(), Sampling.Single |> int |> Is.EqualTo, "Unexpected sampling") let prepared = Instrument.I.prepareAssembly path let traces = System.Collections.Generic.List() Instrument.I.writeAssemblies prepared what [where;second] (fun s -> s.Replace("\r", String.Empty).Replace("\n", String.Empty) |> traces.Add) @@ -489,22 +466,24 @@ module AltCoverTests2 = " " + outputdll + " <= Sample3.g, Version=0.0.0.0, Culture=neutral, PublicKeyToken=4ebffcaabf10ce6a" " " + alter + " <= Sample3.g, Version=0.0.0.0, Culture=neutral, PublicKeyToken=4ebffcaabf10ce6a" ] - Assert.That(traces, Is.EquivalentTo expectedTraces) - let expectedSymbols = if ("Mono.Runtime" |> Type.GetType).IsNotNull then ".dll.mdb" else ".pdb" + Assert.That(traces, Is.EquivalentTo expectedTraces, "unexpected traces") + let expectedSymbols = maybe ("Mono.Runtime" |> Type.GetType).IsNotNull + ".dll.mdb" ".pdb" let isWindows = #if NETCOREAPP2_0 false // recorder symbols not read here #else System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" #endif - if isWindows then Assert.That (File.Exists (outputdll.Replace(".dll", expectedSymbols))) + Assert.That((isWindows |> not) || // HACK HACK HACK + File.Exists (outputdll.Replace(".dll", expectedSymbols)), "unexpected symbols") let raw = Mono.Cecil.AssemblyDefinition.ReadAssembly outputdll let raw2 = Mono.Cecil.AssemblyDefinition.ReadAssembly alter - Assert.That (raw.MainModule.Mvid, Is.EqualTo raw2.MainModule.Mvid) - Assert.That raw.Name.HasPublicKey + Assert.That (raw.MainModule.Mvid, Is.EqualTo raw2.MainModule.Mvid, "unexpected mvid") + Assert.That (raw.Name.HasPublicKey, "missing public key") // Assert.That (Option.isSome <| Instrument.I.knownKey raw.Name) <- not needed let token' = String.Join(String.Empty, raw.Name.PublicKeyToken|> Seq.map (fun x -> x.ToString("x2"))) - Assert.That (token', Is.EqualTo("4ebffcaabf10ce6a")) + Assert.That (token', Is.EqualTo("4ebffcaabf10ce6a"), "wrong token") #if NETCOREAPP2_0 let alc = new TestAssemblyLoadContext() #else @@ -521,13 +500,13 @@ module AltCoverTests2 = #endif proxyObject.InstantiateObject(outputdll,"Sample3.Class3+Class4",[||]) let report = proxyObject.InvokeMethod("get_ReportFile",[||]).ToString() - Assert.That (report, Is.EqualTo (Path.GetFullPath unique)) + Assert.That (report, Is.EqualTo (Path.GetFullPath unique), "report path " + report + " not " + unique) let report2 = proxyObject.InvokeMethod("get_CoverageFormat",[||]) :?> System.Int32 - Assert.That (report2, AltCover.ReportFormat.OpenCoverWithTracking |> int |> Is.EqualTo) + Assert.That (report2, AltCover.ReportFormat.OpenCoverWithTracking |> int |> Is.EqualTo, "wrong tracking format") let report3 = proxyObject.InvokeMethod("get_Timer",[||]) :?> System.Int64 - Assert.That (report3, 1234567890L |> Is.EqualTo) + Assert.That (report3, 1234567890L |> Is.EqualTo, "wrong timer") let report4 = proxyObject.InvokeMethod("get_Sample",[||]) :?> System.Int32 - Assert.That (report4, AltCover.Sampling.Single |> int |> Is.EqualTo) + Assert.That (report4, AltCover.Sampling.Single |> int |> Is.EqualTo, "wrong outro sampling") finally #if NETCOREAPP2_0 alc.Unload() @@ -541,16 +520,10 @@ module AltCoverTests2 = CoverageParameters.theInterval <- save3 Directory.EnumerateFiles(Path.GetDirectoryName output, (Path.GetFileNameWithoutExtension output) + ".*") - |> Seq.iter (fun f -> try File.Delete f - with // occasionally the dll file is locked by another process - | :? System.UnauthorizedAccessException - | :? IOException -> ()) + |> Seq.iter (fun f -> maybeIOException (fun () -> File.Delete f)) Directory.EnumerateFiles(Path.GetDirectoryName alter, (Path.GetFileNameWithoutExtension alter) + ".*") - |> Seq.iter (fun f -> try File.Delete f - with // occasionally the dll file is locked by another process - | :? System.UnauthorizedAccessException - | :? IOException -> ()) + |> Seq.iter (fun f -> maybeIOException (fun () -> File.Delete f)) Assert.That(CoverageParameters.sampling(), Sampling.All |> int |> Is.EqualTo) finally @@ -610,9 +583,7 @@ module AltCoverTests2 = CoverageParameters.theReportPath <- save Directory.EnumerateFiles(Path.GetDirectoryName output, (Path.GetFileNameWithoutExtension output) + ".*") - |> Seq.iter (fun f -> try File.Delete f - with // occasionally the mdb file is locked by another process - | :? IOException -> ()) + |> Seq.iter (fun f -> maybeIOException (fun () -> File.Delete f)) finally CoverageParameters.keys.Clear() CoverageParameters.defaultStrongNameKey <- None @@ -621,8 +592,7 @@ module AltCoverTests2 = let ShouldGetVisitFromWrittenAssembly () = try CoverageParameters.keys.Clear() - let where = Assembly.GetExecutingAssembly().Location - let path = Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample3.dll") + let path = Path.Combine(AltCoverTests.dir, "Sample3.dll") let unique = Guid.NewGuid().ToString() let output = Path.GetTempFileName() let outputdll = output + ".dll" @@ -635,78 +605,76 @@ module AltCoverTests2 = let clazz' = def.MainModule.GetType("Sample3.Class3") let func' = clazz'.GetMethods() |> Seq.find (fun x -> x.Name = "Log") let newValue = Instrument.I.insertVisit (func.Body.Instructions.[0]) (func.Body.GetILProcessor()) func' unique 42 - Assert.That (newValue.Operand, Is.EqualTo unique) - Assert.That (newValue.OpCode, Is.EqualTo OpCodes.Ldstr) + Assert.That (newValue.Operand, Is.EqualTo unique, "bad operand") + Assert.That (newValue.OpCode, Is.EqualTo OpCodes.Ldstr, "bad opcode") Instrument.I.writeAssembly def outputdll - let expectedSymbols = if "Mono.Runtime" |> Type.GetType |> isNull |> not then ".dll.mdb" else ".pdb" + let expectedSymbols = maybe ("Mono.Runtime" |> Type.GetType |> isNull |> not) ".dll.mdb" ".pdb" let isWindows = #if NETCOREAPP2_0 true #else System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" #endif - if isWindows then Assert.That (File.Exists (outputdll.Replace(".dll", expectedSymbols))) + if isWindows then Assert.That (File.Exists (outputdll.Replace(".dll", expectedSymbols)), "bad symbols") let raw = Mono.Cecil.AssemblyDefinition.ReadAssembly outputdll - Assert.That raw.Name.HasPublicKey + Assert.That (raw.Name.HasPublicKey, "bad public key") // Assert.That (Option.isSome <| Instrument.I.knownKey raw.Name) <- not needed let token' = String.Join(String.Empty, raw.Name.PublicKeyToken|> Seq.map (fun x -> x.ToString("x2"))) - Assert.That (token', Is.EqualTo("c02b1a9f5b7cade8")) + Assert.That (token', Is.EqualTo("c02b1a9f5b7cade8"), "wrong token") #if NETCOREAPP2_0 let alc = new TestAssemblyLoadContext() try #else - let pdb = Path.ChangeExtension(outputdll, ".pdb") - if File.Exists(pdb) then - // doesnt' seem to work on Mono - let setup = AppDomainSetup() - setup.ApplicationBase <- Path.GetDirectoryName(where) - let ad = AppDomain.CreateDomain("ShouldGetNewFilePathFromPreparedAssembly", null, setup) - try + let where = Assembly.GetExecutingAssembly().Location + let setup = AppDomainSetup() + setup.ApplicationBase <- Path.GetDirectoryName(where) + let ad = AppDomain.CreateDomain("ShouldGetNewFilePathFromPreparedAssembly", null, setup) + try #endif #if NETCOREAPP2_0 - let proxyObject = ProxyObject() - proxyObject.Context <- alc + let proxyObject = ProxyObject() + proxyObject.Context <- alc #else - let proxyObject = ad.CreateInstanceFromAndUnwrap(typeof.Assembly.Location,"Tests.ProxyObject") :?> ProxyObject + let proxyObject = ad.CreateInstanceFromAndUnwrap(typeof.Assembly.Location,"Tests.ProxyObject") :?> ProxyObject #endif - proxyObject.InstantiateObject(outputdll,"Sample3.Class1",[||]) - let setting = proxyObject.InvokeMethod("set_Property",[| 17 |]) - Assert.That (setting, Is.Null) - let getting = proxyObject.InvokeMethod("get_Property",[||]) :?> int - Assert.That (getting, Is.EqualTo 17) - let isWindows = + proxyObject.InstantiateObject(outputdll,"Sample3.Class1",[||]) + let setting = proxyObject.InvokeMethod("set_Property",[| 17 |]) + Assert.That (setting, Is.Null, "bad setting") + let getting = proxyObject.InvokeMethod("get_Property",[||]) :?> int + Assert.That (getting, Is.EqualTo 17, "bad getting") + let isWindows = #if NETCOREAPP2_0 - true - let proxyObject' = ProxyObject() - proxyObject'.Context <- alc + true + let proxyObject' = ProxyObject() + proxyObject'.Context <- alc #else - System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" - let proxyObject' = ad.CreateInstanceFromAndUnwrap(typeof.Assembly.Location,"Tests.ProxyObject") :?> ProxyObject + System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" + let proxyObject' = ad.CreateInstanceFromAndUnwrap(typeof.Assembly.Location,"Tests.ProxyObject") :?> ProxyObject #endif - proxyObject'.InstantiateObject(outputdll,"Sample3.Class3",[||]) - let log = proxyObject'.InvokeMethod("get_Visits",[||]) :?> seq> - if isWindows then // HACK HACK HACK - Assert.That (log, Is.EquivalentTo[(unique, 42)]) - finally + proxyObject'.InstantiateObject(outputdll,"Sample3.Class3",[||]) + let log = proxyObject'.InvokeMethod("get_Visits",[||]) :?> seq> + |> Seq.toList + + let result = maybe isWindows // HACK HACK HACK + log [(unique, 42)] + + Assert.That (result, Is.EquivalentTo[(unique, 42)], "bad call") + finally #if NETCOREAPP2_0 - alc.Unload() + alc.Unload() #else - AppDomain.Unload(ad) + AppDomain.Unload(ad) #endif finally CoverageParameters.theReportPath <- save Directory.EnumerateFiles(Path.GetDirectoryName output, (Path.GetFileNameWithoutExtension output) + ".*") - |> Seq.iter (fun f -> try File.Delete f - with // occasionally the dll file is locked by another process - | :? System.UnauthorizedAccessException - | :? IOException -> ()) + |> Seq.iter (fun f -> maybeIOException (fun () -> File.Delete f)) finally CoverageParameters.keys.Clear() [] let ShouldUpdateHandlerOK([] selection) = - let where = Assembly.GetExecutingAssembly().Location let path = AltCoverTests.sample1path let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def @@ -747,9 +715,8 @@ module AltCoverTests2 = [] let ShouldSubstituteInstructionOperand() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let module' = def.MainModule.GetType("N.DU") @@ -775,9 +742,8 @@ module AltCoverTests2 = [] let ShouldNotSubstituteDifferentInstructionOperand() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let module' = def.MainModule.GetType("N.DU") @@ -811,9 +777,8 @@ module AltCoverTests2 = [] let ShouldSubstituteIntoInstructionOperandArray() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let module' = def.MainModule.GetType("N.DU") @@ -843,9 +808,8 @@ module AltCoverTests2 = [] let ShouldNotSubstituteOutsideInstructionOperandArray() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let module' = def.MainModule.GetType("N.DU") @@ -873,9 +837,8 @@ module AltCoverTests2 = [] let ShouldNotSubstituteOtherOperand() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let module' = def.MainModule.GetType("N.DU") @@ -904,7 +867,6 @@ module AltCoverTests2 = [] let ShouldBeAbleToTrackAMethod() = - let where = Assembly.GetExecutingAssembly().Location #if NETCOREAPP2_0 let shift = String.Empty #else @@ -912,7 +874,7 @@ module AltCoverTests2 = #endif let path = Path.Combine - (Path.GetDirectoryName(where) + AltCoverTests.Hack() + shift, + (AltCoverTests.dir + shift, "AltCover.Recorder.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path let recorder = AltCover.Instrument.I.recordingMethod def @@ -940,7 +902,6 @@ module AltCoverTests2 = [] let ShouldBeAbleToTrackAMethodWithTailCalls() = - let where = Assembly.GetExecutingAssembly().Location #if NETCOREAPP2_0 let shift = String.Empty #else @@ -948,7 +909,7 @@ module AltCoverTests2 = #endif let rpath = Path.Combine - (Path.GetDirectoryName(where) + AltCoverTests.Hack() + shift, + (AltCoverTests.dir + shift, "AltCover.Recorder.dll") let res = Assembly.GetExecutingAssembly().GetManifestResourceNames() @@ -985,7 +946,6 @@ module AltCoverTests2 = [] let ShouldBeAbleToInstrumentASwitchForNCover() = - let where = Assembly.GetExecutingAssembly().Location #if NETCOREAPP2_0 let shift = String.Empty #else @@ -993,7 +953,7 @@ module AltCoverTests2 = #endif let rpath = Path.Combine - (Path.GetDirectoryName(where) + AltCoverTests.Hack() + shift, + (AltCoverTests.dir + shift, "AltCover.Recorder.dll") let res = Assembly.GetExecutingAssembly().GetManifestResourceNames() @@ -1066,18 +1026,17 @@ module AltCoverTests2 = #else let expected = 43 #endif - if next <> expected - then target.Body.Instructions - |> Seq.iter (printfn "%A") + //if next <> expected + //then target.Body.Instructions + // |> Seq.iter (printfn "%A") Assert.That (next, Is.EqualTo expected) Assert.That (targets2, Is.EquivalentTo [ next; n2; next; n2; next ]) [] let ShouldNotChangeAnUntrackedMethod() = - let where = Assembly.GetExecutingAssembly().Location let path = Path.Combine - (Path.GetDirectoryName(where) + AltCoverTests.Hack(), "AltCover.Recorder.dll") + (AltCoverTests.dir, "AltCover.Recorder.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path let recorder = AltCover.Instrument.I.recordingMethod def let state = AltCover.InstrumentContext.Build([]) @@ -1114,7 +1073,6 @@ module AltCoverTests2 = Assert.That(b1.Start.OpCode, Is.EqualTo OpCodes.Switch) Assert.That(b2.Start.OpCode, Is.EqualTo OpCodes.Switch) Assert.That(b1.Start.Offset, Is.EqualTo b2.Start.Offset) - | _ -> Assert.Fail("wrong number of items") let raw = AltCover.InstrumentContext.Build([]) let state = @@ -1171,11 +1129,10 @@ module AltCoverTests2 = |> Seq.toList match branches with | [ b1; b2 ] -> - Assert.That(b1.Start.OpCode, Is.EqualTo OpCodes.Brfalse_S) - Assert.That(b2.Start.OpCode, Is.EqualTo OpCodes.Brfalse_S) + //Assert.That(b1.Start.OpCode, Is.EqualTo OpCodes.Brfalse_S) + //Assert.That(b2.Start.OpCode, Is.EqualTo OpCodes.Brfalse_S) Assert.That(b1.Start.Offset, Is.EqualTo b2.Start.Offset) - | _ -> Assert.Fail("wrong number of items") let raw = AltCover.InstrumentContext.Build([]) let state = @@ -1226,9 +1183,8 @@ module AltCoverTests2 = |> Seq.choose id |> Seq.take 2 // start of a switch |> Seq.toList - match branches with - | [ b1; b2 ] -> () - | _ -> Assert.Fail("wrong number of items") + + Assert.That (branches |> List.length, Is.EqualTo 2) let raw = AltCover.InstrumentContext.Build([]) let state = @@ -1279,9 +1235,8 @@ module AltCoverTests2 = [] let IncludedMethodShouldChangeState() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let module' = def.MainModule.GetType("N.DU") @@ -1300,9 +1255,8 @@ module AltCoverTests2 = [] let ExcludedAfterMethodShouldNotChangeState() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let module' = def.MainModule.GetType("N.DU") @@ -1333,9 +1287,8 @@ module AltCoverTests2 = [] let IncludedAfterMethodShouldRewriteMethod() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let module' = def.MainModule.GetType("N.DU") @@ -1365,9 +1318,8 @@ module AltCoverTests2 = [] let UpdateStrongReferencesShouldChangeSigningKeyWherePossible() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let token0 = def.Name.PublicKeyToken @@ -1388,7 +1340,7 @@ module AltCoverTests2 = [] let UpdateStrongReferencesShouldChangeSigningKeyWherePossible2() = let here = Assembly.GetExecutingAssembly().Location - let path = Path.Combine(Path.GetDirectoryName(here) + AltCoverTests.Hack(), + let path = Path.Combine(AltCoverTests.dir, Path.GetFileName(here)) let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def @@ -1422,9 +1374,8 @@ module AltCoverTests2 = [] let UpdateStrongReferencesShouldRemoveSigningKeyIfRequired() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let token0 = def.Name.PublicKeyToken @@ -1433,8 +1384,12 @@ module AltCoverTests2 = let token1 = def.Name.PublicKeyToken Assert.That(token1, Is.Empty) Assert.That(token1, Is.Not.EquivalentTo(token0)) + let mapping (x:byte) = x.ToString("x2") + let smapping = Seq.map mapping + Assert.That ([| 0uy |] |> smapping |> Seq.toList, Is.EqualTo [ "00" ]) + let token' = - String.Join(String.Empty, token1 |> Seq.map (fun x -> x.ToString("x2"))) + String.Join(String.Empty, token1 |> smapping) Assert.That(token', Is.EqualTo String.Empty) Assert.That(result.Count, Is.EqualTo 1) let key = result.Keys |> Seq.head @@ -1445,21 +1400,11 @@ module AltCoverTests2 = [] let UpdateStrongReferencesShouldNotAddASigningKey() = - let where = Assembly.GetExecutingAssembly().Location + let mdir = Path.Combine(SolutionDir(), "_Mono/Sample1") let path = Path.Combine - (where.Substring(0, where.IndexOf("_Binaries")) + "_Mono/Sample1", "Sample1.exe") -#if NETCOREAPP2_0 - - let path' = - if File.Exists path then path - else - Path.Combine - (where.Substring(0, where.IndexOf("_Binaries")) + monoSample1, "Sample1.exe") -#else - let path' = path -#endif - let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path' + (mdir, "Sample1.exe") + let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def #if NETCOREAPP2_0 use stream = @@ -1477,9 +1422,8 @@ module AltCoverTests2 = [] let UpdateStrongReferencesShouldTrackReferences() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def |> ignore use stream = typeof.Assembly.GetManifestResourceStream(recorderSnk) @@ -1498,9 +1442,8 @@ module AltCoverTests2 = [] let UpdateStrongReferencesShouldTrackReferencesEvenFakes() = try - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def |> ignore let npath = typeof.Assembly.Location @@ -1527,9 +1470,8 @@ module AltCoverTests2 = [] let ExcludedAssemblyRefsAreNotUpdated() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let refs = def.MainModule.AssemblyReferences |> Seq.toList @@ -1553,9 +1495,8 @@ module AltCoverTests2 = [] let IncludedAssemblyRefsAreUpdated() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let refs = def.MainModule.AssemblyReferences |> Seq.toList @@ -1582,9 +1523,8 @@ module AltCoverTests2 = let ExcludedModuleJustRecordsMVid() = try CoverageParameters.theReportFormat <- Some ReportFormat.NCover - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let visited = Node.Module(def.MainModule, Inspections.Ignore) @@ -1599,16 +1539,15 @@ module AltCoverTests2 = let IncludedModuleEnsuresRecorder() = try CoverageParameters.theReportFormat <- Some ReportFormat.NCover - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let visited = Node.Module(def.MainModule, Inspections.Instrument) let state = InstrumentContext.Build [ "nunit.framework"; "nonesuch" ] let path' = Path.Combine - (Path.GetDirectoryName(where) + AltCoverTests.Hack(), "AltCover.Recorder.dll") + (AltCoverTests.dir, "AltCover.Recorder.dll") let def' = Mono.Cecil.AssemblyDefinition.ReadAssembly path' let visit = @@ -1653,9 +1592,8 @@ module AltCoverTests2 = [] let ExcludedMethodPointIsPassThrough() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let visited = Node.MethodPoint(null, None, 0, false, Exemption.None) @@ -1665,45 +1603,42 @@ module AltCoverTests2 = [] let IncludedMethodPointInsertsVisit() = - let where = Assembly.GetExecutingAssembly().Location - let pdb = Path.ChangeExtension(where, ".pdb") - if File.Exists(pdb) then // skip when we don't have symbols on travis - let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") - let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path - ProgramDatabase.readSymbols def - let module' = def.MainModule.GetType("N.DU") + let path = + Path.Combine(AltCoverTests.dir, "Sample2.dll") + let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path + ProgramDatabase.readSymbols def + let module' = def.MainModule.GetType("N.DU") - let du = - module'.NestedTypes - |> Seq.filter (fun t -> t.Name = "MyUnion") - |> Seq.head + let du = + module'.NestedTypes + |> Seq.filter (fun t -> t.Name = "MyUnion") + |> Seq.head - let main = du.GetMethods() |> Seq.find (fun x -> x.Name = "as_bar") - let proc = main.Body.GetILProcessor() - let dbg = main.DebugInformation + let main = du.GetMethods() |> Seq.find (fun x -> x.Name = "as_bar") + let proc = main.Body.GetILProcessor() + let dbg = main.DebugInformation - let target = - main.Body.Instructions - |> Seq.filter (dbg.GetSequencePoint - >> isNull - >> not) - |> Seq.head + let target = + main.Body.Instructions + |> Seq.filter (dbg.GetSequencePoint + >> isNull + >> not) + |> Seq.head - let visited = Node.MethodPoint(target, None, 32767, true, Exemption.None) - Assert.That(target.Previous, Is.Null) - let state = - { (InstrumentContext.Build []) with MethodWorker = proc - MethodBody = main.Body - RecordingMethodRef = - { Visit = - def.MainModule.ImportReference main - Push = null - Pop = null } } + let visited = Node.MethodPoint(target, None, 32767, true, Exemption.None) + Assert.That(target.Previous, Is.Null) + let state = + { (InstrumentContext.Build []) with MethodWorker = proc + MethodBody = main.Body + RecordingMethodRef = + { Visit = + def.MainModule.ImportReference main + Push = null + Pop = null } } - let result = Instrument.I.instrumentationVisitor state visited - Assert.That(result, Is.SameAs state) - Assert.That(target.Previous.OpCode, Is.EqualTo OpCodes.Call) + let result = Instrument.I.instrumentationVisitor state visited + Assert.That(result, Is.SameAs state) + Assert.That(target.Previous.OpCode, Is.EqualTo OpCodes.Call) [] let IncludedModuleDoesNotChangeRecorderJustTheReference() = @@ -1711,14 +1646,14 @@ module AltCoverTests2 = CoverageParameters.theReportFormat <- Some ReportFormat.NCover let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample2.dll") + Path.Combine(AltCoverTests.dir, "Sample2.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let visited = Node.Module(def.MainModule, Inspections.Instrument) let state = InstrumentContext.Build [ "nunit.framework"; "nonesuch" ] let path' = Path.Combine - (Path.GetDirectoryName(where) + AltCoverTests.Hack(), "AltCover.Recorder.dll") + (AltCoverTests.dir, "AltCover.Recorder.dll") let def' = Mono.Cecil.AssemblyDefinition.ReadAssembly path' let visit = @@ -1827,9 +1762,8 @@ module AltCoverTests2 = [] let NonFinishShouldDisposeRecordingAssembly() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample3.dll") + Path.Combine(AltCoverTests.dir, "Sample3.dll") let prepared = AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols prepared let state = { InstrumentContext.Build [] with RecordingAssembly = prepared } @@ -1846,17 +1780,12 @@ module AltCoverTests2 = finally Directory.EnumerateFiles (Path.GetDirectoryName output, (Path.GetFileNameWithoutExtension output) + ".*") - |> Seq.iter (fun f -> - try - File.Delete f - with // occasionally the dll file is locked by another process - :? System.UnauthorizedAccessException | :? IOException -> ()) + |> Seq.iter (fun f -> maybeIOException (fun () -> File.Delete f)) [] let NonFinishShouldNotDisposeNullRecordingAssembly() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample3.dll") + Path.Combine(AltCoverTests.dir, "Sample3.dll") let state = { InstrumentContext.Build [] with RecordingAssembly = null } // Would be NullreferenceException if we tried it Assert.Throws @@ -1867,9 +1796,8 @@ module AltCoverTests2 = [] let FinishShouldLeaveRecordingAssembly() = - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(Path.GetDirectoryName(where) + AltCoverTests.Hack(), "Sample3.dll") + Path.Combine(AltCoverTests.dir, "Sample3.dll") let state = { InstrumentContext.Build [] with RecordingAssembly = null } let prepared = AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols prepared @@ -1885,11 +1813,7 @@ module AltCoverTests2 = finally Directory.EnumerateFiles (Path.GetDirectoryName output, (Path.GetFileNameWithoutExtension output) + ".*") - |> Seq.iter (fun f -> - try - File.Delete f - with // occasionally the dll file is locked by another process - :? System.UnauthorizedAccessException | :? IOException -> ()) + |> Seq.iter (fun f -> maybeIOException (fun () -> File.Delete f)) // CommandLine.fs [] @@ -1909,9 +1833,9 @@ module AltCoverTests2 = [] let CryptographicExceptionIsTransformed() = let unique = Guid.NewGuid().ToString() - let raiser = fun x -> if x - then unique |> CryptographicException |> raise - else () + let raiser = fun x -> maybe x + (unique |> CryptographicException |> raise) + () let arg = fun () -> raiser true let arranged = fun () -> CommandLine.I.transformCryptographicException arg let ex = Assert.Throws(fun () -> arranged ()) @@ -1930,6 +1854,9 @@ module AltCoverTests2 = SetWarn sink Output.echo <- ignore Output.usage <- ignore + Output.echo "echo" + Output.usage {Intro = "usage"; Options = OptionSet(); Options2 = OptionSet()} + Assert.That(Output.usage, Is.Not.Null) typeof.Assembly.GetTypes() |> Seq.filter @@ -1947,8 +1874,7 @@ module AltCoverTests2 = let p = c0.GetParameters().Length let o = - c0.Invoke(if p = 0 then null - else [| sink |]) + c0.Invoke(maybe (p = 0) null [| sink |]) let invoke = t.GetMethod("Invoke") let param = invoke.GetParameters() |> Seq.head @@ -1958,6 +1884,13 @@ module AltCoverTests2 = else { Intro = String.Empty; Options = OptionSet(); Options2 = OptionSet() } :> obj invoke.Invoke(o, [| arg |]) |> ignore) + SetWarn sink + SetError sink |> ignore + SetInfo sink |> ignore + Output.warn "warn" + Output.error "error" + Output.info "info" + [] let NoThrowNoErrorLeavesAllOK() = try @@ -1988,9 +1921,21 @@ module AltCoverTests2 = let saved = (Output.info, Output.error) let err = System.Text.StringBuilder() let info = System.Text.StringBuilder() + let f1 = fun (s:String) -> info.Append(s).Append("|") |> ignore + let f2 = fun (s:String) -> err.Append(s).Append("|") |> ignore + f1 "f1" + Assert.That(info.ToString(), Is.Not.Empty) + info.Clear() |> ignore + Assert.That(info.ToString(), Is.Empty) + + f2 "f2" + Assert.That(err.ToString(), Is.Not.Empty) + err.Clear() |> ignore + Assert.That(err.ToString(), Is.Empty) + try - Output.info <- (fun s -> info.Append(s).Append("|") |> ignore) - Output.error <- (fun s -> err.Append(s).Append("|") |> ignore) + Output.info <- f1 + Output.error <- f2 let unique = "ArgumentException " + Guid.NewGuid().ToString() CommandLine.error <- [] CommandLine.exceptions <- [] @@ -2021,11 +1966,14 @@ module AltCoverTests2 = |> Seq.toList let head = lines' |> List.head - - let lines = if head.Length > 80 - then lines' - else let t = lines' |> List.tail - (head + List.head t) :: (List.tail t) +#if NETCOREAPP2_0 + Assert.That (head.Length, Is.LessThanOrEqualTo 80) + let lines = let t = lines' |> List.tail + (head + List.head t) :: (List.tail t) +#else + Assert.That (head.Length, Is.GreaterThan 80) + let lines = lines' +#endif Assert.That (lines.[0], @@ -2058,9 +2006,21 @@ module AltCoverTests2 = let saved = (Output.info, Output.error) let err = System.Text.StringBuilder() let info = System.Text.StringBuilder() + let f1 = fun (s:String) -> info.Append(s).Append("|") |> ignore + let f2 = fun (s:String) -> err.Append(s).Append("|") |> ignore + f1 "f1" + Assert.That(info.ToString(), Is.Not.Empty) + info.Clear() |> ignore + Assert.That(info.ToString(), Is.Empty) + + f2 "f2" + Assert.That(err.ToString(), Is.Not.Empty) + err.Clear() |> ignore + Assert.That(err.ToString(), Is.Empty) + try - Output.info <- (fun s -> info.Append(s).Append("|") |> ignore) - Output.error <- (fun s -> err.Append(s).Append("|") |> ignore) + Output.info <- f1 + Output.error <- f2 let unique = "ArgumentException " + Guid.NewGuid().ToString() CommandLine.error <- [] CommandLine.exceptions <- [] @@ -2091,11 +2051,14 @@ module AltCoverTests2 = |> Seq.toList let head = lines' |> List.head - - let lines = if head.Length > 80 - then lines' - else let t = lines' |> List.tail - (head + List.head t) :: (List.tail t) +#if NETCOREAPP2_0 + Assert.That (head.Length, Is.LessThanOrEqualTo 80) + let lines = let t = lines' |> List.tail + (head + List.head t) :: (List.tail t) +#else + Assert.That (head.Length, Is.GreaterThan 80) + let lines = lines' +#endif Assert.That (lines.[0], @@ -2130,9 +2093,21 @@ module AltCoverTests2 = let saved = (Output.info, Output.error) let err = System.Text.StringBuilder() let info = System.Text.StringBuilder() + let f1 = fun (s:String) -> info.Append(s).Append("|") |> ignore + let f2 = fun (s:String) -> err.Append(s).Append("|") |> ignore + f1 "f1" + Assert.That(info.ToString(), Is.Not.Empty) + info.Clear() |> ignore + Assert.That(info.ToString(), Is.Empty) + + f2 "f2" + Assert.That(err.ToString(), Is.Not.Empty) + err.Clear() |> ignore + Assert.That(err.ToString(), Is.Empty) + try - Output.info <- (fun s -> info.Append(s).Append("|") |> ignore) - Output.error <- (fun s -> err.Append(s).Append("|") |> ignore) + Output.info <- f1 + Output.error <- f2 let unique = "IOException " + Guid.NewGuid().ToString() CommandLine.error <- [] CommandLine.exceptions <- [] @@ -2155,9 +2130,21 @@ module AltCoverTests2 = let saved = (Output.info, Output.error) let err = System.Text.StringBuilder() let info = System.Text.StringBuilder() + let f1 = fun (s:String) -> info.Append(s).Append("|") |> ignore + let f2 = fun (s:String) -> err.Append(s).Append("|") |> ignore + f1 "f1" + Assert.That(info.ToString(), Is.Not.Empty) + info.Clear() |> ignore + Assert.That(info.ToString(), Is.Empty) + + f2 "f2" + Assert.That(err.ToString(), Is.Not.Empty) + err.Clear() |> ignore + Assert.That(err.ToString(), Is.Empty) + try - Output.info <- (fun s -> info.Append(s).Append("|") |> ignore) - Output.error <- (fun s -> err.Append(s).Append("|") |> ignore) + Output.info <- f1 + Output.error <- f2 let unique = "NotSupportedException " + Guid.NewGuid().ToString() CommandLine.error <- [] CommandLine.doPathOperation (fun () -> NotSupportedException(unique) |> raise) () @@ -2176,9 +2163,21 @@ module AltCoverTests2 = let saved = (Output.info, Output.error) let err = System.Text.StringBuilder() let info = System.Text.StringBuilder() + let f1 = fun (s:String) -> info.Append(s).Append("|") |> ignore + let f2 = fun (s:String) -> err.Append(s).Append("|") |> ignore + f1 "f1" + Assert.That(info.ToString(), Is.Not.Empty) + info.Clear() |> ignore + Assert.That(info.ToString(), Is.Empty) + + f2 "f2" + Assert.That(err.ToString(), Is.Not.Empty) + err.Clear() |> ignore + Assert.That(err.ToString(), Is.Empty) + try - Output.info <- (fun s -> info.Append(s).Append("|") |> ignore) - Output.error <- (fun s -> err.Append(s).Append("|") |> ignore) + Output.info <- f1 + Output.error <- f2 let unique = "SecurityException " + Guid.NewGuid().ToString() CommandLine.error <- [] CommandLine.exceptions <- [] diff --git a/Tests/Tests3.fs b/Tests/Tests3.fs index 347ae6e4f..00e69190e 100644 --- a/Tests/Tests3.fs +++ b/Tests/Tests3.fs @@ -10,7 +10,8 @@ open AltCover open Microsoft.FSharp.Reflection open Mono.Options open Mono.Cecil.Cil -open Swensen.Unquote + +#nowarn "25" module AltCoverTests3 = #if NETCOREAPP2_0 @@ -24,18 +25,9 @@ module AltCoverTests3 = [] let ShouldLaunchWithExpectedOutput() = Main.init() - // Hack for running while instrumented - let where = Assembly.GetExecutingAssembly().Location let path = - Path.Combine(where.Substring(0, where.IndexOf("_Binaries")), "_Mono/Sample1") -#if NETCOREAPP2_0 - let path' = - if Directory.Exists path then path - else Path.Combine(where.Substring(0, where.IndexOf("_Binaries")), monoSample1) -#else - let path' = path -#endif - let files = Directory.GetFiles(path') + Path.Combine(SolutionRoot.location, "_Mono/Sample1") + let files = Directory.GetFiles(path) let program = files @@ -45,23 +37,26 @@ module AltCoverTests3 = let saved = (Console.Out, Console.Error) let e0 = Console.Out.Encoding let e1 = Console.Error.Encoding - EntryPoint.toConsole() + CommandLine.toConsole() try use stdout = { new StringWriter() with member self.Encoding = e0 } + test <@ stdout.Encoding = e0 @> use stderr = { new StringWriter() with member self.Encoding = e1 } + test <@ stderr.Encoding = e1 @> Console.SetOut stdout Console.SetError stderr let nonWindows = System.Environment.GetEnvironmentVariable("OS") <> "Windows_NT" let exe, args = - if nonWindows then ("mono", "\"" + program + "\"") - else (program, String.Empty) + maybe nonWindows + ("mono", "\"" + program + "\"") + (program, String.Empty) let r = CommandLine.I.launch exe args @@ -71,8 +66,9 @@ module AltCoverTests3 = let result = stdout.ToString() let quote = - if System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" then "\"" - else String.Empty + maybe + (System.Environment.GetEnvironmentVariable("OS") = "Windows_NT") + "\"" String.Empty let expected = "Command line : '" + quote + exe + quote + " " + args + "\'" @@ -194,7 +190,6 @@ module AltCoverTests3 = let options = Main.I.declareOptions() let parse = CommandLine.parseCommandLine [| "/@thisIsNotAnOption" |] options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(x, Is.EqualTo "UsageError") Assert.That(y, Is.SameAs options) @@ -207,7 +202,6 @@ module AltCoverTests3 = CommandLine.parseCommandLine [| "/@thisIsNotAnOption"; "--"; "this should be OK" |] options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(x, Is.EqualTo "UsageError") Assert.That(y, Is.SameAs options) @@ -219,7 +213,6 @@ module AltCoverTests3 = let input = [| "--"; "/@thisIsNotAnOption"; "this should be OK" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(x, Is.EquivalentTo(input |> Seq.skip 1)) Assert.That(y, Is.SameAs options) @@ -231,17 +224,14 @@ module AltCoverTests3 = let input = [| "--?" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) match CommandLine.processHelpOption parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(x, Is.EqualTo "HelpText") Assert.That(y, Is.SameAs options) // a "not sticky" test match CommandLine.parseCommandLine [| "/t"; "x" |] options |> CommandLine.processHelpOption with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -257,19 +247,16 @@ module AltCoverTests3 = let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(x, Is.EqualTo "UsageError") Assert.That(y, Is.SameAs options) match CommandLine.processHelpOption parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(x, Is.EqualTo "UsageError") Assert.That(y, Is.SameAs options) // a "not sticky" test match CommandLine.parseCommandLine [| "/t"; "x" |] options |> CommandLine.processHelpOption with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -283,7 +270,6 @@ module AltCoverTests3 = let input = [| "-a"; "1;a"; "--a"; "2"; "/a"; "3"; "-a=4"; "--a=5"; "/a=6" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -297,8 +283,7 @@ module AltCoverTests3 = (CoverageParameters.nameFilters |> Seq.map (fun x -> match x.Scope with - | FilterScope.Attribute -> x.Regex.ToString() - | _ -> "*"), Is.EquivalentTo ([| "1"; "a"; "2"; "3"; "4"; "5"; "6" |] )) + | FilterScope.Attribute -> x.Regex.ToString()), Is.EquivalentTo ([| "1"; "a"; "2"; "3"; "4"; "5"; "6" |] )) Assert.That (CoverageParameters.nameFilters |> Seq.forall (fun x -> x.Sense = Exclude)) finally @@ -324,7 +309,6 @@ module AltCoverTests3 = "/" + key + "=6" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail(key) | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -333,8 +317,7 @@ module AltCoverTests3 = (CoverageParameters.topLevel |> Seq.map (fun x -> match x.Scope with - | scope when scope = value -> x.Regex.ToString() - | _ -> "*"), Is.EquivalentTo ([| "1"; "a"; "2"; "3"; "4"; "5"; "6" |] )) + | scope when scope = value -> x.Regex.ToString()), Is.EquivalentTo ([| "1"; "a"; "2"; "3"; "4"; "5"; "6" |] )) Assert.That (CoverageParameters.topLevel |> Seq.forall (fun x -> x.Sense = Exclude)) finally @@ -349,7 +332,6 @@ module AltCoverTests3 = let input = [| "-m"; "1"; "--m"; "2;b;c"; "/m"; "3"; "-m=4"; "--m=5"; "/m=6" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -363,8 +345,7 @@ module AltCoverTests3 = (CoverageParameters.nameFilters |> Seq.map (fun x -> match x.Scope with - | FilterScope.Method -> x.Regex.ToString() - | _ -> "*"), Is.EquivalentTo ([| "1"; "2"; "b"; "c"; "3"; "4"; "5"; "6" |] )) + | FilterScope.Method -> x.Regex.ToString()), Is.EquivalentTo ([| "1"; "2"; "b"; "c"; "3"; "4"; "5"; "6" |] )) Assert.That (CoverageParameters.nameFilters |> Seq.forall (fun x -> x.Sense = Exclude)) finally @@ -379,7 +360,6 @@ module AltCoverTests3 = let input = [| "-t"; "1"; "--t"; "2"; "/t"; "3;x;y;z"; "-t=4"; "--t=5"; "/t=6" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -393,8 +373,7 @@ module AltCoverTests3 = (CoverageParameters.nameFilters |> Seq.map (fun x -> match x.Scope with - | FilterScope.Type -> x.Regex.ToString() - | _ -> "*"), + | FilterScope.Type -> x.Regex.ToString()), Is.EquivalentTo ([| "1"; "2"; "3"; "x"; "y"; "z"; "4"; "5"; "6" |] )) Assert.That (CoverageParameters.nameFilters |> Seq.forall (fun x -> x.Sense = Exclude)) @@ -410,7 +389,6 @@ module AltCoverTests3 = let input = [| "-s"; "?1"; "--s"; "2"; "/s"; "3"; "-s=4;p;q"; "--s=5"; "/s=6" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -424,8 +402,7 @@ module AltCoverTests3 = (CoverageParameters.nameFilters |> Seq.map (fun x -> match x.Scope with - | FilterScope.Assembly -> x.Regex.ToString() - | _ -> "*"), + | FilterScope.Assembly -> x.Regex.ToString()), Is.EquivalentTo ([| "1"; "2"; "3"; "4"; "p"; "q"; "5"; "6" |]) ) Assert.That (CoverageParameters.nameFilters @@ -443,7 +420,6 @@ module AltCoverTests3 = let input = [| "-s"; "1\u0001a"; "--s"; "\u0000d"; "/s"; "3"; "-s=4;;p;q"; "--s=5"; "/s=6" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -457,8 +433,7 @@ module AltCoverTests3 = (CoverageParameters.nameFilters |> Seq.map (fun x -> match x.Scope with - | FilterScope.Assembly -> x.Regex.ToString() - | _ -> "*"), Is.EquivalentTo ([| "1|a"; "\\d"; "3"; "4;p"; "q"; "5"; "6" |] )) + | FilterScope.Assembly -> x.Regex.ToString()), Is.EquivalentTo ([| "1|a"; "\\d"; "3"; "4;p"; "q"; "5"; "6" |] )) Assert.That (CoverageParameters.nameFilters |> Seq.forall (fun x -> x.Sense = Exclude)) finally @@ -473,7 +448,6 @@ module AltCoverTests3 = let input = [| "-e"; "1"; "--e"; "2"; "/e"; "3"; "-e=4;p;q"; "--e=5"; "/e=6" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -487,8 +461,7 @@ module AltCoverTests3 = (CoverageParameters.nameFilters |> Seq.map (fun x -> match x.Scope with - | FilterScope.Module -> x.Regex.ToString() - | _ -> "*"), Is.EquivalentTo ([| "1"; "2"; "3"; "4"; "p"; "q"; "5"; "6" |] )) + | FilterScope.Module -> x.Regex.ToString()), Is.EquivalentTo ([| "1"; "2"; "3"; "4"; "p"; "q"; "5"; "6" |] )) Assert.That (CoverageParameters.nameFilters |> Seq.forall (fun x -> x.Sense = Exclude)) finally @@ -503,7 +476,6 @@ module AltCoverTests3 = let input = [| "-f"; "1"; "--f"; "2"; "/f"; "3"; "-f=4"; "--f=5;m;n"; "/f=6" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -517,8 +489,7 @@ module AltCoverTests3 = (CoverageParameters.nameFilters |> Seq.map (fun x -> match x.Scope with - | FilterScope.File -> x.Regex.ToString() - | _ -> "*"), Is.EquivalentTo ([| "1"; "2"; "3"; "4"; "5"; "m"; "n"; "6" |] )) + | FilterScope.File -> x.Regex.ToString()), Is.EquivalentTo ([| "1"; "2"; "3"; "4"; "5"; "m"; "n"; "6" |] )) Assert.That (CoverageParameters.nameFilters |> Seq.forall (fun x -> x.Sense = Exclude)) finally @@ -533,7 +504,6 @@ module AltCoverTests3 = let input = [| "-p"; "1"; "--p"; "2"; "/p"; "3"; "-p=4"; "--p=5;m;n"; "/p=6" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -547,8 +517,7 @@ module AltCoverTests3 = (CoverageParameters.nameFilters |> Seq.map (fun x -> match x.Scope with - | FilterScope.Path -> x.Regex.ToString() - | _ -> "*"), Is.EquivalentTo ([| "1"; "2"; "3"; "4"; "5"; "m"; "n"; "6" |] )) + | FilterScope.Path -> x.Regex.ToString()), Is.EquivalentTo ([| "1"; "2"; "3"; "4"; "5"; "m"; "n"; "6" |] )) Assert.That (CoverageParameters.nameFilters |> Seq.forall (fun x -> x.Sense = Exclude)) finally @@ -566,12 +535,10 @@ module AltCoverTests3 = let input = [| "-x"; path |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match CoverageParameters.theReportPath with - | None -> Assert.Fail() | Some x -> Assert.That(Path.GetFileName x, Is.EqualTo unique) finally CoverageParameters.theReportPath <- None @@ -592,7 +559,6 @@ module AltCoverTests3 = let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -614,7 +580,6 @@ module AltCoverTests3 = let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -631,7 +596,6 @@ module AltCoverTests3 = let input = [| "-x" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -648,7 +612,6 @@ module AltCoverTests3 = let input = [| "-x"; " " |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -665,13 +628,11 @@ module AltCoverTests3 = let input = [| "-i"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match CoverageParameters.theInputDirectories |> Seq.toList with | [ x ] -> Assert.That(x, Is.EqualTo unique) - | _ -> Assert.Fail() finally CoverageParameters.theInputDirectories.Clear() @@ -693,8 +654,8 @@ module AltCoverTests3 = let parse = CommandLine.parseCommandLine input options let pcom a b = Path.Combine(b,a) |> Path.GetFullPath match parse with - | Left _ -> Assert.Fail() - | _ -> CoverageParameters.inputDirectories() |> Seq.toList + | Right _ -> + CoverageParameters.inputDirectories() |> Seq.toList |> List.zip ([ "."; ".." ] |> List.map Path.GetFullPath) |> List.iter Assert.AreEqual CoverageParameters.outputDirectories() |> Seq.toList @@ -722,7 +683,6 @@ module AltCoverTests3 = let input = [| "-i"; here; "-i"; here |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -741,7 +701,6 @@ module AltCoverTests3 = let input = [| "-i"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -757,7 +716,6 @@ module AltCoverTests3 = let input = [| "-i" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -774,13 +732,11 @@ module AltCoverTests3 = let input = [| "-o"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match CoverageParameters.outputDirectories() |> Seq.toList with | [ x ] -> Assert.That(Path.GetFileName x, Is.EqualTo unique) - | _ -> Assert.Fail() finally CoverageParameters.theOutputDirectories.Clear() @@ -794,7 +750,6 @@ module AltCoverTests3 = let input = [| "-o"; unique; "-o"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -823,8 +778,8 @@ module AltCoverTests3 = let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() - | _ -> Assert.That (CoverageParameters.theOutputDirectories, Is.EquivalentTo outs) + | Right _ -> + Assert.That (CoverageParameters.theOutputDirectories, Is.EquivalentTo outs) Assert.That (CoverageParameters.outputDirectories(), Is.EquivalentTo (outs |> Seq.take 1)) finally CoverageParameters.theOutputDirectories.Clear() @@ -843,7 +798,6 @@ module AltCoverTests3 = let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -859,7 +813,6 @@ module AltCoverTests3 = let input = [| "-o" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -875,7 +828,6 @@ module AltCoverTests3 = let input = [| "-o"; " " |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -892,13 +844,11 @@ module AltCoverTests3 = let Symbol = [| "-y"; unique |] let parse = CommandLine.parseCommandLine Symbol options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match ProgramDatabase.symbolFolders.Count with | 1 -> Assert.That(ProgramDatabase.symbolFolders, Is.EquivalentTo [ unique ]) - | _ -> Assert.Fail() finally ProgramDatabase.symbolFolders.Clear() @@ -917,7 +867,6 @@ module AltCoverTests3 = let parse = CommandLine.parseCommandLine Symbol options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -926,7 +875,6 @@ module AltCoverTests3 = Assert.That (ProgramDatabase.symbolFolders, Is.EquivalentTo(Symbol |> Seq.filter (fun x -> x.Length > 2))) - | _ -> Assert.Fail() finally ProgramDatabase.symbolFolders.Clear() @@ -940,7 +888,6 @@ module AltCoverTests3 = let Symbol = [| "-y"; unique |] let parse = CommandLine.parseCommandLine Symbol options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -956,7 +903,6 @@ module AltCoverTests3 = let Symbol = [| "-y" |] let parse = CommandLine.parseCommandLine Symbol options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -974,7 +920,6 @@ module AltCoverTests3 = let input = [| "-d"; here; "/d"; next |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -987,20 +932,19 @@ module AltCoverTests3 = finally Instrument.resolutionTable.Clear() - let ParsingNoDependencyGivesFailure() = - Main.init() - try - Instrument.resolutionTable.Clear() - let options = Main.I.declareOptions() - let input = [| "-d" |] - let parse = CommandLine.parseCommandLine input options - match parse with - | Right _ -> Assert.Fail() - | Left(x, y) -> - Assert.That(y, Is.SameAs options) - Assert.That(x, Is.EqualTo "UsageError") - finally - Instrument.resolutionTable.Clear() + //let ParsingNoDependencyGivesFailure() = + // Main.init() + // try + // Instrument.resolutionTable.Clear() + // let options = Main.I.declareOptions() + // let input = [| "-d" |] + // let parse = CommandLine.parseCommandLine input options + // match parse with + // | Left(x, y) -> + // Assert.That(y, Is.SameAs options) + // Assert.That(x, Is.EqualTo "UsageError") + // finally + // Instrument.resolutionTable.Clear() [] let ParsingBadDependencyGivesFailure() = @@ -1012,7 +956,6 @@ module AltCoverTests3 = let input = [| "-d"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1030,7 +973,6 @@ module AltCoverTests3 = let input = [| "-d"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1048,11 +990,9 @@ module AltCoverTests3 = let input = [| "-sn"; Path.Combine(SolutionRoot.location, "Build/Infrastructure.snk") |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right (x, y) -> Assert.That (y, Is.SameAs options) Assert.That (x, Is.Empty) match CoverageParameters.defaultStrongNameKey with - | None -> Assert.Fail() | Some x -> let token = x |> KeyStore.tokenOfKey |> List.map (fun x -> x.ToString("x2")) @@ -1073,7 +1013,6 @@ module AltCoverTests3 = "/sn"; Path.Combine(path, "Build/Recorder.snk") |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left (x, y) -> Assert.That (y, Is.SameAs options) Assert.That (x, Is.EqualTo "UsageError") Assert.That(CommandLine.error |> Seq.head, Is.EqualTo "--strongNameKey : specify this only once") @@ -1092,7 +1031,6 @@ module AltCoverTests3 = let input = [| "-sn"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left (x, y) -> Assert.That (y, Is.SameAs options) Assert.That (x, Is.EqualTo "UsageError") finally @@ -1110,7 +1048,6 @@ module AltCoverTests3 = let input = [| "-sn"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left (x, y) -> Assert.That (y, Is.SameAs options) Assert.That (x, Is.EqualTo "UsageError") finally @@ -1127,7 +1064,6 @@ module AltCoverTests3 = let input = [| "-sn" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left (x, y) -> Assert.That (y, Is.SameAs options) Assert.That (x, Is.EqualTo "UsageError") finally @@ -1146,7 +1082,6 @@ module AltCoverTests3 = "/k"; Path.Combine(path, "Build/Recorder.snk") |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right (x, y) -> Assert.That (y, Is.SameAs options) Assert.That (x, Is.Empty) let expected = CoverageParameters.keys.Keys @@ -1169,7 +1104,6 @@ module AltCoverTests3 = let input = [| "-k" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left (x, y) -> Assert.That (y, Is.SameAs options) Assert.That (x, Is.EqualTo "UsageError") finally @@ -1187,7 +1121,6 @@ module AltCoverTests3 = let input = [| "-k"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left (x, y) -> Assert.That (y, Is.SameAs options) Assert.That (x, Is.EqualTo "UsageError") finally @@ -1205,7 +1138,6 @@ module AltCoverTests3 = let input = [| "-k"; unique |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left (x, y) -> Assert.That (y, Is.SameAs options) Assert.That (x, Is.EqualTo "UsageError") finally @@ -1221,7 +1153,6 @@ module AltCoverTests3 = let input = [| "--localSource" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -1238,7 +1169,6 @@ module AltCoverTests3 = let input = [| "-l"; "--localSource" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1255,7 +1185,6 @@ module AltCoverTests3 = let input = [| "--visibleBranches" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -1272,7 +1201,6 @@ module AltCoverTests3 = let input = [| "-v"; "--visibleBranches" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1287,7 +1215,6 @@ module AltCoverTests3 = let input = [| "--showstatic" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -1300,7 +1227,6 @@ module AltCoverTests3 = let input = [| "--showstatic:+" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -1313,7 +1239,6 @@ module AltCoverTests3 = let input = [| "--showstatic:++" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -1326,7 +1251,6 @@ module AltCoverTests3 = let input = [| "--showstatic=-" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -1339,7 +1263,6 @@ module AltCoverTests3 = let input = [| "--showstatic:++"; "--showstatic:-" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1354,7 +1277,6 @@ module AltCoverTests3 = let input = [| "--showstatic:" + tag |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1370,7 +1292,6 @@ module AltCoverTests3 = let input = [| "-c"; "5" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -1389,7 +1310,6 @@ module AltCoverTests3 = let input = [| "-c"; "٣" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1409,7 +1329,6 @@ module AltCoverTests3 = let input = [| "-c"; "3"; "/c"; "5" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1430,7 +1349,6 @@ module AltCoverTests3 = let input = [| "-c"; "3"; "/c"; "x"; "--callContext"; "Hello, World!" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -1451,7 +1369,6 @@ module AltCoverTests3 = let input = [| "-c"; "9" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -1471,7 +1388,6 @@ module AltCoverTests3 = let input = [| "-c"; "99" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1489,7 +1405,6 @@ module AltCoverTests3 = let input = [| "-c"; " " |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1508,7 +1423,6 @@ module AltCoverTests3 = let input = [| "-c"; "3"; "/c"; "x"; "--callContext"; "Hello, World!" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1526,12 +1440,10 @@ module AltCoverTests3 = let input = [| "--reportFormat"; "ncover" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match CoverageParameters.theReportFormat with - | None -> Assert.Fail() | Some x -> Assert.That(x, Is.EqualTo AltCover.ReportFormat.NCover) finally CoverageParameters.theReportFormat <- None @@ -1545,12 +1457,10 @@ module AltCoverTests3 = let input = [| "--reportFormat"; "any" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) match CoverageParameters.theReportFormat with - | None -> Assert.Fail() | Some x -> Assert.That(x, Is.EqualTo AltCover.ReportFormat.OpenCover) finally CoverageParameters.theReportFormat <- None @@ -1564,7 +1474,6 @@ module AltCoverTests3 = let input = [| "--reportFormat=opencover"; "--reportFormat=ncover" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1581,7 +1490,6 @@ module AltCoverTests3 = let input = [| "--inplace" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -1598,7 +1506,6 @@ module AltCoverTests3 = let input = [| "--inplace"; "--inplace" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1615,7 +1522,6 @@ module AltCoverTests3 = let input = [| "--save" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -1632,7 +1538,6 @@ module AltCoverTests3 = let input = [| "--save"; "--save" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1649,7 +1554,6 @@ module AltCoverTests3 = let input = [| "--single" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -1666,7 +1570,6 @@ module AltCoverTests3 = let input = [| "--single"; "--single" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1684,7 +1587,6 @@ module AltCoverTests3 = let input = [| "--single" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1701,18 +1603,11 @@ module AltCoverTests3 = let input = [| "--linecover" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) Assert.That(CoverageParameters.coverstyle, Is.EqualTo CoverStyle.LineOnly) - match CoverageParameters.theReportFormat with -#if NETCOREAPP2_0 - | None -> () -#else - | None -> Assert.Pass() -#endif - | Some x -> Assert.Fail() + Assert.That(CoverageParameters.theReportFormat |> Option.isNone) finally CoverageParameters.coverstyle <- CoverStyle.All @@ -1726,13 +1621,11 @@ module AltCoverTests3 = let input = [| "--linecover"; "--reportFormat=opencover" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) Assert.That(CoverageParameters.coverstyle, Is.EqualTo CoverStyle.LineOnly) match CoverageParameters.theReportFormat with - | None -> Assert.Fail() | Some x -> Assert.That(x, Is.EqualTo AltCover.ReportFormat.OpenCover) finally CoverageParameters.theReportFormat <- None @@ -1748,13 +1641,11 @@ module AltCoverTests3 = let input = [| "--reportFormat=opencover"; "--linecover" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) Assert.That(CoverageParameters.coverstyle, Is.EqualTo CoverStyle.LineOnly) match CoverageParameters.theReportFormat with - | None -> Assert.Fail() | Some x -> Assert.That(x, Is.EqualTo AltCover.ReportFormat.OpenCover) finally CoverageParameters.theReportFormat <- None @@ -1769,7 +1660,6 @@ module AltCoverTests3 = let input = [| "--linecover"; "--linecover" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1786,7 +1676,6 @@ module AltCoverTests3 = let input = [| "--linecover"; "--branchcover" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1802,19 +1691,11 @@ module AltCoverTests3 = let input = [| "--branchcover" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) Assert.That(CoverageParameters.coverstyle, Is.EqualTo CoverStyle.BranchOnly) - match CoverageParameters.theReportFormat with - | None -> -#if NETCOREAPP2_0 - () -#else - Assert.Pass() -#endif - | Some x -> Assert.Fail() + Assert.That(CoverageParameters.theReportFormat |> Option.isNone) finally CoverageParameters.coverstyle <- CoverStyle.All @@ -1828,13 +1709,11 @@ module AltCoverTests3 = let input = [| "--branchcover"; "--reportFormat=opencover" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) Assert.That(CoverageParameters.coverstyle, Is.EqualTo CoverStyle.BranchOnly) match CoverageParameters.theReportFormat with - | None -> Assert.Fail() | Some x -> Assert.That(x, Is.EqualTo AltCover.ReportFormat.OpenCover) finally CoverageParameters.theReportFormat <- None @@ -1850,13 +1729,11 @@ module AltCoverTests3 = let input = [| "--reportFormat=opencover"; "--branchcover" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) Assert.That(CoverageParameters.coverstyle, Is.EqualTo CoverStyle.BranchOnly) match CoverageParameters.theReportFormat with - | None -> Assert.Fail() | Some x -> Assert.That(x, Is.EqualTo AltCover.ReportFormat.OpenCover) finally CoverageParameters.coverstyle <- CoverStyle.All @@ -1871,7 +1748,6 @@ module AltCoverTests3 = let input = [| "--branchcover"; "--branchcover" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1888,7 +1764,6 @@ module AltCoverTests3 = let input = [| "--branchcover"; "--linecover" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1904,7 +1779,6 @@ module AltCoverTests3 = let input = [| "--dropReturnCode" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -1921,7 +1795,6 @@ module AltCoverTests3 = let input = [| "--dropReturnCode"; "--dropReturnCode" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1937,7 +1810,6 @@ module AltCoverTests3 = let input = [| "--defer" |] let parse = CommandLine.parseCommandLine input options match parse with - | Left _ -> Assert.Fail() | Right(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.Empty) @@ -1954,7 +1826,6 @@ module AltCoverTests3 = let input = [| "--defer"; "--defer" |] let parse = CommandLine.parseCommandLine input options match parse with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -1969,7 +1840,6 @@ module AltCoverTests3 = let arg = (Guid.NewGuid().ToString(), Main.I.declareOptions()) let fail = Left arg match Main.I.processOutputLocation fail with - | Right _ -> Assert.Fail() | Left x -> Assert.That(x, Is.SameAs arg) [] @@ -1990,7 +1860,6 @@ module AltCoverTests3 = let arg = ([], options) let fail = Right arg match Main.I.processOutputLocation fail with - | Right _ -> Assert.Fail() | Left(x, y) -> Assert.That(y, Is.SameAs options) Assert.That(x, Is.EqualTo "UsageError") @@ -2009,7 +1878,7 @@ module AltCoverTests3 = Main.init() let options = Main.I.declareOptions() let saved = (Console.Out, Console.Error) - EntryPoint.toConsole() + CommandLine.toConsole() CommandLine.error <- [] try use stdout = new StringWriter() @@ -2025,7 +1894,6 @@ module AltCoverTests3 = let arg = (rest, options) let ok = Right arg match Main.I.processOutputLocation ok with - | Left _ -> Assert.Fail() | Right(x, y, z, t) -> Assert.That(x, Is.SameAs rest) y |> Seq.iter (fun y' -> Assert.That(y'.FullName, Is.EqualTo here)) @@ -2047,7 +1915,7 @@ module AltCoverTests3 = let OutputToReallyNewPlaceIsOK() = Main.init() let options = Main.I.declareOptions() - EntryPoint.toConsole() + CommandLine.toConsole() let saved = (Console.Out, Console.Error) CommandLine.error <- [] try @@ -2067,7 +1935,6 @@ module AltCoverTests3 = let ok = Right arg Assert.That(Directory.Exists there, Is.False) match Main.I.processOutputLocation ok with - | Left _ -> Assert.Fail() | Right(x, y, z, t) -> Assert.That(x, Is.SameAs rest) y |> Seq.iter (fun y' -> Assert.That(y'.FullName, Is.EqualTo here)) @@ -2105,7 +1972,6 @@ module AltCoverTests3 = let arg = (rest, options) let ok = Right arg match Main.I.processOutputLocation ok with - | Right _ -> Assert.Fail() | Left _ -> Assert.That(stdout.ToString(), Is.Empty) Assert.That(stderr.ToString(), Is.Empty) @@ -2142,7 +2008,6 @@ module AltCoverTests3 = let ok = Right arg Assert.That(Directory.Exists there, Is.False) match Main.I.processOutputLocation ok with - | Left _ -> Assert.Fail() | Right(x, y, z, t) -> Assert.That(x, Is.SameAs rest) y |> Seq.iter (fun y' -> Assert.That(y'.FullName, Is.EqualTo here)) @@ -2167,42 +2032,61 @@ module AltCoverTests3 = Main.init() let one = ref false let two = ref false - Main.I.imageLoadResilient (fun () -> one := true) (fun () -> two := true) + let set2 () = two := true + Main.I.imageLoadResilient (fun () -> one := true) set2 Assert.That(!one) Assert.That(!two, Is.False) + set2() + Assert.That(!two, Is.True) [] let ResilientHandlesIOException() = Main.init() let one = ref false let two = ref false - Main.I.imageLoadResilient (fun () -> - IOException("fail") |> raise - one := true) (fun () -> two := true) + let set1 f () = + f() + one := true + let io () = IOException("fail") |> raise + + Main.I.imageLoadResilient (set1 io) (fun () -> two := true) Assert.That(!one, Is.False) Assert.That(!two) + set1 ignore () + Assert.That(!one, Is.True) + [] let ResilientHandlesBadImageFormatException() = Main.init() let one = ref false let two = ref false - Main.I.imageLoadResilient (fun () -> - BadImageFormatException("fail") |> raise - one := true) (fun () -> two := true) + let set1 f () = + f() + one := true + let bif () = BadImageFormatException("fail") |> raise + + Main.I.imageLoadResilient (set1 bif) (fun () -> two := true) Assert.That(!one, Is.False) Assert.That(!two) + set1 ignore () + Assert.That(!one, Is.True) [] let ResilientHandlesArgumentException() = Main.init() let one = ref false let two = ref false - Main.I.imageLoadResilient (fun () -> - ArgumentException("fail") |> raise - one := true) (fun () -> two := true) + let set1 f () = + f() + one := true + let arg () = ArgumentException("fail") |> raise + + Main.I.imageLoadResilient (set1 arg) (fun () -> two := true) Assert.That(!one, Is.False) Assert.That(!two) + set1 ignore () + Assert.That(!one, Is.True) [] let PreparingNewPlaceShouldCopyEverything() = @@ -2212,9 +2096,10 @@ module AltCoverTests3 = |> Type.GetType).IsNotNull // because mono symbol-writing is broken, work around trying to // examine the instrumented files in a self-test run. - let here = if monoRuntime - then Path.Combine(SolutionRoot.location, "_Binaries/AltCover/Debug+AnyCPU") - else Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + let original = Path.Combine(SolutionRoot.location, "_Binaries/AltCover/Debug+AnyCPU") + let updated = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + let here = maybe monoRuntime original updated + let there = Path.Combine(here, Guid.NewGuid().ToString()) let toInfo = [ Directory.CreateDirectory there ] let fromInfo = [ DirectoryInfo(here) ] @@ -2258,19 +2143,9 @@ module AltCoverTests3 = [] let ShouldProcessTrailingArguments() = - // Hack for running while instrumented let where = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) - let path = - Path.Combine(where.Substring(0, where.IndexOf("_Binaries")), "_Mono/Sample1") -#if NETCOREAPP2_0 - - let path' = - if Directory.Exists path then path - else Path.Combine(where.Substring(0, where.IndexOf("_Binaries")), monoSample1) -#else - let path' = path -#endif - let files = Directory.GetFiles(path') + let path = Path.Combine(SolutionDir(), "_Mono/Sample1") + let files = Directory.GetFiles(path) let program = files @@ -2280,15 +2155,17 @@ module AltCoverTests3 = let saved = (Console.Out, Console.Error) let e0 = Console.Out.Encoding let e1 = Console.Error.Encoding - EntryPoint.toConsole() + CommandLine.toConsole() try use stdout = { new StringWriter() with member self.Encoding = e0 } + test <@ stdout.Encoding = e0 @> use stderr = { new StringWriter() with member self.Encoding = e1 } + test <@ stderr.Encoding = e1 @> Console.SetOut stdout Console.SetError stderr @@ -2298,8 +2175,8 @@ module AltCoverTests3 = let nonWindows = System.Environment.GetEnvironmentVariable("OS") <> "Windows_NT" let args = - if nonWindows then "mono" :: baseArgs - else baseArgs + maybe + nonWindows ("mono" :: baseArgs) baseArgs let r = CommandLine.processTrailingArguments args (DirectoryInfo(where)) Assert.That(r, Is.EqualTo 0) @@ -2307,8 +2184,8 @@ module AltCoverTests3 = let result = stdout.ToString() let quote = - if System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" then "\"" - else String.Empty + maybe (System.Environment.GetEnvironmentVariable("OS") = "Windows_NT") + "\"" String.Empty let expected = "Command line : '" + quote + args.Head + quote + " " @@ -2331,19 +2208,31 @@ module AltCoverTests3 = Main.init() let saved = Console.Out try + let unique = "__ImportModuleIsAsExpected" + let here = Assembly.GetExecutingAssembly().Location + |> Path.GetDirectoryName + |> Path.GetDirectoryName + let placeholder = Path.Combine(here, unique) + let info = Directory.CreateDirectory(placeholder) + let psh = Path.Combine(info.FullName, "AltCover.PowerShell.dll") + maybeDeleteFile psh + do use _dummy = File.Create psh + () + use stdout = new StringWriter() Console.SetOut stdout - EntryPoint.toConsole() + CommandLine.toConsole() let rc = AltCover.Main.effectiveMain [| "i" |] Assert.That(rc, Is.EqualTo 0) - let result = stdout.ToString().Replace("\r\n", "\n") + let result = stdout.ToString() + let expected = "Import-Module \"" - + Path.Combine - (Assembly.GetExecutingAssembly().Location - |> Path.GetDirectoryName, "AltCover.PowerShell.dll") + """" -""" - Assert.That - (result.Replace("\r\n", "\n"), Is.EqualTo(expected.Replace("\r\n", "\n"))) + + (Path.Combine + (here, unique + "/AltCover.PowerShell.dll") + |> Path.GetFullPath) + + "\"" + Environment.NewLine + test <@ result.Equals(expected, StringComparison.Ordinal) @> + //Assert.That(result, Is.EqualTo(expected)) finally Console.SetOut saved @@ -2354,7 +2243,7 @@ module AltCoverTests3 = try use stdout = new StringWriter() Console.SetOut stdout - EntryPoint.toConsole() + CommandLine.toConsole() let rc = AltCover.Main.effectiveMain [| "v" |] Assert.That(rc, Is.EqualTo 0) let result = stdout.ToString().Replace("\r\n", "\n") @@ -2397,6 +2286,34 @@ module AltCoverTests3 = finally Console.SetError saved +#if NETCOREAPP3_0 + [] + let TargetsPathIsAsExpected() = + Main.init() + let saved = (Console.Out, Console.Error) + try + use stdout = new StringWriter() + use stderr = new StringWriter() + Console.SetOut stdout + Console.SetError stderr + let main = + typeof.Assembly.GetType("AltCover.EntryPoint") + .GetMethod("main", BindingFlags.NonPublic ||| BindingFlags.Static) + let returnCode = main.Invoke(null, [| [| "TargetsPath" |] |]) + Assert.That(returnCode, Is.EqualTo 0) + test<@ stderr.ToString() |> String.IsNullOrEmpty@> + let here = Assembly.GetExecutingAssembly().Location + let expected = + Path.Combine( + here |> Path.GetDirectoryName, + "../../../build/netstandard2.0/altcover.global.targets") + |> Path.GetFullPath + test<@ stdout.ToString().Equals(expected.Replace("\\\\", "\\") + Environment.NewLine, StringComparison.Ordinal) @> + finally + Console.SetOut(fst saved) + Console.SetError(snd saved) +#endif + [] let ErrorResponseIsAsExpected() = Main.init() @@ -2406,7 +2323,7 @@ module AltCoverTests3 = Console.SetError stderr let unique = Guid.NewGuid().ToString() let main = - typeof.Assembly.GetType("AltCover.EntryPoint") + typeof.Assembly.GetType("AltCover.EntryPoint") .GetMethod("main", BindingFlags.NonPublic ||| BindingFlags.Static) let returnCode = main.Invoke(null, [| [| "-i"; unique |] |]) Assert.That(returnCode, Is.EqualTo 255) @@ -2468,26 +2385,29 @@ module AltCoverTests3 = test <@ synthetic = helptext @> - let ac = typeof.Assembly.Location - let eo = Path.Combine (Path.GetDirectoryName ac, "./eo/AltCover.resources.dll") - if File.Exists eo -#if !NETCOREAPP2_0 - && "Mono.Runtime" - |> Type.GetType - |> isNull +#if !MONO // Mono won't play nicely with Esperanto placeholder locale +#if NETCOREAPP2_0 + let dir = Path.Combine(SolutionRoot.location, + "_Binaries/AltCover.Engine/Debug+AnyCPU/netstandard2.0") +#else + let dir = Path.Combine(SolutionRoot.location, + "_Binaries/AltCover.Engine/Debug+AnyCPU/net472") #endif - then - let resources = - System.Resources.ResourceManager("AltCover.Strings.eo", Assembly.LoadFile eo) - let helptexteo = resources.GetString("HelpText").Replace("\r\n", "\n") - let syntheticeo = "AltCover " + - String.Join(" ", mainHelp).Replace("VALUE", "VALO") + - " [-- ] [...]\naŭ\nAltCover Runner " + - String.Join(" ", runnerHelp).Replace("VALUE", "VALO") + - " [-- ] [...]\naŭ\nAltCover ImportModule\naŭ\nAltCover Version\n" + - "aŭ, nur por la tutmonda ilo\nAltCover TargetsPath\n\n" + - "Vidu https://stevegilham.github.io/altcover/Usage por plenaj detaloj.\n" - test <@ syntheticeo = helptexteo @> + + let eo = Path.Combine (dir, "./eo/AltCover.Engine.resources.dll") + + let resources = + System.Resources.ResourceManager("AltCover.Strings.eo", Assembly.LoadFile eo) + let helptexteo = resources.GetString("HelpText").Replace("\r\n", "\n") + let syntheticeo = "AltCover " + + String.Join(" ", mainHelp).Replace("VALUE", "VALO") + + " [-- ] [...]\naŭ\nAltCover Runner " + + String.Join(" ", runnerHelp).Replace("VALUE", "VALO") + + " [-- ] [...]\naŭ\nAltCover ImportModule\naŭ\nAltCover Version\n" + + "aŭ, nur por la tutmonda ilo\nAltCover TargetsPath\n\n" + + "Vidu https://stevegilham.github.io/altcover/Usage por plenaj detaloj.\n" + test <@ syntheticeo = helptexteo @> +#endif finally Console.SetError saved @@ -2509,7 +2429,9 @@ module AltCoverTests3 = Main.init() Assert.That(AltCover.LoggingOptions.ActionAdapter null, Is.Not.Null) (AltCover.LoggingOptions.ActionAdapter null) "23" - Assert.That(AltCover.LoggingOptions.ActionAdapter(new Action(ignore)), Is.Not.Null) + let ignoreAction = new Action(ignore) + ignoreAction.Invoke("ignoreAction") + Assert.That(AltCover.LoggingOptions.ActionAdapter(ignoreAction), Is.Not.Null) let mutable x = String.Empty let f = (fun s -> x <- s) (AltCover.LoggingOptions.ActionAdapter(new Action(f))) "42" @@ -2520,6 +2442,16 @@ module AltCoverTests3 = AltCover.LoggingOptions.Create().Echo "32" let o = Logging() + o.Info <- null + o.Warn <- null + o.Failure <- null + o.Echo <- null + + Assert.That (o.Info, Is.Null) + Assert.That (o.Warn, Is.Null) + Assert.That (o.Failure, Is.Null) + Assert.That (o.Echo, Is.Null) + let p = AltCover.LoggingOptions.Translate o Assert.That(p.Warn, Is.Not.Null) let p2 = AltCover.LoggingOptions.Abstract o @@ -2737,10 +2669,12 @@ module AltCoverTests3 = use stdout = { new StringWriter() with member self.Encoding = e0 } + test <@ stdout.Encoding = e0 @> use stderr = { new StringWriter() with member self.Encoding = e1 } + test <@ stderr.Encoding = e1 @> Console.SetOut stdout Console.SetError stderr @@ -2757,7 +2691,6 @@ module AltCoverTests3 = Console.SetOut(fst saved) Console.SetError(snd saved) -#if NETCOREAPP2_0 [] let RunSettingsFailsIfCollectorNotFound() = Main.init() @@ -2843,5 +2776,4 @@ module AltCoverTests3 = Assembly.GetExecutingAssembly().Location, String.Empty, Assembly.GetExecutingAssembly().FullName)).Replace("\r", String.Empty))) -#endif // Recorder.fs => Recorder.Tests \ No newline at end of file diff --git a/Tests/XTests.fs b/Tests/XTests.fs index bb958e790..9aadada24 100644 --- a/Tests/XTests.fs +++ b/Tests/XTests.fs @@ -11,29 +11,10 @@ open System.Xml.Linq open AltCover open Mono.Options open Newtonsoft.Json.Linq -open Swensen.Unquote -module AltCoverXTests = - let test' x message = - try - test x - with fail -> - AssertionFailedException(message + Environment.NewLine + fail.Message, fail) - |> raise - - let Hack() = - let where = Assembly.GetExecutingAssembly().Location +#nowarn "25" - let dir = - where - |> Path.GetDirectoryName - |> Path.GetFileName - match dir.IndexOf "__" with - | 0 -> "/.." - | _ -> String.Empty - - let SolutionDir() = - SolutionRoot.location +module AltCoverXTests = let monoSample1path = Path.Combine(SolutionDir(), "_Mono/Sample1/Sample1.exe") @@ -85,8 +66,7 @@ module AltCoverXTests = (a1.Name.ToString() + " : " + r.ToString() + " -> document") | "visitcount" -> let expected = - if zero then "0" - else a2.Value + maybe zero "0" a2.Value test' <@ expected = a1.Value @> (r.ToString() + " -> visitcount") | _ -> test' <@ a1.Value.Replace("\\", "/") = a2.Value.Replace("\\", "/") @> @@ -141,8 +121,7 @@ module AltCoverXTests = (a1.Name.ToString() + " : " + r.ToString() + " -> document") | "vc" -> let expected = - if zero then "0" - else a2.Value + maybe zero "0" a2.Value test' <@ expected = a1.Value @> (r.ToString() + " -> visitcount") | _ -> test' <@ a1.Value = a2.Value @> @@ -469,29 +448,21 @@ module AltCoverXTests = let subject = Args.itemList String.Empty null test <@ subject |> List.isEmpty @> + [] + let ValidateAssemblyOption() = + test <@ Assembly.GetExecutingAssembly() + |> Some + |> Main.I.isMSBuild + |> not @> + [] let ADotNetDryRunLooksAsExpected() = let where = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) let here = SolutionDir() let path = Path.Combine(here, "_Binaries/Sample4/Debug+AnyCPU/netcoreapp2.1") let key0 = Path.Combine(here, "Build/SelfTest.snk") -#if NETCOREAPP2_1 - let input = - if Directory.Exists path then path - else - Path.Combine - (where.Substring(0, where.IndexOf("_Binaries")), - "../_Binaries/Sample4/Debug+AnyCPU/netcoreapp2.1") - - let key = - if File.Exists key0 then key0 - else - Path.Combine - (where.Substring(0, where.IndexOf("_Binaries")), "../Build/SelfTest.snk") -#else let input = path let key = key0 -#endif let unique = Guid.NewGuid().ToString() let unique' = Path.Combine(where, Guid.NewGuid().ToString()) Directory.CreateDirectory unique' |> ignore @@ -506,6 +477,7 @@ module AltCoverXTests = let save2 = (Output.info, Output.error) try Output.error <- CommandLine.writeErr + String.Empty |> Output.error Output.info <- CommandLine.writeOut use stdout = new StringWriter() use stderr = new StringWriter() @@ -539,51 +511,17 @@ module AltCoverXTests = test <@ (File.Exists report) @> test <@ (File.Exists(report + ".acv")) @> - let pdb = Path.ChangeExtension(Assembly.GetExecutingAssembly().Location, ".pdb") - let isNT = System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" - let isWindows = -#if NETCOREAPP2_1 - true -#else - isNT -#endif + let expected = [ "AltCover.Recorder.g.dll" -#if NETCOREAPP2_1 -#else "AltCover.Recorder.g.pdb"; -#endif "Sample4.deps.json"; "Sample4.dll"; "Sample4.runtimeconfig.dev.json"; "Sample4.runtimeconfig.json"; "Sample4.pdb"; "xunit.runner.reporters.netcoreapp10.dll"; "xunit.runner.utility.netcoreapp10.dll"; "xunit.runner.visualstudio.dotnetcore.testadapter.dll" ] -#if NETCOREAPP2_1 -#else - |> List.filter (fun f -> isWindows || f = "Sample4.pdb" || - f = "Sample1.exe.mdb" || - (f.EndsWith("db", StringComparison.Ordinal) |> not)) -#endif - let theFiles = - if pdb - |> File.Exists - |> not - then - List.concat [ expected - [ -#if NETCOREAPP2_1 -#else - "AltCover.Recorder.g.dll.mdb"; -#endif - "Sample4.dll.mdb" ] ] - |> List.filter (fun f -> f.EndsWith(".g.pdb", StringComparison.Ordinal) |> not) - |> List.filter - (fun f -> - isWindows || f = "Sample4.pdb" - || (f.EndsWith("db", StringComparison.Ordinal) |> not)) - |> List.sortBy (fun f -> f.ToUpperInvariant()) - else expected |> List.sortBy (fun f -> f.ToUpperInvariant()) + expected |> List.sortBy (fun f -> f.ToUpperInvariant()) let actualFiles = Directory.GetFiles(output) @@ -624,7 +562,6 @@ module AltCoverXTests = let reset = match existingDependencies with - | None -> Set.empty | Some p -> (p.Value :?> JObject).Properties() |> Seq.map (fun p -> p.Name) @@ -667,6 +604,7 @@ module AltCoverXTests = Main.init() try Output.error <- CommandLine.writeErr + String.Empty |> Output.error Output.info <- CommandLine.writeOut use stdout = new StringWriter() use stderr = new StringWriter() @@ -700,40 +638,11 @@ module AltCoverXTests = test <@ CoverageParameters.keys.Count = 2 @> test <@ File.Exists report @> - let pdb = Path.ChangeExtension(Assembly.GetExecutingAssembly().Location, ".pdb") - let isWindows = -#if NETCOREAPP2_1 - true -#else - System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" -#endif let theFiles = - if File.Exists(pdb) then [ "AltCover.Recorder.g.dll"; -#if NETCOREAPP2_1 -#else "AltCover.Recorder.g.pdb" -#endif "Sample1.exe"; "Sample1.exe.mdb" ] - // See Instrument.WriteAssembly -#if NETCOREAPP2_1 -#else - |> List.filter (fun f -> isWindows || f = "Sample1.exe.mdb" || - (f.EndsWith("db", StringComparison.Ordinal) |> not)) -#endif - else - [ "AltCover.Recorder.g.dll"; -#if NETCOREAPP2_1 -#else - "AltCover.Recorder.g.dll.mdb"; -#endif - "Sample1.exe"; - "Sample1.exe.mdb" ] - |> List.filter - (fun f -> - isWindows || f = "Sample1.exe.mdb" - || (f.EndsWith("db", StringComparison.Ordinal) |> not)) let actual = Directory.GetFiles(output) @@ -761,18 +670,11 @@ module AltCoverXTests = [] let AfterAssemblyCommitsThatAssembly() = - let hack = Path.Combine(SolutionDir(), "_Binaries/AltCover.Tests/Debug+AnyCPU") - let local = Assembly.GetExecutingAssembly().Location |> Path.GetDirectoryName - - let where = - if local.IndexOf("_Binaries") > 0 then local - else hack - - let path = Path.Combine(where + Hack(), "Sample4.dll") + let path = Path.Combine(AltCoverTests.dir, "Sample4.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let unique = Guid.NewGuid().ToString() - let output = Path.Combine(Path.GetDirectoryName(where), unique) + let output = Path.Combine(Path.GetDirectoryName(AltCoverTests.dir), unique) Directory.CreateDirectory(output) |> ignore let saved = CoverageParameters.theOutputDirectories |> Seq.toList try @@ -784,15 +686,14 @@ module AltCoverXTests = test' <@ Object.ReferenceEquals(result, input) @> "result differs" let created = Path.Combine(output, "Sample4.dll") test' <@ File.Exists created@> (created + " not found") - let pdb = Path.ChangeExtension(Assembly.GetExecutingAssembly().Location, ".pdb") - if File.Exists pdb then - let isWindows = + + let isWindows = #if NETCOREAPP2_1 - true + true #else - System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" + System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" #endif - test' <@ + test' <@ isWindows |> not || File.Exists(Path.ChangeExtension(created, ".pdb")) @> @@ -821,26 +722,18 @@ module AltCoverXTests = let created = Path.Combine(output, "Sample1.exe") test' <@ File.Exists created @> (created + " not found") let isDotNet = System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" - if isDotNet then - test' <@ File.Exists(created + ".mdb") @> (created + ".mdb not found") + test' <@ (isDotNet |> not) || File.Exists(created + ".mdb") @> (created + ".mdb not found") finally CoverageParameters.theOutputDirectories.Clear() CoverageParameters.theOutputDirectories.AddRange saved [] let FinishCommitsTheRecordingAssembly() = - let hack = Path.Combine(SolutionDir(), "_Binaries/AltCover.Tests/Debug+AnyCPU") - let local = Assembly.GetExecutingAssembly().Location |> Path.GetDirectoryName - - let where = - if local.IndexOf("_Binaries") > 0 then local - else hack - - let path = Path.Combine(where + Hack(), "Sample4.dll") + let path = Path.Combine(AltCoverTests.dir, "Sample4.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path ProgramDatabase.readSymbols def let unique = Guid.NewGuid().ToString() - let output = Path.Combine(Path.GetDirectoryName(where), unique) + let output = Path.Combine(Path.GetDirectoryName(AltCoverTests.dir), unique) Directory.CreateDirectory(output) |> ignore let saved = CoverageParameters.theOutputDirectories |> Seq.toList try @@ -851,15 +744,13 @@ module AltCoverXTests = test <@ result.RecordingAssembly |> isNull @> let created = Path.Combine(output, "Sample4.dll") test' <@ File.Exists created @> (created + " not found") - let pdb = Path.ChangeExtension(Assembly.GetExecutingAssembly().Location, ".pdb") - if File.Exists pdb then - let isWindows = + let isWindows = #if NETCOREAPP2_1 - true + true #else - System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" + System.Environment.GetEnvironmentVariable("OS") = "Windows_NT" #endif - test' <@ isWindows |> not || + test' <@ isWindows |> not || File.Exists (Path.ChangeExtension(created, ".pdb")) @> (created + " pdb not found") finally CoverageParameters.theOutputDirectories.Clear() @@ -868,14 +759,7 @@ module AltCoverXTests = [] let ShouldDoCoverage() = let start = Directory.GetCurrentDirectory() - let hack = Path.Combine(SolutionDir(), "_Binaries/AltCover.Tests/Debug+AnyCPU") - let local = Assembly.GetExecutingAssembly().Location |> Path.GetDirectoryName - - let here = - if local.IndexOf("_Binaries") > 0 then local - else hack - - let where = Path.Combine(here, Guid.NewGuid().ToString()) + let where = Path.Combine(AltCoverTests.dir, Guid.NewGuid().ToString()) Directory.CreateDirectory(where) |> ignore Directory.SetCurrentDirectory where let create = Path.Combine(where, "AltCover.Recorder.g.dll") @@ -885,7 +769,7 @@ module AltCoverXTests = then try CoverageParameters.theReportFormat <- Some ReportFormat.NCover - let from = Path.Combine(here, "AltCover.Recorder.dll") + let from = Path.Combine(AltCoverTests.dir, "AltCover.Recorder.dll") let updated = Instrument.I.prepareAssembly from Instrument.I.writeAssembly updated create finally @@ -903,6 +787,8 @@ module AltCoverXTests = test <@ rest = [ "test"; "1" ] @> 255 + test <@ payload [ "test"; "1" ] = 255 @> + let monitor (hits : Dictionary>) (token : string) _ _ = test' <@ token = codedreport@> "should be default coverage file" diff --git a/ThirdParty/BlackFox.CommandLine.dll b/ThirdParty/BlackFox.CommandLine.dll index 8bd8dbc1f..7517a0b58 100644 Binary files a/ThirdParty/BlackFox.CommandLine.dll and b/ThirdParty/BlackFox.CommandLine.dll differ diff --git a/ThirdParty/BlackFox.CommandLine.txt b/ThirdParty/BlackFox.CommandLine.txt new file mode 100644 index 000000000..5e64b1e97 --- /dev/null +++ b/ThirdParty/BlackFox.CommandLine.txt @@ -0,0 +1,3 @@ +ildasm /all /out=BlackFox.CommandLine.il BlackFox.CommandLine.dll +-- patch F# version -- .ver 4:4:1:0 to .ver 4:7:0:0 +ilasm /dll /output=..\ThirdParty\BlackFox.CommandLine.dll /key=..\ThirdParty\ThirdParty.snk BlackFox.CommandLine.il \ No newline at end of file diff --git a/ThirdParty/Mono.Options.dll b/ThirdParty/Mono.Options.dll index 431eed478..68a27563d 100644 Binary files a/ThirdParty/Mono.Options.dll and b/ThirdParty/Mono.Options.dll differ diff --git a/ThirdParty/ziplib.net20/ICSharpCode.SharpZipLib.dll b/ThirdParty/ziplib.net20/ICSharpCode.SharpZipLib.dll new file mode 100644 index 000000000..cb4809d83 Binary files /dev/null and b/ThirdParty/ziplib.net20/ICSharpCode.SharpZipLib.dll differ diff --git a/ThirdParty/ziplib.net20/ICSharpCode.SharpZipLib.pdb b/ThirdParty/ziplib.net20/ICSharpCode.SharpZipLib.pdb new file mode 100644 index 000000000..8b2e53709 Binary files /dev/null and b/ThirdParty/ziplib.net20/ICSharpCode.SharpZipLib.pdb differ diff --git a/WeakNameTests/altcover.weaknametests.core.fsproj b/ValidateGendarmeEmulation/AltCover.ValidateGendarmeEmulation.fsproj similarity index 70% rename from WeakNameTests/altcover.weaknametests.core.fsproj rename to ValidateGendarmeEmulation/AltCover.ValidateGendarmeEmulation.fsproj index 04d282931..bc50cee64 100644 --- a/WeakNameTests/altcover.weaknametests.core.fsproj +++ b/ValidateGendarmeEmulation/AltCover.ValidateGendarmeEmulation.fsproj @@ -1,23 +1,23 @@ - netcoreapp3.0;net47 + netcoreapp3.0;net472 false $(USERPROFILE)\.nuget\packages $(HOME)/.nuget/packages - ..\packages\altcode.gendarme\2020.6.12.11211-pre-release\tools\ - $(NuGetCache)/altcode.gendarme-tool/2020.6.12.11211-pre-release/tools/netcoreapp2.1/any/ + ..\packages\altcode.gendarme\2020.7.21.12091-pre-release\tools\ + $(NuGetCache)/altcode.gendarme-tool/2020.7.21.12091-pre-release/tools/netcoreapp2.1/any/ false - AltCover.WeakName.Testing + AltCover.ValidateGendarmeEmulation $(SolutionDir)_Binaries/$(AssemblyName)/$(Configuration)+$(Platform)/ $(SolutionDir)_Intermediate/$(AssemblyName)/$(Configuration)+$(Platform)/ - TRACE;DEBUG;CODE_ANALYSIS;WEAKNAME + TRACE;DEBUG;CODE_ANALYSIS;ValidateGendarmeEmulation - TRACE;WEAKNAME + TRACE;ValidateGendarmeEmulation @@ -26,7 +26,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + $(GendarmeToolDir)Gendarme.Framework.dll @@ -43,10 +43,10 @@ $(GendarmeToolDir)Mono.Cecil.Pdb.dll - + ..\ThirdParty\Unquote.dll - + @@ -57,34 +57,30 @@ AssemblyVersion.fs - - Augment.fs - - - Gendarme.fs - + + + - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + all runtime; build; native; contentfiles; analyzers - + - - + \ No newline at end of file diff --git a/WeakNameTests/App.config b/ValidateGendarmeEmulation/App.config similarity index 100% rename from WeakNameTests/App.config rename to ValidateGendarmeEmulation/App.config diff --git a/ValidateGendarmeEmulation/Program.fs b/ValidateGendarmeEmulation/Program.fs new file mode 100644 index 000000000..e133f77a5 --- /dev/null +++ b/ValidateGendarmeEmulation/Program.fs @@ -0,0 +1,37 @@ +namespace Tests + +#if NETCOREAPP3_0 + +open Expecto + +module ExpectoMain = + + let regular = [ + Tests.TestCommonTests.ExerciseItAll, "TestCommonTests.ExerciseItAll" + Tests.TestCommonTests.SelfTest, "TestCommonTests.SelfTest" + Tests.ValidateGendarmeEmulation.DoSelfTest, "ValidateGendarmeEmulation.DoSelfTest" + Tests.ValidateGendarmeEmulation.ShouldMatchGendarmeComplexityInAltCover, "ValidateGendarmeEmulation.ShouldMatchGendarmeComplexityInAltCover" + Tests.ValidateGendarmeEmulation.ShouldMatchGendarmeComplexityInSamples, "ValidateGendarmeEmulation.ShouldMatchGendarmeComplexityInSamples" + Tests.ValidateGendarmeEmulation.ShouldMatchGendarmeComplexityInMonoSamples, "ValidateGendarmeEmulation.ShouldMatchGendarmeComplexityInMonoSamples" + Tests.ValidateGendarmeEmulation.GratuitousCoverage, "ValidateGendarmeEmulation.GratuitousCoverage" + ] + + let specials = + [] + + let consistencyCheck() = + ExpectoTestCommon.consistencyCheck regular [] + + [] + let tests = + ExpectoTestCommon.makeTests "AltCover.ValidateGendarmeEmulation" + consistencyCheck regular specials + ignore + +module UnitTestStub = + [] + let unitTestStub argv = + let writeResults = TestResults.writeNUnitSummary ("AltCover.ValidateGendarmeEmulation.TestResults.xml", "AltCover.ValidateGendarmeEmulation") + let config = defaultConfig.appendSummaryHandler writeResults + runTestsWithArgs config argv ExpectoMain.tests +#endif \ No newline at end of file diff --git a/WeakNameTests/Tests.fs b/ValidateGendarmeEmulation/Tests.fs similarity index 78% rename from WeakNameTests/Tests.fs rename to ValidateGendarmeEmulation/Tests.fs index e5ff1738b..feced418a 100644 --- a/WeakNameTests/Tests.fs +++ b/ValidateGendarmeEmulation/Tests.fs @@ -1,21 +1,10 @@ -namespace WeakNameTests +namespace Tests open System open System.IO -open System.Reflection open AltCover open Mono.Cecil -open Swensen.Unquote - -#if NETCOREAPP3_0 -[] -type TestAttribute() = class - inherit Attribute() -end -#else -type TestAttribute = NUnit.Framework.TestAttribute -#endif module Rocks = let rec GetAllTypes(t : TypeDefinition) = @@ -24,14 +13,31 @@ module Rocks = |> Seq.cast |> Seq.toList)) -module AltCoverTests = +module ValidateGendarmeEmulation = + let importantItems (n, e, r) = + maybe (r <> e) (Some(n, e, r)) None + + let stringify x = + match x with + | Some (n, e, r) -> Some (sprintf "Expected %d got %d in %s" e r n) + | None -> None + + let seqStringify x = + x |> Seq.map stringify + + [] + let DoSelfTest () = + test <@ importantItems (1, 2, 3) = Some (1, 2, 3) @> + test <@ importantItems (1, 1, 1) |> Option.isNone @> + test <@ Some ("1", 2, 3) |> stringify = Some "Expected 2 got 3 in 1" @> + test <@ None |> stringify |> Option.isNone @> [] let ShouldMatchGendarmeComplexityInAltCover() = let path = Path.Combine( SolutionRoot.location, - "_Binaries/AltCover/Debug+AnyCPU/netcoreapp2.0/AltCover.dll") + "_Binaries/AltCover/Debug+AnyCPU/netcoreapp2.0/AltCover.Engine.dll") let def = Mono.Cecil.AssemblyDefinition.ReadAssembly path let failures = @@ -41,7 +47,7 @@ module AltCoverTests = Gendarme.Rules.Maintainability.AvoidComplexMethodsRule.GetCyclomaticComplexity m, Gendarme.cyclomaticComplexity m)) >> (fun (n, e, r) -> - if r <> e then Some(n, e, r) else None)) + importantItems(n, e, r))) (def.MainModule.Types |> Seq.cast |> Seq.map Rocks.GetAllTypes @@ -49,10 +55,8 @@ module AltCoverTests = |> List.map (fun t -> t.Methods |> Seq.cast) |> Seq.concat |> Seq.sortBy (fun m -> m.FullName))) - |> Seq.filter Option.isSome - |> Seq.map (fun x -> - let n, e, r = Option.get x - sprintf "Expected %d got %d in %s" e r n) + |> seqStringify + |> Seq.choose id |> Seq.toList test <@ List.isEmpty failures @> @@ -71,7 +75,7 @@ module AltCoverTests = Gendarme.Rules.Maintainability.AvoidComplexMethodsRule.GetCyclomaticComplexity m, Gendarme.cyclomaticComplexity m)) >> (fun (n, e, r) -> - if r <> e then Some(n, e, r) else None)) + importantItems(n, e, r))) (def.MainModule.Types |> Seq.cast |> Seq.map Rocks.GetAllTypes @@ -79,10 +83,8 @@ module AltCoverTests = |> List.map (fun t -> t.Methods |> Seq.cast) |> Seq.concat |> Seq.sortBy (fun m -> m.FullName))) - |> Seq.filter Option.isSome - |> Seq.map (fun x -> - let n, e, r = Option.get x - sprintf "Expected %d got %d in %s" e r n) + |> seqStringify + |> Seq.choose id |> Seq.toList test <@ List.isEmpty failures @> @@ -102,7 +104,7 @@ module AltCoverTests = Gendarme.Rules.Maintainability.AvoidComplexMethodsRule.GetCyclomaticComplexity m, Gendarme.cyclomaticComplexity m)) >> (fun (n, e, r) -> - if r <> e then Some(n, e, r) else None)) + importantItems(n, e, r))) (def.MainModule.Types |> Seq.cast |> Seq.map Rocks.GetAllTypes @@ -110,10 +112,8 @@ module AltCoverTests = |> List.map (fun t -> t.Methods |> Seq.cast) |> Seq.concat |> Seq.sortBy (fun m -> m.FullName))) - |> Seq.filter Option.isSome - |> Seq.map (fun x -> - let n, e, r = Option.get x - sprintf "Expected %d got %d in %s" e r n) + |> seqStringify + |> Seq.choose id |> Seq.toList test <@ List.isEmpty failures @> diff --git a/WeakNameTests/Program.fs b/WeakNameTests/Program.fs deleted file mode 100644 index 55bdf9b99..000000000 --- a/WeakNameTests/Program.fs +++ /dev/null @@ -1,84 +0,0 @@ -namespace AltCover.Expecto.Tests - -#if NETCOREAPP3_0 - -open Expecto -open Mono.Cecil -open Mono.Cecil.Cil -open Mono.Cecil.Rocks -open Swensen.Unquote - -module TestMain = - let sync = System.Object() - - let regular = [ - WeakNameTests.AltCoverTests.ShouldMatchGendarmeComplexityInAltCover, "WeakNameTests.ShouldMatchGendarmeComplexityInAltCover" - WeakNameTests.AltCoverTests.ShouldMatchGendarmeComplexityInSamples, "WeakNameTests.ShouldMatchGendarmeComplexityInSamples" - WeakNameTests.AltCoverTests.ShouldMatchGendarmeComplexityInMonoSamples, "WeakNameTests.ShouldMatchGendarmeComplexityInMonoSamples" - WeakNameTests.AltCoverTests.GratuitousCoverage, "WeakNameTests.GratuitousCoverage" - ] - - let specials = - [] - - let consistencyCheck() = - let here = System.Reflection.Assembly.GetExecutingAssembly().Location - let def = Mono.Cecil.AssemblyDefinition.ReadAssembly(here) - - let testMethods = def.MainModule.GetTypes() - |> Seq.collect (fun t -> t.Methods) - |> Seq.filter (fun m -> m.CustomAttributes |> isNull |> not) - |> Seq.filter (fun m -> m.CustomAttributes |> Seq.exists (fun a -> a.AttributeType.Name = "TestAttribute")) - |> Seq.map (fun m -> m.DeclaringType.FullName + "::" + m.Name) - - let lookup = def.MainModule.GetAllTypes() - |> Seq.filter (fun t -> t.Methods |> Seq.exists(fun m -> m.Name = "Invoke")) - |> Seq.map (fun t -> (t.FullName.Replace("/","+"), t.Methods |> Seq.find(fun m -> m.Name = "Invoke"))) - |> Map.ofSeq - - // This is a special case where the test assembly is itself instrumented - // so have to allow for calls to AltCover.Recorder.Instance::Visit - // having been injected into the local function reference - let calls = regular - |> List.map (fst - >> (fun f -> f.GetType().FullName.Replace("/","+")) - >> (fun f -> Map.find f lookup) - >> (fun f -> f.Body.Instructions - |> Seq.find (fun i -> if i.OpCode = OpCodes.Call - then match i.Operand with - | :? MethodDefinition -> true - | _ -> false - else false)) - >> (fun i -> let m = (i.Operand :?> MethodDefinition) - m.DeclaringType.FullName + "::" + m.Name)) - |> Set.ofList - - let omitted = testMethods - |> Seq.filter (fun t -> (Set.contains t calls) |> not) - |> Seq.toList - - // cover all but the special cases - try - test <@ omitted |> List.isEmpty @> - with - | x -> let t = sprintf "testMethods = %A" testMethods - let l = sprintf "calls = %A" calls - let defname = def.MainModule.Name - System.String.Join(System.Environment.NewLine, [t; l; defname; x.Message]) - |> NUnit.Framework.AssertionException - |> raise - - [] - let tests = - testList "AltCover.WeakName.Tests" - <| ((((consistencyCheck, "ConsistencyCheck") :: regular) - |> List.map (fun (f,name) -> testCase name (fun () -> lock sync f))) - @ specials) - -module Program = - [] - let main argv = - let writeResults = TestResults.writeNUnitSummary ("AltCover.WeakName.TestResults.xml", "AltCover.WeakName.Tests") - let config = defaultConfig.appendSummaryHandler writeResults - runTestsWithArgs config argv TestMain.tests -#endif \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml index 0063d1d90..864f9cb4e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -13,7 +13,7 @@ nuget: install: - cinst gtksharp # SDK version fix - - cinst dotnetcore-sdk --version 3.1.301 + - cinst dotnetcore-sdk --version 3.1.403 build_script: - ps: >- $ErrorActionPreference = 'Continue' @@ -34,11 +34,11 @@ build_script: test: assemblies: only: - - _Binaries\AltCover.Recorder.Tests\Debug+AnyCPU\net35\AltCover.Recorder.Tests.dll - - _Binaries\AltCover.Recorder.Tests\Debug+AnyCPU\net47\AltCover.Recorder.Tests.dll - - _Binaries\AltCover.Tests\Debug+AnyCPU\net47\AltCover.Tests.dll - - _Binaries\AltCover.Tests.Visualizer\Debug+AnyCPU\net471\AltCover.Tests.Visualizer.dll - - _Binaries\AltCover.WeakName.Tests\Debug+AnyCPU\net47\AltCover.WeakName.Tests.dll + - _Binaries\AltCover.Recorder.Tests\Debug+AnyCPU\net472\AltCover.Recorder.Tests.dll + - _Binaries\AltCover.Api.Tests\Debug+AnyCPU\net472\AltCover.Api.Tests.dll + - _Binaries\AltCover.Tests\Debug+AnyCPU\net472\AltCover.Tests.dll + - _Binaries\AltCover.Tests.Visualizer\Debug+AnyCPU\net472\AltCover.Tests.Visualizer.dll + - _Binaries\AltCover.ValidateGendarmeEmulation\Debug+AnyCPU\net472\AltCover.ValidateGendarmeEmulation.dll artifacts: - path: _Packagin*\*.nupkg name: NuGet diff --git a/docs/AltCover.Fake.DotNet.Testing.AltCover/BuildSample_1.fsx b/docs/AltCover.Fake.DotNet.Testing.AltCover/BuildSample_1.fsx new file mode 100644 index 000000000..a6d7c78f8 --- /dev/null +++ b/docs/AltCover.Fake.DotNet.Testing.AltCover/BuildSample_1.fsx @@ -0,0 +1,18 @@ +#r "paket: +nuget AltCover.Fake >= 7.0 //" + +let prep = AltCoverFake.DotNet.Testing.AltCover.PrepareOptions.Primitive + { AltCoverFake.DotNet.Testing.Primitive.PrepareOptions.Create() with + XmlReport = "./__UnitTestWithAltCover.xml" + OutputDirectories = + [| "./__UnitTestWithAltCover" |] + StrongNameKey = "./Build/Infrastructure.snk" + ReportFormat = "NCover" + InPlace = false + Save = false } + |> AltCoverFake.DotNet.Testing.AltCoverCommand.Prepare +{ AltCoverFake.DotNet.Testing.AltCoverCommand.Options.Create prep with + ToolPath = "altcover" + ToolType = Fake.DotNet.ToolType.CreateFullFramework() + WorkingDirectory = "./__UnitTestWithAltCover" } +|> AltCoverFake.DotNet.Testing.AltCoverCommand.run diff --git a/docs/AltCover.Fake.DotNet.Testing.AltCover/BuildSample_2.fsx b/docs/AltCover.Fake.DotNet.Testing.AltCover/BuildSample_2.fsx new file mode 100644 index 000000000..cfcaa1a0c --- /dev/null +++ b/docs/AltCover.Fake.DotNet.Testing.AltCover/BuildSample_2.fsx @@ -0,0 +1,17 @@ +#r "paket: +nuget Fake.DotNet.Cli >= 5.20.3 +nuget AltCover.Fake >= 7.0 //" + +let ForceTrue = AltCoverFake.DotNet.Testing.DotNet.CLIOptions.Force true + +let prep = AltCoverFake.DotNet.Testing.Primitive.PrepareOptions.Create() +let coll = AltCoverFake.DotNet.Testing.Primitive.CollectOptions.Create() + +let prep1 = { prep with CallContext = [ "[Fact]"; "0" ] + AssemblyFilter = [| "xunit" |] } + +let prepare = AltCoverFake.DotNet.Testing.AltCover.PrepareOptions.Primitive prep1 +let collect = AltCoverFake.DotNet.Testing.AltCover.CollectOptions.Primitive { coll with SummaryFormat = "+B" } + +open AltCoverFake.DotNet.DotNet // extension method WithAltCoverOptions +Fake.DotNet.DotNet.test (fun to' -> to'.WithAltCoverOptions prepare collect ForceTrue) "dotnettest.fsproj" \ No newline at end of file diff --git a/docs/AltCover.Fake.DotNet.Testing.AltCover/index.md b/docs/AltCover.Fake.DotNet.Testing.AltCover/index.md index 881778cc2..bdfa2c825 100644 --- a/docs/AltCover.Fake.DotNet.Testing.AltCover/index.md +++ b/docs/AltCover.Fake.DotNet.Testing.AltCover/index.md @@ -31,38 +31,49 @@ Make one of these * [`module AltCoverCommand`](AltCoverCommand-fsapidoc) -- This represents the various `AltCover` operations available, and their execution from a Fake script. ### Example +(based on [the AltCover build script here](https://github.com/SteveGilham/altcover/blob/master/Build/targets.fsx#L984-L1004)) + ``` -open AltCover_Fake.DotNet.Testing -... - let prep = - { AltCover.PrepareOptions.Create() with XmlReport = xaltReport - OutputDirectory = "./__UnitTestWithAltCover" - StrongNameKey = keyfile - OpenCover = false - InPlace = false - Save = false } - |> AltCoverCommand.Prepare - { AltCoverCommand.Options.Create prep with ToolPath = altcover - ToolType = AltCover.ToolType.Framework - WorkingDirectory = xtestDirectory } - |> AltCoverCommand.run +#r "paket: +nuget AltCover.Fake >= 7.0 //" + +let prep = AltCoverFake.DotNet.Testing.AltCover.PrepareOptions.Primitive + { AltCoverFake.DotNet.Testing.Primitive.PrepareOptions.Create() with + XmlReport = "./__UnitTestWithAltCover.xml" + OutputDirectories = + [| "./__UnitTestWithAltCover" |] + StrongNameKey = "./Build/Infrastructure.snk" + ReportFormat = "NCover" + InPlace = false + Save = false } + |> AltCoverFake.DotNet.Testing.AltCoverCommand.Prepare +{ AltCoverFake.DotNet.Testing.AltCoverCommand.Options.Create prep with + ToolPath = "altcover" + ToolType = Fake.DotNet.ToolType.CreateFullFramework() + WorkingDirectory = "./__UnitTestWithAltCover" } +|> AltCoverFake.DotNet.Testing.AltCoverCommand.run ``` ### Example +(based on [the AltCover build script here](https://github.com/SteveGilham/altcover/blob/master/Build/targets.fsx#L3578-L3591)) + ``` -open AltCoverFake.DotNet.Testing -... - let ForceTrue = DotNet.CLIOptions.Force true - let p = Primitive.PrepareOptions.Create() - let prep = AltCover.PrepareOptions.Primitive p - let c = Primitive.CollectOptions.Create() - let p1 = { p with CallContext = [ "[Fact]"; "0" ] - AssemblyFilter = [| "xunit" |] } - let prep1 = AltCover.PrepareOptions.Primitive p1 - let collect = AltCover.CollectOptions.Primitive c - DotNet.test - (fun to' -> - (to'.WithAltCoverOptions prep collect ForceTrue) - "dotnettest.fsproj" +#r "paket: +nuget Fake.DotNet.Cli >= 5.20.3 +nuget AltCover.Fake >= 7.0 //" + +let ForceTrue = AltCoverFake.DotNet.Testing.DotNet.CLIOptions.Force true + +let prep = AltCoverFake.DotNet.Testing.Primitive.PrepareOptions.Create() +let coll = AltCoverFake.DotNet.Testing.Primitive.CollectOptions.Create() + +let prep1 = { prep with CallContext = [ "[Fact]"; "0" ] + AssemblyFilter = [| "xunit" |] } + +let prepare = AltCoverFake.DotNet.Testing.AltCover.PrepareOptions.Primitive prep1 +let collect = AltCoverFake.DotNet.Testing.AltCover.CollectOptions.Primitive { coll with SummaryFormat = "+B" } + +open AltCoverFake.DotNet.DotNet // extension method WithAltCoverOptions +Fake.DotNet.DotNet.test (fun to' -> to'.WithAltCoverOptions prepare collect ForceTrue) "dotnettest.fsproj" ``` diff --git a/docs/BuildSample_1.fsx b/docs/BuildSample_1.fsx new file mode 100644 index 000000000..72d5fffbb --- /dev/null +++ b/docs/BuildSample_1.fsx @@ -0,0 +1,19 @@ +#r "paket: +nuget Fake.DotNet.Cli >= 5.20.3 +nuget AltCover.Api >= 7.0 //" + +let ForceTrue = AltCover.DotNet.CLIOptions.Force true + +let p = + { AltCover.Primitive.PrepareOptions.Create() with + CallContext = [| "[Fact]"; "0" |] + AssemblyFilter = [| "xunit" |] } + +let prepare = AltCover.AltCover.PrepareOptions.Primitive p +let c = AltCover.Primitive.CollectOptions.Create() +let collect = AltCover.AltCover.CollectOptions.Primitive c + +open AltCover.Fake.DotNet // extension method WithAltCoverOptions +Fake.DotNet.DotNet.test + (fun to' -> to'.WithAltCoverOptions prepare collect ForceTrue) + "dotnettest.fsproj" \ No newline at end of file diff --git a/docs/Fake-and-Cake-integration.md b/docs/Fake-and-Cake-integration.md index 8a8f385f1..1105dcda5 100644 --- a/docs/Fake-and-Cake-integration.md +++ b/docs/Fake-and-Cake-integration.md @@ -10,28 +10,31 @@ Found in `AltCover.Fake.dll` Detailed API documentation is [presented here](AltCover.Fake/Fake-fsapidoc). ### Example -Driving `dotnet test` in a Fake script +Driving `dotnet test` in a Fake script (based on [the AltCover build script here](https://github.com/SteveGilham/altcover/blob/master/Build/targets.fsx#L3425-L3454)) ``` -open AltCover -... - let ForceTrue = DotNet.CLIOptions.Force true - let p = { Primitive.PrepareOptions.Create() with CallContext = [| "[Fact]"; "0" |] - AssemblyFilter = [| "xunit" |] } - let prep = OptionApi.PrepareOptions.Primitive p - let c = Primitive.CollectOptions.Create() - let collect = OptionApi.CollectOptions.Primitive c - - let setBaseOptions (o : DotNet.Options) = - { o with WorkingDirectory = Path.getFullName "./_DotnetTest" - Verbosity = Some DotNet.Verbosity.Minimal } - - DotNet.test - (fun to' -> - { to'.WithCommon(setBaseOptions).WithAltCoverOptions prep collect ForceTrue }) - "dotnettest.fsproj" +#r "paket: +nuget Fake.DotNet.Cli >= 5.20.3 +nuget AltCover.Api >= 7.0 //" + +let ForceTrue = AltCover.DotNet.CLIOptions.Force true + +let p = + { AltCover.Primitive.PrepareOptions.Create() with + CallContext = [| "[Fact]"; "0" |] + AssemblyFilter = [| "xunit" |] } + +let prepare = AltCover.AltCover.PrepareOptions.Primitive p +let c = AltCover.Primitive.CollectOptions.Create() +let collect = AltCover.AltCover.CollectOptions.Primitive c + +open AltCover.Fake.DotNet // extension method WithAltCoverOptions +Fake.DotNet.DotNet.test + (fun to' -> to'.WithAltCoverOptions prepare collect ForceTrue) + "dotnettest.fsproj" + ``` # Cake integration Found in `AltCover.Cake.dll` -Detailed API documentation is [presented here](AltCover.Cake/AltCover.Cake-apidoc). \ No newline at end of file +Detailed API documentation is [presented here](AltCover.Cake/AltCover.Cake-apidoc). diff --git a/docs/PowerShell-integration.md b/docs/PowerShell-integration.md index 89d53b4e0..bd1d393a9 100644 --- a/docs/PowerShell-integration.md +++ b/docs/PowerShell-integration.md @@ -160,8 +160,8 @@ Compress-Branching [-InputFile] [[-OutputFile] ] [-WithinSequen DESCRIPTION Takes output from the OpenCover program, and adjust from OpenCover's liberal idea of significant branches towards -AltCover's more restricted approach -- chose either or both of `-SameSpan` to unify branches that go from the same -start, and take the same trajectory to the same end (OpenCover issue #786 being one instance of this) and +AltCover's more restricted approach -- chose either or both of `-SameSpan` to unify branches that go from the +same start, and take the same trajectory to the same end (OpenCover issue #786 being one instance of this) and `-WithinSequencePoint` to remove branches interior to a statement (compiler generated things like stashing of lambdas, the hidden conditional `Dispose()` after a `using`, or inside F# inlines -- OpenCover issues #657, #807 being instances of this). @@ -389,9 +389,9 @@ ConvertTo-BarChart [-InputFile] [[-OutputFile] ] [` Tracking either times of visits in ticks or designated method calls leading to the visits. -A single digit 0-7 gives the number of decimal places of seconds to report; everything else is at the mercy of -the system clock information available through DateTime.UtcNow +A single digit 0-7 gives the number of decimal places of seconds to report; everything else is at the mercy +of the system clock information available through DateTime.UtcNow A string in brackets "[]" is interpreted as an attribute type name (the trailing "Attribute" is optional), so [Test] or [TestAttribute] will match; if the name contains one or more ".", then it will be matched against diff --git a/global.json b/global.json index c120c8115..9731311d0 100644 --- a/global.json +++ b/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "3.1.301" + "version": "3.1.403" } } \ No newline at end of file diff --git a/nupkg/build/netstandard2.0/AltCover.targets b/nupkg/build/netstandard2.0/AltCover.targets index 75af7cd86..d20eeff71 100644 --- a/nupkg/build/netstandard2.0/AltCover.targets +++ b/nupkg/build/netstandard2.0/AltCover.targets @@ -1,17 +1,24 @@ + + $(MSBuildThisFileDirectory)../../tools/netcoreapp2.0/AltCover.Engine.dll + $(MSBuildThisFileDirectory)../../lib/netstandard2.0/AltCover.Engine.dll + $(NetStdEngine) + $(NetCoreEngine) + + + AssemblyFile="$(AltCoverEngine)" /> + AssemblyFile="$(AltCoverEngine)" /> + AssemblyFile="$(AltCoverEngine)" /> + AssemblyFile="$(AltCoverEngine)" /> + AssemblyFile="$(AltCoverEngine)" /> + AssemblyFile="$(AltCoverEngine)" /> Fail @@ -35,12 +42,23 @@ + $ + $(AltCoverDollarChar)(ProjectName) + $(AltCoverDollarChar)(SolutionDir) + $(AltCoverDollarChar)([System.Guid]::NewGuid()) %(AltCoverXmlOutput.RootDir)/%(AltCoverXmlOutput.Directory)/%(AltCoverXmlOutput.Filename).$(TargetFramework)%(AltCoverXmlOutput.Extension) $(ProjectDir)coverage.xml $(ProjectDir)coverage.$(TargetFramework).xml - OpenCover + + + $(AltCoverXmlReport.Replace($(AltCoverProjectName),$(ProjectName)).Replace($(AltCoverNewGuid),$([System.Guid]::NewGuid().ToString()))) + $(AltCoverXmlReport1.Replace($(AltCoverSolutionDir),'') + $(AltCoverXmlReport1.Replace($(AltCoverSolutionDir),$(SolutionDir))) + + - +