PowerShell/test/powershell/Get-Date.Tests.ps1
Andrew Schwartzmeyer 7e65fa448e Mark as pending Travis CI OS X failing tests
These tests *do not* fail locally, nor on the Linux test runner. They do
not fail when accessing the OS X runner under debug mode. The *only*
cause is the lack of a TTY on the OS X runner, which is a Travis CI
regression. Moreover, the formatting tests do not fail when the TTY is
removed locally.

These absolutely should be fixed at some point, but it is not worth
spending any more time on it.
2016-05-17 13:28:44 -07:00

119 lines
4.6 KiB
PowerShell

Describe "Get-Date DRT Unit Tests" -Tags DRT {
It "Get-Date with all parameters returns proper results" {
$date = [datetime]::Now + ([timespan]::new(0,0,30))
$result = Get-Date -Date $date -Year 1973 -Month 2 -Day 22 -Hour 15 -Minute 40 -Second 10 -Millisecond 200
$result.GetType() | Should be ([Datetime])
$result.Year | Should be 1973
$result.Month| Should be 2
$result.Day | Should be 22
$result.Hour | Should be 15
$result.Minute | Should be 40
$result.Second | Should be 10
$result.Millisecond | Should be 200
}
It "using -displayhint produces the correct output" -Pending:($env:TRAVIS_OS_NAME -eq "osx") {
$d = Get-date -Date:"Jan 1, 2020" -DisplayHint Date | Out-String
$d.Trim() | Should be "Wednesday, January 1, 2020"
}
It "using -format produces the correct output" {
Get-date -Date:"Jan 1, 2020" -Format:"MMM-dd-yy" | Should be "Jan-01-20"
}
It "using -uformat produces the correct output" {
Get-date -Date:"Jan 1, 2020" -UFormat:"%s" | Should be "1577836800"
}
It "using -uformat 'ymdH' produces the correct output" {
Get-date -Date 0030-01-01T00:00:00 -uformat %y/%m/%d-%H | Should be "30/01/01-00"
}
It "using -uformat 'aAbBcCdDehHIjmMpr' produces the correct output" {
Get-date -Date 1/1/0030 -uformat %a%A%b%B%c%C%d%D%e%h%H%I%j%m%M%p%r | Should be "TueTuesdayJanJanuaryTue Jan 1 00:00:00 003000101/01/30 1Jan001210100AM12:00:00 AM"
}
It "using -uformat 'StTuUVwWxXyYZ' produces the correct output" {
Get-date -Date 1/1/0030 -uformat %S%T%u%U%V%w%W%x%X%y%Y%% | Should be "0000:00:002012001/01/3000:00:00300030%"
}
It "Get-date works with pipeline input" {
$x = new-object System.Management.Automation.PSObject
$x | add-member NoteProperty Date ([DateTime]::Now)
$y = @($x,$x)
($y | Get-date).Length | Should be 2
}
It "the LastWriteTime alias works with pipeline input" {
$folder = "GetDateTest"
$pathString = Join-Path -Path $TestDrive -ChildPath $folder
New-Item -Path $TestDrive -Name $folder -ItemType directory -Force
for($i = 0; $i -lt 10; $i++)
{
$temp = [guid]::NewGuid()
$pathString2 = Join-Path -Path $pathString -ChildPath $temp
New-Item -Path $pathString -Name $temp -ItemType file -Force
for($j = 0; $j -lt 100; $j++)
{
Add-Content -Path $pathString2 -Value $j
}
}
$result1 = get-childitem -path $pathString | get-date
$result2 = get-childitem -path $pathString | get-date
$result1.Length | Should be 10
$result1.Length -eq $result2.Length | Should be $true
for($i = 0; $i -lt $result1.Length; $i++)
{
$result1[$i] -eq $result2[$i] | Should be $true
}
Get-ChildItem -Path $pathString | Remove-Item
Remove-Item -Path $pathString -Force -Recurse
}
}
Describe "Get-Date" {
It "Should return a DateTime object upon being called" {
(Get-Date).GetType().Name.Equals('DateTime') | Should Be $true
}
It "Should have colons when ToString method is used" {
(Get-Date).ToString().Contains(":") | Should be $true
(Get-Date -DisplayHint Time).ToString().Contains(":") | Should be $true
(Get-Date -DisplayHint Date).ToString().Contains(":") | Should be $true
}
It "Should be able to use the format flag" {
# You would think that one could use simple loops here, but apparently powershell in Windows returns different values in loops
(Get-Date -Format d).Contains("/") | Should be $true
(Get-Date -Format D).Contains(",") | Should be $true
(Get-Date -Format f).Contains(",") -and (Get-Date -Format f).Contains(":") | Should be $true
(Get-Date -Format F).Contains(",") -and (Get-Date -Format F).Contains(":") | Should be $true
(Get-Date -Format g).Contains("/") -and (Get-Date -Format g).Contains(":") | Should be $true
(Get-Date -Format G).Contains("/") -and (Get-Date -Format G).Contains(":") | Should be $true
(Get-Date -Format m).Contains(",") -or `
(Get-Date -Format m).Contains(":") -or `
(Get-Date -Format m).Contains("/") | Should be $false
}
It "Should check that Get-Date can return the correct datetime from the system time" {
$timeDifference = $(Get-Date).Subtract([System.DateTime]::Now)
$timeDifference.Days | Should Be 0
$timeDifference.Hours | Should Be 0
$timeDifference.Minutes | Should Be 0
$timeDifference.Milliseconds | Should BeLessThan 1
$timeDifference.Ticks | Should BeLessThan 10000
}
}