Merge branch 'develop' of https://github.com/getgrav/grav into feature/blueprints-update

This commit is contained in:
Matias Griese
2016-02-22 11:33:59 +02:00
4 changed files with 390 additions and 32 deletions

View File

@@ -96,6 +96,7 @@ class TwigExtension extends \Twig_Extension
{
return [
new \Twig_SimpleFunction('array', [$this, 'arrayFunc']),
new \Twig_SimpleFunction('array_key_value', [$this, 'arrayKeyValueFunc']),
new \Twig_simpleFunction('authorize', [$this, 'authorize']),
new \Twig_SimpleFunction('debug', [$this, 'dump'], ['needs_context' => true, 'needs_environment' => true]),
new \Twig_SimpleFunction('dump', [$this, 'dump'], ['needs_context' => true, 'needs_environment' => true]),
@@ -217,7 +218,7 @@ class TwigExtension extends \Twig_Extension
* {{ 'CamelCased'|underscorize }} => camel_cased
* {{ 'Something Text'|hyphenize }} => something-text
* {{ 'something_text_to_read'|humanize }} => "Something text to read"
* {{ '181'|monthize }} => 6
* {{ '181'|monthize }} => 5
* {{ '10'|ordinalize }} => 10th
*
* @param string $action
@@ -667,6 +668,26 @@ class TwigExtension extends \Twig_Extension
return (array)$value;
}
/**
* Workaround for twig associative array initialization
* Returns a key => val array
*
* @param string $key key of item
* @param string $val value of item
* @param string $current_array optional array to add to
*
* @return array
*/
public function arrayKeyValueFunc($key, $val, $current_array = null)
{
if (empty($current_array)) {
return array( $key => $val );
} else {
$current_array[$key] = $val;
return $current_array;
}
}
/**
* Returns a string from a value. If the value is array, return it json encoded
*

View File

@@ -0,0 +1,146 @@
<?php
use Codeception\Util\Fixtures;
use Grav\Common\Grav;
use Grav\Common\Inflector;
use Grav\Common\Utils;
/**
* Class InflectorTest
*/
class InflectorTest extends \Codeception\TestCase\Test
{
/** @var Grav $grav */
protected $grav;
/** @var Uri $uri */
protected $inflector;
protected function _before()
{
$this->grav = Fixtures::get('grav');
$this->inflector = $this->grav['inflector'];
}
protected function _after()
{
}
public function testPluralize()
{
$this->assertSame('words', $this->inflector->pluralize('word'));
$this->assertSame('kisses', $this->inflector->pluralize('kiss'));
$this->assertSame('volcanoes', $this->inflector->pluralize('volcanoe'));
$this->assertSame('cherries', $this->inflector->pluralize('cherry'));
$this->assertSame('days', $this->inflector->pluralize('day'));
$this->assertSame('knives', $this->inflector->pluralize('knife'));
}
public function testSingularize()
{
$this->assertSame('word', $this->inflector->singularize('words'));
$this->assertSame('kiss', $this->inflector->singularize('kisses'));
$this->assertSame('volcanoe', $this->inflector->singularize('volcanoe'));
$this->assertSame('cherry', $this->inflector->singularize('cherries'));
$this->assertSame('day', $this->inflector->singularize('days'));
$this->assertSame('knife', $this->inflector->singularize('knives'));
}
public function testTitleize()
{
$this->assertSame('This String Is Titleized', $this->inflector->titleize('ThisStringIsTitleized'));
$this->assertSame('This String Is Titleized', $this->inflector->titleize('this string is titleized'));
$this->assertSame('This String Is Titleized', $this->inflector->titleize('this_string_is_titleized'));
$this->assertSame('This String Is Titleized', $this->inflector->titleize('this-string-is-titleized'));
$this->assertSame('This string is titleized', $this->inflector->titleize('ThisStringIsTitleized', 'first'));
$this->assertSame('This string is titleized', $this->inflector->titleize('this string is titleized', 'first'));
$this->assertSame('This string is titleized', $this->inflector->titleize('this_string_is_titleized', 'first'));
$this->assertSame('This string is titleized', $this->inflector->titleize('this-string-is-titleized', 'first'));
}
public function testCamelize()
{
$this->assertSame('ThisStringIsCamelized', $this->inflector->camelize('This String Is Camelized'));
$this->assertSame('ThisStringIsCamelized', $this->inflector->camelize('thisStringIsCamelized'));
$this->assertSame('ThisStringIsCamelized', $this->inflector->camelize('This_String_Is_Camelized'));
$this->assertSame('ThisStringIsCamelized', $this->inflector->camelize('this string is camelized'));
$this->assertSame('GravSPrettyCoolMy1', $this->inflector->camelize("Grav's Pretty Cool. My #1!"));
}
public function testUnderscorize()
{
$this->assertSame('this_string_is_underscorized', $this->inflector->underscorize('This String Is Underscorized'));
$this->assertSame('this_string_is_underscorized', $this->inflector->underscorize('ThisStringIsUnderscorized'));
$this->assertSame('this_string_is_underscorized', $this->inflector->underscorize('This_String_Is_Underscorized'));
$this->assertSame('this_string_is_underscorized', $this->inflector->underscorize('This-String-Is-Underscorized'));
}
public function testHyphenize()
{
$this->assertSame('this-string-is-hyphenized', $this->inflector->hyphenize('This String Is Hyphenized'));
$this->assertSame('this-string-is-hyphenized', $this->inflector->hyphenize('ThisStringIsHyphenized'));
$this->assertSame('this-string-is-hyphenized', $this->inflector->hyphenize('This-String-Is-Hyphenized'));
$this->assertSame('this-string-is-hyphenized', $this->inflector->hyphenize('This_String_Is_Hyphenized'));
}
public function testHumanize()
{
//$this->assertSame('This string is humanized', $this->inflector->humanize('ThisStringIsHumanized'));
$this->assertSame('This string is humanized', $this->inflector->humanize('this_string_is_humanized'));
//$this->assertSame('This string is humanized', $this->inflector->humanize('this-string-is-humanized'));
$this->assertSame('This String Is Humanized', $this->inflector->humanize('this_string_is_humanized', 'all'));
//$this->assertSame('This String Is Humanized', $this->inflector->humanize('this-string-is-humanized'), 'all');
}
public function testVariablize()
{
$this->assertSame('thisStringIsVariablized', $this->inflector->variablize('This String Is Variablized'));
$this->assertSame('thisStringIsVariablized', $this->inflector->variablize('ThisStringIsVariablized'));
$this->assertSame('thisStringIsVariablized', $this->inflector->variablize('This_String_Is_Variablized'));
$this->assertSame('thisStringIsVariablized', $this->inflector->variablize('this string is variablized'));
$this->assertSame('gravSPrettyCoolMy1', $this->inflector->variablize("Grav's Pretty Cool. My #1!"));
}
public function testTableize()
{
$this->assertSame('people', $this->inflector->tableize('Person'));
$this->assertSame('pages', $this->inflector->tableize('Page'));
$this->assertSame('blog_pages', $this->inflector->tableize('BlogPage'));
$this->assertSame('admin_dependencies', $this->inflector->tableize('adminDependency'));
$this->assertSame('admin_dependencies', $this->inflector->tableize('admin-dependency'));
$this->assertSame('admin_dependencies', $this->inflector->tableize('admin_dependency'));
}
public function testClassify()
{
$this->assertSame('Person', $this->inflector->classify('people'));
$this->assertSame('Page', $this->inflector->classify('pages'));
$this->assertSame('BlogPage', $this->inflector->classify('blog_pages'));
$this->assertSame('AdminDependency', $this->inflector->classify('admin_dependencies'));
}
public function testOrdinalize()
{
$this->assertSame('1st', $this->inflector->ordinalize(1));
$this->assertSame('2nd', $this->inflector->ordinalize(2));
$this->assertSame('3rd', $this->inflector->ordinalize(3));
$this->assertSame('4th', $this->inflector->ordinalize(4));
$this->assertSame('5th', $this->inflector->ordinalize(5));
$this->assertSame('16th', $this->inflector->ordinalize(16));
$this->assertSame('51st', $this->inflector->ordinalize(51));
$this->assertSame('111th', $this->inflector->ordinalize(111));
$this->assertSame('123rd', $this->inflector->ordinalize(123));
}
public function testMonthize()
{
$this->assertSame(0, $this->inflector->monthize(10));
$this->assertSame(1, $this->inflector->monthize(30));
$this->assertSame(1, $this->inflector->monthize(41));
$this->assertSame(11, $this->inflector->monthize(365));
}
}

View File

@@ -0,0 +1,187 @@
<?php
use Codeception\Util\Fixtures;
use Grav\Common\Grav;
use Grav\Common\Twig\TwigExtension;
/**
* Class TwigExtensionTest
*/
class TwigExtensionTest extends \Codeception\TestCase\Test
{
/** @var Grav $grav */
protected $grav;
/** @var TwigExtension $twig_ext */
protected $twig_ext;
protected function _before()
{
$this->grav = Fixtures::get('grav');
$this->twig_ext = new TwigExtension();
}
public function testInflectorFilter()
{
$this->assertSame('people', $this->twig_ext->inflectorFilter('plural', 'person'));
$this->assertSame('shoe', $this->twig_ext->inflectorFilter('singular', 'shoes'));
$this->assertSame('Welcome Page', $this->twig_ext->inflectorFilter('title', 'welcome page'));
$this->assertSame('SendEmail', $this->twig_ext->inflectorFilter('camel', 'send_email'));
$this->assertSame('camel_cased', $this->twig_ext->inflectorFilter('underscor', 'CamelCased'));
$this->assertSame('something-text', $this->twig_ext->inflectorFilter('hyphen', 'Something Text'));
$this->assertSame('Something text to read', $this->twig_ext->inflectorFilter('human', 'something_text_to_read'));
$this->assertSame(5, $this->twig_ext->inflectorFilter('month', 181));
$this->assertSame('10th', $this->twig_ext->inflectorFilter('ordinal', 10));
}
public function testMd5Filter()
{
$this->assertSame(md5('grav'), $this->twig_ext->md5Filter('grav'));
$this->assertSame(md5('devs@getgrav.org'), $this->twig_ext->md5Filter('devs@getgrav.org'));
}
public function testKsortFilter()
{
$object = array("name"=>"Bob","age"=>8,"colour"=>"red");
$this->assertSame(array("age"=>8,"colour"=>"red","name"=>"Bob"), $this->twig_ext->ksortFilter($object));
}
public function testContainsFilter()
{
$this->assertTrue($this->twig_ext->containsFilter('grav','grav'));
$this->assertTrue($this->twig_ext->containsFilter('So, I found this new cms, called grav, and it\'s pretty awesome guys','grav'));
}
public function testNicetimeFilter()
{
$now = time();
$threeSeconds = time() - (3);
$threeMinutes = time() - (60*3);
$threeHours = time() - (60*60*3);
$threeDays = time() - (60*60*24*3);
$threeMonths = time() - (60*60*24*30*3);
$threeYears = time() - (60*60*24*365*3);
$measures = ['seconds','minutes','hours','days','months','years'];
$this->assertSame('No date provided', $this->twig_ext->nicetimeFilter(null));
for ($i=0; $i<count($measures); $i++) {
$time = 'three' . ucfirst($measures[$i]);
$this->assertSame('3 ' . $measures[$i] . ' ago', $this->twig_ext->nicetimeFilter($$time));
}
$this->assertSame('3 secs ago', $this->twig_ext->nicetimeFilter($threeSeconds, false));
}
public function testSafeEmailFilter()
{
$this->assertSame('&#100;&#101;&#118;&#115;&#64;&#103;&#101;&#116;&#103;&#114;&#97;&#118;&#46;&#111;&#114;&#103;', $this->twig_ext->safeEmailFilter('devs@getgrav.org'));
$this->assertSame('&#115;&#111;&#109;&#101;&#111;&#110;&#101;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;', $this->twig_ext->safeEmailFilter('someone@example.com'));
}
public function testRandomizeFilter()
{
$array = [1,2,3,4,5];
$this->assertContains(2, $this->twig_ext->randomizeFilter($array));
$this->assertSame($array, $this->twig_ext->randomizeFilter($array, 5));
$this->assertSame($array[0], $this->twig_ext->randomizeFilter($array, 1)[0]);
$this->assertSame($array[3], $this->twig_ext->randomizeFilter($array, 4)[3]);
$this->assertSame($array[1], $this->twig_ext->randomizeFilter($array, 4)[1]);
}
public function testModulusFilter()
{
$this->assertSame(3, $this->twig_ext->modulusFilter(3,4));
$this->assertSame(1, $this->twig_ext->modulusFilter(11,2));
$this->assertSame(0, $this->twig_ext->modulusFilter(10,2));
$this->assertSame(2, $this->twig_ext->modulusFilter(10,4));
}
public function testAbsoluteUrlFilter()
{
}
public function testMarkdownFilter()
{
}
public function testStartsWithFilter()
{
}
public function testEndsWithFilter()
{
}
public function testDefinedDefaultFilter()
{
}
public function testRtrimFilter()
{
}
public function testLtrimFilter()
{
}
public function testRepeatFunc()
{
}
public function testUrlFunc()
{
}
public function testEvaluateFunc()
{
}
public function testDump()
{
}
public function testGistFunc()
{
}
public function testRandomStringFunc()
{
}
public function testPadFilter()
{
}
public function testArrayFunc()
{
}
public function testArrayKeyValue()
{
$this->assertSame(['meat' => 'steak'],
$this->twig_ext->arrayKeyValueFunc('meat', 'steak'));
$this->assertSame(['fruit' => 'apple', 'meat' => 'steak'],
$this->twig_ext->arrayKeyValueFunc('meat', 'steak', ['fruit' => 'apple']));
}
public function stringFunc()
{
}
}

View File

@@ -68,9 +68,9 @@ class UtilsTest extends \Codeception\TestCase\Test
public function testSubstrToString()
{
$this->assertEquals(Utils::substrToString('english', 'glish'), 'en');
$this->assertEquals(Utils::substrToString('english', 'test'), 'english');
$this->assertNotEquals(Utils::substrToString('english', 'lish'), 'en');
$this->assertEquals('en', Utils::substrToString('english', 'glish'));
$this->assertEquals('english', Utils::substrToString('english', 'test'));
$this->assertNotEquals('en', Utils::substrToString('english', 'lish'));
}
public function testMergeObjects()
@@ -101,33 +101,37 @@ class UtilsTest extends \Codeception\TestCase\Test
public function testTruncate()
{
$this->assertEquals(Utils::truncate('english', 5), 'engli' . '&hellip;');
$this->assertEquals(Utils::truncate('english'), 'english');
$this->assertEquals(Utils::truncate('This is a string to truncate'), 'This is a string to truncate');
$this->assertEquals(Utils::truncate('This is a string to truncate', 2), 'Th' . '&hellip;');
$this->assertEquals(Utils::truncate('english', 5, true, " ", "..."), 'engli' . '...');
$this->assertEquals(Utils::truncate('english'), 'english');
$this->assertEquals(Utils::truncate('This is a string to truncate'), 'This is a string to truncate');
$this->assertEquals(Utils::truncate('This is a string to truncate', 3, true), 'This ');
$this->assertEquals('engli' . '&hellip;', Utils::truncate('english', 5));
$this->assertEquals('english', Utils::truncate('english'));
$this->assertEquals('This is a string to truncate', Utils::truncate('This is a string to truncate'));
$this->assertEquals('Th' . '&hellip;', Utils::truncate('This is a string to truncate', 2));
$this->assertEquals('engli' . '...', Utils::truncate('english', 5, true, " ", "..."));
$this->assertEquals('english', Utils::truncate('english'));
$this->assertEquals('This is a string to truncate', Utils::truncate('This is a string to truncate'));
$this->assertEquals('This ', Utils::truncate('This is a string to truncate', 3, true));
$this->assertEquals('<input ', Utils::truncate('<input type="file" id="file" multiple />', 6, true));
}
public function testSafeTruncate()
{
$this->assertEquals(Utils::safeTruncate('This is a string to truncate', 1), 'This ');
$this->assertEquals(Utils::safeTruncate('This is a string to truncate', 4), 'This ');
$this->assertEquals(Utils::safeTruncate('This is a string to truncate', 5), 'This is ');
$this->assertEquals('This ', Utils::safeTruncate('This is a string to truncate', 1));
$this->assertEquals('This ', Utils::safeTruncate('This is a string to truncate', 4));
$this->assertEquals('This is ', Utils::safeTruncate('This is a string to truncate', 5));
}
public function testTruncateHtml()
{
$this->assertEquals(Utils::truncateHtml('<p>This is a string to truncate</p>', 1), '<p>T…</p>');
$this->assertEquals(Utils::truncateHtml('<p>This is a string to truncate</p>', 4), '<p>This…</p>');
$this->assertEquals('<p>T…</p>', Utils::truncateHtml('<p>This is a string to truncate</p>', 1));
$this->assertEquals('<p>This…</p>', Utils::truncateHtml('<p>This is a string to truncate</p>', 4));
$this->assertEquals('', Utils::truncateHtml('<input type="file" id="file" multiple />', 6, true));
}
public function testSafeTruncateHtml()
{
$this->assertEquals(Utils::safeTruncateHtml('<p>This is a string to truncate</p>', 1), '<p>This…</p>');
$this->assertEquals(Utils::safeTruncateHtml('<p>This is a string to truncate</p>', 4), '<p>This…</p>');
$this->assertEquals('<p>This…</p>', Utils::safeTruncateHtml('<p>This is a string to truncate</p>', 1));
$this->assertEquals('<p>This…</p>', Utils::safeTruncateHtml('<p>This is a string to truncate</p>', 4));
}
public function testGenerateRandomString()
@@ -143,21 +147,21 @@ class UtilsTest extends \Codeception\TestCase\Test
public function testGetMimeType()
{
$this->assertEquals(Utils::getMimeType(''), 'application/octet-stream');
$this->assertEquals(Utils::getMimeType('jpg'), 'image/jpeg');
$this->assertEquals(Utils::getMimeType('png'), 'image/png');
$this->assertEquals(Utils::getMimeType('txt'), 'text/plain');
$this->assertEquals(Utils::getMimeType('doc'), 'application/msword');
$this->assertEquals('application/octet-stream', Utils::getMimeType(''));
$this->assertEquals('image/jpeg', Utils::getMimeType('jpg'));
$this->assertEquals('image/png', Utils::getMimeType('png'));
$this->assertEquals('text/plain', Utils::getMimeType('txt'));
$this->assertEquals('application/msword', Utils::getMimeType('doc'));
}
public function testNormalizePath()
{
$this->assertEquals(Utils::normalizePath('/test'), '/test');
$this->assertEquals(Utils::normalizePath('test'), 'test');
$this->assertEquals(Utils::normalizePath('../test'), 'test');
$this->assertEquals(Utils::normalizePath('/../test'), '/test');
$this->assertEquals(Utils::normalizePath('/test/../test2'), '/test2');
$this->assertEquals(Utils::normalizePath('/test/./test2'), '/test/test2');
$this->assertEquals('/test', Utils::normalizePath('/test'));
$this->assertEquals('test', Utils::normalizePath('test'));
$this->assertEquals('test', Utils::normalizePath('../test'));
$this->assertEquals('/test', Utils::normalizePath('/../test'));
$this->assertEquals('/test2', Utils::normalizePath('/test/../test2'));
$this->assertEquals('/test/test2', Utils::normalizePath('/test/./test2'));
}
public function testIsFunctionDisabled()
@@ -191,7 +195,7 @@ class UtilsTest extends \Codeception\TestCase\Test
$this->assertContainsOnly('string', $array);
$this->assertFalse(isset($array['test']));
$this->assertTrue(isset($array['test2']));
$this->assertEquals($array['test2'], 'test2');
$this->assertEquals('test2', $array['test2']);
}
public function testPathPrefixedByLangCode()
@@ -227,7 +231,7 @@ class UtilsTest extends \Codeception\TestCase\Test
]
];
$this->assertEquals(Utils::resolve($array, 'test.test2'), 'test2Value');
$this->assertEquals('test2Value', Utils::resolve($array, 'test.test2'));
}
public function testIsPositive()