mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-04 17:21:39 +09:00
Remove trailing whitespace in all unit tests
This commit is contained in:
parent
37b0d3a1e6
commit
3b77781d15
40 changed files with 840 additions and 840 deletions
|
|
@ -1,2 +1,2 @@
|
|||
<?php
|
||||
// Here you can initialize variables that will be available to your tests
|
||||
// Here you can initialize variables that will be available to your tests
|
||||
|
|
|
|||
|
|
@ -62,11 +62,11 @@ class ContextTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(Context::getBodyClass(), ' class="red green blue"');
|
||||
Context::addBodyClass('yellow');
|
||||
$this->assertEquals(Context::getBodyClassList(), ['red', 'green', 'blue', 'yellow']);
|
||||
|
||||
|
||||
// remove class manually
|
||||
Context::removeBodyClass('yellow');
|
||||
$this->assertEquals(Context::getBodyClassList(), ['red', 'green', 'blue']);
|
||||
|
||||
|
||||
// remove duplicated class
|
||||
Context::addBodyClass('red');
|
||||
$this->assertEquals(Context::getBodyClass(), ' class="red green blue"');
|
||||
|
|
@ -84,7 +84,7 @@ class ContextTest extends \Codeception\TestCase\Test
|
|||
Context::setRequestArguments();
|
||||
$this->assertEquals('GET', Context::getRequestMethod());
|
||||
$this->assertEquals('bar', Context::getRequestVars()->foo);
|
||||
|
||||
|
||||
$_SERVER['REQUEST_METHOD'] = 'GET';
|
||||
$_GET = array('foo' => 'barrr', 'xe_js_callback' => 'callback12345');
|
||||
$_POST = array();
|
||||
|
|
@ -95,7 +95,7 @@ class ContextTest extends \Codeception\TestCase\Test
|
|||
Context::setRequestArguments();
|
||||
$this->assertEquals('JS_CALLBACK', Context::getRequestMethod());
|
||||
$this->assertEquals('barrr', Context::getRequestVars()->foo);
|
||||
|
||||
|
||||
$_SERVER['REQUEST_METHOD'] = 'POST';
|
||||
$_GET = $_REQUEST = array('foo' => 'bazz'); // Request method is POST but actual values are given as GET
|
||||
$_POST = array();
|
||||
|
|
@ -106,7 +106,7 @@ class ContextTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('POST', Context::getRequestMethod());
|
||||
$this->assertNull(Context::getRequestVars()->foo ?? null);
|
||||
$this->assertNull(Context::get('foo')); // This is different from XE behavior
|
||||
|
||||
|
||||
$_SERVER['REQUEST_METHOD'] = 'POST';
|
||||
$_GET = array();
|
||||
$_POST = $_REQUEST = array('foo' => 'rhymixtest');
|
||||
|
|
@ -116,7 +116,7 @@ class ContextTest extends \Codeception\TestCase\Test
|
|||
Context::setRequestArguments();
|
||||
$this->assertEquals('POST', Context::getRequestMethod());
|
||||
$this->assertEquals('rhymixtest', Context::getRequestVars()->foo);
|
||||
|
||||
|
||||
$_SERVER['REQUEST_METHOD'] = 'POST';
|
||||
$_GET = $_POST = $_REQUEST = array();
|
||||
$GLOBALS['HTTP_RAW_POST_DATA'] = '<?xml version="1.0" encoding="utf-8" ?><methodCall><params><foo>TestRhymix</foo></params></methodCall>';
|
||||
|
|
@ -126,7 +126,7 @@ class ContextTest extends \Codeception\TestCase\Test
|
|||
Context::setRequestArguments();
|
||||
$this->assertEquals('XMLRPC', Context::getRequestMethod());
|
||||
$this->assertEquals('TestRhymix', Context::getRequestVars()->foo);
|
||||
|
||||
|
||||
$_SERVER['REQUEST_METHOD'] = 'POST';
|
||||
$_GET = $_POST = $_REQUEST = array();
|
||||
$GLOBALS['HTTP_RAW_POST_DATA'] = 'foo=JSON_TEST'; // Not actual JSON
|
||||
|
|
@ -137,7 +137,7 @@ class ContextTest extends \Codeception\TestCase\Test
|
|||
Context::setRequestArguments();
|
||||
$this->assertEquals('JSON', Context::getRequestMethod());
|
||||
$this->assertEquals('JSON_TEST', Context::getRequestVars()->foo);
|
||||
|
||||
|
||||
Context::setRequestMethod('POST');
|
||||
$_GET = $_POST = $_REQUEST = array();
|
||||
unset($GLOBALS['HTTP_RAW_POST_DATA']);
|
||||
|
|
@ -147,7 +147,7 @@ class ContextTest extends \Codeception\TestCase\Test
|
|||
Context::setRequestMethod();
|
||||
Context::setRequestArguments();
|
||||
$this->assertEquals('POST', Context::getRequestMethod());
|
||||
|
||||
|
||||
Context::setRequestMethod('POST');
|
||||
$_GET = array();
|
||||
$_POST = $_REQUEST = array('foo' => 'legacy', '_rx_ajax_compat' => 'XMLRPC');
|
||||
|
|
@ -160,20 +160,20 @@ class ContextTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('XMLRPC', Context::getRequestMethod());
|
||||
$this->assertEquals('legacy', Context::getRequestVars()->foo);
|
||||
}
|
||||
|
||||
|
||||
public function testSetResponseMethod()
|
||||
{
|
||||
$this->assertEquals(Context::getResponseMethod(), 'HTML');
|
||||
|
||||
|
||||
Context::setRequestMethod('JSON');
|
||||
$this->assertEquals(Context::getResponseMethod(), 'JSON');
|
||||
|
||||
Context::setResponseMethod('WRONG_TYPE');
|
||||
$this->assertEquals(Context::getResponseMethod(), 'HTML');
|
||||
|
||||
|
||||
Context::setResponseMethod('XMLRPC');
|
||||
$this->assertEquals(Context::getResponseMethod(), 'XMLRPC');
|
||||
|
||||
|
||||
Context::setResponseMethod('HTML');
|
||||
$this->assertEquals(Context::getResponseMethod(), 'HTML');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,19 +20,19 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
|
|||
FrontEndFileHandler::$minify = 'none';
|
||||
FrontEndFileHandler::$concat = 'none';
|
||||
}
|
||||
|
||||
|
||||
public function _after()
|
||||
{
|
||||
HTMLDisplayHandler::$reservedCSS = $this->reservedCSS;
|
||||
HTMLDisplayHandler::$reservedJS = $this->reservedJS;
|
||||
}
|
||||
|
||||
|
||||
public function _failed()
|
||||
{
|
||||
HTMLDisplayHandler::$reservedCSS = $this->reservedCSS;
|
||||
HTMLDisplayHandler::$reservedJS = $this->reservedJS;
|
||||
}
|
||||
|
||||
|
||||
public function testJsHead()
|
||||
{
|
||||
$handler = new FrontEndFileHandler();
|
||||
|
|
@ -44,7 +44,7 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
|
|||
$expected[] = array('file' => $this->baseurl . 'common/js/common.js' . $this->_filemtime('common/js/common.js'));
|
||||
$this->assertEquals($expected, $handler->getJsFileList());
|
||||
}
|
||||
|
||||
|
||||
public function testJsBody()
|
||||
{
|
||||
$handler = new FrontEndFileHandler();
|
||||
|
|
@ -53,7 +53,7 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
|
|||
$expected[] = array('file' => $this->baseurl . 'common/js/xml_handler.js' . $this->_filemtime('common/js/xml_handler.js'));
|
||||
$this->assertEquals($expected, $handler->getJsFileList('body'));
|
||||
}
|
||||
|
||||
|
||||
public function testDefaultScss()
|
||||
{
|
||||
$handler = new FrontEndFileHandler();
|
||||
|
|
@ -81,7 +81,7 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
|
|||
$expected[] = array('file' => $this->baseurl . 'common/js/xml_js_filter.js' . $this->_filemtime('common/js/xml_js_filter.js'));
|
||||
$this->assertEquals($expected, $handler->getJsFileList());
|
||||
}
|
||||
|
||||
|
||||
public function testRedefineOrder()
|
||||
{
|
||||
$handler = new FrontEndFileHandler();
|
||||
|
|
@ -95,7 +95,7 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
|
|||
$expected[] = array('file' => $this->baseurl . 'common/js/xml_handler.js' . $this->_filemtime('common/js/xml_handler.js'));
|
||||
$this->assertEquals($expected, $handler->getJsFileList());
|
||||
}
|
||||
|
||||
|
||||
public function testUnload()
|
||||
{
|
||||
$handler = new FrontEndFileHandler();
|
||||
|
|
@ -124,7 +124,7 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
|
|||
$expected[] = array('file' => '//external.host/js/script2.js');
|
||||
$this->assertEquals($expected, $handler->getJsFileList());
|
||||
}
|
||||
|
||||
|
||||
public function testExternalFile2()
|
||||
{
|
||||
$handler = new FrontEndFileHandler();
|
||||
|
|
@ -134,7 +134,7 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
|
|||
$expected[] = array('file' => '//external.host/js/script.js');
|
||||
$this->assertEquals($expected, $handler->getJsFileList());
|
||||
}
|
||||
|
||||
|
||||
public function testExternalFile3()
|
||||
{
|
||||
$handler = new FrontEndFileHandler();
|
||||
|
|
@ -147,7 +147,7 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
|
|||
$expected[] = array('file' => 'https://external.host/css/style3.css?foo=bar&t=123', 'media'=>'all');
|
||||
$this->assertEquals($expected, $handler->getCssFileList());
|
||||
}
|
||||
|
||||
|
||||
public function testExternalFile4()
|
||||
{
|
||||
$handler = new FrontEndFileHandler();
|
||||
|
|
@ -196,7 +196,7 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
|
|||
$expected[] = array('file' => $this->baseurl . 'common/css/common.css', 'media' => 'all');
|
||||
$this->assertEquals($expected, $handler->getCssFileList());
|
||||
}
|
||||
|
||||
|
||||
public function testMedia()
|
||||
{
|
||||
$handler = new FrontEndFileHandler();
|
||||
|
|
@ -213,27 +213,27 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
|
|||
public function testMinify()
|
||||
{
|
||||
FrontEndFileHandler::$minify = 'all';
|
||||
|
||||
|
||||
$handler = new FrontEndFileHandler();
|
||||
$handler->loadFile(array('./common/css/rhymix.scss'));
|
||||
$result = $handler->getCssFileList(true);
|
||||
$this->assertRegexp('/\.rhymix\.scss\.min\.css\b/', $result[0]['file']);
|
||||
$this->assertEquals('all', $result[0]['media']);
|
||||
$this->assertTrue(empty($result[0]['targetie']));
|
||||
|
||||
|
||||
$handler = new FrontEndFileHandler();
|
||||
$handler->loadFile(array('./common/js/common.js', 'head'));
|
||||
$result = $handler->getJsFileList('head', true);
|
||||
$this->assertRegexp('/minified\/common\.js\.common\.min\.js\?\d+$/', $result[0]['file']);
|
||||
$this->assertTrue(empty($result[0]['targetie']));
|
||||
|
||||
|
||||
FrontEndFileHandler::$minify = 'none';
|
||||
}
|
||||
|
||||
|
||||
public function testConcat()
|
||||
{
|
||||
FrontEndFileHandler::$concat = 'css';
|
||||
|
||||
|
||||
$handler = new FrontEndFileHandler();
|
||||
$handler->loadFile(array('./common/css/rhymix.scss'));
|
||||
$handler->loadFile(array('./common/css/bootstrap-responsive.css'));
|
||||
|
|
@ -250,9 +250,9 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
|
|||
//$this->assertEquals('IE', $result[1]['targetie']);
|
||||
$this->assertEquals('http://external.host/style.css', $result[1]['file']);
|
||||
$this->assertRegexp('/combined\/[0-9a-f]+\.css\?\d+$/', $result[2]['file']);
|
||||
|
||||
|
||||
FrontEndFileHandler::$concat = 'js';
|
||||
|
||||
|
||||
$handler = new FrontEndFileHandler();
|
||||
$handler->loadFile(array('./common/js/common.js', 'head'));
|
||||
$handler->loadFile(array('./common/js/debug.js', 'head'));
|
||||
|
|
@ -267,15 +267,15 @@ class FrontEndFileHandlerTest extends \Codeception\TestCase\Test
|
|||
$this->assertRegexp('/combined\/[0-9a-f]+\.js\?\d+$/', $result[0]['file']);
|
||||
$this->assertEquals('//external.host/js/script.js', $result[1]['file']);
|
||||
$this->assertRegexp('/combined\/[0-9a-f]+\.js\?\d+$/', $result[2]['file']);
|
||||
|
||||
|
||||
FrontEndFileHandler::$concat = 'none';
|
||||
}
|
||||
|
||||
|
||||
public function testBlockedScripts()
|
||||
{
|
||||
HTMLDisplayHandler::$reservedCSS = $this->reservedCSS;
|
||||
HTMLDisplayHandler::$reservedJS = $this->reservedJS;
|
||||
|
||||
|
||||
$handler = new FrontEndFileHandler();
|
||||
$handler->loadFile(array('./common/css/xe.min.css'));
|
||||
$handler->loadFile(array('./common/js/common.js'));
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ class OldSecurityTest extends \Codeception\TestCase\Test
|
|||
{
|
||||
$this->_reset();
|
||||
}
|
||||
|
||||
|
||||
protected function _reset()
|
||||
{
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ class TemplateHandlerTest extends \Codeception\TestCase\Test
|
|||
{
|
||||
$this->baseurl = '/' . basename(dirname(dirname(dirname(__DIR__)))) . '/';
|
||||
}
|
||||
|
||||
|
||||
public function testParse()
|
||||
{
|
||||
$tests = array(
|
||||
|
|
|
|||
|
|
@ -15,12 +15,12 @@ class ValidatorTest extends \Codeception\TestCase\Test
|
|||
{
|
||||
Rhymix\Framework\Storage::deleteDirectory(__DIR__ . '/validator/ruleset', true);
|
||||
}
|
||||
|
||||
|
||||
public function _failed()
|
||||
{
|
||||
Rhymix\Framework\Storage::deleteDirectory(__DIR__ . '/validator/ruleset', true);
|
||||
}
|
||||
|
||||
|
||||
public function testRequired()
|
||||
{
|
||||
$vd = new Validator();
|
||||
|
|
|
|||
|
|
@ -8,27 +8,27 @@ class CacheTest extends \Codeception\TestCase\Test
|
|||
{
|
||||
Rhymix\Framework\Config::set('crypto.authentication_key', Rhymix\Framework\Security::getRandom(64, 'alnum'));
|
||||
}
|
||||
|
||||
|
||||
$driver = Rhymix\Framework\Cache::init(array('dummy'));
|
||||
}
|
||||
|
||||
|
||||
public function _after()
|
||||
{
|
||||
$driver = Rhymix\Framework\Cache::clearAll();
|
||||
}
|
||||
|
||||
|
||||
public function testInit()
|
||||
{
|
||||
$driver = Rhymix\Framework\Cache::init(array('type' => 'dummy'));
|
||||
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\Dummy);
|
||||
|
||||
|
||||
$driver = Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
|
||||
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\SQLite);
|
||||
|
||||
|
||||
$driver = Rhymix\Framework\Cache::init(array());
|
||||
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\Dummy);
|
||||
}
|
||||
|
||||
|
||||
public function testGetSupportedDrivers()
|
||||
{
|
||||
$drivers = Rhymix\Framework\Cache::getSupportedDrivers();
|
||||
|
|
@ -37,79 +37,79 @@ class CacheTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(in_array('file', $drivers));
|
||||
$this->assertContains('sqlite', $drivers);
|
||||
}
|
||||
|
||||
|
||||
public function testGetDriverName()
|
||||
{
|
||||
$driver = Rhymix\Framework\Cache::init(array('type' => 'dummy'));
|
||||
$this->assertEquals('dummy', Rhymix\Framework\Cache::getDriverName());
|
||||
|
||||
|
||||
$driver = Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
|
||||
$this->assertEquals('sqlite', Rhymix\Framework\Cache::getDriverName());
|
||||
}
|
||||
|
||||
|
||||
public function testGetDriverInstance()
|
||||
{
|
||||
$driver = Rhymix\Framework\Cache::getDriverInstance('dummy');
|
||||
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\Dummy);
|
||||
|
||||
|
||||
$driver = Rhymix\Framework\Cache::getDriverInstance();
|
||||
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\File);
|
||||
}
|
||||
|
||||
|
||||
public function testGetPrefix()
|
||||
{
|
||||
$prefix = Rhymix\Framework\Cache::getPrefix();
|
||||
$this->assertEquals(\RX_VERSION . ':', $prefix);
|
||||
}
|
||||
|
||||
|
||||
public function testGetSet()
|
||||
{
|
||||
$value = true;
|
||||
$this->assertTrue(Rhymix\Framework\Cache::set('foobar1', $value));
|
||||
$this->assertTrue(Rhymix\Framework\Cache::get('foobar1'));
|
||||
|
||||
|
||||
$value = false;
|
||||
$this->assertTrue(Rhymix\Framework\Cache::set('foobar2', $value));
|
||||
$this->assertFalse(Rhymix\Framework\Cache::get('foobar2'));
|
||||
|
||||
|
||||
$value = 1756234;
|
||||
$this->assertTrue(Rhymix\Framework\Cache::set('foobar3', $value));
|
||||
$this->assertEquals($value, Rhymix\Framework\Cache::get('foobar3'));
|
||||
|
||||
|
||||
$value = 'Rhymix is a PHP CMS.';
|
||||
$this->assertTrue(Rhymix\Framework\Cache::set('foobar4', $value));
|
||||
$this->assertEquals($value, Rhymix\Framework\Cache::get('foobar4'));
|
||||
|
||||
|
||||
$value = array('foo' => 'bar', 'rhy' => 'mix');
|
||||
$this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:5', $value));
|
||||
$this->assertEquals($value, Rhymix\Framework\Cache::get('foobar:subkey:5'));
|
||||
|
||||
|
||||
$value = (object)array('foo' => 'bar', 'rhy' => 'mix');
|
||||
$this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:6', $value));
|
||||
$this->assertEquals($value, Rhymix\Framework\Cache::get('foobar:subkey:6'));
|
||||
|
||||
|
||||
$this->assertNull(Rhymix\Framework\Cache::get('foobar7'));
|
||||
$this->assertNull(Rhymix\Framework\Cache::get('foobar:subkey:8'));
|
||||
}
|
||||
|
||||
|
||||
public function testDeleteAndExists()
|
||||
{
|
||||
Rhymix\Framework\Cache::set('foo', 'FOO');
|
||||
Rhymix\Framework\Cache::set('bar', 'BAR');
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Cache::delete('foo'));
|
||||
$this->assertFalse(Rhymix\Framework\Cache::delete('foo'));
|
||||
$this->assertFalse(Rhymix\Framework\Cache::exists('foo'));
|
||||
$this->assertTrue(Rhymix\Framework\Cache::exists('bar'));
|
||||
}
|
||||
|
||||
|
||||
public function testIncrDecr()
|
||||
{
|
||||
Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
|
||||
Rhymix\Framework\Cache::set('foo', 'foo');
|
||||
Rhymix\Framework\Cache::set('bar', 42);
|
||||
$prefix = Rhymix\Framework\Cache::getPrefix();
|
||||
|
||||
|
||||
$this->assertEquals(1, Rhymix\Framework\Cache::getDriverInstance()->incr($prefix . 'foo', 1));
|
||||
$this->assertEquals(8, Rhymix\Framework\Cache::getDriverInstance()->incr($prefix . 'foo', 7));
|
||||
$this->assertEquals(-7, Rhymix\Framework\Cache::decr('foo', 15));
|
||||
|
|
@ -117,7 +117,7 @@ class CacheTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(60, Rhymix\Framework\Cache::incr('bar', 15));
|
||||
$this->assertEquals(20, Rhymix\Framework\Cache::getDriverInstance()->incr($prefix . 'bar', -40));
|
||||
}
|
||||
|
||||
|
||||
public function testClearAll()
|
||||
{
|
||||
$this->assertTrue(Rhymix\Framework\Cache::set('foo', 'foo'));
|
||||
|
|
@ -125,30 +125,30 @@ class CacheTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(Rhymix\Framework\Cache::clearAll());
|
||||
$this->assertFalse(Rhymix\Framework\Cache::exists('foo'));
|
||||
}
|
||||
|
||||
|
||||
public function testCacheGroups()
|
||||
{
|
||||
Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
|
||||
$prefix = Rhymix\Framework\Cache::getPrefix();
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:1234', 'rhymix'));
|
||||
$this->assertTrue(Rhymix\Framework\Cache::exists('foobar:subkey:1234'));
|
||||
$this->assertEquals('rhymix', Rhymix\Framework\Cache::get('foobar:subkey:1234'));
|
||||
$this->assertEquals('rhymix', Rhymix\Framework\Cache::getDriverInstance()->get($prefix . 'foobar#0:subkey:1234'));
|
||||
$this->assertEquals(0, Rhymix\Framework\Cache::getGroupVersion('foobar'));
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Cache::clearGroup('foobar'));
|
||||
$this->assertFalse(Rhymix\Framework\Cache::exists('foobar:subkey:1234'));
|
||||
$this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:1234', 'rhymix'));
|
||||
$this->assertEquals('rhymix', Rhymix\Framework\Cache::getDriverInstance()->get($prefix . 'foobar#1:subkey:1234'));
|
||||
$this->assertEquals(1, Rhymix\Framework\Cache::getGroupVersion('foobar'));
|
||||
}
|
||||
|
||||
|
||||
public function testGetRealKey()
|
||||
{
|
||||
Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
|
||||
$prefix = Rhymix\Framework\Cache::getPrefix();
|
||||
|
||||
|
||||
$this->assertEquals($prefix . 'foo', Rhymix\Framework\Cache::getRealKey('foo'));
|
||||
$this->assertEquals($prefix . 'bar#0:2016', Rhymix\Framework\Cache::getRealKey('bar:2016'));
|
||||
Rhymix\Framework\Cache::clearGroup('bar');
|
||||
|
|
@ -156,34 +156,34 @@ class CacheTest extends \Codeception\TestCase\Test
|
|||
Rhymix\Framework\Cache::clearGroup('bar');
|
||||
$this->assertEquals($prefix . 'bar#2:2016', Rhymix\Framework\Cache::getRealKey('bar:2016'));
|
||||
}
|
||||
|
||||
|
||||
public function testCompatibility()
|
||||
{
|
||||
Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
|
||||
$ch = \CacheHandler::getInstance();
|
||||
$this->assertTrue($ch instanceof \CacheHandler);
|
||||
$this->assertTrue($ch->isSupport());
|
||||
|
||||
|
||||
$this->assertEquals('rhymix', $ch->getCacheKey('rhymix'));
|
||||
$this->assertEquals('rhymix:123:456', $ch->getCacheKey('rhymix:123:456'));
|
||||
|
||||
|
||||
$this->assertTrue($ch->put('rhymix', 'foo bar buzz'));
|
||||
$this->assertEquals('foo bar buzz', $ch->get('rhymix'));
|
||||
$this->assertTrue($ch->isValid('rhymix'));
|
||||
$this->assertTrue($ch->delete('rhymix'));
|
||||
$this->assertFalse($ch->get('rhymix'));
|
||||
$this->assertFalse($ch->isValid('rhymix'));
|
||||
|
||||
|
||||
$this->assertEquals('rhymix:123:456', $ch->getGroupKey('rhymix', '123:456'));
|
||||
$this->assertTrue($ch->put('rhymix:123:456', 'rhymix rules!'));
|
||||
$this->assertEquals('rhymix rules!', $ch->get('rhymix:123:456'));
|
||||
$this->assertEquals(0, Rhymix\Framework\Cache::getGroupVersion('rhymix'));
|
||||
|
||||
|
||||
$this->assertTrue($ch->invalidateGroupKey('rhymix'));
|
||||
$this->assertTrue($ch->put('rhymix:123:456', 'rhymix rules!'));
|
||||
$this->assertEquals('rhymix rules!', $ch->get('rhymix:123:456'));
|
||||
$this->assertEquals(1, Rhymix\Framework\Cache::getGroupVersion('rhymix'));
|
||||
|
||||
|
||||
$this->assertTrue($ch->truncate());
|
||||
$this->assertFalse($ch->get('rhymix:123:456'));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ class CalendarTest extends \Codeception\TestCase\Test
|
|||
array(23, 24, 25, 26, 27, 28, 29),
|
||||
array(30, 31, null, null, null, null, null),
|
||||
);
|
||||
|
||||
|
||||
$target_201603 = array(
|
||||
array(null, null, 1, 2, 3, 4, 5),
|
||||
array(6, 7, 8, 9, 10, 11, 12),
|
||||
|
|
@ -45,7 +45,7 @@ class CalendarTest extends \Codeception\TestCase\Test
|
|||
array(27, 28, 29, 30, 31, null, null),
|
||||
array(null, null, null, null, null, null, null),
|
||||
);
|
||||
|
||||
|
||||
$this->assertEquals($target_201508, Rhymix\Framework\Calendar::getMonthCalendar(8, 2015));
|
||||
$this->assertEquals($target_201603, Rhymix\Framework\Calendar::getMonthCalendar(3, 2016));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,16 +9,16 @@ class ConfigTest extends \Codeception\TestCase\Test
|
|||
mkdir(RX_BASEDIR . 'files/config', 0755, true);
|
||||
copy(RX_BASEDIR . 'common/defaults/config.php', RX_BASEDIR . 'files/config/config.php');
|
||||
}
|
||||
|
||||
|
||||
Rhymix\Framework\Config::init();
|
||||
$this->assertTrue(version_compare(Rhymix\Framework\Config::get('config_version'), '2.0', '>='));
|
||||
$this->assertTrue(is_array(Rhymix\Framework\Config::get('db.master')));
|
||||
$this->assertNotEmpty(Rhymix\Framework\Config::get('db.master.host'));
|
||||
|
||||
|
||||
Rhymix\Framework\Config::set('foo.bar', $rand = mt_rand());
|
||||
$this->assertEquals(array('bar' => $rand), Rhymix\Framework\Config::get('foo'));
|
||||
$this->assertEquals($rand, Rhymix\Framework\Config::get('foo.bar'));
|
||||
|
||||
|
||||
$var = array('foo' => 'bar');
|
||||
$serialized = "array(\n\t'foo' => 'bar',\n)";
|
||||
$this->assertEquals($serialized, Rhymix\Framework\Config::serialize($var));
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ class DBTest extends \Codeception\TestCase\Test
|
|||
$oDB = Rhymix\Framework\DB::getInstance();
|
||||
$oDB->setDebugComment(false);
|
||||
}
|
||||
|
||||
|
||||
public function testGetInstance()
|
||||
{
|
||||
$oDB = Rhymix\Framework\DB::getInstance();
|
||||
|
|
@ -15,12 +15,12 @@ class DBTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue($oDB->isConnected());
|
||||
$this->assertTrue($oDB->getHandle() instanceof Rhymix\Framework\Helpers\DBHelper);
|
||||
}
|
||||
|
||||
|
||||
public function testPrepare()
|
||||
{
|
||||
$oDB = Rhymix\Framework\DB::getInstance();
|
||||
$prefix = Rhymix\Framework\Config::get('db.master.prefix');
|
||||
|
||||
|
||||
$stmt = $oDB->prepare('SELECT * FROM documents WHERE document_srl = ?');
|
||||
$this->assertTrue($stmt instanceof Rhymix\Framework\Helpers\DBStmtHelper);
|
||||
if ($prefix)
|
||||
|
|
@ -31,19 +31,19 @@ class DBTest extends \Codeception\TestCase\Test
|
|||
{
|
||||
$this->assertEquals('SELECT * FROM documents WHERE document_srl = ?', $stmt->queryString);
|
||||
}
|
||||
|
||||
|
||||
$this->assertTrue($stmt->execute([123]));
|
||||
$this->assertTrue($stmt->execute([456]));
|
||||
$this->assertTrue($stmt->execute([789]));
|
||||
$this->assertTrue(is_array($stmt->fetchAll()));
|
||||
$this->assertTrue($stmt->closeCursor());
|
||||
}
|
||||
|
||||
|
||||
public function testQuery()
|
||||
{
|
||||
$oDB = Rhymix\Framework\DB::getInstance();
|
||||
$prefix = Rhymix\Framework\Config::get('db.master.prefix');
|
||||
|
||||
|
||||
$stmt = $oDB->query('SELECT * FROM documents WHERE document_srl = 123');
|
||||
$this->assertTrue($stmt instanceof Rhymix\Framework\Helpers\DBStmtHelper);
|
||||
if ($prefix)
|
||||
|
|
@ -54,10 +54,10 @@ class DBTest extends \Codeception\TestCase\Test
|
|||
{
|
||||
$this->assertEquals('SELECT * FROM documents WHERE document_srl = 123', $stmt->queryString);
|
||||
}
|
||||
|
||||
|
||||
$this->assertTrue(is_array($stmt->fetchAll()));
|
||||
$this->assertTrue($stmt->closeCursor());
|
||||
|
||||
|
||||
$stmt = $oDB->query('SELECT * FROM documents WHERE document_srl = ?', [123]);
|
||||
$this->assertTrue($stmt instanceof Rhymix\Framework\Helpers\DBStmtHelper);
|
||||
if ($prefix)
|
||||
|
|
@ -68,10 +68,10 @@ class DBTest extends \Codeception\TestCase\Test
|
|||
{
|
||||
$this->assertEquals('SELECT * FROM documents WHERE document_srl = ?', $stmt->queryString);
|
||||
}
|
||||
|
||||
|
||||
$this->assertTrue(is_array($stmt->fetchAll()));
|
||||
$this->assertTrue($stmt->closeCursor());
|
||||
|
||||
|
||||
$stmt = $oDB->query('SELECT * FROM documents WHERE document_srl = ? AND status = ?', 123, 'PUBLIC');
|
||||
$this->assertTrue($stmt instanceof Rhymix\Framework\Helpers\DBStmtHelper);
|
||||
if ($prefix)
|
||||
|
|
@ -82,48 +82,48 @@ class DBTest extends \Codeception\TestCase\Test
|
|||
{
|
||||
$this->assertEquals('SELECT * FROM documents WHERE document_srl = ? AND status = ?', $stmt->queryString);
|
||||
}
|
||||
|
||||
|
||||
$this->assertTrue(is_array($stmt->fetchAll()));
|
||||
$this->assertTrue($stmt->closeCursor());
|
||||
}
|
||||
|
||||
|
||||
public function testAddPrefixes()
|
||||
{
|
||||
$oDB = Rhymix\Framework\DB::getInstance();
|
||||
$prefix = Rhymix\Framework\Config::get('db.master.prefix');
|
||||
|
||||
|
||||
$source = 'SELECT a, b, c FROM documents JOIN comments ON documents.document_srl = comment.document_srl WHERE documents.member_srl = ?';
|
||||
$target = 'SELECT a, b, c FROM `' . $prefix . 'documents` AS `documents` JOIN `' . $prefix . 'comments` AS `comments` ' .
|
||||
'ON documents.document_srl = comment.document_srl WHERE documents.member_srl = ?';
|
||||
$this->assertEquals($target, $oDB->addPrefixes($source));
|
||||
|
||||
|
||||
$source = 'SELECT a AS aa FROM documents as foo JOIN bar ON documents.a = bar.a';
|
||||
$target = 'SELECT a AS aa FROM `' . $prefix . 'documents` AS `foo` JOIN `' . $prefix . 'bar` AS `bar` ON documents.a = bar.a';
|
||||
$this->assertEquals($target, $oDB->addPrefixes($source));
|
||||
|
||||
|
||||
$source = 'INSERT INTO documents (a, b, c) VALUES (?, ?, ?)';
|
||||
$target = 'INSERT INTO `' . $prefix . 'documents` (a, b, c) VALUES (?, ?, ?)';
|
||||
$this->assertEquals($target, $oDB->addPrefixes($source));
|
||||
|
||||
|
||||
$source = 'INSERT INTO documents (a, b, c) SELECT d, e, f FROM old_documents WHERE g = ?';
|
||||
$target = 'INSERT INTO `' . $prefix . 'documents` (a, b, c) SELECT d, e, f FROM `' . $prefix . 'old_documents` AS `old_documents` WHERE g = ?';
|
||||
$this->assertEquals($target, $oDB->addPrefixes($source));
|
||||
|
||||
|
||||
$source = 'UPDATE documents SET a = ?, b = ? WHERE c = ?';
|
||||
$target = 'UPDATE `' . $prefix . 'documents` SET a = ?, b = ? WHERE c = ?';
|
||||
$this->assertEquals($target, $oDB->addPrefixes($source));
|
||||
|
||||
|
||||
$source = 'DELETE FROM documents WHERE d = ?';
|
||||
$target = 'DELETE FROM `' . $prefix . 'documents` WHERE d = ?';
|
||||
$this->assertEquals($target, $oDB->addPrefixes($source));
|
||||
|
||||
|
||||
$source = 'update documents set a = ?, b = ? where c = ?';
|
||||
$this->assertEquals($source, $oDB->addPrefixes($source));
|
||||
|
||||
|
||||
$source = 'delete from documents where d = ?';
|
||||
$this->assertEquals($source, $oDB->addPrefixes($source));
|
||||
}
|
||||
|
||||
|
||||
public function testIsTableColumnIndexExists()
|
||||
{
|
||||
$oDB = Rhymix\Framework\DB::getInstance();
|
||||
|
|
@ -134,7 +134,7 @@ class DBTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse($oDB->isColumnExists('documents', 'document_nx'));
|
||||
$this->assertFalse($oDB->isIndexExists('documents', 'idx_regex'));
|
||||
}
|
||||
|
||||
|
||||
public function testGetColumnInfo()
|
||||
{
|
||||
$oDB = Rhymix\Framework\DB::getInstance();
|
||||
|
|
@ -146,7 +146,7 @@ class DBTest extends \Codeception\TestCase\Test
|
|||
$this->assertNull($info->default_value);
|
||||
$this->assertTrue($info->notnull);
|
||||
}
|
||||
|
||||
|
||||
public function testIsValidOldPassword()
|
||||
{
|
||||
$oDB = Rhymix\Framework\DB::getInstance();
|
||||
|
|
@ -160,7 +160,7 @@ class DBTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse($oDB->isValidOldPassword($password, $saved3));
|
||||
$this->assertFalse($oDB->isValidOldPassword($password, $saved4));
|
||||
}
|
||||
|
||||
|
||||
public function testAddQuotes()
|
||||
{
|
||||
$oDB = Rhymix\Framework\DB::getInstance();
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
class DateTimeTest extends \Codeception\TestCase\Test
|
||||
{
|
||||
private $old_timezone;
|
||||
|
||||
|
||||
public function _before()
|
||||
{
|
||||
// Add some dummy data to system configuration. Asia/Seoul offset is 32400.
|
||||
|
|
@ -11,191 +11,191 @@ class DateTimeTest extends \Codeception\TestCase\Test
|
|||
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
|
||||
Context::getInstance();
|
||||
Context::set('_default_timezone', $GLOBALS['_time_zone'] = 'Asia/Seoul');
|
||||
|
||||
|
||||
// Set PHP time zone to the internal time zone.
|
||||
$this->old_timezone = @date_default_timezone_get();
|
||||
date_default_timezone_set('Etc/GMT-3');
|
||||
}
|
||||
|
||||
|
||||
public function _after()
|
||||
{
|
||||
// Restore the default and internal timezone.
|
||||
Rhymix\Framework\Config::set('locale.default_timezone', 'Asia/Seoul');
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
|
||||
Context::set('_default_timezone', $GLOBALS['_time_zone'] = 'Asia/Seoul');
|
||||
|
||||
|
||||
// Restore the old timezone.
|
||||
date_default_timezone_set($this->old_timezone);
|
||||
}
|
||||
|
||||
|
||||
public function testZgap()
|
||||
{
|
||||
// Test zgap() when the current user's time zone is different from the system default.
|
||||
$_SESSION['RHYMIX']['timezone'] = 'Etc/UTC';
|
||||
$this->assertEquals(-10800, zgap());
|
||||
|
||||
|
||||
// Test zgap() when the current user's time zone is the same as the system default.
|
||||
unset($_SESSION['RHYMIX']['timezone']);
|
||||
$this->assertEquals(21600, zgap());
|
||||
}
|
||||
|
||||
|
||||
public function testZtime()
|
||||
{
|
||||
$timestamp = 1454000000;
|
||||
|
||||
|
||||
// Test ztime() when the internal time zone is different from the default time zone.
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
|
||||
$this->assertEquals($timestamp, ztime('20160128195320'));
|
||||
|
||||
|
||||
// Test ztime() when the internal time zone is the same as the default time zone.
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
|
||||
$this->assertEquals($timestamp, ztime('20160129015320'));
|
||||
|
||||
|
||||
// Restore the internal timezone.
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
|
||||
}
|
||||
|
||||
|
||||
public function testZtimeDateOnly()
|
||||
{
|
||||
$timestamp = -271641600;
|
||||
|
||||
|
||||
// Test ztime() when the internal time zone is different from the default time zone.
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
|
||||
$this->assertEquals($timestamp, ztime('19610524'));
|
||||
|
||||
|
||||
// Test ztime() when the internal time zone is the same as the default time zone.
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
|
||||
$this->assertEquals($timestamp, ztime('19610524'));
|
||||
|
||||
|
||||
// Restore the internal timezone.
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
|
||||
}
|
||||
|
||||
|
||||
public function testZdate()
|
||||
{
|
||||
$expected = '2016-01-29 01:53:20';
|
||||
|
||||
|
||||
// Test zdate() when the internal time zone is different from the default time zone.
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
|
||||
$this->assertEquals($expected, zdate('20160128195320'));
|
||||
$this->assertEquals($expected, zdate('2016-01-28 19:53:20'));
|
||||
$this->assertEquals($expected, zdate('2016-01-28T23:53:20-07:00'));
|
||||
$this->assertEquals($expected, zdate('2016-01-28 21:23:20+04:30'));
|
||||
|
||||
|
||||
// Test zdate() when the internal time zone is the same as the default time zone.
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
|
||||
$this->assertEquals($expected, zdate('20160129015320'));
|
||||
$this->assertEquals($expected, zdate('2016-01-29 01:53:20'));
|
||||
$this->assertEquals($expected, zdate('2016-01-29 05:53:20+13:00'));
|
||||
$this->assertEquals($expected, zdate('2016-01-28T20:53:20+04:00'));
|
||||
|
||||
|
||||
// Restore the internal timezone.
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
|
||||
}
|
||||
|
||||
|
||||
public function testZdateDateOnly()
|
||||
{
|
||||
// Korea Standard Time was UTC+08:30 until 1961
|
||||
$expected = '1960-04-19 08:30:00';
|
||||
|
||||
|
||||
// Test zdate() when the internal time zone is different from the default time zone.
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
|
||||
$this->assertEquals($expected, zdate('19600419', 'Y-m-d H:i:s'));
|
||||
|
||||
|
||||
// Test zdate() when the internal time zone is the same as the default time zone.
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
|
||||
$this->assertEquals($expected, zdate('19600419', 'Y-m-d H:i:s'));
|
||||
|
||||
|
||||
// Restore the internal timezone.
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
|
||||
}
|
||||
|
||||
|
||||
public function testGetInternalDateTime()
|
||||
{
|
||||
$timestamp = 1454000000;
|
||||
|
||||
|
||||
// Test when the internal time zone is different from the default time zone.
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
|
||||
$this->assertEquals('20160128195320', getInternalDateTime($timestamp));
|
||||
|
||||
|
||||
// Test when the internal time zone is the same as the default time zone.
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
|
||||
$this->assertEquals('20160129015320', getInternalDateTime($timestamp));
|
||||
}
|
||||
|
||||
|
||||
public function testGetDisplayDateTime()
|
||||
{
|
||||
$timestamp = 1454000000;
|
||||
|
||||
|
||||
// Test when the display time zone is different from the internal time zone.
|
||||
$_SESSION['RHYMIX']['timezone'] = 'America/Los_Angeles';
|
||||
$this->assertEquals('20160128085320', getDisplayDateTime($timestamp));
|
||||
|
||||
|
||||
// Test when the display time zone is the same as the internal time zone.
|
||||
$_SESSION['RHYMIX']['timezone'] = 'Etc/GMT-3';
|
||||
$this->assertEquals('20160128195320', getDisplayDateTime($timestamp));
|
||||
}
|
||||
|
||||
|
||||
public function testGetTimeGap()
|
||||
{
|
||||
$GLOBALS['lang'] = Rhymix\Framework\Lang::getInstance('en');
|
||||
$GLOBALS['lang']->loadPlugin('common');
|
||||
|
||||
|
||||
// Test getTimeGap() when the internal time zone is different from the default time zone.
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 10800);
|
||||
$this->assertEquals('1 minute ago', getTimeGap(getInternalDateTime(RX_TIME - 30)));
|
||||
$this->assertEquals('30 minutes ago', getTimeGap(getInternalDateTime(RX_TIME - 1800)));
|
||||
$this->assertEquals('2 hours ago', getTimeGap(getInternalDateTime(RX_TIME - 8000)));
|
||||
|
||||
|
||||
// Test getTimeGap() when the internal time zone is the same as the default time zone.
|
||||
Rhymix\Framework\Config::set('locale.internal_timezone', 32400);
|
||||
$this->assertEquals('30 minutes ago', getTimeGap(getInternalDateTime(RX_TIME - 1800)));
|
||||
$this->assertEquals('2 hours ago', getTimeGap(getInternalDateTime(RX_TIME - 8000)));
|
||||
$this->assertEquals(getInternalDateTime(RX_TIME - 240000, 'Y.m.d'), getTimeGap(getInternalDateTime(RX_TIME - 240000)));
|
||||
}
|
||||
|
||||
|
||||
public function testGetTimezoneForCurrentUser()
|
||||
{
|
||||
// Test when the current user's time zone is different from the system default.
|
||||
$_SESSION['RHYMIX']['timezone'] = 'Pacific/Auckland';
|
||||
$this->assertEquals('Pacific/Auckland', Rhymix\Framework\DateTime::getTimezoneForCurrentUser());
|
||||
|
||||
|
||||
// Test when the current user's time zone is the same as the system default.
|
||||
unset($_SESSION['RHYMIX']['timezone']);
|
||||
$this->assertEquals('Asia/Seoul', Rhymix\Framework\DateTime::getTimezoneForCurrentUser());
|
||||
}
|
||||
|
||||
|
||||
public function testFormatTimestampForCurrentUser()
|
||||
{
|
||||
$timestamp_winter = 1454000000;
|
||||
$timestamp_summer = $timestamp_winter - (86400 * 184);
|
||||
|
||||
|
||||
// Test when the current user's time zone is in the Northern hemisphere with DST.
|
||||
$_SESSION['RHYMIX']['timezone'] = 'America/Chicago';
|
||||
$this->assertEquals('20160128 105320', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_winter));
|
||||
$this->assertEquals('20150728 115320', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_summer));
|
||||
$this->assertEquals('20150728 115320', getDisplayDateTime($timestamp_summer, 'Ymd His'));
|
||||
|
||||
|
||||
// Test when the current user's time zone is in the Southern hemisphere with DST.
|
||||
$_SESSION['RHYMIX']['timezone'] = 'Pacific/Auckland';
|
||||
$this->assertEquals('20160129 055320', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_winter));
|
||||
$this->assertEquals('20150729 045320', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_summer));
|
||||
$this->assertEquals('20150729 045320', getDisplayDateTime($timestamp_summer, 'Ymd His'));
|
||||
|
||||
|
||||
// Test when the current user's time zone is the same as the system default without DST.
|
||||
unset($_SESSION['RHYMIX']['timezone']);
|
||||
$this->assertEquals('20160129 015320', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_winter));
|
||||
$this->assertEquals('20150729 015320', Rhymix\Framework\DateTime::formatTimestampForCurrentUser('Ymd His', $timestamp_summer));
|
||||
$this->assertEquals('20150729 015320', getDisplayDateTime($timestamp_summer, 'Ymd His'));
|
||||
}
|
||||
|
||||
|
||||
public function testGetTimezoneList()
|
||||
{
|
||||
$tzlist = Rhymix\Framework\DateTime::getTimezoneList();
|
||||
$this->assertTrue(array_key_exists('Etc/UTC', $tzlist));
|
||||
$this->assertEquals('Asia/Seoul (+09:00)', $tzlist['Asia/Seoul']);
|
||||
}
|
||||
|
||||
|
||||
public function testGetTimezoneOffset()
|
||||
{
|
||||
$this->assertEquals(32400, Rhymix\Framework\DateTime::getTimezoneOffset('Asia/Seoul'));
|
||||
|
|
@ -204,7 +204,7 @@ class DateTimeTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(-18000, Rhymix\Framework\DateTime::getTimezoneOffset('America/New_York', strtotime('2016-01-01')));
|
||||
$this->assertEquals(-14400, Rhymix\Framework\DateTime::getTimezoneOffset('America/New_York', strtotime('2015-07-01')));
|
||||
}
|
||||
|
||||
|
||||
public function testGetTimezoneOffsetFromInternal()
|
||||
{
|
||||
$this->assertEquals(21600, Rhymix\Framework\DateTime::getTimezoneOffsetFromInternal('Asia/Seoul'));
|
||||
|
|
@ -213,7 +213,7 @@ class DateTimeTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(-28800, Rhymix\Framework\DateTime::getTimezoneOffsetFromInternal('America/New_York', strtotime('2016-01-01')));
|
||||
$this->assertEquals(-25200, Rhymix\Framework\DateTime::getTimezoneOffsetFromInternal('America/New_York', strtotime('2015-07-01')));
|
||||
}
|
||||
|
||||
|
||||
public function testGetTimezoneOffsetByLegacyFormat()
|
||||
{
|
||||
$this->assertEquals(32400, Rhymix\Framework\DateTime::getTimezoneOffsetByLegacyFormat('+0900'));
|
||||
|
|
@ -221,7 +221,7 @@ class DateTimeTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(19800, Rhymix\Framework\DateTime::getTimezoneOffsetByLegacyFormat('+0530'));
|
||||
$this->assertEquals(-38700, Rhymix\Framework\DateTime::getTimezoneOffsetByLegacyFormat('-1045'));
|
||||
}
|
||||
|
||||
|
||||
public function testGetTimezoneNameByOffset()
|
||||
{
|
||||
$this->assertEquals('Etc/GMT-9', Rhymix\Framework\DateTime::getTimezoneNameByOffset(32400));
|
||||
|
|
@ -230,22 +230,22 @@ class DateTimeTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('Asia/Kolkata', Rhymix\Framework\DateTime::getTimezoneNameByOffset(19800));
|
||||
$this->assertEquals('Australia/Eucla', Rhymix\Framework\DateTime::getTimezoneNameByOffset(31500));
|
||||
}
|
||||
|
||||
|
||||
public function testGetRelativeTimestamp()
|
||||
{
|
||||
$GLOBALS['lang'] = Rhymix\Framework\Lang::getInstance('ko');
|
||||
$GLOBALS['lang']->loadPlugin('common');
|
||||
|
||||
|
||||
$this->assertEquals('방금', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME));
|
||||
$this->assertEquals('20초 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 20));
|
||||
$this->assertEquals('1분 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 60));
|
||||
$this->assertEquals('30분 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 1800));
|
||||
$this->assertEquals('10일 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 86400 * 10));
|
||||
$this->assertEquals('6개월 전', Rhymix\Framework\DateTime::getRelativeTimestamp(RX_TIME - 86400 * 190));
|
||||
|
||||
|
||||
$GLOBALS['lang'] = Rhymix\Framework\Lang::getInstance('en');
|
||||
$GLOBALS['lang']->loadPlugin('common');
|
||||
|
||||
|
||||
$this->assertEquals('just now', getInternalDateTime(RX_TIME + 3600, 'relative'));
|
||||
$this->assertEquals('5 days ago', getDisplayDateTime(RX_TIME - 86400 * 5.4, 'relative'));
|
||||
$this->assertEquals('3 months ago', zdate(date('YmdHis', RX_TIME - 86400 * 100), 'relative'));
|
||||
|
|
|
|||
|
|
@ -3,14 +3,14 @@
|
|||
class DebugTest extends \Codeception\TestCase\Test
|
||||
{
|
||||
public $error_log;
|
||||
|
||||
|
||||
public function _before()
|
||||
{
|
||||
Rhymix\Framework\Debug::enable();
|
||||
$this->error_log = ini_get('error_log');
|
||||
ini_set('error_log', '/dev/null');
|
||||
}
|
||||
|
||||
|
||||
public function _after()
|
||||
{
|
||||
if ($this->error_log)
|
||||
|
|
@ -32,7 +32,7 @@ class DebugTest extends \Codeception\TestCase\Test
|
|||
Rhymix\Framework\Debug::clearEntries();
|
||||
$this->assertEquals(0, count(Rhymix\Framework\Debug::getEntries()));
|
||||
}
|
||||
|
||||
|
||||
public function testDebugError()
|
||||
{
|
||||
$file = __FILE__;
|
||||
|
|
@ -47,7 +47,7 @@ class DebugTest extends \Codeception\TestCase\Test
|
|||
Rhymix\Framework\Debug::clearErrors();
|
||||
$this->assertEquals(0, count(Rhymix\Framework\Debug::getErrors()));
|
||||
}
|
||||
|
||||
|
||||
public function testDebugQuery()
|
||||
{
|
||||
Rhymix\Framework\Debug::addQuery(array(
|
||||
|
|
@ -72,13 +72,13 @@ class DebugTest extends \Codeception\TestCase\Test
|
|||
Rhymix\Framework\Debug::clearQueries();
|
||||
$this->assertEquals(0, count(Rhymix\Framework\Debug::getQueries()));
|
||||
}
|
||||
|
||||
|
||||
public function testDebugTranslateFilename()
|
||||
{
|
||||
$original_filename = __FILE__;
|
||||
$trans_filename = substr($original_filename, strlen(\RX_BASEDIR));
|
||||
$this->assertEquals($trans_filename, Rhymix\Framework\Debug::translateFilename($original_filename));
|
||||
|
||||
|
||||
$original_filename = __FILE__;
|
||||
$alias_filename = $original_filename . '.foobar';
|
||||
$trans_filename = substr($alias_filename, strlen(\RX_BASEDIR));
|
||||
|
|
|
|||
|
|
@ -8,20 +8,20 @@ class FormatterTest extends \Codeception\TestCase\Test
|
|||
$html1 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/text2html.target1.html');
|
||||
$html2 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/text2html.target2.html');
|
||||
$html3 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/text2html.target3.html');
|
||||
|
||||
|
||||
$this->assertEquals($html1, Rhymix\Framework\Formatter::text2html($text));
|
||||
$this->assertEquals($html2, Rhymix\Framework\Formatter::text2html($text, Rhymix\Framework\Formatter::TEXT_NEWLINE_AS_P));
|
||||
$this->assertEquals($html3, Rhymix\Framework\Formatter::text2html($text, Rhymix\Framework\Formatter::TEXT_DOUBLE_NEWLINE_AS_P));
|
||||
}
|
||||
|
||||
|
||||
public function testHTML2Text()
|
||||
{
|
||||
$html = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/html2text.source.html');
|
||||
$text = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/html2text.target.txt');
|
||||
|
||||
|
||||
$this->assertEquals($text, Rhymix\Framework\Formatter::html2text($html));
|
||||
}
|
||||
|
||||
|
||||
public function testMarkdown2HTML()
|
||||
{
|
||||
$markdown = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/markdown2html.source.md');
|
||||
|
|
@ -29,47 +29,47 @@ class FormatterTest extends \Codeception\TestCase\Test
|
|||
$html2 = $this->_removeSpace(file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/markdown2html.target2.html'));
|
||||
$html3 = $this->_removeSpace(file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/markdown2html.target3.html'));
|
||||
$html4 = $this->_removeSpace(file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/markdown2html.target4.html'));
|
||||
|
||||
|
||||
$this->assertEquals($html1, $this->_removeSpace(Rhymix\Framework\Formatter::markdown2html($markdown)));
|
||||
$this->assertEquals($html2, $this->_removeSpace(Rhymix\Framework\Formatter::markdown2html($markdown, Rhymix\Framework\Formatter::MD_NEWLINE_AS_BR)));
|
||||
$this->assertEquals($html3, $this->_removeSpace(Rhymix\Framework\Formatter::markdown2html($markdown, Rhymix\Framework\Formatter::MD_NEWLINE_AS_BR | Rhymix\Framework\Formatter::MD_ENABLE_EXTRA)));
|
||||
$this->assertEquals($html4, $this->_removeSpace(Rhymix\Framework\Formatter::markdown2html($markdown, Rhymix\Framework\Formatter::MD_ENABLE_EXTRA)));
|
||||
}
|
||||
|
||||
|
||||
public function testMarkdownExtra()
|
||||
{
|
||||
$markdown = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/markdownextra.source.md');
|
||||
$html1 = $this->_removeSpace(file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/markdownextra.target1.html'));
|
||||
$html2 = $this->_removeSpace(file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/markdownextra.target2.html'));
|
||||
|
||||
|
||||
$this->assertEquals($html1, $this->_removeSpace(Rhymix\Framework\Formatter::markdown2html($markdown)));
|
||||
$this->assertEquals($html2, $this->_removeSpace(Rhymix\Framework\Formatter::markdown2html($markdown, Rhymix\Framework\Formatter::MD_ENABLE_EXTRA)));
|
||||
}
|
||||
|
||||
|
||||
public function testHTML2Markdown()
|
||||
{
|
||||
$html = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/html2markdown.source.html');
|
||||
$markdown = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/html2markdown.target.md');
|
||||
|
||||
|
||||
$this->assertEquals($markdown, Rhymix\Framework\Formatter::html2markdown($html));
|
||||
}
|
||||
|
||||
|
||||
public function testBBCode()
|
||||
{
|
||||
$bbcode = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/bbcode.source.txt');
|
||||
$html = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/bbcode.target.html');
|
||||
|
||||
|
||||
$this->assertEquals($html, Rhymix\Framework\Formatter::bbcode($bbcode));
|
||||
}
|
||||
|
||||
|
||||
public function testApplySmartQuotes()
|
||||
{
|
||||
$before = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/smartypants.source.html');
|
||||
$after = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/smartypants.target.html');
|
||||
|
||||
|
||||
$this->assertEquals($after, Rhymix\Framework\Formatter::applySmartQuotes($before));
|
||||
}
|
||||
|
||||
|
||||
public function testCompileLESS()
|
||||
{
|
||||
$sources = array(
|
||||
|
|
@ -80,21 +80,21 @@ class FormatterTest extends \Codeception\TestCase\Test
|
|||
'foo' => '#123456',
|
||||
'bar' => '320px',
|
||||
);
|
||||
|
||||
|
||||
$real_target1 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/less.target1.css');
|
||||
$real_target2 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/less.target2.css');
|
||||
$test_target1 = \RX_BASEDIR . 'tests/_output/less.target1.css';
|
||||
$test_target2 = \RX_BASEDIR . 'tests/_output/less.target2.css';
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Formatter::compileLESS($sources, $test_target1, $variables));
|
||||
$this->assertEquals($real_target1, file_get_contents($test_target1));
|
||||
$this->assertTrue(Rhymix\Framework\Formatter::compileLESS($sources, $test_target2, $variables, true));
|
||||
$this->assertEquals($real_target2, file_get_contents($test_target2));
|
||||
|
||||
|
||||
unlink($test_target1);
|
||||
unlink($test_target2);
|
||||
}
|
||||
|
||||
|
||||
public function testCompileSCSS()
|
||||
{
|
||||
$sources = array(
|
||||
|
|
@ -105,45 +105,45 @@ class FormatterTest extends \Codeception\TestCase\Test
|
|||
'foo' => '#123456',
|
||||
'bar' => '320px',
|
||||
);
|
||||
|
||||
|
||||
$real_target1 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/scss.target1.css');
|
||||
$real_target2 = file_get_contents(\RX_BASEDIR . 'tests/_data/formatter/scss.target2.css');
|
||||
$test_target1 = \RX_BASEDIR . 'tests/_output/scss.target1.css';
|
||||
$test_target2 = \RX_BASEDIR . 'tests/_output/scss.target2.css';
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Formatter::compileSCSS($sources, $test_target1, $variables));
|
||||
$this->assertEquals($real_target1, file_get_contents($test_target1));
|
||||
$this->assertTrue(Rhymix\Framework\Formatter::compileSCSS($sources, $test_target2, $variables, true));
|
||||
$this->assertEquals($real_target2, file_get_contents($test_target2));
|
||||
|
||||
|
||||
unlink($test_target1);
|
||||
unlink($test_target2);
|
||||
}
|
||||
|
||||
|
||||
public function testMinifyCSS()
|
||||
{
|
||||
$source = \RX_BASEDIR . 'tests/_data/formatter/minify.source.css';
|
||||
$real_target = \RX_BASEDIR . 'tests/_data/formatter/minify.target.css';
|
||||
$test_target = \RX_BASEDIR . 'tests/_output/minify.target.css';
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Formatter::minifyCSS($source, $test_target));
|
||||
$this->assertEquals(file_get_contents($real_target), file_get_contents($test_target));
|
||||
|
||||
|
||||
unlink($test_target);
|
||||
}
|
||||
|
||||
|
||||
public function testMinifyJS()
|
||||
{
|
||||
$source = \RX_BASEDIR . 'tests/_data/formatter/minify.source.js';
|
||||
$real_target = \RX_BASEDIR . 'tests/_data/formatter/minify.target.js';
|
||||
$test_target = \RX_BASEDIR . 'tests/_output/minify.target.js';
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Formatter::minifyJS($source, $test_target));
|
||||
$this->assertEquals(file_get_contents($real_target), file_get_contents($test_target));
|
||||
|
||||
|
||||
unlink($test_target);
|
||||
}
|
||||
|
||||
|
||||
public function testConcatCSS()
|
||||
{
|
||||
$source1 = \RX_BASEDIR . 'tests/_data/formatter/concat.source1.css';
|
||||
|
|
@ -151,14 +151,14 @@ class FormatterTest extends \Codeception\TestCase\Test
|
|||
$real_target1 = \RX_BASEDIR . 'tests/_data/formatter/concat.target1.css';
|
||||
$real_target2 = \RX_BASEDIR . 'tests/_data/formatter/concat.target2.css';
|
||||
$test_target = \RX_BASEDIR . 'tests/_output/concat.target.css';
|
||||
|
||||
|
||||
$test_without_media_query = Rhymix\Framework\Formatter::concatCSS(array($source1, $source2), $test_target);
|
||||
$this->assertEquals(trim(file_get_contents($real_target1)), trim($test_without_media_query));
|
||||
|
||||
|
||||
$test_with_media_query = Rhymix\Framework\Formatter::concatCSS(array(array($source1, 'screen and (max-width: 640px)'), $source2), $test_target);
|
||||
$this->assertEquals(trim(file_get_contents($real_target2)), trim($test_with_media_query));
|
||||
}
|
||||
|
||||
|
||||
public function testConcatJS()
|
||||
{
|
||||
$source1 = \RX_BASEDIR . 'tests/_data/formatter/concat.source1.js';
|
||||
|
|
@ -166,14 +166,14 @@ class FormatterTest extends \Codeception\TestCase\Test
|
|||
$real_target1 = \RX_BASEDIR . 'tests/_data/formatter/concat.target1.js';
|
||||
$real_target2 = \RX_BASEDIR . 'tests/_data/formatter/concat.target2.js';
|
||||
$test_target = \RX_BASEDIR . 'tests/_output/concat.target.js';
|
||||
|
||||
|
||||
$test_without_targetie = Rhymix\Framework\Formatter::concatJS(array($source1, $source2), $test_target);
|
||||
$this->assertEquals(trim(file_get_contents($real_target1)), trim($test_without_targetie));
|
||||
|
||||
|
||||
$test_with_targetie = Rhymix\Framework\Formatter::concatJS(array($source1, array($source2, '(gte IE 6) & (lte IE 8)')), $test_target);
|
||||
$this->assertEquals(trim(file_get_contents($real_target2)), trim($test_with_targetie));
|
||||
}
|
||||
|
||||
|
||||
protected function _removeSpace($str)
|
||||
{
|
||||
return preg_replace('/\s+/', '', $str);
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ class KoreaTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('0505-9876-5432', Rhymix\Framework\Korea::formatPhoneNumber('050-5987-65432'));
|
||||
$this->assertEquals('070-7432-1000', Rhymix\Framework\Korea::formatPhoneNumber('0707-432-1000'));
|
||||
}
|
||||
|
||||
|
||||
public function testIsValidPhoneNumber()
|
||||
{
|
||||
$this->assertTrue(Rhymix\Framework\Korea::isValidPhoneNumber('1588-0000'));
|
||||
|
|
@ -39,7 +39,7 @@ class KoreaTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(Rhymix\Framework\Korea::isValidPhoneNumber('0303-1111-5432'));
|
||||
$this->assertFalse(Rhymix\Framework\Korea::isValidPhoneNumber('0505-9876-543210'));
|
||||
}
|
||||
|
||||
|
||||
public function testIsValidMobilePhoneNumber()
|
||||
{
|
||||
$this->assertTrue(Rhymix\Framework\Korea::isValidMobilePhoneNumber('011-345-6789'));
|
||||
|
|
@ -51,28 +51,28 @@ class KoreaTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(Rhymix\Framework\Korea::isValidMobilePhoneNumber('063-9876-5432'));
|
||||
$this->assertFalse(Rhymix\Framework\Korea::isValidMobilePhoneNumber('070-7654-3210'));
|
||||
}
|
||||
|
||||
|
||||
public function testIsValidJuminNumber()
|
||||
{
|
||||
// These numbers are fake.
|
||||
$this->assertTrue(Rhymix\Framework\Korea::isValidJuminNumber('123456-3456787'));
|
||||
$this->assertFalse(Rhymix\Framework\Korea::isValidJuminNumber('123456-3456788'));
|
||||
}
|
||||
|
||||
|
||||
public function testIsValidCorporationNumber()
|
||||
{
|
||||
// These numbers are fake.
|
||||
$this->assertTrue(Rhymix\Framework\Korea::isValidCorporationNumber('123456-0123453'));
|
||||
$this->assertFalse(Rhymix\Framework\Korea::isValidCorporationNumber('123456-0123454'));
|
||||
}
|
||||
|
||||
|
||||
public function testIsValidBusinessNumber()
|
||||
{
|
||||
// These numbers are fake.
|
||||
$this->assertTrue(Rhymix\Framework\Korea::isValidBusinessNumber('123-45-67891'));
|
||||
$this->assertFalse(Rhymix\Framework\Korea::isValidBusinessNumber('123-45-67892'));
|
||||
}
|
||||
|
||||
|
||||
public function testIsKoreanIP()
|
||||
{
|
||||
// Private IP ranges.
|
||||
|
|
@ -80,32 +80,32 @@ class KoreaTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('127.0.123.45'));
|
||||
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('192.168.10.1'));
|
||||
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('::1'));
|
||||
|
||||
|
||||
// Korean IP ranges.
|
||||
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('115.71.233.0'));
|
||||
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('114.207.12.3'));
|
||||
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('2001:0320::1'));
|
||||
$this->assertTrue(Rhymix\Framework\Korea::isKoreanIP('2407:B800::F'));
|
||||
|
||||
|
||||
// Foreign IP ranges.
|
||||
$this->assertFalse(Rhymix\Framework\Korea::isKoreanIP('216.58.197.0'));
|
||||
$this->assertFalse(Rhymix\Framework\Korea::isKoreanIP('170.14.168.0'));
|
||||
$this->assertFalse(Rhymix\Framework\Korea::isKoreanIP('2001:41d0:8:e8ad::1'));
|
||||
$this->assertFalse(Rhymix\Framework\Korea::isKoreanIP('2404:6800:4005:802::200e'));
|
||||
}
|
||||
|
||||
|
||||
public function testIsKoreanEmailAddress()
|
||||
{
|
||||
// Test Korean portals.
|
||||
$this->assertTrue(Rhymix\Framework\Korea::isKoreanEmailAddress('test@naver.com'));
|
||||
$this->assertTrue(Rhymix\Framework\Korea::isKoreanEmailAddress('test@hanmail.net'));
|
||||
$this->assertTrue(Rhymix\Framework\Korea::isKoreanEmailAddress('test@worksmobile.com'));
|
||||
|
||||
|
||||
// Test foreign portals.
|
||||
$this->assertFalse(Rhymix\Framework\Korea::isKoreanEmailAddress('test@gmail.com'));
|
||||
$this->assertFalse(Rhymix\Framework\Korea::isKoreanEmailAddress('test@hotmail.com'));
|
||||
$this->assertFalse(Rhymix\Framework\Korea::isKoreanEmailAddress('test@yahoo.com'));
|
||||
|
||||
|
||||
// Test third-party MX services.
|
||||
$this->assertTrue(Rhymix\Framework\Korea::isKoreanEmailAddress('test@woorimail.com'));
|
||||
$this->assertFalse(Rhymix\Framework\Korea::isKoreanEmailAddress('test@rhymix.org'));
|
||||
|
|
|
|||
|
|
@ -10,63 +10,63 @@ class LangTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue($ko instanceof Rhymix\Framework\Lang);
|
||||
$this->assertTrue($en instanceof Rhymix\Framework\Lang);
|
||||
$this->assertFalse($ko === $en);
|
||||
|
||||
|
||||
// Test backward compatible language code for Japanese.
|
||||
$ja = Rhymix\Framework\Lang::getInstance('ja');
|
||||
$jp = Rhymix\Framework\Lang::getInstance('jp');
|
||||
$this->assertTrue($ja === $jp);
|
||||
|
||||
|
||||
// Test loading new plugins.
|
||||
$this->assertNotEquals('ヘルプ', $ja->help);
|
||||
$ja->loadPlugin('common');
|
||||
$this->assertEquals('ヘルプ', $ja->help);
|
||||
|
||||
|
||||
// Test simple translations with namespacing.
|
||||
$this->assertEquals('도움말', $ko->get('common.help'));
|
||||
$this->assertEquals('Help', $en->get('common.help'));
|
||||
|
||||
|
||||
// Test simple translations without namespacing.
|
||||
$this->assertEquals('도움말', $ko->help);
|
||||
$this->assertEquals('Help', $en->help);
|
||||
|
||||
|
||||
// Test complex translations with multidimensional arrays.
|
||||
$this->assertEquals('%d분 전', $ko->get('common.time_gap.min'));
|
||||
$this->assertEquals('10분 전', $ko->get('common.time_gap.min', 10));
|
||||
$this->assertTrue($ko->get('common.time_gap') instanceof \ArrayObject);
|
||||
$this->assertEquals('%d분 전', $ko->get('common.time_gap')->min);
|
||||
|
||||
|
||||
// Test nonexistent keys.
|
||||
$this->assertEquals('common.nonexistent', $ko->get('common.nonexistent'));
|
||||
$this->assertEquals('common.nonexistent', $ko->get('common.nonexistent', 'foo', 'bar'));
|
||||
$this->assertEquals('admin.help', $ko->get('admin.help'));
|
||||
$this->assertEquals('admin.help', $en->get('admin.help'));
|
||||
|
||||
|
||||
// Test setting new keys with and without namespacing.
|
||||
$ko->set('foo', 'FOO!');
|
||||
$this->assertEquals('FOO!', $ko->get('foo'));
|
||||
$ko->set('common.foobar', 'FOOBAR!');
|
||||
$this->assertEquals('FOOBAR!', $ko->get('common.foobar'));
|
||||
$this->assertEquals('FOOBAR!', $ko->get('foobar'));
|
||||
|
||||
|
||||
// Test setting new keys with multidimensional arrays.
|
||||
$ko->set('common.time_gap.foobar', 'FOOBAR!');
|
||||
$this->assertEquals('FOOBAR!', $ko->get('common.time_gap.foobar'));
|
||||
$ko->set('common.foobar.baz', 'BAZ!');
|
||||
$this->assertNotEquals('BAZ!', $ko->get('common.foobar.baz'));
|
||||
|
||||
|
||||
// Test fallback to English.
|
||||
$en->only_in_english = 'Hello world';
|
||||
$this->assertEquals('Hello world', $ko->only_in_english);
|
||||
$this->assertEquals('Hello world', $en->only_in_english);
|
||||
$this->assertEquals('Hello world', $ja->only_in_english);
|
||||
|
||||
|
||||
// Test string interpolation.
|
||||
$ko->foobartestlang = '%s님 안녕하세요?';
|
||||
$this->assertEquals('Travis님 안녕하세요?', $ko->foobartestlang('Travis'));
|
||||
$en->foobartestlang = 'Hello, %s!';
|
||||
$this->assertEquals('Hello, Travis!', $en->get('foobartestlang', 'Travis'));
|
||||
}
|
||||
|
||||
|
||||
public function testLangCompat()
|
||||
{
|
||||
Context::loadLang('./modules/member/lang');
|
||||
|
|
|
|||
|
|
@ -7,13 +7,13 @@ class MIMETest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('audio/ogg', Rhymix\Framework\MIME::getTypeByExtension('ogg'));
|
||||
$this->assertEquals('image/gif', Rhymix\Framework\MIME::getTypeByExtension('gif'));
|
||||
$this->assertEquals('text/html', Rhymix\Framework\MIME::getTypeByExtension('htm'));
|
||||
|
||||
|
||||
$this->assertEquals('application/msword', Rhymix\Framework\MIME::getTypeByFilename('attachment.doc'));
|
||||
$this->assertEquals('application/pdf', Rhymix\Framework\MIME::getTypeByFilename('라이믹스.pdf'));
|
||||
$this->assertEquals('application/postscript', Rhymix\Framework\MIME::getTypeByFilename('MyGraphics.v2.eps'));
|
||||
$this->assertEquals('application/vnd.ms-excel', Mail::returnMIMEType('MySpreadsheet.xls'));
|
||||
$this->assertEquals('application/octet-stream', Mail::returnMIMEType('Untitled File'));
|
||||
|
||||
|
||||
$this->assertEquals('odt', Rhymix\Framework\MIME::getExtensionByType('application/vnd.oasis.opendocument.text'));
|
||||
$this->assertEquals('jpg', Rhymix\Framework\MIME::getExtensionByType('image/jpeg'));
|
||||
$this->assertEquals('mpg', Rhymix\Framework\MIME::getExtensionByType('video/mpeg'));
|
||||
|
|
|
|||
|
|
@ -6,12 +6,12 @@ class MailTest extends \Codeception\TestCase\Test
|
|||
{
|
||||
$driver = Rhymix\Framework\Mail::getDefaultDriver();
|
||||
$this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\MailInterface', $driver);
|
||||
|
||||
|
||||
$driver = Rhymix\Framework\Drivers\Mail\Dummy::getInstance(array());
|
||||
Rhymix\Framework\Mail::setDefaultDriver($driver);
|
||||
$this->assertEquals($driver, Rhymix\Framework\Mail::getDefaultDriver());
|
||||
}
|
||||
|
||||
|
||||
public function testGetSupportedDrivers()
|
||||
{
|
||||
$drivers = Rhymix\Framework\Mail::getSupportedDrivers();
|
||||
|
|
@ -22,82 +22,82 @@ class MailTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(array('api_token'), $drivers['sparkpost']['required']);
|
||||
$this->assertNotEmpty($drivers['woorimail']['spf_hint']);
|
||||
}
|
||||
|
||||
|
||||
public function testSenderAndRecipients()
|
||||
{
|
||||
$mail = new Rhymix\Framework\Mail;
|
||||
|
||||
|
||||
$this->assertNull($mail->getFrom());
|
||||
$mail->setFrom('devops@rhymix.org', 'Rhymix Developers');
|
||||
$this->assertEquals('Rhymix Developers <devops@rhymix.org>', $mail->getFrom());
|
||||
|
||||
|
||||
$this->assertEquals(null, $mail->message->getTo());
|
||||
$mail->addTo('whoever@rhymix.org', 'Name');
|
||||
$this->assertEquals(array('whoever@rhymix.org' => 'Name'), $mail->message->getTo());
|
||||
|
||||
|
||||
$this->assertEquals(null, $mail->message->getCc());
|
||||
$mail->addCc('whatever@rhymix.org', 'Nick');
|
||||
$this->assertEquals(array('whatever@rhymix.org' => 'Nick'), $mail->message->getCc());
|
||||
|
||||
|
||||
$this->assertEquals(null, $mail->message->getBcc());
|
||||
$mail->addBcc('wherever@rhymix.org', 'User');
|
||||
$this->assertEquals(array('wherever@rhymix.org' => 'User'), $mail->message->getBcc());
|
||||
|
||||
|
||||
$this->assertEquals(null, $mail->message->getReplyTo());
|
||||
$mail->setReplyTo('replyto@rhymix.org');
|
||||
$this->assertEquals(array('replyto@rhymix.org' => ''), $mail->message->getReplyTo());
|
||||
|
||||
|
||||
$recipients = $mail->getRecipients();
|
||||
$this->assertEquals(3, count($recipients));
|
||||
$this->assertContains('Name <whoever@rhymix.org>', $recipients);
|
||||
$this->assertContains('Nick <whatever@rhymix.org>', $recipients);
|
||||
$this->assertContains('User <wherever@rhymix.org>', $recipients);
|
||||
}
|
||||
|
||||
|
||||
public function testMiscHeaders()
|
||||
{
|
||||
$mail = new Rhymix\Framework\Mail;
|
||||
|
||||
|
||||
$mail->setReturnPath('envelope@rhymix.org');
|
||||
$this->assertEquals('envelope@rhymix.org', $mail->message->getReturnPath());
|
||||
|
||||
|
||||
$mail->setMessageID('some.random.string@rhymix.org');
|
||||
$this->assertEquals('some.random.string@rhymix.org', $mail->message->getId());
|
||||
|
||||
|
||||
$mail->setInReplyTo('<previous.message@rhymix.org>');
|
||||
$this->assertEquals('<previous.message@rhymix.org>', $mail->message->getHeaders()->get('In-Reply-To')->getValue());
|
||||
|
||||
|
||||
$mail->setReferences('<thread-1@rhymix.org>, <thread-2@rhymix.org>, <thread-3@rhymix.org>');
|
||||
$this->assertEquals('<thread-1@rhymix.org>, <thread-2@rhymix.org>, <thread-3@rhymix.org>', $mail->message->getHeaders()->get('References')->getValue());
|
||||
}
|
||||
|
||||
|
||||
public function testMailSubject()
|
||||
{
|
||||
$mail = new Rhymix\Framework\Mail;
|
||||
|
||||
|
||||
$mail->setSubject('Foobar!');
|
||||
$this->assertEquals('Foobar!', $mail->getSubject());
|
||||
$mail->setTitle('Foobarbazz?');
|
||||
$this->assertEquals('Foobarbazz?', $mail->getTitle());
|
||||
}
|
||||
|
||||
|
||||
public function testMailBody()
|
||||
{
|
||||
$baseurl = '/' . basename(dirname(dirname(dirname(__DIR__)))) . '/';
|
||||
$mail = new Rhymix\Framework\Mail;
|
||||
|
||||
|
||||
$mail->setBody('<p>Hello world!</p>', 'text/html');
|
||||
$this->assertEquals('<p>Hello world!</p>', $mail->getBody());
|
||||
$this->assertEquals('text/html', $mail->getContentType());
|
||||
|
||||
|
||||
$mail->setContent('<p>Hello world! Foobar?</p>', 'text/plain');
|
||||
$this->assertEquals('<p>Hello world! Foobar?</p>', $mail->getBody());
|
||||
$this->assertEquals('text/plain', $mail->getContentType());
|
||||
|
||||
|
||||
$mail->setBody('<p>Hello foobar...</p>', 'invalid value');
|
||||
$this->assertEquals('<p>Hello foobar...</p>', $mail->getContent());
|
||||
$this->assertEquals('text/plain', $mail->getContentType());
|
||||
|
||||
|
||||
$mail->setBody('<p><img src="files/attach/foobar.jpg" alt="TEST" /></p>', 'text/html');
|
||||
$this->assertEquals('<p><img src="https://www.rhymix.org' . $baseurl . 'files/attach/foobar.jpg" alt="TEST" /></p>', $mail->getBody());
|
||||
$mail->setBody('<p><img src="./files/attach/foobar.jpg" alt="TEST" /></p>', 'text/html');
|
||||
|
|
@ -106,24 +106,24 @@ class MailTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('<p><img src="https://www.rhymix.org' . $baseurl . 'files/attach/foobar.jpg" alt="TEST" /></p>', $mail->getBody());
|
||||
$mail->setBody('<p><img src="./files/attach/foobar.jpg" alt="TEST" /></p>', 'text/plain');
|
||||
$this->assertEquals('<p><img src="./files/attach/foobar.jpg" alt="TEST" /></p>', $mail->getBody());
|
||||
|
||||
|
||||
$mail->setContentType('html');
|
||||
$this->assertEquals('text/html', $mail->getContentType());
|
||||
$mail->setContentType('invalid');
|
||||
$this->assertEquals('text/plain', $mail->getContentType());
|
||||
}
|
||||
|
||||
|
||||
public function testMailAttach()
|
||||
{
|
||||
$mail = new Rhymix\Framework\Mail;
|
||||
|
||||
|
||||
$success = $mail->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css');
|
||||
$this->assertTrue($success);
|
||||
$success = $mail->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css', 'target.css');
|
||||
$this->assertTrue($success);
|
||||
$success = $mail->attach(\RX_BASEDIR . 'tests/_data/nonexistent.file.jpg');
|
||||
$this->assertFalse($success);
|
||||
|
||||
|
||||
$attachments = $mail->getAttachments();
|
||||
$this->assertEquals(2, count($attachments));
|
||||
$this->assertEquals('attach', $attachments[0]->type);
|
||||
|
|
@ -131,51 +131,51 @@ class MailTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('minify.source.css', $attachments[0]->display_filename);
|
||||
$this->assertEquals('target.css', $attachments[1]->display_filename);
|
||||
}
|
||||
|
||||
|
||||
public function testMailEmbed()
|
||||
{
|
||||
$mail = new Rhymix\Framework\Mail;
|
||||
|
||||
|
||||
$cid = $mail->embed(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css', 'thisismyrandomcid@rhymix.org');
|
||||
$this->assertEquals('cid:thisismyrandomcid@rhymix.org', $cid);
|
||||
|
||||
|
||||
$cid = $mail->embed(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css');
|
||||
$this->assertRegexp('/^cid:[0-9a-z]+@[^@]+$/i', $cid);
|
||||
}
|
||||
|
||||
|
||||
public function testMailClassCompatibility()
|
||||
{
|
||||
\Mail::useGmailAccount('devops@rhymix.org', 'password');
|
||||
$this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\Mail\\SMTP', \Mail::getDefaultDriver());
|
||||
|
||||
|
||||
\Mail::useSMTP(null, 'rhymix.org', 'devops@rhymix.org', 'password', 'tls', 587);
|
||||
$this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\Mail\\SMTP', \Mail::getDefaultDriver());
|
||||
|
||||
|
||||
$mail = new \Mail;
|
||||
|
||||
|
||||
$mail->setSender('Rhymix', 'devops@rhymix.org');
|
||||
$this->assertEquals('Rhymix <devops@rhymix.org>', $mail->getSender());
|
||||
|
||||
|
||||
$mail->setReceiptor('Recipient', 'whoever@rhymix.org');
|
||||
$this->assertEquals('Recipient <whoever@rhymix.org>', $mail->getReceiptor());
|
||||
$mail->setReceiptor('Another Recipient', 'whatever@rhymix.org');
|
||||
$this->assertEquals('Another Recipient <whatever@rhymix.org>', $mail->getReceiptor());
|
||||
$this->assertEquals(1, count($mail->message->getTo()));
|
||||
$this->assertEquals(null, $mail->message->getCc());
|
||||
|
||||
|
||||
$mail->setBcc('bcc-1@rhymix.org');
|
||||
$mail->setBcc('bcc-2@rhymix.org');
|
||||
$this->assertEquals(array('bcc-2@rhymix.org' => ''), $mail->message->getBcc());
|
||||
|
||||
|
||||
$content = '<p>Hello world!</p><p>This is a long message to test chunk splitting.</p><p>This feature is only available using the legacy Mail class.</p>';
|
||||
$mail->setBody($content);
|
||||
$this->assertEquals(chunk_split(base64_encode($content)), $mail->getHTMLContent());
|
||||
$this->assertEquals(chunk_split(base64_encode(htmlspecialchars($content))), $mail->getPlainContent());
|
||||
|
||||
|
||||
$mail->addAttachment(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css', 'target.css');
|
||||
$cid = $mail->addCidAttachment(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css', 'thisismyrandomcid@rhymix.org');
|
||||
$this->assertEquals('cid:thisismyrandomcid@rhymix.org', $cid);
|
||||
|
||||
|
||||
$attachments = $mail->getAttachments();
|
||||
$this->assertEquals(2, count($attachments));
|
||||
$this->assertEquals('attach', $attachments[0]->type);
|
||||
|
|
@ -183,7 +183,7 @@ class MailTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('embed', $attachments[1]->type);
|
||||
$this->assertEquals('cid:thisismyrandomcid@rhymix.org', $attachments[1]->cid);
|
||||
}
|
||||
|
||||
|
||||
public function testEmailAddressValidator()
|
||||
{
|
||||
$this->assertEquals('devops@rhymix.org', Mail::isVaildMailAddress('devops@rhymix.org'));
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ class PaginationTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(1, Rhymix\Framework\Pagination::countPages(20, 20));
|
||||
$this->assertEquals(2, Rhymix\Framework\Pagination::countPages(21, 20));
|
||||
}
|
||||
|
||||
|
||||
public function testCreateLinks()
|
||||
{
|
||||
$links = Rhymix\Framework\Pagination::createLinks('index.php?page=', 27, 3);
|
||||
|
|
@ -17,29 +17,29 @@ class PaginationTest extends \Codeception\TestCase\Test
|
|||
$this->assertStringContainsString('<a href="index.php?page=3">', $links);
|
||||
$this->assertStringContainsString('<span class="page_number">1</span>', $links);
|
||||
$this->assertStringContainsString('<span class="page_number">10</span>', $links);
|
||||
|
||||
|
||||
$links = Rhymix\Framework\Pagination::createLinks('/foo/bar/page/', 27, 13);
|
||||
$this->assertStringContainsString('<div class="pagination">', $links);
|
||||
$this->assertStringContainsString('<a href="/foo/bar/page/13">', $links);
|
||||
$this->assertStringContainsString('<span class="page_number">11</span>', $links);
|
||||
$this->assertStringContainsString('<span class="page_number">20</span>', $links);
|
||||
|
||||
|
||||
$links = Rhymix\Framework\Pagination::createLinks('/rhymix?page=$PAGE&foo=bar', 27, 25);
|
||||
$this->assertStringContainsString('<div class="pagination">', $links);
|
||||
$this->assertStringContainsString('<a href="/rhymix?page=27&foo=bar">', $links);
|
||||
$this->assertStringContainsString('<span class="page_number">21</span>', $links);
|
||||
$this->assertStringContainsString('<span class="page_number">27</span>', $links);
|
||||
|
||||
|
||||
$links = Rhymix\Framework\Pagination::createLinks('p', 27, 3, 10, Rhymix\Framework\Pagination::COUNT_STYLE_CONTINUOUS);
|
||||
$this->assertStringContainsString('<div class="pagination">', $links);
|
||||
$this->assertStringContainsString('<span class="page_number">1</span>', $links);
|
||||
$this->assertStringContainsString('<span class="page_number">10</span>', $links);
|
||||
|
||||
|
||||
$links = Rhymix\Framework\Pagination::createLinks('p', 27, 13, 10, Rhymix\Framework\Pagination::COUNT_STYLE_CONTINUOUS);
|
||||
$this->assertStringContainsString('<div class="pagination">', $links);
|
||||
$this->assertStringContainsString('<span class="page_number">9</span>', $links);
|
||||
$this->assertStringContainsString('<span class="page_number">18</span>', $links);
|
||||
|
||||
|
||||
$links = Rhymix\Framework\Pagination::createLinks('p', 27, 25, 10, Rhymix\Framework\Pagination::COUNT_STYLE_CONTINUOUS);
|
||||
$this->assertStringContainsString('<div class="pagination">', $links);
|
||||
$this->assertStringContainsString('<span class="page_number">18</span>', $links);
|
||||
|
|
|
|||
|
|
@ -7,12 +7,12 @@ class PasswordTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(Rhymix\Framework\Password::isValidAlgorithm('bcrypt'));
|
||||
$this->assertTrue(Rhymix\Framework\Password::isValidAlgorithm('whirlpool,pbkdf2'));
|
||||
$this->assertTrue(Rhymix\Framework\Password::isValidAlgorithm(array('md5', 'sha1', 'md5')));
|
||||
|
||||
|
||||
$this->assertFalse(Rhymix\Framework\Password::isValidAlgorithm('bunga_bunga'));
|
||||
Rhymix\Framework\Password::addAlgorithm('bunga_bunga', '/bunga_bunga/', function($hash) { return 'bunga_bunga'; });
|
||||
$this->assertTrue(Rhymix\Framework\Password::isValidAlgorithm('bunga_bunga'));
|
||||
}
|
||||
|
||||
|
||||
public function testGetSupportedAlgorithms()
|
||||
{
|
||||
$algos = Rhymix\Framework\Password::getSupportedAlgorithms();
|
||||
|
|
@ -20,26 +20,26 @@ class PasswordTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(in_array('pbkdf2', $algos));
|
||||
$this->assertTrue(in_array('md5', $algos));
|
||||
}
|
||||
|
||||
|
||||
public function testGetBestSupportedAlgorithm()
|
||||
{
|
||||
$algo = Rhymix\Framework\Password::getBestSupportedAlgorithm();
|
||||
$this->assertTrue($algo === 'bcrypt' || $algo === 'pbkdf2');
|
||||
}
|
||||
|
||||
|
||||
public function testGetDefaultAlgorithm()
|
||||
{
|
||||
$algo = Rhymix\Framework\Password::getDefaultAlgorithm();
|
||||
$this->assertTrue($algo === 'bcrypt' || $algo === 'pbkdf2' || $algo === 'md5');
|
||||
}
|
||||
|
||||
|
||||
public function testGetWorkFactor()
|
||||
{
|
||||
$work_factor = $algo = Rhymix\Framework\Password::getWorkFactor();
|
||||
$this->assertTrue($work_factor >= 4);
|
||||
$this->assertTrue($work_factor <= 31);
|
||||
}
|
||||
|
||||
|
||||
public function testGetRandomPassword()
|
||||
{
|
||||
$password = Rhymix\Framework\Password::getRandomPassword(16);
|
||||
|
|
@ -49,7 +49,7 @@ class PasswordTest extends \Codeception\TestCase\Test
|
|||
$this->assertRegexp('/[0-9]/', $password);
|
||||
$this->assertRegexp('/[^a-zA-Z0-9]/', $password);
|
||||
}
|
||||
|
||||
|
||||
public function testHashPassword()
|
||||
{
|
||||
$password = Rhymix\Framework\Security::getRandom(32);
|
||||
|
|
@ -58,29 +58,29 @@ class PasswordTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(hash('whirlpool', $password), Rhymix\Framework\Password::hashPassword($password, 'whirlpool'));
|
||||
$this->assertEquals('5d2e19393cc5ef67', Rhymix\Framework\Password::hashPassword('password', 'mysql_old_password'));
|
||||
}
|
||||
|
||||
|
||||
public function testCheckPassword()
|
||||
{
|
||||
$password = Rhymix\Framework\Security::getRandom(32);
|
||||
|
||||
|
||||
$algos = array('whirlpool', 'ripemd160', 'bcrypt');
|
||||
$hash = Rhymix\Framework\Password::hashPassword($password, $algos);
|
||||
$this->assertRegExp('/^\$2y\$/', $hash);
|
||||
$this->assertEquals(60, strlen($hash));
|
||||
$this->assertTrue(Rhymix\Framework\Password::checkPassword($password, $hash, $algos));
|
||||
|
||||
|
||||
$algos = array('sha384', 'pbkdf2');
|
||||
$hash = Rhymix\Framework\Password::hashPassword($password, $algos);
|
||||
$this->assertRegExp('/^(sha256|sha512):[0-9]+:/', $hash);
|
||||
$this->assertEquals(60, strlen($hash));
|
||||
$this->assertTrue(Rhymix\Framework\Password::checkPassword($password, $hash, $algos));
|
||||
|
||||
|
||||
$algos = array('sha1', 'portable');
|
||||
$hash = Rhymix\Framework\Password::hashPassword($password, $algos);
|
||||
$this->assertRegExp('/^\$P\$/', $hash);
|
||||
$this->assertEquals(34, strlen($hash));
|
||||
$this->assertTrue(Rhymix\Framework\Password::checkPassword($password, $hash, $algos));
|
||||
|
||||
|
||||
foreach (array('drupal', 'joomla', 'kimsqrb', 'mysql_old_password', 'mysql_new_password', 'mssql_pwdencrypt') as $algo)
|
||||
{
|
||||
$hash = Rhymix\Framework\Password::hashPassword($password, $algo);
|
||||
|
|
@ -88,55 +88,55 @@ class PasswordTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(Rhymix\Framework\Password::checkPassword($password, $hash . 'x', $algo));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function testCheckAlgorithm()
|
||||
{
|
||||
$password = Rhymix\Framework\Security::getRandom(32, 'hex');
|
||||
|
||||
|
||||
$this->assertEquals(array('md5', 'md5,sha1,md5'), Rhymix\Framework\Password::checkAlgorithm($password));
|
||||
$this->assertEquals(array('sha512', 'whirlpool'), Rhymix\Framework\Password::checkAlgorithm(hash('sha512', $password)));
|
||||
|
||||
|
||||
$hash = '$2y$10$VkxBdEBTZ1HyLluZPjXCjuFffw0a6alZlbb733CF/zA22HDpBNsMm';
|
||||
$this->assertEquals(array('bcrypt'), Rhymix\Framework\Password::checkAlgorithm($hash));
|
||||
|
||||
|
||||
$hash = 'sha512:0008192:hoXcLXQzIiIJ:ElokybdRf+i512M4/4PIdEiSDgZ8f0uL';
|
||||
$this->assertEquals(array('pbkdf2'), Rhymix\Framework\Password::checkAlgorithm($hash));
|
||||
}
|
||||
|
||||
|
||||
public function testCheckWorkFactor()
|
||||
{
|
||||
$hash = '$2y$10$VkxBdEBTZ1HyLluZPjXCjuFffw0a6alZlbb733CF/zA22HDpBNsMm';
|
||||
$this->assertEquals(10, Rhymix\Framework\Password::checkWorkFactor($hash));
|
||||
|
||||
|
||||
$hash = 'sha512:0008192:hoXcLXQzIiIJ:ElokybdRf+i512M4/4PIdEiSDgZ8f0uL';
|
||||
$this->assertEquals(8, Rhymix\Framework\Password::checkWorkFactor($hash));
|
||||
|
||||
|
||||
$hash = '5f4dcc3b5aa765d61d8327deb882cf99';
|
||||
$this->assertEquals(0, Rhymix\Framework\Password::checkWorkFactor($hash));
|
||||
}
|
||||
|
||||
|
||||
public function testBcrypt()
|
||||
{
|
||||
$password = 'password';
|
||||
$hash = '$2y$10$VkxBdEBTZ1HyLluZPjXCjuFffw0a6alZlbb733CF/zA22HDpBNsMm';
|
||||
$this->assertEquals($hash, Rhymix\Framework\Password::bcrypt($password, $hash));
|
||||
}
|
||||
|
||||
|
||||
public function testPBKDF2()
|
||||
{
|
||||
$password = 'password';
|
||||
$salt = 'rtmIxdEUoWUk';
|
||||
$hash = 'sha512:0016384:rtmIxdEUoWUk:1hrwGP3ScWvxslnqNFqyhM6Ddn4iYrwf';
|
||||
$this->assertEquals($hash, Rhymix\Framework\Password::pbkdf2($password, $salt, 'sha512', 16384, 24));
|
||||
|
||||
|
||||
$hash = 'sha512:16384:rtmIxdEUoWUk:1hrwGP3ScWvxslnqNFqyhM6Ddn4iYrwf';
|
||||
$this->assertEquals($hash, Rhymix\Framework\Password::pbkdf2($password, $salt, 'sha512', 16384, 24, 5));
|
||||
|
||||
|
||||
$salt = 'KpnA8ZAxvig32n7p2PnEjx4NN7gPpUQm';
|
||||
$hash = 'sha1:12000:KpnA8ZAxvig32n7p2PnEjx4NN7gPpUQm:TeILMSF8ao/NVJ4wdk7lXDKQre9TUCht';
|
||||
$this->assertEquals($hash, Rhymix\Framework\Password::pbkdf2($password, $salt, 'sha1', 12000, 24, 5));
|
||||
}
|
||||
|
||||
|
||||
public function testCountEntropyBits()
|
||||
{
|
||||
$this->assertEquals(0, Rhymix\Framework\Password::countEntropyBits(''));
|
||||
|
|
|
|||
|
|
@ -7,20 +7,20 @@ class RouterTest extends \Codeception\TestCase\Test
|
|||
Rhymix\Framework\Config::set('url.rewrite', null);
|
||||
Rhymix\Framework\Config::set('use_rewrite', false);
|
||||
$this->assertEquals(0, Rhymix\Framework\Router::getRewriteLevel());
|
||||
|
||||
|
||||
Rhymix\Framework\Config::set('url.rewrite', 1);
|
||||
Rhymix\Framework\Config::set('use_rewrite', false);
|
||||
$this->assertEquals(1, Rhymix\Framework\Router::getRewriteLevel());
|
||||
|
||||
|
||||
Rhymix\Framework\Config::set('url.rewrite', 1);
|
||||
Rhymix\Framework\Config::set('use_rewrite', true);
|
||||
$this->assertEquals(1, Rhymix\Framework\Router::getRewriteLevel());
|
||||
|
||||
|
||||
Rhymix\Framework\Config::set('url.rewrite', 2);
|
||||
Rhymix\Framework\Config::set('use_rewrite', true);
|
||||
$this->assertEquals(2, Rhymix\Framework\Router::getRewriteLevel());
|
||||
}
|
||||
|
||||
|
||||
public function testGetURL()
|
||||
{
|
||||
$info = Rhymix\Framework\Parsers\ModuleActionParser::loadXML(\RX_BASEDIR . 'modules/board/conf/module.xml');
|
||||
|
|
@ -28,50 +28,50 @@ class RouterTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(isset($info->permission));
|
||||
$this->assertGreaterThan(0, count($info->route->GET));
|
||||
$this->assertGreaterThan(0, count($info->action->dispBoardContent->route));
|
||||
|
||||
|
||||
getController('module')->registerActionForwardRoutes('member');
|
||||
|
||||
|
||||
$args = array('mid' => 'board', 'act' => 'dispBoardContent');
|
||||
$this->assertEquals('board', Rhymix\Framework\Router::getURL($args, 2));
|
||||
$this->assertEquals('index.php?mid=board&act=dispBoardContent', Rhymix\Framework\Router::getURL($args, 1));
|
||||
$this->assertEquals('index.php?mid=board&act=dispBoardContent', Rhymix\Framework\Router::getURL($args, 0));
|
||||
|
||||
|
||||
$args = array('mid' => 'board', 'page' => 3);
|
||||
$this->assertEquals('board/page/3', Rhymix\Framework\Router::getURL($args, 2));
|
||||
$this->assertEquals('board?page=3', Rhymix\Framework\Router::getURL($args, 1));
|
||||
$this->assertEquals('index.php?mid=board&page=3', Rhymix\Framework\Router::getURL($args, 0));
|
||||
|
||||
|
||||
$args = array('mid' => 'board', 'document_srl' => 123);
|
||||
$this->assertEquals('board/123', Rhymix\Framework\Router::getURL($args, 2));
|
||||
$this->assertEquals('board/123', Rhymix\Framework\Router::getURL($args, 1));
|
||||
$this->assertEquals('index.php?mid=board&document_srl=123', Rhymix\Framework\Router::getURL($args, 0));
|
||||
|
||||
|
||||
$args = array('mid' => 'board', 'act' => 'dispBoardWrite', 'document_srl' => 123);
|
||||
$this->assertEquals('board/123/edit', Rhymix\Framework\Router::getURL($args, 2));
|
||||
$this->assertEquals('index.php?mid=board&act=dispBoardWrite&document_srl=123', Rhymix\Framework\Router::getURL($args, 1));
|
||||
$this->assertEquals('index.php?mid=board&act=dispBoardWrite&document_srl=123', Rhymix\Framework\Router::getURL($args, 0));
|
||||
|
||||
|
||||
$args = array('mid' => 'board', 'act' => 'dispBoardWrite');
|
||||
$this->assertEquals('board/write', Rhymix\Framework\Router::getURL($args, 2));
|
||||
$this->assertEquals('index.php?mid=board&act=dispBoardWrite', Rhymix\Framework\Router::getURL($args, 1));
|
||||
$this->assertEquals('index.php?mid=board&act=dispBoardWrite', Rhymix\Framework\Router::getURL($args, 0));
|
||||
|
||||
|
||||
$args = array('mid' => 'board', 'act' => 'dispBoardModifyComment', 'document_srl' => 123, 'comment_srl' => 456, 'extra_param' => 'foo bar');
|
||||
$this->assertEquals('board/comment/456/edit?extra_param=foo+bar', Rhymix\Framework\Router::getURL($args, 2));
|
||||
$this->assertEquals('index.php?mid=board&act=dispBoardModifyComment&document_srl=123&comment_srl=456&extra_param=foo+bar', Rhymix\Framework\Router::getURL($args, 1));
|
||||
$this->assertEquals('index.php?mid=board&act=dispBoardModifyComment&document_srl=123&comment_srl=456&extra_param=foo+bar', Rhymix\Framework\Router::getURL($args, 0));
|
||||
|
||||
|
||||
$args = array('mid' => 'board', 'act' => 'dispMemberInfo');
|
||||
$this->assertEquals('board/member_info', Rhymix\Framework\Router::getURL($args, 2));
|
||||
$this->assertEquals('index.php?mid=board&act=dispMemberInfo', Rhymix\Framework\Router::getURL($args, 1));
|
||||
$this->assertEquals('index.php?mid=board&act=dispMemberInfo', Rhymix\Framework\Router::getURL($args, 0));
|
||||
|
||||
|
||||
$args = array('module' => 'document', 'act' => 'procDocumentVoteUp');
|
||||
$this->assertEquals('document/procDocumentVoteUp', Rhymix\Framework\Router::getURL($args, 2));
|
||||
$this->assertEquals('index.php?module=document&act=procDocumentVoteUp', Rhymix\Framework\Router::getURL($args, 1));
|
||||
$this->assertEquals('index.php?module=document&act=procDocumentVoteUp', Rhymix\Framework\Router::getURL($args, 0));
|
||||
}
|
||||
|
||||
|
||||
public function testParseURL()
|
||||
{
|
||||
$args = array('mid' => 'board', 'act' => 'dispBoardContent', 'document_srl' => '123');
|
||||
|
|
@ -79,13 +79,13 @@ class RouterTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('board/123', Rhymix\Framework\Router::parseURL('GET', 'board/123', 2)->url);
|
||||
$this->assertEquals('board', Rhymix\Framework\Router::parseURL('GET', 'board/123', 2)->mid);
|
||||
$this->assertEquals('dispBoardContent', Rhymix\Framework\Router::parseURL('GET', 'board/123', 2)->act);
|
||||
|
||||
|
||||
$args = array('mid' => 'board', 'document_srl' => '123');
|
||||
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'board/123', 1)->args);
|
||||
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'index.php?mid=board&document_srl=123', 0)->args);
|
||||
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'board/123', 1)->args);
|
||||
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'index.php?mid=board&document_srl=123', 0)->args);
|
||||
|
||||
|
||||
$args = array('mid' => 'board', 'act' => 'dispBoardModifyComment', 'comment_srl' => '456', 'extra_param' => 'foo bar');
|
||||
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'board/comment/456/edit?extra_param=foo+bar', 2)->args);
|
||||
$this->assertEquals('board', Rhymix\Framework\Router::parseURL('GET', 'board/comment/456/edit?extra_param=foo+bar', 2)->mid);
|
||||
|
|
@ -93,15 +93,15 @@ class RouterTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('', Rhymix\Framework\Router::parseURL('GET', 'board/comment/456/edit?extra_param=foo+bar', 2)->document_srl ?? '');
|
||||
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'index.php?mid=board&act=dispBoardModifyComment&comment_srl=456&extra_param=foo+bar', 1)->args);
|
||||
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'index.php?mid=board&act=dispBoardModifyComment&comment_srl=456&extra_param=foo+bar', 0)->args);
|
||||
|
||||
|
||||
$args = array('mid' => 'board', 'act' => 'dispMemberInfo');
|
||||
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'board/member_info', 2)->args);
|
||||
$this->assertEquals('board', Rhymix\Framework\Router::parseURL('GET', 'board/member_info', 2)->mid);
|
||||
|
||||
|
||||
$args = array('mid' => 'board', 'act' => 'dispMemberLoginForm');
|
||||
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('GET', 'board/login', 2)->args);
|
||||
$this->assertEquals('member', Rhymix\Framework\Router::parseURL('GET', 'board/login', 2)->module);
|
||||
|
||||
|
||||
$args = array('mid' => 'board', 'act' => 'procMemberLogin');
|
||||
$this->assertEquals($args, Rhymix\Framework\Router::parseURL('POST', 'board/login', 2)->args);
|
||||
$this->assertEquals('member', Rhymix\Framework\Router::parseURL('POST', 'board/login', 2)->module);
|
||||
|
|
|
|||
|
|
@ -6,17 +6,17 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
{
|
||||
Context::init();
|
||||
}
|
||||
|
||||
|
||||
public function testGetSetDefaultDriver()
|
||||
{
|
||||
$driver = Rhymix\Framework\SMS::getDefaultDriver();
|
||||
$this->assertInstanceOf('\\Rhymix\\Framework\\Drivers\\SMSInterface', $driver);
|
||||
|
||||
|
||||
$driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array());
|
||||
Rhymix\Framework\SMS::setDefaultDriver($driver);
|
||||
$this->assertEquals($driver, Rhymix\Framework\SMS::getDefaultDriver());
|
||||
}
|
||||
|
||||
|
||||
public function testGetSupportedDrivers()
|
||||
{
|
||||
$drivers = Rhymix\Framework\SMS::getSupportedDrivers();
|
||||
|
|
@ -37,22 +37,22 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue($drivers['solapi']['api_spec']['mms_supported']);
|
||||
$this->assertTrue($drivers['solapi']['api_spec']['delay_supported']);
|
||||
}
|
||||
|
||||
|
||||
public function testSenderAndRecipients()
|
||||
{
|
||||
config('sms.default_from', '010-9999-8888');
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
$this->assertEquals('01099998888', $sms->getFrom());
|
||||
|
||||
|
||||
config('sms.default_from', '');
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
$this->assertNull($sms->getFrom());
|
||||
|
||||
|
||||
$sms->setFrom('010-1234-5678');
|
||||
$this->assertEquals('01012345678', $sms->getFrom());
|
||||
$sms->setFrom('010+1234 x 5679');
|
||||
$this->assertEquals('01012345679', $sms->getFrom());
|
||||
|
||||
|
||||
$sms->addTo('010-0987-6543');
|
||||
$sms->addTo('010-0987-6542', 0);
|
||||
$sms->addTo('010-0987-6541', 82);
|
||||
|
|
@ -67,39 +67,39 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
82 => array('01009876541'),
|
||||
), $sms->getRecipientsGroupedByCountry());
|
||||
}
|
||||
|
||||
|
||||
public function testSMSSubject()
|
||||
{
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
|
||||
|
||||
$sms->setSubject('Foobar!');
|
||||
$this->assertEquals('Foobar!', $sms->getSubject());
|
||||
$sms->setTitle('Foobarbazz?');
|
||||
$this->assertEquals('Foobarbazz?', $sms->getTitle());
|
||||
}
|
||||
|
||||
|
||||
public function testSMSContent()
|
||||
{
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
|
||||
|
||||
$sms->setBody('Hello world!');
|
||||
$this->assertEquals('Hello world!', $sms->getContent());
|
||||
|
||||
|
||||
$sms->setContent('Hello world! Foobar?');
|
||||
$this->assertEquals('Hello world! Foobar?', $sms->getBody());
|
||||
}
|
||||
|
||||
|
||||
public function testSMSAttach()
|
||||
{
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
|
||||
|
||||
$success = $sms->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.source.css');
|
||||
$this->assertTrue($success);
|
||||
$success = $sms->attach(\RX_BASEDIR . 'tests/_data/formatter/minify.target.css');
|
||||
$this->assertTrue($success);
|
||||
$success = $sms->attach(\RX_BASEDIR . 'tests/_data/nonexistent.file.jpg');
|
||||
$this->assertFalse($success);
|
||||
|
||||
|
||||
$attachments = $sms->getAttachments();
|
||||
$this->assertEquals(2, count($attachments));
|
||||
$this->assertEquals('mms', $attachments[0]->type);
|
||||
|
|
@ -107,11 +107,11 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('minify.source.css', $attachments[0]->display_filename);
|
||||
$this->assertEquals('minify.target.css', $attachments[1]->display_filename);
|
||||
}
|
||||
|
||||
|
||||
public function testSMSExtraVars()
|
||||
{
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
|
||||
|
||||
$sms->setExtraVar('foo', 'bar');
|
||||
$this->assertEquals('bar', $sms->getExtraVar('foo'));
|
||||
$this->assertNull($sms->getExtraVar('nonexistent!'));
|
||||
|
|
@ -120,36 +120,36 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
$sms->setExtraVars(array('rhymix' => 'test'));
|
||||
$this->assertEquals(array('rhymix' => 'test'), $sms->getExtraVars());
|
||||
}
|
||||
|
||||
|
||||
public function testSMSDelay()
|
||||
{
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
|
||||
|
||||
$delay_absolute = time() + 3600;
|
||||
$this->assertTrue($sms->setDelay($delay_absolute));
|
||||
$this->assertEquals($delay_absolute, $sms->getDelay());
|
||||
|
||||
|
||||
$delay_relative = 86400;
|
||||
$this->assertTrue($sms->setDelay($delay_relative));
|
||||
$this->assertGreaterThanOrEqual(time() + $delay_relative - 1, $sms->getDelay());
|
||||
$this->assertLessThanOrEqual(time() + $delay_relative + 1, $sms->getDelay());
|
||||
|
||||
|
||||
$delay_relative = 86400 * 3650;
|
||||
$this->assertTrue($sms->setDelay($delay_relative));
|
||||
$this->assertEquals(0, $sms->getDelay());
|
||||
}
|
||||
|
||||
|
||||
public function testSMSForceSMS()
|
||||
{
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
|
||||
|
||||
$this->assertFalse($sms->isForceSMS());
|
||||
$sms->forceSMS();
|
||||
$this->assertTrue($sms->isForceSMS());
|
||||
$sms->unforceSMS();
|
||||
$this->assertFalse($sms->isForceSMS());
|
||||
}
|
||||
|
||||
|
||||
public function testSMSSplitSMSAndLMS()
|
||||
{
|
||||
config('sms.allow_split.sms', true);
|
||||
|
|
@ -163,64 +163,64 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
$sms = new Rhymix\Framework\SMS;
|
||||
$this->assertFalse($sms->isSplitSMSAllowed());
|
||||
$this->assertFalse($sms->isSplitLMSAllowed());
|
||||
|
||||
|
||||
$sms->allowSplitSMS();
|
||||
$this->assertTrue($sms->isSplitSMSAllowed());
|
||||
$this->assertFalse($sms->isSplitLMSAllowed());
|
||||
$sms->disallowSplitSMS();
|
||||
$this->assertFalse($sms->isSplitSMSAllowed());
|
||||
|
||||
|
||||
$sms->allowSplitLMS();
|
||||
$this->assertTrue($sms->isSplitLMSAllowed());
|
||||
$this->assertFalse($sms->isSplitSMSAllowed());
|
||||
$sms->disallowSplitLMS();
|
||||
$this->assertFalse($sms->isSplitLMSAllowed());
|
||||
}
|
||||
|
||||
|
||||
public function testForceSender()
|
||||
{
|
||||
config('sms.default_from', '010-9999-8888');
|
||||
config('sms.default_force', true);
|
||||
$driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array());
|
||||
Rhymix\Framework\SMS::setDefaultDriver($driver);
|
||||
|
||||
|
||||
$driver->resetSentMessages();
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
$sms->setFrom('010-7777-6666');
|
||||
$sms->addTo('010-5555-4444');
|
||||
$sms->setContent('Hello World');
|
||||
$sms->send();
|
||||
|
||||
|
||||
$messages = $driver->getSentMessages();
|
||||
$this->assertEquals('01099998888', $messages[0]->from);
|
||||
|
||||
|
||||
config('sms.default_force', false);
|
||||
|
||||
|
||||
$driver->resetSentMessages();
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
$sms->setFrom('010-7777-6666');
|
||||
$sms->addTo('010-5555-4444');
|
||||
$sms->setContent('Hello World');
|
||||
$sms->send();
|
||||
|
||||
|
||||
$messages = $driver->getSentMessages();
|
||||
$this->assertEquals('01077776666', $messages[0]->from);
|
||||
}
|
||||
|
||||
|
||||
public function testSMSSendSMSAndLMS()
|
||||
{
|
||||
config('sms.default_force', false);
|
||||
config('sms.allow_split.sms', true);
|
||||
config('sms.allow_split.lms', true);
|
||||
|
||||
|
||||
$driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array());
|
||||
Rhymix\Framework\SMS::setDefaultDriver($driver);
|
||||
|
||||
|
||||
// Test sending a message with no recipients.
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
$this->assertFalse($sms->send());
|
||||
$this->assertEquals(1, count($sms->getErrors()));
|
||||
|
||||
|
||||
// Test SMS content splitting, grouping by country code, and forcing SMS to unsupported country code.
|
||||
$driver->resetSentMessages();
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
|
|
@ -231,7 +231,7 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
$sms->addTo('010-0004-5678', 83);
|
||||
$sms->setContent('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면 LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.');
|
||||
$this->assertTrue($sms->send());
|
||||
|
||||
|
||||
$messages = $driver->getSentMessages();
|
||||
$this->assertEquals(3, count($messages));
|
||||
$this->assertEquals(0, $messages[0]->country);
|
||||
|
|
@ -248,7 +248,7 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면 LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.', $messages[0]->content);
|
||||
$this->assertEquals('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면', $messages[1]->content);
|
||||
$this->assertEquals('LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.', $messages[2]->content);
|
||||
|
||||
|
||||
// Test LMS content splitting.
|
||||
$driver->resetSentMessages();
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
|
|
@ -256,14 +256,14 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
$sms->addTo('010-0000-1234');
|
||||
$sms->setContent(str_repeat('이것은 다소 긴 메시지입니다. SMS에 들어가기에는 글자 수가 너무 많아요. 한 번에 발송하려면 LMS로 변환해야 합니다. 자동으로 변환되어야 정상입니다.' . "\n", 50));
|
||||
$this->assertTrue($sms->send());
|
||||
|
||||
|
||||
$messages = $driver->getSentMessages();
|
||||
$this->assertEquals(4, count($messages));
|
||||
foreach ($messages as $message)
|
||||
{
|
||||
$this->assertEquals('LMS', $message->type);
|
||||
}
|
||||
|
||||
|
||||
// Test subject splitting.
|
||||
$driver->resetSentMessages();
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
|
|
@ -272,13 +272,13 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
$sms->setSubject('이것은 제목입니다. 제목이 길기 때문에 내용으로 넘어갈 것입니다.');
|
||||
$sms->setContent('이것은 내용입니다.' . "\r\n" . '줄을 바꿔서 내용이 계속됩니다.');
|
||||
$sms->send();
|
||||
|
||||
|
||||
$messages = $driver->getSentMessages();
|
||||
$this->assertEquals(1, count($messages));
|
||||
$this->assertEquals('LMS', $messages[0]->type);
|
||||
$this->assertEquals('이것은 제목입니다. 제목이 길기 때문에', $messages[0]->subject);
|
||||
$this->assertEquals('내용으로 넘어갈 것입니다.' . "\n" . '이것은 내용입니다.' . "\n" . '줄을 바꿔서 내용이 계속됩니다.', $messages[0]->content);
|
||||
|
||||
|
||||
// Test subject splitting when forced to use SMS.
|
||||
$driver->resetSentMessages();
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
|
|
@ -288,22 +288,22 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
$sms->setContent('이것은 내용입니다.');
|
||||
$sms->forceSMS();
|
||||
$sms->send();
|
||||
|
||||
|
||||
$messages = $driver->getSentMessages();
|
||||
$this->assertEquals(1, count($messages));
|
||||
$this->assertEquals('SMS', $messages[0]->type);
|
||||
$this->assertEquals('이것은 제목입니다. 제목이 길기 때문에 내용으로 넘어갈 것입니다.' . "\n" . '이것은 내용입니다.', $messages[0]->content);
|
||||
}
|
||||
|
||||
|
||||
public function testSMSSendMMS()
|
||||
{
|
||||
config('sms.default_force', false);
|
||||
config('sms.allow_split.sms', true);
|
||||
config('sms.allow_split.lms', true);
|
||||
|
||||
|
||||
$driver = Rhymix\Framework\Drivers\SMS\Dummy::getInstance(array());
|
||||
Rhymix\Framework\SMS::setDefaultDriver($driver);
|
||||
|
||||
|
||||
// Test MMS with a single attachment.
|
||||
$driver->resetSentMessages();
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
|
|
@ -312,13 +312,13 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
$sms->setContent('MMS 내용입니다.');
|
||||
$sms->attach(\RX_BASEDIR . 'tests/_data/images/rhymix.png');
|
||||
$sms->send();
|
||||
|
||||
|
||||
$messages = $driver->getSentMessages();
|
||||
$this->assertEquals(1, count($messages));
|
||||
$this->assertEquals('MMS', $messages[0]->type);
|
||||
$this->assertEquals('MMS 내용입니다.', $messages[0]->content);
|
||||
$this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image);
|
||||
|
||||
|
||||
// Test MMS with multiple attachments.
|
||||
$driver->resetSentMessages();
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
|
|
@ -330,7 +330,7 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
$sms->attach(\RX_BASEDIR . 'tests/_output/rhymix-copy.png');
|
||||
unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy.png');
|
||||
$sms->send();
|
||||
|
||||
|
||||
$messages = $driver->getSentMessages();
|
||||
$this->assertEquals(2, count($messages));
|
||||
$this->assertEquals($messages[0]->to, $messages[1]->to);
|
||||
|
|
@ -340,7 +340,7 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('MMS 내용입니다.', $messages[1]->content);
|
||||
$this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image);
|
||||
$this->assertEquals(\RX_BASEDIR . 'tests/_output/rhymix-copy.png', $messages[1]->image);
|
||||
|
||||
|
||||
// Test MMS with multiple attachments and very long content (less than the number of attachments).
|
||||
$driver->resetSentMessages();
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
|
|
@ -355,7 +355,7 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy-1.png');
|
||||
unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png');
|
||||
$sms->send();
|
||||
|
||||
|
||||
$messages = $driver->getSentMessages();
|
||||
$this->assertEquals(3, count($messages));
|
||||
$this->assertEquals('MMS', $messages[0]->type);
|
||||
|
|
@ -367,7 +367,7 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image);
|
||||
$this->assertEquals(\RX_BASEDIR . 'tests/_output/rhymix-copy-1.png', $messages[1]->image);
|
||||
$this->assertEquals(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png', $messages[2]->image);
|
||||
|
||||
|
||||
// Test MMS with multiple attachments and very long content (more than the number of attachments).
|
||||
$driver->resetSentMessages();
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
|
|
@ -382,7 +382,7 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy-1.png');
|
||||
unlink(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png');
|
||||
$sms->send();
|
||||
|
||||
|
||||
$messages = $driver->getSentMessages();
|
||||
$this->assertEquals(5, count($messages));
|
||||
$this->assertEquals('MMS', $messages[0]->type);
|
||||
|
|
@ -400,7 +400,7 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(\RX_BASEDIR . 'tests/_output/rhymix-copy-2.png', $messages[2]->image);
|
||||
$this->assertNull($messages[3]->image ?? null);
|
||||
$this->assertNull($messages[4]->image ?? null);
|
||||
|
||||
|
||||
// Test MMS with no text content.
|
||||
$driver->resetSentMessages();
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
|
|
@ -408,21 +408,21 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
$sms->addTo('010-0000-1234');
|
||||
$sms->attach(\RX_BASEDIR . 'tests/_data/images/rhymix.png');
|
||||
$sms->send();
|
||||
|
||||
|
||||
$messages = $driver->getSentMessages();
|
||||
$this->assertEquals(1, count($messages));
|
||||
$this->assertEquals('MMS', $messages[0]->type);
|
||||
$this->assertEquals('MMS', $messages[0]->content);
|
||||
$this->assertEquals(\RX_BASEDIR . 'tests/_data/images/rhymix.png', $messages[0]->image);
|
||||
}
|
||||
|
||||
|
||||
public function testSMSIsSent()
|
||||
{
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
$this->assertFalse($sms->isSent());
|
||||
$this->assertFalse($sms->send());
|
||||
$this->assertFalse($sms->isSent());
|
||||
|
||||
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
$sms->setFrom('010-1234-5678');
|
||||
$sms->addTo('010-0000-1234');
|
||||
|
|
@ -430,24 +430,24 @@ class SMSTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue($sms->send());
|
||||
$this->assertTrue($sms->isSent());
|
||||
}
|
||||
|
||||
|
||||
public function testSMSCaller()
|
||||
{
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
$sms->send();
|
||||
$line = strval(__LINE__ - 1);
|
||||
|
||||
|
||||
$caller = $sms->getCaller();
|
||||
$this->assertRegexp('/^.+ line \d+$/', $caller);
|
||||
$this->assertTrue(starts_with(__FILE__, $caller));
|
||||
$this->assertEquals($line, substr($caller, -1 * strlen($line)));
|
||||
}
|
||||
|
||||
|
||||
public function testSMSError()
|
||||
{
|
||||
$sms = new Rhymix\Framework\SMS;
|
||||
$sms->addError('foobar');
|
||||
|
||||
|
||||
$errors = $sms->getErrors();
|
||||
$this->assertTrue(is_array($errors));
|
||||
$this->assertContains('foobar', $errors);
|
||||
|
|
|
|||
|
|
@ -6,35 +6,35 @@ class SecurityTest extends \Codeception\TestCase\Test
|
|||
{
|
||||
// Escape
|
||||
$this->assertEquals('foo<bar>', Rhymix\Framework\Security::sanitize('foo<bar>', 'escape'));
|
||||
|
||||
|
||||
// Strip
|
||||
$this->assertEquals('foobar', Rhymix\Framework\Security::sanitize('foo<p>bar</p>', 'strip'));
|
||||
|
||||
|
||||
// HTML (more thorough tests in HTMLFilterTest)
|
||||
$this->assertEquals('<p>safe</p>', Rhymix\Framework\Security::sanitize('<p>safe<script></script></p>', 'html'));
|
||||
|
||||
|
||||
// Filename (more thorough tests in FilenameFilterTest)
|
||||
$this->assertEquals('foo(bar).xls', Rhymix\Framework\Security::sanitize('foo<bar>.xls', 'filename'));
|
||||
}
|
||||
|
||||
|
||||
public function testEncryption()
|
||||
{
|
||||
$plaintext = Rhymix\Framework\Security::getRandom();
|
||||
config('crypto.encryption_key', Rhymix\Framework\Security::getRandom());
|
||||
|
||||
|
||||
// Encryption with default key.
|
||||
$encrypted = Rhymix\Framework\Security::encrypt($plaintext);
|
||||
$this->assertNotEquals(false, $encrypted);
|
||||
$decrypted = Rhymix\Framework\Security::decrypt($encrypted);
|
||||
$this->assertEquals($plaintext, $decrypted);
|
||||
|
||||
|
||||
// Encryption with custom key.
|
||||
$key = Rhymix\Framework\Security::getRandom();
|
||||
$encrypted = Rhymix\Framework\Security::encrypt($plaintext, $key);
|
||||
$this->assertNotEquals(false, $encrypted);
|
||||
$decrypted = Rhymix\Framework\Security::decrypt($encrypted, $key);
|
||||
$this->assertEquals($plaintext, $decrypted);
|
||||
|
||||
|
||||
// Test invalid ciphertext.
|
||||
$decrypted = Rhymix\Framework\Security::decrypt('1234' . substr($encrypted, 4));
|
||||
$this->assertEquals(false, $decrypted);
|
||||
|
|
@ -43,19 +43,19 @@ class SecurityTest extends \Codeception\TestCase\Test
|
|||
$decrypted = Rhymix\Framework\Security::decrypt($plaintext);
|
||||
$this->assertEquals(false, $decrypted);
|
||||
}
|
||||
|
||||
|
||||
public function testSignature()
|
||||
{
|
||||
$plaintext = Rhymix\Framework\Security::getRandom();
|
||||
config('crypto.authentication_key', Rhymix\Framework\Security::getRandom());
|
||||
|
||||
|
||||
$signature = Rhymix\Framework\Security::createSignature($plaintext);
|
||||
$this->assertRegexp('/^[a-zA-Z0-9-_]{40}$/', $signature);
|
||||
$this->assertEquals(true, Rhymix\Framework\Security::verifySignature($plaintext, $signature));
|
||||
$this->assertEquals(false, Rhymix\Framework\Security::verifySignature($plaintext, $signature . 'x'));
|
||||
$this->assertEquals(false, Rhymix\Framework\Security::verifySignature($plaintext, 'x' . $signature));
|
||||
}
|
||||
|
||||
|
||||
public function testGetRandom()
|
||||
{
|
||||
$this->assertRegExp('/^[0-9a-zA-Z]{32}$/', Rhymix\Framework\Security::getRandom());
|
||||
|
|
@ -64,7 +64,7 @@ class SecurityTest extends \Codeception\TestCase\Test
|
|||
$this->assertRegExp('/^[0-9a-f]{16}$/', Rhymix\Framework\Security::getRandom(16, 'hex'));
|
||||
$this->assertRegExp('/^[\x21-\x7e]{16}$/', Rhymix\Framework\Security::getRandom(16, 'printable'));
|
||||
}
|
||||
|
||||
|
||||
public function testGetRandomNumber()
|
||||
{
|
||||
for ($i = 0; $i < 10; $i++)
|
||||
|
|
@ -75,7 +75,7 @@ class SecurityTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue($random >= $min && $random <= $max);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function testGetRandomUUID()
|
||||
{
|
||||
$regex = '/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/';
|
||||
|
|
@ -84,42 +84,42 @@ class SecurityTest extends \Codeception\TestCase\Test
|
|||
$this->assertRegExp($regex, Rhymix\Framework\Security::getRandomUUID());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function testCompareStrings()
|
||||
{
|
||||
$this->assertTrue(Rhymix\Framework\Security::compareStrings('foobar', 'foobar'));
|
||||
$this->assertFalse(Rhymix\Framework\Security::compareStrings('foobar', 'foobar*'));
|
||||
$this->assertFalse(Rhymix\Framework\Security::compareStrings('foo', 'bar'));
|
||||
}
|
||||
|
||||
|
||||
public function testCheckCSRF()
|
||||
{
|
||||
$error_reporting = error_reporting(0);
|
||||
|
||||
|
||||
$_SERVER['REQUEST_METHOD'] = 'GET';
|
||||
$_SERVER['HTTP_REFERER'] = '';
|
||||
$_SERVER['HTTP_X_CSRF_TOKEN'] = '';
|
||||
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
|
||||
$_SERVER['HTTP_X_CSRF_TOKEN'] = Rhymix\Framework\Session::createToken();
|
||||
$this->assertTrue(Rhymix\Framework\Security::checkCSRF());
|
||||
|
||||
|
||||
$_SERVER['REQUEST_METHOD'] = 'POST';
|
||||
$_SERVER['HTTP_REFERER'] = '';
|
||||
$_SERVER['HTTP_X_CSRF_TOKEN'] = '';
|
||||
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
|
||||
$_SERVER['HTTP_X_CSRF_TOKEN'] = Rhymix\Framework\Session::createToken();
|
||||
$this->assertTrue(Rhymix\Framework\Security::checkCSRF());
|
||||
|
||||
|
||||
$_SERVER['HTTP_REFERER'] = 'http://www.foobar.com/';
|
||||
$_SERVER['HTTP_X_CSRF_TOKEN'] = '';
|
||||
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
|
||||
|
||||
|
||||
$_SERVER['HTTP_REFERER'] = 'http://www.rhymix.org/foo/bar';
|
||||
$_SERVER['HTTP_X_CSRF_TOKEN'] = '';
|
||||
$this->assertTrue(Rhymix\Framework\Security::checkCSRF());
|
||||
$_SERVER['HTTP_X_CSRF_TOKEN'] = 'invalid value';
|
||||
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
|
||||
|
||||
|
||||
$_SERVER['HTTP_ORIGIN'] = 'http://www.rhymix.org';
|
||||
$_SERVER['HTTP_REFERER'] = 'http://www.foobar.com';
|
||||
$_SERVER['HTTP_X_CSRF_TOKEN'] = '';
|
||||
|
|
@ -130,34 +130,34 @@ class SecurityTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
|
||||
$_SERVER['HTTP_ORIGIN'] = 'null';
|
||||
$this->assertFalse(Rhymix\Framework\Security::checkCSRF());
|
||||
|
||||
|
||||
$_SERVER['HTTP_REFERER'] = '';
|
||||
$_SERVER['HTTP_X_CSRF_TOKEN'] = '';
|
||||
$this->assertTrue(Rhymix\Framework\Security::checkCSRF('http://www.rhymix.org/'));
|
||||
|
||||
|
||||
error_reporting($error_reporting);
|
||||
}
|
||||
|
||||
|
||||
public function testCheckXXE()
|
||||
{
|
||||
$xml = '<methodCall></methodCall>';
|
||||
$this->assertTrue(Rhymix\Framework\Security::checkXXE($xml));
|
||||
|
||||
|
||||
$xml = '<?xml version="1.0" encoding="UTF-8"?><methodCall></methodCall>';
|
||||
$this->assertTrue(Rhymix\Framework\Security::checkXXE($xml));
|
||||
|
||||
|
||||
$xml = '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo><methodCall attr="value"></methodCall>';
|
||||
$this->assertTrue(Rhymix\Framework\Security::checkXXE($xml));
|
||||
|
||||
|
||||
$xml = '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo><whatever></whatever>';
|
||||
$this->assertFalse(Rhymix\Framework\Security::checkXXE($xml));
|
||||
|
||||
|
||||
$xml = '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo>';
|
||||
$this->assertFalse(Rhymix\Framework\Security::checkXXE($xml));
|
||||
|
||||
|
||||
$xml = '<?xml version="1.0" encoding="UTF-8"?><!ENTITY xxe SYSTEM "http://www.attacker.com/text.txt"><methodCall></methodCall>';
|
||||
$this->assertFalse(Rhymix\Framework\Security::checkXXE($xml));
|
||||
|
||||
|
||||
$xml = '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ELEMENT foo ANY><!ENTITY xxe SYSTEM "file:///etc/passwd" >]><fault></fault>';
|
||||
$this->assertFalse(Rhymix\Framework\Security::checkXXE($xml));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ class SessionTest extends \Codeception\TestCase\Test
|
|||
$_SESSION = array();
|
||||
$_COOKIE = array();
|
||||
}
|
||||
|
||||
|
||||
public function _after()
|
||||
{
|
||||
Rhymix\Framework\Config::set('session.delay', false);
|
||||
|
|
@ -19,7 +19,7 @@ class SessionTest extends \Codeception\TestCase\Test
|
|||
$_SESSION = array();
|
||||
$_COOKIE = array();
|
||||
}
|
||||
|
||||
|
||||
public function _failed()
|
||||
{
|
||||
Rhymix\Framework\Config::set('session.delay', false);
|
||||
|
|
@ -28,7 +28,7 @@ class SessionTest extends \Codeception\TestCase\Test
|
|||
$_SESSION = array();
|
||||
$_COOKIE = array();
|
||||
}
|
||||
|
||||
|
||||
public function testGetSet()
|
||||
{
|
||||
$this->assertFalse(isset($_SESSION['foo']['bar']));
|
||||
|
|
@ -40,11 +40,11 @@ class SessionTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(array('bar' => 'bazz', 'baz' => 'bazzzz'), Rhymix\Framework\Session::get('foo'));
|
||||
$this->assertEquals(array('bar' => 'bazz', 'baz' => 'bazzzz'), $_SESSION['foo']);
|
||||
}
|
||||
|
||||
|
||||
public function testStart()
|
||||
{
|
||||
Rhymix\Framework\Config::set('session.use_keys', true);
|
||||
|
||||
|
||||
// Test normal start.
|
||||
$this->assertTrue(@Rhymix\Framework\Session::start());
|
||||
$this->assertTrue(isset($_COOKIE['rx_sesskey1']));
|
||||
|
|
@ -55,41 +55,41 @@ class SessionTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(0, $_SESSION['RHYMIX']['keys']['www.rhymix.org']['trusted']);
|
||||
$session_secret = $_SESSION['RHYMIX']['secret'];
|
||||
Rhymix\Framework\Session::close();
|
||||
|
||||
|
||||
// Test normal restart.
|
||||
$this->assertTrue(@Rhymix\Framework\Session::start());
|
||||
$this->assertEquals($session_secret, $_SESSION['RHYMIX']['secret']);
|
||||
$session_secret = $_SESSION['RHYMIX']['secret'];
|
||||
Rhymix\Framework\Session::close();
|
||||
|
||||
|
||||
// Test missing HTTP key.
|
||||
unset($_COOKIE['rx_sesskey1']);
|
||||
$this->assertTrue(@Rhymix\Framework\Session::start());
|
||||
$this->assertNotEquals($session_secret, $_SESSION['RHYMIX']['secret']);
|
||||
$session_secret = $_SESSION['RHYMIX']['secret'];
|
||||
Rhymix\Framework\Session::close();
|
||||
|
||||
|
||||
// Test missing HTTPS key.
|
||||
unset($_COOKIE['rx_sesskey2']);
|
||||
$this->assertTrue(@Rhymix\Framework\Session::start());
|
||||
$this->assertNotEquals($session_secret, $_SESSION['RHYMIX']['secret']);
|
||||
$session_secret = $_SESSION['RHYMIX']['secret'];
|
||||
Rhymix\Framework\Session::close();
|
||||
|
||||
|
||||
// Test invalid HTTP key.
|
||||
$_COOKIE['rx_sesskey1'] = substr(md5(mt_rand()), 0, 24);
|
||||
$this->assertTrue(@Rhymix\Framework\Session::start());
|
||||
$this->assertNotEquals($session_secret, $_SESSION['RHYMIX']['secret']);
|
||||
$session_secret = $_SESSION['RHYMIX']['secret'];
|
||||
Rhymix\Framework\Session::close();
|
||||
|
||||
|
||||
// Test invalid HTTPS key.
|
||||
$_COOKIE['rx_sesskey2'] = substr(md5(mt_rand()), 0, 24);
|
||||
$this->assertTrue(@Rhymix\Framework\Session::start());
|
||||
$this->assertNotEquals($session_secret, $_SESSION['RHYMIX']['secret']);
|
||||
$session_secret = $_SESSION['RHYMIX']['secret'];
|
||||
Rhymix\Framework\Session::close();
|
||||
|
||||
|
||||
// Test initial transition from HTTP to HTTPS.
|
||||
session_start();
|
||||
unset($_SESSION['RHYMIX']['keys']['www.rhymix.org']['key2']);
|
||||
|
|
@ -100,11 +100,11 @@ class SessionTest extends \Codeception\TestCase\Test
|
|||
$session_secret = $_SESSION['RHYMIX']['secret'];
|
||||
Rhymix\Framework\Session::close();
|
||||
}
|
||||
|
||||
|
||||
public function testCheckStart()
|
||||
{
|
||||
Rhymix\Framework\Config::set('session.delay', true);
|
||||
|
||||
|
||||
$_SESSION = array();
|
||||
unset($_COOKIE['PHPSESSID']);
|
||||
$this->assertFalse(@Rhymix\Framework\Session::start());
|
||||
|
|
@ -112,35 +112,35 @@ class SessionTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(Rhymix\Framework\Session::checkStart());
|
||||
$this->assertFalse(Rhymix\Framework\Session::isStarted());
|
||||
Rhymix\Framework\Session::close();
|
||||
|
||||
|
||||
$_SESSION['foo'] = 'bar';
|
||||
$this->assertTrue(@Rhymix\Framework\Session::checkStart());
|
||||
$this->assertTrue(Rhymix\Framework\Session::isStarted());
|
||||
$this->assertEquals('bar', $_SESSION['foo']);
|
||||
$this->assertEquals('bar', Rhymix\Framework\Session::get('foo'));
|
||||
Rhymix\Framework\Session::close();
|
||||
|
||||
|
||||
$_SESSION = array();
|
||||
unset($_COOKIE['PHPSESSID']);
|
||||
$this->assertTrue(@Rhymix\Framework\Session::checkStart(true));
|
||||
$this->assertTrue(Rhymix\Framework\Session::isStarted());
|
||||
Rhymix\Framework\Session::close();
|
||||
|
||||
|
||||
$_SESSION = array();
|
||||
unset($_COOKIE['PHPSESSID']);
|
||||
$this->assertTrue(@Rhymix\Framework\Session::start(true));
|
||||
$this->assertTrue(Rhymix\Framework\Session::isStarted());
|
||||
}
|
||||
|
||||
|
||||
public function testCheckSSO()
|
||||
{
|
||||
$this->assertNull(Rhymix\Framework\Session::checkSSO(new stdClass));
|
||||
}
|
||||
|
||||
|
||||
public function testRefresh()
|
||||
{
|
||||
$_SERVER['REQUEST_METHOD'] = 'GET';
|
||||
|
||||
|
||||
@Rhymix\Framework\Session::start();
|
||||
$session_secret = $_SESSION['RHYMIX']['secret'];
|
||||
$key1 = $_SESSION['RHYMIX']['keys']['www.rhymix.org']['key1'];
|
||||
|
|
@ -148,7 +148,7 @@ class SessionTest extends \Codeception\TestCase\Test
|
|||
$_SESSION['RHYMIX']['keys']['www.rhymix.org']['key1_time'] = time() - 3600;
|
||||
$_SESSION['RHYMIX']['keys']['www.rhymix.org']['key2_time'] = time() - 3600;
|
||||
Rhymix\Framework\Session::close();
|
||||
|
||||
|
||||
@Rhymix\Framework\Session::start();
|
||||
$this->assertNotEquals($key1, $_SESSION['RHYMIX']['keys']['www.rhymix.org']['key1']);
|
||||
$this->assertNotEquals($key2, $_SESSION['RHYMIX']['keys']['www.rhymix.org']['key2']);
|
||||
|
|
@ -157,7 +157,7 @@ class SessionTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals($session_secret, $_SESSION['RHYMIX']['secret']);
|
||||
Rhymix\Framework\Session::close();
|
||||
}
|
||||
|
||||
|
||||
public function testClose()
|
||||
{
|
||||
@Rhymix\Framework\Session::start();
|
||||
|
|
@ -165,7 +165,7 @@ class SessionTest extends \Codeception\TestCase\Test
|
|||
Rhymix\Framework\Session::close();
|
||||
$this->assertEquals(\PHP_SESSION_NONE, session_status());
|
||||
}
|
||||
|
||||
|
||||
public function testDestroy()
|
||||
{
|
||||
@Rhymix\Framework\Session::start();
|
||||
|
|
@ -173,27 +173,27 @@ class SessionTest extends \Codeception\TestCase\Test
|
|||
Rhymix\Framework\Session::destroy();
|
||||
$this->assertFalse(isset($_SESSION['RHYMIX']));
|
||||
}
|
||||
|
||||
|
||||
public function testLoginLogout()
|
||||
{
|
||||
@Rhymix\Framework\Session::start();
|
||||
$this->assertFalse($_SESSION['RHYMIX']['login']);
|
||||
$this->assertFalse($_SESSION['member_srl']);
|
||||
$this->assertFalse($_SESSION['is_logged']);
|
||||
|
||||
|
||||
Rhymix\Framework\Session::login(42);
|
||||
$this->assertEquals(42, $_SESSION['RHYMIX']['login']);
|
||||
$this->assertEquals(42, $_SESSION['member_srl']);
|
||||
$this->assertTrue($_SESSION['is_logged']);
|
||||
|
||||
|
||||
Rhymix\Framework\Session::logout();
|
||||
$this->assertFalse(isset($_SESSION['RHYMIX']['login']));
|
||||
$this->assertFalse(isset($_SESSION['member_srl']));
|
||||
$this->assertFalse(isset($_SESSION['is_logged']));
|
||||
|
||||
|
||||
Rhymix\Framework\Session::close();
|
||||
}
|
||||
|
||||
|
||||
public function testIsStarted()
|
||||
{
|
||||
$this->assertFalse(Rhymix\Framework\Session::isStarted());
|
||||
|
|
@ -202,47 +202,47 @@ class SessionTest extends \Codeception\TestCase\Test
|
|||
Rhymix\Framework\Session::close();
|
||||
$this->assertFalse(Rhymix\Framework\Session::isStarted());
|
||||
}
|
||||
|
||||
|
||||
public function testIsMember()
|
||||
{
|
||||
@Rhymix\Framework\Session::start();
|
||||
$this->assertFalse(Rhymix\Framework\Session::isMember());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::login(42);
|
||||
$this->assertTrue(Rhymix\Framework\Session::isMember());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::close();
|
||||
}
|
||||
|
||||
|
||||
public function testIsAdmin()
|
||||
{
|
||||
@Rhymix\Framework\Session::start();
|
||||
$this->assertFalse(Rhymix\Framework\Session::isAdmin());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::login(42);
|
||||
$this->assertFalse(Rhymix\Framework\Session::isAdmin());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::setMemberInfo((object)array('member_srl' => 42, 'is_admin' => 'Y'));
|
||||
$this->assertTrue(Rhymix\Framework\Session::isAdmin());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::setMemberInfo((object)array('member_srl' => 99, 'is_admin' => 'Y'));
|
||||
$this->assertFalse(Rhymix\Framework\Session::isAdmin());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::close();
|
||||
}
|
||||
|
||||
|
||||
public function testIsTrusted()
|
||||
{
|
||||
@Rhymix\Framework\Session::start();
|
||||
|
||||
|
||||
$_SESSION['RHYMIX']['keys']['www.rhymix.org']['trusted'] = 0;
|
||||
$this->assertFalse(Rhymix\Framework\Session::isTrusted());
|
||||
$_SESSION['RHYMIX']['keys']['www.rhymix.org']['trusted'] = time() + 300;
|
||||
$this->assertTrue(Rhymix\Framework\Session::isTrusted());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::close();
|
||||
}
|
||||
|
||||
|
||||
public function testIsValid()
|
||||
{
|
||||
@Rhymix\Framework\Session::start();
|
||||
|
|
@ -252,115 +252,115 @@ class SessionTest extends \Codeception\TestCase\Test
|
|||
$validity_info = Rhymix\Framework\Session::getValidityInfo($member_srl);
|
||||
$this->assertTrue(is_object($validity_info));
|
||||
$this->assertTrue(isset($validity_info->invalid_before));
|
||||
|
||||
|
||||
$validity_info->invalid_before = time() - 3600;
|
||||
$this->assertTrue(Rhymix\Framework\Session::setValidityInfo($member_srl, $validity_info));
|
||||
$this->assertTrue(Rhymix\Framework\Session::isValid());
|
||||
|
||||
|
||||
$validity_info->invalid_before = time() + 300;
|
||||
$this->assertTrue(Rhymix\Framework\Session::setValidityInfo($member_srl, $validity_info));
|
||||
$this->assertFalse(@Rhymix\Framework\Session::isValid());
|
||||
|
||||
|
||||
$validity_info->invalid_before = time() - 900;
|
||||
$this->assertTrue(Rhymix\Framework\Session::setValidityInfo($member_srl, $validity_info));
|
||||
$this->assertTrue(Rhymix\Framework\Session::isValid());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::close();
|
||||
}
|
||||
|
||||
|
||||
public function testGetMemberSrl()
|
||||
{
|
||||
@Rhymix\Framework\Session::start();
|
||||
$this->assertEquals(false, Rhymix\Framework\Session::getMemberSrl());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::login(42);
|
||||
$this->assertEquals(42, Rhymix\Framework\Session::getMemberSrl());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::close();
|
||||
}
|
||||
|
||||
|
||||
public function testGetMemberInfo()
|
||||
{
|
||||
@Rhymix\Framework\Session::start();
|
||||
$this->assertEquals(new Rhymix\Framework\Helpers\SessionHelper(), Rhymix\Framework\Session::getMemberInfo());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::login(42);
|
||||
$this->assertEquals(new Rhymix\Framework\Helpers\SessionHelper(), Rhymix\Framework\Session::getMemberInfo());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::setMemberInfo((object)array('member_srl' => 42));
|
||||
$this->assertEquals((object)array('member_srl' => 42), Rhymix\Framework\Session::getMemberInfo());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::setMemberInfo((object)array('member_srl' => 99, 'is_admin' => 'Y'));
|
||||
$this->assertEquals(new Rhymix\Framework\Helpers\SessionHelper(), Rhymix\Framework\Session::getMemberInfo());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::close();
|
||||
}
|
||||
|
||||
|
||||
public function testGetSetLanguage()
|
||||
{
|
||||
@Rhymix\Framework\Session::start();
|
||||
$this->assertEquals(\Context::getLangType(), Rhymix\Framework\Session::getLanguage());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::setLanguage('ja');
|
||||
$this->assertEquals('ja', Rhymix\Framework\Session::getLanguage());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::close();
|
||||
}
|
||||
|
||||
|
||||
public function testGetSetTimezone()
|
||||
{
|
||||
@Rhymix\Framework\Session::start();
|
||||
$this->assertEquals(config('locale.default_timezone'), Rhymix\Framework\Session::getTimezone());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::setTimezone('Asia/Beijing');
|
||||
$this->assertEquals('Asia/Beijing', Rhymix\Framework\Session::getTimezone());
|
||||
|
||||
|
||||
Rhymix\Framework\Session::close();
|
||||
}
|
||||
|
||||
|
||||
public function testTokens()
|
||||
{
|
||||
@Rhymix\Framework\Session::start();
|
||||
|
||||
|
||||
$token1 = Rhymix\Framework\Session::createToken();
|
||||
$this->assertTrue(ctype_alnum($token1));
|
||||
$this->assertEquals(16, strlen($token1));
|
||||
$this->assertTrue(Rhymix\Framework\Session::verifyToken($token1));
|
||||
$this->assertFalse(Rhymix\Framework\Session::verifyToken(strrev($token1)));
|
||||
|
||||
|
||||
$token2 = Rhymix\Framework\Session::createToken('/my/key');
|
||||
$this->assertTrue(Rhymix\Framework\Session::verifyToken($token2, '/my/key'));
|
||||
$this->assertFalse(Rhymix\Framework\Session::verifyToken($token2));
|
||||
$this->assertFalse(Rhymix\Framework\Session::verifyToken($token2, '/wrong/key'));
|
||||
$this->assertFalse(Rhymix\Framework\Session::verifyToken(strrev($token2)));
|
||||
|
||||
|
||||
$token3 = Rhymix\Framework\Session::getGenericToken();
|
||||
$this->assertEquals(16, strlen($token3));
|
||||
$this->assertTrue(Rhymix\Framework\Session::verifyToken($token3));
|
||||
$this->assertTrue(Rhymix\Framework\Session::verifyToken($token3, ''));
|
||||
$this->assertFalse(Rhymix\Framework\Session::verifyToken($token3, '/wrong/key'));
|
||||
|
||||
|
||||
Rhymix\Framework\Session::destroy();
|
||||
$this->assertFalse(Rhymix\Framework\Session::verifyToken($token1));
|
||||
$this->assertFalse(Rhymix\Framework\Session::verifyToken($token1, '/my/key'));
|
||||
$this->assertFalse(Rhymix\Framework\Session::getGenericToken());
|
||||
}
|
||||
|
||||
|
||||
public function testEncryption()
|
||||
{
|
||||
@Rhymix\Framework\Session::start();
|
||||
|
||||
|
||||
$plaintext = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.';
|
||||
$ciphertext = Rhymix\Framework\Session::encrypt($plaintext);
|
||||
$this->assertNotEquals(false, $ciphertext);
|
||||
$this->assertEquals($plaintext, Rhymix\Framework\Session::decrypt($ciphertext));
|
||||
|
||||
|
||||
Rhymix\Framework\Session::destroy();
|
||||
$this->assertFalse(Rhymix\Framework\Session::decrypt($ciphertext));
|
||||
|
||||
|
||||
@Rhymix\Framework\Session::start();
|
||||
$this->assertFalse(Rhymix\Framework\Session::decrypt($ciphertext));
|
||||
|
||||
|
||||
Rhymix\Framework\Session::close();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,19 +6,19 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
{
|
||||
Rhymix\Framework\Storage::deleteDirectory(\RX_BASEDIR . 'tests/_output', false);
|
||||
}
|
||||
|
||||
|
||||
public function _after()
|
||||
{
|
||||
@chmod(\RX_BASEDIR . 'tests/_output', 0755);
|
||||
Rhymix\Framework\Storage::deleteDirectory(\RX_BASEDIR . 'tests/_output', false);
|
||||
}
|
||||
|
||||
|
||||
public function _failed()
|
||||
{
|
||||
@chmod(\RX_BASEDIR . 'tests/_output', 0755);
|
||||
Rhymix\Framework\Storage::deleteDirectory(\RX_BASEDIR . 'tests/_output', false);
|
||||
}
|
||||
|
||||
|
||||
public function testExists()
|
||||
{
|
||||
$this->assertTrue(Rhymix\Framework\Storage::exists(__FILE__));
|
||||
|
|
@ -26,7 +26,7 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(Rhymix\Framework\Storage::exists(__FILE__ . '.nonexistent.suffix'));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::exists(__DIR__ . '/nonexistent.subdirectory'));
|
||||
}
|
||||
|
||||
|
||||
public function testIsFile()
|
||||
{
|
||||
$this->assertTrue(Rhymix\Framework\Storage::isFile(__FILE__));
|
||||
|
|
@ -34,18 +34,18 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(Rhymix\Framework\Storage::isFile(__FILE__ . '.nonexistent.suffix'));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::isFile(__DIR__ . '/nonexistent.subdirectory'));
|
||||
}
|
||||
|
||||
|
||||
public function testIsEmptyFile()
|
||||
{
|
||||
$emptyfile = \RX_BASEDIR . 'tests/_output/emptyfile.txt';
|
||||
file_put_contents($emptyfile, '');
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Storage::isEmptyFile($emptyfile));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::isEmptyFile($emptyfile . '.nonexistent.suffix'));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::isEmptyFile(__FILE__));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::isEmptyFile(__DIR__));
|
||||
}
|
||||
|
||||
|
||||
public function testIsDirectory()
|
||||
{
|
||||
$this->assertTrue(Rhymix\Framework\Storage::isDirectory(__DIR__));
|
||||
|
|
@ -53,40 +53,40 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(Rhymix\Framework\Storage::isDirectory(__FILE__ . '.nonexistent.suffix'));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::isDirectory(__DIR__ . '/nonexistent.subdirectory'));
|
||||
}
|
||||
|
||||
|
||||
public function testIsEmptyDirectory()
|
||||
{
|
||||
$emptydir = \RX_BASEDIR . 'tests/_output/emptydir';
|
||||
mkdir($emptydir);
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Storage::isEmptyDirectory($emptydir));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::isEmptyDirectory($emptydir . '/nonexistent.subdirectory'));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::isEmptyDirectory(__FILE__));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::isEmptyDirectory(__DIR__));
|
||||
}
|
||||
|
||||
|
||||
public function testIsSymlink()
|
||||
{
|
||||
if (strncasecmp(\PHP_OS, 'Win', 3) === 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$symlink_source = \RX_BASEDIR . 'tests/_output/link.source.txt';
|
||||
$symlink_target = \RX_BASEDIR . 'tests/_output/link.target.txt';
|
||||
file_put_contents($symlink_target, 'foobar');
|
||||
symlink($symlink_target, $symlink_source);
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Storage::isSymlink($symlink_source));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::isSymlink($symlink_target));
|
||||
unlink($symlink_target);
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Storage::isSymlink($symlink_source));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::isValidSymlink($symlink_source));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::isSymlink($symlink_target));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::isValidSymlink($symlink_target));
|
||||
}
|
||||
|
||||
|
||||
public function testIsReadable()
|
||||
{
|
||||
$this->assertTrue(Rhymix\Framework\Storage::isReadable(__FILE__));
|
||||
|
|
@ -94,12 +94,12 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(Rhymix\Framework\Storage::isReadable(__FILE__ . '.nonexistent.suffix'));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::isReadable('/dev/nonexistent'));
|
||||
}
|
||||
|
||||
|
||||
public function testIsWritable()
|
||||
{
|
||||
$testfile = \RX_BASEDIR . 'tests/_output/testfile.txt';
|
||||
file_put_contents($testfile, 'foobar');
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Storage::isWritable(__FILE__));
|
||||
$this->assertTrue(Rhymix\Framework\Storage::isWritable(__DIR__));
|
||||
$this->assertTrue(Rhymix\Framework\Storage::isWritable($testfile));
|
||||
|
|
@ -107,7 +107,7 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(Rhymix\Framework\Storage::isWritable($testfile . '.nonexistent.suffix'));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::isWritable('/dev/nonexistent'));
|
||||
}
|
||||
|
||||
|
||||
public function testGetSize()
|
||||
{
|
||||
$this->assertEquals(filesize(__FILE__), Rhymix\Framework\Storage::getSize(__FILE__));
|
||||
|
|
@ -115,7 +115,7 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(Rhymix\Framework\Storage::getSize(__FILE__ . '.nonexistent.suffix'));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::getSize('/dev/nonexistent'));
|
||||
}
|
||||
|
||||
|
||||
public function testRead()
|
||||
{
|
||||
// Simple read test
|
||||
|
|
@ -123,56 +123,56 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(Rhymix\Framework\Storage::read(__FILE__ . '.nonexistent.suffix'));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::read(__DIR__));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::read('/dev/nonexistent'));
|
||||
|
||||
|
||||
// Stream read test
|
||||
$fp = Rhymix\Framework\Storage::read(__FILE__, true);
|
||||
$this->assertTrue(is_resource($fp));
|
||||
$this->assertEquals(file_get_contents(__FILE__), fread($fp, filesize(__FILE__)));
|
||||
fclose($fp);
|
||||
}
|
||||
|
||||
|
||||
public function testWrite()
|
||||
{
|
||||
$testfile = \RX_BASEDIR . 'tests/_output/subdirectory/testfile.txt';
|
||||
$copyfile = \RX_BASEDIR . 'tests/_output/subdirectory/copyfile.txt';
|
||||
|
||||
|
||||
// Simple write test
|
||||
$this->assertTrue(Rhymix\Framework\Storage::write($testfile, 'foobarbazzjazz'));
|
||||
$this->assertTrue(file_exists($testfile));
|
||||
$this->assertEquals('foobarbazzjazz', file_get_contents($testfile));
|
||||
$this->assertEquals(0666 & ~Rhymix\Framework\Storage::getUmask(), fileperms($testfile) & 0777);
|
||||
|
||||
|
||||
// Append test
|
||||
$this->assertTrue(Rhymix\Framework\Storage::write($testfile, 'rhymix', 'a', 0666));
|
||||
$this->assertTrue(file_exists($testfile));
|
||||
$this->assertEquals('foobarbazzjazzrhymix', file_get_contents($testfile));
|
||||
$this->assertEquals(0666, fileperms($testfile) & 0777);
|
||||
|
||||
|
||||
// Stream copy test
|
||||
$stream = fopen($testfile, 'r');
|
||||
$this->assertTrue(Rhymix\Framework\Storage::write($copyfile, $stream));
|
||||
$this->assertEquals('foobarbazzjazzrhymix', file_get_contents($copyfile));
|
||||
fclose($stream);
|
||||
|
||||
|
||||
// Stream append test
|
||||
$stream = fopen($testfile, 'r');
|
||||
$this->assertTrue(Rhymix\Framework\Storage::write($copyfile, $stream, 'a'));
|
||||
$this->assertEquals('foobarbazzjazzrhymixfoobarbazzjazzrhymix', file_get_contents($copyfile));
|
||||
fclose($stream);
|
||||
|
||||
|
||||
// Partial stream append test
|
||||
$stream = fopen($testfile, 'r');
|
||||
fseek($stream, 14);
|
||||
$this->assertTrue(Rhymix\Framework\Storage::write($copyfile, $stream, 'a'));
|
||||
$this->assertEquals('foobarbazzjazzrhymixfoobarbazzjazzrhymixrhymix', file_get_contents($copyfile));
|
||||
fclose($stream);
|
||||
|
||||
|
||||
// Empty file write test
|
||||
$this->assertTrue(Rhymix\Framework\Storage::write($testfile . '1', ''));
|
||||
$this->assertTrue(file_exists($testfile . '1'));
|
||||
$this->assertEquals(0, filesize($testfile . '1'));
|
||||
$this->assertEmpty(glob($testfile . '1.tmp.*'));
|
||||
|
||||
|
||||
// Empty stream copy test
|
||||
$stream = fopen('php://temp', 'r');
|
||||
$this->assertTrue(Rhymix\Framework\Storage::write($testfile . '2', $stream));
|
||||
|
|
@ -180,7 +180,7 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(0, filesize($testfile . '2'));
|
||||
$this->assertEmpty(glob($testfile . '2.tmp.*'));
|
||||
fclose($stream);
|
||||
|
||||
|
||||
// Umask test
|
||||
if (strncasecmp(\PHP_OS, 'Win', 3) !== 0)
|
||||
{
|
||||
|
|
@ -193,16 +193,16 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
Rhymix\Framework\Storage::setUmask($umask);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function testReadWritePHPData()
|
||||
{
|
||||
$testfile = \RX_BASEDIR . 'tests/_output/test.php';
|
||||
$data = array('foo' => 'bar', 'baz' => array('rhymix' => '\'"special\\chars' . chr(0) . chr(255), 'test' => 'wow'));
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Storage::writePHPData($testfile, $data));
|
||||
$this->assertEquals($data, Rhymix\Framework\Storage::readPHPData($testfile));
|
||||
}
|
||||
|
||||
|
||||
public function testCopy()
|
||||
{
|
||||
$source = \RX_BASEDIR . 'tests/_output/copy.source.txt';
|
||||
|
|
@ -210,17 +210,17 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
$target_dir = \RX_BASEDIR . 'tests/_output';
|
||||
file_put_contents($source, 'foobarbaz');
|
||||
chmod($source, 0646);
|
||||
|
||||
|
||||
// Copy with exact destination filename
|
||||
$this->assertTrue(Rhymix\Framework\Storage::copy($source, $target));
|
||||
$this->assertTrue(file_exists($target));
|
||||
$this->assertTrue(file_get_contents($target) === 'foobarbaz');
|
||||
|
||||
|
||||
// Copy into directory with source filename
|
||||
$this->assertTrue(Rhymix\Framework\Storage::copy($source, $target_dir));
|
||||
$this->assertTrue(file_exists($target_dir . '/copy.source.txt'));
|
||||
$this->assertTrue(file_get_contents($target_dir . '/copy.source.txt') === 'foobarbaz');
|
||||
|
||||
|
||||
// Copy into directory with no write permissions
|
||||
chmod($target_dir, 0555);
|
||||
file_put_contents($source, 'foobarbaz has changed');
|
||||
|
|
@ -228,7 +228,7 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(file_exists($target));
|
||||
$this->assertTrue(file_get_contents($target) === 'foobarbaz has changed');
|
||||
chmod($target_dir, 0755);
|
||||
|
||||
|
||||
if (strncasecmp(\PHP_OS, 'Win', 3) !== 0)
|
||||
{
|
||||
$this->assertEquals(0646, fileperms($target) & 0777);
|
||||
|
|
@ -236,35 +236,35 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(0755, fileperms($target) & 0777);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function testMove()
|
||||
{
|
||||
$source = \RX_BASEDIR . 'tests/_output/move.source.txt';
|
||||
$target = \RX_BASEDIR . 'tests/_output/move.target.txt';
|
||||
file_put_contents($source, 'foobarbaz');
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Storage::move($source, $target));
|
||||
$this->assertTrue(file_exists($target));
|
||||
$this->assertTrue(file_get_contents($target) === 'foobarbaz');
|
||||
$this->assertFalse(file_exists($source));
|
||||
}
|
||||
|
||||
|
||||
public function testDelete()
|
||||
{
|
||||
$testfile = \RX_BASEDIR . 'tests/_output/testfile.txt';
|
||||
file_put_contents($testfile, 'foobar');
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Storage::delete($testfile));
|
||||
$this->assertFalse(file_exists($testfile));
|
||||
}
|
||||
|
||||
|
||||
public function testCreateDirectory()
|
||||
{
|
||||
$emptydir = \RX_BASEDIR . 'tests/_output/emptydir';
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Storage::createDirectory($emptydir));
|
||||
$this->assertTrue(file_exists($emptydir) && is_dir($emptydir));
|
||||
|
||||
|
||||
// Umask test
|
||||
if (strncasecmp(\PHP_OS, 'Win', 3) !== 0)
|
||||
{
|
||||
|
|
@ -277,7 +277,7 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
Rhymix\Framework\Storage::setUmask($umask);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function testReadDirectory()
|
||||
{
|
||||
$testdir = \RX_BASEDIR . 'tests/_output/testdir';
|
||||
|
|
@ -287,7 +287,7 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
file_put_contents($testdir . '/foo', 'foo');
|
||||
file_put_contents($testdir . '/bar', 'bar');
|
||||
file_put_contents($testdir . '/baz', 'baz');
|
||||
|
||||
|
||||
$this->assertEquals(array($testdir . '/bar', $testdir . '/baz', $testdir . '/foo'), Rhymix\Framework\Storage::readDirectory($testdir));
|
||||
$this->assertEquals(array('bar', 'baz', 'foo'), Rhymix\Framework\Storage::readDirectory($testdir, false));
|
||||
$this->assertEquals(array('bar', 'baz', 'foo', 'subdir'), Rhymix\Framework\Storage::readDirectory($testdir, false, true, false));
|
||||
|
|
@ -295,7 +295,7 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(array('.dotfile', 'bar', 'baz', 'foo', 'subdir'), Rhymix\Framework\Storage::readDirectory($testdir, false, false, false));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::readDirectory('/opt/nonexistent/foobar'));
|
||||
}
|
||||
|
||||
|
||||
public function testCopyDirectory()
|
||||
{
|
||||
$sourcedir = \RX_BASEDIR . 'tests/_output/sourcedir';
|
||||
|
|
@ -304,14 +304,14 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
file_put_contents($sourcedir . '/bar', 'bar');
|
||||
file_put_contents($sourcedir . '/subdir/baz', 'baz');
|
||||
$targetdir = \RX_BASEDIR . 'tests/_output/targetdir';
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Storage::copyDirectory($sourcedir, $targetdir));
|
||||
$this->assertTrue(file_exists($targetdir . '/bar'));
|
||||
$this->assertTrue(file_exists($targetdir . '/subdir/baz'));
|
||||
if (is_writable('/opt')) @touch('/opt/nonexistent');
|
||||
$this->assertFalse(@Rhymix\Framework\Storage::copyDirectory($sourcedir, '/opt/nonexistent/foobar'));
|
||||
}
|
||||
|
||||
|
||||
public function testMoveDirectory()
|
||||
{
|
||||
$sourcedir = \RX_BASEDIR . 'tests/_output/sourcedir';
|
||||
|
|
@ -320,13 +320,13 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
file_put_contents($sourcedir . '/bar', 'bar');
|
||||
file_put_contents($sourcedir . '/subdir/baz', 'baz');
|
||||
$targetdir = \RX_BASEDIR . 'tests/_output/targetdir';
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Storage::moveDirectory($sourcedir, $targetdir));
|
||||
$this->assertTrue(file_exists($targetdir . '/bar'));
|
||||
$this->assertTrue(file_exists($targetdir . '/subdir/baz'));
|
||||
$this->assertFalse(file_exists($sourcedir));
|
||||
}
|
||||
|
||||
|
||||
public function testDeleteDirectory()
|
||||
{
|
||||
$sourcedir = \RX_BASEDIR . 'tests/_output/sourcedir';
|
||||
|
|
@ -335,13 +335,13 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
file_put_contents($sourcedir . '/bar', 'bar');
|
||||
file_put_contents($sourcedir . '/subdir/baz', 'baz');
|
||||
$nonexistent = \RX_BASEDIR . 'tests/_output/targetdir';
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Storage::deleteDirectory($sourcedir));
|
||||
$this->assertFalse(file_exists($sourcedir . '/subdir/baz'));
|
||||
$this->assertFalse(file_exists($sourcedir));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::deleteDirectory($nonexistent));
|
||||
}
|
||||
|
||||
|
||||
public function testDeleteDirectoryKeepRoot()
|
||||
{
|
||||
$sourcedir = \RX_BASEDIR . 'tests/_output/sourcedir';
|
||||
|
|
@ -350,13 +350,13 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
file_put_contents($sourcedir . '/bar', 'bar');
|
||||
file_put_contents($sourcedir . '/subdir/baz', 'baz');
|
||||
$nonexistent = \RX_BASEDIR . 'tests/_output/targetdir';
|
||||
|
||||
|
||||
$this->assertTrue(Rhymix\Framework\Storage::deleteDirectory($sourcedir, false));
|
||||
$this->assertFalse(file_exists($sourcedir . '/subdir/baz'));
|
||||
$this->assertTrue(file_exists($sourcedir));
|
||||
$this->assertFalse(Rhymix\Framework\Storage::deleteDirectory($nonexistent));
|
||||
}
|
||||
|
||||
|
||||
public function testDeleteEmptyDirectory()
|
||||
{
|
||||
$sourcedir = \RX_BASEDIR . 'tests/_output/sourcedir';
|
||||
|
|
@ -366,7 +366,7 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
mkdir($sourcedir . '/subdir/subsubdir');
|
||||
mkdir($sourcedir . '/subdir/subsubdir/subsubdir');
|
||||
file_put_contents($sourcedir . '/subdir/subsubdir/subsubdir/foo', 'bar');
|
||||
|
||||
|
||||
$this->assertFalse(Rhymix\Framework\Storage::deleteEmptyDirectory($sourcedir . '/subdir/subsubdir/subsubdir'));
|
||||
Rhymix\Framework\Storage::delete($sourcedir . '/subdir/subsubdir/subsubdir/foo');
|
||||
$this->assertTrue(Rhymix\Framework\Storage::deleteEmptyDirectory($sourcedir . '/subdir/subsubdir/subsubdir'));
|
||||
|
|
@ -379,11 +379,11 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(file_exists($sourcedir));
|
||||
$this->assertTrue(file_exists($sourcedir . '/foo'));
|
||||
}
|
||||
|
||||
|
||||
public function testRecommendUmask()
|
||||
{
|
||||
$umask = Rhymix\Framework\Storage::recommendUmask();
|
||||
|
||||
|
||||
if (strncasecmp(\PHP_OS, 'Win', 3) !== 0)
|
||||
{
|
||||
if (fileowner(__FILE__) == exec('id -u'))
|
||||
|
|
@ -399,7 +399,7 @@ class StorageTest extends \Codeception\TestCase\Test
|
|||
{
|
||||
$this->assertEquals('0000', $umask);
|
||||
}
|
||||
|
||||
|
||||
$this->assertFalse(file_exists(\RX_BASEDIR . 'files/cache/uidcheck'));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,14 +13,14 @@ class TimerTest extends \Codeception\TestCase\Test
|
|||
$elapsed = Rhymix\Framework\Timer::stop();
|
||||
usleep(1000);
|
||||
$t3 = microtime(true);
|
||||
|
||||
|
||||
$this->assertGreaterThanOrEqual($t1, $started);
|
||||
$this->assertLessThanOrEqual($t2, $started);
|
||||
$this->assertGreaterThanOrEqual($t2 - $started, $elapsed);
|
||||
$this->assertLessThanOrEqual($t3 - $t1, $elapsed);
|
||||
$this->assertGreaterThan(0, $elapsed);
|
||||
}
|
||||
|
||||
|
||||
function testNestedTimers()
|
||||
{
|
||||
$t1 = Rhymix\Framework\Timer::start();
|
||||
|
|
@ -30,11 +30,11 @@ class TimerTest extends \Codeception\TestCase\Test
|
|||
$t3 = Rhymix\Framework\Timer::stop();
|
||||
usleep(1000);
|
||||
$t4 = Rhymix\Framework\Timer::stop();
|
||||
|
||||
|
||||
$this->assertGreaterThanOrEqual($t1, $t2);
|
||||
$this->assertGreaterThan($t3, $t4);
|
||||
}
|
||||
|
||||
|
||||
function testMultipleTimers()
|
||||
{
|
||||
$t1 = Rhymix\Framework\Timer::start('timer1');
|
||||
|
|
@ -42,27 +42,27 @@ class TimerTest extends \Codeception\TestCase\Test
|
|||
$t2 = Rhymix\Framework\Timer::start('timer2');
|
||||
$t3 = Rhymix\Framework\Timer::stop('timer1');
|
||||
$t4 = Rhymix\Framework\Timer::stop('timer2');
|
||||
|
||||
|
||||
$this->assertGreaterThanOrEqual($t1, $t2);
|
||||
$this->assertGreaterThanOrEqual($t4, $t3);
|
||||
}
|
||||
|
||||
|
||||
function testTimerFormat()
|
||||
{
|
||||
$t1 = Rhymix\Framework\Timer::start();
|
||||
usleep(10000);
|
||||
$t2 = Rhymix\Framework\Timer::stopFormat();
|
||||
|
||||
|
||||
$this->assertRegexp('/^[0-9\.,]+ms$/', $t2);
|
||||
}
|
||||
|
||||
|
||||
function testTimerSinceStartup()
|
||||
{
|
||||
$t1 = Rhymix\Framework\Timer::sinceStartup();
|
||||
$t2 = Rhymix\Framework\Timer::sinceStartup();
|
||||
|
||||
|
||||
$this->assertGreaterThanOrEqual($t1, $t2);
|
||||
|
||||
|
||||
$t3 = Rhymix\Framework\Timer::sinceStartupFormat();
|
||||
$this->assertRegexp('/^[0-9\.,]+ms$/', $t3);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,55 +7,55 @@ class UATest extends \Codeception\TestCase\Test
|
|||
// Phones
|
||||
$this->assertTrue(Rhymix\Framework\UA::isMobile('Mozilla/5.0 (Linux; Android 5.0; Nexus 5 Build/LPX13D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36'));
|
||||
$this->assertTrue(Rhymix\Framework\UA::isMobile('Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25'));
|
||||
|
||||
|
||||
// Tablets
|
||||
$this->assertTrue(Rhymix\Framework\UA::isMobile('Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25'));
|
||||
$this->assertTrue(Rhymix\Framework\UA::isMobile('Mozilla/5.0 (Linux; Android 4.4.2; SM-T530 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Safari/537.36'));
|
||||
|
||||
|
||||
// Not mobile
|
||||
$this->assertFalse(Rhymix\Framework\UA::isMobile('Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko'));
|
||||
$this->assertFalse(Rhymix\Framework\UA::isMobile('Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'));
|
||||
$this->assertFalse(Rhymix\Framework\UA::isMobile('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0'));
|
||||
$this->assertFalse(Rhymix\Framework\UA::isMobile('Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16'));
|
||||
}
|
||||
|
||||
|
||||
public function testIsTablet()
|
||||
{
|
||||
// Phones
|
||||
$this->assertFalse(Rhymix\Framework\UA::isTablet('Mozilla/5.0 (Linux; Android 5.0; Nexus 5 Build/LPX13D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36'));
|
||||
$this->assertFalse(Rhymix\Framework\UA::isTablet('Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25'));
|
||||
|
||||
|
||||
// Tablets
|
||||
$this->assertTrue(Rhymix\Framework\UA::isTablet('Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25'));
|
||||
$this->assertTrue(Rhymix\Framework\UA::isTablet('Mozilla/5.0 (Linux; Android 4.4.2; SM-T530 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Safari/537.36'));
|
||||
|
||||
|
||||
// Not mobile
|
||||
$this->assertFalse(Rhymix\Framework\UA::isTablet('Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko'));
|
||||
$this->assertFalse(Rhymix\Framework\UA::isTablet('Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)'));
|
||||
}
|
||||
|
||||
|
||||
public function testIsRobot()
|
||||
{
|
||||
// Robot
|
||||
$this->assertTrue(Rhymix\Framework\UA::isRobot('Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)'));
|
||||
$this->assertTrue(Rhymix\Framework\UA::isRobot('Googlebot/2.1 (+http://www.googlebot.com/bot.html)'));
|
||||
$this->assertTrue(Rhymix\Framework\UA::isRobot('Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)'));
|
||||
|
||||
|
||||
// Not robot
|
||||
$this->assertFalse(Rhymix\Framework\UA::isRobot('Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25'));
|
||||
$this->assertFalse(Rhymix\Framework\UA::isRobot('Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25'));
|
||||
$this->assertFalse(Rhymix\Framework\UA::isRobot('Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko'));
|
||||
}
|
||||
|
||||
|
||||
public function testGetLocale()
|
||||
{
|
||||
$locale = Rhymix\Framework\UA::getLocale('en-US,en;q=0.8,ko-KR;q=0.5,ko;q=0.3');
|
||||
$this->assertEquals('en-US', $locale);
|
||||
|
||||
|
||||
$locale = Rhymix\Framework\UA::getLocale('ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3');
|
||||
$this->assertEquals('ko-KR', $locale);
|
||||
}
|
||||
|
||||
|
||||
public function testGetBrowserInfo()
|
||||
{
|
||||
// Android default browser
|
||||
|
|
@ -68,7 +68,7 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue($browser->is_tablet);
|
||||
$this->assertFalse($browser->is_webview);
|
||||
$this->assertFalse($browser->is_robot);
|
||||
|
||||
|
||||
// Android default browser (possible confusion with Chrome)
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Linux; Android 4.4.4; One Build/KTU84L.H4) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36');
|
||||
$this->assertEquals('Android', $browser->browser);
|
||||
|
|
@ -79,7 +79,7 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse($browser->is_tablet);
|
||||
$this->assertFalse($browser->is_webview);
|
||||
$this->assertFalse($browser->is_robot);
|
||||
|
||||
|
||||
// Android webview (possible confusion with Chrome)
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36');
|
||||
$this->assertEquals('Android', $browser->browser);
|
||||
|
|
@ -89,7 +89,7 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse($browser->is_tablet);
|
||||
$this->assertTrue($browser->is_webview);
|
||||
$this->assertFalse($browser->is_robot);
|
||||
|
||||
|
||||
// Android Chrome
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Linux; Android 5.0; Nexus 5 Build/LPX13D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36');
|
||||
$this->assertEquals('Chrome', $browser->browser);
|
||||
|
|
@ -98,7 +98,7 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue($browser->is_mobile);
|
||||
$this->assertFalse($browser->is_webview);
|
||||
$this->assertFalse($browser->is_tablet);
|
||||
|
||||
|
||||
// Windows Chrome
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36');
|
||||
$this->assertEquals('Chrome', $browser->browser);
|
||||
|
|
@ -106,83 +106,83 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('Windows', $browser->os);
|
||||
$this->assertEquals('10.0', $browser->os_version);
|
||||
$this->assertFalse($browser->is_mobile);
|
||||
|
||||
|
||||
// Linux Chrome
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36');
|
||||
$this->assertEquals('Chrome', $browser->browser);
|
||||
$this->assertEquals('41.0', $browser->version);
|
||||
$this->assertEquals('Linux', $browser->os);
|
||||
$this->assertFalse($browser->is_mobile);
|
||||
|
||||
|
||||
// Linux Konqueror
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (X11; Linux) KHTML/4.9.1 (like Gecko) Konqueror/4.9');
|
||||
$this->assertEquals('Konqueror', $browser->browser);
|
||||
$this->assertEquals('4.9', $browser->version);
|
||||
$this->assertEquals('Linux', $browser->os);
|
||||
|
||||
|
||||
// Edge 94 on Windows
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36 Edg/94.0.992.47');
|
||||
$this->assertEquals('Edge', $browser->browser);
|
||||
$this->assertEquals('94.0', $browser->version);
|
||||
$this->assertEquals('Windows', $browser->os);
|
||||
$this->assertFalse($browser->is_mobile);
|
||||
|
||||
|
||||
// Edge 93 on Android
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Linux; Android 10; SM-G965N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Mobile Safari/537.36 EdgA/93.0.961.69');
|
||||
$this->assertEquals('Edge', $browser->browser);
|
||||
$this->assertEquals('93.0', $browser->version);
|
||||
$this->assertEquals('Android', $browser->os);
|
||||
$this->assertTrue($browser->is_mobile);
|
||||
|
||||
|
||||
// Edge 93 on iOS
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (iPhone; CPU iPhone OS 15_0_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 EdgiOS/93.961.64 Mobile/15E148 Safari/605.1.15');
|
||||
$this->assertEquals('Edge', $browser->browser);
|
||||
$this->assertEquals('93.0', $browser->version);
|
||||
$this->assertEquals('iOS', $browser->os);
|
||||
$this->assertTrue($browser->is_mobile);
|
||||
|
||||
|
||||
// Edge 13
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586');
|
||||
$this->assertEquals('Edge', $browser->browser);
|
||||
$this->assertEquals('13.0', $browser->version);
|
||||
$this->assertEquals('Windows', $browser->os);
|
||||
$this->assertFalse($browser->is_mobile);
|
||||
|
||||
|
||||
// Edge 12
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136');
|
||||
$this->assertEquals('Edge', $browser->browser);
|
||||
$this->assertEquals('12.0', $browser->version);
|
||||
$this->assertEquals('Windows', $browser->os);
|
||||
$this->assertFalse($browser->is_mobile);
|
||||
|
||||
|
||||
// IE 11
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko');
|
||||
$this->assertEquals('IE', $browser->browser);
|
||||
$this->assertEquals('11.0', $browser->version);
|
||||
$this->assertEquals('Windows', $browser->os);
|
||||
$this->assertEquals('10.0', $browser->os_version);
|
||||
|
||||
|
||||
// IE 10 in compatibility mode
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/4.0 (Compatible; MSIE 8.0; Windows NT 5.2; Trident/6.0)');
|
||||
$this->assertEquals('IE', $browser->browser);
|
||||
$this->assertEquals('10.0', $browser->version);
|
||||
$this->assertEquals('Windows', $browser->os);
|
||||
$this->assertEquals('XP', $browser->os_version);
|
||||
|
||||
|
||||
// IE 9
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)');
|
||||
$this->assertEquals('IE', $browser->browser);
|
||||
$this->assertEquals('9.0', $browser->version);
|
||||
$this->assertEquals('Windows', $browser->os);
|
||||
$this->assertEquals('7', $browser->os_version);
|
||||
|
||||
|
||||
// IE 8 in compatibility mode
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)');
|
||||
$this->assertEquals('IE', $browser->browser);
|
||||
$this->assertEquals('8.0', $browser->version);
|
||||
$this->assertEquals('Windows', $browser->os);
|
||||
$this->assertEquals('Vista', $browser->os_version);
|
||||
|
||||
|
||||
// iOS Safari
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3');
|
||||
$this->assertEquals('Safari', $browser->browser);
|
||||
|
|
@ -192,7 +192,7 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('iPad', $browser->device);
|
||||
$this->assertTrue($browser->is_mobile);
|
||||
$this->assertTrue($browser->is_tablet);
|
||||
|
||||
|
||||
// iOS Chrome
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3');
|
||||
$this->assertEquals('Chrome', $browser->browser);
|
||||
|
|
@ -202,7 +202,7 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('iPhone', $browser->device);
|
||||
$this->assertTrue($browser->is_mobile);
|
||||
$this->assertFalse($browser->is_tablet);
|
||||
|
||||
|
||||
// iOS Firefox
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (iPad; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4');
|
||||
$this->assertEquals('Firefox', $browser->browser);
|
||||
|
|
@ -212,7 +212,7 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('iPad', $browser->device);
|
||||
$this->assertTrue($browser->is_mobile);
|
||||
$this->assertTrue($browser->is_tablet);
|
||||
|
||||
|
||||
// macOS (OS X) Safari
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18');
|
||||
$this->assertEquals('Safari', $browser->browser);
|
||||
|
|
@ -220,7 +220,7 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('macOS', $browser->os);
|
||||
$this->assertEquals('10.10.2', $browser->os_version);
|
||||
$this->assertFalse($browser->is_mobile);
|
||||
|
||||
|
||||
// macOS (OS X) Chrome
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36');
|
||||
$this->assertEquals('Chrome', $browser->browser);
|
||||
|
|
@ -228,38 +228,38 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('macOS', $browser->os);
|
||||
$this->assertEquals('10.10.1', $browser->os_version);
|
||||
$this->assertFalse($browser->is_mobile);
|
||||
|
||||
|
||||
// macOS (OS X) Firefox
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0');
|
||||
$this->assertEquals('Firefox', $browser->browser);
|
||||
$this->assertEquals('33.0', $browser->version);
|
||||
$this->assertEquals('macOS', $browser->os);
|
||||
$this->assertFalse($browser->is_mobile);
|
||||
|
||||
|
||||
// Opera 15
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.100');
|
||||
$this->assertEquals('Opera', $browser->browser);
|
||||
$this->assertEquals('15.0', $browser->version);
|
||||
$this->assertFalse($browser->is_mobile);
|
||||
|
||||
|
||||
// Opera 12
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16');
|
||||
$this->assertEquals('Opera', $browser->browser);
|
||||
$this->assertEquals('12.16', $browser->version);
|
||||
$this->assertFalse($browser->is_mobile);
|
||||
|
||||
|
||||
// Opera 9.x
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Opera/9.64 (X11; Linux x86_64; U; en) Presto/2.1.1');
|
||||
$this->assertEquals('Opera', $browser->browser);
|
||||
$this->assertEquals('9.64', $browser->version);
|
||||
$this->assertFalse($browser->is_mobile);
|
||||
|
||||
|
||||
// Iceweasel (Debian Firefox)
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (X11; Linux i686; rv:10.0.7) Gecko/20100101 Iceweasel/10.0.7');
|
||||
$this->assertEquals('Firefox', $browser->browser);
|
||||
$this->assertEquals('10.0', $browser->version);
|
||||
$this->assertFalse($browser->is_mobile);
|
||||
|
||||
|
||||
// Whale Mobile (Naver App)
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Linux; Android 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.128 Whale/1.0.0.0 Crosswalk/23.69.590.31 Mobile Safari/537.36 NAVER(inapp; search; 660; 10.7.2)');
|
||||
$this->assertEquals('Whale', $browser->browser);
|
||||
|
|
@ -268,7 +268,7 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue($browser->is_mobile);
|
||||
$this->assertFalse($browser->is_webview);
|
||||
$this->assertFalse($browser->is_robot);
|
||||
|
||||
|
||||
// XE Push App (Webview)
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Linux; Android 9; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/75.0.3770.101 Mobile Safari/537.36;App');
|
||||
$this->assertEquals('Chrome', $browser->browser);
|
||||
|
|
@ -277,82 +277,82 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue($browser->is_mobile);
|
||||
$this->assertTrue($browser->is_webview);
|
||||
$this->assertFalse($browser->is_robot);
|
||||
|
||||
|
||||
// Googlebot
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)');
|
||||
$this->assertEquals('Googlebot', $browser->browser);
|
||||
$this->assertEquals('2.1', $browser->version);
|
||||
$this->assertTrue($browser->is_robot);
|
||||
|
||||
|
||||
// Googlebot-Image
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Googlebot-Image/1.0');
|
||||
$this->assertEquals('Googlebot-Image', $browser->browser);
|
||||
$this->assertEquals('1.0', $browser->version);
|
||||
$this->assertTrue($browser->is_robot);
|
||||
|
||||
|
||||
// Mediapartners-Google
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mediapartners-Google');
|
||||
$this->assertEquals('Mediapartners-Google', $browser->browser);
|
||||
$this->assertEquals(null, $browser->version);
|
||||
$this->assertTrue($browser->is_robot);
|
||||
|
||||
|
||||
// Bingbot
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)');
|
||||
$this->assertEquals('Bingbot', $browser->browser);
|
||||
$this->assertEquals('2.0', $browser->version);
|
||||
$this->assertTrue($browser->is_robot);
|
||||
|
||||
|
||||
// Yeti
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Yeti/1.1; +http://naver.me/spd');
|
||||
$this->assertEquals('Yeti', $browser->browser);
|
||||
$this->assertEquals('1.1', $browser->version);
|
||||
$this->assertTrue($browser->is_robot);
|
||||
|
||||
|
||||
// Baiduspider
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)');
|
||||
$this->assertEquals('Baiduspider', $browser->browser);
|
||||
$this->assertEquals('2.0', $browser->version);
|
||||
$this->assertTrue($browser->is_robot);
|
||||
|
||||
|
||||
// wget
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('wget/1.17.1');
|
||||
$this->assertEquals('Wget', $browser->browser);
|
||||
$this->assertEquals('1.17', $browser->version);
|
||||
$this->assertTrue($browser->is_robot);
|
||||
|
||||
|
||||
// curl
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('curl/7.47.0');
|
||||
$this->assertEquals('Curl', $browser->browser);
|
||||
$this->assertEquals('7.47', $browser->version);
|
||||
$this->assertTrue($browser->is_robot);
|
||||
|
||||
|
||||
// PHP with version
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('PHP/5.2.9');
|
||||
$this->assertEquals('PHP', $browser->browser);
|
||||
$this->assertEquals('5.2', $browser->version);
|
||||
$this->assertTrue($browser->is_robot);
|
||||
|
||||
|
||||
// PHP without version
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('PHP');
|
||||
$this->assertEquals('PHP', $browser->browser);
|
||||
$this->assertNull($browser->version);
|
||||
|
||||
|
||||
// PHP with HTTP_Request2
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('HTTP_Request2/2.1.1 (http://pear.php.net/package/http_request2) PHP/5.3.2');
|
||||
$this->assertEquals('PHP', $browser->browser);
|
||||
$this->assertEquals('5.3', $browser->version);
|
||||
|
||||
|
||||
// Some random browser with the 'Mozilla' version
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; XH; rv:8.578.498) fr, Gecko/20121021 Camino/8.723+ (Firefox compatible)');
|
||||
$this->assertEquals('Mozilla', $browser->browser);
|
||||
$this->assertEquals('5.0', $browser->version);
|
||||
|
||||
|
||||
// Some random browser without the 'Mozilla' version
|
||||
$browser = Rhymix\Framework\UA::getBrowserInfo('W3C_Validator/1.650');
|
||||
$this->assertEquals('W3C_Validator', $browser->browser);
|
||||
$this->assertEquals('1.650', $browser->version);
|
||||
}
|
||||
|
||||
|
||||
public function testEncodeFilenameForDownload()
|
||||
{
|
||||
$this->assertEquals('filename*=UTF-8\'\'%ED%95%9C%EA%B8%80%20filename.jpg', Rhymix\Framework\UA::encodeFilenameForDownload('한글 filename.jpg', 'Chrome/50.0'));
|
||||
|
|
@ -368,7 +368,7 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('filename="한글 filename.jpg"', Rhymix\Framework\UA::encodeFilenameForDownload('한글 filename.jpg', 'Safari/5.0 Version/5.0'));
|
||||
$this->assertEquals('filename="한글 filename.jpg"', Rhymix\Framework\UA::encodeFilenameForDownload('한글 filename.jpg', 'Linux; Android 5.1.1; Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36'));
|
||||
}
|
||||
|
||||
|
||||
public function testGetSetColorScheme()
|
||||
{
|
||||
$_COOKIE['rx_color_scheme'] = 'light';
|
||||
|
|
@ -379,7 +379,7 @@ class UATest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('auto', Rhymix\Framework\UA::getColorScheme());
|
||||
$_COOKIE['rx_color_scheme'] = 'invalid';
|
||||
$this->assertEquals('auto', Rhymix\Framework\UA::getColorScheme());
|
||||
|
||||
|
||||
Rhymix\Framework\UA::setColorScheme('light');
|
||||
$this->assertEquals('light', $_COOKIE['rx_color_scheme']);
|
||||
Rhymix\Framework\UA::setColorScheme('dark');
|
||||
|
|
|
|||
|
|
@ -4,43 +4,43 @@ class URLTest extends \Codeception\TestCase\Test
|
|||
{
|
||||
private $baseurl;
|
||||
private $relurl;
|
||||
|
||||
|
||||
public function _before()
|
||||
{
|
||||
$this->baseurl = 'https://www.rhymix.org/' . basename(dirname(dirname(dirname(__DIR__)))) . '/';
|
||||
$this->relurl = basename(dirname(dirname(dirname(__DIR__))));
|
||||
}
|
||||
|
||||
|
||||
public function testGetCurrentURL()
|
||||
{
|
||||
$old_request_uri = $_SERVER['REQUEST_URI'];
|
||||
$_SERVER['REQUEST_URI'] = '/' . $this->relurl . '/index.php?foo=bar&xe=sucks';
|
||||
|
||||
|
||||
// Getting the current URL
|
||||
$this->assertEquals($this->baseurl . 'index.php?foo=bar&xe=sucks', Rhymix\Framework\URL::getCurrentURL());
|
||||
|
||||
// Adding items to the query string
|
||||
$this->assertEquals($this->baseurl . 'index.php?foo=bar&xe=sucks&var=1&arr%5B0%5D=2&arr%5B1%5D=3', Rhymix\Framework\URL::getCurrentURL(array('var' => '1', 'arr' => array(2, 3))));
|
||||
|
||||
|
||||
// Removing item from the query string
|
||||
$this->assertEquals($this->baseurl . 'index.php?xe=sucks', Rhymix\Framework\URL::getCurrentURL(array('foo' => null)));
|
||||
|
||||
|
||||
// Removing all items from the query string
|
||||
$this->assertEquals($this->baseurl . 'index.php', Rhymix\Framework\URL::getCurrentURL(array('foo' => null, 'xe' => null)));
|
||||
|
||||
|
||||
// Adding and removing parameters at the same time
|
||||
$this->assertEquals($this->baseurl . 'index.php?xe=sucks&l=ko', Rhymix\Framework\URL::getCurrentURL(array('l' => 'ko', 'foo' => null)));
|
||||
|
||||
|
||||
// Removing invalid characters in the current URL
|
||||
$_SERVER['REQUEST_URI'] = '/' . $this->relurl . '/?foo="bar"';
|
||||
$this->assertEquals($this->baseurl . '?foo=bar', Rhymix\Framework\URL::getCurrentURL());
|
||||
$_SERVER['REQUEST_URI'] = '/' . $this->relurl . '/?foo=<bar&baz=rhymix>';
|
||||
$this->assertEquals($this->baseurl . '?foo=bar&baz=rhymix', Rhymix\Framework\URL::getCurrentURL());
|
||||
$this->assertEquals($this->baseurl . '?baz=rhymix&l=ko', Rhymix\Framework\URL::getCurrentURL(array('l' => 'ko', 'foo' => null)));
|
||||
|
||||
|
||||
$_SERVER['REQUEST_URI'] = $old_request_uri;
|
||||
}
|
||||
|
||||
|
||||
public function testGetCurrentDomainURL()
|
||||
{
|
||||
$this->assertEquals('https://www.rhymix.org/', Rhymix\Framework\URL::getCurrentDomainURL());
|
||||
|
|
@ -48,7 +48,7 @@ class URLTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('https://www.rhymix.org/foo/bar', Rhymix\Framework\URL::getCurrentDomainURL('/foo/bar'));
|
||||
$this->assertEquals($this->baseurl . 'index.php?foo=bar', Rhymix\Framework\URL::getCurrentDomainURL($this->relurl . '/index.php?foo=bar'));
|
||||
}
|
||||
|
||||
|
||||
public function testGetCanonicalURL()
|
||||
{
|
||||
$tests = array(
|
||||
|
|
@ -58,13 +58,13 @@ class URLTest extends \Codeception\TestCase\Test
|
|||
'//www.example.com/foo' => 'https://www.example.com/foo',
|
||||
'http://xn--cg4bkiv2oina.com/' => 'http://삼성전자.com/',
|
||||
);
|
||||
|
||||
|
||||
foreach ($tests as $from => $to)
|
||||
{
|
||||
$this->assertEquals($to, Rhymix\Framework\URL::getCanonicalURL($from));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function testGetDomainFromURL()
|
||||
{
|
||||
$tests = array(
|
||||
|
|
@ -72,33 +72,33 @@ class URLTest extends \Codeception\TestCase\Test
|
|||
'https://www.rhymix.org:8080/foo/bar' => 'www.rhymix.org',
|
||||
'http://xn--cg4bkiv2oina.com/' => '삼성전자.com',
|
||||
);
|
||||
|
||||
|
||||
foreach ($tests as $from => $to)
|
||||
{
|
||||
$this->assertEquals($to, Rhymix\Framework\URL::getDomainFromURL($from));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function testModifyURL()
|
||||
{
|
||||
// Conversion to absolute
|
||||
$this->assertEquals($this->baseurl . 'index.php?foo=bar', $url = Rhymix\Framework\URL::modifyURL('./index.php?foo=bar'));
|
||||
|
||||
|
||||
// Adding items to the query string
|
||||
$this->assertEquals($this->baseurl . 'index.php?foo=bar&var=1&arr%5B0%5D=2&arr%5B1%5D=3', Rhymix\Framework\URL::modifyURL($url, array('var' => '1', 'arr' => array(2, 3))));
|
||||
|
||||
|
||||
// Removing item from the query string
|
||||
$this->assertEquals($this->baseurl . 'index.php', Rhymix\Framework\URL::modifyURL($url, array('foo' => null)));
|
||||
|
||||
|
||||
// Adding and removing parameters at the same time
|
||||
$this->assertEquals($this->baseurl . 'index.php?l=ko', Rhymix\Framework\URL::modifyURL($url, array('l' => 'ko', 'foo' => null)));
|
||||
}
|
||||
|
||||
|
||||
public function testIsInternalURL()
|
||||
{
|
||||
// This function is checked in Security::checkCSRF()
|
||||
}
|
||||
|
||||
|
||||
public function testURLFromServerPath()
|
||||
{
|
||||
$this->assertEquals($this->baseurl . '', Rhymix\Framework\URL::fromServerPath(\RX_BASEDIR));
|
||||
|
|
@ -107,7 +107,7 @@ class URLTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(false, Rhymix\Framework\URL::fromServerPath(dirname(dirname(\RX_BASEDIR))));
|
||||
$this->assertEquals(false, Rhymix\Framework\URL::fromServerPath('C:/Windows'));
|
||||
}
|
||||
|
||||
|
||||
public function testURLToServerPath()
|
||||
{
|
||||
$this->assertEquals(\RX_BASEDIR . 'index.php', Rhymix\Framework\URL::toServerPath($this->baseurl . 'index.php'));
|
||||
|
|
@ -117,7 +117,7 @@ class URLTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(false, Rhymix\Framework\URL::toServerPath('http://other.domain.com/'));
|
||||
$this->assertEquals(false, Rhymix\Framework\URL::toServerPath('//other.domain.com/'));
|
||||
}
|
||||
|
||||
|
||||
public function testEncodeIdna()
|
||||
{
|
||||
$this->assertEquals('xn--9i1bl3b186bf9e.xn--3e0b707e', Rhymix\Framework\URL::encodeIdna('퓨니코드.한국'));
|
||||
|
|
@ -125,7 +125,7 @@ class URLTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('//xn--9i1bl3b186bf9e.xn--3e0b707e#한글부분', Rhymix\Framework\URL::encodeIdna('//퓨니코드.한국#한글부분'));
|
||||
$this->assertEquals('https://xn--9i1bl3b186bf9e.xn--3e0b707e/hello/world/라이믹스.php?i=4', Rhymix\Framework\URL::encodeIdna('https://퓨니코드.한국/hello/world/라이믹스.php?i=4'));
|
||||
}
|
||||
|
||||
|
||||
public function testDecodeIdna()
|
||||
{
|
||||
$this->assertEquals('퓨니코드.한국', Rhymix\Framework\URL::decodeIdna('xn--9i1bl3b186bf9e.xn--3e0b707e'));
|
||||
|
|
|
|||
|
|
@ -7,42 +7,42 @@ class FilenameFilterTest extends \Codeception\TestCase\Test
|
|||
public function testFilenameFilterClean()
|
||||
{
|
||||
$tests = array(
|
||||
|
||||
|
||||
// Illegal characters
|
||||
'foo*\.bar' => 'foo.bar',
|
||||
'foobar{baz}.jpg' => 'foobar(baz).jpg',
|
||||
'foobar^%.docx' => 'foobar_.docx',
|
||||
'foo&bar@rhymix.docx' => 'foo&bar@rhymix.docx',
|
||||
|
||||
|
||||
// Control characters
|
||||
'foobar' . chr(127) . '.gif' => 'foobar.gif',
|
||||
'foobar' . "\t\r\n" . '.gif' => 'foobar.gif',
|
||||
|
||||
|
||||
// Unicode whitepace characters
|
||||
'foobar' . html_entity_decode(' ') . ' space.gif' => 'foobar space.gif',
|
||||
'hello world.png' => 'hello world.png',
|
||||
|
||||
|
||||
// Extra symbols
|
||||
'_foobar.jpg-' => 'foobar.jpg',
|
||||
'.htaccess' => 'htaccess',
|
||||
|
||||
|
||||
// PHP extension
|
||||
'foobar.php' => 'foobar.phps',
|
||||
'foobar.php.jpg' => 'foobar.php.jpg',
|
||||
|
||||
|
||||
// Overlong filenames
|
||||
str_repeat('f', 200) . '.' . str_repeat('b', 30) => str_repeat('f', 111) . '.' . str_repeat('b', 15),
|
||||
str_repeat('한글', 100) . '.hwp' => str_repeat('한글', 61) . '한.hwp',
|
||||
|
||||
|
||||
);
|
||||
|
||||
|
||||
foreach ($tests as $from => $to)
|
||||
{
|
||||
$result = FilenameFilter::clean($from);
|
||||
$this->assertEquals($to, $result);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function testFilenameFilterCleanPath()
|
||||
{
|
||||
// Remove extra dots and slashes.
|
||||
|
|
@ -50,28 +50,28 @@ class FilenameFilterTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('/usr/share/foo/bar.jpg', FilenameFilter::cleanPath('/usr/share/foo/././baz/../../foo/bar.jpg'));
|
||||
$this->assertEquals('/usr/share', FilenameFilter::cleanPath('/usr/share/foo/..'));
|
||||
$this->assertEquals('/usr/share', FilenameFilter::cleanPath('/usr/share/foo/bar/../baz/../../'));
|
||||
|
||||
|
||||
// Test internal paths.
|
||||
$this->assertEquals(\RX_BASEDIR . 'common/js/debug.js', FilenameFilter::cleanPath('common/js/debug.js'));
|
||||
$this->assertEquals(\RX_BASEDIR . 'common/js/debug.js', FilenameFilter::cleanPath('./common/js/debug.js'));
|
||||
|
||||
|
||||
// Test Windows paths.
|
||||
$this->assertEquals('C:/Windows/Notepad.exe', FilenameFilter::cleanPath('C:\\Windows\\System32\\..\\Notepad.exe'));
|
||||
$this->assertEquals('//vboxsrv/hello/world', FilenameFilter::cleanPath('\\\\vboxsrv\\hello\\world'));
|
||||
|
||||
|
||||
// Test absolute URLs.
|
||||
$this->assertEquals('https://www.rhymix.org/foo/bar', FilenameFilter::cleanPath('https://www.rhymix.org/foo/.//bar'));
|
||||
$this->assertEquals('//www.rhymix.org/foo/bar', FilenameFilter::cleanPath('//www.rhymix.org/foo/.//bar'));
|
||||
|
||||
|
||||
// Do not remove .. if there is no parent directory.
|
||||
$this->assertEquals('C:/../foobar', FilenameFilter::cleanPath('C:\\..\foobar\\'));
|
||||
$this->assertEquals('/../foobar', FilenameFilter::cleanPath('/../foobar/'));
|
||||
|
||||
|
||||
// Remove query strings and URL fragments.
|
||||
$this->assertEquals(\RX_BASEDIR . 'index.php', FilenameFilter::cleanPath('index.php?foo=bar'));
|
||||
$this->assertEquals(\RX_BASEDIR . 'index.php', FilenameFilter::cleanPath('index.php#baz'));
|
||||
}
|
||||
|
||||
|
||||
public function testFilenameFilterIsDirectDownload()
|
||||
{
|
||||
$this->assertTrue(FilenameFilter::isDirectDownload('foobar.GIF'));
|
||||
|
|
@ -82,7 +82,7 @@ class FilenameFilterTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(FilenameFilter::isDirectDownload('/audio.MP3'));
|
||||
$this->assertTrue(FilenameFilter::isDirectDownload('/audio.FLac'));
|
||||
$this->assertTrue(FilenameFilter::isDirectDownload('//foo.bar/video.mp4'));
|
||||
|
||||
|
||||
$this->assertFalse(FilenameFilter::isDirectDownload('rhymix.docx'));
|
||||
$this->assertFalse(FilenameFilter::isDirectDownload('rhymix.HWP'));
|
||||
$this->assertFalse(FilenameFilter::isDirectDownload('rhymix.jpg.exe'));
|
||||
|
|
@ -91,7 +91,7 @@ class FilenameFilterTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(FilenameFilter::isDirectDownload(''));
|
||||
$this->assertFalse(FilenameFilter::isDirectDownload('http://www.google.com'));
|
||||
$this->assertFalse(FilenameFilter::isDirectDownload('/'));
|
||||
|
||||
|
||||
$this->assertTrue(FilenameFilter::isDirectDownload('foobar.jpg', false));
|
||||
$this->assertTrue(FilenameFilter::isDirectDownload('foobar.webp', false));
|
||||
$this->assertFalse(FilenameFilter::isDirectDownload('foobar.mp4', false));
|
||||
|
|
|
|||
|
|
@ -58,66 +58,66 @@ class HTMLFilterTest extends \Codeception\TestCase\Test
|
|||
'<img src="" alt="dummy" />'
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
config('mediafilter.classes', array());
|
||||
foreach ($tests as $test)
|
||||
{
|
||||
$this->assertEquals($test[1], Rhymix\Framework\Filters\HTMLFilter::clean($test[0]));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function testHTMLFilterHTML5()
|
||||
{
|
||||
$source = '<div><audio autoplay="autoplay" src="./foo/bar.mp3"></audio></div>';
|
||||
$target = '<div><audio autoplay="" src="./foo/bar.mp3"></audio></div>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<video autoplay width="320" height="240"><source src="./foo/bar.mp4" type="video/mp4" /></video>';
|
||||
$target = '<video autoplay="" width="320" height="240"><source src="./foo/bar.mp4" type="video/mp4" /></video>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<nav>123</nav><section>456</section><article>789</article><aside>0</aside>';
|
||||
$target = '<nav>123</nav><section>456</section><article>789</article><aside>0</aside>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<div contenteditable="true"><div contenteditable="false"><p contenteditable="false"></p></div></div>';
|
||||
$target = '<div><div contenteditable="false"><p contenteditable="false"></p></div></div>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
}
|
||||
|
||||
|
||||
public function testHTMLFilterCSS3()
|
||||
{
|
||||
$source = '<div style="display:flex;border-radius:1px 2px 3px 4px;"></div>';
|
||||
$target = '<div style="display:flex;border-radius:1px 2px 3px 4px;"></div>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<div style="box-sizing:border-box;box-shadow:5px 5px 2px #123456;"></div>';
|
||||
$target = '<div style="box-sizing:border-box;box-shadow:5px 5px 2px #123456;"></div>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<div style="overflow-x:auto;overflow-y:scroll;left:-500px;"></div>';
|
||||
$target = '<div style="overflow-x:auto;overflow-y:scroll;"></div>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<div style="aspect-ratio:9/16;"></div><div style="aspect-ratio:0.5825;"></div>';
|
||||
$target = '<div style="aspect-ratio:9/16;"></div><div style="aspect-ratio:0.5825;"></div>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<div style="object-fit:cover;"><span style="object-fit:invalid-value;">foobar</span></div>';
|
||||
$target = '<div style="object-fit:cover;"><span>foobar</span></div>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
}
|
||||
|
||||
|
||||
public function testHTMLFilterEmbeddedMedia()
|
||||
{
|
||||
$source = '<iframe title="Video Test" width="640" height="360" src="http://videofarm.daum.net/controller/video/viewer/Video.html?vid=s474b7BR2zzREo0g7OT7EKo&play_loc=undefined&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&play_loc=undefined&alert=true" frameborder="0" scrolling="no"></iframe>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<iframe title="Video Test" width="640" height="360" src="http://not-allowed.com/whatever-video.mp4" frameborder="0" scrolling="no"></iframe>';
|
||||
$target = '<iframe title="Video Test" width="640" height="360" frameborder="0" scrolling="no"></iframe>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<object type="application/x-shockwave-flash" width="640px" height="360px" align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,3,0,0">' .
|
||||
'<param name="movie" value="http://videofarm.daum.net/controller/player/VodPlayer.swf" />' .
|
||||
'<param name="allowScriptAccess" value="always" />' .
|
||||
|
|
@ -137,123 +137,123 @@ class HTMLFilterTest extends \Codeception\TestCase\Test
|
|||
'<embed src="http://videofarm.daum.net/controller/player/VodPlayer.swf" width="640" height="360" type="application/x-shockwave-flash" flashvars="vid=s474b7BR2zzREo0g7OT7EKo&playLoc=undefined&alert=true" allowscriptaccess="never" allownetworking="internal" />' .
|
||||
'</object>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<audio src="https://www.youtube.com/whatever"></audio>';
|
||||
$target = '<audio src="https://www.youtube.com/whatever"></audio>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<audio src="https://www-youtube.com/whatever"></audio>';
|
||||
$target = '<audio src=""></audio>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<video width="320" height="240"><source src="http://api.v.daum.net/something" type="video/mp4" /></video>';
|
||||
$target = '<video width="320" height="240"><source src="http://api.v.daum.net/something" type="video/mp4" /></video>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<video width="320" height="240"><source src="http://wrong-site.net/" type="video/mp4" /></video>';
|
||||
$target = '<video width="320" height="240"><source src="" type="video/mp4" /></video>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
}
|
||||
|
||||
|
||||
public function testHTMLFilterAllowedClasses()
|
||||
{
|
||||
config('mediafilter.classes', array());
|
||||
$source = '<p class="mytest">Hello World</p>';
|
||||
$target = '<p>Hello World</p>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
config('mediafilter.classes', array('mytest'));
|
||||
$source = '<p class="mytest">Hello World</p>';
|
||||
$target = '<p class="mytest">Hello World</p>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
config('mediafilter.classes', array());
|
||||
$source = '<p class="whatever">Hello World</p>';
|
||||
$target = '<p class="whatever">Hello World</p>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, true));
|
||||
|
||||
|
||||
$source = '<p class="foobar whatever">Hello World</p>';
|
||||
$target = '<p class="foobar">Hello World</p>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, array('foobar')));
|
||||
}
|
||||
|
||||
|
||||
public function testHTMLFilterEditorComponent()
|
||||
{
|
||||
$source = '<img somekey="somevalue" otherkey="othervalue" onmouseover="alert(\'xss\');" editor_component="component_name" src="./foo/bar.jpg" alt="My Picture" style="width:320px;height:240px;" width="320" height="240" />';
|
||||
$target = '<img somekey="somevalue" otherkey="othervalue" editor_component="component_name" src="./foo/bar.jpg" alt="My Picture" style="width:320px;height:240px;" width="320" height="240" />';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<img somekey="somevalue" otherkey="othervalue" onkeypress="alert(\'xss\');" editor_component="component_name" />';
|
||||
$target = '<img somekey="somevalue" otherkey="othervalue" src="" editor_component="component_name" alt="" />';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<div somekey="somevalue" otherkey="othervalue" onload="alert(\'xss\');" id="foo" class="bar" editor_component="component_name"></div>';
|
||||
$target = '<div somekey="somevalue" otherkey="othervalue" id="user_content_foo" editor_component="component_name"></div>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<div editor_component="component_name" style="width:400px;height:300px;" draggable dropzone contextmenu="whatever"></div>';
|
||||
$target = '<div editor_component="component_name" style="width:400px;height:300px;"></div>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<img somekey="somevalue" otherkey="othervalue" onmouseover="alert(\'xss\');" editor_component="component_name" src="./foo/bar.jpg" alt="My Picture" style="width:320px;height:240px;" width="320" height="240" />';
|
||||
$target = '<img src="./foo/bar.jpg" alt="My Picture" style="width:320px;height:240px;" width="320" height="240" />';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, false, false));
|
||||
|
||||
|
||||
$source = '<img src="./foo/bar.jpg" alt="Picture" editor_component="component_name" editor_component_property="java Script:alert()" />';
|
||||
$target = '<img src="./foo/bar.jpg" alt="Picture" editor_component="component_name" />';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<img src="./foo/bar.jpg" alt="Picture" editor_component="component_name" rx_encoded_properties="alert()" />';
|
||||
$target = '<img src="./foo/bar.jpg" alt="Picture" editor_component="component_name" />';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<img somekey="somevalue" otherkey="othervalue" onkeypress="alert(\'xss\');" editor_component="component_name" />';
|
||||
$target = '';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, false, false));
|
||||
}
|
||||
|
||||
|
||||
public function testHTMLFilterWidgetCode()
|
||||
{
|
||||
$source = '<p>Hello World</p><img class="zbxe_widget_output" widget="content" skin="default" colorset="white" widget_sequence="1234" widget_cache="1m" content_type="document" module_srls="56" list_type="normal" tab_type="none" markup_type="table" page_count="1" option_view="title,regdate,nickname" show_browser_title="Y" show_comment_count="Y" show_trackback_count="Y" show_category="Y" show_icon="Y" show_secret="N" order_target="regdate" order_type="desc" thumbnail_type="crop" />';
|
||||
$target = '<p>Hello World</p>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<p>Hello World</p><img class="zbxe_widget_output" widget="content" skin="default" colorset="white" widget_sequence="1234" widget_cache="1m" content_type="document" module_srls="56" list_type="normal" tab_type="none" markup_type="table" page_count="1" option_view="title,regdate,nickname" show_browser_title="Y" show_comment_count="Y" show_trackback_count="Y" show_category="Y" show_icon="Y" show_secret="N" order_target="regdate" order_type="desc" thumbnail_type="crop" />';
|
||||
$target = '<p>Hello World</p><img widget="content" skin="default" colorset="white" widget_sequence="1234" widget_cache="1m" content_type="document" module_srls="56" list_type="normal" tab_type="none" markup_type="table" page_count="1" option_view="title,regdate,nickname" show_browser_title="Y" show_comment_count="Y" show_trackback_count="Y" show_category="Y" show_icon="Y" show_secret="N" order_target="regdate" order_type="desc" thumbnail_type="crop" src="" class="zbxe_widget_output" alt="" />';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, true, true, true));
|
||||
|
||||
|
||||
$source = '<p>Hello World</p><img class="zbxe_widget_output" widget="content" onmouseover="alert(\'xss\');" skin="default" colorset="white" widget_sequence="1234" widget_cache="1m" content_type="document" module_srls="56" list_type="normal" tab_type="none" markup_type="table" page_count="1" option_view="title,regdate,nickname" show_browser_title="Y" show_comment_count="Y" show_trackback_count="Y" show_category="Y" show_icon="Y" show_secret="N" order_target="regdate" order_type="desc" thumbnail_type="crop" />';
|
||||
$target = '<p>Hello World</p><img widget="content" skin="default" colorset="white" widget_sequence="1234" widget_cache="1m" content_type="document" module_srls="56" list_type="normal" tab_type="none" markup_type="table" page_count="1" option_view="title,regdate,nickname" show_browser_title="Y" show_comment_count="Y" show_trackback_count="Y" show_category="Y" show_icon="Y" show_secret="N" order_target="regdate" order_type="desc" thumbnail_type="crop" src="" class="zbxe_widget_output" alt="" />';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source, true, true, true));
|
||||
}
|
||||
|
||||
|
||||
public function testHTMLFilterUserContentID()
|
||||
{
|
||||
$source = '<p id="foobar">Hello World!</p>';
|
||||
$target = '<p id="user_content_foobar">Hello World!</p>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<p id="user_content_foobar">Hello World!</p>';
|
||||
$target = '<p id="user_content_foobar">Hello World!</p>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
}
|
||||
|
||||
|
||||
public function testHTMLFilterMiscellaneous()
|
||||
{
|
||||
// data-file-srl attribute
|
||||
$source = '<p><img src="foo.jpg" alt="foobar" data-file-srl="1234" /></p>';
|
||||
$target = '<p><img src="foo.jpg" alt="foobar" data-file-srl="1234" /></p>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
|
||||
|
||||
$source = '<p><img src="foo.jpg" alt="foobar" data-file-srl="javascript:xss()" /></p>';
|
||||
$target = '<p><img src="foo.jpg" alt="foobar" /></p>';
|
||||
$this->assertEquals($target, Rhymix\Framework\Filters\HTMLFilter::clean($source));
|
||||
}
|
||||
|
||||
|
||||
public function testHTMLFilterFixMediaUrls()
|
||||
{
|
||||
$baseurl = '/' . basename(dirname(dirname(dirname(dirname(__DIR__))))) . '/';
|
||||
|
||||
|
||||
$content = Rhymix\Framework\Filters\HTMLFilter::fixRelativeUrls('<img src="files/attach/foobar.jpg" alt="TEST" />');
|
||||
$this->assertEquals('<img src="https://www.rhymix.org' . $baseurl . 'files/attach/foobar.jpg" alt="TEST" />', $content);
|
||||
$content = Rhymix\Framework\Filters\HTMLFilter::fixRelativeUrls('<img src="./files/attach/foobar.jpg" editor_component="foobar" />');
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ class IpFilterTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('192.168.18.214', '192.168.16.211/22'));
|
||||
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.18.214', '192.168.17.255/23'));
|
||||
}
|
||||
|
||||
|
||||
public function testIPv6CIDR()
|
||||
{
|
||||
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('::1', '::1/128'));
|
||||
|
|
@ -24,7 +24,7 @@ class IpFilterTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('2400:cb00::1234', '2400:cb00::ffff:1234/96'));
|
||||
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('2405:8100::1234', '2400:cb00::ffff:1234/96'));
|
||||
}
|
||||
|
||||
|
||||
public function testIPv4Wildcard()
|
||||
{
|
||||
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.134.*'));
|
||||
|
|
@ -34,7 +34,7 @@ class IpFilterTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.172.*.*'));
|
||||
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.172.*'));
|
||||
}
|
||||
|
||||
|
||||
public function testIPv4Hyphen()
|
||||
{
|
||||
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.134.0-192.168.134.255'));
|
||||
|
|
@ -42,7 +42,7 @@ class IpFilterTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.134.242-192.168.244.7'));
|
||||
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::inRange('192.168.134.241', '192.168.100.255-192.168.133.19'));
|
||||
}
|
||||
|
||||
|
||||
public function testValidator()
|
||||
{
|
||||
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::validateRange('192.168.0.1'));
|
||||
|
|
@ -53,7 +53,7 @@ class IpFilterTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(Rhymix\Framework\Filters\IpFilter::validateRange('2400:cb00::/32'));
|
||||
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::validateRange('192.168.0.0~192.168.255.255'));
|
||||
}
|
||||
|
||||
|
||||
public function testLegacy()
|
||||
{
|
||||
$this->assertTrue(\IpFilter::filter(array('192.168.134.241'), '192.168.134.241'));
|
||||
|
|
@ -63,19 +63,19 @@ class IpFilterTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(\IpFilter::filter(array('192.168.*'), '192.168.134.241'));
|
||||
$this->assertFalse(\IpFilter::filter(array('127.0.0.1'), '192.168.134.241'));
|
||||
}
|
||||
|
||||
|
||||
public function testCloudFlareRealIP()
|
||||
{
|
||||
$_SERVER['HTTP_CF_CONNECTING_IP'] = '192.168.134.241';
|
||||
|
||||
|
||||
$_SERVER['REMOTE_ADDR'] = '192.168.10.1';
|
||||
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::getCloudFlareRealIP());
|
||||
$this->assertEquals('192.168.10.1', $_SERVER['REMOTE_ADDR']);
|
||||
|
||||
|
||||
$_SERVER['REMOTE_ADDR'] = '108.162.192.121';
|
||||
$this->assertEquals('192.168.134.241', Rhymix\Framework\Filters\IpFilter::getCloudFlareRealIP());
|
||||
$this->assertEquals('192.168.134.241', $_SERVER['REMOTE_ADDR']);
|
||||
|
||||
|
||||
unset($_SERVER['HTTP_CF_CONNECTING_IP']);
|
||||
$_SERVER['REMOTE_ADDR'] = '192.168.10.1';
|
||||
$this->assertFalse(Rhymix\Framework\Filters\IpFilter::getCloudFlareRealIP());
|
||||
|
|
|
|||
|
|
@ -7,19 +7,19 @@ class MediaFilterTest extends \Codeception\TestCase\Test
|
|||
// whitelist as array.
|
||||
$this->assertTrue(in_array('www.youtube.com/', Rhymix\Framework\Filters\MediaFilter::getWhitelist()));
|
||||
$this->assertFalse(in_array('random-website.com/', Rhymix\Framework\Filters\MediaFilter::getWhitelist()));
|
||||
|
||||
|
||||
// whitelist as regex.
|
||||
$this->assertTrue(strpos(Rhymix\Framework\Filters\MediaFilter::getWhitelistRegex(), '|www\.youtube\.com/') !== false);
|
||||
$this->assertFalse(strpos(Rhymix\Framework\Filters\MediaFilter::getWhitelistRegex(), 'www.youtube.com/') !== false);
|
||||
|
||||
|
||||
// Match individual URL against whitelist.
|
||||
$this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('https://www.youtube.com/v'));
|
||||
$this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('http://www-youtube.com/v'));
|
||||
|
||||
|
||||
// Match protocol-relative URLs.
|
||||
$this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('//www.youtube.com/v'));
|
||||
$this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('//www-youtube.com/v'));
|
||||
|
||||
|
||||
// Check deprecated methods for compatibility.
|
||||
$this->assertTrue(in_array('www.youtube.com/', Rhymix\Framework\Filters\MediaFilter::getIframeWhitelist()));
|
||||
$this->assertFalse(strpos(Rhymix\Framework\Filters\MediaFilter::getObjectWhitelistRegex(), 'www.youtube.com/') !== false);
|
||||
|
|
@ -28,14 +28,14 @@ class MediaFilterTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchIframeWhitelist('//www.youtube.com/v'));
|
||||
$this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchObjectWhitelist('//www-youtube.com/v'));
|
||||
}
|
||||
|
||||
|
||||
public function testAddPrefix()
|
||||
{
|
||||
$this->assertFalse(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('http://some.custom.website.com/video.mp4'));
|
||||
Rhymix\Framework\Filters\MediaFilter::addPrefix('*.custom.website.com/');
|
||||
$this->assertTrue(Rhymix\Framework\Filters\MediaFilter::matchWhitelist('http://some.custom.website.com/video.mp4'));
|
||||
}
|
||||
|
||||
|
||||
public function testRemoveEmbeddedMedia()
|
||||
{
|
||||
$tests = array(
|
||||
|
|
@ -45,7 +45,7 @@ class MediaFilterTest extends \Codeception\TestCase\Test
|
|||
'<div><img class="foo" editor_component="multimedia_link" /></div>' => '<div></div>',
|
||||
'<div><img editor_component="multimedia_link"></img></div>' => '<div></div>',
|
||||
);
|
||||
|
||||
|
||||
foreach ($tests as $from => $to)
|
||||
{
|
||||
$this->assertEquals($to, Rhymix\Framework\Filters\MediaFilter::removeEmbeddedMedia($from));
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ class ConfigHelperTest extends \Codeception\TestCase\Test
|
|||
'nosuch' => array('common:no.such.config', 'member:no.such.config.either', 'intval'),
|
||||
'single' => 'member:identifier',
|
||||
));
|
||||
|
||||
|
||||
$this->assertEquals(config('db.type'), $consolidated['dbtype']);
|
||||
$this->assertEquals(tobool($member_config->enable_join), $consolidated['member']);
|
||||
$this->assertEquals(0, $consolidated['nosuch']);
|
||||
|
|
|
|||
|
|
@ -7,38 +7,38 @@ class i18nTest extends \Codeception\TestCase\Test
|
|||
$sort_code_2 = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_CODE_2);
|
||||
$this->assertEquals('AD', array_first($sort_code_2)->iso_3166_1_alpha2);
|
||||
$this->assertEquals('AND', array_first_key($sort_code_2));
|
||||
|
||||
|
||||
$sort_code_3 = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_CODE_3);
|
||||
$this->assertEquals('ABW', array_first($sort_code_3)->iso_3166_1_alpha3);
|
||||
$this->assertEquals('ABW', array_first_key($sort_code_3));
|
||||
|
||||
|
||||
$sort_code_n = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_CODE_NUMERIC);
|
||||
$this->assertEquals('004', array_first($sort_code_n)->iso_3166_1_numeric);
|
||||
$this->assertEquals('AFG', array_first_key($sort_code_n));
|
||||
|
||||
|
||||
$sort_cctld = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_CCTLD);
|
||||
$this->assertEquals('zw', array_last($sort_cctld)->cctld);
|
||||
$this->assertEquals('ZWE', array_last_key($sort_cctld));
|
||||
|
||||
|
||||
$sort_english = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_NAME_ENGLISH);
|
||||
$this->assertEquals('Afghanistan', array_first($sort_english)->name_english);
|
||||
$this->assertEquals('AFG', array_first_key($sort_english));
|
||||
$this->assertEquals('Åland Islands', array_last($sort_english)->name_english);
|
||||
$this->assertEquals('ALA', array_last_key($sort_english));
|
||||
|
||||
|
||||
$sort_korean = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_NAME_KOREAN);
|
||||
$this->assertEquals('가나', array_first($sort_korean)->name_korean);
|
||||
$this->assertEquals('GHA', array_first_key($sort_korean));
|
||||
$this->assertEquals('홍콩', array_last($sort_korean)->name_korean);
|
||||
$this->assertEquals('HKG', array_last_key($sort_korean));
|
||||
|
||||
|
||||
$sort_native = Rhymix\Framework\i18n::listCountries(Rhymix\Framework\i18n::SORT_NAME_NATIVE);
|
||||
$this->assertEquals('Amerika Sāmoa', array_first($sort_native)->name_native);
|
||||
$this->assertEquals('대한민국', $sort_native['KOR']->name_korean);
|
||||
$this->assertEquals('United States of America', $sort_native['USA']->name_english);
|
||||
$this->assertEquals('nz', $sort_native['NZL']->cctld);
|
||||
}
|
||||
|
||||
|
||||
public function testGetCallingCodeByCountryCode()
|
||||
{
|
||||
$this->assertEquals('82', Rhymix\Framework\i18n::getCallingCodeByCountryCode('KOR'));
|
||||
|
|
@ -50,7 +50,7 @@ class i18nTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('44-1624', Rhymix\Framework\i18n::getCallingCodeByCountryCode('IMN'));
|
||||
$this->assertNull(Rhymix\Framework\i18n::getCallingCodeByCountryCode('XXX'));
|
||||
}
|
||||
|
||||
|
||||
public function testGetCountryCodeByCallingCode()
|
||||
{
|
||||
$this->assertEquals('KOR', Rhymix\Framework\i18n::getCountryCodeByCallingCode('82'));
|
||||
|
|
@ -58,7 +58,7 @@ class i18nTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('ASM', Rhymix\Framework\i18n::getCountryCodeByCallingCode('1-684'));
|
||||
$this->assertEquals('AS', Rhymix\Framework\i18n::getCountryCodeByCallingCode('1684', 2));
|
||||
}
|
||||
|
||||
|
||||
public function testFormatPhoneNumber()
|
||||
{
|
||||
$this->assertEquals('(+82) 010-2345-6789', Rhymix\Framework\i18n::formatPhoneNumber('01023456789', '82'));
|
||||
|
|
|
|||
|
|
@ -9,16 +9,16 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('selectTest1', $query->name);
|
||||
$this->assertEquals('SELECT', $query->type);
|
||||
$this->assertTrue($query->select_distinct);
|
||||
|
||||
|
||||
$this->assertTrue($query->tables['documents'] instanceof Rhymix\Framework\Parsers\DBQuery\Table);
|
||||
$this->assertNull($query->tables['documents']->alias);
|
||||
$this->assertEquals('documents', $query->tables['documents']->name);
|
||||
|
||||
|
||||
$this->assertEquals(1, count($query->columns));
|
||||
$this->assertEquals('*', $query->columns[0]->name);
|
||||
$this->assertTrue($query->columns[0]->is_expression);
|
||||
$this->assertTrue($query->columns[0]->is_wildcard);
|
||||
|
||||
|
||||
$this->assertEquals(2, count($query->conditions));
|
||||
$this->assertTrue($query->conditions[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition);
|
||||
$this->assertTrue($query->conditions[1] instanceof Rhymix\Framework\Parsers\DBQuery\ConditionGroup);
|
||||
|
|
@ -31,7 +31,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('PUBLIC', $query->conditions[1]->conditions[1]->default);
|
||||
$this->assertFalse($query->conditions[1]->conditions[1]->not_null);
|
||||
$this->assertEquals('OR', $query->conditions[1]->conditions[1]->pipe);
|
||||
|
||||
|
||||
$this->assertTrue($query->navigation instanceof Rhymix\Framework\Parsers\DBQuery\Navigation);
|
||||
$this->assertTrue($query->navigation->orderby[0] instanceof Rhymix\Framework\Parsers\DBQuery\OrderBy);
|
||||
$this->assertEquals('sort_index', $query->navigation->orderby[0]->var);
|
||||
|
|
@ -45,93 +45,93 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('page', $query->navigation->page->var);
|
||||
$this->assertEquals('1', $query->navigation->page->default);
|
||||
}
|
||||
|
||||
|
||||
public function testSimpleSelect()
|
||||
{
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectTest1.xml');
|
||||
$args = array('member_srl' => 1234, 'regdate_more' => '20200707120000', 'page' => 3, 'order_type' => 'asc');
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$params = $query->getQueryParams();
|
||||
|
||||
|
||||
$this->assertEquals('SELECT DISTINCT * FROM `rx_documents` AS `documents` ' .
|
||||
'WHERE `member_srl` IN (?) AND (`regdate` >= ? OR `status` = ?) ' .
|
||||
'ORDER BY `list_order` ASC LIMIT 40, 20', $sql);
|
||||
$this->assertEquals(['1234', '20200707120000', 'PUBLIC'], $params);
|
||||
|
||||
|
||||
$sql = $query->getQueryString('rx_', $args, [], 1);
|
||||
$params = $query->getQueryParams();
|
||||
|
||||
|
||||
$this->assertEquals('SELECT COUNT(*) AS `count` FROM (SELECT DISTINCT * FROM `rx_documents` AS `documents` ' .
|
||||
'WHERE `member_srl` IN (?) AND (`regdate` >= ? OR `status` = ?)) AS `subquery`', $sql);
|
||||
$this->assertEquals(['1234', '20200707120000', 'PUBLIC'], $params);
|
||||
|
||||
|
||||
unset($args['page']);
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$this->assertEquals('SELECT DISTINCT * FROM `rx_documents` AS `documents` ' .
|
||||
'WHERE `member_srl` IN (?) AND (`regdate` >= ? OR `status` = ?) ' .
|
||||
'ORDER BY `list_order` ASC LIMIT 20', $sql);
|
||||
|
||||
|
||||
$args['list_count'] = 0;
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$this->assertEquals('SELECT DISTINCT * FROM `rx_documents` AS `documents` ' .
|
||||
'WHERE `member_srl` IN (?) AND (`regdate` >= ? OR `status` = ?) ' .
|
||||
'ORDER BY `list_order` ASC', $sql);
|
||||
}
|
||||
|
||||
|
||||
public function testSelectWithExpressions()
|
||||
{
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectTest2.xml');
|
||||
$args = array('voted_count' => 20, 'date' => '20201021');
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$params = $query->getQueryParams();
|
||||
|
||||
|
||||
$this->assertEquals('documents', $query->tables['d']->name);
|
||||
$this->assertEquals('SELECT readed_count + trackback_count AS `count` ' .
|
||||
'FROM `rx_documents` AS `d` WHERE `voted_count` + `blamed_count` >= ? AND LEFT(`regdate`, 8) = ?', $sql);
|
||||
$this->assertEquals([20, '20201021'], $params);
|
||||
}
|
||||
|
||||
|
||||
public function testSelectWithSearch()
|
||||
{
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectTest3.xml');
|
||||
|
||||
|
||||
$args = array('s_content' => '"I love you" -"I hate you"');
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$params = $query->getQueryParams();
|
||||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE (`content` LIKE ? AND `content` NOT LIKE ?)', $sql);
|
||||
$this->assertEquals(['%I love you%', '%I hate you%'], $params);
|
||||
|
||||
|
||||
$args = array('s_content' => '(foo AND bar) -baz "Rhymix is the best"');
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$params = $query->getQueryParams();
|
||||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE ((`content` LIKE ? AND `content` LIKE ?) AND `content` NOT LIKE ? AND `content` LIKE ?)', $sql);
|
||||
$this->assertEquals(['%foo%', '%bar%', '%baz%', '%Rhymix is the best%'], $params);
|
||||
|
||||
|
||||
$args = array('s_content' => 'revenue +3.5% -"apos\'tro_phe"');
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$params = $query->getQueryParams();
|
||||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE (`content` LIKE ? AND `content` LIKE ? AND `content` NOT LIKE ?)', $sql);
|
||||
$this->assertEquals(['%revenue%', '%+3.5\\%%', '%apos\'tro\\_phe%'], $params);
|
||||
|
||||
|
||||
$args = array('s_content' => '(search keyword\\Z) -"-42"');
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$params = $query->getQueryParams();
|
||||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE ((`content` LIKE ? AND `content` LIKE ?) AND `content` NOT LIKE ?)', $sql);
|
||||
$this->assertEquals(['%search%', '%keyword\\\\Z%', '%-42%'], $params);
|
||||
|
||||
|
||||
$args = array('s_content' => '"한글" AND -"검색" (-키워드 OR 라이믹스)');
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$params = $query->getQueryParams();
|
||||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE (`content` LIKE ? AND `content` NOT LIKE ? AND (`content` NOT LIKE ? OR `content` LIKE ?))', $sql);
|
||||
$this->assertEquals(['%한글%', '%검색%', '%키워드%', '%라이믹스%'], $params);
|
||||
|
||||
|
||||
$args = array('s_content' => '검색 OR (키워드 AND -"라이믹스 유닛테스트")');
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$params = $query->getQueryParams();
|
||||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE (`content` LIKE ? OR (`content` LIKE ? AND `content` NOT LIKE ?))', $sql);
|
||||
$this->assertEquals(['%검색%', '%키워드%', '%라이믹스 유닛테스트%'], $params);
|
||||
}
|
||||
|
||||
|
||||
public function testJoin1()
|
||||
{
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectJoinTest1.xml');
|
||||
|
|
@ -141,7 +141,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue($query->tables['member'] instanceof Rhymix\Framework\Parsers\DBQuery\Table);
|
||||
$this->assertNull($query->tables['member']->join_type);
|
||||
$this->assertEmpty($query->tables['member']->join_conditions);
|
||||
|
||||
|
||||
$this->assertEquals(2, count($query->columns));
|
||||
$this->assertEquals('member.member_srl', $query->columns[0]->name);
|
||||
$this->assertFalse($query->columns[0]->is_expression);
|
||||
|
|
@ -150,7 +150,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('count', $query->columns[1]->alias);
|
||||
$this->assertTrue($query->columns[1]->is_expression);
|
||||
$this->assertFalse($query->columns[1]->is_wildcard);
|
||||
|
||||
|
||||
$this->assertEquals(4, count($query->conditions));
|
||||
$this->assertEquals('documents.member_srl', $query->conditions[0]->column);
|
||||
$this->assertEquals('member.member_srl', $query->conditions[0]->default);
|
||||
|
|
@ -159,49 +159,49 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('member.member_srl', $query->conditions[1]->default);
|
||||
$this->assertNull($query->conditions[1]->var);
|
||||
$this->assertEquals('AND', $query->conditions[1]->pipe);
|
||||
|
||||
|
||||
$this->assertTrue($query->groupby instanceof Rhymix\Framework\Parsers\DBQuery\GroupBy);
|
||||
$this->assertEquals('member.member_srl', $query->groupby->columns[0]);
|
||||
$this->assertEquals(1, count($query->groupby->having));
|
||||
$this->assertTrue($query->groupby->having[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition);
|
||||
$this->assertEquals('member.member_srl', $query->groupby->having[0]->column);
|
||||
$this->assertEquals('notequal', $query->groupby->having[0]->operation);
|
||||
|
||||
|
||||
$args = array(
|
||||
'document_srl_list' => [12, 34, 56], 'exclude_member_srl' => 4,
|
||||
'if_table' => true, 'if_column' => true, 'if_condition1' => true, 'if_groupby' => true,
|
||||
);
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$params = $query->getQueryParams();
|
||||
|
||||
|
||||
$this->assertEquals('SELECT `member`.`member_srl`, COUNT(*) AS `count` FROM `rx_documents` AS `documents`, `rx_member` AS `member` ' .
|
||||
'WHERE `documents`.`member_srl` = `member`.`member_srl` AND `documents`.`member_srl` = `member`.`member_srl` ' .
|
||||
'AND `documents`.`document_srl` IN (?, ?, ?) GROUP BY `member`.`member_srl` HAVING `member`.`member_srl` != ?', $sql);
|
||||
$this->assertEquals(['12', '34', '56', '4'], $params);
|
||||
|
||||
|
||||
$args = array(
|
||||
'document_srl_list' => [12, 34, 56], 'exclude_member_srl' => 4, 'exclude_document_srl_list' => '78,90',
|
||||
'if_table' => true, 'if_column' => true, 'if_condition2' => true,
|
||||
);
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$params = $query->getQueryParams();
|
||||
|
||||
|
||||
$this->assertEquals('SELECT `member`.`member_srl`, COUNT(*) AS `count` FROM `rx_documents` AS `documents`, `rx_member` AS `member` ' .
|
||||
'WHERE `documents`.`member_srl` = `member`.`member_srl` AND `documents`.`document_srl` IN (?, ?, ?) ' .
|
||||
'AND `documents`.`document_srl` NOT IN (?, ?)', $sql);
|
||||
$this->assertEquals(['12', '34', '56', '78', '90'], $params);
|
||||
|
||||
|
||||
$args = array(
|
||||
'document_srl_list' => [12, 34, 56], 'exclude_member_srl' => 4,
|
||||
);
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$params = $query->getQueryParams();
|
||||
|
||||
|
||||
$this->assertEquals('SELECT `member`.`member_srl` FROM `rx_documents` AS `documents` ' .
|
||||
'WHERE `documents`.`member_srl` = `member`.`member_srl` AND `documents`.`document_srl` IN (?, ?, ?)', $sql);
|
||||
$this->assertEquals(['12', '34', '56'], $params);
|
||||
}
|
||||
|
||||
|
||||
public function testJoin2()
|
||||
{
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectJoinTest2.xml');
|
||||
|
|
@ -215,7 +215,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('documents.member_srl', $query->tables['member']->join_conditions[0]->column);
|
||||
$this->assertEquals('member.member_srl', $query->tables['member']->join_conditions[0]->default);
|
||||
$this->assertNull($query->tables['member']->join_conditions[0]->var);
|
||||
|
||||
|
||||
$this->assertEquals(2, count($query->columns));
|
||||
$this->assertEquals('documents.*', $query->columns[0]->name);
|
||||
$this->assertTrue($query->columns[0]->is_expression);
|
||||
|
|
@ -224,17 +224,17 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('member_regdate', $query->columns[1]->alias);
|
||||
$this->assertFalse($query->columns[1]->is_expression);
|
||||
$this->assertFalse($query->columns[1]->is_wildcard);
|
||||
|
||||
|
||||
$args = array('document_srl_list' => [12, 34, 56]);
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$params = $query->getQueryParams();
|
||||
|
||||
|
||||
$this->assertEquals('SELECT `documents`.*, `member`.`regdate` AS `member_regdate` FROM `rx_documents` AS `documents` ' .
|
||||
'LEFT JOIN `rx_member` AS `member` ON `documents`.`member_srl` = `member`.`member_srl` ' .
|
||||
'WHERE `documents`.`document_srl` IN (?, ?, ?)', $sql);
|
||||
$this->assertEquals(['12', '34', '56'], $params);
|
||||
}
|
||||
|
||||
|
||||
public function testSubquery1()
|
||||
{
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectSubqueryTest1.xml');
|
||||
|
|
@ -248,16 +248,16 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(1, count($query->columns));
|
||||
$this->assertEquals('documents.member_srl', $query->conditions[0]->column);
|
||||
$this->assertEquals('m.member_srl', $query->conditions[0]->default);
|
||||
|
||||
|
||||
$sql = $query->getQueryString('rx_', []);
|
||||
$params = $query->getQueryParams();
|
||||
|
||||
|
||||
$this->assertEquals('SELECT `documents`.* FROM `rx_documents` AS `documents`, ' .
|
||||
'(SELECT `member_srl`, `nick_name` FROM `rx_member` AS `member`) AS `m` ' .
|
||||
'WHERE `documents`.`member_srl` = `m`.`member_srl`', $sql);
|
||||
$this->assertEquals([], $params);
|
||||
}
|
||||
|
||||
|
||||
public function testSubquery2()
|
||||
{
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectSubqueryTest2.xml');
|
||||
|
|
@ -277,25 +277,25 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue($query->columns[1]->columns[1]->is_wildcard);
|
||||
$this->assertTrue($query->columns[1]->columns[2]->is_expression);
|
||||
$this->assertFalse($query->columns[1]->columns[2]->is_wildcard);
|
||||
|
||||
|
||||
$sql = $query->getQueryString('rx_', []);
|
||||
$params = $query->getQueryParams();
|
||||
|
||||
|
||||
$this->assertEquals('SELECT `member`.*, (SELECT `documents`.`document_srl`, `documents`.*, COUNT(*) AS `count` FROM `rx_documents` AS `documents` ' .
|
||||
'WHERE `member`.`member_srl` = `documents`.`member_srl`) AS `document_count` ' .
|
||||
'FROM `rx_member` AS `member`', $sql);
|
||||
$this->assertEquals([], $params);
|
||||
|
||||
|
||||
// Test count-only query (#1575)
|
||||
$sql = $query->getQueryString('rx_', [], [], 1);
|
||||
$params = $query->getQueryParams();
|
||||
|
||||
|
||||
$this->assertEquals('SELECT COUNT(*) AS `count` FROM (SELECT 1, (SELECT `documents`.`document_srl`, 1, COUNT(*) AS `count` FROM `rx_documents` AS `documents` ' .
|
||||
'WHERE `member`.`member_srl` = `documents`.`member_srl`) AS `document_count` ' .
|
||||
'FROM `rx_member` AS `member`) AS `subquery`', $sql);
|
||||
$this->assertEquals([], $params);
|
||||
}
|
||||
|
||||
|
||||
public function testSubquery3()
|
||||
{
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectSubqueryTest3.xml');
|
||||
|
|
@ -311,16 +311,16 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue($query->conditions[1]->columns[0]->is_expression);
|
||||
$this->assertEquals('member.member_srl', $query->conditions[1]->conditions[0]->column);
|
||||
$this->assertEquals('OR', $query->conditions[1]->pipe);
|
||||
|
||||
|
||||
$sql = $query->getQueryString('rx_', ['is_admin' => 'Y']);
|
||||
$params = $query->getQueryParams();
|
||||
|
||||
|
||||
$this->assertEquals('SELECT * FROM `rx_member` AS `member` WHERE `is_admin` != ? OR `regdate` = ' .
|
||||
'(SELECT MAX(regdate) AS `max_regdate` FROM `rx_documents` AS `documents` ' .
|
||||
'WHERE `member`.`member_srl` = `documents`.`member_srl`)', $sql);
|
||||
$this->assertEquals(['Y'], $params);
|
||||
}
|
||||
|
||||
|
||||
public function testCountQuery()
|
||||
{
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectCountTest1.xml');
|
||||
|
|
@ -328,36 +328,36 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('SELECT COUNT(*) AS `count` FROM (SELECT 1 FROM `rx_documents` AS `documents`, `rx_member` AS `member` ' .
|
||||
'WHERE `documents`.`member_srl` = `member`.`member_srl` GROUP BY `member`.`member_srl` HAVING `member`.`member_srl` != ?) ' .
|
||||
'AS `subquery`', $sql);
|
||||
|
||||
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectCountTest2.xml');
|
||||
$sql = $query->getQueryString('rx_', ['document_srl_list' => [100, 110, 120]], [], true);
|
||||
$this->assertEquals('SELECT COUNT(*) AS `count` FROM (SELECT DISTINCT `module_srl` FROM `rx_documents` AS `documents` ' .
|
||||
'WHERE `document_srl` IN (?, ?, ?)) AS `subquery`', $sql);
|
||||
}
|
||||
|
||||
|
||||
public function testIndexHintQuery()
|
||||
{
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/indexHintTest1.xml');
|
||||
$sql = $query->getQueryString('rx_', ['module_srl' => 82]);
|
||||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` USE INDEX (`idx_module_srl`) ' .
|
||||
'WHERE `module_srl` = ? ORDER BY `list_order` DESC LIMIT 20', $sql);
|
||||
|
||||
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/indexHintTest2.xml');
|
||||
$sql = $query->getQueryString('rx_', ['module_srl' => 82]);
|
||||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` USE INDEX (`idx_module_list_order`) ' .
|
||||
'WHERE `module_srl` = ? ORDER BY `list_order` DESC LIMIT 20', $sql);
|
||||
|
||||
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/indexHintTest2.xml');
|
||||
$sql = $query->getQueryString('rx_', ['module_srl' => 82, 'index_hint1' => 'idx_regdate']);
|
||||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` FORCE INDEX (`idx_regdate`) USE INDEX (`idx_module_list_order`) ' .
|
||||
'WHERE `module_srl` = ? ORDER BY `list_order` DESC LIMIT 20', $sql);
|
||||
|
||||
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/indexHintTest2.xml');
|
||||
$sql = $query->getQueryString('rx_', ['module_srl' => 82, 'index_hint1' => 'idx_regdate', 'index_hint2' => 'idx_member_srl']);
|
||||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` FORCE INDEX (`idx_regdate`) USE INDEX (`idx_member_srl`) ' .
|
||||
'WHERE `module_srl` = ? ORDER BY `list_order` DESC LIMIT 20', $sql);
|
||||
}
|
||||
|
||||
|
||||
public function testInsertQuery()
|
||||
{
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/insertTest.xml');
|
||||
|
|
@ -375,11 +375,11 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('ipaddress()', $query->columns[2]->default);
|
||||
$this->assertTrue($query->update_duplicate);
|
||||
$this->assertNull($query->groupby);
|
||||
|
||||
|
||||
$args = array('document_srl' => 123, 'member_srl' => 456, 'point' => 7);
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$params = $query->getQueryParams();
|
||||
|
||||
|
||||
$this->assertEquals('INSERT INTO `rx_document_voted_log` SET `document_srl` = ?, `member_srl` = ?, `ipaddress` = ?, `regdate` = ?, `point` = ? ' .
|
||||
'ON DUPLICATE KEY UPDATE `document_srl` = ?, `member_srl` = ?, `ipaddress` = ?, `regdate` = ?, `point` = ?', $sql);
|
||||
$this->assertEquals(10, count($params));
|
||||
|
|
@ -388,7 +388,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('7', $params[4]);
|
||||
$this->assertEquals(array_slice($params, 0, 5), array_slice($params, 5, 5));
|
||||
}
|
||||
|
||||
|
||||
public function testUpdateQuery()
|
||||
{
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/updateTest.xml');
|
||||
|
|
@ -416,24 +416,24 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('document_srl', $query->conditions[0]->column);
|
||||
$this->assertNull($query->groupby);
|
||||
$this->assertNull($query->navigation);
|
||||
|
||||
|
||||
$args = array('document_srl' => 123, 'nick_name' => '닉네임', 'member_srl' => 456, 'voted_count' => 5);
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$params = $query->getQueryParams();
|
||||
|
||||
|
||||
$this->assertEquals('UPDATE `rx_documents`, `rx_comments` AS `c` SET `member_srl` = ?, `nick_name` = ?, `voted_count` = `voted_count` + ?, `regdate` = ?, `last_update` = ? WHERE `document_srl` = ?', $sql);
|
||||
$this->assertEquals(['456', '닉네임', '5'], array_slice($params, 0, 3));
|
||||
$this->assertRegexp('/^20[0-9]{2}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$/', $params[3]);
|
||||
$this->assertRegexp('/^[0-9]{2}.[0-9]{2}.[0-9]{2}$/', $params[4]);
|
||||
|
||||
|
||||
$args = array('document_srl' => 123, 'member_srl' => 456, 'voted_count' => 5, 'regdate' => 'foo', 'last_update' => 'bar');
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$params = $query->getQueryParams();
|
||||
|
||||
|
||||
$this->assertEquals('UPDATE `rx_documents`, `rx_comments` AS `c` SET `member_srl` = ?, `nick_name` = NULL, `voted_count` = `voted_count` + ?, `regdate` = ?, `last_update` = ? WHERE `document_srl` = ?', $sql);
|
||||
$this->assertEquals(['456', '5', 'foo', 'bar', '123'], $params);
|
||||
}
|
||||
|
||||
|
||||
public function testDeleteQuery()
|
||||
{
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/deleteTest.xml');
|
||||
|
|
@ -445,56 +445,56 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue($query->conditions[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition);
|
||||
$this->assertEquals('in', $query->conditions[0]->operation);
|
||||
$this->assertEquals('document_srl_list', $query->conditions[0]->var);
|
||||
|
||||
|
||||
$args = array('document_srl_list' => [12, 34, 56]);
|
||||
$sql = $query->getQueryString('rx_', $args);
|
||||
$params = $query->getQueryParams();
|
||||
|
||||
|
||||
$this->assertEquals('DELETE FROM `rx_documents` WHERE `document_srl` IN (?, ?, ?)', $sql);
|
||||
$this->assertEquals(['12', '34', '56'], $params);
|
||||
}
|
||||
|
||||
|
||||
public function testEmptyString()
|
||||
{
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/emptyStringTest1.xml');
|
||||
|
||||
|
||||
$sql = $query->getQueryString('rx_', array(
|
||||
'nick_name' => '',
|
||||
'document_srl' => 1234,
|
||||
));
|
||||
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql);
|
||||
$this->assertEquals(['', 1234], $query->getQueryParams());
|
||||
|
||||
|
||||
$sql = $query->getQueryString('rx_', array(
|
||||
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString,
|
||||
'document_srl' => 1234,
|
||||
));
|
||||
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = \'\' WHERE `document_srl` = ?', $sql);
|
||||
$this->assertEquals([1234], $query->getQueryParams());
|
||||
|
||||
|
||||
$sql = $query->getQueryString('rx_', array(
|
||||
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString,
|
||||
'document_srl' => '',
|
||||
));
|
||||
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = \'\'', $sql);
|
||||
$this->assertEquals([], $query->getQueryParams());
|
||||
|
||||
|
||||
$sql = $query->getQueryString('rx_', array(
|
||||
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString,
|
||||
'document_srl' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString,
|
||||
));
|
||||
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = \'\' WHERE `document_srl` = \'\'', $sql);
|
||||
$this->assertEquals([], $query->getQueryParams());
|
||||
|
||||
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/emptyStringTest2.xml');
|
||||
|
||||
|
||||
$sql = $query->getQueryString('rx_', array(
|
||||
'category_srl' => 77,
|
||||
'nick_name' => '',
|
||||
));
|
||||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE `category_srl` = ?', $sql);
|
||||
$this->assertEquals([77], $query->getQueryParams());
|
||||
|
||||
|
||||
$sql = $query->getQueryString('rx_', array(
|
||||
'category_srl' => 88,
|
||||
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\EmptyString,
|
||||
|
|
@ -502,11 +502,11 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE `category_srl` = ? AND `nick_name` = \'\'', $sql);
|
||||
$this->assertEquals([88], $query->getQueryParams());
|
||||
}
|
||||
|
||||
|
||||
public function testNullValue()
|
||||
{
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/nullValueTest1.xml');
|
||||
|
||||
|
||||
$sql = $query->getQueryString('rx_', array(
|
||||
'user_name' => null,
|
||||
'nick_name' => 'TEST',
|
||||
|
|
@ -514,7 +514,7 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
));
|
||||
$this->assertEquals('UPDATE `rx_documents` SET `nick_name` = ? WHERE `document_srl` = ?', $sql);
|
||||
$this->assertEquals(['TEST', 1234], $query->getQueryParams());
|
||||
|
||||
|
||||
$sql = $query->getQueryString('rx_', array(
|
||||
'user_name' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
|
||||
'nick_name' => 'TEST',
|
||||
|
|
@ -522,30 +522,30 @@ class DBQueryParserTest extends \Codeception\TestCase\Test
|
|||
));
|
||||
$this->assertEquals('UPDATE `rx_documents` SET `user_name` = NULL, `nick_name` = ? WHERE `document_srl` = ?', $sql);
|
||||
$this->assertEquals(['TEST', 1234], $query->getQueryParams());
|
||||
|
||||
|
||||
$this->tester->expectThrowable('Exception', function() use($query) {
|
||||
$query->getQueryString('rx_', array(
|
||||
'nick_name' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
|
||||
'document_srl' => 1234,
|
||||
));
|
||||
});
|
||||
|
||||
|
||||
$this->tester->expectThrowable('Exception', function() use($query) {
|
||||
$query->getQueryString('rx_', array(
|
||||
'nick_name' => null,
|
||||
'document_srl' => 1234,
|
||||
));
|
||||
});
|
||||
|
||||
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/nullValueTest2.xml');
|
||||
|
||||
|
||||
$sql = $query->getQueryString('rx_', array(
|
||||
'member_srl' => null,
|
||||
'module_srl' => 456,
|
||||
));
|
||||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE `module_srl` = ?', $sql);
|
||||
$this->assertEquals([456], $query->getQueryParams());
|
||||
|
||||
|
||||
$sql = $query->getQueryString('rx_', array(
|
||||
'member_srl' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
|
||||
'module_srl' => new \Rhymix\Framework\Parsers\DBQuery\NullValue,
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ class DBTableParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('none', $table->columns['custom_date']->xetype);
|
||||
$this->assertEquals('char', $table->columns['regdate']->type);
|
||||
$this->assertEquals('date', $table->columns['regdate']->xetype);
|
||||
|
||||
|
||||
$this->assertEquals(9, count($table->indexes));
|
||||
$this->assertEquals(['module_srl' => 0, 'document_srl' => 0], $table->indexes['idx_module_document_srl']->columns);
|
||||
$this->assertEquals(['status' => 6], $table->indexes['idx_status']->columns);
|
||||
|
|
@ -32,7 +32,7 @@ class DBTableParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('SPATIAL', $table->indexes['spatial_geometry']->type);
|
||||
$this->assertEquals('FULLTEXT', $table->indexes['fulltext_description']->type);
|
||||
$this->assertEquals('WITH PARSER ngram', $table->indexes['fulltext_description']->options);
|
||||
|
||||
|
||||
$this->assertEquals(2, count($table->constraints));
|
||||
$this->assertEquals('FOREIGN KEY', $table->constraints[0]->type);
|
||||
$this->assertEquals('module_srl', $table->constraints[0]->column);
|
||||
|
|
@ -42,7 +42,7 @@ class DBTableParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('CHECK', $table->constraints[1]->type);
|
||||
$this->assertEquals('list_order < 0', $table->constraints[1]->condition);
|
||||
}
|
||||
|
||||
|
||||
public function testGetCreateQuery()
|
||||
{
|
||||
$table = Rhymix\Framework\Parsers\DBTableParser::loadXML(\RX_BASEDIR . 'tests/_data/dbtable/example.xml');
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
class LangParserTest extends \Codeception\TestCase\Test
|
||||
{
|
||||
protected $_dir = 'tests/_data/lang';
|
||||
|
||||
|
||||
public function _before()
|
||||
{
|
||||
$files = Rhymix\Framework\Storage::readDirectory(\RX_BASEDIR . $this->_dir);
|
||||
|
|
@ -15,7 +15,7 @@ class LangParserTest extends \Codeception\TestCase\Test
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function _after()
|
||||
{
|
||||
$files = Rhymix\Framework\Storage::readDirectory(\RX_BASEDIR . $this->_dir);
|
||||
|
|
@ -27,7 +27,7 @@ class LangParserTest extends \Codeception\TestCase\Test
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function testConvertDirectory()
|
||||
{
|
||||
Rhymix\Framework\Parsers\LangParser::convertDirectory(\RX_BASEDIR . $this->_dir, ['ko', 'en']);
|
||||
|
|
@ -35,20 +35,20 @@ class LangParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(file_exists(\RX_BASEDIR . $this->_dir . '/en.php'));
|
||||
$this->assertFalse(file_exists(\RX_BASEDIR . $this->_dir . '/ja.php'));
|
||||
$this->assertFalse(file_exists(\RX_BASEDIR . $this->_dir . '/fr.php'));
|
||||
|
||||
|
||||
$lang = new stdClass;
|
||||
include \RX_BASEDIR . $this->_dir . '/ko.php';
|
||||
$this->assertEquals('테스트 언어', $lang->testlang);
|
||||
$this->assertEquals('<p>HTML<br>내용</p>', $lang->testhtml);
|
||||
$this->assertEquals(['foo' => '푸', 'bar' => '바'], $lang->testarray);
|
||||
|
||||
|
||||
$lang = new stdClass;
|
||||
include \RX_BASEDIR . $this->_dir . '/en.php';
|
||||
$this->assertEquals('Test Lang', $lang->testlang);
|
||||
$this->assertEquals('<p>HTML<br>Content</p>', $lang->testhtml);
|
||||
$this->assertEquals(['foo' => 'FOO', 'bar' => 'BAR'], $lang->testarray);
|
||||
}
|
||||
|
||||
|
||||
public function testCompileXMLtoPHP()
|
||||
{
|
||||
$in = \RX_BASEDIR . $this->_dir . '/lang.xml';
|
||||
|
|
@ -58,7 +58,7 @@ class LangParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals($out, $result);
|
||||
$this->assertTrue(file_exists($result));
|
||||
$this->assertFalse(file_exists($noout));
|
||||
|
||||
|
||||
$lang = new stdClass;
|
||||
include \RX_BASEDIR . $this->_dir . '/ja.php';
|
||||
$this->assertEquals('テスト言語', $lang->testlang);
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ class ModuleActionParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('dispTestView', $info->default_index_act);
|
||||
$this->assertEquals('dispTestAdminIndex', $info->admin_index_act);
|
||||
$this->assertEquals('', $info->setup_index_act);
|
||||
|
||||
|
||||
// Actions
|
||||
$this->assertEquals('view', $info->action->dispTestView->type);
|
||||
$this->assertEquals('guest', $info->action->dispTestView->grant);
|
||||
|
|
@ -34,12 +34,12 @@ class ModuleActionParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('true', $info->action->dispTestAdminIndex->standalone);
|
||||
$this->assertEquals('GET|POST', $info->action->procTestAdminSubmitData->method);
|
||||
$this->assertEquals([], $info->action->procTestAdminSubmitData->route);
|
||||
|
||||
|
||||
// Standalone attribute
|
||||
$this->assertEquals('auto', $info->action->dispTestStandalone1->standalone);
|
||||
$this->assertEquals('false', $info->action->dispTestStandalone2->standalone);
|
||||
$this->assertEquals('true', $info->action->dispTestStandalone3->standalone);
|
||||
|
||||
|
||||
// Routes
|
||||
$this->assertEquals(7, count($info->route->GET));
|
||||
$this->assertEquals('dispTestView', $info->route->GET['#^(?P<document_srl>[0-9]+)$#u']);
|
||||
|
|
@ -47,19 +47,19 @@ class ModuleActionParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('dispTestView', $info->route->GET['#^(?P<document_srl>[0-9]+)/tag/(?P<tag>[a-zA-Z0-9_]+)$#u']);
|
||||
$this->assertEquals('dispTestWrite', $info->route->GET['#^write$#u']);
|
||||
$this->assertEquals(3, count($info->route->POST));
|
||||
|
||||
|
||||
// Grant
|
||||
$this->assertEquals(['view'], array_keys(get_object_vars($info->grant)));
|
||||
$this->assertContains($info->grant->view->title, ['View', '열람']);
|
||||
$this->assertEquals('guest', $info->grant->view->default);
|
||||
|
||||
|
||||
// Menu
|
||||
$this->assertEquals(['test'], array_keys(get_object_vars($info->menu)));
|
||||
$this->assertContains($info->menu->test->title, ['Test Menu', '테스트 메뉴']);
|
||||
$this->assertEquals('dispTestAdminIndex', $info->menu->test->index);
|
||||
$this->assertEquals(['dispTestAdminIndex'], $info->menu->test->acts);
|
||||
$this->assertEquals('all', $info->menu->test->type);
|
||||
|
||||
|
||||
// Error handlers
|
||||
$this->assertTrue(is_array($info->error_handlers));
|
||||
$this->assertEquals('dispTestErrorHandler', $info->error_handlers[404]);
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ class ModuleInfoParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('service', $info->category);
|
||||
$this->assertEquals('GPLv2', $info->license);
|
||||
$this->assertEquals('https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html', $info->license_link);
|
||||
|
||||
|
||||
// Author array
|
||||
$this->assertTrue(is_array($info->author));
|
||||
$this->assertEquals('Rhymix 개발자', $info->author[0]->name);
|
||||
|
|
@ -25,14 +25,14 @@ class ModuleInfoParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('다른 개발자', $info->author[1]->name);
|
||||
$this->assertEquals('other.developer@rhymix.org', $info->author[1]->email_address);
|
||||
$this->assertEquals('', $info->author[1]->homepage);
|
||||
|
||||
|
||||
// Change language
|
||||
Context::setLangType('en');
|
||||
$info = Rhymix\Framework\Parsers\ModuleInfoParser::loadXML(\RX_BASEDIR . 'tests/_data/module/info.xml');
|
||||
$this->assertEquals('Test Module', $info->title);
|
||||
$this->assertEquals('This module is for unit testing.', $info->description);
|
||||
$this->assertEquals('Rhymix Developer', $info->author[0]->name);
|
||||
|
||||
|
||||
// Index actions (from module.xml)
|
||||
$this->assertEquals('dispTestView', $info->default_index_act);
|
||||
$this->assertEquals('dispTestAdminIndex', $info->admin_index_act);
|
||||
|
|
|
|||
|
|
@ -15,17 +15,17 @@ class FunctionsTest extends \Codeception\TestCase\Test
|
|||
$array = array('foo' => 'xe', 'bar' => 'rhymix', 'key' => array('value1', 'value2', array('bar' => 'value3')), 'last' => 'bears');
|
||||
$flattened1 = array('foo' => 'xe', 'bar' => 'value3', 0 => 'value1', 1 => 'value2', 'last' => 'bears');
|
||||
$flattened2 = array(0 => 'xe', 1 => 'rhymix', 2 => 'value1', 3 => 'value2', 4 => 'value3', 5 => 'bears');
|
||||
|
||||
|
||||
$this->assertEquals('foo', array_first_key($array));
|
||||
$this->assertEquals('xe', array_first($array));
|
||||
|
||||
|
||||
$this->assertEquals('last', array_last_key($array));
|
||||
$this->assertEquals('bears', array_last($array));
|
||||
|
||||
|
||||
$this->assertEquals($flattened1, array_flatten($array));
|
||||
$this->assertEquals($flattened2, array_flatten($array, false));
|
||||
}
|
||||
|
||||
|
||||
public function testArrayEscape()
|
||||
{
|
||||
$this->assertEquals(array('foo<' => 'bar>', 'baz"baz' => array('fuzz&amp;bazz' => '<rhymix>')), array_escape(array('foo<' => 'bar>', 'baz"baz' => array('fuzz&bazz' => '<rhymix>'))));
|
||||
|
|
@ -33,49 +33,49 @@ class FunctionsTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(array('object' => (object)array('foo>' => 'bar<', 'baz"' => '&amp;')), array_escape(array('object' => (object)array('foo>' => 'bar<', 'baz"' => '&'))));
|
||||
$this->assertEquals(array('object' => (object)array('foo>' => array('bar<' => array('&')))), array_escape(array('object' => (object)array('foo>' => array('bar<' => array('&')))), false));
|
||||
}
|
||||
|
||||
|
||||
public function testClassBasename()
|
||||
{
|
||||
$this->assertEquals('FunctionsTest', class_basename($this));
|
||||
$this->assertEquals('FunctionsTest', class_basename(get_class($this)));
|
||||
}
|
||||
|
||||
|
||||
public function testEscapeFunctions()
|
||||
{
|
||||
$this->assertEquals('<foo>&amp;</foo>', escape('<foo>&</foo>'));
|
||||
$this->assertEquals('<foo>&</foo>', escape('<foo>&</foo>', false));
|
||||
$this->assertEquals('<foo>invalid'. "\xEF\xBF\xBD" . 'unicode</foo>', escape('<foo>invalid' . "\xE4\xA8" . 'unicode</foo>'));
|
||||
$this->assertEquals('<foo>invalid'. "\xEF\xBF\xBD" . 'unicode</foo>', escape('<foo>invalid' . "\xE4\xA8" . 'unicode</foo>', false));
|
||||
|
||||
|
||||
$this->assertEquals('$user_lang->userLang1234567890', escape('$user_lang->userLang1234567890', true, false));
|
||||
$this->assertEquals('$user_lang->userLang1234567890', escape('$user_lang->userLang1234567890', true, true));
|
||||
|
||||
|
||||
$this->assertEquals('expressionalertXSS', escape_css('expression:alert("XSS")'));
|
||||
$this->assertEquals('#123456', escape_css('#123456'));
|
||||
|
||||
|
||||
$this->assertEquals('hello\\\\world', escape_js('hello\\world'));
|
||||
$this->assertEquals('\u003Cbr \/\u003E', escape_js('<br />'));
|
||||
|
||||
|
||||
$this->assertEquals('hello\\\\world', escape_sqstr('hello\\world'));
|
||||
$this->assertEquals('hello"world\\\'quotes', escape_sqstr('hello"world\'quotes'));
|
||||
|
||||
|
||||
$this->assertEquals('hello\\\\\\$world in \\"quotes\\"', escape_dqstr('hello\\$world in "quotes"'));
|
||||
$this->assertEquals('\\${array[\'key\']}', escape_dqstr('${array[\'key\']}'));
|
||||
}
|
||||
|
||||
|
||||
public function testExplodeWithEscape()
|
||||
{
|
||||
$this->assertEquals(array('foo', 'bar'), explode_with_escape(',', 'foo,bar'));
|
||||
$this->assertEquals(array('foo', 'bar'), explode_with_escape(',', 'foo , bar'));
|
||||
$this->assertEquals(array('foo', 'bar', 'baz,rhymix'), explode_with_escape(',', 'foo,bar,baz,rhymix', 3));
|
||||
$this->assertEquals(array('foo', 'bar', 'baz , rhymix'), explode_with_escape(',', 'foo,bar,baz , rhymix', 3));
|
||||
|
||||
|
||||
$this->assertEquals(array('foo', 'bar,baz'), explode_with_escape(',', 'foo,bar\\,baz'));
|
||||
$this->assertEquals(array('foo', 'bar\\', 'baz'), explode_with_escape(',', 'foo,bar\\ , baz'));
|
||||
$this->assertEquals(array('foo', 'bar,baz', 'rhymix'), explode_with_escape(',', 'foo,bar\\,baz,rhymix'));
|
||||
$this->assertEquals(array('foo', 'bar,baz'), explode_with_escape(',', 'foo,bar!,baz', null, '!'));
|
||||
}
|
||||
|
||||
|
||||
public function testStartsEndsContains()
|
||||
{
|
||||
$this->assertTrue(starts_with('foo', 'foobar'));
|
||||
|
|
@ -84,14 +84,14 @@ class FunctionsTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(starts_with('bar', 'foobar'));
|
||||
$this->assertFalse(starts_with('foobar', 'foo'));
|
||||
$this->assertTrue(starts_with('', 'foobar'));
|
||||
|
||||
|
||||
$this->assertTrue(ends_with('bar', 'foobar'));
|
||||
$this->assertFalse(ends_with('BAR', 'foobar'));
|
||||
$this->assertTrue(ends_with('BAR', 'foobar', false));
|
||||
$this->assertFalse(ends_with('foo', 'foobar'));
|
||||
$this->assertFalse(ends_with('foobar', 'bar'));
|
||||
$this->assertTrue(ends_with('', 'foobar'));
|
||||
|
||||
|
||||
$this->assertTrue(contains('foo', 'foo bar baz rhymix rocks'));
|
||||
$this->assertFalse(contains('barbaz', 'foo bar baz rhymix rocks'));
|
||||
$this->assertTrue(contains('RHYMIX', 'foo bar baz rhymix rocks', false));
|
||||
|
|
@ -99,7 +99,7 @@ class FunctionsTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(contains('foobar', 'bar'));
|
||||
$this->assertTrue(contains('', 'foobar'));
|
||||
}
|
||||
|
||||
|
||||
public function testRangeFunctions()
|
||||
{
|
||||
$this->assertTrue(is_between(5, 1, 10));
|
||||
|
|
@ -108,18 +108,18 @@ class FunctionsTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(is_between(7, 1, 10, true));
|
||||
$this->assertFalse(is_between(1, 1, 10, true));
|
||||
$this->assertFalse(is_between(10, 1, 10, true));
|
||||
|
||||
|
||||
$this->assertEquals(10, force_range(14, 1, 10));
|
||||
$this->assertEquals(3, force_range(3, 1, 10));
|
||||
$this->assertEquals(1, force_range(-4, 1, 10));
|
||||
}
|
||||
|
||||
|
||||
public function testUrlSafeBase64()
|
||||
{
|
||||
$this->assertEquals('Umh5bWl4IF5-', base64_encode_urlsafe('Rhymix ^~'));
|
||||
$this->assertEquals('Rhymix ^~', base64_decode_urlsafe('Umh5bWl4IF5-'));
|
||||
}
|
||||
|
||||
|
||||
public function testNumberShorten()
|
||||
{
|
||||
$this->assertEquals('1', number_shorten(1));
|
||||
|
|
@ -150,20 +150,20 @@ class FunctionsTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('1.00000T', number_shorten(1000000000000, 6));
|
||||
$this->assertEquals('10.0000T', number_shorten(10000000000000, 6));
|
||||
}
|
||||
|
||||
|
||||
public function testHex2Rgb2Hex()
|
||||
{
|
||||
$this->assertEquals(array(128, 128, 128), hex2rgb('808080'));
|
||||
$this->assertEquals(array(60, 71, 244), hex2rgb('#3c47f4'));
|
||||
$this->assertEquals(array(119, 119, 119), hex2rgb('#777'));
|
||||
$this->assertEquals(array(51, 102, 153), hex2rgb('369'));
|
||||
|
||||
|
||||
$this->assertEquals('#808080', rgb2hex(array(128, 128, 128)));
|
||||
$this->assertEquals('#3c47f4', rgb2hex(array(60, 71, 244)));
|
||||
$this->assertEquals('777777', rgb2hex(array(119, 119, 119), false));
|
||||
$this->assertEquals('#000000', rgb2hex(array()));
|
||||
}
|
||||
|
||||
|
||||
public function testToBool()
|
||||
{
|
||||
$this->assertTrue(tobool('Y'));
|
||||
|
|
@ -180,7 +180,7 @@ class FunctionsTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(tobool(true));
|
||||
$this->assertTrue(tobool(array(1, 2, 3)));
|
||||
$this->assertTrue(tobool(new stdClass));
|
||||
|
||||
|
||||
$this->assertFalse(tobool('N'));
|
||||
$this->assertFalse(tobool('no'));
|
||||
$this->assertFalse(tobool('none'));
|
||||
|
|
@ -196,7 +196,7 @@ class FunctionsTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(tobool(null));
|
||||
$this->assertFalse(tobool(array()));
|
||||
}
|
||||
|
||||
|
||||
public function testCountObj()
|
||||
{
|
||||
$this->assertEquals(3, countobj(array('foo' => 1, 'bar' => 2, 'baz' => 3)));
|
||||
|
|
@ -205,7 +205,7 @@ class FunctionsTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(42, countobj(new CountableTest));
|
||||
$this->assertEquals(0, countobj(new stdClass));
|
||||
}
|
||||
|
||||
|
||||
public function testUTF8Functions()
|
||||
{
|
||||
$this->assertTrue(utf8_check('Hello, world!'));
|
||||
|
|
@ -214,22 +214,22 @@ class FunctionsTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(utf8_check(iconv('UTF-8', 'EUC-KR', 'One CMS to rule them all...')));
|
||||
$this->assertFalse(utf8_check(iconv('UTF-8', 'EUC-KR', '라이믹스')));
|
||||
$this->assertFalse(utf8_check(chr(129) . chr(214) . chr(181) . chr(73) . chr(97)));
|
||||
|
||||
|
||||
$this->assertEquals('Hello', utf8_clean("\xEF\xBB\xBF" . 'Hello' . "\xBC\xBC"));
|
||||
$this->assertEquals('Hello', utf8_clean('Hello‮ㅤ' . "\xE3\x85\xA4\xE2\x80\xAE"));
|
||||
$this->assertEquals('Hello' . "\xC3\xA9", utf8_clean('Hello' . "e\xCC\x81"));
|
||||
$this->assertEquals('Hello' . "\xCD\x9D\xCD\x9D\xCD\x9D", utf8_clean('Hello' . "\xCD\x9D\xCD\x9D\xCD\x9D\xCD\x9D\xCD\x9D"));
|
||||
|
||||
|
||||
$this->assertEquals('Emoticon: 😁', utf8_mbencode("Emoticon: \xf0\x9f\x98\x81"));
|
||||
$this->assertEquals('Emoticon: 😜', utf8_mbencode("Emoticon: \xf0\x9f\x98\x9c"));
|
||||
$this->assertEquals('한글은 인코딩하지 않음', utf8_mbencode('한글은 인코딩하지 않음'));
|
||||
|
||||
|
||||
$this->assertEquals("Weird spaces are in this string", utf8_normalize_spaces("Weird\x20spaces\xe2\x80\x80are\xe2\x80\x84in\xe2\x80\x86\xe2\x80\x8bthis\x0astring"));
|
||||
$this->assertEquals("Weird spaces are in this\nstring", utf8_normalize_spaces("Weird\x20spaces\xe2\x80\x80are\xe2\x80\x84in\xe2\x80\x86\xe2\x80\x8bthis\x0astring", true));
|
||||
$this->assertEquals("Trimmed", utf8_trim("\x20\xe2\x80\x80Trimmed\xe2\x80\x84\xe2\x80\x86\xe2\x80\x8b"));
|
||||
$this->assertEquals("Trimmed", utf8_trim("\x20\xe2\x80\x80Trimmed\x0a\x0c\x07\x09"));
|
||||
}
|
||||
|
||||
|
||||
public function testIsHTMLContent()
|
||||
{
|
||||
$this->assertTrue(is_html_content("<p>Hello World</p>"));
|
||||
|
|
@ -247,7 +247,7 @@ class FunctionsTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(is_html_content("<p> tag is unbalanced here.\nAnother line!<br />\nAnd a dangling line..."));
|
||||
$this->assertFalse(is_html_content("Looks like a broken editor<br />\nthat produced\nthis kind of\nstring!</div>"));
|
||||
}
|
||||
|
||||
|
||||
public function testIsEmptyHTMLContent()
|
||||
{
|
||||
$this->assertTrue(is_empty_html_content('<p> <br><br></p>'));
|
||||
|
|
@ -259,7 +259,7 @@ class FunctionsTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(is_empty_html_content('<p><video src="rickroll.webm" /></p>'));
|
||||
$this->assertFalse(is_empty_html_content('<p><object></object></p>'));
|
||||
}
|
||||
|
||||
|
||||
public function testPolyfillFunctions()
|
||||
{
|
||||
$this->assertTrue(function_exists('is_countable'));
|
||||
|
|
@ -267,19 +267,19 @@ class FunctionsTest extends \Codeception\TestCase\Test
|
|||
$this->assertFalse(is_countable('hello world'));
|
||||
$this->assertTrue(is_countable(new CountableTest));
|
||||
$this->assertFalse(is_countable(new stdClass));
|
||||
|
||||
|
||||
$this->assertTrue(function_exists('str_starts_with'));
|
||||
$this->assertTrue(str_starts_with('foobar', 'foo'));
|
||||
$this->assertFalse(str_starts_with('Foobar', 'FOO'));
|
||||
$this->assertFalse(str_starts_with('', 'bar'));
|
||||
$this->assertTrue(str_starts_with('foobar', ''));
|
||||
|
||||
|
||||
$this->assertTrue(function_exists('str_ends_with'));
|
||||
$this->assertTrue(str_ends_with('foobar', 'bar'));
|
||||
$this->assertFalse(str_ends_with('Foobar', 'BAR'));
|
||||
$this->assertFalse(str_ends_with('', 'bar'));
|
||||
$this->assertTrue(str_ends_with('foobar', ''));
|
||||
|
||||
|
||||
$this->assertTrue(function_exists('str_contains'));
|
||||
$this->assertTrue(str_contains('foobarbazz', 'bar'));
|
||||
$this->assertFalse(str_contains('foobarbazz', 'BAR'));
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ class LegacyTest extends \Codeception\TestCase\Test
|
|||
{
|
||||
public function testGetModule()
|
||||
{
|
||||
$this->assertTrue(getModule('board', 'controller') instanceof BoardController);
|
||||
$this->assertTrue(getModule('board', 'controller') instanceof BoardController);
|
||||
$this->assertTrue(getModule('board', 'model') instanceof BoardModel);
|
||||
$this->assertTrue(getModule('board', 'view', 'admin') instanceof BoardAdminView);
|
||||
$this->assertTrue(getModule('board') instanceof BoardView);
|
||||
|
|
@ -19,25 +19,25 @@ class LegacyTest extends \Codeception\TestCase\Test
|
|||
$this->assertTrue(getWAP('board') instanceof BoardWap);
|
||||
$this->assertTrue(getClass('board') instanceof Board);
|
||||
}
|
||||
|
||||
|
||||
public function testGetNextSequence()
|
||||
{
|
||||
if (!DB::getInstance()->isConnected())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$this->assertGreaterThan(0, $sequence1 = getNextSequence());
|
||||
$this->assertGreaterThan($sequence1, $sequence2 = getNextSequence());
|
||||
|
||||
|
||||
$this->assertTrue(checkUserSequence($sequence1));
|
||||
$this->assertTrue(checkUserSequence($sequence2));
|
||||
|
||||
|
||||
$this->assertFalse(checkUserSequence(-1));
|
||||
setUserSequence(-1);
|
||||
$this->assertTrue(checkUserSequence(-1));
|
||||
}
|
||||
|
||||
|
||||
public function testGetURL()
|
||||
{
|
||||
/**
|
||||
|
|
@ -55,19 +55,19 @@ class LegacyTest extends \Codeception\TestCase\Test
|
|||
* - getRequestUriByServerEnviroment()
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
public function testIsSiteID()
|
||||
{
|
||||
$this->assertTrue(isSiteID('rhymix_RHYMIX_1234'));
|
||||
$this->assertFalse(isSiteID('www.rhymix.org'));
|
||||
}
|
||||
|
||||
|
||||
public function testCutStr()
|
||||
{
|
||||
$this->assertEquals('안녕하세요? 라이믹스...', cut_str('안녕하세요? 라이믹스입니다. 제목이 너무 길어서 잘립니다.', 20));
|
||||
$this->assertEquals('Hello? This is Rhymix...', cut_str('Hello? This is Rhymix. This title is very long.', 20));
|
||||
}
|
||||
|
||||
|
||||
public function testTimeFunctions()
|
||||
{
|
||||
$this->assertEquals(0, get_time_zone_offset('00:00'));
|
||||
|
|
@ -76,11 +76,11 @@ class LegacyTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(32400, get_time_zone_offset('0900'));
|
||||
$this->assertEquals(-18000, get_time_zone_offset('-05:00'));
|
||||
$this->assertEquals(-18000, get_time_zone_offset('-0500'));
|
||||
|
||||
|
||||
$this->assertEquals('Jan', getMonthName(1));
|
||||
$this->assertEquals('Sep', getMonthName(9, true));
|
||||
$this->assertEquals('September', getMonthName(9, false));
|
||||
|
||||
|
||||
/**
|
||||
* The following functions are tested in DateTimeTest:
|
||||
* - zgap()
|
||||
|
|
@ -91,41 +91,41 @@ class LegacyTest extends \Codeception\TestCase\Test
|
|||
* - getTimeGap()
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
public function testGetEncodedEmailAddress()
|
||||
{
|
||||
$this->assertNotEquals('devops@rhymix.org', getEncodeEmailAddress('devops@rhymix.org'));
|
||||
$this->assertStringContainsString('&#X', getEncodeEmailAddress('devops@rhymix.org'));
|
||||
}
|
||||
|
||||
|
||||
public function testGetMicrotime()
|
||||
{
|
||||
$microtime1 = microtime(true);
|
||||
$microtime2 = getMicroTime();
|
||||
$microtime3 = microtime(true);
|
||||
|
||||
|
||||
$this->assertEquals('double', gettype($microtime2));
|
||||
$this->assertGreaterThanOrEqual($microtime1, $microtime2);
|
||||
$this->assertGreaterThanOrEqual($microtime2, $microtime3);
|
||||
}
|
||||
|
||||
|
||||
public function testDelObjectVars()
|
||||
{
|
||||
$target = (object)array('foo' => 1, 'bar' => 2, 'baz' => 3, 'rhymix' => 4);
|
||||
$delete = (object)array('bar' => 5, 'baz' => 6);
|
||||
$result = delObjectVars($target, $delete);
|
||||
|
||||
|
||||
// Check if the keys were deleted from the result.
|
||||
$this->assertTrue(isset($result->foo));
|
||||
$this->assertFalse(isset($result->bar));
|
||||
$this->assertFalse(isset($result->baz));
|
||||
$this->assertTrue(isset($result->rhymix));
|
||||
|
||||
|
||||
// Check if the keys are intact in the original target.
|
||||
$this->assertTrue(isset($target->bar));
|
||||
$this->assertTrue(isset($target->baz));
|
||||
}
|
||||
|
||||
|
||||
public function testGetDestroyXeVars()
|
||||
{
|
||||
// Test array. (Keys should be intact in the original target.)
|
||||
|
|
@ -133,14 +133,14 @@ class LegacyTest extends \Codeception\TestCase\Test
|
|||
$result = getDestroyXeVars($target);
|
||||
$this->assertFalse(isset($result['xe_validator_id']));
|
||||
$this->assertTrue(isset($target['xe_validator_id']));
|
||||
|
||||
|
||||
// Test object. (Keys should be deleted from the original target.)
|
||||
$target = (object)array('foo' => 1, 'bar' => 2, 'xe_validator_id' => 3);
|
||||
$result = getDestroyXeVars($target);
|
||||
$this->assertFalse(isset($result->xe_validator_id));
|
||||
$this->assertFalse(isset($target->xe_validator_id));
|
||||
}
|
||||
|
||||
|
||||
public function testGetNumberingPath()
|
||||
{
|
||||
$this->assertEquals('001/', getNumberingPath(1));
|
||||
|
|
@ -153,44 +153,44 @@ class LegacyTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('678/345/012/', getNumberingPath(12345678));
|
||||
$this->assertEquals('789/456/123/', getNumberingPath(123456789));
|
||||
}
|
||||
|
||||
|
||||
public function testMysqlPre4HashPassword()
|
||||
{
|
||||
$this->assertEquals('5d2e19393cc5ef67', mysql_pre4_hash_password('password'));
|
||||
$this->assertEquals('25a4fb474e17c19a', mysql_pre4_hash_password('pass\'#word'));
|
||||
}
|
||||
|
||||
|
||||
public function testJsonEncode2()
|
||||
{
|
||||
$data = array('foo' => 1, 'bar' => 2, 'baz' => 3, 'rhymix' => 4);
|
||||
$this->assertEquals(json_encode($data), json_encode2($data));
|
||||
}
|
||||
|
||||
|
||||
public function TestIsCrawler()
|
||||
{
|
||||
$original_user_agent = $_SERVER['HTTP_USER_AGENT'];
|
||||
|
||||
|
||||
// Test automatic detection from User-Agent string.
|
||||
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0';
|
||||
$this->assertFalse(isCrawler());
|
||||
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)';
|
||||
$this->assertTrue(isCrawler());
|
||||
|
||||
|
||||
// Test manual detection.
|
||||
$this->assertTrue(isCrawler('Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)'));
|
||||
$this->assertTrue(isCrawler('Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)'));
|
||||
$this->assertFalse(isCrawler('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36'));
|
||||
$this->assertFalse(isCrawler('Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25'));
|
||||
|
||||
|
||||
$_SERVER['HTTP_USER_AGENT'] = $original_user_agent;
|
||||
}
|
||||
|
||||
|
||||
public function testMiscUTF8Functions()
|
||||
{
|
||||
$this->assertEquals('<img>', url_decode('%3Cimg%3E'));
|
||||
$this->assertEquals('한글 % English', utf8RawUrlDecode('%uD55C%uAE00%20%25%20English'));
|
||||
$this->assertEquals('뷁', _code2utf(48577));
|
||||
|
||||
|
||||
$this->assertTrue(detectUTF8('라이믹스'));
|
||||
$this->assertTrue(detectUTF8(urlencode('라이믹스')));
|
||||
$this->assertTrue(detectUTF8('%87%a9%43%cd%ef', false, false));
|
||||
|
|
@ -200,7 +200,7 @@ class LegacyTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals(mb_convert_encoding('라이믹스', 'UTF-8', 'CP949'), detectUTF8('라이믹스', true));
|
||||
$this->assertEquals('라이믹스', detectUTF8(iconv('UTF-8', 'EUC-KR', '라이믹스'), true));
|
||||
}
|
||||
|
||||
|
||||
public function testMiscSecurityFunctions()
|
||||
{
|
||||
/**
|
||||
|
|
@ -209,14 +209,14 @@ class LegacyTest extends \Codeception\TestCase\Test
|
|||
* - checkCSRF()
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
public function testRecurciveExposureCheck()
|
||||
{
|
||||
/**
|
||||
* TODO
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
public function testChangeValueInUrl()
|
||||
{
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue