$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$rootDir = "$scriptDir\.."
$coverageDir = "$rootDir\coverage"
$coverageReportDir = "$rootDir\coverage\report"
$openCover = "$env:LOCALAPPDATA\Apps\OpenCover\OpenCover.Console.exe"
$vsTestConsole = where.exe vstest.console
$coverageOutput = "$coverageDir\coverage.xml"

$runtimeTests = "$rootDir\Capnp.Net.Runtime.Tests\bin\Release\netcoreapp2.1\Capnp.Net.Runtime.Tests.dll"
$generatorTests = "$rootDir\CapnpC.CSharp.Generator.Tests\bin\Release\netcoreapp3.0\CapnpC.CSharp.Generator.Tests.dll"

If(!(test-path $coverageDir))
{
      New-Item -ItemType Directory -Force -Path $coverageDir
}

If(!(test-path $coverageReportDir))
{
      New-Item -ItemType Directory -Force -Path $coverageReportDir
}

& $openCover -target:"$vsTestConsole" `
  -targetArgs:"/inIsolation $runtimeTests /TestCaseFilter:`"TestCategory=Coverage`" /Framework:.NETCoreApp,Version=v2.1 /logger:trx;LogFileName=runtime.trx" `
  -filter:"+[Capnp.Net.Runtime]Capnp.*" `
  -excludebyattribute:"System.CodeDom.Compiler.GeneratedCodeAttribute" `
  -output:"$coverageOutput" `
  -mergebyhash -register:user -oldStyle

& $openCover -target:"$vsTestConsole" `
  -targetArgs:"/inIsolation $generatorTests /logger:trx;LogFileName=generator.trx" `
  -filter:"+[CapnpC.CSharp.Generator]CapnpC.CSharp.Generator.* -[CapnpC.CSharp.Generator]CapnpC.CSharp.Generator.Schema.*" `
  -excludebyattribute:"System.CodeDom.Compiler.GeneratedCodeAttribute" `
  -output:"$coverageOutput" `
  -mergeoutput `
  -mergebyhash -register:user -oldStyle

ReportGenerator.exe -reports:"$coverageOutput" -targetdir:"$coverageReportDir" -reportTypes:"Html"