Skip to content

Commit

Permalink
Merge pull request #6 from timber/5_tests
Browse files Browse the repository at this point in the history
5 tests
  • Loading branch information
jarednova committed May 26, 2016
2 parents fad8c61 + a531111 commit c6c5c0d
Show file tree
Hide file tree
Showing 9 changed files with 294 additions and 21 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
vendor
composer.lock
29 changes: 29 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
sudo: false

language: php

php:
- 5.3
- 5.4
- 5.5
- 7.0
- "hhvm"

env:
- WP_VERSION=latest WP_MULTISITE=0

before_script:
- if [ "$TRAVIS_PHP_VERSION" == 5.5 ] || [ "$TRAVIS_PHP_VERSION" == 5.4 ] || [ "$TRAVIS_PHP_VERSION" == 7.0 ]; then autodetect | pecl install imagick; fi
- if [ "$TRAVIS_PHP_VERSION" == 5.3 ]; then autodetect | pecl install imagick-3.0.1; fi
- bash bin/install-wp-tests.sh wordpress_test root '' localhost $WP_VERSION
- composer install --prefer-source

script:
- if [ "$TRAVIS_BRANCH" == "master" ]; then mkdir -p build/logs; phpunit --coverage-clover build/logs/clover.xml; fi
- if [ "$TRAVIS_BRANCH" != "master" ]; then phpunit -c bin/phpunit-nocover.xml; fi

after_script:
- if [ "$TRAVIS_BRANCH" == "master" ]; then php vendor/bin/coveralls -v; fi

after_success:
- if [ "$TRAVIS_BRANCH" == "master" ]; then coveralls; fi
120 changes: 120 additions & 0 deletions bin/install-wp-tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
#!/usr/bin/env bash

if [ $# -lt 3 ]; then
echo "usage: $0 <db-name> <db-user> <db-pass> [db-host] [wp-version]"
exit 1
fi

DB_NAME=$1
DB_USER=$2
DB_PASS=$3
DB_HOST=${4-localhost}
WP_VERSION=${5-latest}

WP_TESTS_DIR=${WP_TESTS_DIR-/tmp/wordpress-tests-lib}
WP_CORE_DIR=${WP_CORE_DIR-/tmp/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]+(\.[0-9]+)? ]]; then
WP_TESTS_TAG="tags/$WP_VERSION"
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 /tmp/wordpress-nightly
download https://wordpress.org/nightly-builds/wordpress-latest.zip /tmp/wordpress-nightly/wordpress-nightly.zip
unzip -q /tmp/wordpress-nightly/wordpress-nightly.zip -d /tmp/wordpress-nightly/
mv /tmp/wordpress-nightly/wordpress/* $WP_CORE_DIR
else
if [ $WP_VERSION == 'latest' ]; then
local ARCHIVE_NAME='latest'
else
local ARCHIVE_NAME="wordpress-$WP_VERSION"
fi
download https://wordpress.org/${ARCHIVE_NAME}.tar.gz /tmp/wordpress.tar.gz
tar --strip-components=1 -zxmf /tmp/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
fi

cd $WP_TESTS_DIR

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
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() {
# 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
17 changes: 17 additions & 0 deletions bin/phpunit-nocover.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<phpunit
bootstrap="../tests/bootstrap.php"
backupGlobals="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
>
<testsuites>
<testsuite>
<directory prefix="test-" suffix=".php">../tests/</directory>
</testsuite>
<!-- The suite below HAS to be last to run,
as it includes a test that sets some const and would contaminate
the other tests as well. -->
</testsuites>
</phpunit>
42 changes: 42 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"name": "timber/sugar",
"type": "library",
"description": "Add-ons to Timber",
"keywords": [
"timber",
"twig",
"themes",
"templating"
],
"homepage": "http://timber.upstatement.com",
"license": "MIT",
"authors": [
{
"name": "Jared Novack",
"email": "jared@upstatement.com",
"homepage": "http://upstatement.com"
},
{
"name": "Connor J. Burton",
"email" : "connorjburton@gmail.com",
"homepage": "http://connorburton.com"
}
],
"support": {
"issues": "https://github.com/timber/sugar/issues",
"wiki": "https://github.com/timber/sugar/wiki",
"source": "https://github.com/timber/sugar"
},
"require": {
},
"require-dev": {
"timber/timber" : "1.*",
"satooshi/php-coveralls": "1.0.*"
},
"repositories": [
{
"type": "composer",
"url": "https://wpackagist.org"
}
]
}
23 changes: 23 additions & 0 deletions phpunit.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<phpunit
bootstrap="tests/bootstrap.php"
backupGlobals="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
>
<testsuites>
<testsuite>
<directory prefix="test-" suffix=".php">./tests/</directory>
</testsuite>
</testsuites>
<logging>
<log type="coverage-clover" target="build/logs/clover.xml"/>
<!-- <log type="coverage-html" target="build/logs/html"/> -->
</logging>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<file>timber-sugar.php</file>
</whitelist>
</filter>
</phpunit>
26 changes: 26 additions & 0 deletions tests/bootstrap.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

$_tests_dir = getenv('WP_TESTS_DIR');
if ( !$_tests_dir ) $_tests_dir = '/tmp/wordpress-tests-lib';


require_once $_tests_dir . '/includes/functions.php';

function _manually_load_plugin() {
global $timber;

require dirname( __FILE__ ) . '/../vendor/autoload.php';
$timber = new Timber();
}

tests_add_filter( 'muplugins_loaded', '_manually_load_plugin' );

require $_tests_dir . '/includes/bootstrap.php';
require __DIR__.'/../timber-sugar.php';


if ( !function_exists('is_post_type_viewable') ) {
function is_post_type_viewable( $post_type_object ) {
return $post_type_object->publicly_queryable || ( $post_type_object->_builtin && $post_type_object->public );
}
}
20 changes: 20 additions & 0 deletions tests/test-timber-sugar.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

class TestTimberSugar extends WP_UnitTestCase {

function testDummy() {
$template = '{{dummy(10)}}';
$str = Timber::compile_string($template);
$str = str_replace('.', '', $str);
$str = str_replace(',', '', $str);
$this->assertEquals(10, str_word_count($str));
}

function testTwitterify() {
$tweet = 'Love this thing from @jaredNova about #timberwp http://upstatement.com';
$template = '{{tweet|twitterify}}';
$str = Timber::compile_string($template, array('tweet' => $tweet));
$this->assertEquals('Love this thing from <a href="https://www.twitter.com/jaredNova" target="_blank">@jaredNova</a> about <a href="https://twitter.com/hashtag/timberwp?src=hash" target="_blank">#timberwp</a> <a href="http://upstatement.com" target="_blank">http://upstatement.com</a>', $str);
}

}
36 changes: 15 additions & 21 deletions timber-sugar.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,37 +12,31 @@ class TimberSugar {

function __construct(){
add_filter('get_twig', function($twig){
$twig->addFilter('dummy', new Twig_Filter_Function(array($this, 'apply_dummy_filter')));
$twig->addFunction(new Twig_SimpleFunction('dummy', array(&$this, 'apply_dummy')));
$twig->addFilter('dummy', new Twig_Filter_Function(array(__CLASS__, 'apply_dummy_filter')));
$twig->addFunction(new Twig_SimpleFunction('dummy', array(__CLASS__, 'apply_dummy')));

$twig->addFilter('twitterify', new Twig_Filter_Function(array($this, 'twitterify')));
$twig->addFilter('twitterfy', new Twig_Filter_Function(array($this, 'twitterify')));
$twig->addFilter('twitterify', new Twig_Filter_Function(array(__CLASS__, 'twitterify')));
$twig->addFilter('twitterfy', new Twig_Filter_Function(array(__CLASS__, 'twitterify')));
return $twig;
});
}

function apply_dummy_filter($text, $words){
static function apply_dummy_filter($text, $words){
if (!strlen(trim($text))){
return self::apply_dummy($words);
}
return $text;
}

function apply_dummy($words){
static function apply_dummy($word_count){
$text = file_get_contents(__DIR__.'/assets/lorem-ipsum.txt');
$starting_position = rand(0, strlen($text));
$leading_text = substr( $text , $starting_position);
$text = ucfirst(trim($leading_text)) . ' ' .$text;
$text = self::simple_truncate($text, $words);
return $text;
}

private function simple_truncate($phrase, $max_words){
$phrase_array = explode(' ',$phrase);
if(count($phrase_array) > $max_words && $max_words > 0){
$phrase = implode(' ',array_slice($phrase_array, 0, $max_words));
}
return $phrase;
$words = explode(' ', $text);
$starting_word = rand(0, count($words));
$more_words = array_merge($words, $words);
$resulting_words = array_slice($more_words, $starting_word, $word_count);
$text = implode(' ', $resulting_words);
error_log('words='.$text.'/');
return ucfirst($text);
}

public static function twitterify($ret) {
Expand All @@ -51,8 +45,8 @@ public static function twitterify($ret) {
$pattern = '#([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.';
$pattern .= '[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)#i';
$ret = preg_replace($pattern, '<a href="mailto:\\1">\\1</a>', $ret);
$ret = preg_replace("/\B@(\w+)/", " <a href=\"http://www.twitter.com/\\1\" target=\"_blank\">@\\1</a>", $ret);
$ret = preg_replace("/\B#(\w+)/", "<a href=\"http://twitter.com/hashtag/\\1?src=hash\" target=\"_blank\">#\\1</a>", $ret);
$ret = preg_replace("/\B@(\w+)/", " <a href=\"https://www.twitter.com/\\1\" target=\"_blank\">@\\1</a>", $ret);
$ret = preg_replace("/\B#(\w+)/", "<a href=\"https://twitter.com/hashtag/\\1?src=hash\" target=\"_blank\">#\\1</a>", $ret);
return $ret;
}

Expand Down

0 comments on commit c6c5c0d

Please sign in to comment.