Skip to content

Commit

Permalink
Finally sort out the maybe zip/json vs xml/maybe redirect combos.
Browse files Browse the repository at this point in the history
  • Loading branch information
SteveGilham committed May 13, 2024
1 parent a41c74e commit e7c3040
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 220 deletions.
29 changes: 20 additions & 9 deletions AltCover.Engine/Runner.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1380,23 +1380,34 @@ module internal Runner =
let (container, file) =
Zip.openUpdate report zipped

try
if format &&& ReportFormat.TrackMask = ReportFormat.NativeJson then
writeNativeJsonReport hits format file arg
else
use container' = container
use file' = file

if format &&& ReportFormat.TrackMask = ReportFormat.NativeJson then
writeNativeJsonReport hits format file arg
else
use outputFile =
match arg with
| None -> file
| _ -> new MemoryStream() :> Stream

let result =
AltCover.Counter.doFlushStream
(postProcess hits format)
pointProcess
true
hits
format
file
arg
finally
file.Dispose()
outputFile

match arg with
| None -> ()
| Some x ->
outputFile.Position <- 0l
Zip.save (outputFile.CopyTo) x zipped

if container.IsNotNull then
container.Dispose()
result

reporter

Expand Down
2 changes: 1 addition & 1 deletion AltCover.Recorder.Tests/Recorder.Tests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -2019,7 +2019,6 @@ module AltCoverTests =

#if !NET20
[<Test>]
#endif
let ZipFlushLeavesExpectedTraces () =
getMyMethodName "=>"

Expand Down Expand Up @@ -2140,6 +2139,7 @@ module AltCoverTests =
AltCoverCoreTests.maybeIOException (fun () -> Directory.Delete(unique))))

getMyMethodName "<="
#endif

[<Test>]
let ShouldCreateDummyAttribute () =
Expand Down
9 changes: 7 additions & 2 deletions AltCover.Recorder/Base.fs
Original file line number Diff line number Diff line change
Expand Up @@ -424,8 +424,14 @@ module internal Counter =
| _ ->
addSingleVisit counts moduleId hitPointId context
1L
#endif

[<SuppressMessage("Gendarme.Rules.Smells",
"AvoidLongParameterListsRule",
Justification = "Most of this gets curried away")>]
let doFlushStream postProcess pointProcess own counts format coverageFile outputFile =
I.doFlush postProcess pointProcess own counts format coverageFile outputFile

#else
[<SuppressMessage("Gendarme.Rules.Smells",
"AvoidLongParameterListsRule",
Justification = "Most of this gets curried away")>]
Expand Down Expand Up @@ -463,7 +469,6 @@ module internal Counter =

I.doFlush postProcess pointProcess own counts format coverageFile outputFile

#if !RUNNER
[<SuppressMessage("Gendarme.Rules.Smells",
"AvoidLongParameterListsRule",
Justification = "Most of this gets curried away")>]
Expand Down
12 changes: 8 additions & 4 deletions AltCover.Tests/Expecto.fs
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,14 @@ module ExpectoTestManifest =
"Runner.RepeatVisitsShouldIncrementTotal"
Tests.AltCoverRunnerTests.KnownModuleWithPayloadMakesExpectedChangeInOpenCover,
"Runner.KnownModuleWithPayloadMakesExpectedChangeInOpenCover"
Tests.AltCoverRunnerTests.FlushLeavesExpectedTraces,
"Runner.FlushLeavesExpectedTraces"
Tests.AltCoverRunnerTests.FlushLeavesExpectedTracesWhenDiverted,
"Runner.FlushLeavesExpectedTracesWhenDiverted"
Tests.AltCoverRunnerTests.DivertedWriteLeavesExpectedTraces,
"Runner.DivertedWriteLeavesExpectedTraces"
Tests.AltCoverRunnerTests.DivertedWriteJsonLeavesExpectedTraces,
"Runner.DivertedWriteJsonLeavesExpectedTraces"
Tests.AltCoverRunnerTests.DivertedZipWriteLeavesExpectedTraces,
"Runner.DivertedZipWriteLeavesExpectedTraces"
Tests.AltCoverRunnerTests.DivertedZipWriteJsonLeavesExpectedTraces,
"Runner.DivertedZipWriteJsonLeavesExpectedTraces"
Tests.AltCoverRunnerTests.NCoverShouldGeneratePlausibleJson,
"Runner.NCoverShouldGeneratePlausibleJson"
Tests.AltCoverRunnerTests.OpenCoverShouldGeneratePlausibleJson,
Expand Down
206 changes: 2 additions & 204 deletions AltCover.Tests/Runner.Tests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -301,208 +301,6 @@ module AltCoverRunnerTests =
Is.EquivalentTo [ "2"; "2" ]
)

[<Test>]
let FlushLeavesExpectedTraces () =
Runner.init ()
let saved = Console.Out
let here = Directory.GetCurrentDirectory()

let where =
Assembly.GetExecutingAssembly().Location
|> Path.GetDirectoryName

let unique =
Path.Combine(where, Guid.NewGuid().ToString())

let reportFile =
Path.Combine(unique, "FlushLeavesExpectedTraces.xml")

try
let visits =
new Dictionary<string, Dictionary<int, PointVisit>>()

use stdout = new StringWriter()
Console.SetOut stdout
Directory.CreateDirectory(unique) |> ignore
Directory.SetCurrentDirectory(unique)

Counter.measureTime <-
DateTime.ParseExact("2017-12-29T16:33:40.9564026+00:00", "o", null)

use stream =
Assembly
.GetExecutingAssembly()
.GetManifestResourceStream(resource)

let size = int stream.Length
let buffer = Array.create size 0uy
Assert.That(stream.Read(buffer, 0, size), Is.EqualTo size)

do
use worker =
new FileStream(reportFile, FileMode.CreateNew)

worker.Write(buffer, 0, size)
()

let payload = Dictionary<int, PointVisit>()

[ 0..9 ]
|> Seq.iter (fun i -> payload.[i] <- init (int64 (i + 1)) [])

visits.["f6e3edb3-fb20-44b3-817d-f69d1a22fc2f"] <- payload

do
use coverageFile =
new FileStream(
reportFile,
FileMode.Open,
FileAccess.ReadWrite,
FileShare.None,
4096,
FileOptions.SequentialScan
)

Counter.doFlushStream
ignore
(fun _ _ -> ())
true
visits
AltCover.ReportFormat.NCover
coverageFile
None
|> ignore

use worker' =
new FileStream(reportFile, FileMode.Open)

let after = XmlDocument()
after.Load worker'

Assert.That(
after.SelectNodes("//seqpnt")
|> Seq.cast<XmlElement>
|> Seq.map _.GetAttribute("visitcount"),
Is.EquivalentTo
[ "11"
"10"
"9"
"8"
"7"
"6"
"4"
"3"
"2"
"1" ]
)
finally
maybeDeleteFile reportFile
Console.SetOut saved
Directory.SetCurrentDirectory(here)
maybeIOException (fun () -> Directory.Delete(unique))

[<Test>]
let FlushLeavesExpectedTracesWhenDiverted () =
Runner.init ()
let saved = Console.Out
let here = Directory.GetCurrentDirectory()

let where =
Assembly.GetExecutingAssembly().Location
|> Path.GetDirectoryName

let unique =
Path.Combine(where, Guid.NewGuid().ToString())

let reportFile =
Path.Combine(unique, "FlushLeavesExpectedTraces.xml")

let outputFile =
Path.Combine(unique, "FlushLeavesExpectedTracesWhenDiverted.xml")

try
let visits =
new Dictionary<string, Dictionary<int, PointVisit>>()

use stdout = new StringWriter()
Console.SetOut stdout
Directory.CreateDirectory(unique) |> ignore
Directory.SetCurrentDirectory(unique)

Counter.measureTime <-
DateTime.ParseExact("2017-12-29T16:33:40.9564026+00:00", "o", null)

use stream =
Assembly
.GetExecutingAssembly()
.GetManifestResourceStream(resource)

let size = int stream.Length
let buffer = Array.create size 0uy
Assert.That(stream.Read(buffer, 0, size), Is.EqualTo size)

do
use worker =
new FileStream(reportFile, FileMode.CreateNew)

worker.Write(buffer, 0, size)
()

let payload = Dictionary<int, PointVisit>()

[ 0..9 ]
|> Seq.iter (fun i -> payload.[i] <- init (int64 (i + 1)) [])

visits.["f6e3edb3-fb20-44b3-817d-f69d1a22fc2f"] <- payload

use coverageFile =
new FileStream(
reportFile,
FileMode.Open,
FileAccess.ReadWrite,
FileShare.None,
4096,
FileOptions.SequentialScan
)

Counter.doFlushStream
ignore
(fun _ _ -> ())
true
visits
AltCover.ReportFormat.NCover
coverageFile
(Some outputFile)
|> ignore

use worker' =
new FileStream(outputFile, FileMode.Open)

let after = XmlDocument()
after.Load worker'

Assert.That(
after.SelectNodes("//seqpnt")
|> Seq.cast<XmlElement>
|> Seq.map _.GetAttribute("visitcount"),
Is.EquivalentTo
[ "11"
"10"
"9"
"8"
"7"
"6"
"4"
"3"
"2"
"1" ]
)
finally
maybeDeleteFile reportFile
Console.SetOut saved
Directory.SetCurrentDirectory(here)
maybeIOException (fun () -> Directory.Delete(unique))

//Json.fs
[<Test>]
let NCoverShouldGeneratePlausibleJson () =
Expand Down Expand Up @@ -3383,11 +3181,11 @@ module AltCoverRunnerTests =
Runner.J.doReport counts AltCover.ReportFormat.NCover reportFile (Some outputFile) // DivertedWriteLeavesExpectedTraces
|> ignore

use worker' =
use worker2 =
new FileStream(outputFile, FileMode.Open)

let after = XmlDocument()
after.Load worker'
after.Load worker2

Assert.That(
after.SelectNodes("//seqpnt")
Expand Down

0 comments on commit e7c3040

Please sign in to comment.