Skip to content

Instantly share code, notes, and snippets.

@tkirill
Last active August 29, 2015 14:21
Show Gist options
  • Save tkirill/046845bee297170a4484 to your computer and use it in GitHub Desktop.
Save tkirill/046845bee297170a4484 to your computer and use it in GitHub Desktop.
Tests for Remove-MergedGitBranches
# Tests for this PR: https://github.com/dahlbyk/posh-git/pull/159
function Create-EmptyRepo {
if (Test-Path test-repo) {
rm -force -r test-repo
}
git init test-repo
cd test-repo
echo 1 > file1
git add --all
git commit -a -m 'commit1'
}
function Clone-Repo($clone) {
cd ..
if (Test-Path $clone) {
rm -Force -Recurse $clone
}
git clone test-repo $clone
cd $clone
}
function Create-Branch($branch, $counter) {
$file = "file$counter"
$msg = "commit$counter"
git checkout -b $branch
echo 1 > $file
git add $file
git commit -m $msg
}
function Create-MergedBranch($branch, $counter) {
Create-Branch $branch $counter
git checkout master
git merge $branch
}
function RemoveMergedGitBranches-NoBranches-Success {
Remove-MergedGitBranches
if ($lastexitcode -ne 0) {
Write-Error "RemoveMergedGitBranches-NoCommits-Success fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-NoBranches-Success Success!"
}
}
function RemoveMergedGitBranches-NoRemoteBranches-Success {
Clone-Repo test-clone1 | Out-Null
Remove-MergedGitBranches -Remote origin
if ($lastexitcode -ne 0) {
Write-Error "RemoveMergedGitBranches-NoRemoteBranches-Success fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-NoRemoteBranches-Success Success!"
}
}
function RemoveMergedGitBranches-LocalBranchNotMerged-DoesNotRemove {
Create-Branch branch1 2 | Out-Null
git checkout master
Remove-MergedGitBranches
$branches = git branch -v | Out-String
if (!$branches.Contains('branch1')) {
Write-Error "RemoveMergedGitBranches-LocalBranchNotMerged-DoesNotRemove fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-LocalBranchNotMerged-DoesNotRemove Success!"
}
}
function RemoveMergedGitBranches-CurrentBranchMerged-DoesNotRemove {
Create-MergedBranch branch1 2 | Out-Null
git checkout branch1
Remove-MergedGitBranches
$branches = git branch -v | Out-String
if (!$branches.Contains('branch1')) {
Write-Error "RemoveMergedGitBranches-CurrentBranchMerged-DoesNotRemove fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-CurrentBranchMerged-DoesNotRemove Success!"
}
}
function RemoveMergedGitBranches-MergedLocalBranch-Removes {
Create-MergedBranch branch1 2 | Out-Null
Remove-MergedGitBranches
$branches = git branch -v | Out-String
if ($branches.Contains('branch1')) {
Write-Error "RemoveMergedGitBranches-MergedLocalBranch-Removes fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-MergedLocalBranch-Removes Success!"
}
}
function RemoveMergedGitBranches-MergedLocalBranchTargetHead-Removes {
Create-MergedBranch branch1 2 | Out-Null
Remove-MergedGitBranches HEAD
$branches = git branch -v | Out-String
if ($branches.Contains('branch1')) {
Write-Error "RemoveMergedGitBranches-MergedLocalBranchTargetHead-Removes fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-MergedLocalBranchTargetHead-Removes Success!"
}
}
function RemoveMergedGitBranches-MergedLocalBranchTargetBranch-Removes {
Create-MergedBranch branch1 2 | Out-Null
git checkout branch1
git checkout -b branch2
echo 3 > file3
git add --all
git commit -m 'file3'
git checkout branch1
git merge branch2
Remove-MergedGitBranches branch1
$branches = git branch -v | Out-String
if (!$branches.Contains('branch1') -or $branches.Contains('branch2')) {
Write-Error "RemoveMergedGitBranches-MergedLocalBranchTargetBranch-Removes fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-MergedLocalBranchTargetBranch-Removes Success!"
}
}
function RemoveMergedGitBranches-MultipleLocalMergedBranches-RemovesAll {
Create-MergedBranch branch1 2 | Out-Null
Create-MergedBranch branch2 3 | Out-Null
Create-MergedBranch branch3 4 | Out-Null
Remove-MergedGitBranches
$branches = git branch | Out-String
if ($branches.Contains('branch1') -or $branches.Contains('branch2') -or $branches.Contains('branch3')) {
Write-Error "RemoveMergedGitBranches-MultipleLocalMergedBranches-RemovesAll fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-MultipleLocalMergedBranches-RemovesAll Success!"
}
}
function RemoveMergedGitBranches-MergedRemoteBranch-Removes {
Create-MergedBranch branch1 2 | Out-Null
Clone-Repo test-clone1 | Out-Null
Remove-MergedGitBranches -Remote origin
$branches = git branch -v --remote | Out-String
if ($branches.Contains('origin/branch1')) {
Write-Error "RemoveMergedGitBranches-MergedRemoteBranch-Removes fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-MergedRemoteBranch-Removes Success!"
}
}
function RemoveMergedGitBranches-NotMergedRemoteBranch-DoesNotRemove {
Create-Branch branch1 2 | Out-Null
Clone-Repo test-clone1 | Out-Null
Remove-MergedGitBranches -Remote origin
$branches = git branch -v --remote | Out-String
if (!$branches.Contains('origin/branch1')) {
Write-Error "RemoveMergedGitBranches-NotMergedRemoteBranch-DoesNotRemove fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-NotMergedRemoteBranch-DoesNotRemove Success!"
}
}
function RemoveMergedGitBranches-NotMergedRemoteBranchMergedLocally-RemovesOnlyLocal {
Create-Branch branch1 2 | Out-Null
git checkout master
Clone-Repo test-clone1 | Out-Null
git checkout branch1
git checkout master
git merge branch1
Remove-MergedGitBranches -Local -Remote origin
$branches = git branch -v --remote | Out-String
if (!$branches.Contains('origin/branch1') -or $branches.Contains(' branch1')) {
Write-Error "RemoveMergedGitBranches-NotMergedRemoteBranchMergedLocally-RemovesOnlyLocal fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-NotMergedRemoteBranchMergedLocally-RemovesOnlyLocal Success!"
}
}
function RemoveMergedGitBranches-MergedRemoteBranchNotMergedLocally-RemovesRemoteOnly {
Create-Branch branch1 2 | Out-Null
git checkout master
Clone-Repo test-clone1 | Out-Null
git checkout branch1
git checkout master
cd ..\test-repo
git merge branch1
cd ..\test-clone1
git fetch
Remove-MergedGitBranches -Local -Remote origin
$localBranches = git branch| Out-String
$remoteBranches = git branch -r | Out-String
if ($remoteBranches.Contains('origin/branch1') -or !$localBranches.Contains(' branch1')) {
Write-Error "RemoveMergedGitBranches-MergedRemoteBranchNotMergedLocally-RemovesRemoteOnly fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-MergedRemoteBranchNotMergedLocally-RemovesRemoteOnly Success!"
}
}
function RemoveMergedGitBranches-BranchMergedRemoteAndLocally-RemovesAll {
Create-MergedBranch branch1 2 | Out-Null
Clone-Repo test-clone1 | Out-Null
Remove-MergedGitBranches -Local -Remote origin
$branches = git branch -v --remote | Out-String
if ($branches.Contains('origin/branch1') -or $branches.Contains(' branch1')) {
Write-Error "RemoveMergedGitBranches-BranchMergedRemoteAndLocally-RemovesAll fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-BranchMergedRemoteAndLocally-RemovesAll Success!"
}
}
function RemoveMergedGitBranches-MultipleRemoteMergedBranches-RemovesAll {
Create-MergedBranch branch1 2 | Out-Null
Create-MergedBranch branch2 2 | Out-Null
Create-MergedBranch branch3 2 | Out-Null
Clone-Repo test-clone1 | Out-Null
Remove-MergedGitBranches -Remote origin
$branches = git branch -v --remote | Out-String
if ($branches.Contains('origin/branch1') -or $branches.Contains('origin/branch2') -or $branches.Contains('origin/branch3')) {
Write-Error "RemoveMergedGitBranches-MultipleRemoteMergedBranches-RemovesAll fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-MultipleRemoteMergedBranches-RemovesAll Success!"
}
}
function RemoveMergedGitBranches-MultipleRemotesWithoutMergedBranches-Success {
Create-Branch branch1 2 | Out-Null
git checkout master
Clone-Repo test-clone1 | Out-Null
Create-Branch branch2 3 | Out-Null
git checkout master
Clone-Repo test-clone2 | Out-Null
git remote add other ..\test-clone1
git fetch other
Remove-MergedGitBranches -Remote origin, other -Target master
$branches = git branch --remote | Out-String
if (!$branches.Contains('origin/branch1') -or !$branches.Contains('other/branch2')) {
Write-Error "RemoveMergedGitBranches-MultipleRemotesWithoutMergedBranches-Success fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-MultipleRemotesWithoutMergedBranches-Success Success!"
}
}
function RemoveMergedGitBranches-MultipleRemotesOnlyOneWithMergedBranch-RemovesBranch {
Create-Branch branch1 2 | Out-Null
git checkout master
Clone-Repo test-clone1 | Out-Null
Create-MergedBranch branch2 3 | Out-Null
Clone-Repo test-clone2 | Out-Null
git remote add other ..\test-clone1
git fetch other
Remove-MergedGitBranches -Remote origin, other -Target master
$branches = git branch --remote | Out-String
if (!$branches.Contains('origin/branch1') -or $branches.Contains('other/branch2')) {
Write-Error "RemoveMergedGitBranches-MultipleRemotesOnlyOneWithMergedBranche-RemovesBranch fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-MultipleRemotesOnlyOneWithMergedBranche-RemovesBranch Success!"
}
}
function RemoveMergedGitBranches-MultipleRemotesWithMultipleMergedBranches-RemovesAll {
Create-MergedBranch branch1 2 | Out-Null
Clone-Repo test-clone1 | Out-Null
Create-MergedBranch branch2 3 | Out-Null
Clone-Repo test-clone2 | Out-Null
git remote add other ..\test-clone1
git fetch other
git checkout branch1
git checkout branch2
git checkout master
Remove-MergedGitBranches -Remote origin, other -Target master
$branches = git branch --remote | Out-String
if ($branches.Contains('origin/branch1') -or $branches.Contains('other/branch2')) {
Write-Error "RemoveMergedGitBranches-MultipleRemotesWithMultipleMergedBranches-RemovesAll fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-MultipleRemotesWithMultipleMergedBranches-RemovesAll Success!"
}
}
function RemoveMergedGitBranches-MultipleRemotesWithMultipleMergedBranchesTargetBranch-RemovesAll {
Create-Branch branch1 2 | Out-Null
Create-Branch branch12 12 | Out-Null
git checkout branch1
git merge branch12
git checkout master
Clone-Repo test-clone1 | Out-Null
git checkout branch1
Create-Branch branch22 22 | Out-Null
git checkout branch1
git merge branch22
git checkout master
Clone-Repo test-clone2 | Out-Null
git remote add other ..\test-clone1
git fetch other
git checkout branch1
git checkout branch2
git checkout master
Remove-MergedGitBranches -Remote origin, other -Target branch1
$branches = git branch --remote | Out-String
if (!$branches.Contains('origin/branch1') -or $branches.Contains('other/branch12') -or $branches.Contains('other/branch22')) {
Write-Error "RemoveMergedGitBranches-MultipleRemotesWithMultipleMergedBranchesTargetBranch-RemovesAll fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "RemoveMergedGitBranches-MultipleRemotesWithMultipleMergedBranchesTargetBranch-RemovesAll Success!"
}
}
function RemoveMergedGitBranches-#-# {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "Running #"
Remove-MergedGitBranches
if ($lastexitcode -ne 0) {
Write-Error "# fail"
} else {
Write-Host -BackgroundColor Black -ForegroundColor Yellow "# Success!"
}
}
function Run-Tests {
$currentDir = pwd
$tests = "RemoveMergedGitBranches-NoBranches-Success", `
"RemoveMergedGitBranches-NoRemoteBranches-Success", `
"RemoveMergedGitBranches-LocalBranchNotMerged-DoesNotRemove", `
"RemoveMergedGitBranches-CurrentBranchMerged-DoesNotRemove", `
"RemoveMergedGitBranches-MergedLocalBranch-Removes", `
"RemoveMergedGitBranches-MergedRemoteBranch-Removes", `
"RemoveMergedGitBranches-MergedLocalBranchTargetHead-Removes", `
"RemoveMergedGitBranches-MergedLocalBranchTargetBranch-Removes", `
"RemoveMergedGitBranches-NotMergedRemoteBranch-DoesNotRemove", `
"RemoveMergedGitBranches-NotMergedRemoteBranchMergedLocally-RemovesOnlyLocal", `
"RemoveMergedGitBranches-MergedRemoteBranchNotMergedLocally-RemovesRemoteOnly", `
"RemoveMergedGitBranches-BranchMergedRemoteAndLocally-RemovesAll", `
"RemoveMergedGitBranches-MultipleRemoteMergedBranches-RemovesAll", `
"RemoveMergedGitBranches-MultipleLocalMergedBranches-RemovesAll", `
"RemoveMergedGitBranches-MultipleRemotesWithoutMergedBranches-Success", `
"RemoveMergedGitBranches-MultipleRemotesOnlyOneWithMergedBranch-RemovesBranch", `
"RemoveMergedGitBranches-MultipleRemotesWithMultipleMergedBranches-RemovesAll", `
"RemoveMergedGitBranches-MultipleRemotesWithMultipleMergedBranchesTargetBranch-RemovesAll"
foreach ($test in $tests) {
Create-EmptyRepo | Out-Null
Write-Host -BackgroundColor Black -ForegroundColor Yellow "Running $test"
& $test
cd $currentDir
}
}
function Run-OneTest {
$currentDir = pwd
Create-EmptyRepo | Out-Null
RemoveMergedGitBranches-MultipleRemoteMergedBranches-RemovesAll
cd $currentDir
}
Run-Tests
#Run-OneTest
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment