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

View file

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

View file

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

View file

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

View file

@ -15,12 +15,12 @@ class ValidatorTest extends \Codeception\TestCase\Test
{ {
Rhymix\Framework\Storage::deleteDirectory(__DIR__ . '/validator/ruleset', true); Rhymix\Framework\Storage::deleteDirectory(__DIR__ . '/validator/ruleset', true);
} }
public function _failed() public function _failed()
{ {
Rhymix\Framework\Storage::deleteDirectory(__DIR__ . '/validator/ruleset', true); Rhymix\Framework\Storage::deleteDirectory(__DIR__ . '/validator/ruleset', true);
} }
public function testRequired() public function testRequired()
{ {
$vd = new Validator(); $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')); Rhymix\Framework\Config::set('crypto.authentication_key', Rhymix\Framework\Security::getRandom(64, 'alnum'));
} }
$driver = Rhymix\Framework\Cache::init(array('dummy')); $driver = Rhymix\Framework\Cache::init(array('dummy'));
} }
public function _after() public function _after()
{ {
$driver = Rhymix\Framework\Cache::clearAll(); $driver = Rhymix\Framework\Cache::clearAll();
} }
public function testInit() public function testInit()
{ {
$driver = Rhymix\Framework\Cache::init(array('type' => 'dummy')); $driver = Rhymix\Framework\Cache::init(array('type' => 'dummy'));
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\Dummy); $this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\Dummy);
$driver = Rhymix\Framework\Cache::init(array('type' => 'sqlite')); $driver = Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\SQLite); $this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\SQLite);
$driver = Rhymix\Framework\Cache::init(array()); $driver = Rhymix\Framework\Cache::init(array());
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\Dummy); $this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\Dummy);
} }
public function testGetSupportedDrivers() public function testGetSupportedDrivers()
{ {
$drivers = Rhymix\Framework\Cache::getSupportedDrivers(); $drivers = Rhymix\Framework\Cache::getSupportedDrivers();
@ -37,79 +37,79 @@ class CacheTest extends \Codeception\TestCase\Test
$this->assertFalse(in_array('file', $drivers)); $this->assertFalse(in_array('file', $drivers));
$this->assertContains('sqlite', $drivers); $this->assertContains('sqlite', $drivers);
} }
public function testGetDriverName() public function testGetDriverName()
{ {
$driver = Rhymix\Framework\Cache::init(array('type' => 'dummy')); $driver = Rhymix\Framework\Cache::init(array('type' => 'dummy'));
$this->assertEquals('dummy', Rhymix\Framework\Cache::getDriverName()); $this->assertEquals('dummy', Rhymix\Framework\Cache::getDriverName());
$driver = Rhymix\Framework\Cache::init(array('type' => 'sqlite')); $driver = Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
$this->assertEquals('sqlite', Rhymix\Framework\Cache::getDriverName()); $this->assertEquals('sqlite', Rhymix\Framework\Cache::getDriverName());
} }
public function testGetDriverInstance() public function testGetDriverInstance()
{ {
$driver = Rhymix\Framework\Cache::getDriverInstance('dummy'); $driver = Rhymix\Framework\Cache::getDriverInstance('dummy');
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\Dummy); $this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\Dummy);
$driver = Rhymix\Framework\Cache::getDriverInstance(); $driver = Rhymix\Framework\Cache::getDriverInstance();
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\File); $this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\File);
} }
public function testGetPrefix() public function testGetPrefix()
{ {
$prefix = Rhymix\Framework\Cache::getPrefix(); $prefix = Rhymix\Framework\Cache::getPrefix();
$this->assertEquals(\RX_VERSION . ':', $prefix); $this->assertEquals(\RX_VERSION . ':', $prefix);
} }
public function testGetSet() public function testGetSet()
{ {
$value = true; $value = true;
$this->assertTrue(Rhymix\Framework\Cache::set('foobar1', $value)); $this->assertTrue(Rhymix\Framework\Cache::set('foobar1', $value));
$this->assertTrue(Rhymix\Framework\Cache::get('foobar1')); $this->assertTrue(Rhymix\Framework\Cache::get('foobar1'));
$value = false; $value = false;
$this->assertTrue(Rhymix\Framework\Cache::set('foobar2', $value)); $this->assertTrue(Rhymix\Framework\Cache::set('foobar2', $value));
$this->assertFalse(Rhymix\Framework\Cache::get('foobar2')); $this->assertFalse(Rhymix\Framework\Cache::get('foobar2'));
$value = 1756234; $value = 1756234;
$this->assertTrue(Rhymix\Framework\Cache::set('foobar3', $value)); $this->assertTrue(Rhymix\Framework\Cache::set('foobar3', $value));
$this->assertEquals($value, Rhymix\Framework\Cache::get('foobar3')); $this->assertEquals($value, Rhymix\Framework\Cache::get('foobar3'));
$value = 'Rhymix is a PHP CMS.'; $value = 'Rhymix is a PHP CMS.';
$this->assertTrue(Rhymix\Framework\Cache::set('foobar4', $value)); $this->assertTrue(Rhymix\Framework\Cache::set('foobar4', $value));
$this->assertEquals($value, Rhymix\Framework\Cache::get('foobar4')); $this->assertEquals($value, Rhymix\Framework\Cache::get('foobar4'));
$value = array('foo' => 'bar', 'rhy' => 'mix'); $value = array('foo' => 'bar', 'rhy' => 'mix');
$this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:5', $value)); $this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:5', $value));
$this->assertEquals($value, Rhymix\Framework\Cache::get('foobar:subkey:5')); $this->assertEquals($value, Rhymix\Framework\Cache::get('foobar:subkey:5'));
$value = (object)array('foo' => 'bar', 'rhy' => 'mix'); $value = (object)array('foo' => 'bar', 'rhy' => 'mix');
$this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:6', $value)); $this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:6', $value));
$this->assertEquals($value, Rhymix\Framework\Cache::get('foobar:subkey:6')); $this->assertEquals($value, Rhymix\Framework\Cache::get('foobar:subkey:6'));
$this->assertNull(Rhymix\Framework\Cache::get('foobar7')); $this->assertNull(Rhymix\Framework\Cache::get('foobar7'));
$this->assertNull(Rhymix\Framework\Cache::get('foobar:subkey:8')); $this->assertNull(Rhymix\Framework\Cache::get('foobar:subkey:8'));
} }
public function testDeleteAndExists() public function testDeleteAndExists()
{ {
Rhymix\Framework\Cache::set('foo', 'FOO'); Rhymix\Framework\Cache::set('foo', 'FOO');
Rhymix\Framework\Cache::set('bar', 'BAR'); Rhymix\Framework\Cache::set('bar', 'BAR');
$this->assertTrue(Rhymix\Framework\Cache::delete('foo')); $this->assertTrue(Rhymix\Framework\Cache::delete('foo'));
$this->assertFalse(Rhymix\Framework\Cache::delete('foo')); $this->assertFalse(Rhymix\Framework\Cache::delete('foo'));
$this->assertFalse(Rhymix\Framework\Cache::exists('foo')); $this->assertFalse(Rhymix\Framework\Cache::exists('foo'));
$this->assertTrue(Rhymix\Framework\Cache::exists('bar')); $this->assertTrue(Rhymix\Framework\Cache::exists('bar'));
} }
public function testIncrDecr() public function testIncrDecr()
{ {
Rhymix\Framework\Cache::init(array('type' => 'sqlite')); Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
Rhymix\Framework\Cache::set('foo', 'foo'); Rhymix\Framework\Cache::set('foo', 'foo');
Rhymix\Framework\Cache::set('bar', 42); Rhymix\Framework\Cache::set('bar', 42);
$prefix = Rhymix\Framework\Cache::getPrefix(); $prefix = Rhymix\Framework\Cache::getPrefix();
$this->assertEquals(1, Rhymix\Framework\Cache::getDriverInstance()->incr($prefix . 'foo', 1)); $this->assertEquals(1, Rhymix\Framework\Cache::getDriverInstance()->incr($prefix . 'foo', 1));
$this->assertEquals(8, Rhymix\Framework\Cache::getDriverInstance()->incr($prefix . 'foo', 7)); $this->assertEquals(8, Rhymix\Framework\Cache::getDriverInstance()->incr($prefix . 'foo', 7));
$this->assertEquals(-7, Rhymix\Framework\Cache::decr('foo', 15)); $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(60, Rhymix\Framework\Cache::incr('bar', 15));
$this->assertEquals(20, Rhymix\Framework\Cache::getDriverInstance()->incr($prefix . 'bar', -40)); $this->assertEquals(20, Rhymix\Framework\Cache::getDriverInstance()->incr($prefix . 'bar', -40));
} }
public function testClearAll() public function testClearAll()
{ {
$this->assertTrue(Rhymix\Framework\Cache::set('foo', 'foo')); $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->assertTrue(Rhymix\Framework\Cache::clearAll());
$this->assertFalse(Rhymix\Framework\Cache::exists('foo')); $this->assertFalse(Rhymix\Framework\Cache::exists('foo'));
} }
public function testCacheGroups() public function testCacheGroups()
{ {
Rhymix\Framework\Cache::init(array('type' => 'sqlite')); Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
$prefix = Rhymix\Framework\Cache::getPrefix(); $prefix = Rhymix\Framework\Cache::getPrefix();
$this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:1234', 'rhymix')); $this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:1234', 'rhymix'));
$this->assertTrue(Rhymix\Framework\Cache::exists('foobar:subkey:1234')); $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::get('foobar:subkey:1234'));
$this->assertEquals('rhymix', Rhymix\Framework\Cache::getDriverInstance()->get($prefix . 'foobar#0:subkey:1234')); $this->assertEquals('rhymix', Rhymix\Framework\Cache::getDriverInstance()->get($prefix . 'foobar#0:subkey:1234'));
$this->assertEquals(0, Rhymix\Framework\Cache::getGroupVersion('foobar')); $this->assertEquals(0, Rhymix\Framework\Cache::getGroupVersion('foobar'));
$this->assertTrue(Rhymix\Framework\Cache::clearGroup('foobar')); $this->assertTrue(Rhymix\Framework\Cache::clearGroup('foobar'));
$this->assertFalse(Rhymix\Framework\Cache::exists('foobar:subkey:1234')); $this->assertFalse(Rhymix\Framework\Cache::exists('foobar:subkey:1234'));
$this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:1234', 'rhymix')); $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('rhymix', Rhymix\Framework\Cache::getDriverInstance()->get($prefix . 'foobar#1:subkey:1234'));
$this->assertEquals(1, Rhymix\Framework\Cache::getGroupVersion('foobar')); $this->assertEquals(1, Rhymix\Framework\Cache::getGroupVersion('foobar'));
} }
public function testGetRealKey() public function testGetRealKey()
{ {
Rhymix\Framework\Cache::init(array('type' => 'sqlite')); Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
$prefix = Rhymix\Framework\Cache::getPrefix(); $prefix = Rhymix\Framework\Cache::getPrefix();
$this->assertEquals($prefix . 'foo', Rhymix\Framework\Cache::getRealKey('foo')); $this->assertEquals($prefix . 'foo', Rhymix\Framework\Cache::getRealKey('foo'));
$this->assertEquals($prefix . 'bar#0:2016', Rhymix\Framework\Cache::getRealKey('bar:2016')); $this->assertEquals($prefix . 'bar#0:2016', Rhymix\Framework\Cache::getRealKey('bar:2016'));
Rhymix\Framework\Cache::clearGroup('bar'); Rhymix\Framework\Cache::clearGroup('bar');
@ -156,34 +156,34 @@ class CacheTest extends \Codeception\TestCase\Test
Rhymix\Framework\Cache::clearGroup('bar'); Rhymix\Framework\Cache::clearGroup('bar');
$this->assertEquals($prefix . 'bar#2:2016', Rhymix\Framework\Cache::getRealKey('bar:2016')); $this->assertEquals($prefix . 'bar#2:2016', Rhymix\Framework\Cache::getRealKey('bar:2016'));
} }
public function testCompatibility() public function testCompatibility()
{ {
Rhymix\Framework\Cache::init(array('type' => 'sqlite')); Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
$ch = \CacheHandler::getInstance(); $ch = \CacheHandler::getInstance();
$this->assertTrue($ch instanceof \CacheHandler); $this->assertTrue($ch instanceof \CacheHandler);
$this->assertTrue($ch->isSupport()); $this->assertTrue($ch->isSupport());
$this->assertEquals('rhymix', $ch->getCacheKey('rhymix')); $this->assertEquals('rhymix', $ch->getCacheKey('rhymix'));
$this->assertEquals('rhymix:123:456', $ch->getCacheKey('rhymix:123:456')); $this->assertEquals('rhymix:123:456', $ch->getCacheKey('rhymix:123:456'));
$this->assertTrue($ch->put('rhymix', 'foo bar buzz')); $this->assertTrue($ch->put('rhymix', 'foo bar buzz'));
$this->assertEquals('foo bar buzz', $ch->get('rhymix')); $this->assertEquals('foo bar buzz', $ch->get('rhymix'));
$this->assertTrue($ch->isValid('rhymix')); $this->assertTrue($ch->isValid('rhymix'));
$this->assertTrue($ch->delete('rhymix')); $this->assertTrue($ch->delete('rhymix'));
$this->assertFalse($ch->get('rhymix')); $this->assertFalse($ch->get('rhymix'));
$this->assertFalse($ch->isValid('rhymix')); $this->assertFalse($ch->isValid('rhymix'));
$this->assertEquals('rhymix:123:456', $ch->getGroupKey('rhymix', '123:456')); $this->assertEquals('rhymix:123:456', $ch->getGroupKey('rhymix', '123:456'));
$this->assertTrue($ch->put('rhymix:123:456', 'rhymix rules!')); $this->assertTrue($ch->put('rhymix:123:456', 'rhymix rules!'));
$this->assertEquals('rhymix rules!', $ch->get('rhymix:123:456')); $this->assertEquals('rhymix rules!', $ch->get('rhymix:123:456'));
$this->assertEquals(0, Rhymix\Framework\Cache::getGroupVersion('rhymix')); $this->assertEquals(0, Rhymix\Framework\Cache::getGroupVersion('rhymix'));
$this->assertTrue($ch->invalidateGroupKey('rhymix')); $this->assertTrue($ch->invalidateGroupKey('rhymix'));
$this->assertTrue($ch->put('rhymix:123:456', 'rhymix rules!')); $this->assertTrue($ch->put('rhymix:123:456', 'rhymix rules!'));
$this->assertEquals('rhymix rules!', $ch->get('rhymix:123:456')); $this->assertEquals('rhymix rules!', $ch->get('rhymix:123:456'));
$this->assertEquals(1, Rhymix\Framework\Cache::getGroupVersion('rhymix')); $this->assertEquals(1, Rhymix\Framework\Cache::getGroupVersion('rhymix'));
$this->assertTrue($ch->truncate()); $this->assertTrue($ch->truncate());
$this->assertFalse($ch->get('rhymix:123:456')); $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(23, 24, 25, 26, 27, 28, 29),
array(30, 31, null, null, null, null, null), array(30, 31, null, null, null, null, null),
); );
$target_201603 = array( $target_201603 = array(
array(null, null, 1, 2, 3, 4, 5), array(null, null, 1, 2, 3, 4, 5),
array(6, 7, 8, 9, 10, 11, 12), 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(27, 28, 29, 30, 31, null, null),
array(null, null, null, null, null, null, null), array(null, null, null, null, null, null, null),
); );
$this->assertEquals($target_201508, Rhymix\Framework\Calendar::getMonthCalendar(8, 2015)); $this->assertEquals($target_201508, Rhymix\Framework\Calendar::getMonthCalendar(8, 2015));
$this->assertEquals($target_201603, Rhymix\Framework\Calendar::getMonthCalendar(3, 2016)); $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); mkdir(RX_BASEDIR . 'files/config', 0755, true);
copy(RX_BASEDIR . 'common/defaults/config.php', RX_BASEDIR . 'files/config/config.php'); copy(RX_BASEDIR . 'common/defaults/config.php', RX_BASEDIR . 'files/config/config.php');
} }
Rhymix\Framework\Config::init(); Rhymix\Framework\Config::init();
$this->assertTrue(version_compare(Rhymix\Framework\Config::get('config_version'), '2.0', '>=')); $this->assertTrue(version_compare(Rhymix\Framework\Config::get('config_version'), '2.0', '>='));
$this->assertTrue(is_array(Rhymix\Framework\Config::get('db.master'))); $this->assertTrue(is_array(Rhymix\Framework\Config::get('db.master')));
$this->assertNotEmpty(Rhymix\Framework\Config::get('db.master.host')); $this->assertNotEmpty(Rhymix\Framework\Config::get('db.master.host'));
Rhymix\Framework\Config::set('foo.bar', $rand = mt_rand()); Rhymix\Framework\Config::set('foo.bar', $rand = mt_rand());
$this->assertEquals(array('bar' => $rand), Rhymix\Framework\Config::get('foo')); $this->assertEquals(array('bar' => $rand), Rhymix\Framework\Config::get('foo'));
$this->assertEquals($rand, Rhymix\Framework\Config::get('foo.bar')); $this->assertEquals($rand, Rhymix\Framework\Config::get('foo.bar'));
$var = array('foo' => 'bar'); $var = array('foo' => 'bar');
$serialized = "array(\n\t'foo' => 'bar',\n)"; $serialized = "array(\n\t'foo' => 'bar',\n)";
$this->assertEquals($serialized, Rhymix\Framework\Config::serialize($var)); $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 = Rhymix\Framework\DB::getInstance();
$oDB->setDebugComment(false); $oDB->setDebugComment(false);
} }
public function testGetInstance() public function testGetInstance()
{ {
$oDB = Rhymix\Framework\DB::getInstance(); $oDB = Rhymix\Framework\DB::getInstance();
@ -15,12 +15,12 @@ class DBTest extends \Codeception\TestCase\Test
$this->assertTrue($oDB->isConnected()); $this->assertTrue($oDB->isConnected());
$this->assertTrue($oDB->getHandle() instanceof Rhymix\Framework\Helpers\DBHelper); $this->assertTrue($oDB->getHandle() instanceof Rhymix\Framework\Helpers\DBHelper);
} }
public function testPrepare() public function testPrepare()
{ {
$oDB = Rhymix\Framework\DB::getInstance(); $oDB = Rhymix\Framework\DB::getInstance();
$prefix = Rhymix\Framework\Config::get('db.master.prefix'); $prefix = Rhymix\Framework\Config::get('db.master.prefix');
$stmt = $oDB->prepare('SELECT * FROM documents WHERE document_srl = ?'); $stmt = $oDB->prepare('SELECT * FROM documents WHERE document_srl = ?');
$this->assertTrue($stmt instanceof Rhymix\Framework\Helpers\DBStmtHelper); $this->assertTrue($stmt instanceof Rhymix\Framework\Helpers\DBStmtHelper);
if ($prefix) if ($prefix)
@ -31,19 +31,19 @@ class DBTest extends \Codeception\TestCase\Test
{ {
$this->assertEquals('SELECT * FROM documents WHERE document_srl = ?', $stmt->queryString); $this->assertEquals('SELECT * FROM documents WHERE document_srl = ?', $stmt->queryString);
} }
$this->assertTrue($stmt->execute([123])); $this->assertTrue($stmt->execute([123]));
$this->assertTrue($stmt->execute([456])); $this->assertTrue($stmt->execute([456]));
$this->assertTrue($stmt->execute([789])); $this->assertTrue($stmt->execute([789]));
$this->assertTrue(is_array($stmt->fetchAll())); $this->assertTrue(is_array($stmt->fetchAll()));
$this->assertTrue($stmt->closeCursor()); $this->assertTrue($stmt->closeCursor());
} }
public function testQuery() public function testQuery()
{ {
$oDB = Rhymix\Framework\DB::getInstance(); $oDB = Rhymix\Framework\DB::getInstance();
$prefix = Rhymix\Framework\Config::get('db.master.prefix'); $prefix = Rhymix\Framework\Config::get('db.master.prefix');
$stmt = $oDB->query('SELECT * FROM documents WHERE document_srl = 123'); $stmt = $oDB->query('SELECT * FROM documents WHERE document_srl = 123');
$this->assertTrue($stmt instanceof Rhymix\Framework\Helpers\DBStmtHelper); $this->assertTrue($stmt instanceof Rhymix\Framework\Helpers\DBStmtHelper);
if ($prefix) if ($prefix)
@ -54,10 +54,10 @@ class DBTest extends \Codeception\TestCase\Test
{ {
$this->assertEquals('SELECT * FROM documents WHERE document_srl = 123', $stmt->queryString); $this->assertEquals('SELECT * FROM documents WHERE document_srl = 123', $stmt->queryString);
} }
$this->assertTrue(is_array($stmt->fetchAll())); $this->assertTrue(is_array($stmt->fetchAll()));
$this->assertTrue($stmt->closeCursor()); $this->assertTrue($stmt->closeCursor());
$stmt = $oDB->query('SELECT * FROM documents WHERE document_srl = ?', [123]); $stmt = $oDB->query('SELECT * FROM documents WHERE document_srl = ?', [123]);
$this->assertTrue($stmt instanceof Rhymix\Framework\Helpers\DBStmtHelper); $this->assertTrue($stmt instanceof Rhymix\Framework\Helpers\DBStmtHelper);
if ($prefix) if ($prefix)
@ -68,10 +68,10 @@ class DBTest extends \Codeception\TestCase\Test
{ {
$this->assertEquals('SELECT * FROM documents WHERE document_srl = ?', $stmt->queryString); $this->assertEquals('SELECT * FROM documents WHERE document_srl = ?', $stmt->queryString);
} }
$this->assertTrue(is_array($stmt->fetchAll())); $this->assertTrue(is_array($stmt->fetchAll()));
$this->assertTrue($stmt->closeCursor()); $this->assertTrue($stmt->closeCursor());
$stmt = $oDB->query('SELECT * FROM documents WHERE document_srl = ? AND status = ?', 123, 'PUBLIC'); $stmt = $oDB->query('SELECT * FROM documents WHERE document_srl = ? AND status = ?', 123, 'PUBLIC');
$this->assertTrue($stmt instanceof Rhymix\Framework\Helpers\DBStmtHelper); $this->assertTrue($stmt instanceof Rhymix\Framework\Helpers\DBStmtHelper);
if ($prefix) 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->assertEquals('SELECT * FROM documents WHERE document_srl = ? AND status = ?', $stmt->queryString);
} }
$this->assertTrue(is_array($stmt->fetchAll())); $this->assertTrue(is_array($stmt->fetchAll()));
$this->assertTrue($stmt->closeCursor()); $this->assertTrue($stmt->closeCursor());
} }
public function testAddPrefixes() public function testAddPrefixes()
{ {
$oDB = Rhymix\Framework\DB::getInstance(); $oDB = Rhymix\Framework\DB::getInstance();
$prefix = Rhymix\Framework\Config::get('db.master.prefix'); $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 = ?'; $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` ' . $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 = ?'; 'ON documents.document_srl = comment.document_srl WHERE documents.member_srl = ?';
$this->assertEquals($target, $oDB->addPrefixes($source)); $this->assertEquals($target, $oDB->addPrefixes($source));
$source = 'SELECT a AS aa FROM documents as foo JOIN bar ON documents.a = bar.a'; $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'; $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)); $this->assertEquals($target, $oDB->addPrefixes($source));
$source = 'INSERT INTO documents (a, b, c) VALUES (?, ?, ?)'; $source = 'INSERT INTO documents (a, b, c) VALUES (?, ?, ?)';
$target = 'INSERT INTO `' . $prefix . 'documents` (a, b, c) VALUES (?, ?, ?)'; $target = 'INSERT INTO `' . $prefix . 'documents` (a, b, c) VALUES (?, ?, ?)';
$this->assertEquals($target, $oDB->addPrefixes($source)); $this->assertEquals($target, $oDB->addPrefixes($source));
$source = 'INSERT INTO documents (a, b, c) SELECT d, e, f FROM old_documents WHERE g = ?'; $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 = ?'; $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)); $this->assertEquals($target, $oDB->addPrefixes($source));
$source = 'UPDATE documents SET a = ?, b = ? WHERE c = ?'; $source = 'UPDATE documents SET a = ?, b = ? WHERE c = ?';
$target = 'UPDATE `' . $prefix . 'documents` SET a = ?, b = ? WHERE c = ?'; $target = 'UPDATE `' . $prefix . 'documents` SET a = ?, b = ? WHERE c = ?';
$this->assertEquals($target, $oDB->addPrefixes($source)); $this->assertEquals($target, $oDB->addPrefixes($source));
$source = 'DELETE FROM documents WHERE d = ?'; $source = 'DELETE FROM documents WHERE d = ?';
$target = 'DELETE FROM `' . $prefix . 'documents` WHERE d = ?'; $target = 'DELETE FROM `' . $prefix . 'documents` WHERE d = ?';
$this->assertEquals($target, $oDB->addPrefixes($source)); $this->assertEquals($target, $oDB->addPrefixes($source));
$source = 'update documents set a = ?, b = ? where c = ?'; $source = 'update documents set a = ?, b = ? where c = ?';
$this->assertEquals($source, $oDB->addPrefixes($source)); $this->assertEquals($source, $oDB->addPrefixes($source));
$source = 'delete from documents where d = ?'; $source = 'delete from documents where d = ?';
$this->assertEquals($source, $oDB->addPrefixes($source)); $this->assertEquals($source, $oDB->addPrefixes($source));
} }
public function testIsTableColumnIndexExists() public function testIsTableColumnIndexExists()
{ {
$oDB = Rhymix\Framework\DB::getInstance(); $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->isColumnExists('documents', 'document_nx'));
$this->assertFalse($oDB->isIndexExists('documents', 'idx_regex')); $this->assertFalse($oDB->isIndexExists('documents', 'idx_regex'));
} }
public function testGetColumnInfo() public function testGetColumnInfo()
{ {
$oDB = Rhymix\Framework\DB::getInstance(); $oDB = Rhymix\Framework\DB::getInstance();
@ -146,7 +146,7 @@ class DBTest extends \Codeception\TestCase\Test
$this->assertNull($info->default_value); $this->assertNull($info->default_value);
$this->assertTrue($info->notnull); $this->assertTrue($info->notnull);
} }
public function testIsValidOldPassword() public function testIsValidOldPassword()
{ {
$oDB = Rhymix\Framework\DB::getInstance(); $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, $saved3));
$this->assertFalse($oDB->isValidOldPassword($password, $saved4)); $this->assertFalse($oDB->isValidOldPassword($password, $saved4));
} }
public function testAddQuotes() public function testAddQuotes()
{ {
$oDB = Rhymix\Framework\DB::getInstance(); $oDB = Rhymix\Framework\DB::getInstance();

View file

@ -3,7 +3,7 @@
class DateTimeTest extends \Codeception\TestCase\Test class DateTimeTest extends \Codeception\TestCase\Test
{ {
private $old_timezone; private $old_timezone;
public function _before() public function _before()
{ {
// Add some dummy data to system configuration. Asia/Seoul offset is 32400. // 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); Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
Context::getInstance(); Context::getInstance();
Context::set('_default_timezone', $GLOBALS['_time_zone'] = 'Asia/Seoul'); Context::set('_default_timezone', $GLOBALS['_time_zone'] = 'Asia/Seoul');
// Set PHP time zone to the internal time zone. // Set PHP time zone to the internal time zone.
$this->old_timezone = @date_default_timezone_get(); $this->old_timezone = @date_default_timezone_get();
date_default_timezone_set('Etc/GMT-3'); date_default_timezone_set('Etc/GMT-3');
} }
public function _after() public function _after()
{ {
// Restore the default and internal timezone. // Restore the default and internal timezone.
Rhymix\Framework\Config::set('locale.default_timezone', 'Asia/Seoul'); Rhymix\Framework\Config::set('locale.default_timezone', 'Asia/Seoul');
Rhymix\Framework\Config::set('locale.internal_timezone', 10800); Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
Context::set('_default_timezone', $GLOBALS['_time_zone'] = 'Asia/Seoul'); Context::set('_default_timezone', $GLOBALS['_time_zone'] = 'Asia/Seoul');
// Restore the old timezone. // Restore the old timezone.
date_default_timezone_set($this->old_timezone); date_default_timezone_set($this->old_timezone);
} }
public function testZgap() public function testZgap()
{ {
// Test zgap() when the current user's time zone is different from the system default. // Test zgap() when the current user's time zone is different from the system default.
$_SESSION['RHYMIX']['timezone'] = 'Etc/UTC'; $_SESSION['RHYMIX']['timezone'] = 'Etc/UTC';
$this->assertEquals(-10800, zgap()); $this->assertEquals(-10800, zgap());
// Test zgap() when the current user's time zone is the same as the system default. // Test zgap() when the current user's time zone is the same as the system default.
unset($_SESSION['RHYMIX']['timezone']); unset($_SESSION['RHYMIX']['timezone']);
$this->assertEquals(21600, zgap()); $this->assertEquals(21600, zgap());
} }
public function testZtime() public function testZtime()
{ {
$timestamp = 1454000000; $timestamp = 1454000000;
// Test ztime() when the internal time zone is different from the default time zone. // Test ztime() when the internal time zone is different from the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800); Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
$this->assertEquals($timestamp, ztime('20160128195320')); $this->assertEquals($timestamp, ztime('20160128195320'));
// Test ztime() when the internal time zone is the same as the default time zone. // Test ztime() when the internal time zone is the same as the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 32400); Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
$this->assertEquals($timestamp, ztime('20160129015320')); $this->assertEquals($timestamp, ztime('20160129015320'));
// Restore the internal timezone. // Restore the internal timezone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800); Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
} }
public function testZtimeDateOnly() public function testZtimeDateOnly()
{ {
$timestamp = -271641600; $timestamp = -271641600;
// Test ztime() when the internal time zone is different from the default time zone. // Test ztime() when the internal time zone is different from the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800); Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
$this->assertEquals($timestamp, ztime('19610524')); $this->assertEquals($timestamp, ztime('19610524'));
// Test ztime() when the internal time zone is the same as the default time zone. // Test ztime() when the internal time zone is the same as the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 32400); Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
$this->assertEquals($timestamp, ztime('19610524')); $this->assertEquals($timestamp, ztime('19610524'));
// Restore the internal timezone. // Restore the internal timezone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800); Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
} }
public function testZdate() public function testZdate()
{ {
$expected = '2016-01-29 01:53:20'; $expected = '2016-01-29 01:53:20';
// Test zdate() when the internal time zone is different from the default time zone. // Test zdate() when the internal time zone is different from the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800); Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
$this->assertEquals($expected, zdate('20160128195320')); $this->assertEquals($expected, zdate('20160128195320'));
$this->assertEquals($expected, zdate('2016-01-28 19:53:20')); $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-28T23:53:20-07:00'));
$this->assertEquals($expected, zdate('2016-01-28 21:23:20+04:30')); $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. // Test zdate() when the internal time zone is the same as the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 32400); Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
$this->assertEquals($expected, zdate('20160129015320')); $this->assertEquals($expected, zdate('20160129015320'));
$this->assertEquals($expected, zdate('2016-01-29 01:53:20')); $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-29 05:53:20+13:00'));
$this->assertEquals($expected, zdate('2016-01-28T20:53:20+04:00')); $this->assertEquals($expected, zdate('2016-01-28T20:53:20+04:00'));
// Restore the internal timezone. // Restore the internal timezone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800); Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
} }
public function testZdateDateOnly() public function testZdateDateOnly()
{ {
// Korea Standard Time was UTC+08:30 until 1961 // Korea Standard Time was UTC+08:30 until 1961
$expected = '1960-04-19 08:30:00'; $expected = '1960-04-19 08:30:00';
// Test zdate() when the internal time zone is different from the default time zone. // Test zdate() when the internal time zone is different from the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800); Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
$this->assertEquals($expected, zdate('19600419', 'Y-m-d H:i:s')); $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. // Test zdate() when the internal time zone is the same as the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 32400); Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
$this->assertEquals($expected, zdate('19600419', 'Y-m-d H:i:s')); $this->assertEquals($expected, zdate('19600419', 'Y-m-d H:i:s'));
// Restore the internal timezone. // Restore the internal timezone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800); Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
} }
public function testGetInternalDateTime() public function testGetInternalDateTime()
{ {
$timestamp = 1454000000; $timestamp = 1454000000;
// Test when the internal time zone is different from the default time zone. // Test when the internal time zone is different from the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800); Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
$this->assertEquals('20160128195320', getInternalDateTime($timestamp)); $this->assertEquals('20160128195320', getInternalDateTime($timestamp));
// Test when the internal time zone is the same as the default time zone. // Test when the internal time zone is the same as the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 32400); Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
$this->assertEquals('20160129015320', getInternalDateTime($timestamp)); $this->assertEquals('20160129015320', getInternalDateTime($timestamp));
} }
public function testGetDisplayDateTime() public function testGetDisplayDateTime()
{ {
$timestamp = 1454000000; $timestamp = 1454000000;
// Test when the display time zone is different from the internal time zone. // Test when the display time zone is different from the internal time zone.
$_SESSION['RHYMIX']['timezone'] = 'America/Los_Angeles'; $_SESSION['RHYMIX']['timezone'] = 'America/Los_Angeles';
$this->assertEquals('20160128085320', getDisplayDateTime($timestamp)); $this->assertEquals('20160128085320', getDisplayDateTime($timestamp));
// Test when the display time zone is the same as the internal time zone. // Test when the display time zone is the same as the internal time zone.
$_SESSION['RHYMIX']['timezone'] = 'Etc/GMT-3'; $_SESSION['RHYMIX']['timezone'] = 'Etc/GMT-3';
$this->assertEquals('20160128195320', getDisplayDateTime($timestamp)); $this->assertEquals('20160128195320', getDisplayDateTime($timestamp));
} }
public function testGetTimeGap() public function testGetTimeGap()
{ {
$GLOBALS['lang'] = Rhymix\Framework\Lang::getInstance('en'); $GLOBALS['lang'] = Rhymix\Framework\Lang::getInstance('en');
$GLOBALS['lang']->loadPlugin('common'); $GLOBALS['lang']->loadPlugin('common');
// Test getTimeGap() when the internal time zone is different from the default time zone. // Test getTimeGap() when the internal time zone is different from the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 10800); Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
$this->assertEquals('1 minute ago', getTimeGap(getInternalDateTime(RX_TIME - 30))); $this->assertEquals('1 minute ago', getTimeGap(getInternalDateTime(RX_TIME - 30)));
$this->assertEquals('30 minutes ago', getTimeGap(getInternalDateTime(RX_TIME - 1800))); $this->assertEquals('30 minutes ago', getTimeGap(getInternalDateTime(RX_TIME - 1800)));
$this->assertEquals('2 hours ago', getTimeGap(getInternalDateTime(RX_TIME - 8000))); $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. // Test getTimeGap() when the internal time zone is the same as the default time zone.
Rhymix\Framework\Config::set('locale.internal_timezone', 32400); Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
$this->assertEquals('30 minutes ago', getTimeGap(getInternalDateTime(RX_TIME - 1800))); $this->assertEquals('30 minutes ago', getTimeGap(getInternalDateTime(RX_TIME - 1800)));
$this->assertEquals('2 hours ago', getTimeGap(getInternalDateTime(RX_TIME - 8000))); $this->assertEquals('2 hours ago', getTimeGap(getInternalDateTime(RX_TIME - 8000)));
$this->assertEquals(getInternalDateTime(RX_TIME - 240000, 'Y.m.d'), getTimeGap(getInternalDateTime(RX_TIME - 240000))); $this->assertEquals(getInternalDateTime(RX_TIME - 240000, 'Y.m.d'), getTimeGap(getInternalDateTime(RX_TIME - 240000)));
} }
public function testGetTimezoneForCurrentUser() public function testGetTimezoneForCurrentUser()
{ {
// Test when the current user's time zone is different from the system default. // Test when the current user's time zone is different from the system default.
$_SESSION['RHYMIX']['timezone'] = 'Pacific/Auckland'; $_SESSION['RHYMIX']['timezone'] = 'Pacific/Auckland';
$this->assertEquals('Pacific/Auckland', Rhymix\Framework\DateTime::getTimezoneForCurrentUser()); $this->assertEquals('Pacific/Auckland', Rhymix\Framework\DateTime::getTimezoneForCurrentUser());
// Test when the current user's time zone is the same as the system default. // Test when the current user's time zone is the same as the system default.
unset($_SESSION['RHYMIX']['timezone']); unset($_SESSION['RHYMIX']['timezone']);
$this->assertEquals('Asia/Seoul', Rhymix\Framework\DateTime::getTimezoneForCurrentUser()); $this->assertEquals('Asia/Seoul', Rhymix\Framework\DateTime::getTimezoneForCurrentUser());
} }
public function testFormatTimestampForCurrentUser() public function testFormatTimestampForCurrentUser()
{ {
$timestamp_winter = 1454000000; $timestamp_winter = 1454000000;
$timestamp_summer = $timestamp_winter - (86400 * 184); $timestamp_summer = $timestamp_winter - (86400 * 184);
// Test when the current user's time zone is in the Northern hemisphere with DST. // Test when the current user's time zone is in the Northern hemisphere with DST.
$_SESSION['RHYMIX']['timezone'] = 'America/Chicago'; $_SESSION['RHYMIX']['timezone'] = 'America/Chicago';
$this->assertEquals('20160128 105320', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_winter)); $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', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_summer));
$this->assertEquals('20150728 115320', getDisplayDateTime($timestamp_summer, 'Ymd His')); $this->assertEquals('20150728 115320', getDisplayDateTime($timestamp_summer, 'Ymd His'));
// Test when the current user's time zone is in the Southern hemisphere with DST. // Test when the current user's time zone is in the Southern hemisphere with DST.
$_SESSION['RHYMIX']['timezone'] = 'Pacific/Auckland'; $_SESSION['RHYMIX']['timezone'] = 'Pacific/Auckland';
$this->assertEquals('20160129 055320', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_winter)); $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', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_summer));
$this->assertEquals('20150729 045320', getDisplayDateTime($timestamp_summer, 'Ymd His')); $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. // Test when the current user's time zone is the same as the system default without DST.
unset($_SESSION['RHYMIX']['timezone']); unset($_SESSION['RHYMIX']['timezone']);
$this->assertEquals('20160129 015320', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_winter)); $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', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_summer));
$this->assertEquals('20150729 015320', getDisplayDateTime($timestamp_summer, 'Ymd His')); $this->assertEquals('20150729 015320', getDisplayDateTime($timestamp_summer, 'Ymd His'));
} }
public function testGetTimezoneList() public function testGetTimezoneList()
{ {
$tzlist = Rhymix\Framework\DateTime::getTimezoneList(); $tzlist = Rhymix\Framework\DateTime::getTimezoneList();
$this->assertTrue(array_key_exists('Etc/UTC', $tzlist)); $this->assertTrue(array_key_exists('Etc/UTC', $tzlist));
$this->assertEquals('Asia/Seoul (+09:00)', $tzlist['Asia/Seoul']); $this->assertEquals('Asia/Seoul (+09:00)', $tzlist['Asia/Seoul']);
} }
public function testGetTimezoneOffset() public function testGetTimezoneOffset()
{ {
$this->assertEquals(32400, Rhymix\Framework\DateTime::getTimezoneOffset('Asia/Seoul')); $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(-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'))); $this->assertEquals(-14400, Rhymix\Framework\DateTime::getTimezoneOffset('America/New_York', strtotime('2015-07-01')));
} }
public function testGetTimezoneOffsetFromInternal() public function testGetTimezoneOffsetFromInternal()
{ {
$this->assertEquals(21600, Rhymix\Framework\DateTime::getTimezoneOffsetFromInternal('Asia/Seoul')); $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(-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'))); $this->assertEquals(-25200, Rhymix\Framework\DateTime::getTimezoneOffsetFromInternal('America/New_York', strtotime('2015-07-01')));
} }
public function testGetTimezoneOffsetByLegacyFormat() public function testGetTimezoneOffsetByLegacyFormat()
{ {
$this->assertEquals(32400, Rhymix\Framework\DateTime::getTimezoneOffsetByLegacyFormat('+0900')); $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(19800, Rhymix\Framework\DateTime::getTimezoneOffsetByLegacyFormat('+0530'));
$this->assertEquals(-38700, Rhymix\Framework\DateTime::getTimezoneOffsetByLegacyFormat('-1045')); $this->assertEquals(-38700, Rhymix\Framework\DateTime::getTimezoneOffsetByLegacyFormat('-1045'));
} }
public function testGetTimezoneNameByOffset() public function testGetTimezoneNameByOffset()
{ {
$this->assertEquals('Etc/GMT-9', Rhymix\Framework\DateTime::getTimezoneNameByOffset(32400)); $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('Asia/Kolkata', Rhymix\Framework\DateTime::getTimezoneNameByOffset(19800));
$this->assertEquals('Australia/Eucla', Rhymix\Framework\DateTime::getTimezoneNameByOffset(31500)); $this->assertEquals('Australia/Eucla', Rhymix\Framework\DateTime::getTimezoneNameByOffset(31500));
} }
public function testGetRelativeTimestamp() public function testGetRelativeTimestamp()
{ {
$GLOBALS['lang'] = Rhymix\Framework\Lang::getInstance('ko'); $GLOBALS['lang'] = Rhymix\Framework\Lang::getInstance('ko');
$GLOBALS['lang']->loadPlugin('common'); $GLOBALS['lang']->loadPlugin('common');
$this->assertEquals('방금', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME)); $this->assertEquals('방금', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME));
$this->assertEquals('20초 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 20)); $this->assertEquals('20초 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 20));
$this->assertEquals('1분 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 60)); $this->assertEquals('1분 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 60));
$this->assertEquals('30분 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 1800)); $this->assertEquals('30분 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 1800));
$this->assertEquals('10일 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 86400 * 10)); $this->assertEquals('10일 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 86400 * 10));
$this->assertEquals('6개월 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 86400 * 190)); $this->assertEquals('6개월 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 86400 * 190));
$GLOBALS['lang'] = Rhymix\Framework\Lang::getInstance('en'); $GLOBALS['lang'] = Rhymix\Framework\Lang::getInstance('en');
$GLOBALS['lang']->loadPlugin('common'); $GLOBALS['lang']->loadPlugin('common');
$this->assertEquals('just now', getInternalDateTime(RX_TIME + 3600, 'relative')); $this->assertEquals('just now', getInternalDateTime(RX_TIME + 3600, 'relative'));
$this->assertEquals('5 days ago', getDisplayDateTime(RX_TIME - 86400 * 5.4, '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')); $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 class DebugTest extends \Codeception\TestCase\Test
{ {
public $error_log; public $error_log;
public function _before() public function _before()
{ {
Rhymix\Framework\Debug::enable(); Rhymix\Framework\Debug::enable();
$this->error_log = ini_get('error_log'); $this->error_log = ini_get('error_log');
ini_set('error_log', '/dev/null'); ini_set('error_log', '/dev/null');
} }
public function _after() public function _after()
{ {
if ($this->error_log) if ($this->error_log)
@ -32,7 +32,7 @@ class DebugTest extends \Codeception\TestCase\Test
Rhymix\Framework\Debug::clearEntries(); Rhymix\Framework\Debug::clearEntries();
$this->assertEquals(0, count(Rhymix\Framework\Debug::getEntries())); $this->assertEquals(0, count(Rhymix\Framework\Debug::getEntries()));
} }
public function testDebugError() public function testDebugError()
{ {
$file = __FILE__; $file = __FILE__;
@ -47,7 +47,7 @@ class DebugTest extends \Codeception\TestCase\Test
Rhymix\Framework\Debug::clearErrors(); Rhymix\Framework\Debug::clearErrors();
$this->assertEquals(0, count(Rhymix\Framework\Debug::getErrors())); $this->assertEquals(0, count(Rhymix\Framework\Debug::getErrors()));
} }
public function testDebugQuery() public function testDebugQuery()
{ {
Rhymix\Framework\Debug::addQuery(array( Rhymix\Framework\Debug::addQuery(array(
@ -72,13 +72,13 @@ class DebugTest extends \Codeception\TestCase\Test
Rhymix\Framework\Debug::clearQueries(); Rhymix\Framework\Debug::clearQueries();
$this->assertEquals(0, count(Rhymix\Framework\Debug::getQueries())); $this->assertEquals(0, count(Rhymix\Framework\Debug::getQueries()));
} }
public function testDebugTranslateFilename() public function testDebugTranslateFilename()
{ {
$original_filename = __FILE__; $original_filename = __FILE__;
$trans_filename = substr($original_filename, strlen(\RX_BASEDIR)); $trans_filename = substr($original_filename, strlen(\RX_BASEDIR));
$this->assertEquals($trans_filename, Rhymix\Framework\Debug::translateFilename($original_filename)); $this->assertEquals($trans_filename, Rhymix\Framework\Debug::translateFilename($original_filename));
$original_filename = __FILE__; $original_filename = __FILE__;
$alias_filename = $original_filename . '.foobar'; $alias_filename = $original_filename . '.foobar';
$trans_filename = substr($alias_filename, strlen(\RX_BASEDIR)); $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'); $html1 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/text2html.target1.html');
$html2 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/text2html.target2.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'); $html3 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/text2html.target3.html');
$this->assertEquals($html1, Rhymix\Framework\Formatter::text2html($text)); $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($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)); $this->assertEquals($html3, Rhymix\Framework\Formatter::text2html($text, Rhymix\Framework\Formatter::TEXT_DOUBLE_NEWLINE_AS_P));
} }
public function testHTML2Text() public function testHTML2Text()
{ {
$html = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/html2text.source.html'); $html = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/html2text.source.html');
$text = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/html2text.target.txt'); $text = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/html2text.target.txt');
$this->assertEquals($text, Rhymix\Framework\Formatter::html2text($html)); $this->assertEquals($text, Rhymix\Framework\Formatter::html2text($html));
} }
public function testMarkdown2HTML() public function testMarkdown2HTML()
{ {
$markdown = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/markdown2html.source.md'); $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')); $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')); $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')); $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($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($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($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))); $this->assertEquals($html4, $this->_removeSpace(Rhymix\Framework\Formatter::markdown2html($markdown, Rhymix\Framework\Formatter::MD_ENABLE_EXTRA)));
} }
public function testMarkdownExtra() public function testMarkdownExtra()
{ {
$markdown = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/markdownextra.source.md'); $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')); $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')); $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($html1, $this->_removeSpace(Rhymix\Framework\Formatter::markdown2html($markdown)));
$this->assertEquals($html2, $this->_removeSpace(Rhymix\Framework\Formatter::markdown2html($markdown, Rhymix\Framework\Formatter::MD_ENABLE_EXTRA))); $this->assertEquals($html2, $this->_removeSpace(Rhymix\Framework\Formatter::markdown2html($markdown, Rhymix\Framework\Formatter::MD_ENABLE_EXTRA)));
} }
public function testHTML2Markdown() public function testHTML2Markdown()
{ {
$html = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/html2markdown.source.html'); $html = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/html2markdown.source.html');
$markdown = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/html2markdown.target.md'); $markdown = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/html2markdown.target.md');
$this->assertEquals($markdown, Rhymix\Framework\Formatter::html2markdown($html)); $this->assertEquals($markdown, Rhymix\Framework\Formatter::html2markdown($html));
} }
public function testBBCode() public function testBBCode()
{ {
$bbcode = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/bbcode.source.txt'); $bbcode = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/bbcode.source.txt');
$html = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/bbcode.target.html'); $html = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/bbcode.target.html');
$this->assertEquals($html, Rhymix\Framework\Formatter::bbcode($bbcode)); $this->assertEquals($html, Rhymix\Framework\Formatter::bbcode($bbcode));
} }
public function testApplySmartQuotes() public function testApplySmartQuotes()
{ {
$before = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/smartypants.source.html'); $before = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/smartypants.source.html');
$after = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/smartypants.target.html'); $after = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/smartypants.target.html');
$this->assertEquals($after, Rhymix\Framework\Formatter::applySmartQuotes($before)); $this->assertEquals($after, Rhymix\Framework\Formatter::applySmartQuotes($before));
} }
public function testCompileLESS() public function testCompileLESS()
{ {
$sources = array( $sources = array(
@ -80,21 +80,21 @@ class FormatterTest extends \Codeception\TestCase\Test
'foo' => '#123456', 'foo' => '#123456',
'bar' => '320px', 'bar' => '320px',
); );
$real_target1 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/less.target1.css'); $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'); $real_target2 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/less.target2.css');
$test_target1 = \RX_BASEDIR . 'tests/_output/less.target1.css'; $test_target1 = \RX_BASEDIR . 'tests/_output/less.target1.css';
$test_target2 = \RX_BASEDIR . 'tests/_output/less.target2.css'; $test_target2 = \RX_BASEDIR . 'tests/_output/less.target2.css';
$this->assertTrue(Rhymix\Framework\Formatter::compileLESS($sources, $test_target1, $variables)); $this->assertTrue(Rhymix\Framework\Formatter::compileLESS($sources, $test_target1, $variables));
$this->assertEquals($real_target1, file_get_contents($test_target1)); $this->assertEquals($real_target1, file_get_contents($test_target1));
$this->assertTrue(Rhymix\Framework\Formatter::compileLESS($sources, $test_target2, $variables, true)); $this->assertTrue(Rhymix\Framework\Formatter::compileLESS($sources, $test_target2, $variables, true));
$this->assertEquals($real_target2, file_get_contents($test_target2)); $this->assertEquals($real_target2, file_get_contents($test_target2));
unlink($test_target1); unlink($test_target1);
unlink($test_target2); unlink($test_target2);
} }
public function testCompileSCSS() public function testCompileSCSS()
{ {
$sources = array( $sources = array(
@ -105,45 +105,45 @@ class FormatterTest extends \Codeception\TestCase\Test
'foo' => '#123456', 'foo' => '#123456',
'bar' => '320px', 'bar' => '320px',
); );
$real_target1 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/scss.target1.css'); $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'); $real_target2 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/scss.target2.css');
$test_target1 = \RX_BASEDIR . 'tests/_output/scss.target1.css'; $test_target1 = \RX_BASEDIR . 'tests/_output/scss.target1.css';
$test_target2 = \RX_BASEDIR . 'tests/_output/scss.target2.css'; $test_target2 = \RX_BASEDIR . 'tests/_output/scss.target2.css';
$this->assertTrue(Rhymix\Framework\Formatter::compileSCSS($sources, $test_target1, $variables)); $this->assertTrue(Rhymix\Framework\Formatter::compileSCSS($sources, $test_target1, $variables));
$this->assertEquals($real_target1, file_get_contents($test_target1)); $this->assertEquals($real_target1, file_get_contents($test_target1));
$this->assertTrue(Rhymix\Framework\Formatter::compileSCSS($sources, $test_target2, $variables, true)); $this->assertTrue(Rhymix\Framework\Formatter::compileSCSS($sources, $test_target2, $variables, true));
$this->assertEquals($real_target2, file_get_contents($test_target2)); $this->assertEquals($real_target2, file_get_contents($test_target2));
unlink($test_target1); unlink($test_target1);
unlink($test_target2); unlink($test_target2);
} }
public function testMinifyCSS() public function testMinifyCSS()
{ {
$source = \RX_BASEDIR . 'tests/_data/formatter/minify.source.css'; $source = \RX_BASEDIR . 'tests/_data/formatter/minify.source.css';
$real_target = \RX_BASEDIR . 'tests/_data/formatter/minify.target.css'; $real_target = \RX_BASEDIR . 'tests/_data/formatter/minify.target.css';
$test_target = \RX_BASEDIR . 'tests/_output/minify.target.css'; $test_target = \RX_BASEDIR . 'tests/_output/minify.target.css';
$this->assertTrue(Rhymix\Framework\Formatter::minifyCSS($source, $test_target)); $this->assertTrue(Rhymix\Framework\Formatter::minifyCSS($source, $test_target));
$this->assertEquals(file_get_contents($real_target), file_get_contents($test_target)); $this->assertEquals(file_get_contents($real_target), file_get_contents($test_target));
unlink($test_target); unlink($test_target);
} }
public function testMinifyJS() public function testMinifyJS()
{ {
$source = \RX_BASEDIR . 'tests/_data/formatter/minify.source.js'; $source = \RX_BASEDIR . 'tests/_data/formatter/minify.source.js';
$real_target = \RX_BASEDIR . 'tests/_data/formatter/minify.target.js'; $real_target = \RX_BASEDIR . 'tests/_data/formatter/minify.target.js';
$test_target = \RX_BASEDIR . 'tests/_output/minify.target.js'; $test_target = \RX_BASEDIR . 'tests/_output/minify.target.js';
$this->assertTrue(Rhymix\Framework\Formatter::minifyJS($source, $test_target)); $this->assertTrue(Rhymix\Framework\Formatter::minifyJS($source, $test_target));
$this->assertEquals(file_get_contents($real_target), file_get_contents($test_target)); $this->assertEquals(file_get_contents($real_target), file_get_contents($test_target));
unlink($test_target); unlink($test_target);
} }
public function testConcatCSS() public function testConcatCSS()
{ {
$source1 = \RX_BASEDIR . 'tests/_data/formatter/concat.source1.css'; $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_target1 = \RX_BASEDIR . 'tests/_data/formatter/concat.target1.css';
$real_target2 = \RX_BASEDIR . 'tests/_data/formatter/concat.target2.css'; $real_target2 = \RX_BASEDIR . 'tests/_data/formatter/concat.target2.css';
$test_target = \RX_BASEDIR . 'tests/_output/concat.target.css'; $test_target = \RX_BASEDIR . 'tests/_output/concat.target.css';
$test_without_media_query = Rhymix\Framework\Formatter::concatCSS(array($source1, $source2), $test_target); $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)); $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); $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)); $this->assertEquals(trim(file_get_contents($real_target2)), trim($test_with_media_query));
} }
public function testConcatJS() public function testConcatJS()
{ {
$source1 = \RX_BASEDIR . 'tests/_data/formatter/concat.source1.js'; $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_target1 = \RX_BASEDIR . 'tests/_data/formatter/concat.target1.js';
$real_target2 = \RX_BASEDIR . 'tests/_data/formatter/concat.target2.js'; $real_target2 = \RX_BASEDIR . 'tests/_data/formatter/concat.target2.js';
$test_target = \RX_BASEDIR . 'tests/_output/concat.target.js'; $test_target = \RX_BASEDIR . 'tests/_output/concat.target.js';
$test_without_targetie = Rhymix\Framework\Formatter::concatJS(array($source1, $source2), $test_target); $test_without_targetie = Rhymix\Framework\Formatter::concatJS(array($source1, $source2), $test_target);
$this->assertEquals(trim(file_get_contents($real_target1)), trim($test_without_targetie)); $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); $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)); $this->assertEquals(trim(file_get_contents($real_target2)), trim($test_with_targetie));
} }
protected function _removeSpace($str) protected function _removeSpace($str)
{ {
return preg_replace('/\s+/', '', $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('0505-9876-5432', Rhymix\Framework\Korea::formatPhoneNumber('050-5987-65432'));
$this->assertEquals('070-7432-1000', Rhymix\Framework\Korea::formatPhoneNumber('0707-432-1000')); $this->assertEquals('070-7432-1000', Rhymix\Framework\Korea::formatPhoneNumber('0707-432-1000'));
} }
public function testIsValidPhoneNumber() public function testIsValidPhoneNumber()
{ {
$this->assertTrue(Rhymix\Framework\Korea::isValidPhoneNumber('1588-0000')); $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('0303-1111-5432'));
$this->assertFalse(Rhymix\Framework\Korea::isValidPhoneNumber('0505-9876-543210')); $this->assertFalse(Rhymix\Framework\Korea::isValidPhoneNumber('0505-9876-543210'));
} }
public function testIsValidMobilePhoneNumber() public function testIsValidMobilePhoneNumber()
{ {
$this->assertTrue(Rhymix\Framework\Korea::isValidMobilePhoneNumber('011-345-6789')); $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('063-9876-5432'));
$this->assertFalse(Rhymix\Framework\Korea::isValidMobilePhoneNumber('070-7654-3210')); $this->assertFalse(Rhymix\Framework\Korea::isValidMobilePhoneNumber('070-7654-3210'));
} }
public function testIsValidJuminNumber() public function testIsValidJuminNumber()
{ {
// These numbers are fake. // These numbers are fake.
$this->assertTrue(Rhymix\Framework\Korea::isValidJuminNumber('123456-3456787')); $this->assertTrue(Rhymix\Framework\Korea::isValidJuminNumber('123456-3456787'));
$this->assertFalse(Rhymix\Framework\Korea::isValidJuminNumber('123456-3456788')); $this->assertFalse(Rhymix\Framework\Korea::isValidJuminNumber('123456-3456788'));
} }
public function testIsValidCorporationNumber() public function testIsValidCorporationNumber()
{ {
// These numbers are fake. // These numbers are fake.
$this->assertTrue(Rhymix\Framework\Korea::isValidCorporationNumber('123456-0123453')); $this->assertTrue(Rhymix\Framework\Korea::isValidCorporationNumber('123456-0123453'));
$this->assertFalse(Rhymix\Framework\Korea::isValidCorporationNumber('123456-0123454')); $this->assertFalse(Rhymix\Framework\Korea::isValidCorporationNumber('123456-0123454'));
} }
public function testIsValidBusinessNumber() public function testIsValidBusinessNumber()
{ {
// These numbers are fake. // These numbers are fake.
$this->assertTrue(Rhymix\Framework\Korea::isValidBusinessNumber('123-45-67891')); $this->assertTrue(Rhymix\Framework\Korea::isValidBusinessNumber('123-45-67891'));
$this->assertFalse(Rhymix\Framework\Korea::isValidBusinessNumber('123-45-67892')); $this->assertFalse(Rhymix\Framework\Korea::isValidBusinessNumber('123-45-67892'));
} }
public function testIsKoreanIP() public function testIsKoreanIP()
{ {
// Private IP ranges. // 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('127.0.123.45'));
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('192.168.10.1')); $this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('192.168.10.1'));
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('::1')); $this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('::1'));
// Korean IP ranges. // Korean IP ranges.
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('115.71.233.0')); $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('114.207.12.3'));
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('2001:0320::1')); $this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('2001:0320::1'));
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('2407:B800::F')); $this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('2407:B800::F'));
// Foreign IP ranges. // Foreign IP ranges.
$this->assertFalse(Rhymix\Framework\Korea::isKoreanIP('216.58.197.0')); $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('170.14.168.0'));
$this->assertFalse(Rhymix\Framework\Korea::isKoreanIP('2001:41d0:8:e8ad::1')); $this->assertFalse(Rhymix\Framework\Korea::isKoreanIP('2001:41d0:8:e8ad::1'));
$this->assertFalse(Rhymix\Framework\Korea::isKoreanIP('2404:6800:4005:802::200e')); $this->assertFalse(Rhymix\Framework\Korea::isKoreanIP('2404:6800:4005:802::200e'));
} }
public function testIsKoreanEmailAddress() public function testIsKoreanEmailAddress()
{ {
// Test Korean portals. // Test Korean portals.
$this->assertTrue(Rhymix\Framework\Korea::isKoreanEmailAddress('test@naver.com')); $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@hanmail.net'));
$this->assertTrue(Rhymix\Framework\Korea::isKoreanEmailAddress('test@worksmobile.com')); $this->assertTrue(Rhymix\Framework\Korea::isKoreanEmailAddress('test@worksmobile.com'));
// Test foreign portals. // Test foreign portals.
$this->assertFalse(Rhymix\Framework\Korea::isKoreanEmailAddress('test@gmail.com')); $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@hotmail.com'));
$this->assertFalse(Rhymix\Framework\Korea::isKoreanEmailAddress('test@yahoo.com')); $this->assertFalse(Rhymix\Framework\Korea::isKoreanEmailAddress('test@yahoo.com'));
// Test third-party MX services. // Test third-party MX services.
$this->assertTrue(Rhymix\Framework\Korea::isKoreanEmailAddress('test@woorimail.com')); $this->assertTrue(Rhymix\Framework\Korea::isKoreanEmailAddress('test@woorimail.com'));
$this->assertFalse(Rhymix\Framework\Korea::isKoreanEmailAddress('test@rhymix.org')); $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($ko instanceof Rhymix\Framework\Lang);
$this->assertTrue($en instanceof Rhymix\Framework\Lang); $this->assertTrue($en instanceof Rhymix\Framework\Lang);
$this->assertFalse($ko === $en); $this->assertFalse($ko === $en);
// Test backward compatible language code for Japanese. // Test backward compatible language code for Japanese.
$ja = Rhymix\Framework\Lang::getInstance('ja'); $ja = Rhymix\Framework\Lang::getInstance('ja');
$jp = Rhymix\Framework\Lang::getInstance('jp'); $jp = Rhymix\Framework\Lang::getInstance('jp');
$this->assertTrue($ja === $jp); $this->assertTrue($ja === $jp);
// Test loading new plugins. // Test loading new plugins.
$this->assertNotEquals('ヘルプ', $ja->help); $this->assertNotEquals('ヘルプ', $ja->help);
$ja->loadPlugin('common'); $ja->loadPlugin('common');
$this->assertEquals('ヘルプ', $ja->help); $this->assertEquals('ヘルプ', $ja->help);
// Test simple translations with namespacing. // Test simple translations with namespacing.
$this->assertEquals('도움말', $ko->get('common.help')); $this->assertEquals('도움말', $ko->get('common.help'));
$this->assertEquals('Help', $en->get('common.help')); $this->assertEquals('Help', $en->get('common.help'));
// Test simple translations without namespacing. // Test simple translations without namespacing.
$this->assertEquals('도움말', $ko->help); $this->assertEquals('도움말', $ko->help);
$this->assertEquals('Help', $en->help); $this->assertEquals('Help', $en->help);
// Test complex translations with multidimensional arrays. // Test complex translations with multidimensional arrays.
$this->assertEquals('%d분 전', $ko->get('common.time_gap.min')); $this->assertEquals('%d분 전', $ko->get('common.time_gap.min'));
$this->assertEquals('10분 전', $ko->get('common.time_gap.min', 10)); $this->assertEquals('10분 전', $ko->get('common.time_gap.min', 10));
$this->assertTrue($ko->get('common.time_gap') instanceof \ArrayObject); $this->assertTrue($ko->get('common.time_gap') instanceof \ArrayObject);
$this->assertEquals('%d분 전', $ko->get('common.time_gap')->min); $this->assertEquals('%d분 전', $ko->get('common.time_gap')->min);
// Test nonexistent keys. // Test nonexistent keys.
$this->assertEquals('common.nonexistent', $ko->get('common.nonexistent')); $this->assertEquals('common.nonexistent', $ko->get('common.nonexistent'));
$this->assertEquals('common.nonexistent', $ko->get('common.nonexistent', 'foo', 'bar')); $this->assertEquals('common.nonexistent', $ko->get('common.nonexistent', 'foo', 'bar'));
$this->assertEquals('admin.help', $ko->get('admin.help')); $this->assertEquals('admin.help', $ko->get('admin.help'));
$this->assertEquals('admin.help', $en->get('admin.help')); $this->assertEquals('admin.help', $en->get('admin.help'));
// Test setting new keys with and without namespacing. // Test setting new keys with and without namespacing.
$ko->set('foo', 'FOO!'); $ko->set('foo', 'FOO!');
$this->assertEquals('FOO!', $ko->get('foo')); $this->assertEquals('FOO!', $ko->get('foo'));
$ko->set('common.foobar', 'FOOBAR!'); $ko->set('common.foobar', 'FOOBAR!');
$this->assertEquals('FOOBAR!', $ko->get('common.foobar')); $this->assertEquals('FOOBAR!', $ko->get('common.foobar'));
$this->assertEquals('FOOBAR!', $ko->get('foobar')); $this->assertEquals('FOOBAR!', $ko->get('foobar'));
// Test setting new keys with multidimensional arrays. // Test setting new keys with multidimensional arrays.
$ko->set('common.time_gap.foobar', 'FOOBAR!'); $ko->set('common.time_gap.foobar', 'FOOBAR!');
$this->assertEquals('FOOBAR!', $ko->get('common.time_gap.foobar')); $this->assertEquals('FOOBAR!', $ko->get('common.time_gap.foobar'));
$ko->set('common.foobar.baz', 'BAZ!'); $ko->set('common.foobar.baz', 'BAZ!');
$this->assertNotEquals('BAZ!', $ko->get('common.foobar.baz')); $this->assertNotEquals('BAZ!', $ko->get('common.foobar.baz'));
// Test fallback to English. // Test fallback to English.
$en->only_in_english = 'Hello world'; $en->only_in_english = 'Hello world';
$this->assertEquals('Hello world', $ko->only_in_english); $this->assertEquals('Hello world', $ko->only_in_english);
$this->assertEquals('Hello world', $en->only_in_english); $this->assertEquals('Hello world', $en->only_in_english);
$this->assertEquals('Hello world', $ja->only_in_english); $this->assertEquals('Hello world', $ja->only_in_english);
// Test string interpolation. // Test string interpolation.
$ko->foobartestlang = '%s님 안녕하세요?'; $ko->foobartestlang = '%s님 안녕하세요?';
$this->assertEquals('Travis님 안녕하세요?', $ko->foobartestlang('Travis')); $this->assertEquals('Travis님 안녕하세요?', $ko->foobartestlang('Travis'));
$en->foobartestlang = 'Hello, %s!'; $en->foobartestlang = 'Hello, %s!';
$this->assertEquals('Hello, Travis!', $en->get('foobartestlang', 'Travis')); $this->assertEquals('Hello, Travis!', $en->get('foobartestlang', 'Travis'));
} }
public function testLangCompat() public function testLangCompat()
{ {
Context::loadLang('./modules/member/lang'); 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('audio/ogg', Rhymix\Framework\MIME::getTypeByExtension('ogg'));
$this->assertEquals('image/gif', Rhymix\Framework\MIME::getTypeByExtension('gif')); $this->assertEquals('image/gif', Rhymix\Framework\MIME::getTypeByExtension('gif'));
$this->assertEquals('text/html', Rhymix\Framework\MIME::getTypeByExtension('htm')); $this->assertEquals('text/html', Rhymix\Framework\MIME::getTypeByExtension('htm'));
$this->assertEquals('application/msword', Rhymix\Framework\MIME::getTypeByFilename('attachment.doc')); $this->assertEquals('application/msword', Rhymix\Framework\MIME::getTypeByFilename('attachment.doc'));
$this->assertEquals('application/pdf', Rhymix\Framework\MIME::getTypeByFilename('라이믹스.pdf')); $this->assertEquals('application/pdf', Rhymix\Framework\MIME::getTypeByFilename('라이믹스.pdf'));
$this->assertEquals('application/postscript', Rhymix\Framework\MIME::getTypeByFilename('MyGraphics.v2.eps')); $this->assertEquals('application/postscript', Rhymix\Framework\MIME::getTypeByFilename('MyGraphics.v2.eps'));
$this->assertEquals('application/vnd.ms-excel', Mail::returnMIMEType('MySpreadsheet.xls')); $this->assertEquals('application/vnd.ms-excel', Mail::returnMIMEType('MySpreadsheet.xls'));
$this->assertEquals('application/octet-stream', Mail::returnMIMEType('Untitled File')); $this->assertEquals('application/octet-stream', Mail::returnMIMEType('Untitled File'));
$this->assertEquals('odt', Rhymix\Framework\MIME::getExtensionByType('application/vnd.oasis.opendocument.text')); $this->assertEquals('odt', Rhymix\Framework\MIME::getExtensionByType('application/vnd.oasis.opendocument.text'));
$this->assertEquals('jpg', Rhymix\Framework\MIME::getExtensionByType('image/jpeg')); $this->assertEquals('jpg', Rhymix\Framework\MIME::getExtensionByType('image/jpeg'));
$this->assertEquals('mpg', Rhymix\Framework\MIME::getExtensionByType('video/mpeg')); $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(); $driver = Rhymix\Framework\Mail::getDefaultDriver();
$this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\MailInterface', $driver); $this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\MailInterface', $driver);
$driver = Rhymix\Framework\Drivers\Mail\Dummy::getInstance(array()); $driver = Rhymix\Framework\Drivers\Mail\Dummy::getInstance(array());
Rhymix\Framework\Mail::setDefaultDriver($driver); Rhymix\Framework\Mail::setDefaultDriver($driver);
$this->assertEquals($driver, Rhymix\Framework\Mail::getDefaultDriver()); $this->assertEquals($driver, Rhymix\Framework\Mail::getDefaultDriver());
} }
public function testGetSupportedDrivers() public function testGetSupportedDrivers()
{ {
$drivers = Rhymix\Framework\Mail::getSupportedDrivers(); $drivers = Rhymix\Framework\Mail::getSupportedDrivers();
@ -22,82 +22,82 @@ class MailTest extends \Codeception\TestCase\Test
$this->assertEquals(array('api_token'), $drivers['sparkpost']['required']); $this->assertEquals(array('api_token'), $drivers['sparkpost']['required']);
$this->assertNotEmpty($drivers['woorimail']['spf_hint']); $this->assertNotEmpty($drivers['woorimail']['spf_hint']);
} }
public function testSenderAndRecipients() public function testSenderAndRecipients()
{ {
$mail = new Rhymix\Framework\Mail; $mail = new Rhymix\Framework\Mail;
$this->assertNull($mail->getFrom()); $this->assertNull($mail->getFrom());
$mail->setFrom('devops@rhymix.org', 'Rhymix Developers'); $mail->setFrom('devops@rhymix.org', 'Rhymix Developers');
$this->assertEquals('Rhymix Developers <devops@rhymix.org>', $mail->getFrom()); $this->assertEquals('Rhymix Developers <devops@rhymix.org>', $mail->getFrom());
$this->assertEquals(null, $mail->message->getTo()); $this->assertEquals(null, $mail->message->getTo());
$mail->addTo('whoever@rhymix.org', 'Name'); $mail->addTo('whoever@rhymix.org', 'Name');
$this->assertEquals(array('whoever@rhymix.org' => 'Name'), $mail->message->getTo()); $this->assertEquals(array('whoever@rhymix.org' => 'Name'), $mail->message->getTo());
$this->assertEquals(null, $mail->message->getCc()); $this->assertEquals(null, $mail->message->getCc());
$mail->addCc('whatever@rhymix.org', 'Nick'); $mail->addCc('whatever@rhymix.org', 'Nick');
$this->assertEquals(array('whatever@rhymix.org' => 'Nick'), $mail->message->getCc()); $this->assertEquals(array('whatever@rhymix.org' => 'Nick'), $mail->message->getCc());
$this->assertEquals(null, $mail->message->getBcc()); $this->assertEquals(null, $mail->message->getBcc());
$mail->addBcc('wherever@rhymix.org', 'User'); $mail->addBcc('wherever@rhymix.org', 'User');
$this->assertEquals(array('wherever@rhymix.org' => 'User'), $mail->message->getBcc()); $this->assertEquals(array('wherever@rhymix.org' => 'User'), $mail->message->getBcc());
$this->assertEquals(null, $mail->message->getReplyTo()); $this->assertEquals(null, $mail->message->getReplyTo());
$mail->setReplyTo('replyto@rhymix.org'); $mail->setReplyTo('replyto@rhymix.org');
$this->assertEquals(array('replyto@rhymix.org' => ''), $mail->message->getReplyTo()); $this->assertEquals(array('replyto@rhymix.org' => ''), $mail->message->getReplyTo());
$recipients = $mail->getRecipients(); $recipients = $mail->getRecipients();
$this->assertEquals(3, count($recipients)); $this->assertEquals(3, count($recipients));
$this->assertContains('Name <whoever@rhymix.org>', $recipients); $this->assertContains('Name <whoever@rhymix.org>', $recipients);
$this->assertContains('Nick <whatever@rhymix.org>', $recipients); $this->assertContains('Nick <whatever@rhymix.org>', $recipients);
$this->assertContains('User <wherever@rhymix.org>', $recipients); $this->assertContains('User <wherever@rhymix.org>', $recipients);
} }
public function testMiscHeaders() public function testMiscHeaders()
{ {
$mail = new Rhymix\Framework\Mail; $mail = new Rhymix\Framework\Mail;
$mail->setReturnPath('envelope@rhymix.org'); $mail->setReturnPath('envelope@rhymix.org');
$this->assertEquals('envelope@rhymix.org', $mail->message->getReturnPath()); $this->assertEquals('envelope@rhymix.org', $mail->message->getReturnPath());
$mail->setMessageID('some.random.string@rhymix.org'); $mail->setMessageID('some.random.string@rhymix.org');
$this->assertEquals('some.random.string@rhymix.org', $mail->message->getId()); $this->assertEquals('some.random.string@rhymix.org', $mail->message->getId());
$mail->setInReplyTo('<previous.message@rhymix.org>'); $mail->setInReplyTo('<previous.message@rhymix.org>');
$this->assertEquals('<previous.message@rhymix.org>', $mail->message->getHeaders()->get('In-Reply-To')->getValue()); $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>'); $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()); $this->assertEquals('<thread-1@rhymix.org>, <thread-2@rhymix.org>, <thread-3@rhymix.org>', $mail->message->getHeaders()->get('References')->getValue());
} }
public function testMailSubject() public function testMailSubject()
{ {
$mail = new Rhymix\Framework\Mail; $mail = new Rhymix\Framework\Mail;
$mail->setSubject('Foobar!'); $mail->setSubject('Foobar!');
$this->assertEquals('Foobar!', $mail->getSubject()); $this->assertEquals('Foobar!', $mail->getSubject());
$mail->setTitle('Foobarbazz?'); $mail->setTitle('Foobarbazz?');
$this->assertEquals('Foobarbazz?', $mail->getTitle()); $this->assertEquals('Foobarbazz?', $mail->getTitle());
} }
public function testMailBody() public function testMailBody()
{ {
$baseurl = '/' . basename(dirname(dirname(dirname(__DIR__)))) . '/'; $baseurl = '/' . basename(dirname(dirname(dirname(__DIR__)))) . '/';
$mail = new Rhymix\Framework\Mail; $mail = new Rhymix\Framework\Mail;
$mail->setBody('<p>Hello world!</p>', 'text/html'); $mail->setBody('<p>Hello world!</p>', 'text/html');
$this->assertEquals('<p>Hello world!</p>', $mail->getBody()); $this->assertEquals('<p>Hello world!</p>', $mail->getBody());
$this->assertEquals('text/html', $mail->getContentType()); $this->assertEquals('text/html', $mail->getContentType());
$mail->setContent('<p>Hello world! Foobar?</p>', 'text/plain'); $mail->setContent('<p>Hello world! Foobar?</p>', 'text/plain');
$this->assertEquals('<p>Hello world! Foobar?</p>', $mail->getBody()); $this->assertEquals('<p>Hello world! Foobar?</p>', $mail->getBody());
$this->assertEquals('text/plain', $mail->getContentType()); $this->assertEquals('text/plain', $mail->getContentType());
$mail->setBody('<p>Hello foobar...</p>', 'invalid value'); $mail->setBody('<p>Hello foobar...</p>', 'invalid value');
$this->assertEquals('<p>Hello foobar...</p>', $mail->getContent()); $this->assertEquals('<p>Hello foobar...</p>', $mail->getContent());
$this->assertEquals('text/plain', $mail->getContentType()); $this->assertEquals('text/plain', $mail->getContentType());
$mail->setBody('<p><img src="files/attach/foobar.jpg" alt="TEST" /></p>', 'text/html'); $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()); $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'); $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()); $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'); $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()); $this->assertEquals('<p><img src="./files/attach/foobar.jpg" alt="TEST" /></p>', $mail->getBody());
$mail->setContentType('html'); $mail->setContentType('html');
$this->assertEquals('text/html', $mail->getContentType()); $this->assertEquals('text/html', $mail->getContentType());
$mail->setContentType('invalid'); $mail->setContentType('invalid');
$this->assertEquals('text/plain', $mail->getContentType()); $this->assertEquals('text/plain', $mail->getContentType());
} }
public function testMailAttach() public function testMailAttach()
{ {
$mail = new Rhymix\Framework\Mail; $mail = new Rhymix\Framework\Mail;
$success = $mail->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css'); $success = $mail->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css');
$this->assertTrue($success); $this->assertTrue($success);
$success = $mail->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css', 'target.css'); $success = $mail->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css', 'target.css');
$this->assertTrue($success); $this->assertTrue($success);
$success = $mail->attach(\RX_BASEDIR . 'tests/_data/nonexistent.file.jpg'); $success = $mail->attach(\RX_BASEDIR . 'tests/_data/nonexistent.file.jpg');
$this->assertFalse($success); $this->assertFalse($success);
$attachments = $mail->getAttachments(); $attachments = $mail->getAttachments();
$this->assertEquals(2, count($attachments)); $this->assertEquals(2, count($attachments));
$this->assertEquals('attach', $attachments[0]->type); $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('minify.source.css', $attachments[0]->display_filename);
$this->assertEquals('target.css', $attachments[1]->display_filename); $this->assertEquals('target.css', $attachments[1]->display_filename);
} }
public function testMailEmbed() public function testMailEmbed()
{ {
$mail = new Rhymix\Framework\Mail; $mail = new Rhymix\Framework\Mail;
$cid = $mail->embed(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css', 'thisismyrandomcid@rhymix.org'); $cid = $mail->embed(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css', 'thisismyrandomcid@rhymix.org');
$this->assertEquals('cid:thisismyrandomcid@rhymix.org', $cid); $this->assertEquals('cid:thisismyrandomcid@rhymix.org', $cid);
$cid = $mail->embed(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css'); $cid = $mail->embed(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css');
$this->assertRegexp('/^cid:[0-9a-z]+@[^@]+$/i', $cid); $this->assertRegexp('/^cid:[0-9a-z]+@[^@]+$/i', $cid);
} }
public function testMailClassCompatibility() public function testMailClassCompatibility()
{ {
\Mail::useGmailAccount('devops@rhymix.org', 'password'); \Mail::useGmailAccount('devops@rhymix.org', 'password');
$this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\Mail\\SMTP', \Mail::getDefaultDriver()); $this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\Mail\\SMTP', \Mail::getDefaultDriver());
\Mail::useSMTP(null, 'rhymix.org', 'devops@rhymix.org', 'password', 'tls', 587); \Mail::useSMTP(null, 'rhymix.org', 'devops@rhymix.org', 'password', 'tls', 587);
$this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\Mail\\SMTP', \Mail::getDefaultDriver()); $this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\Mail\\SMTP', \Mail::getDefaultDriver());
$mail = new \Mail; $mail = new \Mail;
$mail->setSender('Rhymix', 'devops@rhymix.org'); $mail->setSender('Rhymix', 'devops@rhymix.org');
$this->assertEquals('Rhymix <devops@rhymix.org>', $mail->getSender()); $this->assertEquals('Rhymix <devops@rhymix.org>', $mail->getSender());
$mail->setReceiptor('Recipient', 'whoever@rhymix.org'); $mail->setReceiptor('Recipient', 'whoever@rhymix.org');
$this->assertEquals('Recipient <whoever@rhymix.org>', $mail->getReceiptor()); $this->assertEquals('Recipient <whoever@rhymix.org>', $mail->getReceiptor());
$mail->setReceiptor('Another Recipient', 'whatever@rhymix.org'); $mail->setReceiptor('Another Recipient', 'whatever@rhymix.org');
$this->assertEquals('Another Recipient <whatever@rhymix.org>', $mail->getReceiptor()); $this->assertEquals('Another Recipient <whatever@rhymix.org>', $mail->getReceiptor());
$this->assertEquals(1, count($mail->message->getTo())); $this->assertEquals(1, count($mail->message->getTo()));
$this->assertEquals(null, $mail->message->getCc()); $this->assertEquals(null, $mail->message->getCc());
$mail->setBcc('bcc-1@rhymix.org'); $mail->setBcc('bcc-1@rhymix.org');
$mail->setBcc('bcc-2@rhymix.org'); $mail->setBcc('bcc-2@rhymix.org');
$this->assertEquals(array('bcc-2@rhymix.org' => ''), $mail->message->getBcc()); $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>'; $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); $mail->setBody($content);
$this->assertEquals(chunk_split(base64_encode($content)), $mail->getHTMLContent()); $this->assertEquals(chunk_split(base64_encode($content)), $mail->getHTMLContent());
$this->assertEquals(chunk_split(base64_encode(htmlspecialchars($content))), $mail->getPlainContent()); $this->assertEquals(chunk_split(base64_encode(htmlspecialchars($content))), $mail->getPlainContent());
$mail->addAttachment(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css', 'target.css'); $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'); $cid = $mail->addCidAttachment(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css', 'thisismyrandomcid@rhymix.org');
$this->assertEquals('cid:thisismyrandomcid@rhymix.org', $cid); $this->assertEquals('cid:thisismyrandomcid@rhymix.org', $cid);
$attachments = $mail->getAttachments(); $attachments = $mail->getAttachments();
$this->assertEquals(2, count($attachments)); $this->assertEquals(2, count($attachments));
$this->assertEquals('attach', $attachments[0]->type); $this->assertEquals('attach', $attachments[0]->type);
@ -183,7 +183,7 @@ class MailTest extends \Codeception\TestCase\Test
$this->assertEquals('embed', $attachments[1]->type); $this->assertEquals('embed', $attachments[1]->type);
$this->assertEquals('cid:thisismyrandomcid@rhymix.org', $attachments[1]->cid); $this->assertEquals('cid:thisismyrandomcid@rhymix.org', $attachments[1]->cid);
} }
public function testEmailAddressValidator() public function testEmailAddressValidator()
{ {
$this->assertEquals('devops@rhymix.org', Mail::isVaildMailAddress('devops@rhymix.org')); $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(1, Rhymix\Framework\Pagination::countPages(20, 20));
$this->assertEquals(2, Rhymix\Framework\Pagination::countPages(21, 20)); $this->assertEquals(2, Rhymix\Framework\Pagination::countPages(21, 20));
} }
public function testCreateLinks() public function testCreateLinks()
{ {
$links = Rhymix\Framework\Pagination::createLinks('index.php?page=', 27, 3); $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('<a href="index.php?page=3">', $links);
$this->assertStringContainsString('<span class="page_number">1</span>', $links); $this->assertStringContainsString('<span class="page_number">1</span>', $links);
$this->assertStringContainsString('<span class="page_number">10</span>', $links); $this->assertStringContainsString('<span class="page_number">10</span>', $links);
$links = Rhymix\Framework\Pagination::createLinks('/foo/bar/page/', 27, 13); $links = Rhymix\Framework\Pagination::createLinks('/foo/bar/page/', 27, 13);
$this->assertStringContainsString('<div class="pagination">', $links); $this->assertStringContainsString('<div class="pagination">', $links);
$this->assertStringContainsString('<a href="/foo/bar/page/13">', $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">11</span>', $links);
$this->assertStringContainsString('<span class="page_number">20</span>', $links); $this->assertStringContainsString('<span class="page_number">20</span>', $links);
$links = Rhymix\Framework\Pagination::createLinks('/rhymix?page=$PAGE&foo=bar', 27, 25); $links = Rhymix\Framework\Pagination::createLinks('/rhymix?page=$PAGE&foo=bar', 27, 25);
$this->assertStringContainsString('<div class="pagination">', $links); $this->assertStringContainsString('<div class="pagination">', $links);
$this->assertStringContainsString('<a href="/rhymix?page=27&amp;foo=bar">', $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">21</span>', $links);
$this->assertStringContainsString('<span class="page_number">27</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); $links = Rhymix\Framework\Pagination::createLinks('p', 27, 3, 10, Rhymix\Framework\Pagination::COUNT_STYLE_CONTINUOUS);
$this->assertStringContainsString('<div class="pagination">', $links); $this->assertStringContainsString('<div class="pagination">', $links);
$this->assertStringContainsString('<span class="page_number">1</span>', $links); $this->assertStringContainsString('<span class="page_number">1</span>', $links);
$this->assertStringContainsString('<span class="page_number">10</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); $links = Rhymix\Framework\Pagination::createLinks('p', 27, 13, 10, Rhymix\Framework\Pagination::COUNT_STYLE_CONTINUOUS);
$this->assertStringContainsString('<div class="pagination">', $links); $this->assertStringContainsString('<div class="pagination">', $links);
$this->assertStringContainsString('<span class="page_number">9</span>', $links); $this->assertStringContainsString('<span class="page_number">9</span>', $links);
$this->assertStringContainsString('<span class="page_number">18</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); $links = Rhymix\Framework\Pagination::createLinks('p', 27, 25, 10, Rhymix\Framework\Pagination::COUNT_STYLE_CONTINUOUS);
$this->assertStringContainsString('<div class="pagination">', $links); $this->assertStringContainsString('<div class="pagination">', $links);
$this->assertStringContainsString('<span class="page_number">18</span>', $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('bcrypt'));
$this->assertTrue(Rhymix\Framework\Password::isValidAlgorithm('whirlpool,pbkdf2')); $this->assertTrue(Rhymix\Framework\Password::isValidAlgorithm('whirlpool,pbkdf2'));
$this->assertTrue(Rhymix\Framework\Password::isValidAlgorithm(array('md5', 'sha1', 'md5'))); $this->assertTrue(Rhymix\Framework\Password::isValidAlgorithm(array('md5', 'sha1', 'md5')));
$this->assertFalse(Rhymix\Framework\Password::isValidAlgorithm('bunga_bunga')); $this->assertFalse(Rhymix\Framework\Password::isValidAlgorithm('bunga_bunga'));
Rhymix\Framework\Password::addAlgorithm('bunga_bunga', '/bunga_bunga/', function($hash) { return 'bunga_bunga'; }); Rhymix\Framework\Password::addAlgorithm('bunga_bunga', '/bunga_bunga/', function($hash) { return 'bunga_bunga'; });
$this->assertTrue(Rhymix\Framework\Password::isValidAlgorithm('bunga_bunga')); $this->assertTrue(Rhymix\Framework\Password::isValidAlgorithm('bunga_bunga'));
} }
public function testGetSupportedAlgorithms() public function testGetSupportedAlgorithms()
{ {
$algos = Rhymix\Framework\Password::getSupportedAlgorithms(); $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('pbkdf2', $algos));
$this->assertTrue(in_array('md5', $algos)); $this->assertTrue(in_array('md5', $algos));
} }
public function testGetBestSupportedAlgorithm() public function testGetBestSupportedAlgorithm()
{ {
$algo = Rhymix\Framework\Password::getBestSupportedAlgorithm(); $algo = Rhymix\Framework\Password::getBestSupportedAlgorithm();
$this->assertTrue($algo === 'bcrypt' || $algo === 'pbkdf2'); $this->assertTrue($algo === 'bcrypt' || $algo === 'pbkdf2');
} }
public function testGetDefaultAlgorithm() public function testGetDefaultAlgorithm()
{ {
$algo = Rhymix\Framework\Password::getDefaultAlgorithm(); $algo = Rhymix\Framework\Password::getDefaultAlgorithm();
$this->assertTrue($algo === 'bcrypt' || $algo === 'pbkdf2' || $algo === 'md5'); $this->assertTrue($algo === 'bcrypt' || $algo === 'pbkdf2' || $algo === 'md5');
} }
public function testGetWorkFactor() public function testGetWorkFactor()
{ {
$work_factor = $algo = Rhymix\Framework\Password::getWorkFactor(); $work_factor = $algo = Rhymix\Framework\Password::getWorkFactor();
$this->assertTrue($work_factor >= 4); $this->assertTrue($work_factor >= 4);
$this->assertTrue($work_factor <= 31); $this->assertTrue($work_factor <= 31);
} }
public function testGetRandomPassword() public function testGetRandomPassword()
{ {
$password = Rhymix\Framework\Password::getRandomPassword(16); $password = Rhymix\Framework\Password::getRandomPassword(16);
@ -49,7 +49,7 @@ class PasswordTest extends \Codeception\TestCase\Test
$this->assertRegexp('/[0-9]/', $password); $this->assertRegexp('/[0-9]/', $password);
$this->assertRegexp('/[^a-zA-Z0-9]/', $password); $this->assertRegexp('/[^a-zA-Z0-9]/', $password);
} }
public function testHashPassword() public function testHashPassword()
{ {
$password = Rhymix\Framework\Security::getRandom(32); $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(hash('whirlpool', $password), Rhymix\Framework\Password::hashPassword($password, 'whirlpool'));
$this->assertEquals('5d2e19393cc5ef67', Rhymix\Framework\Password::hashPassword('password', 'mysql_old_password')); $this->assertEquals('5d2e19393cc5ef67', Rhymix\Framework\Password::hashPassword('password', 'mysql_old_password'));
} }
public function testCheckPassword() public function testCheckPassword()
{ {
$password = Rhymix\Framework\Security::getRandom(32); $password = Rhymix\Framework\Security::getRandom(32);
$algos = array('whirlpool', 'ripemd160', 'bcrypt'); $algos = array('whirlpool', 'ripemd160', 'bcrypt');
$hash = Rhymix\Framework\Password::hashPassword($password, $algos); $hash = Rhymix\Framework\Password::hashPassword($password, $algos);
$this->assertRegExp('/^\$2y\$/', $hash); $this->assertRegExp('/^\$2y\$/', $hash);
$this->assertEquals(60, strlen($hash)); $this->assertEquals(60, strlen($hash));
$this->assertTrue(Rhymix\Framework\Password::checkPassword($password, $hash, $algos)); $this->assertTrue(Rhymix\Framework\Password::checkPassword($password, $hash, $algos));
$algos = array('sha384', 'pbkdf2'); $algos = array('sha384', 'pbkdf2');
$hash = Rhymix\Framework\Password::hashPassword($password, $algos); $hash = Rhymix\Framework\Password::hashPassword($password, $algos);
$this->assertRegExp('/^(sha256|sha512):[0-9]+:/', $hash); $this->assertRegExp('/^(sha256|sha512):[0-9]+:/', $hash);
$this->assertEquals(60, strlen($hash)); $this->assertEquals(60, strlen($hash));
$this->assertTrue(Rhymix\Framework\Password::checkPassword($password, $hash, $algos)); $this->assertTrue(Rhymix\Framework\Password::checkPassword($password, $hash, $algos));
$algos = array('sha1', 'portable'); $algos = array('sha1', 'portable');
$hash = Rhymix\Framework\Password::hashPassword($password, $algos); $hash = Rhymix\Framework\Password::hashPassword($password, $algos);
$this->assertRegExp('/^\$P\$/', $hash); $this->assertRegExp('/^\$P\$/', $hash);
$this->assertEquals(34, strlen($hash)); $this->assertEquals(34, strlen($hash));
$this->assertTrue(Rhymix\Framework\Password::checkPassword($password, $hash, $algos)); $this->assertTrue(Rhymix\Framework\Password::checkPassword($password, $hash, $algos));
foreach (array('drupal', 'joomla', 'kimsqrb', 'mysql_old_password', 'mysql_new_password', 'mssql_pwdencrypt') as $algo) foreach (array('drupal', 'joomla', 'kimsqrb', 'mysql_old_password', 'mysql_new_password', 'mssql_pwdencrypt') as $algo)
{ {
$hash = Rhymix\Framework\Password::hashPassword($password, $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)); $this->assertFalse(Rhymix\Framework\Password::checkPassword($password, $hash . 'x', $algo));
} }
} }
public function testCheckAlgorithm() public function testCheckAlgorithm()
{ {
$password = Rhymix\Framework\Security::getRandom(32, 'hex'); $password = Rhymix\Framework\Security::getRandom(32, 'hex');
$this->assertEquals(array('md5', 'md5,sha1,md5'), Rhymix\Framework\Password::checkAlgorithm($password)); $this->assertEquals(array('md5', 'md5,sha1,md5'), Rhymix\Framework\Password::checkAlgorithm($password));
$this->assertEquals(array('sha512', 'whirlpool'), Rhymix\Framework\Password::checkAlgorithm(hash('sha512', $password))); $this->assertEquals(array('sha512', 'whirlpool'), Rhymix\Framework\Password::checkAlgorithm(hash('sha512', $password)));
$hash = '$2y$10$VkxBdEBTZ1HyLluZPjXCjuFffw0a6alZlbb733CF/zA22HDpBNsMm'; $hash = '$2y$10$VkxBdEBTZ1HyLluZPjXCjuFffw0a6alZlbb733CF/zA22HDpBNsMm';
$this->assertEquals(array('bcrypt'), Rhymix\Framework\Password::checkAlgorithm($hash)); $this->assertEquals(array('bcrypt'), Rhymix\Framework\Password::checkAlgorithm($hash));
$hash = 'sha512:0008192:hoXcLXQzIiIJ:ElokybdRf+i512M4/4PIdEiSDgZ8f0uL'; $hash = 'sha512:0008192:hoXcLXQzIiIJ:ElokybdRf+i512M4/4PIdEiSDgZ8f0uL';
$this->assertEquals(array('pbkdf2'), Rhymix\Framework\Password::checkAlgorithm($hash)); $this->assertEquals(array('pbkdf2'), Rhymix\Framework\Password::checkAlgorithm($hash));
} }
public function testCheckWorkFactor() public function testCheckWorkFactor()
{ {
$hash = '$2y$10$VkxBdEBTZ1HyLluZPjXCjuFffw0a6alZlbb733CF/zA22HDpBNsMm'; $hash = '$2y$10$VkxBdEBTZ1HyLluZPjXCjuFffw0a6alZlbb733CF/zA22HDpBNsMm';
$this->assertEquals(10, Rhymix\Framework\Password::checkWorkFactor($hash)); $this->assertEquals(10, Rhymix\Framework\Password::checkWorkFactor($hash));
$hash = 'sha512:0008192:hoXcLXQzIiIJ:ElokybdRf+i512M4/4PIdEiSDgZ8f0uL'; $hash = 'sha512:0008192:hoXcLXQzIiIJ:ElokybdRf+i512M4/4PIdEiSDgZ8f0uL';
$this->assertEquals(8, Rhymix\Framework\Password::checkWorkFactor($hash)); $this->assertEquals(8, Rhymix\Framework\Password::checkWorkFactor($hash));
$hash = '5f4dcc3b5aa765d61d8327deb882cf99'; $hash = '5f4dcc3b5aa765d61d8327deb882cf99';
$this->assertEquals(0, Rhymix\Framework\Password::checkWorkFactor($hash)); $this->assertEquals(0, Rhymix\Framework\Password::checkWorkFactor($hash));
} }
public function testBcrypt() public function testBcrypt()
{ {
$password = 'password'; $password = 'password';
$hash = '$2y$10$VkxBdEBTZ1HyLluZPjXCjuFffw0a6alZlbb733CF/zA22HDpBNsMm'; $hash = '$2y$10$VkxBdEBTZ1HyLluZPjXCjuFffw0a6alZlbb733CF/zA22HDpBNsMm';
$this->assertEquals($hash, Rhymix\Framework\Password::bcrypt($password, $hash)); $this->assertEquals($hash, Rhymix\Framework\Password::bcrypt($password, $hash));
} }
public function testPBKDF2() public function testPBKDF2()
{ {
$password = 'password'; $password = 'password';
$salt = 'rtmIxdEUoWUk'; $salt = 'rtmIxdEUoWUk';
$hash = 'sha512:0016384:rtmIxdEUoWUk:1hrwGP3ScWvxslnqNFqyhM6Ddn4iYrwf'; $hash = 'sha512:0016384:rtmIxdEUoWUk:1hrwGP3ScWvxslnqNFqyhM6Ddn4iYrwf';
$this->assertEquals($hash, Rhymix\Framework\Password::pbkdf2($password, $salt, 'sha512', 16384, 24)); $this->assertEquals($hash, Rhymix\Framework\Password::pbkdf2($password, $salt, 'sha512', 16384, 24));
$hash = 'sha512:16384:rtmIxdEUoWUk:1hrwGP3ScWvxslnqNFqyhM6Ddn4iYrwf'; $hash = 'sha512:16384:rtmIxdEUoWUk:1hrwGP3ScWvxslnqNFqyhM6Ddn4iYrwf';
$this->assertEquals($hash, Rhymix\Framework\Password::pbkdf2($password, $salt, 'sha512', 16384, 24, 5)); $this->assertEquals($hash, Rhymix\Framework\Password::pbkdf2($password, $salt, 'sha512', 16384, 24, 5));
$salt = 'KpnA8ZAxvig32n7p2PnEjx4NN7gPpUQm'; $salt = 'KpnA8ZAxvig32n7p2PnEjx4NN7gPpUQm';
$hash = 'sha1:12000:KpnA8ZAxvig32n7p2PnEjx4NN7gPpUQm:TeILMSF8ao/NVJ4wdk7lXDKQre9TUCht'; $hash = 'sha1:12000:KpnA8ZAxvig32n7p2PnEjx4NN7gPpUQm:TeILMSF8ao/NVJ4wdk7lXDKQre9TUCht';
$this->assertEquals($hash, Rhymix\Framework\Password::pbkdf2($password, $salt, 'sha1', 12000, 24, 5)); $this->assertEquals($hash, Rhymix\Framework\Password::pbkdf2($password, $salt, 'sha1', 12000, 24, 5));
} }
public function testCountEntropyBits() public function testCountEntropyBits()
{ {
$this->assertEquals(0, Rhymix\Framework\Password::countEntropyBits('')); $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('url.rewrite', null);
Rhymix\Framework\Config::set('use_rewrite', false); Rhymix\Framework\Config::set('use_rewrite', false);
$this->assertEquals(0, Rhymix\Framework\Router::getRewriteLevel()); $this->assertEquals(0, Rhymix\Framework\Router::getRewriteLevel());
Rhymix\Framework\Config::set('url.rewrite', 1); Rhymix\Framework\Config::set('url.rewrite', 1);
Rhymix\Framework\Config::set('use_rewrite', false); Rhymix\Framework\Config::set('use_rewrite', false);
$this->assertEquals(1, Rhymix\Framework\Router::getRewriteLevel()); $this->assertEquals(1, Rhymix\Framework\Router::getRewriteLevel());
Rhymix\Framework\Config::set('url.rewrite', 1); Rhymix\Framework\Config::set('url.rewrite', 1);
Rhymix\Framework\Config::set('use_rewrite', true); Rhymix\Framework\Config::set('use_rewrite', true);
$this->assertEquals(1, Rhymix\Framework\Router::getRewriteLevel()); $this->assertEquals(1, Rhymix\Framework\Router::getRewriteLevel());
Rhymix\Framework\Config::set('url.rewrite', 2); Rhymix\Framework\Config::set('url.rewrite', 2);
Rhymix\Framework\Config::set('use_rewrite', true); Rhymix\Framework\Config::set('use_rewrite', true);
$this->assertEquals(2, Rhymix\Framework\Router::getRewriteLevel()); $this->assertEquals(2, Rhymix\Framework\Router::getRewriteLevel());
} }
public function testGetURL() public function testGetURL()
{ {
$info = Rhymix\Framework\Parsers\ModuleActionParser::loadXML(\RX_BASEDIR . 'modules/board/conf/module.xml'); $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->assertFalse(isset($info->permission));
$this->assertGreaterThan(0, count($info->route->GET)); $this->assertGreaterThan(0, count($info->route->GET));
$this->assertGreaterThan(0, count($info->action->dispBoardContent->route)); $this->assertGreaterThan(0, count($info->action->dispBoardContent->route));
getController('module')->registerActionForwardRoutes('member'); getController('module')->registerActionForwardRoutes('member');
$args = array('mid' => 'board', 'act' => 'dispBoardContent'); $args = array('mid' => 'board', 'act' => 'dispBoardContent');
$this->assertEquals('board', Rhymix\Framework\Router::getURL($args, 2)); $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, 1));
$this->assertEquals('index.php?mid=board&act=dispBoardContent', Rhymix\Framework\Router::getURL($args, 0)); $this->assertEquals('index.php?mid=board&act=dispBoardContent', Rhymix\Framework\Router::getURL($args, 0));
$args = array('mid' => 'board', 'page' => 3); $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, 2));
$this->assertEquals('board?page=3', Rhymix\Framework\Router::getURL($args, 1)); $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)); $this->assertEquals('index.php?mid=board&page=3', Rhymix\Framework\Router::getURL($args, 0));
$args = array('mid' => 'board', 'document_srl' => 123); $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, 2));
$this->assertEquals('board/123', Rhymix\Framework\Router::getURL($args, 1)); $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)); $this->assertEquals('index.php?mid=board&document_srl=123', Rhymix\Framework\Router::getURL($args, 0));
$args = array('mid' => 'board', 'act' => 'dispBoardWrite', 'document_srl' => 123); $args = array('mid' => 'board', 'act' => 'dispBoardWrite', 'document_srl' => 123);
$this->assertEquals('board/123/edit', Rhymix\Framework\Router::getURL($args, 2)); $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, 1));
$this->assertEquals('index.php?mid=board&act=dispBoardWrite&document_srl=123', Rhymix\Framework\Router::getURL($args, 0)); $this->assertEquals('index.php?mid=board&act=dispBoardWrite&document_srl=123', Rhymix\Framework\Router::getURL($args, 0));
$args = array('mid' => 'board', 'act' => 'dispBoardWrite'); $args = array('mid' => 'board', 'act' => 'dispBoardWrite');
$this->assertEquals('board/write', Rhymix\Framework\Router::getURL($args, 2)); $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, 1));
$this->assertEquals('index.php?mid=board&act=dispBoardWrite', Rhymix\Framework\Router::getURL($args, 0)); $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'); $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('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, 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)); $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'); $args = array('mid' => 'board', 'act' => 'dispMemberInfo');
$this->assertEquals('board/member_info', Rhymix\Framework\Router::getURL($args, 2)); $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, 1));
$this->assertEquals('index.php?mid=board&act=dispMemberInfo', Rhymix\Framework\Router::getURL($args, 0)); $this->assertEquals('index.php?mid=board&act=dispMemberInfo', Rhymix\Framework\Router::getURL($args, 0));
$args = array('module' => 'document', 'act' => 'procDocumentVoteUp'); $args = array('module' => 'document', 'act' => 'procDocumentVoteUp');
$this->assertEquals('document/procDocumentVoteUp', Rhymix\Framework\Router::getURL($args, 2)); $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, 1));
$this->assertEquals('index.php?module=document&act=procDocumentVoteUp', Rhymix\Framework\Router::getURL($args, 0)); $this->assertEquals('index.php?module=document&act=procDocumentVoteUp', Rhymix\Framework\Router::getURL($args, 0));
} }
public function testParseURL() public function testParseURL()
{ {
$args = array('mid' => 'board', 'act' => 'dispBoardContent', 'document_srl' => '123'); $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/123', Rhymix\Framework\Router::parseURL('GET', 'board/123', 2)->url);
$this->assertEquals('board', Rhymix\Framework\Router::parseURL('GET', 'board/123', 2)->mid); $this->assertEquals('board', Rhymix\Framework\Router::parseURL('GET', 'board/123', 2)->mid);
$this->assertEquals('dispBoardContent', Rhymix\Framework\Router::parseURL('GET', 'board/123', 2)->act); $this->assertEquals('dispBoardContent', Rhymix\Framework\Router::parseURL('GET', 'board/123', 2)->act);
$args = array('mid' => 'board', 'document_srl' => '123'); $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', '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', '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', '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', 'index.php?mid=board&document_srl=123', 0)->args);
$args = array('mid' => 'board', 'act' => 'dispBoardModifyComment', 'comment_srl' => '456', 'extra_param' => 'foo bar'); $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($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); $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('', 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', 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); $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'); $args = array('mid' => 'board', 'act' => 'dispMemberInfo');
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'board/member_info', 2)->args); $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); $this->assertEquals('board', Rhymix\Framework\Router::parseURL('GET', 'board/member_info', 2)->mid);
$args = array('mid' => 'board', 'act' => 'dispMemberLoginForm'); $args = array('mid' => 'board', 'act' => 'dispMemberLoginForm');
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'board/login', 2)->args); $this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'board/login', 2)->args);
$this->assertEquals('member', Rhymix\Framework\Router::parseURL('GET', 'board/login', 2)->module); $this->assertEquals('member', Rhymix\Framework\Router::parseURL('GET', 'board/login', 2)->module);
$args = array('mid' => 'board', 'act' => 'procMemberLogin'); $args = array('mid' => 'board', 'act' => 'procMemberLogin');
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('POST', 'board/login', 2)->args); $this->assertEquals($args, Rhymix\Framework\Router::parseURL('POST', 'board/login', 2)->args);
$this->assertEquals('member', Rhymix\Framework\Router::parseURL('POST', 'board/login', 2)->module); $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(); Context::init();
} }
public function testGetSetDefaultDriver() public function testGetSetDefaultDriver()
{ {
$driver = Rhymix\Framework\SMS::getDefaultDriver(); $driver = Rhymix\Framework\SMS::getDefaultDriver();
$this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\SMSInterface', $driver); $this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\SMSInterface', $driver);
$driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array()); $driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array());
Rhymix\Framework\SMS::setDefaultDriver($driver); Rhymix\Framework\SMS::setDefaultDriver($driver);
$this->assertEquals($driver, Rhymix\Framework\SMS::getDefaultDriver()); $this->assertEquals($driver, Rhymix\Framework\SMS::getDefaultDriver());
} }
public function testGetSupportedDrivers() public function testGetSupportedDrivers()
{ {
$drivers = Rhymix\Framework\SMS::getSupportedDrivers(); $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']['mms_supported']);
$this->assertTrue($drivers['solapi']['api_spec']['delay_supported']); $this->assertTrue($drivers['solapi']['api_spec']['delay_supported']);
} }
public function testSenderAndRecipients() public function testSenderAndRecipients()
{ {
config('sms.default_from', '010-9999-8888'); config('sms.default_from', '010-9999-8888');
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
$this->assertEquals('01099998888', $sms->getFrom()); $this->assertEquals('01099998888', $sms->getFrom());
config('sms.default_from', ''); config('sms.default_from', '');
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
$this->assertNull($sms->getFrom()); $this->assertNull($sms->getFrom());
$sms->setFrom('010-1234-5678'); $sms->setFrom('010-1234-5678');
$this->assertEquals('01012345678', $sms->getFrom()); $this->assertEquals('01012345678', $sms->getFrom());
$sms->setFrom('010+1234 x 5679'); $sms->setFrom('010+1234 x 5679');
$this->assertEquals('01012345679', $sms->getFrom()); $this->assertEquals('01012345679', $sms->getFrom());
$sms->addTo('010-0987-6543'); $sms->addTo('010-0987-6543');
$sms->addTo('010-0987-6542', 0); $sms->addTo('010-0987-6542', 0);
$sms->addTo('010-0987-6541', 82); $sms->addTo('010-0987-6541', 82);
@ -67,39 +67,39 @@ class SMSTest extends \Codeception\TestCase\Test
82 => array('01009876541'), 82 => array('01009876541'),
), $sms->getRecipientsGroupedByCountry()); ), $sms->getRecipientsGroupedByCountry());
} }
public function testSMSSubject() public function testSMSSubject()
{ {
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
$sms->setSubject('Foobar!'); $sms->setSubject('Foobar!');
$this->assertEquals('Foobar!', $sms->getSubject()); $this->assertEquals('Foobar!', $sms->getSubject());
$sms->setTitle('Foobarbazz?'); $sms->setTitle('Foobarbazz?');
$this->assertEquals('Foobarbazz?', $sms->getTitle()); $this->assertEquals('Foobarbazz?', $sms->getTitle());
} }
public function testSMSContent() public function testSMSContent()
{ {
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
$sms->setBody('Hello world!'); $sms->setBody('Hello world!');
$this->assertEquals('Hello world!', $sms->getContent()); $this->assertEquals('Hello world!', $sms->getContent());
$sms->setContent('Hello world! Foobar?'); $sms->setContent('Hello world! Foobar?');
$this->assertEquals('Hello world! Foobar?', $sms->getBody()); $this->assertEquals('Hello world! Foobar?', $sms->getBody());
} }
public function testSMSAttach() public function testSMSAttach()
{ {
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
$success = $sms->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css'); $success = $sms->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css');
$this->assertTrue($success); $this->assertTrue($success);
$success = $sms->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css'); $success = $sms->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css');
$this->assertTrue($success); $this->assertTrue($success);
$success = $sms->attach(\RX_BASEDIR . 'tests/_data/nonexistent.file.jpg'); $success = $sms->attach(\RX_BASEDIR . 'tests/_data/nonexistent.file.jpg');
$this->assertFalse($success); $this->assertFalse($success);
$attachments = $sms->getAttachments(); $attachments = $sms->getAttachments();
$this->assertEquals(2, count($attachments)); $this->assertEquals(2, count($attachments));
$this->assertEquals('mms', $attachments[0]->type); $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.source.css', $attachments[0]->display_filename);
$this->assertEquals('minify.target.css', $attachments[1]->display_filename); $this->assertEquals('minify.target.css', $attachments[1]->display_filename);
} }
public function testSMSExtraVars() public function testSMSExtraVars()
{ {
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
$sms->setExtraVar('foo', 'bar'); $sms->setExtraVar('foo', 'bar');
$this->assertEquals('bar', $sms->getExtraVar('foo')); $this->assertEquals('bar', $sms->getExtraVar('foo'));
$this->assertNull($sms->getExtraVar('nonexistent!')); $this->assertNull($sms->getExtraVar('nonexistent!'));
@ -120,36 +120,36 @@ class SMSTest extends \Codeception\TestCase\Test
$sms->setExtraVars(array('rhymix' => 'test')); $sms->setExtraVars(array('rhymix' => 'test'));
$this->assertEquals(array('rhymix' => 'test'), $sms->getExtraVars()); $this->assertEquals(array('rhymix' => 'test'), $sms->getExtraVars());
} }
public function testSMSDelay() public function testSMSDelay()
{ {
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
$delay_absolute = time() + 3600; $delay_absolute = time() + 3600;
$this->assertTrue($sms->setDelay($delay_absolute)); $this->assertTrue($sms->setDelay($delay_absolute));
$this->assertEquals($delay_absolute, $sms->getDelay()); $this->assertEquals($delay_absolute, $sms->getDelay());
$delay_relative = 86400; $delay_relative = 86400;
$this->assertTrue($sms->setDelay($delay_relative)); $this->assertTrue($sms->setDelay($delay_relative));
$this->assertGreaterThanOrEqual(time() + $delay_relative - 1, $sms->getDelay()); $this->assertGreaterThanOrEqual(time() + $delay_relative - 1, $sms->getDelay());
$this->assertLessThanOrEqual(time() + $delay_relative + 1, $sms->getDelay()); $this->assertLessThanOrEqual(time() + $delay_relative + 1, $sms->getDelay());
$delay_relative = 86400 * 3650; $delay_relative = 86400 * 3650;
$this->assertTrue($sms->setDelay($delay_relative)); $this->assertTrue($sms->setDelay($delay_relative));
$this->assertEquals(0, $sms->getDelay()); $this->assertEquals(0, $sms->getDelay());
} }
public function testSMSForceSMS() public function testSMSForceSMS()
{ {
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
$this->assertFalse($sms->isForceSMS()); $this->assertFalse($sms->isForceSMS());
$sms->forceSMS(); $sms->forceSMS();
$this->assertTrue($sms->isForceSMS()); $this->assertTrue($sms->isForceSMS());
$sms->unforceSMS(); $sms->unforceSMS();
$this->assertFalse($sms->isForceSMS()); $this->assertFalse($sms->isForceSMS());
} }
public function testSMSSplitSMSAndLMS() public function testSMSSplitSMSAndLMS()
{ {
config('sms.allow_split.sms', true); config('sms.allow_split.sms', true);
@ -163,64 +163,64 @@ class SMSTest extends \Codeception\TestCase\Test
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
$this->assertFalse($sms->isSplitSMSAllowed()); $this->assertFalse($sms->isSplitSMSAllowed());
$this->assertFalse($sms->isSplitLMSAllowed()); $this->assertFalse($sms->isSplitLMSAllowed());
$sms->allowSplitSMS(); $sms->allowSplitSMS();
$this->assertTrue($sms->isSplitSMSAllowed()); $this->assertTrue($sms->isSplitSMSAllowed());
$this->assertFalse($sms->isSplitLMSAllowed()); $this->assertFalse($sms->isSplitLMSAllowed());
$sms->disallowSplitSMS(); $sms->disallowSplitSMS();
$this->assertFalse($sms->isSplitSMSAllowed()); $this->assertFalse($sms->isSplitSMSAllowed());
$sms->allowSplitLMS(); $sms->allowSplitLMS();
$this->assertTrue($sms->isSplitLMSAllowed()); $this->assertTrue($sms->isSplitLMSAllowed());
$this->assertFalse($sms->isSplitSMSAllowed()); $this->assertFalse($sms->isSplitSMSAllowed());
$sms->disallowSplitLMS(); $sms->disallowSplitLMS();
$this->assertFalse($sms->isSplitLMSAllowed()); $this->assertFalse($sms->isSplitLMSAllowed());
} }
public function testForceSender() public function testForceSender()
{ {
config('sms.default_from', '010-9999-8888'); config('sms.default_from', '010-9999-8888');
config('sms.default_force', true); config('sms.default_force', true);
$driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array()); $driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array());
Rhymix\Framework\SMS::setDefaultDriver($driver); Rhymix\Framework\SMS::setDefaultDriver($driver);
$driver->resetSentMessages(); $driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
$sms->setFrom('010-7777-6666'); $sms->setFrom('010-7777-6666');
$sms->addTo('010-5555-4444'); $sms->addTo('010-5555-4444');
$sms->setContent('Hello World'); $sms->setContent('Hello World');
$sms->send(); $sms->send();
$messages = $driver->getSentMessages(); $messages = $driver->getSentMessages();
$this->assertEquals('01099998888', $messages[0]->from); $this->assertEquals('01099998888', $messages[0]->from);
config('sms.default_force', false); config('sms.default_force', false);
$driver->resetSentMessages(); $driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
$sms->setFrom('010-7777-6666'); $sms->setFrom('010-7777-6666');
$sms->addTo('010-5555-4444'); $sms->addTo('010-5555-4444');
$sms->setContent('Hello World'); $sms->setContent('Hello World');
$sms->send(); $sms->send();
$messages = $driver->getSentMessages(); $messages = $driver->getSentMessages();
$this->assertEquals('01077776666', $messages[0]->from); $this->assertEquals('01077776666', $messages[0]->from);
} }
public function testSMSSendSMSAndLMS() public function testSMSSendSMSAndLMS()
{ {
config('sms.default_force', false); config('sms.default_force', false);
config('sms.allow_split.sms', true); config('sms.allow_split.sms', true);
config('sms.allow_split.lms', true); config('sms.allow_split.lms', true);
$driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array()); $driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array());
Rhymix\Framework\SMS::setDefaultDriver($driver); Rhymix\Framework\SMS::setDefaultDriver($driver);
// Test sending a message with no recipients. // Test sending a message with no recipients.
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
$this->assertFalse($sms->send()); $this->assertFalse($sms->send());
$this->assertEquals(1, count($sms->getErrors())); $this->assertEquals(1, count($sms->getErrors()));
// Test SMS content splitting, grouping by country code, and forcing SMS to unsupported country code. // Test SMS content splitting, grouping by country code, and forcing SMS to unsupported country code.
$driver->resetSentMessages(); $driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
@ -231,7 +231,7 @@ class SMSTest extends \Codeception\TestCase\Test
$sms->addTo('010-0004-5678', 83); $sms->addTo('010-0004-5678', 83);
$sms->setContent('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면 LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.'); $sms->setContent('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면 LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.');
$this->assertTrue($sms->send()); $this->assertTrue($sms->send());
$messages = $driver->getSentMessages(); $messages = $driver->getSentMessages();
$this->assertEquals(3, count($messages)); $this->assertEquals(3, count($messages));
$this->assertEquals(0, $messages[0]->country); $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에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면 LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.', $messages[0]->content);
$this->assertEquals('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면', $messages[1]->content); $this->assertEquals('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면', $messages[1]->content);
$this->assertEquals('LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.', $messages[2]->content); $this->assertEquals('LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.', $messages[2]->content);
// Test LMS content splitting. // Test LMS content splitting.
$driver->resetSentMessages(); $driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
@ -256,14 +256,14 @@ class SMSTest extends \Codeception\TestCase\Test
$sms->addTo('010-0000-1234'); $sms->addTo('010-0000-1234');
$sms->setContent(str_repeat('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면 LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.' . "\n", 50)); $sms->setContent(str_repeat('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면 LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.' . "\n", 50));
$this->assertTrue($sms->send()); $this->assertTrue($sms->send());
$messages = $driver->getSentMessages(); $messages = $driver->getSentMessages();
$this->assertEquals(4, count($messages)); $this->assertEquals(4, count($messages));
foreach ($messages as $message) foreach ($messages as $message)
{ {
$this->assertEquals('LMS', $message->type); $this->assertEquals('LMS', $message->type);
} }
// Test subject splitting. // Test subject splitting.
$driver->resetSentMessages(); $driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
@ -272,13 +272,13 @@ class SMSTest extends \Codeception\TestCase\Test
$sms->setSubject('이것은 제목입니다. 제목이 길기 때문에 내용으로 넘어갈 것입니다.'); $sms->setSubject('이것은 제목입니다. 제목이 길기 때문에 내용으로 넘어갈 것입니다.');
$sms->setContent('이것은 내용입니다.' . "\r\n" . '줄을 바꿔서 내용이 계속됩니다.'); $sms->setContent('이것은 내용입니다.' . "\r\n" . '줄을 바꿔서 내용이 계속됩니다.');
$sms->send(); $sms->send();
$messages = $driver->getSentMessages(); $messages = $driver->getSentMessages();
$this->assertEquals(1, count($messages)); $this->assertEquals(1, count($messages));
$this->assertEquals('LMS', $messages[0]->type); $this->assertEquals('LMS', $messages[0]->type);
$this->assertEquals('이것은 제목입니다. 제목이 길기 때문에', $messages[0]->subject); $this->assertEquals('이것은 제목입니다. 제목이 길기 때문에', $messages[0]->subject);
$this->assertEquals('내용으로 넘어갈 것입니다.' . "\n" . '이것은 내용입니다.' . "\n" . '줄을 바꿔서 내용이 계속됩니다.', $messages[0]->content); $this->assertEquals('내용으로 넘어갈 것입니다.' . "\n" . '이것은 내용입니다.' . "\n" . '줄을 바꿔서 내용이 계속됩니다.', $messages[0]->content);
// Test subject splitting when forced to use SMS. // Test subject splitting when forced to use SMS.
$driver->resetSentMessages(); $driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
@ -288,22 +288,22 @@ class SMSTest extends \Codeception\TestCase\Test
$sms->setContent('이것은 내용입니다.'); $sms->setContent('이것은 내용입니다.');
$sms->forceSMS(); $sms->forceSMS();
$sms->send(); $sms->send();
$messages = $driver->getSentMessages(); $messages = $driver->getSentMessages();
$this->assertEquals(1, count($messages)); $this->assertEquals(1, count($messages));
$this->assertEquals('SMS', $messages[0]->type); $this->assertEquals('SMS', $messages[0]->type);
$this->assertEquals('이것은 제목입니다. 제목이 길기 때문에 내용으로 넘어갈 것입니다.' . "\n" . '이것은 내용입니다.', $messages[0]->content); $this->assertEquals('이것은 제목입니다. 제목이 길기 때문에 내용으로 넘어갈 것입니다.' . "\n" . '이것은 내용입니다.', $messages[0]->content);
} }
public function testSMSSendMMS() public function testSMSSendMMS()
{ {
config('sms.default_force', false); config('sms.default_force', false);
config('sms.allow_split.sms', true); config('sms.allow_split.sms', true);
config('sms.allow_split.lms', true); config('sms.allow_split.lms', true);
$driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array()); $driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array());
Rhymix\Framework\SMS::setDefaultDriver($driver); Rhymix\Framework\SMS::setDefaultDriver($driver);
// Test MMS with a single attachment. // Test MMS with a single attachment.
$driver->resetSentMessages(); $driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
@ -312,13 +312,13 @@ class SMSTest extends \Codeception\TestCase\Test
$sms->setContent('MMS 내용입니다.'); $sms->setContent('MMS 내용입니다.');
$sms->attach(\RX_BASEDIR . 'tests/_data/images/rhymix.png'); $sms->attach(\RX_BASEDIR . 'tests/_data/images/rhymix.png');
$sms->send(); $sms->send();
$messages = $driver->getSentMessages(); $messages = $driver->getSentMessages();
$this->assertEquals(1, count($messages)); $this->assertEquals(1, count($messages));
$this->assertEquals('MMS', $messages[0]->type); $this->assertEquals('MMS', $messages[0]->type);
$this->assertEquals('MMS 내용입니다.', $messages[0]->content); $this->assertEquals('MMS 내용입니다.', $messages[0]->content);
$this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image); $this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image);
// Test MMS with multiple attachments. // Test MMS with multiple attachments.
$driver->resetSentMessages(); $driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
@ -330,7 +330,7 @@ class SMSTest extends \Codeception\TestCase\Test
$sms->attach(\RX_BASEDIR . 'tests/_output/rhymix-copy.png'); $sms->attach(\RX_BASEDIR . 'tests/_output/rhymix-copy.png');
unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy.png'); unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy.png');
$sms->send(); $sms->send();
$messages = $driver->getSentMessages(); $messages = $driver->getSentMessages();
$this->assertEquals(2, count($messages)); $this->assertEquals(2, count($messages));
$this->assertEquals($messages[0]->to, $messages[1]->to); $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('MMS 내용입니다.', $messages[1]->content);
$this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image); $this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image);
$this->assertEquals(\RX_BASEDIR . 'tests/_output/rhymix-copy.png', $messages[1]->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). // Test MMS with multiple attachments and very long content (less than the number of attachments).
$driver->resetSentMessages(); $driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS; $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-1.png');
unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png'); unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png');
$sms->send(); $sms->send();
$messages = $driver->getSentMessages(); $messages = $driver->getSentMessages();
$this->assertEquals(3, count($messages)); $this->assertEquals(3, count($messages));
$this->assertEquals('MMS', $messages[0]->type); $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/_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-1.png', $messages[1]->image);
$this->assertEquals(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png', $messages[2]->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). // Test MMS with multiple attachments and very long content (more than the number of attachments).
$driver->resetSentMessages(); $driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS; $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-1.png');
unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png'); unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png');
$sms->send(); $sms->send();
$messages = $driver->getSentMessages(); $messages = $driver->getSentMessages();
$this->assertEquals(5, count($messages)); $this->assertEquals(5, count($messages));
$this->assertEquals('MMS', $messages[0]->type); $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->assertEquals(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png', $messages[2]->image);
$this->assertNull($messages[3]->image ?? null); $this->assertNull($messages[3]->image ?? null);
$this->assertNull($messages[4]->image ?? null); $this->assertNull($messages[4]->image ?? null);
// Test MMS with no text content. // Test MMS with no text content.
$driver->resetSentMessages(); $driver->resetSentMessages();
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
@ -408,21 +408,21 @@ class SMSTest extends \Codeception\TestCase\Test
$sms->addTo('010-0000-1234'); $sms->addTo('010-0000-1234');
$sms->attach(\RX_BASEDIR . 'tests/_data/images/rhymix.png'); $sms->attach(\RX_BASEDIR . 'tests/_data/images/rhymix.png');
$sms->send(); $sms->send();
$messages = $driver->getSentMessages(); $messages = $driver->getSentMessages();
$this->assertEquals(1, count($messages)); $this->assertEquals(1, count($messages));
$this->assertEquals('MMS', $messages[0]->type); $this->assertEquals('MMS', $messages[0]->type);
$this->assertEquals('MMS', $messages[0]->content); $this->assertEquals('MMS', $messages[0]->content);
$this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image); $this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image);
} }
public function testSMSIsSent() public function testSMSIsSent()
{ {
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
$this->assertFalse($sms->isSent()); $this->assertFalse($sms->isSent());
$this->assertFalse($sms->send()); $this->assertFalse($sms->send());
$this->assertFalse($sms->isSent()); $this->assertFalse($sms->isSent());
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
$sms->setFrom('010-1234-5678'); $sms->setFrom('010-1234-5678');
$sms->addTo('010-0000-1234'); $sms->addTo('010-0000-1234');
@ -430,24 +430,24 @@ class SMSTest extends \Codeception\TestCase\Test
$this->assertTrue($sms->send()); $this->assertTrue($sms->send());
$this->assertTrue($sms->isSent()); $this->assertTrue($sms->isSent());
} }
public function testSMSCaller() public function testSMSCaller()
{ {
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
$sms->send(); $sms->send();
$line = strval(__LINE__ - 1); $line = strval(__LINE__ - 1);
$caller = $sms->getCaller(); $caller = $sms->getCaller();
$this->assertRegexp('/^.+ line \d+$/', $caller); $this->assertRegexp('/^.+ line \d+$/', $caller);
$this->assertTrue(starts_with(__FILE__, $caller)); $this->assertTrue(starts_with(__FILE__, $caller));
$this->assertEquals($line, substr($caller, -1 * strlen($line))); $this->assertEquals($line, substr($caller, -1 * strlen($line)));
} }
public function testSMSError() public function testSMSError()
{ {
$sms = new Rhymix\Framework\SMS; $sms = new Rhymix\Framework\SMS;
$sms->addError('foobar'); $sms->addError('foobar');
$errors = $sms->getErrors(); $errors = $sms->getErrors();
$this->assertTrue(is_array($errors)); $this->assertTrue(is_array($errors));
$this->assertContains('foobar', $errors); $this->assertContains('foobar', $errors);

View file

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

View file

@ -10,7 +10,7 @@ class SessionTest extends \Codeception\TestCase\Test
$_SESSION = array(); $_SESSION = array();
$_COOKIE = array(); $_COOKIE = array();
} }
public function _after() public function _after()
{ {
Rhymix\Framework\Config::set('session.delay', false); Rhymix\Framework\Config::set('session.delay', false);
@ -19,7 +19,7 @@ class SessionTest extends \Codeception\TestCase\Test
$_SESSION = array(); $_SESSION = array();
$_COOKIE = array(); $_COOKIE = array();
} }
public function _failed() public function _failed()
{ {
Rhymix\Framework\Config::set('session.delay', false); Rhymix\Framework\Config::set('session.delay', false);
@ -28,7 +28,7 @@ class SessionTest extends \Codeception\TestCase\Test
$_SESSION = array(); $_SESSION = array();
$_COOKIE = array(); $_COOKIE = array();
} }
public function testGetSet() public function testGetSet()
{ {
$this->assertFalse(isset($_SESSION['foo']['bar'])); $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'), Rhymix\Framework\Session::get('foo'));
$this->assertEquals(array('bar' => 'bazz', 'baz' => 'bazzzz'), $_SESSION['foo']); $this->assertEquals(array('bar' => 'bazz', 'baz' => 'bazzzz'), $_SESSION['foo']);
} }
public function testStart() public function testStart()
{ {
Rhymix\Framework\Config::set('session.use_keys', true); Rhymix\Framework\Config::set('session.use_keys', true);
// Test normal start. // Test normal start.
$this->assertTrue(@Rhymix\Framework\Session::start()); $this->assertTrue(@Rhymix\Framework\Session::start());
$this->assertTrue(isset($_COOKIE['rx_sesskey1'])); $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']); $this->assertEquals(0, $_SESSION['RHYMIX']['keys']['www.rhymix.org']['trusted']);
$session_secret = $_SESSION['RHYMIX']['secret']; $session_secret = $_SESSION['RHYMIX']['secret'];
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
// Test normal restart. // Test normal restart.
$this->assertTrue(@Rhymix\Framework\Session::start()); $this->assertTrue(@Rhymix\Framework\Session::start());
$this->assertEquals($session_secret, $_SESSION['RHYMIX']['secret']); $this->assertEquals($session_secret, $_SESSION['RHYMIX']['secret']);
$session_secret = $_SESSION['RHYMIX']['secret']; $session_secret = $_SESSION['RHYMIX']['secret'];
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
// Test missing HTTP key. // Test missing HTTP key.
unset($_COOKIE['rx_sesskey1']); unset($_COOKIE['rx_sesskey1']);
$this->assertTrue(@Rhymix\Framework\Session::start()); $this->assertTrue(@Rhymix\Framework\Session::start());
$this->assertNotEquals($session_secret, $_SESSION['RHYMIX']['secret']); $this->assertNotEquals($session_secret, $_SESSION['RHYMIX']['secret']);
$session_secret = $_SESSION['RHYMIX']['secret']; $session_secret = $_SESSION['RHYMIX']['secret'];
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
// Test missing HTTPS key. // Test missing HTTPS key.
unset($_COOKIE['rx_sesskey2']); unset($_COOKIE['rx_sesskey2']);
$this->assertTrue(@Rhymix\Framework\Session::start()); $this->assertTrue(@Rhymix\Framework\Session::start());
$this->assertNotEquals($session_secret, $_SESSION['RHYMIX']['secret']); $this->assertNotEquals($session_secret, $_SESSION['RHYMIX']['secret']);
$session_secret = $_SESSION['RHYMIX']['secret']; $session_secret = $_SESSION['RHYMIX']['secret'];
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
// Test invalid HTTP key. // Test invalid HTTP key.
$_COOKIE['rx_sesskey1'] = substr(md5(mt_rand()), 0, 24); $_COOKIE['rx_sesskey1'] = substr(md5(mt_rand()), 0, 24);
$this->assertTrue(@Rhymix\Framework\Session::start()); $this->assertTrue(@Rhymix\Framework\Session::start());
$this->assertNotEquals($session_secret, $_SESSION['RHYMIX']['secret']); $this->assertNotEquals($session_secret, $_SESSION['RHYMIX']['secret']);
$session_secret = $_SESSION['RHYMIX']['secret']; $session_secret = $_SESSION['RHYMIX']['secret'];
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
// Test invalid HTTPS key. // Test invalid HTTPS key.
$_COOKIE['rx_sesskey2'] = substr(md5(mt_rand()), 0, 24); $_COOKIE['rx_sesskey2'] = substr(md5(mt_rand()), 0, 24);
$this->assertTrue(@Rhymix\Framework\Session::start()); $this->assertTrue(@Rhymix\Framework\Session::start());
$this->assertNotEquals($session_secret, $_SESSION['RHYMIX']['secret']); $this->assertNotEquals($session_secret, $_SESSION['RHYMIX']['secret']);
$session_secret = $_SESSION['RHYMIX']['secret']; $session_secret = $_SESSION['RHYMIX']['secret'];
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
// Test initial transition from HTTP to HTTPS. // Test initial transition from HTTP to HTTPS.
session_start(); session_start();
unset($_SESSION['RHYMIX']['keys']['www.rhymix.org']['key2']); unset($_SESSION['RHYMIX']['keys']['www.rhymix.org']['key2']);
@ -100,11 +100,11 @@ class SessionTest extends \Codeception\TestCase\Test
$session_secret = $_SESSION['RHYMIX']['secret']; $session_secret = $_SESSION['RHYMIX']['secret'];
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
} }
public function testCheckStart() public function testCheckStart()
{ {
Rhymix\Framework\Config::set('session.delay', true); Rhymix\Framework\Config::set('session.delay', true);
$_SESSION = array(); $_SESSION = array();
unset($_COOKIE['PHPSESSID']); unset($_COOKIE['PHPSESSID']);
$this->assertFalse(@Rhymix\Framework\Session::start()); $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::checkStart());
$this->assertFalse(Rhymix\Framework\Session::isStarted()); $this->assertFalse(Rhymix\Framework\Session::isStarted());
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
$_SESSION['foo'] = 'bar'; $_SESSION['foo'] = 'bar';
$this->assertTrue(@Rhymix\Framework\Session::checkStart()); $this->assertTrue(@Rhymix\Framework\Session::checkStart());
$this->assertTrue(Rhymix\Framework\Session::isStarted()); $this->assertTrue(Rhymix\Framework\Session::isStarted());
$this->assertEquals('bar', $_SESSION['foo']); $this->assertEquals('bar', $_SESSION['foo']);
$this->assertEquals('bar', Rhymix\Framework\Session::get('foo')); $this->assertEquals('bar', Rhymix\Framework\Session::get('foo'));
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
$_SESSION = array(); $_SESSION = array();
unset($_COOKIE['PHPSESSID']); unset($_COOKIE['PHPSESSID']);
$this->assertTrue(@Rhymix\Framework\Session::checkStart(true)); $this->assertTrue(@Rhymix\Framework\Session::checkStart(true));
$this->assertTrue(Rhymix\Framework\Session::isStarted()); $this->assertTrue(Rhymix\Framework\Session::isStarted());
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
$_SESSION = array(); $_SESSION = array();
unset($_COOKIE['PHPSESSID']); unset($_COOKIE['PHPSESSID']);
$this->assertTrue(@Rhymix\Framework\Session::start(true)); $this->assertTrue(@Rhymix\Framework\Session::start(true));
$this->assertTrue(Rhymix\Framework\Session::isStarted()); $this->assertTrue(Rhymix\Framework\Session::isStarted());
} }
public function testCheckSSO() public function testCheckSSO()
{ {
$this->assertNull(Rhymix\Framework\Session::checkSSO(new stdClass)); $this->assertNull(Rhymix\Framework\Session::checkSSO(new stdClass));
} }
public function testRefresh() public function testRefresh()
{ {
$_SERVER['REQUEST_METHOD'] = 'GET'; $_SERVER['REQUEST_METHOD'] = 'GET';
@Rhymix\Framework\Session::start(); @Rhymix\Framework\Session::start();
$session_secret = $_SESSION['RHYMIX']['secret']; $session_secret = $_SESSION['RHYMIX']['secret'];
$key1 = $_SESSION['RHYMIX']['keys']['www.rhymix.org']['key1']; $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']['key1_time'] = time() - 3600;
$_SESSION['RHYMIX']['keys']['www.rhymix.org']['key2_time'] = time() - 3600; $_SESSION['RHYMIX']['keys']['www.rhymix.org']['key2_time'] = time() - 3600;
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
@Rhymix\Framework\Session::start(); @Rhymix\Framework\Session::start();
$this->assertNotEquals($key1, $_SESSION['RHYMIX']['keys']['www.rhymix.org']['key1']); $this->assertNotEquals($key1, $_SESSION['RHYMIX']['keys']['www.rhymix.org']['key1']);
$this->assertNotEquals($key2, $_SESSION['RHYMIX']['keys']['www.rhymix.org']['key2']); $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']); $this->assertEquals($session_secret, $_SESSION['RHYMIX']['secret']);
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
} }
public function testClose() public function testClose()
{ {
@Rhymix\Framework\Session::start(); @Rhymix\Framework\Session::start();
@ -165,7 +165,7 @@ class SessionTest extends \Codeception\TestCase\Test
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
$this->assertEquals(\PHP_SESSION_NONE, session_status()); $this->assertEquals(\PHP_SESSION_NONE, session_status());
} }
public function testDestroy() public function testDestroy()
{ {
@Rhymix\Framework\Session::start(); @Rhymix\Framework\Session::start();
@ -173,27 +173,27 @@ class SessionTest extends \Codeception\TestCase\Test
Rhymix\Framework\Session::destroy(); Rhymix\Framework\Session::destroy();
$this->assertFalse(isset($_SESSION['RHYMIX'])); $this->assertFalse(isset($_SESSION['RHYMIX']));
} }
public function testLoginLogout() public function testLoginLogout()
{ {
@Rhymix\Framework\Session::start(); @Rhymix\Framework\Session::start();
$this->assertFalse($_SESSION['RHYMIX']['login']); $this->assertFalse($_SESSION['RHYMIX']['login']);
$this->assertFalse($_SESSION['member_srl']); $this->assertFalse($_SESSION['member_srl']);
$this->assertFalse($_SESSION['is_logged']); $this->assertFalse($_SESSION['is_logged']);
Rhymix\Framework\Session::login(42); Rhymix\Framework\Session::login(42);
$this->assertEquals(42, $_SESSION['RHYMIX']['login']); $this->assertEquals(42, $_SESSION['RHYMIX']['login']);
$this->assertEquals(42, $_SESSION['member_srl']); $this->assertEquals(42, $_SESSION['member_srl']);
$this->assertTrue($_SESSION['is_logged']); $this->assertTrue($_SESSION['is_logged']);
Rhymix\Framework\Session::logout(); Rhymix\Framework\Session::logout();
$this->assertFalse(isset($_SESSION['RHYMIX']['login'])); $this->assertFalse(isset($_SESSION['RHYMIX']['login']));
$this->assertFalse(isset($_SESSION['member_srl'])); $this->assertFalse(isset($_SESSION['member_srl']));
$this->assertFalse(isset($_SESSION['is_logged'])); $this->assertFalse(isset($_SESSION['is_logged']));
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
} }
public function testIsStarted() public function testIsStarted()
{ {
$this->assertFalse(Rhymix\Framework\Session::isStarted()); $this->assertFalse(Rhymix\Framework\Session::isStarted());
@ -202,47 +202,47 @@ class SessionTest extends \Codeception\TestCase\Test
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
$this->assertFalse(Rhymix\Framework\Session::isStarted()); $this->assertFalse(Rhymix\Framework\Session::isStarted());
} }
public function testIsMember() public function testIsMember()
{ {
@Rhymix\Framework\Session::start(); @Rhymix\Framework\Session::start();
$this->assertFalse(Rhymix\Framework\Session::isMember()); $this->assertFalse(Rhymix\Framework\Session::isMember());
Rhymix\Framework\Session::login(42); Rhymix\Framework\Session::login(42);
$this->assertTrue(Rhymix\Framework\Session::isMember()); $this->assertTrue(Rhymix\Framework\Session::isMember());
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
} }
public function testIsAdmin() public function testIsAdmin()
{ {
@Rhymix\Framework\Session::start(); @Rhymix\Framework\Session::start();
$this->assertFalse(Rhymix\Framework\Session::isAdmin()); $this->assertFalse(Rhymix\Framework\Session::isAdmin());
Rhymix\Framework\Session::login(42); Rhymix\Framework\Session::login(42);
$this->assertFalse(Rhymix\Framework\Session::isAdmin()); $this->assertFalse(Rhymix\Framework\Session::isAdmin());
Rhymix\Framework\Session::setMemberInfo((object)array('member_srl' => 42, 'is_admin' => 'Y')); Rhymix\Framework\Session::setMemberInfo((object)array('member_srl' => 42, 'is_admin' => 'Y'));
$this->assertTrue(Rhymix\Framework\Session::isAdmin()); $this->assertTrue(Rhymix\Framework\Session::isAdmin());
Rhymix\Framework\Session::setMemberInfo((object)array('member_srl' => 99, 'is_admin' => 'Y')); Rhymix\Framework\Session::setMemberInfo((object)array('member_srl' => 99, 'is_admin' => 'Y'));
$this->assertFalse(Rhymix\Framework\Session::isAdmin()); $this->assertFalse(Rhymix\Framework\Session::isAdmin());
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
} }
public function testIsTrusted() public function testIsTrusted()
{ {
@Rhymix\Framework\Session::start(); @Rhymix\Framework\Session::start();
$_SESSION['RHYMIX']['keys']['www.rhymix.org']['trusted'] = 0; $_SESSION['RHYMIX']['keys']['www.rhymix.org']['trusted'] = 0;
$this->assertFalse(Rhymix\Framework\Session::isTrusted()); $this->assertFalse(Rhymix\Framework\Session::isTrusted());
$_SESSION['RHYMIX']['keys']['www.rhymix.org']['trusted'] = time() + 300; $_SESSION['RHYMIX']['keys']['www.rhymix.org']['trusted'] = time() + 300;
$this->assertTrue(Rhymix\Framework\Session::isTrusted()); $this->assertTrue(Rhymix\Framework\Session::isTrusted());
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
} }
public function testIsValid() public function testIsValid()
{ {
@Rhymix\Framework\Session::start(); @Rhymix\Framework\Session::start();
@ -252,115 +252,115 @@ class SessionTest extends \Codeception\TestCase\Test
$validity_info = Rhymix\Framework\Session::getValidityInfo($member_srl); $validity_info = Rhymix\Framework\Session::getValidityInfo($member_srl);
$this->assertTrue(is_object($validity_info)); $this->assertTrue(is_object($validity_info));
$this->assertTrue(isset($validity_info->invalid_before)); $this->assertTrue(isset($validity_info->invalid_before));
$validity_info->invalid_before = time() - 3600; $validity_info->invalid_before = time() - 3600;
$this->assertTrue(Rhymix\Framework\Session::setValidityInfo($member_srl, $validity_info)); $this->assertTrue(Rhymix\Framework\Session::setValidityInfo($member_srl, $validity_info));
$this->assertTrue(Rhymix\Framework\Session::isValid()); $this->assertTrue(Rhymix\Framework\Session::isValid());
$validity_info->invalid_before = time() + 300; $validity_info->invalid_before = time() + 300;
$this->assertTrue(Rhymix\Framework\Session::setValidityInfo($member_srl, $validity_info)); $this->assertTrue(Rhymix\Framework\Session::setValidityInfo($member_srl, $validity_info));
$this->assertFalse(@Rhymix\Framework\Session::isValid()); $this->assertFalse(@Rhymix\Framework\Session::isValid());
$validity_info->invalid_before = time() - 900; $validity_info->invalid_before = time() - 900;
$this->assertTrue(Rhymix\Framework\Session::setValidityInfo($member_srl, $validity_info)); $this->assertTrue(Rhymix\Framework\Session::setValidityInfo($member_srl, $validity_info));
$this->assertTrue(Rhymix\Framework\Session::isValid()); $this->assertTrue(Rhymix\Framework\Session::isValid());
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
} }
public function testGetMemberSrl() public function testGetMemberSrl()
{ {
@Rhymix\Framework\Session::start(); @Rhymix\Framework\Session::start();
$this->assertEquals(false, Rhymix\Framework\Session::getMemberSrl()); $this->assertEquals(false, Rhymix\Framework\Session::getMemberSrl());
Rhymix\Framework\Session::login(42); Rhymix\Framework\Session::login(42);
$this->assertEquals(42, Rhymix\Framework\Session::getMemberSrl()); $this->assertEquals(42, Rhymix\Framework\Session::getMemberSrl());
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
} }
public function testGetMemberInfo() public function testGetMemberInfo()
{ {
@Rhymix\Framework\Session::start(); @Rhymix\Framework\Session::start();
$this->assertEquals(new Rhymix\Framework\Helpers\SessionHelper(), Rhymix\Framework\Session::getMemberInfo()); $this->assertEquals(new Rhymix\Framework\Helpers\SessionHelper(), Rhymix\Framework\Session::getMemberInfo());
Rhymix\Framework\Session::login(42); Rhymix\Framework\Session::login(42);
$this->assertEquals(new Rhymix\Framework\Helpers\SessionHelper(), Rhymix\Framework\Session::getMemberInfo()); $this->assertEquals(new Rhymix\Framework\Helpers\SessionHelper(), Rhymix\Framework\Session::getMemberInfo());
Rhymix\Framework\Session::setMemberInfo((object)array('member_srl' => 42)); Rhymix\Framework\Session::setMemberInfo((object)array('member_srl' => 42));
$this->assertEquals((object)array('member_srl' => 42), Rhymix\Framework\Session::getMemberInfo()); $this->assertEquals((object)array('member_srl' => 42), Rhymix\Framework\Session::getMemberInfo());
Rhymix\Framework\Session::setMemberInfo((object)array('member_srl' => 99, 'is_admin' => 'Y')); Rhymix\Framework\Session::setMemberInfo((object)array('member_srl' => 99, 'is_admin' => 'Y'));
$this->assertEquals(new Rhymix\Framework\Helpers\SessionHelper(), Rhymix\Framework\Session::getMemberInfo()); $this->assertEquals(new Rhymix\Framework\Helpers\SessionHelper(), Rhymix\Framework\Session::getMemberInfo());
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
} }
public function testGetSetLanguage() public function testGetSetLanguage()
{ {
@Rhymix\Framework\Session::start(); @Rhymix\Framework\Session::start();
$this->assertEquals(\Context::getLangType(), Rhymix\Framework\Session::getLanguage()); $this->assertEquals(\Context::getLangType(), Rhymix\Framework\Session::getLanguage());
Rhymix\Framework\Session::setLanguage('ja'); Rhymix\Framework\Session::setLanguage('ja');
$this->assertEquals('ja', Rhymix\Framework\Session::getLanguage()); $this->assertEquals('ja', Rhymix\Framework\Session::getLanguage());
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
} }
public function testGetSetTimezone() public function testGetSetTimezone()
{ {
@Rhymix\Framework\Session::start(); @Rhymix\Framework\Session::start();
$this->assertEquals(config('locale.default_timezone'), Rhymix\Framework\Session::getTimezone()); $this->assertEquals(config('locale.default_timezone'), Rhymix\Framework\Session::getTimezone());
Rhymix\Framework\Session::setTimezone('Asia/Beijing'); Rhymix\Framework\Session::setTimezone('Asia/Beijing');
$this->assertEquals('Asia/Beijing', Rhymix\Framework\Session::getTimezone()); $this->assertEquals('Asia/Beijing', Rhymix\Framework\Session::getTimezone());
Rhymix\Framework\Session::close(); Rhymix\Framework\Session::close();
} }
public function testTokens() public function testTokens()
{ {
@Rhymix\Framework\Session::start(); @Rhymix\Framework\Session::start();
$token1 = Rhymix\Framework\Session::createToken(); $token1 = Rhymix\Framework\Session::createToken();
$this->assertTrue(ctype_alnum($token1)); $this->assertTrue(ctype_alnum($token1));
$this->assertEquals(16, strlen($token1)); $this->assertEquals(16, strlen($token1));
$this->assertTrue(Rhymix\Framework\Session::verifyToken($token1)); $this->assertTrue(Rhymix\Framework\Session::verifyToken($token1));
$this->assertFalse(Rhymix\Framework\Session::verifyToken(strrev($token1))); $this->assertFalse(Rhymix\Framework\Session::verifyToken(strrev($token1)));
$token2 = Rhymix\Framework\Session::createToken('/my/key'); $token2 = Rhymix\Framework\Session::createToken('/my/key');
$this->assertTrue(Rhymix\Framework\Session::verifyToken($token2, '/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));
$this->assertFalse(Rhymix\Framework\Session::verifyToken($token2, '/wrong/key')); $this->assertFalse(Rhymix\Framework\Session::verifyToken($token2, '/wrong/key'));
$this->assertFalse(Rhymix\Framework\Session::verifyToken(strrev($token2))); $this->assertFalse(Rhymix\Framework\Session::verifyToken(strrev($token2)));
$token3 = Rhymix\Framework\Session::getGenericToken(); $token3 = Rhymix\Framework\Session::getGenericToken();
$this->assertEquals(16, strlen($token3)); $this->assertEquals(16, strlen($token3));
$this->assertTrue(Rhymix\Framework\Session::verifyToken($token3)); $this->assertTrue(Rhymix\Framework\Session::verifyToken($token3));
$this->assertTrue(Rhymix\Framework\Session::verifyToken($token3, '')); $this->assertTrue(Rhymix\Framework\Session::verifyToken($token3, ''));
$this->assertFalse(Rhymix\Framework\Session::verifyToken($token3, '/wrong/key')); $this->assertFalse(Rhymix\Framework\Session::verifyToken($token3, '/wrong/key'));
Rhymix\Framework\Session::destroy(); Rhymix\Framework\Session::destroy();
$this->assertFalse(Rhymix\Framework\Session::verifyToken($token1)); $this->assertFalse(Rhymix\Framework\Session::verifyToken($token1));
$this->assertFalse(Rhymix\Framework\Session::verifyToken($token1, '/my/key')); $this->assertFalse(Rhymix\Framework\Session::verifyToken($token1, '/my/key'));
$this->assertFalse(Rhymix\Framework\Session::getGenericToken()); $this->assertFalse(Rhymix\Framework\Session::getGenericToken());
} }
public function testEncryption() public function testEncryption()
{ {
@Rhymix\Framework\Session::start(); @Rhymix\Framework\Session::start();
$plaintext = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.'; $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); $ciphertext = Rhymix\Framework\Session::encrypt($plaintext);
$this->assertNotEquals(false, $ciphertext); $this->assertNotEquals(false, $ciphertext);
$this->assertEquals($plaintext, Rhymix\Framework\Session::decrypt($ciphertext)); $this->assertEquals($plaintext, Rhymix\Framework\Session::decrypt($ciphertext));
Rhymix\Framework\Session::destroy(); Rhymix\Framework\Session::destroy();
$this->assertFalse(Rhymix\Framework\Session::decrypt($ciphertext)); $this->assertFalse(Rhymix\Framework\Session::decrypt($ciphertext));
@Rhymix\Framework\Session::start(); @Rhymix\Framework\Session::start();
$this->assertFalse(Rhymix\Framework\Session::decrypt($ciphertext)); $this->assertFalse(Rhymix\Framework\Session::decrypt($ciphertext));
Rhymix\Framework\Session::close(); 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); Rhymix\Framework\Storage::deleteDirectory(\RX_BASEDIR . 'tests/_output', false);
} }
public function _after() public function _after()
{ {
@chmod(\RX_BASEDIR . 'tests/_output', 0755); @chmod(\RX_BASEDIR . 'tests/_output', 0755);
Rhymix\Framework\Storage::deleteDirectory(\RX_BASEDIR . 'tests/_output', false); Rhymix\Framework\Storage::deleteDirectory(\RX_BASEDIR . 'tests/_output', false);
} }
public function _failed() public function _failed()
{ {
@chmod(\RX_BASEDIR . 'tests/_output', 0755); @chmod(\RX_BASEDIR . 'tests/_output', 0755);
Rhymix\Framework\Storage::deleteDirectory(\RX_BASEDIR . 'tests/_output', false); Rhymix\Framework\Storage::deleteDirectory(\RX_BASEDIR . 'tests/_output', false);
} }
public function testExists() public function testExists()
{ {
$this->assertTrue(Rhymix\Framework\Storage::exists(__FILE__)); $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(__FILE__ . '.nonexistent.suffix'));
$this->assertFalse(Rhymix\Framework\Storage::exists(__DIR__ . '/nonexistent.subdirectory')); $this->assertFalse(Rhymix\Framework\Storage::exists(__DIR__ . '/nonexistent.subdirectory'));
} }
public function testIsFile() public function testIsFile()
{ {
$this->assertTrue(Rhymix\Framework\Storage::isFile(__FILE__)); $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(__FILE__ . '.nonexistent.suffix'));
$this->assertFalse(Rhymix\Framework\Storage::isFile(__DIR__ . '/nonexistent.subdirectory')); $this->assertFalse(Rhymix\Framework\Storage::isFile(__DIR__ . '/nonexistent.subdirectory'));
} }
public function testIsEmptyFile() public function testIsEmptyFile()
{ {
$emptyfile = \RX_BASEDIR . 'tests/_output/emptyfile.txt'; $emptyfile = \RX_BASEDIR . 'tests/_output/emptyfile.txt';
file_put_contents($emptyfile, ''); file_put_contents($emptyfile, '');
$this->assertTrue(Rhymix\Framework\Storage::isEmptyFile($emptyfile)); $this->assertTrue(Rhymix\Framework\Storage::isEmptyFile($emptyfile));
$this->assertFalse(Rhymix\Framework\Storage::isEmptyFile($emptyfile . '.nonexistent.suffix')); $this->assertFalse(Rhymix\Framework\Storage::isEmptyFile($emptyfile . '.nonexistent.suffix'));
$this->assertFalse(Rhymix\Framework\Storage::isEmptyFile(__FILE__)); $this->assertFalse(Rhymix\Framework\Storage::isEmptyFile(__FILE__));
$this->assertFalse(Rhymix\Framework\Storage::isEmptyFile(__DIR__)); $this->assertFalse(Rhymix\Framework\Storage::isEmptyFile(__DIR__));
} }
public function testIsDirectory() public function testIsDirectory()
{ {
$this->assertTrue(Rhymix\Framework\Storage::isDirectory(__DIR__)); $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(__FILE__ . '.nonexistent.suffix'));
$this->assertFalse(Rhymix\Framework\Storage::isDirectory(__DIR__ . '/nonexistent.subdirectory')); $this->assertFalse(Rhymix\Framework\Storage::isDirectory(__DIR__ . '/nonexistent.subdirectory'));
} }
public function testIsEmptyDirectory() public function testIsEmptyDirectory()
{ {
$emptydir = \RX_BASEDIR . 'tests/_output/emptydir'; $emptydir = \RX_BASEDIR . 'tests/_output/emptydir';
mkdir($emptydir); mkdir($emptydir);
$this->assertTrue(Rhymix\Framework\Storage::isEmptyDirectory($emptydir)); $this->assertTrue(Rhymix\Framework\Storage::isEmptyDirectory($emptydir));
$this->assertFalse(Rhymix\Framework\Storage::isEmptyDirectory($emptydir . '/nonexistent.subdirectory')); $this->assertFalse(Rhymix\Framework\Storage::isEmptyDirectory($emptydir . '/nonexistent.subdirectory'));
$this->assertFalse(Rhymix\Framework\Storage::isEmptyDirectory(__FILE__)); $this->assertFalse(Rhymix\Framework\Storage::isEmptyDirectory(__FILE__));
$this->assertFalse(Rhymix\Framework\Storage::isEmptyDirectory(__DIR__)); $this->assertFalse(Rhymix\Framework\Storage::isEmptyDirectory(__DIR__));
} }
public function testIsSymlink() public function testIsSymlink()
{ {
if (strncasecmp(\PHP_OS, 'Win', 3) === 0) if (strncasecmp(\PHP_OS, 'Win', 3) === 0)
{ {
return; return;
} }
$symlink_source = \RX_BASEDIR . 'tests/_output/link.source.txt'; $symlink_source = \RX_BASEDIR . 'tests/_output/link.source.txt';
$symlink_target = \RX_BASEDIR . 'tests/_output/link.target.txt'; $symlink_target = \RX_BASEDIR . 'tests/_output/link.target.txt';
file_put_contents($symlink_target, 'foobar'); file_put_contents($symlink_target, 'foobar');
symlink($symlink_target, $symlink_source); symlink($symlink_target, $symlink_source);
$this->assertTrue(Rhymix\Framework\Storage::isSymlink($symlink_source)); $this->assertTrue(Rhymix\Framework\Storage::isSymlink($symlink_source));
$this->assertFalse(Rhymix\Framework\Storage::isSymlink($symlink_target)); $this->assertFalse(Rhymix\Framework\Storage::isSymlink($symlink_target));
unlink($symlink_target); unlink($symlink_target);
$this->assertTrue(Rhymix\Framework\Storage::isSymlink($symlink_source)); $this->assertTrue(Rhymix\Framework\Storage::isSymlink($symlink_source));
$this->assertFalse(Rhymix\Framework\Storage::isValidSymlink($symlink_source)); $this->assertFalse(Rhymix\Framework\Storage::isValidSymlink($symlink_source));
$this->assertFalse(Rhymix\Framework\Storage::isSymlink($symlink_target)); $this->assertFalse(Rhymix\Framework\Storage::isSymlink($symlink_target));
$this->assertFalse(Rhymix\Framework\Storage::isValidSymlink($symlink_target)); $this->assertFalse(Rhymix\Framework\Storage::isValidSymlink($symlink_target));
} }
public function testIsReadable() public function testIsReadable()
{ {
$this->assertTrue(Rhymix\Framework\Storage::isReadable(__FILE__)); $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(__FILE__ . '.nonexistent.suffix'));
$this->assertFalse(Rhymix\Framework\Storage::isReadable('/dev/nonexistent')); $this->assertFalse(Rhymix\Framework\Storage::isReadable('/dev/nonexistent'));
} }
public function testIsWritable() public function testIsWritable()
{ {
$testfile = \RX_BASEDIR . 'tests/_output/testfile.txt'; $testfile = \RX_BASEDIR . 'tests/_output/testfile.txt';
file_put_contents($testfile, 'foobar'); file_put_contents($testfile, 'foobar');
$this->assertTrue(Rhymix\Framework\Storage::isWritable(__FILE__)); $this->assertTrue(Rhymix\Framework\Storage::isWritable(__FILE__));
$this->assertTrue(Rhymix\Framework\Storage::isWritable(__DIR__)); $this->assertTrue(Rhymix\Framework\Storage::isWritable(__DIR__));
$this->assertTrue(Rhymix\Framework\Storage::isWritable($testfile)); $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($testfile . '.nonexistent.suffix'));
$this->assertFalse(Rhymix\Framework\Storage::isWritable('/dev/nonexistent')); $this->assertFalse(Rhymix\Framework\Storage::isWritable('/dev/nonexistent'));
} }
public function testGetSize() public function testGetSize()
{ {
$this->assertEquals(filesize(__FILE__), Rhymix\Framework\Storage::getSize(__FILE__)); $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(__FILE__ . '.nonexistent.suffix'));
$this->assertFalse(Rhymix\Framework\Storage::getSize('/dev/nonexistent')); $this->assertFalse(Rhymix\Framework\Storage::getSize('/dev/nonexistent'));
} }
public function testRead() public function testRead()
{ {
// Simple read test // 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(__FILE__ . '.nonexistent.suffix'));
$this->assertFalse(Rhymix\Framework\Storage::read(__DIR__)); $this->assertFalse(Rhymix\Framework\Storage::read(__DIR__));
$this->assertFalse(Rhymix\Framework\Storage::read('/dev/nonexistent')); $this->assertFalse(Rhymix\Framework\Storage::read('/dev/nonexistent'));
// Stream read test // Stream read test
$fp = Rhymix\Framework\Storage::read(__FILE__, true); $fp = Rhymix\Framework\Storage::read(__FILE__, true);
$this->assertTrue(is_resource($fp)); $this->assertTrue(is_resource($fp));
$this->assertEquals(file_get_contents(__FILE__), fread($fp, filesize(__FILE__))); $this->assertEquals(file_get_contents(__FILE__), fread($fp, filesize(__FILE__)));
fclose($fp); fclose($fp);
} }
public function testWrite() public function testWrite()
{ {
$testfile = \RX_BASEDIR . 'tests/_output/subdirectory/testfile.txt'; $testfile = \RX_BASEDIR . 'tests/_output/subdirectory/testfile.txt';
$copyfile = \RX_BASEDIR . 'tests/_output/subdirectory/copyfile.txt'; $copyfile = \RX_BASEDIR . 'tests/_output/subdirectory/copyfile.txt';
// Simple write test // Simple write test
$this->assertTrue(Rhymix\Framework\Storage::write($testfile, 'foobarbazzjazz')); $this->assertTrue(Rhymix\Framework\Storage::write($testfile, 'foobarbazzjazz'));
$this->assertTrue(file_exists($testfile)); $this->assertTrue(file_exists($testfile));
$this->assertEquals('foobarbazzjazz', file_get_contents($testfile)); $this->assertEquals('foobarbazzjazz', file_get_contents($testfile));
$this->assertEquals(0666 & ~Rhymix\Framework\Storage::getUmask(), fileperms($testfile) & 0777); $this->assertEquals(0666 & ~Rhymix\Framework\Storage::getUmask(), fileperms($testfile) & 0777);
// Append test // Append test
$this->assertTrue(Rhymix\Framework\Storage::write($testfile, 'rhymix', 'a', 0666)); $this->assertTrue(Rhymix\Framework\Storage::write($testfile, 'rhymix', 'a', 0666));
$this->assertTrue(file_exists($testfile)); $this->assertTrue(file_exists($testfile));
$this->assertEquals('foobarbazzjazzrhymix', file_get_contents($testfile)); $this->assertEquals('foobarbazzjazzrhymix', file_get_contents($testfile));
$this->assertEquals(0666, fileperms($testfile) & 0777); $this->assertEquals(0666, fileperms($testfile) & 0777);
// Stream copy test // Stream copy test
$stream = fopen($testfile, 'r'); $stream = fopen($testfile, 'r');
$this->assertTrue(Rhymix\Framework\Storage::write($copyfile, $stream)); $this->assertTrue(Rhymix\Framework\Storage::write($copyfile, $stream));
$this->assertEquals('foobarbazzjazzrhymix', file_get_contents($copyfile)); $this->assertEquals('foobarbazzjazzrhymix', file_get_contents($copyfile));
fclose($stream); fclose($stream);
// Stream append test // Stream append test
$stream = fopen($testfile, 'r'); $stream = fopen($testfile, 'r');
$this->assertTrue(Rhymix\Framework\Storage::write($copyfile, $stream, 'a')); $this->assertTrue(Rhymix\Framework\Storage::write($copyfile, $stream, 'a'));
$this->assertEquals('foobarbazzjazzrhymixfoobarbazzjazzrhymix', file_get_contents($copyfile)); $this->assertEquals('foobarbazzjazzrhymixfoobarbazzjazzrhymix', file_get_contents($copyfile));
fclose($stream); fclose($stream);
// Partial stream append test // Partial stream append test
$stream = fopen($testfile, 'r'); $stream = fopen($testfile, 'r');
fseek($stream, 14); fseek($stream, 14);
$this->assertTrue(Rhymix\Framework\Storage::write($copyfile, $stream, 'a')); $this->assertTrue(Rhymix\Framework\Storage::write($copyfile, $stream, 'a'));
$this->assertEquals('foobarbazzjazzrhymixfoobarbazzjazzrhymixrhymix', file_get_contents($copyfile)); $this->assertEquals('foobarbazzjazzrhymixfoobarbazzjazzrhymixrhymix', file_get_contents($copyfile));
fclose($stream); fclose($stream);
// Empty file write test // Empty file write test
$this->assertTrue(Rhymix\Framework\Storage::write($testfile . '1', '')); $this->assertTrue(Rhymix\Framework\Storage::write($testfile . '1', ''));
$this->assertTrue(file_exists($testfile . '1')); $this->assertTrue(file_exists($testfile . '1'));
$this->assertEquals(0, filesize($testfile . '1')); $this->assertEquals(0, filesize($testfile . '1'));
$this->assertEmpty(glob($testfile . '1.tmp.*')); $this->assertEmpty(glob($testfile . '1.tmp.*'));
// Empty stream copy test // Empty stream copy test
$stream = fopen('php://temp', 'r'); $stream = fopen('php://temp', 'r');
$this->assertTrue(Rhymix\Framework\Storage::write($testfile . '2', $stream)); $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->assertEquals(0, filesize($testfile . '2'));
$this->assertEmpty(glob($testfile . '2.tmp.*')); $this->assertEmpty(glob($testfile . '2.tmp.*'));
fclose($stream); fclose($stream);
// Umask test // Umask test
if (strncasecmp(\PHP_OS, 'Win', 3) !== 0) if (strncasecmp(\PHP_OS, 'Win', 3) !== 0)
{ {
@ -193,16 +193,16 @@ class StorageTest extends \Codeception\TestCase\Test
Rhymix\Framework\Storage::setUmask($umask); Rhymix\Framework\Storage::setUmask($umask);
} }
} }
public function testReadWritePHPData() public function testReadWritePHPData()
{ {
$testfile = \RX_BASEDIR . 'tests/_output/test.php'; $testfile = \RX_BASEDIR . 'tests/_output/test.php';
$data = array('foo' => 'bar', 'baz' => array('rhymix' => '\'"special\\chars' . chr(0) . chr(255), 'test' => 'wow')); $data = array('foo' => 'bar', 'baz' => array('rhymix' => '\'"special\\chars' . chr(0) . chr(255), 'test' => 'wow'));
$this->assertTrue(Rhymix\Framework\Storage::writePHPData($testfile, $data)); $this->assertTrue(Rhymix\Framework\Storage::writePHPData($testfile, $data));
$this->assertEquals($data, Rhymix\Framework\Storage::readPHPData($testfile)); $this->assertEquals($data, Rhymix\Framework\Storage::readPHPData($testfile));
} }
public function testCopy() public function testCopy()
{ {
$source = \RX_BASEDIR . 'tests/_output/copy.source.txt'; $source = \RX_BASEDIR . 'tests/_output/copy.source.txt';
@ -210,17 +210,17 @@ class StorageTest extends \Codeception\TestCase\Test
$target_dir = \RX_BASEDIR . 'tests/_output'; $target_dir = \RX_BASEDIR . 'tests/_output';
file_put_contents($source, 'foobarbaz'); file_put_contents($source, 'foobarbaz');
chmod($source, 0646); chmod($source, 0646);
// Copy with exact destination filename // Copy with exact destination filename
$this->assertTrue(Rhymix\Framework\Storage::copy($source, $target)); $this->assertTrue(Rhymix\Framework\Storage::copy($source, $target));
$this->assertTrue(file_exists($target)); $this->assertTrue(file_exists($target));
$this->assertTrue(file_get_contents($target) === 'foobarbaz'); $this->assertTrue(file_get_contents($target) === 'foobarbaz');
// Copy into directory with source filename // Copy into directory with source filename
$this->assertTrue(Rhymix\Framework\Storage::copy($source, $target_dir)); $this->assertTrue(Rhymix\Framework\Storage::copy($source, $target_dir));
$this->assertTrue(file_exists($target_dir . '/copy.source.txt')); $this->assertTrue(file_exists($target_dir . '/copy.source.txt'));
$this->assertTrue(file_get_contents($target_dir . '/copy.source.txt') === 'foobarbaz'); $this->assertTrue(file_get_contents($target_dir . '/copy.source.txt') === 'foobarbaz');
// Copy into directory with no write permissions // Copy into directory with no write permissions
chmod($target_dir, 0555); chmod($target_dir, 0555);
file_put_contents($source, 'foobarbaz has changed'); 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_exists($target));
$this->assertTrue(file_get_contents($target) === 'foobarbaz has changed'); $this->assertTrue(file_get_contents($target) === 'foobarbaz has changed');
chmod($target_dir, 0755); chmod($target_dir, 0755);
if (strncasecmp(\PHP_OS, 'Win', 3) !== 0) if (strncasecmp(\PHP_OS, 'Win', 3) !== 0)
{ {
$this->assertEquals(0646, fileperms($target) & 0777); $this->assertEquals(0646, fileperms($target) & 0777);
@ -236,35 +236,35 @@ class StorageTest extends \Codeception\TestCase\Test
$this->assertEquals(0755, fileperms($target) & 0777); $this->assertEquals(0755, fileperms($target) & 0777);
} }
} }
public function testMove() public function testMove()
{ {
$source = \RX_BASEDIR . 'tests/_output/move.source.txt'; $source = \RX_BASEDIR . 'tests/_output/move.source.txt';
$target = \RX_BASEDIR . 'tests/_output/move.target.txt'; $target = \RX_BASEDIR . 'tests/_output/move.target.txt';
file_put_contents($source, 'foobarbaz'); file_put_contents($source, 'foobarbaz');
$this->assertTrue(Rhymix\Framework\Storage::move($source, $target)); $this->assertTrue(Rhymix\Framework\Storage::move($source, $target));
$this->assertTrue(file_exists($target)); $this->assertTrue(file_exists($target));
$this->assertTrue(file_get_contents($target) === 'foobarbaz'); $this->assertTrue(file_get_contents($target) === 'foobarbaz');
$this->assertFalse(file_exists($source)); $this->assertFalse(file_exists($source));
} }
public function testDelete() public function testDelete()
{ {
$testfile = \RX_BASEDIR . 'tests/_output/testfile.txt'; $testfile = \RX_BASEDIR . 'tests/_output/testfile.txt';
file_put_contents($testfile, 'foobar'); file_put_contents($testfile, 'foobar');
$this->assertTrue(Rhymix\Framework\Storage::delete($testfile)); $this->assertTrue(Rhymix\Framework\Storage::delete($testfile));
$this->assertFalse(file_exists($testfile)); $this->assertFalse(file_exists($testfile));
} }
public function testCreateDirectory() public function testCreateDirectory()
{ {
$emptydir = \RX_BASEDIR . 'tests/_output/emptydir'; $emptydir = \RX_BASEDIR . 'tests/_output/emptydir';
$this->assertTrue(Rhymix\Framework\Storage::createDirectory($emptydir)); $this->assertTrue(Rhymix\Framework\Storage::createDirectory($emptydir));
$this->assertTrue(file_exists($emptydir) && is_dir($emptydir)); $this->assertTrue(file_exists($emptydir) && is_dir($emptydir));
// Umask test // Umask test
if (strncasecmp(\PHP_OS, 'Win', 3) !== 0) if (strncasecmp(\PHP_OS, 'Win', 3) !== 0)
{ {
@ -277,7 +277,7 @@ class StorageTest extends \Codeception\TestCase\Test
Rhymix\Framework\Storage::setUmask($umask); Rhymix\Framework\Storage::setUmask($umask);
} }
} }
public function testReadDirectory() public function testReadDirectory()
{ {
$testdir = \RX_BASEDIR . 'tests/_output/testdir'; $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 . '/foo', 'foo');
file_put_contents($testdir . '/bar', 'bar'); file_put_contents($testdir . '/bar', 'bar');
file_put_contents($testdir . '/baz', 'baz'); file_put_contents($testdir . '/baz', 'baz');
$this->assertEquals(array($testdir . '/bar', $testdir . '/baz', $testdir . '/foo'), Rhymix\Framework\Storage::readDirectory($testdir)); $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'), Rhymix\Framework\Storage::readDirectory($testdir, false));
$this->assertEquals(array('bar', 'baz', 'foo', 'subdir'), Rhymix\Framework\Storage::readDirectory($testdir, false, true, 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->assertEquals(array('.dotfile', 'bar', 'baz', 'foo', 'subdir'), Rhymix\Framework\Storage::readDirectory($testdir, false, false, false));
$this->assertFalse(Rhymix\Framework\Storage::readDirectory('/opt/nonexistent/foobar')); $this->assertFalse(Rhymix\Framework\Storage::readDirectory('/opt/nonexistent/foobar'));
} }
public function testCopyDirectory() public function testCopyDirectory()
{ {
$sourcedir = \RX_BASEDIR . 'tests/_output/sourcedir'; $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 . '/bar', 'bar');
file_put_contents($sourcedir . '/subdir/baz', 'baz'); file_put_contents($sourcedir . '/subdir/baz', 'baz');
$targetdir = \RX_BASEDIR . 'tests/_output/targetdir'; $targetdir = \RX_BASEDIR . 'tests/_output/targetdir';
$this->assertTrue(Rhymix\Framework\Storage::copyDirectory($sourcedir, $targetdir)); $this->assertTrue(Rhymix\Framework\Storage::copyDirectory($sourcedir, $targetdir));
$this->assertTrue(file_exists($targetdir . '/bar')); $this->assertTrue(file_exists($targetdir . '/bar'));
$this->assertTrue(file_exists($targetdir . '/subdir/baz')); $this->assertTrue(file_exists($targetdir . '/subdir/baz'));
if (is_writable('/opt')) @touch('/opt/nonexistent'); if (is_writable('/opt')) @touch('/opt/nonexistent');
$this->assertFalse(@Rhymix\Framework\Storage::copyDirectory($sourcedir, '/opt/nonexistent/foobar')); $this->assertFalse(@Rhymix\Framework\Storage::copyDirectory($sourcedir, '/opt/nonexistent/foobar'));
} }
public function testMoveDirectory() public function testMoveDirectory()
{ {
$sourcedir = \RX_BASEDIR . 'tests/_output/sourcedir'; $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 . '/bar', 'bar');
file_put_contents($sourcedir . '/subdir/baz', 'baz'); file_put_contents($sourcedir . '/subdir/baz', 'baz');
$targetdir = \RX_BASEDIR . 'tests/_output/targetdir'; $targetdir = \RX_BASEDIR . 'tests/_output/targetdir';
$this->assertTrue(Rhymix\Framework\Storage::moveDirectory($sourcedir, $targetdir)); $this->assertTrue(Rhymix\Framework\Storage::moveDirectory($sourcedir, $targetdir));
$this->assertTrue(file_exists($targetdir . '/bar')); $this->assertTrue(file_exists($targetdir . '/bar'));
$this->assertTrue(file_exists($targetdir . '/subdir/baz')); $this->assertTrue(file_exists($targetdir . '/subdir/baz'));
$this->assertFalse(file_exists($sourcedir)); $this->assertFalse(file_exists($sourcedir));
} }
public function testDeleteDirectory() public function testDeleteDirectory()
{ {
$sourcedir = \RX_BASEDIR . 'tests/_output/sourcedir'; $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 . '/bar', 'bar');
file_put_contents($sourcedir . '/subdir/baz', 'baz'); file_put_contents($sourcedir . '/subdir/baz', 'baz');
$nonexistent = \RX_BASEDIR . 'tests/_output/targetdir'; $nonexistent = \RX_BASEDIR . 'tests/_output/targetdir';
$this->assertTrue(Rhymix\Framework\Storage::deleteDirectory($sourcedir)); $this->assertTrue(Rhymix\Framework\Storage::deleteDirectory($sourcedir));
$this->assertFalse(file_exists($sourcedir . '/subdir/baz')); $this->assertFalse(file_exists($sourcedir . '/subdir/baz'));
$this->assertFalse(file_exists($sourcedir)); $this->assertFalse(file_exists($sourcedir));
$this->assertFalse(Rhymix\Framework\Storage::deleteDirectory($nonexistent)); $this->assertFalse(Rhymix\Framework\Storage::deleteDirectory($nonexistent));
} }
public function testDeleteDirectoryKeepRoot() public function testDeleteDirectoryKeepRoot()
{ {
$sourcedir = \RX_BASEDIR . 'tests/_output/sourcedir'; $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 . '/bar', 'bar');
file_put_contents($sourcedir . '/subdir/baz', 'baz'); file_put_contents($sourcedir . '/subdir/baz', 'baz');
$nonexistent = \RX_BASEDIR . 'tests/_output/targetdir'; $nonexistent = \RX_BASEDIR . 'tests/_output/targetdir';
$this->assertTrue(Rhymix\Framework\Storage::deleteDirectory($sourcedir, false)); $this->assertTrue(Rhymix\Framework\Storage::deleteDirectory($sourcedir, false));
$this->assertFalse(file_exists($sourcedir . '/subdir/baz')); $this->assertFalse(file_exists($sourcedir . '/subdir/baz'));
$this->assertTrue(file_exists($sourcedir)); $this->assertTrue(file_exists($sourcedir));
$this->assertFalse(Rhymix\Framework\Storage::deleteDirectory($nonexistent)); $this->assertFalse(Rhymix\Framework\Storage::deleteDirectory($nonexistent));
} }
public function testDeleteEmptyDirectory() public function testDeleteEmptyDirectory()
{ {
$sourcedir = \RX_BASEDIR . 'tests/_output/sourcedir'; $sourcedir = \RX_BASEDIR . 'tests/_output/sourcedir';
@ -366,7 +366,7 @@ class StorageTest extends \Codeception\TestCase\Test
mkdir($sourcedir . '/subdir/subsubdir'); mkdir($sourcedir . '/subdir/subsubdir');
mkdir($sourcedir . '/subdir/subsubdir/subsubdir'); mkdir($sourcedir . '/subdir/subsubdir/subsubdir');
file_put_contents($sourcedir . '/subdir/subsubdir/subsubdir/foo', 'bar'); file_put_contents($sourcedir . '/subdir/subsubdir/subsubdir/foo', 'bar');
$this->assertFalse(Rhymix\Framework\Storage::deleteEmptyDirectory($sourcedir . '/subdir/subsubdir/subsubdir')); $this->assertFalse(Rhymix\Framework\Storage::deleteEmptyDirectory($sourcedir . '/subdir/subsubdir/subsubdir'));
Rhymix\Framework\Storage::delete($sourcedir . '/subdir/subsubdir/subsubdir/foo'); Rhymix\Framework\Storage::delete($sourcedir . '/subdir/subsubdir/subsubdir/foo');
$this->assertTrue(Rhymix\Framework\Storage::deleteEmptyDirectory($sourcedir . '/subdir/subsubdir/subsubdir')); $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));
$this->assertTrue(file_exists($sourcedir . '/foo')); $this->assertTrue(file_exists($sourcedir . '/foo'));
} }
public function testRecommendUmask() public function testRecommendUmask()
{ {
$umask = Rhymix\Framework\Storage::recommendUmask(); $umask = Rhymix\Framework\Storage::recommendUmask();
if (strncasecmp(\PHP_OS, 'Win', 3) !== 0) if (strncasecmp(\PHP_OS, 'Win', 3) !== 0)
{ {
if (fileowner(__FILE__) == exec('id -u')) if (fileowner(__FILE__) == exec('id -u'))
@ -399,7 +399,7 @@ class StorageTest extends \Codeception\TestCase\Test
{ {
$this->assertEquals('0000', $umask); $this->assertEquals('0000', $umask);
} }
$this->assertFalse(file_exists(\RX_BASEDIR . 'files/cache/uidcheck')); $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(); $elapsed = Rhymix\Framework\Timer::stop();
usleep(1000); usleep(1000);
$t3 = microtime(true); $t3 = microtime(true);
$this->assertGreaterThanOrEqual($t1, $started); $this->assertGreaterThanOrEqual($t1, $started);
$this->assertLessThanOrEqual($t2, $started); $this->assertLessThanOrEqual($t2, $started);
$this->assertGreaterThanOrEqual($t2 - $started, $elapsed); $this->assertGreaterThanOrEqual($t2 - $started, $elapsed);
$this->assertLessThanOrEqual($t3 - $t1, $elapsed); $this->assertLessThanOrEqual($t3 - $t1, $elapsed);
$this->assertGreaterThan(0, $elapsed); $this->assertGreaterThan(0, $elapsed);
} }
function testNestedTimers() function testNestedTimers()
{ {
$t1 = Rhymix\Framework\Timer::start(); $t1 = Rhymix\Framework\Timer::start();
@ -30,11 +30,11 @@ class TimerTest extends \Codeception\TestCase\Test
$t3 = Rhymix\Framework\Timer::stop(); $t3 = Rhymix\Framework\Timer::stop();
usleep(1000); usleep(1000);
$t4 = Rhymix\Framework\Timer::stop(); $t4 = Rhymix\Framework\Timer::stop();
$this->assertGreaterThanOrEqual($t1, $t2); $this->assertGreaterThanOrEqual($t1, $t2);
$this->assertGreaterThan($t3, $t4); $this->assertGreaterThan($t3, $t4);
} }
function testMultipleTimers() function testMultipleTimers()
{ {
$t1 = Rhymix\Framework\Timer::start('timer1'); $t1 = Rhymix\Framework\Timer::start('timer1');
@ -42,27 +42,27 @@ class TimerTest extends \Codeception\TestCase\Test
$t2 = Rhymix\Framework\Timer::start('timer2'); $t2 = Rhymix\Framework\Timer::start('timer2');
$t3 = Rhymix\Framework\Timer::stop('timer1'); $t3 = Rhymix\Framework\Timer::stop('timer1');
$t4 = Rhymix\Framework\Timer::stop('timer2'); $t4 = Rhymix\Framework\Timer::stop('timer2');
$this->assertGreaterThanOrEqual($t1, $t2); $this->assertGreaterThanOrEqual($t1, $t2);
$this->assertGreaterThanOrEqual($t4, $t3); $this->assertGreaterThanOrEqual($t4, $t3);
} }
function testTimerFormat() function testTimerFormat()
{ {
$t1 = Rhymix\Framework\Timer::start(); $t1 = Rhymix\Framework\Timer::start();
usleep(10000); usleep(10000);
$t2 = Rhymix\Framework\Timer::stopFormat(); $t2 = Rhymix\Framework\Timer::stopFormat();
$this->assertRegexp('/^[0-9\.,]+ms$/', $t2); $this->assertRegexp('/^[0-9\.,]+ms$/', $t2);
} }
function testTimerSinceStartup() function testTimerSinceStartup()
{ {
$t1 = Rhymix\Framework\Timer::sinceStartup(); $t1 = Rhymix\Framework\Timer::sinceStartup();
$t2 = Rhymix\Framework\Timer::sinceStartup(); $t2 = Rhymix\Framework\Timer::sinceStartup();
$this->assertGreaterThanOrEqual($t1, $t2); $this->assertGreaterThanOrEqual($t1, $t2);
$t3 = Rhymix\Framework\Timer::sinceStartupFormat(); $t3 = Rhymix\Framework\Timer::sinceStartupFormat();
$this->assertRegexp('/^[0-9\.,]+ms$/', $t3); $this->assertRegexp('/^[0-9\.,]+ms$/', $t3);
} }

View file

@ -7,55 +7,55 @@ class UATest extends \Codeception\TestCase\Test
// Phones // 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 (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')); $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 // 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 (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')); $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 // 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; 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) 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('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')); $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() public function testIsTablet()
{ {
// Phones // 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 (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')); $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 // 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 (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')); $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 // 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 (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)')); $this->assertFalse(Rhymix\Framework\UA::isTablet('Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)'));
} }
public function testIsRobot() public function testIsRobot()
{ {
// Robot // 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('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('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/)')); $this->assertTrue(Rhymix\Framework\UA::isRobot('Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)'));
// Not robot // 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 (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 (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')); $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() public function testGetLocale()
{ {
$locale = Rhymix\Framework\UA::getLocale('en-US,en;q=0.8,ko-KR;q=0.5,ko;q=0.3'); $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); $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'); $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); $this->assertEquals('ko-KR', $locale);
} }
public function testGetBrowserInfo() public function testGetBrowserInfo()
{ {
// Android default browser // Android default browser
@ -68,7 +68,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertTrue($browser->is_tablet); $this->assertTrue($browser->is_tablet);
$this->assertFalse($browser->is_webview); $this->assertFalse($browser->is_webview);
$this->assertFalse($browser->is_robot); $this->assertFalse($browser->is_robot);
// Android default browser (possible confusion with Chrome) // 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'); $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); $this->assertEquals('Android', $browser->browser);
@ -79,7 +79,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertFalse($browser->is_tablet); $this->assertFalse($browser->is_tablet);
$this->assertFalse($browser->is_webview); $this->assertFalse($browser->is_webview);
$this->assertFalse($browser->is_robot); $this->assertFalse($browser->is_robot);
// Android webview (possible confusion with Chrome) // 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'); $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); $this->assertEquals('Android', $browser->browser);
@ -89,7 +89,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertFalse($browser->is_tablet); $this->assertFalse($browser->is_tablet);
$this->assertTrue($browser->is_webview); $this->assertTrue($browser->is_webview);
$this->assertFalse($browser->is_robot); $this->assertFalse($browser->is_robot);
// Android Chrome // 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'); $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); $this->assertEquals('Chrome', $browser->browser);
@ -98,7 +98,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertTrue($browser->is_mobile); $this->assertTrue($browser->is_mobile);
$this->assertFalse($browser->is_webview); $this->assertFalse($browser->is_webview);
$this->assertFalse($browser->is_tablet); $this->assertFalse($browser->is_tablet);
// Windows Chrome // 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'); $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); $this->assertEquals('Chrome', $browser->browser);
@ -106,83 +106,83 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('Windows', $browser->os); $this->assertEquals('Windows', $browser->os);
$this->assertEquals('10.0', $browser->os_version); $this->assertEquals('10.0', $browser->os_version);
$this->assertFalse($browser->is_mobile); $this->assertFalse($browser->is_mobile);
// Linux Chrome // 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'); $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('Chrome', $browser->browser);
$this->assertEquals('41.0', $browser->version); $this->assertEquals('41.0', $browser->version);
$this->assertEquals('Linux', $browser->os); $this->assertEquals('Linux', $browser->os);
$this->assertFalse($browser->is_mobile); $this->assertFalse($browser->is_mobile);
// Linux Konqueror // Linux Konqueror
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (X11; Linux) KHTML/4.9.1 (like Gecko) Konqueror/4.9'); $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('Konqueror', $browser->browser);
$this->assertEquals('4.9', $browser->version); $this->assertEquals('4.9', $browser->version);
$this->assertEquals('Linux', $browser->os); $this->assertEquals('Linux', $browser->os);
// Edge 94 on Windows // 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'); $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('Edge', $browser->browser);
$this->assertEquals('94.0', $browser->version); $this->assertEquals('94.0', $browser->version);
$this->assertEquals('Windows', $browser->os); $this->assertEquals('Windows', $browser->os);
$this->assertFalse($browser->is_mobile); $this->assertFalse($browser->is_mobile);
// Edge 93 on Android // 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'); $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('Edge', $browser->browser);
$this->assertEquals('93.0', $browser->version); $this->assertEquals('93.0', $browser->version);
$this->assertEquals('Android', $browser->os); $this->assertEquals('Android', $browser->os);
$this->assertTrue($browser->is_mobile); $this->assertTrue($browser->is_mobile);
// Edge 93 on iOS // 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'); $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('Edge', $browser->browser);
$this->assertEquals('93.0', $browser->version); $this->assertEquals('93.0', $browser->version);
$this->assertEquals('iOS', $browser->os); $this->assertEquals('iOS', $browser->os);
$this->assertTrue($browser->is_mobile); $this->assertTrue($browser->is_mobile);
// Edge 13 // 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'); $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('Edge', $browser->browser);
$this->assertEquals('13.0', $browser->version); $this->assertEquals('13.0', $browser->version);
$this->assertEquals('Windows', $browser->os); $this->assertEquals('Windows', $browser->os);
$this->assertFalse($browser->is_mobile); $this->assertFalse($browser->is_mobile);
// Edge 12 // 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'); $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('Edge', $browser->browser);
$this->assertEquals('12.0', $browser->version); $this->assertEquals('12.0', $browser->version);
$this->assertEquals('Windows', $browser->os); $this->assertEquals('Windows', $browser->os);
$this->assertFalse($browser->is_mobile); $this->assertFalse($browser->is_mobile);
// IE 11 // IE 11
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'); $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('IE', $browser->browser);
$this->assertEquals('11.0', $browser->version); $this->assertEquals('11.0', $browser->version);
$this->assertEquals('Windows', $browser->os); $this->assertEquals('Windows', $browser->os);
$this->assertEquals('10.0', $browser->os_version); $this->assertEquals('10.0', $browser->os_version);
// IE 10 in compatibility mode // IE 10 in compatibility mode
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/4.0 (Compatible; MSIE 8.0; Windows NT 5.2; Trident/6.0)'); $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('IE', $browser->browser);
$this->assertEquals('10.0', $browser->version); $this->assertEquals('10.0', $browser->version);
$this->assertEquals('Windows', $browser->os); $this->assertEquals('Windows', $browser->os);
$this->assertEquals('XP', $browser->os_version); $this->assertEquals('XP', $browser->os_version);
// IE 9 // 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)'); $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('IE', $browser->browser);
$this->assertEquals('9.0', $browser->version); $this->assertEquals('9.0', $browser->version);
$this->assertEquals('Windows', $browser->os); $this->assertEquals('Windows', $browser->os);
$this->assertEquals('7', $browser->os_version); $this->assertEquals('7', $browser->os_version);
// IE 8 in compatibility mode // IE 8 in compatibility mode
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)'); $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('IE', $browser->browser);
$this->assertEquals('8.0', $browser->version); $this->assertEquals('8.0', $browser->version);
$this->assertEquals('Windows', $browser->os); $this->assertEquals('Windows', $browser->os);
$this->assertEquals('Vista', $browser->os_version); $this->assertEquals('Vista', $browser->os_version);
// iOS Safari // 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'); $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); $this->assertEquals('Safari', $browser->browser);
@ -192,7 +192,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('iPad', $browser->device); $this->assertEquals('iPad', $browser->device);
$this->assertTrue($browser->is_mobile); $this->assertTrue($browser->is_mobile);
$this->assertTrue($browser->is_tablet); $this->assertTrue($browser->is_tablet);
// iOS Chrome // 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'); $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); $this->assertEquals('Chrome', $browser->browser);
@ -202,7 +202,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('iPhone', $browser->device); $this->assertEquals('iPhone', $browser->device);
$this->assertTrue($browser->is_mobile); $this->assertTrue($browser->is_mobile);
$this->assertFalse($browser->is_tablet); $this->assertFalse($browser->is_tablet);
// iOS Firefox // 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'); $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); $this->assertEquals('Firefox', $browser->browser);
@ -212,7 +212,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('iPad', $browser->device); $this->assertEquals('iPad', $browser->device);
$this->assertTrue($browser->is_mobile); $this->assertTrue($browser->is_mobile);
$this->assertTrue($browser->is_tablet); $this->assertTrue($browser->is_tablet);
// macOS (OS X) Safari // 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'); $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); $this->assertEquals('Safari', $browser->browser);
@ -220,7 +220,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('macOS', $browser->os); $this->assertEquals('macOS', $browser->os);
$this->assertEquals('10.10.2', $browser->os_version); $this->assertEquals('10.10.2', $browser->os_version);
$this->assertFalse($browser->is_mobile); $this->assertFalse($browser->is_mobile);
// macOS (OS X) Chrome // 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'); $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); $this->assertEquals('Chrome', $browser->browser);
@ -228,38 +228,38 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('macOS', $browser->os); $this->assertEquals('macOS', $browser->os);
$this->assertEquals('10.10.1', $browser->os_version); $this->assertEquals('10.10.1', $browser->os_version);
$this->assertFalse($browser->is_mobile); $this->assertFalse($browser->is_mobile);
// macOS (OS X) Firefox // 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'); $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('Firefox', $browser->browser);
$this->assertEquals('33.0', $browser->version); $this->assertEquals('33.0', $browser->version);
$this->assertEquals('macOS', $browser->os); $this->assertEquals('macOS', $browser->os);
$this->assertFalse($browser->is_mobile); $this->assertFalse($browser->is_mobile);
// Opera 15 // 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'); $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('Opera', $browser->browser);
$this->assertEquals('15.0', $browser->version); $this->assertEquals('15.0', $browser->version);
$this->assertFalse($browser->is_mobile); $this->assertFalse($browser->is_mobile);
// Opera 12 // Opera 12
$browser = Rhymix\Framework\UA::getBrowserInfo('Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16'); $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('Opera', $browser->browser);
$this->assertEquals('12.16', $browser->version); $this->assertEquals('12.16', $browser->version);
$this->assertFalse($browser->is_mobile); $this->assertFalse($browser->is_mobile);
// Opera 9.x // Opera 9.x
$browser = Rhymix\Framework\UA::getBrowserInfo('Opera/9.64 (X11; Linux x86_64; U; en) Presto/2.1.1'); $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('Opera', $browser->browser);
$this->assertEquals('9.64', $browser->version); $this->assertEquals('9.64', $browser->version);
$this->assertFalse($browser->is_mobile); $this->assertFalse($browser->is_mobile);
// Iceweasel (Debian Firefox) // Iceweasel (Debian Firefox)
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (X11; Linux i686; rv:10.0.7) Gecko/20100101 Iceweasel/10.0.7'); $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('Firefox', $browser->browser);
$this->assertEquals('10.0', $browser->version); $this->assertEquals('10.0', $browser->version);
$this->assertFalse($browser->is_mobile); $this->assertFalse($browser->is_mobile);
// Whale Mobile (Naver App) // 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)'); $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); $this->assertEquals('Whale', $browser->browser);
@ -268,7 +268,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertTrue($browser->is_mobile); $this->assertTrue($browser->is_mobile);
$this->assertFalse($browser->is_webview); $this->assertFalse($browser->is_webview);
$this->assertFalse($browser->is_robot); $this->assertFalse($browser->is_robot);
// XE Push App (Webview) // 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'); $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); $this->assertEquals('Chrome', $browser->browser);
@ -277,82 +277,82 @@ class UATest extends \Codeception\TestCase\Test
$this->assertTrue($browser->is_mobile); $this->assertTrue($browser->is_mobile);
$this->assertTrue($browser->is_webview); $this->assertTrue($browser->is_webview);
$this->assertFalse($browser->is_robot); $this->assertFalse($browser->is_robot);
// Googlebot // Googlebot
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'); $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('Googlebot', $browser->browser);
$this->assertEquals('2.1', $browser->version); $this->assertEquals('2.1', $browser->version);
$this->assertTrue($browser->is_robot); $this->assertTrue($browser->is_robot);
// Googlebot-Image // Googlebot-Image
$browser = Rhymix\Framework\UA::getBrowserInfo('Googlebot-Image/1.0'); $browser = Rhymix\Framework\UA::getBrowserInfo('Googlebot-Image/1.0');
$this->assertEquals('Googlebot-Image', $browser->browser); $this->assertEquals('Googlebot-Image', $browser->browser);
$this->assertEquals('1.0', $browser->version); $this->assertEquals('1.0', $browser->version);
$this->assertTrue($browser->is_robot); $this->assertTrue($browser->is_robot);
// Mediapartners-Google // Mediapartners-Google
$browser = Rhymix\Framework\UA::getBrowserInfo('Mediapartners-Google'); $browser = Rhymix\Framework\UA::getBrowserInfo('Mediapartners-Google');
$this->assertEquals('Mediapartners-Google', $browser->browser); $this->assertEquals('Mediapartners-Google', $browser->browser);
$this->assertEquals(null, $browser->version); $this->assertEquals(null, $browser->version);
$this->assertTrue($browser->is_robot); $this->assertTrue($browser->is_robot);
// Bingbot // Bingbot
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)'); $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('Bingbot', $browser->browser);
$this->assertEquals('2.0', $browser->version); $this->assertEquals('2.0', $browser->version);
$this->assertTrue($browser->is_robot); $this->assertTrue($browser->is_robot);
// Yeti // Yeti
$browser = Rhymix\Framework\UA::getBrowserInfo('Yeti/1.1; +http://naver.me/spd'); $browser = Rhymix\Framework\UA::getBrowserInfo('Yeti/1.1; +http://naver.me/spd');
$this->assertEquals('Yeti', $browser->browser); $this->assertEquals('Yeti', $browser->browser);
$this->assertEquals('1.1', $browser->version); $this->assertEquals('1.1', $browser->version);
$this->assertTrue($browser->is_robot); $this->assertTrue($browser->is_robot);
// Baiduspider // Baiduspider
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)'); $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('Baiduspider', $browser->browser);
$this->assertEquals('2.0', $browser->version); $this->assertEquals('2.0', $browser->version);
$this->assertTrue($browser->is_robot); $this->assertTrue($browser->is_robot);
// wget // wget
$browser = Rhymix\Framework\UA::getBrowserInfo('wget/1.17.1'); $browser = Rhymix\Framework\UA::getBrowserInfo('wget/1.17.1');
$this->assertEquals('Wget', $browser->browser); $this->assertEquals('Wget', $browser->browser);
$this->assertEquals('1.17', $browser->version); $this->assertEquals('1.17', $browser->version);
$this->assertTrue($browser->is_robot); $this->assertTrue($browser->is_robot);
// curl // curl
$browser = Rhymix\Framework\UA::getBrowserInfo('curl/7.47.0'); $browser = Rhymix\Framework\UA::getBrowserInfo('curl/7.47.0');
$this->assertEquals('Curl', $browser->browser); $this->assertEquals('Curl', $browser->browser);
$this->assertEquals('7.47', $browser->version); $this->assertEquals('7.47', $browser->version);
$this->assertTrue($browser->is_robot); $this->assertTrue($browser->is_robot);
// PHP with version // PHP with version
$browser = Rhymix\Framework\UA::getBrowserInfo('PHP/5.2.9'); $browser = Rhymix\Framework\UA::getBrowserInfo('PHP/5.2.9');
$this->assertEquals('PHP', $browser->browser); $this->assertEquals('PHP', $browser->browser);
$this->assertEquals('5.2', $browser->version); $this->assertEquals('5.2', $browser->version);
$this->assertTrue($browser->is_robot); $this->assertTrue($browser->is_robot);
// PHP without version // PHP without version
$browser = Rhymix\Framework\UA::getBrowserInfo('PHP'); $browser = Rhymix\Framework\UA::getBrowserInfo('PHP');
$this->assertEquals('PHP', $browser->browser); $this->assertEquals('PHP', $browser->browser);
$this->assertNull($browser->version); $this->assertNull($browser->version);
// PHP with HTTP_Request2 // 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'); $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('PHP', $browser->browser);
$this->assertEquals('5.3', $browser->version); $this->assertEquals('5.3', $browser->version);
// Some random browser with the 'Mozilla' 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)'); $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('Mozilla', $browser->browser);
$this->assertEquals('5.0', $browser->version); $this->assertEquals('5.0', $browser->version);
// Some random browser without the 'Mozilla' version // Some random browser without the 'Mozilla' version
$browser = Rhymix\Framework\UA::getBrowserInfo('W3C_Validator/1.650'); $browser = Rhymix\Framework\UA::getBrowserInfo('W3C_Validator/1.650');
$this->assertEquals('W3C_Validator', $browser->browser); $this->assertEquals('W3C_Validator', $browser->browser);
$this->assertEquals('1.650', $browser->version); $this->assertEquals('1.650', $browser->version);
} }
public function testEncodeFilenameForDownload() 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')); $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', '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')); $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() public function testGetSetColorScheme()
{ {
$_COOKIE['rx_color_scheme'] = 'light'; $_COOKIE['rx_color_scheme'] = 'light';
@ -379,7 +379,7 @@ class UATest extends \Codeception\TestCase\Test
$this->assertEquals('auto', Rhymix\Framework\UA::getColorScheme()); $this->assertEquals('auto', Rhymix\Framework\UA::getColorScheme());
$_COOKIE['rx_color_scheme'] = 'invalid'; $_COOKIE['rx_color_scheme'] = 'invalid';
$this->assertEquals('auto', Rhymix\Framework\UA::getColorScheme()); $this->assertEquals('auto', Rhymix\Framework\UA::getColorScheme());
Rhymix\Framework\UA::setColorScheme('light'); Rhymix\Framework\UA::setColorScheme('light');
$this->assertEquals('light', $_COOKIE['rx_color_scheme']); $this->assertEquals('light', $_COOKIE['rx_color_scheme']);
Rhymix\Framework\UA::setColorScheme('dark'); Rhymix\Framework\UA::setColorScheme('dark');

View file

@ -4,43 +4,43 @@ class URLTest extends \Codeception\TestCase\Test
{ {
private $baseurl; private $baseurl;
private $relurl; private $relurl;
public function _before() public function _before()
{ {
$this->baseurl = 'https://www.rhymix.org/' . basename(dirname(dirname(dirname(__DIR__)))) . '/'; $this->baseurl = 'https://www.rhymix.org/' . basename(dirname(dirname(dirname(__DIR__)))) . '/';
$this->relurl = basename(dirname(dirname(dirname(__DIR__)))); $this->relurl = basename(dirname(dirname(dirname(__DIR__))));
} }
public function testGetCurrentURL() public function testGetCurrentURL()
{ {
$old_request_uri = $_SERVER['REQUEST_URI']; $old_request_uri = $_SERVER['REQUEST_URI'];
$_SERVER['REQUEST_URI'] = '/' . $this->relurl . '/index.php?foo=bar&xe=sucks'; $_SERVER['REQUEST_URI'] = '/' . $this->relurl . '/index.php?foo=bar&xe=sucks';
// Getting the current URL // Getting the current URL
$this->assertEquals($this->baseurl . 'index.php?foo=bar&xe=sucks', Rhymix\Framework\URL::getCurrentURL()); $this->assertEquals($this->baseurl . 'index.php?foo=bar&xe=sucks', Rhymix\Framework\URL::getCurrentURL());
// Adding items to the query string // 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)))); $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 // Removing item from the query string
$this->assertEquals($this->baseurl . 'index.php?xe=sucks', Rhymix\Framework\URL::getCurrentURL(array('foo' => null))); $this->assertEquals($this->baseurl . 'index.php?xe=sucks', Rhymix\Framework\URL::getCurrentURL(array('foo' => null)));
// Removing all items from the query string // Removing all items from the query string
$this->assertEquals($this->baseurl . 'index.php', Rhymix\Framework\URL::getCurrentURL(array('foo' => null, 'xe' => null))); $this->assertEquals($this->baseurl . 'index.php', Rhymix\Framework\URL::getCurrentURL(array('foo' => null, 'xe' => null)));
// Adding and removing parameters at the same time // 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))); $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 // Removing invalid characters in the current URL
$_SERVER['REQUEST_URI'] = '/' . $this->relurl . '/?foo="bar"'; $_SERVER['REQUEST_URI'] = '/' . $this->relurl . '/?foo="bar"';
$this->assertEquals($this->baseurl . '?foo=bar', Rhymix\Framework\URL::getCurrentURL()); $this->assertEquals($this->baseurl . '?foo=bar', Rhymix\Framework\URL::getCurrentURL());
$_SERVER['REQUEST_URI'] = '/' . $this->relurl . '/?foo=<bar&baz=rhymix>'; $_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 . '?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))); $this->assertEquals($this->baseurl . '?baz=rhymix&l=ko', Rhymix\Framework\URL::getCurrentURL(array('l' => 'ko', 'foo' => null)));
$_SERVER['REQUEST_URI'] = $old_request_uri; $_SERVER['REQUEST_URI'] = $old_request_uri;
} }
public function testGetCurrentDomainURL() public function testGetCurrentDomainURL()
{ {
$this->assertEquals('https://www.rhymix.org/', Rhymix\Framework\URL::getCurrentDomainURL()); $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('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')); $this->assertEquals($this->baseurl . 'index.php?foo=bar', Rhymix\Framework\URL::getCurrentDomainURL($this->relurl . '/index.php?foo=bar'));
} }
public function testGetCanonicalURL() public function testGetCanonicalURL()
{ {
$tests = array( $tests = array(
@ -58,13 +58,13 @@ class URLTest extends \Codeception\TestCase\Test
'//www.example.com/foo' => 'https://www.example.com/foo', '//www.example.com/foo' => 'https://www.example.com/foo',
'http://xn--cg4bkiv2oina.com/' => 'http://삼성전자.com/', 'http://xn--cg4bkiv2oina.com/' => 'http://삼성전자.com/',
); );
foreach ($tests as $from => $to) foreach ($tests as $from => $to)
{ {
$this->assertEquals($to, Rhymix\Framework\URL::getCanonicalURL($from)); $this->assertEquals($to, Rhymix\Framework\URL::getCanonicalURL($from));
} }
} }
public function testGetDomainFromURL() public function testGetDomainFromURL()
{ {
$tests = array( $tests = array(
@ -72,33 +72,33 @@ class URLTest extends \Codeception\TestCase\Test
'https://www.rhymix.org:8080/foo/bar' => 'www.rhymix.org', 'https://www.rhymix.org:8080/foo/bar' => 'www.rhymix.org',
'http://xn--cg4bkiv2oina.com/' => '삼성전자.com', 'http://xn--cg4bkiv2oina.com/' => '삼성전자.com',
); );
foreach ($tests as $from => $to) foreach ($tests as $from => $to)
{ {
$this->assertEquals($to, Rhymix\Framework\URL::getDomainFromURL($from)); $this->assertEquals($to, Rhymix\Framework\URL::getDomainFromURL($from));
} }
} }
public function testModifyURL() public function testModifyURL()
{ {
// Conversion to absolute // Conversion to absolute
$this->assertEquals($this->baseurl . 'index.php?foo=bar', $url = Rhymix\Framework\URL::modifyURL('./index.php?foo=bar')); $this->assertEquals($this->baseurl . 'index.php?foo=bar', $url = Rhymix\Framework\URL::modifyURL('./index.php?foo=bar'));
// Adding items to the query string // 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)))); $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 // Removing item from the query string
$this->assertEquals($this->baseurl . 'index.php', Rhymix\Framework\URL::modifyURL($url, array('foo' => null))); $this->assertEquals($this->baseurl . 'index.php', Rhymix\Framework\URL::modifyURL($url, array('foo' => null)));
// Adding and removing parameters at the same time // 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))); $this->assertEquals($this->baseurl . 'index.php?l=ko', Rhymix\Framework\URL::modifyURL($url, array('l' => 'ko', 'foo' => null)));
} }
public function testIsInternalURL() public function testIsInternalURL()
{ {
// This function is checked in Security::checkCSRF() // This function is checked in Security::checkCSRF()
} }
public function testURLFromServerPath() public function testURLFromServerPath()
{ {
$this->assertEquals($this->baseurl . '', Rhymix\Framework\URL::fromServerPath(\RX_BASEDIR)); $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(dirname(dirname(\RX_BASEDIR))));
$this->assertEquals(false, Rhymix\Framework\URL::fromServerPath('C:/Windows')); $this->assertEquals(false, Rhymix\Framework\URL::fromServerPath('C:/Windows'));
} }
public function testURLToServerPath() public function testURLToServerPath()
{ {
$this->assertEquals(\RX_BASEDIR . 'index.php', Rhymix\Framework\URL::toServerPath($this->baseurl . 'index.php')); $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('http://other.domain.com/'));
$this->assertEquals(false, Rhymix\Framework\URL::toServerPath('//other.domain.com/')); $this->assertEquals(false, Rhymix\Framework\URL::toServerPath('//other.domain.com/'));
} }
public function testEncodeIdna() public function testEncodeIdna()
{ {
$this->assertEquals('xn--9i1bl3b186bf9e.xn--3e0b707e', Rhymix\Framework\URL::encodeIdna('퓨니코드.한국')); $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('//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')); $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() public function testDecodeIdna()
{ {
$this->assertEquals('퓨니코드.한국', Rhymix\Framework\URL::decodeIdna('xn--9i1bl3b186bf9e.xn--3e0b707e')); $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() public function testFilenameFilterClean()
{ {
$tests = array( $tests = array(
// Illegal characters // Illegal characters
'foo*\.bar' => 'foo.bar', 'foo*\.bar' => 'foo.bar',
'foobar{baz}.jpg' => 'foobar(baz).jpg', 'foobar{baz}.jpg' => 'foobar(baz).jpg',
'foobar^%.docx' => 'foobar_.docx', 'foobar^%.docx' => 'foobar_.docx',
'foo&bar@rhymix.docx' => 'foo&bar@rhymix.docx', 'foo&bar@rhymix.docx' => 'foo&bar@rhymix.docx',
// Control characters // Control characters
'foobar' . chr(127) . '.gif' => 'foobar.gif', 'foobar' . chr(127) . '.gif' => 'foobar.gif',
'foobar' . "\t\r\n" . '.gif' => 'foobar.gif', 'foobar' . "\t\r\n" . '.gif' => 'foobar.gif',
// Unicode whitepace characters // Unicode whitepace characters
'foobar' . html_entity_decode('&#x2001;') . ' space.gif' => 'foobar space.gif', 'foobar' . html_entity_decode('&#x2001;') . ' space.gif' => 'foobar space.gif',
'hello world.png' => 'hello world.png', 'hello world.png' => 'hello world.png',
// Extra symbols // Extra symbols
'_foobar.jpg-' => 'foobar.jpg', '_foobar.jpg-' => 'foobar.jpg',
'.htaccess' => 'htaccess', '.htaccess' => 'htaccess',
// PHP extension // PHP extension
'foobar.php' => 'foobar.phps', 'foobar.php' => 'foobar.phps',
'foobar.php.jpg' => 'foobar.php.jpg', 'foobar.php.jpg' => 'foobar.php.jpg',
// Overlong filenames // Overlong filenames
str_repeat('f', 200) . '.' . str_repeat('b', 30) => str_repeat('f', 111) . '.' . str_repeat('b', 15), str_repeat('f', 200) . '.' . str_repeat('b', 30) => str_repeat('f', 111) . '.' . str_repeat('b', 15),
str_repeat('한글', 100) . '.hwp' => str_repeat('한글', 61) . '한.hwp', str_repeat('한글', 100) . '.hwp' => str_repeat('한글', 61) . '한.hwp',
); );
foreach ($tests as $from => $to) foreach ($tests as $from => $to)
{ {
$result = FilenameFilter::clean($from); $result = FilenameFilter::clean($from);
$this->assertEquals($to, $result); $this->assertEquals($to, $result);
} }
} }
public function testFilenameFilterCleanPath() public function testFilenameFilterCleanPath()
{ {
// Remove extra dots and slashes. // 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/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/..'));
$this->assertEquals('/usr/share', FilenameFilter::cleanPath('/usr/share/foo/bar/../baz/../../')); $this->assertEquals('/usr/share', FilenameFilter::cleanPath('/usr/share/foo/bar/../baz/../../'));
// Test internal paths. // 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'));
$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. // Test Windows paths.
$this->assertEquals('C:/Windows/Notepad.exe', FilenameFilter::cleanPath('C:\\Windows\\System32\\..\\Notepad.exe')); $this->assertEquals('C:/Windows/Notepad.exe', FilenameFilter::cleanPath('C:\\Windows\\System32\\..\\Notepad.exe'));
$this->assertEquals('//vboxsrv/hello/world', FilenameFilter::cleanPath('\\\\vboxsrv\\hello\\world')); $this->assertEquals('//vboxsrv/hello/world', FilenameFilter::cleanPath('\\\\vboxsrv\\hello\\world'));
// Test absolute URLs. // Test absolute URLs.
$this->assertEquals('https://www.rhymix.org/foo/bar', FilenameFilter::cleanPath('https://www.rhymix.org/foo/.//bar')); $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')); $this->assertEquals('//www.rhymix.org/foo/bar', FilenameFilter::cleanPath('//www.rhymix.org/foo/.//bar'));
// Do not remove .. if there is no parent directory. // Do not remove .. if there is no parent directory.
$this->assertEquals('C:/../foobar', FilenameFilter::cleanPath('C:\\..\foobar\\')); $this->assertEquals('C:/../foobar', FilenameFilter::cleanPath('C:\\..\foobar\\'));
$this->assertEquals('/../foobar', FilenameFilter::cleanPath('/../foobar/')); $this->assertEquals('/../foobar', FilenameFilter::cleanPath('/../foobar/'));
// Remove query strings and URL fragments. // 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?foo=bar'));
$this->assertEquals(\RX_BASEDIR . 'index.php', FilenameFilter::cleanPath('index.php#baz')); $this->assertEquals(\RX_BASEDIR . 'index.php', FilenameFilter::cleanPath('index.php#baz'));
} }
public function testFilenameFilterIsDirectDownload() public function testFilenameFilterIsDirectDownload()
{ {
$this->assertTrue(FilenameFilter::isDirectDownload('foobar.GIF')); $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.MP3'));
$this->assertTrue(FilenameFilter::isDirectDownload('/audio.FLac')); $this->assertTrue(FilenameFilter::isDirectDownload('/audio.FLac'));
$this->assertTrue(FilenameFilter::isDirectDownload('//foo.bar/video.mp4')); $this->assertTrue(FilenameFilter::isDirectDownload('//foo.bar/video.mp4'));
$this->assertFalse(FilenameFilter::isDirectDownload('rhymix.docx')); $this->assertFalse(FilenameFilter::isDirectDownload('rhymix.docx'));
$this->assertFalse(FilenameFilter::isDirectDownload('rhymix.HWP')); $this->assertFalse(FilenameFilter::isDirectDownload('rhymix.HWP'));
$this->assertFalse(FilenameFilter::isDirectDownload('rhymix.jpg.exe')); $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(''));
$this->assertFalse(FilenameFilter::isDirectDownload('http://www.google.com')); $this->assertFalse(FilenameFilter::isDirectDownload('http://www.google.com'));
$this->assertFalse(FilenameFilter::isDirectDownload('/')); $this->assertFalse(FilenameFilter::isDirectDownload('/'));
$this->assertTrue(FilenameFilter::isDirectDownload('foobar.jpg', false)); $this->assertTrue(FilenameFilter::isDirectDownload('foobar.jpg', false));
$this->assertTrue(FilenameFilter::isDirectDownload('foobar.webp', false)); $this->assertTrue(FilenameFilter::isDirectDownload('foobar.webp', false));
$this->assertFalse(FilenameFilter::isDirectDownload('foobar.mp4', false)); $this->assertFalse(FilenameFilter::isDirectDownload('foobar.mp4', false));

View file

@ -58,66 +58,66 @@ class HTMLFilterTest extends \Codeception\TestCase\Test
'<img src="" alt="dummy" />' '<img src="" alt="dummy" />'
) )
); );
config('mediafilter.classes', array()); config('mediafilter.classes', array());
foreach ($tests as $test) foreach ($tests as $test)
{ {
$this->assertEquals($test[1], Rhymix\Framework\Filters\HTMLFilter::clean($test[0])); $this->assertEquals($test[1], Rhymix\Framework\Filters\HTMLFilter::clean($test[0]));
} }
} }
public function testHTMLFilterHTML5() public function testHTMLFilterHTML5()
{ {
$source = '<div><audio autoplay="autoplay" src="./foo/bar.mp3"></audio></div>'; $source = '<div><audio autoplay="autoplay" src="./foo/bar.mp3"></audio></div>';
$target = '<div><audio 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)); $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>'; $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>'; $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)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<nav>123</nav><section>456</section><article>789</article><aside>0</aside>'; $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>'; $target = '<nav>123</nav><section>456</section><article>789</article><aside>0</aside>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<div contenteditable="true"><div contenteditable="false"><p contenteditable="false"></p></div></div>'; $source = '<div contenteditable="true"><div contenteditable="false"><p contenteditable="false"></p></div></div>';
$target = '<div><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)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
} }
public function testHTMLFilterCSS3() public function testHTMLFilterCSS3()
{ {
$source = '<div style="display:flex;border-radius:1px 2px 3px 4px;"></div>'; $source = '<div style="display:flex;border-radius:1px 2px 3px 4px;"></div>';
$target = '<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)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<div style="box-sizing:border-box;box-shadow:5px 5px 2px #123456;"></div>'; $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>'; $target = '<div style="box-sizing:border-box;box-shadow:5px 5px 2px #123456;"></div>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<div style="overflow-x:auto;overflow-y:scroll;left:-500px;"></div>'; $source = '<div style="overflow-x:auto;overflow-y:scroll;left:-500px;"></div>';
$target = '<div style="overflow-x:auto;overflow-y:scroll;"></div>'; $target = '<div style="overflow-x:auto;overflow-y:scroll;"></div>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<div style="aspect-ratio:9/16;"></div><div style="aspect-ratio:0.5825;"></div>'; $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>'; $target = '<div style="aspect-ratio:9/16;"></div><div style="aspect-ratio:0.5825;"></div>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<div style="object-fit:cover;"><span style="object-fit:invalid-value;">foobar</span></div>'; $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>'; $target = '<div style="object-fit:cover;"><span>foobar</span></div>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
} }
public function testHTMLFilterEmbeddedMedia() 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>'; $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>'; $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)); $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>'; $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>'; $target = '<iframe title="Video Test" width="640" height="360" frameborder="0" scrolling="no"></iframe>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $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">' . $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="movie" value="http://videofarm.daum.net/controller/player/VodPlayer.swf" />' .
'<param name="allowScriptAccess" value="always" />' . '<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" />' . '<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>'; '</object>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<audio src="https://www.youtube.com/whatever"></audio>'; $source = '<audio src="https://www.youtube.com/whatever"></audio>';
$target = '<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)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<audio src="https://www-youtube.com/whatever"></audio>'; $source = '<audio src="https://www-youtube.com/whatever"></audio>';
$target = '<audio src=""></audio>'; $target = '<audio src=""></audio>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $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>'; $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>'; $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)); $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>'; $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>'; $target = '<video width="320" height="240"><source src="" type="video/mp4" /></video>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
} }
public function testHTMLFilterAllowedClasses() public function testHTMLFilterAllowedClasses()
{ {
config('mediafilter.classes', array()); config('mediafilter.classes', array());
$source = '<p class="mytest">Hello World</p>'; $source = '<p class="mytest">Hello World</p>';
$target = '<p>Hello World</p>'; $target = '<p>Hello World</p>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
config('mediafilter.classes', array('mytest')); config('mediafilter.classes', array('mytest'));
$source = '<p class="mytest">Hello World</p>'; $source = '<p class="mytest">Hello World</p>';
$target = '<p class="mytest">Hello World</p>'; $target = '<p class="mytest">Hello World</p>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
config('mediafilter.classes', array()); config('mediafilter.classes', array());
$source = '<p class="whatever">Hello World</p>'; $source = '<p class="whatever">Hello World</p>';
$target = '<p class="whatever">Hello World</p>'; $target = '<p class="whatever">Hello World</p>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, true)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, true));
$source = '<p class="foobar whatever">Hello World</p>'; $source = '<p class="foobar whatever">Hello World</p>';
$target = '<p class="foobar">Hello World</p>'; $target = '<p class="foobar">Hello World</p>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, array('foobar'))); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, array('foobar')));
} }
public function testHTMLFilterEditorComponent() 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" />'; $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" />'; $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)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<img somekey="somevalue" otherkey="othervalue" onkeypress="alert(\'xss\');" editor_component="component_name" />'; $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="" />'; $target = '<img somekey="somevalue" otherkey="othervalue" src="" editor_component="component_name" alt="" />';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $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>'; $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>'; $target = '<div somekey="somevalue" otherkey="othervalue" id="user_content_foo" editor_component="component_name"></div>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $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>'; $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>'; $target = '<div editor_component="component_name" style="width:400px;height:300px;"></div>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $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" />'; $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" />'; $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)); $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()" />'; $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" />'; $target = '<img src="./foo/bar.jpg" alt="Picture" editor_component="component_name" />';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $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()" />'; $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" />'; $target = '<img src="./foo/bar.jpg" alt="Picture" editor_component="component_name" />';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<img somekey="somevalue" otherkey="othervalue" onkeypress="alert(\'xss\');" editor_component="component_name" />'; $source = '<img somekey="somevalue" otherkey="othervalue" onkeypress="alert(\'xss\');" editor_component="component_name" />';
$target = ''; $target = '';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, false, false)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, false, false));
} }
public function testHTMLFilterWidgetCode() 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" />'; $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>'; $target = '<p>Hello World</p>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $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" />'; $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="" />'; $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)); $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" />'; $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="" />'; $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)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, true, true, true));
} }
public function testHTMLFilterUserContentID() public function testHTMLFilterUserContentID()
{ {
$source = '<p id="foobar">Hello World!</p>'; $source = '<p id="foobar">Hello World!</p>';
$target = '<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)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<p id="user_content_foobar">Hello World!</p>'; $source = '<p id="user_content_foobar">Hello World!</p>';
$target = '<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)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
} }
public function testHTMLFilterMiscellaneous() public function testHTMLFilterMiscellaneous()
{ {
// data-file-srl attribute // data-file-srl attribute
$source = '<p><img src="foo.jpg" alt="foobar" data-file-srl="1234" /></p>'; $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>'; $target = '<p><img src="foo.jpg" alt="foobar" data-file-srl="1234" /></p>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
$source = '<p><img src="foo.jpg" alt="foobar" data-file-srl="javascript:xss()" /></p>'; $source = '<p><img src="foo.jpg" alt="foobar" data-file-srl="javascript:xss()" /></p>';
$target = '<p><img src="foo.jpg" alt="foobar" /></p>'; $target = '<p><img src="foo.jpg" alt="foobar" /></p>';
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source)); $this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
} }
public function testHTMLFilterFixMediaUrls() public function testHTMLFilterFixMediaUrls()
{ {
$baseurl = '/' . basename(dirname(dirname(dirname(dirname(__DIR__))))) . '/'; $baseurl = '/' . basename(dirname(dirname(dirname(dirname(__DIR__))))) . '/';
$content = Rhymix\Framework\Filters\HTMLFilter::fixRelativeUrls('<img src="files/attach/foobar.jpg" alt="TEST" />'); $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); $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" />'); $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->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')); $this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.18.214', '192.168.17.255/23'));
} }
public function testIPv6CIDR() public function testIPv6CIDR()
{ {
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('::1', '::1/128')); $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->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')); $this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('2405:8100::1234', '2400:cb00::ffff:1234/96'));
} }
public function testIPv4Wildcard() public function testIPv4Wildcard()
{ {
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.134.*')); $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.*.*'));
$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() public function testIPv4Hyphen()
{ {
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.134.0-192.168.134.255')); $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.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')); $this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.100.255-192.168.133.19'));
} }
public function testValidator() public function testValidator()
{ {
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::validateRange('192.168.0.1')); $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->assertTrue(Rhymix\Framework\Filters\IpFilter::validateRange('2400:cb00::/32'));
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::validateRange('192.168.0.0~192.168.255.255')); $this->assertFalse(Rhymix\Framework\Filters\IpFilter::validateRange('192.168.0.0~192.168.255.255'));
} }
public function testLegacy() public function testLegacy()
{ {
$this->assertTrue(\IpFilter::filter(array('192.168.134.241'), '192.168.134.241')); $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->assertTrue(\IpFilter::filter(array('192.168.*'), '192.168.134.241'));
$this->assertFalse(\IpFilter::filter(array('127.0.0.1'), '192.168.134.241')); $this->assertFalse(\IpFilter::filter(array('127.0.0.1'), '192.168.134.241'));
} }
public function testCloudFlareRealIP() public function testCloudFlareRealIP()
{ {
$_SERVER['HTTP_CF_CONNECTING_IP'] = '192.168.134.241'; $_SERVER['HTTP_CF_CONNECTING_IP'] = '192.168.134.241';
$_SERVER['REMOTE_ADDR'] = '192.168.10.1'; $_SERVER['REMOTE_ADDR'] = '192.168.10.1';
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::getCloudFlareRealIP()); $this->assertFalse(Rhymix\Framework\Filters\IpFilter::getCloudFlareRealIP());
$this->assertEquals('192.168.10.1', $_SERVER['REMOTE_ADDR']); $this->assertEquals('192.168.10.1', $_SERVER['REMOTE_ADDR']);
$_SERVER['REMOTE_ADDR'] = '108.162.192.121'; $_SERVER['REMOTE_ADDR'] = '108.162.192.121';
$this->assertEquals('192.168.134.241', Rhymix\Framework\Filters\IpFilter::getCloudFlareRealIP()); $this->assertEquals('192.168.134.241', Rhymix\Framework\Filters\IpFilter::getCloudFlareRealIP());
$this->assertEquals('192.168.134.241', $_SERVER['REMOTE_ADDR']); $this->assertEquals('192.168.134.241', $_SERVER['REMOTE_ADDR']);
unset($_SERVER['HTTP_CF_CONNECTING_IP']); unset($_SERVER['HTTP_CF_CONNECTING_IP']);
$_SERVER['REMOTE_ADDR'] = '192.168.10.1'; $_SERVER['REMOTE_ADDR'] = '192.168.10.1';
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::getCloudFlareRealIP()); $this->assertFalse(Rhymix\Framework\Filters\IpFilter::getCloudFlareRealIP());

View file

@ -7,19 +7,19 @@ class MediaFilterTest extends \Codeception\TestCase\Test
// whitelist as array. // whitelist as array.
$this->assertTrue(in_array('www.youtube.com/', Rhymix\Framework\Filters\MediaFilter::getWhitelist())); $this->assertTrue(in_array('www.youtube.com/', Rhymix\Framework\Filters\MediaFilter::getWhitelist()));
$this->assertFalse(in_array('random-website.com/', Rhymix\Framework\Filters\MediaFilter::getWhitelist())); $this->assertFalse(in_array('random-website.com/', Rhymix\Framework\Filters\MediaFilter::getWhitelist()));
// whitelist as regex. // whitelist as regex.
$this->assertTrue(strpos(Rhymix\Framework\Filters\MediaFilter::getWhitelistRegex(), '|www\.youtube\.com/') !== false); $this->assertTrue(strpos(Rhymix\Framework\Filters\MediaFilter::getWhitelistRegex(), '|www\.youtube\.com/') !== false);
$this->assertFalse(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. // Match individual URL against whitelist.
$this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('https://www.youtube.com/v')); $this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('https://www.youtube.com/v'));
$this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('http://www-youtube.com/v')); $this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('http://www-youtube.com/v'));
// Match protocol-relative URLs. // Match protocol-relative URLs.
$this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('//www.youtube.com/v')); $this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('//www.youtube.com/v'));
$this->assertFalse(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. // Check deprecated methods for compatibility.
$this->assertTrue(in_array('www.youtube.com/', Rhymix\Framework\Filters\MediaFilter::getIframeWhitelist())); $this->assertTrue(in_array('www.youtube.com/', Rhymix\Framework\Filters\MediaFilter::getIframeWhitelist()));
$this->assertFalse(strpos(Rhymix\Framework\Filters\MediaFilter::getObjectWhitelistRegex(), 'www.youtube.com/') !== false); $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->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchIframeWhitelist('//www.youtube.com/v'));
$this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchObjectWhitelist('//www-youtube.com/v')); $this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchObjectWhitelist('//www-youtube.com/v'));
} }
public function testAddPrefix() public function testAddPrefix()
{ {
$this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('http://some.custom.website.com/video.mp4')); $this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('http://some.custom.website.com/video.mp4'));
Rhymix\Framework\Filters\MediaFilter::addPrefix('*.custom.website.com/'); Rhymix\Framework\Filters\MediaFilter::addPrefix('*.custom.website.com/');
$this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('http://some.custom.website.com/video.mp4')); $this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('http://some.custom.website.com/video.mp4'));
} }
public function testRemoveEmbeddedMedia() public function testRemoveEmbeddedMedia()
{ {
$tests = array( $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 class="foo" editor_component="multimedia_link" /></div>' => '<div></div>',
'<div><img editor_component="multimedia_link"></img></div>' => '<div></div>', '<div><img editor_component="multimedia_link"></img></div>' => '<div></div>',
); );
foreach ($tests as $from => $to) foreach ($tests as $from => $to)
{ {
$this->assertEquals($to, Rhymix\Framework\Filters\MediaFilter::removeEmbeddedMedia($from)); $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'), 'nosuch' => array('common:no.such.config', 'member:no.such.config.either', 'intval'),
'single' => 'member:identifier', 'single' => 'member:identifier',
)); ));
$this->assertEquals(config('db.type'), $consolidated['dbtype']); $this->assertEquals(config('db.type'), $consolidated['dbtype']);
$this->assertEquals(tobool($member_config->enable_join), $consolidated['member']); $this->assertEquals(tobool($member_config->enable_join), $consolidated['member']);
$this->assertEquals(0, $consolidated['nosuch']); $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); $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('AD', array_first($sort_code_2)->iso_3166_1_alpha2);
$this->assertEquals('AND', array_first_key($sort_code_2)); $this->assertEquals('AND', array_first_key($sort_code_2));
$sort_code_3 = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_CODE_3); $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($sort_code_3)->iso_3166_1_alpha3);
$this->assertEquals('ABW', array_first_key($sort_code_3)); $this->assertEquals('ABW', array_first_key($sort_code_3));
$sort_code_n = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_CODE_NUMERIC); $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('004', array_first($sort_code_n)->iso_3166_1_numeric);
$this->assertEquals('AFG', array_first_key($sort_code_n)); $this->assertEquals('AFG', array_first_key($sort_code_n));
$sort_cctld = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_CCTLD); $sort_cctld = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_CCTLD);
$this->assertEquals('zw', array_last($sort_cctld)->cctld); $this->assertEquals('zw', array_last($sort_cctld)->cctld);
$this->assertEquals('ZWE', array_last_key($sort_cctld)); $this->assertEquals('ZWE', array_last_key($sort_cctld));
$sort_english = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_NAME_ENGLISH); $sort_english = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_NAME_ENGLISH);
$this->assertEquals('Afghanistan', array_first($sort_english)->name_english); $this->assertEquals('Afghanistan', array_first($sort_english)->name_english);
$this->assertEquals('AFG', array_first_key($sort_english)); $this->assertEquals('AFG', array_first_key($sort_english));
$this->assertEquals('Åland Islands', array_last($sort_english)->name_english); $this->assertEquals('Åland Islands', array_last($sort_english)->name_english);
$this->assertEquals('ALA', array_last_key($sort_english)); $this->assertEquals('ALA', array_last_key($sort_english));
$sort_korean = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_NAME_KOREAN); $sort_korean = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_NAME_KOREAN);
$this->assertEquals('가나', array_first($sort_korean)->name_korean); $this->assertEquals('가나', array_first($sort_korean)->name_korean);
$this->assertEquals('GHA', array_first_key($sort_korean)); $this->assertEquals('GHA', array_first_key($sort_korean));
$this->assertEquals('홍콩', array_last($sort_korean)->name_korean); $this->assertEquals('홍콩', array_last($sort_korean)->name_korean);
$this->assertEquals('HKG', array_last_key($sort_korean)); $this->assertEquals('HKG', array_last_key($sort_korean));
$sort_native = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_NAME_NATIVE); $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('Amerika Sāmoa', array_first($sort_native)->name_native);
$this->assertEquals('대한민국', $sort_native['KOR']->name_korean); $this->assertEquals('대한민국', $sort_native['KOR']->name_korean);
$this->assertEquals('United States of America', $sort_native['USA']->name_english); $this->assertEquals('United States of America', $sort_native['USA']->name_english);
$this->assertEquals('nz', $sort_native['NZL']->cctld); $this->assertEquals('nz', $sort_native['NZL']->cctld);
} }
public function testGetCallingCodeByCountryCode() public function testGetCallingCodeByCountryCode()
{ {
$this->assertEquals('82', Rhymix\Framework\i18n::getCallingCodeByCountryCode('KOR')); $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->assertEquals('44-1624', Rhymix\Framework\i18n::getCallingCodeByCountryCode('IMN'));
$this->assertNull(Rhymix\Framework\i18n::getCallingCodeByCountryCode('XXX')); $this->assertNull(Rhymix\Framework\i18n::getCallingCodeByCountryCode('XXX'));
} }
public function testGetCountryCodeByCallingCode() public function testGetCountryCodeByCallingCode()
{ {
$this->assertEquals('KOR', Rhymix\Framework\i18n::getCountryCodeByCallingCode('82')); $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('ASM', Rhymix\Framework\i18n::getCountryCodeByCallingCode('1-684'));
$this->assertEquals('AS', Rhymix\Framework\i18n::getCountryCodeByCallingCode('1684', 2)); $this->assertEquals('AS', Rhymix\Framework\i18n::getCountryCodeByCallingCode('1684', 2));
} }
public function testFormatPhoneNumber() public function testFormatPhoneNumber()
{ {
$this->assertEquals('(+82) 010-2345-6789', Rhymix\Framework\i18n::formatPhoneNumber('01023456789', '82')); $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('selectTest1', $query->name);
$this->assertEquals('SELECT', $query->type); $this->assertEquals('SELECT', $query->type);
$this->assertTrue($query->select_distinct); $this->assertTrue($query->select_distinct);
$this->assertTrue($query->tables['documents'] instanceof Rhymix\Framework\Parsers\DBQuery\Table); $this->assertTrue($query->tables['documents'] instanceof Rhymix\Framework\Parsers\DBQuery\Table);
$this->assertNull($query->tables['documents']->alias); $this->assertNull($query->tables['documents']->alias);
$this->assertEquals('documents', $query->tables['documents']->name); $this->assertEquals('documents', $query->tables['documents']->name);
$this->assertEquals(1, count($query->columns)); $this->assertEquals(1, count($query->columns));
$this->assertEquals('*', $query->columns[0]->name); $this->assertEquals('*', $query->columns[0]->name);
$this->assertTrue($query->columns[0]->is_expression); $this->assertTrue($query->columns[0]->is_expression);
$this->assertTrue($query->columns[0]->is_wildcard); $this->assertTrue($query->columns[0]->is_wildcard);
$this->assertEquals(2, count($query->conditions)); $this->assertEquals(2, count($query->conditions));
$this->assertTrue($query->conditions[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition); $this->assertTrue($query->conditions[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition);
$this->assertTrue($query->conditions[1] instanceof Rhymix\Framework\Parsers\DBQuery\ConditionGroup); $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->assertEquals('PUBLIC', $query->conditions[1]->conditions[1]->default);
$this->assertFalse($query->conditions[1]->conditions[1]->not_null); $this->assertFalse($query->conditions[1]->conditions[1]->not_null);
$this->assertEquals('OR', $query->conditions[1]->conditions[1]->pipe); $this->assertEquals('OR', $query->conditions[1]->conditions[1]->pipe);
$this->assertTrue($query->navigation instanceof Rhymix\Framework\Parsers\DBQuery\Navigation); $this->assertTrue($query->navigation instanceof Rhymix\Framework\Parsers\DBQuery\Navigation);
$this->assertTrue($query->navigation->orderby[0] instanceof Rhymix\Framework\Parsers\DBQuery\OrderBy); $this->assertTrue($query->navigation->orderby[0] instanceof Rhymix\Framework\Parsers\DBQuery\OrderBy);
$this->assertEquals('sort_index', $query->navigation->orderby[0]->var); $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('page', $query->navigation->page->var);
$this->assertEquals('1', $query->navigation->page->default); $this->assertEquals('1', $query->navigation->page->default);
} }
public function testSimpleSelect() public function testSimpleSelect()
{ {
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectTest1.xml'); $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'); $args = array('member_srl' => 1234, 'regdate_more' => '20200707120000', 'page' => 3, 'order_type' => 'asc');
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams(); $params = $query->getQueryParams();
$this->assertEquals('SELECT DISTINCT * FROM `rx_documents` AS `documents` ' . $this->assertEquals('SELECT DISTINCT * FROM `rx_documents` AS `documents` ' .
'WHERE `member_srl` IN (?) AND (`regdate` >= ? OR `status` = ?) ' . 'WHERE `member_srl` IN (?) AND (`regdate` >= ? OR `status` = ?) ' .
'ORDER BY `list_order` ASC LIMIT 40, 20', $sql); 'ORDER BY `list_order` ASC LIMIT 40, 20', $sql);
$this->assertEquals(['1234', '20200707120000', 'PUBLIC'], $params); $this->assertEquals(['1234', '20200707120000', 'PUBLIC'], $params);
$sql = $query->getQueryString('rx_', $args, [], 1); $sql = $query->getQueryString('rx_', $args, [], 1);
$params = $query->getQueryParams(); $params = $query->getQueryParams();
$this->assertEquals('SELECT COUNT(*) AS `count` FROM (SELECT DISTINCT * FROM `rx_documents` AS `documents` ' . $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); 'WHERE `member_srl` IN (?) AND (`regdate` >= ? OR `status` = ?)) AS `subquery`', $sql);
$this->assertEquals(['1234', '20200707120000', 'PUBLIC'], $params); $this->assertEquals(['1234', '20200707120000', 'PUBLIC'], $params);
unset($args['page']); unset($args['page']);
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$this->assertEquals('SELECT DISTINCT * FROM `rx_documents` AS `documents` ' . $this->assertEquals('SELECT DISTINCT * FROM `rx_documents` AS `documents` ' .
'WHERE `member_srl` IN (?) AND (`regdate` >= ? OR `status` = ?) ' . 'WHERE `member_srl` IN (?) AND (`regdate` >= ? OR `status` = ?) ' .
'ORDER BY `list_order` ASC LIMIT 20', $sql); 'ORDER BY `list_order` ASC LIMIT 20', $sql);
$args['list_count'] = 0; $args['list_count'] = 0;
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$this->assertEquals('SELECT DISTINCT * FROM `rx_documents` AS `documents` ' . $this->assertEquals('SELECT DISTINCT * FROM `rx_documents` AS `documents` ' .
'WHERE `member_srl` IN (?) AND (`regdate` >= ? OR `status` = ?) ' . 'WHERE `member_srl` IN (?) AND (`regdate` >= ? OR `status` = ?) ' .
'ORDER BY `list_order` ASC', $sql); 'ORDER BY `list_order` ASC', $sql);
} }
public function testSelectWithExpressions() public function testSelectWithExpressions()
{ {
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectTest2.xml'); $query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectTest2.xml');
$args = array('voted_count' => 20, 'date' => '20201021'); $args = array('voted_count' => 20, 'date' => '20201021');
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams(); $params = $query->getQueryParams();
$this->assertEquals('documents', $query->tables['d']->name); $this->assertEquals('documents', $query->tables['d']->name);
$this->assertEquals('SELECT readed_count + trackback_count AS `count` ' . $this->assertEquals('SELECT readed_count + trackback_count AS `count` ' .
'FROM `rx_documents` AS `d` WHERE `voted_count` + `blamed_count` >= ? AND LEFT(`regdate`, 8) = ?', $sql); 'FROM `rx_documents` AS `d` WHERE `voted_count` + `blamed_count` >= ? AND LEFT(`regdate`, 8) = ?', $sql);
$this->assertEquals([20, '20201021'], $params); $this->assertEquals([20, '20201021'], $params);
} }
public function testSelectWithSearch() public function testSelectWithSearch()
{ {
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectTest3.xml'); $query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectTest3.xml');
$args = array('s_content' => '"I love you" -"I hate you"'); $args = array('s_content' => '"I love you" -"I hate you"');
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams(); $params = $query->getQueryParams();
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE (`content` LIKE ? AND `content` NOT LIKE ?)', $sql); $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); $this->assertEquals(['%I love you%', '%I hate you%'], $params);
$args = array('s_content' => '(foo AND bar) -baz "Rhymix is the best"'); $args = array('s_content' => '(foo AND bar) -baz "Rhymix is the best"');
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams(); $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('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); $this->assertEquals(['%foo%', '%bar%', '%baz%', '%Rhymix is the best%'], $params);
$args = array('s_content' => 'revenue +3.5% -"apos\'tro_phe"'); $args = array('s_content' => 'revenue +3.5% -"apos\'tro_phe"');
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams(); $params = $query->getQueryParams();
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE (`content` LIKE ? AND `content` LIKE ? AND `content` NOT LIKE ?)', $sql); $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); $this->assertEquals(['%revenue%', '%+3.5\\%%', '%apos\'tro\\_phe%'], $params);
$args = array('s_content' => '(search keyword\\Z) -"-42"'); $args = array('s_content' => '(search keyword\\Z) -"-42"');
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams(); $params = $query->getQueryParams();
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE ((`content` LIKE ? AND `content` LIKE ?) AND `content` NOT LIKE ?)', $sql); $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); $this->assertEquals(['%search%', '%keyword\\\\Z%', '%-42%'], $params);
$args = array('s_content' => '"한글" AND -&quot;검색&quot; (-키워드 OR 라이믹스)'); $args = array('s_content' => '"한글" AND -&quot;검색&quot; (-키워드 OR 라이믹스)');
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams(); $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('SELECT * FROM `rx_documents` AS `documents` WHERE (`content` LIKE ? AND `content` NOT LIKE ? AND (`content` NOT LIKE ? OR `content` LIKE ?))', $sql);
$this->assertEquals(['%한글%', '%검색%', '%키워드%', '%라이믹스%'], $params); $this->assertEquals(['%한글%', '%검색%', '%키워드%', '%라이믹스%'], $params);
$args = array('s_content' => '검색 OR (키워드 AND -"라이믹스 유닛테스트")'); $args = array('s_content' => '검색 OR (키워드 AND -"라이믹스 유닛테스트")');
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams(); $params = $query->getQueryParams();
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE (`content` LIKE ? OR (`content` LIKE ? AND `content` NOT LIKE ?))', $sql); $this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE (`content` LIKE ? OR (`content` LIKE ? AND `content` NOT LIKE ?))', $sql);
$this->assertEquals(['%검색%', '%키워드%', '%라이믹스 유닛테스트%'], $params); $this->assertEquals(['%검색%', '%키워드%', '%라이믹스 유닛테스트%'], $params);
} }
public function testJoin1() public function testJoin1()
{ {
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectJoinTest1.xml'); $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->assertTrue($query->tables['member'] instanceof Rhymix\Framework\Parsers\DBQuery\Table);
$this->assertNull($query->tables['member']->join_type); $this->assertNull($query->tables['member']->join_type);
$this->assertEmpty($query->tables['member']->join_conditions); $this->assertEmpty($query->tables['member']->join_conditions);
$this->assertEquals(2, count($query->columns)); $this->assertEquals(2, count($query->columns));
$this->assertEquals('member.member_srl', $query->columns[0]->name); $this->assertEquals('member.member_srl', $query->columns[0]->name);
$this->assertFalse($query->columns[0]->is_expression); $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->assertEquals('count', $query->columns[1]->alias);
$this->assertTrue($query->columns[1]->is_expression); $this->assertTrue($query->columns[1]->is_expression);
$this->assertFalse($query->columns[1]->is_wildcard); $this->assertFalse($query->columns[1]->is_wildcard);
$this->assertEquals(4, count($query->conditions)); $this->assertEquals(4, count($query->conditions));
$this->assertEquals('documents.member_srl', $query->conditions[0]->column); $this->assertEquals('documents.member_srl', $query->conditions[0]->column);
$this->assertEquals('member.member_srl', $query->conditions[0]->default); $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->assertEquals('member.member_srl', $query->conditions[1]->default);
$this->assertNull($query->conditions[1]->var); $this->assertNull($query->conditions[1]->var);
$this->assertEquals('AND', $query->conditions[1]->pipe); $this->assertEquals('AND', $query->conditions[1]->pipe);
$this->assertTrue($query->groupby instanceof Rhymix\Framework\Parsers\DBQuery\GroupBy); $this->assertTrue($query->groupby instanceof Rhymix\Framework\Parsers\DBQuery\GroupBy);
$this->assertEquals('member.member_srl', $query->groupby->columns[0]); $this->assertEquals('member.member_srl', $query->groupby->columns[0]);
$this->assertEquals(1, count($query->groupby->having)); $this->assertEquals(1, count($query->groupby->having));
$this->assertTrue($query->groupby->having[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition); $this->assertTrue($query->groupby->having[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition);
$this->assertEquals('member.member_srl', $query->groupby->having[0]->column); $this->assertEquals('member.member_srl', $query->groupby->having[0]->column);
$this->assertEquals('notequal', $query->groupby->having[0]->operation); $this->assertEquals('notequal', $query->groupby->having[0]->operation);
$args = array( $args = array(
'document_srl_list' => [12, 34, 56], 'exclude_member_srl' => 4, 'document_srl_list' => [12, 34, 56], 'exclude_member_srl' => 4,
'if_table' => true, 'if_column' => true, 'if_condition1' => true, 'if_groupby' => true, 'if_table' => true, 'if_column' => true, 'if_condition1' => true, 'if_groupby' => true,
); );
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams(); $params = $query->getQueryParams();
$this->assertEquals('SELECT `member`.`member_srl`, COUNT(*) AS `count` FROM `rx_documents` AS `documents`, `rx_member` AS `member` ' . $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` ' . '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); 'AND `documents`.`document_srl` IN (?, ?, ?) GROUP BY `member`.`member_srl` HAVING `member`.`member_srl` != ?', $sql);
$this->assertEquals(['12', '34', '56', '4'], $params); $this->assertEquals(['12', '34', '56', '4'], $params);
$args = array( $args = array(
'document_srl_list' => [12, 34, 56], 'exclude_member_srl' => 4, 'exclude_document_srl_list' => '78,90', '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, 'if_table' => true, 'if_column' => true, 'if_condition2' => true,
); );
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams(); $params = $query->getQueryParams();
$this->assertEquals('SELECT `member`.`member_srl`, COUNT(*) AS `count` FROM `rx_documents` AS `documents`, `rx_member` AS `member` ' . $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 (?, ?, ?) ' . 'WHERE `documents`.`member_srl` = `member`.`member_srl` AND `documents`.`document_srl` IN (?, ?, ?) ' .
'AND `documents`.`document_srl` NOT IN (?, ?)', $sql); 'AND `documents`.`document_srl` NOT IN (?, ?)', $sql);
$this->assertEquals(['12', '34', '56', '78', '90'], $params); $this->assertEquals(['12', '34', '56', '78', '90'], $params);
$args = array( $args = array(
'document_srl_list' => [12, 34, 56], 'exclude_member_srl' => 4, 'document_srl_list' => [12, 34, 56], 'exclude_member_srl' => 4,
); );
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams(); $params = $query->getQueryParams();
$this->assertEquals('SELECT `member`.`member_srl` FROM `rx_documents` AS `documents` ' . $this->assertEquals('SELECT `member`.`member_srl` FROM `rx_documents` AS `documents` ' .
'WHERE `documents`.`member_srl` = `member`.`member_srl` AND `documents`.`document_srl` IN (?, ?, ?)', $sql); 'WHERE `documents`.`member_srl` = `member`.`member_srl` AND `documents`.`document_srl` IN (?, ?, ?)', $sql);
$this->assertEquals(['12', '34', '56'], $params); $this->assertEquals(['12', '34', '56'], $params);
} }
public function testJoin2() public function testJoin2()
{ {
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectJoinTest2.xml'); $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('documents.member_srl', $query->tables['member']->join_conditions[0]->column);
$this->assertEquals('member.member_srl', $query->tables['member']->join_conditions[0]->default); $this->assertEquals('member.member_srl', $query->tables['member']->join_conditions[0]->default);
$this->assertNull($query->tables['member']->join_conditions[0]->var); $this->assertNull($query->tables['member']->join_conditions[0]->var);
$this->assertEquals(2, count($query->columns)); $this->assertEquals(2, count($query->columns));
$this->assertEquals('documents.*', $query->columns[0]->name); $this->assertEquals('documents.*', $query->columns[0]->name);
$this->assertTrue($query->columns[0]->is_expression); $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->assertEquals('member_regdate', $query->columns[1]->alias);
$this->assertFalse($query->columns[1]->is_expression); $this->assertFalse($query->columns[1]->is_expression);
$this->assertFalse($query->columns[1]->is_wildcard); $this->assertFalse($query->columns[1]->is_wildcard);
$args = array('document_srl_list' => [12, 34, 56]); $args = array('document_srl_list' => [12, 34, 56]);
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams(); $params = $query->getQueryParams();
$this->assertEquals('SELECT `documents`.*, `member`.`regdate` AS `member_regdate` FROM `rx_documents` AS `documents` ' . $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` ' . 'LEFT JOIN `rx_member` AS `member` ON `documents`.`member_srl` = `member`.`member_srl` ' .
'WHERE `documents`.`document_srl` IN (?, ?, ?)', $sql); 'WHERE `documents`.`document_srl` IN (?, ?, ?)', $sql);
$this->assertEquals(['12', '34', '56'], $params); $this->assertEquals(['12', '34', '56'], $params);
} }
public function testSubquery1() public function testSubquery1()
{ {
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectSubqueryTest1.xml'); $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(1, count($query->columns));
$this->assertEquals('documents.member_srl', $query->conditions[0]->column); $this->assertEquals('documents.member_srl', $query->conditions[0]->column);
$this->assertEquals('m.member_srl', $query->conditions[0]->default); $this->assertEquals('m.member_srl', $query->conditions[0]->default);
$sql = $query->getQueryString('rx_', []); $sql = $query->getQueryString('rx_', []);
$params = $query->getQueryParams(); $params = $query->getQueryParams();
$this->assertEquals('SELECT `documents`.* FROM `rx_documents` AS `documents`, ' . $this->assertEquals('SELECT `documents`.* FROM `rx_documents` AS `documents`, ' .
'(SELECT `member_srl`, `nick_name` FROM `rx_member` AS `member`) AS `m` ' . '(SELECT `member_srl`, `nick_name` FROM `rx_member` AS `member`) AS `m` ' .
'WHERE `documents`.`member_srl` = `m`.`member_srl`', $sql); 'WHERE `documents`.`member_srl` = `m`.`member_srl`', $sql);
$this->assertEquals([], $params); $this->assertEquals([], $params);
} }
public function testSubquery2() public function testSubquery2()
{ {
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectSubqueryTest2.xml'); $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[1]->is_wildcard);
$this->assertTrue($query->columns[1]->columns[2]->is_expression); $this->assertTrue($query->columns[1]->columns[2]->is_expression);
$this->assertFalse($query->columns[1]->columns[2]->is_wildcard); $this->assertFalse($query->columns[1]->columns[2]->is_wildcard);
$sql = $query->getQueryString('rx_', []); $sql = $query->getQueryString('rx_', []);
$params = $query->getQueryParams(); $params = $query->getQueryParams();
$this->assertEquals('SELECT `member`.*, (SELECT `documents`.`document_srl`, `documents`.*, COUNT(*) AS `count` FROM `rx_documents` AS `documents` ' . $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` ' . 'WHERE `member`.`member_srl` = `documents`.`member_srl`) AS `document_count` ' .
'FROM `rx_member` AS `member`', $sql); 'FROM `rx_member` AS `member`', $sql);
$this->assertEquals([], $params); $this->assertEquals([], $params);
// Test count-only query (#1575) // Test count-only query (#1575)
$sql = $query->getQueryString('rx_', [], [], 1); $sql = $query->getQueryString('rx_', [], [], 1);
$params = $query->getQueryParams(); $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` ' . $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` ' . 'WHERE `member`.`member_srl` = `documents`.`member_srl`) AS `document_count` ' .
'FROM `rx_member` AS `member`) AS `subquery`', $sql); 'FROM `rx_member` AS `member`) AS `subquery`', $sql);
$this->assertEquals([], $params); $this->assertEquals([], $params);
} }
public function testSubquery3() public function testSubquery3()
{ {
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectSubqueryTest3.xml'); $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->assertTrue($query->conditions[1]->columns[0]->is_expression);
$this->assertEquals('member.member_srl', $query->conditions[1]->conditions[0]->column); $this->assertEquals('member.member_srl', $query->conditions[1]->conditions[0]->column);
$this->assertEquals('OR', $query->conditions[1]->pipe); $this->assertEquals('OR', $query->conditions[1]->pipe);
$sql = $query->getQueryString('rx_', ['is_admin' => 'Y']); $sql = $query->getQueryString('rx_', ['is_admin' => 'Y']);
$params = $query->getQueryParams(); $params = $query->getQueryParams();
$this->assertEquals('SELECT * FROM `rx_member` AS `member` WHERE `is_admin` != ? OR `regdate` = ' . $this->assertEquals('SELECT * FROM `rx_member` AS `member` WHERE `is_admin` != ? OR `regdate` = ' .
'(SELECT MAX(regdate) AS `max_regdate` FROM `rx_documents` AS `documents` ' . '(SELECT MAX(regdate) AS `max_regdate` FROM `rx_documents` AS `documents` ' .
'WHERE `member`.`member_srl` = `documents`.`member_srl`)', $sql); 'WHERE `member`.`member_srl` = `documents`.`member_srl`)', $sql);
$this->assertEquals(['Y'], $params); $this->assertEquals(['Y'], $params);
} }
public function testCountQuery() public function testCountQuery()
{ {
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectCountTest1.xml'); $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` ' . $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` != ?) ' . 'WHERE `documents`.`member_srl` = `member`.`member_srl` GROUP BY `member`.`member_srl` HAVING `member`.`member_srl` != ?) ' .
'AS `subquery`', $sql); 'AS `subquery`', $sql);
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectCountTest2.xml'); $query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectCountTest2.xml');
$sql = $query->getQueryString('rx_', ['document_srl_list' => [100, 110, 120]], [], true); $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` ' . $this->assertEquals('SELECT COUNT(*) AS `count` FROM (SELECT DISTINCT `module_srl` FROM `rx_documents` AS `documents` ' .
'WHERE `document_srl` IN (?, ?, ?)) AS `subquery`', $sql); 'WHERE `document_srl` IN (?, ?, ?)) AS `subquery`', $sql);
} }
public function testIndexHintQuery() public function testIndexHintQuery()
{ {
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/indexHintTest1.xml'); $query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/indexHintTest1.xml');
$sql = $query->getQueryString('rx_', ['module_srl' => 82]); $sql = $query->getQueryString('rx_', ['module_srl' => 82]);
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` USE INDEX (`idx_module_srl`) ' . $this->assertEquals('SELECT * FROM `rx_documents` AS `documents` USE INDEX (`idx_module_srl`) ' .
'WHERE `module_srl` = ? ORDER BY `list_order` DESC LIMIT 20', $sql); 'WHERE `module_srl` = ? ORDER BY `list_order` DESC LIMIT 20', $sql);
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/indexHintTest2.xml'); $query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/indexHintTest2.xml');
$sql = $query->getQueryString('rx_', ['module_srl' => 82]); $sql = $query->getQueryString('rx_', ['module_srl' => 82]);
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` USE INDEX (`idx_module_list_order`) ' . $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); 'WHERE `module_srl` = ? ORDER BY `list_order` DESC LIMIT 20', $sql);
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/indexHintTest2.xml'); $query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/indexHintTest2.xml');
$sql = $query->getQueryString('rx_', ['module_srl' => 82, 'index_hint1' => 'idx_regdate']); $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`) ' . $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); 'WHERE `module_srl` = ? ORDER BY `list_order` DESC LIMIT 20', $sql);
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/indexHintTest2.xml'); $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']); $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`) ' . $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); 'WHERE `module_srl` = ? ORDER BY `list_order` DESC LIMIT 20', $sql);
} }
public function testInsertQuery() public function testInsertQuery()
{ {
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/insertTest.xml'); $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->assertEquals('ipaddress()', $query->columns[2]->default);
$this->assertTrue($query->update_duplicate); $this->assertTrue($query->update_duplicate);
$this->assertNull($query->groupby); $this->assertNull($query->groupby);
$args = array('document_srl' => 123, 'member_srl' => 456, 'point' => 7); $args = array('document_srl' => 123, 'member_srl' => 456, 'point' => 7);
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams(); $params = $query->getQueryParams();
$this->assertEquals('INSERT INTO `rx_document_voted_log` SET `document_srl` = ?, `member_srl` = ?, `ipaddress` = ?, `regdate` = ?, `point` = ? ' . $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); 'ON DUPLICATE KEY UPDATE `document_srl` = ?, `member_srl` = ?, `ipaddress` = ?, `regdate` = ?, `point` = ?', $sql);
$this->assertEquals(10, count($params)); $this->assertEquals(10, count($params));
@ -388,7 +388,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
$this->assertEquals('7', $params[4]); $this->assertEquals('7', $params[4]);
$this->assertEquals(array_slice($params, 0, 5), array_slice($params, 5, 5)); $this->assertEquals(array_slice($params, 0, 5), array_slice($params, 5, 5));
} }
public function testUpdateQuery() public function testUpdateQuery()
{ {
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/updateTest.xml'); $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->assertEquals('document_srl', $query->conditions[0]->column);
$this->assertNull($query->groupby); $this->assertNull($query->groupby);
$this->assertNull($query->navigation); $this->assertNull($query->navigation);
$args = array('document_srl' => 123, 'nick_name' => '닉네임', 'member_srl' => 456, 'voted_count' => 5); $args = array('document_srl' => 123, 'nick_name' => '닉네임', 'member_srl' => 456, 'voted_count' => 5);
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams(); $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('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->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('/^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]); $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'); $args = array('document_srl' => 123, 'member_srl' => 456, 'voted_count' => 5, 'regdate' => 'foo', 'last_update' => 'bar');
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams(); $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('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); $this->assertEquals(['456', '5', 'foo', 'bar', '123'], $params);
} }
public function testDeleteQuery() public function testDeleteQuery()
{ {
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/deleteTest.xml'); $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->assertTrue($query->conditions[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition);
$this->assertEquals('in', $query->conditions[0]->operation); $this->assertEquals('in', $query->conditions[0]->operation);
$this->assertEquals('document_srl_list', $query->conditions[0]->var); $this->assertEquals('document_srl_list', $query->conditions[0]->var);
$args = array('document_srl_list' => [12, 34, 56]); $args = array('document_srl_list' => [12, 34, 56]);
$sql = $query->getQueryString('rx_', $args); $sql = $query->getQueryString('rx_', $args);
$params = $query->getQueryParams(); $params = $query->getQueryParams();
$this->assertEquals('DELETE FROM `rx_documents` WHERE `document_srl` IN (?, ?, ?)', $sql); $this->assertEquals('DELETE FROM `rx_documents` WHERE `document_srl` IN (?, ?, ?)', $sql);
$this->assertEquals(['12', '34', '56'], $params); $this->assertEquals(['12', '34', '56'], $params);
} }
public function testEmptyString() public function testEmptyString()
{ {
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/emptyStringTest1.xml'); $query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/emptyStringTest1.xml');
$sql = $query->getQueryString('rx_', array( $sql = $query->getQueryString('rx_', array(
'nick_name' => '', 'nick_name' => '',
'document_srl' => 1234, 'document_srl' => 1234,
)); ));
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql); $this->assertEquals('UPDATE `rx_documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql);
$this->assertEquals(['', 1234], $query->getQueryParams()); $this->assertEquals(['', 1234], $query->getQueryParams());
$sql = $query->getQueryString('rx_', array( $sql = $query->getQueryString('rx_', array(
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString, 'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString,
'document_srl' => 1234, 'document_srl' => 1234,
)); ));
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = \'\' WHERE `document_srl` = ?', $sql); $this->assertEquals('UPDATE `rx_documents` SET `nick_name` = \'\' WHERE `document_srl` = ?', $sql);
$this->assertEquals([1234], $query->getQueryParams()); $this->assertEquals([1234], $query->getQueryParams());
$sql = $query->getQueryString('rx_', array( $sql = $query->getQueryString('rx_', array(
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString, 'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString,
'document_srl' => '', 'document_srl' => '',
)); ));
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = \'\'', $sql); $this->assertEquals('UPDATE `rx_documents` SET `nick_name` = \'\'', $sql);
$this->assertEquals([], $query->getQueryParams()); $this->assertEquals([], $query->getQueryParams());
$sql = $query->getQueryString('rx_', array( $sql = $query->getQueryString('rx_', array(
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString, 'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString,
'document_srl' => 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('UPDATE `rx_documents` SET `nick_name` = \'\' WHERE `document_srl` = \'\'', $sql);
$this->assertEquals([], $query->getQueryParams()); $this->assertEquals([], $query->getQueryParams());
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/emptyStringTest2.xml'); $query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/emptyStringTest2.xml');
$sql = $query->getQueryString('rx_', array( $sql = $query->getQueryString('rx_', array(
'category_srl' => 77, 'category_srl' => 77,
'nick_name' => '', 'nick_name' => '',
)); ));
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE `category_srl` = ?', $sql); $this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE `category_srl` = ?', $sql);
$this->assertEquals([77], $query->getQueryParams()); $this->assertEquals([77], $query->getQueryParams());
$sql = $query->getQueryString('rx_', array( $sql = $query->getQueryString('rx_', array(
'category_srl' => 88, 'category_srl' => 88,
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString, '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('SELECT * FROM `rx_documents` AS `documents` WHERE `category_srl` = ? AND `nick_name` = \'\'', $sql);
$this->assertEquals([88], $query->getQueryParams()); $this->assertEquals([88], $query->getQueryParams());
} }
public function testNullValue() public function testNullValue()
{ {
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/nullValueTest1.xml'); $query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/nullValueTest1.xml');
$sql = $query->getQueryString('rx_', array( $sql = $query->getQueryString('rx_', array(
'user_name' => null, 'user_name' => null,
'nick_name' => 'TEST', '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('UPDATE `rx_documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql);
$this->assertEquals(['TEST', 1234], $query->getQueryParams()); $this->assertEquals(['TEST', 1234], $query->getQueryParams());
$sql = $query->getQueryString('rx_', array( $sql = $query->getQueryString('rx_', array(
'user_name' => new \Rhymix\Framework\Parsers\DBQuery\NullValue, 'user_name' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
'nick_name' => 'TEST', '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('UPDATE `rx_documents` SET `user_name` = NULL, `nick_name` = ? WHERE `document_srl` = ?', $sql);
$this->assertEquals(['TEST', 1234], $query->getQueryParams()); $this->assertEquals(['TEST', 1234], $query->getQueryParams());
$this->tester->expectThrowable('Exception', function() use($query) { $this->tester->expectThrowable('Exception', function() use($query) {
$query->getQueryString('rx_', array( $query->getQueryString('rx_', array(
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\NullValue, 'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
'document_srl' => 1234, 'document_srl' => 1234,
)); ));
}); });
$this->tester->expectThrowable('Exception', function() use($query) { $this->tester->expectThrowable('Exception', function() use($query) {
$query->getQueryString('rx_', array( $query->getQueryString('rx_', array(
'nick_name' => null, 'nick_name' => null,
'document_srl' => 1234, 'document_srl' => 1234,
)); ));
}); });
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/nullValueTest2.xml'); $query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/nullValueTest2.xml');
$sql = $query->getQueryString('rx_', array( $sql = $query->getQueryString('rx_', array(
'member_srl' => null, 'member_srl' => null,
'module_srl' => 456, 'module_srl' => 456,
)); ));
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE `module_srl` = ?', $sql); $this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE `module_srl` = ?', $sql);
$this->assertEquals([456], $query->getQueryParams()); $this->assertEquals([456], $query->getQueryParams());
$sql = $query->getQueryString('rx_', array( $sql = $query->getQueryString('rx_', array(
'member_srl' => new \Rhymix\Framework\Parsers\DBQuery\NullValue, 'member_srl' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
'module_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('none', $table->columns['custom_date']->xetype);
$this->assertEquals('char', $table->columns['regdate']->type); $this->assertEquals('char', $table->columns['regdate']->type);
$this->assertEquals('date', $table->columns['regdate']->xetype); $this->assertEquals('date', $table->columns['regdate']->xetype);
$this->assertEquals(9, count($table->indexes)); $this->assertEquals(9, count($table->indexes));
$this->assertEquals(['module_srl' => 0, 'document_srl' => 0], $table->indexes['idx_module_document_srl']->columns); $this->assertEquals(['module_srl' => 0, 'document_srl' => 0], $table->indexes['idx_module_document_srl']->columns);
$this->assertEquals(['status' => 6], $table->indexes['idx_status']->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('SPATIAL', $table->indexes['spatial_geometry']->type);
$this->assertEquals('FULLTEXT', $table->indexes['fulltext_description']->type); $this->assertEquals('FULLTEXT', $table->indexes['fulltext_description']->type);
$this->assertEquals('WITH PARSER ngram', $table->indexes['fulltext_description']->options); $this->assertEquals('WITH PARSER ngram', $table->indexes['fulltext_description']->options);
$this->assertEquals(2, count($table->constraints)); $this->assertEquals(2, count($table->constraints));
$this->assertEquals('FOREIGN KEY', $table->constraints[0]->type); $this->assertEquals('FOREIGN KEY', $table->constraints[0]->type);
$this->assertEquals('module_srl', $table->constraints[0]->column); $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('CHECK', $table->constraints[1]->type);
$this->assertEquals('list_order < 0', $table->constraints[1]->condition); $this->assertEquals('list_order < 0', $table->constraints[1]->condition);
} }
public function testGetCreateQuery() public function testGetCreateQuery()
{ {
$table = Rhymix\Framework\Parsers\DBTableParser::loadXML(\RX_BASEDIR . 'tests/_data/dbtable/example.xml'); $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 class LangParserTest extends \Codeception\TestCase\Test
{ {
protected $_dir = 'tests/_data/lang'; protected $_dir = 'tests/_data/lang';
public function _before() public function _before()
{ {
$files = Rhymix\Framework\Storage::readDirectory(\RX_BASEDIR . $this->_dir); $files = Rhymix\Framework\Storage::readDirectory(\RX_BASEDIR . $this->_dir);
@ -15,7 +15,7 @@ class LangParserTest extends \Codeception\TestCase\Test
} }
} }
} }
public function _after() public function _after()
{ {
$files = Rhymix\Framework\Storage::readDirectory(\RX_BASEDIR . $this->_dir); $files = Rhymix\Framework\Storage::readDirectory(\RX_BASEDIR . $this->_dir);
@ -27,7 +27,7 @@ class LangParserTest extends \Codeception\TestCase\Test
} }
} }
} }
public function testConvertDirectory() public function testConvertDirectory()
{ {
Rhymix\Framework\Parsers\LangParser::convertDirectory(\RX_BASEDIR . $this->_dir, ['ko', 'en']); 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->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 . '/ja.php'));
$this->assertFalse(file_exists(\RX_BASEDIR . $this->_dir . '/fr.php')); $this->assertFalse(file_exists(\RX_BASEDIR . $this->_dir . '/fr.php'));
$lang = new stdClass; $lang = new stdClass;
include \RX_BASEDIR . $this->_dir . '/ko.php'; include \RX_BASEDIR . $this->_dir . '/ko.php';
$this->assertEquals('테스트 언어', $lang->testlang); $this->assertEquals('테스트 언어', $lang->testlang);
$this->assertEquals('<p>HTML<br>내용</p>', $lang->testhtml); $this->assertEquals('<p>HTML<br>내용</p>', $lang->testhtml);
$this->assertEquals(['foo' => '푸', 'bar' => '바'], $lang->testarray); $this->assertEquals(['foo' => '푸', 'bar' => '바'], $lang->testarray);
$lang = new stdClass; $lang = new stdClass;
include \RX_BASEDIR . $this->_dir . '/en.php'; include \RX_BASEDIR . $this->_dir . '/en.php';
$this->assertEquals('Test Lang', $lang->testlang); $this->assertEquals('Test Lang', $lang->testlang);
$this->assertEquals('<p>HTML<br>Content</p>', $lang->testhtml); $this->assertEquals('<p>HTML<br>Content</p>', $lang->testhtml);
$this->assertEquals(['foo' => 'FOO', 'bar' => 'BAR'], $lang->testarray); $this->assertEquals(['foo' => 'FOO', 'bar' => 'BAR'], $lang->testarray);
} }
public function testCompileXMLtoPHP() public function testCompileXMLtoPHP()
{ {
$in = \RX_BASEDIR . $this->_dir . '/lang.xml'; $in = \RX_BASEDIR . $this->_dir . '/lang.xml';
@ -58,7 +58,7 @@ class LangParserTest extends \Codeception\TestCase\Test
$this->assertEquals($out, $result); $this->assertEquals($out, $result);
$this->assertTrue(file_exists($result)); $this->assertTrue(file_exists($result));
$this->assertFalse(file_exists($noout)); $this->assertFalse(file_exists($noout));
$lang = new stdClass; $lang = new stdClass;
include \RX_BASEDIR . $this->_dir . '/ja.php'; include \RX_BASEDIR . $this->_dir . '/ja.php';
$this->assertEquals('テスト言語', $lang->testlang); $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('dispTestView', $info->default_index_act);
$this->assertEquals('dispTestAdminIndex', $info->admin_index_act); $this->assertEquals('dispTestAdminIndex', $info->admin_index_act);
$this->assertEquals('', $info->setup_index_act); $this->assertEquals('', $info->setup_index_act);
// Actions // Actions
$this->assertEquals('view', $info->action->dispTestView->type); $this->assertEquals('view', $info->action->dispTestView->type);
$this->assertEquals('guest', $info->action->dispTestView->grant); $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('true', $info->action->dispTestAdminIndex->standalone);
$this->assertEquals('GET|POST', $info->action->procTestAdminSubmitData->method); $this->assertEquals('GET|POST', $info->action->procTestAdminSubmitData->method);
$this->assertEquals([], $info->action->procTestAdminSubmitData->route); $this->assertEquals([], $info->action->procTestAdminSubmitData->route);
// Standalone attribute // Standalone attribute
$this->assertEquals('auto', $info->action->dispTestStandalone1->standalone); $this->assertEquals('auto', $info->action->dispTestStandalone1->standalone);
$this->assertEquals('false', $info->action->dispTestStandalone2->standalone); $this->assertEquals('false', $info->action->dispTestStandalone2->standalone);
$this->assertEquals('true', $info->action->dispTestStandalone3->standalone); $this->assertEquals('true', $info->action->dispTestStandalone3->standalone);
// Routes // Routes
$this->assertEquals(7, count($info->route->GET)); $this->assertEquals(7, count($info->route->GET));
$this->assertEquals('dispTestView', $info->route->GET['#^(?P<document_srl>[0-9]+)$#u']); $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('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('dispTestWrite', $info->route->GET['#^write$#u']);
$this->assertEquals(3, count($info->route->POST)); $this->assertEquals(3, count($info->route->POST));
// Grant // Grant
$this->assertEquals(['view'], array_keys(get_object_vars($info->grant))); $this->assertEquals(['view'], array_keys(get_object_vars($info->grant)));
$this->assertContains($info->grant->view->title, ['View', '열람']); $this->assertContains($info->grant->view->title, ['View', '열람']);
$this->assertEquals('guest', $info->grant->view->default); $this->assertEquals('guest', $info->grant->view->default);
// Menu // Menu
$this->assertEquals(['test'], array_keys(get_object_vars($info->menu))); $this->assertEquals(['test'], array_keys(get_object_vars($info->menu)));
$this->assertContains($info->menu->test->title, ['Test Menu', '테스트 메뉴']); $this->assertContains($info->menu->test->title, ['Test Menu', '테스트 메뉴']);
$this->assertEquals('dispTestAdminIndex', $info->menu->test->index); $this->assertEquals('dispTestAdminIndex', $info->menu->test->index);
$this->assertEquals(['dispTestAdminIndex'], $info->menu->test->acts); $this->assertEquals(['dispTestAdminIndex'], $info->menu->test->acts);
$this->assertEquals('all', $info->menu->test->type); $this->assertEquals('all', $info->menu->test->type);
// Error handlers // Error handlers
$this->assertTrue(is_array($info->error_handlers)); $this->assertTrue(is_array($info->error_handlers));
$this->assertEquals('dispTestErrorHandler', $info->error_handlers[404]); $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('service', $info->category);
$this->assertEquals('GPLv2', $info->license); $this->assertEquals('GPLv2', $info->license);
$this->assertEquals('https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html', $info->license_link); $this->assertEquals('https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html', $info->license_link);
// Author array // Author array
$this->assertTrue(is_array($info->author)); $this->assertTrue(is_array($info->author));
$this->assertEquals('Rhymix 개발자', $info->author[0]->name); $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('다른 개발자', $info->author[1]->name);
$this->assertEquals('other.developer@rhymix.org', $info->author[1]->email_address); $this->assertEquals('other.developer@rhymix.org', $info->author[1]->email_address);
$this->assertEquals('', $info->author[1]->homepage); $this->assertEquals('', $info->author[1]->homepage);
// Change language // Change language
Context::setLangType('en'); Context::setLangType('en');
$info = Rhymix\Framework\Parsers\ModuleInfoParser::loadXML(\RX_BASEDIR . 'tests/_data/module/info.xml'); $info = Rhymix\Framework\Parsers\ModuleInfoParser::loadXML(\RX_BASEDIR . 'tests/_data/module/info.xml');
$this->assertEquals('Test Module', $info->title); $this->assertEquals('Test Module', $info->title);
$this->assertEquals('This module is for unit testing.', $info->description); $this->assertEquals('This module is for unit testing.', $info->description);
$this->assertEquals('Rhymix Developer', $info->author[0]->name); $this->assertEquals('Rhymix Developer', $info->author[0]->name);
// Index actions (from module.xml) // Index actions (from module.xml)
$this->assertEquals('dispTestView', $info->default_index_act); $this->assertEquals('dispTestView', $info->default_index_act);
$this->assertEquals('dispTestAdminIndex', $info->admin_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'); $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'); $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'); $flattened2 = array(0 => 'xe', 1 => 'rhymix', 2 => 'value1', 3 => 'value2', 4 => 'value3', 5 => 'bears');
$this->assertEquals('foo', array_first_key($array)); $this->assertEquals('foo', array_first_key($array));
$this->assertEquals('xe', array_first($array)); $this->assertEquals('xe', array_first($array));
$this->assertEquals('last', array_last_key($array)); $this->assertEquals('last', array_last_key($array));
$this->assertEquals('bears', array_last($array)); $this->assertEquals('bears', array_last($array));
$this->assertEquals($flattened1, array_flatten($array)); $this->assertEquals($flattened1, array_flatten($array));
$this->assertEquals($flattened2, array_flatten($array, false)); $this->assertEquals($flattened2, array_flatten($array, false));
} }
public function testArrayEscape() 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>')))); $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;' => '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)); $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() public function testClassBasename()
{ {
$this->assertEquals('FunctionsTest', class_basename($this)); $this->assertEquals('FunctionsTest', class_basename($this));
$this->assertEquals('FunctionsTest', class_basename(get_class($this))); $this->assertEquals('FunctionsTest', class_basename(get_class($this)));
} }
public function testEscapeFunctions() public function testEscapeFunctions()
{ {
$this->assertEquals('&lt;foo&gt;&amp;amp;&lt;/foo&gt;', escape('<foo>&amp;</foo>')); $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;&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</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('&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-&gt;userLang1234567890', escape('$user_lang->userLang1234567890', true, false));
$this->assertEquals('$user_lang->userLang1234567890', escape('$user_lang->userLang1234567890', true, true)); $this->assertEquals('$user_lang->userLang1234567890', escape('$user_lang->userLang1234567890', true, true));
$this->assertEquals('expressionalertXSS', escape_css('expression:alert("XSS")')); $this->assertEquals('expressionalertXSS', escape_css('expression:alert("XSS")'));
$this->assertEquals('#123456', escape_css('#123456')); $this->assertEquals('#123456', escape_css('#123456'));
$this->assertEquals('hello\\\\world', escape_js('hello\\world')); $this->assertEquals('hello\\\\world', escape_js('hello\\world'));
$this->assertEquals('\u003Cbr \/\u003E', escape_js('<br />')); $this->assertEquals('\u003Cbr \/\u003E', escape_js('<br />'));
$this->assertEquals('hello\\\\world', escape_sqstr('hello\\world')); $this->assertEquals('hello\\\\world', escape_sqstr('hello\\world'));
$this->assertEquals('hello"world\\\'quotes', escape_sqstr('hello"world\'quotes')); $this->assertEquals('hello"world\\\'quotes', escape_sqstr('hello"world\'quotes'));
$this->assertEquals('hello\\\\\\$world in \\"quotes\\"', escape_dqstr('hello\\$world in "quotes"')); $this->assertEquals('hello\\\\\\$world in \\"quotes\\"', escape_dqstr('hello\\$world in "quotes"'));
$this->assertEquals('\\${array[\'key\']}', escape_dqstr('${array[\'key\']}')); $this->assertEquals('\\${array[\'key\']}', escape_dqstr('${array[\'key\']}'));
} }
public function testExplodeWithEscape() 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'), 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 , 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'), 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', 'rhymix'), explode_with_escape(',', 'foo,bar\\,baz,rhymix'));
$this->assertEquals(array('foo', 'bar,baz'), explode_with_escape(',', 'foo,bar!,baz', null, '!')); $this->assertEquals(array('foo', 'bar,baz'), explode_with_escape(',', 'foo,bar!,baz', null, '!'));
} }
public function testStartsEndsContains() public function testStartsEndsContains()
{ {
$this->assertTrue(starts_with('foo', 'foobar')); $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('bar', 'foobar'));
$this->assertFalse(starts_with('foobar', 'foo')); $this->assertFalse(starts_with('foobar', 'foo'));
$this->assertTrue(starts_with('', 'foobar')); $this->assertTrue(starts_with('', 'foobar'));
$this->assertTrue(ends_with('bar', 'foobar')); $this->assertTrue(ends_with('bar', 'foobar'));
$this->assertFalse(ends_with('BAR', 'foobar')); $this->assertFalse(ends_with('BAR', 'foobar'));
$this->assertTrue(ends_with('BAR', 'foobar', false)); $this->assertTrue(ends_with('BAR', 'foobar', false));
$this->assertFalse(ends_with('foo', 'foobar')); $this->assertFalse(ends_with('foo', 'foobar'));
$this->assertFalse(ends_with('foobar', 'bar')); $this->assertFalse(ends_with('foobar', 'bar'));
$this->assertTrue(ends_with('', 'foobar')); $this->assertTrue(ends_with('', 'foobar'));
$this->assertTrue(contains('foo', 'foo bar baz rhymix rocks')); $this->assertTrue(contains('foo', 'foo bar baz rhymix rocks'));
$this->assertFalse(contains('barbaz', 'foo bar baz rhymix rocks')); $this->assertFalse(contains('barbaz', 'foo bar baz rhymix rocks'));
$this->assertTrue(contains('RHYMIX', 'foo bar baz rhymix rocks', false)); $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->assertFalse(contains('foobar', 'bar'));
$this->assertTrue(contains('', 'foobar')); $this->assertTrue(contains('', 'foobar'));
} }
public function testRangeFunctions() public function testRangeFunctions()
{ {
$this->assertTrue(is_between(5, 1, 10)); $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->assertTrue(is_between(7, 1, 10, true));
$this->assertFalse(is_between(1, 1, 10, true)); $this->assertFalse(is_between(1, 1, 10, true));
$this->assertFalse(is_between(10, 1, 10, true)); $this->assertFalse(is_between(10, 1, 10, true));
$this->assertEquals(10, force_range(14, 1, 10)); $this->assertEquals(10, force_range(14, 1, 10));
$this->assertEquals(3, force_range(3, 1, 10)); $this->assertEquals(3, force_range(3, 1, 10));
$this->assertEquals(1, force_range(-4, 1, 10)); $this->assertEquals(1, force_range(-4, 1, 10));
} }
public function testUrlSafeBase64() public function testUrlSafeBase64()
{ {
$this->assertEquals('Umh5bWl4IF5-', base64_encode_urlsafe('Rhymix ^~')); $this->assertEquals('Umh5bWl4IF5-', base64_encode_urlsafe('Rhymix ^~'));
$this->assertEquals('Rhymix ^~', base64_decode_urlsafe('Umh5bWl4IF5-')); $this->assertEquals('Rhymix ^~', base64_decode_urlsafe('Umh5bWl4IF5-'));
} }
public function testNumberShorten() public function testNumberShorten()
{ {
$this->assertEquals('1', number_shorten(1)); $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('1.00000T', number_shorten(1000000000000, 6));
$this->assertEquals('10.0000T', number_shorten(10000000000000, 6)); $this->assertEquals('10.0000T', number_shorten(10000000000000, 6));
} }
public function testHex2Rgb2Hex() public function testHex2Rgb2Hex()
{ {
$this->assertEquals(array(128, 128, 128), hex2rgb('808080')); $this->assertEquals(array(128, 128, 128), hex2rgb('808080'));
$this->assertEquals(array(60, 71, 244), hex2rgb('#3c47f4')); $this->assertEquals(array(60, 71, 244), hex2rgb('#3c47f4'));
$this->assertEquals(array(119, 119, 119), hex2rgb('#777')); $this->assertEquals(array(119, 119, 119), hex2rgb('#777'));
$this->assertEquals(array(51, 102, 153), hex2rgb('369')); $this->assertEquals(array(51, 102, 153), hex2rgb('369'));
$this->assertEquals('#808080', rgb2hex(array(128, 128, 128))); $this->assertEquals('#808080', rgb2hex(array(128, 128, 128)));
$this->assertEquals('#3c47f4', rgb2hex(array(60, 71, 244))); $this->assertEquals('#3c47f4', rgb2hex(array(60, 71, 244)));
$this->assertEquals('777777', rgb2hex(array(119, 119, 119), false)); $this->assertEquals('777777', rgb2hex(array(119, 119, 119), false));
$this->assertEquals('#000000', rgb2hex(array())); $this->assertEquals('#000000', rgb2hex(array()));
} }
public function testToBool() public function testToBool()
{ {
$this->assertTrue(tobool('Y')); $this->assertTrue(tobool('Y'));
@ -180,7 +180,7 @@ class FunctionsTest extends \Codeception\TestCase\Test
$this->assertTrue(tobool(true)); $this->assertTrue(tobool(true));
$this->assertTrue(tobool(array(1, 2, 3))); $this->assertTrue(tobool(array(1, 2, 3)));
$this->assertTrue(tobool(new stdClass)); $this->assertTrue(tobool(new stdClass));
$this->assertFalse(tobool('N')); $this->assertFalse(tobool('N'));
$this->assertFalse(tobool('no')); $this->assertFalse(tobool('no'));
$this->assertFalse(tobool('none')); $this->assertFalse(tobool('none'));
@ -196,7 +196,7 @@ class FunctionsTest extends \Codeception\TestCase\Test
$this->assertFalse(tobool(null)); $this->assertFalse(tobool(null));
$this->assertFalse(tobool(array())); $this->assertFalse(tobool(array()));
} }
public function testCountObj() public function testCountObj()
{ {
$this->assertEquals(3, countobj(array('foo' => 1, 'bar' => 2, 'baz' => 3))); $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(42, countobj(new CountableTest));
$this->assertEquals(0, countobj(new stdClass)); $this->assertEquals(0, countobj(new stdClass));
} }
public function testUTF8Functions() public function testUTF8Functions()
{ {
$this->assertTrue(utf8_check('Hello, world!')); $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->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(iconv('UTF-8', 'EUC-KR', '라이믹스')));
$this->assertFalse(utf8_check(chr(129) . chr(214) . chr(181) . chr(73) . chr(97))); $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("\xEF\xBB\xBF" . 'Hello' . "\xBC\xBC"));
$this->assertEquals('Hello', utf8_clean('Hello&#8238;&#x3164;' . "\xE3\x85\xA4\xE2\x80\xAE")); $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' . "\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('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: &#x1f601;', utf8_mbencode("Emoticon: \xf0\x9f\x98\x81"));
$this->assertEquals('Emoticon: &#x1f61c;', utf8_mbencode("Emoticon: \xf0\x9f\x98\x9c")); $this->assertEquals('Emoticon: &#x1f61c;', utf8_mbencode("Emoticon: \xf0\x9f\x98\x9c"));
$this->assertEquals('한글은 인코딩하지 않음', utf8_mbencode('한글은 인코딩하지 않음')); $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 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("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\xe2\x80\x84\xe2\x80\x86\xe2\x80\x8b"));
$this->assertEquals("Trimmed", utf8_trim("\x20\xe2\x80\x80Trimmed\x0a\x0c\x07\x09")); $this->assertEquals("Trimmed", utf8_trim("\x20\xe2\x80\x80Trimmed\x0a\x0c\x07\x09"));
} }
public function testIsHTMLContent() public function testIsHTMLContent()
{ {
$this->assertTrue(is_html_content("<p>Hello World</p>")); $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("<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>")); $this->assertFalse(is_html_content("Looks like a broken editor<br />\nthat produced\nthis kind of\nstring!</div>"));
} }
public function testIsEmptyHTMLContent() public function testIsEmptyHTMLContent()
{ {
$this->assertTrue(is_empty_html_content('<p>&nbsp;<br><br></p>')); $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><video src="rickroll.webm" /></p>'));
$this->assertFalse(is_empty_html_content('<p><object></object></p>')); $this->assertFalse(is_empty_html_content('<p><object></object></p>'));
} }
public function testPolyfillFunctions() public function testPolyfillFunctions()
{ {
$this->assertTrue(function_exists('is_countable')); $this->assertTrue(function_exists('is_countable'));
@ -267,19 +267,19 @@ class FunctionsTest extends \Codeception\TestCase\Test
$this->assertFalse(is_countable('hello world')); $this->assertFalse(is_countable('hello world'));
$this->assertTrue(is_countable(new CountableTest)); $this->assertTrue(is_countable(new CountableTest));
$this->assertFalse(is_countable(new stdClass)); $this->assertFalse(is_countable(new stdClass));
$this->assertTrue(function_exists('str_starts_with')); $this->assertTrue(function_exists('str_starts_with'));
$this->assertTrue(str_starts_with('foobar', 'foo')); $this->assertTrue(str_starts_with('foobar', 'foo'));
$this->assertFalse(str_starts_with('Foobar', 'FOO')); $this->assertFalse(str_starts_with('Foobar', 'FOO'));
$this->assertFalse(str_starts_with('', 'bar')); $this->assertFalse(str_starts_with('', 'bar'));
$this->assertTrue(str_starts_with('foobar', '')); $this->assertTrue(str_starts_with('foobar', ''));
$this->assertTrue(function_exists('str_ends_with')); $this->assertTrue(function_exists('str_ends_with'));
$this->assertTrue(str_ends_with('foobar', 'bar')); $this->assertTrue(str_ends_with('foobar', 'bar'));
$this->assertFalse(str_ends_with('Foobar', 'BAR')); $this->assertFalse(str_ends_with('Foobar', 'BAR'));
$this->assertFalse(str_ends_with('', 'bar')); $this->assertFalse(str_ends_with('', 'bar'));
$this->assertTrue(str_ends_with('foobar', '')); $this->assertTrue(str_ends_with('foobar', ''));
$this->assertTrue(function_exists('str_contains')); $this->assertTrue(function_exists('str_contains'));
$this->assertTrue(str_contains('foobarbazz', 'bar')); $this->assertTrue(str_contains('foobarbazz', 'bar'));
$this->assertFalse(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() 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', 'model') instanceof BoardModel);
$this->assertTrue(getModule('board', 'view', 'admin') instanceof BoardAdminView); $this->assertTrue(getModule('board', 'view', 'admin') instanceof BoardAdminView);
$this->assertTrue(getModule('board') instanceof BoardView); $this->assertTrue(getModule('board') instanceof BoardView);
@ -19,25 +19,25 @@ class LegacyTest extends \Codeception\TestCase\Test
$this->assertTrue(getWAP('board') instanceof BoardWap); $this->assertTrue(getWAP('board') instanceof BoardWap);
$this->assertTrue(getClass('board') instanceof Board); $this->assertTrue(getClass('board') instanceof Board);
} }
public function testGetNextSequence() public function testGetNextSequence()
{ {
if (!DB::getInstance()->isConnected()) if (!DB::getInstance()->isConnected())
{ {
return; return;
} }
$this->assertGreaterThan(0, $sequence1 = getNextSequence()); $this->assertGreaterThan(0, $sequence1 = getNextSequence());
$this->assertGreaterThan($sequence1, $sequence2 = getNextSequence()); $this->assertGreaterThan($sequence1, $sequence2 = getNextSequence());
$this->assertTrue(checkUserSequence($sequence1)); $this->assertTrue(checkUserSequence($sequence1));
$this->assertTrue(checkUserSequence($sequence2)); $this->assertTrue(checkUserSequence($sequence2));
$this->assertFalse(checkUserSequence(-1)); $this->assertFalse(checkUserSequence(-1));
setUserSequence(-1); setUserSequence(-1);
$this->assertTrue(checkUserSequence(-1)); $this->assertTrue(checkUserSequence(-1));
} }
public function testGetURL() public function testGetURL()
{ {
/** /**
@ -55,19 +55,19 @@ class LegacyTest extends \Codeception\TestCase\Test
* - getRequestUriByServerEnviroment() * - getRequestUriByServerEnviroment()
*/ */
} }
public function testIsSiteID() public function testIsSiteID()
{ {
$this->assertTrue(isSiteID('rhymix_RHYMIX_1234')); $this->assertTrue(isSiteID('rhymix_RHYMIX_1234'));
$this->assertFalse(isSiteID('www.rhymix.org')); $this->assertFalse(isSiteID('www.rhymix.org'));
} }
public function testCutStr() public function testCutStr()
{ {
$this->assertEquals('안녕하세요? 라이믹스...', cut_str('안녕하세요? 라이믹스입니다. 제목이 너무 길어서 잘립니다.', 20)); $this->assertEquals('안녕하세요? 라이믹스...', cut_str('안녕하세요? 라이믹스입니다. 제목이 너무 길어서 잘립니다.', 20));
$this->assertEquals('Hello? This is Rhymix...', cut_str('Hello? This is Rhymix. This title is very long.', 20)); $this->assertEquals('Hello? This is Rhymix...', cut_str('Hello? This is Rhymix. This title is very long.', 20));
} }
public function testTimeFunctions() public function testTimeFunctions()
{ {
$this->assertEquals(0, get_time_zone_offset('00:00')); $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(32400, get_time_zone_offset('0900'));
$this->assertEquals(-18000, get_time_zone_offset('-05:00')); $this->assertEquals(-18000, get_time_zone_offset('-05:00'));
$this->assertEquals(-18000, get_time_zone_offset('-0500')); $this->assertEquals(-18000, get_time_zone_offset('-0500'));
$this->assertEquals('Jan', getMonthName(1)); $this->assertEquals('Jan', getMonthName(1));
$this->assertEquals('Sep', getMonthName(9, true)); $this->assertEquals('Sep', getMonthName(9, true));
$this->assertEquals('September', getMonthName(9, false)); $this->assertEquals('September', getMonthName(9, false));
/** /**
* The following functions are tested in DateTimeTest: * The following functions are tested in DateTimeTest:
* - zgap() * - zgap()
@ -91,41 +91,41 @@ class LegacyTest extends \Codeception\TestCase\Test
* - getTimeGap() * - getTimeGap()
*/ */
} }
public function testGetEncodedEmailAddress() public function testGetEncodedEmailAddress()
{ {
$this->assertNotEquals('devops@rhymix.org', getEncodeEmailAddress('devops@rhymix.org')); $this->assertNotEquals('devops@rhymix.org', getEncodeEmailAddress('devops@rhymix.org'));
$this->assertStringContainsString('&#X', getEncodeEmailAddress('devops@rhymix.org')); $this->assertStringContainsString('&#X', getEncodeEmailAddress('devops@rhymix.org'));
} }
public function testGetMicrotime() public function testGetMicrotime()
{ {
$microtime1 = microtime(true); $microtime1 = microtime(true);
$microtime2 = getMicroTime(); $microtime2 = getMicroTime();
$microtime3 = microtime(true); $microtime3 = microtime(true);
$this->assertEquals('double', gettype($microtime2)); $this->assertEquals('double', gettype($microtime2));
$this->assertGreaterThanOrEqual($microtime1, $microtime2); $this->assertGreaterThanOrEqual($microtime1, $microtime2);
$this->assertGreaterThanOrEqual($microtime2, $microtime3); $this->assertGreaterThanOrEqual($microtime2, $microtime3);
} }
public function testDelObjectVars() public function testDelObjectVars()
{ {
$target = (object)array('foo' => 1, 'bar' => 2, 'baz' => 3, 'rhymix' => 4); $target = (object)array('foo' => 1, 'bar' => 2, 'baz' => 3, 'rhymix' => 4);
$delete = (object)array('bar' => 5, 'baz' => 6); $delete = (object)array('bar' => 5, 'baz' => 6);
$result = delObjectVars($target, $delete); $result = delObjectVars($target, $delete);
// Check if the keys were deleted from the result. // Check if the keys were deleted from the result.
$this->assertTrue(isset($result->foo)); $this->assertTrue(isset($result->foo));
$this->assertFalse(isset($result->bar)); $this->assertFalse(isset($result->bar));
$this->assertFalse(isset($result->baz)); $this->assertFalse(isset($result->baz));
$this->assertTrue(isset($result->rhymix)); $this->assertTrue(isset($result->rhymix));
// Check if the keys are intact in the original target. // Check if the keys are intact in the original target.
$this->assertTrue(isset($target->bar)); $this->assertTrue(isset($target->bar));
$this->assertTrue(isset($target->baz)); $this->assertTrue(isset($target->baz));
} }
public function testGetDestroyXeVars() public function testGetDestroyXeVars()
{ {
// Test array. (Keys should be intact in the original target.) // Test array. (Keys should be intact in the original target.)
@ -133,14 +133,14 @@ class LegacyTest extends \Codeception\TestCase\Test
$result = getDestroyXeVars($target); $result = getDestroyXeVars($target);
$this->assertFalse(isset($result['xe_validator_id'])); $this->assertFalse(isset($result['xe_validator_id']));
$this->assertTrue(isset($target['xe_validator_id'])); $this->assertTrue(isset($target['xe_validator_id']));
// Test object. (Keys should be deleted from the original target.) // Test object. (Keys should be deleted from the original target.)
$target = (object)array('foo' => 1, 'bar' => 2, 'xe_validator_id' => 3); $target = (object)array('foo' => 1, 'bar' => 2, 'xe_validator_id' => 3);
$result = getDestroyXeVars($target); $result = getDestroyXeVars($target);
$this->assertFalse(isset($result->xe_validator_id)); $this->assertFalse(isset($result->xe_validator_id));
$this->assertFalse(isset($target->xe_validator_id)); $this->assertFalse(isset($target->xe_validator_id));
} }
public function testGetNumberingPath() public function testGetNumberingPath()
{ {
$this->assertEquals('001/', getNumberingPath(1)); $this->assertEquals('001/', getNumberingPath(1));
@ -153,44 +153,44 @@ class LegacyTest extends \Codeception\TestCase\Test
$this->assertEquals('678/345/012/', getNumberingPath(12345678)); $this->assertEquals('678/345/012/', getNumberingPath(12345678));
$this->assertEquals('789/456/123/', getNumberingPath(123456789)); $this->assertEquals('789/456/123/', getNumberingPath(123456789));
} }
public function testMysqlPre4HashPassword() public function testMysqlPre4HashPassword()
{ {
$this->assertEquals('5d2e19393cc5ef67', mysql_pre4_hash_password('password')); $this->assertEquals('5d2e19393cc5ef67', mysql_pre4_hash_password('password'));
$this->assertEquals('25a4fb474e17c19a', mysql_pre4_hash_password('pass\'#word')); $this->assertEquals('25a4fb474e17c19a', mysql_pre4_hash_password('pass\'#word'));
} }
public function testJsonEncode2() public function testJsonEncode2()
{ {
$data = array('foo' => 1, 'bar' => 2, 'baz' => 3, 'rhymix' => 4); $data = array('foo' => 1, 'bar' => 2, 'baz' => 3, 'rhymix' => 4);
$this->assertEquals(json_encode($data), json_encode2($data)); $this->assertEquals(json_encode($data), json_encode2($data));
} }
public function TestIsCrawler() public function TestIsCrawler()
{ {
$original_user_agent = $_SERVER['HTTP_USER_AGENT']; $original_user_agent = $_SERVER['HTTP_USER_AGENT'];
// Test automatic detection from User-Agent string. // 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'; $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0';
$this->assertFalse(isCrawler()); $this->assertFalse(isCrawler());
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'; $_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)';
$this->assertTrue(isCrawler()); $this->assertTrue(isCrawler());
// Test manual detection. // Test manual detection.
$this->assertTrue(isCrawler('Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)')); $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->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 (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')); $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; $_SERVER['HTTP_USER_AGENT'] = $original_user_agent;
} }
public function testMiscUTF8Functions() public function testMiscUTF8Functions()
{ {
$this->assertEquals('&lt;img&gt;', url_decode('%3Cimg%3E')); $this->assertEquals('&lt;img&gt;', url_decode('%3Cimg%3E'));
$this->assertEquals('한글 % English', utf8RawUrlDecode('%uD55C%uAE00%20%25%20English')); $this->assertEquals('한글 % English', utf8RawUrlDecode('%uD55C%uAE00%20%25%20English'));
$this->assertEquals('뷁', _code2utf(48577)); $this->assertEquals('뷁', _code2utf(48577));
$this->assertTrue(detectUTF8('라이믹스')); $this->assertTrue(detectUTF8('라이믹스'));
$this->assertTrue(detectUTF8(urlencode('라이믹스'))); $this->assertTrue(detectUTF8(urlencode('라이믹스')));
$this->assertTrue(detectUTF8('%87%a9%43%cd%ef', false, false)); $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(mb_convert_encoding('라이믹스', 'UTF-8', 'CP949'), detectUTF8('라이믹스', true));
$this->assertEquals('라이믹스', detectUTF8(iconv('UTF-8', 'EUC-KR', '라이믹스'), true)); $this->assertEquals('라이믹스', detectUTF8(iconv('UTF-8', 'EUC-KR', '라이믹스'), true));
} }
public function testMiscSecurityFunctions() public function testMiscSecurityFunctions()
{ {
/** /**
@ -209,14 +209,14 @@ class LegacyTest extends \Codeception\TestCase\Test
* - checkCSRF() * - checkCSRF()
*/ */
} }
public function testRecurciveExposureCheck() public function testRecurciveExposureCheck()
{ {
/** /**
* TODO * TODO
*/ */
} }
public function testChangeValueInUrl() public function testChangeValueInUrl()
{ {
/** /**