From 56434dee0c31bc3fe79f551dc3d8b789951d3bb2 Mon Sep 17 00:00:00 2001 From: Champ Camba Date: Thu, 8 Jun 2017 21:34:20 +0800 Subject: [PATCH] Add tests files --- .travis.yml | 88 ++++++++++++++++++++++++++++++-------- tests/get-wp-version.php | 54 +++++++++++++++++++++++ tests/prepare-wordpress.sh | 43 +++++++++++++++++++ tests/run-travis.sh | 0 4 files changed, 168 insertions(+), 17 deletions(-) create mode 100644 tests/get-wp-version.php create mode 100644 tests/prepare-wordpress.sh create mode 100644 tests/run-travis.sh diff --git a/.travis.yml b/.travis.yml index 2b3c201d..f032ac82 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,27 +1,81 @@ +# Travis CI Configuration File -sudo: false +# Tell Travis CI we're using PHP language: php -notifications: - on_success: never - on_failure: change - -php: - - nightly # PHP 7.0 - - 5.6 - - 5.5 - - 5.4 - +# Setup a global environment and overide as needed env: - - WP_PROJECT_TYPE=plugin WP_VERSION=latest WP_MULTISITE=0 WP_TEST_URL=http://localhost:12000 WP_TEST_USER=test WP_TEST_USER_PASS=test + global: + - WP_TRAVISCI=phpunit + +cache: + directories: + - $HOME/.composer/cache/files + - $HOME/.cache/yarn + +# Next we define our matrix of additional build configurations to test against. +# The versions listed above will automatically create our first configuration, +# so it doesn't need to be re-defined below. + +# Test WP trunk/master and two latest versions on minimum (5.2). +# Test WP latest two versions (4.5, 4.3) on most popular (5.5, 5.6). +# Test WP latest stable (4.5) on other supported PHP (5.3, 5.4). +# Test WP trunk/master on edge platforms (7.0, PHP nightly). + +# WP_VERSION specifies the tag to use. The way these tests are configured to run +# requires at least WordPress 3.8. Specify "master" to test against SVN trunk. matrix: + include: + - env: WP_TRAVISCI="yarn lint" + - env: WP_TRAVISCI="yarn test-client" + - env: WP_TRAVISCI="yarn test-gui" + - php: "5.2" + - php: "5.3" + - php: "5.5" + - php: "5.6" + - php: "7.0" + - php: "7.1" + allow_failures: - - php: nightly + - php: "7.1" +# - php: "nightly" +# whitelist branches for the "push" build check. +branches: + only: + - master + #- master-stable + #- /^branch-.*$/ + #- feature/* + +# Clones WordPress and configures our testing environment. before_script: - - git clone https://github.com/Seravo/wordpress-test-template wp-tests - - bash wp-tests/bin/install-wp-tests.sh test root '' localhost $WP_VERSION + - phpenv config-rm xdebug.ini + - export PLUGIN_SLUG=$(basename $(pwd)) + - source ~/.nvm/nvm.sh + - export PATH="$HOME/.composer/vendor/bin:$PATH" + - | + if [[ ${TRAVIS_PHP_VERSION:0:2} == "7." ]]; then + composer global require "phpunit/phpunit=5.7.*" + elif [[ ${TRAVIS_PHP_VERSION:0:3} != "5.2" ]]; then + composer global require "phpunit/phpunit=4.8.*" + fi + - nvm install 6 + - nvm use 6 + - ./tests/prepare-wordpress.sh + - mysql -e "set global wait_timeout = 3600;" -#script: - # - cd wp-tests/spec && bundle exec rspec test.rb \ No newline at end of file +script: + - ./tests/run-travis.sh + +sudo: false + +# We need notifications for successful builds + +notifications: + webhooks: https:/ultimatemember.com/travis.php + email: + - heychampsupertramp@gmail.com + # Encrypted Slack notification address. + - secure: "WQdTdmYuifSW0hiJGXpQGKystMASC50QvxHlyUL5SM3h5GP8aCgeSsHuXvKPe3dT3Pffhk0dSHBfDtdWFwSHW/upURhg0vs4dm7+nxxvGZiTPzKcuAIjgvCoqWM7teyda/XqFGNSnv+XsT34uoyPhhFgd45T3oS+QQ3aNCruFak=" diff --git a/tests/get-wp-version.php b/tests/get-wp-version.php new file mode 100644 index 00000000..f0cd970b --- /dev/null +++ b/tests/get-wp-version.php @@ -0,0 +1,54 @@ +offers; + +// Sorting available WordPress offers by version number +function offer_version_sort( $first, $second ) { + return version_compare( $first->version, $second->version, '<' ); +} + +uasort( $versions, 'offer_version_sort' ); + +$version_stack = array(); + +foreach( $versions as $offer ) { + list( $major, $minor ) = explode( '.', $offer->version ); + + $base = $major . '.' . $minor; + + if ( + ! isset( $version_stack[ $base ] ) + || version_compare( $offer->version, $version_stack[ $base ] ) ) { + + // There is no version like this yet or there is a newer patch to this major version + $version_stack[ $base ] = $offer->version; + } + + if ( count( $version_stack ) === 2 ) { + break; + } +} + +$wp_versions = array_values( $version_stack ); + +if ( empty( $argv[1] ) ) { + print $wp_versions[0] . "\n"; +} else if ( '--previous' === $argv[1] ) { + print $wp_versions[1] . "\n"; +} else { + die( + "Unknown argument: " . $argv[1] . "\n" + . "Use with no arguments to get the latest stable WordPress version, or use `--previous' to get the previous stable major release.\n" + ); +} \ No newline at end of file diff --git a/tests/prepare-wordpress.sh b/tests/prepare-wordpress.sh new file mode 100644 index 00000000..294696b6 --- /dev/null +++ b/tests/prepare-wordpress.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +# If this is an NPM environment test we don't need a developer WordPress checkout + +if [ "$WP_TRAVISCI" != "phpunit" ]; then + exit 0; +fi + +# This prepares a developer checkout of WordPress for running the test suite on Travis + +mysql -u root -e "CREATE DATABASE wordpress_tests;" + +CURRENT_DIR=$(pwd) + +for WP_SLUG in 'master' 'latest' 'previous'; do + echo "Preparing $WP_SLUG WordPress..."; + + cd $CURRENT_DIR/.. + + case $WP_SLUG in + master) + git clone --depth=1 --branch master git://develop.git.wordpress.org/ /tmp/wordpress-master + ;; + latest) + git clone --depth=1 --branch `php ./$PLUGIN_SLUG/tests/get-wp-version.php` git://develop.git.wordpress.org/ /tmp/wordpress-latest + ;; + previous) + git clone --depth=1 --branch `php ./$PLUGIN_SLUG/tests/get-wp-version.php --previous` git://develop.git.wordpress.org/ /tmp/wordpress-previous + ;; + esac + + cp -r $PLUGIN_SLUG "/tmp/wordpress-$WP_SLUG/src/wp-content/plugins/$PLUGIN_SLUG" + cd /tmp/wordpress-$WP_SLUG + + cp wp-tests-config-sample.php wp-tests-config.php + sed -i "s/youremptytestdbnamehere/wordpress_tests/" wp-tests-config.php + sed -i "s/yourusernamehere/root/" wp-tests-config.php + sed -i "s/yourpasswordhere//" wp-tests-config.php + + echo "Done!"; +done + +exit 0; \ No newline at end of file diff --git a/tests/run-travis.sh b/tests/run-travis.sh new file mode 100644 index 00000000..e69de29b