-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #14 from thefrosty/feature/add-unit-tests
Add testing tools for better code coverage.
- Loading branch information
Showing
40 changed files
with
4,453 additions
and
55 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,13 @@ | ||
/.git export-ignore | ||
/.github export-ignore | ||
/bin export-ignore | ||
/coverage export-ignore | ||
/tests export-ignore | ||
.gitattributes export-ignore | ||
.gitignore export-ignore | ||
.travis.yml export-ignore | ||
package.json export-ignore | ||
package-lock.json export-ignore | ||
phpcs-ruleset.xml export-ignore | ||
phpmd-ruleset.xml export-ignore | ||
phpunit.xml export-ignore |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,8 @@ | ||
.DS_Store | ||
/.idea | ||
coverage/ | ||
tests/results/ | ||
node_modules/ | ||
tests/clover.xml | ||
/wordpress | ||
/vendor | ||
composer.lock | ||
composer.lock |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
#!/usr/bin/env bash | ||
|
||
set -e | ||
|
||
# https://stackoverflow.com/a/44036486/558561 | ||
function create_all_branches() { | ||
# Keep track of where Travis put us. | ||
# We are on a detached head, and we need to be able to go back to it. | ||
local build_head | ||
build_head=$(git rev-parse HEAD) | ||
|
||
# Fetch all the remote branches. Travis clones with `--depth`, which | ||
# implies `--single-branch`, so we need to overwrite remote.origin.fetch to | ||
# do that. | ||
git config --replace-all remote.origin.fetch +refs/heads/*:refs/remotes/origin/* | ||
git fetch | ||
# optionally, we can also fetch the tags | ||
git fetch --tags | ||
|
||
# create the tacking branches | ||
for branch in $(git branch -r | grep -v HEAD); do | ||
git checkout -qf "${branch#origin/}" | ||
done | ||
|
||
# finally, go back to where we were at the beginning | ||
git checkout "${build_head}" | ||
} | ||
|
||
create_all_branches |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
#!/usr/bin/env bash | ||
|
||
set -e | ||
|
||
# Based off: https://gist.github.com/oroce/11282380 | ||
# Go to root of the repository | ||
echo 'Checking ESLint' | ||
|
||
if [[ $(git rev-parse --verify HEAD) ]]; then | ||
against='HEAD' | ||
elif [[ $(git rev-parse --verify develop) ]]; then | ||
against='develop' | ||
elif [[ $(git rev-parse --verify master) ]]; then | ||
against='master' | ||
else | ||
echo "git can't verify HEAD, develop or master." | ||
exit 1 | ||
fi | ||
|
||
commitFiles=$(git diff --name-only "$(git merge-base develop ${against})") | ||
|
||
jsFiles="" | ||
jsFilesCount=0 | ||
for f in ${commitFiles}; do | ||
if [[ ! -e ${f} ]]; then | ||
continue | ||
fi | ||
if [[ ${f} =~ \.(js|jsx)$ ]]; then | ||
jsFilesCount=$((jsFilesCount + 1)) | ||
jsFiles="$jsFiles $f" | ||
fi | ||
done | ||
if [[ ${jsFilesCount} == 0 ]]; then | ||
echo "No JS files updated, nothing to check." | ||
exit 0 | ||
fi | ||
|
||
echo "Checking files: $jsFiles" | ||
|
||
npx standard "${jsFiles}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,152 @@ | ||
#!/usr/bin/env bash | ||
|
||
if [[ $# -lt 3 ]]; then | ||
echo "usage: $0 <db-name> <db-user> <db-pass> [db-host] [wp-version] [skip-database-creation]" | ||
exit 1 | ||
fi | ||
|
||
DB_NAME=$1 | ||
DB_USER=$2 | ||
DB_PASS=$3 | ||
DB_HOST=${4-localhost} | ||
WP_VERSION=${5-latest} | ||
SKIP_DB_CREATE=${6-false} | ||
|
||
TMPDIR=${TMPDIR-/tmp} | ||
TMPDIR=$(echo $TMPDIR | sed -e "s/\/$//") | ||
WP_TESTS_DIR=${WP_TESTS_DIR-$TMPDIR/wordpress-tests-lib} | ||
WP_CORE_DIR=${WP_CORE_DIR-$TMPDIR/wordpress/} | ||
|
||
download() { | ||
if [[ `which curl` ]]; then | ||
curl -s "$1" > "$2"; | ||
elif [[ `which wget` ]]; then | ||
wget -nv -O "$2" "$1" | ||
fi | ||
} | ||
|
||
if [[ ${WP_VERSION} =~ ^[0-9]+\.[0-9]+$ ]]; then | ||
WP_TESTS_TAG="branches/$WP_VERSION" | ||
elif [[ ${WP_VERSION} =~ [0-9]+\.[0-9]+\.[0-9]+ ]]; then | ||
if [[ ${WP_VERSION} =~ [0-9]+\.[0-9]+\.[0] ]]; then | ||
# version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x | ||
WP_TESTS_TAG="tags/${WP_VERSION%??}" | ||
else | ||
WP_TESTS_TAG="tags/$WP_VERSION" | ||
fi | ||
elif [[ ${WP_VERSION} == 'nightly' || ${WP_VERSION} == 'trunk' ]]; then | ||
WP_TESTS_TAG="trunk" | ||
else | ||
# http serves a single offer, whereas https serves multiple. we only want one | ||
download http://api.wordpress.org/core/version-check/1.7/ /tmp/wp-latest.json | ||
grep '[0-9]+\.[0-9]+(\.[0-9]+)?' /tmp/wp-latest.json | ||
LATEST_VERSION=$(grep -o '"version":"[^"]*' /tmp/wp-latest.json | sed 's/"version":"//') | ||
if [[ -z "$LATEST_VERSION" ]]; then | ||
echo "Latest WordPress version could not be found" | ||
exit 1 | ||
fi | ||
WP_TESTS_TAG="tags/$LATEST_VERSION" | ||
fi | ||
|
||
set -ex | ||
|
||
install_wp() { | ||
|
||
if [ -d $WP_CORE_DIR ]; then | ||
return; | ||
fi | ||
|
||
mkdir -p $WP_CORE_DIR | ||
|
||
if [[ ${WP_VERSION} == 'nightly' || ${WP_VERSION} == 'trunk' ]]; then | ||
mkdir -p $TMPDIR/wordpress-nightly | ||
download https://wordpress.org/nightly-builds/wordpress-latest.zip $TMPDIR/wordpress-nightly/wordpress-nightly.zip | ||
unzip -q $TMPDIR/wordpress-nightly/wordpress-nightly.zip -d $TMPDIR/wordpress-nightly/ | ||
mv $TMPDIR/wordpress-nightly/wordpress/* $WP_CORE_DIR | ||
else | ||
if [[ ${WP_VERSION} == 'latest' ]]; then | ||
local ARCHIVE_NAME='latest' | ||
elif [[ ${WP_VERSION} =~ [0-9]+\.[0-9]+ ]]; then | ||
# https serves multiple offers, whereas http serves single. | ||
download https://api.wordpress.org/core/version-check/1.7/ $TMPDIR/wp-latest.json | ||
if [[ ${WP_VERSION} =~ [0-9]+\.[0-9]+\.[0] ]]; then | ||
# version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x | ||
LATEST_VERSION=${WP_VERSION%??} | ||
else | ||
# otherwise, scan the releases and get the most up to date minor version of the major release | ||
local VERSION_ESCAPED=`echo ${WP_VERSION} | sed 's/\./\\\\./g'` | ||
LATEST_VERSION=$(grep -o '"version":"'${VERSION_ESCAPED}'[^"]*' $TMPDIR/wp-latest.json | sed 's/"version":"//' | head -1) | ||
fi | ||
if [[ -z "$LATEST_VERSION" ]]; then | ||
local ARCHIVE_NAME="wordpress-$WP_VERSION" | ||
else | ||
local ARCHIVE_NAME="wordpress-$LATEST_VERSION" | ||
fi | ||
else | ||
local ARCHIVE_NAME="wordpress-$WP_VERSION" | ||
fi | ||
download https://wordpress.org/${ARCHIVE_NAME}.tar.gz $TMPDIR/wordpress.tar.gz | ||
tar --strip-components=1 -zxmf $TMPDIR/wordpress.tar.gz -C ${WP_CORE_DIR} | ||
fi | ||
|
||
download https://raw.github.com/markoheijnen/wp-mysqli/master/db.php ${WP_CORE_DIR}/wp-content/db.php | ||
} | ||
|
||
install_test_suite() { | ||
# portable in-place argument for both GNU sed and Mac OSX sed | ||
if [[ $(uname -s) == 'Darwin' ]]; then | ||
local ioption='-i .bak' | ||
else | ||
local ioption='-i' | ||
fi | ||
|
||
# set up testing suite if it doesn't yet exist | ||
if [[ ! -d ${WP_TESTS_DIR} ]]; then | ||
# set up testing suite | ||
mkdir -p ${WP_TESTS_DIR} | ||
svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/includes/ ${WP_TESTS_DIR}/includes | ||
svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/data/ ${WP_TESTS_DIR}/data | ||
fi | ||
|
||
if [[ ! -f wp-tests-config.php ]]; then | ||
download https://develop.svn.wordpress.org/${WP_TESTS_TAG}/wp-tests-config-sample.php "$WP_TESTS_DIR"/wp-tests-config.php | ||
# remove all forward slashes in the end | ||
WP_CORE_DIR=$(echo $WP_CORE_DIR | sed "s:/\+$::") | ||
sed $ioption "s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR/':" "$WP_TESTS_DIR"/wp-tests-config.php | ||
sed $ioption "s/youremptytestdbnamehere/$DB_NAME/" "$WP_TESTS_DIR"/wp-tests-config.php | ||
sed $ioption "s/yourusernamehere/$DB_USER/" "$WP_TESTS_DIR"/wp-tests-config.php | ||
sed $ioption "s/yourpasswordhere/$DB_PASS/" "$WP_TESTS_DIR"/wp-tests-config.php | ||
sed $ioption "s|localhost|${DB_HOST}|" "$WP_TESTS_DIR"/wp-tests-config.php | ||
fi | ||
|
||
} | ||
|
||
install_db() { | ||
|
||
if [[ ${SKIP_DB_CREATE} = "true" ]]; then | ||
return 0 | ||
fi | ||
|
||
# parse DB_HOST for port or socket references | ||
local PARTS=(${DB_HOST//\:/ }) | ||
local DB_HOSTNAME=${PARTS[0]}; | ||
local DB_SOCK_OR_PORT=${PARTS[1]}; | ||
local EXTRA="" | ||
|
||
if ! [ -z ${DB_HOSTNAME} ] ; then | ||
if [[ $(echo ${DB_SOCK_OR_PORT} | grep -e '^[0-9]\{1,\}$') ]]; then | ||
EXTRA=" --host=$DB_HOSTNAME --port=$DB_SOCK_OR_PORT --protocol=tcp" | ||
elif ! [[ -z ${DB_SOCK_OR_PORT} ]] ; then | ||
EXTRA=" --socket=$DB_SOCK_OR_PORT" | ||
elif ! [[ -z ${DB_HOSTNAME} ]] ; then | ||
EXTRA=" --host=$DB_HOSTNAME --protocol=tcp" | ||
fi | ||
fi | ||
|
||
# create database | ||
mysqladmin create ${DB_NAME} --user="$DB_USER" --password="$DB_PASS"${EXTRA} | ||
} | ||
|
||
install_wp | ||
install_test_suite | ||
install_db |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
#!/usr/bin/env bash | ||
|
||
set -e | ||
|
||
# Based off: https://gist.github.com/Hounddog/3891872 | ||
# Go to root of the repository | ||
echo 'Checking PHPCS' | ||
|
||
if [[ $(git rev-parse --verify HEAD) ]]; then | ||
against='HEAD' | ||
elif [[ $(git rev-parse --verify develop) ]]; then | ||
against='develop' | ||
elif [[ $(git rev-parse --verify master) ]]; then | ||
against='master' | ||
else | ||
echo "git can't verify HEAD, develop or master." | ||
exit 1 | ||
fi | ||
|
||
commitFiles=$(git diff --name-only "$(git merge-base develop ${against})") | ||
|
||
args="-s --colors --extensions=php --tab-width=4 --standard=phpcs-ruleset.xml --runtime-set testVersion 7.3-" | ||
phpFiles="" | ||
phpFilesCount=0 | ||
for f in ${commitFiles}; do | ||
if [[ ! -e ${f} ]]; then | ||
continue | ||
fi | ||
if [[ ${f} =~ \.(php|ctp)$ ]]; then | ||
phpFilesCount=$((phpFilesCount + 1)) | ||
phpFiles="$phpFiles $f" | ||
fi | ||
done | ||
if [[ ${phpFilesCount} == 0 ]]; then | ||
echo "No PHP files updated, nothing to check." | ||
exit 0 | ||
fi | ||
|
||
echo "Checking files: $phpFiles" | ||
|
||
if [[ ${phpFilesCount} -gt 2 ]] && { [[ ${TRAVIS+x} ]] || [[ ${CIRCLECI+x} ]]; }; then | ||
args="$args --report=summary" | ||
fi | ||
|
||
./vendor/bin/phpcs ${args} ${phpFiles} |
Oops, something went wrong.