140 lines
5.7 KiB
PowerShell
140 lines
5.7 KiB
PowerShell
Describe "Remove-Item" {
|
|
$testpath = $TestDrive
|
|
$testfile = "testfile.txt"
|
|
$testfilepath = Join-Path -Path $testpath -ChildPath $testfile
|
|
Context "File removal Tests" {
|
|
BeforeEach {
|
|
New-Item -Name $testfile -Path $testpath -ItemType "file" -Value "lorem ipsum" -Force
|
|
|
|
Test-Path $testfilepath | Should Be $true
|
|
|
|
}
|
|
|
|
It "Should be able to be called on a regular file without error using the Path switch" {
|
|
{ Remove-Item -Path $testfilepath } | Should Not Throw
|
|
|
|
Test-Path $testfilepath | Should Be $false
|
|
}
|
|
|
|
It "Should be able to be called on a file without the Path switch" {
|
|
{ Remove-Item $testfilepath } | Should Not Throw
|
|
|
|
Test-Path $testfilepath | Should Be $false
|
|
}
|
|
|
|
It "Should be able to call the rm alias" {
|
|
{ rm $testfilepath } | Should Not Throw
|
|
|
|
Test-Path $testfilepath | Should Be $false
|
|
}
|
|
|
|
It "Should be able to call the del alias" {
|
|
{ del $testfilepath } | Should Not Throw
|
|
|
|
Test-Path $testfilepath | Should Be $false
|
|
}
|
|
|
|
It "Should be able to call the erase alias" {
|
|
{ erase $testfilepath } | Should Not Throw
|
|
|
|
Test-Path $testfilepath | Should Be $false
|
|
}
|
|
|
|
It "Should be able to call the ri alias" {
|
|
{ ri $testfilepath } | Should Not Throw
|
|
|
|
Test-Path $testfilepath | Should Be $false
|
|
}
|
|
|
|
It "Should not be able to remove a read-only document without using the force switch" {
|
|
# Set to read only
|
|
Set-ItemProperty -Path $testfilepath -Name IsReadOnly -Value $true
|
|
|
|
# attempt to remove the file
|
|
{ Remove-Item $testfilepath -ErrorAction SilentlyContinue } | Should Not Throw
|
|
|
|
# validate
|
|
Test-Path $testfilepath | Should Be $true
|
|
|
|
# remove using the -force switch on the readonly object
|
|
Remove-Item $testfilepath -Force
|
|
|
|
# Validate
|
|
Test-Path $testfilepath | Should Be $false
|
|
}
|
|
|
|
It "Should be able to remove all files matching a regular expression with the include switch" {
|
|
# Create multiple files with specific string
|
|
New-Item -Name file1.txt -Path $testpath -ItemType "file" -Value "lorem ipsum"
|
|
New-Item -Name file2.txt -Path $testpath -ItemType "file" -Value "lorem ipsum"
|
|
New-Item -Name file3.txt -Path $testpath -ItemType "file" -Value "lorem ipsum"
|
|
# Create a single file that does not match that string - already done in BeforeEach
|
|
|
|
# Delete the specific string
|
|
Remove-Item (Join-Path -Path $testpath -ChildPath "*") -Include file*.txt
|
|
# validate that the string under test was deleted, and the nonmatching strings still exist
|
|
Test-path (Join-Path -Path $testpath -ChildPath file1.txt) | Should Be $false
|
|
Test-path (Join-Path -Path $testpath -ChildPath file2.txt) | Should Be $false
|
|
Test-path (Join-Path -Path $testpath -ChildPath file3.txt) | Should Be $false
|
|
Test-Path $testfilepath | Should Be $true
|
|
|
|
# Delete the non-matching strings
|
|
Remove-Item $testfilepath
|
|
|
|
Test-Path $testfilepath | Should Be $false
|
|
}
|
|
|
|
It "Should be able to not remove any files matching a regular expression with the exclude switch" {
|
|
# Create multiple files with specific string
|
|
New-Item -Name file1.wav -Path $testpath -ItemType "file" -Value "lorem ipsum"
|
|
New-Item -Name file2.wav -Path $testpath -ItemType "file" -Value "lorem ipsum"
|
|
|
|
# Create a single file that does not match that string
|
|
New-Item -Name file1.txt -Path $testpath -ItemType "file" -Value "lorem ipsum"
|
|
|
|
# Delete the specific string
|
|
Remove-Item (Join-Path -Path $testpath -ChildPath "file*") -Exclude *.wav -Include *.txt
|
|
|
|
# validate that the string under test was deleted, and the nonmatching strings still exist
|
|
Test-Path (Join-Path -Path $testpath -ChildPath file1.wav) | Should Be $true
|
|
Test-Path (Join-Path -Path $testpath -ChildPath file2.wav) | Should Be $true
|
|
Test-Path (Join-Path -Path $testpath -ChildPath file1.txt) | Should Be $false
|
|
|
|
# Delete the non-matching strings
|
|
Remove-Item (Join-Path -Path $testpath -ChildPath file1.wav)
|
|
Remove-Item (Join-Path -Path $testpath -ChildPath file2.wav)
|
|
|
|
Test-Path (Join-Path -Path $testpath -ChildPath file1.wav) | Should Be $false
|
|
Test-Path (Join-Path -Path $testpath -ChildPath file2.wav) | Should Be $false
|
|
}
|
|
}
|
|
|
|
Context "Directory Removal Tests" {
|
|
$testdirectory = Join-Path -Path $testpath -ChildPath testdir
|
|
$testsubdirectory = Join-Path -Path $testdirectory -ChildPath subd
|
|
BeforeEach {
|
|
New-Item -Name "testdir" -Path $testpath -ItemType "directory" -Force
|
|
|
|
Test-Path $testdirectory | Should Be $true
|
|
}
|
|
|
|
It "Should be able to remove a directory" {
|
|
{ Remove-Item $testdirectory } | Should Not Throw
|
|
|
|
Test-Path $testdirectory | Should Be $false
|
|
}
|
|
|
|
It "Should be able to recursively delete subfolders" {
|
|
New-Item -Name "subd" -Path $testdirectory -ItemType "directory"
|
|
New-Item -Name $testfile -Path $testsubdirectory -ItemType "file" -Value "lorem ipsum"
|
|
|
|
$complexDirectory = Join-Path -Path $testsubdirectory -ChildPath $testfile
|
|
test-path $complexDirectory | Should Be $true
|
|
|
|
{ Remove-Item $testdirectory -Recurse} | Should Not Throw
|
|
|
|
Test-Path $testdirectory | Should Be $false
|
|
}
|
|
}
|
|
}
|