Remove trailing whitespace in all unit tests

This commit is contained in:
Kijin Sung 2023-01-30 21:48:09 +09:00
parent 37b0d3a1e6
commit 3b77781d15
40 changed files with 840 additions and 840 deletions

View file

@ -1,2 +1,2 @@
<?php
// Here you can initialize variables that will be available to your tests
// Here you can initialize variables that will be available to your tests

View file

@ -62,11 +62,11 @@ class ContextTest extends \Codeception\TestCase\Test
$this->assertEquals(Context::getBodyClass(), ' class="red green blue"');
Context::addBodyClass('yellow');
$this->assertEquals(Context::getBodyClassList(), ['red', 'green', 'blue', 'yellow']);
// remove class manually
Context::removeBodyClass('yellow');
$this->assertEquals(Context::getBodyClassList(), ['red', 'green', 'blue']);
// remove duplicated class
Context::addBodyClass('red');
$this->assertEquals(Context::getBodyClass(), ' class="red green blue"');
@ -84,7 +84,7 @@ class ContextTest extends \Codeception\TestCase\Test
Context::setRequestArguments();
$this->assertEquals('GET', Context::getRequestMethod());
$this->assertEquals('bar', Context::getRequestVars()->foo);
$_SERVER['REQUEST_METHOD'] = 'GET';
$_GET = array('foo' => 'barrr', 'xe_js_callback' => 'callback12345');
$_POST = array();
@ -95,7 +95,7 @@ class ContextTest extends \Codeception\TestCase\Test
Context::setRequestArguments();
$this->assertEquals('JS_CALLBACK', Context::getRequestMethod());
$this->assertEquals('barrr', Context::getRequestVars()->foo);
$_SERVER['REQUEST_METHOD'] = 'POST';
$_GET = $_REQUEST = array('foo' => 'bazz'); // Request method is POST but actual values are given as GET
$_POST = array();
@ -106,7 +106,7 @@ class ContextTest extends \Codeception\TestCase\Test
$this->assertEquals('POST', Context::getRequestMethod());
$this->assertNull(Context::getRequestVars()->foo ?? null);
$this->assertNull(Context::get('foo')); // This is different from XE behavior
$_SERVER['REQUEST_METHOD'] = 'POST';
$_GET = array();
$_POST = $_REQUEST = array('foo' => 'rhymixtest');
@ -116,7 +116,7 @@ class ContextTest extends \Codeception\TestCase\Test
Context::setRequestArguments();
$this->assertEquals('POST', Context::getRequestMethod());
$this->assertEquals('rhymixtest', Context::getRequestVars()->foo);
$_SERVER['REQUEST_METHOD'] = 'POST';
$_GET = $_POST = $_REQUEST = array();
$GLOBALS['HTTP_RAW_POST_DATA'] = '<?xml version="1.0" encoding="utf-8" ?><methodCall><params><foo>TestRhymix</foo></params></methodCall>';
@ -126,7 +126,7 @@ class ContextTest extends \Codeception\TestCase\Test
Context::setRequestArguments();
$this->assertEquals('XMLRPC', Context::getRequestMethod());
$this->assertEquals('TestRhymix', Context::getRequestVars()->foo);
$_SERVER['REQUEST_METHOD'] = 'POST';
$_GET = $_POST = $_REQUEST = array();
$GLOBALS['HTTP_RAW_POST_DATA'] = 'foo=JSON_TEST'; // Not actual JSON
@ -137,7 +137,7 @@ class ContextTest extends \Codeception\TestCase\Test
Context::setRequestArguments();
$this->assertEquals('JSON', Context::getRequestMethod());
$this->assertEquals('JSON_TEST', Context::getRequestVars()->foo);
Context::setRequestMethod('POST');
$_GET = $_POST = $_REQUEST = array();
unset($GLOBALS['HTTP_RAW_POST_DATA']);
@ -147,7 +147,7 @@ class ContextTest extends \Codeception\TestCase\Test
Context::setRequestMethod();
Context::setRequestArguments();
$this->assertEquals('POST', Context::getRequestMethod());
Context::setRequestMethod('POST');
$_GET = array();
$_POST = $_REQUEST = array('foo' => 'legacy', '_rx_ajax_compat' => 'XMLRPC');
@ -160,20 +160,20 @@ class ContextTest extends \Codeception\TestCase\Test
$this->assertEquals('XMLRPC', Context::getRequestMethod());
$this->assertEquals('legacy', Context::getRequestVars()->foo);
}
public function testSetResponseMethod()
{
$this->assertEquals(Context::getResponseMethod(), 'HTML');
Context::setRequestMethod('JSON');
$this->assertEquals(Context::getResponseMethod(), 'JSON');
Context::setResponseMethod('WRONG_TYPE');
$this->assertEquals(Context::getResponseMethod(), 'HTML');
Context::setResponseMethod('XMLRPC');
$this->assertEquals(Context::getResponseMethod(), 'XMLRPC');
Context::setResponseMethod('HTML');
$this->assertEquals(Context::getResponseMethod(), 'HTML');
}

View file

@ -20,19 +20,19 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
FrontEndFileHandler::$minify = 'none';
FrontEndFileHandler::$concat = 'none';
}
public function _after()
{
HTMLDisplayHandler::$reservedCSS = $this->reservedCSS;
HTMLDisplayHandler::$reservedJS = $this->reservedJS;
}
public function _failed()
{
HTMLDisplayHandler::$reservedCSS = $this->reservedCSS;
HTMLDisplayHandler::$reservedJS = $this->reservedJS;
}
public function testJsHead()
{
$handler = new FrontEndFileHandler();
@ -44,7 +44,7 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
$expected[] = array('file' => $this->baseurl . 'common/js/common.js' . $this->_filemtime('common/js/common.js'));
$this->assertEquals($expected, $handler->getJsFileList());
}
public function testJsBody()
{
$handler = new FrontEndFileHandler();
@ -53,7 +53,7 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
$expected[] = array('file' => $this->baseurl . 'common/js/xml_handler.js' . $this->_filemtime('common/js/xml_handler.js'));
$this->assertEquals($expected, $handler->getJsFileList('body'));
}
public function testDefaultScss()
{
$handler = new FrontEndFileHandler();
@ -81,7 +81,7 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
$expected[] = array('file' => $this->baseurl . 'common/js/xml_js_filter.js' . $this->_filemtime('common/js/xml_js_filter.js'));
$this->assertEquals($expected, $handler->getJsFileList());
}
public function testRedefineOrder()
{
$handler = new FrontEndFileHandler();
@ -95,7 +95,7 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
$expected[] = array('file' => $this->baseurl . 'common/js/xml_handler.js' . $this->_filemtime('common/js/xml_handler.js'));
$this->assertEquals($expected, $handler->getJsFileList());
}
public function testUnload()
{
$handler = new FrontEndFileHandler();
@ -124,7 +124,7 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
$expected[] = array('file' => '//external.host/js/script2.js');
$this->assertEquals($expected, $handler->getJsFileList());
}
public function testExternalFile2()
{
$handler = new FrontEndFileHandler();
@ -134,7 +134,7 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
$expected[] = array('file' => '//external.host/js/script.js');
$this->assertEquals($expected, $handler->getJsFileList());
}
public function testExternalFile3()
{
$handler = new FrontEndFileHandler();
@ -147,7 +147,7 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
$expected[] = array('file' => 'https://external.host/css/style3.css?foo=bar&t=123', 'media'=>'all');
$this->assertEquals($expected, $handler->getCssFileList());
}
public function testExternalFile4()
{
$handler = new FrontEndFileHandler();
@ -196,7 +196,7 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
$expected[] = array('file' => $this->baseurl . 'common/css/common.css', 'media' => 'all');
$this->assertEquals($expected, $handler->getCssFileList());
}
public function testMedia()
{
$handler = new FrontEndFileHandler();
@ -213,27 +213,27 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
public function testMinify()
{
FrontEndFileHandler::$minify = 'all';
$handler = new FrontEndFileHandler();
$handler->loadFile(array('./common/css/rhymix.scss'));
$result = $handler->getCssFileList(true);
$this->assertRegexp('/\.rhymix\.scss\.min\.css\b/', $result[0]['file']);
$this->assertEquals('all', $result[0]['media']);
$this->assertTrue(empty($result[0]['targetie']));
$handler = new FrontEndFileHandler();
$handler->loadFile(array('./common/js/common.js', 'head'));
$result = $handler->getJsFileList('head', true);
$this->assertRegexp('/minified\/common\.js\.common\.min\.js\?\d+$/', $result[0]['file']);
$this->assertTrue(empty($result[0]['targetie']));
FrontEndFileHandler::$minify = 'none';
}
public function testConcat()
{
FrontEndFileHandler::$concat = 'css';
$handler = new FrontEndFileHandler();
$handler->loadFile(array('./common/css/rhymix.scss'));
$handler->loadFile(array('./common/css/bootstrap-responsive.css'));
@ -250,9 +250,9 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
//$this->assertEquals('IE', $result[1]['targetie']);
$this->assertEquals('http://external.host/style.css', $result[1]['file']);
$this->assertRegexp('/combined\/[0-9a-f]+\.css\?\d+$/', $result[2]['file']);
FrontEndFileHandler::$concat = 'js';
$handler = new FrontEndFileHandler();
$handler->loadFile(array('./common/js/common.js', 'head'));
$handler->loadFile(array('./common/js/debug.js', 'head'));
@ -267,15 +267,15 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
$this->assertRegexp('/combined\/[0-9a-f]+\.js\?\d+$/', $result[0]['file']);
$this->assertEquals('//external.host/js/script.js', $result[1]['file']);
$this->assertRegexp('/combined\/[0-9a-f]+\.js\?\d+$/', $result[2]['file']);
FrontEndFileHandler::$concat = 'none';
}
public function testBlockedScripts()
{
HTMLDisplayHandler::$reservedCSS = $this->reservedCSS;
HTMLDisplayHandler::$reservedJS = $this->reservedJS;
$handler = new FrontEndFileHandler();
$handler->loadFile(array('./common/css/xe.min.css'));
$handler->loadFile(array('./common/js/common.js'));

View file

@ -6,7 +6,7 @@ class OldSecurityTest extends \Codeception\TestCase\Test
{
$this->_reset();
}
protected function _reset()
{
/**

View file

@ -9,7 +9,7 @@ class TemplateHandlerTest extends \Codeception\TestCase\Test
{
$this->baseurl = '/' . basename(dirname(dirname(dirname(__DIR__)))) . '/';
}
public function testParse()
{
$tests = array(

View file

@ -15,12 +15,12 @@ class ValidatorTest extends \Codeception\TestCase\Test
{
Rhymix\Framework\Storage::deleteDirectory(__DIR__ . '/validator/ruleset', true);
}
public function _failed()
{
Rhymix\Framework\Storage::deleteDirectory(__DIR__ . '/validator/ruleset', true);
}
public function testRequired()
{
$vd = new Validator();

View file

@ -8,27 +8,27 @@ class CacheTest extends \Codeception\TestCase\Test
{
Rhymix\Framework\Config::set('crypto.authentication_key', Rhymix\Framework\Security::getRandom(64, 'alnum'));
}
$driver = Rhymix\Framework\Cache::init(array('dummy'));
}
public function _after()
{
$driver = Rhymix\Framework\Cache::clearAll();
}
public function testInit()
{
$driver = Rhymix\Framework\Cache::init(array('type' => 'dummy'));
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\Dummy);
$driver = Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\SQLite);
$driver = Rhymix\Framework\Cache::init(array());
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\Dummy);
}
public function testGetSupportedDrivers()
{
$drivers = Rhymix\Framework\Cache::getSupportedDrivers();
@ -37,79 +37,79 @@ class CacheTest extends \Codeception\TestCase\Test
$this->assertFalse(in_array('file', $drivers));
$this->assertContains('sqlite', $drivers);
}
public function testGetDriverName()
{
$driver = Rhymix\Framework\Cache::init(array('type' => 'dummy'));
$this->assertEquals('dummy', Rhymix\Framework\Cache::getDriverName());
$driver = Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
$this->assertEquals('sqlite', Rhymix\Framework\Cache::getDriverName());
}
public function testGetDriverInstance()
{
$driver = Rhymix\Framework\Cache::getDriverInstance('dummy');
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\Dummy);
$driver = Rhymix\Framework\Cache::getDriverInstance();
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\File);
}
public function testGetPrefix()
{
$prefix = Rhymix\Framework\Cache::getPrefix();
$this->assertEquals(\RX_VERSION . ':', $prefix);
}
public function testGetSet()
{
$value = true;
$this->assertTrue(Rhymix\Framework\Cache::set('foobar1', $value));
$this->assertTrue(Rhymix\Framework\Cache::get('foobar1'));
$value = false;
$this->assertTrue(Rhymix\Framework\Cache::set('foobar2', $value));
$this->assertFalse(Rhymix\Framework\Cache::get('foobar2'));
$value = 1756234;
$this->assertTrue(Rhymix\Framework\Cache::set('foobar3', $value));
$this->assertEquals($value, Rhymix\Framework\Cache::get('foobar3'));
$value = 'Rhymix is a PHP CMS.';
$this->assertTrue(Rhymix\Framework\Cache::set('foobar4', $value));
$this->assertEquals($value, Rhymix\Framework\Cache::get('foobar4'));
$value = array('foo' => 'bar', 'rhy' => 'mix');
$this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:5', $value));
$this->assertEquals($value, Rhymix\Framework\Cache::get('foobar:subkey:5'));
$value = (object)array('foo' => 'bar', 'rhy' => 'mix');
$this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:6', $value));
$this->assertEquals($value, Rhymix\Framework\Cache::get('foobar:subkey:6'));
$this->assertNull(Rhymix\Framework\Cache::get('foobar7'));
$this->assertNull(Rhymix\Framework\Cache::get('foobar:subkey:8'));
}
public function testDeleteAndExists()
{
Rhymix\Framework\Cache::set('foo', 'FOO');
Rhymix\Framework\Cache::set('bar', 'BAR');
$this->assertTrue(Rhymix\Framework\Cache::delete('foo'));
$this->assertFalse(Rhymix\Framework\Cache::delete('foo'));
$this->assertFalse(Rhymix\Framework\Cache::exists('foo'));
$this->assertTrue(Rhymix\Framework\Cache::exists('bar'));
}
public function testIncrDecr()
{
Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
Rhymix\Framework\Cache::set('foo', 'foo');
Rhymix\Framework\Cache::set('bar', 42);
$prefix = Rhymix\Framework\Cache::getPrefix();
$this->assertEquals(1, Rhymix\Framework\Cache::getDriverInstance()->incr($prefix . 'foo', 1));
$this->assertEquals(8, Rhymix\Framework\Cache::getDriverInstance()->incr($prefix . 'foo', 7));
$this->assertEquals(-7, Rhymix\Framework\Cache::decr('foo', 15));
@ -117,7 +117,7 @@ class CacheTest extends \Codeception\TestCase\Test
$this->assertEquals(60, Rhymix\Framework\Cache::incr('bar', 15));
$this->assertEquals(20, Rhymix\Framework\Cache::getDriverInstance()->incr($prefix . 'bar', -40));
}
public function testClearAll()
{
$this->assertTrue(Rhymix\Framework\Cache::set('foo', 'foo'));
@ -125,30 +125,30 @@ class CacheTest extends \Codeception\TestCase\Test
$this->assertTrue(Rhymix\Framework\Cache::clearAll());
$this->assertFalse(Rhymix\Framework\Cache::exists('foo'));
}
public function testCacheGroups()
{
Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
$prefix = Rhymix\Framework\Cache::getPrefix();
$this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:1234', 'rhymix'));
$this->assertTrue(Rhymix\Framework\Cache::exists('foobar:subkey:1234'));
$this->assertEquals('rhymix', Rhymix\Framework\Cache::get('foobar:subkey:1234'));
$this->assertEquals('rhymix', Rhymix\Framework\Cache::getDriverInstance()->get($prefix . 'foobar#0:subkey:1234'));
$this->assertEquals(0, Rhymix\Framework\Cache::getGroupVersion('foobar'));
$this->assertTrue(Rhymix\Framework\Cache::clearGroup('foobar'));
$this->assertFalse(Rhymix\Framework\Cache::exists('foobar:subkey:1234'));
$this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:1234', 'rhymix'));
$this->assertEquals('rhymix', Rhymix\Framework\Cache::getDriverInstance()->get($prefix . 'foobar#1:subkey:1234'));
$this->assertEquals(1, Rhymix\Framework\Cache::getGroupVersion('foobar'));
}
public function testGetRealKey()
{
Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
$prefix = Rhymix\Framework\Cache::getPrefix();
$this->assertEquals($prefix . 'foo', Rhymix\Framework\Cache::getRealKey('foo'));
$this->assertEquals($prefix . 'bar#0:2016', Rhymix\Framework\Cache::getRealKey('bar:2016'));
Rhymix\Framework\Cache::clearGroup('bar');
@ -156,34 +156,34 @@ class CacheTest extends \Codeception\TestCase\Test
Rhymix\Framework\Cache::clearGroup('bar');
$this->assertEquals($prefix . 'bar#2:2016', Rhymix\Framework\Cache::getRealKey('bar:2016'));
}
public function testCompatibility()
{
Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
$ch = \CacheHandler::getInstance();
$this->assertTrue($ch instanceof \CacheHandler);
$this->assertTrue($ch->isSupport());
$this->assertEquals('rhymix', $ch->getCacheKey('rhymix'));
$this->assertEquals('rhymix:123:456', $ch->getCacheKey('rhymix:123:456'));
$this->assertTrue($ch->put('rhymix', 'foo bar buzz'));
$this->assertEquals('foo bar buzz', $ch->get('rhymix'));
$this->assertTrue($ch->isValid('rhymix'));
$this->assertTrue($ch->delete('rhymix'));
$this->assertFalse($ch->get('rhymix'));
$this->assertFalse($ch->isValid('rhymix'));
$this->assertEquals('rhymix:123:456', $ch->getGroupKey('rhymix', '123:456'));
$this->assertTrue($ch->put('rhymix:123:456', 'rhymix rules!'));
$this->assertEquals('rhymix rules!', $ch->get('rhymix:123:456'));
$this->assertEquals(0, Rhymix\Framework\Cache::getGroupVersion('rhymix'));
$this->assertTrue($ch->invalidateGroupKey('rhymix'));
$this->assertTrue($ch->put('rhymix:123:456', 'rhymix rules!'));
$this->assertEquals('rhymix rules!', $ch->get('rhymix:123:456'));
$this->assertEquals(1, Rhymix\Framework\Cache::getGroupVersion('rhymix'));
$this->assertTrue($ch->truncate());
$this->assertFalse($ch->get('rhymix:123:456'));
}

View file

@ -36,7 +36,7 @@ class CalendarTest extends \Codeception\TestCase\Test
array(23, 24, 25, 26, 27, 28, 29),
array(30, 31, null, null, null, null, null),
);
$target_201603 = array(
array(null, null, 1, 2, 3, 4, 5),
array(6, 7, 8, 9, 10, 11, 12),
@ -45,7 +45,7 @@ class CalendarTest extends \Codeception\TestCase\Test
array(27, 28, 29, 30, 31, null, null),
array(null, null, null, null, null, null, null),
);
$this->assertEquals($target_201508, Rhymix\Framework\Calendar::getMonthCalendar(8, 2015));
$this->assertEquals($target_201603, Rhymix\Framework\Calendar::getMonthCalendar(3, 2016));
}

View file

@ -9,16 +9,16 @@ class ConfigTest extends \Codeception\TestCase\Test
mkdir(RX_BASEDIR . 'files/config', 0755, true);
copy(RX_BASEDIR . 'common/defaults/config.php', RX_BASEDIR . 'files/config/config.php');
}
Rhymix\Framework\Config::init();
$this->assertTrue(version_compare(Rhymix\Framework\Config::get('config_version'), '2.0', '>='));
$this->assertTrue(is_array(Rhymix\Framework\Config::get('db.master')));
$this->assertNotEmpty(Rhymix\Framework\Config::get('db.master.host'));
Rhymix\Framework\Config::set('foo.bar', $rand = mt_rand());
$this->assertEquals(array('bar' => $rand), Rhymix\Framework\Config::get('foo'));
$this->assertEquals($rand, Rhymix\Framework\Config::get('foo.bar'));
$var = array('foo' => 'bar');
$serialized = "array(\n\t'foo' => 'bar',\n)";
$this->assertEquals($serialized, Rhymix\Framework\Config::serialize($var));

View file

@ -7,7 +7,7 @@ class DBTest extends \Codeception\TestCase\Test
$oDB = Rhymix\Framework\DB::getInstance();
$oDB->setDebugComment(false);
}
public function testGetInstance()
{
$oDB = Rhymix\Framework\DB::getInstance();
@ -15,12 +15,12 @@ class DBTest extends \Codeception\TestCase\Test
$this->assertTrue($oDB->isConnected());
$this->assertTrue($oDB->getHandle() instanceof Rhymix\Framework\Helpers\DBHelper);
}
public function testPrepare()
{
$oDB = Rhymix\Framework\DB::getInstance();
$prefix = Rhymix\Framework\Config::get('db.master.prefix');
$stmt = $oDB->prepare('SELECT * FROM documents WHERE document_srl = ?');
$this->assertTrue($stmt instanceof Rhymix\Framework\Helpers\DBStmtHelper);
if ($prefix)
@ -31,19 +31,19 @@ class DBTest extends \Codeception\TestCase\Test
{
$this->assertEquals('SELECT * FROM documents WHERE document_srl = ?', $stmt->queryString);
}
$this->assertTrue($stmt->execute([123]));
$this->assertTrue($stmt->execute([456]));
$this->assertTrue($stmt->execute([789]));
$this->assertTrue(is_array($stmt->fetchAll()));
$this->assertTrue($stmt->closeCursor());
}
public function testQuery()
{
$oDB = Rhymix\Framework\DB::getInstance();
$prefix = Rhymix\Framework\Config::get('db.master.prefix');
$stmt = $oDB->query('SELECT * FROM documents WHERE document_srl = 123');
$this->assertTrue($stmt instanceof Rhymix\Framework\Helpers\DBStmtHelper);
if ($prefix)
@ -54,10 +54,10 @@ class DBTest extends \Codeception\TestCase\Test
{
$this->assertEquals('SELECT * FROM documents WHERE document_srl = 123', $stmt->queryString);
}
$this->assertTrue(is_array($stmt->fetchAll()));
$this->assertTrue($stmt->closeCursor());
$stmt = $oDB->query('SELECT * FROM documents WHERE document_srl = ?', [123]);
$this->assertTrue($stmt instanceof Rhymix\Framework\Helpers\DBStmtHelper);
if ($prefix)
@ -68,10 +68,10 @@ class DBTest extends \Codeception\TestCase\Test
{
$this->assertEquals('SELECT * FROM documents WHERE document_srl = ?', $stmt->queryString);
}
$this->assertTrue(is_array($stmt->fetchAll()));
$this->assertTrue($stmt->closeCursor());
$stmt = $oDB->query('SELECT * FROM documents WHERE document_srl = ? AND status = ?', 123, 'PUBLIC');
$this->assertTrue($stmt instanceof Rhymix\Framework\Helpers\DBStmtHelper);
if ($prefix)
@ -82,48 +82,48 @@ class DBTest extends \Codeception\TestCase\Test
{
$this->assertEquals('SELECT * FROM documents WHERE document_srl = ? AND status = ?', $stmt->queryString);
}
$this->assertTrue(is_array($stmt->fetchAll()));
$this->assertTrue($stmt->closeCursor());
}
public function testAddPrefixes()
{
$oDB = Rhymix\Framework\DB::getInstance();
$prefix = Rhymix\Framework\Config::get('db.master.prefix');
$source = 'SELECT a, b, c FROM documents JOIN comments ON documents.document_srl = comment.document_srl WHERE documents.member_srl = ?';
$target = 'SELECT a, b, c FROM `' . $prefix . 'documents` AS `documents` JOIN `' . $prefix . 'comments` AS `comments` ' .
'ON documents.document_srl = comment.document_srl WHERE documents.member_srl = ?';
$this->assertEquals($target, $oDB->addPrefixes($source));
$source = 'SELECT a AS aa FROM documents as foo JOIN bar ON documents.a = bar.a';
$target = 'SELECT a AS aa FROM `' . $prefix . 'documents` AS `foo` JOIN `' . $prefix . 'bar` AS `bar` ON documents.a = bar.a';
$this->assertEquals($target, $oDB->addPrefixes($source));
$source = 'INSERT INTO documents (a, b, c) VALUES (?, ?, ?)';
$target = 'INSERT INTO `' . $prefix . 'documents` (a, b, c) VALUES (?, ?, ?)';
$this->assertEquals($target, $oDB->addPrefixes($source));
$source = 'INSERT INTO documents (a, b, c) SELECT d, e, f FROM old_documents WHERE g = ?';
$target = 'INSERT INTO `' . $prefix . 'documents` (a, b, c) SELECT d, e, f FROM `' . $prefix . 'old_documents` AS `old_documents` WHERE g = ?';
$this->assertEquals($target, $oDB->addPrefixes($source));
$source = 'UPDATE documents SET a = ?, b = ? WHERE c = ?';
$target = 'UPDATE `' . $prefix . 'documents` SET a = ?, b = ? WHERE c = ?';
$this->assertEquals($target, $oDB->addPrefixes($source));
$source = 'DELETE FROM documents WHERE d = ?';
$target = 'DELETE FROM `' . $prefix . 'documents` WHERE d = ?';
$this->assertEquals($target, $oDB->addPrefixes($source));
$source = 'update documents set a = ?, b = ? where c = ?';
$this->assertEquals($source, $oDB->addPrefixes($source));
$source = 'delete from documents where d = ?';
$this->assertEquals($source, $oDB->addPrefixes($source));
}
public function testIsTableColumnIndexExists()
{
$oDB = Rhymix\Framework\DB::getInstance();
@ -134,7 +134,7 @@ class DBTest extends \Codeception\TestCase\Test
$this->assertFalse($oDB->isColumnExists('documents', 'document_nx'));
$this->assertFalse($oDB->isIndexExists('documents', 'idx_regex'));
}
public function testGetColumnInfo()
{
$oDB = Rhymix\Framework\DB::getInstance();
@ -146,7 +146,7 @@ class DBTest extends \Codeception\TestCase\Test
$this->assertNull($info->default_value);
$this->assertTrue($info->notnull);
}
public function testIsValidOldPassword()
{
$oDB = Rhymix\Framework\DB::getInstance();
@ -160,7 +160,7 @@ class DBTest extends \Codeception\TestCase\Test
$this->assertFalse($oDB->isValidOldPassword($password, $saved3));
$this->assertFalse($oDB->isValidOldPassword($password, $saved4));
}
public function testAddQuotes()
{
$oDB = Rhymix\Framework\DB::getInstance();

View file

@ -3,7 +3,7 @@
class DateTimeTest extends \Codeception\TestCase\Test
{
private $old_timezone;
public function _before()
{
// Add some dummy data to system configuration. Asia/Seoul offset is 32400.
@ -11,191 +11,191 @@ class DateTimeTest extends \Codeception\TestCase\Test
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
Context::getInstance();
Context::set('_default_timezone', $GLOBALS['_time_zone'] = 'Asia/Seoul');
// Set PHP time zone to the internal time zone.
$this->old_timezone = @date_default_timezone_get();
date_default_timezone_set('Etc/GMT-3');
}
public function _after()
{
// Restore the default and internal timezone.
Rhymix\Framework\Config::set('locale.default_timezone', 'Asia/Seoul');
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
Context::set('_default_timezone', $GLOBALS['_time_zone'] = 'Asia/Seoul');
// Restore the old timezone.
date_default_timezone_set($this->old_timezone);
}
public function testZgap()
{
// Test zgap() when the current user's time zone is different from the system default.
$_SESSION['RHYMIX']['timezone'] = 'Etc/UTC';
$this->assertEquals(-10800, zgap());
// Test zgap() when the current user's time zone is the same as the system default.
unset($_SESSION['RHYMIX']['timezone']);
$this->assertEquals(21600, zgap());
}
public function testZtime()
{
$timestamp = 1454000000;
// Test ztime() when the internal time zone is different from the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
$this->assertEquals($timestamp, ztime('20160128195320'));
// Test ztime() when the internal time zone is the same as the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
$this->assertEquals($timestamp, ztime('20160129015320'));
// Restore the internal timezone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
}
public function testZtimeDateOnly()
{
$timestamp = -271641600;
// Test ztime() when the internal time zone is different from the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
$this->assertEquals($timestamp, ztime('19610524'));
// Test ztime() when the internal time zone is the same as the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
$this->assertEquals($timestamp, ztime('19610524'));
// Restore the internal timezone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
}
public function testZdate()
{
$expected = '2016-01-29 01:53:20';
// Test zdate() when the internal time zone is different from the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
$this->assertEquals($expected, zdate('20160128195320'));
$this->assertEquals($expected, zdate('2016-01-28 19:53:20'));
$this->assertEquals($expected, zdate('2016-01-28T23:53:20-07:00'));
$this->assertEquals($expected, zdate('2016-01-28 21:23:20+04:30'));
// Test zdate() when the internal time zone is the same as the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
$this->assertEquals($expected, zdate('20160129015320'));
$this->assertEquals($expected, zdate('2016-01-29 01:53:20'));
$this->assertEquals($expected, zdate('2016-01-29 05:53:20+13:00'));
$this->assertEquals($expected, zdate('2016-01-28T20:53:20+04:00'));
// Restore the internal timezone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
}
public function testZdateDateOnly()
{
// Korea Standard Time was UTC+08:30 until 1961
$expected = '1960-04-19 08:30:00';
// Test zdate() when the internal time zone is different from the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
$this->assertEquals($expected, zdate('19600419', 'Y-m-d H:i:s'));
// Test zdate() when the internal time zone is the same as the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
$this->assertEquals($expected, zdate('19600419', 'Y-m-d H:i:s'));
// Restore the internal timezone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
}
public function testGetInternalDateTime()
{
$timestamp = 1454000000;
// Test when the internal time zone is different from the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
$this->assertEquals('20160128195320', getInternalDateTime($timestamp));
// Test when the internal time zone is the same as the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
$this->assertEquals('20160129015320', getInternalDateTime($timestamp));
}
public function testGetDisplayDateTime()
{
$timestamp = 1454000000;
// Test when the display time zone is different from the internal time zone.
$_SESSION['RHYMIX']['timezone'] = 'America/Los_Angeles';
$this->assertEquals('20160128085320', getDisplayDateTime($timestamp));
// Test when the display time zone is the same as the internal time zone.
$_SESSION['RHYMIX']['timezone'] = 'Etc/GMT-3';
$this->assertEquals('20160128195320', getDisplayDateTime($timestamp));
}
public function testGetTimeGap()
{
$GLOBALS['lang'] = Rhymix\Framework\Lang::getInstance('en');
$GLOBALS['lang']->loadPlugin('common');
// Test getTimeGap() when the internal time zone is different from the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
$this->assertEquals('1 minute ago', getTimeGap(getInternalDateTime(RX_TIME - 30)));
$this->assertEquals('30 minutes ago', getTimeGap(getInternalDateTime(RX_TIME - 1800)));
$this->assertEquals('2 hours ago', getTimeGap(getInternalDateTime(RX_TIME - 8000)));
// Test getTimeGap() when the internal time zone is the same as the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
$this->assertEquals('30 minutes ago', getTimeGap(getInternalDateTime(RX_TIME - 1800)));
$this->assertEquals('2 hours ago', getTimeGap(getInternalDateTime(RX_TIME - 8000)));
$this->assertEquals(getInternalDateTime(RX_TIME - 240000, 'Y.m.d'), getTimeGap(getInternalDateTime(RX_TIME - 240000)));
}
public function testGetTimezoneForCurrentUser()
{
// Test when the current user's time zone is different from the system default.
$_SESSION['RHYMIX']['timezone'] = 'Pacific/Auckland';
$this->assertEquals('Pacific/Auckland', Rhymix\Framework\DateTime::getTimezoneForCurrentUser());
// Test when the current user's time zone is the same as the system default.
unset($_SESSION['RHYMIX']['timezone']);
$this->assertEquals('Asia/Seoul', Rhymix\Framework\DateTime::getTimezoneForCurrentUser());
}
public function testFormatTimestampForCurrentUser()
{
$timestamp_winter = 1454000000;
$timestamp_summer = $timestamp_winter - (86400 * 184);
// Test when the current user's time zone is in the Northern hemisphere with DST.
$_SESSION['RHYMIX']['timezone'] = 'America/Chicago';
$this->assertEquals('20160128 105320', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_winter));
$this->assertEquals('20150728 115320', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_summer));
$this->assertEquals('20150728 115320', getDisplayDateTime($timestamp_summer, 'Ymd His'));
// Test when the current user's time zone is in the Southern hemisphere with DST.
$_SESSION['RHYMIX']['timezone'] = 'Pacific/Auckland';
$this->assertEquals('20160129 055320', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_winter));
$this->assertEquals('20150729 045320', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_summer));
$this->assertEquals('20150729 045320', getDisplayDateTime($timestamp_summer, 'Ymd His'));
// Test when the current user's time zone is the same as the system default without DST.
unset($_SESSION['RHYMIX']['timezone']);
$this->assertEquals('20160129 015320', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_winter));
$this->assertEquals('20150729 015320', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_summer));
$this->assertEquals('20150729 015320', getDisplayDateTime($timestamp_summer, 'Ymd His'));
}
public function testGetTimezoneList()
{
$tzlist = Rhymix\Framework\DateTime::getTimezoneList();
$this->assertTrue(array_key_exists('Etc/UTC', $tzlist));
$this->assertEquals('Asia/Seoul (+09:00)', $tzlist['Asia/Seoul']);
}
public function testGetTimezoneOffset()
{
$this->assertEquals(32400, Rhymix\Framework\DateTime::getTimezoneOffset('Asia/Seoul'));
@ -204,7 +204,7 @@ class DateTimeTest extends \Codeception\TestCase\Test
$this->assertEquals(-18000, Rhymix\Framework\DateTime::getTimezoneOffset('America/New_York', strtotime('2016-01-01')));
$this->assertEquals(-14400, Rhymix\Framework\DateTime::getTimezoneOffset('America/New_York', strtotime('2015-07-01')));
}
public function testGetTimezoneOffsetFromInternal()
{
$this->assertEquals(21600, Rhymix\Framework\DateTime::getTimezoneOffsetFromInternal('Asia/Seoul'));
@ -213,7 +213,7 @@ class DateTimeTest extends \Codeception\TestCase\Test
$this->assertEquals(-28800, Rhymix\Framework\DateTime::getTimezoneOffsetFromInternal('America/New_York', strtotime('2016-01-01')));
$this->assertEquals(-25200, Rhymix\Framework\DateTime::getTimezoneOffsetFromInternal('America/New_York', strtotime('2015-07-01')));
}
public function testGetTimezoneOffsetByLegacyFormat()
{
$this->assertEquals(32400, Rhymix\Framework\DateTime::getTimezoneOffsetByLegacyFormat('+0900'));
@ -221,7 +221,7 @@ class DateTimeTest extends \Codeception\TestCase\Test
$this->assertEquals(19800, Rhymix\Framework\DateTime::getTimezoneOffsetByLegacyFormat('+0530'));
$this->assertEquals(-38700, Rhymix\Framework\DateTime::getTimezoneOffsetByLegacyFormat('-1045'));
}
public function testGetTimezoneNameByOffset()
{
$this->assertEquals('Etc/GMT-9', Rhymix\Framework\DateTime::getTimezoneNameByOffset(32400));
@ -230,22 +230,22 @@ class DateTimeTest extends \Codeception\TestCase\Test
$this->assertEquals('Asia/Kolkata', Rhymix\Framework\DateTime::getTimezoneNameByOffset(19800));
$this->assertEquals('Australia/Eucla', Rhymix\Framework\DateTime::getTimezoneNameByOffset(31500));
}
public function testGetRelativeTimestamp()
{
$GLOBALS['lang'] = Rhymix\Framework\Lang::getInstance('ko');
$GLOBALS['lang']->loadPlugin('common');
$this->assertEquals('방금', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME));
$this->assertEquals('20초 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 20));
$this->assertEquals('1분 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 60));
$this->assertEquals('30분 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 1800));
$this->assertEquals('10일 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 86400 * 10));
$this->assertEquals('6개월 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 86400 * 190));
$GLOBALS['lang'] = Rhymix\Framework\Lang::getInstance('en');
$GLOBALS['lang']->loadPlugin('common');
$this->assertEquals('just now', getInternalDateTime(RX_TIME + 3600, 'relative'));
$this->assertEquals('5 days ago', getDisplayDateTime(RX_TIME - 86400 * 5.4, 'relative'));
$this->assertEquals('3 months ago', zdate(date('YmdHis', RX_TIME - 86400 * 100), 'relative'));

View file

@ -3,14 +3,14 @@
class DebugTest extends \Codeception\TestCase\Test
{
public $error_log;
public function _before()
{
Rhymix\Framework\Debug::enable();
$this->error_log = ini_get('error_log');
ini_set('error_log', '/dev/null');
}
public function _after()
{
if ($this->error_log)
@ -32,7 +32,7 @@ class DebugTest extends \Codeception\TestCase\Test
Rhymix\Framework\Debug::clearEntries();
$this->assertEquals(0, count(Rhymix\Framework\Debug::getEntries()));
}
public function testDebugError()
{
$file = __FILE__;
@ -47,7 +47,7 @@ class DebugTest extends \Codeception\TestCase\Test
Rhymix\Framework\Debug::clearErrors();
$this->assertEquals(0, count(Rhymix\Framework\Debug::getErrors()));
}
public function testDebugQuery()
{
Rhymix\Framework\Debug::addQuery(array(
@ -72,13 +72,13 @@ class DebugTest extends \Codeception\TestCase\Test
Rhymix\Framework\Debug::clearQueries();
$this->assertEquals(0, count(Rhymix\Framework\Debug::getQueries()));
}
public function testDebugTranslateFilename()
{
$original_filename = __FILE__;
$trans_filename = substr($original_filename, strlen(\RX_BASEDIR));
$this->assertEquals($trans_filename, Rhymix\Framework\Debug::translateFilename($original_filename));
$original_filename = __FILE__;
$alias_filename = $original_filename . '.foobar';
$trans_filename = substr($alias_filename, strlen(\RX_BASEDIR));

View file

@ -8,20 +8,20 @@ class FormatterTest extends \Codeception\TestCase\Test
$html1 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/text2html.target1.html');
$html2 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/text2html.target2.html');
$html3 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/text2html.target3.html');
$this->assertEquals($html1, Rhymix\Framework\Formatter::text2html($text));
$this->assertEquals($html2, Rhymix\Framework\Formatter::text2html($text, Rhymix\Framework\Formatter::TEXT_NEWLINE_AS_P));
$this->assertEquals($html3, Rhymix\Framework\Formatter::text2html($text, Rhymix\Framework\Formatter::TEXT_DOUBLE_NEWLINE_AS_P));
}
public function testHTML2Text()
{
$html = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/html2text.source.html');
$text = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/html2text.target.txt');
$this->assertEquals($text, Rhymix\Framework\Formatter::html2text($html));
}
public function testMarkdown2HTML()
{
$markdown = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/markdown2html.source.md');
@ -29,47 +29,47 @@ class FormatterTest extends \Codeception\TestCase\Test
$html2 = $this->_removeSpace(file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/markdown2html.target2.html'));
$html3 = $this->_removeSpace(file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/markdown2html.target3.html'));
$html4 = $this->_removeSpace(file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/markdown2html.target4.html'));
$this->assertEquals($html1, $this->_removeSpace(Rhymix\Framework\Formatter::markdown2html($markdown)));
$this->assertEquals($html2, $this->_removeSpace(Rhymix\Framework\Formatter::markdown2html($markdown, Rhymix\Framework\Formatter::MD_NEWLINE_AS_BR)));
$this->assertEquals($html3, $this->_removeSpace(Rhymix\Framework\Formatter::markdown2html($markdown, Rhymix\Framework\Formatter::MD_NEWLINE_AS_BR | Rhymix\Framework\Formatter::MD_ENABLE_EXTRA)));
$this->assertEquals($html4, $this->_removeSpace(Rhymix\Framework\Formatter::markdown2html($markdown, Rhymix\Framework\Formatter::MD_ENABLE_EXTRA)));
}
public function testMarkdownExtra()
{
$markdown = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/markdownextra.source.md');
$html1 = $this->_removeSpace(file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/markdownextra.target1.html'));
$html2 = $this->_removeSpace(file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/markdownextra.target2.html'));
$this->assertEquals($html1, $this->_removeSpace(Rhymix\Framework\Formatter::markdown2html($markdown)));
$this->assertEquals($html2, $this->_removeSpace(Rhymix\Framework\Formatter::markdown2html($markdown, Rhymix\Framework\Formatter::MD_ENABLE_EXTRA)));
}
public function testHTML2Markdown()
{
$html = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/html2markdown.source.html');
$markdown = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/html2markdown.target.md');
$this->assertEquals($markdown, Rhymix\Framework\Formatter::html2markdown($html));
}
public function testBBCode()
{
$bbcode = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/bbcode.source.txt');
$html = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/bbcode.target.html');
$this->assertEquals($html, Rhymix\Framework\Formatter::bbcode($bbcode));
}
public function testApplySmartQuotes()
{
$before = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/smartypants.source.html');
$after = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/smartypants.target.html');
$this->assertEquals($after, Rhymix\Framework\Formatter::applySmartQuotes($before));
}
public function testCompileLESS()
{
$sources = array(
@ -80,21 +80,21 @@ class FormatterTest extends \Codeception\TestCase\Test
'foo' => '#123456',
'bar' => '320px',
);
$real_target1 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/less.target1.css');
$real_target2 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/less.target2.css');
$test_target1 = \RX_BASEDIR . 'tests/_output/less.target1.css';
$test_target2 = \RX_BASEDIR . 'tests/_output/less.target2.css';
$this->assertTrue(Rhymix\Framework\Formatter::compileLESS($sources, $test_target1, $variables));
$this->assertEquals($real_target1, file_get_contents($test_target1));
$this->assertTrue(Rhymix\Framework\Formatter::compileLESS($sources, $test_target2, $variables, true));
$this->assertEquals($real_target2, file_get_contents($test_target2));
unlink($test_target1);
unlink($test_target2);
}
public function testCompileSCSS()
{
$sources = array(
@ -105,45 +105,45 @@ class FormatterTest extends \Codeception\TestCase\Test
'foo' => '#123456',
'bar' => '320px',
);
$real_target1 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/scss.target1.css');
$real_target2 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/scss.target2.css');
$test_target1 = \RX_BASEDIR . 'tests/_output/scss.target1.css';
$test_target2 = \RX_BASEDIR . 'tests/_output/scss.target2.css';
$this->assertTrue(Rhymix\Framework\Formatter::compileSCSS($sources, $test_target1, $variables));
$this->assertEquals($real_target1, file_get_contents($test_target1));
$this->assertTrue(Rhymix\Framework\Formatter::compileSCSS($sources, $test_target2, $variables, true));
$this->assertEquals($real_target2, file_get_contents($test_target2));
unlink($test_target1);
unlink($test_target2);
}
public function testMinifyCSS()
{
$source = \RX_BASEDIR . 'tests/_data/formatter/minify.source.css';
$real_target = \RX_BASEDIR . 'tests/_data/formatter/minify.target.css';
$test_target = \RX_BASEDIR . 'tests/_output/minify.target.css';
$this->assertTrue(Rhymix\Framework\Formatter::minifyCSS($source, $test_target));
$this->assertEquals(file_get_contents($real_target), file_get_contents($test_target));
unlink($test_target);
}
public function testMinifyJS()
{
$source = \RX_BASEDIR . 'tests/_data/formatter/minify.source.js';
$real_target = \RX_BASEDIR . 'tests/_data/formatter/minify.target.js';
$test_target = \RX_BASEDIR . 'tests/_output/minify.target.js';
$this->assertTrue(Rhymix\Framework\Formatter::minifyJS($source, $test_target));
$this->assertEquals(file_get_contents($real_target), file_get_contents($test_target));
unlink($test_target);
}
public function testConcatCSS()
{
$source1 = \RX_BASEDIR . 'tests/_data/formatter/concat.source1.css';
@ -151,14 +151,14 @@ class FormatterTest extends \Codeception\TestCase\Test
$real_target1 = \RX_BASEDIR . 'tests/_data/formatter/concat.target1.css';
$real_target2 = \RX_BASEDIR . 'tests/_data/formatter/concat.target2.css';
$test_target = \RX_BASEDIR . 'tests/_output/concat.target.css';
$test_without_media_query = Rhymix\Framework\Formatter::concatCSS(array($source1, $source2), $test_target);
$this->assertEquals(trim(file_get_contents($real_target1)), trim($test_without_media_query));
$test_with_media_query = Rhymix\Framework\Formatter::concatCSS(array(array($source1, 'screen and (max-width: 640px)'), $source2), $test_target);
$this->assertEquals(trim(file_get_contents($real_target2)), trim($test_with_media_query));
}
public function testConcatJS()
{
$source1 = \RX_BASEDIR . 'tests/_data/formatter/concat.source1.js';
@ -166,14 +166,14 @@ class FormatterTest extends \Codeception\TestCase\Test
$real_target1 = \RX_BASEDIR . 'tests/_data/formatter/concat.target1.js';
$real_target2 = \RX_BASEDIR . 'tests/_data/formatter/concat.target2.js';
$test_target = \RX_BASEDIR . 'tests/_output/concat.target.js';
$test_without_targetie = Rhymix\Framework\Formatter::concatJS(array($source1, $source2), $test_target);
$this->assertEquals(trim(file_get_contents($real_target1)), trim($test_without_targetie));
$test_with_targetie = Rhymix\Framework\Formatter::concatJS(array($source1, array($source2, '(gte IE 6) & (lte IE 8)')), $test_target);
$this->assertEquals(trim(file_get_contents($real_target2)), trim($test_with_targetie));
}
protected function _removeSpace($str)
{
return preg_replace('/\s+/', '', $str);

View file

@ -17,7 +17,7 @@ class KoreaTest extends \Codeception\TestCase\Test
$this->assertEquals('0505-9876-5432', Rhymix\Framework\Korea::formatPhoneNumber('050-5987-65432'));
$this->assertEquals('070-7432-1000', Rhymix\Framework\Korea::formatPhoneNumber('0707-432-1000'));
}
public function testIsValidPhoneNumber()
{
$this->assertTrue(Rhymix\Framework\Korea::isValidPhoneNumber('1588-0000'));
@ -39,7 +39,7 @@ class KoreaTest extends \Codeception\TestCase\Test
$this->assertFalse(Rhymix\Framework\Korea::isValidPhoneNumber('0303-1111-5432'));
$this->assertFalse(Rhymix\Framework\Korea::isValidPhoneNumber('0505-9876-543210'));
}
public function testIsValidMobilePhoneNumber()
{
$this->assertTrue(Rhymix\Framework\Korea::isValidMobilePhoneNumber('011-345-6789'));
@ -51,28 +51,28 @@ class KoreaTest extends \Codeception\TestCase\Test
$this->assertFalse(Rhymix\Framework\Korea::isValidMobilePhoneNumber('063-9876-5432'));
$this->assertFalse(Rhymix\Framework\Korea::isValidMobilePhoneNumber('070-7654-3210'));
}
public function testIsValidJuminNumber()
{
// These numbers are fake.
$this->assertTrue(Rhymix\Framework\Korea::isValidJuminNumber('123456-3456787'));
$this->assertFalse(Rhymix\Framework\Korea::isValidJuminNumber('123456-3456788'));
}
public function testIsValidCorporationNumber()
{
// These numbers are fake.
$this->assertTrue(Rhymix\Framework\Korea::isValidCorporationNumber('123456-0123453'));
$this->assertFalse(Rhymix\Framework\Korea::isValidCorporationNumber('123456-0123454'));
}
public function testIsValidBusinessNumber()
{
// These numbers are fake.
$this->assertTrue(Rhymix\Framework\Korea::isValidBusinessNumber('123-45-67891'));
$this->assertFalse(Rhymix\Framework\Korea::isValidBusinessNumber('123-45-67892'));
}
public function testIsKoreanIP()
{
// Private IP ranges.
@ -80,32 +80,32 @@ class KoreaTest extends \Codeception\TestCase\Test
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('127.0.123.45'));
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('192.168.10.1'));
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('::1'));
// Korean IP ranges.
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('115.71.233.0'));
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('114.207.12.3'));
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('2001:0320::1'));
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('2407:B800::F'));
// Foreign IP ranges.
$this->assertFalse(Rhymix\Framework\Korea::isKoreanIP('216.58.197.0'));
$this->assertFalse(Rhymix\Framework\Korea::isKoreanIP('170.14.168.0'));
$this->assertFalse(Rhymix\Framework\Korea::isKoreanIP('2001:41d0:8:e8ad::1'));
$this->assertFalse(Rhymix\Framework\Korea::isKoreanIP('2404:6800:4005:802::200e'));
}
public function testIsKoreanEmailAddress()
{
// Test Korean portals.
$this->assertTrue(Rhymix\Framework\Korea::isKoreanEmailAddress('test@naver.com'));
$this->assertTrue(Rhymix\Framework\Korea::isKoreanEmailAddress('test@hanmail.net'));
$this->assertTrue(Rhymix\Framework\Korea::isKoreanEmailAddress('test@worksmobile.com'));
// Test foreign portals.
$this->assertFalse(Rhymix\Framework\Korea::isKoreanEmailAddress('test@gmail.com'));
$this->assertFalse(Rhymix\Framework\Korea::isKoreanEmailAddress('test@hotmail.com'));
$this->assertFalse(Rhymix\Framework\Korea::isKoreanEmailAddress('test@yahoo.com'));
// Test third-party MX services.
$this->assertTrue(Rhymix\Framework\Korea::isKoreanEmailAddress('test@woorimail.com'));
$this->assertFalse(Rhymix\Framework\Korea::isKoreanEmailAddress('test@rhymix.org'));

View file

@ -10,63 +10,63 @@ class LangTest extends \Codeception\TestCase\Test
$this->assertTrue($ko instanceof Rhymix\Framework\Lang);
$this->assertTrue($en instanceof Rhymix\Framework\Lang);
$this->assertFalse($ko === $en);
// Test backward compatible language code for Japanese.
$ja = Rhymix\Framework\Lang::getInstance('ja');
$jp = Rhymix\Framework\Lang::getInstance('jp');
$this->assertTrue($ja === $jp);
// Test loading new plugins.
$this->assertNotEquals('ヘルプ', $ja->help);
$ja->loadPlugin('common');
$this->assertEquals('ヘルプ', $ja->help);
// Test simple translations with namespacing.
$this->assertEquals('도움말', $ko->get('common.help'));
$this->assertEquals('Help', $en->get('common.help'));
// Test simple translations without namespacing.
$this->assertEquals('도움말', $ko->help);
$this->assertEquals('Help', $en->help);
// Test complex translations with multidimensional arrays.
$this->assertEquals('%d분 전', $ko->get('common.time_gap.min'));
$this->assertEquals('10분 전', $ko->get('common.time_gap.min', 10));
$this->assertTrue($ko->get('common.time_gap') instanceof \ArrayObject);
$this->assertEquals('%d분 전', $ko->get('common.time_gap')->min);
// Test nonexistent keys.
$this->assertEquals('common.nonexistent', $ko->get('common.nonexistent'));
$this->assertEquals('common.nonexistent', $ko->get('common.nonexistent', 'foo', 'bar'));
$this->assertEquals('admin.help', $ko->get('admin.help'));
$this->assertEquals('admin.help', $en->get('admin.help'));
// Test setting new keys with and without namespacing.
$ko->set('foo', 'FOO!');
$this->assertEquals('FOO!', $ko->get('foo'));
$ko->set('common.foobar', 'FOOBAR!');
$this->assertEquals('FOOBAR!', $ko->get('common.foobar'));
$this->assertEquals('FOOBAR!', $ko->get('foobar'));
// Test setting new keys with multidimensional arrays.
$ko->set('common.time_gap.foobar', 'FOOBAR!');
$this->assertEquals('FOOBAR!', $ko->get('common.time_gap.foobar'));
$ko->set('common.foobar.baz', 'BAZ!');
$this->assertNotEquals('BAZ!', $ko->get('common.foobar.baz'));
// Test fallback to English.
$en->only_in_english = 'Hello world';
$this->assertEquals('Hello world', $ko->only_in_english);
$this->assertEquals('Hello world', $en->only_in_english);
$this->assertEquals('Hello world', $ja->only_in_english);
// Test string interpolation.
$ko->foobartestlang = '%s님 안녕하세요?';
$this->assertEquals('Travis님 안녕하세요?', $ko->foobartestlang('Travis'));
$en->foobartestlang = 'Hello, %s!';
$this->assertEquals('Hello, Travis!', $en->get('foobartestlang', 'Travis'));
}
public function testLangCompat()
{
Context::loadLang('./modules/member/lang');

View file

@ -7,13 +7,13 @@ class MIMETest extends \Codeception\TestCase\Test
$this->assertEquals('audio/ogg', Rhymix\Framework\MIME::getTypeByExtension('ogg'));
$this->assertEquals('image/gif', Rhymix\Framework\MIME::getTypeByExtension('gif'));
$this->assertEquals('text/html', Rhymix\Framework\MIME::getTypeByExtension('htm'));
$this->assertEquals('application/msword', Rhymix\Framework\MIME::getTypeByFilename('attachment.doc'));
$this->assertEquals('application/pdf', Rhymix\Framework\MIME::getTypeByFilename('라이믹스.pdf'));
$this->assertEquals('application/postscript', Rhymix\Framework\MIME::getTypeByFilename('MyGraphics.v2.eps'));
$this->assertEquals('application/vnd.ms-excel', Mail::returnMIMEType('MySpreadsheet.xls'));
$this->assertEquals('application/octet-stream', Mail::returnMIMEType('Untitled File'));
$this->assertEquals('odt', Rhymix\Framework\MIME::getExtensionByType('application/vnd.oasis.opendocument.text'));
$this->assertEquals('jpg', Rhymix\Framework\MIME::getExtensionByType('image/jpeg'));
$this->assertEquals('mpg', Rhymix\Framework\MIME::getExtensionByType('video/mpeg'));

View file

@ -6,12 +6,12 @@ class MailTest extends \Codeception\TestCase\Test
{
$driver = Rhymix\Framework\Mail::getDefaultDriver();
$this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\MailInterface', $driver);
$driver = Rhymix\Framework\Drivers\Mail\Dummy::getInstance(array());
Rhymix\Framework\Mail::setDefaultDriver($driver);
$this->assertEquals($driver, Rhymix\Framework\Mail::getDefaultDriver());
}
public function testGetSupportedDrivers()
{
$drivers = Rhymix\Framework\Mail::getSupportedDrivers();
@ -22,82 +22,82 @@ class MailTest extends \Codeception\TestCase\Test
$this->assertEquals(array('api_token'), $drivers['sparkpost']['required']);
$this->assertNotEmpty($drivers['woorimail']['spf_hint']);
}
public function testSenderAndRecipients()
{
$mail = new Rhymix\Framework\Mail;
$this->assertNull($mail->getFrom());
$mail->setFrom('devops@rhymix.org', 'Rhymix Developers');
$this->assertEquals('Rhymix Developers <devops@rhymix.org>', $mail->getFrom());
$this->assertEquals(null, $mail->message->getTo());
$mail->addTo('whoever@rhymix.org', 'Name');
$this->assertEquals(array('whoever@rhymix.org' => 'Name'), $mail->message->getTo());
$this->assertEquals(null, $mail->message->getCc());
$mail->addCc('whatever@rhymix.org', 'Nick');
$this->assertEquals(array('whatever@rhymix.org' => 'Nick'), $mail->message->getCc());
$this->assertEquals(null, $mail->message->getBcc());
$mail->addBcc('wherever@rhymix.org', 'User');
$this->assertEquals(array('wherever@rhymix.org' => 'User'), $mail->message->getBcc());
$this->assertEquals(null, $mail->message->getReplyTo());
$mail->setReplyTo('replyto@rhymix.org');
$this->assertEquals(array('replyto@rhymix.org' => ''), $mail->message->getReplyTo());
$recipients = $mail->getRecipients();
$this->assertEquals(3, count($recipients));
$this->assertContains('Name <whoever@rhymix.org>', $recipients);
$this->assertContains('Nick <whatever@rhymix.org>', $recipients);
$this->assertContains('User <wherever@rhymix.org>', $recipients);
}
public function testMiscHeaders()
{
$mail = new Rhymix\Framework\Mail;
$mail->setReturnPath('envelope@rhymix.org');
$this->assertEquals('envelope@rhymix.org', $mail->message->getReturnPath());
$mail->setMessageID('some.random.string@rhymix.org');
$this->assertEquals('some.random.string@rhymix.org', $mail->message->getId());
$mail->setInReplyTo('<previous.message@rhymix.org>');
$this->assertEquals('<previous.message@rhymix.org>', $mail->message->getHeaders()->get('In-Reply-To')->getValue());
$mail->setReferences('<thread-1@rhymix.org>, <thread-2@rhymix.org>, <thread-3@rhymix.org>');
$this->assertEquals('<thread-1@rhymix.org>, <thread-2@rhymix.org>, <thread-3@rhymix.org>', $mail->message->getHeaders()->get('References')->getValue());
}
public function testMailSubject()
{
$mail = new Rhymix\Framework\Mail;
$mail->setSubject('Foobar!');
$this->assertEquals('Foobar!', $mail->getSubject());
$mail->setTitle('Foobarbazz?');
$this->assertEquals('Foobarbazz?', $mail->getTitle());
}
public function testMailBody()
{
$baseurl = '/' . basename(dirname(dirname(dirname(__DIR__)))) . '/';
$mail = new Rhymix\Framework\Mail;
$mail->setBody('<p>Hello world!</p>', 'text/html');
$this->assertEquals('<p>Hello world!</p>', $mail->getBody());
$this->assertEquals('text/html', $mail->getContentType());
$mail->setContent('<p>Hello world! Foobar?</p>', 'text/plain');
$this->assertEquals('<p>Hello world! Foobar?</p>', $mail->getBody());
$this->assertEquals('text/plain', $mail->getContentType());
$mail->setBody('<p>Hello foobar...</p>', 'invalid value');
$this->assertEquals('<p>Hello foobar...</p>', $mail->getContent());
$this->assertEquals('text/plain', $mail->getContentType());
$mail->setBody('<p><img src="files/attach/foobar.jpg" alt="TEST" /></p>', 'text/html');
$this->assertEquals('<p><img src="https://www.rhymix.org' . $baseurl . 'files/attach/foobar.jpg" alt="TEST" /></p>', $mail->getBody());
$mail->setBody('<p><img src="./files/attach/foobar.jpg" alt="TEST" /></p>', 'text/html');
@ -106,24 +106,24 @@ class MailTest extends \Codeception\TestCase\Test
$this->assertEquals('<p><img src="https://www.rhymix.org' . $baseurl . 'files/attach/foobar.jpg" alt="TEST" /></p>', $mail->getBody());
$mail->setBody('<p><img src="./files/attach/foobar.jpg" alt="TEST" /></p>', 'text/plain');
$this->assertEquals('<p><img src="./files/attach/foobar.jpg" alt="TEST" /></p>', $mail->getBody());
$mail->setContentType('html');
$this->assertEquals('text/html', $mail->getContentType());
$mail->setContentType('invalid');
$this->assertEquals('text/plain', $mail->getContentType());
}
public function testMailAttach()
{
$mail = new Rhymix\Framework\Mail;
$success = $mail->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css');
$this->assertTrue($success);
$success = $mail->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css', 'target.css');
$this->assertTrue($success);
$success = $mail->attach(\RX_BASEDIR . 'tests/_data/nonexistent.file.jpg');
$this->assertFalse($success);
$attachments = $mail->getAttachments();
$this->assertEquals(2, count($attachments));
$this->assertEquals('attach', $attachments[0]->type);
@ -131,51 +131,51 @@ class MailTest extends \Codeception\TestCase\Test
$this->assertEquals('minify.source.css', $attachments[0]->display_filename);
$this->assertEquals('target.css', $attachments[1]->display_filename);
}
public function testMailEmbed()
{
$mail = new Rhymix\Framework\Mail;
$cid = $mail->embed(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css', 'thisismyrandomcid@rhymix.org');
$this->assertEquals('cid:thisismyrandomcid@rhymix.org', $cid);
$cid = $mail->embed(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css');
$this->assertRegexp('/^cid:[0-9a-z]+@[^@]+$/i', $cid);
}
public function testMailClassCompatibility()
{
\Mail::useGmailAccount('devops@rhymix.org', 'password');
$this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\Mail\\SMTP', \Mail::getDefaultDriver());
\Mail::useSMTP(null, 'rhymix.org', 'devops@rhymix.org', 'password', 'tls', 587);
$this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\Mail\\SMTP', \Mail::getDefaultDriver());
$mail = new \Mail;
$mail->setSender('Rhymix', 'devops@rhymix.org');
$this->assertEquals('Rhymix <devops@rhymix.org>', $mail->getSender());
$mail->setReceiptor('Recipient', 'whoever@rhymix.org');
$this->assertEquals('Recipient <whoever@rhymix.org>', $mail->getReceiptor());
$mail->setReceiptor('Another Recipient', 'whatever@rhymix.org');
$this->assertEquals('Another Recipient <whatever@rhymix.org>', $mail->getReceiptor());
$this->assertEquals(1, count($mail->message->getTo()));
$this->assertEquals(null, $mail->message->getCc());
$mail->setBcc('bcc-1@rhymix.org');
$mail->setBcc('bcc-2@rhymix.org');
$this->assertEquals(array('bcc-2@rhymix.org' => ''), $mail->message->getBcc());
$content = '<p>Hello world!</p><p>This is a long message to test chunk splitting.</p><p>This feature is only available using the legacy Mail class.</p>';
$mail->setBody($content);
$this->assertEquals(chunk_split(base64_encode($content)), $mail->getHTMLContent());
$this->assertEquals(chunk_split(base64_encode(htmlspecialchars($content))), $mail->getPlainContent());
$mail->addAttachment(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css', 'target.css');
$cid = $mail->addCidAttachment(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css', 'thisismyrandomcid@rhymix.org');
$this->assertEquals('cid:thisismyrandomcid@rhymix.org', $cid);
$attachments = $mail->getAttachments();
$this->assertEquals(2, count($attachments));
$this->assertEquals('attach', $attachments[0]->type);
@ -183,7 +183,7 @@ class MailTest extends \Codeception\TestCase\Test
$this->assertEquals('embed', $attachments[1]->type);
$this->assertEquals('cid:thisismyrandomcid@rhymix.org', $attachments[1]->cid);
}
public function testEmailAddressValidator()
{
$this->assertEquals('devops@rhymix.org', Mail::isVaildMailAddress('devops@rhymix.org'));

View file

@ -9,7 +9,7 @@ class PaginationTest extends \Codeception\TestCase\Test
$this->assertEquals(1, Rhymix\Framework\Pagination::countPages(20, 20));
$this->assertEquals(2, Rhymix\Framework\Pagination::countPages(21, 20));
}
public function testCreateLinks()
{
$links = Rhymix\Framework\Pagination::createLinks('index.php?page=', 27, 3);
@ -17,29 +17,29 @@ class PaginationTest extends \Codeception\TestCase\Test
$this->assertStringContainsString('<a href="index.php?page=3">', $links);
$this->assertStringContainsString('<span class="page_number">1</span>', $links);
$this->assertStringContainsString('<span class="page_number">10</span>', $links);
$links = Rhymix\Framework\Pagination::createLinks('/foo/bar/page/', 27, 13);
$this->assertStringContainsString('<div class="pagination">', $links);
$this->assertStringContainsString('<a href="/foo/bar/page/13">', $links);
$this->assertStringContainsString('<span class="page_number">11</span>', $links);
$this->assertStringContainsString('<span class="page_number">20</span>', $links);
$links = Rhymix\Framework\Pagination::createLinks('/rhymix?page=$PAGE&foo=bar', 27, 25);
$this->assertStringContainsString('<div class="pagination">', $links);
$this->assertStringContainsString('<a href="/rhymix?page=27&amp;foo=bar">', $links);
$this->assertStringContainsString('<span class="page_number">21</span>', $links);
$this->assertStringContainsString('<span class="page_number">27</span>', $links);
$links = Rhymix\Framework\Pagination::createLinks('p', 27, 3, 10, Rhymix\Framework\Pagination::COUNT_STYLE_CONTINUOUS);
$this->assertStringContainsString('<div class="pagination">', $links);
$this->assertStringContainsString('<span class="page_number">1</span>', $links);
$this->assertStringContainsString('<span class="page_number">10</span>', $links);
$links = Rhymix\Framework\Pagination::createLinks('p', 27, 13, 10, Rhymix\Framework\Pagination::COUNT_STYLE_CONTINUOUS);
$this->assertStringContainsString('<div class="pagination">', $links);
$this->assertStringContainsString('<span class="page_number">9</span>', $links);
$this->assertStringContainsString('<span class="page_number">18</span>', $links);
$links = Rhymix\Framework\Pagination::createLinks('p', 27, 25, 10, Rhymix\Framework\Pagination::COUNT_STYLE_CONTINUOUS);
$this->assertStringContainsString('<div class="pagination">', $links);
$this->assertStringContainsString('<span class="page_number">18</span>', $links);

View file

@ -7,12 +7,12 @@ class PasswordTest extends \Codeception\TestCase\Test
$this->assertTrue(Rhymix\Framework\Password::isValidAlgorithm('bcrypt'));
$this->assertTrue(Rhymix\Framework\Password::isValidAlgorithm('whirlpool,pbkdf2'));
$this->assertTrue(Rhymix\Framework\Password::isValidAlgorithm(array('md5', 'sha1', 'md5')));
$this->assertFalse(Rhymix\Framework\Password::isValidAlgorithm('bunga_bunga'));
Rhymix\Framework\Password::addAlgorithm('bunga_bunga', '/bunga_bunga/', function($hash) { return 'bunga_bunga'; });
$this->assertTrue(Rhymix\Framework\Password::isValidAlgorithm('bunga_bunga'));
}
public function testGetSupportedAlgorithms()
{
$algos = Rhymix\Framework\Password::getSupportedAlgorithms();
@ -20,26 +20,26 @@ class PasswordTest extends \Codeception\TestCase\Test
$this->assertTrue(in_array('pbkdf2', $algos));
$this->assertTrue(in_array('md5', $algos));
}
public function testGetBestSupportedAlgorithm()
{
$algo = Rhymix\Framework\Password::getBestSupportedAlgorithm();
$this->assertTrue($algo === 'bcrypt' || $algo === 'pbkdf2');
}
public function testGetDefaultAlgorithm()
{
$algo = Rhymix\Framework\Password::getDefaultAlgorithm();
$this->assertTrue($algo === 'bcrypt' || $algo === 'pbkdf2' || $algo === 'md5');
}
public function testGetWorkFactor()
{
$work_factor = $algo = Rhymix\Framework\Password::getWorkFactor();
$this->assertTrue($work_factor >= 4);
$this->assertTrue($work_factor <= 31);
}
public function testGetRandomPassword()
{
$password = Rhymix\Framework\Password::getRandomPassword(16);
@ -49,7 +49,7 @@ class PasswordTest extends \Codeception\TestCase\Test
$this->assertRegexp('/[0-9]/', $password);
$this->assertRegexp('/[^a-zA-Z0-9]/', $password);
}
public function testHashPassword()
{
$password = Rhymix\Framework\Security::getRandom(32);
@ -58,29 +58,29 @@ class PasswordTest extends \Codeception\TestCase\Test
$this->assertEquals(hash('whirlpool', $password), Rhymix\Framework\Password::hashPassword($password, 'whirlpool'));
$this->assertEquals('5d2e19393cc5ef67', Rhymix\Framework\Password::hashPassword('password', 'mysql_old_password'));
}
public function testCheckPassword()
{
$password = Rhymix\Framework\Security::getRandom(32);
$algos = array('whirlpool', 'ripemd160', 'bcrypt');
$hash = Rhymix\Framework\Password::hashPassword($password, $algos);
$this->assertRegExp('/^\$2y\$/', $hash);
$this->assertEquals(60, strlen($hash));
$this->assertTrue(Rhymix\Framework\Password::checkPassword($password, $hash, $algos));
$algos = array('sha384', 'pbkdf2');
$hash = Rhymix\Framework\Password::hashPassword($password, $algos);
$this->assertRegExp('/^(sha256|sha512):[0-9]+:/', $hash);
$this->assertEquals(60, strlen($hash));
$this->assertTrue(Rhymix\Framework\Password::checkPassword($password, $hash, $algos));
$algos = array('sha1', 'portable');
$hash = Rhymix\Framework\Password::hashPassword($password, $algos);
$this->assertRegExp('/^\$P\$/', $hash);
$this->assertEquals(34, strlen($hash));
$this->assertTrue(Rhymix\Framework\Password::checkPassword($password, $hash, $algos));
foreach (array('drupal', 'joomla', 'kimsqrb', 'mysql_old_password', 'mysql_new_password', 'mssql_pwdencrypt') as $algo)
{
$hash = Rhymix\Framework\Password::hashPassword($password, $algo);
@ -88,55 +88,55 @@ class PasswordTest extends \Codeception\TestCase\Test
$this->assertFalse(Rhymix\Framework\Password::checkPassword($password, $hash . 'x', $algo));
}
}
public function testCheckAlgorithm()
{
$password = Rhymix\Framework\Security::getRandom(32, 'hex');
$this->assertEquals(array('md5', 'md5,sha1,md5'), Rhymix\Framework\Password::checkAlgorithm($password));
$this->assertEquals(array('sha512', 'whirlpool'), Rhymix\Framework\Password::checkAlgorithm(hash('sha512', $password)));
$hash = '$2y$10$VkxBdEBTZ1HyLluZPjXCjuFffw0a6alZlbb733CF/zA22HDpBNsMm';
$this->assertEquals(array('bcrypt'), Rhymix\Framework\Password::checkAlgorithm($hash));
$hash = 'sha512:0008192:hoXcLXQzIiIJ:ElokybdRf+i512M4/4PIdEiSDgZ8f0uL';
$this->assertEquals(array('pbkdf2'), Rhymix\Framework\Password::checkAlgorithm($hash));
}
public function testCheckWorkFactor()
{
$hash = '$2y$10$VkxBdEBTZ1HyLluZPjXCjuFffw0a6alZlbb733CF/zA22HDpBNsMm';
$this->assertEquals(10, Rhymix\Framework\Password::checkWorkFactor($hash));
$hash = 'sha512:0008192:hoXcLXQzIiIJ:ElokybdRf+i512M4/4PIdEiSDgZ8f0uL';
$this->assertEquals(8, Rhymix\Framework\Password::checkWorkFactor($hash));
$hash = '5f4dcc3b5aa765d61d8327deb882cf99';
$this->assertEquals(0, Rhymix\Framework\Password::checkWorkFactor($hash));
}
public function testBcrypt()
{
$password = 'password';
$hash = '$2y$10$VkxBdEBTZ1HyLluZPjXCjuFffw0a6alZlbb733CF/zA22HDpBNsMm';
$this->assertEquals($hash, Rhymix\Framework\Password::bcrypt($password, $hash));
}
public function testPBKDF2()
{
$password = 'password';
$salt = 'rtmIxdEUoWUk';
$hash = 'sha512:0016384:rtmIxdEUoWUk:1hrwGP3ScWvxslnqNFqyhM6Ddn4iYrwf';
$this->assertEquals($hash, Rhymix\Framework\Password::pbkdf2($password, $salt, 'sha512', 16384, 24));
$hash = 'sha512:16384:rtmIxdEUoWUk:1hrwGP3ScWvxslnqNFqyhM6Ddn4iYrwf';
$this->assertEquals($hash, Rhymix\Framework\Password::pbkdf2($password, $salt, 'sha512', 16384, 24, 5));
$salt = 'KpnA8ZAxvig32n7p2PnEjx4NN7gPpUQm';
$hash = 'sha1:12000:KpnA8ZAxvig32n7p2PnEjx4NN7gPpUQm:TeILMSF8ao/NVJ4wdk7lXDKQre9TUCht';
$this->assertEquals($hash, Rhymix\Framework\Password::pbkdf2($password, $salt, 'sha1', 12000, 24, 5));
}
public function testCountEntropyBits()
{
$this->assertEquals(0, Rhymix\Framework\Password::countEntropyBits(''));

View file

@ -7,20 +7,20 @@ class RouterTest extends \Codeception\TestCase\Test
Rhymix\Framework\Config::set('url.rewrite', null);
Rhymix\Framework\Config::set('use_rewrite', false);
$this->assertEquals(0, Rhymix\Framework\Router::getRewriteLevel());
Rhymix\Framework\Config::set('url.rewrite', 1);
Rhymix\Framework\Config::set('use_rewrite', false);
$this->assertEquals(1, Rhymix\Framework\Router::getRewriteLevel());
Rhymix\Framework\Config::set('url.rewrite', 1);
Rhymix\Framework\Config::set('use_rewrite', true);
$this->assertEquals(1, Rhymix\Framework\Router::getRewriteLevel());
Rhymix\Framework\Config::set('url.rewrite', 2);
Rhymix\Framework\Config::set('use_rewrite', true);
$this->assertEquals(2, Rhymix\Framework\Router::getRewriteLevel());
}
public function testGetURL()
{
$info = Rhymix\Framework\Parsers\ModuleActionParser::loadXML(\RX_BASEDIR . 'modules/board/conf/module.xml');
@ -28,50 +28,50 @@ class RouterTest extends \Codeception\TestCase\Test
$this->assertFalse(isset($info->permission));
$this->assertGreaterThan(0, count($info->route->GET));
$this->assertGreaterThan(0, count($info->action->dispBoardContent->route));
getController('module')->registerActionForwardRoutes('member');
$args = array('mid' => 'board', 'act' => 'dispBoardContent');
$this->assertEquals('board', Rhymix\Framework\Router::getURL($args, 2));
$this->assertEquals('index.php?mid=board&act=dispBoardContent', Rhymix\Framework\Router::getURL($args, 1));
$this->assertEquals('index.php?mid=board&act=dispBoardContent', Rhymix\Framework\Router::getURL($args, 0));
$args = array('mid' => 'board', 'page' => 3);
$this->assertEquals('board/page/3', Rhymix\Framework\Router::getURL($args, 2));
$this->assertEquals('board?page=3', Rhymix\Framework\Router::getURL($args, 1));
$this->assertEquals('index.php?mid=board&page=3', Rhymix\Framework\Router::getURL($args, 0));
$args = array('mid' => 'board', 'document_srl' => 123);
$this->assertEquals('board/123', Rhymix\Framework\Router::getURL($args, 2));
$this->assertEquals('board/123', Rhymix\Framework\Router::getURL($args, 1));
$this->assertEquals('index.php?mid=board&document_srl=123', Rhymix\Framework\Router::getURL($args, 0));
$args = array('mid' => 'board', 'act' => 'dispBoardWrite', 'document_srl' => 123);
$this->assertEquals('board/123/edit', Rhymix\Framework\Router::getURL($args, 2));
$this->assertEquals('index.php?mid=board&act=dispBoardWrite&document_srl=123', Rhymix\Framework\Router::getURL($args, 1));
$this->assertEquals('index.php?mid=board&act=dispBoardWrite&document_srl=123', Rhymix\Framework\Router::getURL($args, 0));
$args = array('mid' => 'board', 'act' => 'dispBoardWrite');
$this->assertEquals('board/write', Rhymix\Framework\Router::getURL($args, 2));
$this->assertEquals('index.php?mid=board&act=dispBoardWrite', Rhymix\Framework\Router::getURL($args, 1));
$this->assertEquals('index.php?mid=board&act=dispBoardWrite', Rhymix\Framework\Router::getURL($args, 0));
$args = array('mid' => 'board', 'act' => 'dispBoardModifyComment', 'document_srl' => 123, 'comment_srl' => 456, 'extra_param' => 'foo bar');
$this->assertEquals('board/comment/456/edit?extra_param=foo+bar', Rhymix\Framework\Router::getURL($args, 2));
$this->assertEquals('index.php?mid=board&act=dispBoardModifyComment&document_srl=123&comment_srl=456&extra_param=foo+bar', Rhymix\Framework\Router::getURL($args, 1));
$this->assertEquals('index.php?mid=board&act=dispBoardModifyComment&document_srl=123&comment_srl=456&extra_param=foo+bar', Rhymix\Framework\Router::getURL($args, 0));
$args = array('mid' => 'board', 'act' => 'dispMemberInfo');
$this->assertEquals('board/member_info', Rhymix\Framework\Router::getURL($args, 2));
$this->assertEquals('index.php?mid=board&act=dispMemberInfo', Rhymix\Framework\Router::getURL($args, 1));
$this->assertEquals('index.php?mid=board&act=dispMemberInfo', Rhymix\Framework\Router::getURL($args, 0));
$args = array('module' => 'document', 'act' => 'procDocumentVoteUp');
$this->assertEquals('document/procDocumentVoteUp', Rhymix\Framework\Router::getURL($args, 2));
$this->assertEquals('index.php?module=document&act=procDocumentVoteUp', Rhymix\Framework\Router::getURL($args, 1));
$this->assertEquals('index.php?module=document&act=procDocumentVoteUp', Rhymix\Framework\Router::getURL($args, 0));
}
public function testParseURL()
{
$args = array('mid' => 'board', 'act' => 'dispBoardContent', 'document_srl' => '123');
@ -79,13 +79,13 @@ class RouterTest extends \Codeception\TestCase\Test
$this->assertEquals('board/123', Rhymix\Framework\Router::parseURL('GET', 'board/123', 2)->url);
$this->assertEquals('board', Rhymix\Framework\Router::parseURL('GET', 'board/123', 2)->mid);
$this->assertEquals('dispBoardContent', Rhymix\Framework\Router::parseURL('GET', 'board/123', 2)->act);
$args = array('mid' => 'board', 'document_srl' => '123');
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'board/123', 1)->args);
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'index.php?mid=board&document_srl=123', 0)->args);
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'board/123', 1)->args);
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'index.php?mid=board&document_srl=123', 0)->args);
$args = array('mid' => 'board', 'act' => 'dispBoardModifyComment', 'comment_srl' => '456', 'extra_param' => 'foo bar');
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'board/comment/456/edit?extra_param=foo+bar', 2)->args);
$this->assertEquals('board', Rhymix\Framework\Router::parseURL('GET', 'board/comment/456/edit?extra_param=foo+bar', 2)->mid);
@ -93,15 +93,15 @@ class RouterTest extends \Codeception\TestCase\Test
$this->assertEquals('', Rhymix\Framework\Router::parseURL('GET', 'board/comment/456/edit?extra_param=foo+bar', 2)->document_srl ?? '');
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'index.php?mid=board&act=dispBoardModifyComment&comment_srl=456&extra_param=foo+bar', 1)->args);
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'index.php?mid=board&act=dispBoardModifyComment&comment_srl=456&extra_param=foo+bar', 0)->args);
$args = array('mid' => 'board', 'act' => 'dispMemberInfo');
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'board/member_info', 2)->args);
$this->assertEquals('board', Rhymix\Framework\Router::parseURL('GET', 'board/member_info', 2)->mid);
$args = array('mid' => 'board', 'act' => 'dispMemberLoginForm');
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'board/login', 2)->args);
$this->assertEquals('member', Rhymix\Framework\Router::parseURL('GET', 'board/login', 2)->module);
$args = array('mid' => 'board', 'act' => 'procMemberLogin');
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('POST', 'board/login', 2)->args);
$this->assertEquals('member', Rhymix\Framework\Router::parseURL('POST', 'board/login', 2)->module);

View file

@ -6,17 +6,17 @@ class SMSTest extends \Codeception\TestCase\Test
{
Context::init();
}
public function testGetSetDefaultDriver()
{
$driver = Rhymix\Framework\SMS::getDefaultDriver();
$this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\SMSInterface', $driver);
$driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array());
Rhymix\Framework\SMS::setDefaultDriver($driver);
$this->assertEquals($driver, Rhymix\Framework\SMS::getDefaultDriver());
}
public function testGetSupportedDrivers()
{
$drivers = Rhymix\Framework\SMS::getSupportedDrivers();
@ -37,22 +37,22 @@ class SMSTest extends \Codeception\TestCase\Test
$this->assertTrue($drivers['solapi']['api_spec']['mms_supported']);
$this->assertTrue($drivers['solapi']['api_spec']['delay_supported']);
}
public function testSenderAndRecipients()
{
config('sms.default_from', '010-9999-8888');
$sms = new Rhymix\Framework\SMS;
$this->assertEquals('01099998888', $sms->getFrom());
config('sms.default_from', '');
$sms = new Rhymix\Framework\SMS;
$this->assertNull($sms->getFrom());
$sms->setFrom('010-1234-5678');
$this->assertEquals('01012345678', $sms->getFrom());
$sms->setFrom('010+1234 x 5679');
$this->assertEquals('01012345679', $sms->getFrom());
$sms->addTo('010-0987-6543');
$sms->addTo('010-0987-6542', 0);
$sms->addTo('010-0987-6541', 82);
@ -67,39 +67,39 @@ class SMSTest extends \Codeception\TestCase\Test
82 => array('01009876541'),
), $sms->getRecipientsGroupedByCountry());
}
public function testSMSSubject()
{
$sms = new Rhymix\Framework\SMS;
$sms->setSubject('Foobar!');
$this->assertEquals('Foobar!', $sms->getSubject());
$sms->setTitle('Foobarbazz?');
$this->assertEquals('Foobarbazz?', $sms->getTitle());
}
public function testSMSContent()
{
$sms = new Rhymix\Framework\SMS;
$sms->setBody('Hello world!');
$this->assertEquals('Hello world!', $sms->getContent());
$sms->setContent('Hello world! Foobar?');
$this->assertEquals('Hello world! Foobar?', $sms->getBody());
}
public function testSMSAttach()
{
$sms = new Rhymix\Framework\SMS;
$success = $sms->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css');
$this->assertTrue($success);
$success = $sms->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css');
$this->assertTrue($success);
$success = $sms->attach(\RX_BASEDIR . 'tests/_data/nonexistent.file.jpg');
$this->assertFalse($success);
$attachments = $sms->getAttachments();
$this->assertEquals(2, count($attachments));
$this->assertEquals('mms', $attachments[0]->type);
@ -107,11 +107,11 @@ class SMSTest extends \Codeception\TestCase\Test
$this->assertEquals('minify.source.css', $attachments[0]->display_filename);
$this->assertEquals('minify.target.css', $attachments[1]->display_filename);
}
public function testSMSExtraVars()
{
$sms = new Rhymix\Framework\SMS;
$sms->setExtraVar('foo', 'bar');
$this->assertEquals('bar', $sms->getExtraVar('foo'));
$this->assertNull($sms->getExtraVar('nonexistent!'));
@ -120,36 +120,36 @@ class SMSTest extends \Codeception\TestCase\Test
$sms->setExtraVars(array('rhymix' => 'test'));
$this->assertEquals(array('rhymix' => 'test'), $sms->getExtraVars());
}
public function testSMSDelay()
{
$sms = new Rhymix\Framework\SMS;
$delay_absolute = time() + 3600;
$this->assertTrue($sms->setDelay($delay_absolute));
$this->assertEquals($delay_absolute, $sms->getDelay());
$delay_relative = 86400;
$this->assertTrue($sms->setDelay($delay_relative));
$this->assertGreaterThanOrEqual(time() + $delay_relative - 1, $sms->getDelay());
$this->assertLessThanOrEqual(time() + $delay_relative + 1, $sms->getDelay());
$delay_relative = 86400 * 3650;
$this->assertTrue($sms->setDelay($delay_relative));
$this->assertEquals(0, $sms->getDelay());
}
public function testSMSForceSMS()
{
$sms = new Rhymix\Framework\SMS;
$this->assertFalse($sms->isForceSMS());
$sms->forceSMS();
$this->assertTrue($sms->isForceSMS());
$sms->unforceSMS();
$this->assertFalse($sms->isForceSMS());
}
public function testSMSSplitSMSAndLMS()
{
config('sms.allow_split.sms', true);
@ -163,64 +163,64 @@ class SMSTest extends \Codeception\TestCase\Test
$sms = new Rhymix\Framework\SMS;
$this->assertFalse($sms->isSplitSMSAllowed());
$this->assertFalse($sms->isSplitLMSAllowed());
$sms->allowSplitSMS();
$this->assertTrue($sms->isSplitSMSAllowed());
$this->assertFalse($sms->isSplitLMSAllowed());
$sms->disallowSplitSMS();
$this->assertFalse($sms->isSplitSMSAllowed());
$sms->allowSplitLMS();
$this->assertTrue($sms->isSplitLMSAllowed());
$this->assertFalse($sms->isSplitSMSAllowed());
$sms->disallowSplitLMS();
$this->assertFalse($sms->isSplitLMSAllowed());
}
public function testForceSender()
{
config('sms.default_from', '010-9999-8888');
config('sms.default_force', true);
$driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array());
Rhymix\Framework\SMS::setDefaultDriver($driver);
$driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS;
$sms->setFrom('010-7777-6666');
$sms->addTo('010-5555-4444');
$sms->setContent('Hello World');
$sms->send();
$messages = $driver->getSentMessages();
$this->assertEquals('01099998888', $messages[0]->from);
config('sms.default_force', false);
$driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS;
$sms->setFrom('010-7777-6666');
$sms->addTo('010-5555-4444');
$sms->setContent('Hello World');
$sms->send();
$messages = $driver->getSentMessages();
$this->assertEquals('01077776666', $messages[0]->from);
}
public function testSMSSendSMSAndLMS()
{
config('sms.default_force', false);
config('sms.allow_split.sms', true);
config('sms.allow_split.lms', true);
$driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array());
Rhymix\Framework\SMS::setDefaultDriver($driver);
// Test sending a message with no recipients.
$sms = new Rhymix\Framework\SMS;
$this->assertFalse($sms->send());
$this->assertEquals(1, count($sms->getErrors()));
// Test SMS content splitting, grouping by country code, and forcing SMS to unsupported country code.
$driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS;
@ -231,7 +231,7 @@ class SMSTest extends \Codeception\TestCase\Test
$sms->addTo('010-0004-5678', 83);
$sms->setContent('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면 LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.');
$this->assertTrue($sms->send());
$messages = $driver->getSentMessages();
$this->assertEquals(3, count($messages));
$this->assertEquals(0, $messages[0]->country);
@ -248,7 +248,7 @@ class SMSTest extends \Codeception\TestCase\Test
$this->assertEquals('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면 LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.', $messages[0]->content);
$this->assertEquals('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면', $messages[1]->content);
$this->assertEquals('LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.', $messages[2]->content);
// Test LMS content splitting.
$driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS;
@ -256,14 +256,14 @@ class SMSTest extends \Codeception\TestCase\Test
$sms->addTo('010-0000-1234');
$sms->setContent(str_repeat('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면 LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.' . "\n", 50));
$this->assertTrue($sms->send());
$messages = $driver->getSentMessages();
$this->assertEquals(4, count($messages));
foreach ($messages as $message)
{
$this->assertEquals('LMS', $message->type);
}
// Test subject splitting.
$driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS;
@ -272,13 +272,13 @@ class SMSTest extends \Codeception\TestCase\Test
$sms->setSubject('이것은 제목입니다. 제목이 길기 때문에 내용으로 넘어갈 것입니다.');
$sms->setContent('이것은 내용입니다.' . "\r\n" . '줄을 바꿔서 내용이 계속됩니다.');
$sms->send();
$messages = $driver->getSentMessages();
$this->assertEquals(1, count($messages));
$this->assertEquals('LMS', $messages[0]->type);
$this->assertEquals('이것은 제목입니다. 제목이 길기 때문에', $messages[0]->subject);
$this->assertEquals('내용으로 넘어갈 것입니다.' . "\n" . '이것은 내용입니다.' . "\n" . '줄을 바꿔서 내용이 계속됩니다.', $messages[0]->content);
// Test subject splitting when forced to use SMS.
$driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS;
@ -288,22 +288,22 @@ class SMSTest extends \Codeception\TestCase\Test
$sms->setContent('이것은 내용입니다.');
$sms->forceSMS();
$sms->send();
$messages = $driver->getSentMessages();
$this->assertEquals(1, count($messages));
$this->assertEquals('SMS', $messages[0]->type);
$this->assertEquals('이것은 제목입니다. 제목이 길기 때문에 내용으로 넘어갈 것입니다.' . "\n" . '이것은 내용입니다.', $messages[0]->content);
}
public function testSMSSendMMS()
{
config('sms.default_force', false);
config('sms.allow_split.sms', true);
config('sms.allow_split.lms', true);
$driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array());
Rhymix\Framework\SMS::setDefaultDriver($driver);
// Test MMS with a single attachment.
$driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS;
@ -312,13 +312,13 @@ class SMSTest extends \Codeception\TestCase\Test
$sms->setContent('MMS 내용입니다.');
$sms->attach(\RX_BASEDIR . 'tests/_data/images/rhymix.png');
$sms->send();
$messages = $driver->getSentMessages();
$this->assertEquals(1, count($messages));
$this->assertEquals('MMS', $messages[0]->type);
$this->assertEquals('MMS 내용입니다.', $messages[0]->content);
$this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image);
// Test MMS with multiple attachments.
$driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS;
@ -330,7 +330,7 @@ class SMSTest extends \Codeception\TestCase\Test
$sms->attach(\RX_BASEDIR . 'tests/_output/rhymix-copy.png');
unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy.png');
$sms->send();
$messages = $driver->getSentMessages();
$this->assertEquals(2, count($messages));
$this->assertEquals($messages[0]->to, $messages[1]->to);
@ -340,7 +340,7 @@ class SMSTest extends \Codeception\TestCase\Test
$this->assertEquals('MMS 내용입니다.', $messages[1]->content);
$this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image);
$this->assertEquals(\RX_BASEDIR . 'tests/_output/rhymix-copy.png', $messages[1]->image);
// Test MMS with multiple attachments and very long content (less than the number of attachments).
$driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS;
@ -355,7 +355,7 @@ class SMSTest extends \Codeception\TestCase\Test
unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy-1.png');
unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png');
$sms->send();
$messages = $driver->getSentMessages();
$this->assertEquals(3, count($messages));
$this->assertEquals('MMS', $messages[0]->type);
@ -367,7 +367,7 @@ class SMSTest extends \Codeception\TestCase\Test
$this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image);
$this->assertEquals(\RX_BASEDIR . 'tests/_output/rhymix-copy-1.png', $messages[1]->image);
$this->assertEquals(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png', $messages[2]->image);
// Test MMS with multiple attachments and very long content (more than the number of attachments).
$driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS;
@ -382,7 +382,7 @@ class SMSTest extends \Codeception\TestCase\Test
unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy-1.png');
unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png');
$sms->send();
$messages = $driver->getSentMessages();
$this->assertEquals(5, count($messages));
$this->assertEquals('MMS', $messages[0]->type);
@ -400,7 +400,7 @@ class SMSTest extends \Codeception\TestCase\Test
$this->assertEquals(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png', $messages[2]->image);
$this->assertNull($messages[3]->image ?? null);
$this->assertNull($messages[4]->image ?? null);
// Test MMS with no text content.
$driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS;
@ -408,21 +408,21 @@ class SMSTest extends \Codeception\TestCase\Test
$sms->addTo('010-0000-1234');
$sms->attach(\RX_BASEDIR . 'tests/_data/images/rhymix.png');
$sms->send();
$messages = $driver->getSentMessages();
$this->assertEquals(1, count($messages));
$this->assertEquals('MMS', $messages[0]->type);
$this->assertEquals('MMS', $messages[0]->content);
$this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image);
}
public function testSMSIsSent()
{
$sms = new Rhymix\Framework\SMS;
$this->assertFalse($sms->isSent());
$this->assertFalse($sms->send());
$this->assertFalse($sms->isSent());
$sms = new Rhymix\Framework\SMS;
$sms->setFrom('010-1234-5678');
$sms->addTo('010-0000-1234');
@ -430,24 +430,24 @@ class SMSTest extends \Codeception\TestCase\Test
$this->assertTrue($sms->send());
$this->assertTrue($sms->isSent());
}
public function testSMSCaller()
{
$sms = new Rhymix\Framework\SMS;
$sms->send();
$line = strval(__LINE__ - 1);
$caller = $sms->getCaller();
$this->assertRegexp('/^.+ line \d+$/', $caller);
$this->assertTrue(starts_with(__FILE__, $caller));
$this->assertEquals($line, substr($caller, -1 * strlen($line)));
}
public function testSMSError()
{
$sms = new Rhymix\Framework\SMS;
$sms->addError('foobar');
$errors = $sms->getErrors();
$this->assertTrue(is_array($errors));
$this->assertContains('foobar', $errors);

View file

@ -6,35 +6,35 @@ class SecurityTest extends \Codeception\TestCase\Test
{
// Escape
$this->assertEquals('foo&lt;bar&gt;', Rhymix\Framework\Security::sanitize('foo<bar>', 'escape'));
// Strip
$this->assertEquals('foobar', Rhymix\Framework\Security::sanitize('foo<p>bar</p>', 'strip'));
// HTML (more thorough tests in HTMLFilterTest)
$this->assertEquals('<p>safe</p>', Rhymix\Framework\Security::sanitize('<p>safe<script></script></p>', 'html'));
// Filename (more thorough tests in FilenameFilterTest)
$this->assertEquals('foo(bar).xls', Rhymix\Framework\Security::sanitize('foo<bar>.xls', 'filename'));
}
public function testEncryption()
{
$plaintext = Rhymix\Framework\Security::getRandom();
config('crypto.encryption_key', Rhymix\Framework\Security::getRandom());
// Encryption with default key.
$encrypted = Rhymix\Framework\Security::encrypt($plaintext);
$this->assertNotEquals(false, $encrypted);
$decrypted = Rhymix\Framework\Security::decrypt($encrypted);
$this->assertEquals($plaintext, $decrypted);
// Encryption with custom key.
$key = Rhymix\Framework\Security::getRandom();
$encrypted = Rhymix\Framework\Security::encrypt($plaintext, $key);
$this->assertNotEquals(false, $encrypted);
$decrypted = Rhymix\Framework\Security::decrypt($encrypted, $key);
$this->assertEquals($plaintext, $decrypted);
// Test invalid ciphertext.
$decrypted = Rhymix\Framework\Security::decrypt('1234' . substr($encrypted, 4));
$this->assertEquals(false, $decrypted);
@ -43,19 +43,19 @@ class SecurityTest extends \Codeception\TestCase\Test
$decrypted = Rhymix\Framework\Security::decrypt($plaintext);
$this->assertEquals(false, $decrypted);
}
public function testSignature()
{
$plaintext = Rhymix\Framework\Security::getRandom();
config('crypto.authentication_key', Rhymix\Framework\Security::getRandom());
$signature = Rhymix\Framework\Security::createSignature($plaintext);
$this->assertRegexp('/^[a-zA-Z0-9-_]{40}$/', $signature);
$this->assertEquals(true, Rhymix\Framework\Security::verifySignature($plaintext, $signature));
$this->assertEquals(false, Rhymix\Framework\Security::verifySignature($plaintext, $signature . 'x'));
$this->assertEquals(false, Rhymix\Framework\Security::verifySignature($plaintext, 'x' . $signature));
}
public function testGetRandom()
{
$this->assertRegExp('/^[0-9a-zA-Z]{32}$/', Rhymix\Framework\Security::getRandom());
@ -64,7 +64,7 @@ class SecurityTest extends \Codeception\TestCase\Test
$this->assertRegExp('/^[0-9a-f]{16}$/', Rhymix\Framework\Security::getRandom(16, 'hex'));
$this->assertRegExp('/^[\x21-\x7e]{16}$/', Rhymix\Framework\Security::getRandom(16, 'printable'));
}
public function testGetRandomNumber()
{
for ($i = 0; $i < 10; $i++)
@ -75,7 +75,7 @@ class SecurityTest extends \Codeception\TestCase\Test
$this->assertTrue($random >= $min && $random <= $max);
}
}
public function testGetRandomUUID()
{
$regex = '/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/';
@ -84,42 +84,42 @@ class SecurityTest extends \Codeception\TestCase\Test
$this->assertRegExp($regex, Rhymix\Framework\Security::getRandomUUID());
}
}
public function testCompareStrings()
{
$this->assertTrue(Rhymix\Framework\Security::compareStrings('foobar', 'foobar'));
$this->assertFalse(Rhymix\Framework\Security::compareStrings('foobar', 'foobar*'));
$this->assertFalse(Rhymix\Framework\Security::compareStrings('foo', 'bar'));
}
public function testCheckCSRF()
{
$error_reporting = error_reporting(0);
$_SERVER['REQUEST_METHOD'] = 'GET';
$_SERVER['HTTP_REFERER'] = '';
$_SERVER['HTTP_X_CSRF_TOKEN'] = '';
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
$_SERVER['HTTP_X_CSRF_TOKEN'] = Rhymix\Framework\Session::createToken();
$this->assertTrue(Rhymix\Framework\Security::checkCSRF());
$_SERVER['REQUEST_METHOD'] = 'POST';
$_SERVER['HTTP_REFERER'] = '';
$_SERVER['HTTP_X_CSRF_TOKEN'] = '';
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
$_SERVER['HTTP_X_CSRF_TOKEN'] = Rhymix\Framework\Session::createToken();
$this->assertTrue(Rhymix\Framework\Security::checkCSRF());
$_SERVER['HTTP_REFERER'] = 'http://www.foobar.com/';
$_SERVER['HTTP_X_CSRF_TOKEN'] = '';
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
$_SERVER['HTTP_REFERER'] = 'http://www.rhymix.org/foo/bar';
$_SERVER['HTTP_X_CSRF_TOKEN'] = '';
$this->assertTrue(Rhymix\Framework\Security::checkCSRF());
$_SERVER['HTTP_X_CSRF_TOKEN'] = 'invalid value';
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
$_SERVER['HTTP_ORIGIN'] = 'http://www.rhymix.org';
$_SERVER['HTTP_REFERER'] = 'http://www.foobar.com';
$_SERVER['HTTP_X_CSRF_TOKEN'] = '';
@ -130,34 +130,34 @@ class SecurityTest extends \Codeception\TestCase\Test
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
$_SERVER['HTTP_ORIGIN'] = 'null';
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
$_SERVER['HTTP_REFERER'] = '';
$_SERVER['HTTP_X_CSRF_TOKEN'] = '';
$this->assertTrue(Rhymix\Framework\Security::checkCSRF('http://www.rhymix.org/'));
error_reporting($error_reporting);
}
public function testCheckXXE()
{
$xml = '<methodCall></methodCall>';
$this->assertTrue(Rhymix\Framework\Security::checkXXE($xml));
$xml = '<?xml version="1.0" encoding="UTF-8"?><methodCall></methodCall>';
$this->assertTrue(Rhymix\Framework\Security::checkXXE($xml));
$xml = '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo><methodCall attr="value"></methodCall>';
$this->assertTrue(Rhymix\Framework\Security::checkXXE($xml));
$xml = '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo><whatever></whatever>';
$this->assertFalse(Rhymix\Framework\Security::checkXXE($xml));
$xml = '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo>';
$this->assertFalse(Rhymix\Framework\Security::checkXXE($xml));
$xml = '<?xml version="1.0" encoding="UTF-8"?><!ENTITY xxe SYSTEM "http://www.attacker.com/text.txt"><methodCall></methodCall>';
$this->assertFalse(Rhymix\Framework\Security::checkXXE($xml));
$xml = '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ELEMENT foo ANY><!ENTITY xxe SYSTEM "file:///etc/passwd" >]><fault></fault>';
$this->assertFalse(Rhymix\Framework\Security::checkXXE($xml));
}

View file

@ -10,7 +10,7 @@ class SessionTest extends \Codeception\TestCase\Test
$_SESSION = array();
$_COOKIE = array();
}
public function _after()
{
Rhymix\Framework\Config::set('session.delay', false);
@ -19,7 +19,7 @@ class SessionTest extends \Codeception\TestCase\Test
$_SESSION = array();
$_COOKIE = array();
}
public function _failed()
{
Rhymix\Framework\Config::set('session.delay', false);
@ -28,7 +28,7 @@ class SessionTest extends \Codeception\TestCase\Test
$_SESSION = array();
$_COOKIE = array();
}
public function testGetSet()
{
$this->assertFalse(isset($_SESSION['foo']['bar']));
@ -40,11 +40,11 @@ class SessionTest extends \Codeception\TestCase\Test
$this->assertEquals(array('bar' => 'bazz', 'baz' => 'bazzzz'), Rhymix\Framework\Session::get('foo'));
$this->assertEquals(array('bar' => 'bazz', 'baz' => 'bazzzz'), $_SESSION['foo']);
}
public function testStart()
{
Rhymix\Framework\Config::set('session.use_keys', true);
// Test normal start.
$this->assertTrue(@Rhymix\Framework\Session::start());
$this->assertTrue(isset($_COOKIE['rx_sesskey1']));
@ -55,41 +55,41 @@ class SessionTest extends \Codeception\TestCase\Test
$this->assertEquals(0, $_SESSION['RHYMIX']['keys']['www.rhymix.org']['trusted']);
$session_secret = $_SESSION['RHYMIX']['secret'];
Rhymix\Framework\Session::close();
// Test normal restart.
$this->assertTrue(@Rhymix\Framework\Session::start());
$this->assertEquals($session_secret, $_SESSION['RHYMIX']['secret']);
$session_secret = $_SESSION['RHYMIX']['secret'];
Rhymix\Framework\Session::close();
// Test missing HTTP key.
unset($_COOKIE['rx_sesskey1']);
$this->assertTrue(@Rhymix\Framework\Session::start());
$this->assertNotEquals($session_secret, $_SESSION['RHYMIX']['secret']);
$session_secret = $_SESSION['RHYMIX']['secret'];
Rhymix\Framework\Session::close();
// Test missing HTTPS key.
unset($_COOKIE['rx_sesskey2']);
$this->assertTrue(@Rhymix\Framework\Session::start());
$this->assertNotEquals($session_secret, $_SESSION['RHYMIX']['secret']);
$session_secret = $_SESSION['RHYMIX']['secret'];
Rhymix\Framework\Session::close();
// Test invalid HTTP key.
$_COOKIE['rx_sesskey1'] = substr(md5(mt_rand()), 0, 24);
$this->assertTrue(@Rhymix\Framework\Session::start());
$this->assertNotEquals($session_secret, $_SESSION['RHYMIX']['secret']);
$session_secret = $_SESSION['RHYMIX']['secret'];
Rhymix\Framework\Session::close();
// Test invalid HTTPS key.
$_COOKIE['rx_sesskey2'] = substr(md5(mt_rand()), 0, 24);
$this->assertTrue(@Rhymix\Framework\Session::start());
$this->assertNotEquals($session_secret, $_SESSION['RHYMIX']['secret']);
$session_secret = $_SESSION['RHYMIX']['secret'];
Rhymix\Framework\Session::close();
// Test initial transition from HTTP to HTTPS.
session_start();
unset($_SESSION['RHYMIX']['keys']['www.rhymix.org']['key2']);
@ -100,11 +100,11 @@ class SessionTest extends \Codeception\TestCase\Test
$session_secret = $_SESSION['RHYMIX']['secret'];
Rhymix\Framework\Session::close();
}
public function testCheckStart()
{
Rhymix\Framework\Config::set('session.delay', true);
$_SESSION = array();
unset($_COOKIE['PHPSESSID']);
$this->assertFalse(@Rhymix\Framework\Session::start());
@ -112,35 +112,35 @@ class SessionTest extends \Codeception\TestCase\Test
$this->assertFalse(Rhymix\Framework\Session::checkStart());
$this->assertFalse(Rhymix\Framework\Session::isStarted());
Rhymix\Framework\Session::close();
$_SESSION['foo'] = 'bar';
$this->assertTrue(@Rhymix\Framework\Session::checkStart());
$this->assertTrue(Rhymix\Framework\Session::isStarted());
$this->assertEquals('bar', $_SESSION['foo']);
$this->assertEquals('bar', Rhymix\Framework\Session::get('foo'));
Rhymix\Framework\Session::close();
$_SESSION = array();
unset($_COOKIE['PHPSESSID']);
$this->assertTrue(@Rhymix\Framework\Session::checkStart(true));
$this->assertTrue(Rhymix\Framework\Session::isStarted());
Rhymix\Framework\Session::close();
$_SESSION = array();
unset($_COOKIE['PHPSESSID']);
$this->assertTrue(@Rhymix\Framework\Session::start(true));
$this->assertTrue(Rhymix\Framework\Session::isStarted());
}
public function testCheckSSO()
{
$this->assertNull(Rhymix\Framework\Session::checkSSO(new stdClass));
}
public function testRefresh()
{
$_SERVER['REQUEST_METHOD'] = 'GET';
@Rhymix\Framework\Session::start();
$session_secret = $_SESSION['RHYMIX']['secret'];
$key1 = $_SESSION['RHYMIX']['keys']['www.rhymix.org']['key1'];
@ -148,7 +148,7 @@ class SessionTest extends \Codeception\TestCase\Test
$_SESSION['RHYMIX']['keys']['www.rhymix.org']['key1_time'] = time() - 3600;
$_SESSION['RHYMIX']['keys']['www.rhymix.org']['key2_time'] = time() - 3600;
Rhymix\Framework\Session::close();
@Rhymix\Framework\Session::start();
$this->assertNotEquals($key1, $_SESSION['RHYMIX']['keys']['www.rhymix.org']['key1']);
$this->assertNotEquals($key2, $_SESSION['RHYMIX']['keys']['www.rhymix.org']['key2']);
@ -157,7 +157,7 @@ class SessionTest extends \Codeception\TestCase\Test
$this->assertEquals($session_secret, $_SESSION['RHYMIX']['secret']);
Rhymix\Framework\Session::close();
}
public function testClose()
{
@Rhymix\Framework\Session::start();
@ -165,7 +165,7 @@ class SessionTest extends \Codeception\TestCase\Test
Rhymix\Framework\Session::close();
$this->assertEquals(\PHP_SESSION_NONE, session_status());
}
public function testDestroy()
{
@Rhymix\Framework\Session::start();
@ -173,27 +173,27 @@ class SessionTest extends \Codeception\TestCase\Test
Rhymix\Framework\Session::destroy();
$this->assertFalse(isset($_SESSION['RHYMIX']));
}
public function testLoginLogout()
{
@Rhymix\Framework\Session::start();
$this->assertFalse($_SESSION['RHYMIX']['login']);
$this->assertFalse($_SESSION['member_srl']);
$this->assertFalse($_SESSION['is_logged']);
Rhymix\Framework\Session::login(42);
$this->assertEquals(42, $_SESSION['RHYMIX']['login']);
$this->assertEquals(42, $_SESSION['member_srl']);
$this->assertTrue($_SESSION['is_logged']);
Rhymix\Framework\Session::logout();
$this->assertFalse(isset($_SESSION['RHYMIX']['login']));
$this->assertFalse(isset($_SESSION['member_srl']));
$this->assertFalse(isset($_SESSION['is_logged']));
Rhymix\Framework\Session::close();
}
public function testIsStarted()
{
$this->assertFalse(Rhymix\Framework\Session::isStarted());
@ -202,47 +202,47 @@ class SessionTest extends \Codeception\TestCase\Test
Rhymix\Framework\Session::close();
$this->assertFalse(Rhymix\Framework\Session::isStarted());
}
public function testIsMember()
{
@Rhymix\Framework\Session::start();
$this->assertFalse(Rhymix\Framework\Session::isMember());
Rhymix\Framework\Session::login(42);
$this->assertTrue(Rhymix\Framework\Session::isMember());
Rhymix\Framework\Session::close();
}
public function testIsAdmin()
{
@Rhymix\Framework\Session::start();
$this->assertFalse(Rhymix\Framework\Session::isAdmin());
Rhymix\Framework\Session::login(42);
$this->assertFalse(Rhymix\Framework\Session::isAdmin());
Rhymix\Framework\Session::setMemberInfo((object)array('member_srl' => 42, 'is_admin' => 'Y'));
$this->assertTrue(Rhymix\Framework\Session::isAdmin());
Rhymix\Framework\Session::setMemberInfo((object)array('member_srl' => 99, 'is_admin' => 'Y'));
$this->assertFalse(Rhymix\Framework\Session::isAdmin());
Rhymix\Framework\Session::close();
}
public function testIsTrusted()
{
@Rhymix\Framework\Session::start();
$_SESSION['RHYMIX']['keys']['www.rhymix.org']['trusted'] = 0;
$this->assertFalse(Rhymix\Framework\Session::isTrusted());
$_SESSION['RHYMIX']['keys']['www.rhymix.org']['trusted'] = time() + 300;
$this->assertTrue(Rhymix\Framework\Session::isTrusted());
Rhymix\Framework\Session::close();
}
public function testIsValid()
{
@Rhymix\Framework\Session::start();
@ -252,115 +252,115 @@ class SessionTest extends \Codeception\TestCase\Test
$validity_info = Rhymix\Framework\Session::getValidityInfo($member_srl);
$this->assertTrue(is_object($validity_info));
$this->assertTrue(isset($validity_info->invalid_before));
$validity_info->invalid_before = time() - 3600;
$this->assertTrue(Rhymix\Framework\Session::setValidityInfo($member_srl, $validity_info));
$this->assertTrue(Rhymix\Framework\Session::isValid());
$validity_info->invalid_before = time() + 300;
$this->assertTrue(Rhymix\Framework\Session::setValidityInfo($member_srl, $validity_info));
$this->assertFalse(@Rhymix\Framework\Session::isValid());
$validity_info->invalid_before = time() - 900;
$this->assertTrue(Rhymix\Framework\Session::setValidityInfo($member_srl, $validity_info));
$this->assertTrue(Rhymix\Framework\Session::isValid());
Rhymix\Framework\Session::close();
}
public function testGetMemberSrl()
{
@Rhymix\Framework\Session::start();
$this->assertEquals(false, Rhymix\Framework\Session::getMemberSrl());
Rhymix\Framework\Session::login(42);
$this->assertEquals(42, Rhymix\Framework\Session::getMemberSrl());
Rhymix\Framework\Session::close();
}
public function testGetMemberInfo()
{
@Rhymix\Framework\Session::start();
$this->assertEquals(new Rhymix\Framework\Helpers\SessionHelper(), Rhymix\Framework\Session::getMemberInfo());
Rhymix\Framework\Session::login(42);
$this->assertEquals(new Rhymix\Framework\Helpers\SessionHelper(), Rhymix\Framework\Session::getMemberInfo());
Rhymix\Framework\Session::setMemberInfo((object)array('member_srl' => 42));
$this->assertEquals((object)array('member_srl' => 42), Rhymix\Framework\Session::getMemberInfo());
Rhymix\Framework\Session::setMemberInfo((object)array('member_srl' => 99, 'is_admin' => 'Y'));
$this->assertEquals(new Rhymix\Framework\Helpers\SessionHelper(), Rhymix\Framework\Session::getMemberInfo());
Rhymix\Framework\Session::close();
}
public function testGetSetLanguage()
{
@Rhymix\Framework\Session::start();
$this->assertEquals(\Context::getLangType(), Rhymix\Framework\Session::getLanguage());
Rhymix\Framework\Session::setLanguage('ja');
$this->assertEquals('ja', Rhymix\Framework\Session::getLanguage());
Rhymix\Framework\Session::close();
}
public function testGetSetTimezone()
{
@Rhymix\Framework\Session::start();
$this->assertEquals(config('locale.default_timezone'), Rhymix\Framework\Session::getTimezone());
Rhymix\Framework\Session::setTimezone('Asia/Beijing');
$this->assertEquals('Asia/Beijing', Rhymix\Framework\Session::getTimezone());
Rhymix\Framework\Session::close();
}
public function testTokens()
{
@Rhymix\Framework\Session::start();
$token1 = Rhymix\Framework\Session::createToken();
$this->assertTrue(ctype_alnum($token1));
$this->assertEquals(16, strlen($token1));
$this->assertTrue(Rhymix\Framework\Session::verifyToken($token1));
$this->assertFalse(Rhymix\Framework\Session::verifyToken(strrev($token1)));
$token2 = Rhymix\Framework\Session::createToken('/my/key');
$this->assertTrue(Rhymix\Framework\Session::verifyToken($token2, '/my/key'));
$this->assertFalse(Rhymix\Framework\Session::verifyToken($token2));
$this->assertFalse(Rhymix\Framework\Session::verifyToken($token2, '/wrong/key'));
$this->assertFalse(Rhymix\Framework\Session::verifyToken(strrev($token2)));
$token3 = Rhymix\Framework\Session::getGenericToken();
$this->assertEquals(16, strlen($token3));
$this->assertTrue(Rhymix\Framework\Session::verifyToken($token3));
$this->assertTrue(Rhymix\Framework\Session::verifyToken($token3, ''));
$this->assertFalse(Rhymix\Framework\Session::verifyToken($token3, '/wrong/key'));
Rhymix\Framework\Session::destroy();
$this->assertFalse(Rhymix\Framework\Session::verifyToken($token1));
$this->assertFalse(Rhymix\Framework\Session::verifyToken($token1, '/my/key'));
$this->assertFalse(Rhymix\Framework\Session::getGenericToken());
}
public function testEncryption()
{
@Rhymix\Framework\Session::start();
$plaintext = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.';
$ciphertext = Rhymix\Framework\Session::encrypt($plaintext);
$this->assertNotEquals(false, $ciphertext);
$this->assertEquals($plaintext, Rhymix\Framework\Session::decrypt($ciphertext));
Rhymix\Framework\Session::destroy();
$this->assertFalse(Rhymix\Framework\Session::decrypt($ciphertext));
@Rhymix\Framework\Session::start();
$this->assertFalse(Rhymix\Framework\Session::decrypt($ciphertext));
Rhymix\Framework\Session::close();
}
}

View file

@ -6,19 +6,19 @@ class StorageTest extends \Codeception\TestCase\Test
{
Rhymix\Framework\Storage::deleteDirectory(\RX_BASEDIR . 'tests/_output', false);
}
public function _after()
{
@chmod(\RX_BASEDIR . 'tests/_output', 0755);
Rhymix\Framework\Storage::deleteDirectory(\RX_BASEDIR . 'tests/_output', false);
}
public function _failed()
{
@chmod(\RX_BASEDIR . 'tests/_output', 0755);
Rhymix\Framework\Storage::deleteDirectory(\RX_BASEDIR . 'tests/_output', false);
}
public function testExists()
{
$this->assertTrue(Rhymix\Framework\Storage::exists(__FILE__));
@ -26,7 +26,7 @@ class StorageTest extends \Codeception\TestCase\Test
$this->assertFalse(Rhymix\Framework\Storage::exists(__FILE__ . '.nonexistent.suffix'));
$this->assertFalse(Rhymix\Framework\Storage::exists(__DIR__ . '/nonexistent.subdirectory'));
}
public function testIsFile()
{
$this->assertTrue(Rhymix\Framework\Storage::isFile(__FILE__));
@ -34,18 +34,18 @@ class StorageTest extends \Codeception\TestCase\Test
$this->assertFalse(Rhymix\Framework\Storage::isFile(__FILE__ . '.nonexistent.suffix'));
$this->assertFalse(Rhymix\Framework\Storage::isFile(__DIR__ . '/nonexistent.subdirectory'));
}
public function testIsEmptyFile()
{
$emptyfile = \RX_BASEDIR . 'tests/_output/emptyfile.txt';
file_put_contents($emptyfile, '');
$this->assertTrue(Rhymix\Framework\Storage::isEmptyFile($emptyfile));
$this->assertFalse(Rhymix\Framework\Storage::isEmptyFile($emptyfile . '.nonexistent.suffix'));
$this->assertFalse(Rhymix\Framework\Storage::isEmptyFile(__FILE__));
$this->assertFalse(Rhymix\Framework\Storage::isEmptyFile(__DIR__));
}
public function testIsDirectory()
{
$this->assertTrue(Rhymix\Framework\Storage::isDirectory(__DIR__));
@ -53,40 +53,40 @@ class StorageTest extends \Codeception\TestCase\Test
$this->assertFalse(Rhymix\Framework\Storage::isDirectory(__FILE__ . '.nonexistent.suffix'));
$this->assertFalse(Rhymix\Framework\Storage::isDirectory(__DIR__ . '/nonexistent.subdirectory'));
}
public function testIsEmptyDirectory()
{
$emptydir = \RX_BASEDIR . 'tests/_output/emptydir';
mkdir($emptydir);
$this->assertTrue(Rhymix\Framework\Storage::isEmptyDirectory($emptydir));
$this->assertFalse(Rhymix\Framework\Storage::isEmptyDirectory($emptydir . '/nonexistent.subdirectory'));
$this->assertFalse(Rhymix\Framework\Storage::isEmptyDirectory(__FILE__));
$this->assertFalse(Rhymix\Framework\Storage::isEmptyDirectory(__DIR__));
}
public function testIsSymlink()
{
if (strncasecmp(\PHP_OS, 'Win', 3) === 0)
{
return;
}
$symlink_source = \RX_BASEDIR . 'tests/_output/link.source.txt';
$symlink_target = \RX_BASEDIR . 'tests/_output/link.target.txt';
file_put_contents($symlink_target, 'foobar');
symlink($symlink_target, $symlink_source);
$this->assertTrue(Rhymix\Framework\Storage::isSymlink($symlink_source));
$this->assertFalse(Rhymix\Framework\Storage::isSymlink($symlink_target));
unlink($symlink_target);
$this->assertTrue(Rhymix\Framework\Storage::isSymlink($symlink_source));
$this->assertFalse(Rhymix\Framework\Storage::isValidSymlink($symlink_source));
$this->assertFalse(Rhymix\Framework\Storage::isSymlink($symlink_target));
$this->assertFalse(Rhymix\Framework\Storage::isValidSymlink($symlink_target));
}
public function testIsReadable()
{
$this->assertTrue(Rhymix\Framework\Storage::isReadable(__FILE__));
@ -94,12 +94,12 @@ class StorageTest extends \Codeception\TestCase\Test
$this->assertFalse(Rhymix\Framework\Storage::isReadable(__FILE__ . '.nonexistent.suffix'));
$this->assertFalse(Rhymix\Framework\Storage::isReadable('/dev/nonexistent'));
}
public function testIsWritable()
{
$testfile = \RX_BASEDIR . 'tests/_output/testfile.txt';
file_put_contents($testfile, 'foobar');
$this->assertTrue(Rhymix\Framework\Storage::isWritable(__FILE__));
$this->assertTrue(Rhymix\Framework\Storage::isWritable(__DIR__));
$this->assertTrue(Rhymix\Framework\Storage::isWritable($testfile));
@ -107,7 +107,7 @@ class StorageTest extends \Codeception\TestCase\Test
$this->assertFalse(Rhymix\Framework\Storage::isWritable($testfile . '.nonexistent.suffix'));
$this->assertFalse(Rhymix\Framework\Storage::isWritable('/dev/nonexistent'));
}
public function testGetSize()
{
$this->assertEquals(filesize(__FILE__), Rhymix\Framework\Storage::getSize(__FILE__));
@ -115,7 +115,7 @@ class StorageTest extends \Codeception\TestCase\Test
$this->assertFalse(Rhymix\Framework\Storage::getSize(__FILE__ . '.nonexistent.suffix'));
$this->assertFalse(Rhymix\Framework\Storage::getSize('/dev/nonexistent'));
}
public function testRead()
{
// Simple read test
@ -123,56 +123,56 @@ class StorageTest extends \Codeception\TestCase\Test
$this->assertFalse(Rhymix\Framework\Storage::read(__FILE__ . '.nonexistent.suffix'));
$this->assertFalse(Rhymix\Framework\Storage::read(__DIR__));
$this->assertFalse(Rhymix\Framework\Storage::read('/dev/nonexistent'));
// Stream read test
$fp = Rhymix\Framework\Storage::read(__FILE__, true);
$this->assertTrue(is_resource($fp));
$this->assertEquals(file_get_contents(__FILE__), fread($fp, filesize(__FILE__)));
fclose($fp);
}
public function testWrite()
{
$testfile = \RX_BASEDIR . 'tests/_output/subdirectory/testfile.txt';
$copyfile = \RX_BASEDIR . 'tests/_output/subdirectory/copyfile.txt';
// Simple write test
$this->assertTrue(Rhymix\Framework\Storage::write($testfile, 'foobarbazzjazz'));
$this->assertTrue(file_exists($testfile));
$this->assertEquals('foobarbazzjazz', file_get_contents($testfile));
$this->assertEquals(0666 & ~Rhymix\Framework\Storage::getUmask(), fileperms($testfile) & 0777);
// Append test
$this->assertTrue(Rhymix\Framework\Storage::write($testfile, 'rhymix', 'a', 0666));
$this->assertTrue(file_exists($testfile));
$this->assertEquals('foobarbazzjazzrhymix', file_get_contents($testfile));
$this->assertEquals(0666, fileperms($testfile) & 0777);
// Stream copy test
$stream = fopen($testfile, 'r');
$this->assertTrue(Rhymix\Framework\Storage::write($copyfile, $stream));
$this->assertEquals('foobarbazzjazzrhymix', file_get_contents($copyfile));
fclose($stream);
// Stream append test
$stream = fopen($testfile, 'r');
$this->assertTrue(Rhymix\Framework\Storage::write($copyfile, $stream, 'a'));
$this->assertEquals('foobarbazzjazzrhymixfoobarbazzjazzrhymix', file_get_contents($copyfile));
fclose($stream);
// Partial stream append test
$stream = fopen($testfile, 'r');
fseek($stream, 14);
$this->assertTrue(Rhymix\Framework\Storage::write($copyfile, $stream, 'a'));
$this->assertEquals('foobarbazzjazzrhymixfoobarbazzjazzrhymixrhymix', file_get_contents($copyfile));
fclose($stream);
// Empty file write test
$this->assertTrue(Rhymix\Framework\Storage::write($testfile . '1', ''));
$this->assertTrue(file_exists($testfile . '1'));
$this->assertEquals(0, filesize($testfile . '1'));
$this->assertEmpty(glob($testfile . '1.tmp.*'));
// Empty stream copy test
$stream = fopen('php://temp', 'r');
$this->assertTrue(Rhymix\Framework\Storage::write($testfile . '2', $stream));
@ -180,7 +180,7 @@ class StorageTest extends \Codeception\TestCase\Test
$this->assertEquals(0, filesize($testfile . '2'));
$this->assertEmpty(glob($testfile . '2.tmp.*'));
fclose($stream);
// Umask test
if (strncasecmp(\PHP_OS, 'Win', 3) !== 0)
{
@ -193,16 +193,16 @@ class StorageTest extends \Codeception\TestCase\Test
Rhymix\Framework\Storage::setUmask($umask);
}
}
public function testReadWritePHPData()
{
$testfile = \RX_BASEDIR . 'tests/_output/test.php';
$data = array('foo' => 'bar', 'baz' => array('rhymix' => '\'"special\\chars' . chr(0) . chr(255), 'test' => 'wow'));
$this->assertTrue(Rhymix\Framework\Storage::writePHPData($testfile, $data));
$this->assertEquals($data, Rhymix\Framework\Storage::readPHPData($testfile));
}
public function testCopy()
{
$source = \RX_BASEDIR . 'tests/_output/copy.source.txt';
@ -210,17 +210,17 @@ class StorageTest extends \Codeception\TestCase\Test
$target_dir = \RX_BASEDIR . 'tests/_output';
file_put_contents($source, 'foobarbaz');
chmod($source, 0646);
// Copy with exact destination filename
$this->assertTrue(Rhymix\Framework\Storage::copy($source, $target));
$this->assertTrue(file_exists($target));
$this->assertTrue(file_get_contents($target) === 'foobarbaz');
// Copy into directory with source filename
$this->assertTrue(Rhymix\Framework\Storage::copy($source, $target_dir));
$this->assertTrue(file_exists($target_dir . '/copy.source.txt'));
$this->assertTrue(file_get_contents($target_dir . '/copy.source.txt') === 'foobarbaz');
// Copy into directory with no write permissions
chmod($target_dir, 0555);
file_put_contents($source, 'foobarbaz has changed');
@ -228,7 +228,7 @@ class StorageTest extends \Codeception\TestCase\Test
$this->assertTrue(file_exists($target));
$this->assertTrue(file_get_contents($target) === 'foobarbaz has changed');
chmod($target_dir, 0755);
if (strncasecmp(\PHP_OS, 'Win', 3) !== 0)
{
$this->assertEquals(0646, fileperms($target) & 0777);
@ -236,35 +236,35 @@ class StorageTest extends \Codeception\TestCase\Test
$this->assertEquals(0755, fileperms($target) & 0777);
}
}
public function testMove()
{
$source = \RX_BASEDIR . 'tests/_output/move.source.txt';
$target = \RX_BASEDIR . 'tests/_output/move.target.txt';
file_put_contents($source, 'foobarbaz');
$this->assertTrue(Rhymix\Framework\Storage::move($source, $target));
$this->assertTrue(file_exists($target));
$this->assertTrue(file_get_contents($target) === 'foobarbaz');
$this->assertFalse(file_exists($source));
}
public function testDelete()
{
$testfile = \RX_BASEDIR . 'tests/_output/testfile.txt';
file_put_contents($testfile, 'foobar');
$this->assertTrue(Rhymix\Framework\Storage::delete($testfile));
$this->assertFalse(file_exists($testfile));
}
public function testCreateDirectory()
{
$emptydir = \RX_BASEDIR . 'tests/_output/emptydir';
$this->assertTrue(Rhymix\Framework\Storage::createDirectory($emptydir));
$this->assertTrue(file_exists($emptydir) && is_dir($emptydir));
// Umask test
if (strncasecmp(\PHP_OS, 'Win', 3) !== 0)
{
@ -277,7 +277,7 @@ class StorageTest extends \Codeception\TestCase\Test
Rhymix\Framework\Storage::setUmask($umask);
}
}
public function testReadDirectory()
{
$testdir = \RX_BASEDIR . 'tests/_output/testdir';
@ -287,7 +287,7 @@ class StorageTest extends \Codeception\TestCase\Test
file_put_contents($testdir . '/foo', 'foo');
file_put_contents($testdir . '/bar', 'bar');
file_put_contents($testdir . '/baz', 'baz');
$this->assertEquals(array($testdir . '/bar', $testdir . '/baz', $testdir . '/foo'), Rhymix\Framework\Storage::readDirectory($testdir));
$this->assertEquals(array('bar', 'baz', 'foo'), Rhymix\Framework\Storage::readDirectory($testdir, false));
$this->assertEquals(array('bar', 'baz', 'foo', 'subdir'), Rhymix\Framework\Storage::readDirectory($testdir, false, true, false));
@ -295,7 +295,7 @@ class StorageTest extends \Codeception\TestCase\Test
$this->assertEquals(array('.dotfile', 'bar', 'baz', 'foo', 'subdir'), Rhymix\Framework\Storage::readDirectory($testdir, false, false, false));
$this->assertFalse(Rhymix\Framework\Storage::readDirectory('/opt/nonexistent/foobar'));
}
public function testCopyDirectory()
{
$sourcedir = \RX_BASEDIR . 'tests/_output/sourcedir';
@ -304,14 +304,14 @@ class StorageTest extends \Codeception\TestCase\Test
file_put_contents($sourcedir . '/bar', 'bar');
file_put_contents($sourcedir . '/subdir/baz', 'baz');
$targetdir = \RX_BASEDIR . 'tests/_output/targetdir';
$this->assertTrue(Rhymix\Framework\Storage::copyDirectory($sourcedir, $targetdir));
$this->assertTrue(file_exists($targetdir . '/bar'));
$this->assertTrue(file_exists($targetdir . '/subdir/baz'));
if (is_writable('/opt')) @touch('/opt/nonexistent');
$this->assertFalse(@Rhymix\Framework\Storage::copyDirectory($sourcedir, '/opt/nonexistent/foobar'));
}
public function testMoveDirectory()
{
$sourcedir = \RX_BASEDIR . 'tests/_output/sourcedir';
@ -320,13 +320,13 @@ class StorageTest extends \Codeception\TestCase\Test
file_put_contents($sourcedir . '/bar', 'bar');
file_put_contents($sourcedir . '/subdir/baz', 'baz');
$targetdir = \RX_BASEDIR . 'tests/_output/targetdir';
$this->assertTrue(Rhymix\Framework\Storage::moveDirectory($sourcedir, $targetdir));
$this->assertTrue(file_exists($targetdir . '/bar'));
$this->assertTrue(file_exists($targetdir . '/subdir/baz'));
$this->assertFalse(file_exists($sourcedir));
}
public function testDeleteDirectory()
{
$sourcedir = \RX_BASEDIR . 'tests/_output/sourcedir';
@ -335,13 +335,13 @@ class StorageTest extends \Codeception\TestCase\Test
file_put_contents($sourcedir . '/bar', 'bar');
file_put_contents($sourcedir . '/subdir/baz', 'baz');
$nonexistent = \RX_BASEDIR . 'tests/_output/targetdir';
$this->assertTrue(Rhymix\Framework\Storage::deleteDirectory($sourcedir));
$this->assertFalse(file_exists($sourcedir . '/subdir/baz'));
$this->assertFalse(file_exists($sourcedir));
$this->assertFalse(Rhymix\Framework\Storage::deleteDirectory($nonexistent));
}
public function testDeleteDirectoryKeepRoot()
{
$sourcedir = \RX_BASEDIR . 'tests/_output/sourcedir';
@ -350,13 +350,13 @@ class StorageTest extends \Codeception\TestCase\Test
file_put_contents($sourcedir . '/bar', 'bar');
file_put_contents($sourcedir . '/subdir/baz', 'baz');
$nonexistent = \RX_BASEDIR . 'tests/_output/targetdir';
$this->assertTrue(Rhymix\Framework\Storage::deleteDirectory($sourcedir, false));
$this->assertFalse(file_exists($sourcedir . '/subdir/baz'));
$this->assertTrue(file_exists($sourcedir));
$this->assertFalse(Rhymix\Framework\Storage::deleteDirectory($nonexistent));
}
public function testDeleteEmptyDirectory()
{
$sourcedir = \RX_BASEDIR . 'tests/_output/sourcedir';
@ -366,7 +366,7 @@ class StorageTest extends \Codeception\TestCase\Test
mkdir($sourcedir . '/subdir/subsubdir');
mkdir($sourcedir . '/subdir/subsubdir/subsubdir');
file_put_contents($sourcedir . '/subdir/subsubdir/subsubdir/foo', 'bar');
$this->assertFalse(Rhymix\Framework\Storage::deleteEmptyDirectory($sourcedir . '/subdir/subsubdir/subsubdir'));
Rhymix\Framework\Storage::delete($sourcedir . '/subdir/subsubdir/subsubdir/foo');
$this->assertTrue(Rhymix\Framework\Storage::deleteEmptyDirectory($sourcedir . '/subdir/subsubdir/subsubdir'));
@ -379,11 +379,11 @@ class StorageTest extends \Codeception\TestCase\Test
$this->assertTrue(file_exists($sourcedir));
$this->assertTrue(file_exists($sourcedir . '/foo'));
}
public function testRecommendUmask()
{
$umask = Rhymix\Framework\Storage::recommendUmask();
if (strncasecmp(\PHP_OS, 'Win', 3) !== 0)
{
if (fileowner(__FILE__) == exec('id -u'))
@ -399,7 +399,7 @@ class StorageTest extends \Codeception\TestCase\Test
{
$this->assertEquals('0000', $umask);
}
$this->assertFalse(file_exists(\RX_BASEDIR . 'files/cache/uidcheck'));
}
}

View file

@ -13,14 +13,14 @@ class TimerTest extends \Codeception\TestCase\Test
$elapsed = Rhymix\Framework\Timer::stop();
usleep(1000);
$t3 = microtime(true);
$this->assertGreaterThanOrEqual($t1, $started);
$this->assertLessThanOrEqual($t2, $started);
$this->assertGreaterThanOrEqual($t2 - $started, $elapsed);
$this->assertLessThanOrEqual($t3 - $t1, $elapsed);
$this->assertGreaterThan(0, $elapsed);
}
function testNestedTimers()
{
$t1 = Rhymix\Framework\Timer::start();
@ -30,11 +30,11 @@ class TimerTest extends \Codeception\TestCase\Test
$t3 = Rhymix\Framework\Timer::stop();
usleep(1000);
$t4 = Rhymix\Framework\Timer::stop();
$this->assertGreaterThanOrEqual($t1, $t2);
$this->assertGreaterThan($t3, $t4);
}
function testMultipleTimers()
{
$t1 = Rhymix\Framework\Timer::start('timer1');
@ -42,27 +42,27 @@ class TimerTest extends \Codeception\TestCase\Test
$t2 = Rhymix\Framework\Timer::start('timer2');
$t3 = Rhymix\Framework\Timer::stop('timer1');
$t4 = Rhymix\Framework\Timer::stop('timer2');
$this->assertGreaterThanOrEqual($t1, $t2);
$this->assertGreaterThanOrEqual($t4, $t3);
}
function testTimerFormat()
{
$t1 = Rhymix\Framework\Timer::start();
usleep(10000);
$t2 = Rhymix\Framework\Timer::stopFormat();
$this->assertRegexp('/^[0-9\.,]+ms$/', $t2);
}
function testTimerSinceStartup()
{
$t1 = Rhymix\Framework\Timer::sinceStartup();
$t2 = Rhymix\Framework\Timer::sinceStartup();
$this->assertGreaterThanOrEqual($t1, $t2);
$t3 = Rhymix\Framework\Timer::sinceStartupFormat();
$this->assertRegexp('/^[0-9\.,]+ms$/', $t3);
}

View file

@ -7,55 +7,55 @@ class UATest extends \Codeception\TestCase\Test
// Phones
$this->assertTrue(Rhymix\Framework\UA::isMobile('Mozilla/5.0 (Linux; Android 5.0; Nexus 5 Build/LPX13D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36'));
$this->assertTrue(Rhymix\Framework\UA::isMobile('Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25'));
// Tablets
$this->assertTrue(Rhymix\Framework\UA::isMobile('Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25'));
$this->assertTrue(Rhymix\Framework\UA::isMobile('Mozilla/5.0 (Linux; Android 4.4.2; SM-T530 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Safari/537.36'));
// Not mobile
$this->assertFalse(Rhymix\Framework\UA::isMobile('Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko'));
$this->assertFalse(Rhymix\Framework\UA::isMobile('Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'));
$this->assertFalse(Rhymix\Framework\UA::isMobile('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0'));
$this->assertFalse(Rhymix\Framework\UA::isMobile('Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16'));
}
public function testIsTablet()
{
// Phones
$this->assertFalse(Rhymix\Framework\UA::isTablet('Mozilla/5.0 (Linux; Android 5.0; Nexus 5 Build/LPX13D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36'));
$this->assertFalse(Rhymix\Framework\UA::isTablet('Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25'));
// Tablets
$this->assertTrue(Rhymix\Framework\UA::isTablet('Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25'));
$this->assertTrue(Rhymix\Framework\UA::isTablet('Mozilla/5.0 (Linux; Android 4.4.2; SM-T530 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Safari/537.36'));
// Not mobile
$this->assertFalse(Rhymix\Framework\UA::isTablet('Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko'));
$this->assertFalse(Rhymix\Framework\UA::isTablet('Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)'));
}
public function testIsRobot()
{
// Robot
$this->assertTrue(Rhymix\Framework\UA::isRobot('Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)'));
$this->assertTrue(Rhymix\Framework\UA::isRobot('Googlebot/2.1 (+http://www.googlebot.com/bot.html)'));
$this->assertTrue(Rhymix\Framework\UA::isRobot('Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)'));
// Not robot
$this->assertFalse(Rhymix\Framework\UA::isRobot('Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25'));
$this->assertFalse(Rhymix\Framework\UA::isRobot('Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25'));
$this->assertFalse(Rhymix\Framework\UA::isRobot('Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko'));
}
public function testGetLocale()
{
$locale = Rhymix\Framework\UA::getLocale('en-US,en;q=0.8,ko-KR;q=0.5,ko;q=0.3');
$this->assertEquals('en-US', $locale);
$locale = Rhymix\Framework\UA::getLocale('ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3');
$this->assertEquals('ko-KR', $locale);
}
public function testGetBrowserInfo()
{
// Android default browser
@ -68,7 +68,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertTrue($browser->is_tablet);
$this->assertFalse($browser->is_webview);
$this->assertFalse($browser->is_robot);
// Android default browser (possible confusion with Chrome)
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Linux; Android 4.4.4; One Build/KTU84L.H4) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36');
$this->assertEquals('Android', $browser->browser);
@ -79,7 +79,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertFalse($browser->is_tablet);
$this->assertFalse($browser->is_webview);
$this->assertFalse($browser->is_robot);
// Android webview (possible confusion with Chrome)
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36');
$this->assertEquals('Android', $browser->browser);
@ -89,7 +89,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertFalse($browser->is_tablet);
$this->assertTrue($browser->is_webview);
$this->assertFalse($browser->is_robot);
// Android Chrome
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Linux; Android 5.0; Nexus 5 Build/LPX13D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36');
$this->assertEquals('Chrome', $browser->browser);
@ -98,7 +98,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertTrue($browser->is_mobile);
$this->assertFalse($browser->is_webview);
$this->assertFalse($browser->is_tablet);
// Windows Chrome
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36');
$this->assertEquals('Chrome', $browser->browser);
@ -106,83 +106,83 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('Windows', $browser->os);
$this->assertEquals('10.0', $browser->os_version);
$this->assertFalse($browser->is_mobile);
// Linux Chrome
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36');
$this->assertEquals('Chrome', $browser->browser);
$this->assertEquals('41.0', $browser->version);
$this->assertEquals('Linux', $browser->os);
$this->assertFalse($browser->is_mobile);
// Linux Konqueror
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (X11; Linux) KHTML/4.9.1 (like Gecko) Konqueror/4.9');
$this->assertEquals('Konqueror', $browser->browser);
$this->assertEquals('4.9', $browser->version);
$this->assertEquals('Linux', $browser->os);
// Edge 94 on Windows
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36 Edg/94.0.992.47');
$this->assertEquals('Edge', $browser->browser);
$this->assertEquals('94.0', $browser->version);
$this->assertEquals('Windows', $browser->os);
$this->assertFalse($browser->is_mobile);
// Edge 93 on Android
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Linux; Android 10; SM-G965N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Mobile Safari/537.36 EdgA/93.0.961.69');
$this->assertEquals('Edge', $browser->browser);
$this->assertEquals('93.0', $browser->version);
$this->assertEquals('Android', $browser->os);
$this->assertTrue($browser->is_mobile);
// Edge 93 on iOS
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (iPhone; CPU iPhone OS 15_0_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 EdgiOS/93.961.64 Mobile/15E148 Safari/605.1.15');
$this->assertEquals('Edge', $browser->browser);
$this->assertEquals('93.0', $browser->version);
$this->assertEquals('iOS', $browser->os);
$this->assertTrue($browser->is_mobile);
// Edge 13
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586');
$this->assertEquals('Edge', $browser->browser);
$this->assertEquals('13.0', $browser->version);
$this->assertEquals('Windows', $browser->os);
$this->assertFalse($browser->is_mobile);
// Edge 12
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136');
$this->assertEquals('Edge', $browser->browser);
$this->assertEquals('12.0', $browser->version);
$this->assertEquals('Windows', $browser->os);
$this->assertFalse($browser->is_mobile);
// IE 11
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko');
$this->assertEquals('IE', $browser->browser);
$this->assertEquals('11.0', $browser->version);
$this->assertEquals('Windows', $browser->os);
$this->assertEquals('10.0', $browser->os_version);
// IE 10 in compatibility mode
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/4.0 (Compatible; MSIE 8.0; Windows NT 5.2; Trident/6.0)');
$this->assertEquals('IE', $browser->browser);
$this->assertEquals('10.0', $browser->version);
$this->assertEquals('Windows', $browser->os);
$this->assertEquals('XP', $browser->os_version);
// IE 9
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)');
$this->assertEquals('IE', $browser->browser);
$this->assertEquals('9.0', $browser->version);
$this->assertEquals('Windows', $browser->os);
$this->assertEquals('7', $browser->os_version);
// IE 8 in compatibility mode
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)');
$this->assertEquals('IE', $browser->browser);
$this->assertEquals('8.0', $browser->version);
$this->assertEquals('Windows', $browser->os);
$this->assertEquals('Vista', $browser->os_version);
// iOS Safari
$browser = Rhymix\Framework\UA::getBrowserInfo('iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3');
$this->assertEquals('Safari', $browser->browser);
@ -192,7 +192,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('iPad', $browser->device);
$this->assertTrue($browser->is_mobile);
$this->assertTrue($browser->is_tablet);
// iOS Chrome
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3');
$this->assertEquals('Chrome', $browser->browser);
@ -202,7 +202,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('iPhone', $browser->device);
$this->assertTrue($browser->is_mobile);
$this->assertFalse($browser->is_tablet);
// iOS Firefox
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (iPad; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4');
$this->assertEquals('Firefox', $browser->browser);
@ -212,7 +212,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('iPad', $browser->device);
$this->assertTrue($browser->is_mobile);
$this->assertTrue($browser->is_tablet);
// macOS (OS X) Safari
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18');
$this->assertEquals('Safari', $browser->browser);
@ -220,7 +220,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('macOS', $browser->os);
$this->assertEquals('10.10.2', $browser->os_version);
$this->assertFalse($browser->is_mobile);
// macOS (OS X) Chrome
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36');
$this->assertEquals('Chrome', $browser->browser);
@ -228,38 +228,38 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('macOS', $browser->os);
$this->assertEquals('10.10.1', $browser->os_version);
$this->assertFalse($browser->is_mobile);
// macOS (OS X) Firefox
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0');
$this->assertEquals('Firefox', $browser->browser);
$this->assertEquals('33.0', $browser->version);
$this->assertEquals('macOS', $browser->os);
$this->assertFalse($browser->is_mobile);
// Opera 15
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.100');
$this->assertEquals('Opera', $browser->browser);
$this->assertEquals('15.0', $browser->version);
$this->assertFalse($browser->is_mobile);
// Opera 12
$browser = Rhymix\Framework\UA::getBrowserInfo('Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16');
$this->assertEquals('Opera', $browser->browser);
$this->assertEquals('12.16', $browser->version);
$this->assertFalse($browser->is_mobile);
// Opera 9.x
$browser = Rhymix\Framework\UA::getBrowserInfo('Opera/9.64 (X11; Linux x86_64; U; en) Presto/2.1.1');
$this->assertEquals('Opera', $browser->browser);
$this->assertEquals('9.64', $browser->version);
$this->assertFalse($browser->is_mobile);
// Iceweasel (Debian Firefox)
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (X11; Linux i686; rv:10.0.7) Gecko/20100101 Iceweasel/10.0.7');
$this->assertEquals('Firefox', $browser->browser);
$this->assertEquals('10.0', $browser->version);
$this->assertFalse($browser->is_mobile);
// Whale Mobile (Naver App)
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Linux; Android 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.128 Whale/1.0.0.0 Crosswalk/23.69.590.31 Mobile Safari/537.36 NAVER(inapp; search; 660; 10.7.2)');
$this->assertEquals('Whale', $browser->browser);
@ -268,7 +268,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertTrue($browser->is_mobile);
$this->assertFalse($browser->is_webview);
$this->assertFalse($browser->is_robot);
// XE Push App (Webview)
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Linux; Android 9; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/75.0.3770.101 Mobile Safari/537.36;App');
$this->assertEquals('Chrome', $browser->browser);
@ -277,82 +277,82 @@ class UATest extends \Codeception\TestCase\Test
$this->assertTrue($browser->is_mobile);
$this->assertTrue($browser->is_webview);
$this->assertFalse($browser->is_robot);
// Googlebot
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)');
$this->assertEquals('Googlebot', $browser->browser);
$this->assertEquals('2.1', $browser->version);
$this->assertTrue($browser->is_robot);
// Googlebot-Image
$browser = Rhymix\Framework\UA::getBrowserInfo('Googlebot-Image/1.0');
$this->assertEquals('Googlebot-Image', $browser->browser);
$this->assertEquals('1.0', $browser->version);
$this->assertTrue($browser->is_robot);
// Mediapartners-Google
$browser = Rhymix\Framework\UA::getBrowserInfo('Mediapartners-Google');
$this->assertEquals('Mediapartners-Google', $browser->browser);
$this->assertEquals(null, $browser->version);
$this->assertTrue($browser->is_robot);
// Bingbot
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)');
$this->assertEquals('Bingbot', $browser->browser);
$this->assertEquals('2.0', $browser->version);
$this->assertTrue($browser->is_robot);
// Yeti
$browser = Rhymix\Framework\UA::getBrowserInfo('Yeti/1.1; +http://naver.me/spd');
$this->assertEquals('Yeti', $browser->browser);
$this->assertEquals('1.1', $browser->version);
$this->assertTrue($browser->is_robot);
// Baiduspider
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)');
$this->assertEquals('Baiduspider', $browser->browser);
$this->assertEquals('2.0', $browser->version);
$this->assertTrue($browser->is_robot);
// wget
$browser = Rhymix\Framework\UA::getBrowserInfo('wget/1.17.1');
$this->assertEquals('Wget', $browser->browser);
$this->assertEquals('1.17', $browser->version);
$this->assertTrue($browser->is_robot);
// curl
$browser = Rhymix\Framework\UA::getBrowserInfo('curl/7.47.0');
$this->assertEquals('Curl', $browser->browser);
$this->assertEquals('7.47', $browser->version);
$this->assertTrue($browser->is_robot);
// PHP with version
$browser = Rhymix\Framework\UA::getBrowserInfo('PHP/5.2.9');
$this->assertEquals('PHP', $browser->browser);
$this->assertEquals('5.2', $browser->version);
$this->assertTrue($browser->is_robot);
// PHP without version
$browser = Rhymix\Framework\UA::getBrowserInfo('PHP');
$this->assertEquals('PHP', $browser->browser);
$this->assertNull($browser->version);
// PHP with HTTP_Request2
$browser = Rhymix\Framework\UA::getBrowserInfo('HTTP_Request2/2.1.1 (http://pear.php.net/package/http_request2) PHP/5.3.2');
$this->assertEquals('PHP', $browser->browser);
$this->assertEquals('5.3', $browser->version);
// Some random browser with the 'Mozilla' version
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; XH; rv:8.578.498) fr, Gecko/20121021 Camino/8.723+ (Firefox compatible)');
$this->assertEquals('Mozilla', $browser->browser);
$this->assertEquals('5.0', $browser->version);
// Some random browser without the 'Mozilla' version
$browser = Rhymix\Framework\UA::getBrowserInfo('W3C_Validator/1.650');
$this->assertEquals('W3C_Validator', $browser->browser);
$this->assertEquals('1.650', $browser->version);
}
public function testEncodeFilenameForDownload()
{
$this->assertEquals('filename*=UTF-8\'\'%ED%95%9C%EA%B8%80%20filename.jpg', Rhymix\Framework\UA::encodeFilenameForDownload('한글 filename.jpg', 'Chrome/50.0'));
@ -368,7 +368,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('filename="한글 filename.jpg"', Rhymix\Framework\UA::encodeFilenameForDownload('한글 filename.jpg', 'Safari/5.0 Version/5.0'));
$this->assertEquals('filename="한글 filename.jpg"', Rhymix\Framework\UA::encodeFilenameForDownload('한글 filename.jpg', 'Linux; Android 5.1.1; Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36'));
}
public function testGetSetColorScheme()
{
$_COOKIE['rx_color_scheme'] = 'light';
@ -379,7 +379,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('auto', Rhymix\Framework\UA::getColorScheme());
$_COOKIE['rx_color_scheme'] = 'invalid';
$this->assertEquals('auto', Rhymix\Framework\UA::getColorScheme());
Rhymix\Framework\UA::setColorScheme('light');
$this->assertEquals('light', $_COOKIE['rx_color_scheme']);
Rhymix\Framework\UA::setColorScheme('dark');

View file

@ -4,43 +4,43 @@ class URLTest extends \Codeception\TestCase\Test
{
private $baseurl;
private $relurl;
public function _before()
{
$this->baseurl = 'https://www.rhymix.org/' . basename(dirname(dirname(dirname(__DIR__)))) . '/';
$this->relurl = basename(dirname(dirname(dirname(__DIR__))));
}
public function testGetCurrentURL()
{
$old_request_uri = $_SERVER['REQUEST_URI'];
$_SERVER['REQUEST_URI'] = '/' . $this->relurl . '/index.php?foo=bar&xe=sucks';
// Getting the current URL
$this->assertEquals($this->baseurl . 'index.php?foo=bar&xe=sucks', Rhymix\Framework\URL::getCurrentURL());
// Adding items to the query string
$this->assertEquals($this->baseurl . 'index.php?foo=bar&xe=sucks&var=1&arr%5B0%5D=2&arr%5B1%5D=3', Rhymix\Framework\URL::getCurrentURL(array('var' => '1', 'arr' => array(2, 3))));
// Removing item from the query string
$this->assertEquals($this->baseurl . 'index.php?xe=sucks', Rhymix\Framework\URL::getCurrentURL(array('foo' => null)));
// Removing all items from the query string
$this->assertEquals($this->baseurl . 'index.php', Rhymix\Framework\URL::getCurrentURL(array('foo' => null, 'xe' => null)));
// Adding and removing parameters at the same time
$this->assertEquals($this->baseurl . 'index.php?xe=sucks&l=ko', Rhymix\Framework\URL::getCurrentURL(array('l' => 'ko', 'foo' => null)));
// Removing invalid characters in the current URL
$_SERVER['REQUEST_URI'] = '/' . $this->relurl . '/?foo="bar"';
$this->assertEquals($this->baseurl . '?foo=bar', Rhymix\Framework\URL::getCurrentURL());
$_SERVER['REQUEST_URI'] = '/' . $this->relurl . '/?foo=<bar&baz=rhymix>';
$this->assertEquals($this->baseurl . '?foo=bar&baz=rhymix', Rhymix\Framework\URL::getCurrentURL());
$this->assertEquals($this->baseurl . '?baz=rhymix&l=ko', Rhymix\Framework\URL::getCurrentURL(array('l' => 'ko', 'foo' => null)));
$_SERVER['REQUEST_URI'] = $old_request_uri;
}
public function testGetCurrentDomainURL()
{
$this->assertEquals('https://www.rhymix.org/', Rhymix\Framework\URL::getCurrentDomainURL());
@ -48,7 +48,7 @@ class URLTest extends \Codeception\TestCase\Test
$this->assertEquals('https://www.rhymix.org/foo/bar', Rhymix\Framework\URL::getCurrentDomainURL('/foo/bar'));
$this->assertEquals($this->baseurl . 'index.php?foo=bar', Rhymix\Framework\URL::getCurrentDomainURL($this->relurl . '/index.php?foo=bar'));
}
public function testGetCanonicalURL()
{
$tests = array(
@ -58,13 +58,13 @@ class URLTest extends \Codeception\TestCase\Test
'//www.example.com/foo' => 'https://www.example.com/foo',
'http://xn--cg4bkiv2oina.com/' => 'http://삼성전자.com/',
);
foreach ($tests as $from => $to)
{
$this->assertEquals($to, Rhymix\Framework\URL::getCanonicalURL($from));
}
}
public function testGetDomainFromURL()
{
$tests = array(
@ -72,33 +72,33 @@ class URLTest extends \Codeception\TestCase\Test
'https://www.rhymix.org:8080/foo/bar' => 'www.rhymix.org',
'http://xn--cg4bkiv2oina.com/' => '삼성전자.com',
);
foreach ($tests as $from => $to)
{
$this->assertEquals($to, Rhymix\Framework\URL::getDomainFromURL($from));
}
}
public function testModifyURL()
{
// Conversion to absolute
$this->assertEquals($this->baseurl . 'index.php?foo=bar', $url = Rhymix\Framework\URL::modifyURL('./index.php?foo=bar'));
// Adding items to the query string
$this->assertEquals($this->baseurl . 'index.php?foo=bar&var=1&arr%5B0%5D=2&arr%5B1%5D=3', Rhymix\Framework\URL::modifyURL($url, array('var' => '1', 'arr' => array(2, 3))));
// Removing item from the query string
$this->assertEquals($this->baseurl . 'index.php', Rhymix\Framework\URL::modifyURL($url, array('foo' => null)));
// Adding and removing parameters at the same time
$this->assertEquals($this->baseurl . 'index.php?l=ko', Rhymix\Framework\URL::modifyURL($url, array('l' => 'ko', 'foo' => null)));
}
public function testIsInternalURL()
{
// This function is checked in Security::checkCSRF()
}
public function testURLFromServerPath()
{
$this->assertEquals($this->baseurl . '', Rhymix\Framework\URL::fromServerPath(\RX_BASEDIR));
@ -107,7 +107,7 @@ class URLTest extends \Codeception\TestCase\Test
$this->assertEquals(false, Rhymix\Framework\URL::fromServerPath(dirname(dirname(\RX_BASEDIR))));
$this->assertEquals(false, Rhymix\Framework\URL::fromServerPath('C:/Windows'));
}
public function testURLToServerPath()
{
$this->assertEquals(\RX_BASEDIR . 'index.php', Rhymix\Framework\URL::toServerPath($this->baseurl . 'index.php'));
@ -117,7 +117,7 @@ class URLTest extends \Codeception\TestCase\Test
$this->assertEquals(false, Rhymix\Framework\URL::toServerPath('http://other.domain.com/'));
$this->assertEquals(false, Rhymix\Framework\URL::toServerPath('//other.domain.com/'));
}
public function testEncodeIdna()
{
$this->assertEquals('xn--9i1bl3b186bf9e.xn--3e0b707e', Rhymix\Framework\URL::encodeIdna('퓨니코드.한국'));
@ -125,7 +125,7 @@ class URLTest extends \Codeception\TestCase\Test
$this->assertEquals('//xn--9i1bl3b186bf9e.xn--3e0b707e#한글부분', Rhymix\Framework\URL::encodeIdna('//퓨니코드.한국#한글부분'));
$this->assertEquals('https://xn--9i1bl3b186bf9e.xn--3e0b707e/hello/world/라이믹스.php?i=4', Rhymix\Framework\URL::encodeIdna('https://퓨니코드.한국/hello/world/라이믹스.php?i=4'));
}
public function testDecodeIdna()
{
$this->assertEquals('퓨니코드.한국', Rhymix\Framework\URL::decodeIdna('xn--9i1bl3b186bf9e.xn--3e0b707e'));

View file

@ -7,42 +7,42 @@ class FilenameFilterTest extends \Codeception\TestCase\Test
public function testFilenameFilterClean()
{
$tests = array(
// Illegal characters
'foo*\.bar' => 'foo.bar',
'foobar{baz}.jpg' => 'foobar(baz).jpg',
'foobar^%.docx' => 'foobar_.docx',
'foo&bar@rhymix.docx' => 'foo&bar@rhymix.docx',
// Control characters
'foobar' . chr(127) . '.gif' => 'foobar.gif',
'foobar' . "\t\r\n" . '.gif' => 'foobar.gif',
// Unicode whitepace characters
'foobar' . html_entity_decode('&#x2001;') . ' space.gif' => 'foobar space.gif',
'hello world.png' => 'hello world.png',
// Extra symbols
'_foobar.jpg-' => 'foobar.jpg',
'.htaccess' => 'htaccess',
// PHP extension
'foobar.php' => 'foobar.phps',
'foobar.php.jpg' => 'foobar.php.jpg',
// Overlong filenames
str_repeat('f', 200) . '.' . str_repeat('b', 30) => str_repeat('f', 111) . '.' . str_repeat('b', 15),
str_repeat('한글', 100) . '.hwp' => str_repeat('한글', 61) . '한.hwp',
);
foreach ($tests as $from => $to)
{
$result = FilenameFilter::clean($from);
$this->assertEquals($to, $result);
}
}
public function testFilenameFilterCleanPath()
{
// Remove extra dots and slashes.
@ -50,28 +50,28 @@ class FilenameFilterTest extends \Codeception\TestCase\Test
$this->assertEquals('/usr/share/foo/bar.jpg', FilenameFilter::cleanPath('/usr/share/foo/././baz/../../foo/bar.jpg'));
$this->assertEquals('/usr/share', FilenameFilter::cleanPath('/usr/share/foo/..'));
$this->assertEquals('/usr/share', FilenameFilter::cleanPath('/usr/share/foo/bar/../baz/../../'));
// Test internal paths.
$this->assertEquals(\RX_BASEDIR . 'common/js/debug.js', FilenameFilter::cleanPath('common/js/debug.js'));
$this->assertEquals(\RX_BASEDIR . 'common/js/debug.js', FilenameFilter::cleanPath('./common/js/debug.js'));
// Test Windows paths.
$this->assertEquals('C:/Windows/Notepad.exe', FilenameFilter::cleanPath('C:\\Windows\\System32\\..\\Notepad.exe'));
$this->assertEquals('//vboxsrv/hello/world', FilenameFilter::cleanPath('\\\\vboxsrv\\hello\\world'));
// Test absolute URLs.
$this->assertEquals('https://www.rhymix.org/foo/bar', FilenameFilter::cleanPath('https://www.rhymix.org/foo/.//bar'));
$this->assertEquals('//www.rhymix.org/foo/bar', FilenameFilter::cleanPath('//www.rhymix.org/foo/.//bar'));
// Do not remove .. if there is no parent directory.
$this->assertEquals('C:/../foobar', FilenameFilter::cleanPath('C:\\..\foobar\\'));
$this->assertEquals('/../foobar', FilenameFilter::cleanPath('/../foobar/'));
// Remove query strings and URL fragments.
$this->assertEquals(\RX_BASEDIR . 'index.php', FilenameFilter::cleanPath('index.php?foo=bar'));
$this->assertEquals(\RX_BASEDIR . 'index.php', FilenameFilter::cleanPath('index.php#baz'));
}
public function testFilenameFilterIsDirectDownload()
{
$this->assertTrue(FilenameFilter::isDirectDownload('foobar.GIF'));
@ -82,7 +82,7 @@ class FilenameFilterTest extends \Codeception\TestCase\Test
$this->assertTrue(FilenameFilter::isDirectDownload('/audio.MP3'));
$this->assertTrue(FilenameFilter::isDirectDownload('/audio.FLac'));
$this->assertTrue(FilenameFilter::isDirectDownload('//foo.bar/video.mp4'));
$this->assertFalse(FilenameFilter::isDirectDownload('rhymix.docx'));
$this->assertFalse(FilenameFilter::isDirectDownload('rhymix.HWP'));
$this->assertFalse(FilenameFilter::isDirectDownload('rhymix.jpg.exe'));
@ -91,7 +91,7 @@ class FilenameFilterTest extends \Codeception\TestCase\Test
$this->assertFalse(FilenameFilter::isDirectDownload(''));
$this->assertFalse(FilenameFilter::isDirectDownload('http://www.google.com'));
$this->assertFalse(FilenameFilter::isDirectDownload('/'));
$this->assertTrue(FilenameFilter::isDirectDownload('foobar.jpg', false));
$this->assertTrue(FilenameFilter::isDirectDownload('foobar.webp', false));
$this->assertFalse(FilenameFilter::isDirectDownload('foobar.mp4', false));

View file

@ -58,66 +58,66 @@ class HTMLFilterTest extends \Codeception\TestCase\Test
'<img src="" alt="dummy" />'
)
);
config('mediafilter.classes', array());
foreach ($tests as $test)
{
$this->assertEquals($test[1], Rhymix\Framework\Filters\HTMLFilter::clean($test[0]));
}
}
public function testHTMLFilterHTML5()
{
$source = '<div><audio autoplay="autoplay" src="./foo/bar.mp3"></audio></div>';
$target = '<div><audio autoplay="" src="./foo/bar.mp3"></audio></div>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<video autoplay width="320" height="240"><source src="./foo/bar.mp4" type="video/mp4" /></video>';
$target = '<video autoplay="" width="320" height="240"><source src="./foo/bar.mp4" type="video/mp4" /></video>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<nav>123</nav><section>456</section><article>789</article><aside>0</aside>';
$target = '<nav>123</nav><section>456</section><article>789</article><aside>0</aside>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<div contenteditable="true"><div contenteditable="false"><p contenteditable="false"></p></div></div>';
$target = '<div><div contenteditable="false"><p contenteditable="false"></p></div></div>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
}
public function testHTMLFilterCSS3()
{
$source = '<div style="display:flex;border-radius:1px 2px 3px 4px;"></div>';
$target = '<div style="display:flex;border-radius:1px 2px 3px 4px;"></div>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<div style="box-sizing:border-box;box-shadow:5px 5px 2px #123456;"></div>';
$target = '<div style="box-sizing:border-box;box-shadow:5px 5px 2px #123456;"></div>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<div style="overflow-x:auto;overflow-y:scroll;left:-500px;"></div>';
$target = '<div style="overflow-x:auto;overflow-y:scroll;"></div>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<div style="aspect-ratio:9/16;"></div><div style="aspect-ratio:0.5825;"></div>';
$target = '<div style="aspect-ratio:9/16;"></div><div style="aspect-ratio:0.5825;"></div>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<div style="object-fit:cover;"><span style="object-fit:invalid-value;">foobar</span></div>';
$target = '<div style="object-fit:cover;"><span>foobar</span></div>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
}
public function testHTMLFilterEmbeddedMedia()
{
$source = '<iframe title="Video Test" width="640" height="360" src="http://videofarm.daum.net/controller/video/viewer/Video.html?vid=s474b7BR2zzREo0g7OT7EKo&amp;play_loc=undefined&amp;alert=true" frameborder="0" scrolling="no"></iframe>';
$target = '<iframe title="Video Test" width="640" height="360" src="http://videofarm.daum.net/controller/video/viewer/Video.html?vid=s474b7BR2zzREo0g7OT7EKo&amp;play_loc=undefined&amp;alert=true" frameborder="0" scrolling="no"></iframe>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<iframe title="Video Test" width="640" height="360" src="http://not-allowed.com/whatever-video.mp4" frameborder="0" scrolling="no"></iframe>';
$target = '<iframe title="Video Test" width="640" height="360" frameborder="0" scrolling="no"></iframe>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<object type="application/x-shockwave-flash" width="640px" height="360px" align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,3,0,0">' .
'<param name="movie" value="http://videofarm.daum.net/controller/player/VodPlayer.swf" />' .
'<param name="allowScriptAccess" value="always" />' .
@ -137,123 +137,123 @@ class HTMLFilterTest extends \Codeception\TestCase\Test
'<embed src="http://videofarm.daum.net/controller/player/VodPlayer.swf" width="640" height="360" type="application/x-shockwave-flash" flashvars="vid=s474b7BR2zzREo0g7OT7EKo&amp;playLoc=undefined&amp;alert=true" allowscriptaccess="never" allownetworking="internal" />' .
'</object>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<audio src="https://www.youtube.com/whatever"></audio>';
$target = '<audio src="https://www.youtube.com/whatever"></audio>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<audio src="https://www-youtube.com/whatever"></audio>';
$target = '<audio src=""></audio>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<video width="320" height="240"><source src="http://api.v.daum.net/something" type="video/mp4" /></video>';
$target = '<video width="320" height="240"><source src="http://api.v.daum.net/something" type="video/mp4" /></video>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<video width="320" height="240"><source src="http://wrong-site.net/" type="video/mp4" /></video>';
$target = '<video width="320" height="240"><source src="" type="video/mp4" /></video>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
}
public function testHTMLFilterAllowedClasses()
{
config('mediafilter.classes', array());
$source = '<p class="mytest">Hello World</p>';
$target = '<p>Hello World</p>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
config('mediafilter.classes', array('mytest'));
$source = '<p class="mytest">Hello World</p>';
$target = '<p class="mytest">Hello World</p>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
config('mediafilter.classes', array());
$source = '<p class="whatever">Hello World</p>';
$target = '<p class="whatever">Hello World</p>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, true));
$source = '<p class="foobar whatever">Hello World</p>';
$target = '<p class="foobar">Hello World</p>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, array('foobar')));
}
public function testHTMLFilterEditorComponent()
{
$source = '<img somekey="somevalue" otherkey="othervalue" onmouseover="alert(\'xss\');" editor_component="component_name" src="./foo/bar.jpg" alt="My Picture" style="width:320px;height:240px;" width="320" height="240" />';
$target = '<img somekey="somevalue" otherkey="othervalue" editor_component="component_name" src="./foo/bar.jpg" alt="My Picture" style="width:320px;height:240px;" width="320" height="240" />';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<img somekey="somevalue" otherkey="othervalue" onkeypress="alert(\'xss\');" editor_component="component_name" />';
$target = '<img somekey="somevalue" otherkey="othervalue" src="" editor_component="component_name" alt="" />';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<div somekey="somevalue" otherkey="othervalue" onload="alert(\'xss\');" id="foo" class="bar" editor_component="component_name"></div>';
$target = '<div somekey="somevalue" otherkey="othervalue" id="user_content_foo" editor_component="component_name"></div>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<div editor_component="component_name" style="width:400px;height:300px;" draggable dropzone contextmenu="whatever"></div>';
$target = '<div editor_component="component_name" style="width:400px;height:300px;"></div>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<img somekey="somevalue" otherkey="othervalue" onmouseover="alert(\'xss\');" editor_component="component_name" src="./foo/bar.jpg" alt="My Picture" style="width:320px;height:240px;" width="320" height="240" />';
$target = '<img src="./foo/bar.jpg" alt="My Picture" style="width:320px;height:240px;" width="320" height="240" />';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, false, false));
$source = '<img src="./foo/bar.jpg" alt="Picture" editor_component="component_name" editor_component_property="java Script:alert()" />';
$target = '<img src="./foo/bar.jpg" alt="Picture" editor_component="component_name" />';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<img src="./foo/bar.jpg" alt="Picture" editor_component="component_name" rx_encoded_properties="alert()" />';
$target = '<img src="./foo/bar.jpg" alt="Picture" editor_component="component_name" />';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<img somekey="somevalue" otherkey="othervalue" onkeypress="alert(\'xss\');" editor_component="component_name" />';
$target = '';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, false, false));
}
public function testHTMLFilterWidgetCode()
{
$source = '<p>Hello World</p><img class="zbxe_widget_output" widget="content" skin="default" colorset="white" widget_sequence="1234" widget_cache="1m" content_type="document" module_srls="56" list_type="normal" tab_type="none" markup_type="table" page_count="1" option_view="title,regdate,nickname" show_browser_title="Y" show_comment_count="Y" show_trackback_count="Y" show_category="Y" show_icon="Y" show_secret="N" order_target="regdate" order_type="desc" thumbnail_type="crop" />';
$target = '<p>Hello World</p>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<p>Hello World</p><img class="zbxe_widget_output" widget="content" skin="default" colorset="white" widget_sequence="1234" widget_cache="1m" content_type="document" module_srls="56" list_type="normal" tab_type="none" markup_type="table" page_count="1" option_view="title,regdate,nickname" show_browser_title="Y" show_comment_count="Y" show_trackback_count="Y" show_category="Y" show_icon="Y" show_secret="N" order_target="regdate" order_type="desc" thumbnail_type="crop" />';
$target = '<p>Hello World</p><img widget="content" skin="default" colorset="white" widget_sequence="1234" widget_cache="1m" content_type="document" module_srls="56" list_type="normal" tab_type="none" markup_type="table" page_count="1" option_view="title,regdate,nickname" show_browser_title="Y" show_comment_count="Y" show_trackback_count="Y" show_category="Y" show_icon="Y" show_secret="N" order_target="regdate" order_type="desc" thumbnail_type="crop" src="" class="zbxe_widget_output" alt="" />';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, true, true, true));
$source = '<p>Hello World</p><img class="zbxe_widget_output" widget="content" onmouseover="alert(\'xss\');" skin="default" colorset="white" widget_sequence="1234" widget_cache="1m" content_type="document" module_srls="56" list_type="normal" tab_type="none" markup_type="table" page_count="1" option_view="title,regdate,nickname" show_browser_title="Y" show_comment_count="Y" show_trackback_count="Y" show_category="Y" show_icon="Y" show_secret="N" order_target="regdate" order_type="desc" thumbnail_type="crop" />';
$target = '<p>Hello World</p><img widget="content" skin="default" colorset="white" widget_sequence="1234" widget_cache="1m" content_type="document" module_srls="56" list_type="normal" tab_type="none" markup_type="table" page_count="1" option_view="title,regdate,nickname" show_browser_title="Y" show_comment_count="Y" show_trackback_count="Y" show_category="Y" show_icon="Y" show_secret="N" order_target="regdate" order_type="desc" thumbnail_type="crop" src="" class="zbxe_widget_output" alt="" />';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, true, true, true));
}
public function testHTMLFilterUserContentID()
{
$source = '<p id="foobar">Hello World!</p>';
$target = '<p id="user_content_foobar">Hello World!</p>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<p id="user_content_foobar">Hello World!</p>';
$target = '<p id="user_content_foobar">Hello World!</p>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
}
public function testHTMLFilterMiscellaneous()
{
// data-file-srl attribute
$source = '<p><img src="foo.jpg" alt="foobar" data-file-srl="1234" /></p>';
$target = '<p><img src="foo.jpg" alt="foobar" data-file-srl="1234" /></p>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<p><img src="foo.jpg" alt="foobar" data-file-srl="javascript:xss()" /></p>';
$target = '<p><img src="foo.jpg" alt="foobar" /></p>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
}
public function testHTMLFilterFixMediaUrls()
{
$baseurl = '/' . basename(dirname(dirname(dirname(dirname(__DIR__))))) . '/';
$content = Rhymix\Framework\Filters\HTMLFilter::fixRelativeUrls('<img src="files/attach/foobar.jpg" alt="TEST" />');
$this->assertEquals('<img src="https://www.rhymix.org' . $baseurl . 'files/attach/foobar.jpg" alt="TEST" />', $content);
$content = Rhymix\Framework\Filters\HTMLFilter::fixRelativeUrls('<img src="./files/attach/foobar.jpg" editor_component="foobar" />');

View file

@ -14,7 +14,7 @@ class IpFilterTest extends \Codeception\TestCase\Test
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('192.168.18.214', '192.168.16.211/22'));
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.18.214', '192.168.17.255/23'));
}
public function testIPv6CIDR()
{
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('::1', '::1/128'));
@ -24,7 +24,7 @@ class IpFilterTest extends \Codeception\TestCase\Test
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('2400:cb00::1234', '2400:cb00::ffff:1234/96'));
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('2405:8100::1234', '2400:cb00::ffff:1234/96'));
}
public function testIPv4Wildcard()
{
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.134.*'));
@ -34,7 +34,7 @@ class IpFilterTest extends \Codeception\TestCase\Test
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.172.*.*'));
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.172.*'));
}
public function testIPv4Hyphen()
{
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.134.0-192.168.134.255'));
@ -42,7 +42,7 @@ class IpFilterTest extends \Codeception\TestCase\Test
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.134.242-192.168.244.7'));
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.100.255-192.168.133.19'));
}
public function testValidator()
{
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::validateRange('192.168.0.1'));
@ -53,7 +53,7 @@ class IpFilterTest extends \Codeception\TestCase\Test
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::validateRange('2400:cb00::/32'));
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::validateRange('192.168.0.0~192.168.255.255'));
}
public function testLegacy()
{
$this->assertTrue(\IpFilter::filter(array('192.168.134.241'), '192.168.134.241'));
@ -63,19 +63,19 @@ class IpFilterTest extends \Codeception\TestCase\Test
$this->assertTrue(\IpFilter::filter(array('192.168.*'), '192.168.134.241'));
$this->assertFalse(\IpFilter::filter(array('127.0.0.1'), '192.168.134.241'));
}
public function testCloudFlareRealIP()
{
$_SERVER['HTTP_CF_CONNECTING_IP'] = '192.168.134.241';
$_SERVER['REMOTE_ADDR'] = '192.168.10.1';
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::getCloudFlareRealIP());
$this->assertEquals('192.168.10.1', $_SERVER['REMOTE_ADDR']);
$_SERVER['REMOTE_ADDR'] = '108.162.192.121';
$this->assertEquals('192.168.134.241', Rhymix\Framework\Filters\IpFilter::getCloudFlareRealIP());
$this->assertEquals('192.168.134.241', $_SERVER['REMOTE_ADDR']);
unset($_SERVER['HTTP_CF_CONNECTING_IP']);
$_SERVER['REMOTE_ADDR'] = '192.168.10.1';
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::getCloudFlareRealIP());

View file

@ -7,19 +7,19 @@ class MediaFilterTest extends \Codeception\TestCase\Test
// whitelist as array.
$this->assertTrue(in_array('www.youtube.com/', Rhymix\Framework\Filters\MediaFilter::getWhitelist()));
$this->assertFalse(in_array('random-website.com/', Rhymix\Framework\Filters\MediaFilter::getWhitelist()));
// whitelist as regex.
$this->assertTrue(strpos(Rhymix\Framework\Filters\MediaFilter::getWhitelistRegex(), '|www\.youtube\.com/') !== false);
$this->assertFalse(strpos(Rhymix\Framework\Filters\MediaFilter::getWhitelistRegex(), 'www.youtube.com/') !== false);
// Match individual URL against whitelist.
$this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('https://www.youtube.com/v'));
$this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('http://www-youtube.com/v'));
// Match protocol-relative URLs.
$this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('//www.youtube.com/v'));
$this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('//www-youtube.com/v'));
// Check deprecated methods for compatibility.
$this->assertTrue(in_array('www.youtube.com/', Rhymix\Framework\Filters\MediaFilter::getIframeWhitelist()));
$this->assertFalse(strpos(Rhymix\Framework\Filters\MediaFilter::getObjectWhitelistRegex(), 'www.youtube.com/') !== false);
@ -28,14 +28,14 @@ class MediaFilterTest extends \Codeception\TestCase\Test
$this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchIframeWhitelist('//www.youtube.com/v'));
$this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchObjectWhitelist('//www-youtube.com/v'));
}
public function testAddPrefix()
{
$this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('http://some.custom.website.com/video.mp4'));
Rhymix\Framework\Filters\MediaFilter::addPrefix('*.custom.website.com/');
$this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('http://some.custom.website.com/video.mp4'));
}
public function testRemoveEmbeddedMedia()
{
$tests = array(
@ -45,7 +45,7 @@ class MediaFilterTest extends \Codeception\TestCase\Test
'<div><img class="foo" editor_component="multimedia_link" /></div>' => '<div></div>',
'<div><img editor_component="multimedia_link"></img></div>' => '<div></div>',
);
foreach ($tests as $from => $to)
{
$this->assertEquals($to, Rhymix\Framework\Filters\MediaFilter::removeEmbeddedMedia($from));

View file

@ -15,7 +15,7 @@ class ConfigHelperTest extends \Codeception\TestCase\Test
'nosuch' => array('common:no.such.config', 'member:no.such.config.either', 'intval'),
'single' => 'member:identifier',
));
$this->assertEquals(config('db.type'), $consolidated['dbtype']);
$this->assertEquals(tobool($member_config->enable_join), $consolidated['member']);
$this->assertEquals(0, $consolidated['nosuch']);

View file

@ -7,38 +7,38 @@ class i18nTest extends \Codeception\TestCase\Test
$sort_code_2 = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_CODE_2);
$this->assertEquals('AD', array_first($sort_code_2)->iso_3166_1_alpha2);
$this->assertEquals('AND', array_first_key($sort_code_2));
$sort_code_3 = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_CODE_3);
$this->assertEquals('ABW', array_first($sort_code_3)->iso_3166_1_alpha3);
$this->assertEquals('ABW', array_first_key($sort_code_3));
$sort_code_n = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_CODE_NUMERIC);
$this->assertEquals('004', array_first($sort_code_n)->iso_3166_1_numeric);
$this->assertEquals('AFG', array_first_key($sort_code_n));
$sort_cctld = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_CCTLD);
$this->assertEquals('zw', array_last($sort_cctld)->cctld);
$this->assertEquals('ZWE', array_last_key($sort_cctld));
$sort_english = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_NAME_ENGLISH);
$this->assertEquals('Afghanistan', array_first($sort_english)->name_english);
$this->assertEquals('AFG', array_first_key($sort_english));
$this->assertEquals('Åland Islands', array_last($sort_english)->name_english);
$this->assertEquals('ALA', array_last_key($sort_english));
$sort_korean = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_NAME_KOREAN);
$this->assertEquals('가나', array_first($sort_korean)->name_korean);
$this->assertEquals('GHA', array_first_key($sort_korean));
$this->assertEquals('홍콩', array_last($sort_korean)->name_korean);
$this->assertEquals('HKG', array_last_key($sort_korean));
$sort_native = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_NAME_NATIVE);
$this->assertEquals('Amerika Sāmoa', array_first($sort_native)->name_native);
$this->assertEquals('대한민국', $sort_native['KOR']->name_korean);
$this->assertEquals('United States of America', $sort_native['USA']->name_english);
$this->assertEquals('nz', $sort_native['NZL']->cctld);
}
public function testGetCallingCodeByCountryCode()
{
$this->assertEquals('82', Rhymix\Framework\i18n::getCallingCodeByCountryCode('KOR'));
@ -50,7 +50,7 @@ class i18nTest extends \Codeception\TestCase\Test
$this->assertEquals('44-1624', Rhymix\Framework\i18n::getCallingCodeByCountryCode('IMN'));
$this->assertNull(Rhymix\Framework\i18n::getCallingCodeByCountryCode('XXX'));
}
public function testGetCountryCodeByCallingCode()
{
$this->assertEquals('KOR', Rhymix\Framework\i18n::getCountryCodeByCallingCode('82'));
@ -58,7 +58,7 @@ class i18nTest extends \Codeception\TestCase\Test
$this->assertEquals('ASM', Rhymix\Framework\i18n::getCountryCodeByCallingCode('1-684'));
$this->assertEquals('AS', Rhymix\Framework\i18n::getCountryCodeByCallingCode('1684', 2));
}
public function testFormatPhoneNumber()
{
$this->assertEquals('(+82) 010-2345-6789', Rhymix\Framework\i18n::formatPhoneNumber('01023456789', '82'));

View file

@ -9,16 +9,16 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertEquals('selectTest1', $query->name);
$this->assertEquals('SELECT', $query->type);
$this->assertTrue($query->select_distinct);
$this->assertTrue($query->tables['documents'] instanceof Rhymix\Framework\Parsers\DBQuery\Table);
$this->assertNull($query->tables['documents']->alias);
$this->assertEquals('documents', $query->tables['documents']->name);
$this->assertEquals(1, count($query->columns));
$this->assertEquals('*', $query->columns[0]->name);
$this->assertTrue($query->columns[0]->is_expression);
$this->assertTrue($query->columns[0]->is_wildcard);
$this->assertEquals(2, count($query->conditions));
$this->assertTrue($query->conditions[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition);
$this->assertTrue($query->conditions[1] instanceof Rhymix\Framework\Parsers\DBQuery\ConditionGroup);
@ -31,7 +31,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertEquals('PUBLIC', $query->conditions[1]->conditions[1]->default);
$this->assertFalse($query->conditions[1]->conditions[1]->not_null);
$this->assertEquals('OR', $query->conditions[1]->conditions[1]->pipe);
$this->assertTrue($query->navigation instanceof Rhymix\Framework\Parsers\DBQuery\Navigation);
$this->assertTrue($query->navigation->orderby[0] instanceof Rhymix\Framework\Parsers\DBQuery\OrderBy);
$this->assertEquals('sort_index', $query->navigation->orderby[0]->var);
@ -45,93 +45,93 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertEquals('page', $query->navigation->page->var);
$this->assertEquals('1', $query->navigation->page->default);
}
public function testSimpleSelect()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectTest1.xml');
$args = array('member_srl' => 1234, 'regdate_more' => '20200707120000', 'page' => 3, 'order_type' => 'asc');
$sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams();
$this->assertEquals('SELECT DISTINCT * FROM `rx_documents` AS `documents` ' .
'WHERE `member_srl` IN (?) AND (`regdate` >= ? OR `status` = ?) ' .
'ORDER BY `list_order` ASC LIMIT 40, 20', $sql);
$this->assertEquals(['1234', '20200707120000', 'PUBLIC'], $params);
$sql = $query->getQueryString('rx_', $args, [], 1);
$params = $query->getQueryParams();
$this->assertEquals('SELECT COUNT(*) AS `count` FROM (SELECT DISTINCT * FROM `rx_documents` AS `documents` ' .
'WHERE `member_srl` IN (?) AND (`regdate` >= ? OR `status` = ?)) AS `subquery`', $sql);
$this->assertEquals(['1234', '20200707120000', 'PUBLIC'], $params);
unset($args['page']);
$sql = $query->getQueryString('rx_', $args);
$this->assertEquals('SELECT DISTINCT * FROM `rx_documents` AS `documents` ' .
'WHERE `member_srl` IN (?) AND (`regdate` >= ? OR `status` = ?) ' .
'ORDER BY `list_order` ASC LIMIT 20', $sql);
$args['list_count'] = 0;
$sql = $query->getQueryString('rx_', $args);
$this->assertEquals('SELECT DISTINCT * FROM `rx_documents` AS `documents` ' .
'WHERE `member_srl` IN (?) AND (`regdate` >= ? OR `status` = ?) ' .
'ORDER BY `list_order` ASC', $sql);
}
public function testSelectWithExpressions()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectTest2.xml');
$args = array('voted_count' => 20, 'date' => '20201021');
$sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams();
$this->assertEquals('documents', $query->tables['d']->name);
$this->assertEquals('SELECT readed_count + trackback_count AS `count` ' .
'FROM `rx_documents` AS `d` WHERE `voted_count` + `blamed_count` >= ? AND LEFT(`regdate`, 8) = ?', $sql);
$this->assertEquals([20, '20201021'], $params);
}
public function testSelectWithSearch()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectTest3.xml');
$args = array('s_content' => '"I love you" -"I hate you"');
$sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams();
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE (`content` LIKE ? AND `content` NOT LIKE ?)', $sql);
$this->assertEquals(['%I love you%', '%I hate you%'], $params);
$args = array('s_content' => '(foo AND bar) -baz "Rhymix is the best"');
$sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams();
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE ((`content` LIKE ? AND `content` LIKE ?) AND `content` NOT LIKE ? AND `content` LIKE ?)', $sql);
$this->assertEquals(['%foo%', '%bar%', '%baz%', '%Rhymix is the best%'], $params);
$args = array('s_content' => 'revenue +3.5% -"apos\'tro_phe"');
$sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams();
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE (`content` LIKE ? AND `content` LIKE ? AND `content` NOT LIKE ?)', $sql);
$this->assertEquals(['%revenue%', '%+3.5\\%%', '%apos\'tro\\_phe%'], $params);
$args = array('s_content' => '(search keyword\\Z) -"-42"');
$sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams();
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE ((`content` LIKE ? AND `content` LIKE ?) AND `content` NOT LIKE ?)', $sql);
$this->assertEquals(['%search%', '%keyword\\\\Z%', '%-42%'], $params);
$args = array('s_content' => '"한글" AND -&quot;검색&quot; (-키워드 OR 라이믹스)');
$sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams();
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE (`content` LIKE ? AND `content` NOT LIKE ? AND (`content` NOT LIKE ? OR `content` LIKE ?))', $sql);
$this->assertEquals(['%한글%', '%검색%', '%키워드%', '%라이믹스%'], $params);
$args = array('s_content' => '검색 OR (키워드 AND -"라이믹스 유닛테스트")');
$sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams();
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE (`content` LIKE ? OR (`content` LIKE ? AND `content` NOT LIKE ?))', $sql);
$this->assertEquals(['%검색%', '%키워드%', '%라이믹스 유닛테스트%'], $params);
}
public function testJoin1()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectJoinTest1.xml');
@ -141,7 +141,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertTrue($query->tables['member'] instanceof Rhymix\Framework\Parsers\DBQuery\Table);
$this->assertNull($query->tables['member']->join_type);
$this->assertEmpty($query->tables['member']->join_conditions);
$this->assertEquals(2, count($query->columns));
$this->assertEquals('member.member_srl', $query->columns[0]->name);
$this->assertFalse($query->columns[0]->is_expression);
@ -150,7 +150,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertEquals('count', $query->columns[1]->alias);
$this->assertTrue($query->columns[1]->is_expression);
$this->assertFalse($query->columns[1]->is_wildcard);
$this->assertEquals(4, count($query->conditions));
$this->assertEquals('documents.member_srl', $query->conditions[0]->column);
$this->assertEquals('member.member_srl', $query->conditions[0]->default);
@ -159,49 +159,49 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertEquals('member.member_srl', $query->conditions[1]->default);
$this->assertNull($query->conditions[1]->var);
$this->assertEquals('AND', $query->conditions[1]->pipe);
$this->assertTrue($query->groupby instanceof Rhymix\Framework\Parsers\DBQuery\GroupBy);
$this->assertEquals('member.member_srl', $query->groupby->columns[0]);
$this->assertEquals(1, count($query->groupby->having));
$this->assertTrue($query->groupby->having[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition);
$this->assertEquals('member.member_srl', $query->groupby->having[0]->column);
$this->assertEquals('notequal', $query->groupby->having[0]->operation);
$args = array(
'document_srl_list' => [12, 34, 56], 'exclude_member_srl' => 4,
'if_table' => true, 'if_column' => true, 'if_condition1' => true, 'if_groupby' => true,
);
$sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams();
$this->assertEquals('SELECT `member`.`member_srl`, COUNT(*) AS `count` FROM `rx_documents` AS `documents`, `rx_member` AS `member` ' .
'WHERE `documents`.`member_srl` = `member`.`member_srl` AND `documents`.`member_srl` = `member`.`member_srl` ' .
'AND `documents`.`document_srl` IN (?, ?, ?) GROUP BY `member`.`member_srl` HAVING `member`.`member_srl` != ?', $sql);
$this->assertEquals(['12', '34', '56', '4'], $params);
$args = array(
'document_srl_list' => [12, 34, 56], 'exclude_member_srl' => 4, 'exclude_document_srl_list' => '78,90',
'if_table' => true, 'if_column' => true, 'if_condition2' => true,
);
$sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams();
$this->assertEquals('SELECT `member`.`member_srl`, COUNT(*) AS `count` FROM `rx_documents` AS `documents`, `rx_member` AS `member` ' .
'WHERE `documents`.`member_srl` = `member`.`member_srl` AND `documents`.`document_srl` IN (?, ?, ?) ' .
'AND `documents`.`document_srl` NOT IN (?, ?)', $sql);
$this->assertEquals(['12', '34', '56', '78', '90'], $params);
$args = array(
'document_srl_list' => [12, 34, 56], 'exclude_member_srl' => 4,
);
$sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams();
$this->assertEquals('SELECT `member`.`member_srl` FROM `rx_documents` AS `documents` ' .
'WHERE `documents`.`member_srl` = `member`.`member_srl` AND `documents`.`document_srl` IN (?, ?, ?)', $sql);
$this->assertEquals(['12', '34', '56'], $params);
}
public function testJoin2()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectJoinTest2.xml');
@ -215,7 +215,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertEquals('documents.member_srl', $query->tables['member']->join_conditions[0]->column);
$this->assertEquals('member.member_srl', $query->tables['member']->join_conditions[0]->default);
$this->assertNull($query->tables['member']->join_conditions[0]->var);
$this->assertEquals(2, count($query->columns));
$this->assertEquals('documents.*', $query->columns[0]->name);
$this->assertTrue($query->columns[0]->is_expression);
@ -224,17 +224,17 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertEquals('member_regdate', $query->columns[1]->alias);
$this->assertFalse($query->columns[1]->is_expression);
$this->assertFalse($query->columns[1]->is_wildcard);
$args = array('document_srl_list' => [12, 34, 56]);
$sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams();
$this->assertEquals('SELECT `documents`.*, `member`.`regdate` AS `member_regdate` FROM `rx_documents` AS `documents` ' .
'LEFT JOIN `rx_member` AS `member` ON `documents`.`member_srl` = `member`.`member_srl` ' .
'WHERE `documents`.`document_srl` IN (?, ?, ?)', $sql);
$this->assertEquals(['12', '34', '56'], $params);
}
public function testSubquery1()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectSubqueryTest1.xml');
@ -248,16 +248,16 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertEquals(1, count($query->columns));
$this->assertEquals('documents.member_srl', $query->conditions[0]->column);
$this->assertEquals('m.member_srl', $query->conditions[0]->default);
$sql = $query->getQueryString('rx_', []);
$params = $query->getQueryParams();
$this->assertEquals('SELECT `documents`.* FROM `rx_documents` AS `documents`, ' .
'(SELECT `member_srl`, `nick_name` FROM `rx_member` AS `member`) AS `m` ' .
'WHERE `documents`.`member_srl` = `m`.`member_srl`', $sql);
$this->assertEquals([], $params);
}
public function testSubquery2()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectSubqueryTest2.xml');
@ -277,25 +277,25 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertTrue($query->columns[1]->columns[1]->is_wildcard);
$this->assertTrue($query->columns[1]->columns[2]->is_expression);
$this->assertFalse($query->columns[1]->columns[2]->is_wildcard);
$sql = $query->getQueryString('rx_', []);
$params = $query->getQueryParams();
$this->assertEquals('SELECT `member`.*, (SELECT `documents`.`document_srl`, `documents`.*, COUNT(*) AS `count` FROM `rx_documents` AS `documents` ' .
'WHERE `member`.`member_srl` = `documents`.`member_srl`) AS `document_count` ' .
'FROM `rx_member` AS `member`', $sql);
$this->assertEquals([], $params);
// Test count-only query (#1575)
$sql = $query->getQueryString('rx_', [], [], 1);
$params = $query->getQueryParams();
$this->assertEquals('SELECT COUNT(*) AS `count` FROM (SELECT 1, (SELECT `documents`.`document_srl`, 1, COUNT(*) AS `count` FROM `rx_documents` AS `documents` ' .
'WHERE `member`.`member_srl` = `documents`.`member_srl`) AS `document_count` ' .
'FROM `rx_member` AS `member`) AS `subquery`', $sql);
$this->assertEquals([], $params);
}
public function testSubquery3()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectSubqueryTest3.xml');
@ -311,16 +311,16 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertTrue($query->conditions[1]->columns[0]->is_expression);
$this->assertEquals('member.member_srl', $query->conditions[1]->conditions[0]->column);
$this->assertEquals('OR', $query->conditions[1]->pipe);
$sql = $query->getQueryString('rx_', ['is_admin' => 'Y']);
$params = $query->getQueryParams();
$this->assertEquals('SELECT * FROM `rx_member` AS `member` WHERE `is_admin` != ? OR `regdate` = ' .
'(SELECT MAX(regdate) AS `max_regdate` FROM `rx_documents` AS `documents` ' .
'WHERE `member`.`member_srl` = `documents`.`member_srl`)', $sql);
$this->assertEquals(['Y'], $params);
}
public function testCountQuery()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectCountTest1.xml');
@ -328,36 +328,36 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertEquals('SELECT COUNT(*) AS `count` FROM (SELECT 1 FROM `rx_documents` AS `documents`, `rx_member` AS `member` ' .
'WHERE `documents`.`member_srl` = `member`.`member_srl` GROUP BY `member`.`member_srl` HAVING `member`.`member_srl` != ?) ' .
'AS `subquery`', $sql);
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectCountTest2.xml');
$sql = $query->getQueryString('rx_', ['document_srl_list' => [100, 110, 120]], [], true);
$this->assertEquals('SELECT COUNT(*) AS `count` FROM (SELECT DISTINCT `module_srl` FROM `rx_documents` AS `documents` ' .
'WHERE `document_srl` IN (?, ?, ?)) AS `subquery`', $sql);
}
public function testIndexHintQuery()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/indexHintTest1.xml');
$sql = $query->getQueryString('rx_', ['module_srl' => 82]);
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` USE INDEX (`idx_module_srl`) ' .
'WHERE `module_srl` = ? ORDER BY `list_order` DESC LIMIT 20', $sql);
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/indexHintTest2.xml');
$sql = $query->getQueryString('rx_', ['module_srl' => 82]);
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` USE INDEX (`idx_module_list_order`) ' .
'WHERE `module_srl` = ? ORDER BY `list_order` DESC LIMIT 20', $sql);
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/indexHintTest2.xml');
$sql = $query->getQueryString('rx_', ['module_srl' => 82, 'index_hint1' => 'idx_regdate']);
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` FORCE INDEX (`idx_regdate`) USE INDEX (`idx_module_list_order`) ' .
'WHERE `module_srl` = ? ORDER BY `list_order` DESC LIMIT 20', $sql);
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/indexHintTest2.xml');
$sql = $query->getQueryString('rx_', ['module_srl' => 82, 'index_hint1' => 'idx_regdate', 'index_hint2' => 'idx_member_srl']);
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` FORCE INDEX (`idx_regdate`) USE INDEX (`idx_member_srl`) ' .
'WHERE `module_srl` = ? ORDER BY `list_order` DESC LIMIT 20', $sql);
}
public function testInsertQuery()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/insertTest.xml');
@ -375,11 +375,11 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertEquals('ipaddress()', $query->columns[2]->default);
$this->assertTrue($query->update_duplicate);
$this->assertNull($query->groupby);
$args = array('document_srl' => 123, 'member_srl' => 456, 'point' => 7);
$sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams();
$this->assertEquals('INSERT INTO `rx_document_voted_log` SET `document_srl` = ?, `member_srl` = ?, `ipaddress` = ?, `regdate` = ?, `point` = ? ' .
'ON DUPLICATE KEY UPDATE `document_srl` = ?, `member_srl` = ?, `ipaddress` = ?, `regdate` = ?, `point` = ?', $sql);
$this->assertEquals(10, count($params));
@ -388,7 +388,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertEquals('7', $params[4]);
$this->assertEquals(array_slice($params, 0, 5), array_slice($params, 5, 5));
}
public function testUpdateQuery()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/updateTest.xml');
@ -416,24 +416,24 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertEquals('document_srl', $query->conditions[0]->column);
$this->assertNull($query->groupby);
$this->assertNull($query->navigation);
$args = array('document_srl' => 123, 'nick_name' => '닉네임', 'member_srl' => 456, 'voted_count' => 5);
$sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams();
$this->assertEquals('UPDATE `rx_documents`, `rx_comments` AS `c` SET `member_srl` = ?, `nick_name` = ?, `voted_count` = `voted_count` + ?, `regdate` = ?, `last_update` = ? WHERE `document_srl` = ?', $sql);
$this->assertEquals(['456', '닉네임', '5'], array_slice($params, 0, 3));
$this->assertRegexp('/^20[0-9]{2}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$/', $params[3]);
$this->assertRegexp('/^[0-9]{2}.[0-9]{2}.[0-9]{2}$/', $params[4]);
$args = array('document_srl' => 123, 'member_srl' => 456, 'voted_count' => 5, 'regdate' => 'foo', 'last_update' => 'bar');
$sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams();
$this->assertEquals('UPDATE `rx_documents`, `rx_comments` AS `c` SET `member_srl` = ?, `nick_name` = NULL, `voted_count` = `voted_count` + ?, `regdate` = ?, `last_update` = ? WHERE `document_srl` = ?', $sql);
$this->assertEquals(['456', '5', 'foo', 'bar', '123'], $params);
}
public function testDeleteQuery()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/deleteTest.xml');
@ -445,56 +445,56 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertTrue($query->conditions[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition);
$this->assertEquals('in', $query->conditions[0]->operation);
$this->assertEquals('document_srl_list', $query->conditions[0]->var);
$args = array('document_srl_list' => [12, 34, 56]);
$sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams();
$this->assertEquals('DELETE FROM `rx_documents` WHERE `document_srl` IN (?, ?, ?)', $sql);
$this->assertEquals(['12', '34', '56'], $params);
}
public function testEmptyString()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/emptyStringTest1.xml');
$sql = $query->getQueryString('rx_', array(
'nick_name' => '',
'document_srl' => 1234,
));
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql);
$this->assertEquals(['', 1234], $query->getQueryParams());
$sql = $query->getQueryString('rx_', array(
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString,
'document_srl' => 1234,
));
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = \'\' WHERE `document_srl` = ?', $sql);
$this->assertEquals([1234], $query->getQueryParams());
$sql = $query->getQueryString('rx_', array(
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString,
'document_srl' => '',
));
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = \'\'', $sql);
$this->assertEquals([], $query->getQueryParams());
$sql = $query->getQueryString('rx_', array(
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString,
'document_srl' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString,
));
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = \'\' WHERE `document_srl` = \'\'', $sql);
$this->assertEquals([], $query->getQueryParams());
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/emptyStringTest2.xml');
$sql = $query->getQueryString('rx_', array(
'category_srl' => 77,
'nick_name' => '',
));
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE `category_srl` = ?', $sql);
$this->assertEquals([77], $query->getQueryParams());
$sql = $query->getQueryString('rx_', array(
'category_srl' => 88,
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString,
@ -502,11 +502,11 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE `category_srl` = ? AND `nick_name` = \'\'', $sql);
$this->assertEquals([88], $query->getQueryParams());
}
public function testNullValue()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/nullValueTest1.xml');
$sql = $query->getQueryString('rx_', array(
'user_name' => null,
'nick_name' => 'TEST',
@ -514,7 +514,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
));
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql);
$this->assertEquals(['TEST', 1234], $query->getQueryParams());
$sql = $query->getQueryString('rx_', array(
'user_name' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
'nick_name' => 'TEST',
@ -522,30 +522,30 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
));
$this->assertEquals('UPDATE `rx_documents` SET `user_name` = NULL, `nick_name` = ? WHERE `document_srl` = ?', $sql);
$this->assertEquals(['TEST', 1234], $query->getQueryParams());
$this->tester->expectThrowable('Exception', function() use($query) {
$query->getQueryString('rx_', array(
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
'document_srl' => 1234,
));
});
$this->tester->expectThrowable('Exception', function() use($query) {
$query->getQueryString('rx_', array(
'nick_name' => null,
'document_srl' => 1234,
));
});
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/nullValueTest2.xml');
$sql = $query->getQueryString('rx_', array(
'member_srl' => null,
'module_srl' => 456,
));
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE `module_srl` = ?', $sql);
$this->assertEquals([456], $query->getQueryParams());
$sql = $query->getQueryString('rx_', array(
'member_srl' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
'module_srl' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,

View file

@ -22,7 +22,7 @@ class DBTableParserTest extends \Codeception\TestCase\Test
$this->assertEquals('none', $table->columns['custom_date']->xetype);
$this->assertEquals('char', $table->columns['regdate']->type);
$this->assertEquals('date', $table->columns['regdate']->xetype);
$this->assertEquals(9, count($table->indexes));
$this->assertEquals(['module_srl' => 0, 'document_srl' => 0], $table->indexes['idx_module_document_srl']->columns);
$this->assertEquals(['status' => 6], $table->indexes['idx_status']->columns);
@ -32,7 +32,7 @@ class DBTableParserTest extends \Codeception\TestCase\Test
$this->assertEquals('SPATIAL', $table->indexes['spatial_geometry']->type);
$this->assertEquals('FULLTEXT', $table->indexes['fulltext_description']->type);
$this->assertEquals('WITH PARSER ngram', $table->indexes['fulltext_description']->options);
$this->assertEquals(2, count($table->constraints));
$this->assertEquals('FOREIGN KEY', $table->constraints[0]->type);
$this->assertEquals('module_srl', $table->constraints[0]->column);
@ -42,7 +42,7 @@ class DBTableParserTest extends \Codeception\TestCase\Test
$this->assertEquals('CHECK', $table->constraints[1]->type);
$this->assertEquals('list_order < 0', $table->constraints[1]->condition);
}
public function testGetCreateQuery()
{
$table = Rhymix\Framework\Parsers\DBTableParser::loadXML(\RX_BASEDIR . 'tests/_data/dbtable/example.xml');

View file

@ -3,7 +3,7 @@
class LangParserTest extends \Codeception\TestCase\Test
{
protected $_dir = 'tests/_data/lang';
public function _before()
{
$files = Rhymix\Framework\Storage::readDirectory(\RX_BASEDIR . $this->_dir);
@ -15,7 +15,7 @@ class LangParserTest extends \Codeception\TestCase\Test
}
}
}
public function _after()
{
$files = Rhymix\Framework\Storage::readDirectory(\RX_BASEDIR . $this->_dir);
@ -27,7 +27,7 @@ class LangParserTest extends \Codeception\TestCase\Test
}
}
}
public function testConvertDirectory()
{
Rhymix\Framework\Parsers\LangParser::convertDirectory(\RX_BASEDIR . $this->_dir, ['ko', 'en']);
@ -35,20 +35,20 @@ class LangParserTest extends \Codeception\TestCase\Test
$this->assertTrue(file_exists(\RX_BASEDIR . $this->_dir . '/en.php'));
$this->assertFalse(file_exists(\RX_BASEDIR . $this->_dir . '/ja.php'));
$this->assertFalse(file_exists(\RX_BASEDIR . $this->_dir . '/fr.php'));
$lang = new stdClass;
include \RX_BASEDIR . $this->_dir . '/ko.php';
$this->assertEquals('테스트 언어', $lang->testlang);
$this->assertEquals('<p>HTML<br>내용</p>', $lang->testhtml);
$this->assertEquals(['foo' => '푸', 'bar' => '바'], $lang->testarray);
$lang = new stdClass;
include \RX_BASEDIR . $this->_dir . '/en.php';
$this->assertEquals('Test Lang', $lang->testlang);
$this->assertEquals('<p>HTML<br>Content</p>', $lang->testhtml);
$this->assertEquals(['foo' => 'FOO', 'bar' => 'BAR'], $lang->testarray);
}
public function testCompileXMLtoPHP()
{
$in = \RX_BASEDIR . $this->_dir . '/lang.xml';
@ -58,7 +58,7 @@ class LangParserTest extends \Codeception\TestCase\Test
$this->assertEquals($out, $result);
$this->assertTrue(file_exists($result));
$this->assertFalse(file_exists($noout));
$lang = new stdClass;
include \RX_BASEDIR . $this->_dir . '/ja.php';
$this->assertEquals('テスト言語', $lang->testlang);

View file

@ -10,7 +10,7 @@ class ModuleActionParserTest extends \Codeception\TestCase\Test
$this->assertEquals('dispTestView', $info->default_index_act);
$this->assertEquals('dispTestAdminIndex', $info->admin_index_act);
$this->assertEquals('', $info->setup_index_act);
// Actions
$this->assertEquals('view', $info->action->dispTestView->type);
$this->assertEquals('guest', $info->action->dispTestView->grant);
@ -34,12 +34,12 @@ class ModuleActionParserTest extends \Codeception\TestCase\Test
$this->assertEquals('true', $info->action->dispTestAdminIndex->standalone);
$this->assertEquals('GET|POST', $info->action->procTestAdminSubmitData->method);
$this->assertEquals([], $info->action->procTestAdminSubmitData->route);
// Standalone attribute
$this->assertEquals('auto', $info->action->dispTestStandalone1->standalone);
$this->assertEquals('false', $info->action->dispTestStandalone2->standalone);
$this->assertEquals('true', $info->action->dispTestStandalone3->standalone);
// Routes
$this->assertEquals(7, count($info->route->GET));
$this->assertEquals('dispTestView', $info->route->GET['#^(?P<document_srl>[0-9]+)$#u']);
@ -47,19 +47,19 @@ class ModuleActionParserTest extends \Codeception\TestCase\Test
$this->assertEquals('dispTestView', $info->route->GET['#^(?P<document_srl>[0-9]+)/tag/(?P<tag>[a-zA-Z0-9_]+)$#u']);
$this->assertEquals('dispTestWrite', $info->route->GET['#^write$#u']);
$this->assertEquals(3, count($info->route->POST));
// Grant
$this->assertEquals(['view'], array_keys(get_object_vars($info->grant)));
$this->assertContains($info->grant->view->title, ['View', '열람']);
$this->assertEquals('guest', $info->grant->view->default);
// Menu
$this->assertEquals(['test'], array_keys(get_object_vars($info->menu)));
$this->assertContains($info->menu->test->title, ['Test Menu', '테스트 메뉴']);
$this->assertEquals('dispTestAdminIndex', $info->menu->test->index);
$this->assertEquals(['dispTestAdminIndex'], $info->menu->test->acts);
$this->assertEquals('all', $info->menu->test->type);
// Error handlers
$this->assertTrue(is_array($info->error_handlers));
$this->assertEquals('dispTestErrorHandler', $info->error_handlers[404]);

View file

@ -16,7 +16,7 @@ class ModuleInfoParserTest extends \Codeception\TestCase\Test
$this->assertEquals('service', $info->category);
$this->assertEquals('GPLv2', $info->license);
$this->assertEquals('https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html', $info->license_link);
// Author array
$this->assertTrue(is_array($info->author));
$this->assertEquals('Rhymix 개발자', $info->author[0]->name);
@ -25,14 +25,14 @@ class ModuleInfoParserTest extends \Codeception\TestCase\Test
$this->assertEquals('다른 개발자', $info->author[1]->name);
$this->assertEquals('other.developer@rhymix.org', $info->author[1]->email_address);
$this->assertEquals('', $info->author[1]->homepage);
// Change language
Context::setLangType('en');
$info = Rhymix\Framework\Parsers\ModuleInfoParser::loadXML(\RX_BASEDIR . 'tests/_data/module/info.xml');
$this->assertEquals('Test Module', $info->title);
$this->assertEquals('This module is for unit testing.', $info->description);
$this->assertEquals('Rhymix Developer', $info->author[0]->name);
// Index actions (from module.xml)
$this->assertEquals('dispTestView', $info->default_index_act);
$this->assertEquals('dispTestAdminIndex', $info->admin_index_act);

View file

@ -15,17 +15,17 @@ class FunctionsTest extends \Codeception\TestCase\Test
$array = array('foo' => 'xe', 'bar' => 'rhymix', 'key' => array('value1', 'value2', array('bar' => 'value3')), 'last' => 'bears');
$flattened1 = array('foo' => 'xe', 'bar' => 'value3', 0 => 'value1', 1 => 'value2', 'last' => 'bears');
$flattened2 = array(0 => 'xe', 1 => 'rhymix', 2 => 'value1', 3 => 'value2', 4 => 'value3', 5 => 'bears');
$this->assertEquals('foo', array_first_key($array));
$this->assertEquals('xe', array_first($array));
$this->assertEquals('last', array_last_key($array));
$this->assertEquals('bears', array_last($array));
$this->assertEquals($flattened1, array_flatten($array));
$this->assertEquals($flattened2, array_flatten($array, false));
}
public function testArrayEscape()
{
$this->assertEquals(array('foo&lt;' => 'bar&gt;', 'baz&quot;baz' => array('fuzz&amp;amp;bazz' => '&lt;rhymix&gt;')), array_escape(array('foo<' => 'bar>', 'baz"baz' => array('fuzz&amp;bazz' => '<rhymix>'))));
@ -33,49 +33,49 @@ class FunctionsTest extends \Codeception\TestCase\Test
$this->assertEquals(array('object' => (object)array('foo&gt;' => 'bar&lt;', 'baz&quot;' => '&amp;amp;')), array_escape(array('object' => (object)array('foo>' => 'bar<', 'baz"' => '&amp;'))));
$this->assertEquals(array('object' => (object)array('foo&gt;' => array('bar&lt;' => array('&amp;')))), array_escape(array('object' => (object)array('foo>' => array('bar<' => array('&amp;')))), false));
}
public function testClassBasename()
{
$this->assertEquals('FunctionsTest', class_basename($this));
$this->assertEquals('FunctionsTest', class_basename(get_class($this)));
}
public function testEscapeFunctions()
{
$this->assertEquals('&lt;foo&gt;&amp;amp;&lt;/foo&gt;', escape('<foo>&amp;</foo>'));
$this->assertEquals('&lt;foo&gt;&amp;&lt;/foo&gt;', escape('<foo>&amp;</foo>', false));
$this->assertEquals('&lt;foo&gt;invalid'. "\xEF\xBF\xBD" . 'unicode&lt;/foo&gt;', escape('<foo>invalid' . "\xE4\xA8" . 'unicode</foo>'));
$this->assertEquals('&lt;foo&gt;invalid'. "\xEF\xBF\xBD" . 'unicode&lt;/foo&gt;', escape('<foo>invalid' . "\xE4\xA8" . 'unicode&lt;/foo&gt;', false));
$this->assertEquals('$user_lang-&gt;userLang1234567890', escape('$user_lang->userLang1234567890', true, false));
$this->assertEquals('$user_lang->userLang1234567890', escape('$user_lang->userLang1234567890', true, true));
$this->assertEquals('expressionalertXSS', escape_css('expression:alert("XSS")'));
$this->assertEquals('#123456', escape_css('#123456'));
$this->assertEquals('hello\\\\world', escape_js('hello\\world'));
$this->assertEquals('\u003Cbr \/\u003E', escape_js('<br />'));
$this->assertEquals('hello\\\\world', escape_sqstr('hello\\world'));
$this->assertEquals('hello"world\\\'quotes', escape_sqstr('hello"world\'quotes'));
$this->assertEquals('hello\\\\\\$world in \\"quotes\\"', escape_dqstr('hello\\$world in "quotes"'));
$this->assertEquals('\\${array[\'key\']}', escape_dqstr('${array[\'key\']}'));
}
public function testExplodeWithEscape()
{
$this->assertEquals(array('foo', 'bar'), explode_with_escape(',', 'foo,bar'));
$this->assertEquals(array('foo', 'bar'), explode_with_escape(',', 'foo , bar'));
$this->assertEquals(array('foo', 'bar', 'baz,rhymix'), explode_with_escape(',', 'foo,bar,baz,rhymix', 3));
$this->assertEquals(array('foo', 'bar', 'baz , rhymix'), explode_with_escape(',', 'foo,bar,baz , rhymix', 3));
$this->assertEquals(array('foo', 'bar,baz'), explode_with_escape(',', 'foo,bar\\,baz'));
$this->assertEquals(array('foo', 'bar\\', 'baz'), explode_with_escape(',', 'foo,bar\\ , baz'));
$this->assertEquals(array('foo', 'bar,baz', 'rhymix'), explode_with_escape(',', 'foo,bar\\,baz,rhymix'));
$this->assertEquals(array('foo', 'bar,baz'), explode_with_escape(',', 'foo,bar!,baz', null, '!'));
}
public function testStartsEndsContains()
{
$this->assertTrue(starts_with('foo', 'foobar'));
@ -84,14 +84,14 @@ class FunctionsTest extends \Codeception\TestCase\Test
$this->assertFalse(starts_with('bar', 'foobar'));
$this->assertFalse(starts_with('foobar', 'foo'));
$this->assertTrue(starts_with('', 'foobar'));
$this->assertTrue(ends_with('bar', 'foobar'));
$this->assertFalse(ends_with('BAR', 'foobar'));
$this->assertTrue(ends_with('BAR', 'foobar', false));
$this->assertFalse(ends_with('foo', 'foobar'));
$this->assertFalse(ends_with('foobar', 'bar'));
$this->assertTrue(ends_with('', 'foobar'));
$this->assertTrue(contains('foo', 'foo bar baz rhymix rocks'));
$this->assertFalse(contains('barbaz', 'foo bar baz rhymix rocks'));
$this->assertTrue(contains('RHYMIX', 'foo bar baz rhymix rocks', false));
@ -99,7 +99,7 @@ class FunctionsTest extends \Codeception\TestCase\Test
$this->assertFalse(contains('foobar', 'bar'));
$this->assertTrue(contains('', 'foobar'));
}
public function testRangeFunctions()
{
$this->assertTrue(is_between(5, 1, 10));
@ -108,18 +108,18 @@ class FunctionsTest extends \Codeception\TestCase\Test
$this->assertTrue(is_between(7, 1, 10, true));
$this->assertFalse(is_between(1, 1, 10, true));
$this->assertFalse(is_between(10, 1, 10, true));
$this->assertEquals(10, force_range(14, 1, 10));
$this->assertEquals(3, force_range(3, 1, 10));
$this->assertEquals(1, force_range(-4, 1, 10));
}
public function testUrlSafeBase64()
{
$this->assertEquals('Umh5bWl4IF5-', base64_encode_urlsafe('Rhymix ^~'));
$this->assertEquals('Rhymix ^~', base64_decode_urlsafe('Umh5bWl4IF5-'));
}
public function testNumberShorten()
{
$this->assertEquals('1', number_shorten(1));
@ -150,20 +150,20 @@ class FunctionsTest extends \Codeception\TestCase\Test
$this->assertEquals('1.00000T', number_shorten(1000000000000, 6));
$this->assertEquals('10.0000T', number_shorten(10000000000000, 6));
}
public function testHex2Rgb2Hex()
{
$this->assertEquals(array(128, 128, 128), hex2rgb('808080'));
$this->assertEquals(array(60, 71, 244), hex2rgb('#3c47f4'));
$this->assertEquals(array(119, 119, 119), hex2rgb('#777'));
$this->assertEquals(array(51, 102, 153), hex2rgb('369'));
$this->assertEquals('#808080', rgb2hex(array(128, 128, 128)));
$this->assertEquals('#3c47f4', rgb2hex(array(60, 71, 244)));
$this->assertEquals('777777', rgb2hex(array(119, 119, 119), false));
$this->assertEquals('#000000', rgb2hex(array()));
}
public function testToBool()
{
$this->assertTrue(tobool('Y'));
@ -180,7 +180,7 @@ class FunctionsTest extends \Codeception\TestCase\Test
$this->assertTrue(tobool(true));
$this->assertTrue(tobool(array(1, 2, 3)));
$this->assertTrue(tobool(new stdClass));
$this->assertFalse(tobool('N'));
$this->assertFalse(tobool('no'));
$this->assertFalse(tobool('none'));
@ -196,7 +196,7 @@ class FunctionsTest extends \Codeception\TestCase\Test
$this->assertFalse(tobool(null));
$this->assertFalse(tobool(array()));
}
public function testCountObj()
{
$this->assertEquals(3, countobj(array('foo' => 1, 'bar' => 2, 'baz' => 3)));
@ -205,7 +205,7 @@ class FunctionsTest extends \Codeception\TestCase\Test
$this->assertEquals(42, countobj(new CountableTest));
$this->assertEquals(0, countobj(new stdClass));
}
public function testUTF8Functions()
{
$this->assertTrue(utf8_check('Hello, world!'));
@ -214,22 +214,22 @@ class FunctionsTest extends \Codeception\TestCase\Test
$this->assertTrue(utf8_check(iconv('UTF-8', 'EUC-KR', 'One CMS to rule them all...')));
$this->assertFalse(utf8_check(iconv('UTF-8', 'EUC-KR', '라이믹스')));
$this->assertFalse(utf8_check(chr(129) . chr(214) . chr(181) . chr(73) . chr(97)));
$this->assertEquals('Hello', utf8_clean("\xEF\xBB\xBF" . 'Hello' . "\xBC\xBC"));
$this->assertEquals('Hello', utf8_clean('Hello&#8238;&#x3164;' . "\xE3\x85\xA4\xE2\x80\xAE"));
$this->assertEquals('Hello' . "\xC3\xA9", utf8_clean('Hello' . "e\xCC\x81"));
$this->assertEquals('Hello' . "\xCD\x9D\xCD\x9D\xCD\x9D", utf8_clean('Hello' . "\xCD\x9D\xCD\x9D\xCD\x9D\xCD\x9D\xCD\x9D"));
$this->assertEquals('Emoticon: &#x1f601;', utf8_mbencode("Emoticon: \xf0\x9f\x98\x81"));
$this->assertEquals('Emoticon: &#x1f61c;', utf8_mbencode("Emoticon: \xf0\x9f\x98\x9c"));
$this->assertEquals('한글은 인코딩하지 않음', utf8_mbencode('한글은 인코딩하지 않음'));
$this->assertEquals("Weird spaces are in this string", utf8_normalize_spaces("Weird\x20spaces\xe2\x80\x80are\xe2\x80\x84in\xe2\x80\x86\xe2\x80\x8bthis\x0astring"));
$this->assertEquals("Weird spaces are in this\nstring", utf8_normalize_spaces("Weird\x20spaces\xe2\x80\x80are\xe2\x80\x84in\xe2\x80\x86\xe2\x80\x8bthis\x0astring", true));
$this->assertEquals("Trimmed", utf8_trim("\x20\xe2\x80\x80Trimmed\xe2\x80\x84\xe2\x80\x86\xe2\x80\x8b"));
$this->assertEquals("Trimmed", utf8_trim("\x20\xe2\x80\x80Trimmed\x0a\x0c\x07\x09"));
}
public function testIsHTMLContent()
{
$this->assertTrue(is_html_content("<p>Hello World</p>"));
@ -247,7 +247,7 @@ class FunctionsTest extends \Codeception\TestCase\Test
$this->assertFalse(is_html_content("<p> tag is unbalanced here.\nAnother line!<br />\nAnd a dangling line..."));
$this->assertFalse(is_html_content("Looks like a broken editor<br />\nthat produced\nthis kind of\nstring!</div>"));
}
public function testIsEmptyHTMLContent()
{
$this->assertTrue(is_empty_html_content('<p>&nbsp;<br><br></p>'));
@ -259,7 +259,7 @@ class FunctionsTest extends \Codeception\TestCase\Test
$this->assertFalse(is_empty_html_content('<p><video src="rickroll.webm" /></p>'));
$this->assertFalse(is_empty_html_content('<p><object></object></p>'));
}
public function testPolyfillFunctions()
{
$this->assertTrue(function_exists('is_countable'));
@ -267,19 +267,19 @@ class FunctionsTest extends \Codeception\TestCase\Test
$this->assertFalse(is_countable('hello world'));
$this->assertTrue(is_countable(new CountableTest));
$this->assertFalse(is_countable(new stdClass));
$this->assertTrue(function_exists('str_starts_with'));
$this->assertTrue(str_starts_with('foobar', 'foo'));
$this->assertFalse(str_starts_with('Foobar', 'FOO'));
$this->assertFalse(str_starts_with('', 'bar'));
$this->assertTrue(str_starts_with('foobar', ''));
$this->assertTrue(function_exists('str_ends_with'));
$this->assertTrue(str_ends_with('foobar', 'bar'));
$this->assertFalse(str_ends_with('Foobar', 'BAR'));
$this->assertFalse(str_ends_with('', 'bar'));
$this->assertTrue(str_ends_with('foobar', ''));
$this->assertTrue(function_exists('str_contains'));
$this->assertTrue(str_contains('foobarbazz', 'bar'));
$this->assertFalse(str_contains('foobarbazz', 'BAR'));

View file

@ -4,7 +4,7 @@ class LegacyTest extends \Codeception\TestCase\Test
{
public function testGetModule()
{
$this->assertTrue(getModule('board', 'controller') instanceof BoardController);
$this->assertTrue(getModule('board', 'controller') instanceof BoardController);
$this->assertTrue(getModule('board', 'model') instanceof BoardModel);
$this->assertTrue(getModule('board', 'view', 'admin') instanceof BoardAdminView);
$this->assertTrue(getModule('board') instanceof BoardView);
@ -19,25 +19,25 @@ class LegacyTest extends \Codeception\TestCase\Test
$this->assertTrue(getWAP('board') instanceof BoardWap);
$this->assertTrue(getClass('board') instanceof Board);
}
public function testGetNextSequence()
{
if (!DB::getInstance()->isConnected())
{
return;
}
$this->assertGreaterThan(0, $sequence1 = getNextSequence());
$this->assertGreaterThan($sequence1, $sequence2 = getNextSequence());
$this->assertTrue(checkUserSequence($sequence1));
$this->assertTrue(checkUserSequence($sequence2));
$this->assertFalse(checkUserSequence(-1));
setUserSequence(-1);
$this->assertTrue(checkUserSequence(-1));
}
public function testGetURL()
{
/**
@ -55,19 +55,19 @@ class LegacyTest extends \Codeception\TestCase\Test
* - getRequestUriByServerEnviroment()
*/
}
public function testIsSiteID()
{
$this->assertTrue(isSiteID('rhymix_RHYMIX_1234'));
$this->assertFalse(isSiteID('www.rhymix.org'));
}
public function testCutStr()
{
$this->assertEquals('안녕하세요? 라이믹스...', cut_str('안녕하세요? 라이믹스입니다. 제목이 너무 길어서 잘립니다.', 20));
$this->assertEquals('Hello? This is Rhymix...', cut_str('Hello? This is Rhymix. This title is very long.', 20));
}
public function testTimeFunctions()
{
$this->assertEquals(0, get_time_zone_offset('00:00'));
@ -76,11 +76,11 @@ class LegacyTest extends \Codeception\TestCase\Test
$this->assertEquals(32400, get_time_zone_offset('0900'));
$this->assertEquals(-18000, get_time_zone_offset('-05:00'));
$this->assertEquals(-18000, get_time_zone_offset('-0500'));
$this->assertEquals('Jan', getMonthName(1));
$this->assertEquals('Sep', getMonthName(9, true));
$this->assertEquals('September', getMonthName(9, false));
/**
* The following functions are tested in DateTimeTest:
* - zgap()
@ -91,41 +91,41 @@ class LegacyTest extends \Codeception\TestCase\Test
* - getTimeGap()
*/
}
public function testGetEncodedEmailAddress()
{
$this->assertNotEquals('devops@rhymix.org', getEncodeEmailAddress('devops@rhymix.org'));
$this->assertStringContainsString('&#X', getEncodeEmailAddress('devops@rhymix.org'));
}
public function testGetMicrotime()
{
$microtime1 = microtime(true);
$microtime2 = getMicroTime();
$microtime3 = microtime(true);
$this->assertEquals('double', gettype($microtime2));
$this->assertGreaterThanOrEqual($microtime1, $microtime2);
$this->assertGreaterThanOrEqual($microtime2, $microtime3);
}
public function testDelObjectVars()
{
$target = (object)array('foo' => 1, 'bar' => 2, 'baz' => 3, 'rhymix' => 4);
$delete = (object)array('bar' => 5, 'baz' => 6);
$result = delObjectVars($target, $delete);
// Check if the keys were deleted from the result.
$this->assertTrue(isset($result->foo));
$this->assertFalse(isset($result->bar));
$this->assertFalse(isset($result->baz));
$this->assertTrue(isset($result->rhymix));
// Check if the keys are intact in the original target.
$this->assertTrue(isset($target->bar));
$this->assertTrue(isset($target->baz));
}
public function testGetDestroyXeVars()
{
// Test array. (Keys should be intact in the original target.)
@ -133,14 +133,14 @@ class LegacyTest extends \Codeception\TestCase\Test
$result = getDestroyXeVars($target);
$this->assertFalse(isset($result['xe_validator_id']));
$this->assertTrue(isset($target['xe_validator_id']));
// Test object. (Keys should be deleted from the original target.)
$target = (object)array('foo' => 1, 'bar' => 2, 'xe_validator_id' => 3);
$result = getDestroyXeVars($target);
$this->assertFalse(isset($result->xe_validator_id));
$this->assertFalse(isset($target->xe_validator_id));
}
public function testGetNumberingPath()
{
$this->assertEquals('001/', getNumberingPath(1));
@ -153,44 +153,44 @@ class LegacyTest extends \Codeception\TestCase\Test
$this->assertEquals('678/345/012/', getNumberingPath(12345678));
$this->assertEquals('789/456/123/', getNumberingPath(123456789));
}
public function testMysqlPre4HashPassword()
{
$this->assertEquals('5d2e19393cc5ef67', mysql_pre4_hash_password('password'));
$this->assertEquals('25a4fb474e17c19a', mysql_pre4_hash_password('pass\'#word'));
}
public function testJsonEncode2()
{
$data = array('foo' => 1, 'bar' => 2, 'baz' => 3, 'rhymix' => 4);
$this->assertEquals(json_encode($data), json_encode2($data));
}
public function TestIsCrawler()
{
$original_user_agent = $_SERVER['HTTP_USER_AGENT'];
// Test automatic detection from User-Agent string.
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0';
$this->assertFalse(isCrawler());
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)';
$this->assertTrue(isCrawler());
// Test manual detection.
$this->assertTrue(isCrawler('Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)'));
$this->assertTrue(isCrawler('Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)'));
$this->assertFalse(isCrawler('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36'));
$this->assertFalse(isCrawler('Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25'));
$_SERVER['HTTP_USER_AGENT'] = $original_user_agent;
}
public function testMiscUTF8Functions()
{
$this->assertEquals('&lt;img&gt;', url_decode('%3Cimg%3E'));
$this->assertEquals('한글 % English', utf8RawUrlDecode('%uD55C%uAE00%20%25%20English'));
$this->assertEquals('뷁', _code2utf(48577));
$this->assertTrue(detectUTF8('라이믹스'));
$this->assertTrue(detectUTF8(urlencode('라이믹스')));
$this->assertTrue(detectUTF8('%87%a9%43%cd%ef', false, false));
@ -200,7 +200,7 @@ class LegacyTest extends \Codeception\TestCase\Test
$this->assertEquals(mb_convert_encoding('라이믹스', 'UTF-8', 'CP949'), detectUTF8('라이믹스', true));
$this->assertEquals('라이믹스', detectUTF8(iconv('UTF-8', 'EUC-KR', '라이믹스'), true));
}
public function testMiscSecurityFunctions()
{
/**
@ -209,14 +209,14 @@ class LegacyTest extends \Codeception\TestCase\Test
* - checkCSRF()
*/
}
public function testRecurciveExposureCheck()
{
/**
* TODO
*/
}
public function testChangeValueInUrl()
{
/**