1
0
mirror of https://github.com/pyenv/pyenv.git synced 2025-11-08 11:33:49 -05:00

Merge pull request #3324 from rockandska/bats_in_docker

Bats test suite in docker
This commit is contained in:
native-api
2025-09-15 22:37:01 +03:00
committed by GitHub
38 changed files with 503 additions and 265 deletions

View File

@@ -40,10 +40,15 @@ jobs:
run: |
echo $PYENV_ROOT
echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH
- run: |
- name: Run test on the host
run: |
make test
- name: Run test with docker
if: ${{ ! contains(matrix.os, 'macos') }}
run: |
make test-docker
- env:
PYENV_NATIVE_EXT: 1
run: |
(cd src; ./configure; make)
bats/bin/bats test/{pyenv,hooks,versions}.bats
bats/bin/bats test/{pyenv,hooks,versions}.bats

3
.gitignore vendored
View File

@@ -6,7 +6,8 @@
/libexec/*.dylib
/src/Makefile
/src/*.o
/bats/
/bats
/bats-*/
/default-packages
.idea
*.un~

View File

@@ -1,3 +1,86 @@
TEST_BATS_VERSION = v1.10.0
TEST_BASH_VERSIONS = 3.2.57 4.1.17
TEST_UNIT_DOCKER_PREFIX = test-unit-docker
TEST_UNIT_DOCKER_TARGETS = $(foreach bash,$(TEST_BASH_VERSIONS),$(addsuffix -$(bash),$(TEST_UNIT_DOCKER_PREFIX)) $(addsuffix -gnu-$(bash),$(TEST_UNIT_DOCKER_PREFIX)))
TEST_PLUGIN_DOCKER_PREFIX = test-plugin-docker
TEST_PLUGIN_DOCKER_TARGETS = $(foreach bash,$(TEST_BASH_VERSIONS),$(addsuffix -$(bash),$(TEST_PLUGIN_DOCKER_PREFIX)) $(addsuffix -gnu-$(bash),$(TEST_PLUGIN_DOCKER_PREFIX)))
TEST_BATS_IMAGE_PREFIX = test-pyenv-docker-image
TEST_BATS_IMAGE_TARGETS = $(foreach bash,$(TEST_BASH_VERSIONS),$(addsuffix -$(bash),$(TEST_BATS_IMAGE_PREFIX)) $(addsuffix -gnu-$(bash),$(TEST_BATS_IMAGE_PREFIX)))
.PHONY:
test-docker: $(TEST_UNIT_DOCKER_PREFIX) $(TEST_PLUGIN_DOCKER_PREFIX)
# Run all unit test under bats docker
.PHONY: $(TEST_UNIT_DOCKER_PREFIX)
$(TEST_UNIT_DOCKER_PREFIX): $(TEST_UNIT_DOCKER_TARGETS)
# Run each unit test under bats docker
.PHONY: $(TEST_UNIT_DOCKER_TARGETS)
$(TEST_UNIT_DOCKER_TARGETS): DOCKER_IMAGE = $(TEST_BATS_IMAGE_PREFIX)
$(TEST_UNIT_DOCKER_TARGETS): GNU = $(if $(findstring -gnu-,$@),True,False)
$(TEST_UNIT_DOCKER_TARGETS): BASH = $(filter $(TEST_BASH_VERSIONS),$(subst -, ,$@))
$(TEST_UNIT_DOCKER_TARGETS): DOCKER_TAG = bash-$(BASH)-gnu-$(GNU)
$(TEST_UNIT_DOCKER_TARGETS): INTERACTIVE = $(if $(findstring true,$(CI)),,-ti)
$(TEST_UNIT_DOCKER_TARGETS): $(TEST_UNIT_DOCKER_PREFIX)-% : $(TEST_BATS_IMAGE_PREFIX)-%
$(info Running test with docker image '$(DOCKER_IMAGE):$(DOCKER_TAG)')
docker run \
--init \
-v $(PWD):/code:ro \
-v /etc/passwd:/etc/passwd:ro \
-v /etc/group:/etc/group:ro \
-u "$$(id -u $$(whoami)):$$(id -g $$(whoami))" \
$${BATS_TEST_FILTER:+-e BATS_TEST_FILTER="$${BATS_TEST_FILTER}"} \
$${BATS_FILE_FILTER:+-e BATS_FILE_FILTER="$${BATS_FILE_FILTER}"} \
$${CI+-e CI="$${CI}"} \
$(INTERACTIVE) \
$(DOCKER_IMAGE):$(DOCKER_TAG) \
test/run
# Run all plugin test under bats docker
.PHONY: $(TEST_PLUGIN_DOCKER_PREFIX)
$(TEST_PLUGIN_DOCKER_PREFIX): $(TEST_PLUGIN_DOCKER_TARGETS)
# Run each plugin test under bats docker
.PHONY: $(TEST_PLUGIN_DOCKER_TARGETS)
$(TEST_PLUGIN_DOCKER_TARGETS): DOCKER_IMAGE = $(TEST_BATS_IMAGE_PREFIX)
$(TEST_PLUGIN_DOCKER_TARGETS): GNU = $(if $(findstring -gnu-,$@),True,False)
$(TEST_PLUGIN_DOCKER_TARGETS): BASH = $(filter $(TEST_BASH_VERSIONS),$(subst -, ,$@))
$(TEST_PLUGIN_DOCKER_TARGETS): DOCKER_TAG = bash-$(BASH)-gnu-$(GNU)
$(TEST_PLUGIN_DOCKER_TARGETS): INTERACTIVE = $(if $(findstring true,$(CI)),,-ti)
$(TEST_PLUGIN_DOCKER_TARGETS): $(TEST_PLUGIN_DOCKER_PREFIX)-% : $(TEST_BATS_IMAGE_PREFIX)-%
$(info Running test with docker image '$(DOCKER_IMAGE):$(DOCKER_TAG)')
docker run \
--init \
-v $(PWD):/code:ro \
-v /etc/passwd:/etc/passwd:ro \
-v /etc/group:/etc/group:ro \
-u "$$(id -u $$(whoami)):$$(id -g $$(whoami))" \
$${CI+-e CI="$${CI}"} \
$(INTERACTIVE) \
$(DOCKER_IMAGE):$(DOCKER_TAG) \
bats $${BATS_TEST_FILTER:+--filter "$${BATS_TEST_FILTER}"} plugins/python-build/test/$${BATS_FILE_FILTER}
# Build all images needed for bats under docker
.PHONY: $(TEST_BATS_IMAGE_PREFIX)
$(TEST_BATS_IMAGE_PREFIX): $(TEST_BATS_IMAGE_TARGETS)
# Build each image needed for bats under docker
.PHONY: $(TEST_BATS_IMAGE_TARGETS)
$(TEST_BATS_IMAGE_TARGETS): DOCKER_IMAGE = $(TEST_BATS_IMAGE_PREFIX)
$(TEST_BATS_IMAGE_TARGETS): GNU = $(if $(findstring -gnu-,$@),True,False)
$(TEST_BATS_IMAGE_TARGETS): BASH = $(filter $(TEST_BASH_VERSIONS),$(subst -, ,$@))
$(TEST_BATS_IMAGE_TARGETS): DOCKER_TAG = bash-$(BASH)-gnu-$(GNU)
$(TEST_BATS_IMAGE_TARGETS):
$(info Building docker image '$(DOCKER_IMAGE):$(DOCKER_TAG)')
docker build \
--quiet \
-f "$(PWD)/test/Dockerfile" \
--build-arg GNU="$(GNU)" \
--build-arg BASH="$(BASH)" \
--build-arg BATS_VERSION="$(TEST_BATS_VERSION)" \
-t $(DOCKER_IMAGE):$(DOCKER_TAG) \
./
.PHONY: test test-build test-unit test-plugin
# Do not pass in user flags to build tests.
@@ -10,7 +93,7 @@ test-unit: bats
PATH="./bats/bin:$$PATH" test/run
test-plugin: bats
cd plugins/python-build && $(PWD)/bats/bin/bats $${CI:+--tap} test
cd plugins/python-build && $(PWD)/bats/bin/bats $${CI:+--tap} $${BATS_TEST_FILTER:+--filter "$${BATS_TEST_FILTER}"} test/$${BATS_FILE_FILTER}
PYTHON_BUILD_ROOT := $(CURDIR)/plugins/python-build
PYTHON_BUILD_OPTS ?= --verbose
@@ -25,5 +108,12 @@ test-build:
[ -e $(PYTHON_BUILD_TEST_PREFIX)/bin/pip ]
$(PYTHON_BUILD_TEST_PREFIX)/bin/pip -V
bats:
git clone --depth 1 --branch v1.2.0 https://github.com/bats-core/bats-core.git bats
.SECONDARY: bats-$(TEST_BATS_VERSION)
bats-$(TEST_BATS_VERSION):
rm -rf bats
ln -sf bats-$(TEST_BATS_VERSION) bats
git clone --depth 1 --branch $(TEST_BATS_VERSION) https://github.com/bats-core/bats-core.git bats-$(TEST_BATS_VERSION)
.PHONY: bats
bats: bats-$(TEST_BATS_VERSION)
ln -sf bats-$(TEST_BATS_VERSION) bats

View File

@@ -47,7 +47,11 @@ done
# If shell is not provided, detect it.
if [ -z "$shell" ]; then
shell="$(ps -p "$PPID" -o 'args=' 2>/dev/null || true)"
if shell=$(tr '\0' ' ' 2>/dev/null </proc/"$PPID"/cmdline);then
:
else
shell=$(ps p "$PPID" -o 'args=' 2>/dev/null || true)
fi
shell="${shell%% *}"
shell="${shell##-}"
shell="${shell:-$SHELL}"

View File

@@ -4,7 +4,7 @@ load test_helper
@test "not enough arguments for python-build" {
# use empty inline definition so nothing gets built anyway
local definition="${TMP}/build-definition"
local definition="${BATS_TEST_TMPDIR}/build-definition"
echo '' > "$definition"
run python-build "$definition"
@@ -14,10 +14,10 @@ load test_helper
@test "extra arguments for python-build" {
# use empty inline definition so nothing gets built anyway
local definition="${TMP}/build-definition"
local definition="${BATS_TEST_TMPDIR}/build-definition"
echo '' > "$definition"
run python-build "$definition" "${TMP}/install" ""
run python-build "$definition" "${BATS_TEST_TMPDIR}/install" ""
assert_failure
assert_output_contains 'Usage: python-build'
}

View File

@@ -1,13 +1,13 @@
#!/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 -n PYTHON_CONFIGURE_OPTS
_setup() {
export PYTHON_BUILD_CACHE_PATH="$BATS_TEST_TMPDIR/cache"
export MAKE=make
export MAKE_OPTS="-j 2"
export CC=cc
export -n PYTHON_CONFIGURE_OPTS
setup() {
mkdir -p "$INSTALL_ROOT"
stub md5 false
stub curl false
@@ -74,11 +74,11 @@ assert_build_log() {
unstub make
assert_build_log <<OUT
yaml-0.1.6: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
yaml-0.1.6: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
yaml-0.1.6: --prefix=$INSTALL_ROOT
make -j 2
make install
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -117,11 +117,11 @@ OUT
unstub make
assert_build_log <<OUT
yaml-0.1.6: CFLAGS="yaml_cflag1 yaml_cflag2" CPPFLAGS="-I${TMP}/install/include yaml_cppflag1 yaml_cppflag2" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib yaml_ldflag1 yaml_ldflag2" PKG_CONFIG_PATH=""
yaml-0.1.6: CFLAGS="yaml_cflag1 yaml_cflag2" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include yaml_cppflag1 yaml_cppflag2" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib yaml_ldflag1 yaml_ldflag2" PKG_CONFIG_PATH=""
yaml-0.1.6: --prefix=yaml_prefix_path configure_opt1 configure_opt2 yaml_configure_opt1 yaml_configure_opt2
make make_opt1 make_opt2 yaml_make_opt1 yaml_make_opt2
make install make_install_opt1 make_install_opt2
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib configure_opt1 configure_opt2
make make_opt1 make_opt2
make python_make_install_target make_install_opt1 make_install_opt2 python_make_install_opt1 python_make_install_opt2
@@ -138,7 +138,7 @@ OUT
stub_make_install
stub patch ' : echo patch "$@" | sed -E "s/\.[[:alnum:]]+$/.XXX/" >> build.log'
TMPDIR="$TMP" install_fixture --patch definitions/needs-yaml <<<""
TMPDIR="$BATS_TEST_TMPDIR" install_fixture --patch definitions/needs-yaml <<<""
assert_success
unstub uname
@@ -146,12 +146,12 @@ OUT
unstub patch
assert_build_log <<OUT
yaml-0.1.6: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
yaml-0.1.6: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
yaml-0.1.6: --prefix=$INSTALL_ROOT
make -j 2
make install
patch -p0 --force -i $TMP/python-patch.XXX
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
patch -p0 --force -i $BATS_TEST_TMPDIR/python-patch.XXX
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -168,7 +168,7 @@ OUT
stub_make_install
stub patch ' : echo patch "$@" | sed -E "s/\.[[:alnum:]]+$/.XXX/" >> build.log'
TMPDIR="$TMP" install_fixture --patch definitions/needs-yaml <<<"diff --git a/script.py"
TMPDIR="$BATS_TEST_TMPDIR" install_fixture --patch definitions/needs-yaml <<<"diff --git a/script.py"
assert_success
unstub uname
@@ -176,12 +176,12 @@ OUT
unstub patch
assert_build_log <<OUT
yaml-0.1.6: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
yaml-0.1.6: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
yaml-0.1.6: --prefix=$INSTALL_ROOT
make -j 2
make install
patch -p1 --force -i $TMP/python-patch.XXX
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
patch -p1 --force -i $BATS_TEST_TMPDIR/python-patch.XXX
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -191,7 +191,7 @@ OUT
@test "Homebrew and port are tried if both are present in PATH in MacOS" {
cached_tarball "Python-3.6.2"
BREW_PREFIX="$TMP/homebrew-prefix"
BREW_PREFIX="$BATS_TEST_TMPDIR/homebrew-prefix"
stub uname '-s : echo Darwin'
stub sw_vers '-productVersion : echo 1010'
@@ -213,7 +213,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include -I$BREW_PREFIX/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib -L$BREW_PREFIX/lib -Wl,-rpath,$BREW_PREFIX/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include -I$BREW_PREFIX/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib -L$BREW_PREFIX/lib -Wl,-rpath,$BREW_PREFIX/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -223,7 +223,7 @@ OUT
@test "homebrew with uncommon prefix is added to search path" {
cached_tarball "Python-3.6.2"
BREW_PREFIX="$TMP/homebrew-prefix"
BREW_PREFIX="$BATS_TEST_TMPDIR/homebrew-prefix"
mkdir -p "$BREW_PREFIX"
export PYTHON_BUILD_SKIP_MACPORTS=1
@@ -244,7 +244,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include -I$BREW_PREFIX/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib -L$BREW_PREFIX/lib -Wl,-rpath,$BREW_PREFIX/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include -I$BREW_PREFIX/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib -L$BREW_PREFIX/lib -Wl,-rpath,$BREW_PREFIX/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -254,7 +254,7 @@ OUT
@test "Macports are used in MacOS if Homebrew was not picked" {
cached_tarball "Python-3.6.2"
BREW_PREFIX="$TMP/homebrew-prefix"
BREW_PREFIX="$BATS_TEST_TMPDIR/homebrew-prefix"
stub uname '-s : echo Darwin'
stub sw_vers '-productVersion : echo 1010'
@@ -275,7 +275,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I$PORT_PREFIX/include -I${TMP}/install/include" LDFLAGS="-L$PORT_PREFIX/lib -Wl,-rpath,$PORT_PREFIX/lib -L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH="${TMP}/lib/pkgconfig"
Python-3.6.2: CFLAGS="" CPPFLAGS="-I$PORT_PREFIX/include -I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L$PORT_PREFIX/lib -Wl,-rpath,$PORT_PREFIX/lib -L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH="${BATS_TEST_TMPDIR}/lib/pkgconfig"
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -285,7 +285,7 @@ OUT
@test "yaml is linked from Homebrew" {
cached_tarball "Python-3.6.2"
brew_libdir="$TMP/homebrew-yaml"
brew_libdir="$BATS_TEST_TMPDIR/homebrew-yaml"
mkdir -p "$brew_libdir"
stub uname '-s : echo Darwin'
@@ -303,7 +303,7 @@ OUT
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I$brew_libdir/include -I${TMP}/install/include" LDFLAGS="-L$brew_libdir/lib -L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I$brew_libdir/include -I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L$brew_libdir/lib -L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -313,7 +313,7 @@ OUT
@test "readline is linked from Homebrew" {
cached_tarball "Python-3.6.2"
readline_libdir="$TMP/homebrew-readline"
readline_libdir="$BATS_TEST_TMPDIR/homebrew-readline"
mkdir -p "$readline_libdir"
stub uname '-s : echo Darwin'
stub sw_vers '-productVersion : echo 1010'
@@ -333,7 +333,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I$readline_libdir/include -I${TMP}/install/include" LDFLAGS="-L$readline_libdir/lib -L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I$readline_libdir/include -I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L$readline_libdir/lib -L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -343,7 +343,7 @@ OUT
@test "ncurses is linked from Homebrew" {
cached_tarball "Python-3.6.2"
ncurses_libdir="$TMP/homebrew-ncurses"
ncurses_libdir="$BATS_TEST_TMPDIR/homebrew-ncurses"
mkdir -p "$ncurses_libdir"
stub uname '-s : echo Darwin'
stub sw_vers '-productVersion : echo 1010'
@@ -363,7 +363,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I$ncurses_libdir/include -I${TMP}/install/include" LDFLAGS="-L$ncurses_libdir/lib -L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I$ncurses_libdir/include -I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L$ncurses_libdir/lib -L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -378,6 +378,9 @@ OUT
stub port "-q installed libyaml : echo ' libyaml @0.2.5_0 (active)'"
for i in {1..3}; do stub port false; done
stub_make_install
export PYTHON_BUILD_SKIP_HOMEBREW=1
PORT_PREFIX="$(which port)"
PORT_PREFIX="${PORT_PREFIX%/bin/port}"
install_fixture definitions/needs-yaml
assert_success
@@ -388,7 +391,7 @@ OUT
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/include -I${TMP}/install/include" LDFLAGS="-L${TMP}/lib -Wl,-rpath,${TMP}/lib -L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH="${TMP}/lib/pkgconfig"
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/include -I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/lib -L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH="${BATS_TEST_TMPDIR}/lib/pkgconfig"
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -403,6 +406,9 @@ OUT
stub port "-q installed readline : echo ' readline @8.2.013_0 (active)'"
for i in {1..2}; do stub port false; done
stub_make_install
export PYTHON_BUILD_SKIP_HOMEBREW=1
PORT_PREFIX="$(which port)"
PORT_PREFIX="${PORT_PREFIX%/bin/port}"
run_inline_definition <<DEF
install_package "Python-3.6.2" "http://python.org/ftp/python/3.6.2/Python-3.6.2.tar.gz"
@@ -415,7 +421,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/include -I${TMP}/install/include" LDFLAGS="-L${TMP}/lib -Wl,-rpath,${TMP}/lib -L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH="${TMP}/lib/pkgconfig"
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/include -I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/lib -L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH="${BATS_TEST_TMPDIR}/lib/pkgconfig"
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -431,6 +437,9 @@ OUT
stub port "-q installed ncurses : echo '$ncurses_libdir'"
stub port false
stub_make_install
export PYTHON_BUILD_SKIP_HOMEBREW=1
PORT_PREFIX="$(which port)"
PORT_PREFIX="${PORT_PREFIX%/bin/port}"
run_inline_definition <<DEF
install_package "Python-3.6.2" "http://python.org/ftp/python/3.6.2/Python-3.6.2.tar.gz"
@@ -443,7 +452,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/include -I${TMP}/install/include" LDFLAGS="-L${TMP}/lib -Wl,-rpath,${TMP}/lib -L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH="${TMP}/lib/pkgconfig"
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/include -I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/lib -L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH="${BATS_TEST_TMPDIR}/lib/pkgconfig"
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -474,7 +483,7 @@ DEF
unstub sysctl
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib --with-openssl=/usr/local
make -j 1
make install
@@ -508,7 +517,7 @@ DEF
unstub sysctl
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include -I/usr/local/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib -L/usr/local/lib -Wl,-rpath,/usr/local/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include -I/usr/local/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib -L/usr/local/lib -Wl,-rpath,/usr/local/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 1
make install
@@ -538,7 +547,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -565,7 +574,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -589,7 +598,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -617,7 +626,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/include -I${TMP}/install/include" LDFLAGS="-L${TMP}/lib -Wl,-rpath,${TMP}/lib -L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH="${TMP}/lib/pkgconfig"
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/include -I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/lib -L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH="${BATS_TEST_TMPDIR}/lib/pkgconfig"
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -627,7 +636,7 @@ OUT
@test "homebrew is used in Linux if PYTHON_BUILD_USE_HOMEBREW is set" {
cached_tarball "Python-3.6.2"
BREW_PREFIX="$TMP/homebrew-prefix"
BREW_PREFIX="$BATS_TEST_TMPDIR/homebrew-prefix"
mkdir -p "$BREW_PREFIX"
stub uname '-s : echo Linux'
@@ -646,7 +655,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include -I$BREW_PREFIX/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib -L$BREW_PREFIX/lib -Wl,-rpath,$BREW_PREFIX/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include -I$BREW_PREFIX/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib -L$BREW_PREFIX/lib -Wl,-rpath,$BREW_PREFIX/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -676,7 +685,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include -I$BREW_PREFIX/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib -L$BREW_PREFIX/lib -Wl,-rpath,$BREW_PREFIX/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include -I$BREW_PREFIX/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib -L$BREW_PREFIX/lib -Wl,-rpath,$BREW_PREFIX/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -686,7 +695,7 @@ OUT
@test "homebrew is not used in Linux if Pyenv is not installed with Homebrew" {
cached_tarball "Python-3.6.2"
BREW_PREFIX="$TMP/homebrew-prefix"
BREW_PREFIX="$BATS_TEST_TMPDIR/homebrew-prefix"
mkdir -p "$BREW_PREFIX"
stub uname '-s : echo Linux'
@@ -703,7 +712,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -713,7 +722,7 @@ OUT
@test "readline is not linked from Homebrew when explicitly defined" {
cached_tarball "Python-3.6.2"
readline_libdir="$TMP/custom"
readline_libdir="$BATS_TEST_TMPDIR/custom"
mkdir -p "$readline_libdir/include/readline"
touch "$readline_libdir/include/readline/rlconf.h"
@@ -735,7 +744,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib CPPFLAGS=-I$readline_libdir/include LDFLAGS=-L$readline_libdir/lib
make -j 2
make install
@@ -745,7 +754,7 @@ OUT
@test "tcl-tk is linked from Homebrew" {
cached_tarball "Python-3.6.2"
tcl_tk_version=8.6
tcl_tk_libdir="$TMP/homebrew-tcl-tk"
tcl_tk_libdir="$BATS_TEST_TMPDIR/homebrew-tcl-tk"
mkdir -p "$tcl_tk_libdir/lib"
echo "TCL_VERSION='$tcl_tk_version'" >>"$tcl_tk_libdir/lib/tclConfig.sh"
@@ -768,8 +777,8 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH="${TMP}/homebrew-tcl-tk/lib/pkgconfig"
Python-3.6.2: --prefix=${TMP}/install --enable-shared --libdir=${TMP}/install/lib --with-tcltk-libs=-L${TMP}/homebrew-tcl-tk/lib -ltcl$tcl_tk_version -ltk$tcl_tk_version --with-tcltk-includes=-I${TMP}/homebrew-tcl-tk/include
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH="${BATS_TEST_TMPDIR}/homebrew-tcl-tk/lib/pkgconfig"
Python-3.6.2: --prefix=${BATS_TEST_TMPDIR}/install --enable-shared --libdir=${BATS_TEST_TMPDIR}/install/lib --with-tcltk-libs=-L${BATS_TEST_TMPDIR}/homebrew-tcl-tk/lib -ltcl$tcl_tk_version -ltk$tcl_tk_version --with-tcltk-includes=-I${BATS_TEST_TMPDIR}/homebrew-tcl-tk/include
make -j 2
make install
OUT
@@ -788,7 +797,7 @@ OUT
for i in {1..4}; do stub brew false; done
stub_make_install
export PYTHON_CONFIGURE_OPTS="--with-tcltk-libs='-L${TMP}/custom-tcl-tk/lib -ltcl$tcl_tk_version -ltk$tcl_tk_version'"
export PYTHON_CONFIGURE_OPTS="--with-tcltk-libs='-L${BATS_TEST_TMPDIR}/custom-tcl-tk/lib -ltcl$tcl_tk_version -ltk$tcl_tk_version'"
run_inline_definition <<DEF
install_package "Python-3.6.2" "http://python.org/ftp/python/3.6.2/Python-3.6.2.tar.gz"
DEF
@@ -800,8 +809,8 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib --with-tcltk-libs=-L${TMP}/custom-tcl-tk/lib -ltcl8.6 -ltk8.6
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib --with-tcltk-libs=-L${BATS_TEST_TMPDIR}/custom-tcl-tk/lib -ltcl8.6 -ltk8.6
make -j 2
make install
OUT
@@ -813,7 +822,7 @@ OUT
stub uname '-s : echo Darwin'
stub sw_vers '-productVersion : echo 1010'
tcl_tk_libdir="$TMP/homebrew-tcl-tk"
tcl_tk_libdir="$BATS_TEST_TMPDIR/homebrew-tcl-tk"
mkdir -p "$tcl_tk_libdir/lib"
stub brew "--prefix tcl-tk@8 : echo '${tcl_tk_libdir}'"
@@ -833,8 +842,8 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH="${TMP}/homebrew-tcl-tk/lib/pkgconfig"
Python-3.6.2: --prefix=${TMP}/install --enable-shared --libdir=${TMP}/install/lib
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH="${BATS_TEST_TMPDIR}/homebrew-tcl-tk/lib/pkgconfig"
Python-3.6.2: --prefix=${BATS_TEST_TMPDIR}/install --enable-shared --libdir=${BATS_TEST_TMPDIR}/install/lib
make -j 2
make install
OUT
@@ -845,6 +854,7 @@ OUT
stub uname '-s : echo Darwin'
stub sw_vers '-productVersion : echo 10.10'
for i in {1..6}; do stub brew false; done
stub sysctl false
stub_make_install
@@ -857,10 +867,11 @@ DEF
unstub uname
unstub sw_vers
unstub brew
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -872,6 +883,7 @@ OUT
stub uname '-s : echo Darwin'
stub sw_vers '-productVersion : echo 10.10'
for i in {1..6}; do stub brew false; done
stub sysctl '-n hw.ncpu : echo 4'
stub_make_install
@@ -884,11 +896,12 @@ DEF
unstub uname
unstub sw_vers
unstub brew
unstub sysctl
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 4
make install
@@ -916,7 +929,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 1
make install
@@ -940,7 +953,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install DOGE="such wow"
@@ -964,7 +977,7 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --libdir=$INSTALL_ROOT/lib --disable-shared
make -j 2
make install
@@ -991,8 +1004,8 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=${TMP}/install/lib --with-dsymutil
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=${BATS_TEST_TMPDIR}/install/lib --with-dsymutil
make -j 2
make install
OUT
@@ -1014,8 +1027,8 @@ DEF
unstub make
assert_build_log <<OUT
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=${TMP}/install/lib
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=${BATS_TEST_TMPDIR}/install/lib
make -j 2
make install
OUT
@@ -1024,7 +1037,7 @@ OUT
@test "custom relative install destination" {
export PYTHON_BUILD_CACHE_PATH="$FIXTURE_ROOT"
cd "$TMP"
cd "$BATS_TEST_TMPDIR"
install_fixture definitions/without-checksum ./here
assert_success
assert [ -x ./here/bin/package ]
@@ -1076,7 +1089,7 @@ OUT
@test "can use PYTHON_CONFIGURE to apply a patch" {
cached_tarball "Python-3.6.2"
executable "${TMP}/custom-configure" <<CONF
executable "${BATS_TEST_TMPDIR}/custom-configure" <<CONF
#!$BASH
apply -p1 -i /my/patch.diff
exec ./configure "\$@"
@@ -1086,7 +1099,7 @@ CONF
stub apply 'echo apply "$@" >> build.log'
stub_make_install
export PYTHON_CONFIGURE="${TMP}/custom-configure"
export PYTHON_CONFIGURE="${BATS_TEST_TMPDIR}/custom-configure"
run_inline_definition <<DEF
install_package "Python-3.6.2" "http://python.org/ftp/python/3.6.2/Python-3.6.2.tar.gz"
DEF
@@ -1098,7 +1111,7 @@ DEF
assert_build_log <<OUT
apply -p1 -i /my/patch.diff
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: CFLAGS="" CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib" PKG_CONFIG_PATH=""
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -1119,22 +1132,22 @@ OUT
assert_success "hello world"
}
@test "non-writable TMPDIR aborts build" {
export TMPDIR="${TMP}/build"
@test "non-writable BATS_TEST_TMPDIRDIR aborts build" {
export TMPDIR="${BATS_TEST_TMPDIR}/build"
mkdir -p "$TMPDIR"
chmod -w "$TMPDIR"
touch "${TMP}/build-definition"
run python-build "${TMP}/build-definition" "$INSTALL_ROOT"
touch "${BATS_TEST_TMPDIR}/build-definition"
run python-build "${BATS_TEST_TMPDIR}/build-definition" "$INSTALL_ROOT"
assert_failure "python-build: TMPDIR=$TMPDIR is set to a non-accessible location"
}
@test "non-executable TMPDIR aborts build" {
export TMPDIR="${TMP}/build"
export TMPDIR="${BATS_TEST_TMPDIR}/build"
mkdir -p "$TMPDIR"
chmod -x "$TMPDIR"
touch "${TMP}/build-definition"
run python-build "${TMP}/build-definition" "$INSTALL_ROOT"
touch "${BATS_TEST_TMPDIR}/build-definition"
run python-build "${BATS_TEST_TMPDIR}/build-definition" "$INSTALL_ROOT"
assert_failure "python-build: TMPDIR=$TMPDIR is set to a non-accessible location"
}

View File

@@ -1,10 +1,9 @@
#!/usr/bin/env bats
load test_helper
export PYTHON_BUILD_SKIP_MIRROR=1
export PYTHON_BUILD_CACHE_PATH="$TMP/cache"
setup() {
_setup() {
export PYTHON_BUILD_SKIP_MIRROR=1
export PYTHON_BUILD_CACHE_PATH="$BATS_TEST_TMPDIR/cache"
mkdir "$PYTHON_BUILD_CACHE_PATH"
}
@@ -77,7 +76,7 @@ setup() {
@test "nonexistent cache directory is ignored" {
stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
export PYTHON_BUILD_CACHE_PATH="${TMP}/nonexistent"
export PYTHON_BUILD_CACHE_PATH="${BATS_TEST_TMPDIR}/nonexistent"
install_fixture definitions/without-checksum

View File

@@ -106,7 +106,7 @@ export PYTHON_BUILD_CACHE_PATH=
stub wget false
export -n PYTHON_BUILD_CACHE_PATH
export PYTHON_BUILD_BUILD_PATH="${TMP}/build"
export PYTHON_BUILD_BUILD_PATH="${BATS_TEST_TMPDIR}/build"
mkdir -p "$PYTHON_BUILD_BUILD_PATH"
ln -s "${FIXTURE_ROOT}/package-1.0.0.tar.gz" "$PYTHON_BUILD_BUILD_PATH"
@@ -128,7 +128,7 @@ DEF
stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3"
export -n PYTHON_BUILD_CACHE_PATH
export PYTHON_BUILD_BUILD_PATH="${TMP}/build"
export PYTHON_BUILD_BUILD_PATH="${BATS_TEST_TMPDIR}/build"
mkdir -p "$PYTHON_BUILD_BUILD_PATH"
touch "${PYTHON_BUILD_BUILD_PATH}/package-1.0.0.tar.gz"

View File

@@ -1,11 +1,13 @@
#!/usr/bin/env bats
load test_helper
export MAKE=make
export MAKE_OPTS='-j 2'
export -n CFLAGS
export -n CC
export -n PYTHON_CONFIGURE_OPTS
_setup() {
export MAKE=make
export MAKE_OPTS='-j 2'
export -n CFLAGS
export -n CC
export -n PYTHON_CONFIGURE_OPTS
}
@test "require_gcc on OS X 10.9" {
@@ -21,7 +23,7 @@ echo MACOSX_DEPLOYMENT_TARGET=\${MACOSX_DEPLOYMENT_TARGET-no}
DEF
assert_success
assert_output <<OUT
CC=${TMP}/bin/gcc
CC=${BATS_TEST_TMPDIR}/bin/gcc
MACOSX_DEPLOYMENT_TARGET=10.9
OUT
@@ -48,7 +50,7 @@ DEF
assert_success
assert_output <<OUT
CC=${TMP}/bin/gcc
CC=${BATS_TEST_TMPDIR}/bin/gcc
MACOSX_DEPLOYMENT_TARGET=10.10
OUT
}
@@ -60,7 +62,7 @@ OUT
require_gcc
echo \$CC
DEF
assert_success "${TMP}/bin/gcc"
assert_success "${BATS_TEST_TMPDIR}/bin/gcc"
unstub gcc
}
@@ -92,7 +94,7 @@ build_package_standard python
DEF
assert_success
assert_output <<OUT
./configure --prefix=$INSTALL_ROOT --enable-shared --libdir=${TMP}/install/lib
./configure --prefix=$INSTALL_ROOT --enable-shared --libdir=${BATS_TEST_TMPDIR}/install/lib
CC=clang
CFLAGS=no
make -j 2
@@ -120,6 +122,6 @@ DEF
assert_success
assert_output <<OUT
CFLAGS_EXTRA=-DMICROPY_PY_SYS_PATH_DEFAULT='".frozen:${TMP}/install/lib/micropython"' -Wno-floating-conversion
CFLAGS_EXTRA=-DMICROPY_PY_SYS_PATH_DEFAULT='".frozen:${BATS_TEST_TMPDIR}/install/lib/micropython"' -Wno-floating-conversion
OUT
}

View File

@@ -12,14 +12,14 @@ NUM_DEFINITIONS="$(find "$BATS_TEST_DIRNAME"/../share/python-build -maxdepth 1 -
}
@test "custom PYTHON_BUILD_ROOT: nonexistent" {
export PYTHON_BUILD_ROOT="$TMP"
export PYTHON_BUILD_ROOT="$BATS_TEST_TMPDIR"
refute [ -e "${PYTHON_BUILD_ROOT}/share/python-build" ]
run python-build --definitions
assert_success ""
}
@test "custom PYTHON_BUILD_ROOT: single definition" {
export PYTHON_BUILD_ROOT="$TMP"
export PYTHON_BUILD_ROOT="$BATS_TEST_TMPDIR"
mkdir -p "${PYTHON_BUILD_ROOT}/share/python-build"
touch "${PYTHON_BUILD_ROOT}/share/python-build/2.7.8-test"
run python-build --definitions
@@ -27,7 +27,7 @@ NUM_DEFINITIONS="$(find "$BATS_TEST_DIRNAME"/../share/python-build -maxdepth 1 -
}
@test "one path via PYTHON_BUILD_DEFINITIONS" {
export PYTHON_BUILD_DEFINITIONS="${TMP}/definitions"
export PYTHON_BUILD_DEFINITIONS="${BATS_TEST_TMPDIR}/definitions"
mkdir -p "$PYTHON_BUILD_DEFINITIONS"
touch "${PYTHON_BUILD_DEFINITIONS}/2.7.8-test"
run python-build --definitions
@@ -37,11 +37,11 @@ NUM_DEFINITIONS="$(find "$BATS_TEST_DIRNAME"/../share/python-build -maxdepth 1 -
}
@test "multiple paths via PYTHON_BUILD_DEFINITIONS" {
export PYTHON_BUILD_DEFINITIONS="${TMP}/definitions:${TMP}/other"
mkdir -p "${TMP}/definitions"
touch "${TMP}/definitions/2.7.8-test"
mkdir -p "${TMP}/other"
touch "${TMP}/other/3.4.2-test"
export PYTHON_BUILD_DEFINITIONS="${BATS_TEST_TMPDIR}/definitions:${BATS_TEST_TMPDIR}/other"
mkdir -p "${BATS_TEST_TMPDIR}/definitions"
touch "${BATS_TEST_TMPDIR}/definitions/2.7.8-test"
mkdir -p "${BATS_TEST_TMPDIR}/other"
touch "${BATS_TEST_TMPDIR}/other/3.4.2-test"
run python-build --definitions
assert_success
assert_output_contains "2.7.8-test"
@@ -50,23 +50,23 @@ NUM_DEFINITIONS="$(find "$BATS_TEST_DIRNAME"/../share/python-build -maxdepth 1 -
}
@test "installing definition from PYTHON_BUILD_DEFINITIONS by priority" {
export PYTHON_BUILD_DEFINITIONS="${TMP}/definitions:${TMP}/other"
mkdir -p "${TMP}/definitions"
echo true > "${TMP}/definitions/2.7.8-test"
mkdir -p "${TMP}/other"
echo false > "${TMP}/other/2.7.8-test"
run python-build "2.7.8-test" "${TMP}/install"
export PYTHON_BUILD_DEFINITIONS="${BATS_TEST_TMPDIR}/definitions:${BATS_TEST_TMPDIR}/other"
mkdir -p "${BATS_TEST_TMPDIR}/definitions"
echo true > "${BATS_TEST_TMPDIR}/definitions/2.7.8-test"
mkdir -p "${BATS_TEST_TMPDIR}/other"
echo false > "${BATS_TEST_TMPDIR}/other/2.7.8-test"
run python-build "2.7.8-test" "${BATS_TEST_TMPDIR}/install"
assert_success ""
}
@test "installing nonexistent definition" {
run python-build "nonexistent" "${TMP}/install"
run python-build "nonexistent" "${BATS_TEST_TMPDIR}/install"
assert [ "$status" -eq 2 ]
assert_output "python-build: definition not found: nonexistent"
}
@test "sorting Python versions" {
export PYTHON_BUILD_ROOT="$TMP"
export PYTHON_BUILD_ROOT="$BATS_TEST_TMPDIR"
mkdir -p "${PYTHON_BUILD_ROOT}/share/python-build"
expected="2.7-dev
2.7
@@ -87,15 +87,15 @@ jython-2.5.4-rc1
jython-2.7-beta1
jython-2.7-beta2
jython-2.7-beta3"
for ver in "$expected"; do
while IFS=$'\n' read -r ver; do
touch "${PYTHON_BUILD_ROOT}/share/python-build/$ver"
done
done <<<"$expected"
run python-build --definitions
assert_success "$expected"
}
@test "removing duplicate Python versions" {
export PYTHON_BUILD_ROOT="$TMP"
export PYTHON_BUILD_ROOT="$BATS_TEST_TMPDIR"
export PYTHON_BUILD_DEFINITIONS="${PYTHON_BUILD_ROOT}/share/python-build"
mkdir -p "$PYTHON_BUILD_DEFINITIONS"
touch "${PYTHON_BUILD_DEFINITIONS}/2.7.8"

View File

@@ -1,11 +1,10 @@
#!/usr/bin/env bats
load test_helper
export PYTHON_BUILD_SKIP_MIRROR=1
export PYTHON_BUILD_CACHE_PATH=
setup() {
export PYTHON_BUILD_BUILD_PATH="${TMP}/source"
_setup() {
export PYTHON_BUILD_SKIP_MIRROR=1
export PYTHON_BUILD_CACHE_PATH=
export PYTHON_BUILD_BUILD_PATH="${BATS_TEST_TMPDIR}/source"
mkdir -p "${PYTHON_BUILD_BUILD_PATH}"
}
@@ -29,7 +28,7 @@ setup() {
Downloading package-1.0.0.tar.gz...
-> http://example.com/packages/package-1.0.0.tar.gz
Installing package-1.0.0...
Installed package-1.0.0 to ${TMP}/install
Installed package-1.0.0 to ${BATS_TEST_TMPDIR}/install
OUT
unstub aria2c
}
@@ -44,7 +43,7 @@ DEF
assert_output <<OUT
Cloning http://example.com/packages/package.git...
Installing package-dev...
Installed package-dev to ${TMP}/install
Installed package-dev to ${BATS_TEST_TMPDIR}/install
OUT
unstub git
}
@@ -62,7 +61,7 @@ DEF
assert_output <<OUT
Cloning http://example.com/packages/package.git...
Installing package-dev...
Installed package-dev to ${TMP}/install
Installed package-dev to ${BATS_TEST_TMPDIR}/install
OUT
unstub git
}

View File

@@ -2,9 +2,9 @@
load test_helper
setup() {
export PYENV_ROOT="${TMP}/pyenv"
export HOOK_PATH="${TMP}/i has hooks"
_setup() {
export PYENV_ROOT="${BATS_TEST_TMPDIR}/pyenv"
export HOOK_PATH="${BATS_TEST_TMPDIR}/i has hooks"
mkdir -p "$HOOK_PATH"
}
@@ -16,7 +16,7 @@ OUT
stub pyenv-hooks "install : echo '$HOOK_PATH'/install.bash"
stub pyenv-rehash "echo rehashed"
definition="${TMP}/3.6.2"
definition="${BATS_TEST_TMPDIR}/3.6.2"
stub pyenv-latest "echo $definition"
cat > "$definition" <<<"echo python-build"

View File

@@ -3,7 +3,7 @@
load test_helper
@test "installs python-build into PREFIX" {
cd "$TMP"
cd "$BATS_TEST_TMPDIR"
PREFIX="${PWD}/usr" run "${BATS_TEST_DIRNAME}/../install.sh"
assert_success ""
@@ -18,7 +18,7 @@ load test_helper
}
@test "build definitions don't have the executable bit" {
cd "$TMP"
cd "$BATS_TEST_TMPDIR"
PREFIX="${PWD}/usr" run "${BATS_TEST_DIRNAME}/../install.sh"
assert_success ""
@@ -30,7 +30,7 @@ OUT
}
@test "overwrites old installation" {
cd "$TMP"
cd "$BATS_TEST_TMPDIR"
mkdir -p bin share/python-build
touch bin/python-build
touch share/python-build/2.7.2
@@ -44,7 +44,7 @@ OUT
}
@test "unrelated files are untouched" {
cd "$TMP"
cd "$BATS_TEST_TMPDIR"
mkdir -p bin share/bananas
chmod g-w bin
touch bin/bananas

View File

@@ -1,10 +1,12 @@
#!/usr/bin/env bats
load test_helper
export PYTHON_BUILD_SKIP_MIRROR=
export PYTHON_BUILD_CACHE_PATH=
export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com
_setup() {
export PYTHON_BUILD_SKIP_MIRROR=
export PYTHON_BUILD_CACHE_PATH=
export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com
}
@test "package URL without checksum bypasses mirror" {
stub shasum true

View File

@@ -1,9 +1,9 @@
#!/usr/bin/env bats
load test_helper
export PYENV_ROOT="${TMP}/pyenv"
setup() {
_setup() {
export PYENV_ROOT="${BATS_TEST_TMPDIR}/pyenv"
stub pyenv-hooks 'install : true'
stub pyenv-rehash true
}
@@ -39,8 +39,8 @@ stub_python_build() {
run pyenv-install 3.4.1 3.4.2
assert_success
assert_output <<OUT
python-build 3.4.1 ${TMP}/pyenv/versions/3.4.1
python-build 3.4.2 ${TMP}/pyenv/versions/3.4.2
python-build 3.4.1 ${BATS_TEST_TMPDIR}/pyenv/versions/3.4.1
python-build 3.4.2 ${BATS_TEST_TMPDIR}/pyenv/versions/3.4.2
OUT
unstub python-build
@@ -54,7 +54,7 @@ OUT
run pyenv-install 3.4.1 3.4.2
assert_failure
assert_output <<OUT
fail: python-build 3.4.1 ${TMP}/pyenv/versions/3.4.1
fail: python-build 3.4.1 ${BATS_TEST_TMPDIR}/pyenv/versions/3.4.1
OUT
unstub python-build
@@ -293,10 +293,11 @@ OUT
}
@test "invalid arguments for pyenv-uninstall" {
bats_require_minimum_version 1.5.0
mkdir -p "${PYENV_ROOT}/versions/3.10.3"
mkdir -p "${PYENV_ROOT}/versions/3.10.4"
run pyenv-uninstall -f 3.10.3 --invalid-option 3.10.4
run -127 pyenv-uninstall -f 3.10.3 --invalid-option 3.10.4
assert_failure
assert [ -d "${PYENV_ROOT}/versions/3.10.3" ]

View File

@@ -1,15 +1,14 @@
#!/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 PYTHON_BUILD_HTTP_CLIENT="curl"
export TMP_FIXTURES="$TMP/fixtures"
setup() {
_setup() {
export PYTHON_BUILD_CACHE_PATH="$BATS_TEST_TMPDIR/cache"
export MAKE=make
export MAKE_OPTS="-j 2"
export CC=cc
export PYTHON_BUILD_HTTP_CLIENT="curl"
export TMP_FIXTURES="$BATS_TEST_TMPDIR/fixtures"
mkdir -p "$INSTALL_ROOT"
stub md5 false
stub curl false
@@ -100,7 +99,7 @@ run_inline_definition_with_name() {
shift 1
;;
esac
local definition="${TMP}/${definition_name}"
local definition="${BATS_TEST_TMPDIR}/${definition_name}"
cat > "$definition"
run python-build "$definition" "${1:-$INSTALL_ROOT}"
}
@@ -118,12 +117,12 @@ run_inline_definition_with_name() {
stub uname '-s : echo Linux'
stub uname '-s : echo Linux'
TMPDIR="$TMP" install_tmp_fixture definitions/vanilla-python < /dev/null
TMPDIR="$BATS_TEST_TMPDIR" install_tmp_fixture definitions/vanilla-python < /dev/null
assert_success
assert_build_log <<OUT
patch -p0 --force -i $TMP/python-patch.XXX
Python-3.6.2: CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib"
patch -p0 --force -i $BATS_TEST_TMPDIR/python-patch.XXX
Python-3.6.2: CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib"
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -146,14 +145,14 @@ OUT
stub uname '-s : echo Linux'
TMPDIR="$TMP" install_tmp_fixture definitions/vanilla-python < /dev/null
TMPDIR="$BATS_TEST_TMPDIR" install_tmp_fixture definitions/vanilla-python < /dev/null
assert_success
assert_build_log <<OUT
patch: bar
patch: baz
patch: foo
Python-3.6.2: CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib"
Python-3.6.2: CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib"
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make install
@@ -173,11 +172,11 @@ OUT
stub uname '-s : echo Darwin'
PYTHON_MAKE_INSTALL_TARGET="altinstall" TMPDIR="$TMP" install_tmp_fixture definitions/vanilla-python < /dev/null
PYTHON_MAKE_INSTALL_TARGET="altinstall" TMPDIR="$BATS_TEST_TMPDIR" install_tmp_fixture definitions/vanilla-python < /dev/null
assert_success
assert_build_log <<OUT
Python-3.6.2: CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib"
Python-3.6.2: CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib"
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib
make -j 2
make altinstall
@@ -194,7 +193,7 @@ echo "python \$@" >> "${INSTALL_ROOT}/build.log"
OUT
chmod +x "${INSTALL_ROOT}/bin/python"
PYTHON_MAKE_INSTALL_TARGET="" TMPDIR="$TMP" run_inline_definition <<OUT
PYTHON_MAKE_INSTALL_TARGET="" TMPDIR="$BATS_TEST_TMPDIR" run_inline_definition <<OUT
build_package_ensurepip
OUT
assert_success
@@ -212,7 +211,7 @@ echo "python \$@" >> "${INSTALL_ROOT}/build.log"
OUT
chmod +x "${INSTALL_ROOT}/bin/python"
PYTHON_MAKE_INSTALL_TARGET="altinstall" TMPDIR="$TMP" run_inline_definition <<OUT
PYTHON_MAKE_INSTALL_TARGET="altinstall" TMPDIR="$BATS_TEST_TMPDIR" run_inline_definition <<OUT
build_package_ensurepip
OUT
assert_success
@@ -233,7 +232,7 @@ OUT
touch "${INSTALL_ROOT}/bin/python3.4-config"
chmod +x "${INSTALL_ROOT}/bin/python3.4-config"
TMPDIR="$TMP" run_inline_definition <<OUT
TMPDIR="$BATS_TEST_TMPDIR" run_inline_definition <<OUT
verify_python python3.4
OUT
assert_success
@@ -256,7 +255,7 @@ OUT
stub uname '-s : echo Darwin'
stub sw_vers '-productVersion : echo 10.10'
PYTHON_CONFIGURE_OPTS="--enable-framework" TMPDIR="$TMP" run_inline_definition <<OUT
PYTHON_CONFIGURE_OPTS="--enable-framework" TMPDIR="$BATS_TEST_TMPDIR" run_inline_definition <<OUT
echo "PYTHON_CONFIGURE_OPTS_ARRAY=(\${PYTHON_CONFIGURE_OPTS_ARRAY[@]})"
echo "PYTHON_CONFIGURE_OPTS=(\${PYTHON_CONFIGURE_OPTS})"
echo "CONFIGURE_OPTS=(\${CONFIGURE_OPTS})"
@@ -264,7 +263,7 @@ verify_python python3.4
OUT
assert_success
assert_output <<EOS
PYTHON_CONFIGURE_OPTS_ARRAY=(--libdir=${TMP}/install/lib --enable-framework=${TMP}/install/Library/Frameworks)
PYTHON_CONFIGURE_OPTS_ARRAY=(--libdir=${BATS_TEST_TMPDIR}/install/lib --enable-framework=${BATS_TEST_TMPDIR}/install/Library/Frameworks)
PYTHON_CONFIGURE_OPTS=()
CONFIGURE_OPTS=()
EOS
@@ -279,14 +278,14 @@ EOS
stub sw_vers '-productVersion : echo 10.10'
stub arch "echo x86_64"
PYTHON_CONFIGURE_OPTS="--enable-universalsdk" TMPDIR="$TMP" run_inline_definition <<OUT
PYTHON_CONFIGURE_OPTS="--enable-universalsdk" TMPDIR="$BATS_TEST_TMPDIR" run_inline_definition <<OUT
echo "PYTHON_CONFIGURE_OPTS_ARRAY=(\${PYTHON_CONFIGURE_OPTS_ARRAY[@]})"
echo "PYTHON_CONFIGURE_OPTS=(\${PYTHON_CONFIGURE_OPTS})"
echo "CONFIGURE_OPTS=(\${CONFIGURE_OPTS})"
OUT
assert_success
assert_output <<EOS
PYTHON_CONFIGURE_OPTS_ARRAY=(--enable-shared --libdir=${TMP}/install/lib --enable-universalsdk=/)
PYTHON_CONFIGURE_OPTS_ARRAY=(--enable-shared --libdir=${BATS_TEST_TMPDIR}/install/lib --enable-universalsdk=/)
PYTHON_CONFIGURE_OPTS=()
CONFIGURE_OPTS=()
EOS
@@ -298,14 +297,14 @@ EOS
stub sw_vers '-productVersion : echo 11.7'
stub arch "echo arm64"
PYTHON_CONFIGURE_OPTS="--enable-universalsdk" TMPDIR="$TMP" run_inline_definition <<OUT
PYTHON_CONFIGURE_OPTS="--enable-universalsdk" TMPDIR="$BATS_TEST_TMPDIR" run_inline_definition <<OUT
echo "PYTHON_CONFIGURE_OPTS_ARRAY=(\${PYTHON_CONFIGURE_OPTS_ARRAY[@]})"
echo "PYTHON_CONFIGURE_OPTS=(\${PYTHON_CONFIGURE_OPTS})"
echo "CONFIGURE_OPTS=(\${CONFIGURE_OPTS})"
OUT
assert_success
assert_output <<EOS
PYTHON_CONFIGURE_OPTS_ARRAY=(--enable-shared --libdir=${TMP}/install/lib --enable-universalsdk=/ --with-universal-archs=universal2)
PYTHON_CONFIGURE_OPTS_ARRAY=(--enable-shared --libdir=${BATS_TEST_TMPDIR}/install/lib --enable-universalsdk=/ --with-universal-archs=universal2)
PYTHON_CONFIGURE_OPTS=()
CONFIGURE_OPTS=()
EOS
@@ -316,12 +315,12 @@ EOS
stub uname '-s : echo Darwin'
stub sw_vers '-productVersion : echo 11.7'
PYTHON_CONFIGURE_OPTS="--enable-universalsdk --with-universal-archs=foo" TMPDIR="$TMP" run_inline_definition <<OUT
PYTHON_CONFIGURE_OPTS="--enable-universalsdk --with-universal-archs=foo" TMPDIR="$BATS_TEST_TMPDIR" run_inline_definition <<OUT
echo "PYTHON_CONFIGURE_OPTS_ARRAY=(\${PYTHON_CONFIGURE_OPTS_ARRAY[@]})"
OUT
assert_success
assert_output <<EOS
PYTHON_CONFIGURE_OPTS_ARRAY=(--enable-shared --libdir=${TMP}/install/lib --enable-universalsdk=/)
PYTHON_CONFIGURE_OPTS_ARRAY=(--enable-shared --libdir=${BATS_TEST_TMPDIR}/install/lib --enable-universalsdk=/)
EOS
}
@@ -334,11 +333,11 @@ EOS
" : echo \"$MAKE \$@\" >> build.log" \
" : echo \"$MAKE \$@\" >> build.log && cat build.log >> '$INSTALL_ROOT/build.log'"
PYTHON_CONFIGURE_OPTS="--enable-unicode=ucs2" TMPDIR="$TMP" install_tmp_fixture definitions/vanilla-python < /dev/null
PYTHON_CONFIGURE_OPTS="--enable-unicode=ucs2" TMPDIR="$BATS_TEST_TMPDIR" install_tmp_fixture definitions/vanilla-python < /dev/null
assert_success
assert_build_log <<OUT
Python-3.6.2: CPPFLAGS="-I${TMP}/install/include" LDFLAGS="-L${TMP}/install/lib -Wl,-rpath,${TMP}/install/lib"
Python-3.6.2: CPPFLAGS="-I${BATS_TEST_TMPDIR}/install/include" LDFLAGS="-L${BATS_TEST_TMPDIR}/install/lib -Wl,-rpath,${BATS_TEST_TMPDIR}/install/lib"
Python-3.6.2: --prefix=$INSTALL_ROOT --enable-shared --libdir=$INSTALL_ROOT/lib --enable-unicode=ucs2
make -j 2
make install
@@ -353,7 +352,7 @@ OUT
stub uname '-s : echo Darwin'
stub sw_vers '-productVersion : echo 10.10'
TMPDIR="$TMP" run_inline_definition <<OUT
TMPDIR="$BATS_TEST_TMPDIR" run_inline_definition <<OUT
echo "\${MACOSX_DEPLOYMENT_TARGET}"
OUT
assert_success
@@ -366,7 +365,7 @@ OUT
stub uname '-s : echo Darwin'
MACOSX_DEPLOYMENT_TARGET="10.4" TMPDIR="$TMP" run_inline_definition <<OUT
MACOSX_DEPLOYMENT_TARGET="10.4" TMPDIR="$BATS_TEST_TMPDIR" run_inline_definition <<OUT
echo "\${MACOSX_DEPLOYMENT_TARGET}"
OUT
assert_success

View File

@@ -4,7 +4,6 @@ set -e
status=0
program="${0##*/}"
PROGRAM="$(echo "$program" | tr a-z- A-Z_)"
[ -n "$TMPDIR" ] || TMPDIR="/tmp"
_STUB_PLAN="${PROGRAM}_STUB_PLAN"
_STUB_RUN="${PROGRAM}_STUB_RUN"
@@ -13,11 +12,11 @@ _STUB_RESULT="${PROGRAM}_STUB_RESULT"
_STUB_END="${PROGRAM}_STUB_END"
_STUB_LOG="${PROGRAM}_STUB_LOG"
[ -n "${!_STUB_LOG}" ] || eval "${_STUB_LOG}"="${TMPDIR}/${program}-stub-log"
[ -n "${!_STUB_LOG}" ] || eval "${_STUB_LOG}"="${BATS_TEST_TMPDIR}/${program}-stub-log"
if test -z "${!_STUB_END}"; then echo "$program" "$@" >>"${!_STUB_LOG}"; fi
[ -e "${!_STUB_PLAN}" ] || exit 1
[ -n "${!_STUB_RUN}" ] || eval "${_STUB_RUN}"="${TMPDIR}/${program}-stub-run"
[ -n "${!_STUB_RUN}" ] || eval "${_STUB_RUN}"="${BATS_TEST_TMPDIR}/${program}-stub-run"
# Initialize or load the stub run information.

View File

@@ -1,21 +1,18 @@
export TMP="$BATS_TEST_DIRNAME/tmp"
export PYTHON_BUILD_CURL_OPTS=
export PYTHON_BUILD_HTTP_CLIENT="curl"
setup() {
export PYTHON_BUILD_CURL_OPTS=
export PYTHON_BUILD_HTTP_CLIENT="curl"
if [ "$FIXTURE_ROOT" != "$BATS_TEST_DIRNAME/fixtures" ]; then
export FIXTURE_ROOT="$BATS_TEST_DIRNAME/fixtures"
export INSTALL_ROOT="$TMP/install"
PATH="/usr/bin:/bin:/usr/sbin:/sbin"
if [ "FreeBSD" = "$(uname -s)" ]; then
PATH="/usr/local/bin:$PATH"
fi
PATH="$BATS_TEST_DIRNAME/../bin:$PATH"
PATH="$TMP/bin:$PATH"
export FIXTURE_ROOT="${BATS_TEST_DIRNAME}/fixtures"
export INSTALL_ROOT="${BATS_TEST_TMPDIR}/install"
PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
PATH="${BATS_TEST_DIRNAME}/../bin:$PATH"
PATH="${BATS_TEST_TMPDIR}/bin:$PATH"
export PATH
fi
teardown() {
rm -fr "${TMP:?}"/*
# If test specific setup exist, run it
if [[ $(type -t _setup) == function ]];then
_setup
fi
}
stub() {
@@ -23,22 +20,22 @@ stub() {
local prefix="$(echo "$program" | tr a-z- A-Z_)"
shift
export "${prefix}_STUB_PLAN"="${TMP}/${program}-stub-plan"
export "${prefix}_STUB_RUN"="${TMP}/${program}-stub-run"
export "${prefix}_STUB_LOG"="${TMP}/${program}-stub-log"
export "${prefix}_STUB_PLAN"="${BATS_TEST_TMPDIR}/${program}-stub-plan"
export "${prefix}_STUB_RUN"="${BATS_TEST_TMPDIR}/${program}-stub-run"
export "${prefix}_STUB_LOG"="${BATS_TEST_TMPDIR}/${program}-stub-log"
export "${prefix}_STUB_END"=
mkdir -p "${TMP}/bin"
ln -sf "${BATS_TEST_DIRNAME}/stubs/stub" "${TMP}/bin/${program}"
mkdir -p "${BATS_TEST_TMPDIR}/bin"
cp "${BATS_TEST_DIRNAME}/stubs/stub" "${BATS_TEST_TMPDIR}/bin/${program}"
touch "${TMP}/${program}-stub-plan"
for arg in "$@"; do printf "%s\n" "$arg" >> "${TMP}/${program}-stub-plan"; done
touch "${BATS_TEST_TMPDIR}/${program}-stub-plan"
for arg in "$@"; do printf "%s\n" "$arg" >> "${BATS_TEST_TMPDIR}/${program}-stub-plan"; done
}
unstub() {
local program="$1"
local prefix="$(echo "$program" | tr a-z- A-Z_)"
local path="${TMP}/bin/${program}"
local path="${BATS_TEST_TMPDIR}/bin/${program}"
export "${prefix}_STUB_END"=1
@@ -46,12 +43,12 @@ unstub() {
"$path" || STATUS="$?"
rm -f "$path"
rm -f "${TMP}/${program}-stub-plan" "${TMP}/${program}-stub-run"
rm -f "${BATS_TEST_TMPDIR}/${program}-stub-plan" "${BATS_TEST_TMPDIR}/${program}-stub-run"
return "$STATUS"
}
run_inline_definition() {
local definition="${TMP}/build-definition"
local definition="${BATS_TEST_TMPDIR}/build-definition"
cat > "$definition"
run python-build "$definition" "${1:-$INSTALL_ROOT}"
}
@@ -87,7 +84,7 @@ flunk() {
{ if [ "$#" -eq 0 ]; then cat -
else echo "$@"
fi
} | sed "s:${TMP}:\${TMP}:g" >&2
} | sed "s:${BATS_TEST_TMPDIR}:\${BATS_TEST_TMPDIR}:g" >&2
return 1
}

View File

@@ -2,8 +2,8 @@
load test_helper
bats_bin="${BATS_TEST_DIRNAME}/../bin/python-build"
static_version="$(grep VERSION "$bats_bin" | head -n1 | cut -d'"' -f 2)"
python_build_bin="${BATS_TEST_DIRNAME}/../bin/python-build"
static_version="$(grep VERSION "$python_build_bin" | head -n1 | cut -d'"' -f 2)"
@test "python-build static version" {
stub git 'echo "ASPLODE" >&2; exit 1'

View File

@@ -2,9 +2,8 @@
load test_helper
export GIT_DIR="${PYENV_TEST_DIR}/.git"
setup() {
_setup() {
export GIT_DIR="${PYENV_TEST_DIR}/.git"
mkdir -p "$HOME"
git config --global user.name "Tester"
git config --global user.email "tester@test.local"

25
test/Dockerfile Normal file
View File

@@ -0,0 +1,25 @@
ARG BASH
FROM alpine/git:v2.30.0 as bats
ARG BATS_VERSION
RUN git clone https://github.com/bats-core/bats-core.git /root/bats-core \
&& cd /root/bats-core \
&& git checkout "${BATS_VERSION}"
FROM bash:$BASH
# Gnu tools
RUN if [[ "${GNU:-}" == True ]];then \
apk add sed coreutils findutils \
;fi
# Bats
RUN apk add --update parallel ncurses git \
&& mkdir -p ~/.parallel \
&& touch ~/.parallel/will-cite
COPY --from=bats /root/bats-core /root/bats-core
RUN /root/bats-core/install.sh "/usr/local"
# Clean
RUN rm -rf /var/cache/apk/*
# Setup
RUN echo 'source /etc/profile' >> ~/.bashrc
WORKDIR /code/
CMD ["bash"]

76
test/README.md Normal file
View File

@@ -0,0 +1,76 @@
# TEST
---
## Running test suite
Test suite could be launch with `make` by providing the right target depending what you want to achieve.
Under the hood, `pyenv` test suites use `bats` as a test framework and are run on the host or docker depending of the target provided to make.
### Targets
- `test`
- Run the whole test suite on the local host
- `test-docker`
- Run the whole test suite on docker
- Some volumes are used in read-only mode
- `test-unit`
- Run the unit test
- `test-plugin`
- Run the plugin test
- `test-unit-docker-[BASH_VERSION]`
- Run the unit test under **official** bash docker container (alpine/busybox) with the specified bash version if present is in the `Makefile`
- Some volumes are used in read-only mode
- `test-unit-docker-gnu-[BASH_VERSION]`
- Run the unit test under **official** bash docker container (alpine/busybox), completed by **GNU Tools**, with the specified bash version if present is in the `Makefile`
- Some volumes are used in read-only mode
- `test-plugin-docker-[BASH_VERSION]`
- Run the plugin test under **official** bash docker container (alpine/busybox), completed by **GNU Tools**, with the specified bash version if present is in the `Makefile`
- Some volumes are used in read-only mode
- `test-plugin-docker-gnu-[BASH_VERSION]`
- Run the plugin test under **official** bash docker container (alpine/busybox), completed by **GNU Tools**, with the specified bash version if present is in the `Makefile`
- Some volumes are used in read-only mode
## Targeting specific test / test file
By setting some environment variables, it is possible to filtering which test and/or test file who will be tested with bats
- `BATS_FILE_FILTER`
- Run test only with the specified file
- `BATS_TEST_FILTER`
- Run test only who corresponding to the filter provided
### Examples
```bash
$ BATS_TEST_FILTER=".*installed.*" BATS_FILE_FILTER="build.bats" make test-plugin-docker-gnu-3.2.57
build.bats
✓ yaml is installed for python
✓ homebrew is used in Linux if Pyenv is installed with Homebrew
✓ homebrew is not used in Linux if Pyenv is not installed with Homebrew
3 tests, 0 failures
$ BATS_TEST_FILTER=".*installed.*" BATS_FILE_FILTER="build.bats" make test-plugin
build.bats
✓ yaml is installed for python
✓ homebrew is used in Linux if Pyenv is installed with Homebrew
✓ homebrew is not used in Linux if Pyenv is not installed with Homebrew
3 tests, 0 failures
```
## Writing test
To be reproducible, each test use/should use its own `TMPDIR` .
It's achieved by using the environment variable `BATS_TEST_TMPDIR` provided by bats that is automatically deleted at the end of each test. More info [here](https://bats-core.readthedocs.io/en/stable/writing-tests.html#special-variables)
Another variable who could be used to source some file who need to be tested is `BATS_TEST_DIRNAME` who point to the directory in which the bats test file is located.

View File

@@ -8,15 +8,16 @@ create_executable() {
bin="${PYENV_ROOT}/versions/${PYENV_VERSION}/bin"
mkdir -p "$bin"
{ if [ $# -eq 0 ]; then cat -
else echo "$@"
else printf '%s\n' "$@"
fi
} | sed -Ee '1s/^ +//' > "${bin}/$name"
chmod +x "${bin}/$name"
}
@test "fails with invalid version" {
bats_require_minimum_version 1.5.0
export PYENV_VERSION="3.4"
run pyenv-exec nonexistent
run -127 pyenv-exec nonexistent
assert_failure <<EOF
pyenv: version \`3.4' is not installed (set by PYENV_VERSION environment variable)
pyenv: nonexistent: command not found
@@ -24,10 +25,11 @@ EOF
}
@test "fails with invalid version set from file" {
bats_require_minimum_version 1.5.0
mkdir -p "$PYENV_TEST_DIR"
cd "$PYENV_TEST_DIR"
echo 2.7 > .python-version
run pyenv-exec nonexistent
run -127 pyenv-exec nonexistent
assert_failure <<EOF
pyenv: version \`2.7' is not installed (set by $PWD/.python-version)
pyenv: nonexistent: command not found
@@ -85,18 +87,25 @@ OUT
}
@test "sys.executable with system version (#98)" {
system_python="$(python3 -c 'import sys; print(sys.executable)')"
export PATH="${PYENV_ROOT}/versions/bin:${PATH}"
create_executable "python3" <<SH
#!$BASH
echo system
SH
system_python="$(python3)"
assert_equal "${system_python}" "system"
PYENV_VERSION="custom"
create_executable "python3" ""
unset PYENV_VERSION
export PYENV_VERSION="custom"
create_executable "python3" "#!/bin/sh" "echo custom"
pyenv-rehash
run pyenv-exec python3 -c 'import sys; print(sys.executable)'
assert_success "${system_python}"
custom_python="$(pyenv-exec python3)"
assert_equal "${custom_python}" "custom"
}
@test 'PATH is not modified with system Python' {
export PATH="${PYENV_TEST_DIR}:${PATH}"
# Create a wrapper executable that verifies PATH.
PYENV_VERSION="custom"
create_executable "python3" '[[ "$PATH" == "${PYENV_TEST_DIR}/root/versions/custom/bin:"* ]] || { echo "unexpected:$PATH"; exit 2;}'
@@ -104,7 +113,13 @@ OUT
pyenv-rehash
# Path is not modified with system Python.
run pyenv-exec python3 -c 'import os; print(os.getenv("PATH"))'
cat > "${PYENV_TEST_DIR}/python3" <<SH
#!$BASH
echo \$PATH
SH
chmod +x "${PYENV_TEST_DIR}/python3"
pyenv-rehash
run pyenv-exec python3
assert_success "$PATH"
# Path is modified with custom Python.
@@ -116,6 +131,6 @@ OUT
assert_success
# Path is not modified with system:custom Python.
PYENV_VERSION=system:custom run pyenv-exec python3 -c 'import os; print(os.getenv("PATH"))'
PYENV_VERSION=system:custom run pyenv-exec python3
assert_success "$PATH"
}

View File

@@ -2,7 +2,7 @@
load test_helper
setup() {
_setup() {
export PATH="${PYENV_TEST_DIR}/bin:$PATH"
}

View File

@@ -2,7 +2,7 @@
load test_helper
setup() {
_setup() {
export PATH="${PYENV_TEST_DIR}/bin:$PATH"
}

View File

@@ -2,7 +2,7 @@
load test_helper
setup() {
_setup() {
mkdir -p "${PYENV_TEST_DIR}/myproject"
cd "${PYENV_TEST_DIR}/myproject"
}

View File

@@ -20,7 +20,7 @@ load test_helper
mkdir -p "${PYENV_TEST_DIR}/bin"
touch "${PYENV_TEST_DIR}/bin/python"
chmod +x "${PYENV_TEST_DIR}/bin/python"
PYENV_VERSION="system" run pyenv-prefix
PATH="${PYENV_TEST_DIR}/libexec:$PATH" PYENV_VERSION="system" run pyenv-prefix
assert_success "$PYENV_TEST_DIR"
}
@@ -34,15 +34,15 @@ load test_helper
}
@test "prefix for system in /" {
mkdir -p "${BATS_TEST_DIRNAME}/libexec"
cat >"${BATS_TEST_DIRNAME}/libexec/pyenv-which" <<OUT
mkdir -p "${PYENV_TEST_DIR}/libexec"
cat >"${PYENV_TEST_DIR}/libexec/pyenv-which" <<OUT
#!/bin/sh
echo /bin/python
OUT
chmod +x "${BATS_TEST_DIRNAME}/libexec/pyenv-which"
PYENV_VERSION="system" run pyenv-prefix
chmod +x "${PYENV_TEST_DIR}/libexec/pyenv-which"
PATH="${PYENV_TEST_DIR}/libexec:$PATH" PYENV_VERSION="system" run pyenv-prefix
assert_success "/"
rm -f "${BATS_TEST_DIRNAME}/libexec/pyenv-which"
rm -f "${PYENV_TEST_DIR}/libexec/pyenv-which"
}
@test "prefix for invalid system" {

View File

@@ -32,14 +32,14 @@ load test_helper
}
@test "inherited PYENV_DIR" {
dir="${BATS_TMPDIR}/myproject"
dir="${BATS_TEST_TMPDIR}/myproject"
mkdir -p "$dir"
PYENV_DIR="$dir" run pyenv echo PYENV_DIR
assert_output "$dir"
}
@test "invalid PYENV_DIR" {
dir="${BATS_TMPDIR}/does-not-exist"
dir="${BATS_TEST_TMPDIR}/does-not-exist"
assert [ ! -d "$dir" ]
PYENV_DIR="$dir" run pyenv echo PYENV_DIR
assert_failure

View File

@@ -6,4 +6,4 @@ if [ -n "$PYENV_NATIVE_EXT" ]; then
make -C src
fi
exec bats ${CI:+--tap} test
exec bats ${CI:+--tap} ${BATS_TEST_FILTER:+--filter "${BATS_TEST_FILTER}"} test/${BATS_FILE_FILTER}

View File

@@ -1,20 +1,23 @@
unset PYENV_VERSION
unset PYENV_DIR
# guard against executing this block twice due to bats internals
if [ -z "$PYENV_TEST_DIR" ]; then
PYENV_TEST_DIR="${BATS_TMPDIR}/pyenv"
export PYENV_TEST_DIR="$(mktemp -d "${PYENV_TEST_DIR}.XXX" 2>/dev/null || echo "$PYENV_TEST_DIR")"
if enable -f "${BATS_TEST_DIRNAME}"/../libexec/pyenv-realpath.dylib realpath 2>/dev/null; then
export PYENV_TEST_DIR="$(realpath "$PYENV_TEST_DIR")"
else
setup() {
if ! enable -f "${BATS_TEST_DIRNAME}"/../libexec/pyenv-realpath.dylib realpath 2>/dev/null; then
if [ -n "$PYENV_NATIVE_EXT" ]; then
echo "pyenv: failed to load \`realpath' builtin" >&2
exit 1
fi
fi
local bats_test_tmpdir="$(realpath "${BATS_TEST_TMPDIR}")"
if [ -z "${bats_test_tmpdir}" ];then
# Use readlink if running in a container instead of realpath lib
bats_test_tmpdir="$(readlink -f "${BATS_TEST_TMPDIR}")"
fi
# update BATS_TEST_TMPDIR discover by realpath/readlink to avoid "//"
export BATS_TEST_TMPDIR="${bats_test_tmpdir}"
export PYENV_TEST_DIR="${BATS_TEST_TMPDIR}/pyenv"
export PYENV_ROOT="${PYENV_TEST_DIR}/root"
export HOME="${PYENV_TEST_DIR}/home"
export PYENV_HOOK_PATH="${PYENV_ROOT}/pyenv.d"
@@ -28,10 +31,11 @@ if [ -z "$PYENV_TEST_DIR" ]; then
for xdg_var in `env 2>/dev/null | grep ^XDG_ | cut -d= -f1`; do unset "$xdg_var"; done
unset xdg_var
fi
teardown() {
rm -rf "$PYENV_TEST_DIR"
# If test specific setup exist, run it
if [[ $(type -t _setup) == function ]];then
_setup
fi
}
flunk() {

View File

@@ -2,7 +2,7 @@
load test_helper
setup() {
_setup() {
mkdir -p "${PYENV_TEST_DIR}/myproject"
cd "${PYENV_TEST_DIR}/myproject"
}

View File

@@ -2,8 +2,8 @@
load test_helper
setup() {
mkdir -p "$PYENV_TEST_DIR"
_setup() {
mkdir -p "${PYENV_TEST_DIR}"
cd "$PYENV_TEST_DIR"
}

View File

@@ -2,8 +2,8 @@
load test_helper
setup() {
mkdir -p "$PYENV_TEST_DIR"
_setup() {
mkdir -p "${PYENV_TEST_DIR}"
cd "$PYENV_TEST_DIR"
}

View File

@@ -6,8 +6,8 @@ create_version() {
mkdir -p "${PYENV_ROOT}/versions/$1"
}
setup() {
mkdir -p "$PYENV_TEST_DIR"
_setup() {
mkdir -p "${PYENV_TEST_DIR}"
cd "$PYENV_TEST_DIR"
}

View File

@@ -2,8 +2,8 @@
load test_helper
setup() {
mkdir -p "$PYENV_TEST_DIR"
_setup() {
mkdir -p "${PYENV_TEST_DIR}"
cd "$PYENV_TEST_DIR"
}

View File

@@ -6,8 +6,8 @@ create_version() {
mkdir -p "${PYENV_ROOT}/versions/$1"
}
setup() {
mkdir -p "$PYENV_TEST_DIR"
_setup() {
mkdir -p "${PYENV_ROOT}"
cd "$PYENV_TEST_DIR"
}
@@ -78,4 +78,4 @@ OUT
assert_output <<OUT
3.3.3
OUT
}
}

View File

@@ -11,7 +11,7 @@ create_alias() {
ln -s "$2" "${PYENV_ROOT}/versions/$1"
}
setup() {
_setup() {
mkdir -p "$PYENV_TEST_DIR"
cd "$PYENV_TEST_DIR"
}
@@ -238,6 +238,7 @@ OUT
}
@test "non-bare output shows symlink contents" {
stub_system_python
create_version "1.9.0"
create_alias "link" "1.9.0"

View File

@@ -60,17 +60,19 @@ create_executable() {
}
@test "doesn't include current directory in PATH search" {
bats_require_minimum_version 1.5.0
mkdir -p "$PYENV_TEST_DIR"
cd "$PYENV_TEST_DIR"
touch kill-all-humans
chmod +x kill-all-humans
PATH="$(path_without "kill-all-humans")" PYENV_VERSION=system run pyenv-which kill-all-humans
PATH="$(path_without "kill-all-humans")" PYENV_VERSION=system run -127 pyenv-which kill-all-humans
assert_failure "pyenv: kill-all-humans: command not found"
}
@test "version not installed" {
bats_require_minimum_version 1.5.0
create_executable "3.4" "py.test"
PYENV_VERSION=3.3 run pyenv-which py.test
PYENV_VERSION=3.3 run -127 pyenv-which py.test
assert_failure <<OUT
pyenv: version \`3.3' is not installed (set by PYENV_VERSION environment variable)
pyenv: py.test: command not found
@@ -84,8 +86,9 @@ OUT
}
@test "versions not installed" {
bats_require_minimum_version 1.5.0
create_executable "3.4" "py.test"
PYENV_VERSION=2.7:3.3 run pyenv-which py.test
PYENV_VERSION=2.7:3.3 run -127 pyenv-which py.test
assert_failure <<OUT
pyenv: version \`2.7' is not installed (set by PYENV_VERSION environment variable)
pyenv: version \`3.3' is not installed (set by PYENV_VERSION environment variable)
@@ -100,22 +103,25 @@ OUT
}
@test "no executable found" {
bats_require_minimum_version 1.5.0
create_executable "2.7" "py.test"
PYENV_VERSION=2.7 run pyenv-which fab
PYENV_VERSION=2.7 run -127 pyenv-which fab
assert_failure "pyenv: fab: command not found"
}
@test "no executable found for system version" {
PATH="$(path_without "rake")" PYENV_VERSION=system run pyenv-which rake
bats_require_minimum_version 1.5.0
PATH="$(path_without "rake")" PYENV_VERSION=system run -127 pyenv-which rake
assert_failure "pyenv: rake: command not found"
}
@test "executable found in other versions" {
bats_require_minimum_version 1.5.0
create_executable "2.7" "python"
create_executable "3.3" "py.test"
create_executable "3.4" "py.test"
PYENV_VERSION=2.7 run pyenv-which py.test
PYENV_VERSION=2.7 run -127 pyenv-which py.test
assert_failure
assert_output <<OUT
pyenv: py.test: command not found
@@ -188,11 +194,12 @@ exit
}
@test "skip advice supresses error messages" {
bats_require_minimum_version 1.5.0
create_executable "2.7" "python"
create_executable "3.3" "py.test"
create_executable "3.4" "py.test"
PYENV_VERSION=2.7 run pyenv-which py.test --skip-advice
PYENV_VERSION=2.7 run -127 pyenv-which py.test --skip-advice
assert_failure
assert_output <<OUT
pyenv: py.test: command not found