Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement half of tests in Bats #1187

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,11 @@ trim_trailing_whitespace = false

[*.py]
indent_size = 4

[*.bats]
indent_style = tab
indent_size = 4

[tests/*.sh]
indent_style = tab
indent_size = 4
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "vendor/bats-all"]
path = vendor/bats-all
url = https://github.com/hyperupcall/bats-all
93 changes: 93 additions & 0 deletions tests/git-abort.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# shellcheck shell=bash

source "$BATS_TEST_DIRNAME/test_util.sh"

setup_file() {
test_util.setup_file
}

setup() {
test_util.cd_test

git init
git commit --allow-empty -m "Initial commit"
git branch A
git branch B
git checkout A
printf '%s\n' 'a' > tmpfile
git add .
git commit -m A
git checkout B
printf '%s\n' 'b' > tmpfile
git add .
git commit -m B
git status
}

@test "cherry pick" {
run git cherry-pick A
assert_failure

run git status
assert_line -p 'You are currently cherry-picking commit'
assert_line -p 'Unmerged paths:'
assert_success

run git abort
assert_success

run git status
assert_line -p 'nothing to commit, working tree clean'
assert_success
}

@test "merge" {
run git merge A
assert_failure

run git status
assert_line -p 'You have unmerged paths'
assert_line -p 'Unmerged paths:'
assert_success

run git abort
assert_success

run git status
assert_line -p 'nothing to commit, working tree clean'
assert_success
}

@test "rebase" {
run git rebase A
assert_failure

run git status
assert_line -p 'You are currently rebasing branch'
assert_line -p 'Unmerged paths:'
assert_success

run git abort
assert_success

run git status
assert_line -p 'nothing to commit, working tree clean'
assert_success
}

@test "revert" {
run git revert A
assert_failure

run git status
assert_line -p 'You are currently reverting commit'
assert_line -p 'Unmerged paths:'
assert_success

run git abort
assert_success

run git status
assert_line -p 'nothing to commit, working tree clean'
assert_success
}
106 changes: 106 additions & 0 deletions tests/git-alias.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# shellcheck shell=bash

source "$BATS_TEST_DIRNAME/test_util.sh"

setup_file() {
test_util.setup_file
}

setup() {
test_util.cd_test

git init
git config --global alias.globalalias status
git config --global alias.x status
git config --local alias.localalias status
git config --local alias.y status
}

@test "list all works" {
run git alias
assert_output - <<-'EOF'
globalalias = status
localalias = status
x = status
y = status
EOF
assert_success
}

@test "list all globally works" {
run git alias --global
assert_output - <<-'EOF'
globalalias = status
x = status
EOF
assert_success
}

@test "list all locally works" {
run git alias --local
assert_output - <<-'EOF'
localalias = status
y = status
EOF
assert_success
}

@test "search globally works" {
run git alias --global global
assert_output - <<-'EOF'
globalalias = status
EOF
assert_success

run git alias --global local
assert_output ''
assert_failure
}

@test "search locally works" {
run git alias --local local
assert_output - <<-'EOF'
localalias = status
EOF
assert_success

run git alias --local global
assert_output ''
assert_failure
}

@test "get alias globally and defaultly" {
run git alias globalalias
assert_output - <<-'EOF'
globalalias = status
EOF
assert_success
}

@test "set alias globally and defaultly" {
git alias globalalias diff
run git alias diff
assert_output - <<-'EOF'
globalalias = diff
EOF
assert_success
}

@test "get alias locally" {
run git alias --local localalias
assert_output - <<-'EOF'
localalias = status
EOF
assert_success
}

@test "set alias locally" {
git alias --local localalias diff
run git alias
assert_output - <<-'EOF'
globalalias = status
localalias = diff
x = status
y = status
EOF
}
66 changes: 66 additions & 0 deletions tests/git-archive-file.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# shellcheck shell=bash

source "$BATS_TEST_DIRNAME/test_util.sh"

setup_file() {
test_util.setup_file
}

setup() {
test_util.cd_test

git init
printf '%s\n' 'data' > tmpfile
git add .
git commit -m 'test: add data'
git tag 0.1.0 -m 'bump: 0.1.0'
}

@test "archive file on tags branch" {
git checkout -b tags0.1.0
run git archive-file
assert_success

local describe_output=
describe_output=$(git describe)
assert_file_exists "${PWD##*/}.$describe_output.zip"
}

@test "archive file on any not tags branch without default branch" {
git checkout -b not-tags-branch
run git archive-file
assert_success

local describe_output=
describe_output=$(git describe --always --long)
assert_file_exists "${PWD##*/}.$describe_output.not-tags-branch.zip"
}

@test "archive file on any not tags branch with default branch" {
skip "Not working as expected"

run git archive-file
assert_success

local describe_output=
describe_output=$(git describe --always --long)
assert_file_exists "${PWD##*/}.$describe_output.zip"
}

@test "archive file on branch name has slash" {
git checkout -b feature/slash
run git archive-file
assert_success

local describe_output=
describe_output=$(git describe --always --long)
assert_file_exists "${PWD##*/}.$describe_output.feature-slash.zip"
}

@test "archive file on dirname has backslash" {
skip
}

@test "archive file on tag name has slash" {
skip
}
52 changes: 52 additions & 0 deletions tests/git-authors.bats
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# shellcheck shell=bash

source "$BATS_TEST_DIRNAME/test_util.sh"


setup_file() {
test_util.setup_file
}

setup() {
test_util.cd_test

git init
git config --local user.name test
git config --local user.email [email protected]
printf '%s\n' 'A' > tmpfile
git add .
git commit -m 'test: add data A'
git config --local user.name testagain
git config --local user.email [email protected]
printf '%s\n' 'B' > tmpfile
git add .
git commit -m 'test: add data B'
}

@test "output authors has email without any parameter" {
run git authors
assert_success

local content=$(<AUTHORS)
assert_equal "$content" $'test <[email protected]>\ntestagain <[email protected]>'
}

@test "list authors has email defaultly" {
run git authors --list
assert_output $'test <[email protected]>\ntestagain <[email protected]>'
assert_success

run git authors -l
assert_output $'test <[email protected]>\ntestagain <[email protected]>'
assert_success
}

@test "list authors has no email" {
run git authors --list --no-email
assert_output $'test\ntestagain'
assert_success

run git authors -l --no-email
assert_output $'test\ntestagain'
assert_success
}
20 changes: 20 additions & 0 deletions tests/test_util.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# shellcheck shell=bash

source "$BATS_TEST_DIRNAME/../vendor/bats-all/load.bash"

test_util.setup_file() {
cd "$BATS_FILE_TMPDIR"

export GIT_CONFIG_NOSYSTEM=1
export GIT_CONFIG_GLOBAL="$PWD/git_config"
# This removes default warning about default "master" branch on some Git versions.
git config --global init.defaultBranch main

# Append to path so that we can access all commands included from git-extras
# TODO: This currently breaks with commands that are included in "not_needed_git_repo" etc.
PATH="$BATS_TEST_DIRNAME/../bin:$PATH"
}

test_util.cd_test() {
cd "$BATS_TEST_TMPDIR"
}
1 change: 1 addition & 0 deletions vendor/bats-all
Submodule bats-all added at a16a4a
Loading