Test/TestHelper.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#Requires -Modules Pester

param (
    [string] $PSScriptRoot = $( if ( $PSScriptRoot ) { $PSScriptRoot } else { Get-Location } ),
    [string] $ModuleManifestPath = "$PSScriptRoot\..\PSRTools.psd1"
)

Import-Module "$PSScriptRoot\..\PSRTools.psd1" -Force

$RScriptPath = 'C:\Program Files\Microsoft\R Open\R-3.5.2\bin\x64\Rscript.exe'

function New-TempLibrary {

    [CmdletBinding()]
    param (
        [Parameter( Mandatory )]
        [ValidateScript( { Test-Path $_ -PathType Container })]
        [string]
        $TempDirectory
    )

    return New-Item "$TempDirectory\lib" -ItemType Directory
}

function New-TestProject {

    [CmdletBinding()]
    param (
        [Parameter( Mandatory )]
        [ValidateScript( { Test-Path $_ -PathType Container })]
        [string]
        $TempDirectory,

        [Parameter( Mandatory )]
        [ValidateScript( { Test-Path $_ -PathType Container })]
        [string]
        $Library
    )

    Install-RPackage -Name 'usethis' -Library $Library

    $packagePath = "$TempDirectory\test"
    Invoke-RCommand "usethis::create_package('$( Get-REscapedString $packagePath )')" -Library $Library | Out-Null
    return Get-Item $packagePath
}

function New-TestPackage {

    [CmdletBinding()]
    param (
        [Parameter( Mandatory )]
        [ValidateScript( { Test-Path $_ -PathType Container })]
        [string]
        $TempDirectory,

        [Parameter( Mandatory )]
        [ValidateScript( { Test-Path $_ -PathType Container })]
        [string]
        $Library
    )

    $project = New-TestProject -TempDirectory $TempDirectory -Library $Library
    Install-RPackage -Name 'devtools' -Library $Library
    $packagePath = New-RPackage -Path $project -Library $Library
    return New-Object PSObject -Property @{
        Name = $project.Name
        Path = $packagePath
    }
}