156 lines
3.5 KiB
Bash
Executable file
156 lines
3.5 KiB
Bash
Executable file
#!/usr/bin/env bats
|
|
|
|
setup() {
|
|
set -euo pipefail
|
|
|
|
bats_load_library bats-support
|
|
bats_load_library bats-assert
|
|
|
|
DIR="$(cd "$(dirname "$BATS_TEST_FILENAME")" >/dev/null 2>&1 && pwd)"
|
|
PATH="$DIR/../bin:$PATH"
|
|
}
|
|
|
|
@test "keeps hunk when replacement matches" {
|
|
printf "%s\n" "foo" >"$BATS_TEST_TMPDIR/old"
|
|
printf "%s\n" "bar" >"$BATS_TEST_TMPDIR/new"
|
|
diff_output="$(git diff --no-index "$BATS_TEST_TMPDIR/old" \
|
|
"$BATS_TEST_TMPDIR/new" || true)"
|
|
run mechanicaldiff.py foo bar <<<"$diff_output"
|
|
assert_success
|
|
assert_output "$diff_output"
|
|
}
|
|
|
|
@test "drops diff when replacement does not match" {
|
|
printf "%s\n" "foo" >"$BATS_TEST_TMPDIR/old"
|
|
printf "%s\n" "baz" >"$BATS_TEST_TMPDIR/new"
|
|
git diff --no-index "$BATS_TEST_TMPDIR/old" "$BATS_TEST_TMPDIR/new" \
|
|
>"$BATS_TEST_TMPDIR/diff" || true
|
|
run mechanicaldiff.py foo bar <"$BATS_TEST_TMPDIR/diff"
|
|
assert_failure
|
|
assert_output ""
|
|
}
|
|
|
|
@test "drops one hunk and keeps another" {
|
|
cat >"$BATS_TEST_TMPDIR/old" <<-'EOF'
|
|
alpha
|
|
beta
|
|
gamma
|
|
one
|
|
two
|
|
three
|
|
four
|
|
five
|
|
six
|
|
seven
|
|
eight
|
|
nine
|
|
ten
|
|
delta
|
|
EOF
|
|
cat >"$BATS_TEST_TMPDIR/new" <<-'EOF'
|
|
alpha
|
|
beta_changed
|
|
gamma
|
|
one
|
|
two
|
|
three
|
|
four
|
|
five
|
|
six
|
|
seven
|
|
eight
|
|
nine
|
|
ten
|
|
delta_changed
|
|
EOF
|
|
cat >"$BATS_TEST_TMPDIR/new_kept" <<-'EOF'
|
|
alpha
|
|
beta_changed
|
|
gamma
|
|
one
|
|
two
|
|
three
|
|
four
|
|
five
|
|
six
|
|
seven
|
|
eight
|
|
nine
|
|
ten
|
|
delta
|
|
EOF
|
|
|
|
git diff --no-index "$BATS_TEST_TMPDIR/old" \
|
|
"$BATS_TEST_TMPDIR/new" \
|
|
>"$BATS_TEST_TMPDIR/diff_full" || true
|
|
git diff --no-index "$BATS_TEST_TMPDIR/old" \
|
|
"$BATS_TEST_TMPDIR/new_kept" \
|
|
>"$BATS_TEST_TMPDIR/diff_expected" || true
|
|
|
|
run mechanicaldiff.py "beta" "beta_changed" <"$BATS_TEST_TMPDIR/diff_full"
|
|
assert_failure
|
|
assert_output --partial "-beta"
|
|
assert_output --partial "+beta_changed"
|
|
refute_output --partial "delta_changed"
|
|
}
|
|
|
|
@test "handles multiple files" {
|
|
printf "%s\n" "foo" >"$BATS_TEST_TMPDIR/old1"
|
|
printf "%s\n" "bar" >"$BATS_TEST_TMPDIR/new1"
|
|
printf "%s\n" "alpha" >"$BATS_TEST_TMPDIR/old2"
|
|
printf "%s\n" "beta" >"$BATS_TEST_TMPDIR/new2"
|
|
|
|
git diff --no-index "$BATS_TEST_TMPDIR/old1" "$BATS_TEST_TMPDIR/new1" \
|
|
>"$BATS_TEST_TMPDIR/diff_one" || true
|
|
git diff --no-index "$BATS_TEST_TMPDIR/old2" "$BATS_TEST_TMPDIR/new2" \
|
|
>"$BATS_TEST_TMPDIR/diff_two" || true
|
|
|
|
cat "$BATS_TEST_TMPDIR/diff_one" "$BATS_TEST_TMPDIR/diff_two" \
|
|
>"$BATS_TEST_TMPDIR/diff_all"
|
|
|
|
run mechanicaldiff.py foo bar <"$BATS_TEST_TMPDIR/diff_one"
|
|
assert_success
|
|
output_one="$output"
|
|
|
|
run mechanicaldiff.py foo bar <"$BATS_TEST_TMPDIR/diff_two"
|
|
assert_failure
|
|
output_two="$output"
|
|
|
|
run mechanicaldiff.py foo bar <"$BATS_TEST_TMPDIR/diff_all"
|
|
assert_failure
|
|
assert_output "${output_one}${output_two}"
|
|
}
|
|
|
|
@test "supports regex group substitutions" {
|
|
cat >"$BATS_TEST_TMPDIR/old" <<-'EOF'
|
|
foo(123)
|
|
bar
|
|
EOF
|
|
cat >"$BATS_TEST_TMPDIR/new" <<-'EOF'
|
|
foo-123
|
|
bar
|
|
EOF
|
|
|
|
git diff --no-index "$BATS_TEST_TMPDIR/old" "$BATS_TEST_TMPDIR/new" \
|
|
>"$BATS_TEST_TMPDIR/diff" || true
|
|
|
|
run mechanicaldiff.py 'foo\((\d+)\)' 'foo-\1' <"$BATS_TEST_TMPDIR/diff"
|
|
assert_success
|
|
assert_output "$(cat "$BATS_TEST_TMPDIR/diff")"
|
|
}
|
|
|
|
@test "replaces a substring within a line" {
|
|
cat >"$BATS_TEST_TMPDIR/old" <<-'EOF'
|
|
prefix foo suffix
|
|
EOF
|
|
cat >"$BATS_TEST_TMPDIR/new" <<-'EOF'
|
|
prefix bar suffix
|
|
EOF
|
|
|
|
git diff --no-index "$BATS_TEST_TMPDIR/old" "$BATS_TEST_TMPDIR/new" \
|
|
>"$BATS_TEST_TMPDIR/diff" || true
|
|
|
|
run mechanicaldiff.py foo bar <"$BATS_TEST_TMPDIR/diff"
|
|
assert_success
|
|
assert_output "$(cat "$BATS_TEST_TMPDIR/diff")"
|
|
}
|