Merge pull request #668 from ili101/TestsRebase

Tests improvments and Linux support
This commit is contained in:
Doug Finke
2019-08-29 18:43:14 -04:00
committed by GitHub
42 changed files with 989 additions and 448 deletions

1
.gitignore vendored
View File

@@ -60,7 +60,6 @@ test.xlsx
testCCFMT.ps1
testHide.ps1
ImportExcel.zip
.vscode/launch.json
.vscode/settings.json
~$*

56
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,56 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "PowerShell",
"request": "launch",
"name": "PowerShell Pester Tests",
"script": "Import-Module -Name '.\\' -Force ; Invoke-Pester", // Change to '.\\ModuleName.psd1' if Git name different
"args": [""],
"cwd": "${workspaceFolder}"
},
{
"type": "PowerShell",
"request": "launch",
"name": "PowerShell Launch Current File",
"script": "${file}",
"args": [],
"cwd": "${file}"
},
{
"type": "PowerShell",
"request": "launch",
"name": "PowerShell Launch Current File in Temporary Console",
"script": "${file}",
"args": [],
"cwd": "${file}",
"createTemporaryIntegratedConsole": true
},
{
"type": "PowerShell",
"request": "launch",
"name": "PowerShell Launch Current File w/Args Prompt",
"script": "${file}",
"args": [
"${command:SpecifyScriptArgs}"
],
"cwd": "${file}"
},
{
"type": "PowerShell",
"request": "attach",
"name": "PowerShell Attach to Host Process",
"processId": "${command:PickPSHostProcess}",
"runspaceId": 1
},
{
"type": "PowerShell",
"request": "launch",
"name": "PowerShell Interactive Session",
"cwd": ""
}
]
}

View File

@@ -1,28 +0,0 @@
param(
[Switch]$DontCreateZip
)
##
# Used in Appveyor.yml
##
$PSVersionTable.PSVersion
## Create the zip before the tests run
## Otherwise the EPPlus.dll is in use after the Pester run
$ModuleVersion = (Invoke-Command -ScriptBlock ([scriptblock]::Create((Get-Content -Raw .\ImportExcel.psd1)))).moduleVersion
if (!$DontCreateZip) {
$dest = "ImportExcel-{0}-{1}.zip" -f $ModuleVersion, (Get-Date).ToString("yyyyMMddHHmmss")
Compress-Archive -Path . -DestinationPath .\$dest
}
if ($null -eq (Get-Module -ListAvailable pester)) {
Install-Module -Name Pester -Repository PSGallery -Force -Scope CurrentUser
}
$result = Invoke-Pester -Script $PSScriptRoot\__tests__ -Verbose -PassThru
if ($result.FailedCount -gt 0) {
throw "$($result.FailedCount) tests failed."
}

View File

@@ -1,4 +1,4 @@
Import-Module ..\ImportExcel.psd1 -Force
try {. $PSScriptRoot\..\..\LoadPSD1.ps1} catch {}
$file = "C:\Temp\test.xlsx"

View File

@@ -5,7 +5,7 @@
$measure = "Open"
)
$xl = "$env:TEMP\Stocks.xlsx"
$xl = Join-Path ([IO.Path]::GetTempPath()) 'Stocks.xlsx'
Remove-Item $xl -ErrorAction SilentlyContinue

View File

@@ -4,8 +4,8 @@ Add-Type -Path "$($PSScriptRoot)\EPPlus.dll"
. $PSScriptRoot\AddDataValidation.ps1
. $PSScriptRoot\Charting.ps1
. $PSScriptRoot\ColorCompletion.ps1
. $PSScriptRoot\Compare-WorkSheet.ps1
. $PSScriptRoot\ConvertExcelToImageFile.ps1
. $PSScriptRoot\compare-workSheet.ps1
. $PSScriptRoot\ConvertFromExcelData.ps1
. $PSScriptRoot\ConvertFromExcelToSQLInsert.ps1
. $PSScriptRoot\ConvertToExcelXlsx.ps1
@@ -23,7 +23,7 @@ Add-Type -Path "$($PSScriptRoot)\EPPlus.dll"
. $PSScriptRoot\InferData.ps1
. $PSScriptRoot\Invoke-Sum.ps1
. $PSScriptRoot\Join-Worksheet.ps1
. $PSScriptRoot\Merge-worksheet.ps1
. $PSScriptRoot\Merge-Worksheet.ps1
. $PSScriptRoot\New-ConditionalFormattingIconSet.ps1
. $PSScriptRoot\New-ConditionalText.ps1
. $PSScriptRoot\New-ExcelChart.ps1
@@ -31,8 +31,9 @@ Add-Type -Path "$($PSScriptRoot)\EPPlus.dll"
. $PSScriptRoot\Open-ExcelPackage.ps1
. $PSScriptRoot\Pivot.ps1
. $PSScriptRoot\PivotTable.ps1
#. $PSScriptRoot\Plot.ps1
. $PSScriptRoot\RemoveWorksheet.ps1
. $PSScriptRoot\Send-SqlDataToExcel.ps1
. $PSScriptRoot\Send-SQLDataToExcel.ps1
. $PSScriptRoot\Set-CellStyle.ps1
. $PSScriptRoot\Set-Column.ps1
. $PSScriptRoot\Set-Row.ps1
@@ -45,7 +46,7 @@ Add-Type -Path "$($PSScriptRoot)\EPPlus.dll"
New-Alias -Name Use-ExcelData -Value "ConvertFrom-ExcelData" -Force
if ($PSVersionTable.PSVersion.Major -ge 5) {
. $PSScriptRoot\plot.ps1
. $PSScriptRoot\Plot.ps1
Function New-Plot {
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification = 'New-Plot does not change system state')]
@@ -59,6 +60,25 @@ else {
Write-Warning 'PowerShell 5 is required for plot.ps1'
Write-Warning 'PowerShell Excel is ready, except for that functionality'
}
if ($IsLinux -or $IsMacOS) {
$ExcelPackage = [OfficeOpenXml.ExcelPackage]::new()
$Cells = ($ExcelPackage | Add-WorkSheet).Cells['A1']
$Cells.Value = 'Test'
try {
$Cells.AutoFitColumns()
}
catch {
if ($IsLinux) {
Write-Warning -Message 'ImportExcel Module Cannot Autosize. Please run the following command to install dependencies: "sudo apt-get install -y --no-install-recommends libgdiplus libc6-dev"'
}
if ($IsMacOS) {
Write-Warning -Message 'ImportExcel Module Cannot Autosize. Please run the following command to install dependencies: "brew install mono-libgdiplus"'
}
}
finally {
$ExcelPackage | Close-ExcelPackage -NoSave
}
}
#endregion
function Import-Excel {
<#

View File

@@ -1,104 +1,213 @@
<#
.SYNOPSIS
Download the module files from GitHub.
.DESCRIPTION
Download the module files from GitHub to the local client in the module folder.
Installs module from Git clone or directly from GitHub.
File must not have BOM for GitHub deploy to work.
#>
[CmdLetBinding()]
[CmdletBinding(DefaultParameterSetName = 'Default')]
Param (
# Path to install the module to, if not provided -Scope used.
[Parameter(Mandatory, ParameterSetName = 'ModulePath')]
[ValidateNotNullOrEmpty()]
[String]$ModuleName = 'ImportExcel',
[String]$InstallDirectory,
[String]$ModulePath,
# Path to install the module to, PSModulePath "CurrentUser" or "AllUsers", if not provided "CurrentUser" used.
[Parameter(Mandatory, ParameterSetName = 'Scope')]
[ValidateSet('CurrentUser', 'AllUsers')]
[string]
$Scope = 'CurrentUser',
# Get module from GitHub instead of local Git clone, for example "https://raw.githubusercontent.com/ili101/Module.Template/master/Install.ps1"
[ValidateNotNullOrEmpty()]
[String]$GitPath = 'https://raw.github.com/dfinke/ImportExcel/master'
[Uri]$FromGitHub
)
# Set Files and Folders patterns to Include/Exclude.
$IncludeFiles = @(
'*.dll',
'*.psd1',
'*.psm1',
'AddConditionalFormatting.ps1',
'AddDataValidation.ps1',
'Charting.ps1',
'ColorCompletion.ps1',
'Compare-WorkSheet.ps1',
'ConvertExcelToImageFile.ps1',
'ConvertFromExcelData.ps1',
'ConvertFromExcelToSQLInsert.ps1',
'ConvertToExcelXlsx.ps1',
'Copy-ExcelWorkSheet.ps1',
'Export-Excel.ps1',
'Export-ExcelSheet.ps1',
'Export-StocksToExcel.ps1',
'Get-ExcelColumnName.ps1',
'Get-ExcelSheetInfo.ps1',
'Get-ExcelWorkbookInfo.ps1',
'Get-HtmlTable.ps1',
'Get-Range.ps1',
'Get-XYRange.ps1',
'Import-Html.ps1',
'InferData.ps1',
'Invoke-Sum.ps1',
'Join-Worksheet.ps1',
'Merge-Worksheet.ps1',
'New-ConditionalFormattingIconSet.ps1',
'New-ConditionalText.ps1',
'New-ExcelChart.ps1',
'New-PSItem.ps1',
'Open-ExcelPackage.ps1',
'Pivot.ps1',
'PivotTable.ps1',
'Plot.ps1',
'RemoveWorksheet.ps1',
'Send-SQLDataToExcel.ps1',
'Set-CellStyle.ps1',
'Set-Column.ps1',
'Set-Row.ps1',
'Set-WorkSheetProtection.ps1',
'SetFormat.ps1',
'TrackingUtils.ps1',
'Update-FirstObjectProperties.ps1'
)
$ExcludeFiles = @(
'Install.ps1'
)
Begin {
Try {
Write-Verbose "$ModuleName module installation started"
$Files = @(
'AddConditionalFormatting.ps1',
'Charting.ps1',
'ColorCompletion.ps1',
'ConvertFromExcelData.ps1',
'ConvertFromExcelToSQLInsert.ps1',
'ConvertExcelToImageFile.ps1',
'ConvertToExcelXlsx.ps1',
'Copy-ExcelWorkSheet.ps1',
'EPPlus.dll',
'Export-charts.ps1',
'Export-Excel.ps1',
'Export-ExcelSheet.ps1',
'formatting.ps1',
'Get-ExcelColumnName.ps1',
'Get-ExcelSheetInfo.ps1',
'Get-ExcelWorkbookInfo.ps1',
'Get-HtmlTable.ps1',
'Get-Range.ps1',
'Get-XYRange.ps1',
'Import-Html.ps1',
'ImportExcel.psd1',
'ImportExcel.psm1',
'InferData.ps1',
'Invoke-Sum.ps1',
'New-ConditionalFormattingIconSet.ps1',
'New-ConditionalText.ps1',
'New-ExcelChart.ps1',
'New-PSItem.ps1',
'Open-ExcelPackage.ps1',
'Pivot.ps1',
'plot.ps1',
'Send-SqlDataToExcel.ps1',
'Set-CellStyle.ps1',
'Set-Column.ps1',
'Set-Row.ps1',
'SetFormat.ps1',
'TrackingUtils.ps1',
'Update-FirstObjectProperties.ps1'
)
function Invoke-MultiLike {
[alias("LikeAny")]
[CmdletBinding()]
param
(
$InputObject,
[Parameter(Mandatory)]
[String[]]$Filters,
[Switch]$Not
)
$FiltersRegex = foreach ($Filter In $Filters) {
$Filter = [regex]::Escape($Filter)
if ($Filter -match "^\\\*") {
$Filter = $Filter.Remove(0, 2)
}
else {
$Filter = '^' + $Filter
}
if ($Filter -match "\\\*$") {
$Filter = $Filter.Substring(0, $Filter.Length - 2)
}
else {
$Filter = $Filter + '$'
}
$Filter
}
Catch {
throw "Failed installing the module in the install directory '$InstallDirectory': $_"
if ($Not) {
$InputObject -notmatch ($FiltersRegex -join '|').replace('\*', '.*').replace('\?', '.')
}
else {
$InputObject -match ($FiltersRegex -join '|').replace('\*', '.*').replace('\?', '.')
}
}
Process {
Try {
if (-not $InstallDirectory) {
Write-Verbose "$ModuleName no installation directory provided"
Try {
Write-Verbose -Message 'Module installation started'
$PersonalModules = Join-Path -Path ([Environment]::GetFolderPath('MyDocuments')) -ChildPath WindowsPowerShell\Modules
if (($env:PSModulePath -split ';') -notcontains $PersonalModules) {
Write-Warning "$ModuleName personal module path '$PersonalModules' not found in '`$env:PSModulePath'"
}
if (-not (Test-Path $PersonalModules)) {
Write-Error "$ModuleName path '$PersonalModules' does not exist"
}
$InstallDirectory = Join-Path -Path $PersonalModules -ChildPath $ModuleName
Write-Verbose "$ModuleName default installation directory is '$InstallDirectory'"
if (!$ModulePath) {
if ($Scope -eq 'CurrentUser') {
$ModulePathIndex = 0
}
if (-not (Test-Path $InstallDirectory)) {
$null = New-Item -Path $InstallDirectory -ItemType Directory -EA Stop
Write-Verbose "$ModuleName created module folder '$InstallDirectory'"
else {
$ModulePathIndex = 1
}
$WebClient = New-Object System.Net.WebClient
$Files | ForEach-Object {
$WebClient.DownloadFile("$GitPath/$_","$installDirectory\$_")
Write-Verbose "$ModuleName installed module file '$_'"
if ($IsLinux -or $IsMacOS) {
$ModulePathSeparator = ':'
}
Write-Verbose "$ModuleName module installation successful"
else {
$ModulePathSeparator = ';'
}
$ModulePath = ($env:PSModulePath -split $ModulePathSeparator)[$ModulePathIndex]
}
Catch {
throw "Failed installing the module in the install directory '$InstallDirectory': $_"
# Get $ModuleName, $TargetPath, [$Links]
if ($FromGitHub) {
# Fix Could not create SSL/TLS secure channel
#$SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol
#[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$WebClient = [System.Net.WebClient]::new()
$GitUri = $FromGitHub.AbsolutePath.Split('/')[1, 2] -join '/'
$GitBranch = $FromGitHub.AbsolutePath.Split('/')[3]
$Links = (Invoke-RestMethod -Uri "https://api.github.com/repos/$GitUri/contents" -Body @{ref = $GitBranch }) | Where-Object { (LikeAny $_.name $IncludeFiles) -and (LikeAny $_.name $ExcludeFiles -Not) }
$ModuleName = [System.IO.Path]::GetFileNameWithoutExtension(($Links | Where-Object { $_.name -like '*.psm1' }).name)
$ModuleVersion = (. ([Scriptblock]::Create((Invoke-WebRequest -Uri ($Links | Where-Object { $_.name -eq "$ModuleName.psd1" }).download_url)))).ModuleVersion
}
else {
$ModuleName = [System.IO.Path]::GetFileNameWithoutExtension((Get-ChildItem -File -Filter *.psm1 -Name -Path $PSScriptRoot))
$ModuleVersion = (. ([Scriptblock]::Create((Get-Content -Path (Join-Path $PSScriptRoot "$ModuleName.psd1") | Out-String)))).ModuleVersion
}
$TargetPath = Join-Path -Path $ModulePath -ChildPath $ModuleName
$TargetPath = Join-Path -Path $TargetPath -ChildPath $ModuleVersion
# Create Directory
if (-not (Test-Path -Path $TargetPath)) {
$null = New-Item -Path $TargetPath -ItemType Directory -ErrorAction Stop
Write-Verbose -Message ('Created module folder: "{0}"' -f $TargetPath)
}
# Copy Files
if ($FromGitHub) {
foreach ($Link in $Links) {
$TargetPathItem = Join-Path -Path $TargetPath -ChildPath $Link.name
if ($Link.type -ne 'dir') {
$WebClient.DownloadFile($Link.download_url, $TargetPathItem)
Write-Verbose -Message ('Installed module file: "{0}"' -f $Link.name)
}
else {
if (-not (Test-Path -Path $TargetPathItem)) {
$null = New-Item -Path $TargetPathItem -ItemType Directory -ErrorAction Stop
Write-Verbose -Message 'Created module folder: "{0}"' -f $TargetPathItem
}
$SubLinks = (Invoke-RestMethod -Uri $Link.git_url -Body @{recursive = '1' }).tree
foreach ($SubLink in $SubLinks) {
$TargetPathSub = Join-Path -Path $TargetPathItem -ChildPath $SubLink.path
if ($SubLink.'type' -EQ 'tree') {
if (-not (Test-Path -Path $TargetPathSub)) {
$null = New-Item -Path $TargetPathSub -ItemType Directory -ErrorAction Stop
Write-Verbose -Message 'Created module folder: "{0}"' -f $TargetPathSub
}
}
else {
$WebClient.DownloadFile(
('https://raw.githubusercontent.com/{0}/{1}/{2}/{3}' -f $GitUri, $GitBranch, $Link.name, $SubLink.path),
$TargetPathSub
)
}
}
}
}
}
else {
Get-ChildItem -Path $PSScriptRoot -Exclude $ExcludeFiles | Where-Object { LikeAny $_.Name $IncludeFiles } | ForEach-Object {
if ($_.Attributes -ne 'Directory') {
Copy-Item -Path $_ -Destination $TargetPath
Write-Verbose -Message ('Installed module file "{0}"' -f $_)
}
else {
Copy-Item -Path $_ -Destination $TargetPath -Recurse -Force
Write-Verbose -Message ('Installed module folder "{0}"' -f $_)
}
}
}
# Import Module
Write-Verbose -Message "$ModuleName module installation successful to $TargetPath"
Import-Module -Name $ModuleName -Force
Write-Verbose -Message "Module installed"
}
Catch {
throw ('Failed installing module "{0}". Error: "{1}" in Line {2}' -f $ModuleName, $_, $_.InvocationInfo.ScriptLineNumber)
}
finally {
#if ($FromGitHub) {
# [Net.ServicePointManager]::SecurityProtocol = $SecurityProtocol
#}
Write-Verbose -Message 'Module installation end'
}

View File

@@ -1,3 +0,0 @@
$fullPath = 'C:\Program Files\WindowsPowerShell\Modules\ImportExcel'
Robocopy . $fullPath /mir /XD .vscode .git examples testimonials images spikes /XF appveyor.yml .gitattributes .gitignore

View File

View File

@@ -1,7 +0,0 @@
$p = @{
Name = "ImportExcel"
NuGetApiKey = $NuGetApiKey
ReleaseNote = "Add NumberFormat parameter"
}
Publish-Module @p

View File

@@ -15,11 +15,13 @@ If this project helped you reduce the time to get your job done, let me know.
<a href="./LICENSE.txt"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg"></a>
</p>
|CI System |OS|Status|
|---|---|---|
|Azure DevOps|Windows|[![Build status](https://dougfinke.visualstudio.com/ImportExcel/_apis/build/status/ImportExcel-CI)](https://dougfinke.visualstudio.com/ImportExcel/_build/latest?definitionId=10)|
|Azure DevOps|Windows, Linux, Mac|[![Build Status](https://dougfinke.visualstudio.com/ImportExcel/_apis/build/status/dfinke.ImportExcel?branchName=master)](https://dougfinke.visualstudio.com/ImportExcel/_build/latest?definitionId=20&branchName=master)|
|Appveyor|Windows|[![Build Status](https://ci.appveyor.com/api/projects/status/21hko6eqtpccrkba/branch/master?svg=true)](https://ci.appveyor.com/project/dfinke/importexcel/branch/master)|
| CI System | Environment | Status |
|--------------|-------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| AppVeyor | Windows, Core preview, Ubuntu | [![Build status](https://ci.appveyor.com/api/projects/status/7c0s1g5rgdx1bbts/branch/Tests?svg=true)](https://ci.appveyor.com/project/ili101/Module-Template) |
| Azure DevOps | Windows | [![Build Status](https://dev.azure.com/ili101/ImportExcel/_apis/build/status/ili101.ImportExcel?branchName=Tests&jobName=Windows)](https://dev.azure.com/ili101/ImportExcel/_build/latest?definitionId=1&branchName=Tests) |
| Azure DevOps | Windows (Core) | [![Build Status](https://dev.azure.com/ili101/ImportExcel/_apis/build/status/ili101.ImportExcel?branchName=Tests&jobName=WindowsPSCore)](https://dev.azure.com/ili101/ImportExcel/_build/latest?definitionId=1&branchName=Tests) |
| Azure DevOps | Ubuntu | [![Build Status](https://dev.azure.com/ili101/ImportExcel/_apis/build/status/ili101.ImportExcel?branchName=Tests&jobName=Ubuntu)](https://dev.azure.com/ili101/ImportExcel/_build/latest?definitionId=1&branchName=Tests) |
| Azure DevOps | macOS | [![Build Status](https://dev.azure.com/ili101/ImportExcel/_apis/build/status/ili101.ImportExcel?branchName=Tests&jobName=macOS)](https://dev.azure.com/ili101/ImportExcel/_build/latest?definitionId=1&branchName=Tests) |
<!-- /BADGES -->

View File

@@ -1,7 +1,4 @@
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
$notWindows = ($PSVersionTable.os -and $PSVersionTable.os -notMatch 'Windows' )
Describe "Test adding trendlines to charts" {
Describe "Test adding trendlines to charts" {
BeforeAll {
$script:data = ConvertFrom-Csv @"
Region,Item,TotalSold
@@ -20,7 +17,7 @@ South,avocado,73
}
BeforeEach {
$xlfile = "$env:TEMP\trendLine.xlsx"
$xlfile = "TestDrive:\trendLine.xlsx"
Remove-Item $xlfile -ErrorAction SilentlyContinue
}

132
__tests__/CI.ps1 Normal file
View File

@@ -0,0 +1,132 @@
<#
.SYNOPSIS
Handel Continuous Integration Testing in AppVeyor and Azure DevOps Pipelines.
#>
param
(
# AppVeyor Only - Update AppVeyor build name.
[Switch]$Initialize,
# Installs the module and invoke the Pester tests with the current version of PowerShell.
[Switch]$Test,
# AppVeyor Only - Upload results to AppVeyor "Tests" tab.
[Switch]$Finalize,
# AppVeyor and Azure - Upload module as AppVeyor Artifact.
[Switch]$Artifact
)
$ErrorActionPreference = 'Stop'
if ($Initialize) {
$Psd1 = (Get-ChildItem -File -Filter *.psd1 -Name -Path (Split-Path $PSScriptRoot)).PSPath
$ModuleVersion = (. ([Scriptblock]::Create((Get-Content -Path $Psd1 | Out-String)))).ModuleVersion
Update-AppveyorBuild -Version "$ModuleVersion ($env:APPVEYOR_BUILD_NUMBER) $env:APPVEYOR_REPO_BRANCH"
}
if ($Test) {
function Get-EnvironmentInfo {
if ($null -eq $IsWindows -or $IsWindows) {
# Get Windows Version
try {
$WinRelease, $WinVer = Get-ItemPropertyValue "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" ReleaseId, CurrentMajorVersionNumber, CurrentMinorVersionNumber, CurrentBuildNumber, UBR
$WindowsVersion = "$($WinVer -join '.') ($WinRelease)"
}
catch {
$WindowsVersion = [System.Environment]::OSVersion.Version
}
# Get .Net Version
# https://stackoverflow.com/questions/3487265/powershell-script-to-return-versions-of-net-framework-on-a-machine
$Lookup = @{
378389 = [version]'4.5'
378675 = [version]'4.5.1'
378758 = [version]'4.5.1'
379893 = [version]'4.5.2'
393295 = [version]'4.6'
393297 = [version]'4.6'
394254 = [version]'4.6.1'
394271 = [version]'4.6.1'
394802 = [version]'4.6.2'
394806 = [version]'4.6.2'
460798 = [version]'4.7'
460805 = [version]'4.7'
461308 = [version]'4.7.1'
461310 = [version]'4.7.1'
461808 = [version]'4.7.2'
461814 = [version]'4.7.2'
528040 = [version]'4.8'
528049 = [version]'4.8'
}
# For One True framework (latest .NET 4x), change the Where-Object match
# to PSChildName -eq "Full":
$DotNetVersion = Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse |
Get-ItemProperty -name Version, Release -EA 0 |
Where-Object { $_.PSChildName -eq "Full" } |
Select-Object @{name = ".NET Framework"; expression = { $_.PSChildName } },
@{name = "Product"; expression = { $Lookup[$_.Release] } },
Version, Release
# Output
[PSCustomObject]($PSVersionTable + @{
ComputerName = $env:Computername
WindowsVersion = $WindowsVersion
'.Net Version' = '{0} (Version: {1}, Release: {2})' -f $DotNetVersion.Product, $DotNetVersion.Version, $DotNetVersion.Release
#EnvironmentPath = $env:Path
})
}
else {
# Output
[PSCustomObject]($PSVersionTable + @{
ComputerName = $env:Computername
#EnvironmentPath = $env:Path
})
}
}
'[Info] Testing On:'
Get-EnvironmentInfo
'[Progress] Installing Module.'
. .\Install.ps1
'[Progress] Invoking Pester.'
Invoke-Pester -OutputFile ('TestResultsPS{0}.xml' -f $PSVersionTable.PSVersion)
}
if ($Finalize) {
'[Progress] Finalizing.'
$Failure = $false
$AppVeyorResultsUri = 'https://ci.appveyor.com/api/testresults/nunit/{0}' -f $env:APPVEYOR_JOB_ID
foreach ($TestResultsFile in Get-ChildItem -Path 'TestResultsPS*.xml') {
$TestResultsFilePath = $TestResultsFile.FullName
"[Info] Uploading Files: $AppVeyorResultsUri, $TestResultsFilePath."
# Add PowerShell version to test results
$PSVersion = $TestResultsFile.Name.Replace('TestResults', '').Replace('.xml', '')
[Xml]$Xml = Get-Content -Path $TestResultsFilePath
Select-Xml -Xml $Xml -XPath '//test-case' | ForEach-Object { $_.Node.name = "$PSVersion " + $_.Node.name }
$Xml.OuterXml | Out-File -FilePath $TestResultsFilePath
#Invoke-RestMethod -Method Post -Uri $AppVeyorResultsUri -Body $Xml
[Net.WebClient]::new().UploadFile($AppVeyorResultsUri, $TestResultsFilePath)
if ($Xml.'test-results'.failures -ne '0') {
$Failure = $true
}
}
if ($Failure) {
throw 'Tests failed.'
}
}
if ($Artifact) {
# Get Module Info
$ModuleName = [System.IO.Path]::GetFileNameWithoutExtension((Get-ChildItem -File -Filter *.psm1 -Name -Path (Split-Path $PSScriptRoot)))
$ModulePath = (Get-Module -Name $ModuleName -ListAvailable).ModuleBase | Split-Path
$VersionLocal = ((Get-Module -Name $ModuleName -ListAvailable).Version | Measure-Object -Maximum).Maximum
"[Progress] Artifact Start for Module: $ModuleName, Version: $VersionLocal."
if ($env:APPVEYOR) {
$ZipFileName = "{0} {1} {2} {3:yyyy-MM-dd HH-mm-ss}.zip" -f $ModuleName, $VersionLocal, $env:APPVEYOR_REPO_BRANCH, (Get-Date)
$ZipFileFullPath = Join-Path -Path $PSScriptRoot -ChildPath $ZipFileName
"[Info] Artifact. $ModuleName, ZipFileName: $ZipFileName."
#Compress-Archive -Path $ModulePath -DestinationPath $ZipFileFullPath
[System.IO.Compression.ZipFile]::CreateFromDirectory($ModulePath, $ZipFileFullPath, [System.IO.Compression.CompressionLevel]::Optimal, $true)
Push-AppveyorArtifact $ZipFileFullPath -DeploymentName $ModuleName
}
elseif ($env:AGENT_NAME) {
#Write-Host "##vso[task.setvariable variable=ModuleName]$ModuleName"
Copy-Item -Path $ModulePath -Destination $env:Build_ArtifactStagingDirectory -Recurse
}
}

View File

@@ -1,28 +1,32 @@
#Requires -Modules Pester
if ($PSVersionTable.os -and $PSVersionTable.os -notMatch 'Windows' ) {return} #Currently this test outputs windows services so only run on Windows.
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() }
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
if ($PSVersionTable.PSVersion.Major -gt 5) { Write-Warning "Can't test grid view on V6 and later" }
else {Add-Type -AssemblyName System.Windows.Forms }
#Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
Describe "Compare Worksheet" {
Context "Simple comparison output" {
BeforeAll {
Remove-Item -Path "$env:temp\server*.xlsx"
[System.Collections.ArrayList]$s = get-service | Select-Object -first 25 -Property Name, RequiredServices, CanPauseAndContinue, CanShutdown, CanStop, DisplayName, DependentServices, MachineName
$s | Export-Excel -Path $env:temp\server1.xlsx
#$s is a zero based array, excel rows are 1 based and excel has a header row so Excel rows will be 2 + index in $s
$row4Displayname = $s[2].DisplayName
$s[2].DisplayName = "Changed from the orginal"
$d = $s[-1] | Select-Object -Property *
$d.DisplayName = "Dummy Service"
$d.Name = "Dummy"
$s.Insert(3,$d)
$row6Name = $s[5].name
$s.RemoveAt(5)
$s | Export-Excel -Path $env:temp\server2.xlsx
#Assume default worksheet name, (sheet1) and column header for key ("name")
$comp = compare-WorkSheet "$env:temp\server1.xlsx" "$env:temp\server2.xlsx" | Sort-Object -Property _row, _file
BeforeAll {
if ($PSVersionTable.PSVersion.Major -gt 5) {
It "GridView Support" {
Set-ItResult -Pending -Because "Can't test grid view on V6 and later"
}
}
else { Add-Type -AssemblyName System.Windows.Forms }
. "$PSScriptRoot\Samples\Samples.ps1"
Remove-Item -Path "TestDrive:\server*.xlsx"
[System.Collections.ArrayList]$s = get-service | Select-Object -first 25 -Property Name, RequiredServices, CanPauseAndContinue, CanShutdown, CanStop, DisplayName, DependentServices, MachineName
$s | Export-Excel -Path TestDrive:\server1.xlsx
#$s is a zero based array, excel rows are 1 based and excel has a header row so Excel rows will be 2 + index in $s
$row4Displayname = $s[2].DisplayName
$s[2].DisplayName = "Changed from the orginal"
$d = $s[-1] | Select-Object -Property *
$d.DisplayName = "Dummy Service"
$d.Name = "Dummy"
$s.Insert(3,$d)
$row6Name = $s[5].name
$s.RemoveAt(5)
$s | Export-Excel -Path TestDrive:\server2.xlsx
#Assume default worksheet name, (sheet1) and column header for key ("name")
$comp = compare-WorkSheet "TestDrive:\server1.xlsx" "TestDrive:\server2.xlsx" | Sort-Object -Property _row, _file
}
Context "Simple comparison output" {
it "Found the right number of differences " {
$comp | should not beNullOrEmpty
$comp.Count | should be 4
@@ -57,13 +61,13 @@ Describe "Compare Worksheet" {
$ModulePath = (Get-Command -Name 'Compare-WorkSheet').Module.Path
$PowerShellExec = if ($PSEdition -eq 'Core') {'pwsh.exe'} else {'powershell.exe'}
$PowerShellPath = Join-Path -Path $PSHOME -ChildPath $PowerShellExec
. $PowerShellPath -Command ("Import-Module $ModulePath; " + '$null = Compare-WorkSheet "$env:temp\server1.xlsx" "$env:temp\server2.xlsx" -BackgroundColor ([System.Drawing.Color]::LightGreen) -GridView; Start-Sleep -sec 5')
. $PowerShellPath -Command ('Import-Module {0}; $null = Compare-WorkSheet "{1}server1.xlsx" "{1}server2.xlsx" -BackgroundColor ([System.Drawing.Color]::LightGreen) -GridView; Start-Sleep -sec 5' -f $ModulePath, (Resolve-Path 'TestDrive:').ProviderPath)
}
else {
$null = Compare-WorkSheet "$env:temp\server1.xlsx" "$env:temp\server2.xlsx" -BackgroundColor ([System.Drawing.Color]::LightGreen) -GridView:$useGrid
$null = Compare-WorkSheet "TestDrive:\server1.xlsx" "TestDrive:\server2.xlsx" -BackgroundColor ([System.Drawing.Color]::LightGreen) -GridView:$useGrid
}
$xl1 = Open-ExcelPackage -Path "$env:temp\server1.xlsx"
$xl2 = Open-ExcelPackage -Path "$env:temp\server2.xlsx"
$xl1 = Open-ExcelPackage -Path "TestDrive:\server1.xlsx"
$xl2 = Open-ExcelPackage -Path "TestDrive:\server2.xlsx"
$s1Sheet = $xl1.Workbook.Worksheets[1]
$s2Sheet = $xl2.Workbook.Worksheets[1]
}
@@ -87,9 +91,9 @@ Describe "Compare Worksheet" {
Context "Setting the forgound to highlight changed properties" {
BeforeAll {
$null = compare-WorkSheet "$env:temp\server1.xlsx" "$env:temp\server2.xlsx" -AllDataBackgroundColor([System.Drawing.Color]::white) -BackgroundColor ([System.Drawing.Color]::LightGreen) -FontColor ([System.Drawing.Color]::DarkRed)
$xl1 = Open-ExcelPackage -Path "$env:temp\server1.xlsx"
$xl2 = Open-ExcelPackage -Path "$env:temp\server2.xlsx"
$null = compare-WorkSheet "TestDrive:\server1.xlsx" "TestDrive:\server2.xlsx" -AllDataBackgroundColor([System.Drawing.Color]::white) -BackgroundColor ([System.Drawing.Color]::LightGreen) -FontColor ([System.Drawing.Color]::DarkRed)
$xl1 = Open-ExcelPackage -Path "TestDrive:\server1.xlsx"
$xl2 = Open-ExcelPackage -Path "TestDrive:\server2.xlsx"
$s1Sheet = $xl1.Workbook.Worksheets[1]
$s2Sheet = $xl2.Workbook.Worksheets[1]
}
@@ -118,7 +122,7 @@ Describe "Compare Worksheet" {
BeforeAll {
[System.Collections.ArrayList]$s = get-service | Select-Object -first 25 -Property RequiredServices, CanPauseAndContinue, CanShutdown, CanStop,
DisplayName, DependentServices, MachineName, ServiceName, ServicesDependedOn, ServiceHandle, Status, ServiceType, StartType -ExcludeProperty Name
$s | Export-Excel -Path $env:temp\server1.xlsx -WorkSheetname Server1
$s | Export-Excel -Path TestDrive:\server1.xlsx -WorkSheetname server1
#$s is a zero based array, excel rows are 1 based and excel has a header row so Excel rows will be 2 + index in $s
$row4Displayname = $s[2].DisplayName
$s[2].DisplayName = "Changed from the orginal"
@@ -130,11 +134,11 @@ Describe "Compare Worksheet" {
$s.RemoveAt(5)
$s[10].ServiceType = "Changed should not matter"
$s | Select-Object -Property ServiceName, DisplayName, StartType, ServiceType | Export-Excel -Path $env:temp\server2.xlsx -WorkSheetname server2
$s | Select-Object -Property ServiceName, DisplayName, StartType, ServiceType | Export-Excel -Path TestDrive:\server2.xlsx -WorkSheetname server2
#Assume default worksheet name, (sheet1) and column header for key ("name")
$comp = compare-WorkSheet "$env:temp\server1.xlsx" "$env:temp\server2.xlsx" -WorkSheetName Server1,Server2 -Key ServiceName -Property DisplayName,StartType -AllDataBackgroundColor ([System.Drawing.Color]::AliceBlue) -BackgroundColor ([System.Drawing.Color]::White) -FontColor ([System.Drawing.Color]::Red) | Sort-Object _row,_file
$xl1 = Open-ExcelPackage -Path "$env:temp\server1.xlsx"
$xl2 = Open-ExcelPackage -Path "$env:temp\server2.xlsx"
$comp = compare-WorkSheet "TestDrive:\server1.xlsx" "TestDrive:\server2.xlsx" -WorkSheetName server1,server2 -Key ServiceName -Property DisplayName,StartType -AllDataBackgroundColor ([System.Drawing.Color]::AliceBlue) -BackgroundColor ([System.Drawing.Color]::White) -FontColor ([System.Drawing.Color]::Red) | Sort-Object _row,_file
$xl1 = Open-ExcelPackage -Path "TestDrive:\server1.xlsx"
$xl2 = Open-ExcelPackage -Path "TestDrive:\server2.xlsx"
$s1Sheet = $xl1.Workbook.Worksheets["server1"]
$s2Sheet = $xl2.Workbook.Worksheets["server2"]
}
@@ -188,36 +192,36 @@ Describe "Compare Worksheet" {
}
Describe "Merge Worksheet" {
BeforeAll {
Remove-Item -Path "TestDrive:\server*.xlsx" , "TestDrive:\combined*.xlsx" -ErrorAction SilentlyContinue
[System.Collections.ArrayList]$s = get-service | Select-Object -first 25 -Property *
$s | Export-Excel -Path TestDrive:\server1.xlsx
#$s is a zero based array, excel rows are 1 based and excel has a header row so Excel rows will be 2 + index in $s
$s[2].DisplayName = "Changed from the orginal"
$d = $s[-1] | Select-Object -Property *
$d.DisplayName = "Dummy Service"
$d.Name = "Dummy"
$s.Insert(3,$d)
$s.RemoveAt(5)
$s | Export-Excel -Path TestDrive:\server2.xlsx
#Assume default worksheet name, (sheet1) and column header for key ("name")
Merge-Worksheet -Referencefile "TestDrive:\server1.xlsx" -Differencefile "TestDrive:\server2.xlsx" -OutputFile "TestDrive:\combined1.xlsx" -Property name,displayname,startType -Key name
$excel = Open-ExcelPackage -Path "TestDrive:\combined1.xlsx"
$ws = $excel.Workbook.Worksheets["sheet1"]
}
Context "Merge with 3 properties" {
BeforeAll {
Remove-Item -Path "$env:temp\server*.xlsx" , "$env:temp\combined*.xlsx" -ErrorAction SilentlyContinue
[System.Collections.ArrayList]$s = get-service | Select-Object -first 25 -Property *
$s | Export-Excel -Path $env:temp\server1.xlsx
#$s is a zero based array, excel rows are 1 based and excel has a header row so Excel rows will be 2 + index in $s
$s[2].DisplayName = "Changed from the orginal"
$d = $s[-1] | Select-Object -Property *
$d.DisplayName = "Dummy Service"
$d.Name = "Dummy"
$s.Insert(3,$d)
$s.RemoveAt(5)
$s | Export-Excel -Path $env:temp\server2.xlsx
#Assume default worksheet name, (sheet1) and column header for key ("name")
Merge-Worksheet -Referencefile "$env:temp\server1.xlsx" -Differencefile "$env:temp\server2.xlsx" -OutputFile "$env:temp\combined1.xlsx" -Property name,displayname,startType -Key name
$excel = Open-ExcelPackage -Path "$env:temp\combined1.xlsx"
$ws = $excel.Workbook.Worksheets["sheet1"]
}
it "Created a worksheet with the correct headings " {
$ws | should not beNullOrEmpty
$ws.Cells[ 1,1].Value | Should be "name"
$ws.Cells[ 1,2].Value | Should be "DisplayName"
$ws.Cells[ 1,3].Value | Should be "StartType"
$ws.Cells[ 1,4].Value | Should be "Server2 DisplayName"
$ws.Cells[ 1,5].Value | Should be "Server2 StartType"
$ws.Cells[ 1,4].Value | Should be "server2 DisplayName"
$ws.Cells[ 1,5].Value | Should be "server2 StartType"
}
it "Joined the two sheets correctly " {
$ws.Cells[ 2,2].Value | Should be $ws.Cells[ 2,4].Value
@@ -249,16 +253,16 @@ Describe "Merge Worksheet" {
}
Context "Wider data set" {
it "Coped with columns beyond Z in the Output sheet " {
{ Merge-Worksheet -Referencefile "$env:temp\server1.xlsx" -Differencefile "$env:temp\server2.xlsx" -OutputFile "$env:temp\combined2.xlsx" } | Should not throw
{ Merge-Worksheet -Referencefile "TestDrive:\server1.xlsx" -Differencefile "TestDrive:\server2.xlsx" -OutputFile "TestDrive:\combined2.xlsx" } | Should not throw
}
}
}
Describe "Merge Multiple sheets" {
Context "Merge 3 sheets with 3 properties" {
BeforeAll {
Remove-Item -Path "$env:temp\server*.xlsx" , "$env:temp\combined*.xlsx" -ErrorAction SilentlyContinue
Remove-Item -Path "TestDrive:\server*.xlsx" , "TestDrive:\combined*.xlsx" -ErrorAction SilentlyContinue
[System.Collections.ArrayList]$s = get-service | Select-Object -first 25 -Property Name,DisplayName,StartType
$s | Export-Excel -Path $env:temp\server1.xlsx
$s | Export-Excel -Path TestDrive:\server1.xlsx
#$s is a zero based array, excel rows are 1 based and excel has a header row so Excel rows will be 2 + index in $s
$row4Displayname = $s[2].DisplayName
@@ -271,7 +275,7 @@ Describe "Merge Multiple sheets" {
$s.RemoveAt(5)
$s | Export-Excel -Path $env:temp\server2.xlsx
$s | Export-Excel -Path TestDrive:\server2.xlsx
$s[2].displayname = $row4Displayname
@@ -281,22 +285,22 @@ Describe "Merge Multiple sheets" {
$s.Insert(6,$d)
$s.RemoveAt(8)
$s | Export-Excel -Path $env:temp\server3.xlsx
$s | Export-Excel -Path TestDrive:\server3.xlsx
Merge-MultipleSheets -Path "$env:temp\server1.xlsx", "$env:temp\server2.xlsx","$env:temp\server3.xlsx" -OutputFile "$env:temp\combined3.xlsx" -Property name,displayname,startType -Key name
$excel = Open-ExcelPackage -Path "$env:temp\combined3.xlsx"
Merge-MultipleSheets -Path "TestDrive:\server1.xlsx", "TestDrive:\server2.xlsx","TestDrive:\server3.xlsx" -OutputFile "TestDrive:\combined3.xlsx" -Property name,displayname,startType -Key name
$excel = Open-ExcelPackage -Path "TestDrive:\combined3.xlsx"
$ws = $excel.Workbook.Worksheets["sheet1"]
}
it "Created a worksheet with the correct headings " {
$ws | Should not beNullOrEmpty
$ws.Cells[ 1,2 ].Value | Should be "name"
$ws.Cells[ 1,3 ].Value | Should be "Server1 DisplayName"
$ws.Cells[ 1,4 ].Value | Should be "Server1 StartType"
$ws.Cells[ 1,5 ].Value | Should be "Server2 DisplayName"
$ws.Cells[ 1,6 ].Value | Should be "Server2 StartType"
$ws.Cells[ 1,3 ].Value | Should be "server1 DisplayName"
$ws.Cells[ 1,4 ].Value | Should be "server1 StartType"
$ws.Cells[ 1,5 ].Value | Should be "server2 DisplayName"
$ws.Cells[ 1,6 ].Value | Should be "server2 StartType"
$ws.Column(7).hidden | Should be $true
$ws.Cells[ 1,8].Value | Should be "Server2 Row"
$ws.Cells[ 1,8].Value | Should be "server2 Row"
$ws.Cells[ 1,9 ].Value | Should be "server3 DisplayName"
$ws.Cells[ 1,10].Value | Should be "server3 StartType"
$ws.Column(11).hidden | Should be $true

View File

@@ -1,6 +1,6 @@
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
$xlFile = "$env:TEMP\testSQL.xlsx"
#Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
$xlFile = "TestDrive:\testSQL.xlsx"
Describe "ConvertFrom-ExcelToSQLInsert" {

View File

@@ -1,39 +1,36 @@
if ($PSVersionTable.os -and $PSVersionTable.os -notMatch 'Windows' ) {return} #Currently this test outputs windows services so only run on Windows.
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
$path1 = "$env:TEMP\Test1.xlsx"
$path2 = "$env:TEMP\Test2.xlsx"
Remove-item -Path $path1, $path2 -ErrorAction SilentlyContinue
$ProcRange = Get-Process | Export-Excel $path1 -DisplayPropertySet -WorkSheetname Processes -ReturnRange
if ((Get-Culture).NumberFormat.CurrencySymbol -eq "£") {$OtherCurrencySymbol = "$"}
else {$OtherCurrencySymbol = "£"}
[PSCustOmobject][Ordered]@{
Date = Get-Date
Formula1 = '=SUM(F2:G2)'
String1 = 'My String'
Float = [math]::pi
IPAddress = '10.10.25.5'
StrLeadZero = '07670'
StrComma = '0,26'
StrEngThousand = '1,234.56'
StrEuroThousand = '1.555,83'
StrDot = '1.2'
StrNegInt = '-31'
StrTrailingNeg = '31-'
StrParens = '(123)'
strLocalCurrency = ('{0}123.45' -f (Get-Culture).NumberFormat.CurrencySymbol )
strOtherCurrency = ('{0}123.45' -f $OtherCurrencySymbol )
StrE164Phone = '+32 (444) 444 4444'
StrAltPhone1 = '+32 4 4444 444'
StrAltPhone2 = '+3244444444'
StrLeadSpace = ' 123'
StrTrailSpace = '123 '
Link1 = [uri]"https://github.com/dfinke/ImportExcel"
Link2 = "https://github.com/dfinke/ImportExcel" # Links are not copied correctly, hopefully this will be fixed at some future date
} | Export-Excel -NoNumberConversion IPAddress, StrLeadZero, StrAltPhone2 -WorkSheetname MixedTypes -Path $path2
Describe "Copy-Worksheet" {
$path1 = "TestDrive:\Test1.xlsx"
$path2 = "TestDrive:\Test2.xlsx"
Remove-Item -Path $path1, $path2 -ErrorAction SilentlyContinue
$ProcRange = Get-Process | Export-Excel $path1 -DisplayPropertySet -WorkSheetname Processes -ReturnRange
if ((Get-Culture).NumberFormat.CurrencySymbol -eq "£") { $OtherCurrencySymbol = "$" }
else { $OtherCurrencySymbol = "£" }
[PSCustOmobject][Ordered]@{
Date = Get-Date
Formula1 = '=SUM(F2:G2)'
String1 = 'My String'
Float = [math]::pi
IPAddress = '10.10.25.5'
StrLeadZero = '07670'
StrComma = '0,26'
StrEngThousand = '1,234.56'
StrEuroThousand = '1.555,83'
StrDot = '1.2'
StrNegInt = '-31'
StrTrailingNeg = '31-'
StrParens = '(123)'
strLocalCurrency = ('{0}123.45' -f (Get-Culture).NumberFormat.CurrencySymbol )
strOtherCurrency = ('{0}123.45' -f $OtherCurrencySymbol )
StrE164Phone = '+32 (444) 444 4444'
StrAltPhone1 = '+32 4 4444 444'
StrAltPhone2 = '+3244444444'
StrLeadSpace = ' 123'
StrTrailSpace = '123 '
Link1 = [uri]"https://github.com/dfinke/ImportExcel"
Link2 = "https://github.com/dfinke/ImportExcel" # Links are not copied correctly, hopefully this will be fixed at some future date
} | Export-Excel -NoNumberConversion IPAddress, StrLeadZero, StrAltPhone2 -WorkSheetname MixedTypes -Path $path2
Context "Simplest copy" {
BeforeAll {
Copy-ExcelWorkSheet -SourceWorkbook $path1 -DestinationWorkbook $path2
@@ -91,8 +88,8 @@ Describe "Copy-Worksheet" {
Context "Copy worksheet should close all files" {
BeforeAll {
$xlfile = "$env:TEMP\reports.xlsx"
$xlfileArchive = "$env:TEMP\reportsArchive.xlsx"
$xlfile = "TestDrive:\reports.xlsx"
$xlfileArchive = "TestDrive:\reportsArchive.xlsx"
Remove-Item $xlfile -ErrorAction SilentlyContinue
Remove-Item $xlfileArchive -ErrorAction SilentlyContinue
@@ -119,8 +116,8 @@ Describe "Copy-Worksheet" {
Context "Copy worksheet should support piped input" {
BeforeAll {
$xlfile = "$env:TEMP\reports.xlsx"
$xlfileArchive = "$env:TEMP\reportsArchive.xlsx"
$xlfile = "TestDrive:\reports.xlsx"
$xlfileArchive = "TestDrive:\reportsArchive.xlsx"
Remove-Item $xlfile -ErrorAction SilentlyContinue
Remove-Item $xlfileArchive -ErrorAction SilentlyContinue

View File

@@ -1,14 +1,20 @@
#Requires -Modules Pester
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
$notWindows = ($PSVersionTable.os -and $PSVersionTable.os -notMatch 'Windows' )
#Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
if (Get-process -Name Excel,xlim -ErrorAction SilentlyContinue) { Write-Warning -Message "You need to close Excel before running the tests." ; return}
Describe ExportExcel {
. "$PSScriptRoot\Samples\Samples.ps1"
if (Get-process -Name Excel,xlim -ErrorAction SilentlyContinue) {
It "Excel is open" {
$Warning = "You need to close Excel before running the tests."
Write-Warning -Message $Warning
Set-ItResult -Inconclusive -Because $Warning
}
return
}
Context "#Example 1 # Creates and opens a file with the right number of rows and columns" {
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
Remove-item -Path $path -ErrorAction SilentlyContinue
#Test with a maximum of 100 processes for speed; export all properties, then export smaller subsets.
$processes = Get-Process | where {$_.StartTime} | Select-Object -first 100 -Property * -excludeProperty Parent
@@ -70,7 +76,7 @@ Describe ExportExcel {
}
Context " # NoAliasOrScriptPropeties -ExcludeProperty and -DisplayPropertySet work" {
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
Remove-item -Path $path -ErrorAction SilentlyContinue
$processes = Get-Process | Select-Object -First 100
$propertyNames = $Processes[0].psobject.properties.where( {$_.MemberType -eq 'Property'}).name
@@ -119,7 +125,7 @@ Describe ExportExcel {
Context "#Example 2 # Exports a list of numbers and applies number format " {
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
Remove-item -Path $path -ErrorAction SilentlyContinue
#testing -ReturnRange switch and applying number format to Formulas as well as values.
$returnedRange = @($null, -1, 0, 34, 777, "", -0.5, 119, -0.1, 234, 788,"=A9+A10") | Export-Excel -NumberFormat '[Blue]$#,##0.00;[Red]-$#,##0.00' -Path $path -ReturnRange
@@ -158,7 +164,7 @@ Describe ExportExcel {
Context " # Number format parameter" {
BeforeAll {
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
Remove-Item -Path $path -ErrorAction SilentlyContinue
1..10 | Export-Excel -Path $path -Numberformat 'Number'
1..10 | Export-Excel -Path $path -Numberformat 'Percentage' -Append
@@ -181,7 +187,7 @@ Describe ExportExcel {
if ((Get-Culture).NumberFormat.CurrencySymbol -eq "£") {$OtherCurrencySymbol = "$"}
else {$OtherCurrencySymbol = "£"}
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
$warnVar = $null
#Test correct export of different data types and number formats; test hyperlinks, test -NoNumberConversion test object is converted to a string with no warnings, test calcuation of formula
Remove-item -Path $path -ErrorAction SilentlyContinue
@@ -298,7 +304,7 @@ Describe ExportExcel {
Context "# # Setting cells for different data types with -noHeader" {
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
Remove-item -Path $path -ErrorAction SilentlyContinue
#Test -NoHeader & -NoNumberConversion
[PSCustOmobject][Ordered]@{
@@ -359,7 +365,7 @@ Describe ExportExcel {
#Test New-ConditionalText builds correctly
$ct = New-ConditionalText -ConditionalType GreaterThan 525 -ConditionalTextColor ([System.Drawing.Color]::DarkRed) -BackgroundColor ([System.Drawing.Color]::LightPink)
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
Remove-item -Path $path -ErrorAction SilentlyContinue
#Test -ConditionalText with a single conditional spec.
Write-Output 489 668 299 777 860 151 119 497 234 788 | Export-Excel -Path $path -ConditionalText $ct
@@ -386,19 +392,19 @@ Describe ExportExcel {
}
}
Context "#Example 6 # Adding multiple conditional formats using short form syntax. " {
if ($notwindows) {Write-warning "Test only runs on Windows" ; return}
#Test adding mutliple conditional blocks and using the minimal syntax for new-ConditionalText
$path = Join-Path $Env:TEMP "test.xlsx"
Remove-item -Path $path -ErrorAction SilentlyContinue
#Test adding mutliple conditional blocks and using the minimal syntax for new-ConditionalText
$path = "TestDrive:\test.xlsx"
Remove-item -Path $path -ErrorAction SilentlyContinue
#Testing -Passthrough
$Excel = Get-Service | Select-Object Name, Status, DisplayName, ServiceName |
Export-Excel $path -PassThru -ConditionalText $(
New-ConditionalText Stop ([System.Drawing.Color]::DarkRed) ([System.Drawing.Color]::LightPink)
New-ConditionalText Running ([System.Drawing.Color]::Blue) ([System.Drawing.Color]::Cyan)
)
$ws = $Excel.Workbook.Worksheets[1]
#Testing -Passthrough
$Excel = Get-Service | Select-Object Name, Status, DisplayName, ServiceName |
Export-Excel $path -PassThru -ConditionalText $(
New-ConditionalText Stop ([System.Drawing.Color]::DarkRed) ([System.Drawing.Color]::LightPink)
New-ConditionalText Running ([System.Drawing.Color]::Blue) ([System.Drawing.Color]::Cyan)
)
$ws = $Excel.Workbook.Worksheets[1]
Context "#Example 6 # Adding multiple conditional formats using short form syntax. " {
it "Added two blocks of conditional formating for the data range " {
$ws.ConditionalFormatting.Count | Should be 2
$ws.ConditionalFormatting[0].Address | Should be ($ws.Dimension.Address)
@@ -411,8 +417,8 @@ Describe ExportExcel {
$ws.ConditionalFormatting[1].Type | Should be "ContainsText"
#Add RGB Comparison
}
Close-ExcelPackage -ExcelPackage $Excel
}
Close-ExcelPackage -ExcelPackage $Excel
Context "#Example 7 # Update-FirstObjectProperties works " {
$Array = @()
@@ -451,11 +457,9 @@ Describe ExportExcel {
}
Context "#Examples 8 & 9 # Adding Pivot tables and charts from parameters" {
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
#Test -passthru and -worksheetName creating a new, named, sheet in an existing file.
$Script:Procs= Get-Process | Select-Object -first 20 -Property Name, cpu, pm, handles, company
if ($Procs.count -lt 20) {Write-warning "Not enough proceses were returned by get-Process to run the test." ; return}
$Excel = $Script:Procs| Export-Excel $path -WorkSheetname Processes -PassThru
$Excel = Get-Process | Select-Object -first 20 -Property Name, cpu, pm, handles, company | Export-Excel $path -WorkSheetname Processes -PassThru
#Testing -Excel Pacakage and adding a Pivot-table as a second step. Want to save and re-open it ...
Export-Excel -ExcelPackage $Excel -WorkSheetname Processes -IncludePivotTable -PivotRows Company -PivotData PM -NoTotalsInPivot -PivotDataToColumn -Activate
@@ -471,8 +475,9 @@ Describe ExportExcel {
$excel.Workbook.Worksheets["Processes"].Dimension.rows | Should be 21 #20 data + 1 header
}
it "Selected the Pivottable page " {
Set-ItResult -Pending -Because "Bug in EPPLus 4.5"
$PTws.View.TabSelected | Should be $true
} -Skip # << Bug in EPPLus 4.5
}
$pt = $PTws.PivotTables[0]
it "Built the expected Pivot table " {
$pt.RowFields.Count | Should be 1
@@ -512,7 +517,7 @@ Describe ExportExcel {
}
Context " # Add-Worksheet inserted sheets, moved them correctly, and copied a sheet" {
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
#Test the -CopySource and -Movexxxx parameters for Add-WorkSheet
$Excel = Open-ExcelPackage $path
#At this point Sheets Should be in the order Sheet1, Processes, ProcessesPivotTable
@@ -534,7 +539,7 @@ Describe ExportExcel {
$excel.Workbook.Worksheets[5].Name | Should be "Processes"
$excel.Workbook.Worksheets[6].Name | Should be "NearDone"
$excel.Workbook.Worksheets[7].Name | Should be "Sheet1"
} -skip:($Procs.count -lt 20)
}
it "Cloned 'Sheet1' to 'NewSheet' " {
$newWs = $excel.Workbook.Worksheets["NewSheet"]
@@ -547,15 +552,13 @@ Describe ExportExcel {
}
Context " # Create and append with Start row and Start Column, inc ranges and Pivot table. " {
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
remove-item -Path $path -ErrorAction SilentlyContinue
#Catch warning
$warnVar = $null
#Test -Append with no existing sheet. Test adding a named pivot table from command line parameters and extending ranges when they're not specified explictly
$Script:Procs= Get-Process
if ($Procs.count -lt 20) {Write-warning "Not enough proceses were returned by get-Process to run the test." ; return}
$Script:Procs| Select-Object -First 10 -Property Name, cpu, pm, handles, company | Export-Excel -StartRow 3 -StartColumn 3 -BoldTopRow -IncludePivotTable -PivotRows Company -PivotData PM -PivotTableName 'PTOffset' -Path $path -WorkSheetname withOffset -Append -PivotFilter Name -NoTotalsInPivot -RangeName procs -AutoFilter -AutoNameRange
$Script:Procs| Select-Object -Last 10 -Property Name, cpu, pm, handles, company | Export-Excel -StartRow 3 -StartColumn 3 -BoldTopRow -IncludePivotTable -PivotRows Company -PivotData PM -PivotTableName 'PTOffset' -Path $path -WorkSheetname withOffset -Append -WarningAction SilentlyContinue -WarningVariable warnvar
Get-Process | Select-Object -first 10 -Property Name, cpu, pm, handles, company | Export-Excel -StartRow 3 -StartColumn 3 -BoldTopRow -IncludePivotTable -PivotRows Company -PivotData PM -PivotTableName 'PTOffset' -Path $path -WorkSheetname withOffset -Append -PivotFilter Name -NoTotalsInPivot -RangeName procs -AutoFilter -AutoNameRange
Get-Process | Select-Object -last 10 -Property Name, cpu, pm, handles, company | Export-Excel -StartRow 3 -StartColumn 3 -BoldTopRow -IncludePivotTable -PivotRows Company -PivotData PM -PivotTableName 'PTOffset' -Path $path -WorkSheetname withOffset -Append -WarningAction SilentlyContinue -WarningVariable warnvar
$Excel = Open-ExcelPackage $path
$dataWs = $Excel.Workbook.Worksheets["withOffset"]
$pt = $Excel.Workbook.Worksheets["PTOffset"].PivotTables[0]
@@ -599,14 +602,11 @@ Describe ExportExcel {
}
Context " # Create and append explicit and auto table and range extension" {
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
#Test -Append automatically extends a table, even when it is not specified in the append command;
$Script:Procs= Get-process
if ($Procs.count -lt 20) {Write-warning "Not enough proceses were returned by get-Process to run the test." ; return}
$Script:Procs| Select-Object -first 10 -Property Name, cpu, pm, handles, company | Export-Excel -Path $path -TableName ProcTab -AutoNameRange -WorkSheetname NoOffset -ClearSheet
Get-Process | Select-Object -first 10 -Property Name, cpu, pm, handles, company | Export-Excel -Path $path -TableName ProcTab -AutoNameRange -WorkSheetname NoOffset -ClearSheet
#Test number format applying to new data
$Script:Procs| Select-Object -last 10 -Property Name, cpu, pm, handles, company | Export-Excel -Path $path -AutoNameRange -WorkSheetname NoOffset -Append -Numberformat 'Number'
Get-Process | Select-Object -last 10 -Property Name, cpu, pm, handles, company | Export-Excel -Path $path -AutoNameRange -WorkSheetname NoOffset -Append -Numberformat 'Number'
$Excel = Open-ExcelPackage $path
$dataWs = $Excel.Workbook.Worksheets["NoOffset"]
@@ -635,8 +635,7 @@ Describe ExportExcel {
}
Context "#Example 11 # Create and append with title, inc ranges and Pivot table" {
if ($Procs.count -lt 20) {Write-warning "Not enough proceses were returned by get-Process to run the test." ; return}
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
#Test New-PivotTableDefinition builds definition using -Pivotfilter and -PivotTotals options.
$ptDef = [ordered]@{}
$ptDef += New-PivotTableDefinition -PivotTableName "PT1" -SourceWorkSheet 'Sheet1' -PivotRows "Status" -PivotData @{'Status' = 'Count'} -PivotTotals Columns -PivotFilter "StartType" -IncludePivotChart -ChartType BarClustered3D -ChartTitle "Services by status" -ChartHeight 512 -ChartWidth 768 -ChartRow 10 -ChartColumn 0 -NoLegend -PivotColumns CanPauseAndContinue
@@ -718,8 +717,8 @@ Describe ExportExcel {
}
Context "#Example 13 # Formatting and another way to do a pivot. " {
$path = Join-Path $Env:TEMP "test.xlsx"
Remove-Item $path -ErrorAction SilentlyContinue
$path = "TestDrive:\test.xlsx"
Remove-Item $path
#Test freezing top row/first column, adding formats and a pivot table - from Add-Pivot table not a specification variable - after the export
$excel = Get-Process | Select-Object -Property Name, Company, Handles, CPU, PM, NPM, WS | Export-Excel -Path $path -ClearSheet -WorkSheetname "Processes" -FreezeTopRowFirstColumn -PassThru
$sheet = $excel.Workbook.Worksheets["Processes"]
@@ -747,6 +746,8 @@ Describe ExportExcel {
}
it "Applied the formating " {
$sheet | Should not beNullOrEmpty
$sheet.Column(1).wdith | Should not be $sheet.DefaultColWidth
$sheet.Column(7).wdith | Should not be $sheet.DefaultColWidth
$sheet.Column(1).style.font.bold | Should be $true
$sheet.Column(2).style.wraptext | Should be $true
$sheet.Column(2).width | Should be 29
@@ -769,10 +770,6 @@ Describe ExportExcel {
$sheet.ConditionalFormatting[2].Formula | Should be '104857600'
$sheet.ConditionalFormatting[2].Style.Font.Color.Color.Name | Should be 'ffff0000'
}
it "Applied autowidth " {
$sheet.Column(1).wdith | Should not be $sheet.DefaultColWidth
$sheet.Column(7).wdith | Should not be $sheet.DefaultColWidth
} -skip:$notwindows
it "Created the named ranges " {
$sheet.Names.Count | Should be 7
$sheet.Names[0].Start.Column | Should be 1
@@ -800,7 +797,7 @@ Describe ExportExcel {
}
Context " # Chart from MultiSeries.ps1 in the Examples\charts Directory" {
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
Remove-Item -Path $path -ErrorAction SilentlyContinue
#Test we haven't missed any parameters on New-ChartDefinition which are on add chart or vice versa.
@@ -823,7 +820,7 @@ Describe ExportExcel {
$data[1].Handles | Should not beNullOrEmpty
$data[1].PM | Should not beNullOrEmpty
$data[1].VirtualMemorySize | Should not beNullOrEmpty
} -skip:($procs.count -lt 20)
}
$c = New-ExcelChartDefinition -Title Stats -ChartType LineMarkersStacked -XRange "Processes[Name]" -YRange "Processes[PM]", "Processes[VirtualMemorySize]" -SeriesHeader 'PM', 'VMSize'
it "Created the Excel chart definition " {
@@ -858,7 +855,7 @@ Describe ExportExcel {
}
Context " # variation of plot.ps1 from Examples Directory using Add chart outside ExportExcel" {
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
#Test inserting a fomual
$excel = 0..360 | ForEach-Object {[pscustomobject][ordered]@{x = $_; Sinx = "=Sin(Radians(x)) "}} | Export-Excel -AutoNameRange -Path $path -WorkSheetname SinX -ClearSheet -FreezeFirstColumn -PassThru
#Test-Add Excel Chart to existing data. Test add Conditional formatting with a formula
@@ -900,7 +897,7 @@ Describe ExportExcel {
}
Context " # Quick line chart" {
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
Remove-Item -Path $path -ErrorAction SilentlyContinue
#test drawing a chart when data doesn't have a string
0..360 | ForEach-Object {[pscustomobject][ordered]@{x = $_; Sinx = "=Sin(Radians(x)) "}} | Export-Excel -AutoNameRange -Path $path -LineChart
@@ -918,10 +915,8 @@ Describe ExportExcel {
}
Context " # Quick Pie chart and three icon conditional formating" {
$path = Join-Path $Env:TEMP "Pie.xlsx"
$path = "TestDrive:\Pie.xlsx"
Remove-Item -Path $path -ErrorAction SilentlyContinue
$Script:Procs= Get-Process
if ($Procs.count -lt 20) {Write-warning "Not enough proceses were returned by get-Process to run the test." ; return}
$range = Get-Process| Group-Object -Property company | Where-Object -Property name |
Select-Object -Property Name, @{n="TotalPm";e={($_.group | Measure-Object -sum -Property pm).sum }} |
Export-Excel -NoHeader -AutoNameRange -path $path -ReturnRange -PieChart -ShowPercent
@@ -957,11 +952,16 @@ Describe ExportExcel {
}
Context " # Awkward multiple tables" {
if ($notWindows) {Write-warning "Test only runs on Windows" ; return}
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
#Test creating 3 on overlapping tables on the same page. Create rightmost the left most then middle.
remove-item -Path $path -ErrorAction SilentlyContinue
$r = Get-ChildItem -path C:\WINDOWS\system32 -File
if ($IsLinux -or $IsMacOS) {
$SystemFolder = '/etc'
}
else {
$SystemFolder = 'C:\WINDOWS\system32'
}
$r = Get-ChildItem -path $SystemFolder -File
"Biggest files" | Export-Excel -Path $path -StartRow 1 -StartColumn 7
$r | Sort-Object length -Descending | Select-Object -First 14 Name, @{n="Size";e={$_.Length}} |
@@ -993,7 +993,7 @@ Describe ExportExcel {
}
Context " # Parameters and ParameterSets" {
$Path = join-path $env:TEMP "temp.xlsx"
$Path = Join-Path (Resolve-Path 'TestDrive:').ProviderPath "test.xlsx"
Remove-Item -Path $Path -ErrorAction SilentlyContinue
$Processes = Get-Process | Select-Object -first 10 -Property Name, cpu, pm, handles, company
@@ -1028,26 +1028,24 @@ Describe ExportExcel {
$ExcelPackage.File | Should Be $Path
$Worksheet.Tables[0].Name | Should Be 'Table1'
}
it "Now will use temp Path, set TableName with generated name".PadRight(87) {
it "Now will use temp Path, set TableName with generated name and AutoSize".PadRight(87) {
$ExcelPackage = $Processes | Export-Excel -Now -PassThru
$Script:Worksheet = $ExcelPackage.Workbook.Worksheets[1]
$Worksheet = $ExcelPackage.Workbook.Worksheets[1]
$ExcelPackage.File | Should BeLike ([IO.Path]::GetTempPath() + '*')
$Script:Worksheet.Tables[0].Name | Should Be 'Table1'
$Script:Worksheet.AutoFilterAddress | Should BeNullOrEmpty}
it "Applies AutoSize with these".PadRight(87) {
$Script:Worksheet.Column(5).Width | Should BeGreaterThan 9.5
} -skip:$notwindows
$Worksheet.Tables[0].Name | Should Be 'Table1'
$Worksheet.AutoFilterAddress | Should BeNullOrEmpty
$Worksheet.Column(5).Width | Should BeGreaterThan 9.5
}
it "Now allows override of Path and TableName".PadRight(87) {
$ExcelPackage = $Processes | Export-Excel -Now -PassThru -Path $Path -TableName:$false
$Script:Worksheet = $ExcelPackage.Workbook.Worksheets[1]
$Worksheet = $ExcelPackage.Workbook.Worksheets[1]
$ExcelPackage.File | Should Be $Path
$Script:Worksheet.Tables | Should BeNullOrEmpty
$Script:Worksheet.AutoFilterAddress | Should BeNullOrEmpty
$Worksheet.Tables | Should BeNullOrEmpty
$Worksheet.AutoFilterAddress | Should BeNullOrEmpty
$Worksheet.Column(5).Width | Should BeGreaterThan 9.5
}
it "Allows AutoSize with the override".PadRight(87) {
$Script:Worksheet.Column(5).Width | Should BeGreaterThan 9.5
} -skip:$notwindows
<# Mock looks unreliable need to check
Mock -CommandName 'Invoke-Item'
it "Now will Show".PadRight(87) {
@@ -1069,14 +1067,11 @@ Describe ExportExcel {
}
it "Now allows to set TableName".PadRight(87) {
$ExcelPackage = $Processes | Export-Excel -Now -PassThru -TableName 'Data'
$Script:Worksheet = $ExcelPackage.Workbook.Worksheets[1]
$Worksheet = $ExcelPackage.Workbook.Worksheets[1]
$Script:Worksheet.Tables[0].Name | Should Be 'Data'
$Script:Worksheet.AutoFilterAddress | Should BeNullOrEmpty
$Worksheet.Tables[0].Name | Should Be 'Data'
$Worksheet.AutoFilterAddress | Should BeNullOrEmpty
$Worksheet.Column(5).Width | Should BeGreaterThan 9.5
}
it "Allows to set TableName with AutoSize".PadRight(87) {
$Script:Worksheet.Column(5).Width | Should BeGreaterThan 9.5
} -skip:$notwindows
}
}

View File

@@ -1,9 +1,9 @@
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
$path = Join-Path $Env:TEMP "test.xlsx"
remove-item -path $path -ErrorAction SilentlyContinue
ConvertFrom-Csv @"
Describe "Creating workbook with a single line" {
$path = "TestDrive:\test.xlsx"
remove-item -path $path -ErrorAction SilentlyContinue
ConvertFrom-Csv @"
Product, City, Gross, Net
Apple, London , 300, 250
Orange, London , 400, 350
@@ -17,10 +17,9 @@ Apple, New York, 1200,700
PivotChartDefinition=@{Title="Gross and net by city and product"; ChartType="ColumnClustered"; Column=6; Width=600; Height=360; YMajorUnit=500; YMinorUnit=100; YAxisNumberformat="$#,##0"; LegendPosition="Bottom"}}}
$excel = Open-ExcelPackage $path
$ws1 = $excel.Workbook.Worksheets[1]
$ws2 = $excel.Workbook.Worksheets[2]
Describe "Creating workbook with a single line" {
$excel = Open-ExcelPackage $path
$ws1 = $excel.Workbook.Worksheets[1]
$ws2 = $excel.Workbook.Worksheets[2]
Context "Data Page" {
It "Inserted the data and created the table " {
$ws1.Tables[0] | Should not beNullOrEmpty
@@ -52,8 +51,9 @@ Describe "Creating workbook with a single line" {
$ws2.PivotTables[0].ColumGrandTotals | Should be $true #Epplus's mis-spelling of column not mine
}
it "Made the PivotTable page active " {
Set-ItResult -Pending -Because "Bug in EPPLus 4.5"
$ws2.View.TabSelected | Should be $true
} -Skip # << Bug in EPPLus 4.5
}
it "Created the Pivot Chart " {
$ws2.Drawings[0] | Should not beNullOrEmpty
$ws2.Drawings[0].ChartType.ToString() | Should be ColumnClustered

View File

@@ -1,11 +1,9 @@
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
$scriptPath = Split-Path -Path $MyInvocation.MyCommand.path -Parent
$scriptPath = Split-Path -Path $MyInvocation.MyCommand.path -Parent
$dataPath = Join-Path -Path $scriptPath -ChildPath "First10Races.csv"
Describe "Creating small named ranges with hyperlinks" {
BeforeAll {
$path = Join-Path $Env:TEMP "results.xlsx"
$path = "TestDrive:\Results.xlsx"
Remove-Item -Path $path -ErrorAction SilentlyContinue
#Read race results, and group by race name : export 1 row to get headers, leaving enough rows aboce to put in a link for each race
$results = Import-Csv -Path $dataPath |
@@ -94,11 +92,12 @@ Describe "Creating small named ranges with hyperlinks" {
$sheet.ConditionalFormatting[1].StopIfTrue | Should be $true
}
It "Applied ConditionalFormatting, including Reverse " {
Set-ItResult -Pending -Because "Bug in EPPLus 4.5"
$sheet.ConditionalFormatting[3].LowValue.Color.R | Should begreaterThan 180
$sheet.ConditionalFormatting[3].LowValue.Color.G | Should beLessThan 128
$sheet.ConditionalFormatting[3].HighValue.Color.R | Should beLessThan 128
$sheet.ConditionalFormatting[3].HighValue.Color.G | Should begreaterThan 180
} -Skip # << Bug in EPPLus 4.5
}
}
Context "Adding a table" {
it "Created a table " {

View File

@@ -1,6 +1,6 @@
#Requires -Modules Pester
remove-module importExcel -erroraction silentlyContinue
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
#remove-module importExcel -erroraction silentlyContinue
#Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
Describe "Check if Function aliases exist" {

View File

@@ -1,4 +1,4 @@
Import-Module $PSScriptRoot\..\..\ImportExcel.psd1
#Import-Module $PSScriptRoot\..\..\ImportExcel.psd1
Describe "Tests" {
BeforeAll {

View File

@@ -1,8 +1,6 @@
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
Describe "Exporting with -Inputobject" {
BeforeAll {
$path = Join-Path $Env:TEMP "results.xlsx"
$path = "TestDrive:\Results.xlsx"
Remove-Item -Path $path -ErrorAction SilentlyContinue
#Read race results, and group by race name : export 1 row to get headers, leaving enough rows aboce to put in a link for each race
$results = ((Get-Process) + (Get-Process -id $PID)) | Select-Object -last 10 -Property Name, cpu, pm, handles, StartTime

View File

@@ -0,0 +1,26 @@
<#
.SYNOPSIS
Installs PowerShell Core on Windows.
#>
[CmdLetBinding()]
Param
(
# Version to install in the format from the .msi, for example "7.0.0-preview.1"
[Parameter(Mandatory)]
[String]$Version
)
$ErrorActionPreference = 'Stop'
'[Progress] Downloading PowerShell Core.'
$MsiPath = Join-Path $env:TEMP "PowerShell-$Version-win-x64.msi"
[System.Net.WebClient]::new().DownloadFile("https://github.com/PowerShell/PowerShell/releases/download/v$Version/PowerShell-$Version-win-x64.msi", $MsiPath)
'[Progress] Installing PowerShell Core.'
Start-Process 'msiexec.exe' -Wait -ArgumentList "/i $MsiPath /quiet"
Remove-Item -Path $MsiPath
$PowerShellFolder = $Version[0]
if ($Version -like "*preview*") {
$PowerShellFolder += '-preview'
}
$env:Path = "$env:ProgramFiles\PowerShell\$PowerShellFolder;$env:Path"
'[Progress] PowerShell Core Installed.'

View File

@@ -1,7 +1,4 @@
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
$notWindows = ($PSVersionTable.os -and $PSVersionTable.os -notMatch 'Windows' )
$data1 = ConvertFrom-Csv -InputObject @"
$data1 = ConvertFrom-Csv -InputObject @"
ID,Product,Quantity,Price,Total
12001,Nails,37,3.99,147.63
12002,Hammer,5,12.10,60.5
@@ -27,7 +24,8 @@ ID,Product,Quantity,Price,Total
Describe "Join Worksheet part 1" {
BeforeAll {
$path = Join-Path $Env:TEMP "test.xlsx"
. "$PSScriptRoot\Samples\Samples.ps1"
$path = "TestDrive:\test.xlsx"
Remove-Item -Path $path -ErrorAction SilentlyContinue
$data1 | Export-Excel -Path $path -WorkSheetname Oxford
$data2 | Export-Excel -Path $path -WorkSheetname Abingdon
@@ -53,9 +51,10 @@ Describe "Join Worksheet part 1" {
$excel.Workbook.Worksheets["SummaryPivot"].Hidden | Should be 'Visible'
}
it "Activated the correct worksheet " {
Set-ItResult -Pending -Because "Bug in EPPLus 4.5"
$excel.Workbook.worksheets["SummaryPivot"].View.TabSelected | Should be $true
$excel.Workbook.worksheets["Total"].View.TabSelected | Should be $false
} -Skip # << Bug in EPPLus 4.5
}
}
Context "Merging 3 blocks" {
@@ -92,11 +91,10 @@ Describe "Join Worksheet part 1" {
}
}
}
$path = Join-Path $Env:TEMP "Test.xlsx"
$path = "TestDrive:\Test.xlsx"
Remove-item -Path $path -ErrorAction SilentlyContinue
#switched to CIM objects so test runs on V6
Describe "Join Worksheet part 2" {
if ($notWindows) {Write-warning -message "Test only runs on Windows" ; return}
Get-CimInstance -ClassName win32_logicaldisk |
Select-Object -Property DeviceId,VolumeName, Size,Freespace |
Export-Excel -Path $path -WorkSheetname Volumes -NumberFormat "0,000"

View File

@@ -2,13 +2,15 @@
Describe "Password Support" {
if ($PSVersionTable.PSVersion.Major -GT 5) {
Write-Warning "Can't test passwords on V6 and later"
It "Password Supported" {
Set-ItResult -Pending -Because "Can't test passwords on V6 and later"
}
return
}
Context "Password protected sheet" {
BeforeAll {
$password = "YouMustRememberThis"
$path = "$env:TEMP\Test.xlsx"
$path = "TestDrive:\Test.xlsx"
Remove-Item $path -ErrorAction SilentlyContinue
Get-Service | Select-Object -First 10 | Export-excel -password $password -Path $Path -DisplayPropertySet
}

View File

@@ -1,8 +1,8 @@
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
$path = Join-Path $Env:TEMP "test.xlsx"
Remove-Item -path $path -ErrorAction SilentlyContinue
$excel = ConvertFrom-Csv @"
Describe "Setting worksheet protection " {
BeforeAll {
$path = "TestDrive:\test.xlsx"
Remove-Item -path $path -ErrorAction SilentlyContinue
$excel = ConvertFrom-Csv @"
Product, City, Gross, Net
Apple, London , 300, 250
Orange, London , 400, 350
@@ -13,14 +13,11 @@ Apple, New York, 1200,700
"@ | Export-Excel -Path $path -WorksheetName Sheet1 -PassThru
$ws = $excel.sheet1
$ws = $excel.sheet1
Set-WorkSheetProtection -WorkSheet $ws -IsProtected -BlockEditObject -AllowFormatRows -UnLockAddress "1:1"
Set-WorkSheetProtection -WorkSheet $ws -IsProtected -BlockEditObject -AllowFormatRows -UnLockAddress "1:1"
Close-ExcelPackage -ExcelPackage $excel
Describe "Setting worksheet protection " {
BeforeAll {
Close-ExcelPackage -ExcelPackage $excel
$excel = Open-ExcelPackage -Path $path
$ws = $ws = $excel.sheet1
}

105
__tests__/Publish.ps1 Normal file
View File

@@ -0,0 +1,105 @@
<#
.SYNOPSIS
Deploy module to PowerShellGallery.
#>
[CmdletBinding(DefaultParameterSetName = 'ModuleName')]
Param
(
# The name of the installed module to be deployed, if not provided the name of the .psm1 file in the parent folder is used.
[Parameter(ParameterSetName = 'ModuleName')]
[ValidateNotNullOrEmpty()]
[String]$ModuleName,
# Publish module from path (module folder), if not provided -ModuleName is used.
[Parameter(Mandatory, ParameterSetName = 'Path')]
[ValidateNotNullOrEmpty()]
[String]$Path,
# Key for PowerShellGallery deployment, if not provided $env:NugetApiKey is used.
[ValidateNotNullOrEmpty()]
[String]$NugetApiKey,
# Skip Version verification for PowerShellGallery deployment, can be used for first release.
[Switch]$Force
)
$ErrorActionPreference = 'Stop'
if ($Path) {
$Path = Resolve-Path -Path $Path
if ($Path.Count -ne 1) {
throw ('Invalid Path, $Path.Count: {0}.' -f $Path.Count)
}
$Psd1Path = (Get-ChildItem -File -Filter *.psd1 -Path $Path -Recurse)[0].FullName
$ModuleName = [System.IO.Path]::GetFileNameWithoutExtension($Psd1Path)
$VersionLocal = (. ([Scriptblock]::Create((Get-Content -Path $Psd1Path | Out-String)))).ModuleVersion
}
else {
# Get Script Root
if ($PSScriptRoot) {
$ScriptRoot = $PSScriptRoot
}
elseif ($psISE.CurrentFile.IsUntitled -eq $false) {
$ScriptRoot = Split-Path -Path $psISE.CurrentFile.FullPath
}
elseif ($null -ne $psEditor.GetEditorContext().CurrentFile.Path -and $psEditor.GetEditorContext().CurrentFile.Path -notlike 'untitled:*') {
$ScriptRoot = Split-Path -Path $psEditor.GetEditorContext().CurrentFile.Path
}
else {
$ScriptRoot = '.'
}
# Get Module Info
if (!$ModuleName) {
$ModuleName = [System.IO.Path]::GetFileNameWithoutExtension((Get-ChildItem -File -Filter *.psm1 -Name -Path (Split-Path $ScriptRoot)))
}
$VersionLocal = ((Get-Module -Name $ModuleName -ListAvailable).Version | Measure-Object -Maximum).Maximum
}
"[Progress] Deploy Script Start for Module: $ModuleName, Version: $VersionLocal."
# Deploy to PowerShell Gallery if run locally OR from AppVeyor & GitHub master
if (!$env:APPVEYOR -or $env:APPVEYOR_REPO_BRANCH -eq 'master') {
if ($env:APPVEYOR) {
$Success = $true
$AppVeyorProject = Invoke-RestMethod -Uri "https://ci.appveyor.com/api/projects/$env:APPVEYOR_ACCOUNT_NAME/$env:APPVEYOR_PROJECT_SLUG"
$AppVeyorProject.build.jobs | ForEach-Object {
'[Info] AppVeyor job name: "{0}", Id: {1}, Status: {2}.' -f $_.name, $_.jobId, $_.status
if ($_.jobId -ne $env:APPVEYOR_JOB_ID -and $_.status -ne "success") {
$Success = $false
}
}
if (!$Success) {
'[Info] There are filed jobs skipping PowerShell Gallery deploy.'
break
}
}
try {
$VersionGallery = (Find-Module -Name $ModuleName -ErrorAction Stop).Version
}
catch {
if ($_.Exception.Message -notlike 'No match was found for the specified search criteria*' -or !$Force) {
throw $_
}
}
"[Info] PowerShellGallery. $ModuleName, VersionGallery: $VersionGallery, VersionLocal: $VersionLocal."
if ($VersionGallery -lt $VersionLocal -or $Force) {
if (!$NugetApiKey) {
$NugetApiKey = $env:NugetApiKey
}
"[Info] PowerShellGallery. Deploying $ModuleName version $VersionLocal."
if ($Path) {
Publish-Module -NuGetApiKey $NugetApiKey -Path $Path
}
else {
Publish-Module -NuGetApiKey $NugetApiKey -Name $ModuleName -RequiredVersion $VersionLocal
}
}
else {
'[Info] PowerShellGallery Deploy Skipped (Version Check).'
}
}
else {
'[Info] PowerShellGallery Deploy Skipped.'
}
'[Progress] Deploy Ended.'

View File

@@ -1,10 +1,5 @@
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
$notWindows = ($PSVersionTable.os -and $PSVersionTable.os -notMatch 'Windows' )
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
describe "Consistent passing of ranges." {
if ($notWindows) {Write-warning -message "Test uses get-service so only works on Windows" ; return}
Context "Conditional Formatting" {
Remove-Item -path $path -ErrorAction SilentlyContinue
$excel = Get-Service | Export-Excel -Path $path -WorksheetName Services -PassThru -AutoSize -DisplayPropertySet -AutoNameRange -Title "Services on $Env:COMPUTERNAME"

View File

@@ -1,6 +1,5 @@
#Requires -Modules Pester
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
#Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
Describe "Remove Worksheet" {
Context "Remove a worksheet output" {
@@ -11,7 +10,7 @@ Name,Age
Jane,10
John,20
"@
$xlFile1 = Join-Path $Env:TEMP "removeWorsheet1.xlsx"
$xlFile1 = "TestDrive:\RemoveWorsheet1.xlsx"
Remove-Item $xlFile1 -ErrorAction SilentlyContinue
$data | Export-Excel -Path $xlFile1 -WorksheetName Target1
@@ -19,7 +18,7 @@ John,20
$data | Export-Excel -Path $xlFile1 -WorksheetName Target3
$data | Export-Excel -Path $xlFile1 -WorksheetName Sheet1
$xlFile2 = Join-Path $Env:TEMP "removeWorsheet2.xlsx"
$xlFile2 = "TestDrive:\RemoveWorsheet2.xlsx"
Remove-Item $xlFile2 -ErrorAction SilentlyContinue
$data | Export-Excel -Path $xlFile2 -WorksheetName Target1
@@ -66,7 +65,7 @@ John,20
it "Should delete sheet from multiple workbooks".PadRight(87) {
Get-ChildItem (Join-Path $Env:TEMP "removeWorsheet*.xlsx") | Remove-WorkSheet
Get-ChildItem "TestDrive:\RemoveWorsheet*.xlsx" | Remove-WorkSheet
$actual = Get-ExcelSheetInfo -Path $xlFile1

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,53 @@
if ($IsLinux -or $IsMacOS) {
if (-not (Get-Command 'Get-Service' -ErrorAction SilentlyContinue)) {
function Get-Service {
Import-Clixml -Path (Join-Path $PSScriptRoot Get-Service.xml)
}
}
if (-not (Get-Command 'Get-CimInstance' -ErrorAction SilentlyContinue)) {
function Get-CimInstance {
param (
$ClassName,
$Namespace,
$class
)
if ($ClassName -eq 'win32_logicaldisk') {
Import-Clixml -Path (Join-Path $PSScriptRoot Get-CimInstanceDisk.xml)
}
elseif ($class -eq 'MSFT_NetAdapter') {
Import-Clixml -Path (Join-Path $PSScriptRoot Get-CimInstanceNetAdapter.xml)
}
}
}
function Get-Process {
param (
$Name,
$Id
)
if (-not $Name) {
if ($Id) {
(Import-Clixml -Path (Join-Path $PSScriptRoot Get-Process.xml))[0]
}
else {
Import-Clixml -Path (Join-Path $PSScriptRoot Get-Process.xml)
}
}
}
}
<# Creating the samples
Get-Service | Select-Object -First 30 | Export-Clixml -Path Get-Service.xml
$Disk = Get-CimInstance -ClassName win32_logicaldisk | Select-Object -Property DeviceId,VolumeName, Size,Freespace
$Disk | Export-Clixml -Path Get-CimInstanceDisk.xml
$NetAdapter = Get-CimInstance -Namespace root/StandardCimv2 -class MSFT_NetAdapter | Select-Object -Property Name, InterfaceDescription, MacAddress, LinkSpeed
$NetAdapter | Export-Clixml -Path Get-CimInstanceNetAdapter.xml
$Process = Get-Process | Where-Object { $_.StartTime -and $_.StartInfo -and $_.Modules -and $_.Company -notlike '*Microsoft*' } | Select-Object -first 20
$Process | Export-Clixml -Path $Path
$Process = Import-Clixml -Path $Path
$Process | foreach {$_.Threads = 'System.Diagnostics.ProcessThreadCollection'}
$Process | foreach {$_.Modules = 'System.Diagnostics.ProcessThreadCollection'}
$Process | Export-Clixml -Path $Path
#>

View File

@@ -1,6 +1,4 @@
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
$data = ConvertFrom-Csv -InputObject @"
ID,Product,Quantity,Price
@@ -284,7 +282,7 @@ Describe "Set-ExcelColumn, Set-ExcelRow and Set-ExcelRange" {
Describe "Conditional Formatting" {
BeforeAll {
Remove-Item $path
#Remove-Item $path
$data = Get-Process | Where-Object company | Select-Object company, name, pm, handles, *mem*
$cfmt = New-ConditionalFormattingIconSet -Range "c:c" -ConditionalFormat ThreeIconSet -IconType Arrows
$data | Export-Excel -path $Path -AutoSize -ConditionalFormat $cfmt
@@ -300,7 +298,7 @@ Describe "Conditional Formatting" {
}
}
$path = Join-Path $Env:TEMP "test.xlsx"
$path = "TestDrive:\test.xlsx"
$data2 = ConvertFrom-Csv -InputObject @"
ID,Product,Quantity,Price,Total
12001,Nails,37,3.99,147.63
@@ -321,7 +319,7 @@ ID,Product,Quantity,Price,Total
Describe "AutoNameRange data with a single property name" {
BeforeEach {
$xlfile = Join-Path $Env:TEMP "testNamedRange.xlsx"
$xlfile = "TestDrive:\testNamedRange.xlsx"
Remove-Item $xlfile -ErrorAction SilentlyContinue
}
@@ -359,7 +357,7 @@ Sold,ID
Describe "Table Formatting" {
BeforeAll {
Remove-Item $path
#Remove-Item $path
$excel = $data2 | Export-excel -path $path -WorksheetName Hardware -AutoNameRange -AutoSize -BoldTopRow -FreezeTopRow -PassThru
$ws = $excel.Workbook.Worksheets[1]
#test showfilter & TotalSettings

View File

@@ -1,7 +1,3 @@
Import-Module $PSScriptRoot\..\ImportExcel.psd1 -Force
if (-not $env:TEMP) {$env:TEMP = [IO.Path]::GetTempPath() -replace "/$","" }
$notWindows = ($PSVersionTable.os -and $PSVersionTable.os -notMatch 'Windows' )
$data = ConvertFrom-Csv -InputObject @"
ID,Product,Quantity,Price
12001,Nails,37,3.99
@@ -11,7 +7,7 @@ ID,Product,Quantity,Price
12011,Crowbar,7,23.48
"@
$path = Join-Path $Env:TEMP "DataValidation.xlsx"
$path = "TestDrive:\DataValidation.xlsx"
Describe "Data validation and protection" {
Context "Data Validation rules" {

View File

@@ -1,17 +1,67 @@
image:
- Visual Studio 2015
# - Ubuntu
# Version format
version: '({build})'
# Build worker image (VM templates)
image:
- Ubuntu1804
- 'Visual Studio 2019'
# Fix CRLF on Windows
init:
- cmd: 'git config --global --unset core.autocrlf'
# To disable automatic builds
build: off
test_script:
- ps: .\DoTests.ps1
- pwsh: .\DoTests.ps1 -DontCreateZip
# Skipping commits with particular message or from specific user
skip_commits:
message: '/\[skip av\]/'
files:
- README.md
- '*.md'
artifacts:
- path: ImportExcel*.zip
name: ImportExcel
# Including commits with particular message or from specific user
#only_commits:
# message: '/\[build\]/' # Start a new build if message contains 'build'
# Scripts that run after cloning repository
install:
- ps: 'Install-Module -Name Pester -Force -SkipPublisherCheck'
- ps: 'Install-Module -Name Assert -Force'
# PowerShell Core
- ps: '& .\__tests__\InstallPowerShell.ps1 -Version "7.0.0-preview.3"' # Install other PowerShell Core version (Optional)
- pwsh: 'Install-Module -Name Pester -Force'
- pwsh: 'Install-Module -Name Assert -Force'
# To run your custom scripts instead of automatic tests
test_script:
- ps: '& .\__tests__\CI.ps1 -Test'
- pwsh: '& .\__tests__\CI.ps1 -Test'
- ps: '& .\__tests__\CI.ps1 -Finalize' # Collect and upload results
# Deploy
deploy_script:
- ps: '& .\__tests__\CI.ps1 -Artifact'
#- ps: '$null = Install-PackageProvider -Name NuGet -Force ; & .\__tests__\Publish.ps1'
# Linux setup
for:
-
matrix:
only:
- image: Ubuntu1804
# Install other PowerShell Core version (Optional)
init:
- sh: 'sudo apt-get -qq update && sudo apt-get -qq install powershell-preview && sudo rm /usr/bin/pwsh && sudo ln -s /opt/microsoft/powershell/7-preview/pwsh /usr/bin/pwsh'
- sh: 'export LANG=en_US.UTF-8' # Fix for PowerShell 7.0.0-preview.2, Remove if using other version.
# Scripts that run after cloning repository
install:
- pwsh: '& .\__tests__\CI.ps1 -Initialize' # Set AppVeyor build version
- pwsh: 'Install-Module -Name Pester -Force'
- pwsh: 'Install-Module -Name Assert -Force'
# To run your custom scripts instead of automatic tests
test_script:
- pwsh: '& .\__tests__\CI.ps1 -Test'
- pwsh: '& .\__tests__\CI.ps1 -Finalize' # Collect and upload results
# Skip Deploy
deploy_script:
- pwsh: '"Deploy skiped on Linux."'

View File

@@ -1,44 +1,93 @@
jobs:
- job: Build_PS_Win2016
pool:
vmImage: vs2017-win2016
steps:
- powershell: |
.\DoTests.ps1
displayName: 'Run Tests on Windows'
# - job: Build_PSCore_Ubuntu1604
# pool:
# vmImage: ubuntu-16.04
# steps:
# - script: |
# curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
# curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft.list
# sudo apt-get update
# sudo apt-get install -y powershell
# displayName: 'Install PowerShell Core'
# - script: |
# pwsh -c '.\DoTests.ps1'
# displayName: 'Run Tests on Linux'
# - job: Build_PSCore_MacOS1013
# pool:
# vmImage: xcode9-macos10.13
# steps:
# - script: |
# brew update
# brew tap caskroom/cask
# brew cask install powershell
# displayName: 'Install PowerShell Core'
# - script: |
# pwsh -c '.\DoTests.ps1'
# displayName: 'Run Tests on macOS'
# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml
trigger:
branches:
include:
- '*'
# - master
# - releases/*
paths:
exclude:
- README.md
- CHANGELOG.md
jobs:
- job: Windows
pool:
vmImage: 'windows-latest'
steps:
- powershell: 'Install-Module -Name Pester -Force -SkipPublisherCheck'
displayName: 'Update Pester'
- powershell: './__tests__/CI.ps1 -Test'
displayName: 'Install and Test'
- task: PublishTestResults@2
inputs:
testResultsFormat: 'NUnit'
testResultsFiles: '**/TestResults*.xml'
failTaskOnFailedTests: true
- powershell: './__tests__/CI.ps1 -Artifact'
displayName: 'Prepare Artifact'
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifact: 'Modules'
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)'
artifact: 'Source'
- job: WindowsPSCore
pool:
vmImage: 'windows-latest'
steps:
- pwsh: 'Install-Module -Name Pester -Force'
displayName: 'Update Pester'
- pwsh: './__tests__/CI.ps1 -Test'
displayName: 'Install and Test'
- task: PublishTestResults@2
inputs:
testResultsFormat: 'NUnit'
testResultsFiles: '**/TestResults*.xml'
failTaskOnFailedTests: true
- job: Ubuntu
pool:
vmImage: 'ubuntu-latest'
steps:
- powershell: 'Install-Module -Name Pester -Force'
displayName: 'Update Pester'
- powershell: './__tests__/CI.ps1 -Test'
displayName: 'Install and Test'
- task: PublishTestResults@2
inputs:
testResultsFormat: 'NUnit'
testResultsFiles: '**/TestResults*.xml'
failTaskOnFailedTests: true
- job: macOS
pool:
vmImage: 'macOS-latest'
steps:
- script: brew install mono-libgdiplus
displayName: 'Install mono-libgdiplus'
- powershell: 'Install-Module -Name Pester -Force'
displayName: 'Update Pester'
- powershell: './__tests__/CI.ps1 -Test'
displayName: 'Install and Test'
- task: PublishTestResults@2
inputs:
testResultsFormat: 'NUnit'
testResultsFiles: '**/TestResults*.xml'
failTaskOnFailedTests: true

View File

@@ -2,17 +2,18 @@
*.psd1
*.psm1
AddConditionalFormatting.ps1
AddDataValidation.ps1
Charting.ps1
ColorCompletion.ps1
Compare-Worksheet.ps1
Compare-WorkSheet.ps1
ConvertExcelToImageFile.ps1
ConvertFromExcelData.ps1
ConvertFromExcelToSQLInsert.ps1
ConvertToExcelXlsx.ps1
Copy-ExcelWorkSheet.ps1
Export-Charts.ps1
Export-Excel.ps1
Export-ExcelSheet.ps1
Export-StocksToExcel.ps1
Get-ExcelColumnName.ps1
Get-ExcelSheetInfo.ps1
Get-ExcelWorkbookInfo.ps1
@@ -32,10 +33,12 @@ Open-ExcelPackage.ps1
Pivot.ps1
PivotTable.ps1
Plot.ps1
RemoveWorksheet.ps1
Send-SQLDataToExcel.ps1
Set-CellStyle.ps1
Set-Column.ps1
Set-Row.ps1
Set-WorkSheetProtection.ps1
SetFormat.ps1
TrackingUtils.ps1
Update-FirstObjectProperties.ps1