Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/Auto-Release.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: Auto-Release

run-name: "Auto-Release - [${{ github.event.pull_request.title }} #${{ github.event.pull_request.number }}] by @${{ github.actor }}"
run-name: "${{ github.event.pull_request.title }} #${{ github.event.pull_request.number }} by @${{ github.actor }}"

on:
pull_request_target:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/Linter.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: Linter

run-name: "Linter - [${{ github.event.pull_request.title }} #${{ github.event.pull_request.number }}] by @${{ github.actor }}"
run-name: "${{ github.event.pull_request.title }} #${{ github.event.pull_request.number }} by @${{ github.actor }}"

on: [pull_request]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: Workflow-Test
name: Workflow-Test [Default]

run-name: "Workflow-Test - [${{ github.event.pull_request.title }} #${{ github.event.pull_request.number }}] by @${{ github.actor }}"
run-name: "${{ github.event.pull_request.title }} #${{ github.event.pull_request.number }} by @${{ github.actor }}"

on: [pull_request]

Expand Down
25 changes: 25 additions & 0 deletions .github/workflows/Workflow-Test-Unnamed.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Workflow-Test [UnnamedFolder]

run-name: "${{ github.event.pull_request.title }} #${{ github.event.pull_request.number }} by @${{ github.actor }}"

on: [pull_request]

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: write
pull-requests: write
statuses: write

jobs:
WorkflowTestUnnamedFolder:
uses: ./.github/workflows/workflow.yml
secrets: inherit
with:
Name: PSModuleTest
Path: tests/srcNo
ModulesOutputPath: tests/outputs/modules
DocsOutputPath: tests/outputs/docs
TestProcess: true
Binary file added tests/srcNo/assemblies/LsonLib.dll
Binary file not shown.
132 changes: 132 additions & 0 deletions tests/srcNo/classes/Book.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
class Book {
# Class properties
[string] $Title
[string] $Author
[string] $Synopsis
[string] $Publisher
[datetime] $PublishDate
[int] $PageCount
[string[]] $Tags
# Default constructor
Book() { $this.Init(@{}) }
# Convenience constructor from hashtable
Book([hashtable]$Properties) { $this.Init($Properties) }
# Common constructor for title and author
Book([string]$Title, [string]$Author) {
$this.Init(@{Title = $Title; Author = $Author })
}
# Shared initializer method
[void] Init([hashtable]$Properties) {
foreach ($Property in $Properties.Keys) {
$this.$Property = $Properties.$Property
}
}
# Method to calculate reading time as 2 minutes per page
[timespan] GetReadingTime() {
if ($this.PageCount -le 0) {
throw 'Unable to determine reading time from page count.'
}
$Minutes = $this.PageCount * 2
return [timespan]::new(0, $Minutes, 0)
}
# Method to calculate how long ago a book was published
[timespan] GetPublishedAge() {
if (
$null -eq $this.PublishDate -or
$this.PublishDate -eq [datetime]::MinValue
) { throw 'PublishDate not defined' }

return (Get-Date) - $this.PublishDate
}
# Method to return a string representation of the book
[string] ToString() {
return "$($this.Title) by $($this.Author) ($($this.PublishDate.Year))"
}
}

class BookList {
# Static property to hold the list of books
static [System.Collections.Generic.List[Book]] $Books
# Static method to initialize the list of books. Called in the other
# static methods to avoid needing to explicit initialize the value.
static [void] Initialize() { [BookList]::Initialize($false) }
static [bool] Initialize([bool]$force) {
if ([BookList]::Books.Count -gt 0 -and -not $force) {
return $false
}

[BookList]::Books = [System.Collections.Generic.List[Book]]::new()

return $true
}
# Ensure a book is valid for the list.
static [void] Validate([book]$Book) {
$Prefix = @(
'Book validation failed: Book must be defined with the Title,'
'Author, and PublishDate properties, but'
) -join ' '
if ($null -eq $Book) { throw "$Prefix was null" }
if ([string]::IsNullOrEmpty($Book.Title)) {
throw "$Prefix Title wasn't defined"
}
if ([string]::IsNullOrEmpty($Book.Author)) {
throw "$Prefix Author wasn't defined"
}
if ([datetime]::MinValue -eq $Book.PublishDate) {
throw "$Prefix PublishDate wasn't defined"
}
}
# Static methods to manage the list of books.
# Add a book if it's not already in the list.
static [void] Add([Book]$Book) {
[BookList]::Initialize()
[BookList]::Validate($Book)
if ([BookList]::Books.Contains($Book)) {
throw "Book '$Book' already in list"
}

$FindPredicate = {
param([Book]$b)

$b.Title -eq $Book.Title -and
$b.Author -eq $Book.Author -and
$b.PublishDate -eq $Book.PublishDate
}.GetNewClosure()
if ([BookList]::Books.Find($FindPredicate)) {
throw "Book '$Book' already in list"
}

[BookList]::Books.Add($Book)
}
# Clear the list of books.
static [void] Clear() {
[BookList]::Initialize()
[BookList]::Books.Clear()
}
# Find a specific book using a filtering scriptblock.
static [Book] Find([scriptblock]$Predicate) {
[BookList]::Initialize()
return [BookList]::Books.Find($Predicate)
}
# Find every book matching the filtering scriptblock.
static [Book[]] FindAll([scriptblock]$Predicate) {
[BookList]::Initialize()
return [BookList]::Books.FindAll($Predicate)
}
# Remove a specific book.
static [void] Remove([Book]$Book) {
[BookList]::Initialize()
[BookList]::Books.Remove($Book)
}
# Remove a book by property value.
static [void] RemoveBy([string]$Property, [string]$Value) {
[BookList]::Initialize()
$Index = [BookList]::Books.FindIndex({
param($b)
$b.$Property -eq $Value
}.GetNewClosure())
if ($Index -ge 0) {
[BookList]::Books.RemoveAt($Index)
}
}
}
3 changes: 3 additions & 0 deletions tests/srcNo/data/Config.psd1
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@{
RandomKey = 'RandomValue'
}
3 changes: 3 additions & 0 deletions tests/srcNo/data/Settings.psd1
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@{
RandomSetting = 'RandomSettingValue'
}
3 changes: 3 additions & 0 deletions tests/srcNo/finally.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Write-Verbose '------------------------------' -Verbose
Write-Verbose '--- THIS IS A LAST LOADER ---' -Verbose
Write-Verbose '------------------------------' -Verbose
37 changes: 37 additions & 0 deletions tests/srcNo/formats/CultureInfo.Format.ps1xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
<ViewDefinitions>
<View>
<Name>System.Globalization.CultureInfo</Name>
<ViewSelectedBy>
<TypeName>System.Globalization.CultureInfo</TypeName>
</ViewSelectedBy>
<TableControl>
<TableHeaders>
<TableColumnHeader>
<Width>16</Width>
</TableColumnHeader>
<TableColumnHeader>
<Width>16</Width>
</TableColumnHeader>
<TableColumnHeader />
</TableHeaders>
<TableRowEntries>
<TableRowEntry>
<TableColumnItems>
<TableColumnItem>
<PropertyName>LCID</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Name</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>DisplayName</PropertyName>
</TableColumnItem>
</TableColumnItems>
</TableRowEntry>
</TableRowEntries>
</TableControl>
</View>
</ViewDefinitions>
</Configuration>
65 changes: 65 additions & 0 deletions tests/srcNo/formats/Mygciview.Format.ps1xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
<ViewDefinitions>
<View>
<Name>mygciview</Name>
<ViewSelectedBy>
<TypeName>System.IO.DirectoryInfo</TypeName>
<TypeName>System.IO.FileInfo</TypeName>
</ViewSelectedBy>
<GroupBy>
<PropertyName>PSParentPath</PropertyName>
</GroupBy>
<TableControl>
<TableHeaders>
<TableColumnHeader>
<Label>Mode</Label>
<Width>7</Width>
<Alignment>Left</Alignment>
</TableColumnHeader>
<TableColumnHeader>
<Label>LastWriteTime</Label>
<Width>26</Width>
<Alignment>Right</Alignment>
</TableColumnHeader>
<TableColumnHeader>
<Label>CreationTime</Label>
<Width>26</Width>
<Alignment>Right</Alignment>
</TableColumnHeader>
<TableColumnHeader>
<Label>Length</Label>
<Width>14</Width>
<Alignment>Right</Alignment>
</TableColumnHeader>
<TableColumnHeader>
<Label>Name</Label>
<Alignment>Left</Alignment>
</TableColumnHeader>
</TableHeaders>
<TableRowEntries>
<TableRowEntry>
<Wrap />
<TableColumnItems>
<TableColumnItem>
<PropertyName>ModeWithoutHardLink</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>LastWriteTime</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>CreationTime</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Length</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Name</PropertyName>
</TableColumnItem>
</TableColumnItems>
</TableRowEntry>
</TableRowEntries>
</TableControl>
</View>
</ViewDefinitions>
</Configuration>
3 changes: 3 additions & 0 deletions tests/srcNo/header.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidLongLines', '', Justification = 'Contains long links.')]
[CmdletBinding()]
param()
3 changes: 3 additions & 0 deletions tests/srcNo/init/initializer.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Write-Verbose '-------------------------------' -Verbose
Write-Verbose '--- THIS IS AN INITIALIZER ---' -Verbose
Write-Verbose '-------------------------------' -Verbose
19 changes: 19 additions & 0 deletions tests/srcNo/modules/OtherPSModule.psm1
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
Function Get-OtherPSModule {
<#
.SYNOPSIS
Performs tests on a module.

.DESCRIPTION
A longer description of the function.

.EXAMPLE
Get-OtherPSModule -Name 'World'
#>
[CmdletBinding()]
param(
# Name of the person to greet.
[Parameter(Mandatory)]
[string] $Name
)
Write-Output "Hello, $Name!"
}
18 changes: 18 additions & 0 deletions tests/srcNo/private/Get-InternalPSModule.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
Function Get-InternalPSModule {
<#
.SYNOPSIS
Performs tests on a module.

.EXAMPLE
Test-PSModule -Name 'World'

"Hello, World!"
#>
[CmdletBinding()]
param (
# Name of the person to greet.
[Parameter(Mandatory)]
[string] $Name
)
Write-Output "Hello, $Name!"
}
22 changes: 22 additions & 0 deletions tests/srcNo/private/Set-InternalPSModule.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
Function Set-InternalPSModule {
<#
.SYNOPSIS
Performs tests on a module.

.EXAMPLE
Test-PSModule -Name 'World'

"Hello, World!"
#>
[Diagnostics.CodeAnalysis.SuppressMessageAttribute(
'PSUseShouldProcessForStateChangingFunctions', '', Scope = 'Function',
Justification = 'Reason for suppressing'
)]
[CmdletBinding()]
param (
# Name of the person to greet.
[Parameter(Mandatory)]
[string] $Name
)
Write-Output "Hello, $Name!"
}
20 changes: 20 additions & 0 deletions tests/srcNo/public/Get-PSModuleTest.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#Requires -Modules Utilities

function Get-PSModuleTest {
<#
.SYNOPSIS
Performs tests on a module.

.EXAMPLE
Test-PSModule -Name 'World'

"Hello, World!"
#>
[CmdletBinding()]
param (
# Name of the person to greet.
[Parameter(Mandatory)]
[string] $Name
)
Write-Output "Hello, $Name!"
}
Loading