1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
# pseudo #!/PowerShell :)
#
# test file for the CTags/Geany PowerShell tag parser
# based on real world code but simplified for automated tests
<#
multiline comment including a function and variable, both should be ignored:
$IgnoreThisVaribale = "Stop"
function IgnoreThisFunction($arg1) {
Write-Host "dummy"
}
#>
# immediately stop the script if an errors occurs
$ErrorActionPreference = "Stop"
# a global scoped variable
$Global:Settings = $null
# a local scoped variable
$Local:ALocalVar = $null
# a usual variable
$BasePath = split-path -parent $Global:MyInvocation.InvocationName
FUNCTION Read-Configuration-File() {
$Hostname = [System.Environment]::MachineName
$ConfigurationFileName = $BasePath + "\script-${Hostname}.conf"
LogMessage "Read configuration '${ConfigurationFileName}'"
$ConfigFileContent = Get-Content -raw $ConfigurationFileName
$Global:Settings = Convertfrom-Stringdata $ConfigFileContent
}
Function LogMessageOK()
{
$x = [Console]::WindowWidth - 6
$y = [Console]::CursorTop
Try {
[Console]::setcursorposition($x, $y)
} Catch [system.exception] {
# intentionally left empty for redirect of outputs to file
}
Write-Host -foregroundcolor "green" "[ok]"
}
function LogMessage() {
param(
[Parameter(Mandatory=$false)][switch] $NoNewLine,
[Parameter(Mandatory=$true)][string] $Message
)
$Date = Get-Date -UFormat "%Y-%m-%d %T: "
Write-Host -foregroundcolor "yellow" -NoNewLine $Date
if ($NoNewLine) {
Write-Host -foregroundcolor "green" -NoNewLine $Message
} else {
Write-Host -foregroundcolor "green" $Message
}
}
function global:A-Global-Scope-Function() {
Write-Host "dummy"
}
filter Script:MyFilter {
filter-something
}
Filter Private:MyPrivateFilter {
filter-something
}
function LoadTemplate($template) {
# woah, this is real magic,
# see http://stackoverflow.com/questions/10754582/string-interpolation-of-hashtable-values-in-powershell
# Set all unbound variables (@args) in the local context
while ($args)
{
($key, $val, $args) = $args
Set-Variable -Name $key.SubString(1, $key.Length-2) -Value $val
}
$ExecutionContext.InvokeCommand.ExpandString($template)
}
function TopLevelFunction() {
function SecondLevelNestedFunction() {
function ThirdLevelNestedFunction() {
doSomething()
}
ThirdLevelNestedFunction
}
SecondLevelNestedFunction
}
function Main() {
Read-Configuration-File
LogMessage $("Working on Environment '{0}'" -f $Settings["EnvironmentName"])
LogMessage "do something ..."
Stripped-Down-Code
LogMessageOK
}
Main
|