[prev in list] [next in list] [prev in thread] [next in thread]
List: gentoo-dev
Subject: [gentoo-dev] A unit-testing prototype
From: Donnie Berkholz <dberkholz () gentoo ! org>
Date: 2008-05-26 9:47:10
Message-ID: 20080526094710.GB11722 () comet
[Download RAW message or body]
Hi everyone,
A while back, vapier added some tests for the toolchain-funcs eclass to
/usr/portage/eclass/tests/. I really like the idea, and I recently
discovered an xUnit-style unit-testing framework for shell scripts
called ShUnit2. I played with it a little and made a couple of
prototypes. Take a look and see what you think.
To get started:
layman -f -o http://gechi-overlay.sf.net/layman.xml -a gechi
emerge shunit2
sed -i -e "/^__SHUNIT_SHELL_FLAGS/s:u::g" /usr/share/shunit2/shunit2
Download the attached files to /usr/portage/eclass/tests, make 'em
executable and run 'em. The output looks something like this:
donnie@comet $ ./toolchain-funcs-shunit.sh
#
# Performing tests
#
test-tc-arch-kernel
test-tc-arch
#
# Test report
#
tests passed: 71 100%
tests failed: 0 0%
tests skipped: 0 0%
tests total: 71 100%
donnie@comet $ ./x-modular-shunit.sh
#
# Performing tests
#
test-x-modular_specs_check
test-x-modular_dri_check
ASSERT:DRIVER='yes' IUSE='dri' USE='dri' BUILT_WITH='yes'
test-x-modular_server_supports_drivers_check
ASSERT:DRIVER='yes' HAS_VER='yes' BUILT_WITH='yes'
#
# Test report
#
tests passed: 28 93%
tests failed: 2 7%
tests skipped: 0 0%
tests total: 30 100%
What do you think?
Thanks,
Donnie
["toolchain-funcs-shunit.sh" (application/x-sh)]
#!/bin/bash
oneTimeSetUp() {
source /etc/init.d/functions.sh
inherit() {
local e
for e in "$@" ; do
source ../${e}.eclass
done
}
inherit toolchain-funcs
}
suite() {
suite_addTest test-tc-arch-kernel
suite_addTest test-tc-arch
}
#
# TEST: tc-arch-kernel
#
test-tc-arch-kernel() {
test-tc-arch-kernel-version() {
KV=$1 ; shift
for CHOST in "$@" ; do
exp=${CHOST##*:}
CHOST=${CHOST%%:*}
actual=$(tc-arch-kernel)
assertEquals \
"Failure for CHOST: ${CHOST} Expected: ${exp} != Actual: ${actual}" \
"${actual}" "${exp:-${CHOST}}"
done
}
test-tc-arch-kernel-version 2.6.0 \
alpha arm{,eb}:arm avr32 bfin:blackfin cris hppa:parisc \
i{3..6}86:i386 ia64 m68k mips{,eb}:mips nios2 powerpc:ppc powerpc64:ppc64 \
s390{,x}:s390 sh{1..4}{,eb}:sh sparc{,64} vax x86_64
test-tc-arch-kernel-version 2.6.30 \
i{3..6}86:x86 x86_64:x86 \
powerpc{,64}:powerpc
}
#
# TEST: tc-arch
#
test-tc-arch() {
for CHOST in \
alpha arm{,eb}:arm avr32:avr bfin cris hppa i{3..6}86:x86 ia64 m68k \
mips{,eb}:mips nios2 powerpc:ppc powerpc64:ppc64 s390{,x}:s390 \
sh{1..4}{,eb}:sh sparc{,64}:sparc vax x86_64:amd64
do
exp=${CHOST##*:}
CHOST=${CHOST%%:*}
actual=$(tc-arch)
assertEquals \
"Failure for CHOST: ${CHOST} Expected: ${exp} != Actual: ${actual}" \
"${actual}" "${exp:-${CHOST}}"
done
}
# To make this work, edit shunit2 and set __SHUNIT_SHELL_FLAGS=''. It
# doesn't allow unset variables to be used in expansions by default,
# which makes a lot of our code fail. Much of our stuff relies on these
# tests to check whether variables are set to some value or set at all.
. /usr/share/shunit2/shunit2
["x-modular-shunit.sh" (application/x-sh)]
#!/bin/bash
## Fix 2 failures by sourcing tests-common farther down
suite() {
suite_addTest test-x-modular_specs_check
suite_addTest test-x-modular_dri_check
suite_addTest test-x-modular_server_supports_drivers_check
}
oneTimeSetUp() {
source tests-common.sh
inherit x-modular
}
#
# TEST: x-modular_specs_check
#
test-x-modular_specs_check() {
DRIVER=yes PN= LDFLAGS= ; x-modular_specs_check; assertNotNull \
"LDFLAGS '${LDFLAGS}' don't contain '-Wl,-z,lazy'" "$(echo ${LDFLAGS} | grep \
'\-Wl,-z,lazy')" DRIVER= PN=xorg-server LDFLAGS= ; \
x-modular_specs_check; assertNotNull "LDFLAGS '${LDFLAGS}' don't contain \
'-Wl,-z,lazy'" "$(echo ${LDFLAGS} | grep '\-Wl,-z,lazy')" DRIVER= PN= \
LDFLAGS= ; x-modular_specs_check; assertNull "LDFLAGS '${LDFLAGS}' contain \
'-Wl,-z,lazy'" "$(echo ${LDFLAGS} | grep '\-Wl,-z,lazy')" DRIVER=yes PN= \
LDFLAGS=-Wl,-z,now; x-modular_specs_check; assertNull "LDFLAGS '${LDFLAGS}' contain \
'-Wl,-z,now'" "$(echo ${LDFLAGS} | grep '\-Wl,-z,now')" DRIVER= PN=xorg-server \
LDFLAGS=-Wl,-z,now; x-modular_specs_check; assertNull "LDFLAGS '${LDFLAGS}' contain \
'-Wl,-z,now'" "$(echo ${LDFLAGS} | grep '\-Wl,-z,now')" DRIVER= PN= \
LDFLAGS=-Wl,-z,now; x-modular_specs_check; assertNotNull "LDFLAGS '${LDFLAGS}' don't \
contain '-Wl,-z,now'" "$(echo ${LDFLAGS} | grep '\-Wl,-z,now')" }
#
# TEST: test-x-modular_dri_check
#
test-x-modular_dri_check() {
DRIVER= IUSE= USE= BUILT_WITH=yes; assertTrue "DRIVER='${DRIVER}' \
IUSE='${IUSE}' USE='${USE}' BUILT_WITH='${BUILT_WITH}'" x-modular_dri_check DRIVER= \
IUSE= USE= BUILT_WITH= ; assertTrue "DRIVER='${DRIVER}' IUSE='${IUSE}' \
USE='${USE}' BUILT_WITH='${BUILT_WITH}'" x-modular_dri_check DRIVER= IUSE=dri \
USE= BUILT_WITH=yes; assertTrue "DRIVER='${DRIVER}' IUSE='${IUSE}' USE='${USE}' \
BUILT_WITH='${BUILT_WITH}'" x-modular_dri_check DRIVER= IUSE=dri USE= \
BUILT_WITH= ; assertTrue "DRIVER='${DRIVER}' IUSE='${IUSE}' USE='${USE}' \
BUILT_WITH='${BUILT_WITH}'" x-modular_dri_check DRIVER= IUSE= USE=dri \
BUILT_WITH=yes; assertTrue "DRIVER='${DRIVER}' IUSE='${IUSE}' USE='${USE}' \
BUILT_WITH='${BUILT_WITH}'" x-modular_dri_check DRIVER= IUSE= USE=dri \
BUILT_WITH= ; assertTrue "DRIVER='${DRIVER}' IUSE='${IUSE}' USE='${USE}' \
BUILT_WITH='${BUILT_WITH}'" x-modular_dri_check DRIVER= IUSE=dri USE=dri \
BUILT_WITH=yes; assertTrue "DRIVER='${DRIVER}' IUSE='${IUSE}' USE='${USE}' \
BUILT_WITH='${BUILT_WITH}'" x-modular_dri_check DRIVER= IUSE=dri USE=dri \
BUILT_WITH= ; assertTrue "DRIVER='${DRIVER}' IUSE='${IUSE}' USE='${USE}' \
BUILT_WITH='${BUILT_WITH}'" x-modular_dri_check DRIVER=yes IUSE= USE= \
BUILT_WITH=yes; assertTrue "DRIVER='${DRIVER}' IUSE='${IUSE}' USE='${USE}' \
BUILT_WITH='${BUILT_WITH}'" x-modular_dri_check DRIVER=yes IUSE= USE= \
BUILT_WITH= ; assertTrue "DRIVER='${DRIVER}' IUSE='${IUSE}' USE='${USE}' \
BUILT_WITH='${BUILT_WITH}'" x-modular_dri_check DRIVER=yes IUSE=dri USE= \
BUILT_WITH=yes; assertTrue "DRIVER='${DRIVER}' IUSE='${IUSE}' USE='${USE}' \
BUILT_WITH='${BUILT_WITH}'" x-modular_dri_check DRIVER=yes IUSE=dri USE= \
BUILT_WITH= ; assertTrue "DRIVER='${DRIVER}' IUSE='${IUSE}' USE='${USE}' \
BUILT_WITH='${BUILT_WITH}'" x-modular_dri_check DRIVER=yes IUSE= USE=dri \
BUILT_WITH=yes; assertTrue "DRIVER='${DRIVER}' IUSE='${IUSE}' USE='${USE}' \
BUILT_WITH='${BUILT_WITH}'" x-modular_dri_check DRIVER=yes IUSE= USE=dri \
BUILT_WITH= ; assertTrue "DRIVER='${DRIVER}' IUSE='${IUSE}' USE='${USE}' \
BUILT_WITH='${BUILT_WITH}'" x-modular_dri_check DRIVER=yes IUSE=dri USE=dri \
BUILT_WITH=yes; assertTrue "DRIVER='${DRIVER}' IUSE='${IUSE}' USE='${USE}' \
BUILT_WITH='${BUILT_WITH}'" x-modular_dri_check DRIVER=yes IUSE=dri USE=dri \
BUILT_WITH= ; assertFalse "DRIVER='${DRIVER}' IUSE='${IUSE}' USE='${USE}' \
BUILT_WITH='${BUILT_WITH}'" x-modular_dri_check }
#
# TEST: x-modular_server_supports_drivers_check
#
test-x-modular_server_supports_drivers_check() {
DRIVER= HAS_VER= ; BUILT_WITH=yes; assertTrue "DRIVER='${DRIVER}' \
HAS_VER='${HAS_VER}' BUILT_WITH='${BUILT_WITH}'" \
x-modular_server_supports_drivers_check DRIVER= HAS_VER= ; BUILT_WITH= ; \
assertTrue "DRIVER='${DRIVER}' HAS_VER='${HAS_VER}' BUILT_WITH='${BUILT_WITH}'" \
x-modular_server_supports_drivers_check DRIVER= HAS_VER=yes; BUILT_WITH=yes; \
assertTrue "DRIVER='${DRIVER}' HAS_VER='${HAS_VER}' BUILT_WITH='${BUILT_WITH}'" \
x-modular_server_supports_drivers_check DRIVER= HAS_VER=yes; BUILT_WITH= ; \
assertTrue "DRIVER='${DRIVER}' HAS_VER='${HAS_VER}' BUILT_WITH='${BUILT_WITH}'" \
x-modular_server_supports_drivers_check DRIVER=yes HAS_VER= ; BUILT_WITH=yes; \
assertTrue "DRIVER='${DRIVER}' HAS_VER='${HAS_VER}' BUILT_WITH='${BUILT_WITH}'" \
x-modular_server_supports_drivers_check DRIVER=yes HAS_VER= ; BUILT_WITH= ; \
assertTrue "DRIVER='${DRIVER}' HAS_VER='${HAS_VER}' BUILT_WITH='${BUILT_WITH}'" \
x-modular_server_supports_drivers_check DRIVER=yes HAS_VER=yes; BUILT_WITH=yes; \
assertTrue "DRIVER='${DRIVER}' HAS_VER='${HAS_VER}' BUILT_WITH='${BUILT_WITH}'" \
x-modular_server_supports_drivers_check DRIVER=yes HAS_VER=yes; BUILT_WITH= ; \
assertFalse "DRIVER='${DRIVER}' HAS_VER='${HAS_VER}' BUILT_WITH='${BUILT_WITH}'" \
x-modular_server_supports_drivers_check }
# To make this work, edit shunit2 and set __SHUNIT_SHELL_FLAGS=''. It
# doesn't allow unset variables to be used in expansions by default,
# which makes a lot of our code fail. Much of our stuff relies on these
# tests to check whether variables are set to some value or set at all.
. /usr/share/shunit2/shunit2
["tests-common.sh" (application/x-sh)]
#!/bin/bash
source /etc/init.d/functions.sh
# for has()/hasq() and others
source /usr/lib/portage/bin/isolated-functions.sh
inherit() {
local e
for e in "$@" ; do
source ../${e}.eclass
done
}
EXPORT_FUNCTIONS() {
:
}
die() {
return 1
}
# two scenarios, one that returns 0 and another that returns 1
built_with_use() {
if [[ -n ${BUILT_WITH} ]]; then
return 0
else
return 1
fi
}
has_version() {
if [[ -n ${HAS_VER} ]]; then
return 0
else
return 1
fi
}
# pulled from ebuild.sh, which is unsourceable
use() {
useq ${1}
}
useq() {
local u=$1
local found=0
# if we got something like '!flag', then invert the return value
if [[ ${u:0:1} == "!" ]] ; then
u=${u:1}
found=1
fi
if hasq ${u} ${USE} ; then
return ${found}
else
return $((!found))
fi
}
--
gentoo-dev@lists.gentoo.org mailing list
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic