diff --git a/plugins/python-build/test/pyenv_ext.bats b/plugins/python-build/test/pyenv_ext.bats new file mode 100644 index 00000000..62232ae5 --- /dev/null +++ b/plugins/python-build/test/pyenv_ext.bats @@ -0,0 +1,140 @@ +#!/usr/bin/env bats + +load test_helper +export PYTHON_BUILD_CACHE_PATH="$TMP/cache" +export MAKE=make +export MAKE_OPTS="-j 2" +export CC=cc + +export TMP_FIXTURES="$TMP/fixtures" + +setup() { + mkdir -p "$INSTALL_ROOT" + stub md5 false + stub curl false +} + +executable() { + local file="$1" + mkdir -p "${file%/*}" + cat > "$file" + chmod +x "$file" +} + +cached_tarball() { + mkdir -p "$PYTHON_BUILD_CACHE_PATH" + pushd "$PYTHON_BUILD_CACHE_PATH" >/dev/null + tarball "$@" + popd >/dev/null +} + +tarball() { + local name="$1" + local path="$PWD/$name" + local configure="$path/configure" + shift 1 + + executable "$configure" <> build.log +echo "$name: \$@" \${PYTHONOPT:+PYTHONOPT=\$PYTHONOPT} >> build.log +OUT + + for file; do + mkdir -p "$(dirname "${path}/${file}")" + touch "${path}/${file}" + done + + tar czf "${path}.tar.gz" -C "${path%/*}" "$name" +} + +stub_make_install() { + stub "$MAKE" \ + " : echo \"$MAKE \$@\" >> build.log" \ + "install : echo \"$MAKE \$@\" >> build.log && cat build.log >> '$INSTALL_ROOT/build.log'" +} + +assert_build_log() { + run cat "$INSTALL_ROOT/build.log" + assert_output +} + +install_patch() { + local name="$1" + local patch="$2" + [ -n "$patch" ] || patch="python.patch" + + mkdir -p "${TMP_FIXTURES}/${name%/*}/patches/${name##*/}/${patch%/*}" + cat > "${TMP_FIXTURES}/${name%/*}/patches/${name##*/}/${patch}" +} + +install_tmp_fixture() { + local args + + while [ "${1#-}" != "$1" ]; do + args="$args $1" + shift 1 + done + + local name="$1" + local destination="$2" + [ -n "$destination" ] || destination="$INSTALL_ROOT" + + # Copy fixture to temporary path + mkdir -p "${TMP_FIXTURES}/${name%/*}" + cp "${FIXTURE_ROOT}/${name}" "${TMP_FIXTURES}/${name}" + + run python-build $args "$TMP_FIXTURES/$name" "$destination" +} + +@test "apply built-in python patch before building" { + cached_tarball "Python-3.2.1" + + stub brew false + stub_make_install + stub patch ' : echo patch "$@" | sed -E "s/\.[[:alnum:]]+$/.XXX/" >> build.log' + + echo | install_patch definitions/vanilla-python "Python-3.2.1/empty.patch" + + TMPDIR="$TMP" install_tmp_fixture definitions/vanilla-python < /dev/null + assert_success + + assert_build_log <> build.log' + + echo "foo" | install_patch definitions/vanilla-python "Python-3.2.1/foo.patch" + echo "bar" | install_patch definitions/vanilla-python "Python-3.2.1/bar.patch" + echo "baz" | install_patch definitions/vanilla-python "Python-3.2.1/baz.patch" + + TMPDIR="$TMP" install_tmp_fixture definitions/vanilla-python < /dev/null + assert_success + + assert_build_log < "$file" - GREP_OPTIONS="-F" run pyenv grep "hell." "$file" - assert_success - assert_output "hello" -} diff --git a/test/pyenv_ext.bats b/test/pyenv_ext.bats new file mode 100644 index 00000000..95baa41e --- /dev/null +++ b/test/pyenv_ext.bats @@ -0,0 +1,11 @@ +#!/usr/bin/env bats + +load test_helper + +@test "conflicting GREP_OPTIONS" { + file="${BATS_TMPDIR}/hello" + echo "hello" > "$file" + GREP_OPTIONS="-F" run pyenv grep "hell." "$file" + assert_success + assert_output "hello" +}