From a7597c94f1937aa5e8bddca8f630ea06020dadc5 Mon Sep 17 00:00:00 2001 From: Myroslav Dobra Date: Mon, 6 May 2019 16:23:47 +0300 Subject: [PATCH 01/48] executeInSelenium generation fix #2 --- .../Resources/ExecuteInSeleniumTest.txt | 2 +- .../TestModule/Test/ExecuteInSeleniumTest.xml | 2 +- .../Util/TestGenerator.php | 14 +++++++++++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/dev/tests/verification/Resources/ExecuteInSeleniumTest.txt b/dev/tests/verification/Resources/ExecuteInSeleniumTest.txt index 323b2ffb9..8de68cdf0 100644 --- a/dev/tests/verification/Resources/ExecuteInSeleniumTest.txt +++ b/dev/tests/verification/Resources/ExecuteInSeleniumTest.txt @@ -27,6 +27,6 @@ class ExecuteInSeleniumTestCest */ public function ExecuteInSeleniumTest(AcceptanceTester $I) { - $I->executeInSelenium(function ($webdriver) { return 'Hello, World!'}); + $I->executeInSelenium(function ($webdriver) { return "Hello, World!"}); } } diff --git a/dev/tests/verification/TestModule/Test/ExecuteInSeleniumTest.xml b/dev/tests/verification/TestModule/Test/ExecuteInSeleniumTest.xml index 0a72189b4..c25164220 100644 --- a/dev/tests/verification/TestModule/Test/ExecuteInSeleniumTest.xml +++ b/dev/tests/verification/TestModule/Test/ExecuteInSeleniumTest.xml @@ -9,6 +9,6 @@ - + diff --git a/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php b/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php index 07cb96b3a..63d70f419 100644 --- a/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php +++ b/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php @@ -639,7 +639,10 @@ public function generateStepsPhp($actionObjects, $generationScope = TestGenerato } if (isset($customActionAttributes['function'])) { - $function = $this->addUniquenessFunctionCall($customActionAttributes['function']); + $function = $this->addUniquenessFunctionCall( + $customActionAttributes['function'], + $actionObject->getType() !== "executeInSelenium" + ); if (in_array($actionObject->getType(), ActionObject::FUNCTION_CLOSURE_ACTIONS)) { // Argument must be a closure function, not a string. $function = trim($function, '"'); @@ -1698,11 +1701,16 @@ private function processPressKey($input) * Add uniqueness function call to input string based on regex pattern. * * @param string $input + * @param bool $wrapWithDoubleQuotes * @return string */ - private function addUniquenessFunctionCall($input) + private function addUniquenessFunctionCall($input, $wrapWithDoubleQuotes = true) { - $output = $this->wrapWithDoubleQuotes($input); + if ($wrapWithDoubleQuotes) { + $output = $this->wrapWithDoubleQuotes($input); + } else { + $output = $input; + } //Match on msq(\"entityName\") preg_match_all('/' . EntityDataObject::CEST_UNIQUE_FUNCTION . '\(\\\\"[\w]+\\\\"\)/', $output, $matches); From 3760dc83dbe08e87abf35014b14294292fdb3e62 Mon Sep 17 00:00:00 2001 From: Myroslav Dobra Date: Mon, 6 May 2019 17:31:59 +0300 Subject: [PATCH 02/48] executeInSelenium generation fix #2 --- src/Magento/FunctionalTestingFramework/Util/TestGenerator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php b/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php index 63d70f419..e8bc07432 100644 --- a/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php +++ b/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php @@ -1701,7 +1701,7 @@ private function processPressKey($input) * Add uniqueness function call to input string based on regex pattern. * * @param string $input - * @param bool $wrapWithDoubleQuotes + * @param boolean $wrapWithDoubleQuotes * @return string */ private function addUniquenessFunctionCall($input, $wrapWithDoubleQuotes = true) From da4ec73fec326f57f8c27e5cdf61e3f9ccdd5aa7 Mon Sep 17 00:00:00 2001 From: Myroslav Dobra Date: Tue, 7 May 2019 00:09:33 +0300 Subject: [PATCH 03/48] executeInSelenium generation fix #2 --- src/Magento/FunctionalTestingFramework/Util/TestGenerator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php b/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php index e8bc07432..86b8d8885 100644 --- a/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php +++ b/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php @@ -1700,7 +1700,7 @@ private function processPressKey($input) /** * Add uniqueness function call to input string based on regex pattern. * - * @param string $input + * @param string $input * @param boolean $wrapWithDoubleQuotes * @return string */ From 3a424de03df15253f3bcb0caac4b2506fb007e3a Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Thu, 5 Sep 2019 11:07:22 -0500 Subject: [PATCH 04/48] MQE-1650: Update MFTF configuration to read Test entities from new location --- composer.json | 1 + composer.lock | 463 +++++++++++++++++- .../Suite/Handlers/SuiteObjectHandlerTest.php | 7 + .../Suite/SuiteGeneratorTest.php | 4 +- .../Test/Handlers/TestObjectHandlerTest.php | 98 +++- .../Test/Util/ObjectExtensionUtilTest.php | 3 + .../Util/ModulePathExtractorTest.php | 171 ++++--- .../Util/ModuleResolverTest.php | 28 +- .../unit/Util/MockModuleResolverBuilder.php | 57 +++ .../TestModule/Page/SamplePage.xml | 14 +- .../Handlers/AbstractComposerHandler.php | 129 +++++ .../Composer/Handlers/ComposerInstaller.php | 97 ++++ .../Composer/Handlers/ComposerPackager.php | 156 ++++++ .../Composer/Objects/ComposerFactory.php | 39 ++ .../Composer/Util/ComposerJsonFinder.php | 36 ++ .../Page/Config/Dom.php | 8 +- .../Test/Util/TestObjectExtractor.php | 1 + .../Util/ComposerModuleResolver.php | 140 ++++++ .../Util/ModulePathExtractor.php | 82 +++- .../Util/ModuleResolver.php | 349 +++++++++++-- 20 files changed, 1740 insertions(+), 143 deletions(-) create mode 100644 dev/tests/unit/Util/MockModuleResolverBuilder.php create mode 100644 src/Magento/FunctionalTestingFramework/Composer/Handlers/AbstractComposerHandler.php create mode 100644 src/Magento/FunctionalTestingFramework/Composer/Handlers/ComposerInstaller.php create mode 100644 src/Magento/FunctionalTestingFramework/Composer/Handlers/ComposerPackager.php create mode 100644 src/Magento/FunctionalTestingFramework/Composer/Objects/ComposerFactory.php create mode 100644 src/Magento/FunctionalTestingFramework/Composer/Util/ComposerJsonFinder.php create mode 100644 src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php diff --git a/composer.json b/composer.json index 66936938c..f3d53b566 100755 --- a/composer.json +++ b/composer.json @@ -13,6 +13,7 @@ "ext-curl": "*", "allure-framework/allure-codeception": "~1.3.0", "codeception/codeception": "~2.3.4 || ~2.4.0 ", + "composer/composer": "^1.6", "consolidation/robo": "^1.0.0", "csharpru/vault-php": "~3.5.3", "csharpru/vault-php-guzzle6-transport": "^2.0", diff --git a/composer.lock b/composer.lock index 10169fb08..cdb9d6e76 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "1b7f01a11ff57f3b64f08352c33a506f", + "content-hash": "fba5cd329fe2ac173394f2dd2f2f3985", "packages": [ { "name": "allure-framework/allure-codeception", @@ -388,6 +388,308 @@ "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", "time": "2018-05-17T09:31:08+00:00" }, + { + "name": "composer/ca-bundle", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/10bb96592168a0f8e8f6dcde3532d9fa50b0b527", + "reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8", + "psr/log": "^1.0", + "symfony/process": "^2.5 || ^3.0 || ^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "time": "2019-08-30T08:44:50+00:00" + }, + { + "name": "composer/composer", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/composer/composer.git", + "reference": "314aa57fdcfc942065996f59fb73a8b3f74f3fa5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/composer/zipball/314aa57fdcfc942065996f59fb73a8b3f74f3fa5", + "reference": "314aa57fdcfc942065996f59fb73a8b3f74f3fa5", + "shasum": "" + }, + "require": { + "composer/ca-bundle": "^1.0", + "composer/semver": "^1.0", + "composer/spdx-licenses": "^1.2", + "composer/xdebug-handler": "^1.1", + "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0", + "seld/jsonlint": "^1.4", + "seld/phar-utils": "^1.0", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/filesystem": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/process": "^2.7 || ^3.0 || ^4.0" + }, + "conflict": { + "symfony/console": "2.8.38" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7", + "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" + }, + "suggest": { + "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", + "ext-zip": "Enabling the zip extension allows you to unzip archives", + "ext-zlib": "Allow gzip compression of HTTP requests" + }, + "bin": [ + "bin/composer" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\": "src/Composer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", + "homepage": "https://getcomposer.org/", + "keywords": [ + "autoload", + "dependency", + "package" + ], + "time": "2019-08-02T18:55:33+00:00" + }, + { + "name": "composer/semver", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/46d9139568ccb8d9e7cdd4539cab7347568a5e2e", + "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "time": "2019-03-19T17:25:45+00:00" + }, + { + "name": "composer/spdx-licenses", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/composer/spdx-licenses.git", + "reference": "7ac1e6aec371357df067f8a688c3d6974df68fa5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/7ac1e6aec371357df067f8a688c3d6974df68fa5", + "reference": "7ac1e6aec371357df067f8a688c3d6974df68fa5", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Spdx\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "SPDX licenses list and validation library.", + "keywords": [ + "license", + "spdx", + "validator" + ], + "time": "2019-07-29T10:31:59+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "1.3.3", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "46867cbf8ca9fb8d60c506895449eb799db1184f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/46867cbf8ca9fb8d60c506895449eb799db1184f", + "reference": "46867cbf8ca9fb8d60c506895449eb799db1184f", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "time": "2019-05-27T17:52:04+00:00" + }, { "name": "consolidation/annotated-command", "version": "2.9.1", @@ -1859,6 +2161,72 @@ ], "time": "2019-04-17T08:12:16+00:00" }, + { + "name": "justinrainbow/json-schema", + "version": "5.2.8", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/dcb6e1006bb5fd1e392b4daa68932880f37550d4", + "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.2.20", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "time": "2019-01-14T23:55:14+00:00" + }, { "name": "league/container", "version": "2.4.1", @@ -3960,6 +4328,99 @@ "homepage": "https://github.com/sebastianbergmann/version", "time": "2016-10-03T07:35:21+00:00" }, + { + "name": "seld/jsonlint", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "time": "2018-01-24T12:46:19+00:00" + }, + { + "name": "seld/phar-utils", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/phar-utils.git", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\PharUtils\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "PHAR file format utilities, for when PHP phars you up", + "keywords": [ + "phra" + ], + "time": "2015-10-13T18:44:15+00:00" + }, { "name": "symfony/browser-kit", "version": "v3.4.18", diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Suite/Handlers/SuiteObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Suite/Handlers/SuiteObjectHandlerTest.php index 99125a9e3..5bf29507c 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Suite/Handlers/SuiteObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Suite/Handlers/SuiteObjectHandlerTest.php @@ -15,9 +15,16 @@ use Magento\FunctionalTestingFramework\Util\MagentoTestCase; use tests\unit\Util\SuiteDataArrayBuilder; use tests\unit\Util\TestDataArrayBuilder; +use tests\unit\Util\MockModuleResolverBuilder; class SuiteObjectHandlerTest extends MagentoTestCase { + public function setUp() + { + $resolverMock = new MockModuleResolverBuilder(); + $resolverMock->setup(); + } + /** * Tests basic parsing and accesors of suite object and suite object supporting classes */ diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Suite/SuiteGeneratorTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Suite/SuiteGeneratorTest.php index eb6298afc..29158b0f5 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Suite/SuiteGeneratorTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Suite/SuiteGeneratorTest.php @@ -20,10 +20,10 @@ use tests\unit\Util\SuiteDataArrayBuilder; use tests\unit\Util\TestDataArrayBuilder; use tests\unit\Util\TestLoggingUtil; +use tests\unit\Util\MockModuleResolverBuilder; class SuiteGeneratorTest extends MagentoTestCase { - /** * Setup entry append and clear for Suite Generator */ @@ -42,6 +42,8 @@ public static function setUpBeforeClass() public function setUp() { TestLoggingUtil::getInstance()->setMockLoggingUtil(); + $resolverMock = new MockModuleResolverBuilder(); + $resolverMock->setup(); } /** diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php index 1dbeb50db..117cc5c2d 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php @@ -8,7 +8,6 @@ use AspectMock\Test as AspectMock; -use Go\Aop\Aspect; use Magento\FunctionalTestingFramework\ObjectManager; use Magento\FunctionalTestingFramework\ObjectManagerFactory; use Magento\FunctionalTestingFramework\Test\Handlers\TestObjectHandler; @@ -16,10 +15,10 @@ use Magento\FunctionalTestingFramework\Test\Objects\TestHookObject; use Magento\FunctionalTestingFramework\Test\Objects\TestObject; use Magento\FunctionalTestingFramework\Test\Parsers\TestDataParser; -use Magento\FunctionalTestingFramework\Test\Util\ActionObjectExtractor; use Magento\FunctionalTestingFramework\Test\Util\TestObjectExtractor; use Magento\FunctionalTestingFramework\Util\MagentoTestCase; use tests\unit\Util\TestDataArrayBuilder; +use tests\unit\Util\MockModuleResolverBuilder; class TestObjectHandlerTest extends MagentoTestCase { @@ -40,10 +39,13 @@ public function testGetTestObject() ->withTestActions() ->build(); + $resolverMock = new MockModuleResolverBuilder(); + $resolverMock->setup(); $this->setMockParserOutput(['tests' => $mockData]); // run object handler method $toh = TestObjectHandler::getInstance(); + $mockConfig = AspectMock::double(TestObjectHandler::class, ['initTestData' => false]); $actualTestObject = $toh->getObject($testDataArrayBuilder->testName); // perform asserts @@ -130,6 +132,8 @@ public function testGetTestsByGroup() ->withTestActions() ->build(); + $resolverMock = new MockModuleResolverBuilder(); + $resolverMock->setup(); $this->setMockParserOutput(['tests' => array_merge($includeTest, $excludeTest)]); // execute test method @@ -150,16 +154,20 @@ public function testGetTestsByGroup() public function testGetTestWithModuleName() { // set up Test Data - $moduleExpected = "SomeTestModule"; + $moduleExpected = "SomeModuleName"; + $moduleExpectedTest = $moduleExpected . "Test"; $filepath = DIRECTORY_SEPARATOR . - "user" . + "user" . DIRECTORY_SEPARATOR . "magento2ce" . DIRECTORY_SEPARATOR . "dev" . DIRECTORY_SEPARATOR . "tests" . DIRECTORY_SEPARATOR . "acceptance" . DIRECTORY_SEPARATOR . "tests" . DIRECTORY_SEPARATOR . - $moduleExpected . DIRECTORY_SEPARATOR . - "Tests" . DIRECTORY_SEPARATOR . + "functional" . DIRECTORY_SEPARATOR . + "Vendor" . DIRECTORY_SEPARATOR . + $moduleExpectedTest; + $file = $filepath . DIRECTORY_SEPARATOR . + "Test" . DIRECTORY_SEPARATOR . "text.xml"; // set up mock data $testDataArrayBuilder = new TestDataArrayBuilder(); @@ -169,8 +177,12 @@ public function testGetTestWithModuleName() ->withAfterHook() ->withBeforeHook() ->withTestActions() - ->withFileName($filepath) + ->withFileName($file) ->build(); + + $resolverMock = new MockModuleResolverBuilder(); + $resolverMock->setup(['Vendor_' . $moduleExpected => [$filepath]]); + $this->setMockParserOutput(['tests' => $mockData]); // Execute Test Method $toh = TestObjectHandler::getInstance(); @@ -180,6 +192,68 @@ public function testGetTestWithModuleName() $this->assertEquals($moduleExpected, $moduleName); } + /** + * getObject should throw exception if test extends from itself + * + * @throws \Exception + */ + public function testGetTestObjectWithInvalidExtends() + { + // set up Test Data + $testOne = (new TestDataArrayBuilder()) + ->withName('testOne') + ->withTestReference('testOne') + ->withAnnotations() + ->withFailedHook() + ->withAfterHook() + ->withBeforeHook() + ->withTestActions() + ->build(); + $this->setMockParserOutput(['tests' => $testOne]); + + $toh = TestObjectHandler::getInstance(); + + $this->expectException(\Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException::class); + $this->expectExceptionMessage("Mftf Test can not extend from itself: " . "testOne"); + + $toh->getObject('testOne'); + } + + /** + * getAllObjects should throw exception if test extends from itself + * + * @throws \Exception + */ + public function testGetAllTestObjectsWithInvalidExtends() + { + // set up Test Data + $testOne = (new TestDataArrayBuilder()) + ->withName('testOne') + ->withTestReference('testOne') + ->withAnnotations() + ->withFailedHook() + ->withAfterHook() + ->withBeforeHook() + ->withTestActions() + ->build(); + $testTwo = (new TestDataArrayBuilder()) + ->withName('testTwo') + ->withAnnotations() + ->withFailedHook() + ->withAfterHook() + ->withBeforeHook() + ->withTestActions() + ->build(); + + $this->setMockParserOutput(['tests' => array_merge($testOne, $testTwo)]); + + $toh = TestObjectHandler::getInstance(); + + $this->expectException(\Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException::class); + $this->expectExceptionMessage("Mftf Test can not extend from itself: " . "testOne"); + $toh->getAllObjects(); + } + /** * Function used to set mock for parser return and force init method to run between tests. * @@ -198,4 +272,14 @@ private function setMockParserOutput($data) ->make(); // bypass the private constructor AspectMock::double(ObjectManagerFactory::class, ['getObjectManager' => $instance]); } + + /** + * After method functionality + * + * @return void + */ + public function tearDown() + { + AspectMock::clean(); + } } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ObjectExtensionUtilTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ObjectExtensionUtilTest.php index b023b16c7..3b43ba00f 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ObjectExtensionUtilTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ObjectExtensionUtilTest.php @@ -20,6 +20,7 @@ use PHPUnit\Framework\TestCase; use tests\unit\Util\TestDataArrayBuilder; use tests\unit\Util\TestLoggingUtil; +use tests\unit\Util\MockModuleResolverBuilder; class ObjectExtensionUtilTest extends TestCase { @@ -30,6 +31,8 @@ class ObjectExtensionUtilTest extends TestCase public function setUp() { TestLoggingUtil::getInstance()->setMockLoggingUtil(); + $resolverMock = new MockModuleResolverBuilder(); + $resolverMock->setup(); } /** diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php index 5efa6384b..4fb18d383 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php @@ -7,103 +7,128 @@ namespace tests\unit\Magento\FunctionalTestFramework\Test\Util; use Magento\FunctionalTestingFramework\Util\ModulePathExtractor; -use PHPUnit\Framework\TestCase; +use Magento\FunctionalTestingFramework\Util\MagentoTestCase; +use tests\unit\Util\MockModuleResolverBuilder; -class ModulePathExtractorTest extends TestCase +class ModulePathExtractorTest extends MagentoTestCase { - const EXTENSION_PATH = "app" - . DIRECTORY_SEPARATOR - . "code" - . DIRECTORY_SEPARATOR - . "TestExtension" - . DIRECTORY_SEPARATOR - . "[Analytics]" - . DIRECTORY_SEPARATOR - . "Test" - . DIRECTORY_SEPARATOR - . "Mftf" - . DIRECTORY_SEPARATOR - . "Test" - . DIRECTORY_SEPARATOR - . "SomeText.xml"; - - const MAGENTO_PATH = "dev" - . DIRECTORY_SEPARATOR - . "tests" - . DIRECTORY_SEPARATOR - . "acceptance" - . DIRECTORY_SEPARATOR - . "tests" - . DIRECTORY_SEPARATOR - . "functional" - . DIRECTORY_SEPARATOR - . "Magento" - . DIRECTORY_SEPARATOR - . "FunctionalTest" - . DIRECTORY_SEPARATOR - . "[Analytics]" - . DIRECTORY_SEPARATOR - . "Test" - . DIRECTORY_SEPARATOR - . "SomeText.xml"; + /** + * Mock test module paths + * + * @var array + */ + private $mockTestModulePaths = [ + 'Magento_ModuleA' => ['/base/path/app/code/Magento/ModuleA/Test/Mftf'], + 'VendorB_ModuleB' => ['/base/path/app/code/VendorB/ModuleB/Test/Mftf'], + 'Magento_ModuleC' => ['/base/path/dev/tests/acceptance/tests/functional/Magento/ModuleCTest'], + 'VendorD_ModuleD' => ['/base/path/dev/tests/acceptance/tests/functional/VendorD/ModuleDTest'], + 'SomeModuleE' => ['/base/path/dev/tests/acceptance/tests/functional/FunctionalTest/SomeModuleE'], + 'Magento_ModuleF' => ['/base/path/vendor/magento/module-modulef/Test/Mftf'], + 'VendorG_ModuleG' => ['/base/path/vendor/vendorg/module-moduleg-test'], + ]; + + /** + * Validate module for app/code path + * + * @throws \Exception + */ + public function testGetModuleAppCode() + { + $mockPath = '/base/path/app/code/Magento/ModuleA/Test/Mftf/Test/SomeTest.xml'; + + $resolverMock = new MockModuleResolverBuilder(); + $resolverMock->setup($this->mockTestModulePaths); + $extractor = new ModulePathExtractor(); + $this->assertEquals('ModuleA', $extractor->extractModuleName($mockPath)); + } /** - * Validate correct module is returned for dev/tests path + * Validate vendor for app/code path + * * @throws \Exception */ - public function testGetMagentoModule() + public function testGetVendorAppCode() { - $modulePathExtractor = new ModulePathExtractor(); - $this->assertEquals( - '[Analytics]', - $modulePathExtractor->extractModuleName( - self::MAGENTO_PATH - ) - ); + $mockPath = '/base/path/app/code/VendorB/ModuleB/Test/Mftf/Test/SomeTest.xml'; + + $resolverMock = new MockModuleResolverBuilder(); + $resolverMock->setup($this->mockTestModulePaths); + $extractor = new ModulePathExtractor(); + $this->assertEquals('VendorB', $extractor->getExtensionPath($mockPath)); } /** - * Validate correct module is returned for extension path + * Validate module for dev/tests path + * * @throws \Exception */ - public function testGetExtensionModule() + public function testGetModuleDevTests() { - $modulePathExtractor = new ModulePathExtractor(); - $this->assertEquals( - '[Analytics]', - $modulePathExtractor->extractModuleName( - self::EXTENSION_PATH - ) - ); + $mockPath = '/base/path/dev/tests/acceptance/tests/functional/Magento/ModuleCTest/Test/SomeTest.xml'; + + $resolverMock = new MockModuleResolverBuilder(); + $resolverMock->setup($this->mockTestModulePaths); + $extractor = new ModulePathExtractor(); + $this->assertEquals('ModuleC', $extractor->extractModuleName($mockPath)); } /** - * Validate Magento is returned for dev/tests/acceptance + * Validate vendor for dev/tests path + * * @throws \Exception */ - public function testMagentoModulePath() + public function testGetVendorDevTests() { - $modulePathExtractor = new ModulePathExtractor(); - $this->assertEquals( - 'Magento', - $modulePathExtractor->getExtensionPath( - self::MAGENTO_PATH - ) - ); + $mockPath = '/base/path/dev/tests/acceptance/tests/functional/VendorD/ModuleDTest/Test/SomeTest.xml'; + + $resolverMock = new MockModuleResolverBuilder(); + $resolverMock->setup($this->mockTestModulePaths); + $extractor = new ModulePathExtractor(); + $this->assertEquals('VendorD', $extractor->getExtensionPath($mockPath)); } /** - * Validate correct extension path is returned + * Validate module with no _ + * * @throws \Exception */ - public function testExtensionModulePath() + public function testGetModule() { - $modulePathExtractor = new ModulePathExtractor(); - $this->assertEquals( - 'TestExtension', - $modulePathExtractor->getExtensionPath( - self::EXTENSION_PATH - ) - ); + $mockPath = '/base/path/dev/tests/acceptance/tests/functional/FunctionalTest/SomeModuleE/Test/SomeTest.xml'; + + $resolverMock = new MockModuleResolverBuilder(); + $resolverMock->setup($this->mockTestModulePaths); + $extractor = new ModulePathExtractor(); + $this->assertEquals('NO MODULE DETECTED', $extractor->extractModuleName($mockPath)); + } + + /** + * Validate module for vendor/tests path + * + * @throws \Exception + */ + public function testGetModuleVendorDir() + { + $mockPath = '/base/path/vendor/magento/module-modulef/Test/Mftf/Test/SomeTest.xml'; + + $resolverMock = new MockModuleResolverBuilder(); + $resolverMock->setup($this->mockTestModulePaths); + $extractor = new ModulePathExtractor(); + $this->assertEquals('ModuleF', $extractor->extractModuleName($mockPath)); + } + + /** + * Validate vendor for vendor path + * + * @throws \Exception + */ + public function testGetVendorVendorDir() + { + $mockPath = '/base/path/vendor/vendorg/module-moduleg-test/Test/SomeTest.xml'; + + $resolverMock = new MockModuleResolverBuilder(); + $resolverMock->setup($this->mockTestModulePaths); + $extractor = new ModulePathExtractor(); + $this->assertEquals('VendorG', $extractor->getExtensionPath($mockPath)); } } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php index 248704adc..a270afaf8 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php @@ -68,6 +68,7 @@ public function testGetModulePathsAggregate() $this->setMockResolverProperties($resolver, null, [0 => "Magento_example"]); $this->assertEquals( [ + "example" . DIRECTORY_SEPARATOR . "paths", "example" . DIRECTORY_SEPARATOR . "paths", "example" . DIRECTORY_SEPARATOR . "paths", "example" . DIRECTORY_SEPARATOR . "paths" @@ -82,6 +83,11 @@ public function testGetModulePathsAggregate() */ public function testGetModulePathsLocations() { + // clear test object handler value to inject parsed content + $property = new \ReflectionProperty(ModuleResolver::class, 'instance'); + $property->setAccessible(true); + $property->setValue(null); + $this->mockForceGenerate(false); $mockResolver = $this->setMockResolverClass( true, @@ -94,6 +100,7 @@ public function testGetModulePathsLocations() $this->setMockResolverProperties($resolver, null, null); $this->assertEquals( [ + "example" . DIRECTORY_SEPARATOR . "paths", "example" . DIRECTORY_SEPARATOR . "paths", "example" . DIRECTORY_SEPARATOR . "paths", "example" . DIRECTORY_SEPARATOR . "paths" @@ -107,6 +114,8 @@ public function testGetModulePathsLocations() // Define the Module paths from default TESTS_MODULE_PATH $modulePath = defined('TESTS_MODULE_PATH') ? TESTS_MODULE_PATH : TESTS_BP; + + $mockResolver->verifyInvoked('globRelevantPaths', [$modulePath, '']); $mockResolver->verifyInvoked( 'globRelevantPaths', @@ -119,6 +128,20 @@ public function testGetModulePathsLocations() 'Test' . DIRECTORY_SEPARATOR .'Mftf' ] ); + $mockResolver->verifyInvoked( + 'globRelevantPaths', + [ + $magentoBaseCodePath + . DIRECTORY_SEPARATOR . "dev" + . DIRECTORY_SEPARATOR . "tests" + . DIRECTORY_SEPARATOR . "acceptance" + . DIRECTORY_SEPARATOR . "tests" + . DIRECTORY_SEPARATOR . "functional" + . DIRECTORY_SEPARATOR . "Magento" + . DIRECTORY_SEPARATOR . "FunctionalTest" + , '' + ] + ); } /** @@ -160,7 +183,10 @@ function ($arg1, $arg2) { ); $resolver = ModuleResolver::getInstance(); $this->setMockResolverProperties($resolver, null, null, ["somePath"]); - $this->assertEquals(["lastPath", "lastPath"], $resolver->getModulesPath()); + $this->assertEquals( + ["lastPath", "lastPath"], + $resolver->getModulesPath() + ); TestLoggingUtil::getInstance()->validateMockLogStatement( 'info', 'excluding module', diff --git a/dev/tests/unit/Util/MockModuleResolverBuilder.php b/dev/tests/unit/Util/MockModuleResolverBuilder.php new file mode 100644 index 000000000..73ef624f6 --- /dev/null +++ b/dev/tests/unit/Util/MockModuleResolverBuilder.php @@ -0,0 +1,57 @@ + ['/base/path/app/code/Magento/Module/Test/Mftf']]; + + /** + * Mock ModuleResolver builder + * + * @param array $paths + * @return void + * @throws \Exception + */ + public function setup($paths = null) + { + if (!empty($path)) { + $paths = $this->defaultPaths; + } + + $mockConfig = AspectMock::double(MftfApplicationConfig::class, ['forceGenerateEnabled' => false]); + $instance = AspectMock::double(ObjectManager::class, ['create' => $mockConfig->make(), 'get' => null])->make(); + AspectMock::double(ObjectManagerFactory::class, ['getObjectManager' => $instance]); + + $property = new \ReflectionProperty(ModuleResolver::class, 'instance'); + $property->setAccessible(true); + $property->setValue(null); + + $mockResolver = AspectMock::double( + ModuleResolver::class, + ['getAdminToken' => false, 'globRelevantPaths' => [], 'getEnabledModules' => []] + ); + $instance = AspectMock::double(ObjectManager::class, ['create' => $mockResolver->make(), 'get' => null]) + ->make(); + AspectMock::double(ObjectManagerFactory::class, ['getObjectManager' => $instance]); + + $resolver = ModuleResolver::getInstance(); + $property = new \ReflectionProperty(ModuleResolver::class, 'nonFlattenedEnabledModulePaths'); + $property->setAccessible(true); + $property->setValue($resolver, $paths); + } +} diff --git a/dev/tests/verification/TestModule/Page/SamplePage.xml b/dev/tests/verification/TestModule/Page/SamplePage.xml index bf8f99615..59efded6e 100644 --- a/dev/tests/verification/TestModule/Page/SamplePage.xml +++ b/dev/tests/verification/TestModule/Page/SamplePage.xml @@ -8,25 +8,25 @@ - +
- +
- +
- +
- +
- +
- +
diff --git a/src/Magento/FunctionalTestingFramework/Composer/Handlers/AbstractComposerHandler.php b/src/Magento/FunctionalTestingFramework/Composer/Handlers/AbstractComposerHandler.php new file mode 100644 index 000000000..1819c7571 --- /dev/null +++ b/src/Magento/FunctionalTestingFramework/Composer/Handlers/AbstractComposerHandler.php @@ -0,0 +1,129 @@ +composerFactory = $composerFactory; + } + + /** + * Load ComposerFactory + * + * @return composerFactory + */ + protected function getComposerFactory() + { + if (!$this->composerFactory) { + $this->composerFactory = ObjectManager::getInstance()->get(ComposerFactory::class); + } + return $this->composerFactory; + } + + /** + * Load Composer + * + * @return \Composer\Composer + */ + protected function getComposer() + { + if (!$this->composer) { + $this->composer = $this->getComposerFactory()->create(); + } + return $this->composer; + } + + /** + * Parse input array and return all suggested magento module names in pattern like: Magento_Store, Amazon_Core, etc + * + * @param array $suggests + * @return array + */ + protected function parseSuggestsForMagentoModuleNames($suggests) + { + $magentoModuleNames = []; + foreach ($suggests as $suggest) { + $parts = explode(',', $suggest); + $data = []; + foreach ($parts as $part) { + list($name, $value) = explode(':', $part, 2); + $data[strtolower(trim($name))] = trim($value); + } + + if (isset($data[self::SUGGEST_TYPE]) + && $data[self::SUGGEST_TYPE] == self::MAGENTO_MODULE_PACKAGE_TYPE + && isset($data[self::SUGGEST_NAME]) + && strpos($data[self::SUGGEST_NAME], '_') !== false) { + $magentoModuleNames[] = $data[self::SUGGEST_NAME]; + } + } + return array_unique($magentoModuleNames); + } +} diff --git a/src/Magento/FunctionalTestingFramework/Composer/Handlers/ComposerInstaller.php b/src/Magento/FunctionalTestingFramework/Composer/Handlers/ComposerInstaller.php new file mode 100644 index 000000000..6be7e8670 --- /dev/null +++ b/src/Magento/FunctionalTestingFramework/Composer/Handlers/ComposerInstaller.php @@ -0,0 +1,97 @@ +isInstalledPackageOfType($packageName, self::TEST_MODULE_PACKAGE_TYPE); + } + + /** + * Determines if package is a magento package + * + * @param string $packageName + * @return boolean + */ + public function isMagentoPackage($packageName) + { + return $this->isInstalledPackageOfType($packageName, self::MAGENTO_MODULE_PACKAGE_TYPE); + } + + /** + * Determines if an installed package is of a certain type + * + * @param string $packageName + * @param string $packageType + * @return boolean + */ + public function isInstalledPackageOfType($packageName, $packageType) + { + /** @var CompletePackageInterface $package */ + foreach ($this->getLocker()->getLockedRepository()->getPackages() as $package) { + if (($package->getName() == $packageName) && ($package->getType() == $packageType)) { + return true; + } + } + return false; + } + + /** + * Collect all installed mftf test packages from composer lock + * + * @return array + */ + public function getInstalledTestPackages() + { + $packages = []; + /** @var CompletePackageInterface $package */ + foreach ($this->getLocker()->getLockedRepository()->getPackages() as $package) { + if ($package->getType() == self::TEST_MODULE_PACKAGE_TYPE) { + $packages[$package->getName()] = [ + self::KEY_PACKAGE_NAME => $package->getName(), + self::KEY_PACKAGE_TYPE => $package->getType(), + self::KEY_PACKAGE_VERSION => $package->getPrettyVersion(), + self::KEY_PACKAGE_DESCRIPTION => $package->getDescription(), + self::KEY_PACKAGE_SUGGESTS => $package->getSuggests(), + self::KEY_PACKAGE_REQUIRES => $package->getRequires(), + self::KEY_PACKAGE_DEVREQUIRES => $package->getDevRequires(), + self::KEY_PACKAGE_SUGGESTED_MAGENTO_MODULES => $this->parseSuggestsForMagentoModuleNames( + $package->getSuggests() + ), + self::KEY_PACKAGE_INSTALLEDPATH => $this->getComposer()->getInstallationManager() + ->getInstallPath($package) + ]; + } + } + return $packages; + } + + /** + * Load locker + * + * @return \Composer\Package\Locker + */ + private function getLocker() + { + if (!$this->locker) { + $this->locker = $this->getComposer()->getLocker(); + } + return $this->locker; + } +} diff --git a/src/Magento/FunctionalTestingFramework/Composer/Handlers/ComposerPackager.php b/src/Magento/FunctionalTestingFramework/Composer/Handlers/ComposerPackager.php new file mode 100644 index 000000000..944d1300d --- /dev/null +++ b/src/Magento/FunctionalTestingFramework/Composer/Handlers/ComposerPackager.php @@ -0,0 +1,156 @@ +getRootPackage(); + return $package->getPrettyName(); + } + + /** + * Retrieve package type from composer json + * + * @return string + */ + public function getType() + { + /** @var \Composer\Package\CompletePackage $package */ + $package = $this->getRootPackage(); + return $package->getType(); + } + + /** + * Retrieve package version from composer json + * + * @return string + */ + public function getVersion() + { + /** @var \Composer\Package\CompletePackage $package */ + $package = $this->getRootPackage(); + return $package->getPrettyVersion(); + } + + /** + * Retrieve package description from composer json + * + * @return string + */ + public function getDescription() + { + /** @var \Composer\Package\CompletePackage $package */ + $package = $this->getRootPackage(); + return $package->getDescription(); + } + + /** + * Retrieve package require from composer json + * + * @return array + */ + public function getRequires() + { + /** @var \Composer\Package\CompletePackage $package */ + $package = $this->getRootPackage(); + return $package->getRequires(); + } + + /** + * Retrieve package dev require from composer json + * + * @return array + */ + public function getDevRequires() + { + /** @var \Composer\Package\CompletePackage $package */ + $package = $this->getRootPackage(); + return $package->getDevRequires(); + } + + /** + * Retrieve package suggest from composer json + * + * @return array + */ + public function getSuggests() + { + /** @var \Composer\Package\CompletePackage $package */ + $package = $this->getRootPackage(); + return $package->getSuggests(); + } + + /** + * Retrieve magento module names in package's suggest + * + * @return array + */ + public function getSuggestedMagentoModules() + { + return $this->parseSuggestsForMagentoModuleNames($this->getSuggests()); + } + + /** + * Determines if package is a mftf test package + * + * @return boolean + */ + public function isMftfTestPackage() + { + return ($this->getType() == self::TEST_MODULE_PACKAGE_TYPE) ? true : false; + } + + /** + * Retrieve packages require for given package name and version + * + * @param string $name + * @param string $version + * @return array + */ + public function getRequiresForPackage($name, $version) + { + /** @var \Composer\Package\CompletePackage $package */ + $package = $this->getComposer()->getRepositoryManager()->findPackage($name, $version); + return $package->getRequires(); + } + + /** + * Check if a package is required in composer json + * + * @param string $packageName + * @return boolean + */ + public function isPackageRequiredInComposerJson($packageName) + { + return (in_array($packageName, array_keys($this->getRequires())) + || in_array($packageName, array_keys($this->getDevRequires())) + ); + } + + /** + * Get root package + * + * @return \Composer\Package\RootPackageInterface + */ + public function getRootPackage() + { + if (!$this->rootPackage) { + $this->rootPackage = $this->getComposer()->getPackage(); + } + return $this->rootPackage; + } +} diff --git a/src/Magento/FunctionalTestingFramework/Composer/Objects/ComposerFactory.php b/src/Magento/FunctionalTestingFramework/Composer/Objects/ComposerFactory.php new file mode 100644 index 000000000..ed644af52 --- /dev/null +++ b/src/Magento/FunctionalTestingFramework/Composer/Objects/ComposerFactory.php @@ -0,0 +1,39 @@ +composerFile = $composerFile; + } + + /** + * Create \Composer\Composer + * + * @return \Composer\Composer + * @throws \Exception + */ + public function create() + { + return \Composer\Factory::create(new BufferIO(), $this->composerFile); + } +} diff --git a/src/Magento/FunctionalTestingFramework/Composer/Util/ComposerJsonFinder.php b/src/Magento/FunctionalTestingFramework/Composer/Util/ComposerJsonFinder.php new file mode 100644 index 000000000..628c1190b --- /dev/null +++ b/src/Magento/FunctionalTestingFramework/Composer/Util/ComposerJsonFinder.php @@ -0,0 +1,36 @@ +getElementsByTagName('page'); $currentModule = - $this->modulePathExtractor->extractModuleName($filename) . - '_' . - $this->modulePathExtractor->getExtensionPath($filename); + $this->modulePathExtractor->getExtensionPath($filename) + . '_' + . $this->modulePathExtractor->extractModuleName($filename); foreach ($pageNodes as $pageNode) { $pageModule = $pageNode->getAttribute("module"); $pageName = $pageNode->getAttribute("name"); - if ($pageModule !== $currentModule) { + if ($pageModule != $currentModule) { if (MftfApplicationConfig::getConfig()->verboseEnabled()) { print( "Page Module does not match path Module. " . diff --git a/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php b/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php index acad18572..0e61d864e 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php +++ b/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php @@ -11,6 +11,7 @@ use Magento\FunctionalTestingFramework\Test\Objects\ActionObject; use Magento\FunctionalTestingFramework\Test\Objects\TestObject; use Magento\FunctionalTestingFramework\Util\ModulePathExtractor; +use Magento\FunctionalTestingFramework\Util\ModuleResolver; use Magento\FunctionalTestingFramework\Util\Validation\NameValidationUtil; /** diff --git a/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php new file mode 100644 index 000000000..9c1c2b114 --- /dev/null +++ b/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php @@ -0,0 +1,140 @@ +installedTestModules) { + return $this->installedTestModules; + } + + if (!is_file($rootComposerFile ) || substr($rootComposerFile, -13) != "composer.json") { + throw new TestFrameworkException("Invalid root composer json file: {$rootComposerFile}"); + } + + $this->installedTestModules = []; + $composerInstaller = new ComposerInstaller( + new ComposerFactory($rootComposerFile) + ); + + foreach ($composerInstaller->getInstalledTestPackages() as $packageName => $packageData) { + $suggestedModuleNames = $packageData[ComposerInstaller::KEY_PACKAGE_SUGGESTED_MAGENTO_MODULES]; + $path = $packageData[ComposerInstaller::KEY_PACKAGE_INSTALLEDPATH]; + $this->installedTestModules[$path] = [ + self::KEY_DEPENDS_ON => $suggestedModuleNames + ]; + } + return $this->installedTestModules; + } + + /** + * Get possible test module code paths for input directories + * + * @param array $directories + * @return array + * @throws TestFrameworkException + */ + public function getTestModulesFromPaths($directories) + { + if (null !== $this->searchedTestModules) { + return $this->searchedTestModules; + } + + $this->searchedTestModules = []; + foreach ($directories as $directory) { + $this->searchedTestModules = array_merge_recursive( + $this->searchedTestModules, + $this->getTestModules($directory) + ); + } + return $this->searchedTestModules; + } + + /** + * Get possible test module code paths for a input directory + * + * @param string $directory + * @return array + * @throws TestFrameworkException + */ + private function getTestModules($directory) + { + $normalizedDir = realpath($directory); + if (!is_dir($normalizedDir)) { + throw new TestFrameworkException("Invalid directory: {$directory}"); + } + + // Find all composer json files under directory + $modules = []; + $jsonFinder = new ComposerJsonFinder(); + $fileList = $jsonFinder->findAllComposerJsonFiles($normalizedDir); + foreach ($fileList as $file) { + // Parse composer json for test module name and path information + $composerInfo = new ComposerPackager( + new ComposerFactory($file) + ); + if ($composerInfo->isMftfTestPackage()) { + //$moduleName = $composerInfo->getName(); + $modulePath = str_replace( + DIRECTORY_SEPARATOR . 'composer.json', + '', + $file + ); + $suggestedMagentoModuleNames = $composerInfo->getSuggestedMagentoModules(); + $module[$modulePath] = [ + self::KEY_DEPENDS_ON => $suggestedMagentoModuleNames + ]; + $modules = array_merge_recursive($modules, $module); + } + } + return $modules; + } +} diff --git a/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php b/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php index 33e559ea8..c962782b1 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php @@ -11,41 +11,91 @@ */ class ModulePathExtractor { - const MAGENTO = 'Magento'; + const SPLIT_DELIMITER = '_'; + + /** + * Test module paths + * + * @var array + */ + private $testModulePaths = []; + + /** + * ModulePathExtractor constructor + */ + public function __construct() + { + if (empty($this->testModulePaths)) { + $this->testModulePaths = ModuleResolver::getInstance()->getModulesPath(false); + } + } /** * Extracts module name from the path given + * * @param string $path * @return string */ public function extractModuleName($path) { - if (empty($path)) { - return "NO MODULE DETECTED"; - } - $paths = explode(DIRECTORY_SEPARATOR, $path); - if (count($paths) < 3) { + $key = $this->extractKeyByPath($path); + if (empty($key)) { return "NO MODULE DETECTED"; - } elseif ($paths[count($paths)-3] == "Mftf") { - // app/code/Magento/[Analytics]/Test/Mftf/Test/SomeText.xml - return $paths[count($paths)-5]; } - // dev/tests/acceptance/tests/functional/Magento/FunctionalTest/[Analytics]/Test/SomeText.xml - return $paths[count($paths)-3]; + $parts = $this->splitKeyForParts($key); + return isset($parts[1]) ? $parts[1] : "NO MODULE DETECTED"; } /** - * Extracts the extension form the path, Magento for dev/tests/acceptance, [name] before module otherwise + * Extracts vendor name for module from the path given + * * @param string $path * @return string */ public function getExtensionPath($path) { + $key = $this->extractKeyByPath($path); + if (empty($key)) { + return "NO VENDOR DETECTED"; + } + $parts = $this->splitKeyForParts($key); + return isset($parts[0]) ? $parts[0] : "NO VENDOR DETECTED"; + } + + /** + * Split key by SPLIT_DELIMITER and return parts array + * + * @param string $key + * @return array + */ + private function splitKeyForParts($key) + { + $parts = explode(self::SPLIT_DELIMITER, $key); + return count($parts) == 2 ? $parts : []; + } + + /** + * Extract module name key by path + * + * @param string $path + * @return string + */ + private function extractKeyByPath($path) + { + if (empty($path)) { + return ''; + } $paths = explode(DIRECTORY_SEPARATOR, $path); - if ($paths[count($paths)-3] == "Mftf") { - // app/code/[Magento]/Analytics/Test/Mftf/Test/SomeText.xml - return $paths[count($paths)-6]; + if (count($paths) < 3) { + return ''; + } + $paths = array_slice($paths, 0, count($paths)-2); + $shortenedPath = implode(DIRECTORY_SEPARATOR, $paths); + foreach ($this->testModulePaths as $key => $pathArr) { + if (isset($pathArr[0]) && $pathArr[0] == $shortenedPath) { + return $key; + } } - return self::MAGENTO; + return ''; } } diff --git a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php index 16e6037fa..13babafd9 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php @@ -38,6 +38,39 @@ class ModuleResolver */ const REGISTRAR_CLASS = "\Magento\Framework\Component\ComponentRegistrar"; + /** + * const for vendor + */ + const VENDOR = 'vendor'; + + /** + * const for app/code + */ + const APP_CODE = 'app' . DIRECTORY_SEPARATOR . "code"; + + /** + * const for dev/tests/acceptance/tests/functional + */ + const DEV_TESTS = 'dev' + . DIRECTORY_SEPARATOR + . 'tests' + . DIRECTORY_SEPARATOR + . 'acceptance' + . DIRECTORY_SEPARATOR + . 'tests' + . DIRECTORY_SEPARATOR + . 'functional'; + + /** + * Deprecated dev tests code path + */ + const DEPRECATED_DEV_TESTS = DIRECTORY_SEPARATOR + . self:: DEV_TESTS + . DIRECTORY_SEPARATOR + . "Magento" + . DIRECTORY_SEPARATOR + . "FunctionalTest"; + /** * Enabled modules. * @@ -52,6 +85,13 @@ class ModuleResolver */ protected $enabledModulePaths = null; + /** + * Paths for non flattened enabled modules. + * + * @var array|null + */ + protected $nonFlattenedEnabledModulePaths = null; + /** * Configuration instance. * @@ -110,6 +150,27 @@ class ModuleResolver 'SampleTests', 'SampleTemplates' ]; + /** + * Registered module list in magento instance being tested + * + * @var array + */ + private $registeredModuleList = []; + + /** + * Composer json based test module paths + * + * @var array + */ + private $composerJsonModulePaths = null; + + /** + * Composer installed test module paths + * + * @var array + */ + private $composerInstalledModulePaths = null; + /** * Get ModuleResolver instance. * @@ -138,6 +199,7 @@ private function __construct() * Return an array of enabled modules of target Magento instance. * * @return array + * @throws TestFrameworkException */ public function getEnabledModules() { @@ -179,50 +241,112 @@ public function getEnabledModules() return $this->enabledModules; } - /** - * Return an array of module whitelist that not exist in target Magento instance. - * - * @return array - */ - protected function getModuleWhitelist() - { - $moduleWhitelist = getenv(self::MODULE_WHITELIST); - - if (empty($moduleWhitelist)) { - return []; - } - return array_map('trim', explode(',', $moduleWhitelist)); - } - /** * Return the modules path based on which modules are enabled in the target Magento instance. * + * @param boolean $flat * @return array */ - public function getModulesPath() + public function getModulesPath($flat = true) { - if (isset($this->enabledModulePaths)) { + if (isset($this->enabledModulePaths) && $flat) { return $this->enabledModulePaths; } + if (isset($this->nonFlattenedEnabledModulePaths) && !$flat) { + return $this->nonFlattenedEnabledModulePaths; + } + $allModulePaths = $this->aggregateTestModulePaths(); + $composerBsedModulePaths = $this->aggregateTestModulePathsFromComposerJson(); + $composerBsedModulePaths = array_merge( + $composerBsedModulePaths, + $this->aggregateTestModulePathsFromComposerInstaller() + ); + + $allModulePaths = $this->mergeModulePaths($allModulePaths, $composerBsedModulePaths); + if (MftfApplicationConfig::getConfig()->forceGenerateEnabled()) { + $allModulePaths = $this->flipAndFlattenArray($allModulePaths); $this->enabledModulePaths = $this->applyCustomModuleMethods($allModulePaths); return $this->enabledModulePaths; } $enabledModules = array_merge($this->getEnabledModules(), $this->getModuleWhitelist()); - $enabledDirectoryPaths = $this->getEnabledDirectoryPaths($enabledModules, $allModulePaths); + //$enabledDirectoryPaths = $this->getEnabledDirectoryPaths($enabledModules, $allModulePaths); + $enabledDirectoryPaths = $this->flipAndFlattenArray($allModulePaths, $enabledModules); $this->enabledModulePaths = $this->applyCustomModuleMethods($enabledDirectoryPaths); return $this->enabledModulePaths; } + /** + * @param array $targetArray + * @param array $filterArray + * @return array + */ + private function flipAndFlattenArray($objectArray, $filterArray = null) + { + $flippedArray = []; + foreach ($objectArray as $path => $modules) { + if (count($modules) == 1) { + if (!is_array($filterArray) + || (is_array($filterArray) && in_array($modules[0], $filterArray))) { + $flippedArray[$modules[0]] = $path; + } + } else { + if (!is_array($filterArray)) { + $flippedArray[$this->getPossibleVendorModuleName($path)] = $path; + } else { + $skip = false; + foreach ($modules as $module) { + if(!in_array($module, $filterArray)) { + $skip = true; + break; + } + } + if (!$skip) { + $flippedArray[$this->getPossibleVendorModuleName($path)] = $path; + } + } + } + } + return $flippedArray; + } + + + /** + * Sort files according module sequence. + * + * @param array $files + * @return array + */ + public function sortFilesByModuleSequence(array $files) + { + return $this->sequenceSorter->sort($files); + } + + /** + * Return an array of module whitelist that not exist in target Magento instance. + * + * @return array + */ + protected function getModuleWhitelist() + { + $moduleWhitelist = getenv(self::MODULE_WHITELIST); + + if (empty($moduleWhitelist)) { + return []; + } + return array_map('trim', explode(',', $moduleWhitelist)); + } + /** * Retrieves all module directories which might contain pertinent test code. * * @return array + * @throws TestFrameworkException */ private function aggregateTestModulePaths() { @@ -235,13 +359,14 @@ private function aggregateTestModulePaths() $modulePath = defined('TESTS_MODULE_PATH') ? TESTS_MODULE_PATH : TESTS_BP; $modulePath = rtrim($modulePath, DIRECTORY_SEPARATOR); - $vendorCodePath = DIRECTORY_SEPARATOR . "vendor"; - $appCodePath = DIRECTORY_SEPARATOR . "app" . DIRECTORY_SEPARATOR . "code"; + $vendorCodePath = DIRECTORY_SEPARATOR . self::VENDOR; + $appCodePath = DIRECTORY_SEPARATOR . self::APP_CODE; $codePathsToPattern = [ $modulePath => '', $magentoBaseCodePath . $vendorCodePath => 'Test' . DIRECTORY_SEPARATOR . 'Mftf', - $magentoBaseCodePath . $appCodePath => 'Test' . DIRECTORY_SEPARATOR . 'Mftf' + $magentoBaseCodePath . $appCodePath => 'Test' . DIRECTORY_SEPARATOR . 'Mftf', + $magentoBaseCodePath . self::DEPRECATED_DEV_TESTS => '' ]; foreach ($codePathsToPattern as $codePath => $pattern) { @@ -279,7 +404,12 @@ private function globRelevantPaths($testPath, $pattern) $codePath = realpath($potentialSymlink) . DIRECTORY_SEPARATOR . $pattern; } - $mainModName = array_search($codePath, $allComponents) ?: basename(str_replace($pattern, '', $codePath)); + $mainModName = array_search($codePath, $allComponents); + if (!$mainModName) { + $mainModName = $this->getPossibleVendorName($codePath) + . '_' + . basename(str_replace($pattern, '', $codePath)); + } $modulePaths[$mainModName][] = $codePath; if (MftfApplicationConfig::getConfig()->verboseEnabled()) { @@ -290,6 +420,18 @@ private function globRelevantPaths($testPath, $pattern) } } + // Suppress print during unit testing + if (MftfApplicationConfig::getConfig()->getPhase() !== MftfApplicationConfig::UNIT_TEST_PHASE + && strpos($testPath, self::DEPRECATED_DEV_TESTS) !== false + && !empty($module) + ) { + $deprecatedPath = self::DEPRECATED_DEV_TESTS; + $suggestedPath = self::DEV_TESTS . DIRECTORY_SEPARATOR . 'Vendor'; + LoggingUtil::getInstance()->getLogger(ModuleResolver::class)->warning( + "DEPRECATION: $deprecatedPath is deprecated! Please move mftf test modules to $suggestedPath" + ); + print ("\nDEPRECATION: $deprecatedPath is deprecated! Please move mftf tests to $suggestedPath\n\n"); + } return $modulePaths; } @@ -313,6 +455,111 @@ private static function globRelevantWrapper($testPath, $pattern) return $directories; } + /** + * Retrieves all code paths by searching composer json where might contain pertinent test modules + * + * @return array + */ + private function aggregateTestModulePathsFromComposerJson() + { + // Define the Module paths from magento bp + $magentoBaseCodePath = MAGENTO_BP; + + // Define the Module paths from default TESTS_MODULE_PATH + $modulePath = defined('TESTS_MODULE_PATH') ? TESTS_MODULE_PATH : TESTS_BP; + $modulePath = rtrim($modulePath, DIRECTORY_SEPARATOR); + + $searchCodePaths = [ + $magentoBaseCodePath . DIRECTORY_SEPARATOR . self::DEV_TESTS, + ]; + + // Add TESTS_MODULE_PATH if it's not included + if (array_search($modulePath, $searchCodePaths) === false) { + $searchCodePaths[] = $modulePath; + } + + return $this->getComposerJsonTestModulePaths($searchCodePaths); + } + + /** + * Retrieve composer json based test module paths from give $codePath + * + * @param array $codePaths + * @return array + */ + private function getComposerJsonTestModulePaths($codePaths) + { + if (null !== $this->composerJsonModulePaths) { + return $this->composerJsonModulePaths; + } + try { + $this->composerJsonModulePaths = []; + $resolver = new ComposerModuleResolver(); + $this->composerJsonModulePaths = $resolver->getTestModulesFromPaths($codePaths); + } catch (TestFrameworkException $e) { + } + + return $this->composerJsonModulePaths; + } + + /** + * Retrieves all module directories which might contain pertinent test code. + * + * @return array + */ + private function aggregateTestModulePathsFromComposerInstaller() + { + // Define the Module paths from magento bp + $magentoBaseCodePath = MAGENTO_BP; + $composerFile = $magentoBaseCodePath . DIRECTORY_SEPARATOR . 'composer.json'; + + return $this->getComposerInstalledTestModulePaths($composerFile); + } + + /** + * Retrieve composer json based test module paths from give $codePath + * + * @params string $composerFile + * @return array + */ + private function getComposerInstalledTestModulePaths($composerFile) + { + if (null !== $this->composerInstalledModulePaths) { + return $this->composerInstalledModulePaths; + } + try { + $this->composerInstalledModulePaths = []; + $resolver = new ComposerModuleResolver(); + $this->composerInstalledModulePaths = $resolver->getComposerInstalledTestModules($composerFile); + } catch (TestFrameworkException $e) { + } + + return $this->composerInstalledModulePaths; + } + + /** + * Merge an associated array in 1st argument with another flattened associated array in 2nd argument + * and process duplicates + * + * @param array $nameKeyedArray + * @param array $pathKeyedArray + * @return array + */ + private function mergeModulePaths($nameKeyedArray, $pathKeyedArray) + { + $flippedArray = []; + foreach ($nameKeyedArray as $name => $path) { + $flippedArray[$path[0]] = [$name]; + } + foreach ($pathKeyedArray as $path => $modules) { + // Do nothing when array_key_exists + if (!array_key_exists($path, $flippedArray)) { + $flippedArray[$path] = $modules; + } + } + return $flippedArray; + } + /** * Takes a multidimensional array of module paths and flattens to return a one dimensional array of test paths * @@ -447,17 +694,6 @@ protected function getAdminToken() return json_decode($response); } - /** - * Sort files according module sequence. - * - * @param array $files - * @return array - */ - public function sortFilesByModuleSequence(array $files) - { - return $this->sequenceSorter->sort($files); - } - /** * A wrapping method for any custom logic which needs to be applied to the module list * @@ -476,6 +712,9 @@ protected function applyCustomModuleMethods($modulesPath) ); }, $customModulePaths); + if (!isset($this->nonFlattenedEnabledModulePaths)) { + $this->nonFlattenedEnabledModulePaths = array_merge($modulePathsResult, $customModulePaths); + } return $this->flattenAllModulePaths(array_merge($modulePathsResult, $customModulePaths)); } @@ -489,6 +728,7 @@ private function removeBlacklistModules($modulePaths) { $modulePathsResult = $modulePaths; foreach ($modulePathsResult as $moduleName => $modulePath) { + // Remove module if it is in blacklist if (in_array($moduleName, $this->getModuleBlacklist())) { unset($modulePathsResult[$moduleName]); LoggingUtil::getInstance()->getLogger(ModuleResolver::class)->info( @@ -534,6 +774,10 @@ private function getModuleBlacklist() */ private function getRegisteredModuleList() { + if (!empty($this->registeredModuleList)) { + return $this->registeredModuleList; + } + if (array_key_exists('MAGENTO_BP', $_ENV)) { $autoloadPath = realpath(MAGENTO_BP . "/app/autoload.php"); if ($autoloadPath) { @@ -575,4 +819,43 @@ private function getBackendUrl() { return getenv('MAGENTO_BACKEND_BASE_URL') ?: getenv('MAGENTO_BASE_URL'); } + + /** + * Return possible vendor name from a path given + * + * @param string $path + * @return string + */ + private function getPossibleVendorModuleName($path) + { + $path = str_replace(DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR . 'Mftf', '', $path); + return $this->getPossibleVendorName($path) . '_' . basename($path); + } + + /** + * Return possible vendor name from a path given + * + * @param string $path + * @return string + */ + private function getPossibleVendorName($path) + { + $possibleVendorName = 'UnknownVendor'; + $dirPaths = [ + self::VENDOR, + self::APP_CODE, + self::DEV_TESTS + ]; + + foreach ($dirPaths as $dirPath) { + $regex = "~.+\\/" . $dirPath . "\/(?<" . self::VENDOR . ">[^\/]+)\/.+~"; + $match = []; + preg_match($regex, $path, $match); + if (isset($match[self::VENDOR])) { + $possibleVendorName = ucfirst($match[self::VENDOR]); + return $possibleVendorName; + } + } + return $possibleVendorName; + } } From 97fe09b981aac65b2ae982bbb4824d42b16ce6cf Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Thu, 5 Sep 2019 13:26:01 -0500 Subject: [PATCH 05/48] MQE-1650: Update MFTF configuration to read Test entities from new location --- .../Util/ComposerModuleResolver.php | 14 +--- .../Util/ModuleResolver.php | 84 ++++++++++++------- 2 files changed, 55 insertions(+), 43 deletions(-) diff --git a/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php index 9c1c2b114..9d3f79575 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php @@ -16,12 +16,6 @@ */ class ComposerModuleResolver { - /**#@+ - * Test module array keys - */ - const KEY_DEPENDS_ON = 'dependsOn'; - /**#@-*/ - /** * Code path array from composer json search * @@ -68,9 +62,7 @@ public function getComposerInstalledTestModules($rootComposerFile) foreach ($composerInstaller->getInstalledTestPackages() as $packageName => $packageData) { $suggestedModuleNames = $packageData[ComposerInstaller::KEY_PACKAGE_SUGGESTED_MAGENTO_MODULES]; $path = $packageData[ComposerInstaller::KEY_PACKAGE_INSTALLEDPATH]; - $this->installedTestModules[$path] = [ - self::KEY_DEPENDS_ON => $suggestedModuleNames - ]; + $this->installedTestModules[$path] = $suggestedModuleNames; } return $this->installedTestModules; } @@ -129,9 +121,7 @@ private function getTestModules($directory) $file ); $suggestedMagentoModuleNames = $composerInfo->getSuggestedMagentoModules(); - $module[$modulePath] = [ - self::KEY_DEPENDS_ON => $suggestedMagentoModuleNames - ]; + $module[$modulePath] = $suggestedMagentoModuleNames; $modules = array_merge_recursive($modules, $module); } } diff --git a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php index 13babafd9..be21f1add 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php @@ -38,6 +38,11 @@ class ModuleResolver */ const REGISTRAR_CLASS = "\Magento\Framework\Component\ComponentRegistrar"; + /** + * const for Test/Mftf + */ + const TEST_MFTF_PATTERN = 'Test' . DIRECTORY_SEPARATOR . 'Mftf'; + /** * const for vendor */ @@ -267,6 +272,8 @@ public function getModulesPath($flat = true) $allModulePaths = $this->mergeModulePaths($allModulePaths, $composerBsedModulePaths); + $allModulePaths = $this->normalizeModuleNames($allModulePaths); + if (MftfApplicationConfig::getConfig()->forceGenerateEnabled()) { $allModulePaths = $this->flipAndFlattenArray($allModulePaths); $this->enabledModulePaths = $this->applyCustomModuleMethods($allModulePaths); @@ -275,18 +282,18 @@ public function getModulesPath($flat = true) $enabledModules = array_merge($this->getEnabledModules(), $this->getModuleWhitelist()); //$enabledDirectoryPaths = $this->getEnabledDirectoryPaths($enabledModules, $allModulePaths); - $enabledDirectoryPaths = $this->flipAndFlattenArray($allModulePaths, $enabledModules); + $enabledDirectoryPaths = $this->flipAndFilterArray($allModulePaths, $enabledModules); $this->enabledModulePaths = $this->applyCustomModuleMethods($enabledDirectoryPaths); return $this->enabledModulePaths; } /** - * @param array $targetArray + * @param array $objectArray * @param array $filterArray * @return array */ - private function flipAndFlattenArray($objectArray, $filterArray = null) + private function flipAndFilterArray($objectArray, $filterArray = null) { $flippedArray = []; foreach ($objectArray as $path => $modules) { @@ -364,8 +371,8 @@ private function aggregateTestModulePaths() $codePathsToPattern = [ $modulePath => '', - $magentoBaseCodePath . $vendorCodePath => 'Test' . DIRECTORY_SEPARATOR . 'Mftf', - $magentoBaseCodePath . $appCodePath => 'Test' . DIRECTORY_SEPARATOR . 'Mftf', + $magentoBaseCodePath . $vendorCodePath => self::TEST_MFTF_PATTERN, + $magentoBaseCodePath . $appCodePath => self::TEST_MFTF_PATTERN, $magentoBaseCodePath . self::DEPRECATED_DEV_TESTS => '' ]; @@ -394,8 +401,6 @@ private function globRelevantPaths($testPath, $pattern) $relevantPaths = $this->globRelevantWrapper($testPath, $pattern); } - $allComponents = $this->getRegisteredModuleList(); - foreach ($relevantPaths as $codePath) { // Reduce magento/app/code/Magento/AdminGws/ to magento/app/code/Magento/AdminGws to read symlink // Symlinks must be resolved otherwise they will not match Magento's filepath to the module @@ -403,14 +408,8 @@ private function globRelevantPaths($testPath, $pattern) if (is_link($potentialSymlink)) { $codePath = realpath($potentialSymlink) . DIRECTORY_SEPARATOR . $pattern; } - - $mainModName = array_search($codePath, $allComponents); - if (!$mainModName) { - $mainModName = $this->getPossibleVendorName($codePath) - . '_' - . basename(str_replace($pattern, '', $codePath)); - } - $modulePaths[$mainModName][] = $codePath; + $mainModName = basename(str_replace($pattern, '', $codePath)); + $modulePaths[$codePath] = [$mainModName]; if (MftfApplicationConfig::getConfig()->verboseEnabled()) { LoggingUtil::getInstance()->getLogger(ModuleResolver::class)->debug( @@ -423,7 +422,7 @@ private function globRelevantPaths($testPath, $pattern) // Suppress print during unit testing if (MftfApplicationConfig::getConfig()->getPhase() !== MftfApplicationConfig::UNIT_TEST_PHASE && strpos($testPath, self::DEPRECATED_DEV_TESTS) !== false - && !empty($module) + && !empty($modulePaths) ) { $deprecatedPath = self::DEPRECATED_DEV_TESTS; $suggestedPath = self::DEV_TESTS . DIRECTORY_SEPARATOR . 'Vendor'; @@ -538,26 +537,49 @@ private function getComposerInstalledTestModulePaths($composerFile) } /** - * Merge an associated array in 1st argument with another flattened associated array in 2nd argument - * and process duplicates + * Merge code paths * - * @param array $nameKeyedArray - * @param array $pathKeyedArray + * @param array $oneToOneArray + * @param array $oneToManyArray * @return array */ - private function mergeModulePaths($nameKeyedArray, $pathKeyedArray) + private function mergeModulePaths($oneToOneArray, $oneToManyArray) { - $flippedArray = []; - foreach ($nameKeyedArray as $name => $path) { - $flippedArray[$path[0]] = [$name]; - } - foreach ($pathKeyedArray as $path => $modules) { + $mergedArray = $oneToOneArray; + foreach ($oneToManyArray as $path => $modules) { // Do nothing when array_key_exists - if (!array_key_exists($path, $flippedArray)) { - $flippedArray[$path] = $modules; + if (!array_key_exists($path, $oneToOneArray)) { + $mergedArray[$path] = $modules; } } - return $flippedArray; + return $mergedArray; + } + + /** + * Normalize module name if registered module list is available + * + * @param array $codePaths + * + * @return array + */ + private function normalizeModuleNames($codePaths) + { + $allComponents = $this->getRegisteredModuleList(); + if (empty($allComponents)) { + return $codePaths; + } + + $normalizedCodePaths = []; + foreach ($codePaths as $path => $moduleNames) { + $mainModName = array_search($path, $allComponents); + if ($mainModName) { + $normalizedCodePaths[$path] = [$mainModName]; + } else { + $normalizedCodePaths[$path] = $moduleNames; + } + } + + return $normalizedCodePaths; } /** @@ -800,7 +822,7 @@ private function getRegisteredModuleList() array_walk($allComponents, function (&$value) { // Magento stores component paths with unix DIRECTORY_SEPARATOR, need to stay uniform and convert $value = realpath($value); - $value .= '/Test/Mftf'; + $value .= DIRECTORY_SEPARATOR . self::TEST_MFTF_PATTERN; }); return $allComponents; } catch (TestFrameworkException $e) { @@ -828,7 +850,7 @@ private function getBackendUrl() */ private function getPossibleVendorModuleName($path) { - $path = str_replace(DIRECTORY_SEPARATOR . 'Test' . DIRECTORY_SEPARATOR . 'Mftf', '', $path); + $path = str_replace(DIRECTORY_SEPARATOR . self::TEST_MFTF_PATTERN, '', $path); return $this->getPossibleVendorName($path) . '_' . basename($path); } From ca9ab1180592c4bfec97ba80cddf2271e347f5a1 Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Thu, 5 Sep 2019 14:43:39 -0500 Subject: [PATCH 06/48] MQE-1650: Update MFTF configuration to read Test entities from new location --- .../Handlers/AbstractComposerHandler.php | 6 ++-- .../Util/ModuleResolver.php | 30 ++----------------- 2 files changed, 6 insertions(+), 30 deletions(-) diff --git a/src/Magento/FunctionalTestingFramework/Composer/Handlers/AbstractComposerHandler.php b/src/Magento/FunctionalTestingFramework/Composer/Handlers/AbstractComposerHandler.php index 1819c7571..b86ee22ff 100644 --- a/src/Magento/FunctionalTestingFramework/Composer/Handlers/AbstractComposerHandler.php +++ b/src/Magento/FunctionalTestingFramework/Composer/Handlers/AbstractComposerHandler.php @@ -113,8 +113,10 @@ protected function parseSuggestsForMagentoModuleNames($suggests) $parts = explode(',', $suggest); $data = []; foreach ($parts as $part) { - list($name, $value) = explode(':', $part, 2); - $data[strtolower(trim($name))] = trim($value); + if (strpos($part, ':') !== false) { + list($name, $value) = explode(':', $part, 2); + $data[strtolower(trim($name))] = trim($value); + } } if (isset($data[self::SUGGEST_TYPE]) diff --git a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php index be21f1add..2f3f63c13 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php @@ -275,13 +275,12 @@ public function getModulesPath($flat = true) $allModulePaths = $this->normalizeModuleNames($allModulePaths); if (MftfApplicationConfig::getConfig()->forceGenerateEnabled()) { - $allModulePaths = $this->flipAndFlattenArray($allModulePaths); + $allModulePaths = $this->flipAndFilterArray($allModulePaths); $this->enabledModulePaths = $this->applyCustomModuleMethods($allModulePaths); return $this->enabledModulePaths; } $enabledModules = array_merge($this->getEnabledModules(), $this->getModuleWhitelist()); - //$enabledDirectoryPaths = $this->getEnabledDirectoryPaths($enabledModules, $allModulePaths); $enabledDirectoryPaths = $this->flipAndFilterArray($allModulePaths, $enabledModules); $this->enabledModulePaths = $this->applyCustomModuleMethods($enabledDirectoryPaths); @@ -425,7 +424,7 @@ private function globRelevantPaths($testPath, $pattern) && !empty($modulePaths) ) { $deprecatedPath = self::DEPRECATED_DEV_TESTS; - $suggestedPath = self::DEV_TESTS . DIRECTORY_SEPARATOR . 'Vendor'; + $suggestedPath = self::DEV_TESTS . DIRECTORY_SEPARATOR . 'Magento'; LoggingUtil::getInstance()->getLogger(ModuleResolver::class)->warning( "DEPRECATION: $deprecatedPath is deprecated! Please move mftf test modules to $suggestedPath" ); @@ -600,31 +599,6 @@ private function flattenAllModulePaths($modulePaths) return $resultArray; } - /** - * Runs through enabled modules and maps them known module paths by name. - * @param array $enabledModules - * @param array $allModulePaths - * @return array - */ - private function getEnabledDirectoryPaths($enabledModules, $allModulePaths) - { - $enabledDirectoryPaths = []; - foreach ($enabledModules as $magentoModuleName) { - if (!isset($this->knownDirectories[$magentoModuleName]) && !isset($allModulePaths[$magentoModuleName])) { - continue; - } elseif (isset($this->knownDirectories[$magentoModuleName]) - && !isset($allModulePaths[$magentoModuleName])) { - LoggingUtil::getInstance()->getLogger(ModuleResolver::class)->warn( - "Known directory could not match to an existing path.", - ['knownDirectory' => $magentoModuleName] - ); - } else { - $enabledDirectoryPaths[$magentoModuleName] = $allModulePaths[$magentoModuleName]; - } - } - return $enabledDirectoryPaths; - } - /** * Executes a REST call to the supplied Magento Base Url for version information to display during generation * From b023da8b3cb5ee6ba5390715a067b570c0c4a989 Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Thu, 5 Sep 2019 16:01:57 -0500 Subject: [PATCH 07/48] MQE-1650: Update MFTF configuration to read Test entities from new location --- etc/config/.env.example | 2 +- .../FunctionalTestingFramework/Util/ModuleResolver.php | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/etc/config/.env.example b/etc/config/.env.example index f4aa90e51..f25cb3de7 100644 --- a/etc/config/.env.example +++ b/etc/config/.env.example @@ -43,7 +43,7 @@ BROWSER=chrome #DEFAULT_TIMEZONE=America/Los_Angeles #*** These properties impact the modules loaded into MFTF, you can point to your own full path, or a custom set of modules located with the core set -MODULE_WHITELIST=Magento_Framework,Magento_ConfigurableProductWishlist,Magento_ConfigurableProductCatalogSearch +MODULE_WHITELIST=Magento_Framework,ConfigurableProductWishlist,ConfigurableProductCatalogSearch #CUSTOM_MODULE_PATHS= #*** Bool property which allows the user to toggle debug output during test execution diff --git a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php index 2f3f63c13..64345664f 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php @@ -298,7 +298,11 @@ private function flipAndFilterArray($objectArray, $filterArray = null) foreach ($objectArray as $path => $modules) { if (count($modules) == 1) { if (!is_array($filterArray) - || (is_array($filterArray) && in_array($modules[0], $filterArray))) { + || (is_array($filterArray) && in_array($modules[0], $filterArray)) + || isset($this->knownDirectories[$modules[0]])) { + if (strpos($modules[0], '_') === false) { + $modules[0] = $this->getPossibleVendorName($path); + } $flippedArray[$modules[0]] = $path; } } else { From ffe8895f85a3d40e631e8c490ea1cfacc808113e Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Thu, 5 Sep 2019 16:59:45 -0500 Subject: [PATCH 08/48] MQE-1650: Update MFTF configuration to read Test entities from new location --- .../Util/ModulePathExtractorTest.php | 14 +++++++------- .../Util/ModulePathExtractor.php | 4 ++-- .../Util/ModuleResolver.php | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php index 4fb18d383..05bc99b89 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php @@ -18,13 +18,13 @@ class ModulePathExtractorTest extends MagentoTestCase * @var array */ private $mockTestModulePaths = [ - 'Magento_ModuleA' => ['/base/path/app/code/Magento/ModuleA/Test/Mftf'], - 'VendorB_ModuleB' => ['/base/path/app/code/VendorB/ModuleB/Test/Mftf'], - 'Magento_ModuleC' => ['/base/path/dev/tests/acceptance/tests/functional/Magento/ModuleCTest'], - 'VendorD_ModuleD' => ['/base/path/dev/tests/acceptance/tests/functional/VendorD/ModuleDTest'], - 'SomeModuleE' => ['/base/path/dev/tests/acceptance/tests/functional/FunctionalTest/SomeModuleE'], - 'Magento_ModuleF' => ['/base/path/vendor/magento/module-modulef/Test/Mftf'], - 'VendorG_ModuleG' => ['/base/path/vendor/vendorg/module-moduleg-test'], + 'Magento_ModuleA' => '/base/path/app/code/Magento/ModuleA/Test/Mftf', + 'VendorB_ModuleB' => '/base/path/app/code/VendorB/ModuleB/Test/Mftf', + 'Magento_ModuleC' => '/base/path/dev/tests/acceptance/tests/functional/Magento/ModuleCTest', + 'VendorD_ModuleD' => '/base/path/dev/tests/acceptance/tests/functional/VendorD/ModuleDTest', + 'SomeModuleE' => '/base/path/dev/tests/acceptance/tests/functional/FunctionalTest/SomeModuleE', + 'Magento_ModuleF' => '/base/path/vendor/magento/module-modulef/Test/Mftf', + 'VendorG_ModuleG' => '/base/path/vendor/vendorg/module-moduleg-test', ]; /** diff --git a/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php b/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php index c962782b1..24d06e3be 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php @@ -91,8 +91,8 @@ private function extractKeyByPath($path) } $paths = array_slice($paths, 0, count($paths)-2); $shortenedPath = implode(DIRECTORY_SEPARATOR, $paths); - foreach ($this->testModulePaths as $key => $pathArr) { - if (isset($pathArr[0]) && $pathArr[0] == $shortenedPath) { + foreach ($this->testModulePaths as $key => $keyValue) { + if ( $keyValue == $shortenedPath) { return $key; } } diff --git a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php index 64345664f..6ee1207cb 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php @@ -301,7 +301,7 @@ private function flipAndFilterArray($objectArray, $filterArray = null) || (is_array($filterArray) && in_array($modules[0], $filterArray)) || isset($this->knownDirectories[$modules[0]])) { if (strpos($modules[0], '_') === false) { - $modules[0] = $this->getPossibleVendorName($path); + $modules[0] = $this->getPossibleVendorName($path) . '_' . $modules[0]; } $flippedArray[$modules[0]] = $path; } From 7f6ef274ecaf390194efafa778c2ca0e5a4d0db6 Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Fri, 6 Sep 2019 09:58:58 -0500 Subject: [PATCH 09/48] MQE-1650: Update MFTF configuration to read Test entities from new location --- .../unit/Util/MockModuleResolverBuilder.php | 8 +- .../Util/ComposerModuleResolver.php | 12 +- .../Util/ModulePathExtractor.php | 7 +- .../Util/ModuleResolver.php | 167 ++++++++++-------- 4 files changed, 106 insertions(+), 88 deletions(-) diff --git a/dev/tests/unit/Util/MockModuleResolverBuilder.php b/dev/tests/unit/Util/MockModuleResolverBuilder.php index 73ef624f6..48adc78df 100644 --- a/dev/tests/unit/Util/MockModuleResolverBuilder.php +++ b/dev/tests/unit/Util/MockModuleResolverBuilder.php @@ -43,14 +43,18 @@ public function setup($paths = null) $mockResolver = AspectMock::double( ModuleResolver::class, - ['getAdminToken' => false, 'globRelevantPaths' => [], 'getEnabledModules' => []] + [ + 'getAdminToken' => false, + 'globRelevantPaths' => [], + 'getEnabledModules' => [] + ] ); $instance = AspectMock::double(ObjectManager::class, ['create' => $mockResolver->make(), 'get' => null]) ->make(); AspectMock::double(ObjectManagerFactory::class, ['getObjectManager' => $instance]); $resolver = ModuleResolver::getInstance(); - $property = new \ReflectionProperty(ModuleResolver::class, 'nonFlattenedEnabledModulePaths'); + $property = new \ReflectionProperty(ModuleResolver::class, 'enabledModuleNameAndPaths'); $property->setAccessible(true); $property->setValue($resolver, $paths); } diff --git a/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php index 9d3f79575..839e10da0 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php @@ -12,7 +12,7 @@ use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; /** - * Module Resolver by parsing test modules's composer json file + * Composer Based Module Resolver */ class ComposerModuleResolver { @@ -24,7 +24,7 @@ class ComposerModuleResolver private $searchedTestModules = null; /** - * Code path array from composer installed test package + * Code path array from composer installed test packages * * @var array */ @@ -38,7 +38,7 @@ public function __construct() } /** - * Get possible test module code paths from a root composer json + * Get code paths for installed test modules * * @param string $rootComposerFile * @return array @@ -50,7 +50,7 @@ public function getComposerInstalledTestModules($rootComposerFile) return $this->installedTestModules; } - if (!is_file($rootComposerFile ) || substr($rootComposerFile, -13) != "composer.json") { + if (!is_file($rootComposerFile) || substr($rootComposerFile, -13) != 'composer.json') { throw new TestFrameworkException("Invalid root composer json file: {$rootComposerFile}"); } @@ -68,7 +68,7 @@ public function getComposerInstalledTestModules($rootComposerFile) } /** - * Get possible test module code paths for input directories + * Get code paths by searching test module composer json file from input directories * * @param array $directories * @return array @@ -91,7 +91,7 @@ public function getTestModulesFromPaths($directories) } /** - * Get possible test module code paths for a input directory + * Get code paths by searching test module composer json file from input directory * * @param string $directory * @return array diff --git a/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php b/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php index 24d06e3be..1ec556743 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php @@ -25,8 +25,9 @@ class ModulePathExtractor */ public function __construct() { + $verbose = true; if (empty($this->testModulePaths)) { - $this->testModulePaths = ModuleResolver::getInstance()->getModulesPath(false); + $this->testModulePaths = ModuleResolver::getInstance()->getModulesPath($verbose); } } @@ -91,8 +92,8 @@ private function extractKeyByPath($path) } $paths = array_slice($paths, 0, count($paths)-2); $shortenedPath = implode(DIRECTORY_SEPARATOR, $paths); - foreach ($this->testModulePaths as $key => $keyValue) { - if ( $keyValue == $shortenedPath) { + foreach ($this->testModulePaths as $key => $value) { + if ($value == $shortenedPath) { return $key; } } diff --git a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php index 6ee1207cb..36592a130 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php @@ -91,11 +91,11 @@ class ModuleResolver protected $enabledModulePaths = null; /** - * Paths for non flattened enabled modules. + * Name and path for enabled modules * * @var array|null */ - protected $nonFlattenedEnabledModulePaths = null; + protected $enabledModuleNameAndPaths = null; /** * Configuration instance. @@ -156,7 +156,7 @@ class ModuleResolver ]; /** - * Registered module list in magento instance being tested + * Registered module list in magento system under test * * @var array */ @@ -249,83 +249,50 @@ public function getEnabledModules() /** * Return the modules path based on which modules are enabled in the target Magento instance. * - * @param boolean $flat + * @param boolean $verbose * @return array */ - public function getModulesPath($flat = true) + public function getModulesPath($verbose = false) { - if (isset($this->enabledModulePaths) && $flat) { + if (isset($this->enabledModulePaths) && !$verbose) { return $this->enabledModulePaths; } - if (isset($this->nonFlattenedEnabledModulePaths) && !$flat) { - return $this->nonFlattenedEnabledModulePaths; + if (isset($this->enabledModuleNameAndPaths) && $verbose) { + return $this->enabledModuleNameAndPaths; } + // Find test modules paths by searching patterns (Test/Mftf, etc) $allModulePaths = $this->aggregateTestModulePaths(); - $composerBsedModulePaths = $this->aggregateTestModulePathsFromComposerJson(); - $composerBsedModulePaths = array_merge( - $composerBsedModulePaths, + // Find test modules paths by searching test composer.json files + $composerBasedModulePaths = $this->aggregateTestModulePathsFromComposerJson(); + + // Find test modules paths by querying composer installed packages + $composerBasedModulePaths = array_merge( + $composerBasedModulePaths, $this->aggregateTestModulePathsFromComposerInstaller() ); - $allModulePaths = $this->mergeModulePaths($allModulePaths, $composerBsedModulePaths); + // Merge test module paths altogether + $allModulePaths = $this->mergeModulePaths($allModulePaths, $composerBasedModulePaths); + // Normalize module names if we get registered module names from Magento system $allModulePaths = $this->normalizeModuleNames($allModulePaths); if (MftfApplicationConfig::getConfig()->forceGenerateEnabled()) { - $allModulePaths = $this->flipAndFilterArray($allModulePaths); + $allModulePaths = $this->flipAndFilterModulePathsArray($allModulePaths); $this->enabledModulePaths = $this->applyCustomModuleMethods($allModulePaths); return $this->enabledModulePaths; } $enabledModules = array_merge($this->getEnabledModules(), $this->getModuleWhitelist()); - $enabledDirectoryPaths = $this->flipAndFilterArray($allModulePaths, $enabledModules); - + $enabledDirectoryPaths = $this->flipAndFilterModulePathsArray($allModulePaths, $enabledModules); $this->enabledModulePaths = $this->applyCustomModuleMethods($enabledDirectoryPaths); - return $this->enabledModulePaths; - } - /** - * @param array $objectArray - * @param array $filterArray - * @return array - */ - private function flipAndFilterArray($objectArray, $filterArray = null) - { - $flippedArray = []; - foreach ($objectArray as $path => $modules) { - if (count($modules) == 1) { - if (!is_array($filterArray) - || (is_array($filterArray) && in_array($modules[0], $filterArray)) - || isset($this->knownDirectories[$modules[0]])) { - if (strpos($modules[0], '_') === false) { - $modules[0] = $this->getPossibleVendorName($path) . '_' . $modules[0]; - } - $flippedArray[$modules[0]] = $path; - } - } else { - if (!is_array($filterArray)) { - $flippedArray[$this->getPossibleVendorModuleName($path)] = $path; - } else { - $skip = false; - foreach ($modules as $module) { - if(!in_array($module, $filterArray)) { - $skip = true; - break; - } - } - if (!$skip) { - $flippedArray[$this->getPossibleVendorModuleName($path)] = $path; - } - } - } - } - return $flippedArray; + return $this->enabledModulePaths; } - /** * Sort files according module sequence. * @@ -422,18 +389,21 @@ private function globRelevantPaths($testPath, $pattern) } } - // Suppress print during unit testing - if (MftfApplicationConfig::getConfig()->getPhase() !== MftfApplicationConfig::UNIT_TEST_PHASE - && strpos($testPath, self::DEPRECATED_DEV_TESTS) !== false - && !empty($modulePaths) - ) { + if (strpos($testPath, self::DEPRECATED_DEV_TESTS) !== false && !empty($modulePaths)) { $deprecatedPath = self::DEPRECATED_DEV_TESTS; $suggestedPath = self::DEV_TESTS . DIRECTORY_SEPARATOR . 'Magento'; - LoggingUtil::getInstance()->getLogger(ModuleResolver::class)->warning( - "DEPRECATION: $deprecatedPath is deprecated! Please move mftf test modules to $suggestedPath" - ); - print ("\nDEPRECATION: $deprecatedPath is deprecated! Please move mftf tests to $suggestedPath\n\n"); + $message = "DEPRECATION: Found MFTF test modules in the deprecated path: $deprecatedPath." + . " Move these test modules to $suggestedPath."; + + if (MftfApplicationConfig::getConfig()->verboseEnabled()) { + LoggingUtil::getInstance()->getLogger(ModuleResolver::class)->warning($message); + } + // Suppress print during unit testing + if (MftfApplicationConfig::getConfig()->getPhase() !== MftfApplicationConfig::UNIT_TEST_PHASE) { + print ("\n$message\n\n"); + } } + return $modulePaths; } @@ -458,16 +428,16 @@ private static function globRelevantWrapper($testPath, $pattern) } /** - * Retrieves all code paths by searching composer json where might contain pertinent test modules + * Aggregate all code paths with test module composer json files * * @return array */ private function aggregateTestModulePathsFromComposerJson() { - // Define the Module paths from magento bp + // Define the module paths $magentoBaseCodePath = MAGENTO_BP; - // Define the Module paths from default TESTS_MODULE_PATH + // Define the module paths from default TESTS_MODULE_PATH $modulePath = defined('TESTS_MODULE_PATH') ? TESTS_MODULE_PATH : TESTS_BP; $modulePath = rtrim($modulePath, DIRECTORY_SEPARATOR); @@ -484,7 +454,7 @@ private function aggregateTestModulePathsFromComposerJson() } /** - * Retrieve composer json based test module paths from give $codePath + * Retrieve all module code paths that have test module composer json files * * @param array $codePaths * @return array @@ -505,13 +475,13 @@ private function getComposerJsonTestModulePaths($codePaths) } /** - * Retrieves all module directories which might contain pertinent test code. + * Aggregate all code paths with composer installed test modules * * @return array */ private function aggregateTestModulePathsFromComposerInstaller() { - // Define the Module paths from magento bp + // Define the module paths $magentoBaseCodePath = MAGENTO_BP; $composerFile = $magentoBaseCodePath . DIRECTORY_SEPARATOR . 'composer.json'; @@ -519,7 +489,7 @@ private function aggregateTestModulePathsFromComposerInstaller() } /** - * Retrieve composer json based test module paths from give $codePath + * Retrieve composer installed test module code paths * * @params string $composerFile * @return array @@ -539,6 +509,49 @@ private function getComposerInstalledTestModulePaths($composerFile) return $this->composerInstalledModulePaths; } + /** + * Flip and filter module code paths + * when + * + * @param array $objectArray + * @param array $filterArray + * @return array + */ + private function flipAndFilterModulePathsArray($objectArray, $filterArray = null) + { + $flippedArray = []; + foreach ($objectArray as $path => $modules) { + // One path maps to one module + if (count($modules) == 1) { + if (!is_array($filterArray) + || (is_array($filterArray) && in_array($modules[0], $filterArray)) + || isset($this->knownDirectories[$modules[0]])) { + if (strpos($modules[0], '_') === false) { + $modules[0] = $this->findVendorNameFromPath($path) . '_' . $modules[0]; + } + $flippedArray[$modules[0]] = $path; + } + } else { + // One path maps to multiple modules + if (!is_array($filterArray)) { + $flippedArray[$this->findVendorAndModuleNameFromPath($path)] = $path; + } else { + $skip = false; + foreach ($modules as $module) { + if (!in_array($module, $filterArray)) { + $skip = true; + break; + } + } + if (!$skip) { + $flippedArray[$this->findVendorAndModuleNameFromPath($path)] = $path; + } + } + } + } + return $flippedArray; + } + /** * Merge code paths * @@ -712,8 +725,8 @@ protected function applyCustomModuleMethods($modulesPath) ); }, $customModulePaths); - if (!isset($this->nonFlattenedEnabledModulePaths)) { - $this->nonFlattenedEnabledModulePaths = array_merge($modulePathsResult, $customModulePaths); + if (!isset($this->enabledModuleNameAndPaths)) { + $this->enabledModuleNameAndPaths = array_merge($modulePathsResult, $customModulePaths); } return $this->flattenAllModulePaths(array_merge($modulePathsResult, $customModulePaths)); } @@ -821,24 +834,24 @@ private function getBackendUrl() } /** - * Return possible vendor name from a path given + * Find vendor and module name from path * * @param string $path * @return string */ - private function getPossibleVendorModuleName($path) + private function findVendorAndModuleNameFromPath($path) { $path = str_replace(DIRECTORY_SEPARATOR . self::TEST_MFTF_PATTERN, '', $path); - return $this->getPossibleVendorName($path) . '_' . basename($path); + return $this->findVendorNameFromPath($path) . '_' . basename($path); } /** - * Return possible vendor name from a path given + * Find vendor name from path * * @param string $path * @return string */ - private function getPossibleVendorName($path) + private function findVendorNameFromPath($path) { $possibleVendorName = 'UnknownVendor'; $dirPaths = [ From 0daf945b96a489422f240331d78a3578fa5f037d Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Mon, 9 Sep 2019 10:48:25 -0500 Subject: [PATCH 10/48] MQE-1650: Update MFTF configuration to read Test entities from new location - fix unit tests --- .../Test/Handlers/TestObjectHandlerTest.php | 6 +- .../Util/ModuleResolverTest.php | 123 +++++++++++++----- .../unit/Util/MockModuleResolverBuilder.php | 4 +- dev/tests/unit/Util/TestDataArrayBuilder.php | 2 +- .../Util/ModuleResolver.php | 19 ++- 5 files changed, 113 insertions(+), 41 deletions(-) diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php index 117cc5c2d..dd0dddc1c 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php @@ -181,7 +181,7 @@ public function testGetTestWithModuleName() ->build(); $resolverMock = new MockModuleResolverBuilder(); - $resolverMock->setup(['Vendor_' . $moduleExpected => [$filepath]]); + $resolverMock->setup(['Vendor_' . $moduleExpected => $filepath]); $this->setMockParserOutput(['tests' => $mockData]); // Execute Test Method @@ -209,6 +209,8 @@ public function testGetTestObjectWithInvalidExtends() ->withBeforeHook() ->withTestActions() ->build(); + $resolverMock = new MockModuleResolverBuilder(); + $resolverMock->setup(); $this->setMockParserOutput(['tests' => $testOne]); $toh = TestObjectHandler::getInstance(); @@ -245,6 +247,8 @@ public function testGetAllTestObjectsWithInvalidExtends() ->withTestActions() ->build(); + $resolverMock = new MockModuleResolverBuilder(); + $resolverMock->setup(); $this->setMockParserOutput(['tests' => array_merge($testOne, $testTwo)]); $toh = TestObjectHandler::getInstance(); diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php index a270afaf8..1d4b77740 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php @@ -56,22 +56,29 @@ public function testGetModulePathsAlreadySet() */ public function testGetModulePathsAggregate() { + $this->mockForceGenerate(false); $this->setMockResolverClass( false, null, null, null, - ["Magento_example" => "example" . DIRECTORY_SEPARATOR . "paths"] + [ + 'some' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'example' => ['example'], + 'other' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'sample' => ['sample'], + ], + null, + [ + 'Magento_example' => 'some' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'example', + 'Magento_sample' => 'other' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'sample', + ] ); $resolver = ModuleResolver::getInstance(); - $this->setMockResolverProperties($resolver, null, [0 => "Magento_example"]); + $this->setMockResolverProperties($resolver, null, [0 => 'Magento_example', 1 => 'Magento_sample']); $this->assertEquals( [ - "example" . DIRECTORY_SEPARATOR . "paths", - "example" . DIRECTORY_SEPARATOR . "paths", - "example" . DIRECTORY_SEPARATOR . "paths", - "example" . DIRECTORY_SEPARATOR . "paths" + 'some' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'example', + 'other' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'sample' ], $resolver->getModulesPath() ); @@ -91,20 +98,28 @@ public function testGetModulePathsLocations() $this->mockForceGenerate(false); $mockResolver = $this->setMockResolverClass( true, - [0 => "example"], + [], null, null, - ["example" => "example" . DIRECTORY_SEPARATOR . "paths"] + [], + [], + [], + [], + [], + [], + [], + null, + function ($arg) { + return $arg; + }, + function ($arg) { + return $arg; + } ); $resolver = ModuleResolver::getInstance(); $this->setMockResolverProperties($resolver, null, null); $this->assertEquals( - [ - "example" . DIRECTORY_SEPARATOR . "paths", - "example" . DIRECTORY_SEPARATOR . "paths", - "example" . DIRECTORY_SEPARATOR . "paths", - "example" . DIRECTORY_SEPARATOR . "paths" - ], + [], $resolver->getModulesPath() ); @@ -114,8 +129,6 @@ public function testGetModulePathsLocations() // Define the Module paths from default TESTS_MODULE_PATH $modulePath = defined('TESTS_MODULE_PATH') ? TESTS_MODULE_PATH : TESTS_BP; - - $mockResolver->verifyInvoked('globRelevantPaths', [$modulePath, '']); $mockResolver->verifyInvoked( 'globRelevantPaths', @@ -150,14 +163,21 @@ public function testGetModulePathsLocations() */ public function testGetCustomModulePath() { - $this->setMockResolverClass(false, ["Magento_TestModule"], null, null, [], ['otherPath']); + $this->setMockResolverClass( + false, + null, + null, + null, + [], + ['Magento_Module' => 'otherPath'] + ); $resolver = ModuleResolver::getInstance(); $this->setMockResolverProperties($resolver, null, null, null); $this->assertEquals(['otherPath'], $resolver->getModulesPath()); TestLoggingUtil::getInstance()->validateMockLogStatement( 'info', 'including custom module', - ['module' => 'otherPath'] + ['Magento_Module' => 'otherPath'] ); } @@ -172,25 +192,36 @@ public function testGetModulePathsBlacklist() null, null, null, - function ($arg1, $arg2) { - if ($arg2 === "") { - $mockValue = ["somePath" => "somePath"]; - } else { - $mockValue = ["lastPath" => "lastPath"]; - } - return $mockValue; + [], + [], + [], + [], + [], + [], + [], + [ + "vendor" => "vendor", + "appCode" => "appCode", + "devTests" => "devTests", + "thisPath" => "thisPath" + ], + function ($arg) { + return $arg; + }, + function ($arg) { + return $arg; } ); $resolver = ModuleResolver::getInstance(); - $this->setMockResolverProperties($resolver, null, null, ["somePath"]); + $this->setMockResolverProperties($resolver, null, null, ["devTests" => "devTests"]); $this->assertEquals( - ["lastPath", "lastPath"], + ["vendor", "appCode", "thisPath"], $resolver->getModulesPath() ); TestLoggingUtil::getInstance()->validateMockLogStatement( 'info', 'excluding module', - ['module' => 'somePath'] + ['module' => 'devTests'] ); } @@ -278,6 +309,14 @@ public function testGetAdminTokenWithBadResponse() * @param string[] $mockGlob * @param string[] $mockRelativePaths * @param string[] $mockCustomModules + * @param string[] $mockGetRegisteredModuleList + * @param string[] $mockAggregateTestModulePathsFromComposerJson + * @param string[] $mockAggregateTestModulePathsFromComposerInstaller + * @param string[] $mockGetComposerJsonTestModulePaths + * @param string[] $mockGetComposerInstalledTestModulePaths + * @param string[] $mockAggregateTestModulePaths + * @param string[] $mockNormalizeModuleNames + * @param string[] $mockFlipAndFilterModulePathsArray * @throws \Exception * @return Verifier ModuleResolver double */ @@ -287,7 +326,15 @@ private function setMockResolverClass( $mockCustomMethods = null, $mockGlob = null, $mockRelativePaths = null, - $mockCustomModules = null + $mockCustomModules = null, + $mockGetRegisteredModuleList = null, + $mockAggregateTestModulePathsFromComposerJson = [], + $mockAggregateTestModulePathsFromComposerInstaller = [], + $mockGetComposerJsonTestModulePaths = [], + $mockGetComposerInstalledTestModulePaths = [], + $mockAggregateTestModulePaths = null, + $mockNormalizeModuleNames = null, + $mockFlipAndFilterModulePathsArray = null ) { $property = new \ReflectionProperty(ModuleResolver::class, 'instance'); $property->setAccessible(true); @@ -312,7 +359,23 @@ private function setMockResolverClass( if (isset($mockCustomModules)) { $mockMethods['getCustomModulePaths'] = $mockCustomModules; } -// $mockMethods['printMagentoVersionInfo'] = null; + if (isset($mockGetRegisteredModuleList)) { + $mockMethods['getRegisteredModuleList'] = $mockGetRegisteredModuleList; + } + $mockMethods['aggregateTestModulePathsFromComposerJson'] = $mockAggregateTestModulePathsFromComposerJson ?? []; + $mockMethods['aggregateTestModulePathsFromComposerInstaller'] = + $mockAggregateTestModulePathsFromComposerInstaller ?? []; + $mockMethods['getComposerJsonTestModulePaths'] = $mockGetComposerJsonTestModulePaths ?? []; + $mockMethods['getComposerInstalledTestModulePaths'] = $mockGetComposerInstalledTestModulePaths ?? []; + if (isset($mockAggregateTestModulePaths)) { + $mockMethods['aggregateTestModulePaths'] = $mockAggregateTestModulePaths; + } + if (isset($mockNormalizeModuleNames)) { + $mockMethods['normalizeModuleNames'] = $mockNormalizeModuleNames; + } + if (isset($mockFlipAndFilterModulePathsArray)) { + $mockMethods['flipAndFilterModulePathsArray'] = $mockFlipAndFilterModulePathsArray; + } $mockResolver = AspectMock::double( ModuleResolver::class, diff --git a/dev/tests/unit/Util/MockModuleResolverBuilder.php b/dev/tests/unit/Util/MockModuleResolverBuilder.php index 48adc78df..0e1b6fc31 100644 --- a/dev/tests/unit/Util/MockModuleResolverBuilder.php +++ b/dev/tests/unit/Util/MockModuleResolverBuilder.php @@ -18,7 +18,7 @@ class MockModuleResolverBuilder * * @var array */ - private $defaultPaths = ['Magento_Module' => ['/base/path/app/code/Magento/Module/Test/Mftf']]; + private $defaultPaths = ['Magento_Module' => '/base/path/some/other/path/Magento/Module']; /** * Mock ModuleResolver builder @@ -29,7 +29,7 @@ class MockModuleResolverBuilder */ public function setup($paths = null) { - if (!empty($path)) { + if (empty($paths)) { $paths = $this->defaultPaths; } diff --git a/dev/tests/unit/Util/TestDataArrayBuilder.php b/dev/tests/unit/Util/TestDataArrayBuilder.php index aeeeae850..eb192e040 100644 --- a/dev/tests/unit/Util/TestDataArrayBuilder.php +++ b/dev/tests/unit/Util/TestDataArrayBuilder.php @@ -225,7 +225,7 @@ public function withFileName($filename = null) */ public function withTestReference($reference = null) { - if ($reference != null) { + if ($reference !== null) { $this->testReference = $reference; } diff --git a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php index 36592a130..20014a58d 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php @@ -718,12 +718,12 @@ protected function applyCustomModuleMethods($modulesPath) $modulePathsResult = $this->removeBlacklistModules($modulesPath); $customModulePaths = $this->getCustomModulePaths(); - array_map(function ($value) { + array_map(function ($key, $value) { LoggingUtil::getInstance()->getLogger(ModuleResolver::class)->info( "including custom module", - ['module' => $value] + [$key => $value] ); - }, $customModulePaths); + }, array_keys($customModulePaths), $customModulePaths); if (!isset($this->enabledModuleNameAndPaths)) { $this->enabledModuleNameAndPaths = array_merge($modulePathsResult, $customModulePaths); @@ -761,13 +761,18 @@ private function removeBlacklistModules($modulePaths) */ private function getCustomModulePaths() { - $customModulePaths = getenv(self::CUSTOM_MODULE_PATHS); + $customModulePaths = []; + $paths = getenv(self::CUSTOM_MODULE_PATHS); - if (!$customModulePaths) { - return []; + if (!$paths) { + return $customModulePaths; + } + + foreach (explode(',', $paths) as $path) { + $customModulePaths = [$this->findVendorAndModuleNameFromPath(trim($path)) => $path]; } - return array_map('trim', explode(',', $customModulePaths)); + return $customModulePaths; } /** From 94b67a747ce2fb2a44a7159613dbfac96ad0f021 Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Mon, 9 Sep 2019 12:05:37 -0500 Subject: [PATCH 11/48] MQE-1650: Update MFTF configuration to read Test entities from new location - fix static md errors --- src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php index 20014a58d..7944ae98d 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php @@ -15,6 +15,7 @@ * Class ModuleResolver, resolve module path based on enabled modules of target Magento instance. * * @api + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class ModuleResolver { @@ -516,6 +517,7 @@ private function getComposerInstalledTestModulePaths($composerFile) * @param array $objectArray * @param array $filterArray * @return array + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ private function flipAndFilterModulePathsArray($objectArray, $filterArray = null) { From 163936163cd26f7124b0495fadaaa150c2658b43 Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Wed, 18 Sep 2019 15:25:41 -0500 Subject: [PATCH 12/48] MQE-1650: Update MFTF configuration to read Test entities from new location - improvement in ComposerJsonFinder --- .../Composer/Util/ComposerJsonFinder.php | 32 +++++++++++++++++++ .../Util/ComposerModuleResolver.php | 2 +- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/Magento/FunctionalTestingFramework/Composer/Util/ComposerJsonFinder.php b/src/Magento/FunctionalTestingFramework/Composer/Util/ComposerJsonFinder.php index 628c1190b..189a7f6fe 100644 --- a/src/Magento/FunctionalTestingFramework/Composer/Util/ComposerJsonFinder.php +++ b/src/Magento/FunctionalTestingFramework/Composer/Util/ComposerJsonFinder.php @@ -5,6 +5,8 @@ */ namespace Magento\FunctionalTestingFramework\Composer\Util; +use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; + /** * Class ComposerJsonFinder searches composer json file for possible test module code paths */ @@ -33,4 +35,34 @@ public function findAllComposerJsonFiles($directory) return $jsonFileList; } } + + /** + * Find absolute paths of all composer json files in a given directory at certain depths + * + * @param string $directory + * @param integer $depth + * @return array + */ + public function finComposerJsonFilesAtDepth($directory, $depth) + { + $directory = realpath($directory); + $jsonPattern = DIRECTORY_SEPARATOR . "composer.json"; + $subDirectoryPattern = DIRECTORY_SEPARATOR . "*"; + + $jsonFileList = []; + if ($depth > 0) { + foreach (glob($directory . $subDirectoryPattern, GLOB_ONLYDIR) as $dir) { + $jsonFileList = array_merge_recursive( + $jsonFileList, + self::finComposerJsonFilesAtDepth($dir, $depth-1) + ); + } + } elseif ($depth == 0) { + $jsonFileList = glob($directory . $jsonPattern); + if ($jsonFileList === false) { + $jsonFileList = []; + } + } + return $jsonFileList; + } } diff --git a/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php index 839e10da0..9f9ea5cb1 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php @@ -107,7 +107,7 @@ private function getTestModules($directory) // Find all composer json files under directory $modules = []; $jsonFinder = new ComposerJsonFinder(); - $fileList = $jsonFinder->findAllComposerJsonFiles($normalizedDir); + $fileList = $jsonFinder->finComposerJsonFilesAtDepth($normalizedDir, 2); foreach ($fileList as $file) { // Parse composer json for test module name and path information $composerInfo = new ComposerPackager( From 67751aec87ad33073c4917ad780e483e1f2ac321 Mon Sep 17 00:00:00 2001 From: Tom Reece Date: Wed, 18 Sep 2019 15:46:37 -0500 Subject: [PATCH 13/48] MQE-1763: Investigate and fix failure due to absence of AcceptanceTester class --- docs/troubleshooting.md | 34 +++++++++++++++++++ .../Console/BuildProjectCommand.php | 21 ++++++------ 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index d546c4e15..fe64ea0e6 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -2,6 +2,40 @@ Having a little trouble with the MFTF? See some common errors and fixes below. +## AcceptanceTester class issues + +If you see the following error: + +```terminal +AcceptanceTester class doesn't exist in suite folder. +Run the 'build' command to generate it +``` + +#### Reason + +Something went wrong during the `mftf build:project` command that prevented the creation of the AcceptanceTester class. + +#### Solution + +This issue is fixed in MFTF 2.5.0. + +In versions of MFTF lower than 2.5.0 you should: + +1. Open the functional.suite.yml file at: + ```terminal + /dev/tests/acceptance/tests/functional.suite.yml + ``` +2. Add quotation marks (`"`) around these values: + 1. `%SELENIUM_HOST%` + 2. `%SELENIUM_PORT%` + 3. `%SELENIUM_PROTOCOL%` + 4. `%SELENIUM_PATH%` +3. Run the `vendor/bin/mftf build:project` command again. +4. You should see the AcceptanceTester class is created at: + ```terminal + /vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/AcceptanceTester.php + ``` + ## WebDriver issues Troubleshoot your WebDriver issues on various browsers. diff --git a/src/Magento/FunctionalTestingFramework/Console/BuildProjectCommand.php b/src/Magento/FunctionalTestingFramework/Console/BuildProjectCommand.php index 6b421a332..1de5345aa 100644 --- a/src/Magento/FunctionalTestingFramework/Console/BuildProjectCommand.php +++ b/src/Magento/FunctionalTestingFramework/Console/BuildProjectCommand.php @@ -7,6 +7,7 @@ namespace Magento\FunctionalTestingFramework\Console; +use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; use Magento\FunctionalTestingFramework\Util\Logger\LoggingUtil; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\ArrayInput; @@ -94,14 +95,16 @@ protected function execute(InputInterface $input, OutputInterface $output) $process->setWorkingDirectory(TESTS_BP); $process->setIdleTimeout(600); $process->setTimeout(0); - $process->run( + $codeceptReturnCode = $process->run( function ($type, $buffer) use ($output) { - if ($output->isVerbose()) { - $output->write($buffer); - } + $output->write($buffer); } ); + if ($codeceptReturnCode !== 0) { + throw new TestFrameworkException("The codecept build command failed unexpectedly. Please see the above output for more details."); + } + if ($input->getOption('upgrade')) { $upgradeCommand = new UpgradeTestsCommand(); $upgradeOptions = new ArrayInput(['path' => TESTS_MODULE_PATH]); @@ -133,9 +136,7 @@ private function generateConfigFiles(OutputInterface $output) $output->writeln("codeception.yml configuration successfully applied."); } - if ($output->isVerbose()) { - $output->writeln("codeception.yml applied to " . TESTS_BP . DIRECTORY_SEPARATOR . 'codeception.yml'); - } + $output->writeln("codeception.yml applied to " . TESTS_BP . DIRECTORY_SEPARATOR . 'codeception.yml'); // copy the functional suite yml, will only copy if there are differences between the template the destination $fileSystem->copy( @@ -144,10 +145,8 @@ private function generateConfigFiles(OutputInterface $output) ); $output->writeln('functional.suite.yml configuration successfully applied.'); - if ($output->isVerbose()) { - $output->writeln("functional.suite.yml applied to " . - TESTS_BP . DIRECTORY_SEPARATOR . 'tests' . DIRECTORY_SEPARATOR . 'functional.suite.yml'); - } + $output->writeln("functional.suite.yml applied to " . + TESTS_BP . DIRECTORY_SEPARATOR . 'tests' . DIRECTORY_SEPARATOR . 'functional.suite.yml'); $fileSystem->copy( FW_BP . '/etc/config/.credentials.example', From 5d2335597ed654a803009cf6a55656910e6d7161 Mon Sep 17 00:00:00 2001 From: Tom Reece Date: Thu, 19 Sep 2019 09:46:35 -0500 Subject: [PATCH 14/48] MQE-1763: Investigate and fix failure due to absence of AcceptanceTester class - Fix long line --- .../Console/BuildProjectCommand.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Magento/FunctionalTestingFramework/Console/BuildProjectCommand.php b/src/Magento/FunctionalTestingFramework/Console/BuildProjectCommand.php index 1de5345aa..5102a3fdf 100644 --- a/src/Magento/FunctionalTestingFramework/Console/BuildProjectCommand.php +++ b/src/Magento/FunctionalTestingFramework/Console/BuildProjectCommand.php @@ -102,7 +102,9 @@ function ($type, $buffer) use ($output) { ); if ($codeceptReturnCode !== 0) { - throw new TestFrameworkException("The codecept build command failed unexpectedly. Please see the above output for more details."); + throw new TestFrameworkException( + "The codecept build command failed unexpectedly. Please see the above output for more details." + ); } if ($input->getOption('upgrade')) { From 58564203d9a74b38bcf0c2de6aef4c1790b09044 Mon Sep 17 00:00:00 2001 From: Donald Booth Date: Thu, 19 Sep 2019 10:13:47 -0500 Subject: [PATCH 15/48] Formatting changes --- docs/troubleshooting.md | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index fe64ea0e6..2ed6d5422 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -11,30 +11,34 @@ AcceptanceTester class doesn't exist in suite folder. Run the 'build' command to generate it ``` -#### Reason +### Reason Something went wrong during the `mftf build:project` command that prevented the creation of the AcceptanceTester class. -#### Solution +### Solution -This issue is fixed in MFTF 2.5.0. +This issue is fixed in the MFTF 2.5.0. -In versions of MFTF lower than 2.5.0 you should: +In versions of the MFTF lower than 2.5.0 you should: 1. Open the functional.suite.yml file at: - ```terminal - /dev/tests/acceptance/tests/functional.suite.yml - ``` -2. Add quotation marks (`"`) around these values: + + ```terminal + /dev/tests/acceptance/tests/functional.suite.yml + ``` +1. Add quotation marks (`"`) around these values: + 1. `%SELENIUM_HOST%` - 2. `%SELENIUM_PORT%` - 3. `%SELENIUM_PROTOCOL%` - 4. `%SELENIUM_PATH%` -3. Run the `vendor/bin/mftf build:project` command again. -4. You should see the AcceptanceTester class is created at: - ```terminal + 1. `%SELENIUM_PORT%` + 1. `%SELENIUM_PROTOCOL%` + 1. `%SELENIUM_PATH%` + +1. Run the `vendor/bin/mftf build:project` command again. +1. You should see the AcceptanceTester class is created at: + + ```terminal /vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/AcceptanceTester.php - ``` + ``` ## WebDriver issues @@ -51,7 +55,7 @@ No active session with ID e56f9260-b366-11e7-966b-db3e6f35d8e1 #### Reason -Use of PhantomJS is not actually supported by the MFTF. +Use of PhantomJS is not supported by the MFTF. #### Solution @@ -83,7 +87,7 @@ Tests that use the `moveMouseOver` action cause an error when run locally. #### Reason -There's a compatibility issue with Codeception's `moveMouseOver` function and GeckoDriver with Firefox. +There is a compatibility issue with Codeception's `moveMouseOver` function and GeckoDriver with Firefox. #### Solution From ba6fb4dfc30bf2b7357fe19b03a82a9794a1f45e Mon Sep 17 00:00:00 2001 From: Donald Booth Date: Thu, 19 Sep 2019 10:19:57 -0500 Subject: [PATCH 16/48] Removed unused issues. --- docs/troubleshooting.md | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index 2ed6d5422..d2a7dcabe 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -61,39 +61,5 @@ Use of PhantomJS is not supported by the MFTF. For headless browsing, the [Headless Chrome][]{:target="\_blank"} has better compatibility with the MFTF. -### Chrome - -You are seeing an "unhandled inspector error" exception: - -```terminal -[Facebook\WebDriver\Exception\UnknownServerException] -unknown error: undhandled inspector error: {"code":-32601, "message": -"'Network.deleteCookie' wasn't found"} .... -``` - -![Screenshot with the exception](./img/trouble-chrome232.png) - -#### Reason - -Chrome v62 is in the process of being rolled out, and it causes an error with ChromeDriver v2.32+. - -#### Solution - -Use [ChromeDriver 74.0.3729.6+][]{:target="\_blank"} and [Selenium Server Standalone v3.9+][]{:target="\_blank"} in order to execute tests in Google Chrome v62+. - -### Firefox - -Tests that use the `moveMouseOver` action cause an error when run locally. - -#### Reason - -There is a compatibility issue with Codeception's `moveMouseOver` function and GeckoDriver with Firefox. - -#### Solution - -None yet. Solving this problem is dependent on a GeckoDriver fix. - [Headless Chrome]: https://developers.google.com/web/updates/2017/04/headless-chrome -[ChromeDriver 74.0.3729.6+]: https://chromedriver.storage.googleapis.com/index.html?path=2.33/ -[Selenium Server Standalone v3.9+]: http://www.seleniumhq.org/download/ From 37eb197ad33ea5b8696488ad6cab747ce39443b9 Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan Date: Fri, 20 Sep 2019 15:11:16 -0500 Subject: [PATCH 17/48] MQE-610:[PHPMD] Reduce Cyclomatic Complexity in Problem Methods Refactored to keep Cyclomatic complexity <= 10. Added comments to below files to refactor later ** Config/FileResolver/Module.php ** Config/Converter.php ** Config/Dom.php --- .../Allure/Adapter/MagentoAllureAdapter.php | 26 ++- .../Codeception/Subscriber/Console.php | 2 +- .../Config/Converter.php | 1 + .../FunctionalTestingFramework/Config/Dom.php | 1 + .../Config/FileResolver/Module.php | 1 + .../Objects/EntityDataObject.php | 18 +- .../Persist/OperationDataArrayResolver.php | 13 +- .../Extension/PageReadinessExtension.php | 40 +++- .../ObjectManager/Config/Mapper/Dom.php | 66 +++--- .../Factory/Dynamic/Developer.php | 1 - .../StaticCheck/TestDependencyCheck.php | 210 ++++++++++++------ .../Util/DocGenerator.php | 1 - 12 files changed, 257 insertions(+), 123 deletions(-) diff --git a/src/Magento/FunctionalTestingFramework/Allure/Adapter/MagentoAllureAdapter.php b/src/Magento/FunctionalTestingFramework/Allure/Adapter/MagentoAllureAdapter.php index 3bcbf0b26..4bce08d9f 100644 --- a/src/Magento/FunctionalTestingFramework/Allure/Adapter/MagentoAllureAdapter.php +++ b/src/Magento/FunctionalTestingFramework/Allure/Adapter/MagentoAllureAdapter.php @@ -219,7 +219,6 @@ public function testError(FailEvent $failEvent) * Override of parent method, polls stepStorage for testcase and formats it according to actionGroup nesting. * * @return void - * @SuppressWarnings(PHPMD) */ public function testEnd() { @@ -245,11 +244,7 @@ public function testEnd() $step->setName(str_replace(ActionGroupObject::ACTION_GROUP_CONTEXT_START, '', $step->getName())); $actionGroupStepContainer = $step; - - preg_match(TestGenerator::ACTION_GROUP_STEP_KEY_REGEX, $step->getName(), $matches); - if (!empty($matches['actionGroupStepKey'])) { - $actionGroupStepKey = ucfirst($matches['actionGroupStepKey']); - } + $actionGroupStepKey = $this->retrieveActionGroupStepKey($step); continue; } @@ -289,6 +284,25 @@ function () use ($rootStep, $formattedSteps) { $this->getLifecycle()->fire(new TestCaseFinishedEvent()); } + /** + * Reads action group stepKey from step. + * + * @param Step $step + * @return string|null + */ + private function retrieveActionGroupStepKey($step) + { + $actionGroupStepKey = null; + + preg_match(TestGenerator::ACTION_GROUP_STEP_KEY_REGEX, $step->getName(), $matches); + + if (!empty($matches['actionGroupStepKey'])) { + $actionGroupStepKey = ucfirst($matches['actionGroupStepKey']); + } + + return $actionGroupStepKey; + } + /** * Reading stepKey from file. * diff --git a/src/Magento/FunctionalTestingFramework/Codeception/Subscriber/Console.php b/src/Magento/FunctionalTestingFramework/Codeception/Subscriber/Console.php index 6e61189bc..0ba1a3b2f 100644 --- a/src/Magento/FunctionalTestingFramework/Codeception/Subscriber/Console.php +++ b/src/Magento/FunctionalTestingFramework/Codeception/Subscriber/Console.php @@ -38,7 +38,7 @@ class Console extends \Codeception\Subscriber\Console * @param array $extensionOptions * @param array $options * - * @SuppressWarnings(PHPMD) + * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct($extensionOptions = [], $options = []) { diff --git a/src/Magento/FunctionalTestingFramework/Config/Converter.php b/src/Magento/FunctionalTestingFramework/Config/Converter.php index dcc67e5cf..8c805c94e 100644 --- a/src/Magento/FunctionalTestingFramework/Config/Converter.php +++ b/src/Magento/FunctionalTestingFramework/Config/Converter.php @@ -83,6 +83,7 @@ public function convert($source) * @param \DOMNodeList|array $elements * @return array * @SuppressWarnings(PHPMD.CyclomaticComplexity) + * @TODO ported magento code to be refactored later */ protected function convertXml($elements) { diff --git a/src/Magento/FunctionalTestingFramework/Config/Dom.php b/src/Magento/FunctionalTestingFramework/Config/Dom.php index 566fbd5b3..1b87dd14f 100644 --- a/src/Magento/FunctionalTestingFramework/Config/Dom.php +++ b/src/Magento/FunctionalTestingFramework/Config/Dom.php @@ -145,6 +145,7 @@ protected function mergeNode(\DOMElement $node, $parentPath) * @return void * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) + * @TODO Ported magento code to be refactored later */ protected function mergeMatchingNode(\DomElement $node, $parentPath, $matchedNode, $path) { diff --git a/src/Magento/FunctionalTestingFramework/Config/FileResolver/Module.php b/src/Magento/FunctionalTestingFramework/Config/FileResolver/Module.php index 7cff19c87..970a79636 100644 --- a/src/Magento/FunctionalTestingFramework/Config/FileResolver/Module.php +++ b/src/Magento/FunctionalTestingFramework/Config/FileResolver/Module.php @@ -26,6 +26,7 @@ class Module implements FileResolverInterface * Module constructor. * @param ModuleResolver|null $moduleResolver * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @TODO ported magento code to be refactored later */ public function __construct(ModuleResolver $moduleResolver = null) { diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php index 34edeee1d..03199b860 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php @@ -161,7 +161,6 @@ public function getAllData() * @param integer $uniquenessFormat * @return string|null * @throws TestFrameworkException - * @SuppressWarnings(PHPMD) */ public function getDataByName($name, $uniquenessFormat) { @@ -177,12 +176,25 @@ public function getDataByName($name, $uniquenessFormat) throw new TestFrameworkException($exceptionMessage); } - $name_lower = strtolower($name); - if ($this->data === null) { return null; } + return $this->resolveDataReferences($name, $uniquenessFormat); + } + /** + * Resolves data references in entities while generating static test files. + * + * @param string $name + * @param integer $uniquenessFormat + * @return string|null + * @throws TestFrameworkException + * @throws \Magento\FunctionalTestingFramework\Exceptions\TestReferenceException + */ + + private function resolveDataReferences($name, $uniquenessFormat) + { + $name_lower = strtolower($name); $dataReferenceResolver = new GenerationDataReferenceResolver(); if (array_key_exists($name_lower, $this->data)) { if (is_array($this->data[$name_lower])) { diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/OperationDataArrayResolver.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/OperationDataArrayResolver.php index 6d1ebc3fc..12ce3ebb4 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/OperationDataArrayResolver.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/OperationDataArrayResolver.php @@ -66,7 +66,6 @@ public function __construct($dependentEntities = null) * @param boolean $fromArray * @return array * @throws \Exception - * @SuppressWarnings(PHPMD) */ public function resolveOperationDataArray($entityObject, $operationMetadata, $operation, $fromArray = false) { @@ -120,7 +119,19 @@ public function resolveOperationDataArray($entityObject, $operationMetadata, $op ); } } + return $this->resolveRunTimeDataReferences($operationDataArray, $entityObject); + } + /** + * Resolve data references at run time. + * @param array $operationDataArray + * @param EntityDataObject $entityObject + * @return mixed + * @throws TestFrameworkException + * @throws \Magento\FunctionalTestingFramework\Exceptions\TestReferenceException + */ + private function resolveRunTimeDataReferences($operationDataArray, $entityObject) + { $dataReferenceResolver = new RuntimeDataReferenceResolver(); foreach ($operationDataArray as $key => $operationDataValue) { if (is_array($operationDataValue)) { diff --git a/src/Magento/FunctionalTestingFramework/Extension/PageReadinessExtension.php b/src/Magento/FunctionalTestingFramework/Extension/PageReadinessExtension.php index 8d49ad86c..8fb1ffe38 100644 --- a/src/Magento/FunctionalTestingFramework/Extension/PageReadinessExtension.php +++ b/src/Magento/FunctionalTestingFramework/Extension/PageReadinessExtension.php @@ -106,8 +106,6 @@ public function beforeTest(TestEvent $e) * @param StepEvent $e * @return void * @throws \Exception - * - * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function beforeStep(StepEvent $e) { @@ -117,7 +115,26 @@ public function beforeStep(StepEvent $e) return; } - // Check if page has changed and reset metric tracking if so + $this->resetMetricTracker($step); + + $metrics = $this->readinessMetrics; + + $this->waitForReadiness($metrics); + + /** @var AbstractMetricCheck $metric */ + foreach ($metrics as $metric) { + $metric->finalizeForStep($step); + } + } + + /** + * Check if page has changed, if so reset metric tracking + * + * @param Step $step + * return void + */ + private function resetMetricTracker($step) + { if ($this->pageChanged($step)) { $this->logDebug( 'Page URI changed; resetting readiness metric failure tracking', @@ -131,7 +148,17 @@ public function beforeStep(StepEvent $e) $metric->resetTracker(); } } + } + /** + * Wait for page readiness. + * @param $metrics + * @return void + * @throws \Codeception\Exception\ModuleRequireException + * @throws \Facebook\WebDriver\Exception\NoSuchElementException + */ + private function waitForReadiness($metrics) + { // todo: Implement step parameter to override global timeout configuration if (isset($this->config['timeout'])) { $timeout = intval($this->config['timeout']); @@ -139,8 +166,6 @@ public function beforeStep(StepEvent $e) $timeout = $this->getDriver()->_getConfig()['pageload_timeout']; } - $metrics = $this->readinessMetrics; - try { $this->getDriver()->webDriver->wait($timeout)->until( function () use ($metrics) { @@ -160,11 +185,6 @@ function () use ($metrics) { ); } catch (TimeoutException $exception) { } - - /** @var AbstractMetricCheck $metric */ - foreach ($metrics as $metric) { - $metric->finalizeForStep($step); - } } /** diff --git a/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Mapper/Dom.php b/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Mapper/Dom.php index bf11e0003..599f1565d 100644 --- a/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Mapper/Dom.php +++ b/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Mapper/Dom.php @@ -48,9 +48,6 @@ public function __construct( * @return array * @throws \Exception * @todo this method has high cyclomatic complexity in order to avoid performance issues - * @SuppressWarnings(PHPMD.CyclomaticComplexity) - * @SuppressWarnings(PHPMD.NPathComplexity) - * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function convert($config) { @@ -83,33 +80,7 @@ public function convert($config) $typeData['type'] = $attributeType->nodeValue; } } - $typeArguments = []; - /** @var \DOMNode $typeChildNode */ - foreach ($node->childNodes as $typeChildNode) { - if ($typeChildNode->nodeType != XML_ELEMENT_NODE) { - continue; - } - switch ($typeChildNode->nodeName) { - case 'arguments': - /** @var \DOMNode $argumentNode */ - foreach ($typeChildNode->childNodes as $argumentNode) { - if ($argumentNode->nodeType != XML_ELEMENT_NODE) { - continue; - } - $argumentName = $argumentNode->attributes->getNamedItem('name')->nodeValue; - $argumentData = $this->argumentParser->parse($argumentNode); - $typeArguments[$argumentName] = $this->argumentInterpreter->evaluate( - $argumentData - ); - } - break; - default: - throw new \Exception( - "Invalid application config. Unknown node: {$typeChildNode->nodeName}." - ); - } - } - + $typeArguments = $this->parseTypeArguments($node); $typeData['arguments'] = $typeArguments; $output[$typeNodeAttributes->getNamedItem('name')->nodeValue] = $typeData; break; @@ -120,4 +91,39 @@ public function convert($config) return $output; } + + /** Read typeChildNodes and set typeArguments + * @param $node + * @return mixed + * @throws \Exception + */ + private function parseTypeArguments($node) + { + foreach ($node->childNodes as $typeChildNode) { + /** @var \DOMNode $typeChildNode */ + if ($typeChildNode->nodeType != XML_ELEMENT_NODE) { + continue; + } + switch ($typeChildNode->nodeName) { + case 'arguments': + /** @var \DOMNode $argumentNode */ + foreach ($typeChildNode->childNodes as $argumentNode) { + if ($argumentNode->nodeType != XML_ELEMENT_NODE) { + continue; + } + $argumentName = $argumentNode->attributes->getNamedItem('name')->nodeValue; + $argumentData = $this->argumentParser->parse($argumentNode); + $typeArguments[$argumentName] = $this->argumentInterpreter->evaluate( + $argumentData + ); + } + return $typeArguments; + + default: + throw new \Exception( + "Invalid application config. Unknown node: {$typeChildNode->nodeName}." + ); + } + } + } } diff --git a/src/Magento/FunctionalTestingFramework/ObjectManager/Factory/Dynamic/Developer.php b/src/Magento/FunctionalTestingFramework/ObjectManager/Factory/Dynamic/Developer.php index dbe6aa497..73c5cc92a 100644 --- a/src/Magento/FunctionalTestingFramework/ObjectManager/Factory/Dynamic/Developer.php +++ b/src/Magento/FunctionalTestingFramework/ObjectManager/Factory/Dynamic/Developer.php @@ -171,7 +171,6 @@ protected function parseArray(&$array) * @return object * @throws \Exception * - * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPCPD) */ public function create($requestedType, array $arguments = []) diff --git a/src/Magento/FunctionalTestingFramework/StaticCheck/TestDependencyCheck.php b/src/Magento/FunctionalTestingFramework/StaticCheck/TestDependencyCheck.php index 3abbd40c2..f212cad10 100644 --- a/src/Magento/FunctionalTestingFramework/StaticCheck/TestDependencyCheck.php +++ b/src/Magento/FunctionalTestingFramework/StaticCheck/TestDependencyCheck.php @@ -24,7 +24,7 @@ /** * Class TestDependencyCheck * @package Magento\FunctionalTestingFramework\StaticCheck - * @SuppressWarnings(PHPMD) + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class TestDependencyCheck implements StaticCheckInterface { @@ -74,13 +74,18 @@ class TestDependencyCheck implements StaticCheckInterface */ private $output; + /** + * Array containing all entities after resolving references. + * @var array + */ + private $allEntities = []; + /** * Checks test dependencies, determined by references in tests versus the dependencies listed in the Magento module * * @param InputInterface $input * @return string * @throws Exception; - * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function execute(InputInterface $input) { @@ -158,7 +163,6 @@ private function findErrorsInFileSet($files) } $contents = file_get_contents($filePath); - $allEntities = []; preg_match_all(ActionObject::ACTION_ATTRIBUTE_VARIABLE_REGEX_PATTERN, $contents, $braceReferences); preg_match_all(self::ACTIONGROUP_REGEX_PATTERN, $contents, $actionGroupReferences); preg_match_all(self::EXTENDS_REGEX_PATTERN, $contents, $extendReferences); @@ -169,10 +173,52 @@ private function findErrorsInFileSet($files) $braceReferences[1] = array_unique($braceReferences[1]); $braceReferences[2] = array_filter(array_unique($braceReferences[2])); - // Check `data` entities in {{data.field}} or {{data.field('param')}} - foreach ($braceReferences[0] as $reference) { - // trim `{{data.field}}` to `data` - preg_match('/{{([^.]+)/', $reference, $entityName); + // resolve data entity references + $this->resolveDataEntityReferences($braceReferences[0], $contents); + + //resolve entity references + $this->resolveParametrizedReferences($braceReferences[2], $contents); + + // Check actionGroup references + $this->resolveEntityReferences($actionGroupReferences[1]); + + // Check extended objects + $this->resolveEntityReferences($extendReferences[1]); + + // Find violating references and set error output + $violatingReferences = $this->findViolatingReferences($filePath); + $testErrors = $this->setErrorOutput($violatingReferences, $filePath); + } + return $testErrors; + } + + /** + * Drill down into params in {{ref.params('string', $data.key$, entity.reference)}} + * and resolve references. + * + * @param array $braceReferences + * @param string $contents + * @return void + * @throws XmlException + */ + private function resolveParametrizedReferences($braceReferences, $contents) + { + foreach ($braceReferences as $parameterizedReference) { + preg_match( + ActionObject::ACTION_ATTRIBUTE_VARIABLE_REGEX_PARAMETER, + $parameterizedReference, + $arguments + ); + $splitArguments = explode(',', ltrim(rtrim($arguments[0], ")"), "(")); + foreach ($splitArguments as $argument) { + // Do nothing for 'string' or $persisted.data$ + if (preg_match(ActionObject::STRING_PARAMETER_REGEX, $argument)) { + continue; + } elseif (preg_match(TestGenerator::PERSISTED_OBJECT_NOTATION_REGEX, $argument)) { + continue; + } + // trim `data.field` to `data` + preg_match('/([^.]+)/', $argument, $entityName); // Double check that {{data.field}} isn't an argument for an ActionGroup $entity = $this->findEntity($entityName[1]); preg_match_all(self::ACTIONGROUP_ARGUMENT_REGEX_PATTERN, $contents, $possibleArgument); @@ -180,81 +226,105 @@ private function findErrorsInFileSet($files) continue; } if ($entity !== null) { - $allEntities[$entity->getName()] = $entity; + $this->allEntities[$entity->getName()] = $entity; } } + } + } - // Drill down into params in {{ref.params('string', $data.key$, entity.reference)}} - foreach ($braceReferences[2] as $parameterizedReference) { - preg_match( - ActionObject::ACTION_ATTRIBUTE_VARIABLE_REGEX_PARAMETER, - $parameterizedReference, - $arguments - ); - $splitArguments = explode(',', ltrim(rtrim($arguments[0], ")"), "(")); - foreach ($splitArguments as $argument) { - // Do nothing for 'string' or $persisted.data$ - if (preg_match(ActionObject::STRING_PARAMETER_REGEX, $argument)) { - continue; - } elseif (preg_match(TestGenerator::PERSISTED_OBJECT_NOTATION_REGEX, $argument)) { - continue; - } - // trim `data.field` to `data` - preg_match('/([^.]+)/', $argument, $entityName); - // Double check that {{data.field}} isn't an argument for an ActionGroup - $entity = $this->findEntity($entityName[1]); - preg_match_all(self::ACTIONGROUP_ARGUMENT_REGEX_PATTERN, $contents, $possibleArgument); - if (array_search($entityName[1], $possibleArgument[1]) !== false) { - continue; - } - if ($entity !== null) { - $allEntities[$entity->getName()] = $entity; - } - } + /** + * Check `data` entities in {{data.field}} or {{data.field('param')}} and resolve references + * + * @param array $braceReferences + * @param string $contents + * @return void + * @throws XmlException + + */ + private function resolveDataEntityReferences($braceReferences, $contents) + { + foreach ($braceReferences as $reference) { + // trim `{{data.field}}` to `data` + preg_match('/{{([^.]+)/', $reference, $entityName); + // Double check that {{data.field}} isn't an argument for an ActionGroup + $entity = $this->findEntity($entityName[1]); + preg_match_all(self::ACTIONGROUP_ARGUMENT_REGEX_PATTERN, $contents, $possibleArgument); + if (array_search($entityName[1], $possibleArgument[1]) !== false) { + continue; } - // Check actionGroup references - foreach ($actionGroupReferences[1] as $reference) { - $entity = $this->findEntity($reference); - if ($entity !== null) { - $allEntities[$entity->getName()] = $entity; - } + if ($entity !== null) { + $this->allEntities[$entity->getName()] = $entity; } - // Check extended objects - foreach ($extendReferences[1] as $reference) { - $entity = $this->findEntity($reference); - if ($entity !== null) { - $allEntities[$entity->getName()] = $entity; - } + } + } + + /** + * Resolve entity references + * + * @param array $references + * @return void + * @throws XmlException + */ + private function resolveEntityReferences($references) + { + foreach ($references as $reference) { + $entity = $this->findEntity($reference); + if ($entity !== null) { + $this->allEntities[$entity->getName()] = $entity; } + } + } - $currentModule = $this->moduleNameToComposerName[$moduleFullName]; - $modulesReferencedInTest = $this->getModuleDependenciesFromReferences($allEntities, $currentModule); - $moduleDependencies = $this->flattenedDependencies[$moduleFullName]; - // Find Violations - $violatingReferences = []; - foreach ($modulesReferencedInTest as $entityName => $files) { - $valid = false; - foreach ($files as $module) { - if (array_key_exists($module, $moduleDependencies) || $module == $currentModule) { - $valid = true; - break; - } - } - if (!$valid) { - $violatingReferences[$entityName] = $files; + /** + * Find violating references + * + * @param string $moduleName + * @return array + */ + private function findViolatingReferences($moduleName) + { + // Find Violations + $violatingReferences = []; + $currentModule = $this->moduleNameToComposerName[$moduleName]; + $modulesReferencedInTest = $this->getModuleDependenciesFromReferences($this->allEntities); + $moduleDependencies = $this->flattenedDependencies[$moduleName]; + foreach ($modulesReferencedInTest as $entityName => $files) { + $valid = false; + foreach ($files as $module) { + if (array_key_exists($module, $moduleDependencies) || $module == $currentModule) { + $valid = true; + break; } } + if (!$valid) { + $violatingReferences[$entityName] = $files; + } + } - if (!empty($violatingReferences)) { - // Build error output - $errorOutput = "\nFile \"{$filePath->getRealPath()}\""; - $errorOutput .= "\ncontains entity references that violate dependency constraints:\n\t\t"; - foreach ($violatingReferences as $entityName => $files) { - $errorOutput .= "\n\t {$entityName} from module(s): " . implode(", ", $files); - } - $testErrors[$filePath->getRealPath()][] = $errorOutput; + return $violatingReferences; + } + + /** + * Builds and returns error output for violating references + * + * @param array $violatingReferences + * @param string $path + * @return mixed + */ + private function setErrorOutput($violatingReferences, $path) + { + $testErrors = []; + + if (!empty($violatingReferences)) { + // Build error output + $errorOutput = "\nFile \"{$path->getRealPath()}\""; + $errorOutput .= "\ncontains entity references that violate dependency constraints:\n\t\t"; + foreach ($violatingReferences as $entityName => $files) { + $errorOutput .= "\n\t {$entityName} from module(s): " . implode(", ", $files); } + $testErrors[$path->getRealPath()][] = $errorOutput; } + return $testErrors; } diff --git a/src/Magento/FunctionalTestingFramework/Util/DocGenerator.php b/src/Magento/FunctionalTestingFramework/Util/DocGenerator.php index 2642a715f..7a28f8969 100644 --- a/src/Magento/FunctionalTestingFramework/Util/DocGenerator.php +++ b/src/Magento/FunctionalTestingFramework/Util/DocGenerator.php @@ -15,7 +15,6 @@ /** * Class TestGenerator - * @SuppressWarnings(PHPMD) */ class DocGenerator { From a69b2b6f6ed3bc68e289223ef8b3a7de9612ecc6 Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Fri, 20 Sep 2019 16:43:20 -0500 Subject: [PATCH 18/48] MQE-1734: Add base + merge files to Test Description --- .../ActionGroupContainsStepKeyInArgText.txt | 1 + .../ActionGroupMergedViaInsertAfter.txt | 1 + .../ActionGroupMergedViaInsertBefore.txt | 1 + .../Resources/ActionGroupSkipReadiness.txt | 1 + .../Resources/ActionGroupToExtend.txt | 1 + .../Resources/ActionGroupUsingCreateData.txt | 1 + .../ActionGroupUsingNestedArgument.txt | 1 + .../ActionGroupWithDataOverrideTest.txt | 1 + .../Resources/ActionGroupWithDataTest.txt | 1 + ...hDefaultArgumentAndStringSelectorParam.txt | 1 + ...eParameterSelectorsFromDefaultArgument.txt | 1 + .../Resources/ActionGroupWithNoArguments.txt | 1 + .../ActionGroupWithNoDefaultTest.txt | 1 + ...roupWithParameterizedElementWithHyphen.txt | 1 + ...meterizedElementsWithStepKeyReferences.txt | 1 + ...thPassedArgumentAndStringSelectorParam.txt | 1 + .../ActionGroupWithPersistedData.txt | 1 + ...tionGroupWithSectionAndDataAsArguments.txt | 1 + ...WithSimpleDataUsageFromDefaultArgument.txt | 1 + ...pWithSimpleDataUsageFromPassedArgument.txt | 1 + ...leParameterSelectorFromDefaultArgument.txt | 1 + ...gleParameterSelectorFromPassedArgument.txt | 1 + .../ActionGroupWithStepKeyReferences.txt | 1 + .../ActionGroupWithTopLevelPersistedData.txt | 1 + .../ArgumentWithSameNameAsElement.txt | 1 + .../verification/Resources/AssertTest.txt | 1 + .../Resources/BasicActionGroupTest.txt | 1 + .../Resources/BasicFunctionalTest.txt | 1 + .../verification/Resources/BasicMergeTest.txt | 1 + .../Resources/CharacterReplacementTest.txt | 1 + .../Resources/ChildExtendedTestAddHooks.txt | 1 + .../Resources/ChildExtendedTestMerging.txt | 1 + .../Resources/ChildExtendedTestNoParent.txt | 1 + .../ChildExtendedTestRemoveAction.txt | 1 + .../ChildExtendedTestRemoveHookAction.txt | 1 + .../Resources/ChildExtendedTestReplace.txt | 1 + .../ChildExtendedTestReplaceHook.txt | 1 + .../Resources/DataActionsTest.txt | 1 + .../Resources/DataReplacementTest.txt | 1 + .../Resources/ExecuteInSeleniumTest.txt | 1 + .../Resources/ExecuteJsEscapingTest.txt | 1 + .../Resources/ExtendParentDataTest.txt | 1 + .../Resources/ExtendedActionGroup.txt | 1 + .../ExtendedChildTestInSuiteCest.txt | 1 + .../Resources/ExtendedChildTestNotInSuite.txt | 1 + .../Resources/ExtendedRemoveActionGroup.txt | 1 + .../Resources/ExtendingSkippedTest.txt | 1 + .../Resources/HookActionsTest.txt | 1 + .../Resources/LocatorFunctionTest.txt | 1 + .../Resources/MergeMassViaInsertAfter.txt | 1 + .../Resources/MergeMassViaInsertBefore.txt | 1 + .../verification/Resources/MergeSkip.txt | 1 + .../Resources/MergedActionGroupTest.txt | 1 + .../Resources/MergedReferencesTest.txt | 1 + .../Resources/MultipleActionGroupsTest.txt | 1 + .../Resources/PageReplacementTest.txt | 1 + .../Resources/ParameterArrayTest.txt | 1 + .../Resources/ParentExtendedTest.txt | 1 + .../PersistedAndXmlEntityArguments.txt | 1 + .../Resources/PersistedReplacementTest.txt | 1 + .../PersistenceActionGroupAppendingTest.txt | 1 + .../Resources/PersistenceCustomFieldsTest.txt | 1 + .../Resources/SectionReplacementTest.txt | 1 + .../verification/Resources/SkippedTest.txt | 2 +- .../Resources/SkippedTestNoIssues.txt | 2 +- .../Resources/SkippedTestTwoIssues.txt | 2 +- .../Resources/SkippedTestWithHooks.txt | 2 +- .../Resources/XmlCommentedActionGroupTest.txt | 1 + .../Resources/XmlCommentedTest.txt | 1 + .../Test/Util/TestObjectExtractor.php | 46 +++++++++++++++++++ 70 files changed, 115 insertions(+), 4 deletions(-) diff --git a/dev/tests/verification/Resources/ActionGroupContainsStepKeyInArgText.txt b/dev/tests/verification/Resources/ActionGroupContainsStepKeyInArgText.txt index c98120d03..092f0a9fa 100644 --- a/dev/tests/verification/Resources/ActionGroupContainsStepKeyInArgText.txt +++ b/dev/tests/verification/Resources/ActionGroupContainsStepKeyInArgText.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupContainsStepKeyInArgTextCest { diff --git a/dev/tests/verification/Resources/ActionGroupMergedViaInsertAfter.txt b/dev/tests/verification/Resources/ActionGroupMergedViaInsertAfter.txt index c607cb7b2..2e9a33069 100644 --- a/dev/tests/verification/Resources/ActionGroupMergedViaInsertAfter.txt +++ b/dev/tests/verification/Resources/ActionGroupMergedViaInsertAfter.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupMergedViaInsertAfterCest { diff --git a/dev/tests/verification/Resources/ActionGroupMergedViaInsertBefore.txt b/dev/tests/verification/Resources/ActionGroupMergedViaInsertBefore.txt index 08281a965..740eecb03 100644 --- a/dev/tests/verification/Resources/ActionGroupMergedViaInsertBefore.txt +++ b/dev/tests/verification/Resources/ActionGroupMergedViaInsertBefore.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupMergedViaInsertBeforeCest { diff --git a/dev/tests/verification/Resources/ActionGroupSkipReadiness.txt b/dev/tests/verification/Resources/ActionGroupSkipReadiness.txt index 64294b7f8..22a7a170a 100644 --- a/dev/tests/verification/Resources/ActionGroupSkipReadiness.txt +++ b/dev/tests/verification/Resources/ActionGroupSkipReadiness.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupSkipReadinessCest { diff --git a/dev/tests/verification/Resources/ActionGroupToExtend.txt b/dev/tests/verification/Resources/ActionGroupToExtend.txt index b91c06036..04551c443 100644 --- a/dev/tests/verification/Resources/ActionGroupToExtend.txt +++ b/dev/tests/verification/Resources/ActionGroupToExtend.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupToExtendCest { diff --git a/dev/tests/verification/Resources/ActionGroupUsingCreateData.txt b/dev/tests/verification/Resources/ActionGroupUsingCreateData.txt index 97369c6ea..fb4cf1209 100644 --- a/dev/tests/verification/Resources/ActionGroupUsingCreateData.txt +++ b/dev/tests/verification/Resources/ActionGroupUsingCreateData.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupUsingCreateDataCest { diff --git a/dev/tests/verification/Resources/ActionGroupUsingNestedArgument.txt b/dev/tests/verification/Resources/ActionGroupUsingNestedArgument.txt index 13b67b10f..3ebb37066 100644 --- a/dev/tests/verification/Resources/ActionGroupUsingNestedArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupUsingNestedArgument.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupUsingNestedArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithDataOverrideTest.txt b/dev/tests/verification/Resources/ActionGroupWithDataOverrideTest.txt index f9984944a..b8038c4f2 100644 --- a/dev/tests/verification/Resources/ActionGroupWithDataOverrideTest.txt +++ b/dev/tests/verification/Resources/ActionGroupWithDataOverrideTest.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupWithDataOverrideTestCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithDataTest.txt b/dev/tests/verification/Resources/ActionGroupWithDataTest.txt index 79bda5f1b..4b8bc4427 100644 --- a/dev/tests/verification/Resources/ActionGroupWithDataTest.txt +++ b/dev/tests/verification/Resources/ActionGroupWithDataTest.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupWithDataTestCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithDefaultArgumentAndStringSelectorParam.txt b/dev/tests/verification/Resources/ActionGroupWithDefaultArgumentAndStringSelectorParam.txt index 68f95298d..7b5bb9d81 100644 --- a/dev/tests/verification/Resources/ActionGroupWithDefaultArgumentAndStringSelectorParam.txt +++ b/dev/tests/verification/Resources/ActionGroupWithDefaultArgumentAndStringSelectorParam.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Default Argument Value and Hardcoded Value in Param") + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithDefaultArgumentAndStringSelectorParamCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithMultipleParameterSelectorsFromDefaultArgument.txt b/dev/tests/verification/Resources/ActionGroupWithMultipleParameterSelectorsFromDefaultArgument.txt index 1c211ce4e..92cd050f4 100644 --- a/dev/tests/verification/Resources/ActionGroupWithMultipleParameterSelectorsFromDefaultArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupWithMultipleParameterSelectorsFromDefaultArgument.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Passed Argument Value and Multiple Argument Values in Param") + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithMultipleParameterSelectorsFromDefaultArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithNoArguments.txt b/dev/tests/verification/Resources/ActionGroupWithNoArguments.txt index 11da2ddf6..0bd1ee91e 100644 --- a/dev/tests/verification/Resources/ActionGroupWithNoArguments.txt +++ b/dev/tests/verification/Resources/ActionGroupWithNoArguments.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With No Argument") + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithNoArgumentsCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithNoDefaultTest.txt b/dev/tests/verification/Resources/ActionGroupWithNoDefaultTest.txt index b24362028..7195229ff 100644 --- a/dev/tests/verification/Resources/ActionGroupWithNoDefaultTest.txt +++ b/dev/tests/verification/Resources/ActionGroupWithNoDefaultTest.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupWithNoDefaultTestCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithParameterizedElementWithHyphen.txt b/dev/tests/verification/Resources/ActionGroupWithParameterizedElementWithHyphen.txt index 7d32e2e68..a9b35b842 100644 --- a/dev/tests/verification/Resources/ActionGroupWithParameterizedElementWithHyphen.txt +++ b/dev/tests/verification/Resources/ActionGroupWithParameterizedElementWithHyphen.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithParameterizedElementWithHyphenCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithParameterizedElementsWithStepKeyReferences.txt b/dev/tests/verification/Resources/ActionGroupWithParameterizedElementsWithStepKeyReferences.txt index ba62ba479..643d2db81 100644 --- a/dev/tests/verification/Resources/ActionGroupWithParameterizedElementsWithStepKeyReferences.txt +++ b/dev/tests/verification/Resources/ActionGroupWithParameterizedElementsWithStepKeyReferences.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithParameterizedElementsWithStepKeyReferencesCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithPassedArgumentAndStringSelectorParam.txt b/dev/tests/verification/Resources/ActionGroupWithPassedArgumentAndStringSelectorParam.txt index 6b85f8b47..dcceecb88 100644 --- a/dev/tests/verification/Resources/ActionGroupWithPassedArgumentAndStringSelectorParam.txt +++ b/dev/tests/verification/Resources/ActionGroupWithPassedArgumentAndStringSelectorParam.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Passed Argument Value and Hardcoded Value in Param") + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithPassedArgumentAndStringSelectorParamCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithPersistedData.txt b/dev/tests/verification/Resources/ActionGroupWithPersistedData.txt index f774269ea..3df1c4a93 100644 --- a/dev/tests/verification/Resources/ActionGroupWithPersistedData.txt +++ b/dev/tests/verification/Resources/ActionGroupWithPersistedData.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupWithPersistedDataCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithSectionAndDataAsArguments.txt b/dev/tests/verification/Resources/ActionGroupWithSectionAndDataAsArguments.txt index 20a9c5137..014fd5573 100644 --- a/dev/tests/verification/Resources/ActionGroupWithSectionAndDataAsArguments.txt +++ b/dev/tests/verification/Resources/ActionGroupWithSectionAndDataAsArguments.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithSectionAndDataAsArgumentsCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromDefaultArgument.txt b/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromDefaultArgument.txt index 52cdeb83d..648c9132b 100644 --- a/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromDefaultArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromDefaultArgument.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Simple Data Usage From Default Argument") + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithSimpleDataUsageFromDefaultArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromPassedArgument.txt b/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromPassedArgument.txt index 9ad3dd560..c91a3a765 100644 --- a/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromPassedArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromPassedArgument.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Simple Data Usage From Passed Argument") + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithSimpleDataUsageFromPassedArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromDefaultArgument.txt b/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromDefaultArgument.txt index 48fc52ff4..d17e930e7 100644 --- a/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromDefaultArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromDefaultArgument.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Default Argument Value and Argument Value in Param") + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithSingleParameterSelectorFromDefaultArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromPassedArgument.txt b/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromPassedArgument.txt index 97c8bca5b..9c7968cc3 100644 --- a/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromPassedArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromPassedArgument.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Passed Argument Value and Argument Value in Param") + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithSingleParameterSelectorFromPassedArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithStepKeyReferences.txt b/dev/tests/verification/Resources/ActionGroupWithStepKeyReferences.txt index d83447d03..b74835caa 100644 --- a/dev/tests/verification/Resources/ActionGroupWithStepKeyReferences.txt +++ b/dev/tests/verification/Resources/ActionGroupWithStepKeyReferences.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithStepKeyReferencesCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithTopLevelPersistedData.txt b/dev/tests/verification/Resources/ActionGroupWithTopLevelPersistedData.txt index c579d165e..4a7455b13 100644 --- a/dev/tests/verification/Resources/ActionGroupWithTopLevelPersistedData.txt +++ b/dev/tests/verification/Resources/ActionGroupWithTopLevelPersistedData.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupWithTopLevelPersistedDataCest { diff --git a/dev/tests/verification/Resources/ArgumentWithSameNameAsElement.txt b/dev/tests/verification/Resources/ArgumentWithSameNameAsElement.txt index 5b9f838a4..a1137c443 100644 --- a/dev/tests/verification/Resources/ArgumentWithSameNameAsElement.txt +++ b/dev/tests/verification/Resources/ArgumentWithSameNameAsElement.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ArgumentWithSameNameAsElementCest { diff --git a/dev/tests/verification/Resources/AssertTest.txt b/dev/tests/verification/Resources/AssertTest.txt index 1f8eef56e..8e3a03d2e 100644 --- a/dev/tests/verification/Resources/AssertTest.txt +++ b/dev/tests/verification/Resources/AssertTest.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/AssertTest.xml
") */ class AssertTestCest { diff --git a/dev/tests/verification/Resources/BasicActionGroupTest.txt b/dev/tests/verification/Resources/BasicActionGroupTest.txt index c6b3cec81..5af0594fe 100644 --- a/dev/tests/verification/Resources/BasicActionGroupTest.txt +++ b/dev/tests/verification/Resources/BasicActionGroupTest.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class BasicActionGroupTestCest { diff --git a/dev/tests/verification/Resources/BasicFunctionalTest.txt b/dev/tests/verification/Resources/BasicFunctionalTest.txt index 58794ba20..bbcc90360 100644 --- a/dev/tests/verification/Resources/BasicFunctionalTest.txt +++ b/dev/tests/verification/Resources/BasicFunctionalTest.txt @@ -17,6 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: A Functional Cest") * @group functional + * @Description("

Test Files:
verification/TestModule/Test/BasicFunctionalTest.xml
") */ class BasicFunctionalTestCest { diff --git a/dev/tests/verification/Resources/BasicMergeTest.txt b/dev/tests/verification/Resources/BasicMergeTest.txt index 8b311dac2..0d5c2cc4b 100644 --- a/dev/tests/verification/Resources/BasicMergeTest.txt +++ b/dev/tests/verification/Resources/BasicMergeTest.txt @@ -18,6 +18,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; * @Title("[NO TESTCASEID]: BasicMergeTest") * @group functional * @group mergeTest + * @Description("

Test Files:
verification/TestModule/Test/MergeFunctionalTest.xml
verification/TestModuleMerged/Test/MergeFunctionalTest.xml
") */ class BasicMergeTestCest { diff --git a/dev/tests/verification/Resources/CharacterReplacementTest.txt b/dev/tests/verification/Resources/CharacterReplacementTest.txt index 94459d3b1..0e601c596 100644 --- a/dev/tests/verification/Resources/CharacterReplacementTest.txt +++ b/dev/tests/verification/Resources/CharacterReplacementTest.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/CharacterReplacementTest.xml
") */ class CharacterReplacementTestCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestAddHooks.txt b/dev/tests/verification/Resources/ChildExtendedTestAddHooks.txt index 4c8ec1ea1..703165c02 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestAddHooks.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestAddHooks.txt @@ -17,6 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestAddHooks") * @group Parent + * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestAddHooksCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestMerging.txt b/dev/tests/verification/Resources/ChildExtendedTestMerging.txt index a59d141b4..c6bd0c6f1 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestMerging.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestMerging.txt @@ -17,6 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestMerging") * @group Child + * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestMergingCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestNoParent.txt b/dev/tests/verification/Resources/ChildExtendedTestNoParent.txt index 34106b5fa..c115e93cd 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestNoParent.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestNoParent.txt @@ -17,6 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestNoParent") * @group Child + * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") * @group skip */ class ChildExtendedTestNoParentCest diff --git a/dev/tests/verification/Resources/ChildExtendedTestRemoveAction.txt b/dev/tests/verification/Resources/ChildExtendedTestRemoveAction.txt index b1eb8340b..0236584e8 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestRemoveAction.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestRemoveAction.txt @@ -17,6 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestRemoveAction") * @group Child + * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestRemoveActionCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestRemoveHookAction.txt b/dev/tests/verification/Resources/ChildExtendedTestRemoveHookAction.txt index cd0e6b049..ccc50b005 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestRemoveHookAction.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestRemoveHookAction.txt @@ -17,6 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestRemoveHookAction") * @group Child + * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestRemoveHookActionCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestReplace.txt b/dev/tests/verification/Resources/ChildExtendedTestReplace.txt index 6c699b7db..d4552ed47 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestReplace.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestReplace.txt @@ -17,6 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestReplace") * @group Child + * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestReplaceCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestReplaceHook.txt b/dev/tests/verification/Resources/ChildExtendedTestReplaceHook.txt index 82184a206..5d6a7ca02 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestReplaceHook.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestReplaceHook.txt @@ -17,6 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestReplaceHook") * @group Child + * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestReplaceHookCest { diff --git a/dev/tests/verification/Resources/DataActionsTest.txt b/dev/tests/verification/Resources/DataActionsTest.txt index 728bef2e7..120d0a6e3 100644 --- a/dev/tests/verification/Resources/DataActionsTest.txt +++ b/dev/tests/verification/Resources/DataActionsTest.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/DataActionsTest.xml
") */ class DataActionsTestCest { diff --git a/dev/tests/verification/Resources/DataReplacementTest.txt b/dev/tests/verification/Resources/DataReplacementTest.txt index 8e8eb70a6..c041a5f95 100644 --- a/dev/tests/verification/Resources/DataReplacementTest.txt +++ b/dev/tests/verification/Resources/DataReplacementTest.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/DataReplacementTest.xml
") */ class DataReplacementTestCest { diff --git a/dev/tests/verification/Resources/ExecuteInSeleniumTest.txt b/dev/tests/verification/Resources/ExecuteInSeleniumTest.txt index 0fbee0550..08ee096dd 100644 --- a/dev/tests/verification/Resources/ExecuteInSeleniumTest.txt +++ b/dev/tests/verification/Resources/ExecuteInSeleniumTest.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ExecuteInSeleniumTest.xml
") */ class ExecuteInSeleniumTestCest { diff --git a/dev/tests/verification/Resources/ExecuteJsEscapingTest.txt b/dev/tests/verification/Resources/ExecuteJsEscapingTest.txt index 19140eaf9..1a0072de8 100644 --- a/dev/tests/verification/Resources/ExecuteJsEscapingTest.txt +++ b/dev/tests/verification/Resources/ExecuteJsEscapingTest.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ExecuteJsTest.xml
") */ class ExecuteJsEscapingTestCest { diff --git a/dev/tests/verification/Resources/ExtendParentDataTest.txt b/dev/tests/verification/Resources/ExtendParentDataTest.txt index a91c2f464..59e1289f0 100644 --- a/dev/tests/verification/Resources/ExtendParentDataTest.txt +++ b/dev/tests/verification/Resources/ExtendParentDataTest.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ExtendedDataTest.xml
") */ class ExtendParentDataTestCest { diff --git a/dev/tests/verification/Resources/ExtendedActionGroup.txt b/dev/tests/verification/Resources/ExtendedActionGroup.txt index 66ecdbd8a..383daceec 100644 --- a/dev/tests/verification/Resources/ExtendedActionGroup.txt +++ b/dev/tests/verification/Resources/ExtendedActionGroup.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ExtendedActionGroupCest { diff --git a/dev/tests/verification/Resources/ExtendedChildTestInSuiteCest.txt b/dev/tests/verification/Resources/ExtendedChildTestInSuiteCest.txt index 2483617d1..90a620f16 100644 --- a/dev/tests/verification/Resources/ExtendedChildTestInSuiteCest.txt +++ b/dev/tests/verification/Resources/ExtendedChildTestInSuiteCest.txt @@ -17,6 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ExtendedChildTestInSuite") * @group ExtendedTestInSuite + * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
*/ class ExtendedChildTestInSuiteCest { diff --git a/dev/tests/verification/Resources/ExtendedChildTestNotInSuite.txt b/dev/tests/verification/Resources/ExtendedChildTestNotInSuite.txt index cb5fc2e12..4506a47a6 100644 --- a/dev/tests/verification/Resources/ExtendedChildTestNotInSuite.txt +++ b/dev/tests/verification/Resources/ExtendedChildTestNotInSuite.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ExtendedChildTestNotInSuite") + * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ExtendedChildTestNotInSuiteCest { diff --git a/dev/tests/verification/Resources/ExtendedRemoveActionGroup.txt b/dev/tests/verification/Resources/ExtendedRemoveActionGroup.txt index eed17340e..6bba1d2c5 100644 --- a/dev/tests/verification/Resources/ExtendedRemoveActionGroup.txt +++ b/dev/tests/verification/Resources/ExtendedRemoveActionGroup.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") */ class ExtendedRemoveActionGroupCest { diff --git a/dev/tests/verification/Resources/ExtendingSkippedTest.txt b/dev/tests/verification/Resources/ExtendingSkippedTest.txt index b5632c030..ddcf12712 100644 --- a/dev/tests/verification/Resources/ExtendingSkippedTest.txt +++ b/dev/tests/verification/Resources/ExtendingSkippedTest.txt @@ -17,6 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestSkippedParent") * @group Child + * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ExtendingSkippedTestCest { diff --git a/dev/tests/verification/Resources/HookActionsTest.txt b/dev/tests/verification/Resources/HookActionsTest.txt index 3068e6ac1..3c6b4e06e 100644 --- a/dev/tests/verification/Resources/HookActionsTest.txt +++ b/dev/tests/verification/Resources/HookActionsTest.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/HookActionsTest.xml
") */ class HookActionsTestCest { diff --git a/dev/tests/verification/Resources/LocatorFunctionTest.txt b/dev/tests/verification/Resources/LocatorFunctionTest.txt index ad9a1a9e7..0292f7fdb 100644 --- a/dev/tests/verification/Resources/LocatorFunctionTest.txt +++ b/dev/tests/verification/Resources/LocatorFunctionTest.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/LocatorFunctionTest.xml
") */ class LocatorFunctionTestCest { diff --git a/dev/tests/verification/Resources/MergeMassViaInsertAfter.txt b/dev/tests/verification/Resources/MergeMassViaInsertAfter.txt index 2588e679a..84a2f7aaf 100644 --- a/dev/tests/verification/Resources/MergeMassViaInsertAfter.txt +++ b/dev/tests/verification/Resources/MergeMassViaInsertAfter.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/BasicFunctionalTest.xml
verification/TestModule/Test/MergeFunctionalTest.xml
") */ class MergeMassViaInsertAfterCest { diff --git a/dev/tests/verification/Resources/MergeMassViaInsertBefore.txt b/dev/tests/verification/Resources/MergeMassViaInsertBefore.txt index 7f220c2b7..80ee57a53 100644 --- a/dev/tests/verification/Resources/MergeMassViaInsertBefore.txt +++ b/dev/tests/verification/Resources/MergeMassViaInsertBefore.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/BasicFunctionalTest.xml
verification/TestModule/Test/MergeFunctionalTest.xml
") */ class MergeMassViaInsertBeforeCest { diff --git a/dev/tests/verification/Resources/MergeSkip.txt b/dev/tests/verification/Resources/MergeSkip.txt index 878fe6497..4831582ed 100644 --- a/dev/tests/verification/Resources/MergeSkip.txt +++ b/dev/tests/verification/Resources/MergeSkip.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/MergeFunctionalTest.xml
verification/TestModuleMerged/Test/MergeFunctionalTest.xml
") */ class MergeSkipCest { diff --git a/dev/tests/verification/Resources/MergedActionGroupTest.txt b/dev/tests/verification/Resources/MergedActionGroupTest.txt index 9bd6c0ded..95a068561 100644 --- a/dev/tests/verification/Resources/MergedActionGroupTest.txt +++ b/dev/tests/verification/Resources/MergedActionGroupTest.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class MergedActionGroupTestCest { diff --git a/dev/tests/verification/Resources/MergedReferencesTest.txt b/dev/tests/verification/Resources/MergedReferencesTest.txt index 456f66cc1..575ede44a 100644 --- a/dev/tests/verification/Resources/MergedReferencesTest.txt +++ b/dev/tests/verification/Resources/MergedReferencesTest.txt @@ -17,6 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: MergedReferencesTest") * @group functional + * @Description("

Test Files:
verification/TestModule/Test/MergeFunctionalTest.xml
") */ class MergedReferencesTestCest { diff --git a/dev/tests/verification/Resources/MultipleActionGroupsTest.txt b/dev/tests/verification/Resources/MultipleActionGroupsTest.txt index 4f12b2f07..0fa670dbd 100644 --- a/dev/tests/verification/Resources/MultipleActionGroupsTest.txt +++ b/dev/tests/verification/Resources/MultipleActionGroupsTest.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class MultipleActionGroupsTestCest { diff --git a/dev/tests/verification/Resources/PageReplacementTest.txt b/dev/tests/verification/Resources/PageReplacementTest.txt index c7bede23e..aceeb50f0 100644 --- a/dev/tests/verification/Resources/PageReplacementTest.txt +++ b/dev/tests/verification/Resources/PageReplacementTest.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/PageReplacementTest.xml
") */ class PageReplacementTestCest { diff --git a/dev/tests/verification/Resources/ParameterArrayTest.txt b/dev/tests/verification/Resources/ParameterArrayTest.txt index 8e278b826..69d758d98 100644 --- a/dev/tests/verification/Resources/ParameterArrayTest.txt +++ b/dev/tests/verification/Resources/ParameterArrayTest.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ParameterArrayTest.xml
") */ class ParameterArrayTestCest { diff --git a/dev/tests/verification/Resources/ParentExtendedTest.txt b/dev/tests/verification/Resources/ParentExtendedTest.txt index 7c0375190..e381aab94 100644 --- a/dev/tests/verification/Resources/ParentExtendedTest.txt +++ b/dev/tests/verification/Resources/ParentExtendedTest.txt @@ -17,6 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ParentExtendedTest") * @group Parent + * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ParentExtendedTestCest { diff --git a/dev/tests/verification/Resources/PersistedAndXmlEntityArguments.txt b/dev/tests/verification/Resources/PersistedAndXmlEntityArguments.txt index 7840afc76..0d1cbc596 100644 --- a/dev/tests/verification/Resources/PersistedAndXmlEntityArguments.txt +++ b/dev/tests/verification/Resources/PersistedAndXmlEntityArguments.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class PersistedAndXmlEntityArgumentsCest { diff --git a/dev/tests/verification/Resources/PersistedReplacementTest.txt b/dev/tests/verification/Resources/PersistedReplacementTest.txt index c7ef3291a..63aef963c 100644 --- a/dev/tests/verification/Resources/PersistedReplacementTest.txt +++ b/dev/tests/verification/Resources/PersistedReplacementTest.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/PersistedReplacementTest.xml
") */ class PersistedReplacementTestCest { diff --git a/dev/tests/verification/Resources/PersistenceActionGroupAppendingTest.txt b/dev/tests/verification/Resources/PersistenceActionGroupAppendingTest.txt index bc5e16294..c42195e65 100644 --- a/dev/tests/verification/Resources/PersistenceActionGroupAppendingTest.txt +++ b/dev/tests/verification/Resources/PersistenceActionGroupAppendingTest.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/PersistenceActionGroupAppendingTest.xml
") */ class PersistenceActionGroupAppendingTestCest { diff --git a/dev/tests/verification/Resources/PersistenceCustomFieldsTest.txt b/dev/tests/verification/Resources/PersistenceCustomFieldsTest.txt index 4853619e1..a01b0753e 100644 --- a/dev/tests/verification/Resources/PersistenceCustomFieldsTest.txt +++ b/dev/tests/verification/Resources/PersistenceCustomFieldsTest.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/PersistenceCustomFieldsTest.xml
") */ class PersistenceCustomFieldsTestCest { diff --git a/dev/tests/verification/Resources/SectionReplacementTest.txt b/dev/tests/verification/Resources/SectionReplacementTest.txt index aab4a87a0..4eba9ed9e 100644 --- a/dev/tests/verification/Resources/SectionReplacementTest.txt +++ b/dev/tests/verification/Resources/SectionReplacementTest.txt @@ -15,6 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** + * @Description("

Test Files:
verification/TestModule/Test/SectionReplacementTest.xml
") */ class SectionReplacementTestCest { diff --git a/dev/tests/verification/Resources/SkippedTest.txt b/dev/tests/verification/Resources/SkippedTest.txt index 1b466d4e0..369b09ba6 100644 --- a/dev/tests/verification/Resources/SkippedTest.txt +++ b/dev/tests/verification/Resources/SkippedTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: skippedTest") - * @Description("") + * @Description("

Test Files:
verification/TestModule/Test/SkippedTest.xml
") */ class SkippedTestCest { diff --git a/dev/tests/verification/Resources/SkippedTestNoIssues.txt b/dev/tests/verification/Resources/SkippedTestNoIssues.txt index b68823d39..ceeb02b77 100644 --- a/dev/tests/verification/Resources/SkippedTestNoIssues.txt +++ b/dev/tests/verification/Resources/SkippedTestNoIssues.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: skippedNoIssuesTest") - * @Description("") + * @Description("

Test Files:
verification/TestModule/Test/SkippedTest.xml
") * @group skip */ class SkippedTestNoIssuesCest diff --git a/dev/tests/verification/Resources/SkippedTestTwoIssues.txt b/dev/tests/verification/Resources/SkippedTestTwoIssues.txt index dbe3ea054..ff3f23aa6 100644 --- a/dev/tests/verification/Resources/SkippedTestTwoIssues.txt +++ b/dev/tests/verification/Resources/SkippedTestTwoIssues.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: skippedMultipleIssuesTest") - * @Description("") + * @Description("

Test Files:
verification/TestModule/Test/SkippedTest.xml
") */ class SkippedTestTwoIssuesCest { diff --git a/dev/tests/verification/Resources/SkippedTestWithHooks.txt b/dev/tests/verification/Resources/SkippedTestWithHooks.txt index ab6d241e3..eaaa344f4 100644 --- a/dev/tests/verification/Resources/SkippedTestWithHooks.txt +++ b/dev/tests/verification/Resources/SkippedTestWithHooks.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: skippedTestWithHooks") - * @Description("") + * @Description("

Test Files:
verification/TestModule/Test/SkippedTest.xml
") */ class SkippedTestWithHooksCest { diff --git a/dev/tests/verification/Resources/XmlCommentedActionGroupTest.txt b/dev/tests/verification/Resources/XmlCommentedActionGroupTest.txt index 4605cc350..111736bc8 100644 --- a/dev/tests/verification/Resources/XmlCommentedActionGroupTest.txt +++ b/dev/tests/verification/Resources/XmlCommentedActionGroupTest.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With comment block in arguments and action group body") + * @Description("

Test Files:
verification/TestModule/Test/XmlCommentedActionGroupTest.xml
") */ class XmlCommentedActionGroupTestCest { diff --git a/dev/tests/verification/Resources/XmlCommentedTest.txt b/dev/tests/verification/Resources/XmlCommentedTest.txt index 1d8bca5aa..e56140030 100644 --- a/dev/tests/verification/Resources/XmlCommentedTest.txt +++ b/dev/tests/verification/Resources/XmlCommentedTest.txt @@ -16,6 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Test With comment blocks in root element 'tests', in annotations and in test body.") + * @Description("

Test Files:
verification/TestModule/Test/XmlCommentedTest.xml
") */ class XmlCommentedTestCest { diff --git a/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php b/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php index acad18572..21df21e67 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php +++ b/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php @@ -118,6 +118,21 @@ public function extractTestData($testData) //Override features with module name if present, populates it otherwise $testAnnotations["features"] = [$module]; + // Append test file names in description annotation + if (!empty($fileNames)) { + if (isset($testAnnotations["description"][0])) { + $testAnnotations["description"][0] = $this->appendFileNamesInDescriptionAnnotation( + $testAnnotations["description"][0], + $fileNames + ); + } else { + $description = $this->appendFileNamesInDescriptionAnnotation('', $fileNames); + if (!empty($description)) { + $testAnnotations["description"][0] = $description; + } + } + } + // extract before if (array_key_exists(self::TEST_BEFORE_HOOK, $testData) && is_array($testData[self::TEST_BEFORE_HOOK])) { $testHooks[self::TEST_BEFORE_HOOK] = $this->testHookObjectExtractor->extractHook( @@ -155,4 +170,35 @@ public function extractTestData($testData) throw new XmlException($exception->getMessage() . ' in Test ' . $filename); } } + + /** + * Append names of test files, including merge files, in description annotation + * + * @param string $description + * @param array $fileNames + * + * @return string + */ + private function appendFileNamesInDescriptionAnnotation($description, $fileNames) + { + $title = ''; + foreach ($fileNames as $fileName) { + $fileName = realpath($fileName); + if (!empty($fileName)) { + $relativeFileName = ltrim( + str_replace(MAGENTO_BP, '', $fileName), + DIRECTORY_SEPARATOR + ); + if (empty($relativeFileName)) { + continue; + } + if (empty($title)) { + $title .= '

Test Files:
'; + $description .= $title; + } + $description .= $relativeFileName . '
'; + } + } + return $description; + } } From 15668f2bf5d3e1f326ce6f99dbc1f30fdd65f6c3 Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan Date: Mon, 23 Sep 2019 09:11:25 -0500 Subject: [PATCH 19/48] MQE-610: [PHPMD] Reduce Cyclomatic Complexity in Problem Methods fixing unit tests --- .../DataGenerator/Objects/EntityDataObject.php | 1 - .../Extension/PageReadinessExtension.php | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php index 03199b860..040016f28 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php @@ -191,7 +191,6 @@ public function getDataByName($name, $uniquenessFormat) * @throws TestFrameworkException * @throws \Magento\FunctionalTestingFramework\Exceptions\TestReferenceException */ - private function resolveDataReferences($name, $uniquenessFormat) { $name_lower = strtolower($name); diff --git a/src/Magento/FunctionalTestingFramework/Extension/PageReadinessExtension.php b/src/Magento/FunctionalTestingFramework/Extension/PageReadinessExtension.php index 8fb1ffe38..2dfcbec1a 100644 --- a/src/Magento/FunctionalTestingFramework/Extension/PageReadinessExtension.php +++ b/src/Magento/FunctionalTestingFramework/Extension/PageReadinessExtension.php @@ -131,7 +131,7 @@ public function beforeStep(StepEvent $e) * Check if page has changed, if so reset metric tracking * * @param Step $step - * return void + * @return void */ private function resetMetricTracker($step) { @@ -152,7 +152,7 @@ private function resetMetricTracker($step) /** * Wait for page readiness. - * @param $metrics + * @param array $metrics * @return void * @throws \Codeception\Exception\ModuleRequireException * @throws \Facebook\WebDriver\Exception\NoSuchElementException From bb7dc315c3518f16c30322bf70c665d0602ce5b2 Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Mon, 23 Sep 2019 09:55:04 -0500 Subject: [PATCH 20/48] MQE-1734: Add base + merge files to Test Description --- .../ExtendedChildTestInSuiteCest.txt | 2 +- .../Test/Util/TestObjectExtractor.php | 19 +++++++++---------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/dev/tests/verification/Resources/ExtendedChildTestInSuiteCest.txt b/dev/tests/verification/Resources/ExtendedChildTestInSuiteCest.txt index 90a620f16..c1eae903d 100644 --- a/dev/tests/verification/Resources/ExtendedChildTestInSuiteCest.txt +++ b/dev/tests/verification/Resources/ExtendedChildTestInSuiteCest.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ExtendedChildTestInSuite") * @group ExtendedTestInSuite - * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
+ * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ExtendedChildTestInSuiteCest { diff --git a/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php b/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php index 21df21e67..55209c64c 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php +++ b/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php @@ -175,7 +175,7 @@ public function extractTestData($testData) * Append names of test files, including merge files, in description annotation * * @param string $description - * @param array $fileNames + * @param array $fileNames * * @return string */ @@ -183,20 +183,19 @@ private function appendFileNamesInDescriptionAnnotation($description, $fileNames { $title = ''; foreach ($fileNames as $fileName) { - $fileName = realpath($fileName); - if (!empty($fileName)) { + if (!empty($fileName && realpath($fileName) !== false)) { + $fileName = realpath($fileName); $relativeFileName = ltrim( str_replace(MAGENTO_BP, '', $fileName), DIRECTORY_SEPARATOR ); - if (empty($relativeFileName)) { - continue; + if (!empty($relativeFileName)) { + if (empty($title)) { + $title .= '

Test Files:
'; + $description .= $title; + } + $description .= $relativeFileName . '
'; } - if (empty($title)) { - $title .= '

Test Files:
'; - $description .= $title; - } - $description .= $relativeFileName . '
'; } } return $description; From fa96ab1ba4d2bc10631233ec19aa97b0039be463 Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan Date: Mon, 23 Sep 2019 11:01:48 -0500 Subject: [PATCH 21/48] MQE-610: [PHPMD] Reduce Cyclomatic Complexity in Problem Methods Refactored to keep Cyclomatic complexity <= 10. Added comments to functions that are not refactored for readability --- .../Config/Converter/Dom/Flat.php | 1 + .../ObjectManager/Config/Config.php | 57 +++++++++++-------- .../ObjectManager/Factory.php | 5 +- .../Factory/Dynamic/Developer.php | 1 + .../Suite/Util/SuiteObjectExtractor.php | 4 +- .../Test/Config/Converter/Dom/Flat.php | 1 + 6 files changed, 43 insertions(+), 26 deletions(-) diff --git a/src/Magento/FunctionalTestingFramework/Config/Converter/Dom/Flat.php b/src/Magento/FunctionalTestingFramework/Config/Converter/Dom/Flat.php index 4350633e7..001a811d9 100644 --- a/src/Magento/FunctionalTestingFramework/Config/Converter/Dom/Flat.php +++ b/src/Magento/FunctionalTestingFramework/Config/Converter/Dom/Flat.php @@ -70,6 +70,7 @@ protected function getNodeAttributes(\DOMNode $node) * @return string|array * @throws \UnexpectedValueException * @SuppressWarnings(PHPMD.CyclomaticComplexity) + * Revisited to reduce cyclomatic complexity, left unrefactored for readability */ public function convert(\DOMNode $source, $basePath = '') { diff --git a/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Config.php b/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Config.php index c8e6c8292..9f8084b4d 100644 --- a/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Config.php +++ b/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Config.php @@ -152,7 +152,7 @@ public function getPreference($type) * * @param string $type * @return array - * @SuppressWarnings(PHPMD.CyclomaticComplexity) + * Revisited to reduce cyclomatic complexity, left unrefactored for readability */ protected function collectConfiguration($type) { @@ -194,7 +194,6 @@ protected function collectConfiguration($type) * * @param array $configuration * @return void - * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function mergeConfiguration(array $configuration) { @@ -207,32 +206,44 @@ protected function mergeConfiguration(array $configuration) break; default: - $key = ltrim($key, '\\'); - if (isset($curConfig['type'])) { - $this->virtualTypes[$key] = ltrim($curConfig['type'], '\\'); - } - if (isset($curConfig['arguments'])) { - if (!empty($this->mergedArguments)) { - $this->mergedArguments = []; - } - if (isset($this->arguments[$key])) { - $this->arguments[$key] = array_replace($this->arguments[$key], $curConfig['arguments']); - } else { - $this->arguments[$key] = $curConfig['arguments']; - } - } - if (isset($curConfig['shared'])) { - if (!$curConfig['shared']) { - $this->nonShared[$key] = 1; - } else { - unset($this->nonShared[$key]); - } - } + $this->setArguments($key, $curConfig); break; } } } + /** + * Set arguments + * + * @param string $key + * @param array $config + * @return void + */ + private function setArguments($key, $config) + { + $key = ltrim($key, '\\'); + if (isset($config['type'])) { + $this->virtualTypes[$key] = ltrim($config['type'], '\\'); + } + if (isset($config['arguments'])) { + if (!empty($this->mergedArguments)) { + $this->mergedArguments = []; + } + if (isset($this->arguments[$key])) { + $this->arguments[$key] = array_replace($this->arguments[$key], $config['arguments']); + } else { + $this->arguments[$key] = $config['arguments']; + } + } + if (isset($config['shared'])) { + if (!$config['shared']) { + $this->nonShared[$key] = 1; + } else { + unset($this->nonShared[$key]); + } + } + } + /** * Extend configuration * diff --git a/src/Magento/FunctionalTestingFramework/ObjectManager/Factory.php b/src/Magento/FunctionalTestingFramework/ObjectManager/Factory.php index 9b795d58f..c5882d035 100644 --- a/src/Magento/FunctionalTestingFramework/ObjectManager/Factory.php +++ b/src/Magento/FunctionalTestingFramework/ObjectManager/Factory.php @@ -103,6 +103,7 @@ public function prepareArguments($object, $method, array $arguments = []) * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) + * Revisited to reduce cyclomatic complexity, left unrefactored for readability */ protected function resolveArguments($requestedType, array $parameters, array $arguments = []) { @@ -179,8 +180,10 @@ protected function resolveArguments($requestedType, array $parameters, array $ar * * @param array $array * @return void + * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) + * Revisited to reduce cyclomatic complexity, left unrefactored for readability */ protected function parseArray(&$array) { @@ -219,8 +222,6 @@ protected function parseArray(&$array) * @param array $arguments * @return object * @throws \Exception - * - * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function create($requestedType, array $arguments = []) { diff --git a/src/Magento/FunctionalTestingFramework/ObjectManager/Factory/Dynamic/Developer.php b/src/Magento/FunctionalTestingFramework/ObjectManager/Factory/Dynamic/Developer.php index 73c5cc92a..937be7da6 100644 --- a/src/Magento/FunctionalTestingFramework/ObjectManager/Factory/Dynamic/Developer.php +++ b/src/Magento/FunctionalTestingFramework/ObjectManager/Factory/Dynamic/Developer.php @@ -87,6 +87,7 @@ public function setObjectManager(\Magento\FunctionalTestingFramework\ObjectManag * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) + * Revisited to reduce cyclomatic complexity, left unrefactored for readability */ protected function resolveArguments($requestedType, array $parameters, array $arguments = []) { diff --git a/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php b/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php index 642671246..676f37995 100644 --- a/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php +++ b/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php @@ -40,9 +40,11 @@ public function __construct() * @param array $parsedSuiteData * @return array * @throws XmlException + * @throws \Exception + * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) - * @throws \Exception + * Revisited to reduce cyclomatic complexity, left unrefactored for readability */ public function parseSuiteDataIntoObjects($parsedSuiteData) { diff --git a/src/Magento/FunctionalTestingFramework/Test/Config/Converter/Dom/Flat.php b/src/Magento/FunctionalTestingFramework/Test/Config/Converter/Dom/Flat.php index f888518aa..0769f5ebf 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Config/Converter/Dom/Flat.php +++ b/src/Magento/FunctionalTestingFramework/Test/Config/Converter/Dom/Flat.php @@ -70,6 +70,7 @@ public function convert($source) * @return string|array * @throws \UnexpectedValueException * @SuppressWarnings(PHPMD.CyclomaticComplexity) + * Revisited to reduce cyclomatic complexity, left unrefactored for readability */ public function convertXml(\DOMNode $source, $basePath = '') { From 216015258824b280b244a4aea09d7ba6949b445d Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan Date: Mon, 23 Sep 2019 11:20:16 -0500 Subject: [PATCH 22/48] MQE-610: [PHPMD] Reduce Cyclomatic Complexity in Problem Methods Fixed unit tests --- .../FunctionalTestingFramework/ObjectManager/Config/Config.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Config.php b/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Config.php index 9f8084b4d..486e6d6a1 100644 --- a/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Config.php +++ b/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Config.php @@ -152,6 +152,7 @@ public function getPreference($type) * * @param string $type * @return array + * @SuppressWarnings(PHPMD.CyclomaticComplexity) * Revisited to reduce cyclomatic complexity, left unrefactored for readability */ protected function collectConfiguration($type) From 17cdd8b921aae0ce11ce61d050b1d36ad7bfe183 Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan Date: Mon, 23 Sep 2019 15:13:26 -0500 Subject: [PATCH 23/48] MQE-610:[PHPMD] Reduce Cyclomatic Complexity in Problem Methods modularized SuiteObjectExtractor.php --- .../Config/Converter.php | 2 +- .../FunctionalTestingFramework/Config/Dom.php | 2 +- .../Config/FileResolver/Module.php | 2 +- .../Console/GenerateSuiteCommand.php | 1 + .../Suite/Util/SuiteObjectExtractor.php | 159 ++++++++++++------ 5 files changed, 108 insertions(+), 58 deletions(-) diff --git a/src/Magento/FunctionalTestingFramework/Config/Converter.php b/src/Magento/FunctionalTestingFramework/Config/Converter.php index 8c805c94e..cf61805dc 100644 --- a/src/Magento/FunctionalTestingFramework/Config/Converter.php +++ b/src/Magento/FunctionalTestingFramework/Config/Converter.php @@ -83,7 +83,7 @@ public function convert($source) * @param \DOMNodeList|array $elements * @return array * @SuppressWarnings(PHPMD.CyclomaticComplexity) - * @TODO ported magento code to be refactored later + * @TODO ported magento code - to be refactored later */ protected function convertXml($elements) { diff --git a/src/Magento/FunctionalTestingFramework/Config/Dom.php b/src/Magento/FunctionalTestingFramework/Config/Dom.php index 1b87dd14f..6d10811ca 100644 --- a/src/Magento/FunctionalTestingFramework/Config/Dom.php +++ b/src/Magento/FunctionalTestingFramework/Config/Dom.php @@ -145,7 +145,7 @@ protected function mergeNode(\DOMElement $node, $parentPath) * @return void * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) - * @TODO Ported magento code to be refactored later + * @TODO Ported magento code - to be refactored later */ protected function mergeMatchingNode(\DomElement $node, $parentPath, $matchedNode, $path) { diff --git a/src/Magento/FunctionalTestingFramework/Config/FileResolver/Module.php b/src/Magento/FunctionalTestingFramework/Config/FileResolver/Module.php index 970a79636..7d2493f3a 100644 --- a/src/Magento/FunctionalTestingFramework/Config/FileResolver/Module.php +++ b/src/Magento/FunctionalTestingFramework/Config/FileResolver/Module.php @@ -26,7 +26,7 @@ class Module implements FileResolverInterface * Module constructor. * @param ModuleResolver|null $moduleResolver * @SuppressWarnings(PHPMD.UnusedFormalParameter) - * @TODO ported magento code to be refactored later + * @TODO ported magento code - to be refactored later */ public function __construct(ModuleResolver $moduleResolver = null) { diff --git a/src/Magento/FunctionalTestingFramework/Console/GenerateSuiteCommand.php b/src/Magento/FunctionalTestingFramework/Console/GenerateSuiteCommand.php index 7dd3b8cb4..911a4a0cb 100644 --- a/src/Magento/FunctionalTestingFramework/Console/GenerateSuiteCommand.php +++ b/src/Magento/FunctionalTestingFramework/Console/GenerateSuiteCommand.php @@ -7,6 +7,7 @@ namespace Magento\FunctionalTestingFramework\Console; +use Magento\FunctionalTestingFramework\Config\MftfApplicationConfig; use Magento\FunctionalTestingFramework\Suite\SuiteGenerator; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; diff --git a/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php b/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php index 676f37995..f34aac136 100644 --- a/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php +++ b/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php @@ -26,12 +26,19 @@ class SuiteObjectExtractor extends BaseObjectExtractor const TEST_TAG_NAME = 'test'; const GROUP_TAG_NAME = 'group'; + /** + * TestHookObjectExtractor initialized in constructor. + * + * @var TestHookObjectExtractor + */ + private $testHookObjectExtractor; + /** * SuiteObjectExtractor constructor */ public function __construct() { - // empty constructor + $this->testHookObjectExtractor = new TestHookObjectExtractor(); } /** @@ -42,14 +49,11 @@ public function __construct() * @throws XmlException * @throws \Exception * - * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) - * Revisited to reduce cyclomatic complexity, left unrefactored for readability */ public function parseSuiteDataIntoObjects($parsedSuiteData) { $suiteObjects = []; - $testHookObjectExtractor = new TestHookObjectExtractor(); // make sure there are suites defined before trying to parse as objects. if (!array_key_exists(self::SUITE_ROOT_TAG, $parsedSuiteData)) { @@ -61,71 +65,27 @@ public function parseSuiteDataIntoObjects($parsedSuiteData) // skip non array items parsed from suite (suite objects will always be arrays) continue; } - - // validate the name used isn't using special char or the "default" reserved name - NameValidationUtil::validateName($parsedSuite[self::NAME], 'Suite'); - if ($parsedSuite[self::NAME] == 'default') { - throw new XmlException("A Suite can not have the name \"default\""); - } - - $suiteHooks = []; - - //Check for collisions between suite name and existing group name - $suiteName = $parsedSuite[self::NAME]; - $testGroupConflicts = TestObjectHandler::getInstance()->getTestsByGroup($suiteName); - if (!empty($testGroupConflicts)) { - $testGroupConflictsFileNames = ""; - foreach ($testGroupConflicts as $test) { - $testGroupConflictsFileNames .= $test->getFilename() . "\n"; - } - $exceptionmessage = "\"Suite names and Group names can not have the same value. \t\n" . - "Suite: \"{$suiteName}\" also exists as a group annotation in: \n{$testGroupConflictsFileNames}"; - throw new XmlException($exceptionmessage); - } + //check for collisions between suite and existing group names + $this->validateSuiteName($parsedSuite); //extract include and exclude references $groupTestsToInclude = $parsedSuite[self::INCLUDE_TAG_NAME] ?? []; $groupTestsToExclude = $parsedSuite[self::EXCLUDE_TAG_NAME] ?? []; - // resolve references as test objects + //resolve references as test objects $includeTests = $this->extractTestObjectsFromSuiteRef($groupTestsToInclude); $excludeTests = $this->extractTestObjectsFromSuiteRef($groupTestsToExclude); // parse any object hooks - if (array_key_exists(TestObjectExtractor::TEST_BEFORE_HOOK, $parsedSuite)) { - $suiteHooks[TestObjectExtractor::TEST_BEFORE_HOOK] = $testHookObjectExtractor->extractHook( - $parsedSuite[self::NAME], - TestObjectExtractor::TEST_BEFORE_HOOK, - $parsedSuite[TestObjectExtractor::TEST_BEFORE_HOOK] - ); - } - if (array_key_exists(TestObjectExtractor::TEST_AFTER_HOOK, $parsedSuite)) { - $suiteHooks[TestObjectExtractor::TEST_AFTER_HOOK] = $testHookObjectExtractor->extractHook( - $parsedSuite[self::NAME], - TestObjectExtractor::TEST_AFTER_HOOK, - $parsedSuite[TestObjectExtractor::TEST_AFTER_HOOK] - ); - } + $suiteHooks = $this->parseObjectHooks($parsedSuite); - if (count($suiteHooks) == 1) { - throw new XmlException(sprintf( - "Suites that contain hooks must contain both a 'before' and an 'after' hook. Suite: \"%s\"", - $parsedSuite[self::NAME] - )); - } - // check if suite hooks are empty/not included and there are no included tests/groups/modules - $noHooks = count($suiteHooks) == 0 || - ( - empty($suiteHooks['before']->getActions()) && - empty($suiteHooks['after']->getActions()) - ); - // if suite body is empty throw error - if ($noHooks && empty($includeTests) && empty($excludeTests)) { + //throw an exception if suite is empty + if ($this->isSuiteEmpty($suiteHooks, $includeTests, $excludeTests)){ throw new XmlException(sprintf( "Suites must not be empty. Suite: \"%s\"", $parsedSuite[self::NAME] )); - } + }; // add all test if include tests is completely empty if (empty($includeTests)) { @@ -144,6 +104,95 @@ public function parseSuiteDataIntoObjects($parsedSuiteData) return $suiteObjects; } + /** + * Throws exception for suite names meeting the below conditions: + * 1. the name used is using special char or the "default" reserved name + * 2. collisions between suite name and existing group name + * + * @param array $parsedSuite + * @return void + * @throws XmlException + */ + private function validateSuiteName($parsedSuite) + { + NameValidationUtil::validateName($parsedSuite[self::NAME], 'Suite'); + if ($parsedSuite[self::NAME] == 'default') { + throw new XmlException("A Suite can not have the name \"default\""); + } + + $suiteName = $parsedSuite[self::NAME]; + $testGroupConflicts = TestObjectHandler::getInstance()->getTestsByGroup($suiteName); + if (!empty($testGroupConflicts)) { + $testGroupConflictsFileNames = ""; + foreach ($testGroupConflicts as $test) { + $testGroupConflictsFileNames .= $test->getFilename() . "\n"; + } + $exceptionmessage = "\"Suite names and Group names can not have the same value. \t\n" . + "Suite: \"{$suiteName}\" also exists as a group annotation in: \n{$testGroupConflictsFileNames}"; + throw new XmlException($exceptionmessage); + } + + } + + /** + * Parse object hooks + * + * @param array $parsedSuite + * @return array + * @throws XmlException + */ + private function parseObjectHooks($parsedSuite) + { + $suiteHooks = []; + + if (array_key_exists(TestObjectExtractor::TEST_BEFORE_HOOK, $parsedSuite)) { + $suiteHooks[TestObjectExtractor::TEST_BEFORE_HOOK] = $this->testHookObjectExtractor->extractHook( + $parsedSuite[self::NAME], + TestObjectExtractor::TEST_BEFORE_HOOK, + $parsedSuite[TestObjectExtractor::TEST_BEFORE_HOOK] + ); + } + if (array_key_exists(TestObjectExtractor::TEST_AFTER_HOOK, $parsedSuite)) { + $suiteHooks[TestObjectExtractor::TEST_AFTER_HOOK] = $this->testHookObjectExtractor->extractHook( + $parsedSuite[self::NAME], + TestObjectExtractor::TEST_AFTER_HOOK, + $parsedSuite[TestObjectExtractor::TEST_AFTER_HOOK] + ); + } + + if (count($suiteHooks) == 1) { + + throw new XmlException(sprintf( + "Suites that contain hooks must contain both a 'before' and an 'after' hook. Suite: \"%s\"", + $parsedSuite[self::NAME] + )); + } + return $suiteHooks; + } + + /** + * Check if suite hooks are empty/not included and there are no included tests/groups/modules + * + * @param array $suiteHooks + * @param array $includeTests + * @param array $excludeTests + * @return bool + */ + private function isSuiteEmpty($suiteHooks, $includeTests, $excludeTests) + { + + $noHooks = count($suiteHooks) == 0 || + ( + empty($suiteHooks['before']->getActions()) && + empty($suiteHooks['after']->getActions()) + ); + + if ($noHooks && empty($includeTests) && empty($excludeTests)) { + return true; + } + return false; + } + /** * Wrapper method for resolving suite reference data, checks type of suite reference and calls corresponding * resolver for each suite reference. From 6ed2be4ae09516c0dc39150c6087980db29394f7 Mon Sep 17 00:00:00 2001 From: Kevin Kozan Date: Mon, 23 Sep 2019 15:17:12 -0500 Subject: [PATCH 24/48] MQE-1510 --- etc/config/command.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/etc/config/command.php b/etc/config/command.php index 047af324a..ab05068df 100644 --- a/etc/config/command.php +++ b/etc/config/command.php @@ -22,7 +22,8 @@ $magentoBinary = $php . ' -f ../../../../bin/magento'; $valid = validateCommand($magentoBinary, $command); if ($valid) { - $process = new Symfony\Component\Process\Process($magentoBinary . " $command" . " $arguments"); + $fullCommand = escapeshellcmd($magentoBinary . " $command" . " $arguments"); + $process = new Symfony\Component\Process\Process($fullCommand); $process->setIdleTimeout(60); $process->setTimeout(0); $idleTimeout = false; From 7fa1e22bfedd77a5afe0efa30f8d4b60dbf8050e Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan Date: Mon, 23 Sep 2019 15:54:20 -0500 Subject: [PATCH 25/48] MQE-610:[PHPMD] Reduce Cyclomatic Complexity in Problem Methods updated with develop made changes to comments of SuiteObjectExtractor.php --- .../Suite/Util/SuiteObjectExtractor.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php b/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php index f34aac136..0cf9f0470 100644 --- a/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php +++ b/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php @@ -65,7 +65,7 @@ public function parseSuiteDataIntoObjects($parsedSuiteData) // skip non array items parsed from suite (suite objects will always be arrays) continue; } - //check for collisions between suite and existing group names + $this->validateSuiteName($parsedSuite); //extract include and exclude references @@ -115,12 +115,14 @@ public function parseSuiteDataIntoObjects($parsedSuiteData) */ private function validateSuiteName($parsedSuite) { + //check if name used is using special char or the "default" reserved name NameValidationUtil::validateName($parsedSuite[self::NAME], 'Suite'); if ($parsedSuite[self::NAME] == 'default') { throw new XmlException("A Suite can not have the name \"default\""); } $suiteName = $parsedSuite[self::NAME]; + //check for collisions between suite and existing group names $testGroupConflicts = TestObjectHandler::getInstance()->getTestsByGroup($suiteName); if (!empty($testGroupConflicts)) { $testGroupConflictsFileNames = ""; From b83cc0031fb4bf938f4418bfe35958abf9320fb0 Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Tue, 24 Sep 2019 14:02:03 -0500 Subject: [PATCH 26/48] MQE-1650: update MFTF configuration to read Test entities from new location - address reviews --- .../Composer/AbstractComposer.php | 86 ++++++++++++ ...poserInstaller.php => ComposerInstall.php} | 27 ++-- ...mposerPackager.php => ComposerPackage.php} | 9 +- .../Handlers/AbstractComposerHandler.php | 131 ------------------ .../Composer/Objects/ComposerFactory.php | 39 ------ .../Composer/Util/ComposerJsonFinder.php | 68 --------- .../Page/Config/Dom.php | 2 +- .../Test/Util/TestObjectExtractor.php | 1 - .../Util/ComposerModuleResolver.php | 87 +++++++++--- .../Util/ModulePathExtractor.php | 14 +- .../Util/ModuleResolver.php | 30 +--- 11 files changed, 188 insertions(+), 306 deletions(-) create mode 100644 src/Magento/FunctionalTestingFramework/Composer/AbstractComposer.php rename src/Magento/FunctionalTestingFramework/Composer/{Handlers/ComposerInstaller.php => ComposerInstall.php} (72%) rename src/Magento/FunctionalTestingFramework/Composer/{Handlers/ComposerPackager.php => ComposerPackage.php} (95%) delete mode 100644 src/Magento/FunctionalTestingFramework/Composer/Handlers/AbstractComposerHandler.php delete mode 100644 src/Magento/FunctionalTestingFramework/Composer/Objects/ComposerFactory.php delete mode 100644 src/Magento/FunctionalTestingFramework/Composer/Util/ComposerJsonFinder.php diff --git a/src/Magento/FunctionalTestingFramework/Composer/AbstractComposer.php b/src/Magento/FunctionalTestingFramework/Composer/AbstractComposer.php new file mode 100644 index 000000000..98f72d0c1 --- /dev/null +++ b/src/Magento/FunctionalTestingFramework/Composer/AbstractComposer.php @@ -0,0 +1,86 @@ +[^,\s]+_[^,\s]+)/'; + + /**#@+ + * Composer package array keys + */ + const PACKAGE_NAME = 'name'; + const PACKAGE_TYPE = 'type'; + const PACKAGE_VERSION = 'version'; + const PACKAGE_DESCRIPTION = 'description'; + const PACKAGE_INSTALLEDPATH = 'installedPath'; + const PACKAGE_REQUIRES = 'requires'; + const PACKAGE_DEVREQUIRES = 'devRequires'; + const PACKAGE_SUGGESTS = 'suggests'; + const PACKAGE_SUGGESTED_MAGENTO_MODULES = 'suggestedMagentoModules'; + /**#@-*/ + + /** + * @var \Composer\Composer + */ + protected $composer; + + /** + * @param string $composerFile + */ + public function __construct($composerFile) + { + $this->composer = \Composer\Factory::create(new BufferIO(), $composerFile); + } + + /** + * Get composer + * + * @return \Composer\Composer + */ + protected function getComposer() + { + return $this->composer; + } + + /** + * Parse input array and return all suggested magento module names, i.e. an example "suggest" in composer.json + * + * "suggest": { + * "magento/module-backend": "type: magento2-module, name: Magento_Backend, version: ~100.0.0", + * "magento/module-store": "type: magento2-module, name: Magento_Store, version: ~100.0.0" + * } + * + * @param array $suggests + * @return array + */ + protected function parseSuggestsForMagentoModuleNames($suggests) + { + $magentoModuleNames = []; + foreach ($suggests as $suggest) { + // Expecting pattern - type: magento2-module, name: Magento_Store, version: ~100.0.0 + preg_match(self::MODULE_NAME_IN_SUGGEST_REGEX, $suggest, $match); + if (isset($match[self::MODULE_NAME_IN_SUGGEST_REGEX_INDEX])) { + $magentoModuleNames[] = $match[self::MODULE_NAME_IN_SUGGEST_REGEX_INDEX]; + } + } + + return array_unique($magentoModuleNames); + } +} diff --git a/src/Magento/FunctionalTestingFramework/Composer/Handlers/ComposerInstaller.php b/src/Magento/FunctionalTestingFramework/Composer/ComposerInstall.php similarity index 72% rename from src/Magento/FunctionalTestingFramework/Composer/Handlers/ComposerInstaller.php rename to src/Magento/FunctionalTestingFramework/Composer/ComposerInstall.php index 6be7e8670..f10c0b418 100644 --- a/src/Magento/FunctionalTestingFramework/Composer/Handlers/ComposerInstaller.php +++ b/src/Magento/FunctionalTestingFramework/Composer/ComposerInstall.php @@ -3,15 +3,20 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\FunctionalTestingFramework\Composer\Handlers; +namespace Magento\FunctionalTestingFramework\Composer; use Composer\Package\CompletePackageInterface; /** * Class ComposerInstaller handles information and dependencies for composer installed packages */ -class ComposerInstaller extends AbstractComposerHandler +class ComposerInstall extends AbstractComposer { + /** + * @var \Composer\Package\Locker + */ + private $locker; + /** * Determines if package is a mftf test package * @@ -64,17 +69,17 @@ public function getInstalledTestPackages() foreach ($this->getLocker()->getLockedRepository()->getPackages() as $package) { if ($package->getType() == self::TEST_MODULE_PACKAGE_TYPE) { $packages[$package->getName()] = [ - self::KEY_PACKAGE_NAME => $package->getName(), - self::KEY_PACKAGE_TYPE => $package->getType(), - self::KEY_PACKAGE_VERSION => $package->getPrettyVersion(), - self::KEY_PACKAGE_DESCRIPTION => $package->getDescription(), - self::KEY_PACKAGE_SUGGESTS => $package->getSuggests(), - self::KEY_PACKAGE_REQUIRES => $package->getRequires(), - self::KEY_PACKAGE_DEVREQUIRES => $package->getDevRequires(), - self::KEY_PACKAGE_SUGGESTED_MAGENTO_MODULES => $this->parseSuggestsForMagentoModuleNames( + self::PACKAGE_NAME => $package->getName(), + self::PACKAGE_TYPE => $package->getType(), + self::PACKAGE_VERSION => $package->getPrettyVersion(), + self::PACKAGE_DESCRIPTION => $package->getDescription(), + self::PACKAGE_SUGGESTS => $package->getSuggests(), + self::PACKAGE_REQUIRES => $package->getRequires(), + self::PACKAGE_DEVREQUIRES => $package->getDevRequires(), + self::PACKAGE_SUGGESTED_MAGENTO_MODULES => $this->parseSuggestsForMagentoModuleNames( $package->getSuggests() ), - self::KEY_PACKAGE_INSTALLEDPATH => $this->getComposer()->getInstallationManager() + self::PACKAGE_INSTALLEDPATH => $this->getComposer()->getInstallationManager() ->getInstallPath($package) ]; } diff --git a/src/Magento/FunctionalTestingFramework/Composer/Handlers/ComposerPackager.php b/src/Magento/FunctionalTestingFramework/Composer/ComposerPackage.php similarity index 95% rename from src/Magento/FunctionalTestingFramework/Composer/Handlers/ComposerPackager.php rename to src/Magento/FunctionalTestingFramework/Composer/ComposerPackage.php index 944d1300d..0a6bfdca2 100644 --- a/src/Magento/FunctionalTestingFramework/Composer/Handlers/ComposerPackager.php +++ b/src/Magento/FunctionalTestingFramework/Composer/ComposerPackage.php @@ -3,13 +3,18 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ -namespace Magento\FunctionalTestingFramework\Composer\Handlers; +namespace Magento\FunctionalTestingFramework\Composer; /** * Class ComposerPackage contains composer json information in a MFTF test package */ -class ComposerPackager extends AbstractComposerHandler +class ComposerPackage extends AbstractComposer { + /** + * @var \Composer\Package\CompletePackage + */ + private $rootPackage; + /** * Retrieve package name from composer json * diff --git a/src/Magento/FunctionalTestingFramework/Composer/Handlers/AbstractComposerHandler.php b/src/Magento/FunctionalTestingFramework/Composer/Handlers/AbstractComposerHandler.php deleted file mode 100644 index b86ee22ff..000000000 --- a/src/Magento/FunctionalTestingFramework/Composer/Handlers/AbstractComposerHandler.php +++ /dev/null @@ -1,131 +0,0 @@ -composerFactory = $composerFactory; - } - - /** - * Load ComposerFactory - * - * @return composerFactory - */ - protected function getComposerFactory() - { - if (!$this->composerFactory) { - $this->composerFactory = ObjectManager::getInstance()->get(ComposerFactory::class); - } - return $this->composerFactory; - } - - /** - * Load Composer - * - * @return \Composer\Composer - */ - protected function getComposer() - { - if (!$this->composer) { - $this->composer = $this->getComposerFactory()->create(); - } - return $this->composer; - } - - /** - * Parse input array and return all suggested magento module names in pattern like: Magento_Store, Amazon_Core, etc - * - * @param array $suggests - * @return array - */ - protected function parseSuggestsForMagentoModuleNames($suggests) - { - $magentoModuleNames = []; - foreach ($suggests as $suggest) { - $parts = explode(',', $suggest); - $data = []; - foreach ($parts as $part) { - if (strpos($part, ':') !== false) { - list($name, $value) = explode(':', $part, 2); - $data[strtolower(trim($name))] = trim($value); - } - } - - if (isset($data[self::SUGGEST_TYPE]) - && $data[self::SUGGEST_TYPE] == self::MAGENTO_MODULE_PACKAGE_TYPE - && isset($data[self::SUGGEST_NAME]) - && strpos($data[self::SUGGEST_NAME], '_') !== false) { - $magentoModuleNames[] = $data[self::SUGGEST_NAME]; - } - } - return array_unique($magentoModuleNames); - } -} diff --git a/src/Magento/FunctionalTestingFramework/Composer/Objects/ComposerFactory.php b/src/Magento/FunctionalTestingFramework/Composer/Objects/ComposerFactory.php deleted file mode 100644 index ed644af52..000000000 --- a/src/Magento/FunctionalTestingFramework/Composer/Objects/ComposerFactory.php +++ /dev/null @@ -1,39 +0,0 @@ -composerFile = $composerFile; - } - - /** - * Create \Composer\Composer - * - * @return \Composer\Composer - * @throws \Exception - */ - public function create() - { - return \Composer\Factory::create(new BufferIO(), $this->composerFile); - } -} diff --git a/src/Magento/FunctionalTestingFramework/Composer/Util/ComposerJsonFinder.php b/src/Magento/FunctionalTestingFramework/Composer/Util/ComposerJsonFinder.php deleted file mode 100644 index 189a7f6fe..000000000 --- a/src/Magento/FunctionalTestingFramework/Composer/Util/ComposerJsonFinder.php +++ /dev/null @@ -1,68 +0,0 @@ - 0) { - foreach (glob($directory . $subDirectoryPattern, GLOB_ONLYDIR) as $dir) { - $jsonFileList = array_merge_recursive( - $jsonFileList, - self::finComposerJsonFilesAtDepth($dir, $depth-1) - ); - } - } elseif ($depth == 0) { - $jsonFileList = glob($directory . $jsonPattern); - if ($jsonFileList === false) { - $jsonFileList = []; - } - } - return $jsonFileList; - } -} diff --git a/src/Magento/FunctionalTestingFramework/Page/Config/Dom.php b/src/Magento/FunctionalTestingFramework/Page/Config/Dom.php index a67cb1f1e..989209461 100644 --- a/src/Magento/FunctionalTestingFramework/Page/Config/Dom.php +++ b/src/Magento/FunctionalTestingFramework/Page/Config/Dom.php @@ -93,7 +93,7 @@ public function initDom($xml, $filename = null) foreach ($pageNodes as $pageNode) { $pageModule = $pageNode->getAttribute("module"); $pageName = $pageNode->getAttribute("name"); - if ($pageModule != $currentModule) { + if ($pageModule !== $currentModule) { if (MftfApplicationConfig::getConfig()->verboseEnabled()) { print( "Page Module does not match path Module. " . diff --git a/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php b/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php index 0e61d864e..acad18572 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php +++ b/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php @@ -11,7 +11,6 @@ use Magento\FunctionalTestingFramework\Test\Objects\ActionObject; use Magento\FunctionalTestingFramework\Test\Objects\TestObject; use Magento\FunctionalTestingFramework\Util\ModulePathExtractor; -use Magento\FunctionalTestingFramework\Util\ModuleResolver; use Magento\FunctionalTestingFramework\Util\Validation\NameValidationUtil; /** diff --git a/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php index 9f9ea5cb1..5152989e7 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php @@ -5,10 +5,8 @@ */ namespace Magento\FunctionalTestingFramework\Util; -use Magento\FunctionalTestingFramework\Composer\Handlers\ComposerInstaller; -use Magento\FunctionalTestingFramework\Composer\Util\ComposerJsonFinder; -use Magento\FunctionalTestingFramework\Composer\Objects\ComposerFactory; -use Magento\FunctionalTestingFramework\Composer\Handlers\ComposerPackager; +use Magento\FunctionalTestingFramework\Composer\ComposerInstall; +use Magento\FunctionalTestingFramework\Composer\ComposerPackage; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; /** @@ -50,18 +48,16 @@ public function getComposerInstalledTestModules($rootComposerFile) return $this->installedTestModules; } - if (!is_file($rootComposerFile) || substr($rootComposerFile, -13) != 'composer.json') { + if (!file_exists($rootComposerFile) || basename($rootComposerFile, '.json') != 'composer') { throw new TestFrameworkException("Invalid root composer json file: {$rootComposerFile}"); } $this->installedTestModules = []; - $composerInstaller = new ComposerInstaller( - new ComposerFactory($rootComposerFile) - ); + $composer = new ComposerInstall($rootComposerFile); - foreach ($composerInstaller->getInstalledTestPackages() as $packageName => $packageData) { - $suggestedModuleNames = $packageData[ComposerInstaller::KEY_PACKAGE_SUGGESTED_MAGENTO_MODULES]; - $path = $packageData[ComposerInstaller::KEY_PACKAGE_INSTALLEDPATH]; + foreach ($composer->getInstalledTestPackages() as $packageName => $packageData) { + $suggestedModuleNames = $packageData[ComposerInstall::PACKAGE_SUGGESTED_MAGENTO_MODULES]; + $path = $packageData[ComposerInstall::PACKAGE_INSTALLEDPATH]; $this->installedTestModules[$path] = $suggestedModuleNames; } return $this->installedTestModules; @@ -106,25 +102,78 @@ private function getTestModules($directory) // Find all composer json files under directory $modules = []; - $jsonFinder = new ComposerJsonFinder(); - $fileList = $jsonFinder->finComposerJsonFilesAtDepth($normalizedDir, 2); + $fileList = $this->findComposerJsonFilesAtDepth($normalizedDir, 2); foreach ($fileList as $file) { // Parse composer json for test module name and path information - $composerInfo = new ComposerPackager( - new ComposerFactory($file) - ); + $composerInfo = new ComposerPackage($file); if ($composerInfo->isMftfTestPackage()) { - //$moduleName = $composerInfo->getName(); $modulePath = str_replace( DIRECTORY_SEPARATOR . 'composer.json', '', $file ); $suggestedMagentoModuleNames = $composerInfo->getSuggestedMagentoModules(); - $module[$modulePath] = $suggestedMagentoModuleNames; - $modules = array_merge_recursive($modules, $module); + if (array_key_exists($modulePath, $modules)) { + $modules[$modulePath] = array_merge($modules[$modulePath], $suggestedMagentoModuleNames); + } else { + $modules[$modulePath] = $suggestedMagentoModuleNames; + } } } return $modules; } + + /** + * Find absolute paths of all composer json files in a given directory + * + * @param string $directory + * @return array + */ + private function findAllComposerJsonFiles($directory) + { + $directory = realpath($directory); + $jsonPattern = DIRECTORY_SEPARATOR . "composer.json"; + $subDirectoryPattern = DIRECTORY_SEPARATOR . "*"; + + $jsonFileList = glob($directory . $jsonPattern); + if ($jsonFileList !== false && !empty($jsonFileList)) { + return $jsonFileList; + } else { + $jsonFileList = []; + foreach (glob($directory . $subDirectoryPattern, GLOB_ONLYDIR) as $dir) { + $jsonFileList = array_merge_recursive($jsonFileList, self::findAllComposerJsonFiles($dir)); + } + return $jsonFileList; + } + } + + /** + * Find absolute paths of all composer json files in a given directory at certain depths + * + * @param string $directory + * @param integer $depth + * @return array + */ + private function findComposerJsonFilesAtDepth($directory, $depth) + { + $directory = realpath($directory); + $jsonPattern = DIRECTORY_SEPARATOR . "composer.json"; + $subDirectoryPattern = DIRECTORY_SEPARATOR . "*"; + + $jsonFileList = []; + if ($depth > 0) { + foreach (glob($directory . $subDirectoryPattern, GLOB_ONLYDIR) as $dir) { + $jsonFileList = array_merge_recursive( + $jsonFileList, + self::findComposerJsonFilesAtDepth($dir, $depth-1) + ); + } + } elseif ($depth == 0) { + $jsonFileList = glob($directory . $jsonPattern); + if ($jsonFileList === false) { + $jsonFileList = []; + } + } + return $jsonFileList; + } } diff --git a/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php b/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php index 1ec556743..c315ccc0b 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php @@ -25,9 +25,9 @@ class ModulePathExtractor */ public function __construct() { - $verbose = true; + $verbosePath = true; if (empty($this->testModulePaths)) { - $this->testModulePaths = ModuleResolver::getInstance()->getModulesPath($verbose); + $this->testModulePaths = ModuleResolver::getInstance()->getModulesPath($verbosePath); } } @@ -83,15 +83,11 @@ private function splitKeyForParts($key) */ private function extractKeyByPath($path) { - if (empty($path)) { + $shortenedPath = dirname(dirname($path)); + if ($shortenedPath === '.' || !is_dir($shortenedPath)) { return ''; } - $paths = explode(DIRECTORY_SEPARATOR, $path); - if (count($paths) < 3) { - return ''; - } - $paths = array_slice($paths, 0, count($paths)-2); - $shortenedPath = implode(DIRECTORY_SEPARATOR, $paths); + foreach ($this->testModulePaths as $key => $value) { if ($value == $shortenedPath) { return $key; diff --git a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php index 7944ae98d..c27496dd5 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php @@ -39,24 +39,9 @@ class ModuleResolver */ const REGISTRAR_CLASS = "\Magento\Framework\Component\ComponentRegistrar"; - /** - * const for Test/Mftf - */ const TEST_MFTF_PATTERN = 'Test' . DIRECTORY_SEPARATOR . 'Mftf'; - - /** - * const for vendor - */ const VENDOR = 'vendor'; - - /** - * const for app/code - */ const APP_CODE = 'app' . DIRECTORY_SEPARATOR . "code"; - - /** - * const for dev/tests/acceptance/tests/functional - */ const DEV_TESTS = 'dev' . DIRECTORY_SEPARATOR . 'tests' @@ -66,10 +51,6 @@ class ModuleResolver . 'tests' . DIRECTORY_SEPARATOR . 'functional'; - - /** - * Deprecated dev tests code path - */ const DEPRECATED_DEV_TESTS = DIRECTORY_SEPARATOR . self:: DEV_TESTS . DIRECTORY_SEPARATOR @@ -250,16 +231,16 @@ public function getEnabledModules() /** * Return the modules path based on which modules are enabled in the target Magento instance. * - * @param boolean $verbose + * @param boolean $verbosePath * @return array */ - public function getModulesPath($verbose = false) + public function getModulesPath($verbosePath = false) { - if (isset($this->enabledModulePaths) && !$verbose) { + if (isset($this->enabledModulePaths) && !$verbosePath) { return $this->enabledModulePaths; } - if (isset($this->enabledModuleNameAndPaths) && $verbose) { + if (isset($this->enabledModuleNameAndPaths) && $verbosePath) { return $this->enabledModuleNameAndPaths; } @@ -391,7 +372,7 @@ private function globRelevantPaths($testPath, $pattern) } if (strpos($testPath, self::DEPRECATED_DEV_TESTS) !== false && !empty($modulePaths)) { - $deprecatedPath = self::DEPRECATED_DEV_TESTS; + $deprecatedPath = ltrim(self::DEPRECATED_DEV_TESTS, DIRECTORY_SEPARATOR); $suggestedPath = self::DEV_TESTS . DIRECTORY_SEPARATOR . 'Magento'; $message = "DEPRECATION: Found MFTF test modules in the deprecated path: $deprecatedPath." . " Move these test modules to $suggestedPath."; @@ -512,7 +493,6 @@ private function getComposerInstalledTestModulePaths($composerFile) /** * Flip and filter module code paths - * when * * @param array $objectArray * @param array $filterArray From bf0de8fc2b38cc3b8378c44db4cba83f0b91df70 Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Wed, 25 Sep 2019 09:22:30 -0500 Subject: [PATCH 27/48] MQE-1650: update MFTF configuration to read Test entities from new location - address reviews --- .../FunctionalTestingFramework/Util/ModulePathExtractor.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php b/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php index c315ccc0b..80b556f9a 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModulePathExtractor.php @@ -84,7 +84,8 @@ private function splitKeyForParts($key) private function extractKeyByPath($path) { $shortenedPath = dirname(dirname($path)); - if ($shortenedPath === '.' || !is_dir($shortenedPath)) { + // Ignore this path if we cannot go to parent directory two levels up + if (empty($shortenedPath) || $shortenedPath === '.') { return ''; } From f167834af13bc067f5a590d5ced5d86b5bd0f6d4 Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan Date: Wed, 25 Sep 2019 11:42:17 -0500 Subject: [PATCH 28/48] MQE-610:[PHPMD] Reduce Cyclomatic Complexity in Problem Methods fixed unit tests --- .../Suite/Util/SuiteObjectExtractor.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php b/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php index 0cf9f0470..157e54023 100644 --- a/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php +++ b/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php @@ -80,7 +80,7 @@ public function parseSuiteDataIntoObjects($parsedSuiteData) $suiteHooks = $this->parseObjectHooks($parsedSuite); //throw an exception if suite is empty - if ($this->isSuiteEmpty($suiteHooks, $includeTests, $excludeTests)){ + if ($this->isSuiteEmpty($suiteHooks, $includeTests, $excludeTests)) { throw new XmlException(sprintf( "Suites must not be empty. Suite: \"%s\"", $parsedSuite[self::NAME] @@ -133,7 +133,6 @@ private function validateSuiteName($parsedSuite) "Suite: \"{$suiteName}\" also exists as a group annotation in: \n{$testGroupConflictsFileNames}"; throw new XmlException($exceptionmessage); } - } /** @@ -163,7 +162,6 @@ private function parseObjectHooks($parsedSuite) } if (count($suiteHooks) == 1) { - throw new XmlException(sprintf( "Suites that contain hooks must contain both a 'before' and an 'after' hook. Suite: \"%s\"", $parsedSuite[self::NAME] @@ -190,7 +188,7 @@ private function isSuiteEmpty($suiteHooks, $includeTests, $excludeTests) ); if ($noHooks && empty($includeTests) && empty($excludeTests)) { - return true; + return true; } return false; } From 8c9b667d73e959dccfa6c69fd2a62cbf50ad0879 Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan Date: Wed, 25 Sep 2019 13:07:54 -0500 Subject: [PATCH 29/48] MQE-610:[PHPMD] Reduce Cyclomatic Complexity in Problem Methods fixed unit tests --- .../Suite/Util/SuiteObjectExtractor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php b/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php index 157e54023..7ef3d5e8c 100644 --- a/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php +++ b/src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php @@ -176,7 +176,7 @@ private function parseObjectHooks($parsedSuite) * @param array $suiteHooks * @param array $includeTests * @param array $excludeTests - * @return bool + * @return boolean */ private function isSuiteEmpty($suiteHooks, $includeTests, $excludeTests) { From e73a3d34f2fbd161b32527430045732f1c0743ba Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Wed, 25 Sep 2019 13:24:51 -0500 Subject: [PATCH 30/48] MQE-1734: Add base + merge files to Test Description --- .../Test/Handlers/TestObjectHandlerTest.php | 3 +- .../ActionGroupContainsStepKeyInArgText.txt | 2 +- .../ActionGroupMergedViaInsertAfter.txt | 2 +- .../ActionGroupMergedViaInsertBefore.txt | 2 +- .../Resources/ActionGroupSkipReadiness.txt | 2 +- .../Resources/ActionGroupToExtend.txt | 2 +- .../Resources/ActionGroupUsingCreateData.txt | 2 +- .../ActionGroupUsingNestedArgument.txt | 2 +- .../ActionGroupWithDataOverrideTest.txt | 2 +- .../Resources/ActionGroupWithDataTest.txt | 2 +- ...hDefaultArgumentAndStringSelectorParam.txt | 2 +- ...eParameterSelectorsFromDefaultArgument.txt | 2 +- .../Resources/ActionGroupWithNoArguments.txt | 2 +- .../ActionGroupWithNoDefaultTest.txt | 2 +- ...roupWithParameterizedElementWithHyphen.txt | 2 +- ...meterizedElementsWithStepKeyReferences.txt | 2 +- ...thPassedArgumentAndStringSelectorParam.txt | 2 +- .../ActionGroupWithPersistedData.txt | 2 +- ...tionGroupWithSectionAndDataAsArguments.txt | 2 +- ...WithSimpleDataUsageFromDefaultArgument.txt | 2 +- ...pWithSimpleDataUsageFromPassedArgument.txt | 2 +- ...leParameterSelectorFromDefaultArgument.txt | 2 +- ...gleParameterSelectorFromPassedArgument.txt | 2 +- .../ActionGroupWithStepKeyReferences.txt | 2 +- .../ActionGroupWithTopLevelPersistedData.txt | 2 +- .../ArgumentWithSameNameAsElement.txt | 2 +- .../verification/Resources/AssertTest.txt | 2 +- .../Resources/BasicActionGroupTest.txt | 2 +- .../Resources/BasicFunctionalTest.txt | 2 +- .../verification/Resources/BasicMergeTest.txt | 2 +- .../Resources/CharacterReplacementTest.txt | 2 +- .../Resources/ChildExtendedTestAddHooks.txt | 2 +- .../Resources/ChildExtendedTestMerging.txt | 2 +- .../Resources/ChildExtendedTestNoParent.txt | 2 +- .../ChildExtendedTestRemoveAction.txt | 2 +- .../ChildExtendedTestRemoveHookAction.txt | 2 +- .../Resources/ChildExtendedTestReplace.txt | 2 +- .../ChildExtendedTestReplaceHook.txt | 2 +- .../Resources/DataActionsTest.txt | 2 +- .../Resources/DataReplacementTest.txt | 2 +- .../Resources/ExecuteInSeleniumTest.txt | 2 +- .../Resources/ExecuteJsEscapingTest.txt | 2 +- .../Resources/ExtendParentDataTest.txt | 2 +- .../Resources/ExtendedActionGroup.txt | 2 +- .../ExtendedChildTestInSuiteCest.txt | 2 +- .../Resources/ExtendedChildTestNotInSuite.txt | 2 +- .../Resources/ExtendedRemoveActionGroup.txt | 2 +- .../Resources/ExtendingSkippedTest.txt | 2 +- .../Resources/HookActionsTest.txt | 2 +- .../Resources/LocatorFunctionTest.txt | 2 +- .../Resources/MergeMassViaInsertAfter.txt | 2 +- .../Resources/MergeMassViaInsertBefore.txt | 2 +- .../verification/Resources/MergeSkip.txt | 2 +- .../Resources/MergedActionGroupTest.txt | 2 +- .../Resources/MergedReferencesTest.txt | 2 +- .../Resources/MultipleActionGroupsTest.txt | 2 +- .../Resources/PageReplacementTest.txt | 2 +- .../Resources/ParameterArrayTest.txt | 2 +- .../Resources/ParentExtendedTest.txt | 2 +- .../PersistedAndXmlEntityArguments.txt | 2 +- .../Resources/PersistedReplacementTest.txt | 2 +- .../PersistenceActionGroupAppendingTest.txt | 2 +- .../Resources/PersistenceCustomFieldsTest.txt | 2 +- .../Resources/SectionReplacementTest.txt | 2 +- .../verification/Resources/SkippedTest.txt | 2 +- .../Resources/SkippedTestNoIssues.txt | 2 +- .../Resources/SkippedTestTwoIssues.txt | 2 +- .../Resources/SkippedTestWithHooks.txt | 2 +- .../Resources/XmlCommentedActionGroupTest.txt | 2 +- .../Resources/XmlCommentedTest.txt | 2 +- .../Test/Util/TestObjectExtractor.php | 32 ++++++++----------- 71 files changed, 84 insertions(+), 89 deletions(-) diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php index a94c41ae4..032c4c64e 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php @@ -89,7 +89,8 @@ public function testGetTestObject() ["testActionInTest" => $expectedTestActionObject], [ 'features' => ['NO MODULE DETECTED'], - 'group' => ['test'] + 'group' => ['test'], + 'description' => ['

Test files
'] ], [ TestObjectExtractor::TEST_BEFORE_HOOK => $expectedBeforeHookObject, diff --git a/dev/tests/verification/Resources/ActionGroupContainsStepKeyInArgText.txt b/dev/tests/verification/Resources/ActionGroupContainsStepKeyInArgText.txt index 092f0a9fa..309ed5f08 100644 --- a/dev/tests/verification/Resources/ActionGroupContainsStepKeyInArgText.txt +++ b/dev/tests/verification/Resources/ActionGroupContainsStepKeyInArgText.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupContainsStepKeyInArgTextCest { diff --git a/dev/tests/verification/Resources/ActionGroupMergedViaInsertAfter.txt b/dev/tests/verification/Resources/ActionGroupMergedViaInsertAfter.txt index 2e9a33069..36c1ac2a8 100644 --- a/dev/tests/verification/Resources/ActionGroupMergedViaInsertAfter.txt +++ b/dev/tests/verification/Resources/ActionGroupMergedViaInsertAfter.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupMergedViaInsertAfterCest { diff --git a/dev/tests/verification/Resources/ActionGroupMergedViaInsertBefore.txt b/dev/tests/verification/Resources/ActionGroupMergedViaInsertBefore.txt index 740eecb03..3f61b63eb 100644 --- a/dev/tests/verification/Resources/ActionGroupMergedViaInsertBefore.txt +++ b/dev/tests/verification/Resources/ActionGroupMergedViaInsertBefore.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupMergedViaInsertBeforeCest { diff --git a/dev/tests/verification/Resources/ActionGroupSkipReadiness.txt b/dev/tests/verification/Resources/ActionGroupSkipReadiness.txt index 22a7a170a..520e153a8 100644 --- a/dev/tests/verification/Resources/ActionGroupSkipReadiness.txt +++ b/dev/tests/verification/Resources/ActionGroupSkipReadiness.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupSkipReadinessCest { diff --git a/dev/tests/verification/Resources/ActionGroupToExtend.txt b/dev/tests/verification/Resources/ActionGroupToExtend.txt index 04551c443..43a47c4b7 100644 --- a/dev/tests/verification/Resources/ActionGroupToExtend.txt +++ b/dev/tests/verification/Resources/ActionGroupToExtend.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupToExtendCest { diff --git a/dev/tests/verification/Resources/ActionGroupUsingCreateData.txt b/dev/tests/verification/Resources/ActionGroupUsingCreateData.txt index fb4cf1209..0bbff16eb 100644 --- a/dev/tests/verification/Resources/ActionGroupUsingCreateData.txt +++ b/dev/tests/verification/Resources/ActionGroupUsingCreateData.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupUsingCreateDataCest { diff --git a/dev/tests/verification/Resources/ActionGroupUsingNestedArgument.txt b/dev/tests/verification/Resources/ActionGroupUsingNestedArgument.txt index 3ebb37066..b82db0cf6 100644 --- a/dev/tests/verification/Resources/ActionGroupUsingNestedArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupUsingNestedArgument.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupUsingNestedArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithDataOverrideTest.txt b/dev/tests/verification/Resources/ActionGroupWithDataOverrideTest.txt index b8038c4f2..09830300d 100644 --- a/dev/tests/verification/Resources/ActionGroupWithDataOverrideTest.txt +++ b/dev/tests/verification/Resources/ActionGroupWithDataOverrideTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupWithDataOverrideTestCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithDataTest.txt b/dev/tests/verification/Resources/ActionGroupWithDataTest.txt index 4b8bc4427..b5b006217 100644 --- a/dev/tests/verification/Resources/ActionGroupWithDataTest.txt +++ b/dev/tests/verification/Resources/ActionGroupWithDataTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupWithDataTestCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithDefaultArgumentAndStringSelectorParam.txt b/dev/tests/verification/Resources/ActionGroupWithDefaultArgumentAndStringSelectorParam.txt index 7b5bb9d81..907d4a3a3 100644 --- a/dev/tests/verification/Resources/ActionGroupWithDefaultArgumentAndStringSelectorParam.txt +++ b/dev/tests/verification/Resources/ActionGroupWithDefaultArgumentAndStringSelectorParam.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Default Argument Value and Hardcoded Value in Param") - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithDefaultArgumentAndStringSelectorParamCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithMultipleParameterSelectorsFromDefaultArgument.txt b/dev/tests/verification/Resources/ActionGroupWithMultipleParameterSelectorsFromDefaultArgument.txt index 92cd050f4..b3c986825 100644 --- a/dev/tests/verification/Resources/ActionGroupWithMultipleParameterSelectorsFromDefaultArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupWithMultipleParameterSelectorsFromDefaultArgument.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Passed Argument Value and Multiple Argument Values in Param") - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithMultipleParameterSelectorsFromDefaultArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithNoArguments.txt b/dev/tests/verification/Resources/ActionGroupWithNoArguments.txt index 0bd1ee91e..4fbaa2f0d 100644 --- a/dev/tests/verification/Resources/ActionGroupWithNoArguments.txt +++ b/dev/tests/verification/Resources/ActionGroupWithNoArguments.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With No Argument") - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithNoArgumentsCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithNoDefaultTest.txt b/dev/tests/verification/Resources/ActionGroupWithNoDefaultTest.txt index 7195229ff..2b91178bb 100644 --- a/dev/tests/verification/Resources/ActionGroupWithNoDefaultTest.txt +++ b/dev/tests/verification/Resources/ActionGroupWithNoDefaultTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupWithNoDefaultTestCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithParameterizedElementWithHyphen.txt b/dev/tests/verification/Resources/ActionGroupWithParameterizedElementWithHyphen.txt index a9b35b842..dc6a7c2b1 100644 --- a/dev/tests/verification/Resources/ActionGroupWithParameterizedElementWithHyphen.txt +++ b/dev/tests/verification/Resources/ActionGroupWithParameterizedElementWithHyphen.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithParameterizedElementWithHyphenCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithParameterizedElementsWithStepKeyReferences.txt b/dev/tests/verification/Resources/ActionGroupWithParameterizedElementsWithStepKeyReferences.txt index 643d2db81..41e433486 100644 --- a/dev/tests/verification/Resources/ActionGroupWithParameterizedElementsWithStepKeyReferences.txt +++ b/dev/tests/verification/Resources/ActionGroupWithParameterizedElementsWithStepKeyReferences.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithParameterizedElementsWithStepKeyReferencesCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithPassedArgumentAndStringSelectorParam.txt b/dev/tests/verification/Resources/ActionGroupWithPassedArgumentAndStringSelectorParam.txt index dcceecb88..061574065 100644 --- a/dev/tests/verification/Resources/ActionGroupWithPassedArgumentAndStringSelectorParam.txt +++ b/dev/tests/verification/Resources/ActionGroupWithPassedArgumentAndStringSelectorParam.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Passed Argument Value and Hardcoded Value in Param") - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithPassedArgumentAndStringSelectorParamCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithPersistedData.txt b/dev/tests/verification/Resources/ActionGroupWithPersistedData.txt index 3df1c4a93..16af7f45c 100644 --- a/dev/tests/verification/Resources/ActionGroupWithPersistedData.txt +++ b/dev/tests/verification/Resources/ActionGroupWithPersistedData.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupWithPersistedDataCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithSectionAndDataAsArguments.txt b/dev/tests/verification/Resources/ActionGroupWithSectionAndDataAsArguments.txt index 014fd5573..a946d4694 100644 --- a/dev/tests/verification/Resources/ActionGroupWithSectionAndDataAsArguments.txt +++ b/dev/tests/verification/Resources/ActionGroupWithSectionAndDataAsArguments.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithSectionAndDataAsArgumentsCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromDefaultArgument.txt b/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromDefaultArgument.txt index 648c9132b..fdd60c771 100644 --- a/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromDefaultArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromDefaultArgument.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Simple Data Usage From Default Argument") - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithSimpleDataUsageFromDefaultArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromPassedArgument.txt b/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromPassedArgument.txt index c91a3a765..c52394821 100644 --- a/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromPassedArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromPassedArgument.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Simple Data Usage From Passed Argument") - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithSimpleDataUsageFromPassedArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromDefaultArgument.txt b/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromDefaultArgument.txt index d17e930e7..97e48f9cd 100644 --- a/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromDefaultArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromDefaultArgument.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Default Argument Value and Argument Value in Param") - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithSingleParameterSelectorFromDefaultArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromPassedArgument.txt b/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromPassedArgument.txt index 9c7968cc3..d59abd2bd 100644 --- a/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromPassedArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromPassedArgument.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Passed Argument Value and Argument Value in Param") - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithSingleParameterSelectorFromPassedArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithStepKeyReferences.txt b/dev/tests/verification/Resources/ActionGroupWithStepKeyReferences.txt index b74835caa..8a7527ed4 100644 --- a/dev/tests/verification/Resources/ActionGroupWithStepKeyReferences.txt +++ b/dev/tests/verification/Resources/ActionGroupWithStepKeyReferences.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithStepKeyReferencesCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithTopLevelPersistedData.txt b/dev/tests/verification/Resources/ActionGroupWithTopLevelPersistedData.txt index 4a7455b13..74f929157 100644 --- a/dev/tests/verification/Resources/ActionGroupWithTopLevelPersistedData.txt +++ b/dev/tests/verification/Resources/ActionGroupWithTopLevelPersistedData.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupWithTopLevelPersistedDataCest { diff --git a/dev/tests/verification/Resources/ArgumentWithSameNameAsElement.txt b/dev/tests/verification/Resources/ArgumentWithSameNameAsElement.txt index a1137c443..edcfac5c7 100644 --- a/dev/tests/verification/Resources/ArgumentWithSameNameAsElement.txt +++ b/dev/tests/verification/Resources/ArgumentWithSameNameAsElement.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ArgumentWithSameNameAsElementCest { diff --git a/dev/tests/verification/Resources/AssertTest.txt b/dev/tests/verification/Resources/AssertTest.txt index 8e3a03d2e..ed4853489 100644 --- a/dev/tests/verification/Resources/AssertTest.txt +++ b/dev/tests/verification/Resources/AssertTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/AssertTest.xml
") + * @Description("

Test files
verification/TestModule/Test/AssertTest.xml
") */ class AssertTestCest { diff --git a/dev/tests/verification/Resources/BasicActionGroupTest.txt b/dev/tests/verification/Resources/BasicActionGroupTest.txt index 5af0594fe..e0e38ef69 100644 --- a/dev/tests/verification/Resources/BasicActionGroupTest.txt +++ b/dev/tests/verification/Resources/BasicActionGroupTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class BasicActionGroupTestCest { diff --git a/dev/tests/verification/Resources/BasicFunctionalTest.txt b/dev/tests/verification/Resources/BasicFunctionalTest.txt index bbcc90360..1db391e43 100644 --- a/dev/tests/verification/Resources/BasicFunctionalTest.txt +++ b/dev/tests/verification/Resources/BasicFunctionalTest.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: A Functional Cest") * @group functional - * @Description("

Test Files:
verification/TestModule/Test/BasicFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/BasicFunctionalTest.xml
") */ class BasicFunctionalTestCest { diff --git a/dev/tests/verification/Resources/BasicMergeTest.txt b/dev/tests/verification/Resources/BasicMergeTest.txt index 0d5c2cc4b..c4dd14f78 100644 --- a/dev/tests/verification/Resources/BasicMergeTest.txt +++ b/dev/tests/verification/Resources/BasicMergeTest.txt @@ -18,7 +18,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; * @Title("[NO TESTCASEID]: BasicMergeTest") * @group functional * @group mergeTest - * @Description("

Test Files:
verification/TestModule/Test/MergeFunctionalTest.xml
verification/TestModuleMerged/Test/MergeFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/MergeFunctionalTest.xml
verification/TestModuleMerged/Test/MergeFunctionalTest.xml
") */ class BasicMergeTestCest { diff --git a/dev/tests/verification/Resources/CharacterReplacementTest.txt b/dev/tests/verification/Resources/CharacterReplacementTest.txt index 0e601c596..7ef1501c8 100644 --- a/dev/tests/verification/Resources/CharacterReplacementTest.txt +++ b/dev/tests/verification/Resources/CharacterReplacementTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/CharacterReplacementTest.xml
") + * @Description("

Test files
verification/TestModule/Test/CharacterReplacementTest.xml
") */ class CharacterReplacementTestCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestAddHooks.txt b/dev/tests/verification/Resources/ChildExtendedTestAddHooks.txt index 703165c02..732b2dc8f 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestAddHooks.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestAddHooks.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestAddHooks") * @group Parent - * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestAddHooksCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestMerging.txt b/dev/tests/verification/Resources/ChildExtendedTestMerging.txt index c6bd0c6f1..f7be0028c 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestMerging.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestMerging.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestMerging") * @group Child - * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestMergingCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestNoParent.txt b/dev/tests/verification/Resources/ChildExtendedTestNoParent.txt index c115e93cd..1d933bd38 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestNoParent.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestNoParent.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestNoParent") * @group Child - * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") * @group skip */ class ChildExtendedTestNoParentCest diff --git a/dev/tests/verification/Resources/ChildExtendedTestRemoveAction.txt b/dev/tests/verification/Resources/ChildExtendedTestRemoveAction.txt index 0236584e8..6e0db510e 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestRemoveAction.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestRemoveAction.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestRemoveAction") * @group Child - * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestRemoveActionCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestRemoveHookAction.txt b/dev/tests/verification/Resources/ChildExtendedTestRemoveHookAction.txt index ccc50b005..543f5c0d2 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestRemoveHookAction.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestRemoveHookAction.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestRemoveHookAction") * @group Child - * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestRemoveHookActionCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestReplace.txt b/dev/tests/verification/Resources/ChildExtendedTestReplace.txt index d4552ed47..1b10a0a2f 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestReplace.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestReplace.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestReplace") * @group Child - * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestReplaceCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestReplaceHook.txt b/dev/tests/verification/Resources/ChildExtendedTestReplaceHook.txt index 5d6a7ca02..7d93079f1 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestReplaceHook.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestReplaceHook.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestReplaceHook") * @group Child - * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestReplaceHookCest { diff --git a/dev/tests/verification/Resources/DataActionsTest.txt b/dev/tests/verification/Resources/DataActionsTest.txt index 120d0a6e3..575e66dd0 100644 --- a/dev/tests/verification/Resources/DataActionsTest.txt +++ b/dev/tests/verification/Resources/DataActionsTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/DataActionsTest.xml
") + * @Description("

Test files
verification/TestModule/Test/DataActionsTest.xml
") */ class DataActionsTestCest { diff --git a/dev/tests/verification/Resources/DataReplacementTest.txt b/dev/tests/verification/Resources/DataReplacementTest.txt index c041a5f95..65d5117a5 100644 --- a/dev/tests/verification/Resources/DataReplacementTest.txt +++ b/dev/tests/verification/Resources/DataReplacementTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/DataReplacementTest.xml
") + * @Description("

Test files
verification/TestModule/Test/DataReplacementTest.xml
") */ class DataReplacementTestCest { diff --git a/dev/tests/verification/Resources/ExecuteInSeleniumTest.txt b/dev/tests/verification/Resources/ExecuteInSeleniumTest.txt index 08ee096dd..0744a48f9 100644 --- a/dev/tests/verification/Resources/ExecuteInSeleniumTest.txt +++ b/dev/tests/verification/Resources/ExecuteInSeleniumTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ExecuteInSeleniumTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ExecuteInSeleniumTest.xml
") */ class ExecuteInSeleniumTestCest { diff --git a/dev/tests/verification/Resources/ExecuteJsEscapingTest.txt b/dev/tests/verification/Resources/ExecuteJsEscapingTest.txt index 1a0072de8..6545284e3 100644 --- a/dev/tests/verification/Resources/ExecuteJsEscapingTest.txt +++ b/dev/tests/verification/Resources/ExecuteJsEscapingTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ExecuteJsTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ExecuteJsTest.xml
") */ class ExecuteJsEscapingTestCest { diff --git a/dev/tests/verification/Resources/ExtendParentDataTest.txt b/dev/tests/verification/Resources/ExtendParentDataTest.txt index 59e1289f0..ef89bdb68 100644 --- a/dev/tests/verification/Resources/ExtendParentDataTest.txt +++ b/dev/tests/verification/Resources/ExtendParentDataTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ExtendedDataTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ExtendedDataTest.xml
") */ class ExtendParentDataTestCest { diff --git a/dev/tests/verification/Resources/ExtendedActionGroup.txt b/dev/tests/verification/Resources/ExtendedActionGroup.txt index 383daceec..c97041919 100644 --- a/dev/tests/verification/Resources/ExtendedActionGroup.txt +++ b/dev/tests/verification/Resources/ExtendedActionGroup.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ExtendedActionGroupCest { diff --git a/dev/tests/verification/Resources/ExtendedChildTestInSuiteCest.txt b/dev/tests/verification/Resources/ExtendedChildTestInSuiteCest.txt index c1eae903d..ab312bf1c 100644 --- a/dev/tests/verification/Resources/ExtendedChildTestInSuiteCest.txt +++ b/dev/tests/verification/Resources/ExtendedChildTestInSuiteCest.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ExtendedChildTestInSuite") * @group ExtendedTestInSuite - * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ExtendedChildTestInSuiteCest { diff --git a/dev/tests/verification/Resources/ExtendedChildTestNotInSuite.txt b/dev/tests/verification/Resources/ExtendedChildTestNotInSuite.txt index 4506a47a6..65c82972c 100644 --- a/dev/tests/verification/Resources/ExtendedChildTestNotInSuite.txt +++ b/dev/tests/verification/Resources/ExtendedChildTestNotInSuite.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ExtendedChildTestNotInSuite") - * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ExtendedChildTestNotInSuiteCest { diff --git a/dev/tests/verification/Resources/ExtendedRemoveActionGroup.txt b/dev/tests/verification/Resources/ExtendedRemoveActionGroup.txt index 6bba1d2c5..c8b0d3d8d 100644 --- a/dev/tests/verification/Resources/ExtendedRemoveActionGroup.txt +++ b/dev/tests/verification/Resources/ExtendedRemoveActionGroup.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") */ class ExtendedRemoveActionGroupCest { diff --git a/dev/tests/verification/Resources/ExtendingSkippedTest.txt b/dev/tests/verification/Resources/ExtendingSkippedTest.txt index ddcf12712..87d15be4f 100644 --- a/dev/tests/verification/Resources/ExtendingSkippedTest.txt +++ b/dev/tests/verification/Resources/ExtendingSkippedTest.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestSkippedParent") * @group Child - * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ExtendingSkippedTestCest { diff --git a/dev/tests/verification/Resources/HookActionsTest.txt b/dev/tests/verification/Resources/HookActionsTest.txt index 3c6b4e06e..1631dfaed 100644 --- a/dev/tests/verification/Resources/HookActionsTest.txt +++ b/dev/tests/verification/Resources/HookActionsTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/HookActionsTest.xml
") + * @Description("

Test files
verification/TestModule/Test/HookActionsTest.xml
") */ class HookActionsTestCest { diff --git a/dev/tests/verification/Resources/LocatorFunctionTest.txt b/dev/tests/verification/Resources/LocatorFunctionTest.txt index 0292f7fdb..746670785 100644 --- a/dev/tests/verification/Resources/LocatorFunctionTest.txt +++ b/dev/tests/verification/Resources/LocatorFunctionTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/LocatorFunctionTest.xml
") + * @Description("

Test files
verification/TestModule/Test/LocatorFunctionTest.xml
") */ class LocatorFunctionTestCest { diff --git a/dev/tests/verification/Resources/MergeMassViaInsertAfter.txt b/dev/tests/verification/Resources/MergeMassViaInsertAfter.txt index 84a2f7aaf..c93bb8d0b 100644 --- a/dev/tests/verification/Resources/MergeMassViaInsertAfter.txt +++ b/dev/tests/verification/Resources/MergeMassViaInsertAfter.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/BasicFunctionalTest.xml
verification/TestModule/Test/MergeFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/BasicFunctionalTest.xml
verification/TestModule/Test/MergeFunctionalTest.xml
") */ class MergeMassViaInsertAfterCest { diff --git a/dev/tests/verification/Resources/MergeMassViaInsertBefore.txt b/dev/tests/verification/Resources/MergeMassViaInsertBefore.txt index 80ee57a53..f7f6bfed9 100644 --- a/dev/tests/verification/Resources/MergeMassViaInsertBefore.txt +++ b/dev/tests/verification/Resources/MergeMassViaInsertBefore.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/BasicFunctionalTest.xml
verification/TestModule/Test/MergeFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/BasicFunctionalTest.xml
verification/TestModule/Test/MergeFunctionalTest.xml
") */ class MergeMassViaInsertBeforeCest { diff --git a/dev/tests/verification/Resources/MergeSkip.txt b/dev/tests/verification/Resources/MergeSkip.txt index 4831582ed..1fd3b1b6f 100644 --- a/dev/tests/verification/Resources/MergeSkip.txt +++ b/dev/tests/verification/Resources/MergeSkip.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/MergeFunctionalTest.xml
verification/TestModuleMerged/Test/MergeFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/MergeFunctionalTest.xml
verification/TestModuleMerged/Test/MergeFunctionalTest.xml
") */ class MergeSkipCest { diff --git a/dev/tests/verification/Resources/MergedActionGroupTest.txt b/dev/tests/verification/Resources/MergedActionGroupTest.txt index 95a068561..6c20ffbd0 100644 --- a/dev/tests/verification/Resources/MergedActionGroupTest.txt +++ b/dev/tests/verification/Resources/MergedActionGroupTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class MergedActionGroupTestCest { diff --git a/dev/tests/verification/Resources/MergedReferencesTest.txt b/dev/tests/verification/Resources/MergedReferencesTest.txt index 575ede44a..ecaaf3ab5 100644 --- a/dev/tests/verification/Resources/MergedReferencesTest.txt +++ b/dev/tests/verification/Resources/MergedReferencesTest.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: MergedReferencesTest") * @group functional - * @Description("

Test Files:
verification/TestModule/Test/MergeFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/MergeFunctionalTest.xml
") */ class MergedReferencesTestCest { diff --git a/dev/tests/verification/Resources/MultipleActionGroupsTest.txt b/dev/tests/verification/Resources/MultipleActionGroupsTest.txt index 0fa670dbd..237e437e6 100644 --- a/dev/tests/verification/Resources/MultipleActionGroupsTest.txt +++ b/dev/tests/verification/Resources/MultipleActionGroupsTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class MultipleActionGroupsTestCest { diff --git a/dev/tests/verification/Resources/PageReplacementTest.txt b/dev/tests/verification/Resources/PageReplacementTest.txt index aceeb50f0..6185a0e9d 100644 --- a/dev/tests/verification/Resources/PageReplacementTest.txt +++ b/dev/tests/verification/Resources/PageReplacementTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/PageReplacementTest.xml
") + * @Description("

Test files
verification/TestModule/Test/PageReplacementTest.xml
") */ class PageReplacementTestCest { diff --git a/dev/tests/verification/Resources/ParameterArrayTest.txt b/dev/tests/verification/Resources/ParameterArrayTest.txt index 69d758d98..1d5e0e97b 100644 --- a/dev/tests/verification/Resources/ParameterArrayTest.txt +++ b/dev/tests/verification/Resources/ParameterArrayTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ParameterArrayTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ParameterArrayTest.xml
") */ class ParameterArrayTestCest { diff --git a/dev/tests/verification/Resources/ParentExtendedTest.txt b/dev/tests/verification/Resources/ParentExtendedTest.txt index e381aab94..a665ca457 100644 --- a/dev/tests/verification/Resources/ParentExtendedTest.txt +++ b/dev/tests/verification/Resources/ParentExtendedTest.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ParentExtendedTest") * @group Parent - * @Description("

Test Files:
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ParentExtendedTestCest { diff --git a/dev/tests/verification/Resources/PersistedAndXmlEntityArguments.txt b/dev/tests/verification/Resources/PersistedAndXmlEntityArguments.txt index 0d1cbc596..965faeabe 100644 --- a/dev/tests/verification/Resources/PersistedAndXmlEntityArguments.txt +++ b/dev/tests/verification/Resources/PersistedAndXmlEntityArguments.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class PersistedAndXmlEntityArgumentsCest { diff --git a/dev/tests/verification/Resources/PersistedReplacementTest.txt b/dev/tests/verification/Resources/PersistedReplacementTest.txt index 63aef963c..69e235ad5 100644 --- a/dev/tests/verification/Resources/PersistedReplacementTest.txt +++ b/dev/tests/verification/Resources/PersistedReplacementTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/PersistedReplacementTest.xml
") + * @Description("

Test files
verification/TestModule/Test/PersistedReplacementTest.xml
") */ class PersistedReplacementTestCest { diff --git a/dev/tests/verification/Resources/PersistenceActionGroupAppendingTest.txt b/dev/tests/verification/Resources/PersistenceActionGroupAppendingTest.txt index c42195e65..388194a69 100644 --- a/dev/tests/verification/Resources/PersistenceActionGroupAppendingTest.txt +++ b/dev/tests/verification/Resources/PersistenceActionGroupAppendingTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/PersistenceActionGroupAppendingTest.xml
") + * @Description("

Test files
verification/TestModule/Test/PersistenceActionGroupAppendingTest.xml
") */ class PersistenceActionGroupAppendingTestCest { diff --git a/dev/tests/verification/Resources/PersistenceCustomFieldsTest.txt b/dev/tests/verification/Resources/PersistenceCustomFieldsTest.txt index a01b0753e..ca4a34e9c 100644 --- a/dev/tests/verification/Resources/PersistenceCustomFieldsTest.txt +++ b/dev/tests/verification/Resources/PersistenceCustomFieldsTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/PersistenceCustomFieldsTest.xml
") + * @Description("

Test files
verification/TestModule/Test/PersistenceCustomFieldsTest.xml
") */ class PersistenceCustomFieldsTestCest { diff --git a/dev/tests/verification/Resources/SectionReplacementTest.txt b/dev/tests/verification/Resources/SectionReplacementTest.txt index 4eba9ed9e..d583f59dd 100644 --- a/dev/tests/verification/Resources/SectionReplacementTest.txt +++ b/dev/tests/verification/Resources/SectionReplacementTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test Files:
verification/TestModule/Test/SectionReplacementTest.xml
") + * @Description("

Test files
verification/TestModule/Test/SectionReplacementTest.xml
") */ class SectionReplacementTestCest { diff --git a/dev/tests/verification/Resources/SkippedTest.txt b/dev/tests/verification/Resources/SkippedTest.txt index 369b09ba6..06a81f337 100644 --- a/dev/tests/verification/Resources/SkippedTest.txt +++ b/dev/tests/verification/Resources/SkippedTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: skippedTest") - * @Description("

Test Files:
verification/TestModule/Test/SkippedTest.xml
") + * @Description("

Test files
verification/TestModule/Test/SkippedTest.xml
") */ class SkippedTestCest { diff --git a/dev/tests/verification/Resources/SkippedTestNoIssues.txt b/dev/tests/verification/Resources/SkippedTestNoIssues.txt index ceeb02b77..00eac2f95 100644 --- a/dev/tests/verification/Resources/SkippedTestNoIssues.txt +++ b/dev/tests/verification/Resources/SkippedTestNoIssues.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: skippedNoIssuesTest") - * @Description("

Test Files:
verification/TestModule/Test/SkippedTest.xml
") + * @Description("

Test files
verification/TestModule/Test/SkippedTest.xml
") * @group skip */ class SkippedTestNoIssuesCest diff --git a/dev/tests/verification/Resources/SkippedTestTwoIssues.txt b/dev/tests/verification/Resources/SkippedTestTwoIssues.txt index ff3f23aa6..b3c390705 100644 --- a/dev/tests/verification/Resources/SkippedTestTwoIssues.txt +++ b/dev/tests/verification/Resources/SkippedTestTwoIssues.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: skippedMultipleIssuesTest") - * @Description("

Test Files:
verification/TestModule/Test/SkippedTest.xml
") + * @Description("

Test files
verification/TestModule/Test/SkippedTest.xml
") */ class SkippedTestTwoIssuesCest { diff --git a/dev/tests/verification/Resources/SkippedTestWithHooks.txt b/dev/tests/verification/Resources/SkippedTestWithHooks.txt index eaaa344f4..98161c17d 100644 --- a/dev/tests/verification/Resources/SkippedTestWithHooks.txt +++ b/dev/tests/verification/Resources/SkippedTestWithHooks.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: skippedTestWithHooks") - * @Description("

Test Files:
verification/TestModule/Test/SkippedTest.xml
") + * @Description("

Test files
verification/TestModule/Test/SkippedTest.xml
") */ class SkippedTestWithHooksCest { diff --git a/dev/tests/verification/Resources/XmlCommentedActionGroupTest.txt b/dev/tests/verification/Resources/XmlCommentedActionGroupTest.txt index 111736bc8..883f8637a 100644 --- a/dev/tests/verification/Resources/XmlCommentedActionGroupTest.txt +++ b/dev/tests/verification/Resources/XmlCommentedActionGroupTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With comment block in arguments and action group body") - * @Description("

Test Files:
verification/TestModule/Test/XmlCommentedActionGroupTest.xml
") + * @Description("

Test files
verification/TestModule/Test/XmlCommentedActionGroupTest.xml
") */ class XmlCommentedActionGroupTestCest { diff --git a/dev/tests/verification/Resources/XmlCommentedTest.txt b/dev/tests/verification/Resources/XmlCommentedTest.txt index e56140030..03ec7c701 100644 --- a/dev/tests/verification/Resources/XmlCommentedTest.txt +++ b/dev/tests/verification/Resources/XmlCommentedTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Test With comment blocks in root element 'tests', in annotations and in test body.") - * @Description("

Test Files:
verification/TestModule/Test/XmlCommentedTest.xml
") + * @Description("

Test files
verification/TestModule/Test/XmlCommentedTest.xml
") */ class XmlCommentedTestCest { diff --git a/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php b/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php index 55209c64c..b9362832f 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php +++ b/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php @@ -118,20 +118,16 @@ public function extractTestData($testData) //Override features with module name if present, populates it otherwise $testAnnotations["features"] = [$module]; - // Append test file names in description annotation - if (!empty($fileNames)) { - if (isset($testAnnotations["description"][0])) { - $testAnnotations["description"][0] = $this->appendFileNamesInDescriptionAnnotation( - $testAnnotations["description"][0], - $fileNames - ); - } else { - $description = $this->appendFileNamesInDescriptionAnnotation('', $fileNames); - if (!empty($description)) { - $testAnnotations["description"][0] = $description; - } - } + // Always try to append test file names in description annotation, i.e. displaying test files title only + // when $fileNames is not available + if (!isset($testAnnotations["description"])) { + $testAnnotations["description"] = []; } + $description = $testAnnotations["description"][0] ?? ''; + $testAnnotations["description"][0] = $this->appendFileNamesInDescriptionAnnotation( + $description, + $fileNames + ); // extract before if (array_key_exists(self::TEST_BEFORE_HOOK, $testData) && is_array($testData[self::TEST_BEFORE_HOOK])) { @@ -181,23 +177,21 @@ public function extractTestData($testData) */ private function appendFileNamesInDescriptionAnnotation($description, $fileNames) { - $title = ''; + $description .= '

Test files
'; + foreach ($fileNames as $fileName) { - if (!empty($fileName && realpath($fileName) !== false)) { + if (!empty($fileName) && realpath($fileName) !== false) { $fileName = realpath($fileName); $relativeFileName = ltrim( str_replace(MAGENTO_BP, '', $fileName), DIRECTORY_SEPARATOR ); if (!empty($relativeFileName)) { - if (empty($title)) { - $title .= '

Test Files:
'; - $description .= $title; - } $description .= $relativeFileName . '
'; } } } + return $description; } } From f895b71063ccf7eb96e02ce01648000c711556e2 Mon Sep 17 00:00:00 2001 From: Kevin Kozan Date: Wed, 25 Sep 2019 15:50:09 -0500 Subject: [PATCH 31/48] MQE-1510 --- etc/config/command.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/etc/config/command.php b/etc/config/command.php index ab05068df..201bb5d47 100644 --- a/etc/config/command.php +++ b/etc/config/command.php @@ -41,6 +41,11 @@ $output = "CLI command timed out, no output available."; $idleTimeout = true; } + + if (checkForFilePath($output)) { + $output = "CLI output suppressed, filepath detected in output."; + } + $exitCode = $process->getExitCode(); if ($exitCode == 0 || $idleTimeout) { @@ -104,3 +109,13 @@ function trimAfterWhitespace($string) { return strtok($string, ' '); } + +/** + * Detects file path in string. + * @param string $string + * @return boolean + */ +function checkForFilePath($string) +{ + return preg_match('/\/[\S]+\//', $string); +} From 9c7e0876c9ab6fa9e09ae4a9cfe6b6c18660c76f Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Thu, 26 Sep 2019 11:02:15 -0500 Subject: [PATCH 32/48] MQE-1734: Add base + merge files to Test Description --- .../Test/Handlers/TestObjectHandlerTest.php | 2 +- .../Resources/ActionGroupContainsStepKeyInArgText.txt | 2 +- .../verification/Resources/ActionGroupMergedViaInsertAfter.txt | 2 +- .../verification/Resources/ActionGroupMergedViaInsertBefore.txt | 2 +- dev/tests/verification/Resources/ActionGroupSkipReadiness.txt | 2 +- dev/tests/verification/Resources/ActionGroupToExtend.txt | 2 +- dev/tests/verification/Resources/ActionGroupUsingCreateData.txt | 2 +- .../verification/Resources/ActionGroupUsingNestedArgument.txt | 2 +- .../verification/Resources/ActionGroupWithDataOverrideTest.txt | 2 +- dev/tests/verification/Resources/ActionGroupWithDataTest.txt | 2 +- .../ActionGroupWithDefaultArgumentAndStringSelectorParam.txt | 2 +- ...onGroupWithMultipleParameterSelectorsFromDefaultArgument.txt | 2 +- dev/tests/verification/Resources/ActionGroupWithNoArguments.txt | 2 +- .../verification/Resources/ActionGroupWithNoDefaultTest.txt | 2 +- .../Resources/ActionGroupWithParameterizedElementWithHyphen.txt | 2 +- ...ctionGroupWithParameterizedElementsWithStepKeyReferences.txt | 2 +- .../ActionGroupWithPassedArgumentAndStringSelectorParam.txt | 2 +- .../verification/Resources/ActionGroupWithPersistedData.txt | 2 +- .../Resources/ActionGroupWithSectionAndDataAsArguments.txt | 2 +- .../ActionGroupWithSimpleDataUsageFromDefaultArgument.txt | 2 +- .../ActionGroupWithSimpleDataUsageFromPassedArgument.txt | 2 +- ...ctionGroupWithSingleParameterSelectorFromDefaultArgument.txt | 2 +- ...ActionGroupWithSingleParameterSelectorFromPassedArgument.txt | 2 +- .../verification/Resources/ActionGroupWithStepKeyReferences.txt | 2 +- .../Resources/ActionGroupWithTopLevelPersistedData.txt | 2 +- .../verification/Resources/ArgumentWithSameNameAsElement.txt | 2 +- dev/tests/verification/Resources/AssertTest.txt | 2 +- dev/tests/verification/Resources/BasicActionGroupTest.txt | 2 +- dev/tests/verification/Resources/BasicFunctionalTest.txt | 2 +- dev/tests/verification/Resources/BasicMergeTest.txt | 2 +- dev/tests/verification/Resources/CharacterReplacementTest.txt | 2 +- dev/tests/verification/Resources/ChildExtendedTestAddHooks.txt | 2 +- dev/tests/verification/Resources/ChildExtendedTestMerging.txt | 2 +- dev/tests/verification/Resources/ChildExtendedTestNoParent.txt | 2 +- .../verification/Resources/ChildExtendedTestRemoveAction.txt | 2 +- .../Resources/ChildExtendedTestRemoveHookAction.txt | 2 +- dev/tests/verification/Resources/ChildExtendedTestReplace.txt | 2 +- .../verification/Resources/ChildExtendedTestReplaceHook.txt | 2 +- dev/tests/verification/Resources/DataActionsTest.txt | 2 +- dev/tests/verification/Resources/DataReplacementTest.txt | 2 +- dev/tests/verification/Resources/ExecuteInSeleniumTest.txt | 2 +- dev/tests/verification/Resources/ExecuteJsEscapingTest.txt | 2 +- dev/tests/verification/Resources/ExtendParentDataTest.txt | 2 +- dev/tests/verification/Resources/ExtendedActionGroup.txt | 2 +- .../verification/Resources/ExtendedChildTestInSuiteCest.txt | 2 +- .../verification/Resources/ExtendedChildTestNotInSuite.txt | 2 +- dev/tests/verification/Resources/ExtendedRemoveActionGroup.txt | 2 +- dev/tests/verification/Resources/ExtendingSkippedTest.txt | 2 +- dev/tests/verification/Resources/HookActionsTest.txt | 2 +- dev/tests/verification/Resources/LocatorFunctionTest.txt | 2 +- dev/tests/verification/Resources/MergeMassViaInsertAfter.txt | 2 +- dev/tests/verification/Resources/MergeMassViaInsertBefore.txt | 2 +- dev/tests/verification/Resources/MergeSkip.txt | 2 +- dev/tests/verification/Resources/MergedActionGroupTest.txt | 2 +- dev/tests/verification/Resources/MergedReferencesTest.txt | 2 +- dev/tests/verification/Resources/MultipleActionGroupsTest.txt | 2 +- dev/tests/verification/Resources/PageReplacementTest.txt | 2 +- dev/tests/verification/Resources/ParameterArrayTest.txt | 2 +- dev/tests/verification/Resources/ParentExtendedTest.txt | 2 +- .../verification/Resources/PersistedAndXmlEntityArguments.txt | 2 +- dev/tests/verification/Resources/PersistedReplacementTest.txt | 2 +- .../Resources/PersistenceActionGroupAppendingTest.txt | 2 +- .../verification/Resources/PersistenceCustomFieldsTest.txt | 2 +- dev/tests/verification/Resources/SectionReplacementTest.txt | 2 +- dev/tests/verification/Resources/SkippedTest.txt | 2 +- dev/tests/verification/Resources/SkippedTestNoIssues.txt | 2 +- dev/tests/verification/Resources/SkippedTestTwoIssues.txt | 2 +- dev/tests/verification/Resources/SkippedTestWithHooks.txt | 2 +- .../verification/Resources/XmlCommentedActionGroupTest.txt | 2 +- dev/tests/verification/Resources/XmlCommentedTest.txt | 2 +- .../Test/Util/TestObjectExtractor.php | 2 +- 71 files changed, 71 insertions(+), 71 deletions(-) diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php index 032c4c64e..89685d2bc 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php @@ -90,7 +90,7 @@ public function testGetTestObject() [ 'features' => ['NO MODULE DETECTED'], 'group' => ['test'], - 'description' => ['

Test files
'] + 'description' => ['

Test files

'] ], [ TestObjectExtractor::TEST_BEFORE_HOOK => $expectedBeforeHookObject, diff --git a/dev/tests/verification/Resources/ActionGroupContainsStepKeyInArgText.txt b/dev/tests/verification/Resources/ActionGroupContainsStepKeyInArgText.txt index 309ed5f08..d7e31b5f2 100644 --- a/dev/tests/verification/Resources/ActionGroupContainsStepKeyInArgText.txt +++ b/dev/tests/verification/Resources/ActionGroupContainsStepKeyInArgText.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupContainsStepKeyInArgTextCest { diff --git a/dev/tests/verification/Resources/ActionGroupMergedViaInsertAfter.txt b/dev/tests/verification/Resources/ActionGroupMergedViaInsertAfter.txt index 36c1ac2a8..127b9cc59 100644 --- a/dev/tests/verification/Resources/ActionGroupMergedViaInsertAfter.txt +++ b/dev/tests/verification/Resources/ActionGroupMergedViaInsertAfter.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupMergedViaInsertAfterCest { diff --git a/dev/tests/verification/Resources/ActionGroupMergedViaInsertBefore.txt b/dev/tests/verification/Resources/ActionGroupMergedViaInsertBefore.txt index 3f61b63eb..1486d042e 100644 --- a/dev/tests/verification/Resources/ActionGroupMergedViaInsertBefore.txt +++ b/dev/tests/verification/Resources/ActionGroupMergedViaInsertBefore.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupMergedViaInsertBeforeCest { diff --git a/dev/tests/verification/Resources/ActionGroupSkipReadiness.txt b/dev/tests/verification/Resources/ActionGroupSkipReadiness.txt index 520e153a8..d11d5c238 100644 --- a/dev/tests/verification/Resources/ActionGroupSkipReadiness.txt +++ b/dev/tests/verification/Resources/ActionGroupSkipReadiness.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupSkipReadinessCest { diff --git a/dev/tests/verification/Resources/ActionGroupToExtend.txt b/dev/tests/verification/Resources/ActionGroupToExtend.txt index 43a47c4b7..d7e72260d 100644 --- a/dev/tests/verification/Resources/ActionGroupToExtend.txt +++ b/dev/tests/verification/Resources/ActionGroupToExtend.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupToExtendCest { diff --git a/dev/tests/verification/Resources/ActionGroupUsingCreateData.txt b/dev/tests/verification/Resources/ActionGroupUsingCreateData.txt index 0bbff16eb..96134fd86 100644 --- a/dev/tests/verification/Resources/ActionGroupUsingCreateData.txt +++ b/dev/tests/verification/Resources/ActionGroupUsingCreateData.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupUsingCreateDataCest { diff --git a/dev/tests/verification/Resources/ActionGroupUsingNestedArgument.txt b/dev/tests/verification/Resources/ActionGroupUsingNestedArgument.txt index b82db0cf6..b69ee6c9d 100644 --- a/dev/tests/verification/Resources/ActionGroupUsingNestedArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupUsingNestedArgument.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupUsingNestedArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithDataOverrideTest.txt b/dev/tests/verification/Resources/ActionGroupWithDataOverrideTest.txt index 09830300d..c0498101d 100644 --- a/dev/tests/verification/Resources/ActionGroupWithDataOverrideTest.txt +++ b/dev/tests/verification/Resources/ActionGroupWithDataOverrideTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupWithDataOverrideTestCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithDataTest.txt b/dev/tests/verification/Resources/ActionGroupWithDataTest.txt index b5b006217..01a87104d 100644 --- a/dev/tests/verification/Resources/ActionGroupWithDataTest.txt +++ b/dev/tests/verification/Resources/ActionGroupWithDataTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupWithDataTestCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithDefaultArgumentAndStringSelectorParam.txt b/dev/tests/verification/Resources/ActionGroupWithDefaultArgumentAndStringSelectorParam.txt index 907d4a3a3..ce8a4aed8 100644 --- a/dev/tests/verification/Resources/ActionGroupWithDefaultArgumentAndStringSelectorParam.txt +++ b/dev/tests/verification/Resources/ActionGroupWithDefaultArgumentAndStringSelectorParam.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Default Argument Value and Hardcoded Value in Param") - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithDefaultArgumentAndStringSelectorParamCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithMultipleParameterSelectorsFromDefaultArgument.txt b/dev/tests/verification/Resources/ActionGroupWithMultipleParameterSelectorsFromDefaultArgument.txt index b3c986825..b7bef0135 100644 --- a/dev/tests/verification/Resources/ActionGroupWithMultipleParameterSelectorsFromDefaultArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupWithMultipleParameterSelectorsFromDefaultArgument.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Passed Argument Value and Multiple Argument Values in Param") - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithMultipleParameterSelectorsFromDefaultArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithNoArguments.txt b/dev/tests/verification/Resources/ActionGroupWithNoArguments.txt index 4fbaa2f0d..6b81a187f 100644 --- a/dev/tests/verification/Resources/ActionGroupWithNoArguments.txt +++ b/dev/tests/verification/Resources/ActionGroupWithNoArguments.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With No Argument") - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithNoArgumentsCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithNoDefaultTest.txt b/dev/tests/verification/Resources/ActionGroupWithNoDefaultTest.txt index 2b91178bb..6125c7697 100644 --- a/dev/tests/verification/Resources/ActionGroupWithNoDefaultTest.txt +++ b/dev/tests/verification/Resources/ActionGroupWithNoDefaultTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupWithNoDefaultTestCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithParameterizedElementWithHyphen.txt b/dev/tests/verification/Resources/ActionGroupWithParameterizedElementWithHyphen.txt index dc6a7c2b1..163ebc6ba 100644 --- a/dev/tests/verification/Resources/ActionGroupWithParameterizedElementWithHyphen.txt +++ b/dev/tests/verification/Resources/ActionGroupWithParameterizedElementWithHyphen.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithParameterizedElementWithHyphenCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithParameterizedElementsWithStepKeyReferences.txt b/dev/tests/verification/Resources/ActionGroupWithParameterizedElementsWithStepKeyReferences.txt index 41e433486..de7af8209 100644 --- a/dev/tests/verification/Resources/ActionGroupWithParameterizedElementsWithStepKeyReferences.txt +++ b/dev/tests/verification/Resources/ActionGroupWithParameterizedElementsWithStepKeyReferences.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithParameterizedElementsWithStepKeyReferencesCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithPassedArgumentAndStringSelectorParam.txt b/dev/tests/verification/Resources/ActionGroupWithPassedArgumentAndStringSelectorParam.txt index 061574065..9720595e0 100644 --- a/dev/tests/verification/Resources/ActionGroupWithPassedArgumentAndStringSelectorParam.txt +++ b/dev/tests/verification/Resources/ActionGroupWithPassedArgumentAndStringSelectorParam.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Passed Argument Value and Hardcoded Value in Param") - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithPassedArgumentAndStringSelectorParamCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithPersistedData.txt b/dev/tests/verification/Resources/ActionGroupWithPersistedData.txt index 16af7f45c..da0480379 100644 --- a/dev/tests/verification/Resources/ActionGroupWithPersistedData.txt +++ b/dev/tests/verification/Resources/ActionGroupWithPersistedData.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupWithPersistedDataCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithSectionAndDataAsArguments.txt b/dev/tests/verification/Resources/ActionGroupWithSectionAndDataAsArguments.txt index a946d4694..a0b6d0074 100644 --- a/dev/tests/verification/Resources/ActionGroupWithSectionAndDataAsArguments.txt +++ b/dev/tests/verification/Resources/ActionGroupWithSectionAndDataAsArguments.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithSectionAndDataAsArgumentsCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromDefaultArgument.txt b/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromDefaultArgument.txt index fdd60c771..4d3da18a4 100644 --- a/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromDefaultArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromDefaultArgument.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Simple Data Usage From Default Argument") - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithSimpleDataUsageFromDefaultArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromPassedArgument.txt b/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromPassedArgument.txt index c52394821..d866c3992 100644 --- a/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromPassedArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupWithSimpleDataUsageFromPassedArgument.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Simple Data Usage From Passed Argument") - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithSimpleDataUsageFromPassedArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromDefaultArgument.txt b/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromDefaultArgument.txt index 97e48f9cd..af7af43a4 100644 --- a/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromDefaultArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromDefaultArgument.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Default Argument Value and Argument Value in Param") - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithSingleParameterSelectorFromDefaultArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromPassedArgument.txt b/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromPassedArgument.txt index d59abd2bd..096623789 100644 --- a/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromPassedArgument.txt +++ b/dev/tests/verification/Resources/ActionGroupWithSingleParameterSelectorFromPassedArgument.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With Passed Argument Value and Argument Value in Param") - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithSingleParameterSelectorFromPassedArgumentCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithStepKeyReferences.txt b/dev/tests/verification/Resources/ActionGroupWithStepKeyReferences.txt index 8a7527ed4..eddaaf784 100644 --- a/dev/tests/verification/Resources/ActionGroupWithStepKeyReferences.txt +++ b/dev/tests/verification/Resources/ActionGroupWithStepKeyReferences.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ActionGroupWithStepKeyReferencesCest { diff --git a/dev/tests/verification/Resources/ActionGroupWithTopLevelPersistedData.txt b/dev/tests/verification/Resources/ActionGroupWithTopLevelPersistedData.txt index 74f929157..ef1a5636c 100644 --- a/dev/tests/verification/Resources/ActionGroupWithTopLevelPersistedData.txt +++ b/dev/tests/verification/Resources/ActionGroupWithTopLevelPersistedData.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ActionGroupWithTopLevelPersistedDataCest { diff --git a/dev/tests/verification/Resources/ArgumentWithSameNameAsElement.txt b/dev/tests/verification/Resources/ArgumentWithSameNameAsElement.txt index edcfac5c7..2da03b506 100644 --- a/dev/tests/verification/Resources/ArgumentWithSameNameAsElement.txt +++ b/dev/tests/verification/Resources/ArgumentWithSameNameAsElement.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class ArgumentWithSameNameAsElementCest { diff --git a/dev/tests/verification/Resources/AssertTest.txt b/dev/tests/verification/Resources/AssertTest.txt index ed4853489..28c38bc0b 100644 --- a/dev/tests/verification/Resources/AssertTest.txt +++ b/dev/tests/verification/Resources/AssertTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/AssertTest.xml
") + * @Description("

Test files

verification/TestModule/Test/AssertTest.xml
") */ class AssertTestCest { diff --git a/dev/tests/verification/Resources/BasicActionGroupTest.txt b/dev/tests/verification/Resources/BasicActionGroupTest.txt index e0e38ef69..4bb9c1a95 100644 --- a/dev/tests/verification/Resources/BasicActionGroupTest.txt +++ b/dev/tests/verification/Resources/BasicActionGroupTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class BasicActionGroupTestCest { diff --git a/dev/tests/verification/Resources/BasicFunctionalTest.txt b/dev/tests/verification/Resources/BasicFunctionalTest.txt index 1db391e43..f82c84119 100644 --- a/dev/tests/verification/Resources/BasicFunctionalTest.txt +++ b/dev/tests/verification/Resources/BasicFunctionalTest.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: A Functional Cest") * @group functional - * @Description("

Test files
verification/TestModule/Test/BasicFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/BasicFunctionalTest.xml
") */ class BasicFunctionalTestCest { diff --git a/dev/tests/verification/Resources/BasicMergeTest.txt b/dev/tests/verification/Resources/BasicMergeTest.txt index c4dd14f78..5421efe33 100644 --- a/dev/tests/verification/Resources/BasicMergeTest.txt +++ b/dev/tests/verification/Resources/BasicMergeTest.txt @@ -18,7 +18,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; * @Title("[NO TESTCASEID]: BasicMergeTest") * @group functional * @group mergeTest - * @Description("

Test files
verification/TestModule/Test/MergeFunctionalTest.xml
verification/TestModuleMerged/Test/MergeFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/MergeFunctionalTest.xml
verification/TestModuleMerged/Test/MergeFunctionalTest.xml
") */ class BasicMergeTestCest { diff --git a/dev/tests/verification/Resources/CharacterReplacementTest.txt b/dev/tests/verification/Resources/CharacterReplacementTest.txt index 7ef1501c8..db3852b17 100644 --- a/dev/tests/verification/Resources/CharacterReplacementTest.txt +++ b/dev/tests/verification/Resources/CharacterReplacementTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/CharacterReplacementTest.xml
") + * @Description("

Test files

verification/TestModule/Test/CharacterReplacementTest.xml
") */ class CharacterReplacementTestCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestAddHooks.txt b/dev/tests/verification/Resources/ChildExtendedTestAddHooks.txt index 732b2dc8f..e03501707 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestAddHooks.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestAddHooks.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestAddHooks") * @group Parent - * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestAddHooksCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestMerging.txt b/dev/tests/verification/Resources/ChildExtendedTestMerging.txt index f7be0028c..a99843b48 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestMerging.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestMerging.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestMerging") * @group Child - * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestMergingCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestNoParent.txt b/dev/tests/verification/Resources/ChildExtendedTestNoParent.txt index 1d933bd38..1eec9e48c 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestNoParent.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestNoParent.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestNoParent") * @group Child - * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ExtendedFunctionalTest.xml
") * @group skip */ class ChildExtendedTestNoParentCest diff --git a/dev/tests/verification/Resources/ChildExtendedTestRemoveAction.txt b/dev/tests/verification/Resources/ChildExtendedTestRemoveAction.txt index 6e0db510e..20aa62e28 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestRemoveAction.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestRemoveAction.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestRemoveAction") * @group Child - * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestRemoveActionCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestRemoveHookAction.txt b/dev/tests/verification/Resources/ChildExtendedTestRemoveHookAction.txt index 543f5c0d2..561fd24fa 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestRemoveHookAction.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestRemoveHookAction.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestRemoveHookAction") * @group Child - * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestRemoveHookActionCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestReplace.txt b/dev/tests/verification/Resources/ChildExtendedTestReplace.txt index 1b10a0a2f..8d131a83f 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestReplace.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestReplace.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestReplace") * @group Child - * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestReplaceCest { diff --git a/dev/tests/verification/Resources/ChildExtendedTestReplaceHook.txt b/dev/tests/verification/Resources/ChildExtendedTestReplaceHook.txt index 7d93079f1..ae0b02c20 100644 --- a/dev/tests/verification/Resources/ChildExtendedTestReplaceHook.txt +++ b/dev/tests/verification/Resources/ChildExtendedTestReplaceHook.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestReplaceHook") * @group Child - * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ChildExtendedTestReplaceHookCest { diff --git a/dev/tests/verification/Resources/DataActionsTest.txt b/dev/tests/verification/Resources/DataActionsTest.txt index 575e66dd0..380db238d 100644 --- a/dev/tests/verification/Resources/DataActionsTest.txt +++ b/dev/tests/verification/Resources/DataActionsTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/DataActionsTest.xml
") + * @Description("

Test files

verification/TestModule/Test/DataActionsTest.xml
") */ class DataActionsTestCest { diff --git a/dev/tests/verification/Resources/DataReplacementTest.txt b/dev/tests/verification/Resources/DataReplacementTest.txt index 65d5117a5..731ae63f8 100644 --- a/dev/tests/verification/Resources/DataReplacementTest.txt +++ b/dev/tests/verification/Resources/DataReplacementTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/DataReplacementTest.xml
") + * @Description("

Test files

verification/TestModule/Test/DataReplacementTest.xml
") */ class DataReplacementTestCest { diff --git a/dev/tests/verification/Resources/ExecuteInSeleniumTest.txt b/dev/tests/verification/Resources/ExecuteInSeleniumTest.txt index 0744a48f9..e58268b13 100644 --- a/dev/tests/verification/Resources/ExecuteInSeleniumTest.txt +++ b/dev/tests/verification/Resources/ExecuteInSeleniumTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ExecuteInSeleniumTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ExecuteInSeleniumTest.xml
") */ class ExecuteInSeleniumTestCest { diff --git a/dev/tests/verification/Resources/ExecuteJsEscapingTest.txt b/dev/tests/verification/Resources/ExecuteJsEscapingTest.txt index 6545284e3..f7618cbf9 100644 --- a/dev/tests/verification/Resources/ExecuteJsEscapingTest.txt +++ b/dev/tests/verification/Resources/ExecuteJsEscapingTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ExecuteJsTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ExecuteJsTest.xml
") */ class ExecuteJsEscapingTestCest { diff --git a/dev/tests/verification/Resources/ExtendParentDataTest.txt b/dev/tests/verification/Resources/ExtendParentDataTest.txt index ef89bdb68..fb90599e3 100644 --- a/dev/tests/verification/Resources/ExtendParentDataTest.txt +++ b/dev/tests/verification/Resources/ExtendParentDataTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ExtendedDataTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ExtendedDataTest.xml
") */ class ExtendParentDataTestCest { diff --git a/dev/tests/verification/Resources/ExtendedActionGroup.txt b/dev/tests/verification/Resources/ExtendedActionGroup.txt index c97041919..7456d99ce 100644 --- a/dev/tests/verification/Resources/ExtendedActionGroup.txt +++ b/dev/tests/verification/Resources/ExtendedActionGroup.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ExtendedActionGroupCest { diff --git a/dev/tests/verification/Resources/ExtendedChildTestInSuiteCest.txt b/dev/tests/verification/Resources/ExtendedChildTestInSuiteCest.txt index ab312bf1c..f52a46c2f 100644 --- a/dev/tests/verification/Resources/ExtendedChildTestInSuiteCest.txt +++ b/dev/tests/verification/Resources/ExtendedChildTestInSuiteCest.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ExtendedChildTestInSuite") * @group ExtendedTestInSuite - * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ExtendedChildTestInSuiteCest { diff --git a/dev/tests/verification/Resources/ExtendedChildTestNotInSuite.txt b/dev/tests/verification/Resources/ExtendedChildTestNotInSuite.txt index 65c82972c..3dfeac8f3 100644 --- a/dev/tests/verification/Resources/ExtendedChildTestNotInSuite.txt +++ b/dev/tests/verification/Resources/ExtendedChildTestNotInSuite.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ExtendedChildTestNotInSuite") - * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ExtendedChildTestNotInSuiteCest { diff --git a/dev/tests/verification/Resources/ExtendedRemoveActionGroup.txt b/dev/tests/verification/Resources/ExtendedRemoveActionGroup.txt index c8b0d3d8d..a9c971b96 100644 --- a/dev/tests/verification/Resources/ExtendedRemoveActionGroup.txt +++ b/dev/tests/verification/Resources/ExtendedRemoveActionGroup.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupTest.xml
") */ class ExtendedRemoveActionGroupCest { diff --git a/dev/tests/verification/Resources/ExtendingSkippedTest.txt b/dev/tests/verification/Resources/ExtendingSkippedTest.txt index 87d15be4f..681af0fef 100644 --- a/dev/tests/verification/Resources/ExtendingSkippedTest.txt +++ b/dev/tests/verification/Resources/ExtendingSkippedTest.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ChildExtendedTestSkippedParent") * @group Child - * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ExtendingSkippedTestCest { diff --git a/dev/tests/verification/Resources/HookActionsTest.txt b/dev/tests/verification/Resources/HookActionsTest.txt index 1631dfaed..231353bc9 100644 --- a/dev/tests/verification/Resources/HookActionsTest.txt +++ b/dev/tests/verification/Resources/HookActionsTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/HookActionsTest.xml
") + * @Description("

Test files

verification/TestModule/Test/HookActionsTest.xml
") */ class HookActionsTestCest { diff --git a/dev/tests/verification/Resources/LocatorFunctionTest.txt b/dev/tests/verification/Resources/LocatorFunctionTest.txt index 746670785..00baeeac5 100644 --- a/dev/tests/verification/Resources/LocatorFunctionTest.txt +++ b/dev/tests/verification/Resources/LocatorFunctionTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/LocatorFunctionTest.xml
") + * @Description("

Test files

verification/TestModule/Test/LocatorFunctionTest.xml
") */ class LocatorFunctionTestCest { diff --git a/dev/tests/verification/Resources/MergeMassViaInsertAfter.txt b/dev/tests/verification/Resources/MergeMassViaInsertAfter.txt index c93bb8d0b..7d3bfec09 100644 --- a/dev/tests/verification/Resources/MergeMassViaInsertAfter.txt +++ b/dev/tests/verification/Resources/MergeMassViaInsertAfter.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/BasicFunctionalTest.xml
verification/TestModule/Test/MergeFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/BasicFunctionalTest.xml
verification/TestModule/Test/MergeFunctionalTest.xml
") */ class MergeMassViaInsertAfterCest { diff --git a/dev/tests/verification/Resources/MergeMassViaInsertBefore.txt b/dev/tests/verification/Resources/MergeMassViaInsertBefore.txt index f7f6bfed9..42a0fcf89 100644 --- a/dev/tests/verification/Resources/MergeMassViaInsertBefore.txt +++ b/dev/tests/verification/Resources/MergeMassViaInsertBefore.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/BasicFunctionalTest.xml
verification/TestModule/Test/MergeFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/BasicFunctionalTest.xml
verification/TestModule/Test/MergeFunctionalTest.xml
") */ class MergeMassViaInsertBeforeCest { diff --git a/dev/tests/verification/Resources/MergeSkip.txt b/dev/tests/verification/Resources/MergeSkip.txt index 1fd3b1b6f..fdfbdbfe4 100644 --- a/dev/tests/verification/Resources/MergeSkip.txt +++ b/dev/tests/verification/Resources/MergeSkip.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/MergeFunctionalTest.xml
verification/TestModuleMerged/Test/MergeFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/MergeFunctionalTest.xml
verification/TestModuleMerged/Test/MergeFunctionalTest.xml
") */ class MergeSkipCest { diff --git a/dev/tests/verification/Resources/MergedActionGroupTest.txt b/dev/tests/verification/Resources/MergedActionGroupTest.txt index 6c20ffbd0..636c28627 100644 --- a/dev/tests/verification/Resources/MergedActionGroupTest.txt +++ b/dev/tests/verification/Resources/MergedActionGroupTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class MergedActionGroupTestCest { diff --git a/dev/tests/verification/Resources/MergedReferencesTest.txt b/dev/tests/verification/Resources/MergedReferencesTest.txt index ecaaf3ab5..794ba6370 100644 --- a/dev/tests/verification/Resources/MergedReferencesTest.txt +++ b/dev/tests/verification/Resources/MergedReferencesTest.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: MergedReferencesTest") * @group functional - * @Description("

Test files
verification/TestModule/Test/MergeFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/MergeFunctionalTest.xml
") */ class MergedReferencesTestCest { diff --git a/dev/tests/verification/Resources/MultipleActionGroupsTest.txt b/dev/tests/verification/Resources/MultipleActionGroupsTest.txt index 237e437e6..186cd404c 100644 --- a/dev/tests/verification/Resources/MultipleActionGroupsTest.txt +++ b/dev/tests/verification/Resources/MultipleActionGroupsTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @group functional - * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class MultipleActionGroupsTestCest { diff --git a/dev/tests/verification/Resources/PageReplacementTest.txt b/dev/tests/verification/Resources/PageReplacementTest.txt index 6185a0e9d..f6c6b1bac 100644 --- a/dev/tests/verification/Resources/PageReplacementTest.txt +++ b/dev/tests/verification/Resources/PageReplacementTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/PageReplacementTest.xml
") + * @Description("

Test files

verification/TestModule/Test/PageReplacementTest.xml
") */ class PageReplacementTestCest { diff --git a/dev/tests/verification/Resources/ParameterArrayTest.txt b/dev/tests/verification/Resources/ParameterArrayTest.txt index 1d5e0e97b..52332217b 100644 --- a/dev/tests/verification/Resources/ParameterArrayTest.txt +++ b/dev/tests/verification/Resources/ParameterArrayTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ParameterArrayTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ParameterArrayTest.xml
") */ class ParameterArrayTestCest { diff --git a/dev/tests/verification/Resources/ParentExtendedTest.txt b/dev/tests/verification/Resources/ParentExtendedTest.txt index a665ca457..aeae567a2 100644 --- a/dev/tests/verification/Resources/ParentExtendedTest.txt +++ b/dev/tests/verification/Resources/ParentExtendedTest.txt @@ -17,7 +17,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: ParentExtendedTest") * @group Parent - * @Description("

Test files
verification/TestModule/Test/ExtendedFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ExtendedFunctionalTest.xml
") */ class ParentExtendedTestCest { diff --git a/dev/tests/verification/Resources/PersistedAndXmlEntityArguments.txt b/dev/tests/verification/Resources/PersistedAndXmlEntityArguments.txt index 965faeabe..c6c09c9c7 100644 --- a/dev/tests/verification/Resources/PersistedAndXmlEntityArguments.txt +++ b/dev/tests/verification/Resources/PersistedAndXmlEntityArguments.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/ActionGroupFunctionalTest.xml
") + * @Description("

Test files

verification/TestModule/Test/ActionGroupFunctionalTest.xml
") */ class PersistedAndXmlEntityArgumentsCest { diff --git a/dev/tests/verification/Resources/PersistedReplacementTest.txt b/dev/tests/verification/Resources/PersistedReplacementTest.txt index 69e235ad5..eb3642ed1 100644 --- a/dev/tests/verification/Resources/PersistedReplacementTest.txt +++ b/dev/tests/verification/Resources/PersistedReplacementTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/PersistedReplacementTest.xml
") + * @Description("

Test files

verification/TestModule/Test/PersistedReplacementTest.xml
") */ class PersistedReplacementTestCest { diff --git a/dev/tests/verification/Resources/PersistenceActionGroupAppendingTest.txt b/dev/tests/verification/Resources/PersistenceActionGroupAppendingTest.txt index 388194a69..95aab913f 100644 --- a/dev/tests/verification/Resources/PersistenceActionGroupAppendingTest.txt +++ b/dev/tests/verification/Resources/PersistenceActionGroupAppendingTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/PersistenceActionGroupAppendingTest.xml
") + * @Description("

Test files

verification/TestModule/Test/PersistenceActionGroupAppendingTest.xml
") */ class PersistenceActionGroupAppendingTestCest { diff --git a/dev/tests/verification/Resources/PersistenceCustomFieldsTest.txt b/dev/tests/verification/Resources/PersistenceCustomFieldsTest.txt index ca4a34e9c..38dc364e7 100644 --- a/dev/tests/verification/Resources/PersistenceCustomFieldsTest.txt +++ b/dev/tests/verification/Resources/PersistenceCustomFieldsTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/PersistenceCustomFieldsTest.xml
") + * @Description("

Test files

verification/TestModule/Test/PersistenceCustomFieldsTest.xml
") */ class PersistenceCustomFieldsTestCest { diff --git a/dev/tests/verification/Resources/SectionReplacementTest.txt b/dev/tests/verification/Resources/SectionReplacementTest.txt index d583f59dd..5089cfbfd 100644 --- a/dev/tests/verification/Resources/SectionReplacementTest.txt +++ b/dev/tests/verification/Resources/SectionReplacementTest.txt @@ -15,7 +15,7 @@ use Yandex\Allure\Adapter\Model\SeverityLevel; use Yandex\Allure\Adapter\Annotation\TestCaseId; /** - * @Description("

Test files
verification/TestModule/Test/SectionReplacementTest.xml
") + * @Description("

Test files

verification/TestModule/Test/SectionReplacementTest.xml
") */ class SectionReplacementTestCest { diff --git a/dev/tests/verification/Resources/SkippedTest.txt b/dev/tests/verification/Resources/SkippedTest.txt index 06a81f337..08ff4fd43 100644 --- a/dev/tests/verification/Resources/SkippedTest.txt +++ b/dev/tests/verification/Resources/SkippedTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: skippedTest") - * @Description("

Test files
verification/TestModule/Test/SkippedTest.xml
") + * @Description("

Test files

verification/TestModule/Test/SkippedTest.xml
") */ class SkippedTestCest { diff --git a/dev/tests/verification/Resources/SkippedTestNoIssues.txt b/dev/tests/verification/Resources/SkippedTestNoIssues.txt index 00eac2f95..168077458 100644 --- a/dev/tests/verification/Resources/SkippedTestNoIssues.txt +++ b/dev/tests/verification/Resources/SkippedTestNoIssues.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: skippedNoIssuesTest") - * @Description("

Test files
verification/TestModule/Test/SkippedTest.xml
") + * @Description("

Test files

verification/TestModule/Test/SkippedTest.xml
") * @group skip */ class SkippedTestNoIssuesCest diff --git a/dev/tests/verification/Resources/SkippedTestTwoIssues.txt b/dev/tests/verification/Resources/SkippedTestTwoIssues.txt index b3c390705..3de81e02f 100644 --- a/dev/tests/verification/Resources/SkippedTestTwoIssues.txt +++ b/dev/tests/verification/Resources/SkippedTestTwoIssues.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: skippedMultipleIssuesTest") - * @Description("

Test files
verification/TestModule/Test/SkippedTest.xml
") + * @Description("

Test files

verification/TestModule/Test/SkippedTest.xml
") */ class SkippedTestTwoIssuesCest { diff --git a/dev/tests/verification/Resources/SkippedTestWithHooks.txt b/dev/tests/verification/Resources/SkippedTestWithHooks.txt index 98161c17d..a86924b94 100644 --- a/dev/tests/verification/Resources/SkippedTestWithHooks.txt +++ b/dev/tests/verification/Resources/SkippedTestWithHooks.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: skippedTestWithHooks") - * @Description("

Test files
verification/TestModule/Test/SkippedTest.xml
") + * @Description("

Test files

verification/TestModule/Test/SkippedTest.xml
") */ class SkippedTestWithHooksCest { diff --git a/dev/tests/verification/Resources/XmlCommentedActionGroupTest.txt b/dev/tests/verification/Resources/XmlCommentedActionGroupTest.txt index 883f8637a..7e43433a1 100644 --- a/dev/tests/verification/Resources/XmlCommentedActionGroupTest.txt +++ b/dev/tests/verification/Resources/XmlCommentedActionGroupTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Action Group With comment block in arguments and action group body") - * @Description("

Test files
verification/TestModule/Test/XmlCommentedActionGroupTest.xml
") + * @Description("

Test files

verification/TestModule/Test/XmlCommentedActionGroupTest.xml
") */ class XmlCommentedActionGroupTestCest { diff --git a/dev/tests/verification/Resources/XmlCommentedTest.txt b/dev/tests/verification/Resources/XmlCommentedTest.txt index 03ec7c701..f77aa5fe4 100644 --- a/dev/tests/verification/Resources/XmlCommentedTest.txt +++ b/dev/tests/verification/Resources/XmlCommentedTest.txt @@ -16,7 +16,7 @@ use Yandex\Allure\Adapter\Annotation\TestCaseId; /** * @Title("[NO TESTCASEID]: Test With comment blocks in root element 'tests', in annotations and in test body.") - * @Description("

Test files
verification/TestModule/Test/XmlCommentedTest.xml
") + * @Description("

Test files

verification/TestModule/Test/XmlCommentedTest.xml
") */ class XmlCommentedTestCest { diff --git a/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php b/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php index b9362832f..d5420e355 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php +++ b/src/Magento/FunctionalTestingFramework/Test/Util/TestObjectExtractor.php @@ -177,7 +177,7 @@ public function extractTestData($testData) */ private function appendFileNamesInDescriptionAnnotation($description, $fileNames) { - $description .= '

Test files
'; + $description .= '

Test files

'; foreach ($fileNames as $fileName) { if (!empty($fileName) && realpath($fileName) !== false) { From 83c3fbdff5d783c714dd4ee8a847f6fbf94a39f2 Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Thu, 26 Sep 2019 11:19:33 -0500 Subject: [PATCH 33/48] MQE-1650: update MFTF configuration to read Test entities from new location - fix composer.lock merge conflict --- composer.lock | 465 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 463 insertions(+), 2 deletions(-) diff --git a/composer.lock b/composer.lock index dd7d6ad3f..28cbd1d4e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "01cbd9e237e76de7070a3c0de4ee8b9f", + "content-hash": "79e0a6006597df1c5511869876dd7777", "packages": [ { "name": "allure-framework/allure-codeception", @@ -250,7 +250,7 @@ { "name": "Tobias Nyholm", "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" + "homepage": "https://github.com/nyholm" } ], "description": "Library of all the php-cache adapters", @@ -388,6 +388,308 @@ "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", "time": "2018-05-17T09:31:08+00:00" }, + { + "name": "composer/ca-bundle", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/10bb96592168a0f8e8f6dcde3532d9fa50b0b527", + "reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8", + "psr/log": "^1.0", + "symfony/process": "^2.5 || ^3.0 || ^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "time": "2019-08-30T08:44:50+00:00" + }, + { + "name": "composer/composer", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/composer/composer.git", + "reference": "314aa57fdcfc942065996f59fb73a8b3f74f3fa5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/composer/zipball/314aa57fdcfc942065996f59fb73a8b3f74f3fa5", + "reference": "314aa57fdcfc942065996f59fb73a8b3f74f3fa5", + "shasum": "" + }, + "require": { + "composer/ca-bundle": "^1.0", + "composer/semver": "^1.0", + "composer/spdx-licenses": "^1.2", + "composer/xdebug-handler": "^1.1", + "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0", + "seld/jsonlint": "^1.4", + "seld/phar-utils": "^1.0", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/filesystem": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/process": "^2.7 || ^3.0 || ^4.0" + }, + "conflict": { + "symfony/console": "2.8.38" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7", + "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" + }, + "suggest": { + "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", + "ext-zip": "Enabling the zip extension allows you to unzip archives", + "ext-zlib": "Allow gzip compression of HTTP requests" + }, + "bin": [ + "bin/composer" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\": "src/Composer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", + "homepage": "https://getcomposer.org/", + "keywords": [ + "autoload", + "dependency", + "package" + ], + "time": "2019-08-02T18:55:33+00:00" + }, + { + "name": "composer/semver", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/46d9139568ccb8d9e7cdd4539cab7347568a5e2e", + "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "time": "2019-03-19T17:25:45+00:00" + }, + { + "name": "composer/spdx-licenses", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/composer/spdx-licenses.git", + "reference": "7ac1e6aec371357df067f8a688c3d6974df68fa5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/7ac1e6aec371357df067f8a688c3d6974df68fa5", + "reference": "7ac1e6aec371357df067f8a688c3d6974df68fa5", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Spdx\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "SPDX licenses list and validation library.", + "keywords": [ + "license", + "spdx", + "validator" + ], + "time": "2019-07-29T10:31:59+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "1.3.3", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "46867cbf8ca9fb8d60c506895449eb799db1184f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/46867cbf8ca9fb8d60c506895449eb799db1184f", + "reference": "46867cbf8ca9fb8d60c506895449eb799db1184f", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "time": "2019-05-27T17:52:04+00:00" + }, { "name": "consolidation/annotated-command", "version": "2.9.1", @@ -1859,6 +2161,72 @@ ], "time": "2019-04-17T08:12:16+00:00" }, + { + "name": "justinrainbow/json-schema", + "version": "5.2.8", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/dcb6e1006bb5fd1e392b4daa68932880f37550d4", + "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.2.20", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "time": "2019-01-14T23:55:14+00:00" + }, { "name": "league/container", "version": "2.4.1", @@ -3960,6 +4328,99 @@ "homepage": "https://github.com/sebastianbergmann/version", "time": "2016-10-03T07:35:21+00:00" }, + { + "name": "seld/jsonlint", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "time": "2018-01-24T12:46:19+00:00" + }, + { + "name": "seld/phar-utils", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/phar-utils.git", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\PharUtils\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "PHAR file format utilities, for when PHP phars you up", + "keywords": [ + "phra" + ], + "time": "2015-10-13T18:44:15+00:00" + }, { "name": "symfony/browser-kit", "version": "v3.4.18", From f1e2b378f82b1c25e957470f64355196d14610d3 Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan Date: Thu, 26 Sep 2019 12:00:17 -0500 Subject: [PATCH 34/48] MQE-610:[PHPMD] Reduce Cyclomatic Complexity in Problem Methods fixed as per review comments --- .../Config/FileResolver/Module.php | 1 - .../DataGenerator/Objects/EntityDataObject.php | 3 ++- .../Persist/OperationDataArrayResolver.php | 5 +++-- .../ObjectManager/Config/Config.php | 7 +++---- .../ObjectManager/Config/Mapper/Dom.php | 12 +++++++----- .../StaticCheck/TestDependencyCheck.php | 2 +- 6 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/Magento/FunctionalTestingFramework/Config/FileResolver/Module.php b/src/Magento/FunctionalTestingFramework/Config/FileResolver/Module.php index 7d2493f3a..7cff19c87 100644 --- a/src/Magento/FunctionalTestingFramework/Config/FileResolver/Module.php +++ b/src/Magento/FunctionalTestingFramework/Config/FileResolver/Module.php @@ -26,7 +26,6 @@ class Module implements FileResolverInterface * Module constructor. * @param ModuleResolver|null $moduleResolver * @SuppressWarnings(PHPMD.UnusedFormalParameter) - * @TODO ported magento code - to be refactored later */ public function __construct(ModuleResolver $moduleResolver = null) { diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php index 040016f28..47a966f84 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Objects/EntityDataObject.php @@ -9,6 +9,7 @@ use Magento\FunctionalTestingFramework\Config\MftfApplicationConfig; use Magento\FunctionalTestingFramework\DataGenerator\Util\GenerationDataReferenceResolver; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; +use Magento\FunctionalTestingFramework\Exceptions\TestReferenceException; use Magento\FunctionalTestingFramework\Util\Logger\LoggingUtil; /** @@ -189,7 +190,7 @@ public function getDataByName($name, $uniquenessFormat) * @param integer $uniquenessFormat * @return string|null * @throws TestFrameworkException - * @throws \Magento\FunctionalTestingFramework\Exceptions\TestReferenceException + * @throws TestReferenceException */ private function resolveDataReferences($name, $uniquenessFormat) { diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/OperationDataArrayResolver.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/OperationDataArrayResolver.php index 12ce3ebb4..b2b4fb0e4 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/OperationDataArrayResolver.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/OperationDataArrayResolver.php @@ -13,6 +13,7 @@ use Magento\FunctionalTestingFramework\DataGenerator\Util\OperationElementExtractor; use Magento\FunctionalTestingFramework\DataGenerator\Util\RuntimeDataReferenceResolver; use Magento\FunctionalTestingFramework\Exceptions\TestFrameworkException; +use Magento\FunctionalTestingFramework\Exceptions\TestReferenceException; class OperationDataArrayResolver { @@ -126,9 +127,9 @@ public function resolveOperationDataArray($entityObject, $operationMetadata, $op * Resolve data references at run time. * @param array $operationDataArray * @param EntityDataObject $entityObject - * @return mixed + * @return array * @throws TestFrameworkException - * @throws \Magento\FunctionalTestingFramework\Exceptions\TestReferenceException + * @throws TestReferenceException */ private function resolveRunTimeDataReferences($operationDataArray, $entityObject) { diff --git a/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Config.php b/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Config.php index 486e6d6a1..3b2c827d5 100644 --- a/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Config.php +++ b/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Config.php @@ -207,20 +207,19 @@ protected function mergeConfiguration(array $configuration) break; default: - $this->setArguments($key, $curConfig); - break; + $this->setConfiguration($key, $curConfig); } } } /** - * Set arguments + * Set configuration * * @param string $key * @param array $config * @return void */ - private function setArguments($key, $config) + private function setConfiguration($key, $config) { $key = ltrim($key, '\\'); if (isset($config['type'])) { diff --git a/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Mapper/Dom.php b/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Mapper/Dom.php index 599f1565d..ba7bc64cd 100644 --- a/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Mapper/Dom.php +++ b/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Mapper/Dom.php @@ -80,8 +80,7 @@ public function convert($config) $typeData['type'] = $attributeType->nodeValue; } } - $typeArguments = $this->parseTypeArguments($node); - $typeData['arguments'] = $typeArguments; + $typeData['arguments'] = $this->setTypeArguments($node); $output[$typeNodeAttributes->getNamedItem('name')->nodeValue] = $typeData; break; default: @@ -93,12 +92,14 @@ public function convert($config) } /** Read typeChildNodes and set typeArguments - * @param $node + * @param DOMNode $node * @return mixed * @throws \Exception */ - private function parseTypeArguments($node) + private function setTypeArguments($node) { + $typeArguments = []; + foreach ($node->childNodes as $typeChildNode) { /** @var \DOMNode $typeChildNode */ if ($typeChildNode->nodeType != XML_ELEMENT_NODE) { @@ -117,7 +118,7 @@ private function parseTypeArguments($node) $argumentData ); } - return $typeArguments; + break; default: throw new \Exception( @@ -125,5 +126,6 @@ private function parseTypeArguments($node) ); } } + return $typeArguments; } } diff --git a/src/Magento/FunctionalTestingFramework/StaticCheck/TestDependencyCheck.php b/src/Magento/FunctionalTestingFramework/StaticCheck/TestDependencyCheck.php index f212cad10..6cfa4e9a8 100644 --- a/src/Magento/FunctionalTestingFramework/StaticCheck/TestDependencyCheck.php +++ b/src/Magento/FunctionalTestingFramework/StaticCheck/TestDependencyCheck.php @@ -186,7 +186,7 @@ private function findErrorsInFileSet($files) $this->resolveEntityReferences($extendReferences[1]); // Find violating references and set error output - $violatingReferences = $this->findViolatingReferences($filePath); + $violatingReferences = $this->findViolatingReferences($moduleFullName); $testErrors = $this->setErrorOutput($violatingReferences, $filePath); } return $testErrors; From 4a59f293675047a4d539be3deab57ab119291239 Mon Sep 17 00:00:00 2001 From: Kevin Kozan Date: Mon, 30 Sep 2019 09:12:01 -0500 Subject: [PATCH 35/48] MQE-1510 --- etc/config/command.php | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/etc/config/command.php b/etc/config/command.php index 201bb5d47..6158eebc3 100644 --- a/etc/config/command.php +++ b/etc/config/command.php @@ -11,9 +11,9 @@ $magentoObjectManager = $magentoObjectManagerFactory->create($_SERVER); $tokenModel = $magentoObjectManager->get(\Magento\Integration\Model\Oauth\Token::class); - $tokenPassedIn = urldecode($_POST['token']); - $command = urldecode($_POST['command']); - $arguments = urldecode($_POST['arguments']); + $tokenPassedIn = urldecode($_POST['token'] ?? ''); + $command = urldecode($_POST['command'] ?? ''); + $arguments = urldecode($_POST['arguments'] ?? ''); // Token returned will be null if the token we passed in is invalid $tokenFromMagento = $tokenModel->loadByToken($tokenPassedIn)->getToken(); @@ -22,8 +22,14 @@ $magentoBinary = $php . ' -f ../../../../bin/magento'; $valid = validateCommand($magentoBinary, $command); if ($valid) { - $fullCommand = escapeshellcmd($magentoBinary . " $command" . " $arguments"); - $process = new Symfony\Component\Process\Process($fullCommand); + $fullCommand = $magentoBinary . " $command" . " $arguments"; + $escapedCommand = escapeshellcmd($fullCommand); + if ($fullCommand !== $escapedCommand) { + http_response_code(403); + echo("Unsafe characters detected, command was not executed."); + return; + } + $process = new Symfony\Component\Process\Process($escapedCommand); $process->setIdleTimeout(60); $process->setTimeout(0); $idleTimeout = false; From 5127e0a7558d0f7462968612df757bfbc2aaa33e Mon Sep 17 00:00:00 2001 From: Kevin Kozan Date: Mon, 30 Sep 2019 13:50:33 -0500 Subject: [PATCH 36/48] MQE-1510 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit – Reverting command check --- etc/config/command.php | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/etc/config/command.php b/etc/config/command.php index 6158eebc3..7b45a2595 100644 --- a/etc/config/command.php +++ b/etc/config/command.php @@ -22,14 +22,8 @@ $magentoBinary = $php . ' -f ../../../../bin/magento'; $valid = validateCommand($magentoBinary, $command); if ($valid) { - $fullCommand = $magentoBinary . " $command" . " $arguments"; - $escapedCommand = escapeshellcmd($fullCommand); - if ($fullCommand !== $escapedCommand) { - http_response_code(403); - echo("Unsafe characters detected, command was not executed."); - return; - } - $process = new Symfony\Component\Process\Process($escapedCommand); + $fullCommand = escapeshellcmd($magentoBinary . " $command" . " $arguments"); + $process = new Symfony\Component\Process\Process($fullCommand); $process->setIdleTimeout(60); $process->setTimeout(0); $idleTimeout = false; From 9891e5d25898e4c8fb93899c5fe45addfcf5f7e5 Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Wed, 2 Oct 2019 11:42:51 -0500 Subject: [PATCH 37/48] MQE-1750: unit tests --- .../Composer/ComposerInstallTest.php | 66 +++ .../Composer/ComposerPackageTest.php | 172 +++++++ .../Composer/_files/dir1/dir2/composer.json | 21 + .../Composer/_files/dir1/dir2/composer.lock | 149 ++++++ .../_files/dir1/dir2/dir31/composer.json | 10 + .../dir1/dir2/dir31/dir41/composer.json | 11 + .../_files/dir1/dir2/dir32/composer.json | 11 + .../dir1/dir2/dir32/dir41/composer.json | 10 + .../dir1/dir2/dir32/dir42/composer.json | 10 + .../Util/ComposerModuleResolverTest.php | 162 +++++++ .../Util/ModuleResolverTest.php | 437 ++++++++++++++++-- .../Util/ComposerModuleResolver.php | 18 +- .../Util/ModuleResolver.php | 36 +- 13 files changed, 1055 insertions(+), 58 deletions(-) create mode 100644 dev/tests/unit/Magento/FunctionalTestFramework/Composer/ComposerInstallTest.php create mode 100644 dev/tests/unit/Magento/FunctionalTestFramework/Composer/ComposerPackageTest.php create mode 100644 dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/composer.json create mode 100644 dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/composer.lock create mode 100644 dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir31/composer.json create mode 100644 dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir31/dir41/composer.json create mode 100644 dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir32/composer.json create mode 100644 dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir32/dir41/composer.json create mode 100644 dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir32/dir42/composer.json create mode 100644 dev/tests/unit/Magento/FunctionalTestFramework/Util/ComposerModuleResolverTest.php diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Composer/ComposerInstallTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/ComposerInstallTest.php new file mode 100644 index 000000000..4eb047457 --- /dev/null +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/ComposerInstallTest.php @@ -0,0 +1,66 @@ +assertTrue(self::$composer->isMftfTestPackage('magento/module2-functional-test')); + } + + /** + * Test isMagentoPackage() + */ + public function testIsMagentoPackage() + { + $this->assertTrue(self::$composer->isMagentoPackage('magento/module-authorization')); + } + + /** + * Test isInstalledPackageOfType() + */ + public function testIsInstalledPackageOfType() + { + $this->assertTrue( + self::$composer->isInstalledPackageOfType('composer/composer', 'library') + ); + } + + /** + * Test getInstalledTestPackages() + */ + public function testGetInstalledTestPackages() + { + $output = self::$composer->getInstalledTestPackages(); + $this->assertCount(1, $output); + $this->assertArrayHasKey('magento/module2-functional-test', $output); + } +} diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Composer/ComposerPackageTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/ComposerPackageTest.php new file mode 100644 index 000000000..04ace7b19 --- /dev/null +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/ComposerPackageTest.php @@ -0,0 +1,172 @@ +assertEquals($expected, self::$composer->getName()); + } + + /** + * Test getType() + */ + public function testGetType() + { + $expected = 'magento2-functional-test-module'; + $this->assertEquals($expected, self::$composer->getType()); + } + + /** + * Test getVersion() + */ + public function testGetVersion() + { + $expected = '1.0.0'; + $this->assertEquals($expected, self::$composer->getVersion()); + } + + /** + * Test getDescription() + */ + public function testGetDescription() + { + $expected = 'MFTF tests for magento'; + $this->assertEquals($expected, self::$composer->getDescription()); + } + + /** + * Test getRequires() + */ + public function testGetRequires() + { + $expected = 'magento/magento2-functional-testing-framework'; + $output = self::$composer->getRequires(); + $this->assertCount(1, $output); + $this->assertArrayHasKey($expected, $output); + } + + /** + * Test getDevRequires() + */ + public function testGetDevRequires() + { + $expected = ['phpunit/phpunit']; + $this->assertEquals($expected, array_keys(self::$composer->getDevRequires())); + } + + /** + * Test getSuggests() + */ + public function testGetSuggests() + { + $expected = [ + 'magento/module-one', + 'magento/module-module-x', + 'magento/module-two', + 'magento/module-module-y', + 'magento/module-module-z', + 'magento/module-three', + 'magento/module-four' + ]; + $this->assertEquals($expected, array_keys(self::$composer->getSuggests())); + } + + /** + * Test getSuggestedMagentoModules() + */ + public function testGetSuggestedMagentoModules() + { + $expected = [ + 'Magento_ModuleX', + 'Magento_ModuleY', + 'Magento_ModuleZ' + ]; + $this->assertEquals($expected, self::$composer->getSuggestedMagentoModules()); + } + + /** + * Test isMftfTestPackage() + */ + public function testIsMftfTestPackage() + { + $this->assertTrue(self::$composer->isMftfTestPackage()); + } + + /** + * Test getRequiresForPackage() + */ + public function testGetRequiresForPackage() + { + $expected = [ + 'php', + 'ext-curl', + 'allure-framework/allure-codeception', + 'codeception/codeception', + 'consolidation/robo', + 'csharpru/vault-php', + 'csharpru/vault-php-guzzle6-transport', + 'flow/jsonpath', + 'fzaninotto/faker', + 'monolog/monolog', + 'mustache/mustache', + 'symfony/process', + 'vlucas/phpdotenv' + ]; + $this->assertEquals( + $expected, + array_keys(self::$composer->getRequiresForPackage('magento/magento2-functional-testing-framework', '2.5.0')) + ); + } + + /** + * Test isPackageRequiredInComposerJson() + */ + public function testIsPackageRequiredInComposerJson() + { + $this->assertTrue( + self::$composer->isPackageRequiredInComposerJson('magento/magento2-functional-testing-framework') + ); + } + + /** + * Test getRootPackage() + */ + public function testGetRootPackage() + { + $this->assertInstanceOf( + RootPackage::class, + self::$composer->getRootPackage() + ); + } +} diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/composer.json b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/composer.json new file mode 100644 index 000000000..c21401af7 --- /dev/null +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/composer.json @@ -0,0 +1,21 @@ +{ + "name": "magento/module2-functional-test", + "type": "magento2-functional-test-module", + "description": "MFTF tests for magento", + "version": "1.0.0", + "require": { + "magento/magento2-functional-testing-framework": "^2.5.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.5.0 || ~7.0.0" + }, + "suggest": { + "magento/module-one": "name: Magento_ModuleY, version: ~100.0.0", + "magento/module-module-x": " type: magento2-module ,name: Magento_ModuleX, version: ~100.0.0", + "magento/module-two": "*", + "magento/module-module-y": "type: magento2-module, name:Magento_ModuleY,version:~100.0.0", + "magento/module-module-z": " type:magento2-module, name: Magento_ModuleZ , version: ~100.0.0", + "magento/module-three": "type: magento2-module, ~100.0.0", + "magento/module-four": "some suggestions" + } +} \ No newline at end of file diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/composer.lock b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/composer.lock new file mode 100644 index 000000000..4493b5615 --- /dev/null +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/composer.lock @@ -0,0 +1,149 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "f40a2fa7e19322bd961f212ad270b0d7", + "packages": [ + { + "name": "magento/module-authorization", + "version": "100.3.2", + "dist": { + "type": "zip", + "url": "https://repo.magento.com/archives/magento/module-authorization/magento-module-authorization-100.3.2.0.zip", + "shasum": "c17ed45c3bffca3bf704d2f4031069ed36b70273" + }, + "require": { + "magento/framework": "102.0.*", + "magento/module-backend": "101.0.*", + "php": "~7.1.3||~7.2.0" + }, + "type": "magento2-module", + "autoload": { + "files": [ + "registration.php" + ], + "psr-4": { + "Magento\\Authorization\\": "" + } + }, + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "description": "Authorization module provides access to Magento ACL functionality." + }, + { + "name": "composer/composer", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/composer/composer.git", + "reference": "314aa57fdcfc942065996f59fb73a8b3f74f3fa5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/composer/zipball/314aa57fdcfc942065996f59fb73a8b3f74f3fa5", + "reference": "314aa57fdcfc942065996f59fb73a8b3f74f3fa5", + "shasum": "" + }, + "require": { + "composer/ca-bundle": "^1.0", + "composer/semver": "^1.0", + "composer/spdx-licenses": "^1.2", + "composer/xdebug-handler": "^1.1", + "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0", + "seld/jsonlint": "^1.4", + "seld/phar-utils": "^1.0", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/filesystem": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/process": "^2.7 || ^3.0 || ^4.0" + }, + "conflict": { + "symfony/console": "2.8.38" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7", + "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" + }, + "suggest": { + "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", + "ext-zip": "Enabling the zip extension allows you to unzip archives", + "ext-zlib": "Allow gzip compression of HTTP requests" + }, + "bin": [ + "bin/composer" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\": "src/Composer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", + "homepage": "https://getcomposer.org/", + "keywords": [ + "autoload", + "dependency", + "package" + ], + "time": "2019-08-02T18:55:33+00:00" + }, + { + "name": "magento/module2-functional-test", + "require": { + "composer/composer": "*" + }, + "type": "magento2-functional-test-module", + "version": "1.0.0", + "suggest": { + "magento/module-one": "name: Magento_ModuleY, version: ~100.0.0", + "magento/module-module-x": " type: magento2-module ,name: Magento_ModuleX, version: ~100.0.0", + "magento/module-two": "*", + "magento/module-module-y": "type: magento2-module, name:Magento_ModuleY,version:~100.0.0", + "magento/module-module-z": " type:magento2-module, name: Magento_ModuleZ , version: ~100.0.0", + "magento/module-three": "type: magento2-module, ~100.0.0", + "magento/module-four": "some suggestions" + }, + "description": "magento module2-functional-test", + "keywords": [ + "mftf", + "test" + ], + "time": "2019-03-19T17:25:45+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir31/composer.json b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir31/composer.json new file mode 100644 index 000000000..49e952ee9 --- /dev/null +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir31/composer.json @@ -0,0 +1,10 @@ +{ + "name": "magento/module-31-functional-test", + "type": "magento2-functional-test-module", + "require": { + "magento/magento2-functional-testing-framework": "*" + }, + "suggest": { + "magento/module-module-a": "type: magento2-module, name: Magento_ModuleA, version: ~100.0.0" + } +} \ No newline at end of file diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir31/dir41/composer.json b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir31/dir41/composer.json new file mode 100644 index 000000000..97737fca6 --- /dev/null +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir31/dir41/composer.json @@ -0,0 +1,11 @@ +{ + "name": "magento/module-3141-functional-test", + "type": "magento2-functional-test-module", + "require": { + "magento/magento2-functional-testing-framework": "*" + }, + "suggest": { + "magento/module-module-e": "type: magento2-module, name: Magento_ModuleE, version: ~100.0.0", + "magento/module-module-f": "type: magento2-module, name: Magento_ModuleF, version: ~100.0.0" + } +} \ No newline at end of file diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir32/composer.json b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir32/composer.json new file mode 100644 index 000000000..dffbb3bee --- /dev/null +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir32/composer.json @@ -0,0 +1,11 @@ +{ + "name": "magento/module-32-functional-test", + "type": "magento2-functional-test-module", + "require": { + "magento/magento2-functional-testing-framework": "*" + }, + "suggest": { + "magento/module-module-b": "type: magento2-module, name: Magento_ModuleB, version: ~100.0.0", + "magento/module-module-c": "type: magento2-module, name: Magento_ModuleC, version: ~100.0.0" + } +} \ No newline at end of file diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir32/dir41/composer.json b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir32/dir41/composer.json new file mode 100644 index 000000000..f766c226c --- /dev/null +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir32/dir41/composer.json @@ -0,0 +1,10 @@ +{ + "name": "magento/module-3241-functional-test", + "type": "magento2-functional-test-module", + "require": { + "magento/magento2-functional-testing-framework": "*" + }, + "suggest": { + "magento/module-module-g": "type: magento2-module, name: Magento_ModuleG, version: ~100.0.0" + } +} \ No newline at end of file diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir32/dir42/composer.json b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir32/dir42/composer.json new file mode 100644 index 000000000..e51f36515 --- /dev/null +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/_files/dir1/dir2/dir32/dir42/composer.json @@ -0,0 +1,10 @@ +{ + "name": "magento/module-3242-functional-test", + "type": "magento2-functional-test-module", + "require": { + "magento/magento2-functional-testing-framework": "*" + }, + "suggest": { + "magento/module-module-h": "type: magento2-module, name: Magento_ModuleH, version: ~100.0.0" + } +} \ No newline at end of file diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ComposerModuleResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ComposerModuleResolverTest.php new file mode 100644 index 000000000..3173730b3 --- /dev/null +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ComposerModuleResolverTest.php @@ -0,0 +1,162 @@ +getComposerInstalledTestModules($composerJson); + $this->assertCount(1, $output); + $this->assertEquals($expected, array_pop($output)); + } + + /** + * Test getTestModulesFromPaths() + */ + public function testGetTestModulesFromPaths() + { + $baseDir = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'Composer' . DIRECTORY_SEPARATOR . '_files' + . DIRECTORY_SEPARATOR . 'dir1' . DIRECTORY_SEPARATOR . 'dir2'; + $expected = [ + $baseDir . DIRECTORY_SEPARATOR . 'dir31' . DIRECTORY_SEPARATOR . 'dir41' => [ + 'Magento_ModuleE', + 'Magento_ModuleF' + ], + $baseDir . DIRECTORY_SEPARATOR . 'dir32' . DIRECTORY_SEPARATOR . 'dir41' => [ + 'Magento_ModuleG' + ], + $baseDir . DIRECTORY_SEPARATOR . 'dir32' . DIRECTORY_SEPARATOR . 'dir42' => [ + 'Magento_ModuleH' + ], + ]; + + $composer = new ComposerModuleResolver(); + $output = $composer->getTestModulesFromPaths([$baseDir]); + $this->assertEquals($expected, $output); + } + + /** + * Test findComposerJsonFilesAtDepth() + * + * @dataProvider findComposerJsonFilesAtDepthDataProvider + * @param string $dir + * @param integer $depth + * @param array $expected + * @throws \ReflectionException + */ + public function testFindComposerJsonFilesAtDepth($dir, $depth, $expected) + { + $composer = new ComposerModuleResolver(); + $class = new ReflectionClass($composer); + $method = $class->getMethod('findComposerJsonFilesAtDepth'); + $method->setAccessible(true); + $output = $method->invoke($composer, $dir, $depth); + $this->assertEquals($expected, $output); + } + + /** + * Test findAllComposerJsonFiles() + * + * @dataProvider findAllComposerJsonFilesDataProvider + * @param string $dir + * @param array $expected + * @throws \ReflectionException + */ + public function testFindAllComposerJsonFiles($dir, $expected) + { + $composer = new ComposerModuleResolver(); + $class = new ReflectionClass($composer); + $method = $class->getMethod('findAllComposerJsonFiles'); + $method->setAccessible(true); + $output = $method->invoke($composer, $dir); + $this->assertEquals($expected, $output); + } + + /** + * Data provider for testFindComposerJsonFilesAtDepth() + * + * @return array + */ + public function findComposerJsonFilesAtDepthDataProvider() + { + $baseDir = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'Composer' . DIRECTORY_SEPARATOR . '_files' + . DIRECTORY_SEPARATOR . 'dir1' . DIRECTORY_SEPARATOR . 'dir2'; + return [ + [ + $baseDir, + 0, + [ + $baseDir . DIRECTORY_SEPARATOR . 'composer.json' + ] + ], + [ + $baseDir, + 1, + [ + $baseDir . DIRECTORY_SEPARATOR . 'dir31' . DIRECTORY_SEPARATOR . 'composer.json', + $baseDir . DIRECTORY_SEPARATOR . 'dir32' . DIRECTORY_SEPARATOR . 'composer.json', + ] + ], + [ + $baseDir, + 2, + [ + $baseDir . DIRECTORY_SEPARATOR . 'dir31' . DIRECTORY_SEPARATOR . 'dir41' . DIRECTORY_SEPARATOR + . 'composer.json', + $baseDir . DIRECTORY_SEPARATOR . 'dir32' . DIRECTORY_SEPARATOR . 'dir41' . DIRECTORY_SEPARATOR + . 'composer.json', + $baseDir . DIRECTORY_SEPARATOR . 'dir32' . DIRECTORY_SEPARATOR . 'dir42' . DIRECTORY_SEPARATOR + . 'composer.json', + ] + ] + ]; + } + + /** + * Data provider for testFindAllComposerJsonFiles() + * + * @return array + */ + public function findAllComposerJsonFilesDataProvider() + { + $baseDir = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'Composer' . DIRECTORY_SEPARATOR . '_files' + . DIRECTORY_SEPARATOR . 'dir1' . DIRECTORY_SEPARATOR . 'dir2'; + return [ + [ + $baseDir, + [ + $baseDir . DIRECTORY_SEPARATOR . 'dir31' . DIRECTORY_SEPARATOR . 'dir41' . DIRECTORY_SEPARATOR + . 'composer.json', + $baseDir . DIRECTORY_SEPARATOR . 'dir31' . DIRECTORY_SEPARATOR . 'composer.json', + $baseDir . DIRECTORY_SEPARATOR . 'dir32' . DIRECTORY_SEPARATOR . 'dir41' . DIRECTORY_SEPARATOR + . 'composer.json', + $baseDir . DIRECTORY_SEPARATOR . 'dir32' . DIRECTORY_SEPARATOR . 'dir42' . DIRECTORY_SEPARATOR + . 'composer.json', + $baseDir . DIRECTORY_SEPARATOR . 'dir32' . DIRECTORY_SEPARATOR . 'composer.json', + $baseDir . DIRECTORY_SEPARATOR . 'composer.json', + ] + ] + ]; + } +} diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php index 1d4b77740..e9fb46488 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php @@ -16,6 +16,7 @@ use Magento\FunctionalTestingFramework\Util\Logger\LoggingUtil; use Magento\FunctionalTestingFramework\Util\ModuleResolver; use Magento\FunctionalTestingFramework\Util\MagentoTestCase; +use PHPUnit\Runner\Exception; use tests\unit\Util\TestLoggingUtil; class ModuleResolverTest extends MagentoTestCase @@ -71,7 +72,11 @@ public function testGetModulePathsAggregate() [ 'Magento_example' => 'some' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'example', 'Magento_sample' => 'other' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'sample', - ] + ], + null, + null, + [], + [] ); $resolver = ModuleResolver::getInstance(); $this->setMockResolverProperties($resolver, null, [0 => 'Magento_example', 1 => 'Magento_sample']); @@ -104,8 +109,8 @@ public function testGetModulePathsLocations() [], [], [], - [], - [], + null, + null, [], [], null, @@ -157,11 +162,326 @@ function ($arg) { ); } + /** + * Validate aggregateTestModulePathsFromComposerJson + * + * @throws \Exception + */ + public function testAggregateTestModulePathsFromComposerJson() + { + $this->mockForceGenerate(false); + $this->setMockResolverClass( + false, + null, // getEnabledModules + null, // applyCustomMethods + null, // globRelevantWrapper + [], // relevantPath + null, // getCustomModulePaths + null, // getRegisteredModuleList + null, // aggregateTestModulePathsFromComposerJson + [], // aggregateTestModulePathsFromComposerInstaller + [ + 'composer' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'pathA' => + [ + 'Magento_ModuleA', + 'Magento_ModuleB' + ], + 'composer' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'pathB' => + [ + 'Magento_ModuleB', + 'Magento_ModuleC' + ], + ], // getComposerJsonTestModulePaths + [] // getComposerInstalledTestModulePaths + ); + + $resolver = ModuleResolver::getInstance(); + $this->setMockResolverProperties($resolver, null, [0 => 'Magento_ModuleB', 1 => 'Magento_ModuleC']); + $this->assertEquals( + [ + 'composer' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'pathB' + ], + $resolver->getModulesPath() + ); + } + + /** + * Validate getComposerJsonTestModulePaths with paths invocation + * + * @throws \Exception + */ + public function testGetComposerJsonTestModulePathsForPathInvocation() + { + $this->mockForceGenerate(false); + $mockResolver = $this->setMockResolverClass( + false, + [], + null, + null, + [], + null, + null, + null, + null, + [], + [] + ); + + $resolver = ModuleResolver::getInstance(); + $this->setMockResolverProperties($resolver, null, null); + $this->assertEquals( + [], + $resolver->getModulesPath() + ); + + // Expected dev tests path + $expectedSearchPaths[] = MAGENTO_BP + . DIRECTORY_SEPARATOR + . 'dev' + . DIRECTORY_SEPARATOR + . 'tests' + . DIRECTORY_SEPARATOR + . 'acceptance' + . DIRECTORY_SEPARATOR + . 'tests' + . DIRECTORY_SEPARATOR + . 'functional'; + + // Expected test module path + $testModulePath = defined('TESTS_MODULE_PATH') ? TESTS_MODULE_PATH : TESTS_BP; + + if (array_search($testModulePath, $expectedSearchPaths) === false) { + $expectedSearchPaths[] = $testModulePath; + } + + $mockResolver->verifyInvoked('getComposerJsonTestModulePaths', [$expectedSearchPaths]); + } + + /** + * Validate aggregateTestModulePathsFromComposerInstaller + * + * @throws \Exception + */ + public function testAggregateTestModulePathsFromComposerInstaller() + { + $this->mockForceGenerate(false); + $this->setMockResolverClass( + false, + null, + null, + null, + [], + null, + null, + null, + null, + [], + [ + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathA' => + [ + 'Magento_ModuleA', + 'Magento_ModuleB' + ], + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathB' => + [ + 'Magento_ModuleB', + 'Magento_ModuleC' + ], + ] + ); + + $resolver = ModuleResolver::getInstance(); + $this->setMockResolverProperties( + $resolver, + null, + [0 => 'Magento_ModuleA', 1 => 'Magento_ModuleB', 2 => 'Magento_ModuleC'] + ); + $this->assertEquals( + [ + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathA', + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathB' + ], + $resolver->getModulesPath() + ); + } + + /** + * Validate getComposerInstalledTestModulePaths with paths invocation + * + * @throws \Exception + */ + public function testGetComposerInstalledTestModulePathsForPathInvocation() + { + $this->mockForceGenerate(false); + $mockResolver = $this->setMockResolverClass( + false, + [], + null, + null, + [], + null, + null, + null, + null, + [], + [] + ); + + $resolver = ModuleResolver::getInstance(); + $this->setMockResolverProperties($resolver, null, null); + $this->assertEquals( + [], + $resolver->getModulesPath() + ); + + // Expected file path + $expectedSearchPath = MAGENTO_BP . DIRECTORY_SEPARATOR . 'composer.json'; + + $mockResolver->verifyInvoked('getComposerInstalledTestModulePaths', [$expectedSearchPath]); + } + + /** + * Validate mergeModulePaths() and flipAndFilterModulePathsArray() + * + * @throws \Exception + */ + public function testMergeFlipAndFilterModulePaths() + { + $this->mockForceGenerate(false); + $this->setMockResolverClass( + false, + null, + null, + null, + null, + null, + null, + null, + null, + [ + 'composer' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'pathA' => + [ + 'Magento_ModuleA' + ], + 'composer' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'pathB' => + [ + 'Magento_ModuleB', + 'Magento_ModuleC', + ], + ], + [ + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathA' => + [ + 'Magento_ModuleC', + 'Magento_ModuleD' + ], + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathB' => + [ + 'Magento_ModuleD' + ], + ], + [ + 'some' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'example' => ['Magento_example'], + 'other' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'sample' => ['Magento_sample'], + ] + ); + + $resolver = ModuleResolver::getInstance(); + $this->setMockResolverProperties( + $resolver, + null, + [ + 0 => 'Magento_ModuleB', + 1 => 'Magento_ModuleC', + 2 => 'Magento_ModuleD', + 3 => 'Magento_example', + 4 => 'Magento_otherexample' + ] + ); + $this->assertEquals( + [ + 'some' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'example', + 'composer' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'pathB', + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathA', + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathB' + ], + $resolver->getModulesPath() + ); + } + + /** + * Validate logging warning in flipAndFilterModulePathsArray() + * + * @throws \Exception + */ + public function testMergeFlipAndFilterModulePathsWithLogging() + { + $this->mockForceGenerate(false); + $this->setMockResolverClass( + false, + null, + null, + null, + [], + null, + null, + null, + null, + [ + 'composer' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'pathA' => + [ + 'Magento_ModuleA' + ], + 'composer' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'pathB' => + [ + 'Magento_ModuleB' + ], + ], + [ + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathA' => + [ + 'Magento_ModuleA' + ], + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathB' => + [ + 'Magento_ModuleC' + ], + ] + ); + + $resolver = ModuleResolver::getInstance(); + $this->setMockResolverProperties( + $resolver, + null, + [ + 0 => 'Magento_ModuleA', + 1 => 'Magento_ModuleB', + 2 => 'Magento_ModuleC' + ] + ); + $this->assertEquals( + [ + 'composer' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'pathA', + 'composer' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'pathB', + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathB' + ], + $resolver->getModulesPath() + ); + $warnMsg = 'Path: composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR; + $warnMsg .= 'pathA is ignored by ModuleResolver. ' . PHP_EOL . 'Path: composer' . DIRECTORY_SEPARATOR; + $warnMsg .= 'json' . DIRECTORY_SEPARATOR . 'pathA is set for Module: Magento_ModuleA' . PHP_EOL; + TestLoggingUtil::getInstance()->validateMockLogStatement( + 'warning', + $warnMsg, + [] + ); + } + /** * Validate custom modules are added * @throws \Exception */ - public function testGetCustomModulePath() + public function testApplyCustomModuleMethods() { $this->setMockResolverClass( false, @@ -169,7 +489,12 @@ public function testGetCustomModulePath() null, null, [], - ['Magento_Module' => 'otherPath'] + [ 'Magento_Module' => 'otherPath'], + null, + null, + null, + [], + [] ); $resolver = ModuleResolver::getInstance(); $this->setMockResolverProperties($resolver, null, null, null); @@ -177,7 +502,7 @@ public function testGetCustomModulePath() TestLoggingUtil::getInstance()->validateMockLogStatement( 'info', 'including custom module', - ['Magento_Module' => 'otherPath'] + [ 'Magento_Module' => 'otherPath'] ); } @@ -193,17 +518,17 @@ public function testGetModulePathsBlacklist() null, null, [], - [], - [], - [], - [], + null, + null, + null, + null, [], [], [ - "vendor" => "vendor", - "appCode" => "appCode", - "devTests" => "devTests", - "thisPath" => "thisPath" + 'vendor' => ['vendor'], + 'appCode' => ['appCode'], + 'devTests' => ['devTests'], + 'thisPath' => ['thisPath'] ], function ($arg) { return $arg; @@ -213,9 +538,9 @@ function ($arg) { } ); $resolver = ModuleResolver::getInstance(); - $this->setMockResolverProperties($resolver, null, null, ["devTests" => "devTests"]); + $this->setMockResolverProperties($resolver, null, null, ['devTests']); $this->assertEquals( - ["vendor", "appCode", "thisPath"], + ['vendor', 'appCode', 'thisPath'], $resolver->getModulesPath() ); TestLoggingUtil::getInstance()->validateMockLogStatement( @@ -235,7 +560,19 @@ public function testGetModulePathsNoAdminToken() $this->mockForceGenerate(false); // Mock ModuleResolver and $enabledModulesPath - $this->setMockResolverClass(false, null, ["example" . DIRECTORY_SEPARATOR . "paths"], []); + $this->setMockResolverClass( + false, + null, + ["example" . DIRECTORY_SEPARATOR . "paths"], + [], + null, + null, + null, + null, + null, + [], + [] + ); $resolver = ModuleResolver::getInstance(); $this->setMockResolverProperties($resolver, null, null); @@ -304,11 +641,11 @@ public function testGetAdminTokenWithBadResponse() * Function used to set mock for parser return and force init method to run between tests. * * @param string $mockToken - * @param array $mockGetModules - * @param string[] $mockCustomMethods - * @param string[] $mockGlob - * @param string[] $mockRelativePaths - * @param string[] $mockCustomModules + * @param array $mockGetEnabledModules + * @param string[] $mockApplyCustomMethods + * @param string[] $mockGlobRelevantWrapper + * @param string[] $mockRelevantPaths + * @param string[] $mockGetCustomModulePaths * @param string[] $mockGetRegisteredModuleList * @param string[] $mockAggregateTestModulePathsFromComposerJson * @param string[] $mockAggregateTestModulePathsFromComposerInstaller @@ -322,16 +659,16 @@ public function testGetAdminTokenWithBadResponse() */ private function setMockResolverClass( $mockToken = null, - $mockGetModules = null, - $mockCustomMethods = null, - $mockGlob = null, - $mockRelativePaths = null, - $mockCustomModules = null, + $mockGetEnabledModules = null, + $mockApplyCustomMethods = null, + $mockGlobRelevantWrapper = null, + $mockRelevantPaths = null, + $mockGetCustomModulePaths = null, $mockGetRegisteredModuleList = null, - $mockAggregateTestModulePathsFromComposerJson = [], - $mockAggregateTestModulePathsFromComposerInstaller = [], - $mockGetComposerJsonTestModulePaths = [], - $mockGetComposerInstalledTestModulePaths = [], + $mockAggregateTestModulePathsFromComposerJson = null, + $mockAggregateTestModulePathsFromComposerInstaller = null, + $mockGetComposerJsonTestModulePaths = null, + $mockGetComposerInstalledTestModulePaths = null, $mockAggregateTestModulePaths = null, $mockNormalizeModuleNames = null, $mockFlipAndFilterModulePathsArray = null @@ -344,29 +681,37 @@ private function setMockResolverClass( if (isset($mockToken)) { $mockMethods['getAdminToken'] = $mockToken; } - if (isset($mockGetModules)) { - $mockMethods['getEnabledModules'] = $mockGetModules; + if (isset($mockGetEnabledModules)) { + $mockMethods['getEnabledModules'] = $mockGetEnabledModules; } - if (isset($mockCustomMethods)) { - $mockMethods['applyCustomModuleMethods'] = $mockCustomMethods; + if (isset($mockApplyCustomMethods)) { + $mockMethods['applyCustomModuleMethods'] = $mockApplyCustomMethods; } - if (isset($mockGlob)) { - $mockMethods['globRelevantWrapper'] = $mockGlob; + if (isset($mockGlobRelevantWrapper)) { + $mockMethods['globRelevantWrapper'] = $mockGlobRelevantWrapper; } - if (isset($mockRelativePaths)) { - $mockMethods['globRelevantPaths'] = $mockRelativePaths; + if (isset($mockRelevantPaths)) { + $mockMethods['globRelevantPaths'] = $mockRelevantPaths; } - if (isset($mockCustomModules)) { - $mockMethods['getCustomModulePaths'] = $mockCustomModules; + if (isset($mockGetCustomModulePaths)) { + $mockMethods['getCustomModulePaths'] = $mockGetCustomModulePaths; } if (isset($mockGetRegisteredModuleList)) { $mockMethods['getRegisteredModuleList'] = $mockGetRegisteredModuleList; } - $mockMethods['aggregateTestModulePathsFromComposerJson'] = $mockAggregateTestModulePathsFromComposerJson ?? []; - $mockMethods['aggregateTestModulePathsFromComposerInstaller'] = - $mockAggregateTestModulePathsFromComposerInstaller ?? []; - $mockMethods['getComposerJsonTestModulePaths'] = $mockGetComposerJsonTestModulePaths ?? []; - $mockMethods['getComposerInstalledTestModulePaths'] = $mockGetComposerInstalledTestModulePaths ?? []; + if (isset($mockAggregateTestModulePathsFromComposerJson)) { + $mockMethods['aggregateTestModulePathsFromComposerJson'] = $mockAggregateTestModulePathsFromComposerJson; + } + if (isset($mockAggregateTestModulePathsFromComposerInstaller)) { + $mockMethods['aggregateTestModulePathsFromComposerInstaller'] = + $mockAggregateTestModulePathsFromComposerInstaller; + } + if (isset($mockGetComposerJsonTestModulePaths)) { + $mockMethods['getComposerJsonTestModulePaths'] = $mockGetComposerJsonTestModulePaths; + } + if (isset($mockGetComposerInstalledTestModulePaths)) { + $mockMethods['getComposerInstalledTestModulePaths'] = $mockGetComposerInstalledTestModulePaths; + } if (isset($mockAggregateTestModulePaths)) { $mockMethods['aggregateTestModulePaths'] = $mockAggregateTestModulePaths; } diff --git a/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php index 5152989e7..210c10fdd 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ComposerModuleResolver.php @@ -135,16 +135,16 @@ private function findAllComposerJsonFiles($directory) $jsonPattern = DIRECTORY_SEPARATOR . "composer.json"; $subDirectoryPattern = DIRECTORY_SEPARATOR . "*"; - $jsonFileList = glob($directory . $jsonPattern); - if ($jsonFileList !== false && !empty($jsonFileList)) { - return $jsonFileList; - } else { - $jsonFileList = []; - foreach (glob($directory . $subDirectoryPattern, GLOB_ONLYDIR) as $dir) { - $jsonFileList = array_merge_recursive($jsonFileList, self::findAllComposerJsonFiles($dir)); - } - return $jsonFileList; + $jsonFileList = []; + foreach (glob($directory . $subDirectoryPattern, GLOB_ONLYDIR) as $dir) { + $jsonFileList = array_merge_recursive($jsonFileList, self::findAllComposerJsonFiles($dir)); } + + $curJsonFiles = glob($directory . $jsonPattern); + if ($curJsonFiles !== false && !empty($curJsonFiles)) { + $jsonFileList = array_merge_recursive($jsonFileList, $curJsonFiles); + } + return $jsonFileList; } /** diff --git a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php index c27496dd5..2bf93242a 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php @@ -511,12 +511,16 @@ private function flipAndFilterModulePathsArray($objectArray, $filterArray = null if (strpos($modules[0], '_') === false) { $modules[0] = $this->findVendorNameFromPath($path) . '_' . $modules[0]; } - $flippedArray[$modules[0]] = $path; + $flippedArray = $this->setArrayValueWithLogging($flippedArray, $modules[0], $path); } } else { // One path maps to multiple modules if (!is_array($filterArray)) { - $flippedArray[$this->findVendorAndModuleNameFromPath($path)] = $path; + $flippedArray = $this->setArrayValueWithLogging( + $flippedArray, + $this->findVendorAndModuleNameFromPath($path), + $path + ); } else { $skip = false; foreach ($modules as $module) { @@ -526,7 +530,11 @@ private function flipAndFilterModulePathsArray($objectArray, $filterArray = null } } if (!$skip) { - $flippedArray[$this->findVendorAndModuleNameFromPath($path)] = $path; + // The one path to many module names use case is designed to be strictly used when it's + // impossible to write tests in dedicated modules. Due to performance consideration and there + // is no real usage of this currently, we will use the first module name for the path. + // TODO: consider saving all module names if this information is needed in the future. + $flippedArray = $this->setArrayValueWithLogging($flippedArray, $modules[0], $path); } } } @@ -534,6 +542,28 @@ private function flipAndFilterModulePathsArray($objectArray, $filterArray = null return $flippedArray; } + /** + * Set array value at index only if array value at index is not yet set, skip otherwise and log warning message + * + * @param array $inArray + * @param string $index + * @param string $value + * + * @return array + */ + private function setArrayValueWithLogging($inArray, $index, $value) + { + $outArray = $inArray; + if (!isset($inArray[$index])) { + $outArray[$index] = $value; + } else { + $warnMsg = 'Path: ' . $value . ' is ignored by ModuleResolver. ' . PHP_EOL . 'Path: '; + $warnMsg .= $inArray[$index] . ' is set for Module: ' . $index . PHP_EOL; + LoggingUtil::getInstance()->getLogger(ModuleResolver::class)->warn($warnMsg); + } + return $outArray; + } + /** * Merge code paths * From 7c3bd33569ea32f0f8cbda002c8eef144664dd2d Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Tue, 8 Oct 2019 13:57:54 -0500 Subject: [PATCH 38/48] MQE-1750: unit tests and some code refactor. --- .../Util/ModuleResolverTest.php | 121 +++++++++++++++--- .../Util/ModuleResolver.php | 104 ++++++++++----- 2 files changed, 177 insertions(+), 48 deletions(-) diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php index e9fb46488..b7c154e34 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php @@ -345,9 +345,92 @@ public function testGetComposerInstalledTestModulePathsForPathInvocation() * * @throws \Exception */ - public function testMergeFlipAndFilterModulePaths() + public function testMergeFlipAndFilterModulePathsNoForceGenerate() { $this->mockForceGenerate(false); + $this->setMockResolverClass( + false, + null, + null, + null, + null, + null, + null, + null, + null, + [ + 'composer' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'pathA' => + [ + 'Magento_ModuleA' + ], + 'composer' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'pathB' => + [ + 'Magento_ModuleB' + ], + ], + [ + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathD' => + [ + 'Magento_ModuleD' + ], + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathE' => + [ + 'Magento_ModuleE' + ], + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathC' => + [ + 'Magento_ModuleC', + 'Magento_ModuleB', + ], + ], + [ + 'some' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'example' => ['Magento_Example'], + 'other' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'sample' => ['Magento_Sample'], + 'some' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'path1' => ['Magento_Path1'], + 'other' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'path2' => ['Magento_Path2'], + 'some' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'path3' => ['Magento_Path3'], + 'other' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'path4' => ['Magento_Path4'], + ] + ); + + $resolver = ModuleResolver::getInstance(); + $this->setMockResolverProperties( + $resolver, + null, + [ + 0 => 'Magento_Path1', + 1 => 'Magento_Path2', + 2 => 'Magento_Path4', + 3 => 'Magento_Example', + 4 => 'Magento_ModuleB', + 5 => 'Magento_ModuleD', + 6 => 'Magento_Otherexample', + 7 => 'Magento_ModuleC', + ] + ); + $this->assertEquals( + [ + 'some' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'path1', + 'other' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'path2', + 'other' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'path4', + 'some' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'example', + 'composer' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'pathB', + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathD', + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathC', + + ], + $resolver->getModulesPath() + ); + } + + /** + * Validate mergeModulePaths() and flipAndFilterModulePathsArray() + * + * @throws \Exception + */ + public function testMergeFlipAndFilterModulePathsForceGenerate() + { + $this->mockForceGenerate(true); $this->setMockResolverClass( false, null, @@ -381,8 +464,8 @@ public function testMergeFlipAndFilterModulePaths() ], ], [ - 'some' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'example' => ['Magento_example'], - 'other' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'sample' => ['Magento_sample'], + 'some' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'example' => ['Magento_Example'], + 'other' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'sample' => ['Magento_Sample'], ] ); @@ -394,16 +477,18 @@ public function testMergeFlipAndFilterModulePaths() 0 => 'Magento_ModuleB', 1 => 'Magento_ModuleC', 2 => 'Magento_ModuleD', - 3 => 'Magento_example', - 4 => 'Magento_otherexample' + 3 => 'Magento_Example', + 4 => 'Magento_Otherexample' ] ); $this->assertEquals( [ 'some' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'example', + 'composer' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'pathA', 'composer' . DIRECTORY_SEPARATOR . 'json' . DIRECTORY_SEPARATOR . 'pathB', 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathA', - 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathB' + 'composer' . DIRECTORY_SEPARATOR . 'install' . DIRECTORY_SEPARATOR . 'pathB', + 'other' . DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'sample' ], $resolver->getModulesPath() ); @@ -508,6 +593,8 @@ public function testApplyCustomModuleMethods() /** * Validate blacklisted modules are removed + * Module paths are sorted according to module name in alphabetically ascending order + * * @throws \Exception */ public function testGetModulePathsBlacklist() @@ -525,10 +612,10 @@ public function testGetModulePathsBlacklist() [], [], [ - 'vendor' => ['vendor'], - 'appCode' => ['appCode'], - 'devTests' => ['devTests'], - 'thisPath' => ['thisPath'] + 'thisPath/some/path4' => ['Some_Module4'], + 'devTests/Magento/path3' => ['Magento_Module3'], + 'appCode/Magento/path2' => ['Magento_Module2'], + 'vendor/amazon/path1' => ['Amazon_Module1'], ], function ($arg) { return $arg; @@ -538,15 +625,15 @@ function ($arg) { } ); $resolver = ModuleResolver::getInstance(); - $this->setMockResolverProperties($resolver, null, null, ['devTests']); + $this->setMockResolverProperties($resolver, null, null, ['Magento_Module3']); $this->assertEquals( - ['vendor', 'appCode', 'thisPath'], + ['vendor/amazon/path1', 'appCode/Magento/path2', 'thisPath/some/path4'], $resolver->getModulesPath() ); TestLoggingUtil::getInstance()->validateMockLogStatement( 'info', 'excluding module', - ['module' => 'devTests'] + ['module' => 'Magento_Module3'] ); } @@ -654,6 +741,7 @@ public function testGetAdminTokenWithBadResponse() * @param string[] $mockAggregateTestModulePaths * @param string[] $mockNormalizeModuleNames * @param string[] $mockFlipAndFilterModulePathsArray + * @param string[] $mockFlipAndSortModulePathsArray * @throws \Exception * @return Verifier ModuleResolver double */ @@ -671,7 +759,8 @@ private function setMockResolverClass( $mockGetComposerInstalledTestModulePaths = null, $mockAggregateTestModulePaths = null, $mockNormalizeModuleNames = null, - $mockFlipAndFilterModulePathsArray = null + $mockFlipAndFilterModulePathsArray = null, + $mockFlipAndSortModulePathsArray = null ) { $property = new \ReflectionProperty(ModuleResolver::class, 'instance'); $property->setAccessible(true); @@ -721,7 +810,9 @@ private function setMockResolverClass( if (isset($mockFlipAndFilterModulePathsArray)) { $mockMethods['flipAndFilterModulePathsArray'] = $mockFlipAndFilterModulePathsArray; } - + if (isset($mockFlipAndSortModulePathsArray)) { + $mockMethods['flipAndSortModulePathsArray'] = $mockFlipAndSortModulePathsArray; + } $mockResolver = AspectMock::double( ModuleResolver::class, $mockMethods diff --git a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php index 2bf93242a..447516075 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php @@ -16,6 +16,7 @@ * * @api * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) */ class ModuleResolver { @@ -263,7 +264,7 @@ public function getModulesPath($verbosePath = false) $allModulePaths = $this->normalizeModuleNames($allModulePaths); if (MftfApplicationConfig::getConfig()->forceGenerateEnabled()) { - $allModulePaths = $this->flipAndFilterModulePathsArray($allModulePaths); + $allModulePaths = $this->flipAndSortModulePathsArray($allModulePaths, true); $this->enabledModulePaths = $this->applyCustomModuleMethods($allModulePaths); return $this->enabledModulePaths; } @@ -497,48 +498,85 @@ private function getComposerInstalledTestModulePaths($composerFile) * @param array $objectArray * @param array $filterArray * @return array - * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ - private function flipAndFilterModulePathsArray($objectArray, $filterArray = null) + private function flipAndFilterModulePathsArray($objectArray, $filterArray) { + $oneToOneArray = []; + $oneToManyArray = []; + // Filter array by enabled modules + foreach ($objectArray as $path => $modules) { + if (!array_diff($modules, $filterArray) + || (count($modules) == 1 && isset($this->knownDirectories[$modules[0]]))) { + if (count($modules) == 1) { + $oneToOneArray[$path] = $modules[0]; + } else { + $oneToManyArray[$path] = $modules; + } + } + } + $flippedArray = []; + // Set flipped array for "one path => one module" case first to maintain module sequencing + foreach ($filterArray as $moduleName) { + $path = array_search($moduleName, $oneToOneArray); + if ($path !== false) { + if (strpos($moduleName, '_') === false) { + $moduleName = $this->findVendorNameFromPath($path) . '_' . $moduleName; + } + $flippedArray = $this->setArrayValueWithLogging($flippedArray, $moduleName, $path); + unset($oneToOneArray[$path]); + } + } + + // Set flipped array for everything else + return $this->flipAndSortModulePathsArray( + array_merge($oneToOneArray, $oneToManyArray), + false, + $flippedArray + ); + } + + /** + * Flip module code paths and optionally sort in alphabetical order + * + * @param array $objectArray + * @param boolean $sort + * @param array $inFlippedArray + * @return array + */ + private function flipAndSortModulePathsArray($objectArray, $sort, $inFlippedArray = []) + { + $flippedArray = $inFlippedArray; + + // Set flipped array from object array foreach ($objectArray as $path => $modules) { - // One path maps to one module - if (count($modules) == 1) { - if (!is_array($filterArray) - || (is_array($filterArray) && in_array($modules[0], $filterArray)) - || isset($this->knownDirectories[$modules[0]])) { - if (strpos($modules[0], '_') === false) { - $modules[0] = $this->findVendorNameFromPath($path) . '_' . $modules[0]; - } - $flippedArray = $this->setArrayValueWithLogging($flippedArray, $modules[0], $path); + if (is_array($modules) && count($modules) > 1) { + // The "one path => many module names" case is designed to be strictly used when it's + // impossible to write tests in dedicated modules. Due to performance consideration and there + // is no real usage of this currently, we will use the first module name for the path. + // TODO: consider saving all module names if this information is needed in the future. + $module = $modules[0]; + } elseif (is_array($modules)) { + if (strpos($modules[0], '_') === false) { + $module = $this->findVendorNameFromPath($path) . '_' . $modules[0]; + } else { + $module = $modules[0]; } } else { - // One path maps to multiple modules - if (!is_array($filterArray)) { - $flippedArray = $this->setArrayValueWithLogging( - $flippedArray, - $this->findVendorAndModuleNameFromPath($path), - $path - ); + if (strpos($modules, '_') === false) { + $module = $this->findVendorNameFromPath($path) . '_' . $modules; } else { - $skip = false; - foreach ($modules as $module) { - if (!in_array($module, $filterArray)) { - $skip = true; - break; - } - } - if (!$skip) { - // The one path to many module names use case is designed to be strictly used when it's - // impossible to write tests in dedicated modules. Due to performance consideration and there - // is no real usage of this currently, we will use the first module name for the path. - // TODO: consider saving all module names if this information is needed in the future. - $flippedArray = $this->setArrayValueWithLogging($flippedArray, $modules[0], $path); - } + $module = $modules; } } + $flippedArray = $this->setArrayValueWithLogging($flippedArray, $module, $path); } + + // Sort array in alphabetical order + if ($sort) { + ksort($flippedArray); + } + return $flippedArray; } From c7d990090f2015e1bcfa457c0c696d72ce9e4f47 Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Tue, 8 Oct 2019 14:07:19 -0500 Subject: [PATCH 39/48] MQE-1750: unit tests and some code refactor. --- .../Composer/ComposerInstallTest.php | 18 ++++------- .../Composer/ComposerPackageTest.php | 32 +++++++++---------- 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Composer/ComposerInstallTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/ComposerInstallTest.php index 4eb047457..e4977184f 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Composer/ComposerInstallTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/ComposerInstallTest.php @@ -16,16 +16,14 @@ class ComposerInstallTest extends MagentoTestCase * * @var ComposerInstall */ - private static $composer; + private $composer; - public static function setUpBeforeClass() + public function setUp() { - parent::setUpBeforeClass(); - $composerJson = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'Composer' . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'dir1' . DIRECTORY_SEPARATOR . 'dir2' . DIRECTORY_SEPARATOR . 'composer.json'; - self::$composer = new ComposerInstall($composerJson); + $this->composer = new ComposerInstall($composerJson); } /** @@ -33,7 +31,7 @@ public static function setUpBeforeClass() */ public function testIsMftfTestPackage() { - $this->assertTrue(self::$composer->isMftfTestPackage('magento/module2-functional-test')); + $this->assertTrue($this->composer->isMftfTestPackage('magento/module2-functional-test')); } /** @@ -41,7 +39,7 @@ public function testIsMftfTestPackage() */ public function testIsMagentoPackage() { - $this->assertTrue(self::$composer->isMagentoPackage('magento/module-authorization')); + $this->assertTrue($this->composer->isMagentoPackage('magento/module-authorization')); } /** @@ -49,9 +47,7 @@ public function testIsMagentoPackage() */ public function testIsInstalledPackageOfType() { - $this->assertTrue( - self::$composer->isInstalledPackageOfType('composer/composer', 'library') - ); + $this->assertTrue($this->composer->isInstalledPackageOfType('composer/composer', 'library')); } /** @@ -59,7 +55,7 @@ public function testIsInstalledPackageOfType() */ public function testGetInstalledTestPackages() { - $output = self::$composer->getInstalledTestPackages(); + $output = $this->composer->getInstalledTestPackages(); $this->assertCount(1, $output); $this->assertArrayHasKey('magento/module2-functional-test', $output); } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Composer/ComposerPackageTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/ComposerPackageTest.php index 04ace7b19..4802f0c33 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Composer/ComposerPackageTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Composer/ComposerPackageTest.php @@ -17,16 +17,14 @@ class ComposerPackageTest extends MagentoTestCase * * @var ComposerPackage */ - private static $composer; + private $composer; - public static function setUpBeforeClass() + public function setUp() { - parent::setUpBeforeClass(); - $composerJson = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'Composer' . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'dir1' . DIRECTORY_SEPARATOR . 'dir2' . DIRECTORY_SEPARATOR . 'composer.json'; - self::$composer = new ComposerPackage($composerJson); + $this->composer = new ComposerPackage($composerJson); } /** @@ -35,7 +33,7 @@ public static function setUpBeforeClass() public function testGetName() { $expected = 'magento/module2-functional-test'; - $this->assertEquals($expected, self::$composer->getName()); + $this->assertEquals($expected, $this->composer->getName()); } /** @@ -44,7 +42,7 @@ public function testGetName() public function testGetType() { $expected = 'magento2-functional-test-module'; - $this->assertEquals($expected, self::$composer->getType()); + $this->assertEquals($expected, $this->composer->getType()); } /** @@ -53,7 +51,7 @@ public function testGetType() public function testGetVersion() { $expected = '1.0.0'; - $this->assertEquals($expected, self::$composer->getVersion()); + $this->assertEquals($expected, $this->composer->getVersion()); } /** @@ -62,7 +60,7 @@ public function testGetVersion() public function testGetDescription() { $expected = 'MFTF tests for magento'; - $this->assertEquals($expected, self::$composer->getDescription()); + $this->assertEquals($expected, $this->composer->getDescription()); } /** @@ -71,7 +69,7 @@ public function testGetDescription() public function testGetRequires() { $expected = 'magento/magento2-functional-testing-framework'; - $output = self::$composer->getRequires(); + $output = $this->composer->getRequires(); $this->assertCount(1, $output); $this->assertArrayHasKey($expected, $output); } @@ -82,7 +80,7 @@ public function testGetRequires() public function testGetDevRequires() { $expected = ['phpunit/phpunit']; - $this->assertEquals($expected, array_keys(self::$composer->getDevRequires())); + $this->assertEquals($expected, array_keys($this->composer->getDevRequires())); } /** @@ -99,7 +97,7 @@ public function testGetSuggests() 'magento/module-three', 'magento/module-four' ]; - $this->assertEquals($expected, array_keys(self::$composer->getSuggests())); + $this->assertEquals($expected, array_keys($this->composer->getSuggests())); } /** @@ -112,7 +110,7 @@ public function testGetSuggestedMagentoModules() 'Magento_ModuleY', 'Magento_ModuleZ' ]; - $this->assertEquals($expected, self::$composer->getSuggestedMagentoModules()); + $this->assertEquals($expected, $this->composer->getSuggestedMagentoModules()); } /** @@ -120,7 +118,7 @@ public function testGetSuggestedMagentoModules() */ public function testIsMftfTestPackage() { - $this->assertTrue(self::$composer->isMftfTestPackage()); + $this->assertTrue($this->composer->isMftfTestPackage()); } /** @@ -145,7 +143,7 @@ public function testGetRequiresForPackage() ]; $this->assertEquals( $expected, - array_keys(self::$composer->getRequiresForPackage('magento/magento2-functional-testing-framework', '2.5.0')) + array_keys($this->composer->getRequiresForPackage('magento/magento2-functional-testing-framework', '2.5.0')) ); } @@ -155,7 +153,7 @@ public function testGetRequiresForPackage() public function testIsPackageRequiredInComposerJson() { $this->assertTrue( - self::$composer->isPackageRequiredInComposerJson('magento/magento2-functional-testing-framework') + $this->composer->isPackageRequiredInComposerJson('magento/magento2-functional-testing-framework') ); } @@ -166,7 +164,7 @@ public function testGetRootPackage() { $this->assertInstanceOf( RootPackage::class, - self::$composer->getRootPackage() + $this->composer->getRootPackage() ); } } From 5cfd7cd4ede0d42607fff2f2be50f3c51099ee02 Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Tue, 8 Oct 2019 15:29:51 -0500 Subject: [PATCH 40/48] MQE-1750: unit tests and some code refactor. --- .../FunctionalTestFramework/Util/ModuleResolverTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php index b7c154e34..07e1ee7fa 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php @@ -424,11 +424,11 @@ public function testMergeFlipAndFilterModulePathsNoForceGenerate() } /** - * Validate mergeModulePaths() and flipAndFilterModulePathsArray() + * Validate mergeModulePaths() and flipAndSortModulePathsArray() * * @throws \Exception */ - public function testMergeFlipAndFilterModulePathsForceGenerate() + public function testMergeFlipAndSortModulePathsForceGenerate() { $this->mockForceGenerate(true); $this->setMockResolverClass( From 4f87bf0a10fc8d2a0c06000f5b5fc08a34db1a08 Mon Sep 17 00:00:00 2001 From: "Kristof, Fooman" Date: Fri, 11 Oct 2019 16:49:55 +1300 Subject: [PATCH 41/48] Add details for changing settings via command line --- docs/getting-started.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/getting-started.md b/docs/getting-started.md index 626cca31b..6c05f348b 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -67,6 +67,9 @@ To disable the WYSIWYG and enable the web driver to process these fields as simp 3. In the WYSIWYG Options section set the **Enable WYSIWYG Editor** option to **Disabled Completely**. 4. Click **Save Config**. +or via command line +1. `bin/magento config:set cms/wysiwyg/enabled disabled` +
When you want to test the WYSIWYG functionality, re-enable WYSIWYG in your test suite.
@@ -80,6 +83,10 @@ To enable the **Admin Account Sharing** setting, to avoid unpredictable logout d 3. Set **Add Secret Key to URLs** to **No**. 4. Click **Save Config**. +or via command line +1. `bin/magento config:set admin/security/admin_account_sharing 1` +2. `bin/magento config:set admin/security/use_form_key 0` + ### Nginx settings {#nginx-settings} If Nginx Web server is used on your development environment then **Use Web Server Rewrites** setting in **Stores** > Settings > **Configuration** > **Web** > **Search Engine Optimization** must be set to **Yes**. From a2fba708521549617ff6e417efdd739d2aec4e93 Mon Sep 17 00:00:00 2001 From: Donald Booth Date: Thu, 17 Oct 2019 10:06:53 -0500 Subject: [PATCH 42/48] Formatting --- docs/getting-started.md | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index 6c05f348b..8f024b90d 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -18,6 +18,7 @@ Make sure that you have the following software installed and configured on your
[PhpStorm] supports [Codeception test execution][], which is helpful when debugging.
+ ## Install Magento {#install-magento} Use instructions below to install Magento. @@ -67,14 +68,17 @@ To disable the WYSIWYG and enable the web driver to process these fields as simp 3. In the WYSIWYG Options section set the **Enable WYSIWYG Editor** option to **Disabled Completely**. 4. Click **Save Config**. -or via command line -1. `bin/magento config:set cms/wysiwyg/enabled disabled` +or via command line: + +```bash +bin/magento config:set cms/wysiwyg/enabled disabled +```
When you want to test the WYSIWYG functionality, re-enable WYSIWYG in your test suite.
-### Security settings {#security-settings} +### Security settings {#security-settings} To enable the **Admin Account Sharing** setting, to avoid unpredictable logout during a testing session, and disable the **Add Secret Key in URLs** setting, to open pages using direct URLs: @@ -83,9 +87,15 @@ To enable the **Admin Account Sharing** setting, to avoid unpredictable logout d 3. Set **Add Secret Key to URLs** to **No**. 4. Click **Save Config**. -or via command line -1. `bin/magento config:set admin/security/admin_account_sharing 1` -2. `bin/magento config:set admin/security/use_form_key 0` +or via command line: + +```bash +bin/magento config:set admin/security/admin_account_sharing 1 +``` + +```bash +bin/magento config:set admin/security/use_form_key 0 +``` ### Nginx settings {#nginx-settings} From b3a329a72cb890b86e0d697a1c0bc3f1528ac1ad Mon Sep 17 00:00:00 2001 From: Ji Lu Date: Fri, 18 Oct 2019 11:25:02 -0500 Subject: [PATCH 43/48] MQE-1831: Remove Deprecation warning from Module Resolver --- src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php index 447516075..d776603d1 100644 --- a/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php +++ b/src/Magento/FunctionalTestingFramework/Util/ModuleResolver.php @@ -372,6 +372,7 @@ private function globRelevantPaths($testPath, $pattern) } } + /* TODO uncomment this to show deprecation warning when we ready to fully deliver test packaging feature if (strpos($testPath, self::DEPRECATED_DEV_TESTS) !== false && !empty($modulePaths)) { $deprecatedPath = ltrim(self::DEPRECATED_DEV_TESTS, DIRECTORY_SEPARATOR); $suggestedPath = self::DEV_TESTS . DIRECTORY_SEPARATOR . 'Magento'; @@ -386,7 +387,7 @@ private function globRelevantPaths($testPath, $pattern) print ("\n$message\n\n"); } } - + */ return $modulePaths; } From c17c746536b82452ef98a45e3c624e112b85261b Mon Sep 17 00:00:00 2001 From: Kevin Kozan Date: Mon, 21 Oct 2019 13:33:08 -0500 Subject: [PATCH 44/48] MQE-1650: update MFTF configuration to read Test entities from new location - Reduced requirements of composer.json to 1.4 (magento 2.2) --- composer.json | 2 +- composer.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index f980005c1..a50171dc1 100755 --- a/composer.json +++ b/composer.json @@ -13,7 +13,7 @@ "ext-curl": "*", "allure-framework/allure-codeception": "~1.3.0", "codeception/codeception": "~2.3.4 || ~2.4.0 ", - "composer/composer": "^1.6", + "composer/composer": "^1.4", "consolidation/robo": "^1.0.0", "csharpru/vault-php": "~3.5.3", "csharpru/vault-php-guzzle6-transport": "^2.0", diff --git a/composer.lock b/composer.lock index 275ae9778..416ed077c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "beb8473a3c21b83da864289149fc03b4", + "content-hash": "06a363880f237913287952e19a7a8fd3", "packages": [ { "name": "allure-framework/allure-codeception", @@ -250,7 +250,7 @@ { "name": "Tobias Nyholm", "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/nyholm" + "homepage": "https://github.com/Nyholm" } ], "description": "Library of all the php-cache adapters", From 451430dff1aae64bffe4a28e9cd205fa3550cbe8 Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan Date: Tue, 22 Oct 2019 10:13:27 -0500 Subject: [PATCH 45/48] MQE-1833: CHANGELOG.MD and Composer version bump --- CHANGELOG.md | 19 + bin/mftf | 2 +- composer.json | 2 +- composer.lock | 1699 ++++++++++++++++++++++++++++++------------------- 4 files changed, 1078 insertions(+), 644 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54189d745..e54636819 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ Magento Functional Testing Framework Changelog ================================================ +2.5.2 +----- + +* Traceability + * Added test's filepath to Allure reports for ease of debugging. + +* Modularity + * Refactored problem methods to reduce cyclomatic complexity. + +* Maintainability + * Added support to read MFTF test entities from path of MFTF test packages. + +### Fixes +* Added escaping for `magentoCLI` commands. +* Fixed issue with builds due to absence of AcceptanceTester class. +* Removed path deprecation warning from ModuleResolver. + +### GitHub Issues/Pull requests: +* [#348](https://github.com/magento/magento2-functional-testing-framework/pull/348) -- executeInSelenium command fixed to prevent escaping double quotes. 2.5.1 ----- diff --git a/bin/mftf b/bin/mftf index b978d99ee..355a851c8 100755 --- a/bin/mftf +++ b/bin/mftf @@ -29,7 +29,7 @@ try { try { $application = new Symfony\Component\Console\Application(); $application->setName('Magento Functional Testing Framework CLI'); - $application->setVersion('2.5.1'); + $application->setVersion('2.5.2'); /** @var \Magento\FunctionalTestingFramework\Console\CommandListInterface $commandList */ $commandList = new \Magento\FunctionalTestingFramework\Console\CommandList; foreach ($commandList->getCommands() as $command) { diff --git a/composer.json b/composer.json index a50171dc1..bc2592d97 100755 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "magento/magento2-functional-testing-framework", "description": "Magento2 Functional Testing Framework", "type": "library", - "version": "2.5.1", + "version": "2.5.2", "license": "AGPL-3.0", "keywords": ["magento", "automation", "functional", "testing"], "config": { diff --git a/composer.lock b/composer.lock index 416ed077c..fb8cb2056 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "06a363880f237913287952e19a7a8fd3", + "content-hash": "5d566c152481274493082bdabb128c70", "packages": [ { "name": "allure-framework/allure-codeception", @@ -59,25 +59,26 @@ }, { "name": "allure-framework/allure-php-api", - "version": "1.1.4", + "version": "1.1.5", "source": { "type": "git", - "url": "https://github.com/allure-framework/allure-php-adapter-api.git", - "reference": "a462a0da121681577033e13c123b6cc4e89cdc64" + "url": "https://github.com/allure-framework/allure-php-commons.git", + "reference": "c7a675823ad75b8e02ddc364baae21668e7c4e88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/allure-framework/allure-php-adapter-api/zipball/a462a0da121681577033e13c123b6cc4e89cdc64", - "reference": "a462a0da121681577033e13c123b6cc4e89cdc64", + "url": "https://api.github.com/repos/allure-framework/allure-php-commons/zipball/c7a675823ad75b8e02ddc364baae21668e7c4e88", + "reference": "c7a675823ad75b8e02ddc364baae21668e7c4e88", "shasum": "" }, "require": { - "jms/serializer": ">=0.16.0", - "moontoast/math": ">=1.1.0", + "jms/serializer": "^0.16.0", "php": ">=5.4.0", - "phpunit/phpunit": ">=4.0.0", - "ramsey/uuid": ">=3.0.0", - "symfony/http-foundation": ">=2.0" + "ramsey/uuid": "^3.0.0", + "symfony/http-foundation": "^2.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0.0" }, "type": "library", "autoload": { @@ -107,20 +108,20 @@ "php", "report" ], - "time": "2016-12-07T12:15:46+00:00" + "time": "2018-05-25T14:02:11+00:00" }, { "name": "behat/gherkin", - "version": "v4.4.5", + "version": "v4.6.0", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74" + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/5c14cff4f955b17d20d088dec1bde61c0539ec74", - "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", "shasum": "" }, "require": { @@ -128,8 +129,8 @@ }, "require-dev": { "phpunit/phpunit": "~4.5|~5", - "symfony/phpunit-bridge": "~2.7|~3", - "symfony/yaml": "~2.3|~3" + "symfony/phpunit-bridge": "~2.7|~3|~4", + "symfony/yaml": "~2.3|~3|~4" }, "suggest": { "symfony/yaml": "If you want to parse features, represented in YAML files" @@ -166,7 +167,7 @@ "gherkin", "parser" ], - "time": "2016-10-30T11:50:56+00:00" + "time": "2019-01-16T14:22:17+00:00" }, { "name": "cache/cache", @@ -250,7 +251,7 @@ { "name": "Tobias Nyholm", "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" + "homepage": "https://github.com/nyholm" } ], "description": "Library of all the php-cache adapters", @@ -263,31 +264,28 @@ }, { "name": "codeception/codeception", - "version": "2.3.9", + "version": "2.4.5", "source": { "type": "git", "url": "https://github.com/Codeception/Codeception.git", - "reference": "104f46fa0bde339f1bcc3a375aac21eb36e65a1e" + "reference": "5fee32d5c82791548931cbc34806b4de6aa1abfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/104f46fa0bde339f1bcc3a375aac21eb36e65a1e", - "reference": "104f46fa0bde339f1bcc3a375aac21eb36e65a1e", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/5fee32d5c82791548931cbc34806b4de6aa1abfc", + "reference": "5fee32d5c82791548931cbc34806b4de6aa1abfc", "shasum": "" }, "require": { - "behat/gherkin": "~4.4.0", - "codeception/stub": "^1.0", + "behat/gherkin": "^4.4.0", + "codeception/phpunit-wrapper": "^6.0.9|^7.0.6", + "codeception/stub": "^2.0", "ext-json": "*", "ext-mbstring": "*", "facebook/webdriver": ">=1.1.3 <2.0", "guzzlehttp/guzzle": ">=4.1.4 <7.0", "guzzlehttp/psr7": "~1.0", - "php": ">=5.4.0 <8.0", - "phpunit/php-code-coverage": ">=2.2.4 <6.0", - "phpunit/phpunit": ">=4.8.28 <5.0.0 || >=5.6.3 <7.0", - "sebastian/comparator": ">1.1 <3.0", - "sebastian/diff": ">=1.4 <3.0", + "php": ">=5.6.0 <8.0", "symfony/browser-kit": ">=2.7 <5.0", "symfony/console": ">=2.7 <5.0", "symfony/css-selector": ">=2.7 <5.0", @@ -353,26 +351,66 @@ "functional testing", "unit testing" ], - "time": "2018-02-26T23:29:41+00:00" + "time": "2018-08-01T07:21:49+00:00" }, { - "name": "codeception/stub", - "version": "1.0.4", + "name": "codeception/phpunit-wrapper", + "version": "7.0.6", "source": { "type": "git", - "url": "https://github.com/Codeception/Stub.git", - "reference": "681b62348837a5ef07d10d8a226f5bc358cc8805" + "url": "https://github.com/Codeception/phpunit-wrapper.git", + "reference": "e8528cb777cf5a5ccea1cf57a3522b142625d1b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Stub/zipball/681b62348837a5ef07d10d8a226f5bc358cc8805", - "reference": "681b62348837a5ef07d10d8a226f5bc358cc8805", + "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/e8528cb777cf5a5ccea1cf57a3522b142625d1b5", + "reference": "e8528cb777cf5a5ccea1cf57a3522b142625d1b5", "shasum": "" }, "require": { - "phpunit/phpunit-mock-objects": ">2.3 <7.0" + "phpunit/php-code-coverage": "^6.0", + "phpunit/phpunit": "^7.0", + "sebastian/comparator": "^2.0", + "sebastian/diff": "^3.0" }, "require-dev": { + "codeception/specify": "*", + "vlucas/phpdotenv": "^2.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\PHPUnit\\": "src\\" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "description": "PHPUnit classes used by Codeception", + "time": "2018-03-31T18:49:51+00:00" + }, + { + "name": "codeception/stub", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Stub.git", + "reference": "f50bc271f392a2836ff80690ce0c058efe1ae03e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/f50bc271f392a2836ff80690ce0c058efe1ae03e", + "reference": "f50bc271f392a2836ff80690ce0c058efe1ae03e", + "shasum": "" + }, + "require": { "phpunit/phpunit": ">=4.8 <8.0" }, "type": "library", @@ -386,7 +424,7 @@ "MIT" ], "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", - "time": "2018-05-17T09:31:08+00:00" + "time": "2018-07-26T11:55:37+00:00" }, { "name": "composer/ca-bundle", @@ -692,34 +730,78 @@ }, { "name": "consolidation/annotated-command", - "version": "2.9.1", + "version": "2.12.0", "source": { "type": "git", "url": "https://github.com/consolidation/annotated-command.git", - "reference": "4bdbb8fa149e1cc1511bd77b0bc4729fd66bccac" + "reference": "512a2e54c98f3af377589de76c43b24652bcb789" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/4bdbb8fa149e1cc1511bd77b0bc4729fd66bccac", - "reference": "4bdbb8fa149e1cc1511bd77b0bc4729fd66bccac", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/512a2e54c98f3af377589de76c43b24652bcb789", + "reference": "512a2e54c98f3af377589de76c43b24652bcb789", "shasum": "" }, "require": { - "consolidation/output-formatters": "^3.1.12", - "php": ">=5.4.0", + "consolidation/output-formatters": "^3.4", + "php": ">=5.4.5", "psr/log": "^1", "symfony/console": "^2.8|^3|^4", "symfony/event-dispatcher": "^2.5|^3|^4", "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "g1a/composer-test-scenarios": "^2", + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", "phpunit/phpunit": "^6", - "satooshi/php-coveralls": "^2", "squizlabs/php_codesniffer": "^2.7" }, "type": "library", "extra": { + "scenarios": { + "symfony4": { + "require": { + "symfony/console": "^4.0" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + }, + "scenario-options": { + "create-lockfile": "false" + } + }, + "phpunit4": { + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + } + } + }, "branch-alias": { "dev-master": "2.x-dev" } @@ -740,20 +822,20 @@ } ], "description": "Initialize Symfony Console commands from annotated command class methods.", - "time": "2018-09-19T17:47:18+00:00" + "time": "2019-03-08T16:55:03+00:00" }, { "name": "consolidation/config", - "version": "1.1.1", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/consolidation/config.git", - "reference": "925231dfff32f05b787e1fddb265e789b939cf4c" + "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/config/zipball/925231dfff32f05b787e1fddb265e789b939cf4c", - "reference": "925231dfff32f05b787e1fddb265e789b939cf4c", + "url": "https://api.github.com/repos/consolidation/config/zipball/cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1", + "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1", "shasum": "" }, "require": { @@ -762,9 +844,9 @@ "php": ">=5.4.0" }, "require-dev": { - "g1a/composer-test-scenarios": "^1", + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", "phpunit/phpunit": "^5", - "satooshi/php-coveralls": "^1.0", "squizlabs/php_codesniffer": "2.*", "symfony/console": "^2.5|^3|^4", "symfony/yaml": "^2.8.11|^3|^4" @@ -774,6 +856,33 @@ }, "type": "library", "extra": { + "scenarios": { + "symfony4": { + "require-dev": { + "symfony/console": "^4.0" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require-dev": { + "symfony/console": "^2.8", + "symfony/event-dispatcher": "^2.8", + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + } + } + }, "branch-alias": { "dev-master": "1.x-dev" } @@ -794,35 +903,76 @@ } ], "description": "Provide configuration services for a commandline tool.", - "time": "2018-10-24T17:55:35+00:00" + "time": "2019-03-03T19:37:04+00:00" }, { "name": "consolidation/log", - "version": "1.0.6", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/consolidation/log.git", - "reference": "dfd8189a771fe047bf3cd669111b2de5f1c79395" + "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/log/zipball/dfd8189a771fe047bf3cd669111b2de5f1c79395", - "reference": "dfd8189a771fe047bf3cd669111b2de5f1c79395", + "url": "https://api.github.com/repos/consolidation/log/zipball/b2e887325ee90abc96b0a8b7b474cd9e7c896e3a", + "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a", "shasum": "" }, "require": { - "php": ">=5.5.0", - "psr/log": "~1.0", + "php": ">=5.4.5", + "psr/log": "^1.0", "symfony/console": "^2.8|^3|^4" }, "require-dev": { - "g1a/composer-test-scenarios": "^1", - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^2", - "squizlabs/php_codesniffer": "2.*" + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", + "phpunit/phpunit": "^6", + "squizlabs/php_codesniffer": "^2" }, "type": "library", "extra": { + "scenarios": { + "symfony4": { + "require": { + "symfony/console": "^4.0" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + } + }, + "phpunit4": { + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + } + } + }, "branch-alias": { "dev-master": "1.x-dev" } @@ -843,20 +993,20 @@ } ], "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.", - "time": "2018-05-25T18:14:39+00:00" + "time": "2019-01-01T17:30:51+00:00" }, { "name": "consolidation/output-formatters", - "version": "3.4.0", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/consolidation/output-formatters.git", - "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19" + "reference": "99ec998ffb697e0eada5aacf81feebfb13023605" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19", - "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/99ec998ffb697e0eada5aacf81feebfb13023605", + "reference": "99ec998ffb697e0eada5aacf81feebfb13023605", "shasum": "" }, "require": { @@ -866,11 +1016,10 @@ "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "g1a/composer-test-scenarios": "^2", + "g1a/composer-test-scenarios": "^3", + "php-coveralls/php-coveralls": "^1", "phpunit/phpunit": "^5.7.27", - "satooshi/php-coveralls": "^2", "squizlabs/php_codesniffer": "^2.7", - "symfony/console": "3.2.3", "symfony/var-dumper": "^2.8|^3|^4", "victorjonsson/markdowndocs": "^1.3" }, @@ -879,6 +1028,52 @@ }, "type": "library", "extra": { + "scenarios": { + "symfony4": { + "require": { + "symfony/console": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^6" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony3": { + "require": { + "symfony/console": "^3.4", + "symfony/finder": "^3.4", + "symfony/var-dumper": "^3.4" + }, + "config": { + "platform": { + "php": "5.6.32" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36" + }, + "remove": [ + "php-coveralls/php-coveralls" + ], + "config": { + "platform": { + "php": "5.4.8" + } + }, + "scenario-options": { + "create-lockfile": "false" + } + } + }, "branch-alias": { "dev-master": "3.x-dev" } @@ -899,29 +1094,28 @@ } ], "description": "Format text by applying transformations provided by plug-in formatters.", - "time": "2018-10-19T22:35:38+00:00" + "time": "2019-05-30T23:16:01+00:00" }, { "name": "consolidation/robo", - "version": "1.3.1", + "version": "1.4.10", "source": { "type": "git", "url": "https://github.com/consolidation/Robo.git", - "reference": "31f2d2562c4e1dcde70f2659eefd59aa9c7f5b2d" + "reference": "e5a6ca64cf1324151873672e484aceb21f365681" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/Robo/zipball/31f2d2562c4e1dcde70f2659eefd59aa9c7f5b2d", - "reference": "31f2d2562c4e1dcde70f2659eefd59aa9c7f5b2d", + "url": "https://api.github.com/repos/consolidation/Robo/zipball/e5a6ca64cf1324151873672e484aceb21f365681", + "reference": "e5a6ca64cf1324151873672e484aceb21f365681", "shasum": "" }, "require": { - "consolidation/annotated-command": "^2.8.2", - "consolidation/config": "^1.0.10", + "consolidation/annotated-command": "^2.10.2", + "consolidation/config": "^1.2", "consolidation/log": "~1", "consolidation/output-formatters": "^3.1.13", "consolidation/self-update": "^1", - "g1a/composer-test-scenarios": "^2", "grasmash/yaml-expander": "^1.3", "league/container": "^2.2", "php": ">=5.5.0", @@ -938,14 +1132,15 @@ "codeception/aspect-mock": "^1|^2.1.1", "codeception/base": "^2.3.7", "codeception/verify": "^0.3.2", + "g1a/composer-test-scenarios": "^3", "goaop/framework": "~2.1.2", "goaop/parser-reflection": "^1.1.0", "natxet/cssmin": "3.0.4", "nikic/php-parser": "^3.1.5", "patchwork/jsqueeze": "~2", - "pear/archive_tar": "^1.4.2", + "pear/archive_tar": "^1.4.4", + "php-coveralls/php-coveralls": "^1", "phpunit/php-code-coverage": "~2|~4", - "satooshi/php-coveralls": "^2", "squizlabs/php_codesniffer": "^2.8" }, "suggest": { @@ -959,9 +1154,36 @@ ], "type": "library", "extra": { + "scenarios": { + "symfony4": { + "require": { + "symfony/console": "^4" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "remove": [ + "goaop/framework" + ], + "config": { + "platform": { + "php": "5.5.9" + } + }, + "scenario-options": { + "create-lockfile": "false" + } + } + }, "branch-alias": { - "dev-master": "1.x-dev", - "dev-state": "1.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -980,7 +1202,7 @@ } ], "description": "Modern task runner", - "time": "2018-08-17T18:44:18+00:00" + "time": "2019-07-29T15:40:50+00:00" }, { "name": "consolidation/self-update", @@ -1210,30 +1432,30 @@ }, { "name": "doctrine/annotations", - "version": "v1.4.0", + "version": "v1.8.0", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "54cacc9b81758b14e3ce750f205a393d52339e97" + "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97", - "reference": "54cacc9b81758b14e3ce750f205a393d52339e97", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/904dca4eb10715b92569fbcd79e201d5c349b6bc", + "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc", "shasum": "" }, "require": { "doctrine/lexer": "1.*", - "php": "^5.6 || ^7.0" + "php": "^7.1" }, "require-dev": { "doctrine/cache": "1.*", - "phpunit/phpunit": "^5.7" + "phpunit/phpunit": "^7.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "1.7.x-dev" } }, "autoload": { @@ -1246,6 +1468,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -1254,10 +1480,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -1274,7 +1496,7 @@ "docblock", "parser" ], - "time": "2017-02-24T16:22:25+00:00" + "time": "2019-10-01T18:55:10+00:00" }, { "name": "doctrine/cache", @@ -1415,32 +1637,34 @@ }, { "name": "doctrine/instantiator", - "version": "1.0.5", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "reference": "a2c590166b2133a4633738648b6b064edae0814a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", + "reference": "a2c590166b2133a4633738648b6b064edae0814a", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.1" }, "require-dev": { - "athletic/athletic": "~0.1.8", + "doctrine/coding-standard": "^6.0", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -1460,12 +1684,12 @@ } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "time": "2019-03-17T17:37:11+00:00" }, { "name": "doctrine/lexer", @@ -1529,16 +1753,16 @@ }, { "name": "facebook/webdriver", - "version": "1.6.0", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/facebook/php-webdriver.git", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e" + "reference": "e43de70f3c7166169d0f14a374505392734160e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/bd8c740097eb9f2fc3735250fc1912bc811a954e", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e", + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/e43de70f3c7166169d0f14a374505392734160e5", + "reference": "e43de70f3c7166169d0f14a374505392734160e5", "shasum": "" }, "require": { @@ -1585,7 +1809,7 @@ "selenium", "webdriver" ], - "time": "2018-05-16T17:37:13+00:00" + "time": "2019-06-13T08:02:18+00:00" }, { "name": "flow/jsonpath", @@ -1678,39 +1902,6 @@ ], "time": "2018-07-12T10:23:15+00:00" }, - { - "name": "g1a/composer-test-scenarios", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/g1a/composer-test-scenarios.git", - "reference": "a166fd15191aceab89f30c097e694b7cf3db4880" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/a166fd15191aceab89f30c097e694b7cf3db4880", - "reference": "a166fd15191aceab89f30c097e694b7cf3db4880", - "shasum": "" - }, - "bin": [ - "scripts/create-scenario", - "scripts/dependency-licenses", - "scripts/install-scenario" - ], - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Greg Anderson", - "email": "greg.1.anderson@greenknowe.org" - } - ], - "description": "Useful scripts for testing multiple sets of Composer dependencies.", - "time": "2018-08-08T23:37:23+00:00" - }, { "name": "grasmash/expander", "version": "1.0.0", @@ -1924,32 +2115,37 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.4.2", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", "shasum": "" }, "require": { "php": ">=5.4.0", - "psr/http-message": "~1.0" + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -1979,13 +2175,56 @@ "keywords": [ "http", "message", + "psr-7", "request", "response", "stream", "uri", "url" ], - "time": "2017-03-20T17:10:46+00:00" + "time": "2019-07-01T23:21:34+00:00" + }, + { + "name": "ircmaxell/password-compat", + "version": "v1.0.4", + "source": { + "type": "git", + "url": "https://github.com/ircmaxell/password_compat.git", + "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c", + "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "autoload": { + "files": [ + "lib/password.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anthony Ferrara", + "email": "ircmaxell@php.net", + "homepage": "http://blog.ircmaxell.com" + } + ], + "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash", + "homepage": "https://github.com/ircmaxell/password_compat", + "keywords": [ + "hashing", + "password" + ], + "time": "2014-11-20T16:49:30+00:00" }, { "name": "jms/metadata", @@ -2079,56 +2318,44 @@ }, { "name": "jms/serializer", - "version": "1.14.0", + "version": "0.16.0", "source": { "type": "git", "url": "https://github.com/schmittjoh/serializer.git", - "reference": "ee96d57024af9a7716d56fcbe3aa94b3d030f3ca" + "reference": "c8a171357ca92b6706e395c757f334902d430ea9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/ee96d57024af9a7716d56fcbe3aa94b3d030f3ca", - "reference": "ee96d57024af9a7716d56fcbe3aa94b3d030f3ca", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/c8a171357ca92b6706e395c757f334902d430ea9", + "reference": "c8a171357ca92b6706e395c757f334902d430ea9", "shasum": "" }, "require": { - "doctrine/annotations": "^1.0", - "doctrine/instantiator": "^1.0.3", - "jms/metadata": "^1.3", + "doctrine/annotations": "1.*", + "jms/metadata": "~1.1", "jms/parser-lib": "1.*", - "php": "^5.5|^7.0", - "phpcollection/phpcollection": "~0.1", - "phpoption/phpoption": "^1.1" - }, - "conflict": { - "twig/twig": "<1.12" + "php": ">=5.3.2", + "phpcollection/phpcollection": "~0.1" }, "require-dev": { "doctrine/orm": "~2.1", - "doctrine/phpcr-odm": "^1.3|^2.0", - "ext-pdo_sqlite": "*", - "jackalope/jackalope-doctrine-dbal": "^1.1.5", - "phpunit/phpunit": "^4.8|^5.0", + "doctrine/phpcr-odm": "~1.0.1", + "jackalope/jackalope-doctrine-dbal": "1.0.*", "propel/propel1": "~1.7", - "psr/container": "^1.0", - "symfony/dependency-injection": "^2.7|^3.3|^4.0", - "symfony/expression-language": "^2.6|^3.0", - "symfony/filesystem": "^2.1", - "symfony/form": "~2.1|^3.0", - "symfony/translation": "^2.1|^3.0", - "symfony/validator": "^2.2|^3.0", - "symfony/yaml": "^2.1|^3.0", - "twig/twig": "~1.12|~2.0" + "symfony/filesystem": "2.*", + "symfony/form": "~2.1", + "symfony/translation": "~2.0", + "symfony/validator": "~2.0", + "symfony/yaml": "2.*", + "twig/twig": ">=1.8,<2.0-dev" }, "suggest": { - "doctrine/cache": "Required if you like to use cache functionality.", - "doctrine/collections": "Required if you like to use doctrine collection types as ArrayCollection.", "symfony/yaml": "Required if you'd like to serialize data to YAML format." }, "type": "library", "extra": { "branch-alias": { - "dev-1.x": "1.14-dev" + "dev-master": "0.15-dev" } }, "autoload": { @@ -2138,16 +2365,14 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "Apache2" ], "authors": [ { - "name": "Asmir Mustafic", - "email": "goetas@gmail.com" - }, - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com" + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" } ], "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.", @@ -2159,27 +2384,27 @@ "serialization", "xml" ], - "time": "2019-04-17T08:12:16+00:00" + "time": "2014-03-18T08:39:00+00:00" }, { "name": "justinrainbow/json-schema", - "version": "5.2.8", + "version": "5.2.9", "source": { "type": "git", "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4" + "reference": "44c6787311242a979fa15c704327c20e7221a0e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/dcb6e1006bb5fd1e392b4daa68932880f37550d4", - "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/44c6787311242a979fa15c704327c20e7221a0e4", + "reference": "44c6787311242a979fa15c704327c20e7221a0e4", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20", + "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", "json-schema/json-schema-test-suite": "1.2.0", "phpunit/phpunit": "^4.8.35" }, @@ -2225,7 +2450,7 @@ "json", "schema" ], - "time": "2019-01-14T23:55:14+00:00" + "time": "2019-09-25T14:49:45+00:00" }, { "name": "league/container", @@ -2294,16 +2519,16 @@ }, { "name": "league/flysystem", - "version": "1.0.53", + "version": "1.0.57", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "08e12b7628f035600634a5e76d95b5eb66cea674" + "reference": "0e9db7f0b96b9f12dcf6f65bc34b72b1a30ea55a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/08e12b7628f035600634a5e76d95b5eb66cea674", - "reference": "08e12b7628f035600634a5e76d95b5eb66cea674", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/0e9db7f0b96b9f12dcf6f65bc34b72b1a30ea55a", + "reference": "0e9db7f0b96b9f12dcf6f65bc34b72b1a30ea55a", "shasum": "" }, "require": { @@ -2374,20 +2599,20 @@ "sftp", "storage" ], - "time": "2019-06-18T20:09:29+00:00" + "time": "2019-10-16T21:01:05+00:00" }, { "name": "monolog/monolog", - "version": "1.24.0", + "version": "1.25.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266" + "reference": "70e65a5470a42cfec1a7da00d30edb6e617e8dcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", - "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/70e65a5470a42cfec1a7da00d30edb6e617e8dcf", + "reference": "70e65a5470a42cfec1a7da00d30edb6e617e8dcf", "shasum": "" }, "require": { @@ -2452,56 +2677,7 @@ "logging", "psr-3" ], - "time": "2018-11-05T09:00:11+00:00" - }, - { - "name": "moontoast/math", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/ramsey/moontoast-math.git", - "reference": "c2792a25df5cad4ff3d760dd37078fc5b6fccc79" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/moontoast-math/zipball/c2792a25df5cad4ff3d760dd37078fc5b6fccc79", - "reference": "c2792a25df5cad4ff3d760dd37078fc5b6fccc79", - "shasum": "" - }, - "require": { - "ext-bcmath": "*", - "php": ">=5.3.3" - }, - "require-dev": { - "jakub-onderka/php-parallel-lint": "^0.9.0", - "phpunit/phpunit": "^4.7|>=5.0 <5.4", - "satooshi/php-coveralls": "^0.6.1", - "squizlabs/php_codesniffer": "^2.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Moontoast\\Math\\": "src/Moontoast/Math/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "A mathematics library, providing functionality for large numbers", - "homepage": "https://github.com/ramsey/moontoast-math", - "keywords": [ - "bcmath", - "math" - ], - "time": "2017-02-16T16:54:46+00:00" + "time": "2019-09-06T13:49:17+00:00" }, { "name": "mustache/mustache", @@ -2551,25 +2727,28 @@ }, { "name": "myclabs/deep-copy", - "version": "1.7.0", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea", + "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", - "phpunit/phpunit": "^4.1" + "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { @@ -2592,7 +2771,7 @@ "object", "object graph" ], - "time": "2017-10-19T19:58:43+00:00" + "time": "2019-08-09T12:45:53+00:00" }, { "name": "paragonie/random_compat", @@ -2791,35 +2970,33 @@ }, { "name": "phpdocumentor/reflection-common", - "version": "1.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", + "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", "shasum": "" }, "require": { - "php": ">=5.5" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^4.6" + "phpunit/phpunit": "~6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] + "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2841,30 +3018,30 @@ "reflection", "static analysis" ], - "time": "2017-09-11T18:02:19+00:00" + "time": "2018-08-07T13:53:10+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.0", + "version": "4.3.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08" + "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/b83ff7cfcfee7827e1e78b637a5904fe6a96698e", + "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e", "shasum": "" }, "require": { "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", + "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", + "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", "webmozart/assert": "^1.0" }, "require-dev": { - "doctrine/instantiator": "~1.0.5", + "doctrine/instantiator": "^1.0.5", "mockery/mockery": "^1.0", "phpunit/phpunit": "^6.4" }, @@ -2892,41 +3069,40 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-30T07:14:17+00:00" + "time": "2019-09-12T14:27:41+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "0.4.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" + "php": "^7.1", + "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "ext-tokenizer": "^7.1", + "mockery/mockery": "~1", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2939,7 +3115,8 @@ "email": "me@mikevanriel.com" } ], - "time": "2017-07-14T14:27:02+00:00" + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "time": "2019-08-22T18:11:29+00:00" }, { "name": "phpoption/phpoption", @@ -2993,22 +3170,22 @@ }, { "name": "phpspec/prophecy", - "version": "1.8.0", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" + "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/f6811d96d97bdf400077a0cc100ae56aa32b9203", + "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", "sebastian/comparator": "^1.1|^2.0|^3.0", "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, @@ -3023,8 +3200,8 @@ } }, "autoload": { - "psr-0": { - "Prophecy\\": "src/" + "psr-4": { + "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", @@ -3052,44 +3229,44 @@ "spy", "stub" ], - "time": "2018-08-05T17:53:17+00:00" + "time": "2019-10-03T11:07:50+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "5.3.2", + "version": "6.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac" + "reference": "4cab20a326d14de7575a8e235c70d879b569a57a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4cab20a326d14de7575a8e235c70d879b569a57a", + "reference": "4cab20a326d14de7575a8e235c70d879b569a57a", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", - "php": "^7.0", + "php": "^7.1", "phpunit/php-file-iterator": "^1.4.2", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^2.0.1", + "phpunit/php-token-stream": "^3.0", "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.0", + "sebastian/environment": "^3.1", "sebastian/version": "^2.0.1", "theseer/tokenizer": "^1.1" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^7.0" }, "suggest": { - "ext-xdebug": "^2.5.5" + "ext-xdebug": "^2.6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.3.x-dev" + "dev-master": "6.0-dev" } }, "autoload": { @@ -3115,7 +3292,7 @@ "testing", "xunit" ], - "time": "2018-04-06T15:36:58+00:00" + "time": "2018-05-28T11:49:20+00:00" }, { "name": "phpunit/php-file-iterator", @@ -3207,28 +3384,28 @@ }, { "name": "phpunit/php-timer", - "version": "1.0.9", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -3243,7 +3420,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -3252,33 +3429,33 @@ "keywords": [ "timer" ], - "time": "2017-02-26T11:10:40+00:00" + "time": "2019-06-07T04:22:29+00:00" }, { "name": "phpunit/php-token-stream", - "version": "2.0.2", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "791198a2c6254db10131eecfe8c06670700904db" + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", - "reference": "791198a2c6254db10131eecfe8c06670700904db", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": "^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^6.2.4" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -3301,20 +3478,20 @@ "keywords": [ "tokenizer" ], - "time": "2017-11-27T05:48:46+00:00" + "time": "2019-09-17T06:23:10+00:00" }, { "name": "phpunit/phpunit", - "version": "6.5.13", + "version": "7.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "0973426fb012359b2f18d3bd1e90ef1172839693" + "reference": "536f4d853c12d8189963435088e8ff7c0daeab2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0973426fb012359b2f18d3bd1e90ef1172839693", - "reference": "0973426fb012359b2f18d3bd1e90ef1172839693", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/536f4d853c12d8189963435088e8ff7c0daeab2e", + "reference": "536f4d853c12d8189963435088e8ff7c0daeab2e", "shasum": "" }, "require": { @@ -3326,15 +3503,15 @@ "myclabs/deep-copy": "^1.6.1", "phar-io/manifest": "^1.0.1", "phar-io/version": "^1.0", - "php": "^7.0", + "php": "^7.1", "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^5.3", + "phpunit/php-code-coverage": "^6.0.1", "phpunit/php-file-iterator": "^1.4.3", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^1.0.9", - "phpunit/phpunit-mock-objects": "^5.0.9", + "phpunit/php-timer": "^2.0", + "phpunit/phpunit-mock-objects": "^6.0", "sebastian/comparator": "^2.1", - "sebastian/diff": "^2.0", + "sebastian/diff": "^3.0", "sebastian/environment": "^3.1", "sebastian/exporter": "^3.1", "sebastian/global-state": "^2.0", @@ -3342,16 +3519,12 @@ "sebastian/resource-operations": "^1.0", "sebastian/version": "^2.0.1" }, - "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2", - "phpunit/dbunit": "<3.0" - }, "require-dev": { "ext-pdo": "*" }, "suggest": { "ext-xdebug": "*", - "phpunit/php-invoker": "^1.1" + "phpunit/php-invoker": "^2.0" }, "bin": [ "phpunit" @@ -3359,7 +3532,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.5.x-dev" + "dev-master": "7.0-dev" } }, "autoload": { @@ -3385,33 +3558,30 @@ "testing", "xunit" ], - "time": "2018-09-08T15:10:43+00:00" + "time": "2018-03-26T07:36:48+00:00" }, { "name": "phpunit/phpunit-mock-objects", - "version": "5.0.10", + "version": "6.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f" + "reference": "f9756fd4f43f014cb2dca98deeaaa8ce5500a36e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f", - "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/f9756fd4f43f014cb2dca98deeaaa8ce5500a36e", + "reference": "f9756fd4f43f014cb2dca98deeaaa8ce5500a36e", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.5", - "php": "^7.0", + "php": "^7.1", "phpunit/php-text-template": "^1.2.1", "sebastian/exporter": "^3.1" }, - "conflict": { - "phpunit/phpunit": "<6.0" - }, "require-dev": { - "phpunit/phpunit": "^6.5.11" + "phpunit/phpunit": "^7.0" }, "suggest": { "ext-soap": "*" @@ -3419,7 +3589,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0.x-dev" + "dev-master": "6.1-dev" } }, "autoload": { @@ -3445,7 +3615,7 @@ "xunit" ], "abandoned": true, - "time": "2018-08-09T05:50:03+00:00" + "time": "2018-05-29T13:54:20+00:00" }, { "name": "psr/cache", @@ -3594,16 +3764,16 @@ }, { "name": "psr/log", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", "shasum": "" }, "require": { @@ -3637,7 +3807,7 @@ "psr", "psr-3" ], - "time": "2016-10-10T12:19:37+00:00" + "time": "2018-11-20T15:27:04+00:00" }, { "name": "psr/simple-cache", @@ -3687,6 +3857,46 @@ ], "time": "2017-10-23T01:57:42+00:00" }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2019-03-08T08:55:37+00:00" + }, { "name": "ramsey/uuid", "version": "3.8.0", @@ -3880,28 +4090,29 @@ }, { "name": "sebastian/diff", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -3926,9 +4137,12 @@ "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "diff" + "diff", + "udiff", + "unidiff", + "unified diff" ], - "time": "2017-08-03T08:09:46+00:00" + "time": "2019-02-04T06:01:07+00:00" }, { "name": "sebastian/environment", @@ -3982,16 +4196,16 @@ }, { "name": "sebastian/exporter", - "version": "3.1.0", + "version": "3.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", "shasum": "" }, "require": { @@ -4018,6 +4232,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -4026,17 +4244,13 @@ "name": "Volker Dusch", "email": "github@wallbash.com" }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, { "name": "Adam Harvey", "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], "description": "Provides the functionality to export PHP variables for visualization", @@ -4045,7 +4259,7 @@ "export", "exporter" ], - "time": "2017-04-03T13:19:02+00:00" + "time": "2019-09-14T09:02:43+00:00" }, { "name": "sebastian/global-state", @@ -4423,25 +4637,27 @@ }, { "name": "symfony/browser-kit", - "version": "v3.4.18", + "version": "v4.3.5", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "f6668d1a6182d5a8dec65a1c863a4c1d963816c0" + "reference": "78b7611c45039e8ce81698be319851529bf040b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/f6668d1a6182d5a8dec65a1c863a4c1d963816c0", - "reference": "f6668d1a6182d5a8dec65a1c863a4c1d963816c0", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/78b7611c45039e8ce81698be319851529bf040b1", + "reference": "78b7611c45039e8ce81698be319851529bf040b1", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/dom-crawler": "~2.8|~3.0|~4.0" + "php": "^7.1.3", + "symfony/dom-crawler": "~3.4|~4.0" }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0|~4.0", - "symfony/process": "~2.8|~3.0|~4.0" + "symfony/css-selector": "~3.4|~4.0", + "symfony/http-client": "^4.3", + "symfony/mime": "^4.3", + "symfony/process": "~3.4|~4.0" }, "suggest": { "symfony/process": "" @@ -4449,7 +4665,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -4476,41 +4692,47 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2018-07-26T09:06:28+00:00" + "time": "2019-09-10T11:25:17+00:00" }, { "name": "symfony/console", - "version": "v3.4.18", + "version": "v4.3.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "1d228fb4602047d7b26a0554e0d3efd567da5803" + "reference": "929ddf360d401b958f611d44e726094ab46a7369" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/1d228fb4602047d7b26a0554e0d3efd567da5803", - "reference": "1d228fb4602047d7b26a0554e0d3efd567da5803", + "url": "https://api.github.com/repos/symfony/console/zipball/929ddf360d401b958f611d44e726094ab46a7369", + "reference": "929ddf360d401b958f611d44e726094ab46a7369", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/service-contracts": "^1.1" }, "conflict": { "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3", "symfony/process": "<3.3" }, + "provide": { + "psr/log-implementation": "1.0" + }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", + "symfony/config": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/event-dispatcher": "^4.3", "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.0" + "symfony/process": "~3.4|~4.0", + "symfony/var-dumper": "^4.3" }, "suggest": { - "psr/log-implementation": "For using the console logger", + "psr/log": "For using the console logger", "symfony/event-dispatcher": "", "symfony/lock": "", "symfony/process": "" @@ -4518,7 +4740,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -4545,29 +4767,29 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-10-30T16:50:50+00:00" + "time": "2019-10-07T12:36:49+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.18", + "version": "v4.3.5", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "3503415d4aafabc31cd08c3a4ebac7f43fde8feb" + "reference": "f4b3ff6a549d9ed28b2b0ecd1781bf67cf220ee9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/3503415d4aafabc31cd08c3a4ebac7f43fde8feb", - "reference": "3503415d4aafabc31cd08c3a4ebac7f43fde8feb", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/f4b3ff6a549d9ed28b2b0ecd1781bf67cf220ee9", + "reference": "f4b3ff6a549d9ed28b2b0ecd1781bf67cf220ee9", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -4583,14 +4805,14 @@ "MIT" ], "authors": [ - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" @@ -4598,41 +4820,46 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2018-10-02T16:33:53+00:00" + "time": "2019-10-02T08:36:26+00:00" }, { - "name": "symfony/debug", - "version": "v3.4.18", + "name": "symfony/dom-crawler", + "version": "v4.3.5", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "fe9793af008b651c5441bdeab21ede8172dab097" + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "e9f7b4d19d69b133bd638eeddcdc757723b4211f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/fe9793af008b651c5441bdeab21ede8172dab097", - "reference": "fe9793af008b651c5441bdeab21ede8172dab097", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/e9f7b4d19d69b133bd638eeddcdc757723b4211f", + "reference": "e9f7b4d19d69b133bd638eeddcdc757723b4211f", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/log": "~1.0" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + "masterminds/html5": "<2.6" }, "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" + "masterminds/html5": "^2.6", + "symfony/css-selector": "~3.4|~4.0" + }, + "suggest": { + "symfony/css-selector": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Debug\\": "" + "Symfony\\Component\\DomCrawler\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -4652,44 +4879,57 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Debug Component", + "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2018-10-31T09:06:03+00:00" + "time": "2019-09-28T21:25:05+00:00" }, { - "name": "symfony/dom-crawler", - "version": "v3.4.18", + "name": "symfony/event-dispatcher", + "version": "v4.3.5", "source": { "type": "git", - "url": "https://github.com/symfony/dom-crawler.git", - "reference": "c705bee03ade5b47c087807dd9ffaaec8dda2722" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "6229f58993e5a157f6096fc7145c0717d0be8807" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/c705bee03ade5b47c087807dd9ffaaec8dda2722", - "reference": "c705bee03ade5b47c087807dd9ffaaec8dda2722", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/6229f58993e5a157f6096fc7145c0717d0be8807", + "reference": "6229f58993e5a157f6096fc7145c0717d0be8807", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0|~4.0" + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "^3.4|^4.0", + "symfony/service-contracts": "^1.1", + "symfony/stopwatch": "~3.4|~4.0" }, "suggest": { - "symfony/css-selector": "" + "symfony/dependency-injection": "", + "symfony/http-kernel": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\DomCrawler\\": "" + "Symfony\\Component\\EventDispatcher\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -4709,54 +4949,41 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony DomCrawler Component", + "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2018-10-02T12:28:39+00:00" + "time": "2019-10-01T16:40:32+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v3.4.18", + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.7", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "db9e829c8f34c3d35cf37fcd4cdb4293bc4a2f14" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/db9e829c8f34c3d35cf37fcd4cdb4293bc4a2f14", - "reference": "db9e829c8f34c3d35cf37fcd4cdb4293bc4a2f14", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c43ab685673fb6c8d84220c77897b1d6cdbe1d18", + "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" - }, - "conflict": { - "symfony/dependency-injection": "<3.3" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", - "symfony/stopwatch": "~2.8|~3.0|~4.0" + "php": "^7.1.3" }, "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "1.1-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Contracts\\EventDispatcher\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4764,40 +4991,48 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Generic abstractions related to dispatching event", "homepage": "https://symfony.com", - "time": "2018-10-30T16:50:50+00:00" + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-09-17T09:54:03+00:00" }, { "name": "symfony/filesystem", - "version": "v3.4.18", + "version": "v4.3.5", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "d69930fc337d767607267d57c20a7403d0a822a4" + "reference": "9abbb7ef96a51f4d7e69627bc6f63307994e4263" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/d69930fc337d767607267d57c20a7403d0a822a4", - "reference": "d69930fc337d767607267d57c20a7403d0a822a4", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/9abbb7ef96a51f4d7e69627bc6f63307994e4263", + "reference": "9abbb7ef96a51f4d7e69627bc6f63307994e4263", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -4824,29 +5059,29 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-10-02T12:28:39+00:00" + "time": "2019-08-20T14:07:54+00:00" }, { "name": "symfony/finder", - "version": "v3.4.18", + "version": "v4.3.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "54ba444dddc5bd5708a34bd095ea67c6eb54644d" + "reference": "5e575faa95548d0586f6bedaeabec259714e44d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/54ba444dddc5bd5708a34bd095ea67c6eb54644d", - "reference": "54ba444dddc5bd5708a34bd095ea67c6eb54644d", + "url": "https://api.github.com/repos/symfony/finder/zipball/5e575faa95548d0586f6bedaeabec259714e44d1", + "reference": "5e575faa95548d0586f6bedaeabec259714e44d1", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -4873,34 +5108,35 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-10-03T08:46:40+00:00" + "time": "2019-09-16T11:29:48+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.18", + "version": "v2.8.50", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "5aea7a86ca3203dd7a257e765b4b9c9cfd01c6c0" + "reference": "746f8d3638bf46ee8b202e62f2b214c3d61fb06a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5aea7a86ca3203dd7a257e765b4b9c9cfd01c6c0", - "reference": "5aea7a86ca3203dd7a257e765b4b9c9cfd01c6c0", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/746f8d3638bf46ee8b202e62f2b214c3d61fb06a", + "reference": "746f8d3638bf46ee8b202e62f2b214c3d61fb06a", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": ">=5.3.9", "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php70": "~1.6" + "symfony/polyfill-php54": "~1.0", + "symfony/polyfill-php55": "~1.0" }, "require-dev": { - "symfony/expression-language": "~2.8|~3.0|~4.0" + "symfony/expression-language": "~2.4|~3.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -4927,20 +5163,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2018-10-31T08:57:11+00:00" + "time": "2019-04-16T10:00:53+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.11.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "82ebae02209c21113908c229e9883c419720738a" + "reference": "550ebaac289296ce228a706d0867afc34687e3f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", - "reference": "82ebae02209c21113908c229e9883c419720738a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4", + "reference": "550ebaac289296ce228a706d0867afc34687e3f4", "shasum": "" }, "require": { @@ -4952,7 +5188,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -4968,13 +5204,13 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, { "name": "Gert de Pagter", "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for ctype functions", @@ -4985,20 +5221,20 @@ "polyfill", "portable" ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.10.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" + "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", - "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17", + "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17", "shasum": "" }, "require": { @@ -5010,7 +5246,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.12-dev" } }, "autoload": { @@ -5044,35 +5280,148 @@ "portable", "shim" ], - "time": "2018-09-21T13:07:52+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { - "name": "symfony/polyfill-php70", - "version": "v1.10.0", + "name": "symfony/polyfill-php54", + "version": "v1.12.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224" + "url": "https://github.com/symfony/polyfill-php54.git", + "reference": "a043bcced870214922fbb4bf22679d431ec0296a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/6b88000cdd431cd2e940caa2cb569201f3f84224", - "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224", + "url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/a043bcced870214922fbb4bf22679d431ec0296a", + "reference": "a043bcced870214922fbb4bf22679d431ec0296a", "shasum": "" }, "require": { - "paragonie/random_compat": "~1.0|~2.0|~9.99", "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.12-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php54\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-08-06T08:03:45+00:00" + }, + { + "name": "symfony/polyfill-php55", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php55.git", + "reference": "548bb39407e78e54f785b4e18c7e0d5d9e493265" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/548bb39407e78e54f785b4e18c7e0d5d9e493265", + "reference": "548bb39407e78e54f785b4e18c7e0d5d9e493265", + "shasum": "" + }, + "require": { + "ircmaxell/password-compat": "~1.0", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php70\\": "" + "Symfony\\Polyfill\\Php55\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-08-06T08:03:45+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/2ceb49eaccb9352bff54d22570276bb75ba4a188", + "reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" }, "files": [ "bootstrap.php" @@ -5095,7 +5444,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -5103,29 +5452,29 @@ "portable", "shim" ], - "time": "2018-09-21T06:26:08+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { "name": "symfony/process", - "version": "v3.4.18", + "version": "v4.3.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "35c2914a9f50519bd207164c353ae4d59182c2cb" + "reference": "50556892f3cc47d4200bfd1075314139c4c9ff4b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/35c2914a9f50519bd207164c353ae4d59182c2cb", - "reference": "35c2914a9f50519bd207164c353ae4d59182c2cb", + "url": "https://api.github.com/repos/symfony/process/zipball/50556892f3cc47d4200bfd1075314139c4c9ff4b", + "reference": "50556892f3cc47d4200bfd1075314139c4c9ff4b", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -5152,24 +5501,82 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-10-14T17:33:21+00:00" + "time": "2019-09-26T21:17:10+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v1.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "ffcde9615dc5bb4825b9f6aed07716f1f57faae0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/ffcde9615dc5bb4825b9f6aed07716f1f57faae0", + "reference": "ffcde9615dc5bb4825b9f6aed07716f1f57faae0", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-09-17T11:12:18+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.28", + "version": "v4.3.5", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996" + "reference": "41e16350a2a1c7383c4735aa2f9fce74cf3d1178" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/212a27b731e5bfb735679d1ffaac82bd6a1dc996", - "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996", + "url": "https://api.github.com/repos/symfony/yaml/zipball/41e16350a2a1c7383c4735aa2f9fce74cf3d1178", + "reference": "41e16350a2a1c7383c4735aa2f9fce74cf3d1178", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8" }, "conflict": { @@ -5184,7 +5591,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -5211,20 +5618,20 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2019-03-25T07:48:46+00:00" + "time": "2019-09-11T15:41:19+00:00" }, { "name": "theseer/tokenizer", - "version": "1.1.0", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", - "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", "shasum": "" }, "require": { @@ -5251,24 +5658,25 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2017-04-07T12:08:54+00:00" + "time": "2019-06-13T22:48:21+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v2.5.1", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e" + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2a7dcf7e3e02dc5e701004e51a6f304b713107d5", + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.3.9", + "symfony/polyfill-ctype": "^1.9" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.0" @@ -5276,7 +5684,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -5301,28 +5709,28 @@ "env", "environment" ], - "time": "2018-07-29T20:33:41+00:00" + "time": "2019-01-29T11:11:52+00:00" }, { "name": "webmozart/assert", - "version": "1.3.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" + "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", + "url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4", + "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "phpunit/phpunit": "^4.8.36 || ^7.5.13" }, "type": "library", "extra": { @@ -5351,7 +5759,7 @@ "check", "validate" ], - "time": "2018-01-29T19:49:41+00:00" + "time": "2019-08-24T08:43:50+00:00" }, { "name": "weew/helpers-array", @@ -5394,16 +5802,16 @@ "packages-dev": [ { "name": "brainmaestro/composer-git-hooks", - "version": "v2.6.1", + "version": "v2.8.2", "source": { "type": "git", "url": "https://github.com/BrainMaestro/composer-git-hooks.git", - "reference": "137dd2aec2be494918f8bdfb18f57b55ff20015e" + "reference": "c4a39fcbd73b8a5da8c02b8e0923b0836cc4fae0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/BrainMaestro/composer-git-hooks/zipball/137dd2aec2be494918f8bdfb18f57b55ff20015e", - "reference": "137dd2aec2be494918f8bdfb18f57b55ff20015e", + "url": "https://api.github.com/repos/BrainMaestro/composer-git-hooks/zipball/c4a39fcbd73b8a5da8c02b8e0923b0836cc4fae0", + "reference": "c4a39fcbd73b8a5da8c02b8e0923b0836cc4fae0", "shasum": "" }, "require": { @@ -5411,8 +5819,9 @@ "symfony/console": "^3.2 || ^4.0" }, "require-dev": { + "ext-json": "*", "friendsofphp/php-cs-fixer": "^2.9", - "phpunit/phpunit": "^5.7|^7.0" + "phpunit/phpunit": "^5.7 || ^7.0" }, "bin": [ "cghooks" @@ -5423,10 +5832,11 @@ "pre-commit": "composer check-style", "pre-push": [ "composer test", - "appver=$(grep -o -P '\\d.\\d.\\d' cghooks)", - "tag=$(git tag --sort=-v:refname | head -n 1 | tr -d v)", - "if [ \"$tag\" != \"$appver\" ]; then", - "echo \"The most recent tag v$tag does not match the application version $appver\n\"", + "appver=$(grep -o -E '\\d.\\d.\\d' cghooks)", + "tag=$(git describe --tags --abbrev=0)", + "if [ \"$tag\" != \"v$appver\" ]; then", + "echo \"The most recent tag $tag does not match the application version $appver\\n\"", + "tag=${tag#v}", "sed -i -E \"s/$appver/$tag/\" cghooks", "exit 1", "fi" @@ -5457,7 +5867,7 @@ "composer", "git" ], - "time": "2018-12-28T14:57:06+00:00" + "time": "2019-10-16T14:14:51+00:00" }, { "name": "codacy/coverage", @@ -5550,33 +5960,33 @@ }, { "name": "gitonomy/gitlib", - "version": "v1.0.4", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/gitonomy/gitlib.git", - "reference": "932a960221ae3484a3e82553b3be478e56beb68d" + "reference": "49e599915eae04b734f31e6e88f773d32d921e2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/gitonomy/gitlib/zipball/932a960221ae3484a3e82553b3be478e56beb68d", - "reference": "932a960221ae3484a3e82553b3be478e56beb68d", + "url": "https://api.github.com/repos/gitonomy/gitlib/zipball/49e599915eae04b734f31e6e88f773d32d921e2e", + "reference": "49e599915eae04b734f31e6e88f773d32d921e2e", "shasum": "" }, "require": { - "php": "^5.3 || ^7.0", - "symfony/process": "^2.3|^3.0|^4.0" + "php": "^5.6 || ^7.0", + "symfony/process": "^3.4|^4.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35|^5.7", + "phpunit/phpunit": "^5.7|^6.5", "psr/log": "^1.0" }, "suggest": { - "psr/log": "Add some log" + "psr/log": "Required to use loggers for reporting of execution" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.1-dev" } }, "autoload": { @@ -5602,7 +6012,7 @@ ], "description": "Library for accessing git", "homepage": "http://gitonomy.com", - "time": "2018-04-22T19:55:36+00:00" + "time": "2019-06-23T09:49:01+00:00" }, { "name": "goaop/framework", @@ -6023,16 +6433,16 @@ }, { "name": "phpmd/phpmd", - "version": "2.6.0", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/phpmd/phpmd.git", - "reference": "4e9924b2c157a3eb64395460fcf56b31badc8374" + "reference": "a05a999c644f4bc9a204846017db7bb7809fbe4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmd/phpmd/zipball/4e9924b2c157a3eb64395460fcf56b31badc8374", - "reference": "4e9924b2c157a3eb64395460fcf56b31badc8374", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/a05a999c644f4bc9a204846017db7bb7809fbe4c", + "reference": "a05a999c644f4bc9a204846017db7bb7809fbe4c", "shasum": "" }, "require": { @@ -6041,13 +6451,15 @@ "php": ">=5.3.9" }, "require-dev": { - "phpunit/phpunit": "^4.0", + "gregwar/rst": "^1.0", + "mikey179/vfsstream": "^1.6.4", + "phpunit/phpunit": "^4.8.36 || ^5.7.27", "squizlabs/php_codesniffer": "^2.0" }, "bin": [ "src/bin/phpmd" ], - "type": "project", + "type": "library", "autoload": { "psr-0": { "PHPMD\\": "src/main/php" @@ -6064,20 +6476,20 @@ "homepage": "https://github.com/manuelpichler", "role": "Project Founder" }, - { - "name": "Other contributors", - "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", - "role": "Contributors" - }, { "name": "Marc Würth", "email": "ravage@bluewin.ch", "homepage": "https://github.com/ravage84", "role": "Project Maintainer" + }, + { + "name": "Other contributors", + "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", + "role": "Contributors" } ], "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", - "homepage": "http://phpmd.org/", + "homepage": "https://phpmd.org/", "keywords": [ "mess detection", "mess detector", @@ -6085,7 +6497,7 @@ "phpmd", "pmd" ], - "time": "2017-01-20T14:41:10+00:00" + "time": "2019-07-30T21:13:32+00:00" }, { "name": "rregeer/phpunit-coverage-check", @@ -6170,21 +6582,22 @@ }, { "name": "sebastian/phpcpd", - "version": "3.0.1", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpcpd.git", - "reference": "dfed51c1288790fc957c9433e2f49ab152e8a564" + "reference": "0d9afa762f2400de077b2192f4a9d127de0bb78e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/dfed51c1288790fc957c9433e2f49ab152e8a564", - "reference": "dfed51c1288790fc957c9433e2f49ab152e8a564", + "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/0d9afa762f2400de077b2192f4a9d127de0bb78e", + "reference": "0d9afa762f2400de077b2192f4a9d127de0bb78e", "shasum": "" }, "require": { - "php": "^5.6|^7.0", - "phpunit/php-timer": "^1.0.6", + "ext-dom": "*", + "php": "^7.1", + "phpunit/php-timer": "^2.0", "sebastian/finder-facade": "^1.1", "sebastian/version": "^1.0|^2.0", "symfony/console": "^2.7|^3.0|^4.0" @@ -6195,7 +6608,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -6216,20 +6629,20 @@ ], "description": "Copy/Paste Detector (CPD) for PHP code.", "homepage": "https://github.com/sebastianbergmann/phpcpd", - "time": "2017-11-16T08:49:28+00:00" + "time": "2018-09-17T17:17:27+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.3.2", + "version": "3.5.1", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e" + "reference": "82cd0f854ceca17731d6d019c7098e3755c45060" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/6ad28354c04b364c3c71a34e4a18b629cc3b231e", - "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/82cd0f854ceca17731d6d019c7098e3755c45060", + "reference": "82cd0f854ceca17731d6d019c7098e3755c45060", "shasum": "" }, "require": { @@ -6262,41 +6675,41 @@ } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "http://www.squizlabs.com/php-codesniffer", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", "keywords": [ "phpcs", "standards" ], - "time": "2018-09-23T23:08:17+00:00" + "time": "2019-10-16T21:14:26+00:00" }, { "name": "symfony/config", - "version": "v3.4.18", + "version": "v4.3.5", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "99b2fa8acc244e656cdf324ff419fbe6fd300a4d" + "reference": "0acb26407a9e1a64a275142f0ae5e36436342720" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/99b2fa8acc244e656cdf324ff419fbe6fd300a4d", - "reference": "99b2fa8acc244e656cdf324ff419fbe6fd300a4d", + "url": "https://api.github.com/repos/symfony/config/zipball/0acb26407a9e1a64a275142f0ae5e36436342720", + "reference": "0acb26407a9e1a64a275142f0ae5e36436342720", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0|~4.0", + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/dependency-injection": "<3.3", - "symfony/finder": "<3.3" + "symfony/finder": "<3.4" }, "require-dev": { - "symfony/dependency-injection": "~3.3|~4.0", - "symfony/event-dispatcher": "~3.3|~4.0", - "symfony/finder": "~3.3|~4.0", - "symfony/yaml": "~3.0|~4.0" + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/messenger": "~4.1", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -6304,7 +6717,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -6331,38 +6744,40 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2018-10-31T09:06:03+00:00" + "time": "2019-09-19T15:51:53+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.4.18", + "version": "v4.3.5", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "9c98452ac7fff4b538956775630bc9701f5384ba" + "reference": "e1e0762a814b957a1092bff75a550db49724d05b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/9c98452ac7fff4b538956775630bc9701f5384ba", - "reference": "9c98452ac7fff4b538956775630bc9701f5384ba", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e1e0762a814b957a1092bff75a550db49724d05b", + "reference": "e1e0762a814b957a1092bff75a550db49724d05b", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/container": "^1.0" + "php": "^7.1.3", + "psr/container": "^1.0", + "symfony/service-contracts": "^1.1.6" }, "conflict": { - "symfony/config": "<3.3.7", - "symfony/finder": "<3.3", + "symfony/config": "<4.3", + "symfony/finder": "<3.4", "symfony/proxy-manager-bridge": "<3.4", "symfony/yaml": "<3.4" }, "provide": { - "psr/container-implementation": "1.0" + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0" }, "require-dev": { - "symfony/config": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/config": "^4.3", + "symfony/expression-language": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -6375,7 +6790,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -6402,20 +6817,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2018-10-31T10:49:51+00:00" + "time": "2019-10-02T12:58:58+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.4.18", + "version": "v3.4.32", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "05e52a39de52ba690aebaed462b2bc8a9649f0a4" + "reference": "c0c27e38f8accb452f830a4ec8e8ac94b6ec864a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/05e52a39de52ba690aebaed462b2bc8a9649f0a4", - "reference": "05e52a39de52ba690aebaed462b2bc8a9649f0a4", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/c0c27e38f8accb452f830a4ec8e8ac94b6ec864a", + "reference": "c0c27e38f8accb452f830a4ec8e8ac94b6ec864a", "shasum": "" }, "require": { @@ -6451,7 +6866,7 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2018-10-02T12:28:39+00:00" + "time": "2019-08-06T13:24:37+00:00" }, { "name": "theseer/fdomdocument", From f2a9c029110960af91a313449ec0236048b7cb7e Mon Sep 17 00:00:00 2001 From: Kevin Kozan Date: Wed, 23 Oct 2019 08:48:09 -0500 Subject: [PATCH 46/48] MQE-1833: CHANGELOG.MD and Composer version bump - Revert and reupdated composer.lock --- composer.lock | 1685 +++++++++++++++++++------------------------------ 1 file changed, 635 insertions(+), 1050 deletions(-) diff --git a/composer.lock b/composer.lock index fb8cb2056..2439f83ef 100644 --- a/composer.lock +++ b/composer.lock @@ -59,26 +59,25 @@ }, { "name": "allure-framework/allure-php-api", - "version": "1.1.5", + "version": "1.1.4", "source": { "type": "git", - "url": "https://github.com/allure-framework/allure-php-commons.git", - "reference": "c7a675823ad75b8e02ddc364baae21668e7c4e88" + "url": "https://github.com/allure-framework/allure-php-adapter-api.git", + "reference": "a462a0da121681577033e13c123b6cc4e89cdc64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/allure-framework/allure-php-commons/zipball/c7a675823ad75b8e02ddc364baae21668e7c4e88", - "reference": "c7a675823ad75b8e02ddc364baae21668e7c4e88", + "url": "https://api.github.com/repos/allure-framework/allure-php-adapter-api/zipball/a462a0da121681577033e13c123b6cc4e89cdc64", + "reference": "a462a0da121681577033e13c123b6cc4e89cdc64", "shasum": "" }, "require": { - "jms/serializer": "^0.16.0", + "jms/serializer": ">=0.16.0", + "moontoast/math": ">=1.1.0", "php": ">=5.4.0", - "ramsey/uuid": "^3.0.0", - "symfony/http-foundation": "^2.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0.0" + "phpunit/phpunit": ">=4.0.0", + "ramsey/uuid": ">=3.0.0", + "symfony/http-foundation": ">=2.0" }, "type": "library", "autoload": { @@ -108,20 +107,20 @@ "php", "report" ], - "time": "2018-05-25T14:02:11+00:00" + "time": "2016-12-07T12:15:46+00:00" }, { "name": "behat/gherkin", - "version": "v4.6.0", + "version": "v4.4.5", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" + "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", - "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/5c14cff4f955b17d20d088dec1bde61c0539ec74", + "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74", "shasum": "" }, "require": { @@ -129,8 +128,8 @@ }, "require-dev": { "phpunit/phpunit": "~4.5|~5", - "symfony/phpunit-bridge": "~2.7|~3|~4", - "symfony/yaml": "~2.3|~3|~4" + "symfony/phpunit-bridge": "~2.7|~3", + "symfony/yaml": "~2.3|~3" }, "suggest": { "symfony/yaml": "If you want to parse features, represented in YAML files" @@ -167,7 +166,7 @@ "gherkin", "parser" ], - "time": "2019-01-16T14:22:17+00:00" + "time": "2016-10-30T11:50:56+00:00" }, { "name": "cache/cache", @@ -251,7 +250,7 @@ { "name": "Tobias Nyholm", "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/nyholm" + "homepage": "https://github.com/Nyholm" } ], "description": "Library of all the php-cache adapters", @@ -264,28 +263,31 @@ }, { "name": "codeception/codeception", - "version": "2.4.5", + "version": "2.3.9", "source": { "type": "git", "url": "https://github.com/Codeception/Codeception.git", - "reference": "5fee32d5c82791548931cbc34806b4de6aa1abfc" + "reference": "104f46fa0bde339f1bcc3a375aac21eb36e65a1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/5fee32d5c82791548931cbc34806b4de6aa1abfc", - "reference": "5fee32d5c82791548931cbc34806b4de6aa1abfc", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/104f46fa0bde339f1bcc3a375aac21eb36e65a1e", + "reference": "104f46fa0bde339f1bcc3a375aac21eb36e65a1e", "shasum": "" }, "require": { - "behat/gherkin": "^4.4.0", - "codeception/phpunit-wrapper": "^6.0.9|^7.0.6", - "codeception/stub": "^2.0", + "behat/gherkin": "~4.4.0", + "codeception/stub": "^1.0", "ext-json": "*", "ext-mbstring": "*", "facebook/webdriver": ">=1.1.3 <2.0", "guzzlehttp/guzzle": ">=4.1.4 <7.0", "guzzlehttp/psr7": "~1.0", - "php": ">=5.6.0 <8.0", + "php": ">=5.4.0 <8.0", + "phpunit/php-code-coverage": ">=2.2.4 <6.0", + "phpunit/phpunit": ">=4.8.28 <5.0.0 || >=5.6.3 <7.0", + "sebastian/comparator": ">1.1 <3.0", + "sebastian/diff": ">=1.4 <3.0", "symfony/browser-kit": ">=2.7 <5.0", "symfony/console": ">=2.7 <5.0", "symfony/css-selector": ">=2.7 <5.0", @@ -351,66 +353,26 @@ "functional testing", "unit testing" ], - "time": "2018-08-01T07:21:49+00:00" - }, - { - "name": "codeception/phpunit-wrapper", - "version": "7.0.6", - "source": { - "type": "git", - "url": "https://github.com/Codeception/phpunit-wrapper.git", - "reference": "e8528cb777cf5a5ccea1cf57a3522b142625d1b5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/e8528cb777cf5a5ccea1cf57a3522b142625d1b5", - "reference": "e8528cb777cf5a5ccea1cf57a3522b142625d1b5", - "shasum": "" - }, - "require": { - "phpunit/php-code-coverage": "^6.0", - "phpunit/phpunit": "^7.0", - "sebastian/comparator": "^2.0", - "sebastian/diff": "^3.0" - }, - "require-dev": { - "codeception/specify": "*", - "vlucas/phpdotenv": "^2.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Codeception\\PHPUnit\\": "src\\" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Davert", - "email": "davert.php@resend.cc" - } - ], - "description": "PHPUnit classes used by Codeception", - "time": "2018-03-31T18:49:51+00:00" + "time": "2018-02-26T23:29:41+00:00" }, { "name": "codeception/stub", - "version": "2.0.4", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/Codeception/Stub.git", - "reference": "f50bc271f392a2836ff80690ce0c058efe1ae03e" + "reference": "681b62348837a5ef07d10d8a226f5bc358cc8805" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Stub/zipball/f50bc271f392a2836ff80690ce0c058efe1ae03e", - "reference": "f50bc271f392a2836ff80690ce0c058efe1ae03e", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/681b62348837a5ef07d10d8a226f5bc358cc8805", + "reference": "681b62348837a5ef07d10d8a226f5bc358cc8805", "shasum": "" }, "require": { + "phpunit/phpunit-mock-objects": ">2.3 <7.0" + }, + "require-dev": { "phpunit/phpunit": ">=4.8 <8.0" }, "type": "library", @@ -424,7 +386,7 @@ "MIT" ], "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", - "time": "2018-07-26T11:55:37+00:00" + "time": "2018-05-17T09:31:08+00:00" }, { "name": "composer/ca-bundle", @@ -730,78 +692,34 @@ }, { "name": "consolidation/annotated-command", - "version": "2.12.0", + "version": "2.9.1", "source": { "type": "git", "url": "https://github.com/consolidation/annotated-command.git", - "reference": "512a2e54c98f3af377589de76c43b24652bcb789" + "reference": "4bdbb8fa149e1cc1511bd77b0bc4729fd66bccac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/512a2e54c98f3af377589de76c43b24652bcb789", - "reference": "512a2e54c98f3af377589de76c43b24652bcb789", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/4bdbb8fa149e1cc1511bd77b0bc4729fd66bccac", + "reference": "4bdbb8fa149e1cc1511bd77b0bc4729fd66bccac", "shasum": "" }, "require": { - "consolidation/output-formatters": "^3.4", - "php": ">=5.4.5", + "consolidation/output-formatters": "^3.1.12", + "php": ">=5.4.0", "psr/log": "^1", "symfony/console": "^2.8|^3|^4", "symfony/event-dispatcher": "^2.5|^3|^4", "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "g1a/composer-test-scenarios": "^3", - "php-coveralls/php-coveralls": "^1", + "g1a/composer-test-scenarios": "^2", "phpunit/phpunit": "^6", + "satooshi/php-coveralls": "^2", "squizlabs/php_codesniffer": "^2.7" }, "type": "library", "extra": { - "scenarios": { - "symfony4": { - "require": { - "symfony/console": "^4.0" - }, - "config": { - "platform": { - "php": "7.1.3" - } - } - }, - "symfony2": { - "require": { - "symfony/console": "^2.8" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36" - }, - "remove": [ - "php-coveralls/php-coveralls" - ], - "config": { - "platform": { - "php": "5.4.8" - } - }, - "scenario-options": { - "create-lockfile": "false" - } - }, - "phpunit4": { - "require-dev": { - "phpunit/phpunit": "^4.8.36" - }, - "remove": [ - "php-coveralls/php-coveralls" - ], - "config": { - "platform": { - "php": "5.4.8" - } - } - } - }, "branch-alias": { "dev-master": "2.x-dev" } @@ -822,20 +740,20 @@ } ], "description": "Initialize Symfony Console commands from annotated command class methods.", - "time": "2019-03-08T16:55:03+00:00" + "time": "2018-09-19T17:47:18+00:00" }, { "name": "consolidation/config", - "version": "1.2.1", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/consolidation/config.git", - "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1" + "reference": "925231dfff32f05b787e1fddb265e789b939cf4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/config/zipball/cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1", - "reference": "cac1279bae7efb5c7fb2ca4c3ba4b8eb741a96c1", + "url": "https://api.github.com/repos/consolidation/config/zipball/925231dfff32f05b787e1fddb265e789b939cf4c", + "reference": "925231dfff32f05b787e1fddb265e789b939cf4c", "shasum": "" }, "require": { @@ -844,9 +762,9 @@ "php": ">=5.4.0" }, "require-dev": { - "g1a/composer-test-scenarios": "^3", - "php-coveralls/php-coveralls": "^1", + "g1a/composer-test-scenarios": "^1", "phpunit/phpunit": "^5", + "satooshi/php-coveralls": "^1.0", "squizlabs/php_codesniffer": "2.*", "symfony/console": "^2.5|^3|^4", "symfony/yaml": "^2.8.11|^3|^4" @@ -856,33 +774,6 @@ }, "type": "library", "extra": { - "scenarios": { - "symfony4": { - "require-dev": { - "symfony/console": "^4.0" - }, - "config": { - "platform": { - "php": "7.1.3" - } - } - }, - "symfony2": { - "require-dev": { - "symfony/console": "^2.8", - "symfony/event-dispatcher": "^2.8", - "phpunit/phpunit": "^4.8.36" - }, - "remove": [ - "php-coveralls/php-coveralls" - ], - "config": { - "platform": { - "php": "5.4.8" - } - } - } - }, "branch-alias": { "dev-master": "1.x-dev" } @@ -903,76 +794,35 @@ } ], "description": "Provide configuration services for a commandline tool.", - "time": "2019-03-03T19:37:04+00:00" + "time": "2018-10-24T17:55:35+00:00" }, { "name": "consolidation/log", - "version": "1.1.1", + "version": "1.0.6", "source": { "type": "git", "url": "https://github.com/consolidation/log.git", - "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a" + "reference": "dfd8189a771fe047bf3cd669111b2de5f1c79395" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/log/zipball/b2e887325ee90abc96b0a8b7b474cd9e7c896e3a", - "reference": "b2e887325ee90abc96b0a8b7b474cd9e7c896e3a", + "url": "https://api.github.com/repos/consolidation/log/zipball/dfd8189a771fe047bf3cd669111b2de5f1c79395", + "reference": "dfd8189a771fe047bf3cd669111b2de5f1c79395", "shasum": "" }, "require": { - "php": ">=5.4.5", - "psr/log": "^1.0", + "php": ">=5.5.0", + "psr/log": "~1.0", "symfony/console": "^2.8|^3|^4" }, "require-dev": { - "g1a/composer-test-scenarios": "^3", - "php-coveralls/php-coveralls": "^1", - "phpunit/phpunit": "^6", - "squizlabs/php_codesniffer": "^2" + "g1a/composer-test-scenarios": "^1", + "phpunit/phpunit": "4.*", + "satooshi/php-coveralls": "^2", + "squizlabs/php_codesniffer": "2.*" }, "type": "library", "extra": { - "scenarios": { - "symfony4": { - "require": { - "symfony/console": "^4.0" - }, - "config": { - "platform": { - "php": "7.1.3" - } - } - }, - "symfony2": { - "require": { - "symfony/console": "^2.8" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36" - }, - "remove": [ - "php-coveralls/php-coveralls" - ], - "config": { - "platform": { - "php": "5.4.8" - } - } - }, - "phpunit4": { - "require-dev": { - "phpunit/phpunit": "^4.8.36" - }, - "remove": [ - "php-coveralls/php-coveralls" - ], - "config": { - "platform": { - "php": "5.4.8" - } - } - } - }, "branch-alias": { "dev-master": "1.x-dev" } @@ -993,20 +843,20 @@ } ], "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.", - "time": "2019-01-01T17:30:51+00:00" + "time": "2018-05-25T18:14:39+00:00" }, { "name": "consolidation/output-formatters", - "version": "3.5.0", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/consolidation/output-formatters.git", - "reference": "99ec998ffb697e0eada5aacf81feebfb13023605" + "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/99ec998ffb697e0eada5aacf81feebfb13023605", - "reference": "99ec998ffb697e0eada5aacf81feebfb13023605", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19", + "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19", "shasum": "" }, "require": { @@ -1016,10 +866,11 @@ "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "g1a/composer-test-scenarios": "^3", - "php-coveralls/php-coveralls": "^1", + "g1a/composer-test-scenarios": "^2", "phpunit/phpunit": "^5.7.27", + "satooshi/php-coveralls": "^2", "squizlabs/php_codesniffer": "^2.7", + "symfony/console": "3.2.3", "symfony/var-dumper": "^2.8|^3|^4", "victorjonsson/markdowndocs": "^1.3" }, @@ -1028,52 +879,6 @@ }, "type": "library", "extra": { - "scenarios": { - "symfony4": { - "require": { - "symfony/console": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^6" - }, - "config": { - "platform": { - "php": "7.1.3" - } - } - }, - "symfony3": { - "require": { - "symfony/console": "^3.4", - "symfony/finder": "^3.4", - "symfony/var-dumper": "^3.4" - }, - "config": { - "platform": { - "php": "5.6.32" - } - } - }, - "symfony2": { - "require": { - "symfony/console": "^2.8" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36" - }, - "remove": [ - "php-coveralls/php-coveralls" - ], - "config": { - "platform": { - "php": "5.4.8" - } - }, - "scenario-options": { - "create-lockfile": "false" - } - } - }, "branch-alias": { "dev-master": "3.x-dev" } @@ -1094,28 +899,29 @@ } ], "description": "Format text by applying transformations provided by plug-in formatters.", - "time": "2019-05-30T23:16:01+00:00" + "time": "2018-10-19T22:35:38+00:00" }, { "name": "consolidation/robo", - "version": "1.4.10", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/consolidation/Robo.git", - "reference": "e5a6ca64cf1324151873672e484aceb21f365681" + "reference": "31f2d2562c4e1dcde70f2659eefd59aa9c7f5b2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/Robo/zipball/e5a6ca64cf1324151873672e484aceb21f365681", - "reference": "e5a6ca64cf1324151873672e484aceb21f365681", + "url": "https://api.github.com/repos/consolidation/Robo/zipball/31f2d2562c4e1dcde70f2659eefd59aa9c7f5b2d", + "reference": "31f2d2562c4e1dcde70f2659eefd59aa9c7f5b2d", "shasum": "" }, "require": { - "consolidation/annotated-command": "^2.10.2", - "consolidation/config": "^1.2", + "consolidation/annotated-command": "^2.8.2", + "consolidation/config": "^1.0.10", "consolidation/log": "~1", "consolidation/output-formatters": "^3.1.13", "consolidation/self-update": "^1", + "g1a/composer-test-scenarios": "^2", "grasmash/yaml-expander": "^1.3", "league/container": "^2.2", "php": ">=5.5.0", @@ -1132,15 +938,14 @@ "codeception/aspect-mock": "^1|^2.1.1", "codeception/base": "^2.3.7", "codeception/verify": "^0.3.2", - "g1a/composer-test-scenarios": "^3", "goaop/framework": "~2.1.2", "goaop/parser-reflection": "^1.1.0", "natxet/cssmin": "3.0.4", "nikic/php-parser": "^3.1.5", "patchwork/jsqueeze": "~2", - "pear/archive_tar": "^1.4.4", - "php-coveralls/php-coveralls": "^1", + "pear/archive_tar": "^1.4.2", "phpunit/php-code-coverage": "~2|~4", + "satooshi/php-coveralls": "^2", "squizlabs/php_codesniffer": "^2.8" }, "suggest": { @@ -1154,36 +959,9 @@ ], "type": "library", "extra": { - "scenarios": { - "symfony4": { - "require": { - "symfony/console": "^4" - }, - "config": { - "platform": { - "php": "7.1.3" - } - } - }, - "symfony2": { - "require": { - "symfony/console": "^2.8" - }, - "remove": [ - "goaop/framework" - ], - "config": { - "platform": { - "php": "5.5.9" - } - }, - "scenario-options": { - "create-lockfile": "false" - } - } - }, "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "1.x-dev", + "dev-state": "1.x-dev" } }, "autoload": { @@ -1202,7 +980,7 @@ } ], "description": "Modern task runner", - "time": "2019-07-29T15:40:50+00:00" + "time": "2018-08-17T18:44:18+00:00" }, { "name": "consolidation/self-update", @@ -1432,30 +1210,30 @@ }, { "name": "doctrine/annotations", - "version": "v1.8.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc" + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/904dca4eb10715b92569fbcd79e201d5c349b6bc", - "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97", + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97", "shasum": "" }, "require": { "doctrine/lexer": "1.*", - "php": "^7.1" + "php": "^5.6 || ^7.0" }, "require-dev": { "doctrine/cache": "1.*", - "phpunit/phpunit": "^7.5" + "phpunit/phpunit": "^5.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { @@ -1468,10 +1246,6 @@ "MIT" ], "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -1480,6 +1254,10 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -1496,7 +1274,7 @@ "docblock", "parser" ], - "time": "2019-10-01T18:55:10+00:00" + "time": "2017-02-24T16:22:25+00:00" }, { "name": "doctrine/cache", @@ -1637,34 +1415,32 @@ }, { "name": "doctrine/instantiator", - "version": "1.2.0", + "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "a2c590166b2133a4633738648b6b064edae0814a" + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", - "reference": "a2c590166b2133a4633738648b6b064edae0814a", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=5.3,<8.0-DEV" }, "require-dev": { - "doctrine/coding-standard": "^6.0", + "athletic/athletic": "~0.1.8", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-shim": "^0.11", - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { @@ -1684,12 +1460,12 @@ } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "homepage": "https://github.com/doctrine/instantiator", "keywords": [ "constructor", "instantiate" ], - "time": "2019-03-17T17:37:11+00:00" + "time": "2015-06-14T21:17:01+00:00" }, { "name": "doctrine/lexer", @@ -1753,16 +1529,16 @@ }, { "name": "facebook/webdriver", - "version": "1.7.1", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/facebook/php-webdriver.git", - "reference": "e43de70f3c7166169d0f14a374505392734160e5" + "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/e43de70f3c7166169d0f14a374505392734160e5", - "reference": "e43de70f3c7166169d0f14a374505392734160e5", + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/bd8c740097eb9f2fc3735250fc1912bc811a954e", + "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e", "shasum": "" }, "require": { @@ -1809,7 +1585,7 @@ "selenium", "webdriver" ], - "time": "2019-06-13T08:02:18+00:00" + "time": "2018-05-16T17:37:13+00:00" }, { "name": "flow/jsonpath", @@ -1902,6 +1678,39 @@ ], "time": "2018-07-12T10:23:15+00:00" }, + { + "name": "g1a/composer-test-scenarios", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/g1a/composer-test-scenarios.git", + "reference": "a166fd15191aceab89f30c097e694b7cf3db4880" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/g1a/composer-test-scenarios/zipball/a166fd15191aceab89f30c097e694b7cf3db4880", + "reference": "a166fd15191aceab89f30c097e694b7cf3db4880", + "shasum": "" + }, + "bin": [ + "scripts/create-scenario", + "scripts/dependency-licenses", + "scripts/install-scenario" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Useful scripts for testing multiple sets of Composer dependencies.", + "time": "2018-08-08T23:37:23+00:00" + }, { "name": "grasmash/expander", "version": "1.0.0", @@ -2115,37 +1924,32 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.6.1", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", "shasum": "" }, "require": { "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + "psr/http-message": "~1.0" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" - }, - "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + "phpunit/phpunit": "~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -2175,56 +1979,13 @@ "keywords": [ "http", "message", - "psr-7", "request", "response", "stream", "uri", "url" ], - "time": "2019-07-01T23:21:34+00:00" - }, - { - "name": "ircmaxell/password-compat", - "version": "v1.0.4", - "source": { - "type": "git", - "url": "https://github.com/ircmaxell/password_compat.git", - "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c", - "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c", - "shasum": "" - }, - "require-dev": { - "phpunit/phpunit": "4.*" - }, - "type": "library", - "autoload": { - "files": [ - "lib/password.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Anthony Ferrara", - "email": "ircmaxell@php.net", - "homepage": "http://blog.ircmaxell.com" - } - ], - "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash", - "homepage": "https://github.com/ircmaxell/password_compat", - "keywords": [ - "hashing", - "password" - ], - "time": "2014-11-20T16:49:30+00:00" + "time": "2017-03-20T17:10:46+00:00" }, { "name": "jms/metadata", @@ -2318,44 +2079,56 @@ }, { "name": "jms/serializer", - "version": "0.16.0", + "version": "1.14.0", "source": { "type": "git", "url": "https://github.com/schmittjoh/serializer.git", - "reference": "c8a171357ca92b6706e395c757f334902d430ea9" + "reference": "ee96d57024af9a7716d56fcbe3aa94b3d030f3ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/c8a171357ca92b6706e395c757f334902d430ea9", - "reference": "c8a171357ca92b6706e395c757f334902d430ea9", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/ee96d57024af9a7716d56fcbe3aa94b3d030f3ca", + "reference": "ee96d57024af9a7716d56fcbe3aa94b3d030f3ca", "shasum": "" }, "require": { - "doctrine/annotations": "1.*", - "jms/metadata": "~1.1", + "doctrine/annotations": "^1.0", + "doctrine/instantiator": "^1.0.3", + "jms/metadata": "^1.3", "jms/parser-lib": "1.*", - "php": ">=5.3.2", - "phpcollection/phpcollection": "~0.1" + "php": "^5.5|^7.0", + "phpcollection/phpcollection": "~0.1", + "phpoption/phpoption": "^1.1" + }, + "conflict": { + "twig/twig": "<1.12" }, "require-dev": { "doctrine/orm": "~2.1", - "doctrine/phpcr-odm": "~1.0.1", - "jackalope/jackalope-doctrine-dbal": "1.0.*", + "doctrine/phpcr-odm": "^1.3|^2.0", + "ext-pdo_sqlite": "*", + "jackalope/jackalope-doctrine-dbal": "^1.1.5", + "phpunit/phpunit": "^4.8|^5.0", "propel/propel1": "~1.7", - "symfony/filesystem": "2.*", - "symfony/form": "~2.1", - "symfony/translation": "~2.0", - "symfony/validator": "~2.0", - "symfony/yaml": "2.*", - "twig/twig": ">=1.8,<2.0-dev" + "psr/container": "^1.0", + "symfony/dependency-injection": "^2.7|^3.3|^4.0", + "symfony/expression-language": "^2.6|^3.0", + "symfony/filesystem": "^2.1", + "symfony/form": "~2.1|^3.0", + "symfony/translation": "^2.1|^3.0", + "symfony/validator": "^2.2|^3.0", + "symfony/yaml": "^2.1|^3.0", + "twig/twig": "~1.12|~2.0" }, "suggest": { + "doctrine/cache": "Required if you like to use cache functionality.", + "doctrine/collections": "Required if you like to use doctrine collection types as ArrayCollection.", "symfony/yaml": "Required if you'd like to serialize data to YAML format." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.15-dev" + "dev-1.x": "1.14-dev" } }, "autoload": { @@ -2365,14 +2138,16 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache2" + "MIT" ], "authors": [ { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + }, + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" } ], "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.", @@ -2384,7 +2159,7 @@ "serialization", "xml" ], - "time": "2014-03-18T08:39:00+00:00" + "time": "2019-04-17T08:12:16+00:00" }, { "name": "justinrainbow/json-schema", @@ -2519,16 +2294,16 @@ }, { "name": "league/flysystem", - "version": "1.0.57", + "version": "1.0.53", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "0e9db7f0b96b9f12dcf6f65bc34b72b1a30ea55a" + "reference": "08e12b7628f035600634a5e76d95b5eb66cea674" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/0e9db7f0b96b9f12dcf6f65bc34b72b1a30ea55a", - "reference": "0e9db7f0b96b9f12dcf6f65bc34b72b1a30ea55a", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/08e12b7628f035600634a5e76d95b5eb66cea674", + "reference": "08e12b7628f035600634a5e76d95b5eb66cea674", "shasum": "" }, "require": { @@ -2599,20 +2374,20 @@ "sftp", "storage" ], - "time": "2019-10-16T21:01:05+00:00" + "time": "2019-06-18T20:09:29+00:00" }, { "name": "monolog/monolog", - "version": "1.25.1", + "version": "1.24.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "70e65a5470a42cfec1a7da00d30edb6e617e8dcf" + "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/70e65a5470a42cfec1a7da00d30edb6e617e8dcf", - "reference": "70e65a5470a42cfec1a7da00d30edb6e617e8dcf", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", + "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266", "shasum": "" }, "require": { @@ -2677,7 +2452,56 @@ "logging", "psr-3" ], - "time": "2019-09-06T13:49:17+00:00" + "time": "2018-11-05T09:00:11+00:00" + }, + { + "name": "moontoast/math", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/ramsey/moontoast-math.git", + "reference": "c2792a25df5cad4ff3d760dd37078fc5b6fccc79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/moontoast-math/zipball/c2792a25df5cad4ff3d760dd37078fc5b6fccc79", + "reference": "c2792a25df5cad4ff3d760dd37078fc5b6fccc79", + "shasum": "" + }, + "require": { + "ext-bcmath": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "jakub-onderka/php-parallel-lint": "^0.9.0", + "phpunit/phpunit": "^4.7|>=5.0 <5.4", + "satooshi/php-coveralls": "^0.6.1", + "squizlabs/php_codesniffer": "^2.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Moontoast\\Math\\": "src/Moontoast/Math/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A mathematics library, providing functionality for large numbers", + "homepage": "https://github.com/ramsey/moontoast-math", + "keywords": [ + "bcmath", + "math" + ], + "time": "2017-02-16T16:54:46+00:00" }, { "name": "mustache/mustache", @@ -2727,28 +2551,25 @@ }, { "name": "myclabs/deep-copy", - "version": "1.9.3", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea" + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea", - "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", "shasum": "" }, "require": { - "php": "^7.1" - }, - "replace": { - "myclabs/deep-copy": "self.version" + "php": "^5.6 || ^7.0" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^4.1" }, "type": "library", "autoload": { @@ -2771,7 +2592,7 @@ "object", "object graph" ], - "time": "2019-08-09T12:45:53+00:00" + "time": "2017-10-19T19:58:43+00:00" }, { "name": "paragonie/random_compat", @@ -2970,33 +2791,35 @@ }, { "name": "phpdocumentor/reflection-common", - "version": "2.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "~6" + "phpunit/phpunit": "^4.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src/" + "phpDocumentor\\Reflection\\": [ + "src" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -3018,30 +2841,30 @@ "reflection", "static analysis" ], - "time": "2018-08-07T13:53:10+00:00" + "time": "2017-09-11T18:02:19+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.2", + "version": "4.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e" + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/b83ff7cfcfee7827e1e78b637a5904fe6a96698e", - "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", "shasum": "" }, "require": { "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", - "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "require-dev": { - "doctrine/instantiator": "^1.0.5", + "doctrine/instantiator": "~1.0.5", "mockery/mockery": "^1.0", "phpunit/phpunit": "^6.4" }, @@ -3069,40 +2892,41 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2019-09-12T14:27:41+00:00" + "time": "2017-11-30T07:14:17+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.0.1", + "version": "0.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", "shasum": "" }, "require": { - "php": "^7.1", - "phpdocumentor/reflection-common": "^2.0" + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" }, "require-dev": { - "ext-tokenizer": "^7.1", - "mockery/mockery": "~1", - "phpunit/phpunit": "^7.0" + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src" + "phpDocumentor\\Reflection\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -3115,8 +2939,7 @@ "email": "me@mikevanriel.com" } ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2019-08-22T18:11:29+00:00" + "time": "2017-07-14T14:27:02+00:00" }, { "name": "phpoption/phpoption", @@ -3170,22 +2993,22 @@ }, { "name": "phpspec/prophecy", - "version": "1.9.0", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203" + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/f6811d96d97bdf400077a0cc100ae56aa32b9203", - "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", "sebastian/comparator": "^1.1|^2.0|^3.0", "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, @@ -3200,8 +3023,8 @@ } }, "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" + "psr-0": { + "Prophecy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3229,44 +3052,44 @@ "spy", "stub" ], - "time": "2019-10-03T11:07:50+00:00" + "time": "2018-08-05T17:53:17+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "6.0.5", + "version": "5.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "4cab20a326d14de7575a8e235c70d879b569a57a" + "reference": "c89677919c5dd6d3b3852f230a663118762218ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4cab20a326d14de7575a8e235c70d879b569a57a", - "reference": "4cab20a326d14de7575a8e235c70d879b569a57a", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", + "reference": "c89677919c5dd6d3b3852f230a663118762218ac", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", - "php": "^7.1", + "php": "^7.0", "phpunit/php-file-iterator": "^1.4.2", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.0", + "phpunit/php-token-stream": "^2.0.1", "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.1", + "sebastian/environment": "^3.0", "sebastian/version": "^2.0.1", "theseer/tokenizer": "^1.1" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^6.0" }, "suggest": { - "ext-xdebug": "^2.6.0" + "ext-xdebug": "^2.5.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.0-dev" + "dev-master": "5.3.x-dev" } }, "autoload": { @@ -3292,7 +3115,7 @@ "testing", "xunit" ], - "time": "2018-05-28T11:49:20+00:00" + "time": "2018-04-06T15:36:58+00:00" }, { "name": "phpunit/php-file-iterator", @@ -3384,28 +3207,28 @@ }, { "name": "phpunit/php-timer", - "version": "2.1.2", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -3420,7 +3243,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", + "email": "sb@sebastian-bergmann.de", "role": "lead" } ], @@ -3429,33 +3252,33 @@ "keywords": [ "timer" ], - "time": "2019-06-07T04:22:29+00:00" + "time": "2017-02-26T11:10:40+00:00" }, { "name": "phpunit/php-token-stream", - "version": "3.1.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": "^7.1" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^6.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -3478,20 +3301,20 @@ "keywords": [ "tokenizer" ], - "time": "2019-09-17T06:23:10+00:00" + "time": "2017-11-27T05:48:46+00:00" }, { "name": "phpunit/phpunit", - "version": "7.0.3", + "version": "6.5.13", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "536f4d853c12d8189963435088e8ff7c0daeab2e" + "reference": "0973426fb012359b2f18d3bd1e90ef1172839693" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/536f4d853c12d8189963435088e8ff7c0daeab2e", - "reference": "536f4d853c12d8189963435088e8ff7c0daeab2e", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0973426fb012359b2f18d3bd1e90ef1172839693", + "reference": "0973426fb012359b2f18d3bd1e90ef1172839693", "shasum": "" }, "require": { @@ -3503,15 +3326,15 @@ "myclabs/deep-copy": "^1.6.1", "phar-io/manifest": "^1.0.1", "phar-io/version": "^1.0", - "php": "^7.1", + "php": "^7.0", "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^6.0.1", + "phpunit/php-code-coverage": "^5.3", "phpunit/php-file-iterator": "^1.4.3", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.0", - "phpunit/phpunit-mock-objects": "^6.0", + "phpunit/php-timer": "^1.0.9", + "phpunit/phpunit-mock-objects": "^5.0.9", "sebastian/comparator": "^2.1", - "sebastian/diff": "^3.0", + "sebastian/diff": "^2.0", "sebastian/environment": "^3.1", "sebastian/exporter": "^3.1", "sebastian/global-state": "^2.0", @@ -3519,12 +3342,16 @@ "sebastian/resource-operations": "^1.0", "sebastian/version": "^2.0.1" }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2", + "phpunit/dbunit": "<3.0" + }, "require-dev": { "ext-pdo": "*" }, "suggest": { "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0" + "phpunit/php-invoker": "^1.1" }, "bin": [ "phpunit" @@ -3532,7 +3359,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "7.0-dev" + "dev-master": "6.5.x-dev" } }, "autoload": { @@ -3558,30 +3385,33 @@ "testing", "xunit" ], - "time": "2018-03-26T07:36:48+00:00" + "time": "2018-09-08T15:10:43+00:00" }, { "name": "phpunit/phpunit-mock-objects", - "version": "6.1.2", + "version": "5.0.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "f9756fd4f43f014cb2dca98deeaaa8ce5500a36e" + "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/f9756fd4f43f014cb2dca98deeaaa8ce5500a36e", - "reference": "f9756fd4f43f014cb2dca98deeaaa8ce5500a36e", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f", + "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.5", - "php": "^7.1", + "php": "^7.0", "phpunit/php-text-template": "^1.2.1", "sebastian/exporter": "^3.1" }, + "conflict": { + "phpunit/phpunit": "<6.0" + }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^6.5.11" }, "suggest": { "ext-soap": "*" @@ -3589,7 +3419,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.1-dev" + "dev-master": "5.0.x-dev" } }, "autoload": { @@ -3615,7 +3445,7 @@ "xunit" ], "abandoned": true, - "time": "2018-05-29T13:54:20+00:00" + "time": "2018-08-09T05:50:03+00:00" }, { "name": "psr/cache", @@ -3764,16 +3594,16 @@ }, { "name": "psr/log", - "version": "1.1.0", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", "shasum": "" }, "require": { @@ -3807,7 +3637,7 @@ "psr", "psr-3" ], - "time": "2018-11-20T15:27:04+00:00" + "time": "2016-10-10T12:19:37+00:00" }, { "name": "psr/simple-cache", @@ -3857,46 +3687,6 @@ ], "time": "2017-10-23T01:57:42+00:00" }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "time": "2019-03-08T08:55:37+00:00" - }, { "name": "ramsey/uuid", "version": "3.8.0", @@ -4090,29 +3880,28 @@ }, { "name": "sebastian/diff", - "version": "3.0.2", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "phpunit/phpunit": "^6.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4137,12 +3926,9 @@ "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" + "diff" ], - "time": "2019-02-04T06:01:07+00:00" + "time": "2017-08-03T08:09:46+00:00" }, { "name": "sebastian/environment", @@ -4196,16 +3982,16 @@ }, { "name": "sebastian/exporter", - "version": "3.1.2", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", "shasum": "" }, "require": { @@ -4232,10 +4018,6 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -4245,12 +4027,16 @@ "email": "github@wallbash.com" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" }, { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], "description": "Provides the functionality to export PHP variables for visualization", @@ -4259,7 +4045,7 @@ "export", "exporter" ], - "time": "2019-09-14T09:02:43+00:00" + "time": "2017-04-03T13:19:02+00:00" }, { "name": "sebastian/global-state", @@ -4637,27 +4423,25 @@ }, { "name": "symfony/browser-kit", - "version": "v4.3.5", + "version": "v3.4.18", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "78b7611c45039e8ce81698be319851529bf040b1" + "reference": "f6668d1a6182d5a8dec65a1c863a4c1d963816c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/78b7611c45039e8ce81698be319851529bf040b1", - "reference": "78b7611c45039e8ce81698be319851529bf040b1", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/f6668d1a6182d5a8dec65a1c863a4c1d963816c0", + "reference": "f6668d1a6182d5a8dec65a1c863a4c1d963816c0", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/dom-crawler": "~3.4|~4.0" + "php": "^5.5.9|>=7.0.8", + "symfony/dom-crawler": "~2.8|~3.0|~4.0" }, "require-dev": { - "symfony/css-selector": "~3.4|~4.0", - "symfony/http-client": "^4.3", - "symfony/mime": "^4.3", - "symfony/process": "~3.4|~4.0" + "symfony/css-selector": "~2.8|~3.0|~4.0", + "symfony/process": "~2.8|~3.0|~4.0" }, "suggest": { "symfony/process": "" @@ -4665,7 +4449,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -4692,47 +4476,41 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2019-09-10T11:25:17+00:00" + "time": "2018-07-26T09:06:28+00:00" }, { "name": "symfony/console", - "version": "v4.3.5", + "version": "v3.4.18", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "929ddf360d401b958f611d44e726094ab46a7369" + "reference": "1d228fb4602047d7b26a0554e0d3efd567da5803" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/929ddf360d401b958f611d44e726094ab46a7369", - "reference": "929ddf360d401b958f611d44e726094ab46a7369", + "url": "https://api.github.com/repos/symfony/console/zipball/1d228fb4602047d7b26a0554e0d3efd567da5803", + "reference": "1d228fb4602047d7b26a0554e0d3efd567da5803", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/service-contracts": "^1.1" + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<4.3", "symfony/process": "<3.3" }, - "provide": { - "psr/log-implementation": "1.0" - }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", + "symfony/config": "~3.3|~4.0", "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "^4.3", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "symfony/var-dumper": "^4.3" + "symfony/process": "~3.3|~4.0" }, "suggest": { - "psr/log": "For using the console logger", + "psr/log-implementation": "For using the console logger", "symfony/event-dispatcher": "", "symfony/lock": "", "symfony/process": "" @@ -4740,7 +4518,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -4767,29 +4545,29 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-10-07T12:36:49+00:00" + "time": "2018-10-30T16:50:50+00:00" }, { "name": "symfony/css-selector", - "version": "v4.3.5", + "version": "v3.4.18", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "f4b3ff6a549d9ed28b2b0ecd1781bf67cf220ee9" + "reference": "3503415d4aafabc31cd08c3a4ebac7f43fde8feb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/f4b3ff6a549d9ed28b2b0ecd1781bf67cf220ee9", - "reference": "f4b3ff6a549d9ed28b2b0ecd1781bf67cf220ee9", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/3503415d4aafabc31cd08c3a4ebac7f43fde8feb", + "reference": "3503415d4aafabc31cd08c3a4ebac7f43fde8feb", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -4805,14 +4583,14 @@ "MIT" ], "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, { "name": "Jean-François Simon", "email": "jeanfrancois.simon@sensiolabs.com" }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" @@ -4820,46 +4598,41 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2019-10-02T08:36:26+00:00" + "time": "2018-10-02T16:33:53+00:00" }, { - "name": "symfony/dom-crawler", - "version": "v4.3.5", + "name": "symfony/debug", + "version": "v3.4.18", "source": { "type": "git", - "url": "https://github.com/symfony/dom-crawler.git", - "reference": "e9f7b4d19d69b133bd638eeddcdc757723b4211f" + "url": "https://github.com/symfony/debug.git", + "reference": "fe9793af008b651c5441bdeab21ede8172dab097" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/e9f7b4d19d69b133bd638eeddcdc757723b4211f", - "reference": "e9f7b4d19d69b133bd638eeddcdc757723b4211f", + "url": "https://api.github.com/repos/symfony/debug/zipball/fe9793af008b651c5441bdeab21ede8172dab097", + "reference": "fe9793af008b651c5441bdeab21ede8172dab097", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0" + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" }, "conflict": { - "masterminds/html5": "<2.6" + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "masterminds/html5": "^2.6", - "symfony/css-selector": "~3.4|~4.0" - }, - "suggest": { - "symfony/css-selector": "" + "symfony/http-kernel": "~2.8|~3.0|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\DomCrawler\\": "" + "Symfony\\Component\\Debug\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -4879,57 +4652,44 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony DomCrawler Component", + "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2019-09-28T21:25:05+00:00" + "time": "2018-10-31T09:06:03+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v4.3.5", + "name": "symfony/dom-crawler", + "version": "v3.4.18", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "6229f58993e5a157f6096fc7145c0717d0be8807" + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "c705bee03ade5b47c087807dd9ffaaec8dda2722" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/6229f58993e5a157f6096fc7145c0717d0be8807", - "reference": "6229f58993e5a157f6096fc7145c0717d0be8807", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/c705bee03ade5b47c087807dd9ffaaec8dda2722", + "reference": "c705bee03ade5b47c087807dd9ffaaec8dda2722", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/event-dispatcher-contracts": "^1.1" - }, - "conflict": { - "symfony/dependency-injection": "<3.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "1.1" + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/http-foundation": "^3.4|^4.0", - "symfony/service-contracts": "^1.1", - "symfony/stopwatch": "~3.4|~4.0" + "symfony/css-selector": "~2.8|~3.0|~4.0" }, "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "symfony/css-selector": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" + "Symfony\\Component\\DomCrawler\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -4949,41 +4709,54 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2019-10-01T16:40:32+00:00" + "time": "2018-10-02T12:28:39+00:00" }, { - "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.7", + "name": "symfony/event-dispatcher", + "version": "v3.4.18", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "db9e829c8f34c3d35cf37fcd4cdb4293bc4a2f14" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c43ab685673fb6c8d84220c77897b1d6cdbe1d18", - "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/db9e829c8f34c3d35cf37fcd4cdb4293bc4a2f14", + "reference": "db9e829c8f34c3d35cf37fcd4cdb4293bc4a2f14", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0" }, "suggest": { - "psr/event-dispatcher": "", - "symfony/event-dispatcher-implementation": "" + "symfony/dependency-injection": "", + "symfony/http-kernel": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4991,48 +4764,40 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Generic abstractions related to dispatching event", + "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "time": "2019-09-17T09:54:03+00:00" + "time": "2018-10-30T16:50:50+00:00" }, { "name": "symfony/filesystem", - "version": "v4.3.5", + "version": "v3.4.18", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "9abbb7ef96a51f4d7e69627bc6f63307994e4263" + "reference": "d69930fc337d767607267d57c20a7403d0a822a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/9abbb7ef96a51f4d7e69627bc6f63307994e4263", - "reference": "9abbb7ef96a51f4d7e69627bc6f63307994e4263", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/d69930fc337d767607267d57c20a7403d0a822a4", + "reference": "d69930fc337d767607267d57c20a7403d0a822a4", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": "^5.5.9|>=7.0.8", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -5059,29 +4824,29 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2019-08-20T14:07:54+00:00" + "time": "2018-10-02T12:28:39+00:00" }, { "name": "symfony/finder", - "version": "v4.3.5", + "version": "v3.4.18", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "5e575faa95548d0586f6bedaeabec259714e44d1" + "reference": "54ba444dddc5bd5708a34bd095ea67c6eb54644d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/5e575faa95548d0586f6bedaeabec259714e44d1", - "reference": "5e575faa95548d0586f6bedaeabec259714e44d1", + "url": "https://api.github.com/repos/symfony/finder/zipball/54ba444dddc5bd5708a34bd095ea67c6eb54644d", + "reference": "54ba444dddc5bd5708a34bd095ea67c6eb54644d", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -5108,35 +4873,34 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-09-16T11:29:48+00:00" + "time": "2018-10-03T08:46:40+00:00" }, { "name": "symfony/http-foundation", - "version": "v2.8.50", + "version": "v3.4.18", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "746f8d3638bf46ee8b202e62f2b214c3d61fb06a" + "reference": "5aea7a86ca3203dd7a257e765b4b9c9cfd01c6c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/746f8d3638bf46ee8b202e62f2b214c3d61fb06a", - "reference": "746f8d3638bf46ee8b202e62f2b214c3d61fb06a", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5aea7a86ca3203dd7a257e765b4b9c9cfd01c6c0", + "reference": "5aea7a86ca3203dd7a257e765b4b9c9cfd01c6c0", "shasum": "" }, "require": { - "php": ">=5.3.9", + "php": "^5.5.9|>=7.0.8", "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php54": "~1.0", - "symfony/polyfill-php55": "~1.0" + "symfony/polyfill-php70": "~1.6" }, "require-dev": { - "symfony/expression-language": "~2.4|~3.0.0" + "symfony/expression-language": "~2.8|~3.0|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -5163,20 +4927,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-04-16T10:00:53+00:00" + "time": "2018-10-31T08:57:11+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.12.0", + "version": "v1.11.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "550ebaac289296ce228a706d0867afc34687e3f4" + "reference": "82ebae02209c21113908c229e9883c419720738a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4", - "reference": "550ebaac289296ce228a706d0867afc34687e3f4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", + "reference": "82ebae02209c21113908c229e9883c419720738a", "shasum": "" }, "require": { @@ -5188,7 +4952,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.12-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -5204,13 +4968,13 @@ "MIT" ], "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" + }, + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" } ], "description": "Symfony polyfill for ctype functions", @@ -5221,20 +4985,20 @@ "polyfill", "portable" ], - "time": "2019-08-06T08:03:45+00:00" + "time": "2019-02-06T07:57:58+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.12.0", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17" + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17", - "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", "shasum": "" }, "require": { @@ -5246,7 +5010,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.12-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -5280,148 +5044,35 @@ "portable", "shim" ], - "time": "2019-08-06T08:03:45+00:00" - }, - { - "name": "symfony/polyfill-php54", - "version": "v1.12.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php54.git", - "reference": "a043bcced870214922fbb4bf22679d431ec0296a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/a043bcced870214922fbb4bf22679d431ec0296a", - "reference": "a043bcced870214922fbb4bf22679d431ec0296a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.12-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php54\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 5.4+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2019-08-06T08:03:45+00:00" + "time": "2018-09-21T13:07:52+00:00" }, { - "name": "symfony/polyfill-php55", - "version": "v1.12.0", + "name": "symfony/polyfill-php70", + "version": "v1.10.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php55.git", - "reference": "548bb39407e78e54f785b4e18c7e0d5d9e493265" + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/548bb39407e78e54f785b4e18c7e0d5d9e493265", - "reference": "548bb39407e78e54f785b4e18c7e0d5d9e493265", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/6b88000cdd431cd2e940caa2cb569201f3f84224", + "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224", "shasum": "" }, "require": { - "ircmaxell/password-compat": "~1.0", + "paragonie/random_compat": "~1.0|~2.0|~9.99", "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.12-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php55\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 5.5+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2019-08-06T08:03:45+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.12.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/2ceb49eaccb9352bff54d22570276bb75ba4a188", - "reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.12-dev" + "dev-master": "1.9-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" + "Symfony\\Polyfill\\Php70\\": "" }, "files": [ "bootstrap.php" @@ -5444,7 +5095,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -5452,29 +5103,29 @@ "portable", "shim" ], - "time": "2019-08-06T08:03:45+00:00" + "time": "2018-09-21T06:26:08+00:00" }, { "name": "symfony/process", - "version": "v4.3.5", + "version": "v3.4.18", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "50556892f3cc47d4200bfd1075314139c4c9ff4b" + "reference": "35c2914a9f50519bd207164c353ae4d59182c2cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/50556892f3cc47d4200bfd1075314139c4c9ff4b", - "reference": "50556892f3cc47d4200bfd1075314139c4c9ff4b", + "url": "https://api.github.com/repos/symfony/process/zipball/35c2914a9f50519bd207164c353ae4d59182c2cb", + "reference": "35c2914a9f50519bd207164c353ae4d59182c2cb", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -5501,82 +5152,24 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2019-09-26T21:17:10+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v1.1.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "ffcde9615dc5bb4825b9f6aed07716f1f57faae0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/ffcde9615dc5bb4825b9f6aed07716f1f57faae0", - "reference": "ffcde9615dc5bb4825b9f6aed07716f1f57faae0", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "psr/container": "^1.0" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "time": "2019-09-17T11:12:18+00:00" + "time": "2018-10-14T17:33:21+00:00" }, { "name": "symfony/yaml", - "version": "v4.3.5", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "41e16350a2a1c7383c4735aa2f9fce74cf3d1178" + "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/41e16350a2a1c7383c4735aa2f9fce74cf3d1178", - "reference": "41e16350a2a1c7383c4735aa2f9fce74cf3d1178", + "url": "https://api.github.com/repos/symfony/yaml/zipball/212a27b731e5bfb735679d1ffaac82bd6a1dc996", + "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996", "shasum": "" }, "require": { - "php": "^7.1.3", + "php": "^5.5.9|>=7.0.8", "symfony/polyfill-ctype": "~1.8" }, "conflict": { @@ -5591,7 +5184,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -5618,20 +5211,20 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2019-09-11T15:41:19+00:00" + "time": "2019-03-25T07:48:46+00:00" }, { "name": "theseer/tokenizer", - "version": "1.1.3", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", "shasum": "" }, "require": { @@ -5658,25 +5251,24 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2019-06-13T22:48:21+00:00" + "time": "2017-04-07T12:08:54+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v2.6.1", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5" + "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2a7dcf7e3e02dc5e701004e51a6f304b713107d5", - "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", + "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/polyfill-ctype": "^1.9" + "php": ">=5.3.9" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.0" @@ -5684,7 +5276,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "2.5-dev" } }, "autoload": { @@ -5709,28 +5301,28 @@ "env", "environment" ], - "time": "2019-01-29T11:11:52+00:00" + "time": "2018-07-29T20:33:41+00:00" }, { "name": "webmozart/assert", - "version": "1.5.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4" + "reference": "0df1908962e7a3071564e857d86874dad1ef204a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4", - "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4", + "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0", - "symfony/polyfill-ctype": "^1.8" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" }, "type": "library", "extra": { @@ -5759,7 +5351,7 @@ "check", "validate" ], - "time": "2019-08-24T08:43:50+00:00" + "time": "2018-01-29T19:49:41+00:00" }, { "name": "weew/helpers-array", @@ -5802,16 +5394,16 @@ "packages-dev": [ { "name": "brainmaestro/composer-git-hooks", - "version": "v2.8.2", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/BrainMaestro/composer-git-hooks.git", - "reference": "c4a39fcbd73b8a5da8c02b8e0923b0836cc4fae0" + "reference": "137dd2aec2be494918f8bdfb18f57b55ff20015e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/BrainMaestro/composer-git-hooks/zipball/c4a39fcbd73b8a5da8c02b8e0923b0836cc4fae0", - "reference": "c4a39fcbd73b8a5da8c02b8e0923b0836cc4fae0", + "url": "https://api.github.com/repos/BrainMaestro/composer-git-hooks/zipball/137dd2aec2be494918f8bdfb18f57b55ff20015e", + "reference": "137dd2aec2be494918f8bdfb18f57b55ff20015e", "shasum": "" }, "require": { @@ -5819,9 +5411,8 @@ "symfony/console": "^3.2 || ^4.0" }, "require-dev": { - "ext-json": "*", "friendsofphp/php-cs-fixer": "^2.9", - "phpunit/phpunit": "^5.7 || ^7.0" + "phpunit/phpunit": "^5.7|^7.0" }, "bin": [ "cghooks" @@ -5832,11 +5423,10 @@ "pre-commit": "composer check-style", "pre-push": [ "composer test", - "appver=$(grep -o -E '\\d.\\d.\\d' cghooks)", - "tag=$(git describe --tags --abbrev=0)", - "if [ \"$tag\" != \"v$appver\" ]; then", - "echo \"The most recent tag $tag does not match the application version $appver\\n\"", - "tag=${tag#v}", + "appver=$(grep -o -P '\\d.\\d.\\d' cghooks)", + "tag=$(git tag --sort=-v:refname | head -n 1 | tr -d v)", + "if [ \"$tag\" != \"$appver\" ]; then", + "echo \"The most recent tag v$tag does not match the application version $appver\n\"", "sed -i -E \"s/$appver/$tag/\" cghooks", "exit 1", "fi" @@ -5867,7 +5457,7 @@ "composer", "git" ], - "time": "2019-10-16T14:14:51+00:00" + "time": "2018-12-28T14:57:06+00:00" }, { "name": "codacy/coverage", @@ -5960,33 +5550,33 @@ }, { "name": "gitonomy/gitlib", - "version": "v1.1.0", + "version": "v1.0.4", "source": { "type": "git", "url": "https://github.com/gitonomy/gitlib.git", - "reference": "49e599915eae04b734f31e6e88f773d32d921e2e" + "reference": "932a960221ae3484a3e82553b3be478e56beb68d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/gitonomy/gitlib/zipball/49e599915eae04b734f31e6e88f773d32d921e2e", - "reference": "49e599915eae04b734f31e6e88f773d32d921e2e", + "url": "https://api.github.com/repos/gitonomy/gitlib/zipball/932a960221ae3484a3e82553b3be478e56beb68d", + "reference": "932a960221ae3484a3e82553b3be478e56beb68d", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", - "symfony/process": "^3.4|^4.0" + "php": "^5.3 || ^7.0", + "symfony/process": "^2.3|^3.0|^4.0" }, "require-dev": { - "phpunit/phpunit": "^5.7|^6.5", + "phpunit/phpunit": "^4.8.35|^5.7", "psr/log": "^1.0" }, "suggest": { - "psr/log": "Required to use loggers for reporting of execution" + "psr/log": "Add some log" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -6012,7 +5602,7 @@ ], "description": "Library for accessing git", "homepage": "http://gitonomy.com", - "time": "2019-06-23T09:49:01+00:00" + "time": "2018-04-22T19:55:36+00:00" }, { "name": "goaop/framework", @@ -6433,16 +6023,16 @@ }, { "name": "phpmd/phpmd", - "version": "2.7.0", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/phpmd/phpmd.git", - "reference": "a05a999c644f4bc9a204846017db7bb7809fbe4c" + "reference": "4e9924b2c157a3eb64395460fcf56b31badc8374" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmd/phpmd/zipball/a05a999c644f4bc9a204846017db7bb7809fbe4c", - "reference": "a05a999c644f4bc9a204846017db7bb7809fbe4c", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/4e9924b2c157a3eb64395460fcf56b31badc8374", + "reference": "4e9924b2c157a3eb64395460fcf56b31badc8374", "shasum": "" }, "require": { @@ -6451,15 +6041,13 @@ "php": ">=5.3.9" }, "require-dev": { - "gregwar/rst": "^1.0", - "mikey179/vfsstream": "^1.6.4", - "phpunit/phpunit": "^4.8.36 || ^5.7.27", + "phpunit/phpunit": "^4.0", "squizlabs/php_codesniffer": "^2.0" }, "bin": [ "src/bin/phpmd" ], - "type": "library", + "type": "project", "autoload": { "psr-0": { "PHPMD\\": "src/main/php" @@ -6476,20 +6064,20 @@ "homepage": "https://github.com/manuelpichler", "role": "Project Founder" }, + { + "name": "Other contributors", + "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", + "role": "Contributors" + }, { "name": "Marc Würth", "email": "ravage@bluewin.ch", "homepage": "https://github.com/ravage84", "role": "Project Maintainer" - }, - { - "name": "Other contributors", - "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", - "role": "Contributors" } ], "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", - "homepage": "https://phpmd.org/", + "homepage": "http://phpmd.org/", "keywords": [ "mess detection", "mess detector", @@ -6497,7 +6085,7 @@ "phpmd", "pmd" ], - "time": "2019-07-30T21:13:32+00:00" + "time": "2017-01-20T14:41:10+00:00" }, { "name": "rregeer/phpunit-coverage-check", @@ -6582,22 +6170,21 @@ }, { "name": "sebastian/phpcpd", - "version": "4.1.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpcpd.git", - "reference": "0d9afa762f2400de077b2192f4a9d127de0bb78e" + "reference": "dfed51c1288790fc957c9433e2f49ab152e8a564" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/0d9afa762f2400de077b2192f4a9d127de0bb78e", - "reference": "0d9afa762f2400de077b2192f4a9d127de0bb78e", + "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/dfed51c1288790fc957c9433e2f49ab152e8a564", + "reference": "dfed51c1288790fc957c9433e2f49ab152e8a564", "shasum": "" }, "require": { - "ext-dom": "*", - "php": "^7.1", - "phpunit/php-timer": "^2.0", + "php": "^5.6|^7.0", + "phpunit/php-timer": "^1.0.6", "sebastian/finder-facade": "^1.1", "sebastian/version": "^1.0|^2.0", "symfony/console": "^2.7|^3.0|^4.0" @@ -6608,7 +6195,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -6629,20 +6216,20 @@ ], "description": "Copy/Paste Detector (CPD) for PHP code.", "homepage": "https://github.com/sebastianbergmann/phpcpd", - "time": "2018-09-17T17:17:27+00:00" + "time": "2017-11-16T08:49:28+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.5.1", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "82cd0f854ceca17731d6d019c7098e3755c45060" + "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/82cd0f854ceca17731d6d019c7098e3755c45060", - "reference": "82cd0f854ceca17731d6d019c7098e3755c45060", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/6ad28354c04b364c3c71a34e4a18b629cc3b231e", + "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e", "shasum": "" }, "require": { @@ -6675,41 +6262,41 @@ } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "homepage": "http://www.squizlabs.com/php-codesniffer", "keywords": [ "phpcs", "standards" ], - "time": "2019-10-16T21:14:26+00:00" + "time": "2018-09-23T23:08:17+00:00" }, { "name": "symfony/config", - "version": "v4.3.5", + "version": "v3.4.18", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "0acb26407a9e1a64a275142f0ae5e36436342720" + "reference": "99b2fa8acc244e656cdf324ff419fbe6fd300a4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/0acb26407a9e1a64a275142f0ae5e36436342720", - "reference": "0acb26407a9e1a64a275142f0ae5e36436342720", + "url": "https://api.github.com/repos/symfony/config/zipball/99b2fa8acc244e656cdf324ff419fbe6fd300a4d", + "reference": "99b2fa8acc244e656cdf324ff419fbe6fd300a4d", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/filesystem": "~3.4|~4.0", + "php": "^5.5.9|>=7.0.8", + "symfony/filesystem": "~2.8|~3.0|~4.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<3.4" + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" }, "require-dev": { - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~3.4|~4.0", - "symfony/finder": "~3.4|~4.0", - "symfony/messenger": "~4.1", - "symfony/yaml": "~3.4|~4.0" + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/event-dispatcher": "~3.3|~4.0", + "symfony/finder": "~3.3|~4.0", + "symfony/yaml": "~3.0|~4.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -6717,7 +6304,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -6744,40 +6331,38 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2019-09-19T15:51:53+00:00" + "time": "2018-10-31T09:06:03+00:00" }, { "name": "symfony/dependency-injection", - "version": "v4.3.5", + "version": "v3.4.18", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "e1e0762a814b957a1092bff75a550db49724d05b" + "reference": "9c98452ac7fff4b538956775630bc9701f5384ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/e1e0762a814b957a1092bff75a550db49724d05b", - "reference": "e1e0762a814b957a1092bff75a550db49724d05b", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/9c98452ac7fff4b538956775630bc9701f5384ba", + "reference": "9c98452ac7fff4b538956775630bc9701f5384ba", "shasum": "" }, "require": { - "php": "^7.1.3", - "psr/container": "^1.0", - "symfony/service-contracts": "^1.1.6" + "php": "^5.5.9|>=7.0.8", + "psr/container": "^1.0" }, "conflict": { - "symfony/config": "<4.3", - "symfony/finder": "<3.4", + "symfony/config": "<3.3.7", + "symfony/finder": "<3.3", "symfony/proxy-manager-bridge": "<3.4", "symfony/yaml": "<3.4" }, "provide": { - "psr/container-implementation": "1.0", - "symfony/service-implementation": "1.0" + "psr/container-implementation": "1.0" }, "require-dev": { - "symfony/config": "^4.3", - "symfony/expression-language": "~3.4|~4.0", + "symfony/config": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -6790,7 +6375,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -6817,20 +6402,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2019-10-02T12:58:58+00:00" + "time": "2018-10-31T10:49:51+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.4.32", + "version": "v3.4.18", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "c0c27e38f8accb452f830a4ec8e8ac94b6ec864a" + "reference": "05e52a39de52ba690aebaed462b2bc8a9649f0a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/c0c27e38f8accb452f830a4ec8e8ac94b6ec864a", - "reference": "c0c27e38f8accb452f830a4ec8e8ac94b6ec864a", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/05e52a39de52ba690aebaed462b2bc8a9649f0a4", + "reference": "05e52a39de52ba690aebaed462b2bc8a9649f0a4", "shasum": "" }, "require": { @@ -6866,7 +6451,7 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2019-08-06T13:24:37+00:00" + "time": "2018-10-02T12:28:39+00:00" }, { "name": "theseer/fdomdocument", From 6aee6ff39870db8851c3ffbe72a3768098a0e0ca Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan Date: Wed, 23 Oct 2019 08:56:18 -0500 Subject: [PATCH 47/48] MQE-1833: CHANGELOG.MD and Composer version bump Reworded some items in Changelog. --- CHANGELOG.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e54636819..917e70b44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,18 +4,15 @@ Magento Functional Testing Framework Changelog ----- * Traceability - * Added test's filepath to Allure reports for ease of debugging. - -* Modularity - * Refactored problem methods to reduce cyclomatic complexity. - + * Allure report enhanced to display file path of tests. * Maintainability - * Added support to read MFTF test entities from path of MFTF test packages. + * Added support to read MFTF test entities from `dev/tests/acceptance/tests/functional///*` + * Removed path deprecation warning from `ModuleResolver`. + * Refactored problem methods to reduce cyclomatic complexity. ### Fixes * Added escaping for `magentoCLI` commands. * Fixed issue with builds due to absence of AcceptanceTester class. -* Removed path deprecation warning from ModuleResolver. ### GitHub Issues/Pull requests: * [#348](https://github.com/magento/magento2-functional-testing-framework/pull/348) -- executeInSelenium command fixed to prevent escaping double quotes. From 449f5e4932a408ebcbfc68812d7bdfc67bb113d4 Mon Sep 17 00:00:00 2001 From: Soumya Unnikrishnan Date: Wed, 23 Oct 2019 09:23:51 -0500 Subject: [PATCH 48/48] MQE-1833: CHANGELOG.MD and Composer version bump Updated Changelog. --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 917e70b44..84cc2cfad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,6 @@ Magento Functional Testing Framework Changelog * Refactored problem methods to reduce cyclomatic complexity. ### Fixes -* Added escaping for `magentoCLI` commands. * Fixed issue with builds due to absence of AcceptanceTester class. ### GitHub Issues/Pull requests: