diff --git a/tests/Account/AccountManagerTest.php b/tests/Account/AccountManagerTest.php new file mode 100644 index 000000000..feef578c3 --- /dev/null +++ b/tests/Account/AccountManagerTest.php @@ -0,0 +1,64 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Account; + +use phpOMS\Account\Account; +use phpOMS\Account\AccountManager; +use phpOMS\DataStorage\Database\DataMapperAbstract; +use phpOMS\DataStorage\Database\DatabasePool; +use phpOMS\DataStorage\Session\HttpSession; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class AccountManagerTest extends \PHPUnit\Framework\TestCase +{ + + public function testAttributes() { + $manager = new AccountManager($GLOBALS['httpSession']); + self::assertInstanceOf('\phpOMS\Account\AccountManager', $manager); + + /* Testing members */ + self::assertObjectHasAttribute('accounts', $manager); + } + + public function testDefault() { + $manager = new AccountManager($GLOBALS['httpSession']); + + self::assertEquals(0, $manager->count()); + self::assertInstanceOf('\phpOMS\Account\Account', $manager->get(0)); + self::assertInstanceOf('\phpOMS\Account\NullAccount', $manager->get(-1)); + } + + public function testSetGet() + { + $manager = new AccountManager($GLOBALS['httpSession']); + $account = new Account(3); + + $account->generatePassword('abcd'); + + $added = $manager->add($account); + self::assertTrue($added); + self::assertEquals($account, $manager->get($account->getId())); + self::assertEquals(1, $manager->count()); + + $added = $manager->add($account); + self::assertFalse($added); + + self::assertTrue($manager->remove($account->getId())); + self::assertFalse($manager->remove(-1)); + self::assertEquals(0, $manager->count()); + + } +} diff --git a/tests/Account/AccountStatusTest.php b/tests/Account/AccountStatusTest.php new file mode 100644 index 000000000..967a6ffab --- /dev/null +++ b/tests/Account/AccountStatusTest.php @@ -0,0 +1,31 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Account; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Account\AccountStatus; + +class AccountStatusTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(4, count(AccountStatus::getConstants())); + self::assertEquals(1, AccountStatus::ACTIVE); + self::assertEquals(2, AccountStatus::INACTIVE); + self::assertEquals(3, AccountStatus::TIMEOUT); + self::assertEquals(4, AccountStatus::BANNED); + } +} diff --git a/tests/Account/AccountTest.php b/tests/Account/AccountTest.php new file mode 100644 index 000000000..40b54bd12 --- /dev/null +++ b/tests/Account/AccountTest.php @@ -0,0 +1,195 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Account; + +use phpOMS\Account\Account; +use phpOMS\Account\Group; +use phpOMS\Account\AccountStatus; +use phpOMS\Account\AccountType; +use phpOMS\Account\PermissionAbstract; +use phpOMS\Account\PermissionType; +use phpOMS\Localization\L11nManager; +use phpOMS\Localization\Localization; +use phpOMS\Localization\NullLocalization; +use phpOMS\Log\FileLogger; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class AccountTest extends \PHPUnit\Framework\TestCase +{ + protected $l11nManager = null; + + protected function setUp() + { + $this->l11nManager = new L11nManager(); + } + + public function testAttributes() + { + $account = new Account(); + self::assertInstanceOf('\phpOMS\Account\Account', $account); + + /* Testing members */ + self::assertObjectHasAttribute('id', $account); + self::assertObjectHasAttribute('name1', $account); + self::assertObjectHasAttribute('name2', $account); + self::assertObjectHasAttribute('name3', $account); + self::assertObjectHasAttribute('email', $account); + self::assertObjectHasAttribute('origin', $account); + self::assertObjectHasAttribute('login', $account); + self::assertObjectHasAttribute('lastActive', $account); + self::assertObjectHasAttribute('createdAt', $account); + self::assertObjectHasAttribute('permissions', $account); + self::assertObjectHasAttribute('groups', $account); + self::assertObjectHasAttribute('type', $account); + self::assertObjectHasAttribute('status', $account); + self::assertObjectHasAttribute('l11n', $account); + } + + public function testDefault() + { + $account = new Account(); + + /* Testing default values */ + self::assertTrue(is_int($account->getId())); + self::assertEquals(0, $account->getId()); + + self::assertInstanceOf('\phpOMS\Localization\NullLocalization', $account->getL11n()); + + self::assertEquals([], $account->getGroups()); + + self::assertTrue(is_string($account->getName())); + self::assertEquals('', $account->getName()); + + self::assertTrue(is_string($account->getName1())); + self::assertEquals('', $account->getName1()); + + self::assertTrue(is_string($account->getName2())); + self::assertEquals('', $account->getName2()); + + self::assertTrue(is_string($account->getName3())); + self::assertEquals('', $account->getName3()); + + self::assertTrue(is_string($account->getEmail())); + self::assertEquals('', $account->getEmail()); + + self::assertTrue(is_int($account->getStatus())); + self::assertEquals(AccountStatus::INACTIVE, $account->getStatus()); + + self::assertTrue(is_int($account->getType())); + self::assertEquals(AccountType::USER, $account->getType()); + + self::assertEquals([], $account->getPermissions()); + + self::assertInstanceOf('\DateTime', $account->getLastActive()); + self::assertInstanceOf('\DateTime', $account->getCreatedAt()); + + $array = $account->toArray(); + self::assertTrue(is_array($array)); + self::assertGreaterThan(0, count($array)); + self::assertEquals(json_encode($array), $account->__toString()); + self::assertEquals($array, $account->jsonSerialize()); + } + + public function testSetGet() + { + $account = new Account(); + + /* Just test if no error happens */ + $account->generatePassword('abcd'); + + $account->addGroup(new Group()); + self::assertEquals(1, count($account->getGroups())); + + $account->setName('Login'); + self::assertEquals('Login', $account->getName()); + + $account->setName1('Donald'); + self::assertEquals('Donald', $account->getName1()); + + $account->setName2('Fauntleroy'); + self::assertEquals('Fauntleroy', $account->getName2()); + + $account->setName3('Duck'); + self::assertEquals('Duck', $account->getName3()); + + $account->setEmail('d.duck@duckburg.com'); + self::assertEquals('d.duck@duckburg.com', $account->getEmail()); + + $account->setName('Login'); + self::assertEquals('Login', $account->getName()); + + $account->setStatus(AccountStatus::ACTIVE); + self::assertEquals(AccountStatus::ACTIVE, $account->getStatus()); + + $account->setType(AccountType::GROUP); + self::assertEquals(AccountType::GROUP, $account->getType()); + + $account->addPermission(new class extends PermissionAbstract {}); + self::assertEquals(1, count($account->getPermissions())); + + $account->setPermissions([ + new class extends PermissionAbstract {}, + new class extends PermissionAbstract {}, + ]); + self::assertEquals(2, count($account->getPermissions())); + + $account->addPermissions([ + new class extends PermissionAbstract {}, + new class extends PermissionAbstract {}, + ]); + self::assertEquals(4, count($account->getPermissions())); + + self::assertFalse($account->hasPermission(PermissionType::READ, 1, 'a', 1, 1, 1, 1)); + self::assertTrue($account->hasPermission(PermissionType::NONE)); + + $account->setL11n(new NullLocalization()); + self::assertInstanceOf('\phpOMS\Localization\NullLocalization', $account->getL11n()); + $account->setL11n(new Localization()); + self::assertInstanceOf('\phpOMS\Localization\Localization', $account->getL11n()); + self::assertNotInstanceOf('\phpOMS\Localization\NullLocalization', $account->getL11n()); + + $datetime = new \DateTime('now'); + $account->updateLastActive(); + self::assertEquals($datetime->format('Y-m-d h:i:s'), $account->getLastActive()->format('Y-m-d h:i:s')); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testEmailException() + { + $account = new Account(); + $account->setEmail('d.duck!@#%@duckburg'); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testStatusException() + { + $account = new Account(); + $account->setStatus(99); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testTypeException() + { + $account = new Account(); + $account->setType(99); + } +} diff --git a/tests/Account/AccountTypeTest.php b/tests/Account/AccountTypeTest.php new file mode 100644 index 000000000..c57805b20 --- /dev/null +++ b/tests/Account/AccountTypeTest.php @@ -0,0 +1,29 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Account; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Account\AccountType; + +class AccountTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(2, count(AccountType::getConstants())); + self::assertEquals(0, AccountType::USER); + self::assertEquals(1, AccountType::GROUP); + } +} diff --git a/tests/Account/GroupStatusTest.php b/tests/Account/GroupStatusTest.php new file mode 100644 index 000000000..6b80e1e15 --- /dev/null +++ b/tests/Account/GroupStatusTest.php @@ -0,0 +1,30 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Account; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Account\GroupStatus; + +class GroupStatusTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(3, count(GroupStatus::getConstants())); + self::assertEquals(1, GroupStatus::ACTIVE); + self::assertEquals(2, GroupStatus::INACTIVE); + self::assertEquals(4, GroupStatus::HIDDEN); + } +} diff --git a/tests/Account/GroupTest.php b/tests/Account/GroupTest.php new file mode 100644 index 000000000..6d296e8d6 --- /dev/null +++ b/tests/Account/GroupTest.php @@ -0,0 +1,74 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Account; + +use phpOMS\Account\Group; +use phpOMS\Account\GroupStatus; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class GroupTest extends \PHPUnit\Framework\TestCase +{ + public function testAttributes() { + $group = new Group(); + self::assertInstanceOf('\phpOMS\Account\Group', $group); + + /* Testing members */ + self::assertObjectHasAttribute('id', $group); + self::assertObjectHasAttribute('name', $group); + self::assertObjectHasAttribute('description', $group); + self::assertObjectHasAttribute('members', $group); + self::assertObjectHasAttribute('parents', $group); + self::assertObjectHasAttribute('permissions', $group); + self::assertObjectHasAttribute('status', $group); + } + + public function testDefault() { + $group = new Group(); + + /* Testing default values */ + self::assertTrue(is_int($group->getId())); + self::assertEquals(0, $group->getId()); + + self::assertTrue(is_string($group->getName())); + self::assertEquals('', $group->getName()); + + self::assertTrue(is_int($group->getStatus())); + self::assertEquals(GroupStatus::INACTIVE, $group->getStatus()); + + self::assertTrue(is_string($group->getDescription())); + self::assertEquals('', $group->getDescription()); + + $array = $group->toArray(); + self::assertTrue(is_array($array)); + self::assertGreaterThan(0, count($array)); + self::assertEquals(json_encode($array), $group->__toString()); + self::assertEquals($array, $group->jsonSerialize()); + } + + public function testSetGet() + { + $group = new Group(); + + $group->setName('Duck'); + self::assertEquals('Duck', $group->getName()); + + $group->setDescription('Animal'); + self::assertEquals('Animal', $group->getDescription()); + + $group->setStatus(GroupStatus::ACTIVE); + self::assertEquals(GroupStatus::ACTIVE, $group->getStatus()); + } +} diff --git a/tests/Account/NullAccountTest.php b/tests/Account/NullAccountTest.php new file mode 100644 index 000000000..33c779c7a --- /dev/null +++ b/tests/Account/NullAccountTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Account; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Account\NullAccount; + +class NullAccountTest extends \PHPUnit\Framework\TestCase +{ + public function testNull() + { + self::assertInstanceOf('\phpOMS\Account\Account', new NullAccount()); + } +} diff --git a/tests/Account/PermissionAbstractTest.php b/tests/Account/PermissionAbstractTest.php new file mode 100644 index 000000000..89b6f880d --- /dev/null +++ b/tests/Account/PermissionAbstractTest.php @@ -0,0 +1,72 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Account; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Account\PermissionAbstract; +use phpOMS\Account\PermissionType; + +class PermissionAbstractTest extends \PHPUnit\Framework\TestCase +{ + public function testAbstractDefault() + { + $perm = new class extends PermissionAbstract {}; + + self::assertEquals(0, $perm->getId()); + self::assertEquals(null, $perm->getUnit()); + self::assertEquals(null, $perm->getApp()); + self::assertEquals(null, $perm->getModule()); + self::assertEquals(null, $perm->getFrom()); + self::assertEquals(null, $perm->getType()); + self::assertEquals(null, $perm->getElement()); + self::assertEquals(null, $perm->getComponent()); + self::assertEquals(PermissionType::NONE, $perm->getPermission()); + } + + public function testAbstractGetSet() + { + $perm = new class extends PermissionAbstract {}; + + $perm->setUnit(1); + self::assertEquals(1, $perm->getUnit()); + + $perm->setApp('Test'); + self::assertEquals('Test', $perm->getApp()); + + $perm->setModule(2); + self::assertEquals(2, $perm->getModule()); + + $perm->setFrom(3); + self::assertEquals(3, $perm->getFrom()); + + $perm->setType(4); + self::assertEquals(4, $perm->getType()); + + $perm->setElement(5); + self::assertEquals(5, $perm->getElement()); + + $perm->setComponent(6); + self::assertEquals(6, $perm->getComponent()); + + $perm->setPermission(PermissionType::READ); + self::assertEquals(PermissionType::READ, $perm->getPermission()); + + $perm->addPermission(PermissionType::CREATE); + self::assertTrue($perm->hasPermission(PermissionType::CREATE)); + self::assertTrue($perm->hasPermission(PermissionType::READ)); + self::assertFalse($perm->hasPermission(PermissionType::MODIFY)); + } +} diff --git a/tests/Account/PermissionTypeTest.php b/tests/Account/PermissionTypeTest.php new file mode 100644 index 000000000..42dbfa586 --- /dev/null +++ b/tests/Account/PermissionTypeTest.php @@ -0,0 +1,34 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS; + +require_once __DIR__ . '/../../../phpOMS/Autoloader.php'; + +use phpOMS\ApplicationAbstract; +use phpOMS\UnhandledHandler; + +class ApplicationAbstractTest extends \PHPUnit\Framework\TestCase +{ + public function testGetSet() + { + $obj = new class extends ApplicationAbstract {}; + + $obj->appName = 'Test'; + self::assertEquals('Test', $obj->appName); + + $obj->appName = 'ABC'; + self::assertEquals('Test', $obj->appName); + } +} diff --git a/tests/Asset/AssetManagerTest.php b/tests/Asset/AssetManagerTest.php new file mode 100644 index 000000000..cc0f386a1 --- /dev/null +++ b/tests/Asset/AssetManagerTest.php @@ -0,0 +1,79 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Account; + +use phpOMS\Asset\AssetManager; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class AssetManagerTest extends \PHPUnit\Framework\TestCase +{ + public function testAttributes() + { + $manager = new AssetManager(); + self::assertInstanceOf('\phpOMS\Asset\AssetManager', $manager); + + /* Testing members */ + self::assertObjectHasAttribute('assets', $manager); + } + + public function testDefault() + { + $manager = new AssetManager(); + + /* Testing default values */ + self::assertNull($manager->get('myAsset')); + self::assertEquals(0, $manager->count()); + } + + public function testSetGet() + { + $manager = new AssetManager(); + + /* Test set/get/count */ + $manager->set('first', 'FirstUri'); + $set = $manager->set('myAsset', 'AssetUri'); + self::assertTrue($set); + self::assertEquals('AssetUri', $manager->get('myAsset')); + self::assertEquals(2, $manager->count()); + + $set = $manager->set('myAsset', 'AssetUri2', false); + self::assertFalse($set); + self::assertEquals('AssetUri', $manager->get('myAsset')); + self::assertEquals(2, $manager->count()); + + $set = $manager->set('myAsset', 'AssetUri2'); + self::assertTrue($set); + self::assertEquals('AssetUri2', $manager->get('myAsset')); + self::assertEquals(2, $manager->count()); + + $set = $manager->set('myAsset', 'AssetUri3', true); + self::assertTrue($set); + self::assertEquals('AssetUri3', $manager->get('myAsset')); + self::assertEquals(2, $manager->count()); + + /* Test remove */ + $rem = $manager->remove('myAsset'); + self::assertTrue($rem); + self::assertEquals(1, $manager->count()); + + self::assertNull($manager->get('myAsset')); + + $rem = $manager->remove('myAsset'); + self::assertFalse($rem); + self::assertEquals(1, $manager->count()); + + } +} diff --git a/tests/Asset/AssetTypeTest.php b/tests/Asset/AssetTypeTest.php new file mode 100644 index 000000000..1fc4a1e11 --- /dev/null +++ b/tests/Asset/AssetTypeTest.php @@ -0,0 +1,30 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Asset; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Asset\AssetType; + +class AssetTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(3, count(AssetType::getConstants())); + self::assertEquals(0, AssetType::CSS); + self::assertEquals(1, AssetType::JS); + self::assertEquals(2, AssetType::JSLATE); + } +} diff --git a/tests/Auth/AuthTest.php b/tests/Auth/AuthTest.php new file mode 100644 index 000000000..b30f12305 --- /dev/null +++ b/tests/Auth/AuthTest.php @@ -0,0 +1,34 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Account; + +use phpOMS\Auth\Auth; +use phpOMS\Auth\LoginReturnType; +use phpOMS\DataStorage\Database\DatabasePool; +use phpOMS\DataStorage\Session\ConsoleSession; +use phpOMS\DataStorage\Session\SocketSession; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class AuthTest extends \PHPUnit\Framework\TestCase +{ + public function testWithHttpSession() + { + self::assertEquals(0, Auth::authenticate($GLOBALS['httpSession'])); + + Auth::logout($GLOBALS['httpSession']); + self::assertEquals(0, Auth::authenticate($GLOBALS['httpSession'])); + } +} diff --git a/tests/Auth/LoginReturnTypeTest.php b/tests/Auth/LoginReturnTypeTest.php new file mode 100644 index 000000000..117d09b1c --- /dev/null +++ b/tests/Auth/LoginReturnTypeTest.php @@ -0,0 +1,37 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Auth; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Auth\LoginReturnType; + +class LoginReturnTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(10, count(LoginReturnType::getConstants())); + self::assertEquals(0, LoginReturnType::OK); + self::assertEquals(-1, LoginReturnType::FAILURE); + self::assertEquals(-2, LoginReturnType::WRONG_PASSWORD); + self::assertEquals(-3, LoginReturnType::WRONG_USERNAME); + self::assertEquals(-4, LoginReturnType::WRONG_PERMISSION); + self::assertEquals(-5, LoginReturnType::NOT_ACTIVATED); + self::assertEquals(-6, LoginReturnType::WRONG_INPUT_EXCEEDED); + self::assertEquals(-7, LoginReturnType::TIMEOUTED); + self::assertEquals(-8, LoginReturnType::BANNED); + self::assertEquals(-9, LoginReturnType::INACTIVE); + } +} diff --git a/tests/AutoloadExceptionTest.php b/tests/AutoloadExceptionTest.php new file mode 100644 index 000000000..512468309 --- /dev/null +++ b/tests/AutoloadExceptionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS; + +require_once __DIR__ . '/../../../phpOMS/Autoloader.php'; + +use phpOMS\AutoloadException; + +class AutoloadExceptionTest extends \PHPUnit\Framework\TestCase +{ + public function testException() + { + self::assertInstanceOf(\RuntimeException::class, new AutoloadException('')); + } +} diff --git a/tests/Autoloader.php b/tests/Autoloader.php new file mode 100644 index 000000000..b04e004da --- /dev/null +++ b/tests/Autoloader.php @@ -0,0 +1,75 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS; + +require_once __DIR__ . '/../../../phpOMS/Autoloader.php'; +use phpOMS\Autoloader; + +class AutoloaderTest extends \PHPUnit\Framework\TestCase +{ + public function testAutoloader() + { + self::assertTrue(Autoloader::exists('\phpOMS\Autoloader')); + self::assertFalse(Autoloader::exists('\Does\Not\Exist')); + } +} diff --git a/tests/Bootstrap.php b/tests/Bootstrap.php new file mode 100644 index 000000000..64b464c3a --- /dev/null +++ b/tests/Bootstrap.php @@ -0,0 +1,30 @@ +exec('DROP DATABASE IF EXISTS ' . $CONFIG['db']['core']['masters']['admin']['database']); +$db->exec('CREATE DATABASE IF NOT EXISTS ' . $CONFIG['db']['core']['masters']['admin']['database']); +$db = null; + +$httpSession = new HttpSession(); +$GLOBALS['session'] = $httpSession; + +$GLOBALS['dbpool'] = new DatabasePool(); +$GLOBALS['dbpool']->create('admin', $CONFIG['db']['core']['masters']['admin']); +$GLOBALS['dbpool']->create('select', $CONFIG['db']['core']['masters']['select']); + +DataMapperAbstract::setConnection($GLOBALS['dbpool']->get()); diff --git a/tests/Business/Finance/DepreciationTest.php b/tests/Business/Finance/DepreciationTest.php new file mode 100644 index 000000000..a91f76d84 --- /dev/null +++ b/tests/Business/Finance/DepreciationTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Depreciation; + +class DepreciationTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Business/Finance/FinanceFormulasTest.php b/tests/Business/Finance/FinanceFormulasTest.php new file mode 100644 index 000000000..f5fab5ec5 --- /dev/null +++ b/tests/Business/Finance/FinanceFormulasTest.php @@ -0,0 +1,257 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance; + +use phpOMS\Business\Finance\FinanceFormulas; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +class FinanceFormulasTest extends \PHPUnit\Framework\TestCase +{ + public function testAnnualPercentageYield() + { + $expected = 0.06168; + + $r = 0.06; + $n = 12; + $apy = FinanceFormulas::getAnnualPercentageYield($r, $n); + + self::assertEquals(round($expected, 5), round($apy, 5)); + self::assertEquals(round($r, 2), FinanceFormulas::getStateAnnualInterestRateOfAPY($apy, $n)); + } + + public function testFutureValueOfAnnuity() + { + $expected = 5204.04; + + $P = 1000.00; + $r = 0.02; + $n = 5; + $fva = FinanceFormulas::getFutureValueOfAnnuity($P, $r, $n); + + self::assertEquals(round($expected, 2), round($fva, 2)); + self::assertEquals($n, FinanceFormulas::getNumberOfPeriodsOfFVA($fva, $P, $r)); + self::assertEquals(round($P, 2), round(FinanceFormulas::getPeriodicPaymentOfFVA($fva, $r, $n), 2)); + } + + public function testFutureValueOfAnnuityContinuousCompounding() + { + $expected = 12336.42; + + $cf = 1000.00; + $r = 0.005; + $t = 12; + $fvacc = FinanceFormulas::getFutureValueOfAnnuityConinuousCompounding($cf, $r, $t); + + self::assertEquals(round($expected, 2), round($fvacc, 2)); + self::assertEquals(round($cf, 2), round(FinanceFormulas::getCashFlowOfFVACC($fvacc, $r, $t), 2)); + self::assertEquals($t, FinanceFormulas::getTimeOfFVACC($fvacc, $cf, $r)); + } + + public function testAnnuityPaymentPV() + { + $expected = 212.16; + + $pv = 1000.00; + $r = 0.02; + $n = 5; + $p = FinanceFormulas::getAnnuityPaymentPV($pv, $r, $n); + + self::assertEquals(round($expected, 2), round($p, 2)); + self::assertEquals($n, FinanceFormulas::getNumberOfAPPV($p, $pv, $r)); + self::assertEquals(round($pv, 2), round(FinanceFormulas::getPresentValueOfAPPV($p, $r, $n), 2)); + } + + public function testAnnuityPaymentFV() + { + $expected = 192.16; + + $fv = 1000.00; + $r = 0.02; + $n = 5; + $p = FinanceFormulas::getAnnuityPaymentFV($fv, $r, $n); + + self::assertEquals(round($expected, 2), round($p, 2)); + self::assertEquals($n, FinanceFormulas::getNumberOfAPFV($p, $fv, $r)); + self::assertEquals(round($fv, 2), round(FinanceFormulas::getFutureValueOfAPFV($p, $r, $n), 2)); + } + + public function testAnnutiyPaymentFactorPV() + { + $expected = 0.21216; + + $r = 0.02; + $n = 5; + $p = FinanceFormulas::getAnnutiyPaymentFactorPV($r, $n); + + self::assertEquals(round($expected, 5), round($p, 5)); + self::assertEquals($n, FinanceFormulas::getNumberOfAPFPV($p, $r)); + } + + public function testPresentValueOfAnnuity() + { + $expected = 4713.46; + + $P = 1000.00; + $r = 0.02; + $n = 5; + $pva = FinanceFormulas::getPresentValueOfAnnuity($P, $r, $n); + + self::assertEquals(round($expected, 2), round($pva, 2)); + self::assertEquals($n, FinanceFormulas::getNumberOfPeriodsOfPVA($pva, $P, $r)); + self::assertEquals(round($P, 2), round(FinanceFormulas::getPeriodicPaymentOfPVA($pva, $r, $n), 2)); + } + + public function testPresentValueAnnuityFactor() + { + $expected = 4.7135; + + $r = 0.02; + $n = 5; + $p = FinanceFormulas::getPresentValueAnnuityFactor($r, $n); + + self::assertEquals(round($expected, 4), round($p, 4)); + self::assertEquals($n, FinanceFormulas::getPeriodsOfPVAF($p, $r)); + } + + public function testPresentValueOfAnnuityDue() + { + $expected = 454.60; + + $P = 100.00; + $r = 0.05; + $n = 5; + + $PV = FinanceFormulas::getPresentValueOfAnnuityDue($P, $r, $n); + + self::assertEquals(round($expected, 2), round($PV, 2)); + self::assertEquals(round($P, 2), FinanceFormulas::getPeriodicPaymentOfPVAD($PV, $r, $n)); + self::assertEquals($n, FinanceFormulas::getPeriodsOfPVAD($PV, $P, $r)); + } + + public function testFutureValueOfAnnuityDue() + { + $expected = 580.19; + + $P = 100.00; + $r = 0.05; + $n = 5; + + $FV = FinanceFormulas::getFutureValueOfAnnuityDue($P, $r, $n); + + self::assertEquals(round($expected, 2), round($FV, 2)); + self::assertEquals(round($P, 2), FinanceFormulas::getPeriodicPaymentOfFVAD($FV, $r, $n)); + self::assertEquals($n, FinanceFormulas::getPeriodsOfFVAD($FV, $P, $r)); + } + + public function testRatios() + { + self::assertEquals(300 / 400, FinanceFormulas::getRelativeMarketShareByShare(300, 400)); + self::assertEquals(300 / 400, FinanceFormulas::getRelativeMarketShareBySales(300, 400)); + + self::assertEquals(3 / 2, FinanceFormulas::getAssetToSalesRatio(3, 2)); + self::assertEquals(2 / 3, FinanceFormulas::getAssetTurnoverRatio(3, 2)); + + self::assertEquals(365 / 1000, FinanceFormulas::getDaysInInventory(1000)); + self::assertEquals(365 / 1000, FinanceFormulas::getAverageCollectionPeriod(1000)); + self::assertEquals(500 / 1000, FinanceFormulas::getReceivablesTurnover(500, 1000)); + self::assertEquals(500 / 1000, FinanceFormulas::getCurrentRatio(500, 1000)); + + self::assertEquals(500 / 1000, FinanceFormulas::getDebtCoverageRatio(500, 1000)); + self::assertEquals(500 / 1000, FinanceFormulas::getDebtRatio(500, 1000)); + self::assertEquals(500 / 1000, FinanceFormulas::getDebtToEquityRatio(500, 1000)); + self::assertEquals(500 / 1000, FinanceFormulas::getDebtToIncomeRatio(500, 1000)); + + self::assertEquals(500 / 1000, FinanceFormulas::getInterestCoverageRatio(500, 1000)); + self::assertEquals(500 / 1000, FinanceFormulas::getInventoryTurnoverRatio(500, 1000)); + self::assertEquals(500 / 1000, FinanceFormulas::getNetProfitMargin(500, 1000)); + + self::assertEquals(500 / 1000, FinanceFormulas::getReturnOnAssets(500, 1000)); + self::assertEquals(500 / 1000, FinanceFormulas::getReturnOnEquity(500, 1000)); + self::assertEquals(500 / 1000, FinanceFormulas::getReceivablesTurnoverRatio(500, 1000)); + self::assertEquals(500 / 1000, FinanceFormulas::getQuickRatio(500, 1000)); + + self::assertEquals(500 / 1000 - 1, FinanceFormulas::getReturnOnInvestment(500, 1000)); + self::assertEquals((500 - 300) / 500, FinanceFormulas::getRetentionRatio(500, 300)); + self::assertEquals(500 / 1000 - 1, FinanceFormulas::getRateOfOnflation(500, 1000)); + } + + public function testCompound() + { + $expected = 15.76; + + $P = 100.00; + $r = 0.05; + $t = 3; + + $C = round(FinanceFormulas::getCompoundInterest($P, $r, $t), 2); + + self::assertEquals(round($expected, 2), $C); + self::assertTrue(abs($P - FinanceFormulas::getPrincipalOfCompundInterest($C, $r, $t)) < 0.1); + self::assertEquals($t, (int) round(FinanceFormulas::getPeriodsOfCompundInterest($P, $C, $r), 0)); + } + + public function testContinuousCompounding() + { + $expected = 116.18; + + $P = 100.00; + $r = 0.05; + $t = 3; + + $C = round(FinanceFormulas::getContinuousCompounding($P, $r, $t), 2); + + self::assertEquals(round($expected, 2), $C); + self::assertEquals(round($P, 2), round(FinanceFormulas::getPrincipalOfContinuousCompounding($C, $r, $t), 2)); + self::assertTrue(abs($t - FinanceFormulas::getPeriodsOfContinuousCompounding($P, $C, $r)) < 0.01); + self::assertTrue(abs($r - FinanceFormulas::getRateOfContinuousCompounding($P, $C, $t)) < 0.01); + } + + public function testSimpleInterest() + { + $P = 100.00; + $r = 0.05; + $t = 3; + + $I = $P * $r * $t; + + self::assertTrue(abs($I - FinanceFormulas::getSimpleInterest($P, $r, $t)) < 0.01); + self::assertTrue(abs($P - FinanceFormulas::getSimpleInterestPrincipal($I, $r, $t)) < 0.01); + self::assertTrue(abs($r - FinanceFormulas::getSimpleInterestRate($I, $P, $t)) < 0.01); + self::assertEquals($t, FinanceFormulas::getSimpleInterestTime($I, $P, $r)); + } + + public function testNetPresentValue() + { + self::assertTrue(abs(1009.23 - FinanceFormulas::getNetPresentValue([10000, 500, 1000, 1500, 2000, 2500, 3000, 3500], 0.05)) < 0.01); + } + + public function testDiscountedPaybackPeriod() + { + $O1 = 5000; + $r = 0.05; + $CF = 1000; + + self::assertTrue(abs(5.896 - FinanceFormulas::getDiscountedPaybackPeriod($CF, $O1, $r)) < 0.01); + } + + public function testDoublingTime() + { + $r = 0.05; + + self::assertTrue(abs(14.207 - FinanceFormulas::getDoublingTime($r)) < 0.01); + self::assertTrue(abs($r - FinanceFormulas::getDoublingRate(14.207)) < 0.01); + } +} diff --git a/tests/Business/Finance/Forecasting/ARCHTest.php b/tests/Business/Finance/Forecasting/ARCHTest.php new file mode 100644 index 000000000..e7f4c78c2 --- /dev/null +++ b/tests/Business/Finance/Forecasting/ARCHTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance\Forecasting; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Forecasting\ARCH; + +class ARCHTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Business/Finance/Forecasting/ARFIMATest.php b/tests/Business/Finance/Forecasting/ARFIMATest.php new file mode 100644 index 000000000..818446bb0 --- /dev/null +++ b/tests/Business/Finance/Forecasting/ARFIMATest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance\Forecasting; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Forecasting\ARFIMA; + +class ARFIMATest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Business/Finance/Forecasting/ARIMATest.php b/tests/Business/Finance/Forecasting/ARIMATest.php new file mode 100644 index 000000000..4f87005ab --- /dev/null +++ b/tests/Business/Finance/Forecasting/ARIMATest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance\Forecasting; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Forecasting\ARIMA; + +class ARIMATest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Business/Finance/Forecasting/ARMATest.php b/tests/Business/Finance/Forecasting/ARMATest.php new file mode 100644 index 000000000..670a3e613 --- /dev/null +++ b/tests/Business/Finance/Forecasting/ARMATest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance\Forecasting; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Forecasting\ARMA; + +class ARMATest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Business/Finance/Forecasting/ARTest.php b/tests/Business/Finance/Forecasting/ARTest.php new file mode 100644 index 000000000..58db1d881 --- /dev/null +++ b/tests/Business/Finance/Forecasting/ARTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance\Forecasting; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Forecasting\AR; + +class ARTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Business/Finance/Forecasting/ClassicalDecompositionTest.php b/tests/Business/Finance/Forecasting/ClassicalDecompositionTest.php new file mode 100644 index 000000000..bd909beca --- /dev/null +++ b/tests/Business/Finance/Forecasting/ClassicalDecompositionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance\Forecasting; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Forecasting\ClassicalDecomposition; + +class ClassicalDecompositionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Business/Finance/Forecasting/ExponentialSmoothing/ExponentialSmoothingTest.php b/tests/Business/Finance/Forecasting/ExponentialSmoothing/ExponentialSmoothingTest.php new file mode 100644 index 000000000..774120240 --- /dev/null +++ b/tests/Business/Finance/Forecasting/ExponentialSmoothing/ExponentialSmoothingTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance\Forecasting\ExponentialSmoothing; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Forecasting\ExponentialSmoothing\ExponentialSmoothing; + +class ExponentialSmoothingTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Business/Finance/Forecasting/ExponentialSmoothing/SeasonalTypeTest.php b/tests/Business/Finance/Forecasting/ExponentialSmoothing/SeasonalTypeTest.php new file mode 100644 index 000000000..617fe48ae --- /dev/null +++ b/tests/Business/Finance/Forecasting/ExponentialSmoothing/SeasonalTypeTest.php @@ -0,0 +1,33 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance\Forecasting\ExponentialSmoothing; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Forecasting\ExponentialSmoothing\SeasonalType; + +class SeasonalTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(4, count(SeasonalType::getConstants())); + self::assertEquals(SeasonalType::getConstants(), array_unique(SeasonalType::getConstants())); + + self::assertEquals(0, SeasonalType::ALL); + self::assertEquals(1, SeasonalType::NONE); + self::assertEquals(2, SeasonalType::ADDITIVE); + self::assertEquals(4, SeasonalType::MULTIPLICATIVE); + } +} diff --git a/tests/Business/Finance/Forecasting/ExponentialSmoothing/TrendTypeTest.php b/tests/Business/Finance/Forecasting/ExponentialSmoothing/TrendTypeTest.php new file mode 100644 index 000000000..73fe86c7e --- /dev/null +++ b/tests/Business/Finance/Forecasting/ExponentialSmoothing/TrendTypeTest.php @@ -0,0 +1,33 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance\Forecasting\ExponentialSmoothing; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Forecasting\ExponentialSmoothing\TrendType; + +class TrendTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(4, count(TrendType::getConstants())); + self::assertEquals(TrendType::getConstants(), array_unique(TrendType::getConstants())); + + self::assertEquals(0, TrendType::ALL); + self::assertEquals(1, TrendType::NONE); + self::assertEquals(2, TrendType::ADDITIVE); + self::assertEquals(4, TrendType::MULTIPLICATIVE); + } +} diff --git a/tests/Business/Finance/Forecasting/GARCHTest.php b/tests/Business/Finance/Forecasting/GARCHTest.php new file mode 100644 index 000000000..99fe681d2 --- /dev/null +++ b/tests/Business/Finance/Forecasting/GARCHTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance\Forecasting; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Forecasting\GARCH; + +class GARCHTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Business/Finance/Forecasting/MATest.php b/tests/Business/Finance/Forecasting/MATest.php new file mode 100644 index 000000000..fb85c9c36 --- /dev/null +++ b/tests/Business/Finance/Forecasting/MATest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance\Forecasting; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Forecasting\MA; + +class MATest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Business/Finance/Forecasting/NARTest.php b/tests/Business/Finance/Forecasting/NARTest.php new file mode 100644 index 000000000..5e27f7f81 --- /dev/null +++ b/tests/Business/Finance/Forecasting/NARTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance\Forecasting; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Forecasting\NAR; + +class NARTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Business/Finance/Forecasting/NMATest.php b/tests/Business/Finance/Forecasting/NMATest.php new file mode 100644 index 000000000..0e824c205 --- /dev/null +++ b/tests/Business/Finance/Forecasting/NMATest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance\Forecasting; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Forecasting\NMA; + +class NMATest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Business/Finance/Forecasting/SARIMATest.php b/tests/Business/Finance/Forecasting/SARIMATest.php new file mode 100644 index 000000000..c495458e4 --- /dev/null +++ b/tests/Business/Finance/Forecasting/SARIMATest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance\Forecasting; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Forecasting\SARIMA; + +class SARIMATest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Business/Finance/Forecasting/SmoothingTypeTest.php b/tests/Business/Finance/Forecasting/SmoothingTypeTest.php new file mode 100644 index 000000000..e834ce5c5 --- /dev/null +++ b/tests/Business/Finance/Forecasting/SmoothingTypeTest.php @@ -0,0 +1,30 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance\Forecasting; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Forecasting\SmoothingType; + +class SmoothingTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(1, count(SmoothingType::getConstants())); + self::assertEquals(SmoothingType::getConstants(), array_unique(SmoothingType::getConstants())); + + self::assertEquals(1, SmoothingType::CENTERED_MOVING_AVERAGE); + } +} diff --git a/tests/Business/Finance/LoanTest.php b/tests/Business/Finance/LoanTest.php new file mode 100644 index 000000000..25269d23f --- /dev/null +++ b/tests/Business/Finance/LoanTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Loan; + +class LoanTest extends \PHPUnit\Framework\TestCase +{ + public function testRatios() + { + self::assertEquals(100 / 50, Loan::getLoanToDepositRatio(100, 50)); + self::assertEquals(100 / 50, Loan::getLoanToValueRatio(100, 50)); + } +} diff --git a/tests/Business/Finance/LorenzkurveTest.php b/tests/Business/Finance/LorenzkurveTest.php new file mode 100644 index 000000000..f403636ea --- /dev/null +++ b/tests/Business/Finance/LorenzkurveTest.php @@ -0,0 +1,30 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\Lorenzkurve; + +class LorenzkurveTest extends \PHPUnit\Framework\TestCase +{ + public function testLorenz() + { + $arr = [1, 1, 1, 1, 1, 1, 1, 10, 33, 50]; + + self::assertTrue(abs(0.71 - LorenzKurve::getGiniCoefficient($arr)) < 0.01); + } +} + diff --git a/tests/Business/Finance/StockBondsTest.php b/tests/Business/Finance/StockBondsTest.php new file mode 100644 index 000000000..8c240ea9d --- /dev/null +++ b/tests/Business/Finance/StockBondsTest.php @@ -0,0 +1,56 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Finance; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Finance\StockBonds; + +class StockBondsTest extends \PHPUnit\Framework\TestCase +{ + public function testRatios() + { + self::assertEquals(100 / 50, StockBonds::getBookValuePerShare(100, 50)); + self::assertEquals(100 / 50, StockBonds::getCurrentYield(100, 50)); + self::assertEquals(100 / 50, StockBonds::getDividendPayoutRatio(100, 50)); + self::assertEquals(100 / 50, StockBonds::getDividendYield(100, 50)); + self::assertEquals(100 / 50, StockBonds::getDividendsPerShare(100, 50)); + self::assertEquals(100 / 50, StockBonds::getEarningsPerShare(100, 50)); + self::assertEquals(100 / 50, StockBonds::getEquityMultiplier(100, 50)); + self::assertEquals(100 / 50, StockBonds::getPriceToBookValue(100, 50)); + self::assertEquals(100 / 50, StockBonds::getPriceEarningsRatio(100, 50)); + self::assertEquals(100 / 50, StockBonds::getPriceToSalesRatio(100, 50)); + } + + public function testBondEquivalentYield() + { + self::assertEquals(0.40556, StockBonds::getBondEquivalentYield(100, 90, 100), '', 0.01); + } + + public function testExpectedReturnCAPM() + { + self::assertEquals(7, StockBonds::getExpectedReturnCAPM(3, 2, 5), '', 0.01); + } + + public function testCapitalGainsYield() + { + self::assertEquals(0.1, StockBonds::getCapitalGainsYield(100, 110), '', 0.01); + } + + public function testDilutedEarningsPerShare() + { + self::assertEquals(9.09, StockBonds::getDilutedEarningsPerShare(1000, 100, 10), '', 0.1); + } +} diff --git a/tests/Business/Marketing/MetricsTest.php b/tests/Business/Marketing/MetricsTest.php new file mode 100644 index 000000000..cebea895d --- /dev/null +++ b/tests/Business/Marketing/MetricsTest.php @@ -0,0 +1,26 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Business\Marketing; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Business\Marketing\NetPromoterScore; + +class NetPromoterScoreTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $nps = new NetPromoterScore(); + + self::assertEquals(0, $nps->getScore()); + } + + public function testGetSet() + { + $nps = new NetPromoterScore(); + + for ($i = 0; $i < 10; $i++) { + $nps->add(mt_rand(0, 6)); + } + + for ($i = 0; $i < 30; $i++) { + $nps->add(mt_rand(7, 8)); + } + + for ($i = 0; $i < 60; $i++) { + $nps->add(mt_rand(9, 10)); + } + + self::assertEquals(50, $nps->getScore()); + self::assertEquals(10, $nps->countDetractors()); + self::assertEquals(30, $nps->countPassives()); + self::assertEquals(60, $nps->countPromoters()); + } +} diff --git a/tests/Business/Programming/MetricsTest.php b/tests/Business/Programming/MetricsTest.php new file mode 100644 index 000000000..cddf66376 --- /dev/null +++ b/tests/Business/Programming/MetricsTest.php @@ -0,0 +1,29 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ +namespace Tests\PHPUnit\phpOMS\Business\Sales; + +use phpOMS\Business\Sales\MarketShareEstimation; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +class MarketShareEstimationTest extends \PHPUnit\Framework\TestCase +{ + public function testZipfRank() + { + self::assertEquals(13, MarketShareEstimation::getRankFromMarketShare(1000, 0.01)); + self::assertEquals(19, MarketShareEstimation::getRankFromMarketShare(100, 0.01)); + self::assertEquals(8, MarketShareEstimation::getRankFromMarketShare(100000, 0.01)); + } + + public function testZipfShare() + { + self::assertTrue(abs(0.01 - MarketShareEstimation::getMarketShareFromRank(1000, 13)) < 0.01); + self::assertTrue(abs(0.01 - MarketShareEstimation::getMarketShareFromRank(100, 19)) < 0.01); + self::assertTrue(abs(0.01 - MarketShareEstimation::getMarketShareFromRank(100000, 8)) < 0.01); + } +} diff --git a/tests/Config/OptionsTraitTest.php b/tests/Config/OptionsTraitTest.php new file mode 100644 index 000000000..23dd11df3 --- /dev/null +++ b/tests/Config/OptionsTraitTest.php @@ -0,0 +1,75 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Config; + +use phpOMS\Config\OptionsTrait; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class OptionsTraitTest extends \PHPUnit\Framework\TestCase +{ + + public function testOptionTrait() + { + $class = new class { + use OptionsTrait; + }; + + /* Testing members */ + self::assertObjectHasAttribute('options', $class); + } + + public function testDefault() + { + $class = new class { + use OptionsTrait; + }; + + self::assertFalse($class->exists('someKey')); + self::assertNull($class->getOption('someKey')); + } + + public function testSetGet() + { + $class = new class { + use OptionsTrait; + }; + + self::assertTrue($class->setOption('a', 'value1')); + self::assertTrue($class->exists('a')); + self::assertEquals('value1', $class->getOption('a')); + + self::assertTrue($class->setOption('a', 'value2')); + self::assertTrue($class->exists('a')); + self::assertEquals('value2', $class->getOption('a')); + + self::assertTrue($class->setOption('a', 'value3', true)); + self::assertTrue($class->exists('a')); + self::assertEquals('value3', $class->getOption('a')); + + self::assertFalse($class->setOption('a', 'value4', false)); + self::assertTrue($class->exists('a')); + self::assertEquals('value3', $class->getOption('a')); + + self::assertTrue($class->setOptions(['b' => 2, 'c' => '3'], true)); + self::assertFalse($class->setOptions(['b' => 4, 'c' => '5'], false)); + self::assertTrue($class->exists('a')); + self::assertTrue($class->exists('b')); + self::assertTrue($class->exists('c')); + self::assertEquals('value3', $class->getOption('a')); + self::assertEquals(2, $class->getOption('b')); + self::assertEquals(3, $class->getOption('c')); + } +} diff --git a/tests/Console/CommandManagerTest.php b/tests/Console/CommandManagerTest.php new file mode 100644 index 000000000..7018b39a9 --- /dev/null +++ b/tests/Console/CommandManagerTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Console; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Console\CommandManager; + +class CommandManagerTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Cache/CacheFactoryTest.php b/tests/DataStorage/Cache/CacheFactoryTest.php new file mode 100644 index 000000000..7501844fa --- /dev/null +++ b/tests/DataStorage/Cache/CacheFactoryTest.php @@ -0,0 +1,39 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Cache; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Cache\CacheFactory; + +class CacheFactoryTest extends \PHPUnit\Framework\TestCase +{ + public function testCreate() + { + self::assertInstanceOf( + \phpOMS\DataStorage\Cache\FileCache::class, + CacheFactory::create(['type' => 'file', 'path' => 'Cache']) + ); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testInvalidCacheType() + { + CacheFactory::create(['type' => 'invalid', 'path' => 'Cache']); + } +} + diff --git a/tests/DataStorage/Cache/CachePoolTest.php b/tests/DataStorage/Cache/CachePoolTest.php new file mode 100644 index 000000000..cffc96ac4 --- /dev/null +++ b/tests/DataStorage/Cache/CachePoolTest.php @@ -0,0 +1,46 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Cache; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Cache\CachePool; +use phpOMS\DataStorage\Cache\FileCache; + +class CachePoolTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $pool = new CachePool(); + + self::assertFalse($pool->remove('core')); + self::assertEquals(null, $pool->get()); + } + + public function testGetSet() + { + $pool = new CachePool(); + + self::assertTrue($pool->add('test', new FileCache(__DIR__))); + self::assertFalse($pool->add('test', new FileCache(__DIR__))); + self::assertInstanceOf('\phpOMS\DataStorage\Cache\CacheInterface', $pool->get('test')); + self::assertTrue($pool->create('abc', ['type' => 'file', 'path' => __DIR__])); + self::assertInstanceOf('\phpOMS\DataStorage\Cache\CacheInterface', $pool->get('abc')); + self::assertTrue($pool->remove('abc')); + self::assertEquals(null, $pool->get('abc')); + self::assertInstanceOf('\phpOMS\DataStorage\Cache\CacheInterface', $pool->get('test')); + self::assertFalse($pool->remove('abc')); + } +} diff --git a/tests/DataStorage/Cache/CacheStatusTest.php b/tests/DataStorage/Cache/CacheStatusTest.php new file mode 100644 index 000000000..b48a26448 --- /dev/null +++ b/tests/DataStorage/Cache/CacheStatusTest.php @@ -0,0 +1,30 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Cache; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Cache\CacheStatus; + +class CacheStatusTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(3, count(CacheStatus::getConstants())); + self::assertEquals(0, CacheStatus::ACTIVE); + self::assertEquals(1, CacheStatus::INACTIVE); + self::assertEquals(2, CacheStatus::ERROR); + } +} diff --git a/tests/DataStorage/Cache/CacheTypeTest.php b/tests/DataStorage/Cache/CacheTypeTest.php new file mode 100644 index 000000000..f89921fb2 --- /dev/null +++ b/tests/DataStorage/Cache/CacheTypeTest.php @@ -0,0 +1,34 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Cache; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Cache\CacheType; + +class CacheTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(7, count(CacheType::getConstants())); + self::assertEquals(0, CacheType::_INT); + self::assertEquals(1, CacheType::_STRING); + self::assertEquals(2, CacheType::_ARRAY); + self::assertEquals(3, CacheType::_SERIALIZABLE); + self::assertEquals(4, CacheType::_FLOAT); + self::assertEquals(5, CacheType::_BOOL); + self::assertEquals(6, CacheType::_JSONSERIALIZABLE); + } +} diff --git a/tests/DataStorage/Cache/FileCacheTest.php b/tests/DataStorage/Cache/FileCacheTest.php new file mode 100644 index 000000000..e69de29bb diff --git a/tests/DataStorage/Cache/MemCacheTest.php b/tests/DataStorage/Cache/MemCacheTest.php new file mode 100644 index 000000000..e69de29bb diff --git a/tests/DataStorage/Cache/NullCacheTest.php b/tests/DataStorage/Cache/NullCacheTest.php new file mode 100644 index 000000000..c5daeb355 --- /dev/null +++ b/tests/DataStorage/Cache/NullCacheTest.php @@ -0,0 +1,35 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Cache; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Cache\NullCache; + +class NullCacheTest extends \PHPUnit\Framework\TestCase +{ + public function testCache() + { + $cache = new NullCache(); + self::assertTrue($cache->add(1, 1)); + self::assertEquals(null, $cache->get(1)); + self::assertTrue($cache->delete(1)); + self::assertTrue($cache->flush(1)); + self::assertTrue($cache->flushAll()); + self::assertTrue($cache->replace(1, 1)); + self::assertEquals([], $cache->stats()); + self::assertEquals(0, $cache->getThreshold()); + } +} \ No newline at end of file diff --git a/tests/DataStorage/Cache/RedisCacheTest.php b/tests/DataStorage/Cache/RedisCacheTest.php new file mode 100644 index 000000000..e69de29bb diff --git a/tests/DataStorage/Cache/WinCacheTest.php b/tests/DataStorage/Cache/WinCacheTest.php new file mode 100644 index 000000000..e69de29bb diff --git a/tests/DataStorage/Cookie/CookieJarTest.php b/tests/DataStorage/Cookie/CookieJarTest.php new file mode 100644 index 000000000..a427af041 --- /dev/null +++ b/tests/DataStorage/Cookie/CookieJarTest.php @@ -0,0 +1,72 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Cookie; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Cookie\CookieJar; +use phpOMS\DataStorage\LockException; + +class CookieJarTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $jar = new CookieJar(); + + self::assertFalse(CookieJar::isLocked()); + self::assertFalse($jar->delete('abc')); + self::assertFalse($jar->delete('asd')); + } + + public function testCookie() + { + $jar = new CookieJar(); + + self::assertTrue($jar->set('test', 'value')); + self::assertFalse($jar->set('test', 'value', 86400, '/', null, false, true, false)); + self::assertTrue($jar->set('test2', 'value2', 86400, '/', null, false, true, false)); + self::assertTrue($jar->set('test3', 'value3', 86400, '/', null, false, true, false)); + + // header already set + //self::assertTrue($jar->delete('test2')); + //self::assertFalse($jar->delete('test2')); + + self::assertTrue($jar->remove('test2')); + self::assertFalse($jar->remove('test2')); + } + + /** + * @expectedException \phpOMS\DataStorage\LockException + */ + public function testDeleteLocked() + { + $jar = new CookieJar(); + self::assertTrue($jar->set('test', 'value')); + + CookieJar::lock(); + $jar->delete('test'); + } + + /** + * @expectedException \phpOMS\DataStorage\LockException + */ + public function testSaveLocked() + { + CookieJar::lock(); + + $jar = new CookieJar(); + $jar->save(); + } +} diff --git a/tests/DataStorage/Database/Connection/ConnectionFactoryTest.php b/tests/DataStorage/Database/Connection/ConnectionFactoryTest.php new file mode 100644 index 000000000..7766aa83d --- /dev/null +++ b/tests/DataStorage/Database/Connection/ConnectionFactoryTest.php @@ -0,0 +1,39 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Connection; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Connection\ConnectionFactory; +use phpOMS\DataStorage\Database\Connection\MysqlConnection; + +class ConnectionFactoryTest extends \PHPUnit\Framework\TestCase +{ + public function testCreate() + { + self::assertInstanceOf( + MysqlConnection::class, + ConnectionFactory::create($GLOBALS['CONFIG']['db']['core']['masters']['admin']) + ); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testInvalidDatabaseType() + { + ConnectionFactory::create(['db' => 'invalid']); + } +} diff --git a/tests/DataStorage/Database/Connection/MysqlConnectionTest.php b/tests/DataStorage/Database/Connection/MysqlConnectionTest.php new file mode 100644 index 000000000..eedbcffe5 --- /dev/null +++ b/tests/DataStorage/Database/Connection/MysqlConnectionTest.php @@ -0,0 +1,101 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Connection; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Connection\MysqlConnection; +use phpOMS\DataStorage\Database\DatabaseStatus; + +class MysqlConnectionTest extends \PHPUnit\Framework\TestCase +{ + public function testConnect() + { + $mysql = new MysqlConnection($GLOBALS['CONFIG']['db']['core']['masters']['admin']); + + self::assertEquals(DatabaseStatus::OK, $mysql->getStatus()); + self::assertEquals($GLOBALS['CONFIG']['db']['core']['masters']['admin']['database'], $mysql->getDatabase()); + self::assertEquals($GLOBALS['CONFIG']['db']['core']['masters']['admin']['host'], $mysql->getHost()); + self::assertEquals((int) $GLOBALS['CONFIG']['db']['core']['masters']['admin']['port'], $mysql->getPort()); + self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Grammar\MysqlGrammar', $mysql->getGrammar()); + + } + + /** + * @expectedException \phpOMS\DataStorage\Database\Exception\InvalidConnectionConfigException + */ + public function testInvalidDatabaseType() + { + $db = $GLOBALS['CONFIG']['db']['core']['masters']['admin']; + unset($db['db']); + + $mysql = new MysqlConnection($db); + } + + /** + * @expectedException \phpOMS\DataStorage\Database\Exception\InvalidConnectionConfigException + */ + public function testInvalidHost() + { + $db = $GLOBALS['CONFIG']['db']['core']['masters']['admin']; + unset($db['host']); + + $mysql = new MysqlConnection($db); + } + + /** + * @expectedException \phpOMS\DataStorage\Database\Exception\InvalidConnectionConfigException + */ + public function testInvalidPort() + { + $db = $GLOBALS['CONFIG']['db']['core']['masters']['admin']; + unset($db['port']); + + $mysql = new MysqlConnection($db); + } + + /** + * @expectedException \phpOMS\DataStorage\Database\Exception\InvalidConnectionConfigException + */ + public function testInvalidDatabase() + { + $db = $GLOBALS['CONFIG']['db']['core']['masters']['admin']; + unset($db['database']); + + $mysql = new MysqlConnection($db); + } + + /** + * @expectedException \phpOMS\DataStorage\Database\Exception\InvalidConnectionConfigException + */ + public function testInvalidLogin() + { + $db = $GLOBALS['CONFIG']['db']['core']['masters']['admin']; + unset($db['login']); + + $mysql = new MysqlConnection($db); + } + + /** + * @expectedException \phpOMS\DataStorage\Database\Exception\InvalidConnectionConfigException + */ + public function testInvalidPassword() + { + $db = $GLOBALS['CONFIG']['db']['core']['masters']['admin']; + unset($db['password']); + + $mysql = new MysqlConnection($db); + } +} diff --git a/tests/DataStorage/Database/Connection/PostgresConnectionTest.php b/tests/DataStorage/Database/Connection/PostgresConnectionTest.php new file mode 100644 index 000000000..138842083 --- /dev/null +++ b/tests/DataStorage/Database/Connection/PostgresConnectionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Connection; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Connection\PostgresConnection; + +class PostgresConnectionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Database/Connection/SQLiteConnectionTest.php b/tests/DataStorage/Database/Connection/SQLiteConnectionTest.php new file mode 100644 index 000000000..620580bbd --- /dev/null +++ b/tests/DataStorage/Database/Connection/SQLiteConnectionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Connection; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Connection\SQLiteConnection; + +class SQLiteConnectionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Database/Connection/SqlServerConnectionTest.php b/tests/DataStorage/Database/Connection/SqlServerConnectionTest.php new file mode 100644 index 000000000..1f218d818 --- /dev/null +++ b/tests/DataStorage/Database/Connection/SqlServerConnectionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Connection; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Connection\SqlServerConnection; + +class SqlServerConnectionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Database/DataMapperAbstractTest.php b/tests/DataStorage/Database/DataMapperAbstractTest.php new file mode 100644 index 000000000..f23a70482 --- /dev/null +++ b/tests/DataStorage/Database/DataMapperAbstractTest.php @@ -0,0 +1,174 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database; + +use phpOMS\DataStorage\Database\Connection\MysqlConnection; +use phpOMS\DataStorage\Database\DatabaseStatus; +use phpOMS\DataStorage\Database\DatabasePool; + +use Tests\PHPUnit\phpOMS\DataStorage\Database\TestModel\BaseModel; +use Tests\PHPUnit\phpOMS\DataStorage\Database\TestModel\BaseModelMapper; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; +require_once __DIR__ . '/../../../../../config.php'; + +class DataMapperAbstractTest extends \PHPUnit\Framework\TestCase +{ + protected $model = null; + + protected function setUp() + { + $this->model = new BaseModel(); + + $GLOBALS['dbpool']->get()->con->prepare( + 'CREATE TABLE `oms_test_base` ( + `test_base_id` int(11) NOT NULL AUTO_INCREMENT, + `test_base_string` varchar(254) NOT NULL, + `test_base_int` int(11) NOT NULL, + `test_base_bool` tinyint(1) DEFAULT NULL, + `test_base_null` int(11) DEFAULT NULL, + `test_base_float` decimal(5, 4) DEFAULT NULL, + `test_base_belongs_to_one` int(11) DEFAULT NULL, + `test_base_owns_one_self` int(11) DEFAULT NULL, + `test_base_json` varchar(254) DEFAULT NULL, + `test_base_json_serializable` varchar(254) DEFAULT NULL, + `test_base_datetime` datetime DEFAULT NULL, + PRIMARY KEY (`test_base_id`) + )ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;' + )->execute(); + + $GLOBALS['dbpool']->get()->con->prepare( + 'CREATE TABLE `oms_test_belongs_to_one` ( + `test_belongs_to_one_id` int(11) NOT NULL AUTO_INCREMENT, + `test_belongs_to_one_string` varchar(254) NOT NULL, + PRIMARY KEY (`test_belongs_to_one_id`) + )ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;' + )->execute(); + + $GLOBALS['dbpool']->get()->con->prepare( + 'CREATE TABLE `oms_test_owns_one` ( + `test_owns_one_id` int(11) NOT NULL AUTO_INCREMENT, + `test_owns_one_string` varchar(254) NOT NULL, + PRIMARY KEY (`test_owns_one_id`) + )ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;' + )->execute(); + + $GLOBALS['dbpool']->get()->con->prepare( + 'CREATE TABLE `oms_test_has_many_direct` ( + `test_has_many_direct_id` int(11) NOT NULL AUTO_INCREMENT, + `test_has_many_direct_string` varchar(254) NOT NULL, + `test_has_many_direct_to` int(11) NOT NULL, + PRIMARY KEY (`test_has_many_direct_id`) + )ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;' + )->execute(); + + $GLOBALS['dbpool']->get()->con->prepare( + 'CREATE TABLE `oms_test_has_many_rel` ( + `test_has_many_rel_id` int(11) NOT NULL AUTO_INCREMENT, + `test_has_many_rel_string` varchar(254) NOT NULL, + PRIMARY KEY (`test_has_many_rel_id`) + )ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;' + )->execute(); + + $GLOBALS['dbpool']->get()->con->prepare( + 'CREATE TABLE `oms_test_has_many_rel_relations` ( + `test_has_many_rel_relations_id` int(11) NOT NULL AUTO_INCREMENT, + `test_has_many_rel_relations_src` int(11) NOT NULL, + `test_has_many_rel_relations_dest` int(11) NOT NULL, + PRIMARY KEY (`test_has_many_rel_relations_id`) + )ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;' + )->execute(); + } + + protected function tearDown() + { + $GLOBALS['dbpool']->get()->con->prepare('DROP TABLE oms_test_base')->execute(); + $GLOBALS['dbpool']->get()->con->prepare('DROP TABLE oms_test_belongs_to_one')->execute(); + $GLOBALS['dbpool']->get()->con->prepare('DROP TABLE oms_test_owns_one')->execute(); + $GLOBALS['dbpool']->get()->con->prepare('DROP TABLE oms_test_has_many_direct')->execute(); + $GLOBALS['dbpool']->get()->con->prepare('DROP TABLE oms_test_has_many_rel')->execute(); + $GLOBALS['dbpool']->get()->con->prepare('DROP TABLE oms_test_has_many_rel_relations')->execute(); + } + + public function testCreate() + { + self::assertGreaterThan(0, BaseModelMapper::create($this->model)); + self::assertGreaterThan(0, $this->model->id); + } + + public function testRead() + { + $id = BaseModelMapper::create($this->model); + $modelR = BaseModelMapper::get($id); + + self::assertEquals($this->model->id, $modelR->id); + self::assertEquals($this->model->string, $modelR->string); + self::assertEquals($this->model->int, $modelR->int); + self::assertEquals($this->model->bool, $modelR->bool); + self::assertEquals($this->model->float, $modelR->float); + self::assertEquals($this->model->null, $modelR->null); + self::assertEquals($this->model->datetime->format('Y-m-d'), $modelR->datetime->format('Y-m-d')); + + // todo implement these + //self::assertEquals('123', $modelR->serializable); + //self::assertEquals($this->model->json, $modelR->json); + //self::assertEquals([1, 2, 3], $modelR->jsonSerializable); + + self::assertEquals(2, count($modelR->hasManyDirect)); + self::assertEquals(2, count($modelR->hasManyRelations)); + self::assertEquals(reset($this->model->hasManyDirect)->string, reset($modelR->hasManyDirect)->string); + self::assertEquals(reset($this->model->hasManyRelations)->string, reset($modelR->hasManyRelations)->string); + self::assertEquals($this->model->ownsOneSelf->string, $modelR->ownsOneSelf->string); + self::assertEquals($this->model->belongsToOne->string, $modelR->belongsToOne->string); + } + + public function testUpdate() + { + $id = BaseModelMapper::create($this->model); + $modelR = BaseModelMapper::get($id); + + $modelR->string = 'Update'; + $modelR->int = '321'; + $modelR->bool = true; + $modelR->float = 3.15; + $modelR->null = null; + $modelR->datetime = new \DateTime('now'); + + $id2 = BaseModelMapper::update($modelR); + $modelR2 = BaseModelMapper::get($id2); + + self::assertEquals($modelR->string, $modelR2->string); + self::assertEquals($modelR->int, $modelR2->int); + self::assertEquals($modelR->bool, $modelR2->bool); + self::assertEquals($modelR->float, $modelR2->float); + self::assertEquals($modelR->null, $modelR2->null); + self::assertEquals($modelR->datetime->format('Y-m-d'), $modelR2->datetime->format('Y-m-d')); + + // todo test update relations + } + + public function testDelete() + { + $id = BaseModelMapper::create($this->model); + BaseModelMapper::delete($this->model); + $modelR = BaseModelMapper::get($id); + + self::assertInstanceOf('\Tests\PHPUnit\phpOMS\DataStorage\Database\TestModel\NullBaseModel', $modelR); + + // todo test if relations also deleted + } + + +} diff --git a/tests/DataStorage/Database/DatabaseExceptionFactoryTest.php b/tests/DataStorage/Database/DatabaseExceptionFactoryTest.php new file mode 100644 index 000000000..401991d0b --- /dev/null +++ b/tests/DataStorage/Database/DatabaseExceptionFactoryTest.php @@ -0,0 +1,32 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\DatabaseExceptionFactory; + +class DatabaseExceptionFactoryTest extends \PHPUnit\Framework\TestCase +{ + public function testException() + { + self::assertEquals('\PDOException', DatabaseExceptionFactory::createException(new \PDOException())); + } + + public function testExceptionMessage() + { + self::assertEquals('', DatabaseExceptionFactory::createExceptionMessage(new \PDOException())); + } +} diff --git a/tests/DataStorage/Database/DatabasePoolTest.php b/tests/DataStorage/Database/DatabasePoolTest.php new file mode 100644 index 000000000..5de0af1d1 --- /dev/null +++ b/tests/DataStorage/Database/DatabasePoolTest.php @@ -0,0 +1,55 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database; + +use phpOMS\DataStorage\Database\Connection\MysqlConnection; +use phpOMS\DataStorage\Database\DatabaseStatus; +use phpOMS\DataStorage\Database\DatabasePool; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; +require_once __DIR__ . '/../../../../../config.php'; + +class DatabasePoolTest extends \PHPUnit\Framework\TestCase +{ + public function testBasicConnection() + { + $dbPool = new DatabasePool(); + /** @var array $CONFIG */ + $dbPool->create('core', $GLOBALS['CONFIG']['db']['core']['masters']['admin']); + + self::assertEquals($dbPool->get()->getStatus(), DatabaseStatus::OK); + } + + public function testGetSet() + { + $dbPool = new DatabasePool(); + /** @var array $CONFIG */ + + self::assertTrue($dbPool->create('core', $GLOBALS['CONFIG']['db']['core']['masters']['admin'])); + self::assertFalse($dbPool->create('core', $GLOBALS['CONFIG']['db']['core']['masters']['admin'])); + + self::assertInstanceOf('\phpOMS\DataStorage\Database\Connection\ConnectionAbstract', $dbPool->get()); + self::assertNull($dbPool->get('doesNotExist')); + self::assertEquals($dbPool->get('core'), $dbPool->get()); + + self::assertFalse($dbPool->remove('cores')); + self::assertTrue($dbPool->remove('core')); + + self::assertNull($dbPool->get()); + + self::assertTrue($dbPool->add('core', new MysqlConnection($GLOBALS['CONFIG']['db']['core']['masters']['admin']))); + self::assertFalse($dbPool->add('core', new MysqlConnection($GLOBALS['CONFIG']['db']['core']['masters']['admin']))); + } +} diff --git a/tests/DataStorage/Database/DatabaseStatusTest.php b/tests/DataStorage/Database/DatabaseStatusTest.php new file mode 100644 index 000000000..b7a377ddb --- /dev/null +++ b/tests/DataStorage/Database/DatabaseStatusTest.php @@ -0,0 +1,33 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\DatabaseStatus; + +class DatabaseStatusTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(6, count(DatabaseStatus::getConstants())); + self::assertEquals(0, DatabaseStatus::OK); + self::assertEquals(1, DatabaseStatus::MISSING_DATABASE); + self::assertEquals(2, DatabaseStatus::MISSING_TABLE); + self::assertEquals(3, DatabaseStatus::FAILURE); + self::assertEquals(4, DatabaseStatus::READONLY); + self::assertEquals(5, DatabaseStatus::CLOSED); + } +} diff --git a/tests/DataStorage/Database/DatabaseTypeTest.php b/tests/DataStorage/Database/DatabaseTypeTest.php new file mode 100644 index 000000000..193ca483a --- /dev/null +++ b/tests/DataStorage/Database/DatabaseTypeTest.php @@ -0,0 +1,30 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\DatabaseType; + +class DatabaseTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(5, count(DatabaseType::getConstants())); + self::assertEquals('mysql', DatabaseType::MYSQL); + self::assertEquals('sqlite', DatabaseType::SQLITE); + self::assertEquals('mssql', DatabaseType::SQLSRV); + } +} diff --git a/tests/DataStorage/Database/Exception/InvalidConnectionConfigExceptionTest.php b/tests/DataStorage/Database/Exception/InvalidConnectionConfigExceptionTest.php new file mode 100644 index 000000000..2957ee1a6 --- /dev/null +++ b/tests/DataStorage/Database/Exception/InvalidConnectionConfigExceptionTest.php @@ -0,0 +1,26 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Query; + +use phpOMS\DataStorage\Database\Connection\MysqlConnection; +use phpOMS\DataStorage\Database\Query\Builder; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; +require_once __DIR__ . '/../../../../../../config.php'; + +class BuilderTest extends \PHPUnit\Framework\TestCase +{ + protected $con = null; + + protected function setUp() + { + $this->con = new MysqlConnection($GLOBALS['CONFIG']['db']['core']['masters']['admin']); + } + + public function testMysqlSelect() + { + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT DISTINCT `a`.`test` FROM `a` WHERE `a`.`test` = 1;'; + self::assertEquals($sql, $query->select('a.test')->distinct()->from('a')->where('a.test', '=', 1)->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test`, `b`.`test` FROM `a`, `b` WHERE `a`.`test` = \'abc\';'; + self::assertEquals($sql, $query->select('a.test', 'b.test')->from('a', 'b')->where('a.test', '=', 'abc')->toSql()); + + $query = new Builder($this->con); + $datetime = new \Datetime('now'); + $sql = 'SELECT `a`.`test`, `b`.`test` FROM `a`, `b` WHERE `a`.`test` = \'' . $datetime->format('Y-m-d H:i:s') . '\';'; + self::assertEquals($sql, $query->select('a.test', 'b.test')->from('a', 'b')->where('a.test', '=', $datetime)->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test`, `b`.`test` FROM `a`, `b` WHERE `a`.`test` = \'abc\' AND `b`.`test` = 2;'; + $systemIdentifier = '`'; + self::assertEquals($sql, $query->select('a.test', function () { + return '`b`.`test`'; + })->from('a', function () use ($systemIdentifier) { + return $systemIdentifier . 'b' . $systemIdentifier; + })->where(['a.test', 'b.test'], ['=', '='], ['abc', 2], ['and', 'and'])->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test`, `b`.`test` FROM `a`, `b` WHERE `a`.`test` = \'abc\' ORDER BY `a`.`test` ASC, `b`.`test` DESC;'; + self::assertEquals($sql, + $query->select('a.test', 'b.test') + ->from('a', 'b') + ->where('a.test', '=', 'abc') + ->orderBy(['a.test', 'b.test', ], ['ASC', 'DESC', ]) + ->toSql() + ); + } + + public function testMysqlOrder() + { + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 ORDER BY `a`.`test` DESC;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->newest('a.test')->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 ORDER BY `a`.`test` ASC;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->oldest('a.test')->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 ORDER BY `a`.`test` DESC;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->orderBy('a.test', 'DESC')->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 ORDER BY `a`.`test` ASC;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->orderBy('a.test', 'ASC')->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 ORDER BY `a`.`test`, `a`.`test2` DESC;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->orderBy(['a.test', 'a.test2'], ['DESC', 'DESC'])->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 ORDER BY `a`.`test`, `a`.`test2` ASC;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->orderBy(['a.test', 'a.test2'], 'ASC')->toSql()); + } + + public function testMysqlOffsetLimit() + { + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 LIMIT 3;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->limit(3)->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 OFFSET 3;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->offset(3)->toSql()); + } + + public function testMysqlGroup() + { + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 GROUP BY `a`;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->groupBy('a')->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 GROUP BY `a`, `b`;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->groupBy('a')->groupBy('b')->toSql()); + + $query = new Builder($this->con); + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->groupBy('a', 'b')->toSql()); + } + + public function testMysqlWheres() + { + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 0;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', false)->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', true)->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = \'string\';'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 'string')->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1.23;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1.23)->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 AND `a`.`test2` = 2;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->where('a.test2', '=', 2, 'and')->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 AND `a`.`test2` = 2;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->andWhere('a.test2', '=', 2)->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 OR `a`.`test2` = 2;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->where('a.test2', '=', 2, 'or')->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 OR `a`.`test2` = 2;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->orWhere('a.test2', '=', 2)->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 OR `a`.`test2` IS NULL;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->whereNull('a.test2', 'or')->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 OR `a`.`test2` IS NOT NULL;'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->whereNotNull('a.test2', 'or')->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 OR `a`.`test2` IN (1, 2, 3);'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->whereIn('a.test2', [1, 2, 3], 'or')->toSql()); + + $query = new Builder($this->con); + $sql = 'SELECT `a`.`test` FROM `a` WHERE `a`.`test` = 1 OR `a`.`test2` IN (\'a\', \'b\', \'c\');'; + self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->whereIn('a.test2', ['a', 'b', 'c'], 'or')->toSql()); + } + + public function testMysqlInsert() + { + $query = new Builder($this->con); + $sql = 'INSERT INTO `a` VALUES (1, \'test\');'; + self::assertEquals($sql, $query->insert()->into('a')->values(1, 'test')->toSql()); + + $query = new Builder($this->con); + $sql = 'INSERT INTO `a` (`test`, `test2`) VALUES (1, \'test\');'; + self::assertEquals($sql, $query->insert('test', 'test2')->into('a')->values(1, 'test')->toSql()); + } + + public function testMysqlDelete() + { + $query = new Builder($this->con); + $sql = 'DELETE FROM `a` WHERE `a`.`test` = 1;'; + self::assertEquals($sql, $query->delete()->from('a')->where('a.test', '=', 1)->toSql()); + } + + public function testMysqlUpdate() + { + $query = new Builder($this->con); + $sql = 'UPDATE `a` SET `a`.`test` = 1, `a`.`test2` = 2 WHERE `a`.`test` = 1;'; + self::assertEquals($sql, $query->update('a')->set(['a.test' => 1])->set(['a.test2' => 2])->where('a.test', '=', 1)->toSql()); + } + + public function testRaw() + { + $query = new Builder($this->con); + self::assertEquals('SELECT test.val FROM test;', $query->raw('SELECT test.val FROM test;')->toSql()); + } + + /** + * @expectedException \Exception + */ + public function testReadOnlyRaw() + { + $query = new Builder($this->con, true); + $query->raw('DROP DATABASE oms;'); + } + + /** + * @expectedException \Exception + */ + public function testReadOnlyInsert() + { + $query = new Builder($this->con, true); + $query->insert('test'); + } + + /** + * @expectedException \Exception + */ + public function testReadOnlyUpdate() + { + $query = new Builder($this->con, true); + $query->update(); + } + + /** + * @expectedException \Exception + */ + public function testReadOnlyDelete() + { + $query = new Builder($this->con, true); + $query->delete(); + } +} diff --git a/tests/DataStorage/Database/Query/ColumnTest.php b/tests/DataStorage/Database/Query/ColumnTest.php new file mode 100644 index 000000000..447f90d80 --- /dev/null +++ b/tests/DataStorage/Database/Query/ColumnTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Query; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Query\Column; + +class ColumnTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Database/Query/CountTest.php b/tests/DataStorage/Database/Query/CountTest.php new file mode 100644 index 000000000..46ed114d8 --- /dev/null +++ b/tests/DataStorage/Database/Query/CountTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Query; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Query\Count; + +class CountTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Database/Query/ExpressionTest.php b/tests/DataStorage/Database/Query/ExpressionTest.php new file mode 100644 index 000000000..509c735b2 --- /dev/null +++ b/tests/DataStorage/Database/Query/ExpressionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Query; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Query\Expression; + +class ExpressionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Database/Query/FromTest.php b/tests/DataStorage/Database/Query/FromTest.php new file mode 100644 index 000000000..f32f54154 --- /dev/null +++ b/tests/DataStorage/Database/Query/FromTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Query; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Query\From; + +class FromTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Database/Query/Grammar/GrammarTest.php b/tests/DataStorage/Database/Query/Grammar/GrammarTest.php new file mode 100644 index 000000000..bf1052e57 --- /dev/null +++ b/tests/DataStorage/Database/Query/Grammar/GrammarTest.php @@ -0,0 +1,32 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Query\Grammar; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Query\Grammar\Grammar; + +class GrammarTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $grammar = new Grammar(); + self::assertEquals('Y-m-d H:i:s', $grammar->getDateFormat()); + self::assertEquals('', $grammar->getTablePrefix()); + + $grammar->setTablePrefix('oms_'); + self::assertEquals('oms_', $grammar->getTablePrefix()); + } +} diff --git a/tests/DataStorage/Database/Query/Grammar/MicrosoftGrammarTest.php b/tests/DataStorage/Database/Query/Grammar/MicrosoftGrammarTest.php new file mode 100644 index 000000000..226b38d60 --- /dev/null +++ b/tests/DataStorage/Database/Query/Grammar/MicrosoftGrammarTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Query\Grammar; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Query\Grammar\MicrosoftGrammar; + +class MicrosoftGrammarTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Grammar\Grammar', new MicrosoftGrammar()); + } +} + diff --git a/tests/DataStorage/Database/Query/Grammar/MysqlGrammarTest.php b/tests/DataStorage/Database/Query/Grammar/MysqlGrammarTest.php new file mode 100644 index 000000000..aa92acd27 --- /dev/null +++ b/tests/DataStorage/Database/Query/Grammar/MysqlGrammarTest.php @@ -0,0 +1,29 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Query\Grammar; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Query\Grammar\MysqlGrammar; +use phpOMS\Utils\TestUtils; + +class MysqlGrammarTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Grammar\Grammar', new MysqlGrammar()); + self::assertEquals('`', TestUtils::getMember(new MysqlGrammar(), 'systemIdentifier')); + } +} diff --git a/tests/DataStorage/Database/Query/Grammar/OracleGrammarTest.php b/tests/DataStorage/Database/Query/Grammar/OracleGrammarTest.php new file mode 100644 index 000000000..3d71ef706 --- /dev/null +++ b/tests/DataStorage/Database/Query/Grammar/OracleGrammarTest.php @@ -0,0 +1,29 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Query\Grammar; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Query\Grammar\OracleGrammar; +use phpOMS\Utils\TestUtils; + +class OracleGrammarTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Grammar\Grammar', new OracleGrammar()); + } +} + diff --git a/tests/DataStorage/Database/Query/Grammar/PostgresGrammarTest.php b/tests/DataStorage/Database/Query/Grammar/PostgresGrammarTest.php new file mode 100644 index 000000000..0292c53bd --- /dev/null +++ b/tests/DataStorage/Database/Query/Grammar/PostgresGrammarTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Query\Grammar; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Query\Grammar\PostgresGrammar; + +class PostgresGrammarTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Grammar\Grammar', new PostgresGrammar()); + } +} diff --git a/tests/DataStorage/Database/Query/Grammar/SQLiteGrammarTest.php b/tests/DataStorage/Database/Query/Grammar/SQLiteGrammarTest.php new file mode 100644 index 000000000..ab1932491 --- /dev/null +++ b/tests/DataStorage/Database/Query/Grammar/SQLiteGrammarTest.php @@ -0,0 +1,29 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Query\Grammar; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Query\Grammar\SQLiteGrammar; +use phpOMS\Utils\TestUtils; + +class SQLiteGrammarTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + self::assertInstanceOf('\phpOMS\DataStorage\Database\Query\Grammar\Grammar', new SqliteGrammar()); + self::assertEquals('`', TestUtils::getMember(new SqliteGrammar(), 'systemIdentifier')); + } +} diff --git a/tests/DataStorage/Database/Query/IntoTest.php b/tests/DataStorage/Database/Query/IntoTest.php new file mode 100644 index 000000000..d5f68fad2 --- /dev/null +++ b/tests/DataStorage/Database/Query/IntoTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Query; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Query\Into; + +class IntoTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Database/Query/JoinTypeTest.php b/tests/DataStorage/Database/Query/JoinTypeTest.php new file mode 100644 index 000000000..aa8e4f8b1 --- /dev/null +++ b/tests/DataStorage/Database/Query/JoinTypeTest.php @@ -0,0 +1,40 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Query; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Query\JoinType; + +class JoinTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(11, count(JoinType::getConstants())); + self::assertEquals(JoinType::getConstants(), array_unique(JoinType::getConstants())); + + self::assertEquals('JOIN', JoinType::JOIN); + self::assertEquals('LEFT JOIN', JoinType::LEFT_JOIN); + self::assertEquals('LEFT OUTER JOIN', JoinType::LEFT_OUTER_JOIN); + self::assertEquals('LEFT INNER JOIN', JoinType::LEFT_INNER_JOIN); + self::assertEquals('RIGHT JOIN', JoinType::RIGHT_JOIN); + self::assertEquals('RIGHT OUTER JOIN', JoinType::RIGHT_OUTER_JOIN); + self::assertEquals('RIGHT INNER JOIN', JoinType::RIGHT_INNER_JOIN); + self::assertEquals('OUTER JOIN', JoinType::OUTER_JOIN); + self::assertEquals('INNER JOIN', JoinType::INNER_JOIN); + self::assertEquals('CROSS JOIN', JoinType::CROSS_JOIN); + self::assertEquals('FULL OUTER JOIN', JoinType::FULL_OUTER_JOIN); + } +} diff --git a/tests/DataStorage/Database/Query/QueryTypeTest.php b/tests/DataStorage/Database/Query/QueryTypeTest.php new file mode 100644 index 000000000..76493fcdf --- /dev/null +++ b/tests/DataStorage/Database/Query/QueryTypeTest.php @@ -0,0 +1,35 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Query; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Query\QueryType; + +class QueryTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(6, count(QueryType::getConstants())); + self::assertEquals(QueryType::getConstants(), array_unique(QueryType::getConstants())); + + self::assertEquals(0, QueryType::SELECT); + self::assertEquals(1, QueryType::INSERT); + self::assertEquals(2, QueryType::UPDATE); + self::assertEquals(3, QueryType::DELETE); + self::assertEquals(4, QueryType::RANDOM); + self::assertEquals(5, QueryType::RAW); + } +} diff --git a/tests/DataStorage/Database/Query/SelectTest.php b/tests/DataStorage/Database/Query/SelectTest.php new file mode 100644 index 000000000..2703c5d24 --- /dev/null +++ b/tests/DataStorage/Database/Query/SelectTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Query; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Query\Select; + +class SelectTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Database/Query/WhereTest.php b/tests/DataStorage/Database/Query/WhereTest.php new file mode 100644 index 000000000..e250aeb2c --- /dev/null +++ b/tests/DataStorage/Database/Query/WhereTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Query; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Query\Where; + +class WhereTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} + diff --git a/tests/DataStorage/Database/RelationTypeTest.php b/tests/DataStorage/Database/RelationTypeTest.php new file mode 100644 index 000000000..7b2812dfb --- /dev/null +++ b/tests/DataStorage/Database/RelationTypeTest.php @@ -0,0 +1,34 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\RelationType; + +class RelationTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(7, count(RelationType::getConstants())); + self::assertEquals(1, RelationType::NONE); + self::assertEquals(2, RelationType::NEWEST); + self::assertEquals(4, RelationType::BELONGS_TO); + self::assertEquals(8, RelationType::OWNS_ONE); + self::assertEquals(16, RelationType::HAS_MANY); + self::assertEquals(32, RelationType::ALL); + self::assertEquals(64, RelationType::REFERENCE); + } +} diff --git a/tests/DataStorage/Database/Schema/BuilderTest.php b/tests/DataStorage/Database/Schema/BuilderTest.php new file mode 100644 index 000000000..82ffcad30 --- /dev/null +++ b/tests/DataStorage/Database/Schema/BuilderTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Schema; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Schema\Builder; + +class BuilderTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Database/Schema/Exception/TableExceptionTest.php b/tests/DataStorage/Database/Schema/Exception/TableExceptionTest.php new file mode 100644 index 000000000..0147f313a --- /dev/null +++ b/tests/DataStorage/Database/Schema/Exception/TableExceptionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Schema\Exception; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Schema\Exception\TableException; + +class TableExceptionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Database/Schema/Grammar/GrammarTest.php b/tests/DataStorage/Database/Schema/Grammar/GrammarTest.php new file mode 100644 index 000000000..b0a265708 --- /dev/null +++ b/tests/DataStorage/Database/Schema/Grammar/GrammarTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Schema\Grammar; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Schema\Grammar\Grammar; + +class GrammarTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Database/Schema/Grammar/MysqlGrammarTest.php b/tests/DataStorage/Database/Schema/Grammar/MysqlGrammarTest.php new file mode 100644 index 000000000..d21884e38 --- /dev/null +++ b/tests/DataStorage/Database/Schema/Grammar/MysqlGrammarTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Schema\Grammar; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Schema\Grammar\MysqlGrammar; + +class MysqlGrammarTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Database/Schema/Grammar/PostgresGrammarTest.php b/tests/DataStorage/Database/Schema/Grammar/PostgresGrammarTest.php new file mode 100644 index 000000000..1917ab7c0 --- /dev/null +++ b/tests/DataStorage/Database/Schema/Grammar/PostgresGrammarTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Schema\Grammar; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Schema\Grammar\PostgresGrammar; + +class PostgresGrammarTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Database/Schema/Grammar/SQLiteGrammarTest.php b/tests/DataStorage/Database/Schema/Grammar/SQLiteGrammarTest.php new file mode 100644 index 000000000..63ef5a210 --- /dev/null +++ b/tests/DataStorage/Database/Schema/Grammar/SQLiteGrammarTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Schema\Grammar; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Schema\Grammar\SQLiteGrammar; + +class SQLiteGrammarTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Database/Schema/Grammar/SqlServerGrammarTest.php b/tests/DataStorage/Database/Schema/Grammar/SqlServerGrammarTest.php new file mode 100644 index 000000000..b0e0ca7cf --- /dev/null +++ b/tests/DataStorage/Database/Schema/Grammar/SqlServerGrammarTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Schema\Grammar; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Schema\Grammar\SqlServerGrammar; + +class SqlServerGrammarTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Database/Schema/QueryTypeTest.php b/tests/DataStorage/Database/Schema/QueryTypeTest.php new file mode 100644 index 000000000..bb9f0929a --- /dev/null +++ b/tests/DataStorage/Database/Schema/QueryTypeTest.php @@ -0,0 +1,33 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\Schema; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Database\Schema\QueryType; + +class QueryTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(4, count(QueryType::getConstants())); + self::assertEquals(QueryType::getConstants(), array_unique(QueryType::getConstants())); + + self::assertEquals(0, QueryType::SELECT); + self::assertEquals(1, QueryType::CREATE); + self::assertEquals(2, QueryType::DROP); + self::assertEquals(3, QueryType::ALTER); + } +} diff --git a/tests/DataStorage/Database/TestModel/BaseModel.php b/tests/DataStorage/Database/TestModel/BaseModel.php new file mode 100644 index 000000000..271a21938 --- /dev/null +++ b/tests/DataStorage/Database/TestModel/BaseModel.php @@ -0,0 +1,80 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\TestModel; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +class BaseModel +{ + public $id = 0; + + public $string = 'Base'; + + public $int = 11; + + public $bool = false; + + public $float = 1.3; + + public $null = null; + + public $datetime = null; + + public $hasManyDirect = []; + + public $hasManyRelations = []; + + public $ownsOneSelf = 0; + + public $belongsToOne = 0; + + public $serializable = null; + + public $json = [1, 2, 3]; + + public $jsonSerializable = null; + + public function __construct() + { + $this->datetime = new \DateTime('2005-10-11'); + + $this->hasManyDirect = [ + new ManyToManyDirectModel(), + new ManyToManyDirectModel(), + ]; + + $this->hasManyRelations = [ + new ManyToManyRelModel(), + new ManyToManyRelModel(), + ]; + + $this->ownsOneSelf = new OwnsOneModel(); + $this->belongsToOne = new BelongsToModel(); + + $this->serializable = new class implements \Serializable { + public function serialize() { + return '123'; + } + + public function unserialize($data) {} + }; + + $this->jsonSerializable = new class implements \JsonSerializable { + public function jsonSerialize() { + return [1, 2, 3]; + } + }; + } +} \ No newline at end of file diff --git a/tests/DataStorage/Database/TestModel/BaseModelMapper.php b/tests/DataStorage/Database/TestModel/BaseModelMapper.php new file mode 100644 index 000000000..d3bd01682 --- /dev/null +++ b/tests/DataStorage/Database/TestModel/BaseModelMapper.php @@ -0,0 +1,80 @@ + ['name' => 'test_base_id', 'type' => 'int', 'internal' => 'id'], + 'test_base_string' => ['name' => 'test_base_string', 'type' => 'string', 'internal' => 'string'], + 'test_base_int' => ['name' => 'test_base_int', 'type' => 'int', 'internal' => 'int'], + 'test_base_bool' => ['name' => 'test_base_bool', 'type' => 'bool', 'internal' => 'bool'], + 'test_base_null' => ['name' => 'test_base_null', 'type' => 'int', 'internal' => 'null'], + 'test_base_float' => ['name' => 'test_base_float', 'type' => 'float', 'internal' => 'float'], + 'test_base_json' => ['name' => 'test_base_json', 'type' => 'Json', 'internal' => 'json'], + 'test_base_jsonSerialize' => ['name' => 'test_base_jsonSerialize', 'type' => 'jsonSerializable', 'internal' => 'jsonSerialize'], + 'test_base_datetime' => ['name' => 'test_base_datetime', 'type' => 'DateTime', 'internal' => 'datetime'], + 'test_base_owns_one_self' => ['name' => 'test_base_owns_one_self', 'type' => 'int', 'internal' => 'ownsOneSelf'], + 'test_base_belongs_to_one' => ['name' => 'test_base_belongs_to_one', 'type' => 'int', 'internal' => 'belongsToOne'], + ]; + + protected static $belongsTo = [ + 'belongsToOne' => [ + 'mapper' => BelongsToModelMapper::class, + 'dest' => 'test_base_belongs_to_one', + ], + ]; + + protected static $ownsOne = [ + 'ownsOneSelf' => [ + 'mapper' => OwnsOneModelMapper::class, + 'dest' => 'test_base_owns_one_self', + ], + ]; + + protected static $hasMany = [ + 'hasManyDirect' => [ + 'mapper' => ManyToManyDirectModelMapper::class, + 'table' => 'test_has_many_direct', + 'dst' => 'test_has_many_direct_to', + 'src' => null, + ], + 'hasManyRelations' => [ + 'mapper' => ManyToManyRelModelMapper::class, + 'table' => 'test_has_many_rel_relations', + 'dst' => 'test_has_many_rel_relations_dest', + 'src' => 'test_has_many_rel_relations_src', + ], + ]; + + protected static $table = 'test_base'; + + protected static $createdAt = 'test_base_datetime'; + + protected static $primaryField = 'test_base_id'; +} diff --git a/tests/DataStorage/Database/TestModel/BelongsToModel.php b/tests/DataStorage/Database/TestModel/BelongsToModel.php new file mode 100644 index 000000000..be50d9e0e --- /dev/null +++ b/tests/DataStorage/Database/TestModel/BelongsToModel.php @@ -0,0 +1,24 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\TestModel; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +class BelongsToModel +{ + public $id = 0; + + public $string = 'BelongsTo'; +} \ No newline at end of file diff --git a/tests/DataStorage/Database/TestModel/BelongsToModelMapper.php b/tests/DataStorage/Database/TestModel/BelongsToModelMapper.php new file mode 100644 index 000000000..23d532cb2 --- /dev/null +++ b/tests/DataStorage/Database/TestModel/BelongsToModelMapper.php @@ -0,0 +1,40 @@ + ['name' => 'test_belongs_to_one_id', 'type' => 'int', 'internal' => 'id'], + 'test_belongs_to_one_string' => ['name' => 'test_belongs_to_one_string', 'type' => 'string', 'internal' => 'string'], + ]; + + protected static $table = 'test_belongs_to_one'; + + protected static $primaryField = 'test_belongs_to_one_id'; +} diff --git a/tests/DataStorage/Database/TestModel/ManyToManyDirectModel.php b/tests/DataStorage/Database/TestModel/ManyToManyDirectModel.php new file mode 100644 index 000000000..12d1136f2 --- /dev/null +++ b/tests/DataStorage/Database/TestModel/ManyToManyDirectModel.php @@ -0,0 +1,26 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\TestModel; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +class ManyToManyDirectModel +{ + public $id = 0; + + public $string = 'ManyToManyDirect'; + + public $to = 0; +} \ No newline at end of file diff --git a/tests/DataStorage/Database/TestModel/ManyToManyDirectModelMapper.php b/tests/DataStorage/Database/TestModel/ManyToManyDirectModelMapper.php new file mode 100644 index 000000000..235a020dc --- /dev/null +++ b/tests/DataStorage/Database/TestModel/ManyToManyDirectModelMapper.php @@ -0,0 +1,41 @@ + ['name' => 'test_has_many_direct_id', 'type' => 'int', 'internal' => 'id'], + 'test_has_many_direct_string' => ['name' => 'test_has_many_direct_string', 'type' => 'string', 'internal' => 'string'], + 'test_has_many_direct_to' => ['name' => 'test_has_many_direct_to', 'type' => 'int', 'internal' => 'to'], + ]; + + protected static $table = 'test_has_many_direct'; + + protected static $primaryField = 'test_has_many_direct_id'; +} diff --git a/tests/DataStorage/Database/TestModel/ManyToManyRelModel.php b/tests/DataStorage/Database/TestModel/ManyToManyRelModel.php new file mode 100644 index 000000000..4f5c1ceba --- /dev/null +++ b/tests/DataStorage/Database/TestModel/ManyToManyRelModel.php @@ -0,0 +1,24 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\TestModel; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +class ManyToManyRelModel +{ + public $id = 0; + + public $string = 'ManyToManyRel'; +} \ No newline at end of file diff --git a/tests/DataStorage/Database/TestModel/ManyToManyRelModelMapper.php b/tests/DataStorage/Database/TestModel/ManyToManyRelModelMapper.php new file mode 100644 index 000000000..b2b03ab96 --- /dev/null +++ b/tests/DataStorage/Database/TestModel/ManyToManyRelModelMapper.php @@ -0,0 +1,40 @@ + ['name' => 'test_has_many_rel_id', 'type' => 'int', 'internal' => 'id'], + 'test_has_many_rel_string' => ['name' => 'test_has_many_rel_string', 'type' => 'string', 'internal' => 'string'], + ]; + + protected static $table = 'test_has_many_rel'; + + protected static $primaryField = 'test_has_many_rel_id'; +} diff --git a/tests/DataStorage/Database/TestModel/NullBaseModel.php b/tests/DataStorage/Database/TestModel/NullBaseModel.php new file mode 100644 index 000000000..ef68ffd8f --- /dev/null +++ b/tests/DataStorage/Database/TestModel/NullBaseModel.php @@ -0,0 +1,21 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\TestModel; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +class NullBaseModel extends BaseModel +{ +} \ No newline at end of file diff --git a/tests/DataStorage/Database/TestModel/NullBelongsToModel.php b/tests/DataStorage/Database/TestModel/NullBelongsToModel.php new file mode 100644 index 000000000..12f94e416 --- /dev/null +++ b/tests/DataStorage/Database/TestModel/NullBelongsToModel.php @@ -0,0 +1,21 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\TestModel; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +class NullBelongsToModel extends BelongsToModel +{ +} \ No newline at end of file diff --git a/tests/DataStorage/Database/TestModel/NullManyToManyDirectModel.php b/tests/DataStorage/Database/TestModel/NullManyToManyDirectModel.php new file mode 100644 index 000000000..fb4c6af28 --- /dev/null +++ b/tests/DataStorage/Database/TestModel/NullManyToManyDirectModel.php @@ -0,0 +1,21 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\TestModel; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +class NullManyToManyDirectModel extends ManyToManyDirectModel +{ +} \ No newline at end of file diff --git a/tests/DataStorage/Database/TestModel/NullManyToManyRelModel.php b/tests/DataStorage/Database/TestModel/NullManyToManyRelModel.php new file mode 100644 index 000000000..79f67c91a --- /dev/null +++ b/tests/DataStorage/Database/TestModel/NullManyToManyRelModel.php @@ -0,0 +1,21 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\TestModel; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +class NullManyToManyRelModel extends ManyToManyRelModel +{ +} \ No newline at end of file diff --git a/tests/DataStorage/Database/TestModel/NullOwnsOneModel.php b/tests/DataStorage/Database/TestModel/NullOwnsOneModel.php new file mode 100644 index 000000000..e11d156da --- /dev/null +++ b/tests/DataStorage/Database/TestModel/NullOwnsOneModel.php @@ -0,0 +1,21 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\TestModel; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +class NullOwnsOneModel extends OwnsOneModel +{ +} \ No newline at end of file diff --git a/tests/DataStorage/Database/TestModel/OwnsOneModel.php b/tests/DataStorage/Database/TestModel/OwnsOneModel.php new file mode 100644 index 000000000..abd2d0c9f --- /dev/null +++ b/tests/DataStorage/Database/TestModel/OwnsOneModel.php @@ -0,0 +1,24 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Database\TestModel; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +class OwnsOneModel +{ + public $id = 0; + + public $string = 'OwnsOne'; +} \ No newline at end of file diff --git a/tests/DataStorage/Database/TestModel/OwnsOneModelMapper.php b/tests/DataStorage/Database/TestModel/OwnsOneModelMapper.php new file mode 100644 index 000000000..d28b5a3d2 --- /dev/null +++ b/tests/DataStorage/Database/TestModel/OwnsOneModelMapper.php @@ -0,0 +1,40 @@ + ['name' => 'test_owns_one_id', 'type' => 'int', 'internal' => 'id'], + 'test_owns_one_string' => ['name' => 'test_owns_one_string', 'type' => 'string', 'internal' => 'string'], + ]; + + protected static $table = 'test_owns_one'; + + protected static $primaryField = 'test_owns_one_id'; +} diff --git a/tests/DataStorage/LockExceptionTest.php b/tests/DataStorage/LockExceptionTest.php new file mode 100644 index 000000000..cdf1bb51d --- /dev/null +++ b/tests/DataStorage/LockExceptionTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\LockException; + +class LockExceptionTest extends \PHPUnit\Framework\TestCase +{ + public function testException() + { + self::assertInstanceOf(\RuntimeException::class, new LockException('')); + } +} + diff --git a/tests/DataStorage/Session/ConsoleSessionTest.php b/tests/DataStorage/Session/ConsoleSessionTest.php new file mode 100644 index 000000000..d391f2e46 --- /dev/null +++ b/tests/DataStorage/Session/ConsoleSessionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Session; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Session\ConsoleSession; + +class ConsoleSessionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Session/HttpSessionTest.php b/tests/DataStorage/Session/HttpSessionTest.php new file mode 100644 index 000000000..25be6b9ff --- /dev/null +++ b/tests/DataStorage/Session/HttpSessionTest.php @@ -0,0 +1,49 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Session; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Session\HttpSession; + +class HttpSessionTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $session = new HttpSession(); + self::assertEquals(null, $session->get('key')); + self::assertGreaterThan(0, strlen($session->getSID())); + self::assertFalse(HttpSession::isLocked()); + } + + public function testGetSet() + { + $session = new HttpSession(1, false, 1); + self::assertTrue($session->set('test', 'value')); + self::assertEquals('value', $session->get('test')); + + self::assertFalse($session->set('test', 'value2', false)); + self::assertEquals('value', $session->get('test')); + + self::assertTrue($session->set('test', 'value3')); + self::assertEquals('value3', $session->get('test')); + + self::assertTrue($session->remove('test')); + self::assertFalse($session->remove('test')); + + $session->setSID('abc'); + self::assertEquals('abc', $session->getSID()); + } +} diff --git a/tests/DataStorage/Session/SocketSessionTest.php b/tests/DataStorage/Session/SocketSessionTest.php new file mode 100644 index 000000000..c2a6a53da --- /dev/null +++ b/tests/DataStorage/Session/SocketSessionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Session; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Session\SocketSession; + +class SocketSessionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/DataStorage/Web/BuilderTest.php b/tests/DataStorage/Web/BuilderTest.php new file mode 100644 index 000000000..22cb878e9 --- /dev/null +++ b/tests/DataStorage/Web/BuilderTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\DataStorage\Web; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\DataStorage\Web\Builder; + +class BuilderTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Dispatcher/DispatcherTest.php b/tests/Dispatcher/DispatcherTest.php new file mode 100644 index 000000000..3ff443f90 --- /dev/null +++ b/tests/Dispatcher/DispatcherTest.php @@ -0,0 +1,129 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Dispatcher; + +use phpOMS\ApplicationAbstract; +use phpOMS\Dispatcher\Dispatcher; +use phpOMS\Localization\L11nManager; +use phpOMS\Localization\Localization; +use phpOMS\Log\FileLogger; +use phpOMS\Message\Http\Request; +use phpOMS\Message\Http\Response; +use phpOMS\Router\Router; +use phpOMS\Uri\Http; +use phpOMS\System\File\PathException; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class DispatcherTest extends \PHPUnit\Framework\TestCase +{ + protected $app = null; + + protected function setUp() + { + $this->app = new class extends ApplicationAbstract {}; + $this->app->router = new Router(); + $this->app->dispatcher = new Dispatcher($this->app); + } + + public function testAttributes() + { + self::assertObjectHasAttribute('controllers', $this->app->dispatcher); + } + + public function testClosure() + { + $l11nManager = new L11nManager(); + $localization = new Localization($l11nManager); + + self::assertTrue( + !empty( + $this->app->dispatcher->dispatch( + function($req, $resp, $data = null) { return true; }, + new Request(new Http(''), $localization), + new Response($localization) + ) + ) + ); + } + + public function testPathMethod() + { + $l11nManager = new L11nManager(); + $localization = new Localization($l11nManager); + + self::assertTrue( + !empty( + $this->app->dispatcher->dispatch( + 'Tests\PHPUnit\phpOMS\Dispatcher\TestController:testFunction', + new Request(new Http(''), $localization), + new Response($localization) + ) + ) + ); + } + + public function testPathStatic() + { + $l11nManager = new L11nManager(); + $localization = new Localization($l11nManager); + + self::assertTrue( + !empty( + $this->app->dispatcher->dispatch( + 'Tests\PHPUnit\phpOMS\Dispatcher\TestController::testFunctionStatic', + new Request(new Http(''), $localization), + new Response($localization) + ) + ) + ); + } + + public function testArray() + { + $l11nManager = new L11nManager(); + $localization = new Localization($l11nManager); + + self::assertTrue( + !empty( + $this->app->dispatcher->dispatch( + [ + function($req, $resp, $data = null) { return true; }, + 'Tests\PHPUnit\phpOMS\Dispatcher\TestController:testFunction', + 'Tests\PHPUnit\phpOMS\Dispatcher\TestController::testFunctionStatic', + ], + new Request(new Http(''), $localization), + new Response($localization) + ) + ) + ); + } + + /** + * @expectedException \UnexpectedValueException + */ + public function testInvalidDestination() + { + $this->app->dispatcher->dispatch(true); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidControllerPath() + { + $this->app->dispatcher->dispatch('Tests\PHPUnit\phpOMS\Dispatcher\TestControllers::testFunctionStatic'); + } +} diff --git a/tests/Dispatcher/TestController.php b/tests/Dispatcher/TestController.php new file mode 100644 index 000000000..9bc56f376 --- /dev/null +++ b/tests/Dispatcher/TestController.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ +namespace Tests\PHPUnit\phpOMS\Dispatcher; + +class TestController +{ + public function testFunction($req, $resp, $data = null) + { + return true; + } + + public static function testFunctionStatic($req, $resp, $data = null) + { + return true; + } +} \ No newline at end of file diff --git a/tests/Event/EventManagerTest.php b/tests/Event/EventManagerTest.php new file mode 100644 index 000000000..8ad983a86 --- /dev/null +++ b/tests/Event/EventManagerTest.php @@ -0,0 +1,87 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Event; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Event\EventManager; + +class EventManagerTest extends \PHPUnit\Framework\TestCase +{ + public function testAttributes() + { + $event = new EventManager(); + + self::assertObjectHasAttribute('groups', $event); + self::assertObjectHasAttribute('callbacks', $event); + } + + public function testDefault() + { + $event = new EventManager(); + + self::assertEquals(0, $event->count()); + } + + public function testBase() + { + $event = new EventManager(); + + self::assertTrue($event->attach('group', function() { return true; }, false, false)); + self::assertFalse($event->attach('group', function() { return true; }, false, false)); + self::assertEquals(1, $event->count()); + + self::assertTrue($event->detach('group')); + self::assertFalse($event->trigger('group')); + self::assertEquals(0, $event->count()); + } + + public function testReset() + { + $event = new EventManager(); + self::assertTrue($event->attach('group', function() { return true; }, false, true)); + $event->addGroup('group', 'id1'); + $event->addGroup('group', 'id2'); + + self::assertFalse($event->trigger('group', 'id1')); + self::assertTrue($event->trigger('group', 'id2')); + self::assertFalse($event->trigger('group', 'id2')); + self::assertEquals(1, $event->count()); + + self::assertTrue($event->detach('group')); + } + + public function testDetach() + { + $event = new EventManager(); + self::assertTrue($event->attach('group', function() { return true; }, false, true)); + $event->addGroup('group', 'id1'); + $event->addGroup('group', 'id2'); + + self::assertTrue($event->detach('group')); + self::assertEquals(0, $event->count()); + self::assertFalse($event->trigger('group')); + } + + public function testRemove() + { + $event = new EventManager(); + self::assertTrue($event->attach('group1', function() { return true; }, true, false)); + self::assertTrue($event->attach('group2', function() { return true; }, true, false)); + self::assertEquals(2, $event->count()); + $event->trigger('group1'); + self::assertEquals(1, $event->count()); + } +} diff --git a/tests/Localization/ISO3166CharEnumTest.php b/tests/Localization/ISO3166CharEnumTest.php new file mode 100644 index 000000000..1dd5df6df --- /dev/null +++ b/tests/Localization/ISO3166CharEnumTest.php @@ -0,0 +1,39 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\ISO3166CharEnum; + +class ISO3166CharEnumTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + $ok = true; + + $enum = ISO3166CharEnum::getConstants(); + + foreach ($enum as $code) { + if (strlen($code) !== 3) { + $ok = false; + break; + } + } + + self::assertTrue($ok); + self::assertEquals(count($enum), count(array_unique($enum))); + } +} diff --git a/tests/Localization/ISO3166NameEnumTest.php b/tests/Localization/ISO3166NameEnumTest.php new file mode 100644 index 000000000..106ea8ad9 --- /dev/null +++ b/tests/Localization/ISO3166NameEnumTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\ISO3166NameEnum; + +class ISO3166NameEnumTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + $enum = ISO3166NameEnum::getConstants(); + self::assertEquals(count($enum), count(array_unique($enum))); + } +} diff --git a/tests/Localization/ISO3166NumEnumTest.php b/tests/Localization/ISO3166NumEnumTest.php new file mode 100644 index 000000000..6fcf85526 --- /dev/null +++ b/tests/Localization/ISO3166NumEnumTest.php @@ -0,0 +1,39 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\ISO3166NumEnum; + +class ISO3166NumEnumTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + $ok = true; + + $enum = ISO3166NumEnum::getConstants(); + + foreach ($enum as $code) { + if (strlen($code) !== 3) { + $ok = false; + break; + } + } + + self::assertTrue($ok); + self::assertEquals(count($enum), count(array_unique($enum))); + } +} diff --git a/tests/Localization/ISO3166TwoEnumTest.php b/tests/Localization/ISO3166TwoEnumTest.php new file mode 100644 index 000000000..6e8484f99 --- /dev/null +++ b/tests/Localization/ISO3166TwoEnumTest.php @@ -0,0 +1,39 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\ISO3166TwoEnum; + +class ISO3166TwoEnumTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + $ok = true; + + $countryCodes = ISO3166TwoEnum::getConstants(); + + foreach ($countryCodes as $code) { + if (strlen($code) !== 2) { + $ok = false; + break; + } + } + + self::assertTrue($ok); + self::assertEquals(count($countryCodes), count(array_unique($countryCodes))); + } +} diff --git a/tests/Localization/ISO4217CharEnumTest.php b/tests/Localization/ISO4217CharEnumTest.php new file mode 100644 index 000000000..706b13858 --- /dev/null +++ b/tests/Localization/ISO4217CharEnumTest.php @@ -0,0 +1,39 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\ISO4217CharEnum; + +class ISO4217CharEnumTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + $ok = true; + + $enum = ISO4217CharEnum::getConstants(); + + foreach ($enum as $code) { + if (strlen($code) !== 3) { + $ok = false; + break; + } + } + + self::assertTrue($ok); + self::assertEquals(count($enum), count(array_unique($enum))); + } +} diff --git a/tests/Localization/ISO4217DecimalEnumTest.php b/tests/Localization/ISO4217DecimalEnumTest.php new file mode 100644 index 000000000..53006b642 --- /dev/null +++ b/tests/Localization/ISO4217DecimalEnumTest.php @@ -0,0 +1,38 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\ISO4217DecimalEnum; + +class ISO4217DecimalEnumTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + $ok = true; + + $enum = ISO4217DecimalEnum::getConstants(); + + foreach ($enum as $code) { + if ($code > 4 || $code < -2) { + $ok = false; + break; + } + } + + self::assertTrue($ok); + } +} diff --git a/tests/Localization/ISO4217EnumTest.php b/tests/Localization/ISO4217EnumTest.php new file mode 100644 index 000000000..45ec453e6 --- /dev/null +++ b/tests/Localization/ISO4217EnumTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\ISO4217Enum; + +class ISO4217EnumTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + $enum = ISO4217Enum::getConstants(); + self::assertEquals(count($enum), count(array_unique($enum))); + } +} diff --git a/tests/Localization/ISO4217NumEnumTest.php b/tests/Localization/ISO4217NumEnumTest.php new file mode 100644 index 000000000..897678c6c --- /dev/null +++ b/tests/Localization/ISO4217NumEnumTest.php @@ -0,0 +1,39 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\ISO4217NumEnum; + +class ISO4217NumEnumTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + $ok = true; + + $enum = ISO4217NumEnum::getConstants(); + + foreach ($enum as $code) { + if (strlen($code) !== 3) { + $ok = false; + break; + } + } + + self::assertTrue($ok); + self::assertEquals(count($enum), count(array_unique($enum))); + } +} diff --git a/tests/Localization/ISO4217SubUnitEnumTest.php b/tests/Localization/ISO4217SubUnitEnumTest.php new file mode 100644 index 000000000..35567bfd6 --- /dev/null +++ b/tests/Localization/ISO4217SubUnitEnumTest.php @@ -0,0 +1,38 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\ISO4217SubUnitEnum; + +class ISO4217SubUnitEnumTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + $ok = true; + + $enum = ISO4217SubUnitEnum::getConstants(); + + foreach ($enum as $code) { + if ($code < 0 || $code > 1000) { + $ok = false; + break; + } + } + + self::assertTrue($ok); + } +} diff --git a/tests/Localization/ISO4217SymbolEnumTest.php b/tests/Localization/ISO4217SymbolEnumTest.php new file mode 100644 index 000000000..a1d5c3ef2 --- /dev/null +++ b/tests/Localization/ISO4217SymbolEnumTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\ISO4217SymbolEnum; + +class ISO4217SymbolEnumTest extends \PHPUnit\Framework\TestCase +{ + public function testEnum() + { + $enum = ISO4217SymbolEnum::getConstants(); + self::assertEquals(109, count($enum)); + } +} diff --git a/tests/Localization/ISO639EnumTest.php b/tests/Localization/ISO639EnumTest.php new file mode 100644 index 000000000..196351aef --- /dev/null +++ b/tests/Localization/ISO639EnumTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\ISO639Enum; + +class ISO639EnumTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + $enum = ISO639Enum::getConstants(); + self::assertEquals(count($enum), count(array_unique($enum))); + } +} diff --git a/tests/Localization/ISO639x1EnumTest.php b/tests/Localization/ISO639x1EnumTest.php new file mode 100644 index 000000000..1e85978e6 --- /dev/null +++ b/tests/Localization/ISO639x1EnumTest.php @@ -0,0 +1,39 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\ISO639x1Enum; + +class ISO639x1EnumTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + $ok = true; + + $enum = ISO639x1Enum::getConstants(); + + foreach ($enum as $code) { + if (strlen($code) !== 2) { + $ok = false; + break; + } + } + + self::assertTrue($ok); + self::assertEquals(count($enum), count(array_unique($enum))); + } +} diff --git a/tests/Localization/ISO639x2EnumTest.php b/tests/Localization/ISO639x2EnumTest.php new file mode 100644 index 000000000..1d6c00c97 --- /dev/null +++ b/tests/Localization/ISO639x2EnumTest.php @@ -0,0 +1,39 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\ISO639x2Enum; + +class ISO639x2EnumTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + $ok = true; + + $enum = ISO639x2Enum::getConstants(); + + foreach ($enum as $code) { + if (strlen($code) !== 3) { + $ok = false; + break; + } + } + + self::assertTrue($ok); + self::assertEquals(count($enum), count(array_unique($enum))); + } +} diff --git a/tests/Localization/ISO8601EnumArrayTest.php b/tests/Localization/ISO8601EnumArrayTest.php new file mode 100644 index 000000000..d141b2bd3 --- /dev/null +++ b/tests/Localization/ISO8601EnumArrayTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\ISO8601EnumArray; + +class ISO8601EnumArrayTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(4, count(ISO8601EnumArray::getConstants())); + } +} diff --git a/tests/Localization/L11nManagerTest.php b/tests/Localization/L11nManagerTest.php new file mode 100644 index 000000000..5d982d9d4 --- /dev/null +++ b/tests/Localization/L11nManagerTest.php @@ -0,0 +1,93 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +use phpOMS\Localization\L11nManager; +use phpOMS\Log\FileLogger; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class L11nManagerTest extends \PHPUnit\Framework\TestCase +{ + public function testAttributes() + { + $l11nManager = new L11nManager(); + self::assertObjectHasAttribute('language', $l11nManager); + } + + public function testDefault() + { + $l11nManager = new L11nManager(); + self::assertFalse($l11nManager->isLanguageLoaded('en')); + self::assertEquals([], $l11nManager->getModuleLanguage('en')); + self::assertEquals([], $l11nManager->getModuleLanguage('en', 'Admin')); + self::assertEquals('ERROR', $l11nManager->getHtml('en', 'Admin', 'Backend', 'Test2')); + self::assertEquals('ERROR', $l11nManager->getText('en', 'Admin', 'Backend', 'Test2')); + } + + /** + * @expectedException \Exception + */ + public function testInvalidModule() + { + $expected = [ + 'en' => [ + 'Admin' => [ + 'Test' => 'Test string' + ] + ] + ]; + + $localization = new L11nManager(); + $localization->loadLanguage('en', 'doesNotExist', $expected); + } + + public function testGetSet() + { + $expected = [ + 'en' => [ + 'Admin' => [ + 'Test' => 'Test string' + ] + ] + ]; + + $expected2 = [ + 'en' => [ + 'Admin' => [ + 'Test2' => 'Test strin&g2' + ] + ] + ]; + + $l11nManager = new L11nManager(); + $l11nManager->loadLanguage('en', 'Admin', $expected['en']); + $l11nManager->loadLanguage('en', 'Admin', $expected2['en']); + self::assertTrue($l11nManager->isLanguageLoaded('en')); + + self::assertEquals('Test strin&g2', $l11nManager->getText('en', 'Admin', 'RandomThemeDoesNotMatterAlreadyLoaded', 'Test2')); + self::assertEquals('Test strin&g2', $l11nManager->getHtml('en', 'Admin', 'RandomThemeDoesNotMatterAlreadyLoaded', 'Test2')); + } + + public function testGetSetFromFile() + { + $l11nManager2 = new L11nManager(); + $l11nManager2->loadLanguageFromFile('en', 'Test', __DIR__ . '/langTestFile.php'); + self::assertEquals('value', $l11nManager2->getHtml('en', 'Test', 'RandomThemeDoesNotMatterAlreadyLoaded', 'key')); + + self::assertEquals(['Test' => ['key' => 'value']], $l11nManager2->getModuleLanguage('en')); + self::assertEquals(['key' => 'value'], $l11nManager2->getModuleLanguage('en', 'Test')); + } +} diff --git a/tests/Localization/LocalizationTest.php b/tests/Localization/LocalizationTest.php new file mode 100644 index 000000000..9d0051809 --- /dev/null +++ b/tests/Localization/LocalizationTest.php @@ -0,0 +1,129 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +use phpOMS\Localization\ISO3166TwoEnum; +use phpOMS\Localization\ISO4217Enum; +use phpOMS\Localization\ISO639x1Enum; +use phpOMS\Localization\L11nManager; +use phpOMS\Localization\Localization; +use phpOMS\Localization\TimeZoneEnumArray; +use phpOMS\Log\FileLogger; +use phpOMS\Utils\Converter\AngleType; +use phpOMS\Utils\Converter\TemperatureType; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class LocalizationTest extends \PHPUnit\Framework\TestCase +{ + protected $l11nManager = null; + + protected function setUp() + { + $this->l11nManager = new L11nManager(); + } + + public function testAttributes() + { + $localization = new Localization(); + self::assertObjectHasAttribute('country', $localization); + self::assertObjectHasAttribute('timezone', $localization); + self::assertObjectHasAttribute('language', $localization); + self::assertObjectHasAttribute('currency', $localization); + self::assertObjectHasAttribute('decimal', $localization); + self::assertObjectHasAttribute('thousands', $localization); + self::assertObjectHasAttribute('datetime', $localization); + } + + public function testDefault() + { + $localization = new Localization(); + self::assertTrue(ISO3166TwoEnum::isValidValue($localization->getCountry())); + self::assertTrue(TimeZoneEnumArray::isValidValue($localization->getTimezone())); + self::assertTrue(ISO639x1Enum::isValidValue($localization->getLanguage())); + self::assertTrue(ISO4217Enum::isValidValue($localization->getCurrency())); + self::assertEquals('.', $localization->getDecimal()); + self::assertEquals(',', $localization->getThousands()); + self::assertEquals('Y-m-d H:i:s', $localization->getDatetime()); + } + + /** + * @expectedException \phpOMS\Stdlib\Base\Exception\InvalidEnumValue + */ + public function testInvalidLanguage() + { + $localization = new Localization(); + $localization->setLanguage('abc'); + } + + /** + * @expectedException \phpOMS\Stdlib\Base\Exception\InvalidEnumValue + */ + public function testInvalidCountry() + { + $localization = new Localization(); + $localization->setCountry('abc'); + } + + /** + * @expectedException \phpOMS\Stdlib\Base\Exception\InvalidEnumValue + */ + public function testInvalidTimezone() + { + $localization = new Localization(); + $localization->setTimezone('abc'); + } + + /** + * @expectedException \phpOMS\Stdlib\Base\Exception\InvalidEnumValue + */ + public function testInvalidCurrency() + { + $localization = new Localization(); + $localization->setCurrency('abc'); + } + + public function testGetSet() + { + $localization = new Localization(); + + $localization->setCountry(ISO3166TwoEnum::_USA); + self::assertEquals(ISO3166TwoEnum::_USA, $localization->getCountry()); + + $localization->setTimezone(TimeZoneEnumArray::get(315)); + self::assertEquals(TimeZoneEnumArray::get(315), $localization->getTimezone()); + + $localization->setLanguage(ISO639x1Enum::_DE); + self::assertEquals(ISO639x1Enum::_DE, $localization->getLanguage()); + + $localization->setCurrency(ISO4217Enum::_EUR); + self::assertEquals(ISO4217Enum::_EUR, $localization->getCurrency()); + + $localization->setDatetime('Y-m-d H:i:s'); + self::assertEquals('Y-m-d H:i:s', $localization->getDatetime()); + + $localization->setDecimal(','); + self::assertEquals(',', $localization->getDecimal()); + + $localization->setThousands('.'); + self::assertEquals('.', $localization->getThousands()); + + $localization->setAngle(AngleType::CENTRAD); + self::assertEquals(AngleType::CENTRAD, $localization->getAngle()); + + $localization->setTemperature(TemperatureType::FAHRENHEIT); + self::assertEquals(TemperatureType::FAHRENHEIT, $localization->getTemperature()); + } +} diff --git a/tests/Localization/MoneyTest.php b/tests/Localization/MoneyTest.php new file mode 100644 index 000000000..72c635358 --- /dev/null +++ b/tests/Localization/MoneyTest.php @@ -0,0 +1,100 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\ISO4217SymbolEnum; +use phpOMS\Localization\Money; + +class MoneyTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $money = new Money(0); + + self::assertObjectHasAttribute('thousands', $money); + self::assertObjectHasAttribute('decimal', $money); + self::assertObjectHasAttribute('value', $money); + + self::assertGreaterThan(0, Money::MAX_DECIMALS); + + self::assertEquals(0, $money->getInt()); + } + + public function testMoney() + { + $money = new Money(12345678); + + self::assertEquals('1,234.57', $money->getAmount()); + self::assertEquals('1,234.5678', $money->getAmount(4)); + self::assertEquals('1,234.5678', $money->getAmount(7)); + + self::assertEquals(12345678, Money::toInt('1234.5678')); + self::assertEquals(12345600, Money::toInt('1,234.56')); + self::assertEquals(12345600, Money::toInt('1234,56', '.', ',')); + } + + public function testMoneySetters() + { + $money = new Money(12345678); + self::assertEquals('999.13', $money->setString('999.13')->getAmount()); + self::assertEquals('999.23', $money->setInt(9992300)->getAmount()); + + self::assertEquals('€9.992,30', $money->setInt(99923000)->setLocalization('.', ',', ISO4217SymbolEnum::_EUR, 0)->getCurrency()); + } + + public function testMoneySerialization() + { + $money = new Money('999.23'); + self::assertEquals(9992300, $money->serialize()); + + $money->unserialize(3331234); + self::assertEquals('333.12', $money->getAmount()); + } + + public function testMoneyAddSub() + { + $money = new Money(10000); + + self::assertEquals('1.0001', $money->add('0.0001')->getAmount(4)); + self::assertEquals('1.0000', $money->sub('0.0001')->getAmount(4)); + + self::assertEquals('2.0000', $money->add(1.0)->getAmount(4)); + self::assertEquals('1.0000', $money->sub(1.0)->getAmount(4)); + + self::assertEquals('1.0001', $money->add(1)->getAmount(4)); + self::assertEquals('1.0000', $money->sub(1)->getAmount(4)); + + self::assertEquals('2.0000', $money->add(new Money(1.0))->getAmount(4)); + self::assertEquals('1.0000', $money->sub(new Money(10000))->getAmount(4)); + } + + public function testMoneyMultDiv() + { + $money = new Money(19100); + + self::assertEquals('3.8200', $money->mult(2.0)->getAmount(4)); + self::assertEquals('1.9100', $money->div(2.0)->getAmount(4)); + } + + public function testMoneyOtherOperations() + { + $money = new Money(-38200); + + self::assertEquals('3.8200', $money->mult(-1)->abs()->getAmount(4)); + self::assertEquals('800.0000', $money->setInt(200)->pow(3)->getAmount(4)); + } +} diff --git a/tests/Localization/NullLocalizationTest.php b/tests/Localization/NullLocalizationTest.php new file mode 100644 index 000000000..9ade73425 --- /dev/null +++ b/tests/Localization/NullLocalizationTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\NullLocalization; +use phpOMS\Localization\Localization; + +class NullLocalizationTest extends \PHPUnit\Framework\TestCase +{ + public function testNullModel() + { + self::assertInstanceOf(Localization::class, new NullLocalization()); + } +} diff --git a/tests/Localization/PhoneEnumTest.php b/tests/Localization/PhoneEnumTest.php new file mode 100644 index 000000000..ffa604476 --- /dev/null +++ b/tests/Localization/PhoneEnumTest.php @@ -0,0 +1,39 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\PhoneEnum; + +class PhoneEnumTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + $ok = true; + + $countryCodes = PhoneEnum::getConstants(); + + foreach ($countryCodes as $code) { + if (strlen($code) < 0 || $code > 9999) { + $ok = false; + break; + } + } + + self::assertTrue($ok); + // phone numbers seem to be not unique (AU, CX) + } +} diff --git a/tests/Localization/TimeZoneEnumArrayTest.php b/tests/Localization/TimeZoneEnumArrayTest.php new file mode 100644 index 000000000..34ca724d3 --- /dev/null +++ b/tests/Localization/TimeZoneEnumArrayTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Localization; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Localization\TimeZoneEnumArray; + +class TimeZoneEnumArrayTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(count(TimeZoneEnumArray::getConstants()), count(array_unique(TimeZoneEnumArray::getConstants()))); + } +} diff --git a/tests/Localization/langTestFile.php b/tests/Localization/langTestFile.php new file mode 100644 index 000000000..f1aac57e9 --- /dev/null +++ b/tests/Localization/langTestFile.php @@ -0,0 +1,6 @@ + [ + 'key' => 'value' + ] +]; \ No newline at end of file diff --git a/tests/Log/2017-12-23.log b/tests/Log/2017-12-23.log new file mode 100644 index 000000000..7fdc0ef4d --- /dev/null +++ b/tests/Log/2017-12-23.log @@ -0,0 +1,2 @@ +2017-12-23 06:28:59; error ; 0.0.0.0 ; 30 ; 7.0.5 ; WINNT ; REQUEST_URI; Unhandled error; C:\Users\coyle\Desktop\Orange-Management\Tests\PHPUnit\phpOMS\UnhandledHandlerTest.php; [{"file":"C:\\Users\\coyle\\Desktop\\Orange-Management\\phpOMS\\Log\\FileLogger.php","line":353,"function":"interpolate","class":"phpOMS\\Log\\FileLogger","object":{},"type":"->"},{"file":"C:\\Users\\coyle\\Desktop\\Orange-Management\\phpOMS\\UnhandledHandler.php","line":82,"function":"error","class":"phpOMS\\Log\\FileLogger","object":{},"type":"->"},{"function":"errorHandler","class":"phpOMS\\UnhandledHandler","type":"::"},{"file":"C:\\Users\\coyle\\Desktop\\Orange-Management\\Tests\\PHPUnit\\phpOMS\\UnhandledHandlerTest.php","line":30,"function":"trigger_error"},{"function":"testErrorHandling","class":"Tests\\PHPUnit\\phpOMS\\UnhandledHandlerTest","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestCase.php","line":1071,"function":"invokeArgs","class":"ReflectionMethod","object":{"name":"testErrorHandling","class":"Tests\\PHPUnit\\phpOMS\\UnhandledHandlerTest"},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestCase.php","line":939,"function":"runTest","class":"PHPUnit\\Framework\\TestCase","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestResult.php","line":698,"function":"runBare","class":"PHPUnit\\Framework\\TestCase","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestCase.php","line":894,"function":"run","class":"PHPUnit\\Framework\\TestResult","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestSuite.php","line":744,"function":"run","class":"PHPUnit\\Framework\\TestCase","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestSuite.php","line":744,"function":"run","class":"PHPUnit\\Framework\\TestSuite","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestSuite.php","line":744,"function":"run","class":"PHPUnit\\Framework\\TestSuite","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/TextUI\/TestRunner.php","line":537,"function":"run","class":"PHPUnit\\Framework\\TestSuite","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/TextUI\/Command.php","line":195,"function":"doRun","class":"PHPUnit\\TextUI\\TestRunner","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/TextUI\/Command.php","line":148,"function":"run","class":"PHPUnit\\TextUI\\Command","object":{},"type":"->"},{"file":"C:\\Users\\coyle\\Desktop\\Orange-Management\\phpunit.phar","line":566,"function":"main","class":"PHPUnit\\TextUI\\Command","type":"::"}] +2017-12-23 06:28:59; error ; 0.0.0.0 ; 0 ; 7.0.5 ; WINNT ; REQUEST_URI; Undefined error; ; [{"file":"C:\\Users\\coyle\\Desktop\\Orange-Management\\phpOMS\\Log\\FileLogger.php","line":353,"function":"interpolate","class":"phpOMS\\Log\\FileLogger","object":{},"type":"->"},{"file":"C:\\Users\\coyle\\Desktop\\Orange-Management\\phpOMS\\UnhandledHandler.php","line":70,"function":"error","class":"phpOMS\\Log\\FileLogger","object":{},"type":"->"},{"file":"C:\\Users\\coyle\\Desktop\\Orange-Management\\Tests\\PHPUnit\\phpOMS\\UnhandledHandlerTest.php","line":34,"function":"errorHandler","class":"phpOMS\\UnhandledHandler","type":"::"},{"function":"testErrorHandling","class":"Tests\\PHPUnit\\phpOMS\\UnhandledHandlerTest","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestCase.php","line":1071,"function":"invokeArgs","class":"ReflectionMethod","object":{"name":"testErrorHandling","class":"Tests\\PHPUnit\\phpOMS\\UnhandledHandlerTest"},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestCase.php","line":939,"function":"runTest","class":"PHPUnit\\Framework\\TestCase","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestResult.php","line":698,"function":"runBare","class":"PHPUnit\\Framework\\TestCase","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestCase.php","line":894,"function":"run","class":"PHPUnit\\Framework\\TestResult","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestSuite.php","line":744,"function":"run","class":"PHPUnit\\Framework\\TestCase","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestSuite.php","line":744,"function":"run","class":"PHPUnit\\Framework\\TestSuite","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestSuite.php","line":744,"function":"run","class":"PHPUnit\\Framework\\TestSuite","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/TextUI\/TestRunner.php","line":537,"function":"run","class":"PHPUnit\\Framework\\TestSuite","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/TextUI\/Command.php","line":195,"function":"doRun","class":"PHPUnit\\TextUI\\TestRunner","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/TextUI\/Command.php","line":148,"function":"run","class":"PHPUnit\\TextUI\\Command","object":{},"type":"->"},{"file":"C:\\Users\\coyle\\Desktop\\Orange-Management\\phpunit.phar","line":566,"function":"main","class":"PHPUnit\\TextUI\\Command","type":"::"}] diff --git a/tests/Log/2018-01-05.log b/tests/Log/2018-01-05.log new file mode 100644 index 000000000..b7414c968 --- /dev/null +++ b/tests/Log/2018-01-05.log @@ -0,0 +1,2 @@ +2018-01-05 09:17:52; error ; 0.0.0.0 ; 29 ; 7.0.5 ; WINNT ; REQUEST_URI; Unhandled error; C:\Users\coyle\Desktop\Orange-Management\Tests\PHPUnit\phpOMS\UnhandledHandlerTest.php; [{"file":"C:\\Users\\coyle\\Desktop\\Orange-Management\\phpOMS\\Log\\FileLogger.php","line":351,"function":"interpolate","class":"phpOMS\\Log\\FileLogger","object":{},"type":"->"},{"file":"C:\\Users\\coyle\\Desktop\\Orange-Management\\phpOMS\\UnhandledHandler.php","line":80,"function":"error","class":"phpOMS\\Log\\FileLogger","object":{},"type":"->"},{"function":"errorHandler","class":"phpOMS\\UnhandledHandler","type":"::"},{"file":"C:\\Users\\coyle\\Desktop\\Orange-Management\\Tests\\PHPUnit\\phpOMS\\UnhandledHandlerTest.php","line":29,"function":"trigger_error"},{"function":"testErrorHandling","class":"Tests\\PHPUnit\\phpOMS\\UnhandledHandlerTest","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestCase.php","line":1071,"function":"invokeArgs","class":"ReflectionMethod","object":{"name":"testErrorHandling","class":"Tests\\PHPUnit\\phpOMS\\UnhandledHandlerTest"},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestCase.php","line":939,"function":"runTest","class":"PHPUnit\\Framework\\TestCase","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestResult.php","line":698,"function":"runBare","class":"PHPUnit\\Framework\\TestCase","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestCase.php","line":894,"function":"run","class":"PHPUnit\\Framework\\TestResult","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestSuite.php","line":744,"function":"run","class":"PHPUnit\\Framework\\TestCase","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestSuite.php","line":744,"function":"run","class":"PHPUnit\\Framework\\TestSuite","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestSuite.php","line":744,"function":"run","class":"PHPUnit\\Framework\\TestSuite","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/TextUI\/TestRunner.php","line":537,"function":"run","class":"PHPUnit\\Framework\\TestSuite","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/TextUI\/Command.php","line":195,"function":"doRun","class":"PHPUnit\\TextUI\\TestRunner","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/TextUI\/Command.php","line":148,"function":"run","class":"PHPUnit\\TextUI\\Command","object":{},"type":"->"},{"file":"C:\\Users\\coyle\\Desktop\\Orange-Management\\phpunit.phar","line":566,"function":"main","class":"PHPUnit\\TextUI\\Command","type":"::"}] +2018-01-05 09:17:52; error ; 0.0.0.0 ; 0 ; 7.0.5 ; WINNT ; REQUEST_URI; Undefined error; ; [{"file":"C:\\Users\\coyle\\Desktop\\Orange-Management\\phpOMS\\Log\\FileLogger.php","line":351,"function":"interpolate","class":"phpOMS\\Log\\FileLogger","object":{},"type":"->"},{"file":"C:\\Users\\coyle\\Desktop\\Orange-Management\\phpOMS\\UnhandledHandler.php","line":68,"function":"error","class":"phpOMS\\Log\\FileLogger","object":{},"type":"->"},{"file":"C:\\Users\\coyle\\Desktop\\Orange-Management\\Tests\\PHPUnit\\phpOMS\\UnhandledHandlerTest.php","line":33,"function":"errorHandler","class":"phpOMS\\UnhandledHandler","type":"::"},{"function":"testErrorHandling","class":"Tests\\PHPUnit\\phpOMS\\UnhandledHandlerTest","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestCase.php","line":1071,"function":"invokeArgs","class":"ReflectionMethod","object":{"name":"testErrorHandling","class":"Tests\\PHPUnit\\phpOMS\\UnhandledHandlerTest"},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestCase.php","line":939,"function":"runTest","class":"PHPUnit\\Framework\\TestCase","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestResult.php","line":698,"function":"runBare","class":"PHPUnit\\Framework\\TestCase","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestCase.php","line":894,"function":"run","class":"PHPUnit\\Framework\\TestResult","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestSuite.php","line":744,"function":"run","class":"PHPUnit\\Framework\\TestCase","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestSuite.php","line":744,"function":"run","class":"PHPUnit\\Framework\\TestSuite","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/Framework\/TestSuite.php","line":744,"function":"run","class":"PHPUnit\\Framework\\TestSuite","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/TextUI\/TestRunner.php","line":537,"function":"run","class":"PHPUnit\\Framework\\TestSuite","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/TextUI\/Command.php","line":195,"function":"doRun","class":"PHPUnit\\TextUI\\TestRunner","object":{},"type":"->"},{"file":"phar:\/\/C:\/Users\/coyle\/Desktop\/Orange-Management\/phpunit.phar\/phpunit\/TextUI\/Command.php","line":148,"function":"run","class":"PHPUnit\\TextUI\\Command","object":{},"type":"->"},{"file":"C:\\Users\\coyle\\Desktop\\Orange-Management\\phpunit.phar","line":566,"function":"main","class":"PHPUnit\\TextUI\\Command","type":"::"}] diff --git a/tests/Log/FileLoggerTest.php b/tests/Log/FileLoggerTest.php new file mode 100644 index 000000000..ca654a2ed --- /dev/null +++ b/tests/Log/FileLoggerTest.php @@ -0,0 +1,171 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Log; + +use phpOMS\Log\FileLogger; +use phpOMS\Log\LogLevel; +use phpOMS\Stdlib\Base\Exception\InvalidEnumValue; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class FileLoggerTest extends \PHPUnit\Framework\TestCase +{ + public function testAttributes() + { + $log = FileLogger::getInstance(__DIR__); + self::assertObjectHasAttribute('fp', $log); + self::assertObjectHasAttribute('path', $log); + + if (file_exists(__DIR__ . '/' . date('Y-m-d') . '.log')) { + unlink(__DIR__ . '/' . date('Y-m-d') . '.log'); + } + } + + public function testDefault() + { + if (file_exists(__DIR__ . '/' . date('Y-m-d') . '.log')) { + unlink(__DIR__ . '/' . date('Y-m-d') . '.log'); + } + + $log = FileLogger::getInstance(__DIR__); + self::assertEquals([], $log->countLogs()); + self::assertEquals([], $log->getHighestPerpetrator()); + self::assertEquals([], $log->get()); + self::assertEquals([], $log->getByLine()); + + if (file_exists(__DIR__ . '/' . date('Y-m-d') . '.log')) { + unlink(__DIR__ . '/' . date('Y-m-d') . '.log'); + } + } + + public function testGetSet() + { + if (file_exists(__DIR__ . '/test.log')) { + unlink(__DIR__ . '/test.log'); + } + + $log = new FileLogger(__DIR__ . '/test.log'); + + $log->emergency(FileLogger::MSG_FULL, [ + 'message' => 'msg', + 'line' => 11, + 'file' => FileLoggerTest::class, + ]); + + $log->alert(FileLogger::MSG_FULL, [ + 'message' => 'msg', + 'line' => 11, + 'file' => FileLoggerTest::class, + ]); + + $log->critical(FileLogger::MSG_FULL, [ + 'message' => 'msg', + 'line' => 11, + 'file' => FileLoggerTest::class, + ]); + + $log->error(FileLogger::MSG_FULL, [ + 'message' => 'msg', + 'line' => 11, + 'file' => FileLoggerTest::class, + ]); + + $log->warning(FileLogger::MSG_FULL, [ + 'message' => 'msg', + 'line' => 11, + 'file' => FileLoggerTest::class, + ]); + + $log->notice(FileLogger::MSG_FULL, [ + 'message' => 'msg', + 'line' => 11, + 'file' => FileLoggerTest::class, + ]); + + $log->info(FileLogger::MSG_FULL, [ + 'message' => 'msg', + 'line' => 11, + 'file' => FileLoggerTest::class, + ]); + + $log->debug(FileLogger::MSG_FULL, [ + 'message' => 'msg', + 'line' => 11, + 'file' => FileLoggerTest::class, + ]); + + $log->log(LogLevel::DEBUG, FileLogger::MSG_FULL, [ + 'message' => 'msg', + 'line' => 11, + 'file' => FileLoggerTest::class, + ]); + + self::assertEquals(1, $log->countLogs()['emergency'] ?? 0); + self::assertEquals(1, $log->countLogs()['alert'] ?? 0); + self::assertEquals(1, $log->countLogs()['critical'] ?? 0); + self::assertEquals(1, $log->countLogs()['error'] ?? 0); + self::assertEquals(1, $log->countLogs()['warning'] ?? 0); + self::assertEquals(1, $log->countLogs()['notice'] ?? 0); + self::assertEquals(1, $log->countLogs()['info'] ?? 0); + self::assertEquals(2, $log->countLogs()['debug'] ?? 0); + + self::assertEquals(['0.0.0.0' => 9], $log->getHighestPerpetrator()); + self::assertEquals([5, 6, 7, 8, 9], array_keys($log->get(5, 1))); + self::assertEquals('alert', $log->getByLine(2)['level']); + + ob_start(); + $log->console('test', true); + $ob = ob_get_clean(); + self::assertEquals(date('[Y-m-d H:i:s] ') . "test\r\n", $ob); + + unlink(__DIR__ . '/test.log'); + + if (file_exists(__DIR__ . '/' . date('Y-m-d') . '.log')) { + unlink(__DIR__ . '/' . date('Y-m-d') . '.log'); + } + } + + /** + * @expectedException phpOMS\Stdlib\Base\Exception\InvalidEnumValue + */ + public function testLogException() + { + $log = new FileLogger(__DIR__ . '/test.log'); + $log->log('testException', FileLogger::MSG_FULL, [ + 'message' => 'msg', + 'line' => 11, + 'file' => FileLoggerTest::class, + ]); + } + + public function testTiming() + { + self::assertTrue(FileLogger::startTimeLog('test')); + self::assertFalse(FileLogger::startTimeLog('test')); + self::assertGreaterThan(0, FileLogger::endTimeLog('test')); + } + + public static function tearDownAfterClass() + { + if (file_exists(__DIR__ . '/test.log')) { + unlink(__DIR__ . '/test.log'); + } + + if (file_exists(__DIR__ . '/' . date('Y-m-d') . '.log')) { + unlink(__DIR__ . '/' . date('Y-m-d') . '.log'); + } + } + +} diff --git a/tests/Log/LogLevelTest.php b/tests/Log/LogLevelTest.php new file mode 100644 index 000000000..5139acff4 --- /dev/null +++ b/tests/Log/LogLevelTest.php @@ -0,0 +1,35 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Log; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Log\LogLevel; + +class LogLevelTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(8, count(LogLevel::getConstants())); + self::assertEquals('emergency', LogLevel::EMERGENCY); + self::assertEquals('alert', LogLevel::ALERT); + self::assertEquals('critical', LogLevel::CRITICAL); + self::assertEquals('error', LogLevel::ERROR); + self::assertEquals('warning', LogLevel::WARNING); + self::assertEquals('notice', LogLevel::NOTICE); + self::assertEquals('info', LogLevel::INFO); + self::assertEquals('debug', LogLevel::DEBUG); + } +} diff --git a/tests/Math/Differential/FiniteDifferenceTest.php b/tests/Math/Differential/FiniteDifferenceTest.php new file mode 100644 index 000000000..51ff9d1f1 --- /dev/null +++ b/tests/Math/Differential/FiniteDifferenceTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Differential; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Differential\FiniteDifference; + +class FiniteDifferenceTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Exception/ZeroDevisionExceptionTest.php b/tests/Math/Exception/ZeroDevisionExceptionTest.php new file mode 100644 index 000000000..6d6e0de32 --- /dev/null +++ b/tests/Math/Exception/ZeroDevisionExceptionTest.php @@ -0,0 +1,26 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Functions; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Functions\Fibunacci; + +class FibunacciTest extends \PHPUnit\Framework\TestCase +{ + public function testFibunacci() + { + self::assertTrue(Fibunacci::isFibunacci(13)); + self::assertTrue(Fibunacci::isFibunacci(55)); + self::assertTrue(Fibunacci::isFibunacci(89)); + self::assertFalse(Fibunacci::isFibunacci(6)); + self::assertFalse(Fibunacci::isFibunacci(87)); + + self::assertEquals(1, Fibunacci::fibunacci(1)); + self::assertTrue(Fibunacci::isFibunacci(Fibunacci::binet(3))); + self::assertTrue(Fibunacci::isFibunacci(Fibunacci::binet(6))); + + self::assertEquals(Fibunacci::binet(6), Fibunacci::fibunacci(6)); + self::assertEquals(Fibunacci::binet(8), Fibunacci::fibunacci(8)); + } +} diff --git a/tests/Math/Functions/FunctionsTest.php b/tests/Math/Functions/FunctionsTest.php new file mode 100644 index 000000000..3af0e26df --- /dev/null +++ b/tests/Math/Functions/FunctionsTest.php @@ -0,0 +1,73 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Functions; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Functions\Functions; + +class FunctionsTest extends \PHPUnit\Framework\TestCase +{ + public function testFactorial() + { + self::assertEquals(Functions::fact(4), Functions::getGammaInteger(5)); + + self::assertEquals(120, Functions::fact(5)); + self::assertEquals(39916800, Functions::fact(11)); + + self::assertEquals(21, Functions::binomialCoefficient(7, 2)); + self::assertEquals(6, Functions::binomialCoefficient(4, 2)); + self::assertEquals(13983816, Functions::binomialCoefficient(49, 6)); + } + + public function testAckermann() + { + self::assertEquals(5, Functions::ackermann(2, 1)); + self::assertEquals(125, Functions::ackermann(3, 4)); + self::assertEquals(5, Functions::ackermann(0, 4)); + self::assertEquals(13, Functions::ackermann(4, 0)); + } + + public function testMultiplicativeInverseModulo() + { + self::assertEquals(4, Functions::invMod(3, -11)); + self::assertEquals(12, Functions::invMod(10, 17)); + } + + public function testAbs() + { + self::assertEquals([1, 3, 4], Functions::abs([-1, 3, -4])); + } + + public function testProperties() + { + self::assertTrue(Functions::isOdd(3)); + self::assertTrue(Functions::isOdd(-3)); + self::assertFalse(Functions::isOdd(4)); + self::assertFalse(Functions::isOdd(-4)); + + self::assertTrue(Functions::isEven(4)); + self::assertTrue(Functions::isEven(-4)); + self::assertFalse(Functions::isEven(3)); + self::assertFalse(Functions::isEven(-3)); + } + + public function testCircularPosition() + { + self::assertEquals(0, Functions::getRelativeDegree(7, 12, 7)); + self::assertEquals(5, Functions::getRelativeDegree(12, 12, 7)); + self::assertEquals(11, Functions::getRelativeDegree(6, 12, 7)); + } +} diff --git a/tests/Math/Geometry/ConvexHull/MonotoneChainTest.php b/tests/Math/Geometry/ConvexHull/MonotoneChainTest.php new file mode 100644 index 000000000..a9d211781 --- /dev/null +++ b/tests/Math/Geometry/ConvexHull/MonotoneChainTest.php @@ -0,0 +1,43 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Geometry\ConvexHull; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Geometry\ConvexHull\MonotoneChain; + +class MonotoneChainTest extends \PHPUnit\Framework\TestCase +{ + public function testMonotoneChain() + { + self::assertEquals([['x' => 9, 'y' => 0]], MonotoneChain::createConvexHull([['x' => 9, 'y' => 0]])); + + $points = []; + for($i = 0; $i < 10; $i++) { + for($j = 0; $j < 10; $j++) { + $points[] = ['x' => $i, 'y' => $j]; + } + } + + self::assertEquals([ + ['x' => 0, 'y' => 0], + ['x' => 9, 'y' => 0], + ['x' => 9, 'y' => 9], + ['x' => 0, 'y' => 9], + ], + MonotoneChain::createConvexHull($points) + ); + } +} diff --git a/tests/Math/Geometry/Shape/D2/CircleTest.php b/tests/Math/Geometry/Shape/D2/CircleTest.php new file mode 100644 index 000000000..4a4b5c9e8 --- /dev/null +++ b/tests/Math/Geometry/Shape/D2/CircleTest.php @@ -0,0 +1,30 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Shape\D2; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Geometry\Shape\D2\Circle; + +class CircleTest extends \PHPUnit\Framework\TestCase +{ + public function testCircle() + { + self::assertEquals(12.57, Circle::getSurface(2), '', 0.01); + self::assertEquals(12.57, Circle::getPerimeter(2), '', 0.01); + self::assertEquals(2.0, Circle::getRadiusBySurface(Circle::getSurface(2)), '', 0.001); + self::assertEquals(2.0, Circle::getRadiusByPerimeter(Circle::getPerimeter(2)), '', 0.001); + } +} diff --git a/tests/Math/Geometry/Shape/D2/EllipseTest.php b/tests/Math/Geometry/Shape/D2/EllipseTest.php new file mode 100644 index 000000000..841b74f57 --- /dev/null +++ b/tests/Math/Geometry/Shape/D2/EllipseTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Shape\D2; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Geometry\Shape\D2\Ellipse; + +class EllipseTest extends \PHPUnit\Framework\TestCase +{ + public function testEllipse() + { + self::assertEquals(6.28, Ellipse::getSurface(2, 1), '', 0.01); + self::assertEquals(9.69, Ellipse::getPerimeter(2, 1), '', 0.01); + } +} diff --git a/tests/Math/Geometry/Shape/D2/PolygonTest.php b/tests/Math/Geometry/Shape/D2/PolygonTest.php new file mode 100644 index 000000000..2730ff57b --- /dev/null +++ b/tests/Math/Geometry/Shape/D2/PolygonTest.php @@ -0,0 +1,104 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Shape\D2; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Geometry\Shape\D2\Polygon; + +class PolygonTest extends \PHPUnit\Framework\TestCase +{ + public function testPoint() + { + $polygon = new Polygon([ + ['x' => 1, 'y' => 1], + ['x' => 1, 'y' => 2], + ['x' => 2, 'y' => 2], + ['x' => 2, 'y' => 1], + ]); + + self::assertEquals(-1, $polygon->pointInPolygon(['x' => 1.5, 'y' => 1.5])); + self::assertEquals(1, $polygon->pointInPolygon(['x' => 4.9, 'y' => 1.2])); + self::assertEquals(-1, $polygon->pointInPolygon(['x' => 1.8, 'y' => 1.1])); + } + + public function testAngle() + { + $polygon = new Polygon([[1, 2], [2, 3], [3, 4]]); + self::assertEquals(180, $polygon->getInteriorAngleSum()); + + $polygon = new Polygon([[1, 2], [2, 3], [3, 4], [4, 5]]); + self::assertEquals(360, $polygon->getInteriorAngleSum()); + + $polygon = new Polygon([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]); + self::assertEquals(540, $polygon->getInteriorAngleSum()); + + $polygon = new Polygon([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]]); + self::assertEquals(720, $polygon->getInteriorAngleSum()); + + $polygon = new Polygon([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], [7, 8]]); + self::assertEquals(900, $polygon->getInteriorAngleSum()); + + $polygon = new Polygon([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], [7, 8], [8, 9]]); + self::assertEquals(1080, $polygon->getInteriorAngleSum()); + + self::assertEquals(360, $polygon->getExteriorAngleSum()); + } + + public function testPerimeter() + { + $polygon = new Polygon([ + ['x' => 2, 'y' => 1], + ['x' => 2, 'y' => 2], + ['x' => 3, 'y' => 3], + ['x' => 4, 'y' => 3], + ['x' => 5, 'y' => 2], + ['x' => 5, 'y' => 1], + ['x' => 4, 'y' => 0], + ['x' => 3, 'y' => 0], + ]); + self::assertEquals(9.6568, $polygon->getPerimeter(), '', 0.1); + } + + public function testArea() + { + $polygon = new Polygon([ + ['x' => 2, 'y' => 1], + ['x' => 2, 'y' => 2], + ['x' => 3, 'y' => 3], + ['x' => 4, 'y' => 3], + ['x' => 5, 'y' => 2], + ['x' => 5, 'y' => 1], + ['x' => 4, 'y' => 0], + ['x' => 3, 'y' => 0], + ]); + self::assertEquals(7, $polygon->getSurface()); + } + + public function testBarycenter() + { + $polygon = new Polygon([ + ['x' => 2, 'y' => 1], + ['x' => 2, 'y' => 2], + ['x' => 3, 'y' => 3], + ['x' => 4, 'y' => 3], + ['x' => 5, 'y' => 2], + ['x' => 5, 'y' => 1], + ['x' => 4, 'y' => 0], + ['x' => 3, 'y' => 0], + ]); + self::assertEquals(['x' => 3.5, 'y' => 1.5], $polygon->getBarycenter(), '', 0.5); + } +} diff --git a/tests/Math/Geometry/Shape/D2/QuadrilateralTest.php b/tests/Math/Geometry/Shape/D2/QuadrilateralTest.php new file mode 100644 index 000000000..efb593f48 --- /dev/null +++ b/tests/Math/Geometry/Shape/D2/QuadrilateralTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Shape\D2; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Geometry\Shape\D2\Quadrilateral; + +class QuadrilateralTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Geometry/Shape/D2/RectangleTest.php b/tests/Math/Geometry/Shape/D2/RectangleTest.php new file mode 100644 index 000000000..4ee63a73c --- /dev/null +++ b/tests/Math/Geometry/Shape/D2/RectangleTest.php @@ -0,0 +1,29 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Shape\D2; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Geometry\Shape\D2\Rectangle; + +class RectangleTest extends \PHPUnit\Framework\TestCase +{ + public function testRectanle() + { + self::assertEquals(10, Rectangle::getSurface(5, 2), '', 0.001); + self::assertEquals(10, Rectangle::getPerimeter(2, 3), '', 0.001); + self::assertEquals(32.7, Rectangle::getDiagonal(30, 13), '', 0.01); + } +} diff --git a/tests/Math/Geometry/Shape/D2/TrapezoidTest.php b/tests/Math/Geometry/Shape/D2/TrapezoidTest.php new file mode 100644 index 000000000..9ccfa728c --- /dev/null +++ b/tests/Math/Geometry/Shape/D2/TrapezoidTest.php @@ -0,0 +1,34 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Shape\D2; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Geometry\Shape\D2\Trapezoid; + +class TrapezoidTest extends \PHPUnit\Framework\TestCase +{ + public function testTrapezoid() + { + self::assertEquals(10, Trapezoid::getSurface(2, 3, 4), '', 0.001); + self::assertEquals(14, Trapezoid::getPerimeter(2, 3, 4, 5), '', 0.001); + self::assertEquals(4, Trapezoid::getHeight(10, 2, 3), '', 0.001); + + self::assertEquals(2, Trapezoid::getA(10, 4, 3), '', 0.001); + self::assertEquals(3, Trapezoid::getB(10, 4, 2), '', 0.001); + self::assertEquals(4, Trapezoid::getC(14, 2, 3, 5), '', 0.001); + self::assertEquals(5, Trapezoid::getD(14, 2, 3, 4), '', 0.001); + } +} diff --git a/tests/Math/Geometry/Shape/D2/TriangleTest.php b/tests/Math/Geometry/Shape/D2/TriangleTest.php new file mode 100644 index 000000000..070324041 --- /dev/null +++ b/tests/Math/Geometry/Shape/D2/TriangleTest.php @@ -0,0 +1,29 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Shape\D2; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Geometry\Shape\D2\Triangle; + +class TriangleTest extends \PHPUnit\Framework\TestCase +{ + public function testTriangle() + { + self::assertEquals(3, Triangle::getSurface(2, 3), '', 0.001); + self::assertEquals(9, Triangle::getPerimeter(2, 3, 4), '', 0.001); + self::assertEquals(3, Triangle::getHeight(3, 2), '', 0.001); + } +} diff --git a/tests/Math/Geometry/Shape/D3/ConeTest.php b/tests/Math/Geometry/Shape/D3/ConeTest.php new file mode 100644 index 000000000..19ae35e74 --- /dev/null +++ b/tests/Math/Geometry/Shape/D3/ConeTest.php @@ -0,0 +1,30 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Geometry\Shape\D3; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Geometry\Shape\D3\Cone; + +class ConeTest extends \PHPUnit\Framework\TestCase +{ + public function testCone() + { + self::assertEquals(12.57, Cone::getVolume(2, 3), '', 0.01); + self::assertEquals(35.22, Cone::getSurface(2, 3), '', 0.01); + self::assertEquals(3.61, Cone::getSlantHeight(2, 3), '', 0.01); + self::assertEquals(3, Cone::getHeightFromVolume(12.57, 2), '', 0.01); + } +} diff --git a/tests/Math/Geometry/Shape/D3/CuboidTest.php b/tests/Math/Geometry/Shape/D3/CuboidTest.php new file mode 100644 index 000000000..4c77efb9f --- /dev/null +++ b/tests/Math/Geometry/Shape/D3/CuboidTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Geometry\Shape\D3; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Geometry\Shape\D3\Cuboid; + +class CuboidTest extends \PHPUnit\Framework\TestCase +{ + public function testCuboid() + { + self::assertEquals(200, Cuboid::getVolume(10, 5, 4), '', 0.001); + self::assertEquals(220, Cuboid::getSurface(10, 5, 4), '', 0.001); + } +} diff --git a/tests/Math/Geometry/Shape/D3/CylinderTest.php b/tests/Math/Geometry/Shape/D3/CylinderTest.php new file mode 100644 index 000000000..61a34548e --- /dev/null +++ b/tests/Math/Geometry/Shape/D3/CylinderTest.php @@ -0,0 +1,29 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Geometry\Shape\D3; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Geometry\Shape\D3\Cylinder; + +class CylinderTest extends \PHPUnit\Framework\TestCase +{ + public function testCylinder() + { + self::assertEquals(37.7, Cylinder::getVolume(2, 3), '', 0.01); + self::assertEquals(62.83, Cylinder::getSurface(2, 3), '', 0.01); + self::assertEquals(37.7, Cylinder::getLateralSurface(2, 3), '', 0.01); + } +} diff --git a/tests/Math/Geometry/Shape/D3/PrismTest.php b/tests/Math/Geometry/Shape/D3/PrismTest.php new file mode 100644 index 000000000..204782480 --- /dev/null +++ b/tests/Math/Geometry/Shape/D3/PrismTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Geometry\Shape\D3; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Geometry\Shape\D3\Prism; + +class PrismTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Geometry/Shape/D3/RectangularPyramidTest.php b/tests/Math/Geometry/Shape/D3/RectangularPyramidTest.php new file mode 100644 index 000000000..1d1f20835 --- /dev/null +++ b/tests/Math/Geometry/Shape/D3/RectangularPyramidTest.php @@ -0,0 +1,29 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Geometry\Shape\D3; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Geometry\Shape\D3\RectangularPyramid; + +class RectangularPyramidTest extends \PHPUnit\Framework\TestCase +{ + public function testCylinder() + { + self::assertEquals(8, RectangularPyramid::getVolume(2, 3, 4), '', 0.01); + self::assertEquals(26.91, RectangularPyramid::getSurface(2, 3, 4), '', 0.01); + self::assertEquals(20.91, RectangularPyramid::getLateralSurface(2, 3, 4), '', 0.01); + } +} diff --git a/tests/Math/Geometry/Shape/D3/SphereTest.php b/tests/Math/Geometry/Shape/D3/SphereTest.php new file mode 100644 index 000000000..fa3341dd8 --- /dev/null +++ b/tests/Math/Geometry/Shape/D3/SphereTest.php @@ -0,0 +1,41 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Geometry\Shape\D3; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Geometry\Shape\D3\Sphere; + +class SphereTest extends \PHPUnit\Framework\TestCase +{ + public function testSphere() + { + $sphere = new Sphere(3); + self::assertEquals(113.1, $sphere->getVolume(), '', 0.1); + self::assertEquals(113.1, $sphere->getSurface(), '', 0.1); + } + + public function testGetBy() + { + $sphere = Sphere::byRadius(3); + self::assertEquals(3, $sphere->getRadius(), '', 0.1); + + $sphere = Sphere::byVolume(4); + self::assertEquals(4, $sphere->getVolume(), '', 0.1); + + $sphere = Sphere::bySurface(5); + self::assertEquals(5, $sphere->getSurface(), '', 0.1); + } +} diff --git a/tests/Math/Geometry/Shape/D3/TetrahedronTest.php b/tests/Math/Geometry/Shape/D3/TetrahedronTest.php new file mode 100644 index 000000000..c86cee452 --- /dev/null +++ b/tests/Math/Geometry/Shape/D3/TetrahedronTest.php @@ -0,0 +1,29 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Geometry\Shape\D3; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Geometry\Shape\D3\Tetrahedron; + +class TetrahedronTest extends \PHPUnit\Framework\TestCase +{ + public function testTetrahedron() + { + self::assertEquals(3.18, Tetrahedron::getVolume(3), '', 0.01); + self::assertEquals(15.59, Tetrahedron::getSurface(3), '', 0.01); + self::assertEquals(3.9, Tetrahedron::getFaceArea(3), '', 0.01); + } +} diff --git a/tests/Math/Integral/GaussTest.php b/tests/Math/Integral/GaussTest.php new file mode 100644 index 000000000..9213c98b3 --- /dev/null +++ b/tests/Math/Integral/GaussTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Integral; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Integral\Gauss; + +class GaussTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Matrix/CholeskyDecompositionTest.php b/tests/Math/Matrix/CholeskyDecompositionTest.php new file mode 100644 index 000000000..f817c30d2 --- /dev/null +++ b/tests/Math/Matrix/CholeskyDecompositionTest.php @@ -0,0 +1,46 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Matrix; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Matrix\Matrix; +use phpOMS\Math\Matrix\Vector; +use phpOMS\Math\Matrix\CholeskyDecomposition; + +class CholeskyDecompositionTest extends \PHPUnit\Framework\TestCase +{ + public function testDecomposition() + { + $A = new Matrix(); + $A->setMatrix([ + [25, 15, -5], + [15, 17, 0], + [-5, 0, 11], + ]); + + $cholesky = new CholeskyDecomposition($A); + + self::assertEquals([ + [5, 0, 0], + [3, 3, 0], + [-1, 1, 3], + ], $cholesky->getL()->toArray(), '', 0.2); + + $vec = new Vector(); + $vec->setMatrix([[40], [49], [28]]); + self::assertEquals([[1], [2], [3]], $cholesky->solve($vec)->toArray(), '', 0.2); + } +} diff --git a/tests/Math/Matrix/Exception/InvalidDimensionExceptionTest.php b/tests/Math/Matrix/Exception/InvalidDimensionExceptionTest.php new file mode 100644 index 000000000..b5c4b8f77 --- /dev/null +++ b/tests/Math/Matrix/Exception/InvalidDimensionExceptionTest.php @@ -0,0 +1,26 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Matrix; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Matrix\IdentityMatrix; + +class IdentityMatrixTest extends \PHPUnit\Framework\TestCase +{ + public function testIdentity() + { + $id = new IdentityMatrix(5); + self::assertEquals( + [ + [1, 0, 0, 0, 0], + [0, 1, 0, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1], + ], + $id->toArray() + ); + } +} diff --git a/tests/Math/Matrix/InverseTypeTest.php b/tests/Math/Matrix/InverseTypeTest.php new file mode 100644 index 000000000..6167eac6d --- /dev/null +++ b/tests/Math/Matrix/InverseTypeTest.php @@ -0,0 +1,30 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Matrix; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Matrix\InverseType; + +class InverseTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(1, count(InverseType::getConstants())); + self::assertEquals(InverseType::getConstants(), array_unique(InverseType::getConstants())); + + self::assertEquals(0, InverseType::GAUSS_JORDAN); + } +} diff --git a/tests/Math/Matrix/LUDecompositionTest.php b/tests/Math/Matrix/LUDecompositionTest.php new file mode 100644 index 000000000..58f0a781c --- /dev/null +++ b/tests/Math/Matrix/LUDecompositionTest.php @@ -0,0 +1,52 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Matrix; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Matrix\Matrix; +use phpOMS\Math\Matrix\Vector; +use phpOMS\Math\Matrix\LUDecomposition; + +class LUDecompositionTest extends \PHPUnit\Framework\TestCase +{ + public function testDecomposition() + { + $B = new Matrix(); + $B->setMatrix([ + [25, 15, -5], + [15, 17, 0], + [-5, 0, 11], + ]); + + $lu = new LUDecomposition($B); + + self::assertEquals([ + [1, 0, 0], + [0.6, 1, 0], + [-0.2, 0.375, 1], + ], $lu->getL()->toArray(), '', 0.2); + + self::assertEquals([ + [25, 15, -5], + [0, 8, 3], + [0, 0, 8.875], + ], $lu->getU()->toArray(), '', 0.2); + + $vec = new Vector(); + $vec->setMatrix([[40], [49], [28]]); + self::assertEquals([[1], [2], [3]], $lu->solve($vec)->toArray(), '', 0.2); + } +} diff --git a/tests/Math/Matrix/MatrixTest.php b/tests/Math/Matrix/MatrixTest.php new file mode 100644 index 000000000..5faa0badf --- /dev/null +++ b/tests/Math/Matrix/MatrixTest.php @@ -0,0 +1,271 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Matrix; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Matrix\Matrix; + +class MatrixTest extends \PHPUnit\Framework\TestCase +{ + protected $A = null; + protected $B = null; + protected $C = null; + + protected function setUp() + { + $this->A = new Matrix(2, 3); + $this->A->setMatrix([ + [1, 0, -2], + [0, 3, -1], + ]); + + $this->B = new Matrix(3, 2); + $this->B->setMatrix([ + [0, 3], + [-2, -1], + [0, 4], + ]); + + $this->C = $this->A->mult($this->B); + } + + public function testBase() + { + self::assertEquals(2, $this->A->getM()); + self::assertEquals(3, $this->A->getN()); + // LU decomposition + } + + public function testMult() + { + self::assertEquals([[0, -5], [-6, -7]], $this->C->getMatrix()); + self::assertEquals([[0, -10], [-12, -14]], $this->C->mult(2)->getMatrix()); + } + + public function testAddSub() + { + $A = new Matrix(); + $A->setMatrix([[1, 2], [3, 4]]); + + self::assertEquals([[1-2, 2-2], [3-2, 4-2]], $A->sub(2)->toArray()); + self::assertEquals([[1+2, 2+2], [3+2, 4+2]], $A->add(2)->toArray()); + + $B = new Matrix(); + $B->setMatrix([[1, 2], [3, 4]]); + + self::assertEquals([[1-1, 2-2], [3-3, 4-4]], $A->sub($B)->toArray()); + self::assertEquals([[1+1, 2+2], [3+3, 4+4]], $A->add($B)->toArray()); + } + + public function testDet() + { + $this->B = new Matrix(); + $this->B->setMatrix([ + [6, 1, 1], + [4, -2, 5], + [2, 8, 7], + ]); + + self::assertEquals(-306, $this->B->det()); + } + + public function testInverse() + { + $A = new Matrix(); + $A->setMatrix([ + [1, -2, 3], + [5, 8, -1], + [2, 1, 1], + ]); + + /*self::assertEquals([ + [-0.9, -0.5, 2.2], + [0.7, 0.5, -1.6], + [1.1, 0.5, -1.8], + ], $A->inverse()->toArray(), '', 0.2);*/ + } + + public function testReduce() + { + self::assertEquals([[-6, -7], [0, -5]], $this->C->upperTriangular()->getMatrix()); + //self::assertEquals([], $this->C->lowerTriangular()->getMatrix()); + //self::assertEquals([], $this->C->diagonalize()->getMatrix()); + } + + public function testGetSet() + { + $id = new Matrix(); + $id->setMatrix([ + [1, 0, 0, 0, 0], + [0, 1, 0, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1], + ]); + + self::assertEquals(1, $id->get(1, 1)); + self::assertEquals(0, $id->get(1, 2)); + + $id->set(1, 2, 4); + self::assertEquals(4, $id->get(1, 2)); + self::assertEquals( + [ + [1, 0, 0, 0, 0], + [0, 1, 4, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1], + ], + $id->toArray() + ); + } + + public function testArrayAccess() + { + $A = new Matrix(); + $A->setMatrix([ + [0, 1, 2, 3], + [4, 5, 6, 7], + [8, 9, 10, 11], + [12, 13, 14, 15], + ]); + + foreach ($A as $key => $value) { + self::assertEquals($key, $value); + } + + self::assertEquals(5, $A[5]); + + $A[5] = 6; + self::assertEquals(6, $A[5]); + + self::assertTrue(isset($A[6])); + self::assertFalse(isset($A[17])); + + unset($A[6]); + self::assertFalse(isset($A[6])); + } + + /** + * @expectedException \phpOMS\Math\Matrix\Exception\InvalidDimensionException + */ + public function invalidSetIndexException() + { + $id = new Matrix(); + $id->setMatrix([ + [1, 0], + [0, 1], + ]); + $id->set(99, 99, 99); + } + + /** + * @expectedException \phpOMS\Math\Matrix\Exception\InvalidDimensionException + */ + public function invalidGetIndexException() + { + $id = new Matrix(); + $id->setMatrix([ + [1, 0], + [0, 1], + ]); + $id->get(99, 99); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function invalidSub() + { + $id = new Matrix(); + $id->setMatrix([ + [1, 0], + [0, 1], + ]); + + $id->sub([]); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function invalidAdd() + { + $id = new Matrix(); + $id->setMatrix([ + [1, 0], + [0, 1], + ]); + + $id->add([]); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function invalidMult() + { + $id = new Matrix(); + $id->setMatrix([ + [1, 0], + [0, 1], + ]); + + $id->mult([]); + } + + /** + * @expectedException \phpOMS\Math\Matrix\Exception\InvalidDimensionException + */ + public function invalidDimensionAdd() + { + $A = new Matrix(); + $A->setMatrix([[1, 2], [3, 4]]); + + $B = new Matrix(); + $B->setMatrix([[1, 2], [3, 4], [5, 6]]); + + $A->add($B); + } + + /** + * @expectedException \phpOMS\Math\Matrix\Exception\InvalidDimensionException + */ + public function invalidDimensionSub() + { + $A = new Matrix(); + $A->setMatrix([[1, 2], [3, 4]]); + + $B = new Matrix(); + $B->setMatrix([[1, 2], [3, 4], [5, 6]]); + + $A->sub($B); + } + + /** + * @expectedException \phpOMS\Math\Matrix\Exception\InvalidDimensionException + */ + public function invalidDimensionMult() + { + $A = new Matrix(); + $A->setMatrix([[1, 2], [3, 4]]); + + $B = new Matrix(); + $B->setMatrix([[1, 2], [3, 4], [5, 6]]); + + $A->mult($B); + } +} diff --git a/tests/Math/Matrix/VectorTest.php b/tests/Math/Matrix/VectorTest.php new file mode 100644 index 000000000..f7120971c --- /dev/null +++ b/tests/Math/Matrix/VectorTest.php @@ -0,0 +1,30 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Matrix; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Matrix\Vector; + +class VectorTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + self::assertInstanceOf('\phpOMS\Math\Matrix\Vector', new Vector()); + + $vec = new Vector(5); + self::assertEquals(5, count($vec->toArray())); + } +} diff --git a/tests/Math/Number/ComplexTest.php b/tests/Math/Number/ComplexTest.php new file mode 100644 index 000000000..de162ae84 --- /dev/null +++ b/tests/Math/Number/ComplexTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Number; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Number\Complex; + +class ComplexTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Number/IntegerTest.php b/tests/Math/Number/IntegerTest.php new file mode 100644 index 000000000..e5216fb5d --- /dev/null +++ b/tests/Math/Number/IntegerTest.php @@ -0,0 +1,52 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Number; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Number\Integer; + +class IntegerTest extends \PHPUnit\Framework\TestCase +{ + public function testInteger() + { + self::assertTrue(Integer::isInteger(4)); + self::assertFalse(Integer::isInteger(1.0)); + self::assertFalse(Integer::isInteger('3')); + + self::assertArraySubset([2, 2, 5, 5], Integer::trialFactorization(100)); + self::assertEquals([], Integer::trialFactorization(1)); + + self::assertEquals(101, Integer::pollardsRho(10403, 2, 1, 2, 2)); + + self::assertEquals([59, 101], Integer::fermatFactor(5959)); + } + + /** + * @expectedException \Exception + */ + public function testInvalidFermatParameter() + { + Integer::fermatFactor(8); + } + + public function testGCD() + { + self::assertEquals(4, Integer::greatestCommonDivisor(4, 4)); + self::assertEquals(6, Integer::greatestCommonDivisor(54, 24)); + self::assertEquals(6, Integer::greatestCommonDivisor(24, 54)); + self::assertEquals(1, Integer::greatestCommonDivisor(7, 13)); + } +} diff --git a/tests/Math/Number/NaturalTest.php b/tests/Math/Number/NaturalTest.php new file mode 100644 index 000000000..a66c64f58 --- /dev/null +++ b/tests/Math/Number/NaturalTest.php @@ -0,0 +1,31 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Number; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Number\Natural; + +class NaturalTest extends \PHPUnit\Framework\TestCase +{ + public function testNatural() + { + self::assertTrue(Natural::isNatural(1235)); + self::assertTrue(Natural::isNatural(0)); + self::assertFalse(Natural::isNatural(-1235)); + self::assertFalse(Natural::isNatural('123')); + self::assertFalse(Natural::isNatural(1.23)); + } +} diff --git a/tests/Math/Number/NumberTypeTest.php b/tests/Math/Number/NumberTypeTest.php new file mode 100644 index 000000000..e3bb2bfe6 --- /dev/null +++ b/tests/Math/Number/NumberTypeTest.php @@ -0,0 +1,38 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Number; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Number\NumberType; + +class NumberTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(9, count(NumberType::getConstants())); + self::assertEquals(NumberType::getConstants(), array_unique(NumberType::getConstants())); + + self::assertEquals(0, NumberType::N_INTEGER); + self::assertEquals(1, NumberType::N_NATURAL); + self::assertEquals(2, NumberType::N_EVEN); + self::assertEquals(4, NumberType::N_UNEVEN); + self::assertEquals(8, NumberType::N_PRIME); + self::assertEquals(16, NumberType::N_REAL); + self::assertEquals(32, NumberType::N_RATIONAL); + self::assertEquals(64, NumberType::N_IRRATIONAL); + self::assertEquals(128, NumberType::N_COMPLEX); + } +} diff --git a/tests/Math/Number/NumbersTest.php b/tests/Math/Number/NumbersTest.php new file mode 100644 index 000000000..6842e636f --- /dev/null +++ b/tests/Math/Number/NumbersTest.php @@ -0,0 +1,47 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Number; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Number\Numbers; + +class NumbersTest extends \PHPUnit\Framework\TestCase +{ + public function testPerfect() + { + self::assertTrue(Numbers::isPerfect(496)); + self::assertTrue(Numbers::isPerfect(8128)); + self::assertFalse(Numbers::isPerfect(7)); + self::assertFalse(Numbers::isPerfect(100)); + } + + public function testSelfdescribing() + { + self::assertFalse(Numbers::isSelfdescribing(2029)); + self::assertTrue(Numbers::isSelfdescribing(21200)); + self::assertTrue(Numbers::isSelfdescribing(3211000)); + } + + public function testSquare() + { + self::assertTrue(Numbers::isSquare(81)); + self::assertTrue(Numbers::isSquare(6561)); + self::assertFalse(Numbers::isSquare(5545348)); + + self::assertEquals(3, Numbers::countTrailingZeros(1000)); + self::assertEquals(5, Numbers::countTrailingZeros(12300000)); + } +} diff --git a/tests/Math/Number/PrimeTest.php b/tests/Math/Number/PrimeTest.php new file mode 100644 index 000000000..f6c5c4e78 --- /dev/null +++ b/tests/Math/Number/PrimeTest.php @@ -0,0 +1,52 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Number; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Number\Prime; + +class PrimeTest extends \PHPUnit\Framework\TestCase +{ + public function testPrime() + { + self::assertTrue(Prime::isPrime(2)); + self::assertTrue(Prime::isPrime(997)); + self::assertFalse(Prime::isPrime(998)); + } + + public function testSieve() + { + self::assertTrue(Prime::isPrime(Prime::sieveOfEratosthenes(12)[3])); + self::assertTrue(Prime::isPrime(Prime::sieveOfEratosthenes(51)[7])); + } + + public function testRabin() + { + self::assertTrue(Prime::rabinTest(2)); + self::assertFalse(Prime::rabinTest(4)); + self::assertFalse(Prime::rabinTest(9)); + self::assertTrue(Prime::rabinTest(997)); + self::assertFalse(Prime::rabinTest(998)); + } + + public function testMersenne() + { + self::assertEquals(2047, Prime::mersenne(11)); + self::assertTrue(Prime::isMersenne(Prime::mersenne(2))); + self::assertTrue(Prime::isMersenne(Prime::mersenne(4))); + self::assertFalse(Prime::isMersenne(2046)); + } +} diff --git a/tests/Math/Numerics/Interpolation/CubicSplineInterpolationTest.php b/tests/Math/Numerics/Interpolation/CubicSplineInterpolationTest.php new file mode 100644 index 000000000..05155a91e --- /dev/null +++ b/tests/Math/Numerics/Interpolation/CubicSplineInterpolationTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Numerics\Interpolation; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Numerics\Interpolation\CubicSplineInterpolation; + +class CubicSplineInterpolationTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} + diff --git a/tests/Math/Numerics/Interpolation/LinearInterpolationTest.php b/tests/Math/Numerics/Interpolation/LinearInterpolationTest.php new file mode 100644 index 000000000..34a9a59a4 --- /dev/null +++ b/tests/Math/Numerics/Interpolation/LinearInterpolationTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Numerics\Interpolation; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Numerics\Interpolation\LinearInterpolation; + +class LinearInterpolationTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} + diff --git a/tests/Math/Numerics/Interpolation/PolynomialInterpolationTest.php b/tests/Math/Numerics/Interpolation/PolynomialInterpolationTest.php new file mode 100644 index 000000000..aaf90978d --- /dev/null +++ b/tests/Math/Numerics/Interpolation/PolynomialInterpolationTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Numerics\Interpolation; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Numerics\Interpolation\PolynomialInterpolation; + +class PolynomialInterpolationTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} + diff --git a/tests/Math/Optimization/AssignmentProblemTest.php b/tests/Math/Optimization/AssignmentProblemTest.php new file mode 100644 index 000000000..6f3b7a500 --- /dev/null +++ b/tests/Math/Optimization/AssignmentProblemTest.php @@ -0,0 +1,26 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\Graph; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\Graph\Dijkstra; + +class DijkstraTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/Graph/FloydWarshallTest.php b/tests/Math/Optimization/Graph/FloydWarshallTest.php new file mode 100644 index 000000000..d100ba923 --- /dev/null +++ b/tests/Math/Optimization/Graph/FloydWarshallTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\Graph; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\Graph\FloydWarshall; + +class FloydWarshallTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/Graph/GraphTest.php b/tests/Math/Optimization/Graph/GraphTest.php new file mode 100644 index 000000000..94e9c88ab --- /dev/null +++ b/tests/Math/Optimization/Graph/GraphTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\Graph; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\Graph\Graph; + +class GraphTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/Graph/NullEdgeTest.php b/tests/Math/Optimization/Graph/NullEdgeTest.php new file mode 100644 index 000000000..65ae26051 --- /dev/null +++ b/tests/Math/Optimization/Graph/NullEdgeTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\Graph; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\Graph\NullEdge; + +class NullEdgeTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/Graph/NullVerticeTest.php b/tests/Math/Optimization/Graph/NullVerticeTest.php new file mode 100644 index 000000000..d6f8a44a8 --- /dev/null +++ b/tests/Math/Optimization/Graph/NullVerticeTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\Graph; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\Graph\NullVertice; + +class NullVerticeTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/Knappsack/BackpackTest.php b/tests/Math/Optimization/Knappsack/BackpackTest.php new file mode 100644 index 000000000..ef7915322 --- /dev/null +++ b/tests/Math/Optimization/Knappsack/BackpackTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\Knappsack; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\Knappsack\Backpack; + +class BackpackTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/Knappsack/BruteForceTest.php b/tests/Math/Optimization/Knappsack/BruteForceTest.php new file mode 100644 index 000000000..fd36960ae --- /dev/null +++ b/tests/Math/Optimization/Knappsack/BruteForceTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\Knappsack; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\Knappsack\BruteForce; + +class BruteForceTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/Knappsack/GATest.php b/tests/Math/Optimization/Knappsack/GATest.php new file mode 100644 index 000000000..a699702ea --- /dev/null +++ b/tests/Math/Optimization/Knappsack/GATest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\Knappsack; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\Knappsack\GA; + +class GATest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/Knappsack/ItemPoolTest.php b/tests/Math/Optimization/Knappsack/ItemPoolTest.php new file mode 100644 index 000000000..fb54cbd1c --- /dev/null +++ b/tests/Math/Optimization/Knappsack/ItemPoolTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\Knappsack; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\Knappsack\ItemPool; + +class ItemPoolTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/Knappsack/ItemTest.php b/tests/Math/Optimization/Knappsack/ItemTest.php new file mode 100644 index 000000000..ff671f60d --- /dev/null +++ b/tests/Math/Optimization/Knappsack/ItemTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\Knappsack; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\Knappsack\Item; + +class ItemTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/Knappsack/PopulationTest.php b/tests/Math/Optimization/Knappsack/PopulationTest.php new file mode 100644 index 000000000..102f271cc --- /dev/null +++ b/tests/Math/Optimization/Knappsack/PopulationTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\Knappsack; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\Knappsack\Population; + +class PopulationTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/ShiftScheduling/BruteForceTest.php b/tests/Math/Optimization/ShiftScheduling/BruteForceTest.php new file mode 100644 index 000000000..3037d8987 --- /dev/null +++ b/tests/Math/Optimization/ShiftScheduling/BruteForceTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\ShiftScheduling; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\ShiftScheduling\BruteForce; + +class BruteForceTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/ShiftScheduling/GATest.php b/tests/Math/Optimization/ShiftScheduling/GATest.php new file mode 100644 index 000000000..655eadef1 --- /dev/null +++ b/tests/Math/Optimization/ShiftScheduling/GATest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\ShiftScheduling; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\ShiftScheduling\GA; + +class GATest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/ShiftScheduling/PopulationTest.php b/tests/Math/Optimization/ShiftScheduling/PopulationTest.php new file mode 100644 index 000000000..a44b33f65 --- /dev/null +++ b/tests/Math/Optimization/ShiftScheduling/PopulationTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\ShiftScheduling; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\ShiftScheduling\Population; + +class PopulationTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/ShiftScheduling/WorkdayTest.php b/tests/Math/Optimization/ShiftScheduling/WorkdayTest.php new file mode 100644 index 000000000..7fcc52e49 --- /dev/null +++ b/tests/Math/Optimization/ShiftScheduling/WorkdayTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\ShiftScheduling; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\ShiftScheduling\Workday; + +class WorkdayTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/ShiftScheduling/WorkerPoolTest.php b/tests/Math/Optimization/ShiftScheduling/WorkerPoolTest.php new file mode 100644 index 000000000..7eb2d91f8 --- /dev/null +++ b/tests/Math/Optimization/ShiftScheduling/WorkerPoolTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\ShiftScheduling; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\ShiftScheduling\WorkerPool; + +class WorkerPoolTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/ShiftScheduling/WorkerTest.php b/tests/Math/Optimization/ShiftScheduling/WorkerTest.php new file mode 100644 index 000000000..e5359507b --- /dev/null +++ b/tests/Math/Optimization/ShiftScheduling/WorkerTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\ShiftScheduling; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\ShiftScheduling\Worker; + +class WorkerTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/TSP/BruteForceTest.php b/tests/Math/Optimization/TSP/BruteForceTest.php new file mode 100644 index 000000000..b13ed3fc7 --- /dev/null +++ b/tests/Math/Optimization/TSP/BruteForceTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\TSP; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\TSP\BruteForce; + +class BruteForceTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/TSP/CityPoolTest.php b/tests/Math/Optimization/TSP/CityPoolTest.php new file mode 100644 index 000000000..b1d47d929 --- /dev/null +++ b/tests/Math/Optimization/TSP/CityPoolTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\TSP; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\TSP\CityPool; + +class CityPoolTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/TSP/CityTest.php b/tests/Math/Optimization/TSP/CityTest.php new file mode 100644 index 000000000..71656c896 --- /dev/null +++ b/tests/Math/Optimization/TSP/CityTest.php @@ -0,0 +1,42 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\TSP; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\TSP\City; + +class CityTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $obj = new City(); + self::assertEquals('', $obj->getName()); + self::assertEquals((float) 0, $obj->getLatitude()); + self::assertEquals((float) 0, $obj->getLongitude()); + self::assertTrue($obj->equals(new City())); + self::assertEquals(0, $obj->getDistanceTo(new City())); + } + + public function testGetSet() + { + $obj = new City(10, 20, 'A'); + self::assertEquals('A', $obj->getName()); + self::assertEquals((float) 10, $obj->getLatitude()); + self::assertEquals((float) 20, $obj->getLongitude()); + self::assertTrue(abs(2476171 - $obj->getDistanceTo(new City())) < 1); + self::assertFalse($obj->equals(new City())); + } +} diff --git a/tests/Math/Optimization/TSP/GATest.php b/tests/Math/Optimization/TSP/GATest.php new file mode 100644 index 000000000..c2266f3b9 --- /dev/null +++ b/tests/Math/Optimization/TSP/GATest.php @@ -0,0 +1,36 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\TSP; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\TSP\GA; +use phpOMS\Math\Optimization\TSP\CityPool; +use phpOMS\Math\Optimization\TSP\City; +use phpOMS\Math\Optimization\TSP\Population; + +class GATest extends \PHPUnit\Framework\TestCase +{ + public function testTsp() + { + $cities = [new City()]; + $cityPool = new CityPool($cities); + $ga = new Ga($cityPool); + + $basePopulation = new Population($cityPool, 1000, true); + $population = $ga->evolvePopulation($basePopulation); + + } +} diff --git a/tests/Math/Optimization/TSP/PopulationTest.php b/tests/Math/Optimization/TSP/PopulationTest.php new file mode 100644 index 000000000..ebad08fb3 --- /dev/null +++ b/tests/Math/Optimization/TSP/PopulationTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\TSP; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\TSP\Population; + +class PopulationTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Optimization/TSP/TourTest.php b/tests/Math/Optimization/TSP/TourTest.php new file mode 100644 index 000000000..970a34ecd --- /dev/null +++ b/tests/Math/Optimization/TSP/TourTest.php @@ -0,0 +1,34 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Optimization\TSP; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Optimization\TSP\Tour; +use phpOMS\Math\Optimization\TSP\CityPool; +use phpOMS\Math\Optimization\TSP\City; + +class TourTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $obj = new Tour(new cityPool(), false); + self::assertEquals(null, $obj->getCity(1)); + self::assertEquals(0.0, $obj->getFitness()); + self::assertEquals(0.0, $obj->getDistance()); + self::assertFalse($obj->hasCity(new City())); + self::assertEquals(0, $obj->count()); + } +} diff --git a/tests/Math/Optimization/TransportationProblemTest.php b/tests/Math/Optimization/TransportationProblemTest.php new file mode 100644 index 000000000..ee1f6a282 --- /dev/null +++ b/tests/Math/Optimization/TransportationProblemTest.php @@ -0,0 +1,26 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Parser; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Parser\Evaluator; + +class EvaluatorTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Statistic/AverageTest.php b/tests/Math/Statistic/AverageTest.php new file mode 100644 index 000000000..6a383e7d3 --- /dev/null +++ b/tests/Math/Statistic/AverageTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Statistic; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Statistic\Average; + +class AverageTest extends \PHPUnit\Framework\TestCase +{ + public function testAverage() + { + self::assertEquals(-3/2, Average::averageDatasetChange([6, 7, 6, 3, 0])); + } +} diff --git a/tests/Math/Statistic/BasicTest.php b/tests/Math/Statistic/BasicTest.php new file mode 100644 index 000000000..1bc23276e --- /dev/null +++ b/tests/Math/Statistic/BasicTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Statistic; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Statistic\Basic; + +class BasicTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Statistic/CorrelationTest.php b/tests/Math/Statistic/CorrelationTest.php new file mode 100644 index 000000000..108417227 --- /dev/null +++ b/tests/Math/Statistic/CorrelationTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Statistic; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Statistic\Correlation; + +class CorrelationTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Statistic/Forecast/ErrorTest.php b/tests/Math/Statistic/Forecast/ErrorTest.php new file mode 100644 index 000000000..affdf57f4 --- /dev/null +++ b/tests/Math/Statistic/Forecast/ErrorTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Statistic\Forecast; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Statistic\Forecast\Error; + +class ErrorTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Statistic/Forecast/ForecastIntervalMultiplierTest.php b/tests/Math/Statistic/Forecast/ForecastIntervalMultiplierTest.php new file mode 100644 index 000000000..bdeead7b0 --- /dev/null +++ b/tests/Math/Statistic/Forecast/ForecastIntervalMultiplierTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Statistic\Forecast; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Statistic\Forecast\ForecastIntervalMultiplier; + +class ForecastIntervalMultiplierTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Statistic/Forecast/ForecastsTest.php b/tests/Math/Statistic/Forecast/ForecastsTest.php new file mode 100644 index 000000000..4042723a8 --- /dev/null +++ b/tests/Math/Statistic/Forecast/ForecastsTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Statistic\Forecast; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Statistic\Forecast\Forecasts; + +class ForecastsTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Statistic/Forecast/Regression/LevelLevelRegressionTest.php b/tests/Math/Statistic/Forecast/Regression/LevelLevelRegressionTest.php new file mode 100644 index 000000000..eb4b95be8 --- /dev/null +++ b/tests/Math/Statistic/Forecast/Regression/LevelLevelRegressionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Statistic\Forecast\Regression; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Statistic\Forecast\Regression\LevelLevelRegression; + +class LevelLevelRegressionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Statistic/Forecast/Regression/LevelLogRegressionTest.php b/tests/Math/Statistic/Forecast/Regression/LevelLogRegressionTest.php new file mode 100644 index 000000000..ff79ded7b --- /dev/null +++ b/tests/Math/Statistic/Forecast/Regression/LevelLogRegressionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Statistic\Forecast\Regression; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Statistic\Forecast\Regression\LevelLogRegression; + +class LevelLogRegressionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Statistic/Forecast/Regression/LogLevelRegressionTest.php b/tests/Math/Statistic/Forecast/Regression/LogLevelRegressionTest.php new file mode 100644 index 000000000..9e9b2cbe4 --- /dev/null +++ b/tests/Math/Statistic/Forecast/Regression/LogLevelRegressionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Statistic\Forecast\Regression; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Statistic\Forecast\Regression\LogLevelRegression; + +class LogLevelRegressionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Statistic/Forecast/Regression/LogLogRegressionTest.php b/tests/Math/Statistic/Forecast/Regression/LogLogRegressionTest.php new file mode 100644 index 000000000..94afbcacd --- /dev/null +++ b/tests/Math/Statistic/Forecast/Regression/LogLogRegressionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Statistic\Forecast\Regression; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Statistic\Forecast\Regression\LogLogRegression; + +class LogLogRegressionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Statistic/Forecast/Regression/MultipleLinearRegressionTest.php b/tests/Math/Statistic/Forecast/Regression/MultipleLinearRegressionTest.php new file mode 100644 index 000000000..113edf00e --- /dev/null +++ b/tests/Math/Statistic/Forecast/Regression/MultipleLinearRegressionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Statistic\Forecast\Regression; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Statistic\Forecast\Regression\MultipleLinearRegression; + +class MultipleLinearRegressionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Statistic/MeasureOfDispersionTest.php b/tests/Math/Statistic/MeasureOfDispersionTest.php new file mode 100644 index 000000000..ce0c1bd54 --- /dev/null +++ b/tests/Math/Statistic/MeasureOfDispersionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Statistic; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Statistic\MeasureOfDispersion; + +class MeasureOfDispersionTest extends \PHPUnit\Framework\TestCase +{ + public function testRange() + { + self::assertEquals((float) (9 - 1), MeasureOfDispersion::range([4, 5, 9, 1, 3])); + } +} diff --git a/tests/Math/Stochastic/Distribution/BernoulliDistributionTest.php b/tests/Math/Stochastic/Distribution/BernoulliDistributionTest.php new file mode 100644 index 000000000..8de9d6d96 --- /dev/null +++ b/tests/Math/Stochastic/Distribution/BernoulliDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\BernoulliDistribution; + +class BernoulliDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/BetaDistributionTest.php b/tests/Math/Stochastic/Distribution/BetaDistributionTest.php new file mode 100644 index 000000000..4125d2ac8 --- /dev/null +++ b/tests/Math/Stochastic/Distribution/BetaDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\BetaDistribution; + +class BetaDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/BinomialDistributionTest.php b/tests/Math/Stochastic/Distribution/BinomialDistributionTest.php new file mode 100644 index 000000000..a4ce5d6de --- /dev/null +++ b/tests/Math/Stochastic/Distribution/BinomialDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\BinomialDistribution; + +class BinomialDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/CauchyDistributionTest.php b/tests/Math/Stochastic/Distribution/CauchyDistributionTest.php new file mode 100644 index 000000000..087df08f3 --- /dev/null +++ b/tests/Math/Stochastic/Distribution/CauchyDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\CauchyDistribution; + +class CauchyDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/ChiSquaredDistributionTest.php b/tests/Math/Stochastic/Distribution/ChiSquaredDistributionTest.php new file mode 100644 index 000000000..5816cc733 --- /dev/null +++ b/tests/Math/Stochastic/Distribution/ChiSquaredDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\ChiSquaredDistribution; + +class ChiSquaredDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/ExponentialDistributionTest.php b/tests/Math/Stochastic/Distribution/ExponentialDistributionTest.php new file mode 100644 index 000000000..556e53d9b --- /dev/null +++ b/tests/Math/Stochastic/Distribution/ExponentialDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\ExponentialDistribution; + +class ExponentialDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/FDistributionTest.php b/tests/Math/Stochastic/Distribution/FDistributionTest.php new file mode 100644 index 000000000..29da28c61 --- /dev/null +++ b/tests/Math/Stochastic/Distribution/FDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\FDistribution; + +class FDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/GammaDistributionTest.php b/tests/Math/Stochastic/Distribution/GammaDistributionTest.php new file mode 100644 index 000000000..a870d6c35 --- /dev/null +++ b/tests/Math/Stochastic/Distribution/GammaDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\GammaDistribution; + +class GammaDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/GeometricDistributionTest.php b/tests/Math/Stochastic/Distribution/GeometricDistributionTest.php new file mode 100644 index 000000000..cd30d83f3 --- /dev/null +++ b/tests/Math/Stochastic/Distribution/GeometricDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\GeometricDistribution; + +class GeometricDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/HypergeometricDistributionTest.php b/tests/Math/Stochastic/Distribution/HypergeometricDistributionTest.php new file mode 100644 index 000000000..243e88aaa --- /dev/null +++ b/tests/Math/Stochastic/Distribution/HypergeometricDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\HypergeometricDistribution; + +class HypergeometricDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/LaplaceDistributionTest.php b/tests/Math/Stochastic/Distribution/LaplaceDistributionTest.php new file mode 100644 index 000000000..126079262 --- /dev/null +++ b/tests/Math/Stochastic/Distribution/LaplaceDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\LaplaceDistribution; + +class LaplaceDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/LogDistributionTest.php b/tests/Math/Stochastic/Distribution/LogDistributionTest.php new file mode 100644 index 000000000..38f74b1f5 --- /dev/null +++ b/tests/Math/Stochastic/Distribution/LogDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\LogDistribution; + +class LogDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/LogNormalDistributionTest.php b/tests/Math/Stochastic/Distribution/LogNormalDistributionTest.php new file mode 100644 index 000000000..693dce815 --- /dev/null +++ b/tests/Math/Stochastic/Distribution/LogNormalDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\LogNormalDistribution; + +class LogNormalDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/LogisticDistributionTest.php b/tests/Math/Stochastic/Distribution/LogisticDistributionTest.php new file mode 100644 index 000000000..66eb0df8b --- /dev/null +++ b/tests/Math/Stochastic/Distribution/LogisticDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\LogisticDistribution; + +class LogisticDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/NormalDistributionTest.php b/tests/Math/Stochastic/Distribution/NormalDistributionTest.php new file mode 100644 index 000000000..a4879e8ab --- /dev/null +++ b/tests/Math/Stochastic/Distribution/NormalDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\NormalDistribution; + +class NormalDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/ParetoDistributionTest.php b/tests/Math/Stochastic/Distribution/ParetoDistributionTest.php new file mode 100644 index 000000000..43a2109cd --- /dev/null +++ b/tests/Math/Stochastic/Distribution/ParetoDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\ParetoDistribution; + +class ParetoDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/PoissonDistributionTest.php b/tests/Math/Stochastic/Distribution/PoissonDistributionTest.php new file mode 100644 index 000000000..de638887b --- /dev/null +++ b/tests/Math/Stochastic/Distribution/PoissonDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\PoissonDistribution; + +class PoissonDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/TDistributionTest.php b/tests/Math/Stochastic/Distribution/TDistributionTest.php new file mode 100644 index 000000000..9f76baff3 --- /dev/null +++ b/tests/Math/Stochastic/Distribution/TDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\TDistribution; + +class TDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/UniformDistributionContinuousTest.php b/tests/Math/Stochastic/Distribution/UniformDistributionContinuousTest.php new file mode 100644 index 000000000..31fcd23cd --- /dev/null +++ b/tests/Math/Stochastic/Distribution/UniformDistributionContinuousTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\UniformDistributionContinuous; + +class UniformDistributionContinuousTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/UniformDistributionDiscreteTest.php b/tests/Math/Stochastic/Distribution/UniformDistributionDiscreteTest.php new file mode 100644 index 000000000..21e626929 --- /dev/null +++ b/tests/Math/Stochastic/Distribution/UniformDistributionDiscreteTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\UniformDistributionDiscrete; + +class UniformDistributionDiscreteTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/Distribution/WeibullDistributionTest.php b/tests/Math/Stochastic/Distribution/WeibullDistributionTest.php new file mode 100644 index 000000000..d4530a66f --- /dev/null +++ b/tests/Math/Stochastic/Distribution/WeibullDistributionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Math\Stochastic\Distribution; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Math\Stochastic\Distribution\WeibullDistribution; + +class WeibullDistributionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Math/Stochastic/NaiveBayesFilterTest.php b/tests/Math/Stochastic/NaiveBayesFilterTest.php new file mode 100644 index 000000000..725428a67 --- /dev/null +++ b/tests/Math/Stochastic/NaiveBayesFilterTest.php @@ -0,0 +1,26 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Message\Http; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Message\Http\BrowserType; + +class BrowserTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(11, BrowserType::count()); + self::assertEquals(BrowserType::getConstants(), array_unique(BrowserType::getConstants())); + + self::assertEquals('msie', BrowserType::IE); + self::assertEquals('edge', BrowserType::EDGE); + self::assertEquals('firefox', BrowserType::FIREFOX); + self::assertEquals('safari', BrowserType::SAFARI); + self::assertEquals('chrome', BrowserType::CHROME); + self::assertEquals('opera', BrowserType::OPERA); + self::assertEquals('netscape', BrowserType::NETSCAPE); + self::assertEquals('maxthon', BrowserType::MAXTHON); + self::assertEquals('konqueror', BrowserType::KONQUEROR); + self::assertEquals('mobile', BrowserType::HANDHELD); + self::assertEquals('blink', BrowserType::BLINK); + } +} diff --git a/tests/Message/Http/HeaderTest.php b/tests/Message/Http/HeaderTest.php new file mode 100644 index 000000000..7b76f1c05 --- /dev/null +++ b/tests/Message/Http/HeaderTest.php @@ -0,0 +1,103 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Message\Http; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Message\Http\Header; +use phpOMS\Localization\Localization; +use phpOMS\Message\Http\RequestStatusCode; + +class HeaderTest extends \PHPUnit\Framework\TestCase +{ + public function testDefaults() + { + $header = new Header(); + self::assertFalse($header->isLocked()); + self::assertEquals(0, $header->getStatusCode()); + self::assertEquals('HTTP/1.1', $header->getProtocolVersion()); + self::assertEmpty(Header::getAllHeaders()); + self::assertEquals('', $header->getReasonPhrase()); + self::assertEquals([], $header->get('key')); + self::assertFalse($header->has('key')); + self::assertInstanceOf(Localization::class, $header->getL11n()); + self::assertEquals(0, $header->getAccount()); + } + + public function testSecurityHeader() + { + self::assertTrue(Header::isSecurityHeader('content-security-policy')); + self::assertTrue(Header::isSecurityHeader('X-xss-protection')); + self::assertTrue(Header::isSecurityHeader('x-conTent-tYpe-options')); + self::assertTrue(Header::isSecurityHeader('x-frame-options')); + + self::assertFalse(Header::isSecurityHeader('x-frame-optionss')); + } + + public function testGetSet() + { + $header = new Header(); + + self::assertTrue($header->set('key', 'header')); + self::assertEquals(['header'], $header->get('key')); + self::assertTrue($header->has('key')); + + self::assertFalse($header->set('key', 'header2')); + self::assertEquals(['header'], $header->get('key')); + + self::assertTrue($header->set('key', 'header3', true)); + self::assertEquals(['header3'], $header->get('key')); + + self::assertTrue($header->remove('key')); + self::assertFalse($header->has('key')); + self::assertFalse($header->remove('key')); + + $header->setAccount(2); + self::AssertEquals(2, $header->getAccount(2)); + } + + public function testGeneration() + { + $header = new Header(); + + $header->generate(RequestStatusCode::R_403); + self::assertEquals(403, \http_response_code()); + + $header->generate(RequestStatusCode::R_404); + self::assertEquals(404, \http_response_code()); + + $header->generate(RequestStatusCode::R_406); + self::assertEquals(406, \http_response_code()); + + $header->generate(RequestStatusCode::R_407); + self::assertEquals(407, \http_response_code()); + + $header->generate(RequestStatusCode::R_503); + self::assertEquals(503, \http_response_code()); + + $header->generate(RequestStatusCode::R_500); + self::assertEquals(500, \http_response_code()); + } + + /** + * @expectedException \Exception + */ + public function testOverwriteSecurityHeader() + { + $header = new Header(); + self::assertTrue($header->set('content-security-policy', 'header')); + $header->set('content-security-policy', 'header', true); + } +} diff --git a/tests/Message/Http/OSTypeTest.php b/tests/Message/Http/OSTypeTest.php new file mode 100644 index 000000000..0a730ea65 --- /dev/null +++ b/tests/Message/Http/OSTypeTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Message\Http; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Message\Http\OSType; + +class OSTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(23, count(OSType::getConstants())); + self::assertEquals(OSType::getConstants(), array_unique(OSType::getConstants())); + } +} diff --git a/tests/Message/Http/RequestMethodTest.php b/tests/Message/Http/RequestMethodTest.php new file mode 100644 index 000000000..b79f7a1b6 --- /dev/null +++ b/tests/Message/Http/RequestMethodTest.php @@ -0,0 +1,35 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Message\Http; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Message\Http\RequestMethod; + +class RequestMethodTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(6, count(RequestMethod::getConstants())); + self::assertEquals(RequestMethod::getConstants(), array_unique(RequestMethod::getConstants())); + + self::assertEquals('GET', RequestMethod::GET); + self::assertEquals('POST', RequestMethod::POST); + self::assertEquals('PUT', RequestMethod::PUT); + self::assertEquals('DELETE', RequestMethod::DELETE); + self::assertEquals('HEAD', RequestMethod::HEAD); + self::assertEquals('TRACE', RequestMethod::TRACE); + } +} diff --git a/tests/Message/Http/RequestStatusCodeTest.php b/tests/Message/Http/RequestStatusCodeTest.php new file mode 100644 index 000000000..039d3ee79 --- /dev/null +++ b/tests/Message/Http/RequestStatusCodeTest.php @@ -0,0 +1,83 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Message\Http; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Message\Http\RequestStatus; + +class RequestStatusTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(55, count(RequestStatus::getConstants())); + self::assertEquals(RequestStatus::getConstants(), array_unique(RequestStatus::getConstants())); + + self::assertEquals('Continue', RequestStatus::R_100); + self::assertEquals('Switching Protocols', RequestStatus::R_101); + self::assertEquals('Processing', RequestStatus::R_102); + self::assertEquals('OK', RequestStatus::R_200); + self::assertEquals('Created', RequestStatus::R_201); + self::assertEquals('Accepted', RequestStatus::R_202); + self::assertEquals('Non-Authoritative Information', RequestStatus::R_203); + self::assertEquals('No Content', RequestStatus::R_204); + self::assertEquals('Reset Content', RequestStatus::R_205); + self::assertEquals('Partial Content', RequestStatus::R_206); + self::assertEquals('Multi-Status', RequestStatus::R_207); + self::assertEquals('Multiple Choices', RequestStatus::R_300); + self::assertEquals('Moved Permanently', RequestStatus::R_301); + self::assertEquals('Found', RequestStatus::R_302); + self::assertEquals('See Other', RequestStatus::R_303); + self::assertEquals('Not Modified', RequestStatus::R_304); + self::assertEquals('Use Proxy', RequestStatus::R_305); + self::assertEquals('Switch Proxy', RequestStatus::R_306); + self::assertEquals('Temporary Redirect', RequestStatus::R_307); + self::assertEquals('Bad Request', RequestStatus::R_400); + self::assertEquals('Unauthorized', RequestStatus::R_401); + self::assertEquals('Payment Required', RequestStatus::R_402); + self::assertEquals('Forbidden', RequestStatus::R_403); + self::assertEquals('Not Found', RequestStatus::R_404); + self::assertEquals('Method Not Allowed', RequestStatus::R_405); + self::assertEquals('Not Acceptable', RequestStatus::R_406); + self::assertEquals('Proxy Authentication Required', RequestStatus::R_407); + self::assertEquals('Request Timeout', RequestStatus::R_408); + self::assertEquals('Conflict', RequestStatus::R_409); + self::assertEquals('Gone', RequestStatus::R_410); + self::assertEquals('Length Required', RequestStatus::R_411); + self::assertEquals('Precondition Failed', RequestStatus::R_412); + self::assertEquals('Request Entity Too Large', RequestStatus::R_413); + self::assertEquals('Request-URI Too Long', RequestStatus::R_414); + self::assertEquals('Unsupported Media Type', RequestStatus::R_415); + self::assertEquals('Requested Range Not Satisfiable', RequestStatus::R_416); + self::assertEquals('Expectation Failed', RequestStatus::R_417); + self::assertEquals('I\'m a teapot', RequestStatus::R_418); + self::assertEquals('Unprocessable Entity', RequestStatus::R_422); + self::assertEquals('Locked', RequestStatus::R_423); + self::assertEquals('Failed Dependency', RequestStatus::R_424); + self::assertEquals('Unordered Collection', RequestStatus::R_425); + self::assertEquals('Upgrade Required', RequestStatus::R_426); + self::assertEquals('Retry With', RequestStatus::R_449); + self::assertEquals('Blocked by Windows Parental Controls', RequestStatus::R_450); + self::assertEquals('Internal Server Error', RequestStatus::R_500); + self::assertEquals('Not Implemented', RequestStatus::R_501); + self::assertEquals('Bad Gateway', RequestStatus::R_502); + self::assertEquals('Service Unavailable', RequestStatus::R_503); + self::assertEquals('Gateway Timeout', RequestStatus::R_504); + self::assertEquals('HTTP Version Not Supported', RequestStatus::R_505); + self::assertEquals('Variant Also Negotiates', RequestStatus::R_506); + self::assertEquals('Insufficient Storage', RequestStatus::R_507); + self::assertEquals('Bandwidth Limit Exceeded', RequestStatus::R_509); + self::assertEquals('Not Extended', RequestStatus::R_510); + } +} diff --git a/tests/Message/Http/RequestTest.php b/tests/Message/Http/RequestTest.php new file mode 100644 index 000000000..9f67036e7 --- /dev/null +++ b/tests/Message/Http/RequestTest.php @@ -0,0 +1,118 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Message\Http; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Message\Http\Request; +use phpOMS\Message\Http\Header; +use phpOMS\Message\Http\OSType; +use phpOMS\Message\Http\BrowserType; +use phpOMS\Message\Http\RequestMethod; +use phpOMS\Message\RequestSource; +use phpOMS\Localization\Localization; +use phpOMS\Router\RouteVerb; +use phpOMS\Uri\Http; + +class RequestTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $request = new Request(); + + self::assertEquals('en', $request->getHeader()->getL11n()->getLanguage()); + self::assertFalse($request->isMobile()); + self::assertEquals(BrowserType::CHROME, $request->getBrowser()); + self::assertEquals(OSType::LINUX, $request->getOS()); + self::assertEquals('127.0.0.1', $request->getOrigin()); + self::assertFalse($request->isHttps()); + self::assertEquals([], $request->getHash()); + self::assertEmpty($request->getBody()); + self::assertEquals('/', $request->getRequestTarget()); + self::assertEmpty([], $request->getFiles()); + self::assertEquals(RouteVerb::GET, $request->getRouteVerb()); + self::assertEquals(RequestMethod::GET, $request->getMethod()); + self::assertEquals(RequestSource::WEB, $request->getRequestSource()); + self::assertInstanceOf('\phpOMS\Message\Http\Header', $request->getHeader()); + self::assertInstanceOf('\phpOMS\Message\Http\Request', Request::createFromSuperglobals()); + self::assertEquals('http://', $request->__toString()); + } + + public function testSetGet() + { + $request = new Request(new Http('http://www.google.com/test/path'), $l11n = new Localization()); + + $request->setOS(OSType::WINDOWS_XP); + self::assertEquals(OSType::WINDOWS_XP, $request->getOS()); + + $request->setBrowser(BrowserType::EDGE); + self::assertEquals(BrowserType::EDGE, $request->getBrowser()); + self::assertEquals(['browser' => BrowserType::EDGE, 'os' => OSType::WINDOWS_XP], $request->getRequestInfo()); + + $request->setMethod(RequestMethod::PUT); + self::assertEquals(RequestMethod::PUT, $request->getMethod()); + self::assertEquals(RouteVerb::PUT, $request->getRouteVerb()); + + $request->setMethod(RequestMethod::DELETE); + self::assertEquals(RequestMethod::DELETE, $request->getMethod()); + self::assertEquals(RouteVerb::DELETE, $request->getRouteVerb()); + + $request->setMethod(RequestMethod::POST); + self::assertEquals(RequestMethod::POST, $request->getMethod()); + self::assertEquals(RouteVerb::SET, $request->getRouteVerb()); + + self::assertEquals('http://www.google.com/test/path', $request->getUri()->__toString()); + + $request->createRequestHashs(0); + self::assertEquals('http://www.google.com/test/path', $request->__toString()); + + self::assertEquals([ + 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3', + '328413d996ab9b79af9d4098af3a65b885c4ca64' + ], $request->getHash()); + self::assertEquals($l11n, $request->getHeader()->getL11n()); + + self::assertTrue($request->setData('key', 'value')); + self::assertFalse($request->setData('key', 'value2', false)); + self::assertEquals('value', $request->getData('key')); + self::assertEquals(['key' => 'value'], $request->getData()); + + $request->setRequestSource(RequestSource::SOCKET); + self::assertEquals(RequestSource::SOCKET, $request->getRequestSource()); + + $request->setUri(new Http('http://www.google.com/test/path2')); + $request->createRequestHashs(0); + + self::assertEquals('http://www.google.com/test/path2', $request->__toString()); + } + + /** + * @expectedException \phpOMS\Stdlib\Base\Exception\InvalidEnumValue + */ + public function testInvalidRequestSource() + { + $request = new Request(new Http('http://www.google.com/test/path')); + $request->setRequestSource(999); + } + + /** + * @expectedException \OutOfRangeException + */ + public function testInvalidHttpsPort() + { + $request = new Request(new Http('http://www.google.com/test/path')); + $request->isHttps(-1); + } +} diff --git a/tests/Message/Http/ResponseTest.php b/tests/Message/Http/ResponseTest.php new file mode 100644 index 000000000..a479efd26 --- /dev/null +++ b/tests/Message/Http/ResponseTest.php @@ -0,0 +1,42 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Message\Http; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Message\Http\Response; +use phpOMS\Localization\Localization; + +class ResponseTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $response = new Response(new Localization()); + self::assertEquals('', $response->getBody()); + self::assertEquals('', $response->render()); + self::assertEquals([], $response->toArray()); + self::assertInstanceOf('\phpOMS\Localization\Localization', $response->getHeader()->getL11n()); + self::assertInstanceOf('\phpOMS\Message\Http\Header', $response->getHeader()); + } + + public function testSetGet() + { + $response = new Response(new Localization()); + + $response->setResponse(['a' => 1]); + self::assertTrue($response->remove('a')); + self::assertFalse($response->remove('a')); + } +} diff --git a/tests/Message/Http/RestTest.php b/tests/Message/Http/RestTest.php new file mode 100644 index 000000000..6321e3a9b --- /dev/null +++ b/tests/Message/Http/RestTest.php @@ -0,0 +1,38 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Message\Http; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Message\Http\Rest; +use phpOMS\Message\Http\Request; +use phpOMS\Message\Http\RequestMethod; +use phpOMS\Localization\Localization; +use phpOMS\Uri\Http; + +class RestTest extends \PHPUnit\Framework\TestCase +{ + public function testRequest() + { + $request = new Request(new Http('http://orange-management.de/phpOMS/LICENSE.txt')); + $request->setMethod(RequestMethod::GET); + + self::assertEquals( + "The OMS License 1.0\n\nCopyright (c) All Rights Reserved\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.", + Rest::request($request) + ); + } +} + diff --git a/tests/Message/Mail/ImapTest.php b/tests/Message/Mail/ImapTest.php new file mode 100644 index 000000000..7324a3c8d --- /dev/null +++ b/tests/Message/Mail/ImapTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Message\Mail; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Message\Mail\Imap; + +class ImapTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Message/Mail/MailTest.php b/tests/Message/Mail/MailTest.php new file mode 100644 index 000000000..479ab6770 --- /dev/null +++ b/tests/Message/Mail/MailTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Message\Mail; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Message\Mail\Mail; + +class MailTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Message/Mail/NntpTest.php b/tests/Message/Mail/NntpTest.php new file mode 100644 index 000000000..50e6a5ad5 --- /dev/null +++ b/tests/Message/Mail/NntpTest.php @@ -0,0 +1,26 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Message\Mail; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Message\Mail\Pop3; + +class Pop3Test extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Message/RequestSourceTest.php b/tests/Message/RequestSourceTest.php new file mode 100644 index 000000000..b4aa52954 --- /dev/null +++ b/tests/Message/RequestSourceTest.php @@ -0,0 +1,31 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Message; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Message\RequestSource; + +class RequestSourceTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(4, count(RequestSource::getConstants())); + self::assertEquals(0, RequestSource::WEB); + self::assertEquals(1, RequestSource::CONSOLE); + self::assertEquals(2, RequestSource::SOCKET); + self::assertEquals(3, RequestSource::UNDEFINED); + } +} diff --git a/tests/Message/ResponseTypeTest.php b/tests/Message/ResponseTypeTest.php new file mode 100644 index 000000000..597b2562d --- /dev/null +++ b/tests/Message/ResponseTypeTest.php @@ -0,0 +1,30 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Message; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Message\ResponseType; + +class ResponseTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(3, count(ResponseType::getConstants())); + self::assertEquals(0, ResponseType::HTTP); + self::assertEquals(1, ResponseType::SOCKET); + self::assertEquals(2, ResponseType::CONSOLE); + } +} diff --git a/tests/Message/Socket/RequestTest.php b/tests/Message/Socket/RequestTest.php new file mode 100644 index 000000000..90c56de5f --- /dev/null +++ b/tests/Message/Socket/RequestTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Message\Socket; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Message\Socket\Request; + +class RequestTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Message/Socket/ResponseTest.php b/tests/Message/Socket/ResponseTest.php new file mode 100644 index 000000000..8db1c2d77 --- /dev/null +++ b/tests/Message/Socket/ResponseTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Message\Socket; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Message\Socket\Response; + +class ResponseTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Model/Html/HeadTest.php b/tests/Model/Html/HeadTest.php new file mode 100644 index 000000000..03043fe47 --- /dev/null +++ b/tests/Model/Html/HeadTest.php @@ -0,0 +1,37 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Model\Html; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Model\Html\Head; + +class HeadTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $head = new Head(); + self::assertInstanceOf('\phpOMS\Model\Html\Meta', $head->getMeta()); + self::assertEquals('', $head->getTitle()); + self::assertEquals('en', $head->getLanguage()); + self::assertEquals([], $head->getStyleAll()); + self::assertEquals([], $head->getScriptAll()); + self::assertEquals('', $head->renderStyle()); + self::assertEquals('', $head->renderScript()); + self::assertEquals('', $head->renderAssets()); + self::assertEquals('', $head->renderAssetsLate()); + self::assertEquals('', $head->render()); + } +} diff --git a/tests/Model/Html/MetaTest.php b/tests/Model/Html/MetaTest.php new file mode 100644 index 000000000..bcec06da8 --- /dev/null +++ b/tests/Model/Html/MetaTest.php @@ -0,0 +1,32 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Model\Html; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Model\Html\Meta; + +class MetaTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $meta = new Meta(); + self::assertEquals('', $meta->getDescription()); + self::assertEquals('', $meta->getCharset()); + self::assertEquals('', $meta->getAuthor()); + self::assertEquals([], $meta->getKeywords()); + self::assertEquals('', $meta->render()); + } +} diff --git a/tests/Module/Exception/InvalidModuleExceptionTest.php b/tests/Module/Exception/InvalidModuleExceptionTest.php new file mode 100644 index 000000000..53c683b8c --- /dev/null +++ b/tests/Module/Exception/InvalidModuleExceptionTest.php @@ -0,0 +1,26 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Module; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Module\InfoManager; + +class InfoManagerTest extends \PHPUnit\Framework\TestCase +{ + public function testInfoManager() + { + $info = new InfoManager(__Dir__ . '/info-test.json'); + $info->load(); + + $jarray = json_decode(file_get_contents(__Dir__ . '/info-test.json'), true); + + self::assertEquals($jarray, $info->get()); + self::assertEquals($jarray['name']['internal'], $info->getInternalName()); + self::assertEquals($jarray['name']['external'], $info->getExternalName()); + self::assertEquals($jarray['category'], $info->getCategory()); + self::assertEquals($jarray['dependencies'], $info->getDependencies()); + self::assertEquals($jarray['providing'], $info->getProviding()); + self::assertEquals($jarray['directory'], $info->getDirectory()); + self::assertEquals($jarray['version'], $info->getVersion()); + self::assertEquals($jarray['load'], $info->getLoad()); + + $info->set('/name/internal', 'ABC'); + self::assertEquals('ABC', $info->getInternalName()); + $info->update(); + + $info2 = new InfoManager(__Dir__ . '/info-test.json'); + $info2->load(); + self::assertEquals($info->getInternalName(), $info2->getInternalName()); + + $info->set('/name/internal', $jarray['name']['internal']); + $info->update(); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidPathLoad() + { + $info = new InfoManager(__Dir__ . '/invalid.json'); + $info->load(); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidPathUpdate() + { + $info = new InfoManager(__Dir__ . '/invalid.json'); + $info->update(); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testInvalidDataSet() + { + $info = new InfoManager(__Dir__ . '/info-test.json'); + $info->load(); + + $testObj = new class { public $test = 1; public function test() { echo $this->test; }}; + + $info->set('/name/internal', $testObj); + } +} diff --git a/tests/Module/ModuleAbstractTest.php b/tests/Module/ModuleAbstractTest.php new file mode 100644 index 000000000..ba898aa97 --- /dev/null +++ b/tests/Module/ModuleAbstractTest.php @@ -0,0 +1,36 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Module; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Module\ModuleAbstract; + +class ModuleAbstractTest extends \PHPUnit\Framework\TestCase +{ + public function testModuleAbstract() + { + $moduleClass = new class(null) extends ModuleAbstract { + const MODULE_VERSION = '1.2.3'; + const MODULE_NAME = 'Test'; + const MODULE_ID = 2; + protected static $dependencies = [1, 2]; + }; + + self::assertEquals([1, 2], $moduleClass->getDependencies()); + self::assertEquals(2, $moduleClass::MODULE_ID); + self::assertEquals('1.2.3', $moduleClass::MODULE_VERSION); + } +} \ No newline at end of file diff --git a/tests/Module/ModuleFactoryTest.php b/tests/Module/ModuleFactoryTest.php new file mode 100644 index 000000000..67ef88b48 --- /dev/null +++ b/tests/Module/ModuleFactoryTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Module; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\ApplicationAbstract; +use phpOMS\Module\ModuleFactory; + +class ModuleFactoryTest extends \PHPUnit\Framework\TestCase +{ + public function testFactory() + { + self::assertInstanceOf(\Modules\Admin\Controller::class, ModuleFactory::getInstance('Admin', new class extends ApplicationAbstract {})); + } +} diff --git a/tests/Module/ModuleManagerTest.php b/tests/Module/ModuleManagerTest.php new file mode 100644 index 000000000..49e122b5c --- /dev/null +++ b/tests/Module/ModuleManagerTest.php @@ -0,0 +1,80 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Module; + +use phpOMS\ApplicationAbstract; +use phpOMS\DataStorage\Database\DatabasePool; +use phpOMS\Dispatcher\Dispatcher; +use phpOMS\Module\ModuleManager; +use phpOMS\Router\Router; +use phpOMS\Security\Encryption\Encryption; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class ModuleManagerTest extends \PHPUnit\Framework\TestCase +{ + protected $app = null; + + protected function setUp() + { + $this->app = new class extends ApplicationAbstract {}; + $this->app->dbPool = $GLOBALS['dbpool']; + $this->app->dispatcher = new Dispatcher($this->app); + } + + public function testAttributes() + { + $moduleManager = new ModuleManager($this->app, __DIR__ . '/../../../../Modules'); + self::assertInstanceOf('\phpOMS\Module\ModuleManager', $moduleManager); + + self::assertObjectHasAttribute('running', $moduleManager); + self::assertObjectHasAttribute('installed', $moduleManager); + self::assertObjectHasAttribute('active', $moduleManager); + self::assertObjectHasAttribute('all', $moduleManager); + self::assertObjectHasAttribute('uriLoad', $moduleManager); + } + + public function testUnknownModuleInit() + { + $moduleManager = new ModuleManager($this->app, __DIR__ . '/../../../../Modules'); + $moduleManager->initModule('doesNotExist'); + self::assertInstanceOf('\phpOMS\Module\NullModule', $moduleManager->get('doesNotExist')); + } + + public function testUnknownModuleGet() + { + $moduleManager = new ModuleManager($this->app, __DIR__ . '/../../../../Modules'); + self::assertInstanceOf('\phpOMS\Module\NullModule', $moduleManager->get('doesNotExist2')); + } + + public function testGetSet() + { + $this->app->router = new Router(); + $this->app->dispatcher = new Dispatcher($this->app); + + $moduleManager = new ModuleManager($this->app, __DIR__ . '/../../../../Modules'); + + $active = $moduleManager->getActiveModules(); + $all = $moduleManager->getAllModules(); + $installed = $moduleManager->getInstalledModules(); + + self::assertNotEmpty($active); + self::assertNotEmpty($all); + self::assertNotEmpty($installed); + + self::assertInstanceOf('\phpOMS\Module\ModuleAbstract', $moduleManager->get('Admin')); + self::assertInstanceOf('\Modules\Admin\Controller', $moduleManager->get('Admin')); + } +} diff --git a/tests/Module/NullModuleTest.php b/tests/Module/NullModuleTest.php new file mode 100644 index 000000000..47274c3c3 --- /dev/null +++ b/tests/Module/NullModuleTest.php @@ -0,0 +1,32 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Module; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Module\NullModule; +use phpOMS\ApplicationAbstract; + +class NullModuleTest extends \PHPUnit\Framework\TestCase +{ + public function testModule() + { + $app = new class extends ApplicationAbstract + { + }; + + self::assertInstanceOf('\phpOMS\Module\ModuleAbstract', new NullModule($app)); + } +} diff --git a/tests/Module/info-test.json b/tests/Module/info-test.json new file mode 100644 index 000000000..0d007ba8b --- /dev/null +++ b/tests/Module/info-test.json @@ -0,0 +1,52 @@ +{ + "name": { + "id": 1000100000, + "internal": "ABC", + "external": "ABC" + }, + "version": "1.0.0", + "category": "Test", + "requirements": { + "phpOMS": "1.0.0", + "phpOMS-db": "1.0.0" + }, + "creator": { + "name": "Orange Management", + "website": "www.spl1nes.com" + }, + "description": "The administration module.", + "directory": "Admin", + "dependencies": [], + "providing": { + "Navigation": "*" + }, + "load": [ + { + "pid": [ + "1854402adfd24425fd13776a2d3787151609b360" + ], + "type": 4, + "for": "Content", + "file": "Admin", + "from": "Admin" + }, + { + "pid": [ + "754a08ddf8bcb1cf22f310f09206dd783d42f7dd" + ], + "type": 5, + "from": "Admin", + "for": "Navigation", + "file": "Navigation" + }, + { + "pid": [ + "1854402adfd24425fd13776a2d3787151609b360" + ], + "type": 5, + "for": "Content", + "file": "", + "from": "Admin" + } + ] +} \ No newline at end of file diff --git a/tests/Router/RouteVerbTest.php b/tests/Router/RouteVerbTest.php new file mode 100644 index 000000000..b86d46eea --- /dev/null +++ b/tests/Router/RouteVerbTest.php @@ -0,0 +1,37 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Router; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Router\RouteVerb; + +class RouteVerbTest extends \PHPUnit\Framework\TestCase +{ + public function testEnum() + { + self::assertTrue(defined('phpOMS\Router\RouteVerb::GET')); + self::assertTrue(defined('phpOMS\Router\RouteVerb::PUT')); + self::assertTrue(defined('phpOMS\Router\RouteVerb::SET')); + self::assertTrue(defined('phpOMS\Router\RouteVerb::DELETE')); + self::assertTrue(defined('phpOMS\Router\RouteVerb::ANY')); + } + + public function testEnumUnique() + { + $values = RouteVerb::getConstants(); + self::assertEquals(count($values), array_sum(array_count_values($values))); + } +} diff --git a/tests/Router/RouterTest.php b/tests/Router/RouterTest.php new file mode 100644 index 000000000..df41c4acc --- /dev/null +++ b/tests/Router/RouterTest.php @@ -0,0 +1,79 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Router; + +use phpOMS\Message\Http\RequestMethod; +use phpOMS\Router\Router; +use phpOMS\Router\RouteVerb; +use phpOMS\Localization\Localization; +use phpOMS\Message\Http\Request; +use phpOMS\Uri\Http; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class RouterTest extends \PHPUnit\Framework\TestCase +{ + public function testAttributes() + { + $router = new Router(); + self::assertInstanceOf('\phpOMS\Router\Router', $router); + self::assertObjectHasAttribute('routes', $router); + } + + public function testDefault() + { + $router = new Router(); + self::assertEmpty($router->route(new Request(new Http('http://test.com')))); + self::assertEmpty($router->route('http://test.com')); + } + + public function testGetSet() + { + $router = new Router(); + self::assertFalse($router->importFromFile(__Dir__ . '/invalidFile.php')); + self::assertTrue($router->importFromFile(__Dir__ . '/routerTestFile.php')); + + self::assertEquals( + [['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']], + $router->route('http://test.com/backend/admin/settings/general/something?test') + ); + + self::assertNotEquals( + [['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']], + $router->route('http://test.com/backend/admin/settings/general/something?test', RouteVerb::PUT) + ); + + self::assertNotEquals( + [['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']], + $router->route('http://test.com/backends/admin/settings/general/something?test') + ); + + $router->add('^.*/backends/admin/settings/general.*$', 'Controller:test', RouteVerb::GET | RouteVerb::SET); + self::assertEquals( + [['dest' => 'Controller:test']], + $router->route('http://test.com/backends/admin/settings/general/something?test', RouteVerb::ANY) + ); + + self::assertEquals( + [['dest' => 'Controller:test']], + $router->route('http://test.com/backends/admin/settings/general/something?test', RouteVerb::SET) + ); + + self::assertEquals( + [['dest' => 'Controller:test']], + $router->route('http://test.com/backends/admin/settings/general/something?test', RouteVerb::GET) + ); + } +} diff --git a/tests/Router/routerTestFile.php b/tests/Router/routerTestFile.php new file mode 100644 index 000000000..c72f02410 --- /dev/null +++ b/tests/Router/routerTestFile.php @@ -0,0 +1,9 @@ + [ + 0 => [ + "dest" => "\Modules\Admin\Controller:viewSettingsGeneral", + "verb" => 1, + ] + ] +]; \ No newline at end of file diff --git a/tests/Socket/Client/ClientConnectionTest.php b/tests/Socket/Client/ClientConnectionTest.php new file mode 100644 index 000000000..d69cc796f --- /dev/null +++ b/tests/Socket/Client/ClientConnectionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Socket\Client; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Socket\Client\ClientConnection; + +class ClientConnectionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Socket/Client/ClientTest.php b/tests/Socket/Client/ClientTest.php new file mode 100644 index 000000000..983a4c2e5 --- /dev/null +++ b/tests/Socket/Client/ClientTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Socket\Client; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Socket\Client\Client; + +class ClientTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Socket/Client/NullClientConnectionTest.php b/tests/Socket/Client/NullClientConnectionTest.php new file mode 100644 index 000000000..d78a80563 --- /dev/null +++ b/tests/Socket/Client/NullClientConnectionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Socket\Client; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Socket\Client\NullClientConnection; + +class NullClientConnectionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Socket/CommandManagerTest.php b/tests/Socket/CommandManagerTest.php new file mode 100644 index 000000000..8b4cb6b38 --- /dev/null +++ b/tests/Socket/CommandManagerTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Socket; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Socket\CommandManager; + +class CommandManagerTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Socket/Packets/HeaderTest.php b/tests/Socket/Packets/HeaderTest.php new file mode 100644 index 000000000..8aedc0703 --- /dev/null +++ b/tests/Socket/Packets/HeaderTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Socket\Packets; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Socket\Packets\Header; + +class HeaderTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Socket/Packets/PacketManagerTest.php b/tests/Socket/Packets/PacketManagerTest.php new file mode 100644 index 000000000..796ab7ae2 --- /dev/null +++ b/tests/Socket/Packets/PacketManagerTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Socket\Packets; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Socket\Packets\PacketManager; + +class PacketManagerTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Socket/Packets/PacketTypeTest.php b/tests/Socket/Packets/PacketTypeTest.php new file mode 100644 index 000000000..82178212c --- /dev/null +++ b/tests/Socket/Packets/PacketTypeTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Socket\Packets; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Socket\Packets\PacketType; + +class PacketTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Socket/Server/ClientManagerTest.php b/tests/Socket/Server/ClientManagerTest.php new file mode 100644 index 000000000..db5a19377 --- /dev/null +++ b/tests/Socket/Server/ClientManagerTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Socket\Server; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Socket\Server\ClientManager; + +class ClientManagerTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Socket/Server/ServerTest.php b/tests/Socket/Server/ServerTest.php new file mode 100644 index 000000000..d5f50d970 --- /dev/null +++ b/tests/Socket/Server/ServerTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Socket\Server; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Socket\Server\Server; + +class ServerTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Socket/SocketTypeTest.php b/tests/Socket/SocketTypeTest.php new file mode 100644 index 000000000..2ba286a0e --- /dev/null +++ b/tests/Socket/SocketTypeTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Socket; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Socket\SocketType; + +class SocketTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Stdlib/Base/AddressTest.php b/tests/Stdlib/Base/AddressTest.php new file mode 100644 index 000000000..30c738aad --- /dev/null +++ b/tests/Stdlib/Base/AddressTest.php @@ -0,0 +1,87 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Base; + +use phpOMS\Stdlib\Base\Address; +use phpOMS\Stdlib\Base\Location; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +class AddressTest extends \PHPUnit\Framework\TestCase +{ + public function testAttributes() + { + $address = new Address(); + self::assertObjectHasAttribute('recipient', $address); + self::assertObjectHasAttribute('fao', $address); + self::assertObjectHasAttribute('location', $address); + } + + public function testDefault() + { + $expected = [ + 'recipient' => '', + 'fao' => '', + 'location' => [ + 'postal' => '', + 'city' => '', + 'country' => '', + 'address' => '', + 'state' => '', + 'geo' => [ + 'lat' => 0, + 'long' => 0 + ], + ] + ]; + + $address = new Address(); + self::assertEquals('', $address->getRecipient()); + self::assertEquals('', $address->getFAO()); + self::assertInstanceOf('\phpOMS\Stdlib\Base\Location', $address->getLocation()); + self::assertEquals($expected, $address->toArray()); + self::assertEquals($expected, $address->jsonSerialize()); + } + + public function testGetSet() + { + $expected = [ + 'recipient' => 'recipient', + 'fao' => 'fao', + 'location' => [ + 'postal' => '', + 'city' => '', + 'country' => '', + 'address' => '', + 'state' => '', + 'geo' => [ + 'lat' => 0, + 'long' => 0 + ], + ] + ]; + + $address = new Address(); + $address->setFAO('fao'); + $address->setRecipient('recipient'); + $address->setLocation(new Location()); + + self::assertEquals('recipient', $address->getRecipient()); + self::assertEquals('fao', $address->getFAO()); + self::assertInstanceOf('\phpOMS\Stdlib\Base\Location', $address->getLocation()); + self::assertEquals($expected, $address->toArray()); + self::assertEquals($expected, $address->jsonSerialize()); + } +} diff --git a/tests/Stdlib/Base/AddressTypeTest.php b/tests/Stdlib/Base/AddressTypeTest.php new file mode 100644 index 000000000..e37602687 --- /dev/null +++ b/tests/Stdlib/Base/AddressTypeTest.php @@ -0,0 +1,34 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Base; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Stdlib\Base\AddressType; + +class AddressTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(7, count(AddressType::getconstants())); + self::assertEquals(1, AddressType::HOME); + self::assertEquals(2, AddressType::BUSINESS); + self::assertEquals(3, AddressType::SHIPPING); + self::assertEquals(4, AddressType::BILLING); + self::assertEquals(5, AddressType::WORK); + self::assertEquals(6, AddressType::CONTRACT); + self::assertEquals(7, AddressType::OTHER); + } +} diff --git a/tests/Stdlib/Base/EnumArrayTest.php b/tests/Stdlib/Base/EnumArrayTest.php new file mode 100644 index 000000000..3f8aa3aa1 --- /dev/null +++ b/tests/Stdlib/Base/EnumArrayTest.php @@ -0,0 +1,55 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Base; + +use phpOMS\Stdlib\Base\EnumArray; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +final class EnumArrayDemo extends EnumArray +{ + protected static $constants = [ + 'ENUM1' => 1, + 'ENUM2' => 'abc', + ]; +} + +; + +class EnumArrayTest extends \PHPUnit\Framework\TestCase +{ + public function testGetSet() + { + self::assertEquals(1, EnumArrayDemo::get('ENUM1')); + self::assertEquals('abc', EnumArrayDemo::get('ENUM2')); + + self::assertTrue(EnumArrayDemo::isValidName('ENUM1')); + self::assertFalse(EnumArrayDemo::isValidName('enum1')); + + self::assertEquals(['ENUM1' => 1, 'ENUM2' => 'abc'], EnumArrayDemo::getConstants(), true); + + self::assertTrue(EnumArrayDemo::isValidValue(1)); + self::assertTrue(EnumArrayDemo::isValidValue('abc')); + self::assertFalse(EnumArrayDemo::isValidValue('e3')); + } + + /** + * @expectedException \OutOfBoundsException + */ + public function testInvalidConstantException() + { + EnumArrayDemo::get('enum2'); + } +} diff --git a/tests/Stdlib/Base/EnumTest.php b/tests/Stdlib/Base/EnumTest.php new file mode 100644 index 000000000..7b269e7c4 --- /dev/null +++ b/tests/Stdlib/Base/EnumTest.php @@ -0,0 +1,54 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Base; + +use phpOMS\Stdlib\Base\Enum; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +final class EnumDemo extends Enum +{ + const ENUM1 = 1; + const ENUM2 = ';l'; +}; + +class EnumTest extends \PHPUnit\Framework\TestCase +{ + public function testGetSet() + { + self::assertTrue(EnumDemo::isValidName('ENUM1')); + self::assertFalse(EnumDemo::isValidName('enum1')); + + self::assertEquals(['ENUM1' => 1, 'ENUM2' => ';l'], EnumDemo::getConstants(), true); + + self::assertTrue(EnumDemo::isValidValue(1)); + self::assertTrue(EnumDemo::isValidValue(';l')); + self::assertFalse(EnumDemo::isValidValue('e3')); + self::assertTrue(EnumDemo::isValidValue(EnumDemo::getRandom())); + self::assertEquals(EnumDemo::ENUM2, EnumDemo::getByName('ENUM2')); + self::assertEquals(EnumDemo::ENUM2, EnumDemo::getByName('ENUM2')); + self::assertEquals(2, EnumDemo::count()); + self::assertEquals('ENUM1', EnumDemo::getName('1')); + self::assertEquals('ENUM2', EnumDemo::getName(';l')); + } + + /** + * @expectedException \Exception + */ + public function testEmailException() + { + EnumDemo::getByName('ENUM3'); + } +} diff --git a/tests/Stdlib/Base/ExactFloatTest.php b/tests/Stdlib/Base/ExactFloatTest.php new file mode 100644 index 000000000..e69de29bb diff --git a/tests/Stdlib/Base/Exception/InvalidEnumNameTest.php b/tests/Stdlib/Base/Exception/InvalidEnumNameTest.php new file mode 100644 index 000000000..2ecea6808 --- /dev/null +++ b/tests/Stdlib/Base/Exception/InvalidEnumNameTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Base\Exception; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Stdlib\Base\Exception\InvalidEnumName; + +class InvalidEnumNameTest extends \PHPUnit\Framework\TestCase +{ + public function testException() + { + self::assertInstanceOf(\UnexpectedValueException::class, new InvalidEnumName('')); + } +} diff --git a/tests/Stdlib/Base/Exception/InvalidEnumValueTest.php b/tests/Stdlib/Base/Exception/InvalidEnumValueTest.php new file mode 100644 index 000000000..3a97c0f98 --- /dev/null +++ b/tests/Stdlib/Base/Exception/InvalidEnumValueTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Base\Exception; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Stdlib\Base\Exception\InvalidEnumValue; + +class InvalidEnumValueTest extends \PHPUnit\Framework\TestCase +{ + public function testException() + { + self::assertInstanceOf(\UnexpectedValueException::class, new InvalidEnumValue('')); + } +} diff --git a/tests/Stdlib/Base/IbanTest.php b/tests/Stdlib/Base/IbanTest.php new file mode 100644 index 000000000..3a3c41213 --- /dev/null +++ b/tests/Stdlib/Base/IbanTest.php @@ -0,0 +1,78 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Base; + +use phpOMS\Stdlib\Base\Iban; +use phpOMS\Localization\ISO3166TwoEnum; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +class IbanTest extends \PHPUnit\Framework\TestCase +{ + public function testAttributes() + { + $iban = new Iban('DE22 6008 0000 0960 0280 00'); + self::assertObjectHasAttribute('iban', $iban); + } + + public function testMethods() + { + $strRepresentation = 'DE22 6008 0000 0960 0280 00'; + $iban = new Iban($strRepresentation); + + self::assertEquals(ISO3166TwoEnum::_DEU, $iban->getCountry()); + self::assertEquals('22', $iban->getChecksum()); + self::assertEquals('60080000', $iban->getBankCode()); + self::assertEquals('0960028000', $iban->getAccount()); + self::assertEquals($strRepresentation, $iban->prettyPrint()); + self::assertEquals($strRepresentation, $iban->serialize()); + + $iban->unserialize('dE226008000009600280 00'); + self::assertEquals('DE22 6008 0000 0960 0280 00', $iban->serialize()); + + self::assertEquals('', $iban->getAccountType()); + self::assertEquals('', $iban->getBicCode()); + self::assertEquals('', $iban->getBranchCode()); + self::assertEquals('', $iban->getCurrency()); + self::assertEquals('', $iban->getHoldersKennital()); + self::assertEquals('', $iban->getNationalChecksum()); + self::assertEquals('', $iban->getOwnerAccountNumber()); + self::assertEquals(22, $iban->getLength()); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testInvalidIbanCountry() + { + $iban = new Iban('ZZ22 6008 0000 0960 0280 00'); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testInvalidIbanLength() + { + $iban = new Iban('DE22 6008 0000 0960 0280 0'); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testInvalidIbanChecksum() + { + $iban = new Iban('DEA9 6008 0000 0960 0280 00'); + } +} diff --git a/tests/Stdlib/Base/LocationTest.php b/tests/Stdlib/Base/LocationTest.php new file mode 100644 index 000000000..26af7fc82 --- /dev/null +++ b/tests/Stdlib/Base/LocationTest.php @@ -0,0 +1,96 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Base; + +use phpOMS\Stdlib\Base\Location; +use phpOMS\Stdlib\Base\AddressType; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +class LocationTest extends \PHPUnit\Framework\TestCase +{ + public function testAttributes() + { + $location = new Location(); + self::assertObjectHasAttribute('postal', $location); + self::assertObjectHasAttribute('city', $location); + self::assertObjectHasAttribute('country', $location); + self::assertObjectHasAttribute('address', $location); + self::assertObjectHasAttribute('state', $location); + self::assertObjectHasAttribute('geo', $location); + } + + public function testDefault() + { + $expected = [ + 'postal' => '', + 'city' => '', + 'country' => '', + 'address' => '', + 'state' => '', + 'geo' => [ + 'lat' => 0, + 'long' => 0, + ], + ]; + + $location = new Location(); + self::assertEquals('', $location->getPostal()); + self::assertEquals('', $location->getCity()); + self::assertEquals('', $location->getCountry()); + self::assertEquals('', $location->getAddress()); + self::assertEquals('', $location->getState()); + self::assertEquals(0, $location->getId()); + self::assertEquals(AddressType::HOME, $location->getType()); + self::assertEquals(['lat' => 0, 'long' => 0], $location->getGeo()); + self::assertEquals($expected, $location->toArray()); + self::assertEquals($expected, $location->jsonSerialize()); + } + + public function testGetSet() + { + $expected = [ + 'postal' => '0123456789', + 'city' => 'city', + 'country' => 'Country', + 'address' => 'Some address here', + 'state' => 'This is a state 123', + 'geo' => [ + 'lat' => 12.1, + 'long' => 11.2, + ], + ]; + + $location = new Location(); + + $location->setPostal('0123456789'); + $location->setType(AddressType::BUSINESS); + $location->setCity('city'); + $location->setCountry('Country'); + $location->setAddress('Some address here'); + $location->setState('This is a state 123'); + $location->setGeo(['lat' => 12.1, 'long' => 11.2,]); + + self::assertEquals(AddressType::BUSINESS, $location->getType()); + self::assertEquals('0123456789', $location->getPostal()); + self::assertEquals('city', $location->getCity()); + self::assertEquals('Country', $location->getCountry()); + self::assertEquals('Some address here', $location->getAddress()); + self::assertEquals('This is a state 123', $location->getState()); + self::assertEquals(['lat' => 12.1, 'long' => 11.2], $location->getGeo()); + self::assertEquals($expected, $location->toArray()); + self::assertEquals($expected, $location->jsonSerialize()); + } +} diff --git a/tests/Stdlib/Base/NullLocationTest.php b/tests/Stdlib/Base/NullLocationTest.php new file mode 100644 index 000000000..0948d5c0a --- /dev/null +++ b/tests/Stdlib/Base/NullLocationTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Base; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Stdlib\Base\NullLocation; + +class NullLocationTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Stdlib/Base/PhoneTypeTest.php b/tests/Stdlib/Base/PhoneTypeTest.php new file mode 100644 index 000000000..1a41a2f0f --- /dev/null +++ b/tests/Stdlib/Base/PhoneTypeTest.php @@ -0,0 +1,31 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Base; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Stdlib\Base\PhoneType; + +class PhoneTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(4, count(PhoneType::getConstants())); + self::assertEquals(1, PhoneType::HOME); + self::assertEquals(2, PhoneType::BUSINESS); + self::assertEquals(3, PhoneType::MOBILE); + self::assertEquals(4, PhoneType::WORK); + } +} diff --git a/tests/Stdlib/Base/SmartDateTimeTest.php b/tests/Stdlib/Base/SmartDateTimeTest.php new file mode 100644 index 000000000..b0713f691 --- /dev/null +++ b/tests/Stdlib/Base/SmartDateTimeTest.php @@ -0,0 +1,66 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Base; + +use phpOMS\Stdlib\Base\SmartDateTime; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +class SmartDateTimeTest extends \PHPUnit\Framework\TestCase +{ + public function testAttributes() + { + $datetime = new SmartDateTime(); + self::assertInstanceOf('\DateTime', $datetime); + } + + public function testGetSet() + { + $datetime = new SmartDateTime('1970-01-01'); + self::assertEquals('1970-01-01', $datetime->format('Y-m-d')); + + $new = $datetime->createModify(1, 1, 1); + self::assertEquals('1970-01-01', $datetime->format('Y-m-d')); + self::assertEquals('1971-02-02', $new->format('Y-m-d')); + + $datetime = new SmartDateTime('1975-06-01'); + self::assertEquals('1976-07-01', $datetime->createModify(0, 13)->format('Y-m-d')); + self::assertEquals('1976-01-01', $datetime->createModify(0, 7)->format('Y-m-d')); + self::assertEquals('1975-03-01', $datetime->createModify(0, -3)->format('Y-m-d')); + self::assertEquals('1974-11-01', $datetime->createModify(0, -7)->format('Y-m-d')); + self::assertEquals('1973-11-01', $datetime->createModify(0, -19)->format('Y-m-d')); + self::assertEquals('1973-12-01', $datetime->createModify(0, -19, 30)->format('Y-m-d')); + self::assertEquals('1973-12-31', $datetime->createModify(0, -18, 30)->format('Y-m-d')); + self::assertEquals(30, $datetime->getDaysOfMonth()); + self::assertEquals(0, $datetime->getFirstDayOfMonth()); + + $expected = new \DateTime('now'); + $obj = SmartDateTime::createFromDateTime($expected); + self::assertEquals($expected->format('Y-m-d H:i:s'), $obj->format('Y-m-d H:i:s')); + self::assertEquals(date("Y-m-t", strtotime($expected->format('Y-m-d'))), $obj->getEndOfMonth()->format('Y-m-d')); + self::assertEquals(date("Y-m-01", strtotime($expected->format('Y-m-d'))), $obj->getStartOfMonth()->format('Y-m-d')); + + self::assertFalse((new SmartDateTime('2103-07-20'))->isLeapYear()); + self::assertTrue((new SmartDateTime('2104-07-20'))->isLeapYear()); + self::assertFalse(SmartDateTime::leapYear(2103)); + self::assertTrue(SmartDateTime::leapYear(2104)); + + self::assertEquals(date('w', $expected->getTimestamp()), SmartDateTime::getDayOfWeek((int) $expected->format('Y'), (int) $expected->format('m'), (int) $expected->format('d'))); + self::assertEquals(date('w', $expected->getTimestamp()), $obj->getFirstDayOfWeek()); + + self::assertEquals(42, count($obj->getMonthCalendar())); + self::assertEquals(42, count($obj->getMonthCalendar(1))); + } +} diff --git a/tests/Stdlib/Graph/BinaryTreeTest.php b/tests/Stdlib/Graph/BinaryTreeTest.php new file mode 100644 index 000000000..638145ef9 --- /dev/null +++ b/tests/Stdlib/Graph/BinaryTreeTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Graph; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Stdlib\Graph\BinaryTree; + +class BinaryTreeTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} + diff --git a/tests/Stdlib/Graph/EdgeTest.php b/tests/Stdlib/Graph/EdgeTest.php new file mode 100644 index 000000000..5d0035dc8 --- /dev/null +++ b/tests/Stdlib/Graph/EdgeTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Graph; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Stdlib\Graph\Edge; + +class EdgeTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Stdlib/Graph/GraphTest.php b/tests/Stdlib/Graph/GraphTest.php new file mode 100644 index 000000000..e03e56dd6 --- /dev/null +++ b/tests/Stdlib/Graph/GraphTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Graph; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Stdlib\Graph\Graph; + +class GraphTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} + diff --git a/tests/Stdlib/Graph/NodeTest.php b/tests/Stdlib/Graph/NodeTest.php new file mode 100644 index 000000000..0bb92dd4e --- /dev/null +++ b/tests/Stdlib/Graph/NodeTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Graph; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Stdlib\Graph\Node; + +class NodeTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Stdlib/Graph/TreeTest.php b/tests/Stdlib/Graph/TreeTest.php new file mode 100644 index 000000000..2334732ae --- /dev/null +++ b/tests/Stdlib/Graph/TreeTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Graph; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Stdlib\Graph\Tree; + +class TreeTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} + diff --git a/tests/Stdlib/Map/KeyTypeTest.php b/tests/Stdlib/Map/KeyTypeTest.php new file mode 100644 index 000000000..6405ab5f0 --- /dev/null +++ b/tests/Stdlib/Map/KeyTypeTest.php @@ -0,0 +1,29 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Map; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Stdlib\Map\KeyType; + +class KeyTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(2, count(KeyType::getConstants())); + self::assertEquals(0, KeyType::SINGLE); + self::assertEquals(1, KeyType::MULTIPLE); + } +} diff --git a/tests/Stdlib/Map/MultiMapTest.php b/tests/Stdlib/Map/MultiMapTest.php new file mode 100644 index 000000000..88534a7e6 --- /dev/null +++ b/tests/Stdlib/Map/MultiMapTest.php @@ -0,0 +1,208 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils; + +use phpOMS\Stdlib\Map\MultiMap; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +class MultiMapTest extends \PHPUnit\Framework\TestCase +{ + public function testAttributes() + { + $map = new MultiMap(); + self::assertInstanceOf('\phpOMS\Stdlib\Map\MultiMap', $map); + + /* Testing members */ + self::assertObjectHasAttribute('values', $map); + self::assertObjectHasAttribute('keys', $map); + } + + public function testDefault() + { + $map = new MultiMap(); + + /* Testing default values */ + self::assertNull($map->get('someKey')); + self::assertEquals(0, $map->count()); + + self::assertEmpty($map->keys()); + self::assertEmpty($map->values()); + self::assertEmpty($map->getSiblings('someKey')); + self::assertFalse($map->removeKey('someKey')); + self::assertFalse($map->remap('old', 'new')); + self::assertFalse($map->remove('someKey')); + } + + public function testBasicAdd() + { + $map = new MultiMap(); + + $inserted = $map->add(['a', 'b'], 'val1'); + self::assertEquals(1, $map->count()); + self::assertTrue($inserted); + self::assertEquals('val1', $map->get('a')); + self::assertEquals('val1', $map->get('b')); + } + + public function testOverwrite() + { + $map = new MultiMap(); + + $inserted = $map->add(['a', 'b'], 'val1'); + $inserted = $map->add(['a', 'b'], 'val2'); + self::assertEquals(1, $map->count()); + self::assertTrue($inserted); + self::assertEquals('val2', $map->get('a')); + self::assertEquals('val2', $map->get('b')); + } + + public function testOverwritePartialFalse() + { + $map = new MultiMap(); + + $inserted = $map->add(['a', 'b'], 'val2'); + $inserted = $map->add(['a', 'c'], 'val3', false); + self::assertEquals(2, $map->count()); + self::assertTrue($inserted); + self::assertEquals('val2', $map->get('a')); + self::assertEquals('val2', $map->get('b')); + self::assertEquals('val3', $map->get('c')); + } + + public function testOverwriteFalseFalse() + { + $map = new MultiMap(); + + $inserted = $map->add(['a', 'b'], 'val2'); + $inserted = $map->add(['a', 'c'], 'val3', false); + $inserted = $map->add(['a', 'c'], 'val4', false); + self::assertEquals(2, $map->count()); + self::assertFalse($inserted); + self::assertEquals('val2', $map->get('a')); + self::assertEquals('val2', $map->get('b')); + self::assertEquals('val3', $map->get('c')); + } + + public function testSet() + { + $map = new MultiMap(); + + $inserted = $map->add(['a', 'b'], 'val2'); + $inserted = $map->add(['a', 'c'], 'val3', false); + + $set = $map->set('d', 'val4'); + self::assertFalse($set); + self::assertEquals(2, $map->count()); + + $set = $map->set('b', 'val4'); + self::assertEquals(2, $map->count()); + self::assertTrue($set); + self::assertEquals('val4', $map->get('b')); + self::assertEquals('val4', $map->get('a')); + self::assertEquals('val3', $map->get('c')); + } + + public function testRemap() + { + $map = new MultiMap(); + + $inserted = $map->add(['a', 'b'], 'val2'); + $inserted = $map->add(['a', 'c'], 'val3', false); + $set = $map->set('d', 'val4'); + $set = $map->set('b', 'val4'); + + $remap = $map->remap('b', 'd'); + self::assertEquals(2, $map->count()); + self::assertFalse($remap); + + $remap = $map->remap('d', 'b'); + self::assertEquals(2, $map->count()); + self::assertFalse($remap); + + $remap = $map->remap('d', 'e'); + self::assertEquals(2, $map->count()); + self::assertFalse($remap); + + $remap = $map->remap('b', 'c'); + self::assertEquals(2, $map->count()); + self::assertTrue($remap); + self::assertEquals('val3', $map->get('b')); + self::assertEquals('val4', $map->get('a')); + self::assertEquals('val3', $map->get('c')); + } + + public function testMapInfo() + { + $map = new MultiMap(); + + $inserted = $map->add(['a', 'b'], 'val2'); + $inserted = $map->add(['a', 'c'], 'val3', false); + $set = $map->set('d', 'val4'); + $set = $map->set('b', 'val4'); + + self::assertEquals(3, count($map->keys())); + self::assertEquals(2, count($map->values())); + + self::assertTrue(is_array($map->keys())); + self::assertTrue(is_array($map->values())); + } + + public function testSiblings() + { + $map = new MultiMap(); + + $inserted = $map->add(['a', 'b'], 'val2'); + $set = $map->set('d', 'val4'); + $set = $map->set('b', 'val4'); + + $siblings = $map->getSiblings('d'); + self::assertEmpty($siblings); + self::assertEquals(0, count($siblings)); + + $siblings = $map->getSiblings('b'); + self::assertEquals(1, count($siblings)); + self::assertEquals(['a'], $siblings); + } + + public function testRemove() + { + $map = new MultiMap(); + + $inserted = $map->add(['a', 'b'], 'val2'); + $inserted = $map->add(['a', 'c'], 'val3', false); + $set = $map->set('d', 'val4'); + $set = $map->set('b', 'val4'); + + $removed = $map->remove('d'); + self::assertFalse($removed); + + $removed = $map->remove('d'); + self::assertFalse($removed); + + $removed = $map->remove('c'); + self::assertTrue($removed); + self::assertEquals(2, count($map->keys())); + self::assertEquals(1, count($map->values())); + + $removed = $map->removeKey('d'); + self::assertFalse($removed); + + $removed = $map->removeKey('a'); + self::assertTrue($removed); + self::assertEquals(1, count($map->keys())); + self::assertEquals(1, count($map->values())); + } +} diff --git a/tests/Stdlib/Map/OrderTypeTest.php b/tests/Stdlib/Map/OrderTypeTest.php new file mode 100644 index 000000000..a1ba337d7 --- /dev/null +++ b/tests/Stdlib/Map/OrderTypeTest.php @@ -0,0 +1,29 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Map; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Stdlib\Map\OrderType; + +class OrderTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(2, count(OrderType::getConstants())); + self::assertEquals(0, OrderType::LOOSE); + self::assertEquals(1, OrderType::STRICT); + } +} diff --git a/tests/Stdlib/Queue/PriorityModeTest.php b/tests/Stdlib/Queue/PriorityModeTest.php new file mode 100644 index 000000000..67b0742df --- /dev/null +++ b/tests/Stdlib/Queue/PriorityModeTest.php @@ -0,0 +1,34 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Queue; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Stdlib\Queue\PriorityMode; + +class PriorityModeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(6, count(PriorityMode::getConstants())); + self::assertEquals(1, PriorityMode::FIFO); + self::assertEquals(2, PriorityMode::LIFO); + self::assertEquals(4, PriorityMode::EARLIEST_DEADLINE); + self::assertEquals(8, PriorityMode::SHORTEST_JOB); + self::assertEquals(16, PriorityMode::HIGHEST); + self::assertEquals(32, PriorityMode::LOWEST); + } +} + diff --git a/tests/Stdlib/Queue/PriorityQueueTest.php b/tests/Stdlib/Queue/PriorityQueueTest.php new file mode 100644 index 000000000..e341a144f --- /dev/null +++ b/tests/Stdlib/Queue/PriorityQueueTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Stdlib\Queue; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Stdlib\Queue\PriorityQueue; + +class PriorityQueueTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/System/File/ContentPutModeTest.php b/tests/System/File/ContentPutModeTest.php new file mode 100644 index 000000000..019fe95dd --- /dev/null +++ b/tests/System/File/ContentPutModeTest.php @@ -0,0 +1,34 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\System\File; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\System\File\ContentPutMode; + +class ContentPutModeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(4, count(ContentPutMode::getConstants())); + self::assertEquals(ContentPutMode::getConstants(), array_unique(ContentPutMode::getConstants())); + + self::assertEquals(1, ContentPutMode::APPEND); + self::assertEquals(2, ContentPutMode::PREPEND); + self::assertEquals(4, ContentPutMode::REPLACE); + self::assertEquals(8, ContentPutMode::CREATE); + } +} + diff --git a/tests/System/File/ExtensionTypeTest.php b/tests/System/File/ExtensionTypeTest.php new file mode 100644 index 000000000..4992581b2 --- /dev/null +++ b/tests/System/File/ExtensionTypeTest.php @@ -0,0 +1,39 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\System\File; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\System\File\ExtensionType; + +class ExtensionTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(10, count(ExtensionType::getConstants())); + self::assertEquals(ExtensionType::getConstants(), array_unique(ExtensionType::getConstants())); + + self::assertEquals(1, ExtensionType::UNKNOWN); + self::assertEquals(2, ExtensionType::CODE); + self::assertEquals(4, ExtensionType::AUDIO); + self::assertEquals(8, ExtensionType::VIDEO); + self::assertEquals(16, ExtensionType::TEXT); + self::assertEquals(32, ExtensionType::SPREADSHEET); + self::assertEquals(64, ExtensionType::PDF); + self::assertEquals(128, ExtensionType::ARCHIVE); + self::assertEquals(256, ExtensionType::PRESENTATION); + self::assertEquals(512, ExtensionType::IMAGE); + } +} diff --git a/tests/System/File/FileUtilsTest.php b/tests/System/File/FileUtilsTest.php new file mode 100644 index 000000000..e52eff0a8 --- /dev/null +++ b/tests/System/File/FileUtilsTest.php @@ -0,0 +1,42 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\System\File; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\System\File\FileUtils; +use phpOMS\System\File\ExtensionType; + +class FileUtilsTest extends \PHPUnit\Framework\TestCase +{ + public function testExtension() + { + self::assertEquals(ExtensionType::UNKNOWN, FileUtils::getExtensionType('test')); + self::assertEquals(ExtensionType::CODE, FileUtils::getExtensionType('php')); + self::assertEquals(ExtensionType::TEXT, FileUtils::getExtensionType('md')); + self::assertEquals(ExtensionType::PRESENTATION, FileUtils::getExtensionType('pptx')); + self::assertEquals(ExtensionType::PDF, FileUtils::getExtensionType('pdf')); + self::assertEquals(ExtensionType::ARCHIVE, FileUtils::getExtensionType('rar')); + self::assertEquals(ExtensionType::AUDIO, FileUtils::getExtensionType('mp3')); + self::assertEquals(ExtensionType::VIDEO, FileUtils::getExtensionType('mp4')); + self::assertEquals(ExtensionType::SPREADSHEET, FileUtils::getExtensionType('xls')); + self::assertEquals(ExtensionType::IMAGE, FileUtils::getExtensionType('png')); + } + + public function testAbsolute() + { + self::assertEquals('/test/ative', FileUtils::absolute('/test/path/for/../rel/../../ative')); + } +} diff --git a/tests/System/File/Ftp/DirectoryTest.php b/tests/System/File/Ftp/DirectoryTest.php new file mode 100644 index 000000000..51b096d49 --- /dev/null +++ b/tests/System/File/Ftp/DirectoryTest.php @@ -0,0 +1,180 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\System\File\Ftp; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\System\File\Ftp\Directory; +use phpOMS\System\File\PathException; + +class DirectoryTest extends \PHPUnit\Framework\TestCase +{ + const TEST = false; + const BASE = 'ftp://user:password@localhost'; + + public function testStatic() + { + if (!self::TEST) { + return; + } + + $dirPath = self::BASE . '/test'; + self::assertTrue(Directory::create($dirPath)); + self::assertTrue(Directory::exists($dirPath)); + self::assertFalse(Directory::create($dirPath)); + self::assertFalse(Directory::create(self::BASE . '/test/sub/path')); + self::assertTrue(Directory::create(self::BASE . '/test/sub/path', 0755, true)); + self::assertTrue(Directory::exists(self::BASE . '/test/sub/path')); + + self::assertEquals('test', Directory::name($dirPath)); + self::assertEquals('test', Directory::basename($dirPath)); + self::assertEquals('test', Directory::dirname($dirPath)); + self::assertEquals(str_replace('\\', '/', realpath($dirPath . '/../')), Directory::parent($dirPath)); + self::assertEquals($dirPath, Directory::dirpath($dirPath)); + + $now = new \DateTime('now'); + self::assertEquals($now->format('Y-m-d'), Directory::created($dirPath)->format('Y-m-d')); + self::assertEquals($now->format('Y-m-d'), Directory::changed($dirPath)->format('Y-m-d')); + + self::assertTrue(Directory::delete($dirPath)); + self::assertFalse(Directory::exists($dirPath)); + + $dirTestPath = self::BASE . '/dirtest'; + self::assertGreaterThan(0, Directory::size($dirTestPath)); + self::assertGreaterThan(Directory::size($dirTestPath, false), Directory::size($dirTestPath)); + self::assertGreaterThan(0, Directory::permission($dirTestPath)); + } + + public function testStaticMove() + { + if (!self::TEST) { + return; + } + + $dirTestPath = self::BASE . '/dirtest'; + + self::assertTrue(Directory::copy($dirTestPath, self::BASE . '/newdirtest')); + self::assertTrue(file_exists(self::BASE . '/newdirtest/sub/path/test3.txt')); + + self::assertTrue(Directory::delete($dirTestPath)); + self::assertFalse(Directory::exists($dirTestPath)); + + self::assertTrue(Directory::move(self::BASE . '/newdirtest', $dirTestPath)); + self::assertTrue(file_exists($dirTestPath . '/sub/path/test3.txt')); + + self::assertEquals(4, Directory::count($dirTestPath)); + self::assertEquals(1, Directory::count($dirTestPath, false)); + + self::assertEquals(6, count(Directory::list($dirTestPath))); + self::assertEquals(3, count(Directory::listByExtension($dirTestPath, 'txt'))); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidListPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + Directory::list(self::BASE . '/invalid.txt'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidCopyPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + Directory::copy(self::BASE . '/invalid', self::BASE . '/invalid2'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidMovePath() + { + if (!self::TEST) { + throw new PathException(''); + } + + Directory::move(self::BASE . '/invalid', self::BASE . '/invalid2'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidCreatedPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + Directory::created(self::BASE . '/invalid'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidChangedPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + Directory::changed(self::BASE . '/invalid'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidSizePath() + { + if (!self::TEST) { + throw new PathException(''); + } + + Directory::size(self::BASE . '/invalid'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidPermissionPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + Directory::permission(self::BASE . '/invalid'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidOwnerPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + Directory::owner(self::BASE . '/invalid'); + } +} + diff --git a/tests/System/File/Ftp/FileTest.php b/tests/System/File/Ftp/FileTest.php new file mode 100644 index 000000000..7bba8d634 --- /dev/null +++ b/tests/System/File/Ftp/FileTest.php @@ -0,0 +1,189 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\System\File\Ftp; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\System\File\Ftp\File; +use phpOMS\System\File\ContentPutMode; +use phpOMS\System\File\PathException; + +class FileTest extends \PHPUnit\Framework\TestCase +{ + const TEST = false; + const BASE = 'ftp://user:password@localhost'; + + public function testStatic() + { + if (!self::TEST) { + return; + } + + $testFile = self::BASE . '/test.txt'; + self::assertFalse(File::put($testFile, 'test', ContentPutMode::REPLACE)); + self::assertFalse(File::exists($testFile)); + self::assertTrue(File::put($testFile, 'test', ContentPutMode::CREATE)); + self::assertTrue(File::exists($testFile)); + + self::assertFalse(File::put($testFile, 'test', ContentPutMode::CREATE)); + self::assertTrue(File::put($testFile, 'test2', ContentPutMode::REPLACE)); + + self::assertEquals('test2', File::get($testFile)); + self::assertTrue(File::set($testFile, 'test3')); + self::assertTrue(File::append($testFile, 'test4')); + self::assertEquals('test3test4', File::get($testFile)); + self::assertTrue(File::prepend($testFile, 'test5')); + self::assertEquals('test5test3test4', File::get($testFile)); + + self::assertEquals(str_replace('\\', '/', realpath(dirname($testFile) . '/../')), File::parent($testFile)); + self::assertEquals('txt', File::extension($testFile)); + self::assertEquals('test', File::name($testFile)); + self::assertEquals('test.txt', File::basename($testFile)); + self::assertEquals(basename(realpath(self::BASE)), File::dirname($testFile)); + self::assertEquals(realpath(self::BASE), File::dirpath($testFile)); + self::assertEquals(1, File::count($testFile)); + + $now = new \DateTime('now'); + self::assertEquals($now->format('Y-m-d'), File::created($testFile)->format('Y-m-d')); + self::assertEquals($now->format('Y-m-d'), File::changed($testFile)->format('Y-m-d')); + + self::assertGreaterThan(0, File::size($testFile)); + self::assertGreaterThan(0, File::permission($testFile)); + + $newPath = self::BASE . '/sub/path/testing.txt'; + self::assertTrue(File::copy($testFile, $newPath)); + self::assertTrue(File::exists($newPath)); + self::assertFalse(File::copy($testFile, $newPath)); + self::assertTrue(File::copy($testFile, $newPath, true)); + self::assertEquals('test5test3test4', File::get($newPath)); + + $newPath2 = self::BASE . '/sub/path/testing2.txt'; + self::assertTrue(File::move($testFile, $newPath2)); + self::assertTrue(File::exists($newPath2)); + self::assertFalse(File::exists($testFile)); + self::assertEquals('test5test3test4', File::get($newPath2)); + + self::assertTrue(File::delete($newPath2)); + self::assertFalse(File::exists($newPath2)); + self::assertFalse(File::delete($newPath2)); + + unlink($newPath); + rmdir(self::BASE . '/sub/path/'); + rmdir(self::BASE . '/sub/'); + + self::assertTrue(File::create($testFile)); + self::assertFalse(File::create($testFile)); + self::assertEquals('', File::get($testFile)); + + unlink($testFile); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidGetPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + File::get(self::BASE . '/invalid.txt'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidCopyPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + File::copy(self::BASE . '/invalid.txt', self::BASE . '/invalid2.txt'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidMovePath() + { + if (!self::TEST) { + throw new PathException(''); + } + + File::move(self::BASE . '/invalid.txt', self::BASE . '/invalid2.txt'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidCreatedPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + File::created(self::BASE . '/invalid.txt'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidChangedPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + File::changed(self::BASE . '/invalid.txt'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidSizePath() + { + if (!self::TEST) { + throw new PathException(''); + } + + File::size(self::BASE . '/invalid.txt'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidPermissionPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + File::permission(self::BASE . '/invalid.txt'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidOwnerPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + File::owner(self::BASE . '/invalid.txt'); + } +} + diff --git a/tests/System/File/Ftp/FtpStorageTest.php b/tests/System/File/Ftp/FtpStorageTest.php new file mode 100644 index 000000000..316ccda88 --- /dev/null +++ b/tests/System/File/Ftp/FtpStorageTest.php @@ -0,0 +1,231 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\System\File\Ftp; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\System\File\Ftp\FtpStorage; +use phpOMS\System\File\ContentPutMode; +use phpOMS\System\File\PathException; + +class FtpStorageTest extends \PHPUnit\Framework\TestCase +{ + const TEST = false; + const BASE = 'ftp://user:password@localhost'; + + public function testFile() + { + if (!self::TEST) { + return; + } + + $testFile = self::BASE . '/test.txt'; + self::assertFalse(FtpStorage::put($testFile, 'test', ContentPutMode::REPLACE)); + self::assertFalse(FtpStorage::exists($testFile)); + self::assertTrue(FtpStorage::put($testFile, 'test', ContentPutMode::CREATE)); + self::assertTrue(FtpStorage::exists($testFile)); + + self::assertFalse(FtpStorage::put($testFile, 'test', ContentPutMode::CREATE)); + self::assertTrue(FtpStorage::put($testFile, 'test2', ContentPutMode::REPLACE)); + + self::assertEquals('test2', FtpStorage::get($testFile)); + self::assertTrue(FtpStorage::set($testFile, 'test3')); + self::assertTrue(FtpStorage::append($testFile, 'test4')); + self::assertEquals('test3test4', FtpStorage::get($testFile)); + self::assertTrue(FtpStorage::prepend($testFile, 'test5')); + self::assertEquals('test5test3test4', FtpStorage::get($testFile)); + + self::assertEquals(str_replace('\\', '/', realpath(dirname($testFile) . '/../')), FtpStorage::parent($testFile)); + self::assertEquals('txt', FtpStorage::extension($testFile)); + self::assertEquals('test', FtpStorage::name($testFile)); + self::assertEquals('test.txt', FtpStorage::basename($testFile)); + self::assertEquals(basename(realpath(self::BASE)), FtpStorage::dirname($testFile)); + self::assertEquals(realpath(self::BASE), FtpStorage::dirpath($testFile)); + self::assertEquals(1, FtpStorage::count($testFile)); + + $now = new \DateTime('now'); + self::assertEquals($now->format('Y-m-d'), FtpStorage::created($testFile)->format('Y-m-d')); + self::assertEquals($now->format('Y-m-d'), FtpStorage::changed($testFile)->format('Y-m-d')); + + self::assertGreaterThan(0, FtpStorage::size($testFile)); + self::assertGreaterThan(0, FtpStorage::permission($testFile)); + + $newPath = self::BASE . '/sub/path/testing.txt'; + self::assertTrue(FtpStorage::copy($testFile, $newPath)); + self::assertTrue(FtpStorage::exists($newPath)); + self::assertFalse(FtpStorage::copy($testFile, $newPath)); + self::assertTrue(FtpStorage::copy($testFile, $newPath, true)); + self::assertEquals('test5test3test4', FtpStorage::get($newPath)); + + $newPath2 = self::BASE . '/sub/path/testing2.txt'; + self::assertTrue(FtpStorage::move($testFile, $newPath2)); + self::assertTrue(FtpStorage::exists($newPath2)); + self::assertFalse(FtpStorage::exists($testFile)); + self::assertEquals('test5test3test4', FtpStorage::get($newPath2)); + + self::assertTrue(FtpStorage::delete($newPath2)); + self::assertFalse(FtpStorage::exists($newPath2)); + self::assertFalse(FtpStorage::delete($newPath2)); + + unlink($newPath); + rmdir(self::BASE . '/sub/path/'); + rmdir(self::BASE . '/sub/'); + + self::assertTrue(FtpStorage::create($testFile)); + self::assertFalse(FtpStorage::create($testFile)); + self::assertEquals('', FtpStorage::get($testFile)); + + unlink($testFile); + } + + public function testDirectory() + { + if (!self::TEST) { + return; + } + + $dirPath = self::BASE . '/test'; + self::assertTrue(FtpStorage::create($dirPath)); + self::assertTrue(FtpStorage::exists($dirPath)); + self::assertFalse(FtpStorage::create($dirPath)); + self::assertTrue(FtpStorage::create(self::BASE . '/test/sub/path')); + self::assertTrue(FtpStorage::exists(self::BASE . '/test/sub/path')); + + self::assertEquals('test', FtpStorage::name($dirPath)); + self::assertEquals('test', FtpStorage::basename($dirPath)); + self::assertEquals('test', FtpStorage::dirname($dirPath)); + self::assertEquals(str_replace('\\', '/', realpath($dirPath . '/../')), FtpStorage::parent($dirPath)); + self::assertEquals($dirPath, FtpStorage::dirpath($dirPath)); + + $now = new \DateTime('now'); + self::assertEquals($now->format('Y-m-d'), FtpStorage::created($dirPath)->format('Y-m-d')); + self::assertEquals($now->format('Y-m-d'), FtpStorage::changed($dirPath)->format('Y-m-d')); + + self::assertTrue(FtpStorage::delete($dirPath)); + self::assertFalse(FtpStorage::exists($dirPath)); + + $dirTestPath = self::BASE . '/dirtest'; + self::assertGreaterThan(0, FtpStorage::size($dirTestPath)); + self::assertGreaterThan(FtpStorage::size($dirTestPath, false), FtpStorage::size($dirTestPath)); + self::assertGreaterThan(0, FtpStorage::permission($dirTestPath)); + } + + public function testDirectoryMove() + { + if (!self::TEST) { + return; + } + + $dirTestPath = self::BASE . '/dirtest'; + self::assertTrue(FtpStorage::copy($dirTestPath, self::BASE . '/newdirtest')); + self::assertTrue(file_exists(self::BASE . '/newdirtest/sub/path/test3.txt')); + + self::assertTrue(FtpStorage::delete($dirTestPath)); + self::assertFalse(FtpStorage::exists($dirTestPath)); + + self::assertTrue(FtpStorage::move(self::BASE . '/newdirtest', $dirTestPath)); + self::assertTrue(file_exists($dirTestPath . '/sub/path/test3.txt')); + + self::assertEquals(4, FtpStorage::count($dirTestPath)); + self::assertEquals(1, FtpStorage::count($dirTestPath, false)); + + self::assertEquals(6, count(FtpStorage::list($dirTestPath))); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidPutPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + FtpStorage::put(self::BASE, 'Test'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidGetPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + FtpStorage::get(self::BASE); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidListPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + FtpStorage::list(self::BASE . '/FtpStorageTest.php'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidSetPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + FtpStorage::set(self::BASE, 'Test'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidAppendPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + FtpStorage::append(self::BASE, 'Test'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidPrependPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + FtpStorage::prepend(self::BASE, 'Test'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidExtensionPath() + { + if (!self::TEST) { + throw new PathException(''); + } + + FtpStorage::extension(self::BASE); + } +} + diff --git a/tests/System/File/Local/DirectoryTest.php b/tests/System/File/Local/DirectoryTest.php new file mode 100644 index 000000000..f99d2a005 --- /dev/null +++ b/tests/System/File/Local/DirectoryTest.php @@ -0,0 +1,137 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\System\File\Local; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\System\File\Local\Directory; +use phpOMS\System\File\PathException; + +class DirectoryTest extends \PHPUnit\Framework\TestCase +{ + public function testStatic() + { + $dirPath = __DIR__ . '/test'; + self::assertTrue(Directory::create($dirPath)); + self::assertTrue(Directory::exists($dirPath)); + self::assertFalse(Directory::create($dirPath)); + self::assertFalse(Directory::create(__DIR__ . '/test/sub/path')); + self::assertTrue(Directory::create(__DIR__ . '/test/sub/path', 0755, true)); + self::assertTrue(Directory::exists(__DIR__ . '/test/sub/path')); + + self::assertEquals('test', Directory::name($dirPath)); + self::assertEquals('test', Directory::basename($dirPath)); + self::assertEquals('test', Directory::dirname($dirPath)); + self::assertEquals(str_replace('\\', '/', realpath($dirPath . '/../')), Directory::parent($dirPath)); + self::assertEquals($dirPath, Directory::dirpath($dirPath)); + + $now = new \DateTime('now'); + self::assertEquals($now->format('Y-m-d'), Directory::created($dirPath)->format('Y-m-d')); + self::assertEquals($now->format('Y-m-d'), Directory::changed($dirPath)->format('Y-m-d')); + + self::assertTrue(Directory::delete($dirPath)); + self::assertFalse(Directory::exists($dirPath)); + + $dirTestPath = __DIR__ . '/dirtest'; + self::assertGreaterThan(0, Directory::size($dirTestPath)); + self::assertGreaterThan(Directory::size($dirTestPath, false), Directory::size($dirTestPath)); + self::assertGreaterThan(0, Directory::permission($dirTestPath)); + } + + public function testStaticMove() + { + $dirTestPath = __DIR__ . '/dirtest'; + + self::assertTrue(Directory::copy($dirTestPath, __DIR__ . '/newdirtest')); + self::assertTrue(file_exists(__DIR__ . '/newdirtest/sub/path/test3.txt')); + + self::assertTrue(Directory::delete($dirTestPath)); + self::assertFalse(Directory::exists($dirTestPath)); + + self::assertTrue(Directory::move(__DIR__ . '/newdirtest', $dirTestPath)); + self::assertTrue(file_exists($dirTestPath . '/sub/path/test3.txt')); + + self::assertEquals(4, Directory::count($dirTestPath)); + self::assertEquals(1, Directory::count($dirTestPath, false)); + + self::assertEquals(6, count(Directory::list($dirTestPath))); + self::assertEquals(3, count(Directory::listByExtension($dirTestPath, 'txt'))); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidListPath() + { + Directory::list(__DIR__ . '/invalid.txt'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidCopyPath() + { + Directory::copy(__DIR__ . '/invalid', __DIR__ . '/invalid2'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidMovePath() + { + Directory::move(__DIR__ . '/invalid', __DIR__ . '/invalid2'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidCreatedPath() + { + Directory::created(__DIR__ . '/invalid'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidChangedPath() + { + Directory::changed(__DIR__ . '/invalid'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidSizePath() + { + Directory::size(__DIR__ . '/invalid'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidPermissionPath() + { + Directory::permission(__DIR__ . '/invalid'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidOwnerPath() + { + Directory::owner(__DIR__ . '/invalid'); + } +} + diff --git a/tests/System/File/Local/FileTest.php b/tests/System/File/Local/FileTest.php new file mode 100644 index 000000000..411269784 --- /dev/null +++ b/tests/System/File/Local/FileTest.php @@ -0,0 +1,150 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\System\File\Local; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\System\File\Local\File; +use phpOMS\System\File\ContentPutMode; +use phpOMS\System\File\PathException; + +class FileTest extends \PHPUnit\Framework\TestCase +{ + public function testStatic() + { + $testFile = __DIR__ . '/test.txt'; + self::assertFalse(File::put($testFile, 'test', ContentPutMode::REPLACE)); + self::assertFalse(File::exists($testFile)); + self::assertTrue(File::put($testFile, 'test', ContentPutMode::CREATE)); + self::assertTrue(File::exists($testFile)); + + self::assertFalse(File::put($testFile, 'test', ContentPutMode::CREATE)); + self::assertTrue(File::put($testFile, 'test2', ContentPutMode::REPLACE)); + + self::assertEquals('test2', File::get($testFile)); + self::assertTrue(File::set($testFile, 'test3')); + self::assertTrue(File::append($testFile, 'test4')); + self::assertEquals('test3test4', File::get($testFile)); + self::assertTrue(File::prepend($testFile, 'test5')); + self::assertEquals('test5test3test4', File::get($testFile)); + + self::assertEquals(str_replace('\\', '/', realpath(dirname($testFile) . '/../')), File::parent($testFile)); + self::assertEquals('txt', File::extension($testFile)); + self::assertEquals('test', File::name($testFile)); + self::assertEquals('test.txt', File::basename($testFile)); + self::assertEquals(basename(realpath(__DIR__)), File::dirname($testFile)); + self::assertEquals(realpath(__DIR__), File::dirpath($testFile)); + self::assertEquals(1, File::count($testFile)); + + $now = new \DateTime('now'); + self::assertEquals($now->format('Y-m-d'), File::created($testFile)->format('Y-m-d')); + self::assertEquals($now->format('Y-m-d'), File::changed($testFile)->format('Y-m-d')); + + self::assertGreaterThan(0, File::size($testFile)); + self::assertGreaterThan(0, File::permission($testFile)); + + $newPath = __DIR__ . '/sub/path/testing.txt'; + self::assertTrue(File::copy($testFile, $newPath)); + self::assertTrue(File::exists($newPath)); + self::assertFalse(File::copy($testFile, $newPath)); + self::assertTrue(File::copy($testFile, $newPath, true)); + self::assertEquals('test5test3test4', File::get($newPath)); + + $newPath2 = __DIR__ . '/sub/path/testing2.txt'; + self::assertTrue(File::move($testFile, $newPath2)); + self::assertTrue(File::exists($newPath2)); + self::assertFalse(File::exists($testFile)); + self::assertEquals('test5test3test4', File::get($newPath2)); + + self::assertTrue(File::delete($newPath2)); + self::assertFalse(File::exists($newPath2)); + self::assertFalse(File::delete($newPath2)); + + unlink($newPath); + rmdir(__DIR__ . '/sub/path/'); + rmdir(__DIR__ . '/sub/'); + + self::assertTrue(File::create($testFile)); + self::assertFalse(File::create($testFile)); + self::assertEquals('', File::get($testFile)); + + unlink($testFile); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidGetPath() + { + File::get(__DIR__ . '/invalid.txt'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidCopyPath() + { + File::copy(__DIR__ . '/invalid.txt', __DIR__ . '/invalid2.txt'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidMovePath() + { + File::move(__DIR__ . '/invalid.txt', __DIR__ . '/invalid2.txt'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidCreatedPath() + { + File::created(__DIR__ . '/invalid.txt'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidChangedPath() + { + File::changed(__DIR__ . '/invalid.txt'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidSizePath() + { + File::size(__DIR__ . '/invalid.txt'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidPermissionPath() + { + File::permission(__DIR__ . '/invalid.txt'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidOwnerPath() + { + File::owner(__DIR__ . '/invalid.txt'); + } +} + diff --git a/tests/System/File/Local/LocalStorageTest.php b/tests/System/File/Local/LocalStorageTest.php new file mode 100644 index 000000000..8860bd4ce --- /dev/null +++ b/tests/System/File/Local/LocalStorageTest.php @@ -0,0 +1,188 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\System\File\Local; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\System\File\Local\LocalStorage; +use phpOMS\System\File\ContentPutMode; +use phpOMS\System\File\PathException; + +class LocalStorageTest extends \PHPUnit\Framework\TestCase +{ + public function testFile() + { + $testFile = __DIR__ . '/test.txt'; + self::assertFalse(LocalStorage::put($testFile, 'test', ContentPutMode::REPLACE)); + self::assertFalse(LocalStorage::exists($testFile)); + self::assertTrue(LocalStorage::put($testFile, 'test', ContentPutMode::CREATE)); + self::assertTrue(LocalStorage::exists($testFile)); + + self::assertFalse(LocalStorage::put($testFile, 'test', ContentPutMode::CREATE)); + self::assertTrue(LocalStorage::put($testFile, 'test2', ContentPutMode::REPLACE)); + + self::assertEquals('test2', LocalStorage::get($testFile)); + self::assertTrue(LocalStorage::set($testFile, 'test3')); + self::assertTrue(LocalStorage::append($testFile, 'test4')); + self::assertEquals('test3test4', LocalStorage::get($testFile)); + self::assertTrue(LocalStorage::prepend($testFile, 'test5')); + self::assertEquals('test5test3test4', LocalStorage::get($testFile)); + + self::assertEquals(str_replace('\\', '/', realpath(dirname($testFile) . '/../')), LocalStorage::parent($testFile)); + self::assertEquals('txt', LocalStorage::extension($testFile)); + self::assertEquals('test', LocalStorage::name($testFile)); + self::assertEquals('test.txt', LocalStorage::basename($testFile)); + self::assertEquals(basename(realpath(__DIR__)), LocalStorage::dirname($testFile)); + self::assertEquals(realpath(__DIR__), LocalStorage::dirpath($testFile)); + self::assertEquals(1, LocalStorage::count($testFile)); + + $now = new \DateTime('now'); + self::assertEquals($now->format('Y-m-d'), LocalStorage::created($testFile)->format('Y-m-d')); + self::assertEquals($now->format('Y-m-d'), LocalStorage::changed($testFile)->format('Y-m-d')); + + self::assertGreaterThan(0, LocalStorage::size($testFile)); + self::assertGreaterThan(0, LocalStorage::permission($testFile)); + + $newPath = __DIR__ . '/sub/path/testing.txt'; + self::assertTrue(LocalStorage::copy($testFile, $newPath)); + self::assertTrue(LocalStorage::exists($newPath)); + self::assertFalse(LocalStorage::copy($testFile, $newPath)); + self::assertTrue(LocalStorage::copy($testFile, $newPath, true)); + self::assertEquals('test5test3test4', LocalStorage::get($newPath)); + + $newPath2 = __DIR__ . '/sub/path/testing2.txt'; + self::assertTrue(LocalStorage::move($testFile, $newPath2)); + self::assertTrue(LocalStorage::exists($newPath2)); + self::assertFalse(LocalStorage::exists($testFile)); + self::assertEquals('test5test3test4', LocalStorage::get($newPath2)); + + self::assertTrue(LocalStorage::delete($newPath2)); + self::assertFalse(LocalStorage::exists($newPath2)); + self::assertFalse(LocalStorage::delete($newPath2)); + + unlink($newPath); + rmdir(__DIR__ . '/sub/path/'); + rmdir(__DIR__ . '/sub/'); + + self::assertTrue(LocalStorage::create($testFile)); + self::assertFalse(LocalStorage::create($testFile)); + self::assertEquals('', LocalStorage::get($testFile)); + + unlink($testFile); + } + + public function testDirectory() + { + $dirPath = __DIR__ . '/test'; + self::assertTrue(LocalStorage::create($dirPath)); + self::assertTrue(LocalStorage::exists($dirPath)); + self::assertFalse(LocalStorage::create($dirPath)); + self::assertTrue(LocalStorage::create(__DIR__ . '/test/sub/path')); + self::assertTrue(LocalStorage::exists(__DIR__ . '/test/sub/path')); + + self::assertEquals('test', LocalStorage::name($dirPath)); + self::assertEquals('test', LocalStorage::basename($dirPath)); + self::assertEquals('test', LocalStorage::dirname($dirPath)); + self::assertEquals(str_replace('\\', '/', realpath($dirPath . '/../')), LocalStorage::parent($dirPath)); + self::assertEquals($dirPath, LocalStorage::dirpath($dirPath)); + + $now = new \DateTime('now'); + self::assertEquals($now->format('Y-m-d'), LocalStorage::created($dirPath)->format('Y-m-d')); + self::assertEquals($now->format('Y-m-d'), LocalStorage::changed($dirPath)->format('Y-m-d')); + + self::assertTrue(LocalStorage::delete($dirPath)); + self::assertFalse(LocalStorage::exists($dirPath)); + + $dirTestPath = __DIR__ . '/dirtest'; + self::assertGreaterThan(0, LocalStorage::size($dirTestPath)); + self::assertGreaterThan(LocalStorage::size($dirTestPath, false), LocalStorage::size($dirTestPath)); + self::assertGreaterThan(0, LocalStorage::permission($dirTestPath)); + } + + public function testDirectoryMove() + { + $dirTestPath = __DIR__ . '/dirtest'; + self::assertTrue(LocalStorage::copy($dirTestPath, __DIR__ . '/newdirtest')); + self::assertTrue(file_exists(__DIR__ . '/newdirtest/sub/path/test3.txt')); + + self::assertTrue(LocalStorage::delete($dirTestPath)); + self::assertFalse(LocalStorage::exists($dirTestPath)); + + self::assertTrue(LocalStorage::move(__DIR__ . '/newdirtest', $dirTestPath)); + self::assertTrue(file_exists($dirTestPath . '/sub/path/test3.txt')); + + self::assertEquals(4, LocalStorage::count($dirTestPath)); + self::assertEquals(1, LocalStorage::count($dirTestPath, false)); + + self::assertEquals(6, count(LocalStorage::list($dirTestPath))); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidPutPath() + { + LocalStorage::put(__DIR__, 'Test'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidGetPath() + { + LocalStorage::get(__DIR__); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidListPath() + { + LocalStorage::list(__DIR__ . '/LocalStorageTest.php'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidSetPath() + { + LocalStorage::set(__DIR__, 'Test'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidAppendPath() + { + LocalStorage::append(__DIR__, 'Test'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidPrependPath() + { + LocalStorage::prepend(__DIR__, 'Test'); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testInvalidExtensionPath() + { + LocalStorage::extension(__DIR__); + } +} + diff --git a/tests/System/File/Local/dirtest/sub/path/test3.txt b/tests/System/File/Local/dirtest/sub/path/test3.txt new file mode 100644 index 000000000..e440e5c84 --- /dev/null +++ b/tests/System/File/Local/dirtest/sub/path/test3.txt @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/tests/System/File/Local/dirtest/sub/test2.txt b/tests/System/File/Local/dirtest/sub/test2.txt new file mode 100644 index 000000000..d8263ee98 --- /dev/null +++ b/tests/System/File/Local/dirtest/sub/test2.txt @@ -0,0 +1 @@ +2 \ No newline at end of file diff --git a/tests/System/File/Local/dirtest/sub/test4.md b/tests/System/File/Local/dirtest/sub/test4.md new file mode 100644 index 000000000..e69de29bb diff --git a/tests/System/File/Local/dirtest/test.txt b/tests/System/File/Local/dirtest/test.txt new file mode 100644 index 000000000..56a6051ca --- /dev/null +++ b/tests/System/File/Local/dirtest/test.txt @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/tests/System/File/PathExceptionTest.php b/tests/System/File/PathExceptionTest.php new file mode 100644 index 000000000..ccd942f23 --- /dev/null +++ b/tests/System/File/PathExceptionTest.php @@ -0,0 +1,30 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\System\File; + +use phpOMS\System\File\PathException; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +class PathExceptionTest extends \PHPUnit\Framework\TestCase +{ + public function testConstructor() + { + $e = new PathException('test.file'); + self::assertContains('test.file', $e->getMessage()); + self::assertEquals(0, $e->getCode()); + $this->isInstanceOf('\UnexpectedValueException'); + } +} diff --git a/tests/System/File/PermissionExceptionTest.php b/tests/System/File/PermissionExceptionTest.php new file mode 100644 index 000000000..7e444ee96 --- /dev/null +++ b/tests/System/File/PermissionExceptionTest.php @@ -0,0 +1,30 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\System\File; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\System\File\PermissionException; + +class PermissionExceptionTest extends \PHPUnit\Framework\TestCase +{ + public function testConstructor() + { + $e = new PermissionException('test.file'); + self::assertContains('test.file', $e->getMessage()); + self::assertEquals(0, $e->getCode()); + $this->isInstanceOf('\RuntimeException'); + } +} diff --git a/tests/System/File/StorageTest.php b/tests/System/File/StorageTest.php new file mode 100644 index 000000000..089ee1c7c --- /dev/null +++ b/tests/System/File/StorageTest.php @@ -0,0 +1,44 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\System\File; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\System\File\Storage; +use phpOMS\System\File\Local\LocalStorage; +use phpOMS\System\File\Ftp\FtpStorage; + +class StorageTest extends \PHPUnit\Framework\TestCase +{ + public function testStorage() + { + self::assertInstanceOf('\phpOMS\System\File\Local\LocalStorage', Storage::env('local')); + self::assertInstanceOf('\phpOMS\System\File\Local\LocalStorage', Storage::env()); + + self::assertTrue(Storage::register('ftp', '\phpOMS\System\File\Ftp\FtpStorage')); + self::assertTrue(Storage::register('test', LocalStorage::getInstance())); + self::assertInstanceOf('\phpOMS\System\File\Ftp\FtpStorage', Storage::env('ftp')); + self::assertInstanceOf('\phpOMS\System\File\Local\LocalStorage', Storage::env('test')); + } + + /** + * @expectedException \Exception + */ + public function testInvalidStorage() + { + self::assertInstanceOf('\phpOMS\System\File\Local\LocalStorage', Storage::env('invalid')); + } +} + diff --git a/tests/System/MimeTypeTest.php b/tests/System/MimeTypeTest.php new file mode 100644 index 000000000..bb197f41e --- /dev/null +++ b/tests/System/MimeTypeTest.php @@ -0,0 +1,35 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\System; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\System\MimeType; + +class MimeTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnum() + { + $enums = MimeType::getConstants(); + + foreach ($enums as $key => $value) { + if (stripos($value, '/') === false) { + self::assertFalse(true); + } + } + + self::assertTrue(true); + } +} diff --git a/tests/System/OperatingSystemTest.php b/tests/System/OperatingSystemTest.php new file mode 100644 index 000000000..944da65db --- /dev/null +++ b/tests/System/OperatingSystemTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\System; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\System\OperatingSystem; +use phpOMS\System\SystemType; + +class OperatingSystemTest extends \PHPUnit\Framework\TestCase +{ + public function testSystem() + { + self::assertNotEquals(SystemType::UNKNOWN, OperatingSystem::getSystem()); + } +} diff --git a/tests/System/SystemTypeTest.php b/tests/System/SystemTypeTest.php new file mode 100644 index 000000000..3f7738659 --- /dev/null +++ b/tests/System/SystemTypeTest.php @@ -0,0 +1,31 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\System; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\System\SystemType; + +class SystemTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(4, count(SystemType::getConstants())); + self::assertEquals(1, SystemType::UNKNOWN); + self::assertEquals(2, SystemType::WIN); + self::assertEquals(3, SystemType::LINUX); + self::assertEquals(4, SystemType::OSX); + } +} diff --git a/tests/System/SystemUtilsTest.php b/tests/System/SystemUtilsTest.php new file mode 100644 index 000000000..92b1e84f1 --- /dev/null +++ b/tests/System/SystemUtilsTest.php @@ -0,0 +1,36 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\System; + +use phpOMS\System\SystemUtils; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class SystemUtilsTest extends \PHPUnit\Framework\TestCase +{ + public function testSystem() + { + self::assertGreaterThan(0, SystemUtils::getRAM()); + self::assertGreaterThan(0, SystemUtils::getCpuUsage()); + + if (stristr(PHP_OS, 'WIN')) { + self::assertEquals(0, SystemUtils::getRAMUsage()); + } + + if (!stristr(PHP_OS, 'WIN')) { + self::assertGreaterThan(0, SystemUtils::getRAMUsage()); + } + } +} diff --git a/tests/UnhandledHandlerTest.php b/tests/UnhandledHandlerTest.php new file mode 100644 index 000000000..45566eeb7 --- /dev/null +++ b/tests/UnhandledHandlerTest.php @@ -0,0 +1,36 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS; + +require_once __DIR__ . '/../../../phpOMS/Autoloader.php'; + +use phpOMS\UnhandledHandler; + +class UnhandledHandlerTest extends \PHPUnit\Framework\TestCase +{ + public function testErrorHandling() + { + set_exception_handler(['\phpOMS\UnhandledHandler', 'exceptionHandler']); + set_error_handler(['\phpOMS\UnhandledHandler', 'errorHandler']); + register_shutdown_function(['\phpOMS\UnhandledHandler', 'shutdownHandler']); + + trigger_error('', E_USER_ERROR); + + UnhandledHandler::shutdownHandler(); + + self::assertFalse(UnhandledHandler::errorHandler(0, '', '', 0)); + } + +} diff --git a/tests/Uri/HttpTest.php b/tests/Uri/HttpTest.php new file mode 100644 index 000000000..ad5737245 --- /dev/null +++ b/tests/Uri/HttpTest.php @@ -0,0 +1,77 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Uri; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Uri\Http; + +class HttpTest extends \PHPUnit\Framework\TestCase +{ + public function testAttributes() + { + $obj = new Http(''); + self::assertInstanceOf('\phpOMS\Uri\Http', $obj); + + /* Testing members */ + self::assertObjectHasAttribute('rootPath', $obj); + self::assertObjectHasAttribute('uri', $obj); + self::assertObjectHasAttribute('scheme', $obj); + self::assertObjectHasAttribute('host', $obj); + self::assertObjectHasAttribute('port', $obj); + self::assertObjectHasAttribute('user', $obj); + self::assertObjectHasAttribute('pass', $obj); + self::assertObjectHasAttribute('path', $obj); + self::assertObjectHasAttribute('query', $obj); + self::assertObjectHasAttribute('queryString', $obj); + self::assertObjectHasAttribute('fragment', $obj); + self::assertObjectHasAttribute('base', $obj); + } + + public function testHelper() + { + self::assertTrue(Http::isValid('http://www.google.de')); + self::assertTrue(Http::isValid('http://google.de')); + self::assertTrue(Http::isValid('https://google.de')); + self::assertFalse(Http::isValid('https:/google.de')); + } + + public function testSetGet() + { + $obj = new Http($uri = 'https://www.google.com/test/path.php?para1=abc¶2=2#frag'); + + self::assertEquals('/', $obj->getRootPath()); + self::assertEquals(0, $obj->getPathOffset()); + self::assertEquals('https', $obj->getScheme()); + self::assertEquals('www.google.com', $obj->getHost()); + self::assertEquals(80, $obj->getPort()); + self::assertEquals('', $obj->getPass()); + self::assertEquals('', $obj->getUser()); + self::assertEquals('test/path', $obj->getPath()); + self::assertEquals('test/path?para1=abc¶2=2', $obj->getRoute()); + self::assertEquals('test', $obj->getPathElement(0)); + self::assertEquals('para1=abc¶2=2', $obj->getQuery()); + self::assertEquals(['para1' => 'abc', 'para2' => '2'], $obj->getQueryArray()); + self::assertEquals('2', $obj->getQuery('para2')); + self::assertEquals('frag', $obj->getFragment()); + self::assertEquals('https://www.google.com/', $obj->getBase()); + self::assertEquals($uri, $obj->__toString()); + self::assertEquals('www.google.com:80', $obj->getAuthority()); + self::assertEquals('', $obj->getUserInfo()); + + $obj->setRootPath('a'); + self::assertEquals('a', $obj->getRootPath()); + } +} diff --git a/tests/Uri/InvalidUriExceptionTest.php b/tests/Uri/InvalidUriExceptionTest.php new file mode 100644 index 000000000..28eb0e51f --- /dev/null +++ b/tests/Uri/InvalidUriExceptionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Uri; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Uri\InvalidUriException; + +class InvalidUriExceptionTest extends \PHPUnit\Framework\TestCase +{ + public function testException() + { + self::assertInstanceOf(\UnexpectedValueException::class, new InvalidUriException('')); + } +} diff --git a/tests/Uri/UriFactoryTest.php b/tests/Uri/UriFactoryTest.php new file mode 100644 index 000000000..355481d08 --- /dev/null +++ b/tests/Uri/UriFactoryTest.php @@ -0,0 +1,94 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Uri; + +use phpOMS\Uri\UriFactory; +use phpOMS\Uri\Http; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class UriFactoryTest extends \PHPUnit\Framework\TestCase +{ + + public function testDefault() + { + self::assertNull(UriFactory::getQuery('Invalid')); + } + + public function testSetGet() + { + self::assertTrue(UriFactory::setQuery('Valid', 'query1')); + self::assertEquals('query1', UriFactory::getQuery('Valid')); + + self::assertTrue(UriFactory::setQuery('Valid', 'query2', true)); + self::assertEquals('query2', UriFactory::getQuery('Valid')); + + self::assertFalse(UriFactory::setQuery('Valid', 'query3', false)); + self::assertEquals('query2', UriFactory::getQuery('Valid')); + + self::assertTrue(UriFactory::setQuery('/valid2', 'query4')); + self::assertEquals('query4', UriFactory::getQuery('/valid2')); + } + + public function testClearing() + { + self::assertTrue(UriFactory::clear('Valid')); + self::assertFalse(UriFactory::clear('Valid')); + self::assertNull(UriFactory::getQuery('Valid')); + self::assertEquals('query4', UriFactory::getQuery('/valid2')); + + self::assertTrue(UriFactory::clearAll()); + self::assertNull(UriFactory::getQuery('/valid2')); + + self::assertTrue(UriFactory::setQuery('/abc', 'query1')); + self::assertTrue(UriFactory::setQuery('/valid2', 'query2')); + self::assertTrue(UriFactory::setQuery('/valid3', 'query3')); + self::assertFalse(UriFactory::clearLike('\d+')); + self::assertTrue(UriFactory::clearLike('\/[a-z]*\d')); + self::assertNull(UriFactory::getQuery('/valid2')); + self::assertNull(UriFactory::getQuery('/valid3')); + self::assertEquals('query1', UriFactory::getQuery('/abc')); + } + + public function testBuilder() + { + $uri = 'www.test-uri.com?id={@ID}&test={.mTest}&two={/path}&hash={#hash}&none=#none&found={/not}&v={/valid2}'; + + $vars = [ + '@ID' => 1, + '.mTest' => 'someString', + '/path' => 'PATH', + '#hash' => 'test', + ]; + + self::assertTrue(UriFactory::setQuery('/valid2', 'query4')); + + $expected = 'www.test-uri.com?id=1&test=someString&two=PATH&hash=test&none=#none&found=/not&v=query4'; + + self::assertEquals($expected, UriFactory::build($uri, $vars)); + } + + public function testSetup() + { + $uri = 'http://www.test-uri.com/path/here?id=123&ab=c#fragi'; + + UriFactory::setupUriBuilder(new Http($uri)); + + self::assertEquals($uri, UriFactory::build('{/base}{/rootPath}{/}?id={?id}&ab={?ab}#{#}')); + self::assertEquals($uri, UriFactory::build('{/scheme}://{/host}{/rootPath}{/}?id={?id}&ab={?ab}#{#}')); + self::assertEquals($uri, UriFactory::build('{%}')); + self::assertEquals($uri, UriFactory::build('{/base}{/rootPath}{/}?{?}#{#}')); + } +} diff --git a/tests/Uri/UriSchemeTest.php b/tests/Uri/UriSchemeTest.php new file mode 100644 index 000000000..16be15d0f --- /dev/null +++ b/tests/Uri/UriSchemeTest.php @@ -0,0 +1,47 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Uri; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Uri\UriScheme; + +class UriSchemeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnum() + { + self::assertTrue(defined('phpOMS\Uri\UriScheme::HTTP')); + self::assertTrue(defined('phpOMS\Uri\UriScheme::FILE')); + self::assertTrue(defined('phpOMS\Uri\UriScheme::MAILTO')); + self::assertTrue(defined('phpOMS\Uri\UriScheme::FTP')); + self::assertTrue(defined('phpOMS\Uri\UriScheme::HTTPS')); + self::assertTrue(defined('phpOMS\Uri\UriScheme::IRC')); + self::assertTrue(defined('phpOMS\Uri\UriScheme::TEL')); + self::assertTrue(defined('phpOMS\Uri\UriScheme::TELNET')); + self::assertTrue(defined('phpOMS\Uri\UriScheme::SSH')); + self::assertTrue(defined('phpOMS\Uri\UriScheme::SKYPE')); + self::assertTrue(defined('phpOMS\Uri\UriScheme::SSL')); + self::assertTrue(defined('phpOMS\Uri\UriScheme::NFS')); + self::assertTrue(defined('phpOMS\Uri\UriScheme::GEO')); + self::assertTrue(defined('phpOMS\Uri\UriScheme::MARKET')); + self::assertTrue(defined('phpOMS\Uri\UriScheme::ITMS')); + } + + public function testEnumUnique() + { + $values = UriScheme::getConstants(); + self::assertEquals(count($values), array_sum(array_count_values($values))); + } +} diff --git a/tests/Utils/ArrayUtilsTest.php b/tests/Utils/ArrayUtilsTest.php new file mode 100644 index 000000000..b2629b357 --- /dev/null +++ b/tests/Utils/ArrayUtilsTest.php @@ -0,0 +1,121 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils; + +use phpOMS\Utils\ArrayUtils; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class ArrayUtilsTest extends \PHPUnit\Framework\TestCase +{ + public function testArrayGetSet() + { + $expected = [ + 'a' => [ + 'aa' => 1, + 'ab' => [ + 'aba', + 'ab0', + [ + 3, + 'c', + ], + 4, + ], + ], + 2 => '2a', + ]; + + $actual = []; + $actual = ArrayUtils::setArray('a/aa', $actual, 1, '/'); + $actual = ArrayUtils::setArray('a/ab', $actual, ['aba'], '/'); + $actual = ArrayUtils::setArray('a/ab', $actual, 'abb', '/'); + $actual = ArrayUtils::setArray('2', $actual, '2a', '/'); + $actual = ArrayUtils::setArray('a/ab/1', $actual, 'ab0', '/', true); + $actual = ArrayUtils::setArray('a/ab', $actual, [3, 4], '/'); + $actual = ArrayUtils::setArray('a/ab/2', $actual, 'c', '/'); + + self::assertEquals($expected, $actual); + self::assertEquals('ab0', ArrayUtils::getArray('a/ab/1', $expected)); + } + + public function testArrayInRecursive() + { + $expected = [ + 'a' => [ + 'aa' => 1, + 'ab' => [ + 'aba', + 'ab0', + ], + ], + 2 => '2a', + ]; + + self::assertTrue(ArrayUtils::inArrayRecursive('aba', $expected)); + self::assertFalse(ArrayUtils::inArrayRecursive('aba', ArrayUtils::unsetArray('a/ab', $expected, '/'))); + } + + public function testArrayConversion() + { + $expected = [ + 'a' => [ + 'aa' => 1, + 'ab' => [ + 'aba', + 'ab0', + ], + ], + 2 => '2a', + ]; + + $expected_str = "['a' => ['aa' => 1, 'ab' => [0 => 'aba', 1 => 'ab0', ], ], 2 => '2a', ]"; + + self::assertEquals($expected_str, ArrayUtils::stringify($expected)); + self::assertEquals('2;3;1;"""Text;"' . "\n", ArrayUtils::arrayToCSV(['a' => 2, 3, 1, '"Text;'], ';', '"', '\\')); + } + + public function testArrayRecursiveManipulation() + { + $numArr = [1, 2, 3, 4]; + $numArrRec = [1, [2, [3, 4]]]; + self::assertEquals(10, ArrayUtils::arraySumRecursive($numArrRec)); + self::assertEquals($numArr, ArrayUtils::arrayFlatten($numArrRec)); + } + + public function testArraySum() + { + $numArr = [1, 2, 3, 4]; + self::assertEquals(10, ArrayUtils::arraySum($numArr)); + self::assertEquals(9, ArrayUtils::arraySum($numArr, 1)); + self::assertEquals(5, ArrayUtils::arraySum($numArr, 1, 2)); + } + + public function testArrayAllIn() + { + $numArr = [1, 2, 3, 4]; + self::assertTrue(ArrayUtils::allInArray([], $numArr)); + self::assertTrue(ArrayUtils::allInArray([1, 3, 4], $numArr)); + self::assertTrue(ArrayUtils::allInArray([1, 2, 3, 4], $numArr)); + self::assertFalse(ArrayUtils::allInArray([1, 5, 3], $numArr)); + } + + public function testArrayAnyIn() + { + $numArr = [1, 2, 3, 4]; + self::assertTrue(ArrayUtils::anyInArray($numArr, [2, 6, 8])); + self::assertFalse(ArrayUtils::anyInArray($numArr, [10, 22])); + } +} diff --git a/tests/Utils/Barcode/AztecTest.php b/tests/Utils/Barcode/AztecTest.php new file mode 100644 index 000000000..2bb00126e --- /dev/null +++ b/tests/Utils/Barcode/AztecTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Barcode\Aztec; + +class AztecTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/Barcode/C128aTest.php b/tests/Utils/Barcode/C128aTest.php new file mode 100644 index 000000000..6b1bfd817 --- /dev/null +++ b/tests/Utils/Barcode/C128aTest.php @@ -0,0 +1,35 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Barcode\C128a; + +class C128aTest extends \PHPUnit\Framework\TestCase +{ + public function testImage() + { + $path = __DIR__ . '/c128a.png'; + if (file_exists($path)) { + unlink($path); + } + + $img = new C128a('ABCDEFG0123()+-', 200, 50); + $img->saveToPngFile($path); + + self::assertTrue(file_exists($path)); + } +} diff --git a/tests/Utils/Barcode/C128bTest.php b/tests/Utils/Barcode/C128bTest.php new file mode 100644 index 000000000..17f7f506d --- /dev/null +++ b/tests/Utils/Barcode/C128bTest.php @@ -0,0 +1,35 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Barcode\C128b; + +class C128bTest extends \PHPUnit\Framework\TestCase +{ + public function testImage() + { + $path = __DIR__ . '/c128b.png'; + if (file_exists($path)) { + unlink($path); + } + + $img = new C128b('ABcdeFG0123+-!@?', 200, 50); + $img->saveToPngFile($path); + + self::assertTrue(file_exists($path)); + } +} diff --git a/tests/Utils/Barcode/C128cTest.php b/tests/Utils/Barcode/C128cTest.php new file mode 100644 index 000000000..b7af5f13d --- /dev/null +++ b/tests/Utils/Barcode/C128cTest.php @@ -0,0 +1,35 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Barcode\C128c; + +class C128cTest extends \PHPUnit\Framework\TestCase +{ + public function testImage() + { + $path = __DIR__ . '/c128c.png'; + if (file_exists($path)) { + unlink($path); + } + + $img = new C128c('412163', 200, 50); + $img->saveToPngFile($path); + + self::assertTrue(file_exists($path)); + } +} diff --git a/tests/Utils/Barcode/C25Test.php b/tests/Utils/Barcode/C25Test.php new file mode 100644 index 000000000..99f45945d --- /dev/null +++ b/tests/Utils/Barcode/C25Test.php @@ -0,0 +1,35 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Barcode\C25; + +class C25Test extends \PHPUnit\Framework\TestCase +{ + public function testImage() + { + $path = __DIR__ . '/c25.png'; + if (file_exists($path)) { + unlink($path); + } + + $img = new C25('1234567890', 150, 50); + $img->saveToPngFile($path); + + self::assertTrue(file_exists($path)); + } +} diff --git a/tests/Utils/Barcode/C39Test.php b/tests/Utils/Barcode/C39Test.php new file mode 100644 index 000000000..bc01b1803 --- /dev/null +++ b/tests/Utils/Barcode/C39Test.php @@ -0,0 +1,35 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Barcode\C39; + +class C39Test extends \PHPUnit\Framework\TestCase +{ + public function testImage() + { + $path = __DIR__ . '/c39.png'; + if (file_exists($path)) { + unlink($path); + } + + $img = new C39('ABCDEFG0123+-', 150, 50); + $img->saveToPngFile($path); + + self::assertTrue(file_exists($path)); + } +} diff --git a/tests/Utils/Barcode/CodebarTest.php b/tests/Utils/Barcode/CodebarTest.php new file mode 100644 index 000000000..dd5eecbff --- /dev/null +++ b/tests/Utils/Barcode/CodebarTest.php @@ -0,0 +1,35 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Barcode\Codebar; + +class CodebarTest extends \PHPUnit\Framework\TestCase +{ + public function testImage() + { + $path = __DIR__ . '/codebar.png'; + if (file_exists($path)) { + unlink($path); + } + + $img = new Codebar('412163', 200, 50); + $img->saveToPngFile($path); + + self::assertTrue(file_exists($path)); + } +} diff --git a/tests/Utils/Barcode/DatamatrixTest.php b/tests/Utils/Barcode/DatamatrixTest.php new file mode 100644 index 000000000..13a4d1344 --- /dev/null +++ b/tests/Utils/Barcode/DatamatrixTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Barcode\Datamatrix; + +class DatamatrixTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/Barcode/HIBCCTest.php b/tests/Utils/Barcode/HIBCCTest.php new file mode 100644 index 000000000..cd3c5aaab --- /dev/null +++ b/tests/Utils/Barcode/HIBCCTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Barcode\HIBCC; + +class HIBCCTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/Barcode/OrientationTypeTest.php b/tests/Utils/Barcode/OrientationTypeTest.php new file mode 100644 index 000000000..53148b37c --- /dev/null +++ b/tests/Utils/Barcode/OrientationTypeTest.php @@ -0,0 +1,31 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Barcode\OrientationType; + +class OrientationTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(2, count(OrientationType::getConstants())); + self::assertEquals(OrientationType::getConstants(), array_unique(OrientationType::getConstants())); + + self::assertEquals(0, OrientationType::HORIZONTAL); + self::assertEquals(1, OrientationType::VERTICAL); + } +} diff --git a/tests/Utils/Barcode/QRTest.php b/tests/Utils/Barcode/QRTest.php new file mode 100644 index 000000000..162e9a5c0 --- /dev/null +++ b/tests/Utils/Barcode/QRTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Barcode\QR; + +class QRTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/Barcode/c128a.png b/tests/Utils/Barcode/c128a.png new file mode 100644 index 000000000..120cd0ce7 Binary files /dev/null and b/tests/Utils/Barcode/c128a.png differ diff --git a/tests/Utils/Barcode/c128b.png b/tests/Utils/Barcode/c128b.png new file mode 100644 index 000000000..51b361183 Binary files /dev/null and b/tests/Utils/Barcode/c128b.png differ diff --git a/tests/Utils/Barcode/c128c.png b/tests/Utils/Barcode/c128c.png new file mode 100644 index 000000000..e30c40972 Binary files /dev/null and b/tests/Utils/Barcode/c128c.png differ diff --git a/tests/Utils/Barcode/c25.png b/tests/Utils/Barcode/c25.png new file mode 100644 index 000000000..b4af15de2 Binary files /dev/null and b/tests/Utils/Barcode/c25.png differ diff --git a/tests/Utils/Barcode/c39.png b/tests/Utils/Barcode/c39.png new file mode 100644 index 000000000..d0bbd6c21 Binary files /dev/null and b/tests/Utils/Barcode/c39.png differ diff --git a/tests/Utils/Barcode/codebar.png b/tests/Utils/Barcode/codebar.png new file mode 100644 index 000000000..c0cc360a8 Binary files /dev/null and b/tests/Utils/Barcode/codebar.png differ diff --git a/tests/Utils/ColorUtilsTest.php b/tests/Utils/ColorUtilsTest.php new file mode 100644 index 000000000..5a4b08cd0 --- /dev/null +++ b/tests/Utils/ColorUtilsTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\ColorUtils; + +class ColorUtilsTest extends \PHPUnit\Framework\TestCase +{ + public function testColor() + { + self::assertEquals(['r' => 0xbc, 'g' => 0x39, 'b' => 0x6c], ColorUtils::intToRgb(12335468)); + self::assertEquals(12335468, ColorUtils::rgbToInt(['r' => 0xbc, 'g' => 0x39, 'b' => 0x6c])); + } +} diff --git a/tests/Utils/Compression/LZWTest.php b/tests/Utils/Compression/LZWTest.php new file mode 100644 index 000000000..6fb456040 --- /dev/null +++ b/tests/Utils/Compression/LZWTest.php @@ -0,0 +1,29 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Compression; + +use phpOMS\Utils\Compression\LZW; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +class LZWTest extends \PHPUnit\Framework\TestCase +{ + public function testLZW() + { + $expected = 'This is a test'; + $compression = new LZW(); + self::assertEquals($expected, $compression->decompress($compression->compress($expected))); + } +} diff --git a/tests/Utils/Converter/AngleTypeTest.php b/tests/Utils/Converter/AngleTypeTest.php new file mode 100644 index 000000000..1659852dd --- /dev/null +++ b/tests/Utils/Converter/AngleTypeTest.php @@ -0,0 +1,39 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Converter; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Converter\AngleType; + +class AngleTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(10, count(AngleType::getConstants())); + self::assertEquals(AngleType::getConstants(), array_unique(AngleType::getConstants())); + + self::assertEquals('deg', AngleType::DEGREE); + self::assertEquals('rad', AngleType::RADIAN); + self::assertEquals('arcsec', AngleType::SECOND); + self::assertEquals('arcmin', AngleType::MINUTE); + self::assertEquals('mil (us ww2)', AngleType::MILLIRADIAN_US); + self::assertEquals('mil (uk)', AngleType::MILLIRADIAN_UK); + self::assertEquals('mil (ussr)', AngleType::MILLIRADIAN_USSR); + self::assertEquals('mil (nato)', AngleType::MILLIRADIAN_NATO); + self::assertEquals('g', AngleType::GRADIAN); + self::assertEquals('crad', AngleType::CENTRAD); + } +} diff --git a/tests/Utils/Converter/AreaTypeTest.php b/tests/Utils/Converter/AreaTypeTest.php new file mode 100644 index 000000000..62a5d7f37 --- /dev/null +++ b/tests/Utils/Converter/AreaTypeTest.php @@ -0,0 +1,42 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Converter; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Converter\AreaType; + +class AreaTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(13, count(AreaType::getConstants())); + self::assertEquals(AreaType::getConstants(), array_unique(AreaType::getConstants())); + + self::assertEquals('ft', AreaType::SQUARE_FEET); + self::assertEquals('m', AreaType::SQUARE_METERS); + self::assertEquals('km', AreaType::SQUARE_KILOMETERS); + self::assertEquals('mi', AreaType::SQUARE_MILES); + self::assertEquals('yd', AreaType::SQUARE_YARDS); + self::assertEquals('in', AreaType::SQUARE_INCHES); + self::assertEquals('muin', AreaType::SQUARE_MICROINCHES); + self::assertEquals('cm', AreaType::SQUARE_CENTIMETERS); + self::assertEquals('mm', AreaType::SQUARE_MILIMETERS); + self::assertEquals('micron', AreaType::SQUARE_MICROMETERS); + self::assertEquals('dm', AreaType::SQUARE_DECIMETERS); + self::assertEquals('ha', AreaType::HECTARES); + self::assertEquals('ac', AreaType::ACRES); + } +} diff --git a/tests/Utils/Converter/CurrencyTest.php b/tests/Utils/Converter/CurrencyTest.php new file mode 100644 index 000000000..fa2fddaef --- /dev/null +++ b/tests/Utils/Converter/CurrencyTest.php @@ -0,0 +1,56 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Converter; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Converter\Currency; +use phpOMS\Localization\ISO4217CharEnum; + +class CurrencyTest extends \PHPUnit\Framework\TestCase +{ + public function testCurrency() + { + self::assertGreaterThan(0, Currency::fromEurTo(1, ISO4217CharEnum::_USD)); + self::assertGreaterThan(0, Currency::fromToEur(1, ISO4217CharEnum::_USD)); + + Currency::resetCurrencies(); + self::assertGreaterThan(0, Currency::convertCurrency(1, ISO4217CharEnum::_USD, ISO4217CharEnum::_GBP)); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testInvalidFromEur() + { + Currency::fromEurTo(1, 'ERROR'); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testInvalidToEur() + { + Currency::fromToEur(1, 'ERROR'); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testInvalidConvert() + { + Currency::convertCurrency(1, 'ERROR', 'TEST'); + } +} diff --git a/tests/Utils/Converter/EnergyPowerTypeTest.php b/tests/Utils/Converter/EnergyPowerTypeTest.php new file mode 100644 index 000000000..c7aa343b5 --- /dev/null +++ b/tests/Utils/Converter/EnergyPowerTypeTest.php @@ -0,0 +1,38 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Converter; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Converter\EnergyPowerType; + +class EnergyPowerTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(9, count(EnergyPowerType::getConstants())); + self::assertEquals(EnergyPowerType::getConstants(), array_unique(EnergyPowerType::getConstants())); + + self::assertEquals('kWh', EnergyPowerType::KILOWATT_HOUERS); + self::assertEquals('MWh', EnergyPowerType::MEGAWATT_HOUERS); + self::assertEquals('kt', EnergyPowerType::KILOTONS); + self::assertEquals('J', EnergyPowerType::JOULS); + self::assertEquals('Cal', EnergyPowerType::CALORIES); + self::assertEquals('BTU', EnergyPowerType::BTU); + self::assertEquals('kJ', EnergyPowerType::KILOJOULS); + self::assertEquals('thmEC', EnergyPowerType::THERMEC); + self::assertEquals('Nm', EnergyPowerType::NEWTON_METERS); + } +} diff --git a/tests/Utils/Converter/FileSizeTypeTest.php b/tests/Utils/Converter/FileSizeTypeTest.php new file mode 100644 index 000000000..c29fa88b2 --- /dev/null +++ b/tests/Utils/Converter/FileSizeTypeTest.php @@ -0,0 +1,37 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Converter; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Converter\FileSizeType; + +class FileSizeTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(10, count(FileSizeType::getConstants())); + self::assertEquals('TB', FileSizeType::TERRABYTE); + self::assertEquals('GB', FileSizeType::GIGABYTE); + self::assertEquals('MB', FileSizeType::MEGABYTE); + self::assertEquals('KB', FileSizeType::KILOBYTE); + self::assertEquals('B', FileSizeType::BYTE); + self::assertEquals('tbit', FileSizeType::TERRABIT); + self::assertEquals('gbit', FileSizeType::GIGABIT); + self::assertEquals('mbit', FileSizeType::MEGABIT); + self::assertEquals('kbit', FileSizeType::KILOBIT); + self::assertEquals('bit', FileSizeType::BIT); + } +} diff --git a/tests/Utils/Converter/FileTest.php b/tests/Utils/Converter/FileTest.php new file mode 100644 index 000000000..04686ebf6 --- /dev/null +++ b/tests/Utils/Converter/FileTest.php @@ -0,0 +1,37 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Converter; + +use phpOMS\Utils\Converter\File; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +class FileTest extends \PHPUnit\Framework\TestCase +{ + public function testByteSizeToString() + { + self::assertEquals('400b', File::byteSizeToString(400)); + self::assertEquals('5kb', File::byteSizeToString(5000)); + self::assertEquals('7mb', File::byteSizeToString(7000000)); + self::assertEquals('1.5gb', File::byteSizeToString(1500000000)); + } + + public function testKilobyteSizeToString() + { + self::assertEquals('500kb', File::kilobyteSizeToString(500)); + self::assertEquals('5mb', File::kilobyteSizeToString(5000)); + self::assertEquals('5.4gb', File::kilobyteSizeToString(5430000)); + } +} diff --git a/tests/Utils/Converter/IpTest.php b/tests/Utils/Converter/IpTest.php new file mode 100644 index 000000000..467c7739f --- /dev/null +++ b/tests/Utils/Converter/IpTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Converter; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Converter\Ip; + +class IpTest extends \PHPUnit\Framework\TestCase +{ + public function testIp() + { + self::assertTrue(abs(1527532998.0 - Ip::ip2Float('91.12.77.198')) < 1); + } +} diff --git a/tests/Utils/Converter/LengthTypeTest.php b/tests/Utils/Converter/LengthTypeTest.php new file mode 100644 index 000000000..0b9a1a3ad --- /dev/null +++ b/tests/Utils/Converter/LengthTypeTest.php @@ -0,0 +1,50 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Converter; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Converter\LengthType; + +class LengthTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(21, count(LengthType::getConstants())); + self::assertEquals(LengthType::getConstants(), array_unique(LengthType::getConstants())); + + self::assertEquals('mi', LengthType::MILES); + self::assertEquals('m', LengthType::METERS); + self::assertEquals('micron', LengthType::MICROMETER); + self::assertEquals('cm', LengthType::CENTIMETERS); + self::assertEquals('mm', LengthType::MILLIMETERS); + self::assertEquals('km', LengthType::KILOMETERS); + self::assertEquals('ch', LengthType::CHAINS); + self::assertEquals('ft', LengthType::FEET); + self::assertEquals('fur', LengthType::FURLONGS); + self::assertEquals('muin', LengthType::MICROINCH); + self::assertEquals('in', LengthType::INCHES); + self::assertEquals('yd', LengthType::YARDS); + self::assertEquals('pc', LengthType::PARSECS); + self::assertEquals('uk nmi', LengthType::UK_NAUTICAL_MILES); + self::assertEquals('us nmi', LengthType::US_NAUTICAL_MILES); + self::assertEquals('uk nl', LengthType::UK_NAUTICAL_LEAGUES); + self::assertEquals('nl', LengthType::NAUTICAL_LEAGUES); + self::assertEquals('uk lg', LengthType::UK_LEAGUES); + self::assertEquals('us lg', LengthType::US_LEAGUES); + self::assertEquals('ly', LengthType::LIGHTYEARS); + self::assertEquals('dm', LengthType::DECIMETERS); + } +} diff --git a/tests/Utils/Converter/MeasurementTest.php b/tests/Utils/Converter/MeasurementTest.php new file mode 100644 index 000000000..10f03563a --- /dev/null +++ b/tests/Utils/Converter/MeasurementTest.php @@ -0,0 +1,165 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Converter; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Converter\Measurement; +use phpOMS\Utils\Converter\TemperatureType; +use phpOMS\Utils\Converter\WeightType; +use phpOMS\Utils\Converter\LengthType; +use phpOMS\Utils\Converter\AreaType; +use phpOMS\Utils\Converter\VolumeType; +use phpOMS\Utils\Converter\SpeedType; +use phpOMS\Utils\Converter\TimeType; +use phpOMS\Utils\Converter\AngleType; +use phpOMS\Utils\Converter\PressureType; +use phpOMS\Utils\Converter\EnergyPowerType; +use phpOMS\Utils\Converter\FileSizeType; + +class MeasurementTest extends \PHPUnit\Framework\TestCase +{ + public function testTemperature() + { + $temps = TemperatureType::getConstants(); + + foreach ($temps as $from) { + foreach ($temps as $to) { + $rand = mt_rand(0, 100); + self::assertTrue(($rand - Measurement::convertTemperature(Measurement::convertTemperature($rand, $from, $to), $to, $from)) < 1); + } + } + } + + public function testWeight() + { + $weights = WeightType::getConstants(); + + foreach ($weights as $from) { + foreach ($weights as $to) { + $rand = mt_rand(0, 100); + self::assertTrue(($rand - Measurement::convertWeight(Measurement::convertWeight($rand, $from, $to), $to, $from)) < 1); + } + } + } + + public function testLength() + { + $lengths = LengthType::getConstants(); + + foreach ($lengths as $from) { + foreach ($lengths as $to) { + $rand = mt_rand(0, 100); + self::assertTrue(($rand - Measurement::convertLength(Measurement::convertLength($rand, $from, $to), $to, $from)) < 1); + } + } + } + + public function testArea() + { + $areas = AreaType::getConstants(); + + foreach ($areas as $from) { + foreach ($areas as $to) { + $rand = mt_rand(0, 100); + self::assertTrue(($rand - Measurement::convertArea(Measurement::convertArea($rand, $from, $to), $to, $from)) < 1); + } + } + } + + public function testVolume() + { + $volumes = VolumeType::getConstants(); + + foreach ($volumes as $from) { + foreach ($volumes as $to) { + $rand = mt_rand(0, 100); + self::assertTrue(($rand - Measurement::convertVolume(Measurement::convertVolume($rand, $from, $to), $to, $from)) < 1); + } + } + } + + public function testSpeed() + { + $speeds = SpeedType::getConstants(); + + foreach ($speeds as $from) { + foreach ($speeds as $to) { + $rand = mt_rand(0, 100); + self::assertTrue(($rand - Measurement::convertSpeed(Measurement::convertSpeed($rand, $from, $to), $to, $from)) < 1); + } + } + } + + public function testTime() + { + $times = TimeType::getConstants(); + + foreach ($times as $from) { + foreach ($times as $to) { + $rand = mt_rand(0, 100); + self::assertTrue(($rand - Measurement::convertTime(Measurement::convertTime($rand, $from, $to), $to, $from)) < 1); + } + } + } + + public function testAngle() + { + $angles = AngleType::getConstants(); + + foreach ($angles as $from) { + foreach ($angles as $to) { + $rand = mt_rand(0, 100); + self::assertTrue(($rand - Measurement::convertAngle(Measurement::convertAngle($rand, $from, $to), $to, $from)) < 1); + } + } + } + + public function testPressure() + { + $pressures = PressureType::getConstants(); + + foreach ($pressures as $from) { + foreach ($pressures as $to) { + $rand = mt_rand(0, 100); + self::assertTrue(($rand - Measurement::convertPressure(Measurement::convertPressure($rand, $from, $to), $to, $from)) < 1); + } + } + } + + public function testEnergy() + { + $energies = EnergyPowerType::getConstants(); + + foreach ($energies as $from) { + foreach ($energies as $to) { + $rand = mt_rand(0, 100); + self::assertTrue(($rand - Measurement::convertEnergy(Measurement::convertEnergy($rand, $from, $to), $to, $from)) < 1); + } + } + } + + public function testFileSize() + { + $fileSizes = FileSizeType::getConstants(); + + foreach ($fileSizes as $from) { + foreach ($fileSizes as $to) { + $rand = mt_rand(0, 100); + self::assertTrue(($rand - Measurement::convertFileSize(Measurement::convertFileSize($rand, $from, $to), $to, $from)) < 1); + } + } + } +} diff --git a/tests/Utils/Converter/NumericTest.php b/tests/Utils/Converter/NumericTest.php new file mode 100644 index 000000000..8b1512351 --- /dev/null +++ b/tests/Utils/Converter/NumericTest.php @@ -0,0 +1,44 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Converter; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Converter\Numeric; + +class NumericTest extends \PHPUnit\Framework\TestCase +{ + public function testArabicRoman() + { + $rand = mt_rand(1, 9999); + self::assertEquals($rand, Numeric::romanToArabic(Numeric::arabicToRoman($rand))); + + self::assertEquals('VIII', Numeric::arabicToRoman(8)); + self::assertEquals('IX', Numeric::arabicToRoman(9)); + self::assertEquals('X', Numeric::arabicToRoman(10)); + self::assertEquals('XI', Numeric::arabicToRoman(11)); + } + + public function testBase() + { + self::assertEquals('443', Numeric::convertBase('123', '0123456789', '01234')); + self::assertEquals('7B', Numeric::convertBase('123', '0123456789', '0123456789ABCDEF')); + self::assertEquals('173', Numeric::convertBase('123', '0123456789', '01234567')); + + self::assertEquals('123', Numeric::convertBase('443', '01234', '0123456789')); + self::assertEquals('123', Numeric::convertBase('7B', '0123456789ABCDEF', '0123456789')); + self::assertEquals('123', Numeric::convertBase('173', '01234567', '0123456789')); + } +} diff --git a/tests/Utils/Converter/PressureTypeTest.php b/tests/Utils/Converter/PressureTypeTest.php new file mode 100644 index 000000000..4cf36af6a --- /dev/null +++ b/tests/Utils/Converter/PressureTypeTest.php @@ -0,0 +1,42 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Converter; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Converter\PressureType; + +class PressureTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(13, count(PressureType::getConstants())); + self::assertEquals(PressureType::getConstants(), array_unique(PressureType::getConstants())); + + self::assertEquals('Pa', PressureType::PASCALS); + self::assertEquals('bar', PressureType::BAR); + self::assertEquals('psi', PressureType::POUND_PER_SQUARE_INCH); + self::assertEquals('atm', PressureType::ATMOSPHERES); + self::assertEquals('inHg', PressureType::INCHES_OF_MERCURY); + self::assertEquals('inH20', PressureType::INCHES_OF_WATER); + self::assertEquals('mmH20', PressureType::MILLIMETERS_OF_WATER); + self::assertEquals('mmHg', PressureType::MILLIMETERS_OF_MERCURY); + self::assertEquals('mbar', PressureType::MILLIBAR); + self::assertEquals('kg/m2', PressureType::KILOGRAM_PER_SQUARE_METER); + self::assertEquals('N/m2', PressureType::NEWTONS_PER_METER_SQUARED); + self::assertEquals('psf', PressureType::POUNDS_PER_SQUARE_FOOT); + self::assertEquals('Torr', PressureType::TORRS); + } +} diff --git a/tests/Utils/Converter/SpeedTypeTest.php b/tests/Utils/Converter/SpeedTypeTest.php new file mode 100644 index 000000000..2bc67f9be --- /dev/null +++ b/tests/Utils/Converter/SpeedTypeTest.php @@ -0,0 +1,63 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Converter; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Converter\SpeedType; + +class SpeedTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(34, count(SpeedType::getConstants())); + self::assertEquals(SpeedType::getConstants(), array_unique(SpeedType::getConstants())); + + self::assertEquals('mpd', SpeedType::MILES_PER_DAY); + self::assertEquals('mph', SpeedType::MILES_PER_HOUR); + self::assertEquals('mpm', SpeedType::MILES_PER_MINUTE); + self::assertEquals('mps', SpeedType::MILES_PER_SECOND); + self::assertEquals('kpd', SpeedType::KILOMETERS_PER_DAY); + self::assertEquals('kph', SpeedType::KILOMETERS_PER_HOUR); + self::assertEquals('kpm', SpeedType::KILOMETERS_PER_MINUTE); + self::assertEquals('kps', SpeedType::KILOMETERS_PER_SECOND); + self::assertEquals('md', SpeedType::METERS_PER_DAY); + self::assertEquals('mh', SpeedType::METERS_PER_HOUR); + self::assertEquals('mm', SpeedType::METERS_PER_MINUTE); + self::assertEquals('ms', SpeedType::METERS_PER_SECOND); + self::assertEquals('cpd', SpeedType::CENTIMETERS_PER_DAY); + self::assertEquals('cph', SpeedType::CENTIMETERS_PER_HOUR); + self::assertEquals('cpm', SpeedType::CENTIMETERS_PER_MINUTES); + self::assertEquals('cps', SpeedType::CENTIMETERS_PER_SECOND); + self::assertEquals('mmpd', SpeedType::MILLIMETERS_PER_DAY); + self::assertEquals('mmph', SpeedType::MILLIMETERS_PER_HOUR); + self::assertEquals('mmpm', SpeedType::MILLIMETERS_PER_MINUTE); + self::assertEquals('mmps', SpeedType::MILLIMETERS_PER_SECOND); + self::assertEquals('ypd', SpeedType::YARDS_PER_DAY); + self::assertEquals('yph', SpeedType::YARDS_PER_HOUR); + self::assertEquals('ypm', SpeedType::YARDS_PER_MINUTE); + self::assertEquals('yps', SpeedType::YARDS_PER_SECOND); + self::assertEquals('ind', SpeedType::INCHES_PER_DAY); + self::assertEquals('inh', SpeedType::INCHES_PER_HOUR); + self::assertEquals('inm', SpeedType::INCHES_PER_MINUTE); + self::assertEquals('ins', SpeedType::INCHES_PER_SECOND); + self::assertEquals('ftd', SpeedType::FEET_PER_DAY); + self::assertEquals('fth', SpeedType::FEET_PER_HOUR); + self::assertEquals('ftm', SpeedType::FEET_PER_MINUTE); + self::assertEquals('fts', SpeedType::FEET_PER_SECOND); + self::assertEquals('mach', SpeedType::MACH); + self::assertEquals('knots', SpeedType::KNOTS); + } +} diff --git a/tests/Utils/Converter/TemperatureTypeTest.php b/tests/Utils/Converter/TemperatureTypeTest.php new file mode 100644 index 000000000..f971ffb9b --- /dev/null +++ b/tests/Utils/Converter/TemperatureTypeTest.php @@ -0,0 +1,37 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Converter; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Converter\TemperatureType; + +class TemperatureTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(8, count(TemperatureType::getConstants())); + self::assertEquals(TemperatureType::getConstants(), array_unique(TemperatureType::getConstants())); + + self::assertEquals('celsius', TemperatureType::CELSIUS); + self::assertEquals('fahrenheit', TemperatureType::FAHRENHEIT); + self::assertEquals('kelvin', TemperatureType::KELVIN); + self::assertEquals('reaumur', TemperatureType::REAUMUR); + self::assertEquals('rankine', TemperatureType::RANKINE); + self::assertEquals('delisle', TemperatureType::DELISLE); + self::assertEquals('newton', TemperatureType::NEWTON); + self::assertEquals('romer', TemperatureType::ROMER); + } +} diff --git a/tests/Utils/Converter/TimeTypeTest.php b/tests/Utils/Converter/TimeTypeTest.php new file mode 100644 index 000000000..4392ab4e9 --- /dev/null +++ b/tests/Utils/Converter/TimeTypeTest.php @@ -0,0 +1,38 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Converter; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Converter\TimeType; + +class TimeTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(9, count(TimeType::getConstants())); + self::assertEquals(TimeType::getConstants(), array_unique(TimeType::getConstants())); + + self::assertEquals('ms', TimeType::MILLISECONDS); + self::assertEquals('s', TimeType::SECONDS); + self::assertEquals('i', TimeType::MINUTES); + self::assertEquals('h', TimeType::HOURS); + self::assertEquals('d', TimeType::DAYS); + self::assertEquals('w', TimeType::WEEKS); + self::assertEquals('m', TimeType::MONTH); + self::assertEquals('q', TimeType::QUARTER); + self::assertEquals('y', TimeType::YEAR); + } +} diff --git a/tests/Utils/Converter/VolumeTypeTest.php b/tests/Utils/Converter/VolumeTypeTest.php new file mode 100644 index 000000000..aa4264e5f --- /dev/null +++ b/tests/Utils/Converter/VolumeTypeTest.php @@ -0,0 +1,67 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Converter; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Converter\VolumeType; + +class VolumeTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(38, count(VolumeType::getConstants())); + self::assertEquals(VolumeType::getConstants(), array_unique(VolumeType::getConstants())); + + self::assertEquals('UK gal', VolumeType::UK_GALLON); + self::assertEquals('US gal lqd', VolumeType::US_GALLON_LIQUID); + self::assertEquals('US gal dry', VolumeType::US_GALLON_DRY); + self::assertEquals('pt', VolumeType::UK_PINT); + self::assertEquals('US pt lqd', VolumeType::US_PINT_LIQUID); + self::assertEquals('US pt dry', VolumeType::US_PINT_DRY); + self::assertEquals('US qt lqd', VolumeType::US_QUARTS_LIQUID); + self::assertEquals('US qt dry', VolumeType::US_QUARTS_DRY); + self::assertEquals('UK qt dry', VolumeType::UK_QUARTS); + self::assertEquals('US gi', VolumeType::US_GILL); + self::assertEquals('UK gi', VolumeType::UK_GILL); + self::assertEquals('L', VolumeType::LITER); + self::assertEquals('mul', VolumeType::MICROLITER); + self::assertEquals('mL', VolumeType::MILLILITER); + self::assertEquals('cl', VolumeType::CENTILITER); + self::assertEquals('kl', VolumeType::KILOLITER); + self::assertEquals('UK bbl', VolumeType::UK_BARREL); + self::assertEquals('US bbl dry', VolumeType::US_BARREL_DRY); + self::assertEquals('US bbl lqd', VolumeType::US_BARREL_LIQUID); + self::assertEquals('US bbl oil', VolumeType::US_BARREL_OIL); + self::assertEquals('US bbl fed', VolumeType::US_BARREL_FEDERAL); + self::assertEquals('us fl oz', VolumeType::US_OUNCES); + self::assertEquals('uk fl oz', VolumeType::UK_OUNCES); + self::assertEquals('US tsp', VolumeType::US_TEASPOON); + self::assertEquals('UK tsp', VolumeType::UK_TEASPOON); + self::assertEquals('Metric tsp', VolumeType::METRIC_TEASPOON); + self::assertEquals('US tblsp', VolumeType::US_TABLESPOON); + self::assertEquals('UK tblsp', VolumeType::UK_TABLESPOON); + self::assertEquals('Metric tblsp', VolumeType::METRIC_TABLESPOON); + self::assertEquals('US cup', VolumeType::US_CUP); + self::assertEquals('Can cup', VolumeType::CAN_CUP); + self::assertEquals('Metric cup', VolumeType::METRIC_CUP); + self::assertEquals('cm', VolumeType::CUBIC_CENTIMETER); + self::assertEquals('mm', VolumeType::CUBIC_MILLIMETER); + self::assertEquals('m', VolumeType::CUBIC_METER); + self::assertEquals('in', VolumeType::CUBIC_INCH); + self::assertEquals('ft', VolumeType::CUBIC_FEET); + self::assertEquals('yd', VolumeType::CUBIC_YARD); + } +} diff --git a/tests/Utils/Converter/WeightTypeTest.php b/tests/Utils/Converter/WeightTypeTest.php new file mode 100644 index 000000000..38e6e189c --- /dev/null +++ b/tests/Utils/Converter/WeightTypeTest.php @@ -0,0 +1,43 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Converter; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Converter\WeightType; + +class WeightTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(14, count(WeightType::getConstants())); + self::assertEquals(WeightType::getConstants(), array_unique(WeightType::getConstants())); + + self::assertEquals('mg', WeightType::MICROGRAM); + self::assertEquals('mug', WeightType::MILLIGRAM); + self::assertEquals('g', WeightType::GRAM); + self::assertEquals('kg', WeightType::KILOGRAM); + self::assertEquals('t', WeightType::METRIC_TONS); + self::assertEquals('lb', WeightType::POUNDS); + self::assertEquals('oz', WeightType::OUNCES); + self::assertEquals('st', WeightType::STONES); + self::assertEquals('gr', WeightType::GRAIN); + self::assertEquals('ct', WeightType::CARAT); + self::assertEquals('uk t', WeightType::LONG_TONS); + self::assertEquals('us ton', WeightType::SHORT_TONS); + self::assertEquals('t lb', WeightType::TROY_POUNDS); + self::assertEquals('t oz', WeightType::TROY_OUNCES); + } +} diff --git a/tests/Utils/Encoding/CaesarTest.php b/tests/Utils/Encoding/CaesarTest.php new file mode 100644 index 000000000..7598fe71b --- /dev/null +++ b/tests/Utils/Encoding/CaesarTest.php @@ -0,0 +1,34 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Encoding; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Encoding\Caesar; +use phpOMS\Utils\RnG\StringUtils; + +class CaesarTest extends \PHPUnit\Framework\TestCase +{ + public function testVolume() + { + for($i = 0; $i < 100; $i++) { + $raw = StringUtils::generateString(1, 100); + $key = StringUtils::generateString(1, 100); + + self::assertNotEquals($raw, Caesar::encode($raw, $key)); + self::assertEquals($raw, Caesar::decode(Caesar::encode($raw, $key), $key)); + } + } +} diff --git a/tests/Utils/Encoding/GrayTest.php b/tests/Utils/Encoding/GrayTest.php new file mode 100644 index 000000000..657f9b371 --- /dev/null +++ b/tests/Utils/Encoding/GrayTest.php @@ -0,0 +1,37 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Encoding; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Encoding\Gray; + +class GrayTest extends \PHPUnit\Framework\TestCase +{ + public function testEncoding() + { + self::assertEquals(55, Gray::encode(37)); + self::assertEquals(37, Gray::decode(55)); + } + + public function testVolume() + { + for($i = 0; $i < 100; $i++) { + $raw = mt_rand(0, 2040140512); + + self::assertEquals($raw, Gray::decode(Gray::encode($raw))); + } + } +} diff --git a/tests/Utils/Encoding/Huffman/DictionaryTest.php b/tests/Utils/Encoding/Huffman/DictionaryTest.php new file mode 100644 index 000000000..06b250441 --- /dev/null +++ b/tests/Utils/Encoding/Huffman/DictionaryTest.php @@ -0,0 +1,68 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Encoding\Huffman; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Encoding\Huffman\Dictionary; + +class DictionaryTest extends \PHPUnit\Framework\TestCase +{ + /** + * @expectedException \InvalidArgumentException + */ + public function testInvalidGetCharacter() + { + $dict = new Dictionary(); + $dict->get('as'); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testNotExistingGetCharacter() + { + $dict = new Dictionary(); + $dict->get('a'); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testInvalidSetCharacter() + { + $dict = new Dictionary(); + $dict->set('as', 'test'); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testInvalidSetDuplicateCharacter() + { + $dict = new Dictionary(); + $dict->set('a', '1'); + $dict->set('a', '1'); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testInvalidFormattedValue() + { + $dict = new Dictionary(); + $dict->set('a', '1a'); + } +} diff --git a/tests/Utils/Encoding/Huffman/HuffmanTest.php b/tests/Utils/Encoding/Huffman/HuffmanTest.php new file mode 100644 index 000000000..7bb4ee264 --- /dev/null +++ b/tests/Utils/Encoding/Huffman/HuffmanTest.php @@ -0,0 +1,48 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Encoding\Huffman; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Encoding\Huffman\Huffman; +use phpOMS\Utils\Encoding\Huffman\Dictionary; + +class HuffmanTest extends \PHPUnit\Framework\TestCase +{ + public function testHuffman() + { + $huff = new Huffman(); + + self::assertEquals( + hex2bin('a42f5debafd35bee6a940f78f38638fb3f4d6fd13cc672cf01d61bb1ce59e03cdbe89e8e56b5d63aa61387d1ba10'), + $huff->encode('This is a test message in order to test the encoding and decoding of the Huffman algorithm.') + ); + + self::assertEquals('', $huff->encode('')); + + $man = new Huffman(); + $man->setDictionary($huff->getDictionary()); + + self::assertEquals( + 'This is a test message in order to test the encoding and decoding of the Huffman algorithm.', + $man->decode(hex2bin('a42f5debafd35bee6a940f78f38638fb3f4d6fd13cc672cf01d61bb1ce59e03cdbe89e8e56b5d63aa61387d1ba10')) + ); + + self::assertEquals('', $man->decode('')); + + $huff->removeDictionary(); + self::assertEquals(null, $huff->getDictionary()); + } +} diff --git a/tests/Utils/Encoding/XorEncodingTest.php b/tests/Utils/Encoding/XorEncodingTest.php new file mode 100644 index 000000000..562981a59 --- /dev/null +++ b/tests/Utils/Encoding/XorEncodingTest.php @@ -0,0 +1,41 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Encoding; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Encoding\XorEncoding; +use phpOMS\Utils\RnG\StringUtils; + +class XorEncodingTest extends \PHPUnit\Framework\TestCase +{ + public function testEncoding() + { + $test = XorEncoding::encode('This is a test.', 'abcd'); + self::assertEquals(hex2bin('350a0a17410b10440042170112164d'), XorEncoding::encode('This is a test.', 'abcd')); + self::assertEquals('This is a test.', XorEncoding::decode(hex2bin('350a0a17410b10440042170112164d'), 'abcd')); + } + + public function testVolume() + { + for($i = 0; $i < 100; $i++) { + $raw = StringUtils::generateString(1, 100); + $key = StringUtils::generateString(1, 100); + + self::assertEquals($raw, XorEncoding::decode(XorEncoding::encode($raw, $key), $key)); + } + } +} + diff --git a/tests/Utils/Excel/ExcelTest.php b/tests/Utils/Excel/ExcelTest.php new file mode 100644 index 000000000..2eb170e1d --- /dev/null +++ b/tests/Utils/Excel/ExcelTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Excel; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Excel\Excel; + +class ExcelTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/Git/AuthorTest.php b/tests/Utils/Git/AuthorTest.php new file mode 100644 index 000000000..0b3380389 --- /dev/null +++ b/tests/Utils/Git/AuthorTest.php @@ -0,0 +1,48 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Git; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Git\Author; + +class AuthorTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $author = new Author(); + self::assertEquals('', $author->getName()); + self::assertEquals('', $author->getEmail()); + self::assertEquals(0, $author->getCommitCount()); + self::assertEquals(0, $author->getAdditionCount()); + self::assertEquals(0, $author->getRemovalCount()); + } + + public function testGetSet() + { + $author = new Author('test', 'email'); + self::assertEquals('test', $author->getName()); + self::assertEquals('email', $author->getEmail()); + + $author->setCommitCount(1); + self::assertEquals(1, $author->getCommitCount()); + + $author->setAdditionCount(2); + self::assertEquals(2, $author->getAdditionCount()); + + $author->setRemovalCount(3); + self::assertEquals(3, $author->getRemovalCount()); + } +} diff --git a/tests/Utils/Git/BranchTest.php b/tests/Utils/Git/BranchTest.php new file mode 100644 index 000000000..4bb9fffef --- /dev/null +++ b/tests/Utils/Git/BranchTest.php @@ -0,0 +1,34 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Git; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Git\Branch; + +class BranchTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $branch = new Branch(); + self::assertEquals('', $branch->getName()); + } + + public function testGetSet() + { + $branch = new Branch('test'); + self::assertEquals('test', $branch->getName()); + } +} diff --git a/tests/Utils/Git/CommitTest.php b/tests/Utils/Git/CommitTest.php new file mode 100644 index 000000000..5175b6ea6 --- /dev/null +++ b/tests/Utils/Git/CommitTest.php @@ -0,0 +1,39 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Git; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Git\Commit; +use phpOMS\Utils\Git\Author; +use phpOMS\Utils\Git\Branch; +use phpOMS\Utils\Git\Tag; +use phpOMS\Utils\Git\Repository; + +class CommitTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $commit = new Commit(); + self::assertEquals('', $commit->getId()); + self::assertEquals('', $commit->getMessage()); + self::assertEquals([], $commit->getFiles()); + self::assertInstanceOf('\phpOMS\Utils\Git\Author', $commit->getAuthor()); + self::assertInstanceOf('\phpOMS\Utils\Git\Branch', $commit->getBranch()); + self::assertInstanceOf('\phpOMS\Utils\Git\Tag', $commit->getTag()); + self::assertInstanceOf('\phpOMS\Utils\Git\Repository', $commit->getRepository()); + self::assertInstanceOf('\DateTime', $commit->getDate()); + } +} diff --git a/tests/Utils/Git/GitTest.php b/tests/Utils/Git/GitTest.php new file mode 100644 index 000000000..7ab3ce899 --- /dev/null +++ b/tests/Utils/Git/GitTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Git; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Git\Git; + +class GitTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + self::assertEquals('/usr/bin/git', Git::getBin()); + } +} diff --git a/tests/Utils/Git/RepositoryTest.php b/tests/Utils/Git/RepositoryTest.php new file mode 100644 index 000000000..0e81d23b0 --- /dev/null +++ b/tests/Utils/Git/RepositoryTest.php @@ -0,0 +1,29 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Git; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Git\Repository; + +class RepositoryTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $repo = new Repository(realpath(__DIR__ . '/../../../../../')); + self::assertTrue('Orange-Management' === $repo->getName() || 'build' === $repo->getName()); + self::assertEquals(str_replace('\\', '/', realpath(__DIR__ . '/../../../../../.git')), str_replace('\\', '/', $repo->getDirectoryPath())); + } +} diff --git a/tests/Utils/Git/TagTest.php b/tests/Utils/Git/TagTest.php new file mode 100644 index 000000000..2325363ce --- /dev/null +++ b/tests/Utils/Git/TagTest.php @@ -0,0 +1,38 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Git; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Git\Tag; + +class TagTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $tag = new Tag(); + self::assertEquals('', $tag->getMessage()); + self::assertEquals('', $tag->getName()); + } + + public function testGetSet() + { + $tag = new Tag('test'); + self::assertEquals('test', $tag->getName()); + + $tag->setMessage('msg'); + self::assertEquals('msg', $tag->getMessage()); + } +} diff --git a/tests/Utils/IO/Csv/CsvDatabaseMapperTest.php b/tests/Utils/IO/Csv/CsvDatabaseMapperTest.php new file mode 100644 index 000000000..cef494e21 --- /dev/null +++ b/tests/Utils/IO/Csv/CsvDatabaseMapperTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\IO\Csv; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\IO\Csv\CsvDatabaseMapper; + +class CsvDatabaseMapperTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/IO/Csv/CsvSettingsTest.php b/tests/Utils/IO/Csv/CsvSettingsTest.php new file mode 100644 index 000000000..80d90bfd7 --- /dev/null +++ b/tests/Utils/IO/Csv/CsvSettingsTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\IO\Csv; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\IO\Csv\CsvSettings; + +class CsvSettingsTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/IO/Excel/ExcelDatabaseMapperTest.php b/tests/Utils/IO/Excel/ExcelDatabaseMapperTest.php new file mode 100644 index 000000000..372a8bff7 --- /dev/null +++ b/tests/Utils/IO/Excel/ExcelDatabaseMapperTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\IO\Excel; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\IO\Excel\ExcelDatabaseMapper; + +class ExcelDatabaseMapperTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/IO/IODatabaseMapperTest.php b/tests/Utils/IO/IODatabaseMapperTest.php new file mode 100644 index 000000000..294bcd302 --- /dev/null +++ b/tests/Utils/IO/IODatabaseMapperTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\IO; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\IO\IODatabaseMapper; + +class IODatabaseMapperTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/IO/Json/InvalidJsonExceptionTest.php b/tests/Utils/IO/Json/InvalidJsonExceptionTest.php new file mode 100644 index 000000000..93d918284 --- /dev/null +++ b/tests/Utils/IO/Json/InvalidJsonExceptionTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\IO\Json; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\IO\Json\InvalidJsonException; + +class InvalidJsonExceptionTest extends \PHPUnit\Framework\TestCase +{ + public function testException() + { + self::assertInstanceOf(\UnexpectedValueException::class, new InvalidJsonException('')); + } +} diff --git a/tests/Utils/IO/Zip/GzTest.php b/tests/Utils/IO/Zip/GzTest.php new file mode 100644 index 000000000..7ecdbd2a7 --- /dev/null +++ b/tests/Utils/IO/Zip/GzTest.php @@ -0,0 +1,26 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\IO\Zip; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\IO\Zip\Zip; + +class ZipTest extends \PHPUnit\Framework\TestCase +{ + public function testZip() + { + self::assertTrue(Zip::pack( + [ + __DIR__ . '/test a.txt' => 'test a.txt', + __DIR__ . '/test b.md' => 'test b.md', + __DIR__ . '/test' => 'test', + ], + __DIR__ . '/test.zip' + )); + + self::assertTrue(file_exists(__DIR__ . '/test.zip')); + + self::assertFalse(Zip::pack( + [ + __DIR__ . '/test a.txt' => 'test a.txt', + __DIR__ . '/test b.txt' => 'test b.txt', + ], + __DIR__ . '/test.zip', + false + )); + + $a = file_get_contents(__DIR__ . '/test a.txt'); + $b = file_get_contents(__DIR__ . '/test b.md'); + $c = file_get_contents(__DIR__ . '/test/test c.txt'); + $d = file_get_contents(__DIR__ . '/test/test d.txt'); + $e = file_get_contents(__DIR__ . '/test/sub/test e.txt'); + + unlink(__DIR__ . '/test a.txt'); + unlink(__DIR__ . '/test b.md'); + unlink(__DIR__ . '/test/test c.txt'); + unlink(__DIR__ . '/test/test d.txt'); + unlink(__DIR__ . '/test/sub/test e.txt'); + rmdir(__DIR__ . '/test/sub'); + rmdir(__DIR__ . '/test'); + + self::assertFalse(file_exists(__DIR__ . '/test a.txt')); + self::assertFalse(file_exists(__DIR__ . '/test b.md')); + self::assertFalse(file_exists(__DIR__ . '/test/test c.txt')); + self::assertFalse(file_exists(__DIR__ . '/test/test d.txt')); + self::assertFalse(file_exists(__DIR__ . '/test/sub/test e.txt')); + self::assertFalse(file_exists(__DIR__ . '/test/sub')); + self::assertFalse(file_exists(__DIR__ . '/test')); + + self::assertTrue(Zip::unpack(__DIR__ . '/test.zip', __DIR__)); + + self::assertTrue(file_exists(__DIR__ . '/test a.txt')); + self::assertTrue(file_exists(__DIR__ . '/test b.md')); + self::assertTrue(file_exists(__DIR__ . '/test/test c.txt')); + self::assertTrue(file_exists(__DIR__ . '/test/test d.txt')); + self::assertTrue(file_exists(__DIR__ . '/test/sub/test e.txt')); + self::assertTrue(file_exists(__DIR__ . '/test/sub')); + self::assertTrue(file_exists(__DIR__ . '/test')); + + self::assertEquals($a, file_get_contents(__DIR__ . '/test a.txt')); + self::assertEquals($b, file_get_contents(__DIR__ . '/test b.md')); + self::assertEquals($c, file_get_contents(__DIR__ . '/test/test c.txt')); + self::assertEquals($d, file_get_contents(__DIR__ . '/test/test d.txt')); + self::assertEquals($e, file_get_contents(__DIR__ . '/test/sub/test e.txt')); + + unlink(__DIR__ . '/test.zip'); + self::assertFalse(file_exists(__DIR__ . '/test.zip')); + self::assertFalse(Zip::unpack(__DIR__ . '/test.zip', __DIR__)); + } +} diff --git a/tests/Utils/IO/Zip/test a.txt b/tests/Utils/IO/Zip/test a.txt new file mode 100644 index 000000000..f8fdaeb45 --- /dev/null +++ b/tests/Utils/IO/Zip/test a.txt @@ -0,0 +1 @@ +Test a \ No newline at end of file diff --git a/tests/Utils/IO/Zip/test b.md b/tests/Utils/IO/Zip/test b.md new file mode 100644 index 000000000..83c3ffd65 --- /dev/null +++ b/tests/Utils/IO/Zip/test b.md @@ -0,0 +1 @@ +Test b \ No newline at end of file diff --git a/tests/Utils/IO/Zip/test/sub/test e.txt b/tests/Utils/IO/Zip/test/sub/test e.txt new file mode 100644 index 000000000..1af3e6116 --- /dev/null +++ b/tests/Utils/IO/Zip/test/sub/test e.txt @@ -0,0 +1 @@ +Test e \ No newline at end of file diff --git a/tests/Utils/IO/Zip/test/test c.txt b/tests/Utils/IO/Zip/test/test c.txt new file mode 100644 index 000000000..ae6a1bda5 --- /dev/null +++ b/tests/Utils/IO/Zip/test/test c.txt @@ -0,0 +1 @@ +Test c \ No newline at end of file diff --git a/tests/Utils/IO/Zip/test/test d.txt b/tests/Utils/IO/Zip/test/test d.txt new file mode 100644 index 000000000..dc9765fa9 --- /dev/null +++ b/tests/Utils/IO/Zip/test/test d.txt @@ -0,0 +1 @@ +Test d \ No newline at end of file diff --git a/tests/Utils/ImageUtilsTest.php b/tests/Utils/ImageUtilsTest.php new file mode 100644 index 000000000..06684b679 --- /dev/null +++ b/tests/Utils/ImageUtilsTest.php @@ -0,0 +1,33 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\ImageUtils; + +class ImageUtilsTest extends \PHPUnit\Framework\TestCase +{ + public function testImage() + { + self::assertEquals( + file_get_contents(__DIR__ . '/logo.png'), + ImageUtils::decodeBase64Image( + 'data:image/png;base64,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' + ) + ); + } +} + diff --git a/tests/Utils/JobQueue/JobQueueTest.php b/tests/Utils/JobQueue/JobQueueTest.php new file mode 100644 index 000000000..03d7c32bd --- /dev/null +++ b/tests/Utils/JobQueue/JobQueueTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\JobQueue; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\JobQueue\JobQueue; + +class JobQueueTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/JobQueue/JobTest.php b/tests/Utils/JobQueue/JobTest.php new file mode 100644 index 000000000..212e30b83 --- /dev/null +++ b/tests/Utils/JobQueue/JobTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\JobQueue; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\JobQueue\Job; + +class JobTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/JsonBuilderTest.php b/tests/Utils/JsonBuilderTest.php new file mode 100644 index 000000000..4aaea884c --- /dev/null +++ b/tests/Utils/JsonBuilderTest.php @@ -0,0 +1,48 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils; + +use phpOMS\Utils\JsonBuilder; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class JsonBuilderTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + $builder = new JsonBuilder(); + self::assertEquals([], $builder->getJson()); + $builder->remove('test/path'); + self::assertEquals([], $builder->getJson()); + } + + public function testBuilder() + { + // main test is/should be done on ArrayUtils::setArray etc. + $builder = new JsonBuilder(); + $builder->add('a/test/path', 3); + self::assertEquals(['a' => ['test' => ['path' => 3]]], $builder->getJson()); + $builder->remove('a/test/path'); + self::assertEquals(['a' => ['test' => []]], $builder->getJson()); + + $arr = $builder->getJson(); + + self::assertEquals($arr, $builder->jsonSerialize()); + self::assertEquals(json_encode($arr), $builder->serialize()); + + $builder->unserialize($builder->serialize()); + self::assertEquals($arr, $builder->getJson()); + } +} diff --git a/tests/Utils/PDF/PdfTest.php b/tests/Utils/PDF/PdfTest.php new file mode 100644 index 000000000..6f3cdfe95 --- /dev/null +++ b/tests/Utils/PDF/PdfTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\PDF; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\PDF\Pdf; + +class PdfTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/Parser/LaTex/Expressions/ProductTest.php b/tests/Utils/Parser/LaTex/Expressions/ProductTest.php new file mode 100644 index 000000000..22ed9b2a7 --- /dev/null +++ b/tests/Utils/Parser/LaTex/Expressions/ProductTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Parser\LaTex\Expressions; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Parser\LaTex\Expressions\Product; + +class ProductTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/Parser/LaTex/Expressions/SumTest.php b/tests/Utils/Parser/LaTex/Expressions/SumTest.php new file mode 100644 index 000000000..c699d49e1 --- /dev/null +++ b/tests/Utils/Parser/LaTex/Expressions/SumTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Parser\LaTex\Expressions; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Parser\LaTex\Expressions\Sum; + +class SumTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/Parser/LaTex/Expressions/TrigonometryTest.php b/tests/Utils/Parser/LaTex/Expressions/TrigonometryTest.php new file mode 100644 index 000000000..3d3fca85f --- /dev/null +++ b/tests/Utils/Parser/LaTex/Expressions/TrigonometryTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Parser\LaTex\Expressions; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Parser\LaTex\Expressions\Trigonometry; + +class TrigonometryTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/Parser/LaTex/LaTexParserTest.php b/tests/Utils/Parser/LaTex/LaTexParserTest.php new file mode 100644 index 000000000..e35605eba --- /dev/null +++ b/tests/Utils/Parser/LaTex/LaTexParserTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Parser\LaTex; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Parser\LaTex\LaTexParser; + +class LaTexParserTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/Parser/LaTex/Types/IntervalTest.php b/tests/Utils/Parser/LaTex/Types/IntervalTest.php new file mode 100644 index 000000000..ce29a34e4 --- /dev/null +++ b/tests/Utils/Parser/LaTex/Types/IntervalTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Parser\LaTex\Types; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Parser\LaTex\Types\Interval; + +class IntervalTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/Parser/LaTex/Types/MathFunctionTest.php b/tests/Utils/Parser/LaTex/Types/MathFunctionTest.php new file mode 100644 index 000000000..153b59172 --- /dev/null +++ b/tests/Utils/Parser/LaTex/Types/MathFunctionTest.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Parser\LaTex\Types; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Parser\LaTex\Types\MathFunction; + +class MathFunctionTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} + diff --git a/tests/Utils/Parser/LaTex/Types/VariableTest.php b/tests/Utils/Parser/LaTex/Types/VariableTest.php new file mode 100644 index 000000000..4300fadac --- /dev/null +++ b/tests/Utils/Parser/LaTex/Types/VariableTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Parser\LaTex\Types; + +require_once __DIR__ . '/../../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Parser\LaTex\Types\Variable; + +class VariableTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/Parser/Markdown/MarkdownTest.php b/tests/Utils/Parser/Markdown/MarkdownTest.php new file mode 100644 index 000000000..65911194b --- /dev/null +++ b/tests/Utils/Parser/Markdown/MarkdownTest.php @@ -0,0 +1,41 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Parser\Markdown; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Parser\Markdown\Markdown; +use phpOMS\System\File\Local\Directory; + +class MarkdownTest extends \PHPUnit\Framework\TestCase +{ + public function testParsing() + { + $files = Directory::list(__DIR__ . '/data'); + + foreach ($files as $file) { + $data = explode('.', $file); + + if ($data[1] === 'md') { + self::assertEquals( + file_get_contents(__DIR__ . '/data/' . $data[0] . '.html'), + Markdown::parse(file_get_contents(__DIR__ . '/data/' . $data[0] . '.md')), + $file + ); + } + } + } +} + diff --git a/tests/Utils/Parser/Markdown/data/aesthetic_table.html b/tests/Utils/Parser/Markdown/data/aesthetic_table.html new file mode 100644 index 000000000..88e1c2bd4 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/aesthetic_table.html @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + +
header 1header 2
cell 1.1cell 1.2
cell 2.1cell 2.2
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/aesthetic_table.md b/tests/Utils/Parser/Markdown/data/aesthetic_table.md new file mode 100644 index 000000000..5245e6c9d --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/aesthetic_table.md @@ -0,0 +1,4 @@ +| header 1 | header 2 | +| -------- | -------- | +| cell 1.1 | cell 1.2 | +| cell 2.1 | cell 2.2 | \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/aligned_table.html b/tests/Utils/Parser/Markdown/data/aligned_table.html new file mode 100644 index 000000000..c4acfcb68 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/aligned_table.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + +
header 1header 2header 2
cell 1.1cell 1.2cell 1.3
cell 2.1cell 2.2cell 2.3
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/aligned_table.md b/tests/Utils/Parser/Markdown/data/aligned_table.md new file mode 100644 index 000000000..69a45f90f --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/aligned_table.md @@ -0,0 +1,4 @@ +| header 1 | header 2 | header 2 | +| :------- | :------: | -------: | +| cell 1.1 | cell 1.2 | cell 1.3 | +| cell 2.1 | cell 2.2 | cell 2.3 | \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/atx_heading.html b/tests/Utils/Parser/Markdown/data/atx_heading.html new file mode 100644 index 000000000..751f8739f --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/atx_heading.html @@ -0,0 +1,9 @@ +

h1

+

h2

+

h3

+

h4

+
h5
+
h6
+

####### not a heading

+

closed h1

+

#

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/atx_heading.md b/tests/Utils/Parser/Markdown/data/atx_heading.md new file mode 100644 index 000000000..ad97b44ca --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/atx_heading.md @@ -0,0 +1,17 @@ +# h1 + +## h2 + +### h3 + +#### h4 + +##### h5 + +###### h6 + +####### not a heading + +# closed h1 # + +# \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/automatic_link.html b/tests/Utils/Parser/Markdown/data/automatic_link.html new file mode 100644 index 000000000..50a94ba0f --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/automatic_link.html @@ -0,0 +1 @@ +

http://example.com

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/automatic_link.md b/tests/Utils/Parser/Markdown/data/automatic_link.md new file mode 100644 index 000000000..08d3bf46a --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/automatic_link.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/code_block.html b/tests/Utils/Parser/Markdown/data/code_block.html new file mode 100644 index 000000000..889b02d99 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/code_block.html @@ -0,0 +1,8 @@ +
<?php
+
+$message = 'Hello World!';
+echo $message;
+
+
> not a quote
+- not a list item
+[not a reference]: http://foo.com
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/code_block.md b/tests/Utils/Parser/Markdown/data/code_block.md new file mode 100644 index 000000000..2cfc953cc --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/code_block.md @@ -0,0 +1,10 @@ + not a quote + - not a list item + [not a reference]: http://foo.com \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/code_span.html b/tests/Utils/Parser/Markdown/data/code_span.html new file mode 100644 index 000000000..5c4c231e3 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/code_span.html @@ -0,0 +1,6 @@ +

a code span

+

this is also a codespan trailing text

+

and look at this one!

+

single backtick in a code span: `

+

backtick-delimited string in a code span: `foo`

+

sth `` sth

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/code_span.md b/tests/Utils/Parser/Markdown/data/code_span.md new file mode 100644 index 000000000..c2f1a7442 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/code_span.md @@ -0,0 +1,11 @@ +a `code span` + +`this is also a codespan` trailing text + +`and look at this one!` + +single backtick in a code span: `` ` `` + +backtick-delimited string in a code span: `` `foo` `` + +`sth `` sth` \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/compound_blockquote.html b/tests/Utils/Parser/Markdown/data/compound_blockquote.html new file mode 100644 index 000000000..37afb57a4 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/compound_blockquote.html @@ -0,0 +1,9 @@ +
+

header

+

paragraph

+
    +
  • li
  • +
+
+

paragraph

+
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/compound_blockquote.md b/tests/Utils/Parser/Markdown/data/compound_blockquote.md new file mode 100644 index 000000000..80c4aed16 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/compound_blockquote.md @@ -0,0 +1,10 @@ +> header +> ------ +> +> paragraph +> +> - li +> +> --- +> +> paragraph \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/compound_emphasis.html b/tests/Utils/Parser/Markdown/data/compound_emphasis.html new file mode 100644 index 000000000..178dd54ba --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/compound_emphasis.html @@ -0,0 +1,2 @@ +

code code

+

codecodecode

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/compound_emphasis.md b/tests/Utils/Parser/Markdown/data/compound_emphasis.md new file mode 100644 index 000000000..6fe07f260 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/compound_emphasis.md @@ -0,0 +1,4 @@ +_`code`_ __`code`__ + +*`code`**`code`**`code`* + diff --git a/tests/Utils/Parser/Markdown/data/compound_list.html b/tests/Utils/Parser/Markdown/data/compound_list.html new file mode 100644 index 000000000..f5593c142 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/compound_list.html @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/compound_list.md b/tests/Utils/Parser/Markdown/data/compound_list.md new file mode 100644 index 000000000..ed7f0c60f --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/compound_list.md @@ -0,0 +1,7 @@ +- paragraph + + paragraph + +- paragraph + + > quote \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/deeply_nested_list.html b/tests/Utils/Parser/Markdown/data/deeply_nested_list.html new file mode 100644 index 000000000..d2c7e5acc --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/deeply_nested_list.html @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/deeply_nested_list.md b/tests/Utils/Parser/Markdown/data/deeply_nested_list.md new file mode 100644 index 000000000..76b7552d8 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/deeply_nested_list.md @@ -0,0 +1,6 @@ +- li + - li + - li + - li + - li +- li \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/em_strong.html b/tests/Utils/Parser/Markdown/data/em_strong.html new file mode 100644 index 000000000..323d60aec --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/em_strong.html @@ -0,0 +1,8 @@ +

em strong

+

em strong strong

+

strong em strong

+

strong em strong strong

+

em strong

+

em strong strong

+

strong em strong

+

strong em strong strong

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/em_strong.md b/tests/Utils/Parser/Markdown/data/em_strong.md new file mode 100644 index 000000000..9abeb3fd4 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/em_strong.md @@ -0,0 +1,15 @@ +___em strong___ + +___em strong_ strong__ + +__strong _em strong___ + +__strong _em strong_ strong__ + +***em strong*** + +***em strong* strong** + +**strong *em strong*** + +**strong *em strong* strong** \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/email.html b/tests/Utils/Parser/Markdown/data/email.html new file mode 100644 index 000000000..c40759c96 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/email.html @@ -0,0 +1 @@ +

my email is me@example.com

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/email.md b/tests/Utils/Parser/Markdown/data/email.md new file mode 100644 index 000000000..26b7b6cc5 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/email.md @@ -0,0 +1 @@ +my email is \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/emphasis.html b/tests/Utils/Parser/Markdown/data/emphasis.html new file mode 100644 index 000000000..60ff4bd8b --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/emphasis.html @@ -0,0 +1,8 @@ +

underscore, asterisk, one two, three four, a, b

+

strong and em and strong and em

+

line +line +line

+

this_is_not_an_emphasis

+

an empty emphasis __ ** is not an emphasis

+

*mixed *double and single asterisk** spans

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/emphasis.md b/tests/Utils/Parser/Markdown/data/emphasis.md new file mode 100644 index 000000000..85b9d2299 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/emphasis.md @@ -0,0 +1,13 @@ +_underscore_, *asterisk*, _one two_, *three four*, _a_, *b* + +**strong** and *em* and **strong** and *em* + +_line +line +line_ + +this_is_not_an_emphasis + +an empty emphasis __ ** is not an emphasis + +*mixed **double and* single asterisk** spans \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/escaping.html b/tests/Utils/Parser/Markdown/data/escaping.html new file mode 100644 index 000000000..ab1c41fdc --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/escaping.html @@ -0,0 +1,6 @@ +

escaped *emphasis*.

+

escaped \*emphasis\* in a code span

+
escaped \*emphasis\* in a code block
+

\ ` * _ { } [ ] ( ) > # + - . !

+

one_two one_two

+

one*two one*two

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/escaping.md b/tests/Utils/Parser/Markdown/data/escaping.md new file mode 100644 index 000000000..9f174e98c --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/escaping.md @@ -0,0 +1,11 @@ +escaped \*emphasis\*. + +`escaped \*emphasis\* in a code span` + + escaped \*emphasis\* in a code block + +\\ \` \* \_ \{ \} \[ \] \( \) \> \# \+ \- \. \! + +_one\_two_ __one\_two__ + +*one\*two* **one\*two** \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/fenced_code_block.html b/tests/Utils/Parser/Markdown/data/fenced_code_block.html new file mode 100644 index 000000000..8bdabba96 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/fenced_code_block.html @@ -0,0 +1,6 @@ +
<?php
+
+$message = 'fenced code block';
+echo $message;
+
tilde
+
echo 'language identifier';
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/fenced_code_block.md b/tests/Utils/Parser/Markdown/data/fenced_code_block.md new file mode 100644 index 000000000..cbed8ebb5 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/fenced_code_block.md @@ -0,0 +1,14 @@ +``` + +
+
+
+
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/horizontal_rule.md b/tests/Utils/Parser/Markdown/data/horizontal_rule.md new file mode 100644 index 000000000..bf461a925 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/horizontal_rule.md @@ -0,0 +1,9 @@ +--- + +- - - + + - - - + +*** + +___ \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/image_reference.html b/tests/Utils/Parser/Markdown/data/image_reference.html new file mode 100644 index 000000000..67fbd2c86 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/image_reference.html @@ -0,0 +1,2 @@ +

Markdown Logo

+

![missing reference]

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/image_reference.md b/tests/Utils/Parser/Markdown/data/image_reference.md new file mode 100644 index 000000000..1e11d9479 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/image_reference.md @@ -0,0 +1,5 @@ +![Markdown Logo][image] + +[image]: /md.png + +![missing reference] \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/image_title.html b/tests/Utils/Parser/Markdown/data/image_title.html new file mode 100644 index 000000000..957c9505c --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/image_title.html @@ -0,0 +1,2 @@ +

alt

+

blank title

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/image_title.md b/tests/Utils/Parser/Markdown/data/image_title.md new file mode 100644 index 000000000..7ce2849a5 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/image_title.md @@ -0,0 +1,3 @@ +![alt](/md.png "title") + +![blank title](/md.png "") \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/implicit_reference.html b/tests/Utils/Parser/Markdown/data/implicit_reference.html new file mode 100644 index 000000000..24b51c1b0 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/implicit_reference.html @@ -0,0 +1,4 @@ +

an implicit reference link

+

an implicit reference link with an empty link definition

+

an implicit reference link followed by another

+

an explicit reference link with a title

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/implicit_reference.md b/tests/Utils/Parser/Markdown/data/implicit_reference.md new file mode 100644 index 000000000..f850df964 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/implicit_reference.md @@ -0,0 +1,13 @@ +an [implicit] reference link + +[implicit]: http://example.com + +an [implicit][] reference link with an empty link definition + +an [implicit][] reference link followed by [another][] + +[another]: http://cnn.com + +an [explicit][example] reference link with a title + +[example]: http://example.com "Example" \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/inline_link.html b/tests/Utils/Parser/Markdown/data/inline_link.html new file mode 100644 index 000000000..5ad564aa3 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/inline_link.html @@ -0,0 +1,6 @@ +

link

+

link with parentheses in URL

+

(link) in parentheses

+

link

+

MD Logo

+

MD Logo and text

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/inline_link.md b/tests/Utils/Parser/Markdown/data/inline_link.md new file mode 100644 index 000000000..6bac0b35e --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/inline_link.md @@ -0,0 +1,11 @@ +[link](http://example.com) + +[link](/url-(parentheses)) with parentheses in URL + +([link](/index.php)) in parentheses + +[`link`](http://example.com) + +[![MD Logo](http://parsedown.org/md.png)](http://example.com) + +[![MD Logo](http://parsedown.org/md.png) and text](http://example.com) \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/inline_link_title.html b/tests/Utils/Parser/Markdown/data/inline_link_title.html new file mode 100644 index 000000000..ecdfd03da --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/inline_link_title.html @@ -0,0 +1,6 @@ +

single quotes

+

double quotes

+

single quotes blank

+

double quotes blank

+

space

+

parentheses

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/inline_link_title.md b/tests/Utils/Parser/Markdown/data/inline_link_title.md new file mode 100644 index 000000000..6e1c5af9b --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/inline_link_title.md @@ -0,0 +1,11 @@ +[single quotes](http://example.com 'Title') + +[double quotes](http://example.com "Title") + +[single quotes blank](http://example.com '') + +[double quotes blank](http://example.com "") + +[space](http://example.com "2 Words") + +[parentheses](http://example.com/url-(parentheses) "Title") \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/inline_title.html b/tests/Utils/Parser/Markdown/data/inline_title.html new file mode 100644 index 000000000..bbab93b6c --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/inline_title.html @@ -0,0 +1 @@ +

single quotes and double quotes

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/inline_title.md b/tests/Utils/Parser/Markdown/data/inline_title.md new file mode 100644 index 000000000..cb09344a1 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/inline_title.md @@ -0,0 +1 @@ +[single quotes](http://example.com 'Example') and [double quotes](http://example.com "Example") \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/lazy_blockquote.html b/tests/Utils/Parser/Markdown/data/lazy_blockquote.html new file mode 100644 index 000000000..0a2a2aaf9 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/lazy_blockquote.html @@ -0,0 +1,6 @@ +
+

quote +the rest of it

+

another paragraph +the rest of it

+
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/lazy_blockquote.md b/tests/Utils/Parser/Markdown/data/lazy_blockquote.md new file mode 100644 index 000000000..48f645f94 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/lazy_blockquote.md @@ -0,0 +1,5 @@ +> quote +the rest of it + +> another paragraph +the rest of it \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/lazy_list.html b/tests/Utils/Parser/Markdown/data/lazy_list.html new file mode 100644 index 000000000..1a5199249 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/lazy_list.html @@ -0,0 +1,4 @@ +
    +
  • li +the rest of it
  • +
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/lazy_list.md b/tests/Utils/Parser/Markdown/data/lazy_list.md new file mode 100644 index 000000000..62ad9d719 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/lazy_list.md @@ -0,0 +1,2 @@ +- li +the rest of it \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/line_break.html b/tests/Utils/Parser/Markdown/data/line_break.html new file mode 100644 index 000000000..5f37d854c --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/line_break.html @@ -0,0 +1,2 @@ +

line
+line

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/line_break.md b/tests/Utils/Parser/Markdown/data/line_break.md new file mode 100644 index 000000000..04dff43e0 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/line_break.md @@ -0,0 +1,2 @@ +line +line \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/multiline_list_paragraph.html b/tests/Utils/Parser/Markdown/data/multiline_list_paragraph.html new file mode 100644 index 000000000..3247bd227 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/multiline_list_paragraph.html @@ -0,0 +1,7 @@ +
    +
  • +

    li

    +

    line +line

    +
  • +
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/multiline_list_paragraph.md b/tests/Utils/Parser/Markdown/data/multiline_list_paragraph.md new file mode 100644 index 000000000..f5b42729f --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/multiline_list_paragraph.md @@ -0,0 +1,4 @@ +- li + + line + line \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/ordered_list.html b/tests/Utils/Parser/Markdown/data/ordered_list.html new file mode 100644 index 000000000..b6c5216ca --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/ordered_list.html @@ -0,0 +1,13 @@ +
    +
  1. one
  2. +
  3. two
  4. +
+

repeating numbers:

+
    +
  1. one
  2. +
  3. two
  4. +
+

large numbers:

+
    +
  1. one
  2. +
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/ordered_list.md b/tests/Utils/Parser/Markdown/data/ordered_list.md new file mode 100644 index 000000000..b307032cf --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/ordered_list.md @@ -0,0 +1,11 @@ +1. one +2. two + +repeating numbers: + +1. one +1. two + +large numbers: + +123. one \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/paragraph_list.html b/tests/Utils/Parser/Markdown/data/paragraph_list.html new file mode 100644 index 000000000..ced1c43ee --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/paragraph_list.html @@ -0,0 +1,12 @@ +

paragraph

+
    +
  • li
  • +
  • li
  • +
+

paragraph

+
    +
  • +

    li

    +
  • +
  • li
  • +
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/paragraph_list.md b/tests/Utils/Parser/Markdown/data/paragraph_list.md new file mode 100644 index 000000000..b973908ce --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/paragraph_list.md @@ -0,0 +1,9 @@ +paragraph +- li +- li + +paragraph + + * li + + * li \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/reference_title.html b/tests/Utils/Parser/Markdown/data/reference_title.html new file mode 100644 index 000000000..8f2be944c --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/reference_title.html @@ -0,0 +1,2 @@ +

double quotes and single quotes and parentheses

+

[invalid title]: http://example.com example title

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/reference_title.md b/tests/Utils/Parser/Markdown/data/reference_title.md new file mode 100644 index 000000000..43cb21708 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/reference_title.md @@ -0,0 +1,6 @@ +[double quotes] and [single quotes] and [parentheses] + +[double quotes]: http://example.com "example title" +[single quotes]: http://example.com 'example title' +[parentheses]: http://example.com (example title) +[invalid title]: http://example.com example title \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/separated_nested_list.html b/tests/Utils/Parser/Markdown/data/separated_nested_list.html new file mode 100644 index 000000000..80a5cae26 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/separated_nested_list.html @@ -0,0 +1,9 @@ +
    +
  • +

    li

    +
      +
    • li
    • +
    • li
    • +
    +
  • +
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/separated_nested_list.md b/tests/Utils/Parser/Markdown/data/separated_nested_list.md new file mode 100644 index 000000000..d7cd1af79 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/separated_nested_list.md @@ -0,0 +1,4 @@ +- li + + - li + - li \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/setext_header.html b/tests/Utils/Parser/Markdown/data/setext_header.html new file mode 100644 index 000000000..60aac0815 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/setext_header.html @@ -0,0 +1,5 @@ +

h1

+

h2

+

single character

+

not a header

+
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/setext_header.md b/tests/Utils/Parser/Markdown/data/setext_header.md new file mode 100644 index 000000000..c43b52c36 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/setext_header.md @@ -0,0 +1,12 @@ +h1 +== + +h2 +-- + +single character +- + +not a header + +------------ \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/simple_blockquote.html b/tests/Utils/Parser/Markdown/data/simple_blockquote.html new file mode 100644 index 000000000..8225d57cc --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/simple_blockquote.html @@ -0,0 +1,11 @@ +
+

quote

+
+

indented:

+
+

quote

+
+

no space after >:

+
+

quote

+
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/simple_blockquote.md b/tests/Utils/Parser/Markdown/data/simple_blockquote.md new file mode 100644 index 000000000..22b6b11a9 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/simple_blockquote.md @@ -0,0 +1,7 @@ +> quote + +indented: + > quote + +no space after `>`: +>quote \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/simple_table.html b/tests/Utils/Parser/Markdown/data/simple_table.html new file mode 100644 index 000000000..237d7efb3 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/simple_table.html @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + +
header 1header 2
cell 1.1cell 1.2
cell 2.1cell 2.2
+
+ + + + + + + + + + + + + + + + + +
header 1header 2
cell 1.1cell 1.2
cell 2.1cell 2.2
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/simple_table.md b/tests/Utils/Parser/Markdown/data/simple_table.md new file mode 100644 index 000000000..466d140e3 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/simple_table.md @@ -0,0 +1,11 @@ +header 1 | header 2 +-------- | -------- +cell 1.1 | cell 1.2 +cell 2.1 | cell 2.2 + +--- + +header 1 | header 2 +:------- | -------- +cell 1.1 | cell 1.2 +cell 2.1 | cell 2.2 \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/sparse_dense_list.html b/tests/Utils/Parser/Markdown/data/sparse_dense_list.html new file mode 100644 index 000000000..095bc7396 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/sparse_dense_list.html @@ -0,0 +1,7 @@ +
    +
  • +

    li

    +
  • +
  • li
  • +
  • li
  • +
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/sparse_dense_list.md b/tests/Utils/Parser/Markdown/data/sparse_dense_list.md new file mode 100644 index 000000000..576842277 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/sparse_dense_list.md @@ -0,0 +1,4 @@ +- li + +- li +- li \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/sparse_list.html b/tests/Utils/Parser/Markdown/data/sparse_list.html new file mode 100644 index 000000000..452b2b86d --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/sparse_list.html @@ -0,0 +1,15 @@ +
    +
  • +

    li

    +
  • +
  • li
  • +
+
+
    +
  • +

    li

    +
      +
    • indented li
    • +
    +
  • +
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/sparse_list.md b/tests/Utils/Parser/Markdown/data/sparse_list.md new file mode 100644 index 000000000..362a35f57 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/sparse_list.md @@ -0,0 +1,9 @@ +- li + +- li + +--- + +- li + + - indented li \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/special_characters.html b/tests/Utils/Parser/Markdown/data/special_characters.html new file mode 100644 index 000000000..3b652c338 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/special_characters.html @@ -0,0 +1,6 @@ +

AT&T has an ampersand in their name

+

this & that

+

4 < 5 and 6 > 5

+

http://example.com/autolink?a=1&b=2

+

inline link

+

reference link

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/special_characters.md b/tests/Utils/Parser/Markdown/data/special_characters.md new file mode 100644 index 000000000..111b03b63 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/special_characters.md @@ -0,0 +1,13 @@ +AT&T has an ampersand in their name + +this & that + +4 < 5 and 6 > 5 + + + +[inline link](/script?a=1&b=2) + +[reference link][1] + +[1]: http://example.com/?a=1&b=2 \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/strikethrough.html b/tests/Utils/Parser/Markdown/data/strikethrough.html new file mode 100644 index 000000000..2a9da9821 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/strikethrough.html @@ -0,0 +1,3 @@ +

strikethrough

+

here's one followed by another one

+

~~ this ~~ is not one neither is ~this~

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/strikethrough.md b/tests/Utils/Parser/Markdown/data/strikethrough.md new file mode 100644 index 000000000..d169144d2 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/strikethrough.md @@ -0,0 +1,5 @@ +~~strikethrough~~ + +here's ~~one~~ followed by ~~another one~~ + +~~ this ~~ is not one neither is ~this~ \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/strong_em.html b/tests/Utils/Parser/Markdown/data/strong_em.html new file mode 100644 index 000000000..b709c9914 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/strong_em.html @@ -0,0 +1,6 @@ +

em strong em

+

strong em em

+

em strong em em

+

em strong em

+

strong em em

+

em strong em em

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/strong_em.md b/tests/Utils/Parser/Markdown/data/strong_em.md new file mode 100644 index 000000000..f2aa3c782 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/strong_em.md @@ -0,0 +1,11 @@ +*em **strong em*** + +***strong em** em* + +*em **strong em** em* + +_em __strong em___ + +___strong em__ em_ + +_em __strong em__ em_ \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/tab-indented_code_block.html b/tests/Utils/Parser/Markdown/data/tab-indented_code_block.html new file mode 100644 index 000000000..7c140de73 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/tab-indented_code_block.html @@ -0,0 +1,6 @@ +
<?php
+
+$message = 'Hello World!';
+echo $message;
+
+echo "following a blank line";
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/tab-indented_code_block.md b/tests/Utils/Parser/Markdown/data/tab-indented_code_block.md new file mode 100644 index 000000000..a405a1609 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/tab-indented_code_block.md @@ -0,0 +1,6 @@ + + + +header 1 +header 2 + + + + +cell 1.1 +cell 1.2 + + +| 2.1 +| 2.2 + + +\| 2.1 +link + + + \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/table_inline_markdown.md b/tests/Utils/Parser/Markdown/data/table_inline_markdown.md new file mode 100644 index 000000000..2f3c6200f --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/table_inline_markdown.md @@ -0,0 +1,5 @@ +| _header_ 1 | header 2 | +| ------------ | ------------ | +| _cell_ 1.1 | ~~cell~~ 1.2 | +| `|` 2.1 | \| 2.2 | +| `\|` 2.1 | [link](/) | \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/text_reference.html b/tests/Utils/Parser/Markdown/data/text_reference.html new file mode 100644 index 000000000..11e4d37ff --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/text_reference.html @@ -0,0 +1,8 @@ +

reference link

+

one with a semantic name

+

[one][404] with no definition

+

multiline +one defined on 2 lines

+

one with a mixed case label and an upper case definition

+

one with the a label on the next line

+

link

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/text_reference.md b/tests/Utils/Parser/Markdown/data/text_reference.md new file mode 100644 index 000000000..1a66a5cf6 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/text_reference.md @@ -0,0 +1,21 @@ +[reference link][1] + +[1]: http://example.com + +[one][website] with a semantic name + +[website]: http://example.com + +[one][404] with no definition + +[multiline +one][website] defined on 2 lines + +[one][Label] with a mixed case label and an upper case definition + +[LABEL]: http://example.com + +[one] +[1] with the a label on the next line + +[`link`][website] \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/unordered_list.html b/tests/Utils/Parser/Markdown/data/unordered_list.html new file mode 100644 index 000000000..cd95567b7 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/unordered_list.html @@ -0,0 +1,10 @@ +
    +
  • li
  • +
  • li
  • +
+

mixed markers:

+
    +
  • li
  • +
  • li
  • +
  • li
  • +
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/unordered_list.md b/tests/Utils/Parser/Markdown/data/unordered_list.md new file mode 100644 index 000000000..cf62c99f2 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/unordered_list.md @@ -0,0 +1,8 @@ +- li +- li + +mixed markers: + +* li ++ li +- li \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/untidy_table.html b/tests/Utils/Parser/Markdown/data/untidy_table.html new file mode 100644 index 000000000..88e1c2bd4 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/untidy_table.html @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + +
header 1header 2
cell 1.1cell 1.2
cell 2.1cell 2.2
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/untidy_table.md b/tests/Utils/Parser/Markdown/data/untidy_table.md new file mode 100644 index 000000000..8524eb184 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/untidy_table.md @@ -0,0 +1,4 @@ +| header 1 | header 2 | +| ------------- | ----------- | +| cell 1.1 | cell 1.2 | +| cell 2.1 | cell 2.2 | \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/url_autolinking.html b/tests/Utils/Parser/Markdown/data/url_autolinking.html new file mode 100644 index 000000000..58ca94c6b --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/url_autolinking.html @@ -0,0 +1,3 @@ +

an autolink http://example.com

+

inside of brackets [http://example.com], inside of braces {http://example.com}, inside of parentheses (http://example.com)

+

trailing slash http://example.com/ and http://example.com/path/

\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/url_autolinking.md b/tests/Utils/Parser/Markdown/data/url_autolinking.md new file mode 100644 index 000000000..840f35404 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/url_autolinking.md @@ -0,0 +1,5 @@ +an autolink http://example.com + +inside of brackets [http://example.com], inside of braces {http://example.com}, inside of parentheses (http://example.com) + +trailing slash http://example.com/ and http://example.com/path/ \ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/whitespace.html b/tests/Utils/Parser/Markdown/data/whitespace.html new file mode 100644 index 000000000..f2dd7a002 --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/whitespace.html @@ -0,0 +1 @@ +
code
\ No newline at end of file diff --git a/tests/Utils/Parser/Markdown/data/whitespace.md b/tests/Utils/Parser/Markdown/data/whitespace.md new file mode 100644 index 000000000..4cf926a8a --- /dev/null +++ b/tests/Utils/Parser/Markdown/data/whitespace.md @@ -0,0 +1,5 @@ + + + code + + \ No newline at end of file diff --git a/tests/Utils/Parser/Php/ArrayParserTest.php b/tests/Utils/Parser/Php/ArrayParserTest.php new file mode 100644 index 000000000..e34faaa96 --- /dev/null +++ b/tests/Utils/Parser/Php/ArrayParserTest.php @@ -0,0 +1,39 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\Parser\Php; + +require_once __DIR__ . '/../../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\Parser\Php\ArrayParser; + +class ArrayParserTest extends \PHPUnit\Framework\TestCase +{ + public function testParser() + { + $array = [ + 'string' => 'test', + 0 => 1, + 2 => true, + 'string2' => 1.3, + 3 => null, + 4 => [ + 0 => 'a', + 1 => 'b', + ], + ]; + + self::assertEquals($array, eval('return '. ArrayParser::serializeArray($array) . ';')); + } +} diff --git a/tests/Utils/PermutationTest.php b/tests/Utils/PermutationTest.php new file mode 100644 index 000000000..80e3ba211 --- /dev/null +++ b/tests/Utils/PermutationTest.php @@ -0,0 +1,64 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils; + +use phpOMS\Utils\Permutation; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class PermutationTest extends \PHPUnit\Framework\TestCase +{ + public function testPermute() + { + $arr = ['a', 'b', 'c']; + $permutations = ['abc', 'acb', 'bac', 'bca', 'cab', 'cba']; + + self::assertEquals($permutations, Permutation::permut($arr)); + } + + public function testIsPermutation() + { + self::assertTrue(Permutation::isPermutation('abc', 'bca')); + self::assertFalse(Permutation::isPermutation('abc', 'bda')); + } + + public function testIsPalindrome() + { + self::assertTrue(Permutation::isPalindrome('abba')); + self::assertTrue(Permutation::isPalindrome('abb1a', 'a-z')); + self::assertFalse(Permutation::isPalindrome('abb1a')); + } + + public function testPermutate() + { + self::assertEquals(['c', 'b', 'a'], Permutation::permutate(['a', 'b', 'c'], [2, 1, 1])); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testWrongPermuteParameterType() + { + Permutation::permutate(4, [2, 1, 1]); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testWrongPermuteKeyLength() + { + Permutation::permutate('abc', [2, 1, 1, 6]); + } +} diff --git a/tests/Utils/RnG/AddressTest.php b/tests/Utils/RnG/AddressTest.php new file mode 100644 index 000000000..d689b77ba --- /dev/null +++ b/tests/Utils/RnG/AddressTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\RnG; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\RnG\Address; + +class AddressTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/RnG/ArrayRandomizeTest.php b/tests/Utils/RnG/ArrayRandomizeTest.php new file mode 100644 index 000000000..aa4da9f7d --- /dev/null +++ b/tests/Utils/RnG/ArrayRandomizeTest.php @@ -0,0 +1,30 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\RnG; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\RnG\ArrayRandomize; + +class ArrayRandomizeTest extends \PHPUnit\Framework\TestCase +{ + public function testRandomize() + { + $orig = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]; + + self::assertNotEquals($orig, ArrayRandomize::yates($orig)); + self::assertNotEquals($orig, ArrayRandomize::knuth($orig)); + } +} diff --git a/tests/Utils/RnG/CityTest.php b/tests/Utils/RnG/CityTest.php new file mode 100644 index 000000000..85614a8ce --- /dev/null +++ b/tests/Utils/RnG/CityTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\RnG; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\RnG\City; + +class CityTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/RnG/DateTimeTest.php b/tests/Utils/RnG/DateTimeTest.php new file mode 100644 index 000000000..c0adeddc7 --- /dev/null +++ b/tests/Utils/RnG/DateTimeTest.php @@ -0,0 +1,40 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\RnG; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\RnG\DateTime; + +class DateTimeTest extends \PHPUnit\Framework\TestCase +{ + public function testRnG() + { + for($i = 0; $i < 100; $i++) { + $dateMin = new \DateTime(); + $dateMax = new \DateTime(); + + $min = mt_rand(0, PHP_INT_MAX-2); + $max = mt_rand($min + 1, PHP_INT_MAX); + + $dateMin->setTimestamp($min); + $dateMax->setTimestamp($max); + + $rng = DateTime::generateDateTime($dateMin, $dateMax); + + self::assertTrue($rng->getTimestamp() >= $min && $rng->getTimestamp() <= $max); + } + } +} diff --git a/tests/Utils/RnG/DistributionTypeTest.php b/tests/Utils/RnG/DistributionTypeTest.php new file mode 100644 index 000000000..8c980971f --- /dev/null +++ b/tests/Utils/RnG/DistributionTypeTest.php @@ -0,0 +1,31 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\RnG; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\RnG\DistributionType; + +class DistributionTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(2, count(DistributionType::getConstants())); + self::assertEquals(DistributionType::getConstants(), array_unique(DistributionType::getConstants())); + + self::assertEquals(0, DistributionType::UNIFORM); + self::assertEquals(1, DistributionType::NORMAL); + } +} diff --git a/tests/Utils/RnG/EmailTest.php b/tests/Utils/RnG/EmailTest.php new file mode 100644 index 000000000..b5071d6c4 --- /dev/null +++ b/tests/Utils/RnG/EmailTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\RnG; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\RnG\Email; + +class EmailTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/RnG/FileTest.php b/tests/Utils/RnG/FileTest.php new file mode 100644 index 000000000..121a6149b --- /dev/null +++ b/tests/Utils/RnG/FileTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\RnG; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\RnG\File; + +class FileTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/RnG/IBANTest.php b/tests/Utils/RnG/IBANTest.php new file mode 100644 index 000000000..047b7cd2e --- /dev/null +++ b/tests/Utils/RnG/IBANTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\RnG; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\RnG\IBAN; + +class IBANTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/RnG/LinearCongruentialGeneratorTest.php b/tests/Utils/RnG/LinearCongruentialGeneratorTest.php new file mode 100644 index 000000000..a8d1f45ea --- /dev/null +++ b/tests/Utils/RnG/LinearCongruentialGeneratorTest.php @@ -0,0 +1,44 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\RnG; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\RnG\LinearCongruentialGenerator; + +class LinearCongruentialGeneratorTest extends \PHPUnit\Framework\TestCase +{ + public function testBsdRng() + { + self::assertEquals(12345, LinearCongruentialGenerator::bsd()); + + if (PHP_INT_SIZE > 4) { + self::assertEquals(1406932606, LinearCongruentialGenerator::bsd()); + self::assertEquals(654583775, LinearCongruentialGenerator::bsd()); + self::assertEquals(1449466924, LinearCongruentialGenerator::bsd()); + } + } + + public function testMsRng() + { + self::assertEquals(38, LinearCongruentialGenerator::msvcrt()); + self::assertEquals(7719, LinearCongruentialGenerator::msvcrt()); + + if (PHP_INT_SIZE > 4) { + self::assertEquals(21238, LinearCongruentialGenerator::msvcrt()); + self::assertEquals(2437, LinearCongruentialGenerator::msvcrt()); + } + } +} diff --git a/tests/Utils/RnG/NameTest.php b/tests/Utils/RnG/NameTest.php new file mode 100644 index 000000000..fafa03f95 --- /dev/null +++ b/tests/Utils/RnG/NameTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\RnG; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\RnG\Name; + +class NameTest extends \PHPUnit\Framework\TestCase +{ + public function testRandom() + { + self::assertNotEquals(Name::generateName(['female']), Name::generateName(['male'])); + } +} diff --git a/tests/Utils/RnG/NumericTest.php b/tests/Utils/RnG/NumericTest.php new file mode 100644 index 000000000..92ab2f146 --- /dev/null +++ b/tests/Utils/RnG/NumericTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\RnG; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\RnG\Numeric; + +class NumericTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/RnG/PhoneTest.php b/tests/Utils/RnG/PhoneTest.php new file mode 100644 index 000000000..6e6d4ebc4 --- /dev/null +++ b/tests/Utils/RnG/PhoneTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\RnG; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\RnG\Phone; + +class PhoneTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/RnG/PostalZipTest.php b/tests/Utils/RnG/PostalZipTest.php new file mode 100644 index 000000000..f7f85b682 --- /dev/null +++ b/tests/Utils/RnG/PostalZipTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\RnG; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\RnG\PostalZip; + +class PostalZipTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/RnG/StringUtilsTest.php b/tests/Utils/RnG/StringUtilsTest.php new file mode 100644 index 000000000..af3ad7dd7 --- /dev/null +++ b/tests/Utils/RnG/StringUtilsTest.php @@ -0,0 +1,49 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\RnG; + +use phpOMS\Utils\RnG\StringUtils; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +class StringUtilsTest extends \PHPUnit\Framework\TestCase +{ + /** + * @slowThreshold 1500 + */ + public function testStrings() + { + $haystack = []; + $outOfBounds = false; + $randomness = 0; + + for ($i = 0; $i < 10000; $i++) { + $random = StringUtils::generateString(5, 12, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_?><|;"'); + + if (strlen($random) > 12 || strlen($random) < 5) { + $outOfBounds = true; + } + + if (in_array($random, $haystack)) { + $randomness++; + } + + $haystack[] = $random; + } + + self::assertFalse($outOfBounds); + self::assertLessThan(5, $randomness); + } +} diff --git a/tests/Utils/RnG/TextTest.php b/tests/Utils/RnG/TextTest.php new file mode 100644 index 000000000..c5aeca905 --- /dev/null +++ b/tests/Utils/RnG/TextTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\RnG; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\RnG\Text; + +class TextTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/StringCompareTest.php b/tests/Utils/StringCompareTest.php new file mode 100644 index 000000000..ebe4d0d8f --- /dev/null +++ b/tests/Utils/StringCompareTest.php @@ -0,0 +1,52 @@ +matchDictionary('Cartoon')); + self::assertEquals('Bathtub Sidewalk Table', $dict->matchDictionary('Sidewalk Table')); + + // todo: this doesn't match since the length is too far apart + //self::assertEquals('Snowflake Bathtub Snowflake Toothbrush Sidewalk', $dict->matchDictionary('Toothbrush')); + + $dict->add('Carton'); + self::assertEquals('Carton', $dict->matchDictionary('carton')); + } +} diff --git a/tests/Utils/StringUtilsTest.php b/tests/Utils/StringUtilsTest.php new file mode 100644 index 000000000..5d521df4f --- /dev/null +++ b/tests/Utils/StringUtilsTest.php @@ -0,0 +1,83 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils; + +use phpOMS\Utils\StringUtils; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class StringUtilsTest extends \PHPUnit\Framework\TestCase +{ + public function testEvaluation() + { + self::assertTrue(abs(2.5 - StringUtils::getEntropy('akj@!0aj')) < 0.1); + } + + public function testStartsEnds() + { + $string = 'This is a test string.'; + self::assertTrue(StringUtils::startsWith($string, 'This ')); + self::assertFalse(StringUtils::startsWith($string, 'Thss ')); + self::assertTrue(StringUtils::endsWith($string, 'string.')); + self::assertFalse(StringUtils::endsWith($string, 'strng.')); + + self::assertTrue(StringUtils::mb_startsWith($string, 'This ')); + self::assertFalse(StringUtils::mb_startsWith($string, 'Thss ')); + self::assertTrue(StringUtils::mb_endsWith($string, 'string.')); + self::assertFalse(StringUtils::mb_endsWith($string, 'strng.')); + } + + public function testTransform() + { + self::assertEquals('This ', StringUtils::mb_ucfirst('this ')); + self::assertNotEquals('this ', StringUtils::mb_ucfirst('this ')); + self::assertEquals('thss', StringUtils::mb_lcfirst('Thss')); + self::assertNotEquals('Thss', StringUtils::mb_lcfirst('Thss')); + } + + public function testTrim() + { + $string = 'This is a test string.'; + + self::assertEquals($string, StringUtils::mb_trim($string, ' ')); + self::assertEquals('This is a test string', StringUtils::mb_trim($string, '.')); + self::assertEquals('asdf', StringUtils::mb_trim(' asdf ', ' ')); + self::assertEquals('asdf', StringUtils::mb_trim('%asdf%', '%')); + + self::assertEquals(' asdf', StringUtils::mb_rtrim(' asdf ')); + self::assertEquals('%asdf', StringUtils::mb_rtrim('%asdf%', '%')); + + self::assertEquals('asdf ', StringUtils::mb_ltrim(' asdf ')); + self::assertEquals('asdf%', StringUtils::mb_ltrim('%asdf%', '%')); + } + + public function testContains() + { + $string = 'This is a test string.'; + + self::assertTrue(StringUtils::contains($string, ['is', 'nothing', 'string'])); + self::assertFalse(StringUtils::contains($string, ['iss', 'nothing', 'false'])); + + self::assertTrue(StringUtils::mb_contains($string, ['is', 'nothing', 'string'])); + self::assertFalse(StringUtils::mb_contains($string, ['iss', 'nothing', 'false'])); + } + + public function testCount() + { + self::assertEquals(5, StringUtils::mb_count_chars('αααααΕεΙιΜμΨψ')['α']); + self::assertEquals(4, StringUtils::countCharacterFromStart(' Test string', ' ')); + self::assertEquals(0, StringUtils::countCharacterFromStart(' Test string', 's')); + } +} diff --git a/tests/Utils/TaskSchedule/CronJobTest.php b/tests/Utils/TaskSchedule/CronJobTest.php new file mode 100644 index 000000000..828f482d6 --- /dev/null +++ b/tests/Utils/TaskSchedule/CronJobTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\TaskSchedule; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\TaskSchedule\CronJob; + +class CronJobTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + self::assertInstanceOf('\phpOMS\Utils\TaskSchedule\TaskAbstract', new CronJob('')); + } +} diff --git a/tests/Utils/TaskSchedule/CronTest.php b/tests/Utils/TaskSchedule/CronTest.php new file mode 100644 index 000000000..1f3913421 --- /dev/null +++ b/tests/Utils/TaskSchedule/CronTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\TaskSchedule; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\TaskSchedule\Cron; + +class CronTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + self::assertInstanceOf('\phpOMS\Utils\TaskSchedule\SchedulerAbstract', new Cron()); + } +} diff --git a/tests/Utils/TaskSchedule/IntervalTest.php b/tests/Utils/TaskSchedule/IntervalTest.php new file mode 100644 index 000000000..7e1ead7ae --- /dev/null +++ b/tests/Utils/TaskSchedule/IntervalTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\TaskSchedule; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\TaskSchedule\Interval; + +class IntervalTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Utils/TaskSchedule/ScheduleTest.php b/tests/Utils/TaskSchedule/ScheduleTest.php new file mode 100644 index 000000000..b7bc0a7d9 --- /dev/null +++ b/tests/Utils/TaskSchedule/ScheduleTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\TaskSchedule; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\TaskSchedule\Schedule; + +class ScheduleTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + self::assertInstanceOf('\phpOMS\Utils\TaskSchedule\TaskAbstract', new Schedule('')); + } +} diff --git a/tests/Utils/TaskSchedule/SchedulerAbstractTest.php b/tests/Utils/TaskSchedule/SchedulerAbstractTest.php new file mode 100644 index 000000000..856a549e1 --- /dev/null +++ b/tests/Utils/TaskSchedule/SchedulerAbstractTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\TaskSchedule; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\TaskSchedule\SchedulerAbstract; + +class SchedulerAbstractTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + self::assertEquals('', SchedulerAbstract::getBin()); + } +} \ No newline at end of file diff --git a/tests/Utils/TaskSchedule/SchedulerFactoryTest.php b/tests/Utils/TaskSchedule/SchedulerFactoryTest.php new file mode 100644 index 000000000..05c511db5 --- /dev/null +++ b/tests/Utils/TaskSchedule/SchedulerFactoryTest.php @@ -0,0 +1,34 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\TaskSchedule; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\TaskSchedule\SchedulerFactory; +use phpOMS\Utils\TaskSchedule\TaskScheduler; +use phpOMS\Utils\TaskSchedule\Cron; + +class SchedulerFactoryTest extends \PHPUnit\Framework\TestCase +{ + public function testFactory() + { + self::assertTrue((SchedulerFactory::create('') instanceof Cron) || (SchedulerFactory::create('') instanceof TaskScheduler)); + + // todo: make full test here by defining schtask or crontab path + // todo: create task + // todo: get task + // todo: remove task + } +} diff --git a/tests/Utils/TaskSchedule/TaskAbstractTest.php b/tests/Utils/TaskSchedule/TaskAbstractTest.php new file mode 100644 index 000000000..6f5d9cda0 --- /dev/null +++ b/tests/Utils/TaskSchedule/TaskAbstractTest.php @@ -0,0 +1,64 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\TaskSchedule; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\TaskSchedule\TaskAbstract; + +class TaskAbstractTest extends \PHPUnit\Framework\TestCase +{ + private $class = null; + + protected function setUp() + { + $this->class = new class('') extends TaskAbstract { + public static function createWith(array $jobData) : TaskAbstract {} + }; + } + + public function testDefault() + { + self::assertEquals('', $this->class->getId()); + self::assertEquals('', $this->class->getCommand()); + self::assertEquals('', $this->class->getRun()); + self::assertEquals('', $this->class->getStatus()); + self::assertInstanceOf('\DateTime', $this->class->getNextRunTime()); + self::assertInstanceOf('\DateTime', $this->class->getLastRuntime()); + self::assertEquals('', $this->class->getComment()); + } + + public function testGetSet() + { + $this->class->setCommand('Command'); + self::assertEquals('Command', $this->class->getCommand()); + + $this->class->setRun('Run'); + self::assertEquals('Run', $this->class->getRun()); + + $this->class->setStatus('Status'); + self::assertEquals('Status', $this->class->getStatus()); + + $this->class->setComment('Comment'); + self::assertEquals('Comment', $this->class->getComment()); + + $date = new \DateTime('now'); + $this->class->setLastRuntime($date); + self::assertEquals($date->format('Y-m-d'), $this->class->getLastRuntime()->format('Y-m-d')); + + $this->class->setNextRuntime($date); + self::assertEquals($date->format('Y-m-d'), $this->class->getNextRuntime()->format('Y-m-d')); + } +} diff --git a/tests/Utils/TaskSchedule/TaskFactoryTest.php b/tests/Utils/TaskSchedule/TaskFactoryTest.php new file mode 100644 index 000000000..96a9cf58b --- /dev/null +++ b/tests/Utils/TaskSchedule/TaskFactoryTest.php @@ -0,0 +1,29 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\TaskSchedule; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\TaskSchedule\TaskFactory; +use phpOMS\Utils\TaskSchedule\Schedule; +use phpOMS\Utils\TaskSchedule\CronJob; + +class TaskFactoryTest extends \PHPUnit\Framework\TestCase +{ + public function testFactory() + { + self::assertTrue((TaskFactory::create('') instanceof CronJob) || (TaskFactory::create('') instanceof Schedule)); + } +} diff --git a/tests/Utils/TaskSchedule/TaskSchedulerTest.php b/tests/Utils/TaskSchedule/TaskSchedulerTest.php new file mode 100644 index 000000000..8bc557f8b --- /dev/null +++ b/tests/Utils/TaskSchedule/TaskSchedulerTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Utils\TaskSchedule; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Utils\TaskSchedule\TaskScheduler; + +class TaskSchedulerTest extends \PHPUnit\Framework\TestCase +{ + public function testDefault() + { + self::assertInstanceOf('\phpOMS\Utils\TaskSchedule\SchedulerAbstract', new TaskScheduler()); + } +} diff --git a/tests/Utils/TestUtilsTest.php b/tests/Utils/TestUtilsTest.php new file mode 100644 index 000000000..8de706269 --- /dev/null +++ b/tests/Utils/TestUtilsTest.php @@ -0,0 +1,55 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Barcode\Barcode11; + +class Barcode11Test extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Validation/Barcode/Barcode128Test.php b/tests/Validation/Barcode/Barcode128Test.php new file mode 100644 index 000000000..5e099d43e --- /dev/null +++ b/tests/Validation/Barcode/Barcode128Test.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Barcode\Barcode128; + +class Barcode128Test extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Validation/Barcode/Barcode25Test.php b/tests/Validation/Barcode/Barcode25Test.php new file mode 100644 index 000000000..331138adc --- /dev/null +++ b/tests/Validation/Barcode/Barcode25Test.php @@ -0,0 +1,28 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Barcode\Barcode25; + +class Barcode25Test extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} + diff --git a/tests/Validation/Barcode/Barcode39Test.php b/tests/Validation/Barcode/Barcode39Test.php new file mode 100644 index 000000000..7621160e0 --- /dev/null +++ b/tests/Validation/Barcode/Barcode39Test.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Barcode\Barcode39; + +class Barcode39Test extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Validation/Barcode/Barcode93Test.php b/tests/Validation/Barcode/Barcode93Test.php new file mode 100644 index 000000000..46899bda3 --- /dev/null +++ b/tests/Validation/Barcode/Barcode93Test.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Barcode\Barcode93; + +class Barcode93Test extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Validation/Barcode/BarcodeCodebarTest.php b/tests/Validation/Barcode/BarcodeCodebarTest.php new file mode 100644 index 000000000..398013adb --- /dev/null +++ b/tests/Validation/Barcode/BarcodeCodebarTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Barcode\BarcodeCodebar; + +class BarcodeCodebarTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Validation/Barcode/BarcodeDatamatrixTest.php b/tests/Validation/Barcode/BarcodeDatamatrixTest.php new file mode 100644 index 000000000..be5304ee9 --- /dev/null +++ b/tests/Validation/Barcode/BarcodeDatamatrixTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Barcode\BarcodeDatamatrix; + +class BarcodeDatamatrixTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Validation/Barcode/BarcodeEANTest.php b/tests/Validation/Barcode/BarcodeEANTest.php new file mode 100644 index 000000000..78349afa6 --- /dev/null +++ b/tests/Validation/Barcode/BarcodeEANTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Barcode\BarcodeEAN; + +class BarcodeEANTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Validation/Barcode/BarcodeMSITest.php b/tests/Validation/Barcode/BarcodeMSITest.php new file mode 100644 index 000000000..bc1f310a3 --- /dev/null +++ b/tests/Validation/Barcode/BarcodeMSITest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Barcode\BarcodeMSI; + +class BarcodeMSITest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Validation/Barcode/BarcodeTest.php b/tests/Validation/Barcode/BarcodeTest.php new file mode 100644 index 000000000..a6c2fbd19 --- /dev/null +++ b/tests/Validation/Barcode/BarcodeTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Barcode\Barcode; + +class BarcodeTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Validation/Barcode/QrCodeTest.php b/tests/Validation/Barcode/QrCodeTest.php new file mode 100644 index 000000000..6a3029c1f --- /dev/null +++ b/tests/Validation/Barcode/QrCodeTest.php @@ -0,0 +1,27 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Barcode; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Barcode\QrCode; + +class QrCodeTest extends \PHPUnit\Framework\TestCase +{ + public function testPlaceholder() + { + self::markTestIncomplete(); + } +} diff --git a/tests/Validation/Base/DateTimeTest.php b/tests/Validation/Base/DateTimeTest.php new file mode 100644 index 000000000..728df0fd8 --- /dev/null +++ b/tests/Validation/Base/DateTimeTest.php @@ -0,0 +1,36 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Base; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Base\DateTime; + +class DateTimeTest extends \PHPUnit\Framework\TestCase +{ + public function testDateTime() + { + self::assertTrue(DateTime::isValid('now')); + self::assertTrue(DateTime::isValid('10 September 2000')); + self::assertTrue(DateTime::isValid('2012-05-16')); + self::assertTrue(DateTime::isValid('2012-05-16 22:13:01')); + + self::assertFalse(DateTime::isValid('2012-05-16 22:66:01')); + self::assertFalse(DateTime::isValid('201M-05-16 22:66:01')); + self::assertFalse(DateTime::isValid('2')); + self::assertFalse(DateTime::isValid('String')); + } +} + diff --git a/tests/Validation/Finance/BICTest.php b/tests/Validation/Finance/BICTest.php new file mode 100644 index 000000000..907f2ba78 --- /dev/null +++ b/tests/Validation/Finance/BICTest.php @@ -0,0 +1,45 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Finance; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Finance\BIC; + +class BICTest extends \PHPUnit\Framework\TestCase +{ + public function testBic() + { + self::assertTrue(BIC::isValid('ASPKAT2LXXX')); + self::assertTrue(BIC::isValid('ASPKAT2L')); + self::assertTrue(BIC::isValid('DSBACNBXSHA')); + self::assertTrue(BIC::isValid('UNCRIT2B912')); + self::assertTrue(BIC::isValid('DABADKKK')); + self::assertTrue(BIC::isValid('RZOOAT2L303')); + + self::assertFalse(BIC::isValid('ASPKAT2LXX')); + self::assertFalse(BIC::isValid('ASPKAT2LX')); + self::assertFalse(BIC::isValid('ASPKAT2LXXX1')); + self::assertFalse(BIC::isValid('DABADKK')); + self::assertFalse(BIC::isValid('RZ00AT2L303')); + self::assertFalse(BIC::isValid('1SBACNBXSHA')); + self::assertFalse(BIC::isValid('D2BACNBXSHA')); + self::assertFalse(BIC::isValid('DS3ACNBXSHA')); + self::assertFalse(BIC::isValid('DSB4CNBXSHA')); + self::assertFalse(BIC::isValid('DSBA5NBXSHA')); + self::assertFalse(BIC::isValid('DSBAC6BXSHA')); + self::assertFalse(BIC::isValid('1S3AC6BXSHA')); + } +} diff --git a/tests/Validation/Finance/CreditCardTest.php b/tests/Validation/Finance/CreditCardTest.php new file mode 100644 index 000000000..ca0d8711f --- /dev/null +++ b/tests/Validation/Finance/CreditCardTest.php @@ -0,0 +1,32 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Finance; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Finance\CreditCard; + +class CreditCardTest extends \PHPUnit\Framework\TestCase +{ + public function testCreditCard() + { + self::assertTrue(CreditCard::isValid('4242424242424242')); + self::assertFalse(CreditCard::isValid('4242424242424241')); + + self::assertTrue(CreditCard::luhnTest('49927398716')); + self::assertFalse(CreditCard::luhnTest('49927398717')); + self::assertFalse(CreditCard::luhnTest('4242424242424241')); + } +} diff --git a/tests/Validation/Finance/IbanEnumTest.php b/tests/Validation/Finance/IbanEnumTest.php new file mode 100644 index 000000000..f1ebe5500 --- /dev/null +++ b/tests/Validation/Finance/IbanEnumTest.php @@ -0,0 +1,40 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Finance; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Finance\IbanEnum; + +class IbanEnumTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + $enums = IbanEnum::getConstants(); + $ok = true; + + foreach ($enums as $enum) { + $temp = substr($enum, 2); + + if (preg_match('/[^kbsxcinm0at\ ]/', $temp) === 1) { + $ok = false; + + break; + } + } + + self::assertTrue($ok); + } +} diff --git a/tests/Validation/Finance/IbanErrorTypeTest.php b/tests/Validation/Finance/IbanErrorTypeTest.php new file mode 100644 index 000000000..d386be8fd --- /dev/null +++ b/tests/Validation/Finance/IbanErrorTypeTest.php @@ -0,0 +1,32 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Finance; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Finance\IbanErrorType; + +class IbanErrorTypeTest extends \PHPUnit\Framework\TestCase +{ + public function testEnums() + { + self::assertEquals(5, count(IbanErrorType::getConstants())); + self::assertEquals(1, IbanErrorType::INVALID_COUNTRY); + self::assertEquals(2, IbanErrorType::INVALID_LENGTH); + self::assertEquals(4, IbanErrorType::INVALID_CHECKSUM); + self::assertEquals(8, IbanErrorType::EXPECTED_ZERO); + self::assertEquals(16, IbanErrorType::EXPECTED_NUMERIC); + } +} diff --git a/tests/Validation/Finance/IbanTest.php b/tests/Validation/Finance/IbanTest.php new file mode 100644 index 000000000..73a8cb58f --- /dev/null +++ b/tests/Validation/Finance/IbanTest.php @@ -0,0 +1,31 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Finance; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Finance\Iban; + +class IbanTest extends \PHPUnit\Framework\TestCase +{ + public function testValid() + { + self::assertTrue(Iban::isValid('DE22 6008 0000 0960 0280 00')); + self::assertFalse(Iban::isValid('DE22 6008 0000 0960 0280 0')); + self::assertFalse(Iban::isValid('QQ22 6008 0000 0960 0280 00')); + self::assertFalse(Iban::isValid('MU22 6118 1111 1961 1281 1281 0111 23')); + self::assertFalse(Iban::isValid('DZ22 6118 1111 1961 1281 2211')); + } +} diff --git a/tests/Validation/Network/EmailTest.php b/tests/Validation/Network/EmailTest.php new file mode 100644 index 000000000..52cfde803 --- /dev/null +++ b/tests/Validation/Network/EmailTest.php @@ -0,0 +1,29 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Network; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Network\Email; + +class EmailTest extends \PHPUnit\Framework\TestCase +{ + public function testValidation() + { + self::assertTrue(Email::isValid('test.string@email.com')); + self::assertFalse(Email::isValid('test.string@email')); + self::assertTrue(Email::isValid('test.string+1234@email.com')); + } +} diff --git a/tests/Validation/Network/HostnameTest.php b/tests/Validation/Network/HostnameTest.php new file mode 100644 index 000000000..1862aa88f --- /dev/null +++ b/tests/Validation/Network/HostnameTest.php @@ -0,0 +1,30 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Network; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Network\Hostname; + +class HostnameTest extends \PHPUnit\Framework\TestCase +{ + public function testHostname() + { + self::assertTrue(Hostname::isValid('test.com')); + self::assertFalse(Hostname::isValid('http://test.com')); + self::assertFalse(Hostname::isValid('test.com/test?something=a')); + self::assertFalse(Hostname::isValid('//somethign/wrong')); + } +} diff --git a/tests/Validation/Network/IpTest.php b/tests/Validation/Network/IpTest.php new file mode 100644 index 000000000..87757c43d --- /dev/null +++ b/tests/Validation/Network/IpTest.php @@ -0,0 +1,36 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation\Network; + +require_once __DIR__ . '/../../../../../phpOMS/Autoloader.php'; + +use phpOMS\Validation\Network\Ip; + +class IpTest extends \PHPUnit\Framework\TestCase +{ + public function testValid() + { + self::assertTrue(IP::isValid('192.168.178.1')); + self::assertTrue(IP::isValid('2001:0db8:85a3:0000:0000:8a2e:0370:7334')); + self::assertFalse(IP::isValid('192.168.178.257')); + self::assertFalse(IP::isValid('localhost')); + + self::assertFalse(IP::isValidIpv6('192.168.178.1')); + self::assertTrue(IP::isValidIpv6('2001:0db8:85a3:0000:0000:8a2e:0370:7334')); + + self::assertTrue(IP::isValidIpv4('192.168.178.1')); + self::assertFalse(IP::isValidIpv4('2001:0db8:85a3:0000:0000:8a2e:0370:7334')); + } +} diff --git a/tests/Validation/ValidatorTest.php b/tests/Validation/ValidatorTest.php new file mode 100644 index 000000000..31036419b --- /dev/null +++ b/tests/Validation/ValidatorTest.php @@ -0,0 +1,44 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Validation; + +use phpOMS\Log\FileLogger; +use phpOMS\Validation\Validator; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class ValidatorTest extends \PHPUnit\Framework\TestCase +{ + public function testValidation() + { + self::assertTrue(Validator::contains('Test string contains something.', 'contains')); + self::assertFalse(Validator::contains('Test string contains something.', 'contains2')); + + self::assertTrue(Validator::hasLength('Test string contains something.')); + self::assertTrue(Validator::hasLength('Test string contains something.', 10, 100)); + self::assertFalse(Validator::hasLength('Test string contains something.', 100, 1000)); + + self::assertTrue(Validator::hasLimit(1.23, 1.0, 2.0)); + self::assertTrue(Validator::hasLimit(1, 0, 2)); + self::assertFalse(Validator::hasLimit(3.0, 0, 2)); + + self::assertTrue(Validator::isType(new FileLogger(__DIR__), '\phpOMS\Log\FileLogger')); + self::assertFalse(Validator::isType(new FileLogger(__DIR__), '\some\namespace')); + + Validator::resetError(); + self::assertEquals('', Validator::getMessage()); + self::assertEquals(0, Validator::getErrorCode()); + } +} diff --git a/tests/Version/VersionTest.php b/tests/Version/VersionTest.php new file mode 100644 index 000000000..f608e19b1 --- /dev/null +++ b/tests/Version/VersionTest.php @@ -0,0 +1,32 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Version; + +use phpOMS\Version\Version; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +class VersionTest extends \PHPUnit\Framework\TestCase +{ + public function testVersionCompare() + { + $version1 = '1.23.456'; + $version2 = '1.23.567'; + + self::assertEquals(Version::compare($version1, $version1), 0); + self::assertEquals(Version::compare($version1, $version2), -1); + self::assertEquals(Version::compare($version2, $version1), 1); + } +} diff --git a/tests/Views/ViewTest.php b/tests/Views/ViewTest.php new file mode 100644 index 000000000..a249cb3a5 --- /dev/null +++ b/tests/Views/ViewTest.php @@ -0,0 +1,142 @@ + + * @copyright Dennis Eichhorn + * @license OMS License 1.0 + * @version 1.0.0 + * @link http://website.orange-management.de + */ + +namespace Tests\PHPUnit\phpOMS\Views; + +require_once __DIR__ . '/../../../../phpOMS/Autoloader.php'; + +use phpOMS\ApplicationAbstract; +use phpOMS\DataStorage\Database\DatabasePool; +use phpOMS\Localization\Localization; +use phpOMS\Message\Http\Request; +use phpOMS\Message\Http\Response; +use phpOMS\Uri\Http; +use phpOMS\Views\View; +use phpOMS\Localization\L11nManager; + +class ViewTest extends \PHPUnit\Framework\TestCase +{ + protected $dbPool = null; + protected $app = null; + + public function setUp() + { + $this->dbPool = new DatabasePool(); + /** @var array $CONFIG */ + $this->dbPool->create('core', $GLOBALS['CONFIG']['db']['core']['masters']['admin']); + + $this->app = new class extends ApplicationAbstract + { + }; + + $this->app->l11nManager = new L11nManager(); + $this->app->dbPool = $this->dbPool; + } + + public function testDefault() + { + $view = new View($this->app, new Request(new Http('')), new Response(new Localization())); + + self::assertEmpty($view->getTemplate()); + self::assertEmpty($view->getViews()); + self::assertTrue(is_array($view->getViews())); + self::assertFalse($view->getView(0)); + self::assertFalse($view->removeView(0)); + self::assertNull($view->getData(0)); + self::assertFalse($view->removeData(0)); + self::assertEmpty($view->toArray()); + } + + public function testGetText() + { + $view = new View($this->app, $request = new Request(new Http('')), $response = new Response(new Localization())); + $view->setTemplate('/Modules/Admin/Theme/Backend/accounts-list'); + + $expected = [ + 'en' => [ + 'Admin' => [ + 'Test' => 'Test' + ] + ] + ]; + + $this->app->l11nManager = new L11nManager(); + $this->app->l11nManager->loadLanguage('en', 'Admin', $expected['en']); + + self::assertEquals('Test', $view->getText('Test')); + self::assertEquals('<a href="test">Test</a>', $view->getHtml('Test')); + } + + public function testGetSet() + { + $view = new View($this->app, $request = new Request(new Http('')), $response = new Response(new Localization())); + + $view->setData('key', 'value'); + self::assertEquals('value', $view->getData('key')); + + self::assertTrue($view->addData('key2', 'valu2')); + self::assertFalse($view->addData('key2', 'valu3')); + self::assertEquals('valu2', $view->getData('key2')); + + self::assertTrue($view->removeData('key2')); + self::assertFalse($view->removeData('key3')); + + self::assertEquals($request, $view->getRequest()); + self::assertEquals($response, $view->getResponse()); + + self::assertEquals('<a href="test">Test</a>', $view->printHtml('Test')); + + $tView = new View($this->app, $request, $response); + self::assertTrue($view->addView('test', $tView)); + self::assertEquals($tView, $view->getView('test')); + self::assertEquals(1, count($view->getViews())); + self::assertTrue($view->removeView('test')); + self::assertFalse($view->removeView('test')); + self::assertFalse($view->getView('test')); + } + + public function testRender() + { + $view = new View($this->app, new Request(), new Response(new Localization())); + + $view->setTemplate('/Tests/PHPUnit/phpOMS/Views/testTemplate'); + self::assertEquals('Test', $view->render()); + + // todo: why is this failing? + //$view->setTemplate('/Tests/PHPUnit/phpOMS/Views/testArray'); + //self::assertEquals([1, 2, 3], $view->render()); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testRenderException() + { + $view = new View($this->app, new Request(new Http('')), new Response(new Localization())); + $view->setTemplate('something.txt'); + + $view->render(); + } + + /** + * @expectedException \phpOMS\System\File\PathException + */ + public function testSerializeException() + { + $view = new View($this->app, new Request(new Http('')), new Response(new Localization())); + $view->setTemplate('something.txt'); + + $view->serialize(); + } +} diff --git a/tests/Views/testArray.tpl.php b/tests/Views/testArray.tpl.php new file mode 100644 index 000000000..92dd15faa --- /dev/null +++ b/tests/Views/testArray.tpl.php @@ -0,0 +1 @@ +Test \ No newline at end of file