From 41c7f9e469be42364eece070958e628bdb8c0dc8 Mon Sep 17 00:00:00 2001 From: Andrew Schwartzmeyer Date: Fri, 3 Jun 2016 16:39:58 -0700 Subject: [PATCH] Update XDG BDS tests to specifications This renames the tests and updates for better requirement specifications. The profile, modules, history, and startup cache data are tested for not breaking Windows behavior, new Linux behavior, and respecting set variables on launch. This also corrects some erroneous assumptions I had previously made. The ModuleAnalysisCache cannot be tested, and the startup cache data might not be testable on Windows. --- test/powershell/Profile.Tests.ps1 | 62 ----------------- test/powershell/XDGBDS.Tests.ps1 | 112 ++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 62 deletions(-) delete mode 100644 test/powershell/Profile.Tests.ps1 create mode 100644 test/powershell/XDGBDS.Tests.ps1 diff --git a/test/powershell/Profile.Tests.ps1 b/test/powershell/Profile.Tests.ps1 deleted file mode 100644 index 2722d8f82..000000000 --- a/test/powershell/Profile.Tests.ps1 +++ /dev/null @@ -1,62 +0,0 @@ -Describe "XDG Base Directory Specification" { - - BeforeAll { - $powershell = Join-Path -Path $PsHome -ChildPath "powershell" - $profileName = "Microsoft.PowerShell_profile.ps1" - } - - BeforeEach { - $original_XDG_CONFIG_HOME = $env:XDG_CONFIG_HOME - $original_XDG_CACHE_HOME = $env:XDG_CACHE_HOME - $original_XDG_DATA_HOME = $env:XDG_DATA_HOME - - } - - AfterEach { - $env:XDG_CONFIG_HOME = $original_XDG_CONFIG_HOME - $env:XDG_CACHE_HOME = $original_XDG_CACHE_HOME - $env:XDG_DATA_HOME = $original_XDG_DATA_HOME - } - - Context "Profile" { - - It "Should not change Windows behavior" -Skip:($IsLinux -or $IsOSX) { - # Assuming this is run outside the OPS host on Windows - & $powershell -noprofile `$PROFILE | Should Be $PROFILE - } - - It "Should start with the default profile" -Skip:$IsWindows { - $expected = [IO.Path]::Combine($env:HOME, "Documents", "WindowsPowerShell", $PROFILE) - # Escape variable with backtick so new process interpolates it - & $powershell -noprofile `$PROFILE | Should Be $expected - } - - It "Should respect XDG_CONFIG_HOME" -Skip:$IsWindows { - $env:XDG_CONFIG_HOME = [IO.Path]::Combine($pwd, "test", "path") - # Escape variable with backtick so new process interpolates it - $profileDir = [IO.Path]::Combine($env:XDG_CONFIG_HOME, "powershell", $profileName) - & $powershell -noprofile `$PROFILE | Should Be $profileDir - } -} - - Context "Modules" { - - It "Should respect XDG_DATA_HOME" -Skip:$IsWindows { - $env:XDG_DATA_HOME = [IO.Path]::Combine($env:HOME, ".local", "share", "powershell", "Modules") - $modulepath = & $powershell -noprofile `$env:PSMODULEPATH - $modulepath = $modulepath.split(';')[0] - $modulepath | Should Be $env:XDG_DATA_HOME - } - - It "Should respect XDG_CACHE_HOME" -Skip:$IsWindows { - $env:XDG_CACHE_HOME = [IO.Path]::Combine($pwd, "test", "path") - $expected = [IO.Path]::Combine($HOME, "Powershell", "test", "path") - & $powershell -noprofile `$env:XDG_CACHE_HOME | Should Be $expected - } - - It "Should respect PSReadLine history" -Skip:$IsWindows { - $env:XDG_DATA_HOME = [IO.Path]::Combine($env:HOME, ".local", "share", "powershell", "PSReadLine", "ConsoleHost_history.txt") - "a" | Should Be $expected - } - } -} diff --git a/test/powershell/XDGBDS.Tests.ps1 b/test/powershell/XDGBDS.Tests.ps1 new file mode 100644 index 000000000..cecbe6070 --- /dev/null +++ b/test/powershell/XDGBDS.Tests.ps1 @@ -0,0 +1,112 @@ +Describe "XDG Base Directory Specification" { + + BeforeAll { + $powershell = Join-Path -Path $PsHome -ChildPath "powershell" + $profileName = "Microsoft.PowerShell_profile.ps1" + } + + BeforeEach { + $original_XDG_CONFIG_HOME = $env:XDG_CONFIG_HOME + $original_XDG_CACHE_HOME = $env:XDG_CACHE_HOME + $original_XDG_DATA_HOME = $env:XDG_DATA_HOME + + } + + AfterEach { + $env:XDG_CONFIG_HOME = $original_XDG_CONFIG_HOME + $env:XDG_CACHE_HOME = $original_XDG_CACHE_HOME + $env:XDG_DATA_HOME = $original_XDG_DATA_HOME + } + + Context "Profile" { + + It "Should not change Windows behavior" -Skip:($IsLinux -or $IsOSX) { + $expected = [IO.Path]::Combine($env:HOME, "Documents", "WindowsPowerShell", $profileName) + & $powershell -noprofile `$PROFILE | Should Be $expected + } + + It "Should start with the default profile on Linux" -Skip:($IsWindows) { + $expected = [IO.Path]::Combine($env:HOME, ".config", "powershell", $profileName) + & $powershell -noprofile `$PROFILE | Should Be $expected + } + + It "Should respect XDG_CONFIG_HOME on Linux" -Skip:$IsWindows { + $env:XDG_CONFIG_HOME = $TestDrive + $expected = [IO.Path]::Combine($TestDrive, "powershell", $profileName) + & $powershell -noprofile `$PROFILE | Should Be $expected + } + } + + Context "Modules" { + + It "Should not change Windows behavior" -Skip:($IsLinux -or $IsOSX) { + $expected = [IO.Path]::Combine($env:HOME, "Documents", "WindowsPowerShell", "Modules") + $actual = & $powershell -noprofile `$env:PSMODULEPATH + $actual.split(';')[0] | Should Be $expected + } + + It "Should start with the default module path on Linux" -Skip:$IsWindows { + $env:PSMODULEPATH = "" # must not be sent to child process + $expected = [IO.Path]::Combine($env:HOME, ".local", "share", "powershell", "Modules") + $actual = & $powershell -noprofile `$env:PSMODULEPATH + $actual.split(';')[0] | Should Be $expected + } + + It "Should respect XDG_DATA_HOME on Linux" -Skip:$IsWindows { + $env:PSMODULEPATH = "" # must not be sent to child process + $env:XDG_DATA_HOME = $TestDrive + $expected = [IO.Path]::Combine($TestDrive, "powershell", "Modules") + $actual = & $powershell -noprofile `$env:PSMODULEPATH + $actual.split(';')[0] | Should Be $expected + } + + } + + Context "PSReadLine" { + + It "Should not change Windows behavior" -Skip:($IsLinux -or $IsOSX) { + $expected = [IO.Path]::Combine($env:AppData, "Microsoft", "Windows", "PowerShell", "PSReadline", "ConsoleHost_history.txt") + & $powershell -noprofile { (Get-PSReadlineOption).HistorySavePath } | Should Be $expected + } + + It "Should start with the default history save path on Linux" -Skip:$IsWindows { + $expected = [IO.Path]::Combine($env:HOME, ".local", "share", "powershell", "PSReadLine", "ConsoleHost_history.txt") + & $powershell -noprofile { (Get-PSReadlineOption).HistorySavePath } | Should Be $expected + } + + It "Should respect XDG_DATA_HOME on Linux" -Skip:$IsWindows { + $env:XDG_DATA_HOME = $TestDrive + $expected = [IO.Path]::Combine($TestDrive, "powershell", "PSReadLine", "ConsoleHost_history.txt") + & $powershell -noprofile { (Get-PSReadlineOption).HistorySavePath } | Should Be $expected + } + + } + + Context "Cache" { + + It "Should not change Windows behavior" -Skip:($IsLinux -or $IsOSX) { + $expected = [IO.Path]::Combine($env:HOME, "Documents", "WindowsPowerShell", "StartupProfileData-NonInteractive") + Remove-Item -ErrorAction SilentlyContinue $expected + & $powershell -noprofile { exit } + $expected | Should Exist + } + + It "Should start with the default StartupProfileData on Linux" -Skip:$IsWindows { + $expected = [IO.Path]::Combine($env:HOME, ".cache", "powershell", "StartupProfileData-NonInteractive") + Remove-Item -ErrorAction SilentlyContinue $expected + & $powershell -noprofile { exit } + $expected | Should Exist + } + + It "Should respect XDG_CACHE_HOME on Linux" -Skip:$IsWindows { + $env:XDG_CACHE_HOME = $TestDrive + $expected = [IO.Path]::Combine($TestDrive, "powershell", "StartupProfileData-NonInteractive") + Remove-Item -ErrorAction SilentlyContinue $expected + & $powershell -noprofile { exit } + $expected | Should Exist + } + + # The ModuleAnalysisCache cannot be forced to exist, thus we cannot test it + + } +}