diff --git a/AltCover.Engine/Visitor.fs b/AltCover.Engine/Visitor.fs
index 9c953d266..7794c0544 100644
--- a/AltCover.Engine/Visitor.fs
+++ b/AltCover.Engine/Visitor.fs
@@ -495,7 +495,7 @@ module internal CoverageParameters =
String.Empty ]
configurationHash <-
- String.Join("\n", components)
+ String.Join("\n", components).TrimEnd()
|> System.Text.Encoding.ASCII.GetBytes
|> hash.ComputeHash
|> Convert.ToBase64String
@@ -1444,7 +1444,8 @@ module internal Visitor =
OpCodes.Br
OpCodes.Br_S
OpCodes.Leave
- OpCodes.Leave_S ]
+ OpCodes.Leave_S
+ OpCodes.Nop ]
)
let internal isNonTrivialSeqPnt (dbg: MethodDebugInformation) (x: Instruction) =
@@ -1452,16 +1453,21 @@ module internal Visitor =
let rest =
Seq.unfold
(fun (i: Instruction) ->
- if i |> dbg.GetSequencePoint |> isNull then
+ if
+ i |> isNull
+ || i |> dbg.GetSequencePoint |> isNull |> not
+ then
None
else
- Some(i, i))
+ Some(i, i.Next))
x.Next
- x :: (rest |> Seq.toList)
- |> List.forall (fun v -> trivial.Contains v.OpCode)
- |> not
+ let nt =
+ x :: (rest |> Seq.toList)
+ |> List.filter (fun v -> v.OpCode |> trivial.Contains |> not)
+ |> List.tryHead
+ Option.isSome nt
else
true
diff --git a/AltCover.Tests/Expecto.fs b/AltCover.Tests/Expecto.fs
index 9b64812cc..8ba670d53 100644
--- a/AltCover.Tests/Expecto.fs
+++ b/AltCover.Tests/Expecto.fs
@@ -418,6 +418,8 @@ module ExpectoTestManifest =
"Tests.FullMethodNamesAreExtracted"
Tests.AltCoverTests.ShouldGenerateExpectedXmlReportFromDotNet,
"Tests.ShouldGenerateExpectedXmlReportFromDotNet"
+ Tests.AltCoverTests.ShouldGenerateExpectedXmlReportWithoutTriviaFromDotNet,
+ "Tests.ShouldGenerateExpectedXmlReportWithoutTriviaFromDotNet"
Tests.AltCoverTests.ShouldGenerateExpectedXmlReportWithEmbeds,
"Tests.ShouldGenerateExpectedXmlReportFromWithEmbeds"
Tests.AltCoverTests.ShouldGenerateExpectedXmlReportWithPartials,
diff --git a/AltCover.Tests/Tests.fs b/AltCover.Tests/Tests.fs
index b6af6c3cf..e5f7e3358 100644
--- a/AltCover.Tests/Tests.fs
+++ b/AltCover.Tests/Tests.fs
@@ -3347,6 +3347,20 @@ module AltCoverTests =
+"
+
+ let TriviaBaseline =
+ "
+
+
+
+
+
+
+
+
+
+
"
let rec private recursiveValidate result expected depth zero =
@@ -3441,6 +3455,60 @@ module AltCoverTests =
finally
CoverageParameters.nameFilters.Clear()
+ []
+ let ShouldGenerateExpectedXmlReportWithoutTriviaFromDotNet () =
+ let visitor, document =
+ Report.reportGenerator ()
+
+ let path = sample1path
+
+ try
+ "Main"
+ |> (Regex
+ >> FilterRegex.Exclude
+ >> FilterClass.Build FilterScope.Method
+ >> CoverageParameters.nameFilters.Add)
+
+ CoverageParameters.trivia.Value <- true
+
+ Visitor.visit
+ [ visitor ]
+ (Visitor.I.toSeq
+ { AssemblyPath = path
+ Identity = Hallmark.Build()
+ Destinations = [] })
+
+ use def = AssemblyResolver.ReadAssembly path
+
+ let xml = TriviaBaseline
+
+ let xml' =
+ xml.Replace("Version=1.0.0.0", "Version=" + def.Name.Version.ToString())
+
+ let xml'' =
+ xml'.Replace("name=\"Sample1.exe\"", "name=\"" + path + "\"")
+
+ let baseline =
+ XDocument.Load(new System.IO.StringReader(xml''))
+
+ let result =
+ (makeDocument document).Elements()
+
+ let expected = baseline.Elements()
+ recursiveValidate result expected 0 true
+
+ CoverageParameters.makeConfiguration ()
+
+ test
+ <@
+ CoverageParameters.configurationHash = Some
+ "2QsURwpbBG6MQhnmFGfWowB0iwhnatSDEy5d7h6d6X0="
+ @>
+ finally
+ CoverageParameters.nameFilters.Clear()
+ CoverageParameters.trivia.Value <- false
+ CoverageParameters.configurationHash <- None
+
[]
let ShouldGenerateExpectedXmlReportWithEmbeds () =
let visitor, document =