From 7b76d797b86c691f39070fc9a51da08bf645e36b Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sat, 16 Mar 2024 14:11:43 +0000 Subject: [PATCH 1/7] code fixes --- Algorithm/Rating/Glicko1.php | 2 +- Algorithm/Rating/Glicko2.php | 2 +- Autoloader.php | 6 ++---- Business/Finance/Depreciation.php | 2 +- Business/Finance/DepreciationType.php | 2 +- Business/Finance/FinanceFormulas.php | 14 ++++++------- Business/Finance/Lorenzkurve.php | 4 ++-- Business/Marketing/Metrics.php | 20 +++++++++---------- Business/Marketing/NetPromoterScore.php | 2 +- Business/Marketing/PageRank.php | 2 +- .../ArticleCorrelationAffinity.php | 2 +- Business/Recommendation/ModelCF.php | 2 +- Business/Sales/MarketShareEstimation.php | 4 ++-- Dispatcher/Dispatcher.php | 4 ++-- Log/FileLogger.php | 8 ++++---- Math/Matrix/CholeskyDecomposition.php | 6 +++--- tests/Autoloader.php | 8 ++++++-- tests/Utils/PermutationTest.php | 4 ++-- 18 files changed, 48 insertions(+), 46 deletions(-) diff --git a/Algorithm/Rating/Glicko1.php b/Algorithm/Rating/Glicko1.php index 81652f4b2..0b2a6a8f0 100644 --- a/Algorithm/Rating/Glicko1.php +++ b/Algorithm/Rating/Glicko1.php @@ -102,7 +102,7 @@ public function calculateC(int $ratingPeriods = 100, int $avgRD = 50) : void } /** - * Calcualte the glicko-1 elo + * Calculate the glicko-1 elo * * @param int $elo Current player "elo" * @param int $rdOld Current player deviation (RD) diff --git a/Algorithm/Rating/Glicko2.php b/Algorithm/Rating/Glicko2.php index 171ee9687..15be92546 100644 --- a/Algorithm/Rating/Glicko2.php +++ b/Algorithm/Rating/Glicko2.php @@ -91,7 +91,7 @@ final class Glicko2 public int $MIN_RD = 50; /** - * Calcualte the glicko-2 elo + * Calculate the glicko-2 elo * * @example $glicko->elo(1500, 200, 0.06, [1,0,0], [1400,1550,1700], [30,100,300]) // 1464, 151, 0.059 * diff --git a/Autoloader.php b/Autoloader.php index 2cc707fdc..394d6c057 100755 --- a/Autoloader.php +++ b/Autoloader.php @@ -134,7 +134,6 @@ public static function inClassMap(string $map) : bool */ public static function findPaths(string $class) : array { - $found = []; $class = \ltrim($class, '\\'); $class = \strtr($class, '_\\', '//'); @@ -143,12 +142,11 @@ public static function findPaths(string $class) : array $subclass = $nspacePos === false ? '' : \substr($class, 0, $nspacePos); if (isset(self::$classmap[$subclass])) { - $found[] = self::$classmap[$subclass] . $class . '.php'; - - return $found; + return [self::$classmap[$subclass] . $class . '.php']; } } + $found = []; foreach (self::$paths as $path) { if (\is_file($file = $path . $class . '.php')) { $found[] = $file; diff --git a/Business/Finance/Depreciation.php b/Business/Finance/Depreciation.php index 4a2c4c7c4..fc5c32014 100755 --- a/Business/Finance/Depreciation.php +++ b/Business/Finance/Depreciation.php @@ -35,7 +35,7 @@ private function __construct() } /** - * Calculate linear depretiation rate + * Calculate linear depreciation rate * * @param float $start Value to depreciate * @param int $duration Useful life time diff --git a/Business/Finance/DepreciationType.php b/Business/Finance/DepreciationType.php index 8e0d7c2c2..7f5874564 100644 --- a/Business/Finance/DepreciationType.php +++ b/Business/Finance/DepreciationType.php @@ -28,7 +28,7 @@ abstract class DepreciationType extends Enum { public const NONE = 1; - public const STAIGHT_LINE = 2; + public const STRAIGHT_LINE = 2; public const DECLINING_BALANCE = 3; diff --git a/Business/Finance/FinanceFormulas.php b/Business/Finance/FinanceFormulas.php index e1559078c..bca291015 100755 --- a/Business/Finance/FinanceFormulas.php +++ b/Business/Finance/FinanceFormulas.php @@ -127,7 +127,7 @@ public static function getPeriodicPaymentOfFVA(float $fva, float $r, int $n) : f /** * Annuity - Future Value w/ Continuous Compounding * - * @param float $cf Cach flow + * @param float $cf Cashflow * @param float $r Rate * @param int $t Time * @@ -143,7 +143,7 @@ public static function getFutureValueOfAnnuityConinuousCompounding(float $cf, fl /** * Annuity - Future Value w/ Continuous Compounding * - * @param float $fvacc Future value annuity continuous compoinding + * @param float $fvacc Future value annuity continuous compounding * @param float $r Rate * @param int $t Time * @@ -159,8 +159,8 @@ public static function getCashFlowOfFVACC(float $fvacc, float $r, int $t) : floa /** * Annuity - Future Value w/ Continuous Compounding * - * @param float $fvacc Future value annuity continuous compoinding - * @param float $cf Cach flow + * @param float $fvacc Future value annuity continuous compounding + * @param float $cf Cashflow * @param float $r Rate * * @return int @@ -766,7 +766,7 @@ public static function getDoublingTime(float $r) : float } /** - * Get rate to dobule + * Get rate to double * * @param float $t Time in which to double investment * @@ -859,7 +859,7 @@ public static function getNetPresentValueOfEAA(float $C, float $r, int $n) : flo * Free Cash Flow to Equity (FCFE = FCFF - dept payments) * * @param float $income Net income - * @param float $depamo Depreciation & amortisation + * @param float $depamo Depreciation & amortization * @param float $capital Capital expenses * @param float $wc Change in working capital * @param float $borrowing Net Borrowing @@ -878,7 +878,7 @@ public static function getFreeCashFlowToEquity(float $income, float $depamo, flo * * @param float $ebit EBIT * @param float $t Tax rate - * @param float $depamo Depreciation & amortisation + * @param float $depamo Depreciation & amortization * @param float $capital Capital expenses * @param float $wc Change in working capital * diff --git a/Business/Finance/Lorenzkurve.php b/Business/Finance/Lorenzkurve.php index c9ae30567..0ac0cf1f6 100755 --- a/Business/Finance/Lorenzkurve.php +++ b/Business/Finance/Lorenzkurve.php @@ -37,9 +37,9 @@ private function __construct() /** * Calculate Gini coefficient * - * @param array $data Datapoints (can be unsorted) + * @param array $data Data points (can be unsorted) * - * @return float Returns the gini coefficient + * @return float Returns the Gini coefficient * * @since 1.0.0 */ diff --git a/Business/Marketing/Metrics.php b/Business/Marketing/Metrics.php index d42fb077f..2511c4e82 100755 --- a/Business/Marketing/Metrics.php +++ b/Business/Marketing/Metrics.php @@ -59,7 +59,7 @@ public static function getCustomerRetention(int $ce, int $cn, int $cs) : float } /** - * Calcualte the coefficient of retention + * Calculate the coefficient of retention * * @param float $retentionRate Observed retention rate (optionally use the average) * @param float $rc Retention rate ceiling @@ -109,13 +109,13 @@ public static function customerActiveProbability(int $purchases, int $periods, i /** * Calculate the customer profits * - * @param int $customers Amount of customers acquired - * @param float $acquistionCost Acquisition cost per customer - * @param float $revenue Revenues per period per customer - * @param float $cogs COGS per period per customer - * @param float $marketingCosts Ongoing marketing costs per period per customer - * @param float $discountRate Discount rate - * @param float $retentionRate Retention rate (how many customers remain) + * @param int $customers Amount of customers acquired + * @param float $acquisitionCost Acquisition cost per customer + * @param float $revenue Revenues per period per customer + * @param float $cogs COGS per period per customer + * @param float $marketingCosts Ongoing marketing costs per period per customer + * @param float $discountRate Discount rate + * @param float $retentionRate Retention rate (how many customers remain) * * @return float * @@ -123,7 +123,7 @@ public static function customerActiveProbability(int $purchases, int $periods, i */ public static function getBerrysCustomerProfits( int $customers, - float $acquistionCost, + float $acquisitionCost, float $revenue, float $cogs, float $marketingCosts, @@ -133,7 +133,7 @@ public static function getBerrysCustomerProfits( { return $customers * ($revenue - $cogs) * ((1 + $discountRate) / (1 + $discountRate - $retentionRate)) - $customers * $marketingCosts * ((1 + $discountRate) / (1 + $discountRate - $retentionRate)) - - $customers * $acquistionCost; + - $customers * $acquisitionCost; } /** diff --git a/Business/Marketing/NetPromoterScore.php b/Business/Marketing/NetPromoterScore.php index 660111cc7..17635ffa7 100755 --- a/Business/Marketing/NetPromoterScore.php +++ b/Business/Marketing/NetPromoterScore.php @@ -57,7 +57,7 @@ public function add(int $score) : void * * @latex NPS = Promoters - Detractors * - * @return int Retunrs the NPS + * @return int NPS * * @since 1.0.0 */ diff --git a/Business/Marketing/PageRank.php b/Business/Marketing/PageRank.php index 641649b8a..fde35ee14 100755 --- a/Business/Marketing/PageRank.php +++ b/Business/Marketing/PageRank.php @@ -95,7 +95,7 @@ public function __construct(array $relations, bool $isUnique = true, float $damp } /** - * Calcualte the rank based on a start rank for the different elements + * Calculate the rank based on a start rank for the different elements * * A different start rank for different elements might make sense if the elements are not uniform from the very beginning * diff --git a/Business/Recommendation/ArticleCorrelationAffinity.php b/Business/Recommendation/ArticleCorrelationAffinity.php index 10340beef..bbe79adc8 100644 --- a/Business/Recommendation/ArticleCorrelationAffinity.php +++ b/Business/Recommendation/ArticleCorrelationAffinity.php @@ -39,7 +39,7 @@ final class ArticleCorrelationAffinity /** * Item order behavior (when are which items ordered) * - * In tearms of the pearson correlation these are our random variables + * In terms of the pearson correlation these are our random variables * * @var array * @since 1.0.0 diff --git a/Business/Recommendation/ModelCF.php b/Business/Recommendation/ModelCF.php index 8bdbf36e9..e268a302e 100644 --- a/Business/Recommendation/ModelCF.php +++ b/Business/Recommendation/ModelCF.php @@ -47,7 +47,7 @@ private function __construct() * the item matrix contains in every row a score for how much it belongs to a certain attribute. Each column represents an item. * example: users columns define how much a user likes a certain movie genre and the item rows define how much this movie belongs to a certain genre. * the multiplication gives a score of how much the user may like that movie. - * A segnificant amount of attributes are required to calculate a good match + * A significant amount of attributes are required to calculate a good match * * @param array> $users A mxa matrix where each "m" defines how much the user likes a certain attribute type and "a" defines different users * @param array> $items A bxm matrix where each "b" defines a item and "m" defines how much it belongs to a certain attribute type diff --git a/Business/Sales/MarketShareEstimation.php b/Business/Sales/MarketShareEstimation.php index 84bef5fe0..34e8880d0 100755 --- a/Business/Sales/MarketShareEstimation.php +++ b/Business/Sales/MarketShareEstimation.php @@ -42,7 +42,7 @@ private function __construct() * * @latex r = \sqrt[s]{\frac{1}{m \times \sum_{n=1}^N{\frac{1}{n^{s}}}}} * - * @param int $participants The amount of existing participants in the market or compentitors (N) + * @param int $participants The amount of existing participants in the market or competitors (N) * @param float $marketShare The absolute own market share (m) * @param float $modifier Distribution modifier (s) * @@ -65,7 +65,7 @@ public static function getRankFromMarketShare(int $participants, float $marketSh * * @latex m = \frac{\frac{1}{r^{s}}}{\sum_{n=1}^N{\frac{1}{n^{s}}}} * - * @param int $participants The amount of existing participants in the market or compentitors (N) + * @param int $participants The amount of existing participants in the market or competitors (N) * @param int $rank The absolute own rank in the market (r) * @param float $modifier Distribution modifier (s) * diff --git a/Dispatcher/Dispatcher.php b/Dispatcher/Dispatcher.php index c256b69ff..1c65a1fd9 100755 --- a/Dispatcher/Dispatcher.php +++ b/Dispatcher/Dispatcher.php @@ -49,7 +49,7 @@ final class Dispatcher implements DispatcherInterface /** * Constructor. * - * @param ApplicationAbstract $app Appliaction + * @param ApplicationAbstract $app Application * * @since 1.0.0 */ @@ -78,7 +78,7 @@ public function dispatch(array | string | callable $controller, mixed ...$data) } // Php void functions always return null. - // In a different language the Api functions would reguire a return type + // In a different language the Api functions would require a return type // If null is returned (i.e. void functions) these get ignored later in the response renderer as null is not "rendered" if (\is_string($controller)) { $views += $this->dispatchString($controller, $data); diff --git a/Log/FileLogger.php b/Log/FileLogger.php index 09925c0e2..b35639d71 100755 --- a/Log/FileLogger.php +++ b/Log/FileLogger.php @@ -369,7 +369,7 @@ public function log(string $level, string $message, array $context = []) : void } /** - * Analyse logging file. + * Analyze logging file. * * @return array * @@ -414,9 +414,9 @@ public function countLogs() : array } /** - * Find cricitcal connections. + * Find critical connections. * - * @param int $limit Amout of perpetrators + * @param int $limit Amount of perpetrators * * @return array * @@ -464,7 +464,7 @@ public function getHighestPerpetrator(int $limit = 10) : array /** * Get logging messages from file. * - * @param int $limit Amout of logs + * @param int $limit Amount of logs * @param int $offset Offset * * @return array diff --git a/Math/Matrix/CholeskyDecomposition.php b/Math/Matrix/CholeskyDecomposition.php index 32098ff5f..d872a5317 100755 --- a/Math/Matrix/CholeskyDecomposition.php +++ b/Math/Matrix/CholeskyDecomposition.php @@ -20,7 +20,7 @@ /** * Cholesky decomposition * - * A is syymetric, positive definite then A = L*L' + * A is symmetric, positive definite then A = L*L' * * @package phpOMS\Math\Matrix * @license OMS License 2.0 @@ -46,7 +46,7 @@ final class CholeskyDecomposition private int $m = 0; /** - * Is symmetric positiv definite + * Is symmetric positive definite * * @var bool * @since 1.0.0 @@ -89,7 +89,7 @@ public function __construct(Matrix $M) } /** - * Is matrix symmetric positiv definite. + * Is matrix symmetric positive definite. * * @return bool * diff --git a/tests/Autoloader.php b/tests/Autoloader.php index 95dd1b74c..89487804b 100755 --- a/tests/Autoloader.php +++ b/tests/Autoloader.php @@ -78,7 +78,9 @@ public static function defaultAutoloader(string $class) : void $class = \ltrim($class, '\\'); $class = \strtr($class, '_\\', '//'); - if (\stripos($class, 'Web/Backend') !== false || \stripos($class, 'Web/Api') !== false) { + if (\stripos($class, 'Web/Backend') !== false + || \stripos($class, 'Web/Api') !== false + ) { $class = \is_dir(__DIR__ . '/Web') ? $class : \str_replace('Web/', 'MainRepository/Web/', $class); } @@ -97,7 +99,9 @@ public static function defaultAutoloader(string $class) : void } foreach (self::$paths as $path) { - if (($file = \realpath($path . $class2 . '.php')) !== false && \stripos($file, $class3) !== false) { + if (($file = \realpath($path . $class2 . '.php')) !== false + && \stripos($file, $class3) !== false + ) { include_once $file; return; diff --git a/tests/Utils/PermutationTest.php b/tests/Utils/PermutationTest.php index ddf1f6599..b59391b55 100755 --- a/tests/Utils/PermutationTest.php +++ b/tests/Utils/PermutationTest.php @@ -30,7 +30,7 @@ final class PermutationTest extends \PHPUnit\Framework\TestCase * @covers phpOMS\Utils\Permutation * @group framework */ - public function testPermute() : void + public function testPermuteAll() : void { $arr = ['a', 'b', 'c']; $permutations = ['abc', 'acb', 'bac', 'bca', 'cab', 'cba']; @@ -68,7 +68,7 @@ public function testIsPalindrome() : void * @covers phpOMS\Utils\Permutation * @group framework */ - public function testPermute() : void + public function testPermuteBy() : void { self::assertEquals(['c', 'b', 'a'], Permutation::permuteByKey(['a', 'b', 'c'], [2, 1, 1])); } From 5876d8890186484f48adb282c8e33dee57917789 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sat, 16 Mar 2024 17:56:46 +0000 Subject: [PATCH 2/7] test fixes --- DataStorage/Database/Mapper/DeleteMapper.php | 8 ++++---- Stdlib/Graph/Graph.php | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/DataStorage/Database/Mapper/DeleteMapper.php b/DataStorage/Database/Mapper/DeleteMapper.php index 992deaaf5..c27086171 100755 --- a/DataStorage/Database/Mapper/DeleteMapper.php +++ b/DataStorage/Database/Mapper/DeleteMapper.php @@ -224,15 +224,15 @@ private function deleteHasMany(object $obj, mixed $objId, ?\ReflectionClass &$re /** * Delete has many relations if the relation is handled in a relation table * - * @param string $member Property which contains the has many models - * @param array $objIds Objects which are related to the parent object - * @param mixed $objId Parent object id + * @param string $member Property which contains the has many models + * @param null|array $objIds Objects which are related to the parent object + * @param mixed $objId Parent object id * * @return void * * @since 1.0.0 */ - public function deleteRelationTable(string $member, ?array $objIds = null, mixed $objId) : void + public function deleteRelationTable(string $member, ?array $objIds, mixed $objId) : void { if ((empty($objIds) && $objIds !== null) || $this->mapper::HAS_MANY[$member]['table'] === $this->mapper::TABLE diff --git a/Stdlib/Graph/Graph.php b/Stdlib/Graph/Graph.php index 8cdf8265e..9fdc3df47 100755 --- a/Stdlib/Graph/Graph.php +++ b/Stdlib/Graph/Graph.php @@ -531,7 +531,7 @@ public function getFloydWarshallShortestPath() : array */ private function pathBetweenNodesDfs( Node $node1, - ?Node $node2 = null, + Node $node2, array &$visited, array &$path, array &$paths From 44098e33d2c396407882e0ed4d20c28f0bc5508c Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 17 Mar 2024 02:36:48 +0000 Subject: [PATCH 3/7] test fixes --- .../Database/Schema/Grammar/SQLiteGrammar.php | 8 +- Math/Matrix/Matrix.php | 17 ++-- Router/SocketRouter.php | 2 +- Router/WebRouter.php | 2 +- Socket/Client/ClientConnection.php | 2 +- Socket/Server/Server.php | 24 ++--- System/File/Ftp/File.php | 2 +- System/File/Ftp/FileAbstract.php | 4 +- System/File/Local/File.php | 2 +- System/File/Local/FileAbstract.php | 4 +- tests/Ai/Ocr/Tesseract/TesseractOcrTest.php | 2 +- .../Database/Query/BuilderTest.php | 10 +-- .../Database/Schema/BuilderTest.php | 2 +- tests/Router/SocketRouterTest.php | 8 +- tests/Router/WebRouterTest.php | 20 ++--- tests/Router/socketRouterTestFile.php | 2 +- .../Router/socketRouterTestFilePermission.php | 2 +- tests/Stdlib/Base/AddressTest.php | 84 ++++++------------ tests/Utils/Parser/Document/data/WordMpdf.pdf | Bin 0 -> 99691 bytes tests/Utils/Parser/Markdown/data/chartjs.md | 2 +- .../Parser/Spreadsheet/data/ExcelMpdf.pdf | Bin 0 -> 15754 bytes tests/Utils/StringUtilsTest.php | 2 +- 22 files changed, 82 insertions(+), 119 deletions(-) create mode 100644 tests/Utils/Parser/Document/data/WordMpdf.pdf create mode 100644 tests/Utils/Parser/Spreadsheet/data/ExcelMpdf.pdf diff --git a/DataStorage/Database/Schema/Grammar/SQLiteGrammar.php b/DataStorage/Database/Schema/Grammar/SQLiteGrammar.php index 5411b321b..b2237c005 100755 --- a/DataStorage/Database/Schema/Grammar/SQLiteGrammar.php +++ b/DataStorage/Database/Schema/Grammar/SQLiteGrammar.php @@ -129,14 +129,14 @@ protected function compileCreateFields(SchemaBuilder $query, array $fields) : st $fieldQuery .= ' ' . ($field['null'] ? '' : 'NOT ') . 'NULL'; } - if ($field['primary'] ?? false) { - $keys .= ' PRIMARY KEY'; - } - if ($field['autoincrement'] ?? false) { $fieldQuery .= ' AUTOINCREMENT'; } + if ($field['primary'] ?? false) { + $fieldQuery .= ' PRIMARY KEY'; + } + $fieldQuery .= ','; if ($field['unique'] ?? false) { diff --git a/Math/Matrix/Matrix.php b/Math/Matrix/Matrix.php index a19d82d6f..debe8b447 100755 --- a/Math/Matrix/Matrix.php +++ b/Math/Matrix/Matrix.php @@ -853,20 +853,17 @@ public function exp(int $iterations = 10) : self throw new InvalidDimensionException($this->m . 'x' . $this->n); } - $sum = new IdentityMatrix($this->m); - - $factorial = 1; - $pow = clone $sum; + $eig = new EigenvalueDecomposition($this); + $v = $eig->getV(); + $d = $eig->getD(); - for ($i = 1; $i <= $iterations; ++$i) { - $factorial *= $i; - $coeff = 1 / $factorial; + $vInv = $v->inverse(); - $pow = $pow->mult($this); - $sum = $sum->add($pow->mult($coeff)); + for ($i = 0; $d->m; ++$i) { + $d->matrix[$i][$i] = \exp($d->matrix[$i][$i]); } - return $sum; + return $v->mult($d)->mult($vInv); } /** diff --git a/Router/SocketRouter.php b/Router/SocketRouter.php index a5cd0e9e5..079257df1 100755 --- a/Router/SocketRouter.php +++ b/Router/SocketRouter.php @@ -120,7 +120,7 @@ public function route( { $bound = []; foreach ($this->routes as $route => $destination) { - if (!((bool) \preg_match('~^' . $route . '$~', $uri))) { + if (!((bool) \preg_match('~' . $route . '~', $uri))) { continue; } diff --git a/Router/WebRouter.php b/Router/WebRouter.php index fd70cbd83..0e3796516 100755 --- a/Router/WebRouter.php +++ b/Router/WebRouter.php @@ -129,7 +129,7 @@ public function route( { $bound = []; foreach ($this->routes as $route => $destination) { - if (!((bool) \preg_match('~^' . $route . '$~', $uri))) { + if (!((bool) \preg_match('~' . $route . '~', $uri))) { continue; } diff --git a/Socket/Client/ClientConnection.php b/Socket/Client/ClientConnection.php index 1f83b7da5..f10d4bf5a 100755 --- a/Socket/Client/ClientConnection.php +++ b/Socket/Client/ClientConnection.php @@ -36,7 +36,7 @@ class ClientConnection private $connected = true; - private Account $account; + public Account $account; /** * Constructor. diff --git a/Socket/Server/Server.php b/Socket/Server/Server.php index e1225eaa1..af1cc78a5 100755 --- a/Socket/Server/Server.php +++ b/Socket/Server/Server.php @@ -108,9 +108,9 @@ public static function hasInternet() : bool */ public function create(string $ip, int $port) : void { - $this->app->logger->info('Creating socket...'); + $this->app->logger?->info('Creating socket...'); parent::create($ip, $port); - $this->app->logger->info('Binding socket...'); + $this->app->logger?->info('Binding socket...'); \socket_bind($this->sock, $this->ip, $this->port); } @@ -190,12 +190,12 @@ public function handshake($client, $headers) : bool */ public function run() : void { - $this->app->logger->info('Start listening...'); + $this->app->logger?->info('Start listening...'); @\socket_listen($this->sock); @\socket_set_nonblock($this->sock); $this->conn[] = $this->sock; - $this->app->logger->info('Is running...'); + $this->app->logger?->info('Is running...'); while ($this->run) { $read = $this->conn; @@ -225,12 +225,12 @@ public function run() : void $data = \is_string($data) ? \trim($data) : ''; if (!$client->getHandshake()) { - $this->app->logger->debug('Doing handshake...'); + $this->app->logger?->debug('Doing handshake...'); if ($this->handshake($client, $data)) { $client->setHandshake(true); - $this->app->logger->debug('Handshake succeeded.'); + $this->app->logger?->debug('Handshake succeeded.'); } else { - $this->app->logger->debug('Handshake failed.'); + $this->app->logger?->debug('Handshake failed.'); $this->disconnectClient($client); } } else { @@ -239,7 +239,7 @@ public function run() : void } } } - $this->app->logger->info('Is shutdown...'); + $this->app->logger?->info('Is shutdown...'); $this->close(); } @@ -272,13 +272,13 @@ public function shutdown($request) : void */ public function connectClient($socket) : void { - $this->app->logger->debug('Connecting client...'); + $this->app->logger?->debug('Connecting client...'); $this->app->accountManager->add(new NullAccount(1)); $this->clientManager->add($client = new ClientConnection(new NullAccount(1), $socket)); $this->conn[$client->getId()] = $socket; - $this->app->logger->debug('Connected client.'); + $this->app->logger?->debug('Connected client.'); } /** @@ -292,7 +292,7 @@ public function connectClient($socket) : void */ public function disconnectClient($client) : void { - $this->app->logger->debug('Disconnecting client...'); + $this->app->logger?->debug('Disconnecting client...'); $client->setConnected(false); $client->setHandshake(false); \socket_shutdown($client->getSocket(), 2); @@ -303,7 +303,7 @@ public function disconnectClient($client) : void } $this->clientManager->remove($client->id); - $this->app->logger->debug('Disconnected client.'); + $this->app->logger?->debug('Disconnected client.'); } /** diff --git a/System/File/Ftp/File.php b/System/File/Ftp/File.php index 85d08ea4a..f583f0c9a 100755 --- a/System/File/Ftp/File.php +++ b/System/File/Ftp/File.php @@ -517,7 +517,7 @@ public function copyNode(string $to, bool $overwrite = false) : bool return false; } - $newParent = $this->findNode($to); + $newParent = $this->findNode(\dirname($to)); $state = self::copy($this->con, $this->path, $to, $overwrite); diff --git a/System/File/Ftp/FileAbstract.php b/System/File/Ftp/FileAbstract.php index f8d229d50..7a3b63606 100755 --- a/System/File/Ftp/FileAbstract.php +++ b/System/File/Ftp/FileAbstract.php @@ -238,11 +238,11 @@ public function index() : void * * @param string $path Path of the node * - * @return null|Directory + * @return null|Directory|File * * @since 1.0.0 */ - public function findNode(string $path) : ?Directory + public function findNode(string $path) : null|Directory|File { // Change parent element $currentPath = \explode('/', \trim($this->path, '/')); diff --git a/System/File/Local/File.php b/System/File/Local/File.php index 9caaabbdd..b3c1e5a83 100755 --- a/System/File/Local/File.php +++ b/System/File/Local/File.php @@ -491,7 +491,7 @@ public function getDirectory() : ContainerInterface */ public function copyNode(string $to, bool $overwrite = false) : bool { - $newParent = $this->findNode($to); + $newParent = $this->findNode(\dirname($to)); $state = self::copy($this->path, $to, $overwrite); diff --git a/System/File/Local/FileAbstract.php b/System/File/Local/FileAbstract.php index b1ea28c0e..644a28c43 100755 --- a/System/File/Local/FileAbstract.php +++ b/System/File/Local/FileAbstract.php @@ -269,11 +269,11 @@ public function index() : void * * @param string $path Path of the node * - * @return null|Directory + * @return null|Directory|File * * @since 1.0.0 */ - public function findNode(string $path) : ?Directory + public function findNode(string $path) : null|Directory|File { // Change parent element $currentPath = \explode('/', \trim($this->path, '/')); diff --git a/tests/Ai/Ocr/Tesseract/TesseractOcrTest.php b/tests/Ai/Ocr/Tesseract/TesseractOcrTest.php index ad81e63a5..e1c7b364d 100755 --- a/tests/Ai/Ocr/Tesseract/TesseractOcrTest.php +++ b/tests/Ai/Ocr/Tesseract/TesseractOcrTest.php @@ -72,7 +72,7 @@ public function testInvalidOcrPath() : void { $this->expectException(PathException::class); - $ocr = new TesseractOcr('/invalid/path'); + TesseractOcr::setBin('/invalid/path'); } /** diff --git a/tests/DataStorage/Database/Query/BuilderTest.php b/tests/DataStorage/Database/Query/BuilderTest.php index 0defa7035..c9b2b9720 100755 --- a/tests/DataStorage/Database/Query/BuilderTest.php +++ b/tests/DataStorage/Database/Query/BuilderTest.php @@ -67,7 +67,7 @@ public function testSelect($con) : void self::assertEquals($sql, $query->select('a.test')->from('a')->where('a.test', '=', 1)->toSql()); $query = new Builder($con); - $sql = 'SELECT [a].[test] as t FROM [a] as b WHERE [a].[test] = 1;'; + $sql = 'SELECT [a].[test] AS t FROM [a] AS b WHERE [a].[test] = 1;'; $sql = \strtr($sql, '[]', $iS . $iE); self::assertEquals($sql, $query->selectAs('a.test', 't')->fromAs('a', 'b')->where('a.test', '=', 1)->toSql()); @@ -121,7 +121,7 @@ public function testRandomMysql() : void $iE = $con->getGrammar()->systemIdentifierEnd; $query = new Builder($con); - $sql = 'SELECT [a].[test] FROM [a] as b WHERE [a].[test] = 1 ORDER BY RAND() LIMIT 1;'; + $sql = 'SELECT [a].[test] FROM [a] AS b WHERE [a].[test] = 1 ORDER BY RAND() LIMIT 1;'; $sql = \strtr($sql, '[]', $iS . $iE); self::assertEquals($sql, $query->random('a.test')->fromAs('a', 'b')->where('a.test', '=', 1)->toSql()); } @@ -134,7 +134,7 @@ public function testRandomPostgresql() : void $iE = $con->getGrammar()->systemIdentifierEnd; $query = new Builder($con); - $sql = 'SELECT [a].[test] FROM [a] as b ORDER BY RANDOM() LIMIT 1;'; + $sql = 'SELECT [a].[test] FROM [a] AS b ORDER BY RANDOM() LIMIT 1;'; $sql = \strtr($sql, '[]', $iS . $iE); self::assertEquals($sql, $query->random('a.test')->fromAs('a', 'b')->where('a.test', '=', 1)->toSql()); } @@ -147,7 +147,7 @@ public function testRandomSQLite() : void $iE = $con->getGrammar()->systemIdentifierEnd; $query = new Builder($con); - $sql = 'SELECT [a].[test] FROM [a] as b ORDER BY RANDOM() LIMIT 1;'; + $sql = 'SELECT [a].[test] FROM [a] AS b ORDER BY RANDOM() LIMIT 1;'; $sql = \strtr($sql, '[]', $iS . $iE); self::assertEquals($sql, $query->random('a.test')->fromAs('a', 'b')->where('a.test', '=', 1)->toSql()); } @@ -160,7 +160,7 @@ public function testRandomSqlServer() : void $iE = $con->getGrammar()->systemIdentifierEnd; $query = new Builder($con); - $sql = 'SELECT TOP 1 [a].[test] FROM [a] as b ORDER BY IDX FETCH FIRST 1 ROWS ONLY;'; + $sql = 'SELECT TOP 1 [a].[test] FROM [a] AS b ORDER BY IDX FETCH FIRST 1 ROWS ONLY;'; $sql = \strtr($sql, '[]', $iS . $iE); self::assertEquals($sql, $query->random('a.test')->fromAs('a', 'b')->where('a.test', '=', 1)->toSql()); } diff --git a/tests/DataStorage/Database/Schema/BuilderTest.php b/tests/DataStorage/Database/Schema/BuilderTest.php index f5a70693e..edc19f660 100755 --- a/tests/DataStorage/Database/Schema/BuilderTest.php +++ b/tests/DataStorage/Database/Schema/BuilderTest.php @@ -180,7 +180,7 @@ public function testCreateTable($con) : void } elseif ($con instanceof SqlServerConnection) { $sql = 'CREATE TABLE IF NOT EXISTS [user_roles] ([user_id] INT AUTO_INCREMENT, [role_id] VARCHAR(10) DEFAULT \'1\' NULL, PRIMARY KEY ([user_id]), FOREIGN KEY ([user_id]) REFERENCES [users] ([ext1_id]), FOREIGN KEY ([role_id]) REFERENCES [roles] ([ext2_id]));'; } elseif ($con instanceof SQLiteConnection) { - $sql = 'CREATE TABLE [user_roles] ([user_id] INTEGER PRIMARY KEY AUTOINCREMENT, [role_id] TEXT DEFAULT \'1\' NULL, PRIMARY KEY ([user_id]), FOREIGN KEY ([user_id]) REFERENCES [users] ([ext1_id]), FOREIGN KEY ([role_id]) REFERENCES [roles] ([ext2_id]));'; + $sql = 'CREATE TABLE [user_roles] ([user_id] INTEGER AUTOINCREMENT PRIMARY KEY, [role_id] TEXT DEFAULT \'1\' NULL, FOREIGN KEY ([user_id]) REFERENCES [users] ([ext1_id]), FOREIGN KEY ([role_id]) REFERENCES [roles] ([ext2_id]));'; } $sql = \strtr($sql, '[]', $iS . $iE); diff --git a/tests/Router/SocketRouterTest.php b/tests/Router/SocketRouterTest.php index 6d29465b9..11c14d1c4 100755 --- a/tests/Router/SocketRouterTest.php +++ b/tests/Router/SocketRouterTest.php @@ -108,7 +108,7 @@ public function testRouteClearing() : void */ public function testDynamicRouteAdding() : void { - $this->router->add('^.*backends_admin -settings=general(\?.*$|$)', 'Controller:test'); + $this->router->add('^.*backends_admin -settings=general( \-.*$|$)', 'Controller:test'); self::assertEquals( [['dest' => 'Controller:test']], $this->router->route('backends_admin -settings=general -t 123') @@ -219,7 +219,7 @@ public function testWithInvalidPermissions() : void public function testDataValidation() : void { $this->router->add( - '^.*backends_admin -settings=general(\?.*$|$)', + '^.*backends_admin -settings=general( \-.*$|$)', 'Controller:test', validation: ['test_pattern' => '/^[a-z]*$/'] ); @@ -238,7 +238,7 @@ public function testDataValidation() : void public function testInvalidDataValidation() : void { $this->router->add( - '^.*backends_admin -settings=general(\?.*$|$)', + '^.*backends_admin -settings=general( \-.*$|$)', 'Controller:test', validation: ['test_pattern' => '/^[a-z]*$/'] ); @@ -257,7 +257,7 @@ public function testInvalidDataValidation() : void public function testDataFromPattern() : void { $this->router->add( - '^.*-settings=general(\?.*$|$)', + '^.*-settings=general( \-.*$|$)', 'Controller:test', dataPattern: '/^.*?(settings)=([a-z]*).*?$/' ); diff --git a/tests/Router/WebRouterTest.php b/tests/Router/WebRouterTest.php index 041d1bd03..66865d88e 100755 --- a/tests/Router/WebRouterTest.php +++ b/tests/Router/WebRouterTest.php @@ -91,7 +91,7 @@ public function testRouteMatching() : void [['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']], $this->router->route( (new HttpRequest( - new HttpUri('http://test.com/backend/admin/settings/general/something?test') + new HttpUri('http://test.com/backend/admin/settings/general?test') ))->uri->getRoute() ) ); @@ -111,7 +111,7 @@ public function testRouteClearing() : void [], $this->router->route( (new HttpRequest( - new HttpUri('http://test.com/backend/admin/settings/general/something?test') + new HttpUri('http://test.com/backend/admin/settings/general?test') ))->uri->getRoute() ) ); @@ -130,7 +130,7 @@ public function testRouteMissMatchingForInvalidVerbs() : void [['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']], $this->router->route( (new HttpRequest( - new HttpUri('http://test.com/backend/admin/settings/general/something?test') + new HttpUri('http://test.com/backend/admin/settings/general?test') ))->uri->getRoute(), null, RouteVerb::PUT) ); } @@ -147,7 +147,7 @@ public function testDynamicRouteAdding() : void [['dest' => 'Controller:test']], $this->router->route( (new HttpRequest( - new HttpUri('http://test.com/backends/admin/settings/general/something?test') + new HttpUri('http://test.com/backends/admin/settings/general?test') ))->uri->getRoute(), null, RouteVerb::ANY) ); @@ -155,7 +155,7 @@ public function testDynamicRouteAdding() : void [['dest' => 'Controller:test']], $this->router->route( (new HttpRequest( - new HttpUri('http://test.com/backends/admin/settings/general/something?test') + new HttpUri('http://test.com/backends/admin/settings/general?test') ))->uri->getRoute(), null, RouteVerb::SET) ); @@ -163,7 +163,7 @@ public function testDynamicRouteAdding() : void [['dest' => 'Controller:test']], $this->router->route( (new HttpRequest( - new HttpUri('http://test.com/backends/admin/settings/general/something?test')))->uri->getRoute(), null, RouteVerb::GET) + new HttpUri('http://test.com/backends/admin/settings/general?test')))->uri->getRoute(), null, RouteVerb::GET) ); } @@ -236,7 +236,7 @@ public function testWithValidPermissions() : void self::assertEquals( [['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']], $this->router->route( - (new HttpRequest(new HttpUri('http://test.com/backend/admin/settings/general/something?test')))->uri->getRoute(), + (new HttpRequest(new HttpUri('http://test.com/backend/admin/settings/general?test')))->uri->getRoute(), null, RouteVerb::GET, null, @@ -300,7 +300,7 @@ public function testWithInvalidPermissions() : void self::assertNotEquals( [['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']], $this->router->route( - (new HttpRequest(new HttpUri('http://test.com/backend/admin/settings/general/something?test')))->uri->getRoute(), + (new HttpRequest(new HttpUri('http://test.com/backend/admin/settings/general?test')))->uri->getRoute(), null, RouteVerb::GET, null, @@ -329,7 +329,7 @@ public function testDataValidation() : void [['dest' => 'Controller:test']], $this->router->route( (new HttpRequest( - new HttpUri('http://test.com/backends/admin/settings/general/something?test') + new HttpUri('http://test.com/backends/admin/settings/general?test') ))->uri->getRoute(), null, RouteVerb::ANY, null, null, null, ['test_pattern' => 'abcdef']) ); } @@ -353,7 +353,7 @@ public function testInvalidDataValidation() : void [['dest' => 'Controller:test']], $this->router->route( (new HttpRequest( - new HttpUri('http://test.com/backends/admin/settings/general/something?test') + new HttpUri('http://test.com/backends/admin/settings/general?test') ))->uri->getRoute(), null, RouteVerb::ANY, null, null, null, ['test_pattern' => '123']) ); } diff --git a/tests/Router/socketRouterTestFile.php b/tests/Router/socketRouterTestFile.php index 3a4b22f4e..f10b13da5 100755 --- a/tests/Router/socketRouterTestFile.php +++ b/tests/Router/socketRouterTestFile.php @@ -1,7 +1,7 @@ [ + '^.*backend_admin -settings=general( \-.*$|$)' => [ 0 => [ 'dest' => '\Modules\Admin\Controller:viewSettingsGeneral', ], diff --git a/tests/Router/socketRouterTestFilePermission.php b/tests/Router/socketRouterTestFilePermission.php index 6e33a2e90..95988d895 100755 --- a/tests/Router/socketRouterTestFilePermission.php +++ b/tests/Router/socketRouterTestFilePermission.php @@ -4,7 +4,7 @@ use phpOMS\Account\PermissionType; return [ - '^.*backend_admin -settings=general(\?.*$|$)' => [ + '^.*backend_admin -settings=general( \-.*$|$)' => [ 0 => [ 'dest' => '\Modules\Admin\Controller:viewSettingsGeneral', 'permission' => [ diff --git a/tests/Stdlib/Base/AddressTest.php b/tests/Stdlib/Base/AddressTest.php index 3a5166c34..ccae59dea 100755 --- a/tests/Stdlib/Base/AddressTest.php +++ b/tests/Stdlib/Base/AddressTest.php @@ -42,22 +42,19 @@ protected function setUp() : void public function testDefault() : void { $expected = [ - 'recipient' => '', 'fao' => '', - 'location' => [ - 'postal' => '', - 'city' => '', - 'country' => 'XX', - 'address' => '', - 'state' => '', - 'lat' => 0.0, - 'lon' => 0.0, - ], + 'name' => '', + 'postal' => '', + 'city' => '', + 'country' => 'XX', + 'address' => '', + 'state' => '', + 'lat' => 0.0, + 'lon' => 0.0, ]; - self::assertEquals('', $this->address->recipient); self::assertEquals('', $this->address->fao); - self::assertInstanceOf('\phpOMS\Stdlib\Base\Location', $this->address->location); + self::assertInstanceOf('\phpOMS\Stdlib\Base\Location', $this->address); self::assertEquals($expected, $this->address->toArray()); self::assertEquals($expected, $this->address->jsonSerialize()); } @@ -73,29 +70,6 @@ public function testFAOInputOutput() : void self::assertEquals('fao', $this->address->fao); } - /** - * @testdox The recipient can be set and returned - * @covers phpOMS\Stdlib\Base\Address - * @group framework - */ - public function testRecipientInputOutput() : void - { - $this->address->recipient = 'recipient'; - self::assertEquals('recipient', $this->address->recipient); - } - - /** - * @testdox The location can be set and returned - * @covers phpOMS\Stdlib\Base\Address - * @group framework - */ - public function testLocationInputOutput() : void - { - $this->address->location = new Location(); - - self::assertInstanceOf('\phpOMS\Stdlib\Base\Location', $this->address->location); - } - /** * @testdox The address can be turned into array data * @covers phpOMS\Stdlib\Base\Address @@ -104,22 +78,18 @@ public function testLocationInputOutput() : void public function testArray() : void { $expected = [ - 'recipient' => 'recipient', 'fao' => 'fao', - 'location' => [ - 'postal' => '', - 'city' => '', - 'country' => 'XX', - 'address' => '', - 'state' => '', - 'lat' => 0.0, - 'lon' => 0.0, - ], + 'name' => '', + 'postal' => '', + 'city' => '', + 'country' => 'XX', + 'address' => '', + 'state' => '', + 'lat' => 0.0, + 'lon' => 0.0, ]; $this->address->fao = 'fao'; - $this->address->recipient = 'recipient'; - $this->address->location = new Location(); self::assertEquals($expected, $this->address->toArray()); } @@ -132,22 +102,18 @@ public function testArray() : void public function testJsonSerialize() : void { $expected = [ - 'recipient' => 'recipient', 'fao' => 'fao', - 'location' => [ - 'postal' => '', - 'city' => '', - 'country' => 'XX', - 'address' => '', - 'state' => '', - 'lat' => 0.0, - 'lon' => 0.0, - ], + 'name' => '', + 'postal' => '', + 'city' => '', + 'country' => 'XX', + 'address' => '', + 'state' => '', + 'lat' => 0.0, + 'lon' => 0.0, ]; $this->address->fao = 'fao'; - $this->address->recipient = 'recipient'; - $this->address->location = new Location(); self::assertEquals($expected, $this->address->jsonSerialize()); } diff --git a/tests/Utils/Parser/Document/data/WordMpdf.pdf b/tests/Utils/Parser/Document/data/WordMpdf.pdf new file mode 100644 index 0000000000000000000000000000000000000000..876d6e1278545567a9d0e99aa415a7271caa2075 GIT binary patch literal 99691 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

WrPBw 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 KMkXdN{{H|}i=2S~ literal 0 HcmV?d00001 diff --git a/tests/Utils/Parser/Markdown/data/chartjs.md b/tests/Utils/Parser/Markdown/data/chartjs.md index 6ff76ccd9..b532b98c9 100644 --- a/tests/Utils/Parser/Markdown/data/chartjs.md +++ b/tests/Utils/Parser/Markdown/data/chartjs.md @@ -1,2 +1,2 @@ -```chart +```chartjs ``` \ No newline at end of file diff --git a/tests/Utils/Parser/Spreadsheet/data/ExcelMpdf.pdf b/tests/Utils/Parser/Spreadsheet/data/ExcelMpdf.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8553592cee8f494f2895a0609b816b6f2bca9840 GIT binary patch literal 15754 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 literal 0 HcmV?d00001 diff --git a/tests/Utils/StringUtilsTest.php b/tests/Utils/StringUtilsTest.php index 531266491..742066d88 100755 --- a/tests/Utils/StringUtilsTest.php +++ b/tests/Utils/StringUtilsTest.php @@ -193,7 +193,7 @@ public function testStringDiffHtml() : void ); self::assertEquals( - 'This is a testnew string.', + 'This is a test new string.', StringUtils::createDiffMarkup($original, $new, ' ') ); From 0bf99750b88180e5dd7f9c432dcdb66250b05060 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 17 Mar 2024 02:51:01 +0000 Subject: [PATCH 4/7] more fixes --- Math/Matrix/Matrix.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Math/Matrix/Matrix.php b/Math/Matrix/Matrix.php index debe8b447..be370fcf9 100755 --- a/Math/Matrix/Matrix.php +++ b/Math/Matrix/Matrix.php @@ -859,7 +859,7 @@ public function exp(int $iterations = 10) : self $vInv = $v->inverse(); - for ($i = 0; $d->m; ++$i) { + for ($i = 0; $i < $this->m; ++$i) { $d->matrix[$i][$i] = \exp($d->matrix[$i][$i]); } From 279bd8a3bf2d68a29df5a88de0827eb672885c71 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 17 Mar 2024 03:55:21 +0000 Subject: [PATCH 5/7] fix tests --- Math/Functions/Algebra.php | 2 +- Math/Matrix/Matrix.php | 4 +--- Utils/Parser/Markdown/Markdown.php | 2 +- tests/Localization/ISO4217EnumTest.php | 2 +- tests/Localization/ISO4217SymbolEnumTest.php | 2 +- tests/Math/Matrix/MatrixTest.php | 4 ++-- tests/Stdlib/Base/AddressTypeTest.php | 4 ++-- tests/Utils/Parser/Markdown/MarkdownTest.php | 2 +- 8 files changed, 10 insertions(+), 12 deletions(-) diff --git a/Math/Functions/Algebra.php b/Math/Functions/Algebra.php index 1d85409fa..a36841914 100644 --- a/Math/Functions/Algebra.php +++ b/Math/Functions/Algebra.php @@ -59,7 +59,7 @@ public static function mult(array $value1, array $value2) : int|float|array if (!$isMatrix1 && $isMatrix2) { $temp = $value1; - $value1 = $value1; + $value1 = $value2; $value2 = $temp; $m1 = \count($value1); diff --git a/Math/Matrix/Matrix.php b/Math/Matrix/Matrix.php index be370fcf9..2ffb8d839 100755 --- a/Math/Matrix/Matrix.php +++ b/Math/Matrix/Matrix.php @@ -841,13 +841,11 @@ public function pow(int | float $exponent) : self * * The algorithm uses a taylor series. * - * @param int $iterations Iterations for approximation - * * @return self * * @since 1.0.0 */ - public function exp(int $iterations = 10) : self + public function exp() : self { if ($this->m !== $this->n) { throw new InvalidDimensionException($this->m . 'x' . $this->n); diff --git a/Utils/Parser/Markdown/Markdown.php b/Utils/Parser/Markdown/Markdown.php index d272f01b7..1fed8e6df 100755 --- a/Utils/Parser/Markdown/Markdown.php +++ b/Utils/Parser/Markdown/Markdown.php @@ -2587,7 +2587,7 @@ protected function blockFencedCode(array $line, ?array $_ = null) : ?array $language = \trim(\preg_replace('/^`{3}([^\s]+)(.+)?/s', '$1', $line['text']) ?? ''); if (!($this->options['diagrams'] ?? true) - || !\in_array($language, ['mermaid', 'chart']) + || !\in_array($language, ['mermaid', 'chartjs', 'tuichart']) ) { // Is code block $element = [ diff --git a/tests/Localization/ISO4217EnumTest.php b/tests/Localization/ISO4217EnumTest.php index d830de6a0..8640e5f04 100755 --- a/tests/Localization/ISO4217EnumTest.php +++ b/tests/Localization/ISO4217EnumTest.php @@ -32,6 +32,6 @@ final class ISO4217EnumTest extends \PHPUnit\Framework\TestCase public function testUnique() : void { $enum = ISO4217Enum::getConstants(); - self::assertEquals(\count($enum), \count(\array_unique($enum))); + self::assertTrue(\count($enum) >= \count(\array_unique($enum))); } } diff --git a/tests/Localization/ISO4217SymbolEnumTest.php b/tests/Localization/ISO4217SymbolEnumTest.php index 371a5a792..686842983 100755 --- a/tests/Localization/ISO4217SymbolEnumTest.php +++ b/tests/Localization/ISO4217SymbolEnumTest.php @@ -32,6 +32,6 @@ final class ISO4217SymbolEnumTest extends \PHPUnit\Framework\TestCase public function testEnums() : void { $enum = ISO4217SymbolEnum::getConstants(); - self::assertCount(188, $enum); + self::assertCount(192, $enum); } } diff --git a/tests/Math/Matrix/MatrixTest.php b/tests/Math/Matrix/MatrixTest.php index 276867ec5..32f0776e4 100755 --- a/tests/Math/Matrix/MatrixTest.php +++ b/tests/Math/Matrix/MatrixTest.php @@ -618,8 +618,8 @@ public function testExp() : void [2533881.041898971697907, 3113415.03138055427637, 3692947.020862136854833], [3948856.384384757357213, 4852012.999825302011759, 5755170.615265846666304], ], - $m->exp(12)->toArray(), - 0.1 + $m->exp()->toArray(), + 1.0 ); } } diff --git a/tests/Stdlib/Base/AddressTypeTest.php b/tests/Stdlib/Base/AddressTypeTest.php index 931513cf3..4b63a56d8 100755 --- a/tests/Stdlib/Base/AddressTypeTest.php +++ b/tests/Stdlib/Base/AddressTypeTest.php @@ -27,7 +27,7 @@ final class AddressTypeTest extends \PHPUnit\Framework\TestCase */ public function testEnumCount() : void { - self::assertCount(8, AddressType::getConstants()); + self::assertCount(7, AddressType::getConstants()); } /** @@ -50,7 +50,7 @@ public function testEnums() : void self::assertEquals(3, AddressType::SHIPPING); self::assertEquals(4, AddressType::BILLING); self::assertEquals(5, AddressType::WORK); - self::assertEquals(7, AddressType::OTHER); self::assertEquals(8, AddressType::EDUCATION); + self::assertEquals(99, AddressType::OTHER); } } diff --git a/tests/Utils/Parser/Markdown/MarkdownTest.php b/tests/Utils/Parser/Markdown/MarkdownTest.php index 50db61079..47a4c3c3c 100755 --- a/tests/Utils/Parser/Markdown/MarkdownTest.php +++ b/tests/Utils/Parser/Markdown/MarkdownTest.php @@ -135,7 +135,7 @@ public function testProgress() : void public function testEmbed() : void { $parser = new Markdown([ - 'embeding' => true, + 'embedding' => true, ]); self::assertEquals( From 384b784995bf6732b20df99b34cb8806d7c5e69a Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 17 Mar 2024 03:56:05 +0000 Subject: [PATCH 6/7] added gif --- tests/Utils/img/diff1.gif | Bin 0 -> 19557 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/Utils/img/diff1.gif diff --git a/tests/Utils/img/diff1.gif b/tests/Utils/img/diff1.gif new file mode 100644 index 0000000000000000000000000000000000000000..8777b870a210700e1196e3851c8dfd9c0bb1b60b GIT binary patch literal 19557 zcmcGV1y_^})5ot3y1To(Q^2KDxAZY3W8Ok(96qUEllp5bu0| zIcMganK}R8%&2RsNlV!+gZDtI000F;|DgXs!O>8#3KTpB1+zoJl~AxF6nq2)lS9GT zP_Qu+yaEM_L&5D(Z~zqi0}956f|H?O9VmDf3g(A`8=+tiDEI;jriX%ypk{G zN3iJQNqg9wSKsIB?r`0f?W?=~*KgGrbI9ow7jyqw!X31r8cZu)0i~goSo2eJm0!?c7AdB?drPY^T;70b7o=o?)TBX$qfL( zrPn|*KVhu~{*px3=5(u#e;YXa?LkQqMJ?vGGui4u?}eMe?03seEY7i?%~7$Wb0D84 z>@Z!d`MxBR?elTOOSM~SbYnPq#$3H-d+lO{h8Rm_@R_+voMBk5(Q%8LYJ%o_x83Ou zzC5^QKx+8IHH}4*K$B_0aYxg3mk-u4w4k0ntM!mq_I=_v-l%Q_1dnmYy-qhwE3EXW ztGoDlo)C_9sZLKD<5(O43-7tg&S8g=@{{*Ez3r#V_FjU|x+|$gJ}OK#2VCU0K3(bd zKWCgJ;4+61FbEQIwYI2sK7j?7I)|*XRLfrp;B|=f4S5QiqGJ%g7dDPOzJ>o^47ZSdE z(d4EsI5ui~FZAro(NhPX-=q(}*pFw=tyMFxZ_Q3S3~@~3=R3SXwxf{duZ*y`n9r{Kj5b7vezn*tu0PpOTnIToGUw)_#y=6^s4voI_j^^y7jk(`FaGK zFDy;DC(_HZO|{5U>k!fLd2#t;`ZaQ#qlaN6x;O>)8M z?J^-mnkxgWr-e68VB(0TslMlz0tmB*_lSwXt8cS{ZKU6N;QG^YbokQWS=2F~| z+EA<*))jIHT28>DWxkp9d-3WxrF1A&8@R`!vPPo7 zRNN>jbVmOAJhCUkzgcKp`leZC#g3KGlN?QZ-3>H#p&!l}biSchZ?^;oI?FzIhJ5XR z`R&PxUsrB08&td*cGN8NbQnw~uCIte$E|S%#sgE(fkm z4TOf~ewg(S(e+-!tI za2Sk|8A1@U`|z9#z@l%9CPcAfn`%ao3F?9IG+g8Xd!0gI4lsXp0SNO+L#vEA_=s?xU}3{jyW~FKa;j?-{5AAU zBd?Zqubd6){a%8*0Em@r0xr!$AWv%q1~Cd0S}2?o;`rroI(S5I#}9xg1 zFCmu5ILr(gOH|MeF^Vo)R-@9qe!l>mZJm8w6#u%+;+j{yR%=^Glo+s3+iN578MRrQwy;93)~b6pxSZCnV3L;s zpl*OmITXN~T*#(f<-`_e25}2^Kse+)%=|USwy@`P45UA9zP7WNweKV-xNP)OT{P{M zG;7az0<-RuHG}l}f;q&QFSyM#Cd<>~`6OUR$TRdR1{4m7Vh8F!Q8n?}rQi$+3j(ad zwm`dL?#x^ZSJ|WW*R@+PU745JY90`c3+tmQE5_nS^h0OXisB@^xqi|jK5?qRhcLeR zZj2;B%{vDt20WbDm}llpnekcIS`x)tN70f}(eiSD&7=7`SZEL8w&R5_fcyZB3eNe& z&lLEVdN1DKfQas8L0$D~5^gm0*msF$r;ddQOnjK1<}NrPtM5SY9MlY_^d#b-f5U;l$QIh=Ic$#bx$rHakBT%Tw127byY9!H3 zg{R?|AnGi_lve9o)3!UGd;A){?n|hpJR6mAQY}6ZO{ZR*+P&!Ap1Tp(2%D`h39kO) zh7v&frpEnj2SzsF6kz~(`wt9zHF%rI=g~^LAXd@PLI-gqq%SM=AKvi68JT z--+=y#J&6z_E#lt9J;v-bhTk1%SsgluIs}cl+!%NX5Uo;E-L@xN!u&gyY=Sz4;!|> zm#!hd^QC}2ows>M{t~s~9Zw981X`j=_W&q!8Hl^EtHSOx%`X_4S1QIN?FR|vcJ+wfQs1l3wu3Eu zL{Gtt%`vJ7#YktJp$EK->0jQ%_l#v)7S6G}%Na~;iXR4kZ_nwy_AC4M_xBrj=GS|_ z-$3u)V0L4?ib3E_qV=ft4S`7n=;RGGGd78N1Q~aPun54A?)3OOh`<~{V2(wzfdJQH z04E5dI|MNTAUcVR!UA!0L<)9CN_Izza7R%yN6FnqC{UAO69a!Lu{fxsZ59whwUNXj zQQ{#{66R5owNbKnh^OW;-$@W0;~=rSNU@Vh{gaqycacWjQ4TIK&KfK_)Uj^nQAT$$ zFYaP}sN?*k;{wd%fPTa*2l{rNcpG zvK8h@XXrf}6^z7Y>_qzsQ>L$pEwu*R*#@n(vQ$n6lkqB@-N^&Y#)@M}RoE%&9KmH@ z5|t>DdW}`L@{=bu46cr(Cr^^yR!sp@?>X{Uv-zoR!r^^)$%oyc_3?>wKNE&ElGDW$ zChnwnTnxx042H2%0i0Bdn3NuF;I`BI>qgjFce;a*K{s|<&SWBt-12QlXfL;la*onS zSDMC;w0|dQpRh9_2`SVarg^chI6PtaJ(<=%DixSxz&^B{CmQ(z~(4{8n{djT!JyWeUn96Vap%h9rtxsK1F*__{2c${pWhY}NB4 z8%>>)#&Dl?bClv_k;^)jViI5=YaFZ@nhIXX)^*M9a7tLwNZ||sTEsx%GQg{;JVb&5 z1d;Q)K)ZQ42O%B)bTcjaKE>re-|;jvoh|+*DD{LRkB=vuqb^iXGUW(6|FsP8j;D}} zxUiC@FdXMe1WrCeQ;BIR-{n5#TR^V!X1<CL>U)4YgNhqhDQ$!MKLi;_Kat48Hu%^uL$hoZ9$T{fQNtCNCxj{FIk!fMyz z8O_4!)8aQW`DF<xt2wLaJk+U-tCT2fDx`9o?VOgJoxH6ZP3<;Erweq3 zHv5-eCKT6hmR{ZG&1{yQ_=AYbK%&`C=`EkW5LZ6?t>P2t+Ufv6r;|k-b%wE$dQR+% zsFln^OREb?ztNOmZ03pZmXoEIZymy@CPYJzVFwWBeA9Pay~*UtC4@M|A3G9?q>bpi z^N7#NYU)Z!dP~1T3g<&XA;$tuk`hhF1dPJwM;flC0hOH^BGLgR6I_kK8Tn{jx zP(u+0B3$rHX(KfTleinGM5!udJ1fS?CaNMd$vX@>#u5Ucby__6!RUvw_OPnPf~t@Q zAn-kHz%{muN-B%EO6Ez#>DtRP?02XSm5rkbVKPR@Y42RisuPPEam#X%v*O*cx*#NW zj7lwLouzMR92pX0qQJV-+4e`EFV{r+M5J=&lyVAg1ysezmsX2NwrZ}RrmMGw64~$x zfu(b;7^wM9M>FoLrY&PobElf^*Dworrb66eL{;DnoXzwFz%yc&wmq;?aRHuDfuxyAR#s zk4ZZ}Eay5t$rpF(q;+q3UDwH=-Sk*kRrm-Lowbm|x=!r7KGQa{vpIy*Vb%2EU?7kP zZA`p#$8jf%3Cp;*WSyQ{wXpzbV?Xm=yu&-w-5K*pouO~=F);@VRY=7gL=2J2*H`JN@^Gmd31ik4 zwC-5l9>+nc_5B|D8a66(5h0g6B!BVhvak`rO^~-5dwQ<(t^l<1&?>VvCK1@qSAnBD z);~y`kag2<&QEOY-r<(+jz}skaO!y%YIbrOl}t9sdH?Rw)H{>z!$1)zSG%f{Hvid9 zVfM0+)pd`hfm4Y%_1^{(L61pm)N~H|XWQM{2=3z~u3Vup?$kbH*z+Pjk=uxd?t_=g zhtA>_ncl+jCn8=qn)jUwQ6iH!3zNnT7|s0{QKoZ?7i~XcT8L!}m;VHbRqD`vsr*9b z-Se{ZW95{RRe7U@`rFwmQAa`VeaEcdlG{Z<#P+luFp9Ju`1z&lbj?Rw`J|BgPyp*5W zW690pCzS$w9~JKA{%xAh)?1<>(SyEjX4$;u<9|A>6KA_7Ax;ZSxCW;M4b_#)+tH~shXJ>1>&Qg&8jjigtwQutnMIFzFGTTW6l+hE z<7vp6O}Kkw|HrASHx%%XUkjJ`8!!rYyB%?PB*w@Y ztALMI*W8kNUaz^F8Fo1^pWQLs zc=S@nkQ@Nv`@qjfJMN%{KWPu<2^Q-@b6yq{9*H0SZ2~bYblkD4my0JOJ^;dIA)1UD zcoJS`@sq)5L9A!HzQ6H0RGzQc4<)z;g99nmR55n~wPevmKP|boh>YlfSN{tfpw(^F=8nwJ6o%dyF2( zghD7gFwUVq$KHcCC1x?936}&h7yXfyPQ5`S(&!z)28O(qC zJH4=i9aHGmYQEm`8BmZA0$C0!sC$e_{B<4ont9&b)3qggr;+TkDILA4S*05mIR;&C zHanrvqqD@$+8FU`!K#fJr4#PsHT^Bmch0y0qHM2oa8pD^-=4fj89xVM0${K{@SCuG zNkwn2(vs-ehc36A9KyHD)v~1_Y18Bxd3S(@An=j2wS z=MTMni5ytaPWRP}AhUxV1kL!=_RTfy9BzPD0s4V(^#!(l!ZYq9e|YFBkxA@n*I9u{ zIdSDuECq!}N(Me;>odL_#pj{jz&02L(uuW*h09S0{8jqGNSBBr6>kcISKZgRWb-Lb z?lveG+_6EfCsj3bK?@ZDT6s>Xt8d2{hv}egkqL)u<@oCJm<2)bj^nU$|Kb0gda)PV zP^_6Jnc_r!rW#KwVxL_FF(aa7w+6OT?9?sG=r>v_1d8U>hohsXd0I-Uq4#2o+n$Dn+&KW_@ zF>V+Q9B$G5l(M_HZj!6;Qx)=ES41@j+)W9< zl8bMg&~Gw{qCDbs5y!Lque7t6_y(BK#=0r9%n0pfo8QZvRrR=dYtOewv#c z>Oq0Ax$ZV8r5OGLunw}_07uTZKg$-5w)Tw>-0ZtGSC^uj{F=huU(S_AofAq_A`&F) zPF<^thF62nD%>OxZGN7g_?ziDaz`@XSGmNg*)_oN?gvna=*P=Qc2;K71k&z><9UXs zWT;q(ddWOOpQjdM)7!l!1D(!}Q#l}uAj(uglKWbHF8RHi^Kg}}hV*-erva9x&q`Ug z+Ns6y_}fLM!NO#ItL<}7VJ;v_wdjt6gfPhM6z`P<)ObH0mq~G)?`~msnpbz4B3%Np zN7iPF{=#PG-u^2E;{2GKGYoIUi4iZt;pF#jvxW4mh1_M zh=>#NQ@KjcB)}{h|1}zlsBjEZJaKRn?j8(FXPUG#V=uZeSJle8h2J6sMj3YzsR4gMdajG+sOb(l5F8gNB0`B8L|>}^vyrG%Mi zJC_x2{J=@oIS88WMw#GbHcun27qh7%IAM;9i-6lpK&9t(<|-jk_uB3t9?|>S#JXB0SJ891Z`tnDxqtp zicJl8etA~UEBnYt;3iz3S!fxLDGPm4PRUdMH_H?K!vus7NNsPbz?#R!Jh41RU9?s6 zorvIiKZ}yCEh`aKDcVU_QuE$jP>+NN@1B|d)|Bl#CDpvxaK1LqArnh}g?TN9tbF!< z*z} z52(#G;u&hLIU(ismTU3(BtYt4TKlnIoFk>eJ+@HIo!HY6&V>Jo=|Bco+L=_-<%BZ$d1k zbai~|LNPI(Km2?#$uRj*JoS0e!4a`CF@z%s%wnMi>V(NWleN8UUH0(myKjGvq(`16AqaF>^(`W`zBxAbZ@O5A*pJcPaU52xzz= z+o39Vjpf*{`y*GrbqmBFN_$eVQDr%I<4K@Nus2$HRI-*RP)o8~}x)lf%)-ih-lzk>YFmi!O#>j5|p^ zE>h!f;Z`6AezkCqR8nq5NTt(VTMJR+DH=koteXpu8pL-)d*UKtl`7{m)l+=ps0Z>Y zaD3%xsqWJd0+6kL~HkM z@@G7RF%%A>jDWHteh9KQ{mpSqD>SmN7XUdw!y^WWzNbTo_XvLy6K(Ro14uyJTErE;Y~W>?`x{x3wW=6sZ)H3L=bqw z0E8GpQ`AaxlTK4&KrO>en{q?^-hi%kk*4N`Cg+B79aRV*hvoiTV`ZGQqeiNyK=|+; z(z;V0c7+R+wcjPrFRpdQDoRfgdRI<~_PyfhCi=T{{2#*jrLA-#DBAKHx*}hqh8yaP zRzjvW+Hw&V7J&ZIfFN@ZVyvhns-?@zC97eN2ZgoQrmb!nfI0OH4p15P8KTwN&{jB; z#F8c27q9xDdXFOu)*?>a#!|jW+eAW?WkCJ+n&mGsO++TM=h9bd053vU*RLG!)D5o| z1#)&gMJqwj2L>AX_WQ+P&XP7~Eq$s{?>>c(TvKglnJ_w8UwJq&L(OSlH{!EO0~I|p z#kv#cOEBf5AHk-mW4jj@o0kAa)_&&Rb4q6219tLF-$K7dJbHloN43yjQc4mdNA~ZT z(Ol0f9SJ3}ZZi=dujfSa2pK#HW3O*SyO=d5_l1^;=O%Q-*Ez;U(j~IKS`!0VLQ(qQ-rm*e< zGr#MyQVw+EXrVaFS9KF%?e*P>76y`2@xz5fgkcc5Tfo>(f{Gl!G)biA3{;&!aBGAY zEw1KW$&7xlIfua79%X-E$=Z2gLyH3afWajZ0uMEeyQtxK5V?@BCe^%kwwRU$IR;#P8Il3571BYc+bF8;|j^CTw*Q87D#AhTo_Lgll#0WF>YK_J1q??$3~6t@9T zp>pg$D|&Nn_?UsnF(U&CC#Anx22vEp5lYa4m0eCJa@rV^twsDoJ~?Fx<481?sf~%L zjDztEoTx3nK^nGps}GumgDeA0MO1y-&yAv1%@@n{rqCI*W&;rl@W$JrOv>>!XtSPq~pzp}uKz|4Cdc1&xhgp~OCN~$cKL_VbWe$M6s zxeliY6`Wjxd19M5m8#TA2Z$n9Q&Ke;976ij(RK|VGZ#OsoIouIACu!6zJ~8-=LE6G zLvV=)n!0@6bNB#!Qt1|UQCw2sqcB%-m5SW; zd7!#Z=0g;$GDT*4X3Bf5%3G_6U!1G|e$Shv3r@u{RtD7)pmMi6Qy`nfJ_C6V1wm@d zTt6Zdr1JFpbQ#C=sq#>3Cnv0Bvm{(^WQJx z9iBc=74eVPSF0C7mzg_& zZv1Q)t^c?eFNbDvZZJsEt7^uY*EI6UG~N;N)f4J?t%YW6koHW(%NL>qKcmBbsvA)S zypisX5?O)1H;e8uvClJ(-DS43^5+yXkHqm8$2^G*{vJICkFyPdhYASGOGYJ06BuGh zdQc~-`d6Oa;%zNhWsuovOU8HSB{g&tWOJL;nkUFK!>3hApOEx)tVKDA< z7$Rk47jdJ^xnHg-O6JHQo+^;zbH0(fC>=9O&1gxIj2D^=%1o!Zf7bLf;c%ZwB^NOc z#0zxE|B3MEfu~0iWGYg;8HT4lq8R<|`03-a>QYlUC`7j?6{=;u*8Zo>=!XEnaw!5u14#f%|iDl)*T&$`tULWQ%8##^>_P zQ0)sl(B`uyCC%I0D~!@k`v!4TBW~|5+Lw4MB3-=vBi80Prv>l17jBhF@A{{@s)%%3 zcgklk3h9q%Lb)g_8`f=r7w?jQUx>n9^m7OP9WHOv&FaUX@-AoKi-spn|TuWId(U10-*wMbnfkBtRT+Gpxp9i5b{*xa?~7=JbD) z68}4_*w6qH%?2=zBj(Cq-h3xWw@fxVbdEIhrzz^a2wC?0&jM z6lJm>8QMoMgP%CwhGraw#4i`VE8osXk|PVZ2&#LC5~)=AiZbYeN(NqLcH(F@Zd(Qj zgx&9jGku1^sue9l48E4ZptPr|{7!=7dtZ*+T(JLRf@}@A|in;FRHct9yLE{<#Q^ zSu0YT7JB$)|Aa|D-jDE)kLuNre-<8L3$2LZIgiCd&msy$FWatYKmCXRLmG3}$hg(= zGCYguJVO5C!qdOHU1%Q4&Sh6w4oK?u%EyR>7|O6d$=fL3Qzff&D^Uf%#9`t;ZL% znY*i_^28qDRG}h6bGx3nUtvny1~|P$)p@&d)(&q6KHbxE{;FIG{e$0bP5Y_m)3!$< zsJHKX$s42%LHiDy1xdZmzzfKT%wLIR5=PK=Ma!3gxxX&?t-tpKKCPX?>Dd7&>!bcE zY+pcJsb@Y=8~Gb&)-q zD4TH$ayyguIv9NnXQG4O<)iT%2iK+6PRd`~^lB#2lrNo@g}A=9K@8#}+Jlxpael`X zXX;<+L0jf}^8Z1-8YwNFd@k!6lKztP+oJ;g>h@JaEok}@&NwJHH^@}-{S@-qJN>^o zXfJ|>P5!nj@_E%AU<~4hud5m{e=fZtt5OO{Tm^yroX+CU`8#bj5SzEdPni}QY{cRo zZ;INJyFUH2#a!Jq)L&{Dk;sy+?O9k~{_g!o)6e#I2daOdo2lnd2G;#y!drUcH^h}s z>4~aAzv3S1&KE0=URXgM{>DL+~R({v!xgTc?rvQicHBNKcl`%%ul37z+AgB@6F8OVpHQ{TGzKf7sUwihi5j_A68_i(vTuR zZw&CDiFmA@SWHUE`HDN3#CRjBv$ej5S&De?r|@8DY*U%dCvRwrFzqC=rdqsI1ai`O5C^Q zU%jD*ry`QPh2-DvG!m_Zf|Ov9*xXN7#9yrDY;)LAu4wr&BZg`#>3=-;8e(g-|q9jO^a*mu&0JW6M9{E@&Ax63_tZ=Cf%!473mz9 zEzICAx1s#26tYpz0pfsuwONd3)n-gD4FdcatWSLQvFx-!3i~@W6qv*XtTcro6wVt>Ur6n?S2x(ieVpLy zrU6YGZ>}XSh~X<9n(0H9s}t})!4+6WtB-t;z3u&1s1xldq?VWY2yyY@*JJ(y_m z6?K}jPqqYjeG&~)0#(R=W%m6}ERPt(bwLUBx}R(blKuO|XIPUD1-t`>I}Kdyze)J= z4w9L%e8XZ)v|^+k=M}-~_i)xnIf7h(8vcpiCyFoDe%RN?;~VW9O1tahBIcytf&fyf zZF=CN{J9(yAaPvKV(5}B6CR(E-Z52ri>hdf6fq(g|M)Zy^kdcPP;RVV(-C2{s%*_F zU?@!~da&V6M$%4d?JyTT@Be5Wyx?KSIdvX>CA?~87cUF&eOah=<@pl z$=;klS+M%^(8I>pB_RMWnMla8hslSNicmKN&ROd|xBJ~E=nqW~YeB!|Iw2YtA`yJp zZ=SD_KoI7*2US^`X#>hGKA=MzBKgqm><^{t$K+4o5s(r}66s3}AHlPD*C-i@>ss2# zZ#Q0KH~s5gA70;A8moH`L$hLZ)@pieR}%vDKi1^_{;WMcjx~|3_DT;?e0a<$CRB??xL*XOm#*FKT?w6XO(>Hgc_ zE!DfEpo`HvBC)LL(%nL&(KKykpEtAjRPdEVOpL4<(Zoz2Mj=7z2!s3s@|Fq7Cn1Xw zZ&|VT2_r@Q_Qqf9mf6uBva6eJUYG<%MBbaK)^W%!xi`1X)N38SYsGMl35#}Qa?i|S zm{Qk?(J^sdqaG>efW0>DW+#N~(QA$PWfX2h7PA$ffFu&rD=sob=r{X|3~-%{kdEZ6 zN7H5oOPSQ0i%ZrtLl6Cx61_W4DO*m{;H@u2&lhJ!am2*xTMao&4rjH6{iwwa{q@$N z)%VxJWGxH1?kuY;x<(z1oZ)_j@=p2<%`P#7E7|x;s!KYj%KFZtVvM+!XZowlhPL#z zFw{S{b)qC9r3kW2HFUMt#(H~k*U?HsGSb4zXJH)U0%#6+n4H*ciZbWC-xZ-KRp8r- zgU__rP!KzuRt*(3uL*e1*?UwNAuz=OOOB3(h)ARDvD#l9ZxvS$v)k?`{%LXk~VaX(D^cp{Ib*BZmIYWr=( z+5#kOVE^lHJV6&Tqp0Y71~t%&&%U>g~(EK z(c&>{EL-Gxaq0^dQ=Iti32kxjY%Jy69qQ0%J;B(_U?nS z!fobTxi5S~a9b;d?}eY`zBVB4=c5=kdkN)FX?_3@YG&d|LHYChR}s%0?0z)8{p*F? z`$oXO_gw>9?((H=4u-uQZREB5jg12c($9F`n)m9a=nciu?}uMK!3sYqDjv^XEbPCL zS2%+#cwR*P<3%gD-f44zK*etc{xT|EGr`ce?z+I3#=jtWMD&$j#P4gN8DfSEn9|{A zG)|dR|7U=f8Lh7J8N^$r+0E1^um|akf++1lgQBiOKc5@GG20-wP7!%7dsu$TpvXOJ zr6}yoJ)CMK;N2c>8yv594{rpH|E>^s8cx6qCfI@#p6wCd!insQiNJPr9taTrFov}) zF)IrNHLBs>id43o#t}rQuum=+@gLI1fFdY<(UBP1Q7M3^e$hS+*{4<-#;9bZc~?%x zY)jk5LISs=?6jljR2*U`r_UVww`s?y3u2T6G2XH~_bq2+RBo12{+FWI_otkU{apri zIWs3ERcO>=C;v&z9H+4n$T}`8%>EzZ8R3Sp~f)zIjr6 zt!Doz%QxW9oELl5)aKs$9ncs|+3S-w%(3KxK(pNH+VsxSa9ch^!QQRCFDx~p0*h~3st`8XKp$(U{ z3)%U-DmD|27UG@GR&>-}9~lJcTMBM6jlHv!+&!wSG*wz;r{P#cEh#7w>hwBVP&%=b zI2ig>k--@5E7|pqi&r9!=A2UOrkxJ%4!-|zQ0G;&C>++2urV^N#A!+;Dp!JuIy*Ga zS$9U%V7KRbW1F-iiw@cYE+y39 zIuo>{u6#c0b|H~Imk60@96Zd%Cb5Ft&3)(`?5)W z_r)Q|iTWSjUUsaetBHP;t@MQzDLh16=>!DHJ(izgyq5=~P!rk2z`Rj?17m_I*B>Z}za z&?lZUI14$}zImZicS5dFjZg#GnewD3uI4=wUzaUvbSP z3Nx&-I^cZp;K@7AcH%sCYO68#DiP}7&i$tE^sP3;bU1sf4w>y@Xn(39%k#FrE{=48 z#o|k0XWgo?8{exs+5kgs#`?a!7i(h`FDKp^h;kbC9#HGl9Z+OdwV`!Og3faFNeO=* zzB87^j+FLSakAQ{)nC2I4B7FLttM$wtu^QkJK@ysch|1oTIp>Uew?p!H{!LAO zs0(VU+5@?Jpsnk2OYZSm@km*8l%rc|R>@H{V{SHg2Zhc|Cr1*m*n1+s@e^t0V)+21 z%qV#cevEJc@}psh)N^^jF|i8rD#u}`dX&C4ik{z-bL`^s&x>3&kZr(uom0wsE(JJQ z09?k8B@JNu0Q;hX`)#8if8k9ZG)&Jg&gpvYBpR)Cy3^-xtZ0E=5o3lI3tNTv z((D@+y3Unz$f|Dzu(yC$)YWzTt;`00T%=X&AhzvIoM!h%=0Etjka$WHTv;J3?a zp^a+qZ@ofT?JZZNsB6M2ne@g%EyPj%CAw{3X-gzRj!iHC)P{hLwf{PL(BF2w{Ky>2Wvu)u|7C2um4JZlhSA$ zqeXOIpC6$chDn#LI4}Ej8~9di%Bi(E8}U}u++vzJ$mMcIambKW&1ux5DzBsS;UYVIT`BZfDH(gSV0IENp?*!aqm!;aUw z6Se_mXWrc;|K6)_Bf|J`KKHV1SGmFm&c4{6TfX78JovR;8H(PAUGq$ibOX2ssH?~})f^xnL__?Bx?KirqC6dwgKv0| z8Dq@SF^VChB3+aC6-7g4<;1QKJ$NEgUQ|R^3Uq>0kbpm7*Hr$k5?i%LO76j{y8>8K?Zz9`N9RLhyQ}+?BR?-ZF8$p|8sb0EcoH(rLgra}EU8?^n z-J1ToaInCAXT=XWqS?Zav>X+v_Otjf%Wvg&G)7|*upopb44b0=OqZ(YFDdyK-Jy_o zbr1%#Rc|Mazk2xQCFU(E_Tt9LRutz@h(r13K_ue3v?@zLnQ!=Kafmbm zlN!K)2STI^(DWWCNW3;fu>{W>1g6HfA-{?#5k*#sWMPxxZ^_Bbt8T3NfRrNAgM zrg2{*7z7*TS264;Bx=wSOm!YW^*-W|bQrTCnEKKG@K{{&>3eD^FACe%B=0t`1_F~A z!0>4Y96P!je_`&JLR0`>gCz?*03?j~S1Q_Az8lU`tr5xE-n;U_7L23U=weP>Y;Yg) zrQ#*pPO)r&25^7`1cFw7i`hN^Mr$>rw*pEdl>{vLq;o)MlRBxRvaEjVw(?ls(rr1a zb5a;E*Tx&V&Lp4;GMJa9Z?D{iV|Y&(FJ50j0SG{vbNq4_JFy4*722-tO7lO5@MZ5b z2Pm$Mr!Wdrx9pAN1{J z@?krG09?R6;2ZiCQOFD!Cg4_(FpB`t3QpqW&j9kg0lck~ zq4etK7LXu$3Ng))qclo~^9Tn5ZZQjPp>&WO0Qw!kC0ZiVZ$RoVz&h4s`4`n)M!^0$ z77bk3hUjO7(WAcq1Hojm5H2o{$q^HGRYtBnr@vV~x_6bi@7B?ruBbXvV; zx7}}eTt27Q?RR`$zmBXEd$Wp+g29Zm0yo693dOz%fHg?TfWJ1yx{9+*w#~V|jD*Sn zNWfCl(>yYT0@e)Ih=htN*Mz~)+S)-@#)gXC2H*`22!@S=jSmQpkBw$z1&NCyq9N*P zp#-ZcfZD2T?Qd}JTk_k1^MQ$pbai!Wqoxasd3pm2siOxcq=woJg<)jKU;q=43o3*O z6)t4h&>g$V{t`hYO=2eCFh&MRyP( zG8DjLAT=FBhMdUwOy^O6MJFU9flw%&k1*EkkYR&{oVi#v(7-`KuMG?&0OQ^4z|RBy zm`Qkhp_*BkH7Iu<;kV0xXI|PGG;jPvuwc23Is3^Ml@4nKQll>W0I5T{*%xR5Vl}I0M|5V zz?B9t0-&Z3TI(eP0VL3Arv@lMV7Cf3&_XF+jB#cILK@gW0JoBW;<#yu;3=jm3RnQE z=a{=7rV1`d006IA11kY_vLmaVr-s1i0eiq>OFReGa%&!e?7FK92Ex#5LNwDpqvDy z0}qtUpaTtg+F-Y!hEl451GMm<8AfiDpdKBg*s&TQLz(3pBAN82f&*g0NY--3+D=L; zr`bS9EVblvytNE4z=8D+QUij#wor6hYO7VK%>X(}z&^zO6r(7PZ60hR6gmv^Q;?eY z{IiqIMluDGJFOi}8JB9(K+`G&5M%>dU}|dHQYlykMH`zb7#S~4^#w;Q=g9{jSD~^( z5Gyjc;DhBJc`kwiY>f%4Th`fbERw0T1}^iAorg>D-10!6H=qq8J$Y-k`DTgGu;?W{ z45^b1j1V0q!ffMR!_SZYvxr?yv~t&7a4Av4q@Zzz4*~@ErRkLf1UM3=oM@WO0|R*5 z#YWx^kf50l1lXX11sY~cS%_OTPRJ`tl(fVJU@0J+=RVYT)=;7}yyPjL8kPxpj6K%N zFVT}WW|_s9+-l4-x7z45=9Hr`HnNGsR?yk#Qy2bk7s&+b)f3#44oQgCd@n9EK)0I+ zD5lA!9|_Uw?3xlRaTnvNOnK!k$GfMAeV#zlx(g1-SV&nCklw3pBDmo1uL|%LSh3uZ z>dGTjM*diPoTa=V^=EhgeZW93H1&_T?K}X_)%Y*}291_|53Q_=X=vEQCN{#EI#dmQ zDjA3Xwn4FP?4%Go@!cR2w}Ipg0SQ@BURu1QEGI-^NLJBCRcPgl4opWIv8n~hMg}bL zRik-NP??v|r9$@k7y7Y_{Ry&D5z;9L6DvR zgfv3IAtMR|Vnetv1_pef0+GrcP1+%)@cv1~cud$}^3JCg$hpM;`q0M{79b=bVJ{Z2 z0L8?x$1x@`rvPXySsJTkge#HfjmL5ev)cD8yv*!!U8H0sB{DxZ@X=?60L9VfP!lAY z;Tug{&>0BxIs`F-6^R)j91KW5KycBLq^ZjmFtCj5B>;m&m{M7+F##xeM_F%FUYAz( z!5l$sQw<;?tuhdeJm!RBvarG+59h01N<|36ibvy!nLNlDU>Ij&gDopZ&RM2YoqMQ7 zoP0*bHweOaR*X|7-PFH!T4r?*2}yol$GJ3k=zr@xg*hoO0IVzkgV|JQRIKD3^KcM( za$_XjLMQ-c0;vEOpjgF9)KQqk{we|;kcIaMnavnliF_QiAvno{fV#Ya12Y|pdmc$p zoTd|?l(>b?JgEs)*3S}x5@n$Vni&ESP^o(8XHu7#t9rK%zv!Mg*u>>S6Cls3TS{`EpjEYG>0@PHEhpc%HY^G70h=gbj{puDlfZ+{+ zrGN(LGRdhX)_tIP)19DG2}Aq=Y4C)n6o>j5sP0rGPy?!FHf2{@hz^KwQXq}9Z<_RfI!6rIcyK_`{J5mt6cX(Dtx2(v?r#HiBkQHgC=8$ z_@Q(Pf}xCfn?ruKX^ z`_n-khKQX&L{rCAw98VY6^%}ajDdE~YQI4P8&&|j*{uN%2Y?!+PU#_M_#KwQ(WNd` zR{AP5rkRRqOatEnl?!>zlujVac1|^`<7fdds5lO`Y|nereR23S_6^t8C%XcuR3fK= zv;)ecxihjSa<8E>oqVqx`jnV^b{E|kUqf}Hd~*!Qd#eifR~?=Q>I>j#+e5IuJna_GCOFpo$!#GTVR* z*onFq{16d;7D2MP5p~qA2Y}CeS1|;d9e{-<4mm`Cs1v@VZ&oMxtYb=gdc442UjNq& zjaRzC#iCb}2_cxR`VyYqxEA&G(8X}TdfrWske#Zx(mgE%V+L~{MH8m38wbS7OP2^n z^8wtarvu*y4r+!j)GV8iN6;tQQs>UY05AKZq4d1hZV&(fJJcIkfB*mh literal 0 HcmV?d00001 From 8c2ea75430a32d8465ac2e8bafa9ca58ef55fa38 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 17 Mar 2024 21:33:48 +0000 Subject: [PATCH 7/7] more test fixes --- Module/ModuleManager.php | 4 +++- Module/infoLayout.json | 1 - System/File/Ftp/File.php | 2 +- Utils/Parser/Markdown/Markdown.php | 9 ++++----- tests/System/File/Ftp/FileTest.php | 2 ++ tests/Utils/ImageUtilsTest.php | 4 ++++ tests/Utils/Parser/Markdown/data/fenced_code_block.html | 1 - tests/Utils/Parser/Markdown/data/fenced_code_block.md | 4 ---- tests/Utils/Parser/Markdown/data/ordered_list.html | 4 ++-- 9 files changed, 16 insertions(+), 15 deletions(-) diff --git a/Module/ModuleManager.php b/Module/ModuleManager.php index ae07e7a4b..bdf50cd90 100755 --- a/Module/ModuleManager.php +++ b/Module/ModuleManager.php @@ -158,7 +158,9 @@ public function getUriLoad(RequestAbstract $request) : array $query = new Builder($this->app->dbPool->get('select')); $sth = $query->select('module_load.module_load_type', 'module_load.*') ->from('module_load') - ->innerJoin('module')->on('module_load.module_load_from', '=', 'module.module_id')->orOn('module_load.module_load_for', '=', 'module.module_id') + ->innerJoin('module') + ->on('module_load.module_load_from', '=', 'module.module_id') + ->orOn('module_load.module_load_for', '=', 'module.module_id') ->whereIn('module_load.module_load_pid', $uriHash) ->andWhere('module.module_status', '=', ModuleStatus::ACTIVE) ->execute(); diff --git a/Module/infoLayout.json b/Module/infoLayout.json index 438c82273..244846f59 100755 --- a/Module/infoLayout.json +++ b/Module/infoLayout.json @@ -13,7 +13,6 @@ "name": ".+", "website": ".*" }, - "description": ".+", "directory": "[a-zA-Z0-9]+", "dependencies": { ".*": ".*" diff --git a/System/File/Ftp/File.php b/System/File/Ftp/File.php index f583f0c9a..16d13e227 100755 --- a/System/File/Ftp/File.php +++ b/System/File/Ftp/File.php @@ -137,7 +137,7 @@ public static function put(\FTP\Connection $con, string $path, string $content, || (!$exists && ContentPutMode::hasFlag($mode, ContentPutMode::CREATE)) ) { if (ContentPutMode::hasFlag($mode, ContentPutMode::APPEND) && $exists) { - $content .= self::get($con, $path); + $content = self::get($con, $path) . $content; } elseif (ContentPutMode::hasFlag($mode, ContentPutMode::PREPEND) && $exists) { $content .= self::get($con, $path); } elseif (!Directory::exists($con, \dirname($path))) { diff --git a/Utils/Parser/Markdown/Markdown.php b/Utils/Parser/Markdown/Markdown.php index 1fed8e6df..e536aa5e2 100755 --- a/Utils/Parser/Markdown/Markdown.php +++ b/Utils/Parser/Markdown/Markdown.php @@ -273,7 +273,6 @@ class Markdown '_' => ['Rule'], '`' => ['FencedCode'], '|' => ['Table'], - '~' => ['FencedCode'], ]; /** @@ -895,7 +894,7 @@ protected function inlineMarkup(array $excerpt) : ?array } /** - * Handle striketrhough + * Handle strikethrough * * @param array{text:string, context:string, before:string} $excerpt Inline data * @@ -2049,7 +2048,7 @@ protected function blockList(array $line, ?array $current = null) : ?array $markerWithoutWhitespace = $matches[1]; } - if ($name === 'ul') { + if ($name !== 'ul') { $markerWithoutWhitespace = \substr($markerWithoutWhitespace, -1); if ($markerWithoutWhitespace === false) { @@ -2081,7 +2080,7 @@ protected function blockList(array $line, ?array $current = null) : ?array $listStart = \ltrim($tmp, '0') ?: '0'; - if ($listStart !== '1') { + if ($listStart !== '0') { if (isset($current) && $current['type'] === 'Paragraph' && !isset($current['interrupted']) @@ -4150,7 +4149,7 @@ protected function blockListContinue(array $line, array $block) : ?array return null; } - $requiredIndent = ($block['indent'] + \strlen($block['data']['marker'])); + $requiredIndent = $block['indent'] + \strlen($block['data']['marker']); if ($line['indent'] < $requiredIndent && (($block['data']['type'] === 'ol' diff --git a/tests/System/File/Ftp/FileTest.php b/tests/System/File/Ftp/FileTest.php index 99be3d833..74efbc90a 100755 --- a/tests/System/File/Ftp/FileTest.php +++ b/tests/System/File/Ftp/FileTest.php @@ -54,6 +54,8 @@ public static function setUpBeforeClass() : void \ftp_delete(self::$con, __DIR__ . '/0x00'); if (!$mkdir || !$put) { + self::$con = null; + throw new \Exception(); } } catch (\Throwable $_) { diff --git a/tests/Utils/ImageUtilsTest.php b/tests/Utils/ImageUtilsTest.php index 7d4aec704..fb8b84c33 100755 --- a/tests/Utils/ImageUtilsTest.php +++ b/tests/Utils/ImageUtilsTest.php @@ -43,6 +43,10 @@ public function testResize() : void self::assertTrue(\is_file(__DIR__ . '/img/logo_resized.png')); } + /** + * @covers phpOMS\Utils\ImageUtils + * @group slow + */ public function testDifference() : void { foreach (['png', 'gif'] as $type) { diff --git a/tests/Utils/Parser/Markdown/data/fenced_code_block.html b/tests/Utils/Parser/Markdown/data/fenced_code_block.html index 8bdabba96..037b517da 100755 --- a/tests/Utils/Parser/Markdown/data/fenced_code_block.html +++ b/tests/Utils/Parser/Markdown/data/fenced_code_block.html @@ -2,5 +2,4 @@ $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 index cbed8ebb5..802123213 100755 --- a/tests/Utils/Parser/Markdown/data/fenced_code_block.md +++ b/tests/Utils/Parser/Markdown/data/fenced_code_block.md @@ -5,10 +5,6 @@ $message = 'fenced code block'; echo $message; ``` -~~~ -tilde -~~~ - ```php echo 'language identifier'; ``` \ 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 index c4a69dbe6..523f8b71e 100755 --- a/tests/Utils/Parser/Markdown/data/ordered_list.html +++ b/tests/Utils/Parser/Markdown/data/ordered_list.html @@ -1,9 +1,9 @@ -
    +
    1. one
    2. two

    repeating numbers:

    -
      +
      1. one
      2. two