From 0be41fa7e54986e71b70bdd4a66d2f3213428ce0 Mon Sep 17 00:00:00 2001 From: Deltik Date: Tue, 6 Feb 2018 03:18:31 -0600 Subject: [PATCH] Added Codeception --- .gitmodules | 3 + composer.json | 5 + composer.lock | 2459 ++++++++++++ e107 | 1 + vendor/autoload.php | 7 + vendor/behat/gherkin/.gitignore | 4 + vendor/behat/gherkin/.travis.yml | 33 + vendor/behat/gherkin/CHANGES.md | 367 ++ vendor/behat/gherkin/CONTRIBUTING.md | 33 + vendor/behat/gherkin/LICENSE | 22 + vendor/behat/gherkin/README.md | 68 + vendor/behat/gherkin/bin/update_i18n | 70 + vendor/behat/gherkin/composer.json | 47 + vendor/behat/gherkin/i18n.php | 1063 +++++ vendor/behat/gherkin/libpath.php | 3 + vendor/behat/gherkin/package.xml.tpl | 71 + vendor/behat/gherkin/phpdoc.ini.dist | 14 + vendor/behat/gherkin/phpunit.xml.dist | 25 + .../Behat/Gherkin/Cache/CacheInterface.php | 48 + .../src/Behat/Gherkin/Cache/FileCache.php | 109 + .../src/Behat/Gherkin/Cache/MemoryCache.php | 66 + .../Gherkin/Exception/CacheException.php | 22 + .../src/Behat/Gherkin/Exception/Exception.php | 15 + .../Gherkin/Exception/LexerException.php | 17 + .../Behat/Gherkin/Exception/NodeException.php | 17 + .../Gherkin/Exception/ParserException.php | 17 + .../Behat/Gherkin/Filter/ComplexFilter.php | 52 + .../Gherkin/Filter/ComplexFilterInterface.php | 32 + .../Gherkin/Filter/FeatureFilterInterface.php | 39 + .../Behat/Gherkin/Filter/FilterInterface.php | 30 + .../src/Behat/Gherkin/Filter/LineFilter.php | 122 + .../Behat/Gherkin/Filter/LineRangeFilter.php | 134 + .../src/Behat/Gherkin/Filter/NameFilter.php | 68 + .../Behat/Gherkin/Filter/NarrativeFilter.php | 61 + .../src/Behat/Gherkin/Filter/PathsFilter.php | 72 + .../src/Behat/Gherkin/Filter/RoleFilter.php | 63 + .../src/Behat/Gherkin/Filter/SimpleFilter.php | 56 + .../src/Behat/Gherkin/Filter/TagFilter.php | 90 + .../gherkin/src/Behat/Gherkin/Gherkin.php | 142 + .../Behat/Gherkin/Keywords/ArrayKeywords.php | 200 + .../Gherkin/Keywords/CachedArrayKeywords.php | 31 + .../Gherkin/Keywords/CucumberKeywords.php | 121 + .../Behat/Gherkin/Keywords/KeywordsDumper.php | 365 ++ .../Gherkin/Keywords/KeywordsInterface.php | 103 + .../behat/gherkin/src/Behat/Gherkin/Lexer.php | 614 +++ .../Gherkin/Loader/AbstractFileLoader.php | 72 + .../src/Behat/Gherkin/Loader/ArrayLoader.php | 269 ++ .../Behat/Gherkin/Loader/DirectoryLoader.php | 80 + .../Gherkin/Loader/FileLoaderInterface.php | 26 + .../Gherkin/Loader/GherkinFileLoader.php | 102 + .../Behat/Gherkin/Loader/LoaderInterface.php | 39 + .../Behat/Gherkin/Loader/YamlFileLoader.php | 73 + .../Behat/Gherkin/Node/ArgumentInterface.php | 20 + .../src/Behat/Gherkin/Node/BackgroundNode.php | 112 + .../src/Behat/Gherkin/Node/ExampleNode.php | 258 ++ .../Behat/Gherkin/Node/ExampleTableNode.php | 57 + .../src/Behat/Gherkin/Node/FeatureNode.php | 243 ++ .../Gherkin/Node/KeywordNodeInterface.php | 33 + .../src/Behat/Gherkin/Node/NodeInterface.php | 33 + .../src/Behat/Gherkin/Node/OutlineNode.php | 217 + .../src/Behat/Gherkin/Node/PyStringNode.php | 90 + .../Behat/Gherkin/Node/ScenarioInterface.php | 20 + .../Gherkin/Node/ScenarioLikeInterface.php | 20 + .../src/Behat/Gherkin/Node/ScenarioNode.php | 150 + .../Gherkin/Node/StepContainerInterface.php | 33 + .../src/Behat/Gherkin/Node/StepNode.php | 152 + .../src/Behat/Gherkin/Node/TableNode.php | 313 ++ .../Gherkin/Node/TaggedNodeInterface.php | 42 + .../gherkin/src/Behat/Gherkin/Parser.php | 699 ++++ .../Behat/Gherkin/Cache/FileCacheTest.php | 75 + .../Behat/Gherkin/Cache/MemoryCacheTest.php | 51 + .../tests/Behat/Gherkin/Filter/FilterTest.php | 64 + .../Behat/Gherkin/Filter/Fixtures/full/file2 | 0 .../Gherkin/Filter/Fixtures/full_path/file1 | 0 .../Behat/Gherkin/Filter/LineFilterTest.php | 103 + .../Gherkin/Filter/LineRangeFilterTest.php | 101 + .../Behat/Gherkin/Filter/NameFilterTest.php | 79 + .../Gherkin/Filter/NarrativeFilterTest.php | 34 + .../Behat/Gherkin/Filter/PathsFilterTest.php | 48 + .../Behat/Gherkin/Filter/RoleFilterTest.php | 73 + .../Behat/Gherkin/Filter/TagFilterTest.php | 144 + .../Fixtures/directories/phps/some_file.php | 0 .../Gherkin/Fixtures/etalons/addition.yml | 29 + .../Gherkin/Fixtures/etalons/background.yml | 18 + .../Fixtures/etalons/background_title.yml | 26 + .../Gherkin/Fixtures/etalons/big_pystring.yml | 18 + .../Gherkin/Fixtures/etalons/clean_tags.yml | 20 + .../Fixtures/etalons/commented_out.yml | 10 + .../Gherkin/Fixtures/etalons/comments.yml | 21 + .../Fixtures/etalons/complex_descriptions.yml | 26 + .../Behat/Gherkin/Fixtures/etalons/empty.yml | 7 + .../Fixtures/etalons/empty_scenario.yml | 13 + .../empty_scenario_without_linefeed.yml | 13 + .../Fixtures/etalons/empty_scenarios.yml | 30 + .../Gherkin/Fixtures/etalons/fibonacci.yml | 27 + .../Fixtures/etalons/hashes_in_quotes.yml | 29 + .../Gherkin/Fixtures/etalons/issue_13.yml | 49 + .../Gherkin/Fixtures/etalons/ja_addition.yml | 21 + .../Fixtures/etalons/long_title_feature.yml | 13 + .../Fixtures/etalons/multiline_name.yml | 44 + .../etalons/multiline_name_with_newlines.yml | 65 + .../Fixtures/etalons/multiplepystrings.yml | 47 + .../Fixtures/etalons/outline_with_spaces.yml | 33 + .../etalons/outline_with_step_table.yml | 29 + .../Gherkin/Fixtures/etalons/pystring.yml | 22 + .../Gherkin/Fixtures/etalons/ru_addition.yml | 21 + .../Gherkin/Fixtures/etalons/ru_commented.yml | 11 + .../etalons/ru_consecutive_calculations.yml | 34 + .../Gherkin/Fixtures/etalons/ru_division.yml | 27 + .../Fixtures/etalons/start_comments.yml | 18 + .../Behat/Gherkin/Fixtures/etalons/tables.yml | 42 + .../Gherkin/Fixtures/etalons/tags_sample.yml | 35 + .../Gherkin/Fixtures/etalons/test_unit.yml | 18 + .../Gherkin/Fixtures/etalons/trimpystring.yml | 29 + .../etalons/undefined_multiline_args.yml | 38 + .../Fixtures/features/addition.feature | 17 + .../Fixtures/features/background.feature | 7 + .../features/background_title.feature | 13 + .../Fixtures/features/big_pystring.feature | 26 + .../Fixtures/features/clean_tags.feature | 10 + .../Fixtures/features/commented_out.feature | 34 + .../Fixtures/features/comments.feature | 32 + .../features/complex_descriptions.feature | 22 + .../Gherkin/Fixtures/features/empty.feature | 2 + .../Fixtures/features/empty_scenario.feature | 7 + .../empty_scenario_without_linefeed.feature | 7 + .../Fixtures/features/empty_scenarios.feature | 12 + .../Fixtures/features/fibonacci.feature | 19 + .../features/hashes_in_quotes.feature | 17 + .../Fixtures/features/issue_13.feature | 24 + .../Fixtures/features/ja_addition.feature | 11 + .../features/long_title_feature.feature | 4 + .../Fixtures/features/multiline_name.feature | 23 + .../multiline_name_with_newlines.feature | 61 + .../features/multiplepystrings.feature | 25 + .../features/outline_with_spaces.feature | 28 + .../features/outline_with_step_table.feature | 13 + .../Fixtures/features/pystring.feature | 8 + .../Fixtures/features/ru_addition.feature | 11 + .../Fixtures/features/ru_commented.feature | 10 + .../ru_consecutive_calculations.feature | 17 + .../Fixtures/features/ru_division.feature | 16 + .../Fixtures/features/start_comments.feature | 12 + .../Gherkin/Fixtures/features/tables.feature | 20 + .../Fixtures/features/tags_sample.feature | 17 + .../Fixtures/features/test_unit.feature | 9 + .../Fixtures/features/trimpystring.feature | 14 + .../features/undefined_multiline_args.feature | 12 + .../tests/Behat/Gherkin/Fixtures/i18n.yml | 606 +++ .../tests/Behat/Gherkin/GherkinTest.php | 184 + .../Gherkin/Keywords/ArrayKeywordsTest.php | 48 + .../Keywords/CachedArrayKeywordsTest.php | 37 + .../Gherkin/Keywords/CucumberKeywordsTest.php | 34 + .../Gherkin/Keywords/KeywordsDumperTest.php | 270 ++ .../Behat/Gherkin/Keywords/KeywordsTest.php | 139 + .../Behat/Gherkin/Loader/ArrayLoaderTest.php | 379 ++ .../Gherkin/Loader/DirectoryLoaderTest.php | 92 + .../Gherkin/Loader/GherkinFileLoaderTest.php | 111 + .../Gherkin/Loader/YamlFileLoaderTest.php | 67 + .../Behat/Gherkin/Node/ExampleNodeTest.php | 92 + .../Behat/Gherkin/Node/OutlineNodeTest.php | 68 + .../Behat/Gherkin/Node/PyStringNodeTest.php | 27 + .../tests/Behat/Gherkin/Node/StepNodeTest.php | 20 + .../Behat/Gherkin/Node/TableNodeTest.php | 222 ++ .../Behat/Gherkin/ParserExceptionsTest.php | 291 ++ .../tests/Behat/Gherkin/ParserTest.php | 147 + vendor/bin/codecept | 1 + vendor/bin/phpunit | 1 + vendor/codeception/codeception/.gitattributes | 35 + vendor/codeception/codeception/.gitignore | 40 + vendor/codeception/codeception/.travis.yml | 140 + .../codeception/codeception/CHANGELOG-2.0.md | 346 ++ .../codeception/codeception/CHANGELOG-2.1.md | 256 ++ .../codeception/codeception/CHANGELOG-2.2.md | 397 ++ .../codeception/codeception/CHANGELOG-2.3.md | 180 + .../codeception/codeception/CONTRIBUTING.md | 29 + vendor/codeception/codeception/Dockerfile | 54 + .../codeception/codeception/ISSUE_TEMPLATE.md | 26 + vendor/codeception/codeception/LICENSE | 21 + vendor/codeception/codeception/RoboFile.php | 978 +++++ vendor/codeception/codeception/appveyor.yml | 64 + vendor/codeception/codeception/autoload.php | 123 + vendor/codeception/codeception/codecept | 42 + vendor/codeception/codeception/codecept.bat | 11 + .../codeception/codeception/codeception.yml | 46 + vendor/codeception/codeception/composer.json | 77 + .../codeception/docs/01-Introduction.md | 121 + .../codeception/docs/02-GettingStarted.md | 347 ++ .../codeception/docs/03-AcceptanceTests.md | 612 +++ .../codeception/docs/04-FunctionalTests.md | 274 ++ .../codeception/docs/05-UnitTests.md | 473 +++ .../codeception/docs/06-ModulesAndHelpers.md | 518 +++ .../codeception/docs/06-ReusingTestCode.md | 371 ++ .../codeception/docs/07-AdvancedUsage.md | 666 ++++ vendor/codeception/codeception/docs/07-BDD.md | 557 +++ .../codeception/docs/08-Customization.md | 376 ++ .../codeception/codeception/docs/09-Data.md | 279 ++ .../codeception/docs/10-WebServices.md | 284 ++ .../codeception/docs/11-Codecoverage.md | 133 + .../docs/12-ContinuousIntegration.md | 156 + .../codeception/docs/12-ParallelExecution.md | 427 ++ .../codeception/docs/modules/AMQP.md | 193 + .../codeception/docs/modules/AngularJS.md | 1760 +++++++++ .../codeception/docs/modules/Apc.md | 109 + .../codeception/docs/modules/Asserts.md | 300 ++ .../codeception/docs/modules/Cli.md | 68 + .../codeception/docs/modules/DataFactory.md | 146 + .../codeception/docs/modules/Db.md | 318 ++ .../codeception/docs/modules/Doctrine2.md | 184 + .../codeception/docs/modules/FTP.md | 401 ++ .../codeception/docs/modules/Facebook.md | 142 + .../codeception/docs/modules/Filesystem.md | 184 + .../codeception/docs/modules/Laravel5.md | 1785 +++++++++ .../codeception/docs/modules/Lumen.md | 1468 +++++++ .../codeception/docs/modules/Memcache.md | 100 + .../codeception/docs/modules/MongoDb.md | 160 + .../codeception/docs/modules/Phalcon.md | 1416 +++++++ .../codeception/docs/modules/PhpBrowser.md | 1292 ++++++ .../codeception/docs/modules/Queue.md | 282 ++ .../codeception/docs/modules/REST.md | 816 ++++ .../codeception/docs/modules/Redis.md | 276 ++ .../codeception/docs/modules/SOAP.md | 220 ++ .../codeception/docs/modules/Sequence.md | 96 + .../codeception/docs/modules/Silex.md | 1239 ++++++ .../codeception/docs/modules/Symfony.md | 1374 +++++++ .../codeception/docs/modules/WebDriver.md | 1945 +++++++++ .../codeception/docs/modules/XMLRPC.md | 61 + .../codeception/docs/modules/Yii1.md | 1288 ++++++ .../codeception/docs/modules/Yii2.md | 1494 +++++++ .../codeception/docs/modules/ZF1.md | 1258 ++++++ .../codeception/docs/modules/ZF2.md | 1266 ++++++ .../docs/modules/ZendExpressive.md | 1195 ++++++ .../codeception/docs/reference/Autoload.md | 79 + .../codeception/docs/reference/Commands.md | 262 ++ .../docs/reference/Configuration.md | 157 + .../codeception/docs/reference/Fixtures.md | 39 + .../codeception/docs/reference/Functions.md | 19 + .../codeception/docs/reference/HttpCode.md | 35 + .../docs/reference/InitTemplate.md | 215 + .../codeception/docs/reference/JsonType.md | 103 + .../codeception/docs/reference/Locator.md | 304 ++ .../codeception/docs/reference/Mock.md | 413 ++ .../codeception/docs/reference/Module.md | 711 ++++ .../codeception/docs/reference/Stub.md | 328 ++ .../codeception/docs/reference/XmlBuilder.md | 137 + .../codeception/ext/DotReporter.php | 110 + vendor/codeception/codeception/ext/Logger.php | 123 + vendor/codeception/codeception/ext/README.md | 172 + .../codeception/codeception/ext/Recorder.php | 348 ++ .../codeception/codeception/ext/RunFailed.php | 80 + .../codeception/ext/RunProcess.php | 105 + .../codeception/ext/SimpleReporter.php | 61 + vendor/codeception/codeception/nitpick.json | 8 + vendor/codeception/codeception/package/bin | 37 + .../codeception/codeception/package/stub.php | 9 + .../codeception/phpunit5-loggers.php | 589 +++ vendor/codeception/codeception/readme.md | 102 + vendor/codeception/codeception/ruleset.xml | 14 + vendor/codeception/codeception/shim.php | 139 + .../codeception/src/Codeception/Actor.php | 58 + .../src/Codeception/Application.php | 183 + .../codeception/src/Codeception/Codecept.php | 236 ++ .../src/Codeception/Command/Bootstrap.php | 57 + .../src/Codeception/Command/Build.php | 108 + .../src/Codeception/Command/Clean.php | 32 + .../src/Codeception/Command/Completion.php | 84 + .../Command/CompletionFallback.php | 40 + .../Codeception/Command/ConfigValidate.php | 105 + .../src/Codeception/Command/Console.php | 159 + .../src/Codeception/Command/DryRun.php | 134 + .../src/Codeception/Command/GenerateCept.php | 55 + .../src/Codeception/Command/GenerateCest.php | 62 + .../Command/GenerateEnvironment.php | 58 + .../Codeception/Command/GenerateFeature.php | 58 + .../src/Codeception/Command/GenerateGroup.php | 56 + .../Codeception/Command/GenerateHelper.php | 50 + .../Command/GeneratePageObject.php | 75 + .../Codeception/Command/GenerateScenarios.php | 142 + .../Command/GenerateStepObject.php | 75 + .../src/Codeception/Command/GenerateSuite.php | 134 + .../src/Codeception/Command/GenerateTest.php | 60 + .../Codeception/Command/GherkinSnippets.php | 72 + .../src/Codeception/Command/GherkinSteps.php | 71 + .../src/Codeception/Command/Init.php | 55 + .../src/Codeception/Command/Run.php | 558 +++ .../src/Codeception/Command/SelfUpdate.php | 311 ++ .../src/Codeception/Command/Shared/Config.php | 66 + .../Codeception/Command/Shared/FileSystem.php | 54 + .../src/Codeception/Command/Shared/Style.php | 16 + .../src/Codeception/Configuration.php | 741 ++++ .../Coverage/DummyCodeCoverage.php | 13 + .../src/Codeception/Coverage/Filter.php | 175 + .../Codeception/Coverage/Subscriber/Local.php | 47 + .../Coverage/Subscriber/LocalServer.php | 238 ++ .../Coverage/Subscriber/Printer.php | 151 + .../Coverage/Subscriber/RemoteServer.php | 90 + .../Codeception/Coverage/SuiteSubscriber.php | 91 + .../Codeception/CustomCommandInterface.php | 14 + .../src/Codeception/Event/FailEvent.php | 32 + .../Codeception/Event/PrintResultEvent.php | 39 + .../src/Codeception/Event/StepEvent.php | 38 + .../src/Codeception/Event/SuiteEvent.php | 54 + .../src/Codeception/Event/TestEvent.php | 39 + .../codeception/src/Codeception/Events.php | 120 + .../codeception/src/Codeception/Example.php | 105 + .../Exception/ConditionalAssertionFailed.php | 6 + .../Exception/ConfigurationException.php | 6 + .../Exception/ConnectionException.php | 6 + .../Codeception/Exception/ContentNotFound.php | 6 + .../Codeception/Exception/ElementNotFound.php | 13 + .../Exception/ExtensionException.php | 14 + .../Exception/ExternalUrlException.php | 7 + .../src/Codeception/Exception/Fail.php | 7 + .../src/Codeception/Exception/Incomplete.php | 7 + .../Exception/InjectionException.php | 6 + .../Exception/MalformedLocatorException.php | 10 + .../Exception/ModuleConfigException.php | 15 + .../Exception/ModuleConflictException.php | 23 + .../Codeception/Exception/ModuleException.php | 18 + .../Exception/ModuleRequireException.php | 15 + .../Codeception/Exception/ParseException.php | 6 + .../Codeception/Exception/RemoteException.php | 11 + .../src/Codeception/Exception/Skip.php | 7 + .../Exception/TestParseException.php | 17 + .../Exception/TestRuntimeException.php | 6 + .../codeception/src/Codeception/Extension.php | 134 + .../src/Codeception/GroupObject.php | 30 + .../src/Codeception/InitTemplate.php | 249 ++ .../Codeception/Lib/Actor/Shared/Comment.php | 47 + .../Codeception/Lib/Actor/Shared/Friend.php | 29 + .../src/Codeception/Lib/Connector/Guzzle.php | 295 ++ .../src/Codeception/Lib/Connector/Guzzle6.php | 356 ++ .../Codeception/Lib/Connector/Laravel5.php | 356 ++ .../Laravel5/ExceptionHandlerDecorator.php | 106 + .../src/Codeception/Lib/Connector/Lumen.php | 127 + .../Lib/Connector/Lumen/DummyKernel.php | 16 + .../src/Codeception/Lib/Connector/Phalcon.php | 159 + .../Lib/Connector/Phalcon/MemorySession.php | 309 ++ .../Lib/Connector/Shared/LaravelCommon.php | 139 + .../Shared/PhpSuperGlobalsConverter.php | 117 + .../src/Codeception/Lib/Connector/Symfony.php | 86 + .../Codeception/Lib/Connector/Universal.php | 72 + .../src/Codeception/Lib/Connector/Yii1.php | 147 + .../src/Codeception/Lib/Connector/Yii2.php | 287 ++ .../Lib/Connector/Yii2/FixturesStore.php | 35 + .../Codeception/Lib/Connector/Yii2/Logger.php | 33 + .../Lib/Connector/Yii2/TestMailer.php | 32 + .../src/Codeception/Lib/Connector/ZF1.php | 145 + .../src/Codeception/Lib/Connector/ZF2.php | 192 + .../ZF2/PersistentServiceManager.php | 43 + .../Lib/Connector/ZendExpressive.php | 142 + .../ZendExpressive/ResponseCollector.php | 31 + .../src/Codeception/Lib/Console/Colorizer.php | 37 + .../Codeception/Lib/Console/DiffFactory.php | 41 + .../src/Codeception/Lib/Console/Message.php | 122 + .../Lib/Console/MessageFactory.php | 59 + .../src/Codeception/Lib/Console/Output.php | 100 + .../src/Codeception/Lib/DbPopulator.php | 105 + .../codeception/src/Codeception/Lib/Di.php | 161 + .../src/Codeception/Lib/Driver/AmazonSQS.php | 152 + .../src/Codeception/Lib/Driver/Beanstalk.php | 90 + .../src/Codeception/Lib/Driver/Db.php | 364 ++ .../src/Codeception/Lib/Driver/Facebook.php | 176 + .../src/Codeception/Lib/Driver/Iron.php | 106 + .../src/Codeception/Lib/Driver/MongoDb.php | 264 ++ .../src/Codeception/Lib/Driver/MySql.php | 50 + .../src/Codeception/Lib/Driver/Oci.php | 109 + .../src/Codeception/Lib/Driver/PostgreSql.php | 177 + .../src/Codeception/Lib/Driver/SqlSrv.php | 103 + .../src/Codeception/Lib/Driver/Sqlite.php | 89 + .../src/Codeception/Lib/Framework.php | 30 + .../src/Codeception/Lib/Friend.php | 78 + .../src/Codeception/Lib/Generator/Actions.php | 208 + .../src/Codeception/Lib/Generator/Actor.php | 197 + .../src/Codeception/Lib/Generator/Cept.php | 41 + .../src/Codeception/Lib/Generator/Cest.php | 69 + .../src/Codeception/Lib/Generator/Feature.php | 31 + .../Lib/Generator/GherkinSnippets.php | 152 + .../src/Codeception/Lib/Generator/Group.php | 63 + .../src/Codeception/Lib/Generator/Helper.php | 45 + .../Codeception/Lib/Generator/PageObject.php | 94 + .../Lib/Generator/Shared/Classname.php | 11 + .../Codeception/Lib/Generator/StepObject.php | 68 + .../src/Codeception/Lib/Generator/Test.php | 76 + .../src/Codeception/Lib/GroupManager.php | 133 + .../src/Codeception/Lib/InnerBrowser.php | 1907 +++++++++ .../src/Codeception/Lib/Interfaces/API.php | 9 + .../Lib/Interfaces/ActiveRecord.php | 13 + .../Lib/Interfaces/ConflictsWithModule.php | 11 + .../Codeception/Lib/Interfaces/DataMapper.php | 13 + .../src/Codeception/Lib/Interfaces/Db.php | 84 + .../Lib/Interfaces/DependsOnModule.php | 15 + .../Lib/Interfaces/DoctrineProvider.php | 7 + .../Lib/Interfaces/ElementLocator.php | 32 + .../Lib/Interfaces/MultiSession.php | 15 + .../src/Codeception/Lib/Interfaces/ORM.php | 6 + .../Lib/Interfaces/PageSourceSaver.php | 16 + .../Lib/Interfaces/PartedModule.php | 25 + .../src/Codeception/Lib/Interfaces/Queue.php | 52 + .../src/Codeception/Lib/Interfaces/Remote.php | 41 + .../Lib/Interfaces/RequiresPackage.php | 11 + .../Lib/Interfaces/ScreenshotSaver.php | 16 + .../Lib/Interfaces/SessionSnapshot.php | 46 + .../src/Codeception/Lib/Interfaces/Web.php | 983 +++++ .../src/Codeception/Lib/ModuleContainer.php | 504 +++ .../src/Codeception/Lib/Notification.php | 32 + .../src/Codeception/Lib/ParamsLoader.php | 99 + .../src/Codeception/Lib/Parser.php | 212 + .../codeception/src/Codeception/Lib/README.md | 3 + .../Codeception/Lib/Shared/LaravelCommon.php | 122 + .../codeception/src/Codeception/Module.php | 361 ++ .../src/Codeception/Module/AMQP.php | 390 ++ .../src/Codeception/Module/AngularJS.php | 144 + .../src/Codeception/Module/Apc.php | 260 ++ .../src/Codeception/Module/Asserts.php | 472 +++ .../src/Codeception/Module/Cli.php | 117 + .../src/Codeception/Module/DataFactory.php | 262 ++ .../codeception/src/Codeception/Module/Db.php | 617 +++ .../src/Codeception/Module/Doctrine2.php | 529 +++ .../src/Codeception/Module/FTP.php | 883 +++++ .../src/Codeception/Module/Facebook.php | 324 ++ .../src/Codeception/Module/Filesystem.php | 343 ++ .../src/Codeception/Module/Laravel5.php | 1232 ++++++ .../src/Codeception/Module/Lumen.php | 575 +++ .../src/Codeception/Module/Memcache.php | 206 + .../src/Codeception/Module/MongoDb.php | 441 +++ .../src/Codeception/Module/Phalcon.php | 662 ++++ .../src/Codeception/Module/PhpBrowser.php | 290 ++ .../src/Codeception/Module/Queue.php | 402 ++ .../src/Codeception/Module/README.md | 72 + .../src/Codeception/Module/REST.php | 1434 +++++++ .../src/Codeception/Module/Redis.php | 695 ++++ .../src/Codeception/Module/SOAP.php | 512 +++ .../src/Codeception/Module/Sequence.php | 128 + .../src/Codeception/Module/Silex.php | 150 + .../src/Codeception/Module/Symfony.php | 627 +++ .../src/Codeception/Module/WebDriver.php | 3266 +++++++++++++++ .../src/Codeception/Module/XMLRPC.php | 165 + .../src/Codeception/Module/Yii1.php | 265 ++ .../src/Codeception/Module/Yii2.php | 710 ++++ .../src/Codeception/Module/ZF1.php | 266 ++ .../src/Codeception/Module/ZF2.php | 256 ++ .../src/Codeception/Module/ZendExpressive.php | 116 + .../Codeception/PHPUnit/ConsolePrinter.php | 15 + .../PHPUnit/Constraint/Crawler.php | 74 + .../PHPUnit/Constraint/CrawlerNot.php | 40 + .../PHPUnit/Constraint/JsonContains.php | 70 + .../PHPUnit/Constraint/JsonType.php | 64 + .../Codeception/PHPUnit/Constraint/Page.php | 80 + .../PHPUnit/Constraint/WebDriver.php | 79 + .../PHPUnit/Constraint/WebDriverNot.php | 41 + .../src/Codeception/PHPUnit/FilterTest.php | 31 + .../src/Codeception/PHPUnit/Listener.php | 133 + .../src/Codeception/PHPUnit/Log/JUnit.php | 43 + .../Codeception/PHPUnit/Overrides/Filter.php | 117 + .../src/Codeception/PHPUnit/README.md | 4 + .../src/Codeception/PHPUnit/ResultPrinter.php | 83 + .../PHPUnit/ResultPrinter/HTML.php | 286 ++ .../PHPUnit/ResultPrinter/Report.php | 58 + .../Codeception/PHPUnit/ResultPrinter/UI.php | 95 + .../ResultPrinter/template/fail.html.dist | 5 + .../ResultPrinter/template/scenario.html.dist | 22 + .../template/scenario_header.html.dist | 2 + .../template/scenarios.html.dist | 250 ++ .../ResultPrinter/template/step.html.dist | 4 + .../ResultPrinter/template/substeps.html.dist | 12 + .../ResultPrinter/template/suite.html.dist | 5 + .../src/Codeception/PHPUnit/Runner.php | 184 + .../codeception/src/Codeception/README.md | 10 + .../codeception/src/Codeception/Scenario.php | 168 + .../codeception/src/Codeception/Step.php | 327 ++ .../src/Codeception/Step/Action.php | 8 + .../src/Codeception/Step/Assertion.php | 8 + .../src/Codeception/Step/Comment.php | 38 + .../src/Codeception/Step/Condition.php | 8 + .../Codeception/Step/ConditionalAssertion.php | 29 + .../src/Codeception/Step/Executor.php | 25 + .../src/Codeception/Step/Incomplete.php | 18 + .../codeception/src/Codeception/Step/Meta.php | 42 + .../src/Codeception/Step/README.md | 3 + .../codeception/src/Codeception/Step/Skip.php | 18 + .../Codeception/Subscriber/AutoRebuild.php | 66 + .../Subscriber/BeforeAfterTest.php | 52 + .../src/Codeception/Subscriber/Bootstrap.php | 36 + .../src/Codeception/Subscriber/Console.php | 635 +++ .../Codeception/Subscriber/Dependencies.php | 46 + .../Codeception/Subscriber/ErrorHandler.php | 151 + .../Subscriber/ExtensionLoader.php | 128 + .../src/Codeception/Subscriber/FailFast.php | 21 + .../Subscriber/GracefulTermination.php | 52 + .../src/Codeception/Subscriber/Module.php | 94 + .../Codeception/Subscriber/PrepareTest.php | 44 + .../src/Codeception/Subscriber/README.md | 5 + .../Subscriber/Shared/StaticEvents.php | 10 + .../codeception/src/Codeception/Suite.php | 89 + .../src/Codeception/SuiteManager.php | 245 ++ .../src/Codeception/Template/Acceptance.php | 126 + .../src/Codeception/Template/Api.php | 94 + .../src/Codeception/Template/Bootstrap.php | 162 + .../src/Codeception/Template/Unit.php | 92 + .../codeception/src/Codeception/Test/Cept.php | 84 + .../codeception/src/Codeception/Test/Cest.php | 216 + .../src/Codeception/Test/Descriptor.php | 93 + .../Test/Feature/AssertionCounter.php | 22 + .../Codeception/Test/Feature/CodeCoverage.php | 46 + .../Codeception/Test/Feature/ErrorLogger.php | 26 + .../Test/Feature/IgnoreIfMetadataBlocked.php | 37 + .../Test/Feature/MetadataCollector.php | 32 + .../Test/Feature/ScenarioLoader.php | 54 + .../src/Codeception/Test/Gherkin.php | 221 ++ .../Codeception/Test/Interfaces/Dependent.php | 7 + .../Test/Interfaces/Descriptive.php | 9 + .../src/Codeception/Test/Interfaces/Plain.php | 9 + .../Codeception/Test/Interfaces/Reported.php | 12 + .../Test/Interfaces/ScenarioDriven.php | 18 + .../Test/Interfaces/StrictCoverage.php | 10 + .../src/Codeception/Test/Loader.php | 139 + .../src/Codeception/Test/Loader/Cept.php | 29 + .../src/Codeception/Test/Loader/Cest.php | 99 + .../src/Codeception/Test/Loader/Gherkin.php | 198 + .../Test/Loader/LoaderInterface.php | 11 + .../src/Codeception/Test/Loader/Unit.php | 73 + .../src/Codeception/Test/Metadata.php | 245 ++ .../codeception/src/Codeception/Test/Test.php | 136 + .../codeception/src/Codeception/Test/Unit.php | 172 + .../src/Codeception/TestInterface.php | 13 + .../src/Codeception/Util/ActionSequence.php | 125 + .../src/Codeception/Util/Annotation.php | 175 + .../Util/ArrayContainsComparator.php | 148 + .../src/Codeception/Util/Autoload.php | 164 + .../src/Codeception/Util/Debug.php | 50 + .../src/Codeception/Util/FileSystem.php | 90 + .../src/Codeception/Util/Fixtures.php | 44 + .../src/Codeception/Util/HttpCode.php | 162 + .../src/Codeception/Util/JsonArray.php | 130 + .../src/Codeception/Util/JsonType.php | 208 + .../src/Codeception/Util/Locator.php | 400 ++ .../src/Codeception/Util/Maybe.php | 245 ++ .../src/Codeception/Util/PathResolver.php | 127 + .../src/Codeception/Util/PropertyAccess.php | 17 + .../src/Codeception/Util/README.md | 3 + .../src/Codeception/Util/ReflectionHelper.php | 63 + .../src/Codeception/Util/Shared/Asserts.php | 440 +++ .../Codeception/Util/Shared/Namespaces.php | 47 + .../codeception/src/Codeception/Util/Soap.php | 22 + .../codeception/src/Codeception/Util/Stub.php | 33 + .../src/Codeception/Util/Template.php | 79 + .../codeception/src/Codeception/Util/Uri.php | 108 + .../codeception/src/Codeception/Util/Xml.php | 63 + .../src/Codeception/Util/XmlBuilder.php | 177 + .../src/Codeception/Util/XmlStructure.php | 92 + .../codeception/src/Codeception/Util/sq.php | 32 + .../codeception/codeception/tests/README.md | 238 ++ .../codeception/tests/angular.suite.yml | 8 + .../codeception/tests/angular/AngularCest.php | 69 + .../codeception/tests/cli.suite.yml | 7 + .../codeception/tests/cli/AutoRebuildCept.php | 15 + .../codeception/tests/cli/BootstrapCest.php | 82 + .../codeception/tests/cli/BuildCept.php | 13 + .../cli/CodeceptionYmlInTestsDirCest.php | 16 + .../tests/cli/ConfigBundledSuitesCest.php | 36 + .../tests/cli/ConfigNoActorCest.php | 41 + .../tests/cli/ConfigParamsCest.php | 40 + .../tests/cli/ConfigValidateCest.php | 38 + .../DataProviderFailuresAndExceptionsCest.php | 170 + .../codeception/tests/cli/DryRunCest.php | 25 + ...ptionInBeforeDoesNotMakeFatalErrorCept.php | 14 + .../codeception/tests/cli/ExtensionsCest.php | 92 + .../tests/cli/GenerateCeptCept.php | 22 + .../tests/cli/GenerateCestCept.php | 6 + .../tests/cli/GenerateFeatureCept.php | 13 + .../tests/cli/GenerateGroupCept.php | 9 + .../tests/cli/GenerateHelperCept.php | 7 + .../tests/cli/GeneratePageObjectCest.php | 38 + .../tests/cli/GenerateScenariosCept.php | 14 + .../tests/cli/GenerateStepObjectCept.php | 7 + .../tests/cli/GenerateSuiteCest.php | 39 + .../tests/cli/GenerateTestCept.php | 9 + .../codeception/tests/cli/GherkinCest.php | 75 + .../tests/cli/GlobalCommandOptionCest.php | 60 + .../codeception/tests/cli/GroupEventsCept.php | 9 + .../tests/cli/GroupExtensionCept.php | 10 + .../codeception/tests/cli/IncludedCest.php | 167 + .../tests/cli/MixedIncludeCest.php | 28 + .../codeception/tests/cli/OrderCest.php | 117 + .../tests/cli/RegisterCommandCest.php | 35 + .../codeception/tests/cli/RunCest.php | 497 +++ .../tests/cli/RunEnvironmentCest.php | 128 + .../tests/cli/RunIncompleteCept.php | 7 + .../cli/RunSingleTestWithIncludeCest.php | 16 + .../codeception/tests/cli/RunSkippedCept.php | 8 + ...estIsExecutedWhenTheFirstTestFailsCest.php | 25 + .../codeception/tests/cli/UnitCept.php | 19 + .../tests/cli/WildcardIncludeCest.php | 34 + .../codeception/tests/cli/_bootstrap.php | 2 + .../tests/cli/_steps/GeneratorSteps.php | 19 + .../codeception/tests/coverage.suite.yml | 3 + .../codeception/tests/coverage/LocalCept.php | 12 + .../coverage/RemoteServerWithCrap4jCept.php | 7 + .../coverage/RemoteServerWithHtmlCept.php | 6 + .../coverage/RemoteServerWithPHPUnitCept.php | 7 + .../coverage/RemoteServerWithXmlCept.php | 7 + .../tests/coverage/RemoteWithCrap4jCept.php | 8 + .../coverage/RemoteWithEnvironmentXmlCept.php | 9 + .../tests/coverage/RemoteWithHtmlCept.php | 7 + .../tests/coverage/RemoteWithPHPUnitCept.php | 8 + .../tests/coverage/RemoteWithTextCept.php | 7 + .../tests/coverage/RemoteWithXmlCept.php | 8 + .../codeception/tests/coverage/_bootstrap.php | 2 + .../codeception/tests/data/.gitignore | 2 + .../codeception/tests/data/DummyClass.php | 67 + .../tests/data/DummyOverloadableClass.php | 68 + .../tests/data/FailDependenciesCyclic.php | 12 + .../tests/data/FailDependenciesInChain.php | 12 + .../data/FailDependenciesNonExistent.php | 7 + .../data/FailDependenciesPrimitiveParam.php | 12 + .../codeception/tests/data/Invalid.php | 2 + .../tests/data/SimpleAdminGroupCest.php | 13 + .../codeception/tests/data/SimpleCept.php | 3 + .../codeception/tests/data/SimpleCest.php | 18 + .../tests/data/SimpleNamespacedTest.php | 29 + .../codeception/tests/data/SimpleTest.php | 8 + .../SimpleWithDependencyInjectionCest.php | 48 + .../tests/data/SimpleWithNoClassCest.php | 11 + .../codeception/tests/data/app/.htaccess | 4 + .../codeception/tests/data/app/avatar.jpg | Bin 0 -> 5621 bytes .../tests/data/app/controllers.php | 272 ++ .../codeception/tests/data/app/data.php | 42 + .../codeception/tests/data/app/glue.php | 75 + .../tests/data/app/hhvm-server.ini | 8 + .../codeception/tests/data/app/index.php | 54 + .../tests/data/app/view/basehref.php | 23 + .../tests/data/app/view/content_type.php | 6 + .../tests/data/app/view/content_type2.php | 9 + .../tests/data/app/view/cookies.php | 8 + .../tests/data/app/view/external_url.php | 5 + .../tests/data/app/view/facebook.php | 110 + .../tests/data/app/view/form/anchor.php | 21 + .../tests/data/app/view/form/bug1467.php | 21 + .../tests/data/app/view/form/bug1535.php | 13 + .../tests/data/app/view/form/bug1585.php | 13 + .../tests/data/app/view/form/bug1598.php | 7 + .../tests/data/app/view/form/bug1637.php | 10 + .../tests/data/app/view/form/bug2841.php | 10 + .../tests/data/app/view/form/bug2921.php | 9 + .../tests/data/app/view/form/bug3824.php | 15 + .../tests/data/app/view/form/bug3865.php | 4 + .../tests/data/app/view/form/bug3866.php | 14 + .../tests/data/app/view/form/bug3953.php | 17 + .../data/app/view/form/button-not-in-form.php | 7 + .../tests/data/app/view/form/button.php | 8 + .../data/app/view/form/button_in_link.php | 10 + .../tests/data/app/view/form/checkbox.php | 10 + .../data/app/view/form/checkbox_array.php | 10 + .../app/view/form/checkbox_default_value.php | 5 + .../tests/data/app/view/form/click.php | 38 + .../tests/data/app/view/form/complex.php | 44 + .../app/view/form/div_content_editable.php | 6 + .../tests/data/app/view/form/empty.php | 12 + .../tests/data/app/view/form/empty_fill.php | 12 + .../tests/data/app/view/form/example1.php | 32 + .../tests/data/app/view/form/example10.php | 11 + .../tests/data/app/view/form/example11.php | 19 + .../tests/data/app/view/form/example12.php | 13 + .../tests/data/app/view/form/example13.php | 11 + .../tests/data/app/view/form/example14.php | 10 + .../tests/data/app/view/form/example15.php | 23 + .../tests/data/app/view/form/example16.php | 16 + .../tests/data/app/view/form/example17.php | 10 + .../tests/data/app/view/form/example18.php | 60 + .../tests/data/app/view/form/example2.php | 33 + .../tests/data/app/view/form/example3.php | 9 + .../tests/data/app/view/form/example4.php | 88 + .../tests/data/app/view/form/example5.php | 14 + .../tests/data/app/view/form/example6.php | 6 + .../tests/data/app/view/form/example7.php | 5 + .../tests/data/app/view/form/example8.php | 16 + .../tests/data/app/view/form/example9.php | 22 + .../tests/data/app/view/form/field.php | 15 + .../tests/data/app/view/form/field_values.php | 58 + .../tests/data/app/view/form/file.php | 9 + .../data/app/view/form/form_with_buttons.php | 16 + .../tests/data/app/view/form/hidden.php | 8 + .../tests/data/app/view/form/image.php | 8 + .../tests/data/app/view/form/index.php | 14 + .../data/app/view/form/multiple_matches.php | 10 + .../data/app/view/form/names-sq-brackets.php | 40 + .../tests/data/app/view/form/popup.php | 34 + .../tests/data/app/view/form/radio.php | 10 + .../data/app/view/form/relative_siteroot.php | 14 + .../tests/data/app/view/form/select.php | 15 + .../data/app/view/form/select_multiple.php | 15 + .../data/app/view/form/select_second.php | 15 + .../data/app/view/form/select_selectors.php | 12 + .../data/app/view/form/select_two_submits.php | 21 + .../data/app/view/form/strict_selectors.php | 39 + .../app/view/form/submit_adjacentforms.php | 17 + .../app/view/form/submitform_ampersands.php | 13 + .../app/view/form/submitform_multiple.php | 23 + .../tests/data/app/view/form/textarea.php | 11 + .../tests/data/app/view/form/timeout.php | 23 + .../tests/data/app/view/form/unchecked.php | 17 + .../tests/data/app/view/iframe.php | 13 + .../codeception/tests/data/app/view/index.php | 42 + .../codeception/tests/data/app/view/info.php | 57 + .../tests/data/app/view/jserroronload.php | 18 + .../codeception/tests/data/app/view/login.php | 45 + .../tests/data/app/view/minimal.php | 13 + .../tests/data/app/view/redirect2.php | 8 + .../tests/data/app/view/redirect_interval.php | 8 + .../data/app/view/redirect_meta_refresh.php | 8 + .../tests/data/app/view/redirect_params.php | 9 + .../tests/data/app/view/register.php | 14 + .../tests/data/app/view/search.php | 18 + .../tests/data/bundled_suites/BasicTest.php | 15 + .../bundled_suites/_support/UnitTester.php | 26 + .../tests/data/bundled_suites/codeception.yml | 13 + .../codeception/tests/data/claypit/c3.php | 335 ++ .../tests/data/claypit/codeception.yml | 28 + .../claypit/codeception_custom_report.yml | 19 + .../data/claypit/codeception_extended.yml | 21 + .../data/claypit/codeception_grouped.yml | 19 + .../data/claypit/codeception_invalid.yml | 18 + .../data/claypit/codeception_strict_xml.yml | 18 + .../tests/data/claypit/composer.json | 5 + .../tests/data/claypit/src/FooBar/dummy.txt | 0 .../tests/data/claypit/tests/_bootstrap.php | 8 + .../data/claypit/tests/_data/DummyClass.php | 42 + .../tests/_data/MyGroupHighlighter.php | 18 + .../claypit/tests/_data/MyReportPrinter.php | 39 + .../tests/_data/VerbosityLevelOutput.php | 29 + .../tests/data/claypit/tests/_data/dump.sql | 1 + .../data/claypit/tests/_data/groupFileTest1 | 1 + .../data/claypit/tests/_envs/env2.dist.yml | 4 + .../tests/data/claypit/tests/_envs/env2.yml | 4 + .../data/claypit/tests/_envs/subenv/env3.yml | 4 + .../tests/_support/AbsolutelyOtherGuy.php | 27 + .../data/claypit/tests/_support/CodeGuy.php | 27 + .../claypit/tests/_support/CodeHelper.php | 8 + .../data/claypit/tests/_support/DumbGuy.php | 27 + .../claypit/tests/_support/DumbHelper.php | 8 + .../claypit/tests/_support/ExtendedGuy.php | 26 + .../tests/_support/Group/CountEvents.php | 32 + .../tests/_support/Helper/Extended.php | 10 + .../tests/_support/Helper/Scenario.php | 9 + .../claypit/tests/_support/Math/Adder.php | 11 + .../tests/_support/Math/CalcHelper.php | 38 + .../tests/_support/Math/Subtractor.php | 11 + .../claypit/tests/_support/MathTester.php | 27 + .../claypit/tests/_support/MessageGuy.php | 27 + .../claypit/tests/_support/MessageHelper.php | 18 + .../data/claypit/tests/_support/OrderGuy.php | 27 + .../claypit/tests/_support/OrderHelper.php | 66 + .../data/claypit/tests/_support/OtherGuy.php | 27 + .../claypit/tests/_support/OtherHelper.php | 6 + .../tests/_support/Page/Math/Trigonometry.php | 47 + .../data/claypit/tests/_support/PowerGuy.php | 27 + .../claypit/tests/_support/PowerHelper.php | 24 + .../claypit/tests/_support/ScenarioGuy.php | 88 + .../data/claypit/tests/_support/SkipGroup.php | 11 + .../data/claypit/tests/_support/SkipGuy.php | 27 + .../claypit/tests/_support/SkipHelper.php | 8 + .../_support/Step/Order/CanCantSteps.php | 11 + .../claypit/tests/_support/SuiteExtension.php | 40 + .../tests/data/claypit/tests/dummy.suite.yml | 5 + .../data/claypit/tests/dummy/AnotherCest.php | 19 + .../data/claypit/tests/dummy/AnotherTest.php | 13 + .../claypit/tests/dummy/FileExistsCept.php | 6 + .../claypit/tests/dummy/GroupEventsCest.php | 13 + .../data/claypit/tests/dummy/_bootstrap.php | 8 + .../data/claypit/tests/extended.suite.yml | 15 + .../data/claypit/tests/extended/HelloCept.php | 3 + .../claypit/tests/extended/_bootstrap.php | 2 + .../tests/data/claypit/tests/math.suite.yml | 8 + .../data/claypit/tests/math/MathCest.php | 44 + .../data/claypit/tests/math/MathTest.php | 28 + .../data/claypit/tests/math/_bootstrap.php | 2 + .../data/claypit/tests/messages.suite.yml | 28 + .../data/claypit/tests/messages/EmailCept.php | 5 + .../claypit/tests/messages/MessageCest.php | 34 + .../claypit/tests/messages/_bootstrap.php | 2 + .../tests/data/claypit/tests/order.suite.yml | 3 + .../data/claypit/tests/order/AnotherCept.php | 6 + .../tests/order/BeforeAfterClassTest.php | 34 + .../BeforeAfterClassWithDataProviderTest.php | 39 + .../claypit/tests/order/CanCantFailCept.php | 10 + .../claypit/tests/order/CanCantFailCest.php | 20 + .../data/claypit/tests/order/CodeTest.php | 52 + .../claypit/tests/order/Dependent2Cest.php | 13 + .../claypit/tests/order/DependentCest.php | 18 + .../data/claypit/tests/order/FailedCept.php | 7 + .../data/claypit/tests/order/FailedCest.php | 40 + .../claypit/tests/order/LoadingOrderCept.php | 6 + .../claypit/tests/order/ParsedLoadedTest.php | 10 + .../data/claypit/tests/order/ReorderCest.php | 53 + .../data/claypit/tests/order/_bootstrap.php | 2 + .../tests/data/claypit/tests/powers.suite.yml | 15 + .../claypit/tests/powers/MageGuildCest.php | 60 + .../tests/powers/PowerIsRisingCept.php | 4 + .../data/claypit/tests/powers/PowerUpCest.php | 25 + .../data/claypit/tests/powers/_bootstrap.php | 2 + .../tests/data/claypit/tests/remote.suite.yml | 25 + .../data/claypit/tests/remote/DemoCept.php | 8 + .../data/claypit/tests/remote/_bootstrap.php | 2 + .../claypit/tests/remote_server.suite.yml | 24 + .../claypit/tests/remote_server/DemoCept.php | 5 + .../tests/remote_server/_bootstrap.php | 2 + .../data/claypit/tests/scenario.suite.yml | 6 + .../tests/scenario/ConditionalCept.php | 6 + .../tests/scenario/DataProviderCest.php | 80 + .../tests/scenario/DependencyForCest.php | 13 + .../claypit/tests/scenario/ExamplesCest.php | 51 + .../data/claypit/tests/scenario/Fail.feature | 10 + .../claypit/tests/scenario/FailedCept.php | 5 + .../data/claypit/tests/scenario/File.feature | 22 + .../tests/scenario/FileExamples.feature | 15 + .../scenario/InlineArgumentExample.feature | 9 + .../tests/scenario/PartialFailedCest.php | 23 + .../scenario/PyStringArgumentExample.feature | 21 + .../claypit/tests/scenario/SubStepsCept.php | 5 + .../claypit/tests/scenario/SuccessCept.php | 5 + .../tests/scenario/Utf8Example.feature | 9 + .../claypit/tests/scenario/_bootstrap.php | 2 + .../tests/scenario/subfolder/SubFile.feature | 7 + .../data/claypit/tests/skipped.suite.yml | 3 + .../tests/skipped/IncompleteMeCept.php | 5 + .../tests/skipped/NoEnvironmentCept.php | 5 + .../claypit/tests/skipped/SkipByGroupTest.php | 13 + .../data/claypit/tests/skipped/SkipMeCept.php | 4 + .../data/claypit/tests/skipped/_bootstrap.php | 2 + .../tests/data/claypit/tests/unit.suite.yml | 3 + .../claypit/tests/unit/DataProvidersTest.php | 28 + .../data/claypit/tests/unit/Depends2Test.php | 16 + .../data/claypit/tests/unit/DependsTest.php | 38 + .../data/claypit/tests/unit/ErrorTest.php | 36 + .../data/claypit/tests/unit/ExceptionTest.php | 13 + .../data/claypit/tests/unit/FailingTest.php | 10 + .../data/claypit/tests/unit/PassingTest.php | 11 + .../data/claypit/tests/unit/_bootstrap.php | 2 + .../_bootstrap.php | 2 + .../_output/.gitignore | 2 + .../_support/UnitTester.php | 26 + .../_support/_generated/.gitignore | 2 + .../codeception.yml | 8 + .../unit.suite.yml | 8 + .../unit/ExampleCest.php | 9 + .../unit/_bootstrap.php | 2 + .../codeception.yml | 10 + .../tests/_support/UnitTester.php | 26 + .../tests/_support/_generated/.gitignore | 2 + .../tests/unit.suite.yml | 1 + .../tests/unit/DataProvidersExceptionCest.php | 21 + .../tests/unit/DataProvidersFailureCest.php | 23 + .../codeception/tests/data/dump.sql | 1 + .../codeception/tests/data/dumps/mongo.js | 7 + .../codeception/tests/data/dumps/mysql.sql | 101 + .../tests/data/dumps/postgres-hhvm.sql | 473 +++ .../codeception/tests/data/dumps/postgres.sql | 484 +++ .../tests/data/dumps/sqlite-54.sql | 26 + .../codeception/tests/data/dumps/sqlite.sql | 43 + .../data/exception_in_before/codeception.yml | 21 + .../exception_in_before/tests/_bootstrap.php | 2 + .../tests/_support/Helper/Unit.php | 13 + .../tests/_support/UnitTester.php | 34 + .../tests/_support/_generated/.gitignore | 2 + .../exception_in_before/tests/unit.suite.yml | 9 + .../tests/unit/_bootstrap.php | 2 + .../tests/unit/failing.feature | 7 + .../tests/unit/failingCept.php | 4 + .../tests/unit/failingCest.php | 11 + .../tests/unit/failingTest.php | 16 + .../data/first_test_fails/codeception.yml | 21 + .../first_test_fails/tests/_bootstrap.php | 2 + .../first_test_fails/tests/_output/.gitignore | 2 + .../tests/_support/CustomReporter.php | 16 + .../tests/_support/UnitTester.php | 26 + .../tests/_support/_generated/.gitignore | 2 + .../first_test_fails/tests/unit.suite.yml | 8 + .../tests/unit/_bootstrap.php | 2 + .../tests/unit/twoTestsCest.php | 16 + .../codeception/tests/data/group_1 | 1 + .../codeception/tests/data/group_2 | 1 + .../codeception/tests/data/group_3 | 1 + .../tests/data/included/codeception.yml | 8 + .../tests/data/included/jazz/codeception.yml | 24 + .../included/jazz/pianist/codeception.yml | 24 + .../included/jazz/pianist/src/BillEvans.php | 10 + .../jazz/pianist/tests/_data/dump.sql | 1 + .../jazz/pianist/tests/_helpers/TestGuy.php | 27 + .../pianist/tests/_helpers/TestHelper.php | 11 + .../jazz/pianist/tests/functional.suite.yml | 11 + .../pianist/tests/functional/PianistCept.php | 5 + .../jazz/pianist/tests/functional/TestGuy.php | 380 ++ .../pianist/tests/functional/_bootstrap.php | 3 + .../tests/data/included/jazz/src/Musician.php | 10 + .../data/included/jazz/tests/_data/dump.sql | 1 + .../jazz/tests/_helpers/Helper/Unit.php | 10 + .../included/jazz/tests/_helpers/TestGuy.php | 27 + .../jazz/tests/_helpers/TestHelper.php | 11 + .../included/jazz/tests/_helpers/UnitGuy.php | 26 + .../jazz/tests/_helpers/_generated/.gitignore | 1 + .../included/jazz/tests/functional.suite.yml | 11 + .../jazz/tests/functional/DemoCept.php | 5 + .../jazz/tests/functional/TestGuy.php | 380 ++ .../jazz/tests/functional/_bootstrap.php | 3 + .../data/included/jazz/tests/unit.suite.yml | 4 + .../included/jazz/tests/unit/SimpleTest.php | 22 + .../included/jazz/tests/unit/_bootstrap.php | 1 + .../tests/data/included/shire/codeception.yml | 24 + .../tests/data/included/shire/src/Hobbit.php | 10 + .../data/included/shire/tests/_data/dump.sql | 1 + .../included/shire/tests/_helpers/TestGuy.php | 27 + .../shire/tests/_helpers/TestHelper.php | 11 + .../tests/_helpers/_generated/.gitignore | 1 + .../included/shire/tests/functional.suite.yml | 11 + .../shire/tests/functional/HobbitCept.php | 5 + .../shire/tests/functional/TestGuy.php | 380 ++ .../shire/tests/functional/_bootstrap.php | 3 + .../tests/data/included_mix/codeception.yml | 10 + .../src/foo/AcmePack/codeception.yml | 11 + .../src/foo/AcmePack/src/Acme.php | 6 + .../AcmePack/tests/_support/UnitTester.php | 26 + .../src/foo/AcmePack/tests/unit.suite.yml | 8 + .../src/foo/AcmePack/tests/unit/BasicTest.php | 10 + .../foo/AcmePack/tests/unit/_bootstrap.php | 2 + .../data/included_mix/support/NoTester.php | 5 + .../data/included_mix/tests/unit.suite.yml | 1 + .../included_mix/tests/unit/SimpleTest.php | 10 + .../tests/data/included_w/codeception.yml | 7 + .../data/included_w/src/bar/Spam/.gitkeep | 0 .../included_w/src/bar/Spam/codeception.yml | 8 + .../src/bar/Spam/tests/_output/.gitkeep | 0 .../bar/Spam/tests/_support/UnitTester.php | 26 + .../src/bar/Spam/tests/unit.suite.yml | 4 + .../src/bar/Spam/tests/unit/_bootstrap.php | 1 + .../data/included_w/src/bar/SpamPack/.gitkeep | 0 .../src/bar/Sub/EwokPack/codeception.yml | 11 + .../src/bar/Sub/EwokPack/src/Ewok.php | 6 + .../src/bar/Sub/EwokPack/tests/_data/.gitkeep | 0 .../src/bar/Sub/EwokPack/tests/_log/.gitkeep | 0 .../EwokPack/tests/_support/UnitTester.php | 26 + .../src/bar/Sub/EwokPack/tests/unit.suite.yml | 8 + .../bar/Sub/EwokPack/tests/unit/BasicTest.php | 10 + .../Sub/EwokPack/tests/unit/_bootstrap.php | 1 + .../src/bar/ToastPack/codeception.yml | 11 + .../src/bar/ToastPack/src/Toast.php | 6 + .../src/bar/ToastPack/tests/_data/.gitkeep | 0 .../src/bar/ToastPack/tests/_log/.gitkeep | 0 .../ToastPack/tests/_support/UnitTester.php | 26 + .../src/bar/ToastPack/tests/unit.suite.yml | 8 + .../bar/ToastPack/tests/unit/_bootstrap.php | 2 + .../src/foo/AcmePack/codeception.yml | 11 + .../included_w/src/foo/AcmePack/src/Acme.php | 6 + .../src/foo/AcmePack/tests/_data/.gitkeep | 0 .../AcmePack/tests/_support/UnitTester.php | 26 + .../src/foo/AcmePack/tests/unit.suite.yml | 8 + .../src/foo/AcmePack/tests/unit/BasicTest.php | 10 + .../foo/AcmePack/tests/unit/_bootstrap.php | 2 + .../data/no_actor_suites/codeception.yml | 13 + .../data/no_actor_suites/tests/BasicTest.php | 9 + .../no_actor_suites/tests/_support/.gitkeep | 0 .../tests/data/params/codeception.yml | 8 + .../tests/data/params/codeception_dotenv.yml | 9 + .../tests/data/params/codeception_dotenv2.yml | 8 + .../tests/data/params/codeception_self.yml | 15 + .../tests/data/params/codeception_yaml.yml | 9 + .../codeception/tests/data/params/params.env | 2 + .../tests/data/params/params.env.example | 6 + .../codeception/tests/data/params/params.yml | 3 + .../params/tests/_support/DummyTester.php | 26 + .../params/tests/_support/Helper/Dummy.php | 27 + .../tests/_support/_generated/.gitignore | 1 + .../tests/data/params/tests/dummy.suite.yml | 6 + .../data/params/tests/dummy/DummyCept.php | 4 + .../codeception/tests/data/php55Test | 12 + .../codeception/tests/data/php70Test | 15 + .../codeception/tests/data/refund.feature | 10 + .../examples/MyCustomCommand.php | 83 + .../examples/YourCustomCommand.php | 83 + .../register_command/standard/codeception.yml | 13 + .../standard/tests/_autoload.php | 6 + .../standard/tests/_data/.gitkeep | 0 .../standard/tests/_log/.gitkeep | 0 .../standard/tests/_support/.gitkeep | 0 .../tests/data/rest/hhvm-server.ini | 8 + .../codeception/tests/data/rest/index.php | 65 + .../codeception/tests/data/rest/server.php | 30 + .../codeception/tests/data/result.html | 3502 +++++++++++++++++ .../tests/data/services/UserModel.php | 43 + .../tests/data/services/UserService.php | 30 + .../single_test_with_include/_bootstrap.php | 2 + .../_output/.gitignore | 2 + .../_support/UnitTester.php | 26 + .../_support/_generated/.gitignore | 2 + .../single_test_with_include/codeception.yml | 10 + .../single_test_with_include/unit.suite.yml | 8 + .../unit/ExampleCest.php | 9 + .../unit/_bootstrap.php | 2 + .../codeception/tests/data/test_groups | 2 + .../codeception/tests/data/unsetFile.php | 3 + .../tests/data/whitespace_group_test | 4 + .../codeception/tests/data/xml/layout.xml | 4 + .../codeception/tests/docker-compose.yml | 13 + .../codeception/tests/facebook.suite.yml | 5 + .../tests/facebook/FacebookTest.php | 167 + .../codeception/tests/log/.gitignore | 2 + .../codeception/tests/support/AngularGuy.php | 35 + .../codeception/tests/support/CliGuy.php | 30 + .../codeception/tests/support/CliHelper.php | 41 + .../codeception/tests/support/CodeGuy.php | 26 + .../codeception/tests/support/CodeHelper.php | 8 + .../codeception/tests/support/CoverGuy.php | 35 + .../codeception/tests/support/CoverHelper.php | 6 + .../tests/support/EmulateModuleHelper.php | 25 + .../codeception/tests/support/FacebookGuy.php | 26 + .../tests/support/Helper/Angular.php | 10 + .../tests/support/Helper/Shire.php | 6 + .../Module/EmulateModuleHelper.php | 25 + .../codeception/tests/support/TestHelper.php | 9 + .../tests/support/UniversalFramework.php | 17 + .../codeception/tests/support/WebGuy.php | 26 + .../codeception/tests/support/WebHelper.php | 12 + .../codeception/tests/unit.suite.yml | 7 + .../codeception/tests/unit/C3Test.php | 92 + .../unit/Codeception/ApplicationTest.php | 28 + .../Codeception/Command/BaseCommandRunner.php | 97 + .../unit/Codeception/Command/BuildTest.php | 49 + .../Codeception/Command/GenerateCeptTest.php | 54 + .../Codeception/Command/GenerateCestTest.php | 94 + .../Command/GenerateEnvironmentTest.php | 30 + .../Codeception/Command/GenerateGroupTest.php | 42 + .../Command/GeneratePageObjectTest.php | 70 + .../Command/GenerateScenarioTest.php | 107 + .../Command/GenerateStepObjectTest.php | 52 + .../Codeception/Command/GenerateSuiteTest.php | 49 + .../Codeception/Command/GenerateTestTest.php | 57 + .../Command/MyCustomCommandTest.php | 22 + .../Codeception/Command/SelfUpdateTest.php | 46 + .../unit/Codeception/ConfigurationTest.php | 69 + .../Constraints/CrawlerConstraintTest.php | 73 + .../Constraints/CrawlerNotConstraintTest.php | 66 + .../Constraints/WebDriverConstraintTest.php | 90 + .../WebDriverNotConstraintTest.php | 80 + .../Constraints/mocked_webelement.php | 25 + .../unit/Codeception/Coverage/FilterTest.php | 85 + .../Exception/ModuleConfigTest.php | 20 + .../Codeception/Lib/Console/ColorizerTest.php | 48 + .../Lib/Console/DiffFactoryTest.php | 54 + .../Codeception/Lib/Console/MessageTest.php | 33 + .../tests/unit/Codeception/Lib/DiTest.php | 50 + .../unit/Codeception/Lib/Driver/DbTest.php | 34 + .../unit/Codeception/Lib/Driver/MysqlTest.php | 151 + .../Codeception/Lib/Driver/PostgresTest.php | 160 + .../Codeception/Lib/Driver/SqliteTest.php | 129 + .../unit/Codeception/Lib/GroupManagerTest.php | 93 + .../Codeception/Lib/ModuleContainerTest.php | 457 +++ .../tests/unit/Codeception/Lib/ParserTest.php | 178 + .../unit/Codeception/Module/AMQPTest.php | 55 + .../unit/Codeception/Module/AssertsTest.php | 56 + .../Codeception/Module/BeanstalkdTest.php | 50 + .../Codeception/Module/Db/MySqlDbTest.php | 84 + .../Module/Db/Populator/DbPopulatorTest.php | 43 + .../Module/Db/PostgreSqlDbTest.php | 38 + .../Codeception/Module/Db/SqliteDbTest.php | 77 + .../unit/Codeception/Module/Db/TestsForDb.php | 206 + .../tests/unit/Codeception/Module/FTPTest.php | 124 + .../Codeception/Module/FilesystemTest.php | 90 + .../Codeception/Module/FrameworksTest.php | 95 + .../Codeception/Module/MongoDbLegacyTest.php | 148 + .../unit/Codeception/Module/MongoDbTest.php | 170 + .../Codeception/Module/PhpBrowserRestTest.php | 326 ++ .../Codeception/Module/PhpBrowserTest.php | 694 ++++ .../unit/Codeception/Module/RedisTest.php | 1387 +++++++ .../unit/Codeception/Module/RestTest.php | 449 +++ .../unit/Codeception/Module/SFTPTest.php | 113 + .../unit/Codeception/Module/SequenceTest.php | 29 + .../unit/Codeception/Module/SoapTest.php | 143 + .../Codeception/Module/TestsForBrowsers.php | 65 + .../unit/Codeception/Module/TestsForWeb.php | 1702 ++++++++ .../tests/unit/Codeception/ModuleTest.php | 29 + .../tests/unit/Codeception/ScenarioTest.php | 35 + .../Step/ConditionalAssertionTest.php | 12 + .../unit/Codeception/Step/ExecutorTest.php | 30 + .../tests/unit/Codeception/StepTest.php | 117 + .../Subscriber/ErrorHandlerTest.php | 26 + .../unit/Codeception/SuiteManagerTest.php | 125 + .../tests/unit/Codeception/Test/CeptTest.php | 27 + .../tests/unit/Codeception/Test/CestTest.php | 34 + .../unit/Codeception/Test/GherkinTest.php | 252 ++ .../tests/unit/Codeception/Test/UnitTest.php | 14 + .../tests/unit/Codeception/TestLoaderTest.php | 92 + .../unit/Codeception/Util/AnnotationTest.php | 86 + .../Util/ArrayContainsComparatorTest.php | 267 ++ .../unit/Codeception/Util/AutoloadTest.php | 81 + .../unit/Codeception/Util/HttpCodeTest.php | 18 + .../unit/Codeception/Util/JsonArrayTest.php | 96 + .../unit/Codeception/Util/JsonTypeTest.php | 207 + .../unit/Codeception/Util/LocatorTest.php | 110 + .../unit/Codeception/Util/MockAutoload.php | 18 + .../Codeception/Util/PathResolverTest.php | 84 + .../tests/unit/Codeception/Util/StubTest.php | 447 +++ .../unit/Codeception/Util/TemplateTest.php | 32 + .../tests/unit/Codeception/Util/UriTest.php | 114 + .../codeception/tests/unit/_bootstrap.php | 10 + .../codeception/tests/web.suite.yml | 47 + .../tests/web/FriendWithStepsCept.php | 9 + .../codeception/tests/web/FriendsCept.php | 10 + .../tests/web/FriendsLeaveCept.php | 14 + .../tests/web/ReconfigureWebDriverCept.php | 9 + .../codeception/tests/web/WebDriverTest.php | 1098 ++++++ .../codeception/tests/web/_bootstrap.php | 4 + .../tests/web/_steps/RootWatcherSteps.php | 12 + vendor/codeception/codeception/wercker.yml | 55 + vendor/codeception/stub/.gitignore | 3 + vendor/codeception/stub/.travis.yml | 21 + vendor/codeception/stub/Readme.md | 89 + vendor/codeception/stub/RoboFile.php | 42 + vendor/codeception/stub/composer.json | 18 + vendor/codeception/stub/docs/Expected.md | 132 + vendor/codeception/stub/docs/Stub.md | 328 ++ vendor/codeception/stub/docs/StubTrait.md | 250 ++ vendor/codeception/stub/src/Stub.php | 686 ++++ .../stub/src/Stub/ConsecutiveMap.php | 19 + vendor/codeception/stub/src/Stub/Expected.php | 180 + .../stub/src/Stub/StubMarshaler.php | 31 + .../stub/src/Test/Feature/Stub.php | 312 ++ vendor/codeception/stub/src/shim.php | 40 + vendor/codeception/stub/tests/ResetMocks.php | 14 + vendor/codeception/stub/tests/StubTest.php | 427 ++ .../codeception/stub/tests/StubTraitTest.php | 70 + .../stub/tests/_data/DummyClass.php | 67 + .../tests/_data/DummyOverloadableClass.php | 68 + vendor/composer/ClassLoader.php | 445 +++ vendor/composer/LICENSE | 21 + vendor/composer/autoload_classmap.php | 551 +++ vendor/composer/autoload_files.php | 14 + vendor/composer/autoload_namespaces.php | 11 + vendor/composer/autoload_psr4.php | 29 + vendor/composer/autoload_real.php | 70 + vendor/composer/autoload_static.php | 722 ++++ vendor/composer/installed.json | 2533 ++++++++++++ vendor/doctrine/instantiator/CONTRIBUTING.md | 35 + vendor/doctrine/instantiator/LICENSE | 19 + vendor/doctrine/instantiator/README.md | 40 + vendor/doctrine/instantiator/composer.json | 45 + .../Exception/ExceptionInterface.php | 29 + .../Exception/InvalidArgumentException.php | 52 + .../Exception/UnexpectedValueException.php | 66 + .../Doctrine/Instantiator/Instantiator.php | 216 + .../Instantiator/InstantiatorInterface.php | 37 + vendor/facebook/webdriver/.coveralls.yml | 2 + vendor/facebook/webdriver/.php_cs.dist | 78 + vendor/facebook/webdriver/CHANGELOG.md | 79 + vendor/facebook/webdriver/CONTRIBUTING.md | 56 + vendor/facebook/webdriver/ISSUE_TEMPLATE.md | 21 + vendor/facebook/webdriver/LICENCE.md | 201 + vendor/facebook/webdriver/README.md | 114 + vendor/facebook/webdriver/composer.json | 56 + .../webdriver/lib/Chrome/ChromeDriver.php | 95 + .../lib/Chrome/ChromeDriverService.php | 34 + .../webdriver/lib/Chrome/ChromeOptions.php | 175 + vendor/facebook/webdriver/lib/Cookie.php | 241 ++ .../ElementNotSelectableException.php | 20 + .../Exception/ElementNotVisibleException.php | 20 + .../lib/Exception/ExpectedException.php | 20 + .../IMEEngineActivationFailedException.php | 20 + .../Exception/IMENotAvailableException.php | 20 + .../Exception/IndexOutOfBoundsException.php | 7 + .../InvalidCookieDomainException.php | 20 + .../Exception/InvalidCoordinatesException.php | 20 + .../InvalidElementStateException.php | 20 + .../Exception/InvalidSelectorException.php | 20 + .../MoveTargetOutOfBoundsException.php | 20 + .../lib/Exception/NoAlertOpenException.php | 20 + .../lib/Exception/NoCollectionException.php | 7 + .../lib/Exception/NoScriptResultException.php | 20 + .../lib/Exception/NoStringException.php | 7 + .../lib/Exception/NoStringLengthException.php | 20 + .../Exception/NoStringWrapperException.php | 20 + .../Exception/NoSuchCollectionException.php | 20 + .../lib/Exception/NoSuchDocumentException.php | 20 + .../lib/Exception/NoSuchDriverException.php | 20 + .../lib/Exception/NoSuchElementException.php | 20 + .../lib/Exception/NoSuchFrameException.php | 20 + .../lib/Exception/NoSuchWindowException.php | 20 + .../lib/Exception/NullPointerException.php | 20 + .../lib/Exception/ScriptTimeoutException.php | 20 + .../Exception/SessionNotCreatedException.php | 20 + .../StaleElementReferenceException.php | 20 + .../lib/Exception/TimeOutException.php | 20 + .../Exception/UnableToSetCookieException.php | 20 + .../UnexpectedAlertOpenException.php | 20 + .../UnexpectedJavascriptException.php | 20 + .../Exception/UnexpectedTagNameException.php | 36 + .../lib/Exception/UnknownCommandException.php | 20 + .../lib/Exception/UnknownServerException.php | 20 + .../UnrecognizedExceptionException.php | 20 + .../UnsupportedOperationException.php | 20 + .../lib/Exception/WebDriverCurlException.php | 20 + .../lib/Exception/WebDriverException.php | 161 + .../lib/Exception/XPathLookupException.php | 20 + .../webdriver/lib/Firefox/FirefoxDriver.php | 28 + .../lib/Firefox/FirefoxPreferences.php | 36 + .../webdriver/lib/Firefox/FirefoxProfile.php | 302 ++ .../Internal/WebDriverButtonReleaseAction.php | 29 + .../Internal/WebDriverClickAction.php | 26 + .../Internal/WebDriverClickAndHoldAction.php | 29 + .../Internal/WebDriverContextClickAction.php | 29 + .../Internal/WebDriverCoordinates.php | 91 + .../Internal/WebDriverDoubleClickAction.php | 26 + .../Internal/WebDriverKeyDownAction.php | 27 + .../Internal/WebDriverKeyUpAction.php | 27 + .../Internal/WebDriverKeysRelatedAction.php | 61 + .../Internal/WebDriverMouseAction.php | 61 + .../Internal/WebDriverMouseMoveAction.php | 26 + .../Internal/WebDriverMoveToOffsetAction.php | 58 + .../Internal/WebDriverSendKeysAction.php | 51 + .../Internal/WebDriverSingleKeyAction.php | 37 + .../Touch/WebDriverDoubleTapAction.php | 26 + .../Touch/WebDriverDownAction.php | 47 + .../Touch/WebDriverFlickAction.php | 47 + .../Touch/WebDriverFlickFromElementAction.php | 65 + .../Touch/WebDriverLongPressAction.php | 26 + .../Touch/WebDriverMoveAction.php | 41 + .../Touch/WebDriverScrollAction.php | 41 + .../WebDriverScrollFromElementAction.php | 51 + .../Interactions/Touch/WebDriverTapAction.php | 26 + .../Touch/WebDriverTouchAction.php | 55 + .../Touch/WebDriverTouchScreen.php | 127 + .../lib/Interactions/WebDriverActions.php | 282 ++ .../Interactions/WebDriverCompositeAction.php | 62 + .../Interactions/WebDriverTouchActions.php | 193 + .../lib/Internal/WebDriverLocatable.php | 29 + .../webdriver/lib/JavaScriptExecutor.php | 48 + .../facebook/webdriver/lib/Net/URLChecker.php | 85 + .../lib/Remote/DesiredCapabilities.php | 344 ++ .../webdriver/lib/Remote/DriverCommand.php | 152 + .../webdriver/lib/Remote/ExecuteMethod.php | 26 + .../webdriver/lib/Remote/FileDetector.php | 29 + .../lib/Remote/HttpCommandExecutor.php | 337 ++ .../lib/Remote/LocalFileDetector.php | 33 + .../lib/Remote/RemoteExecuteMethod.php | 42 + .../webdriver/lib/Remote/RemoteKeyboard.php | 84 + .../webdriver/lib/Remote/RemoteMouse.php | 144 + .../lib/Remote/RemoteTargetLocator.php | 117 + .../lib/Remote/RemoteTouchScreen.php | 201 + .../webdriver/lib/Remote/RemoteWebDriver.php | 608 +++ .../webdriver/lib/Remote/RemoteWebElement.php | 453 +++ .../Remote/Service/DriverCommandExecutor.php | 68 + .../lib/Remote/Service/DriverService.php | 164 + .../lib/Remote/UselessFileDetector.php | 24 + .../lib/Remote/WebDriverBrowserType.php | 49 + .../lib/Remote/WebDriverCapabilityType.php | 45 + .../webdriver/lib/Remote/WebDriverCommand.php | 62 + .../lib/Remote/WebDriverResponse.php | 97 + .../Support/Events/EventFiringWebDriver.php | 417 ++ .../Events/EventFiringWebDriverNavigation.php | 170 + .../Support/Events/EventFiringWebElement.php | 414 ++ .../webdriver/lib/Support/XPathEscaper.php | 45 + vendor/facebook/webdriver/lib/WebDriver.php | 143 + .../webdriver/lib/WebDriverAction.php | 24 + .../facebook/webdriver/lib/WebDriverAlert.php | 85 + vendor/facebook/webdriver/lib/WebDriverBy.php | 147 + .../webdriver/lib/WebDriverCapabilities.php | 59 + .../lib/WebDriverCommandExecutor.php | 32 + .../webdriver/lib/WebDriverDimension.php | 72 + .../webdriver/lib/WebDriverDispatcher.php | 91 + .../webdriver/lib/WebDriverElement.php | 135 + .../webdriver/lib/WebDriverEventListener.php | 107 + .../lib/WebDriverExpectedCondition.php | 600 +++ .../lib/WebDriverHasInputDevices.php | 32 + .../webdriver/lib/WebDriverKeyboard.php | 45 + .../facebook/webdriver/lib/WebDriverKeys.php | 119 + .../facebook/webdriver/lib/WebDriverMouse.php | 66 + .../webdriver/lib/WebDriverNavigation.php | 89 + .../webdriver/lib/WebDriverOptions.php | 170 + .../webdriver/lib/WebDriverPlatform.php | 37 + .../facebook/webdriver/lib/WebDriverPoint.php | 93 + .../webdriver/lib/WebDriverSearchContext.php | 44 + .../webdriver/lib/WebDriverSelect.php | 258 ++ .../lib/WebDriverSelectInterface.php | 128 + .../webdriver/lib/WebDriverTargetLocator.php | 64 + .../webdriver/lib/WebDriverTimeouts.php | 83 + .../webdriver/lib/WebDriverUpAction.php | 42 + .../facebook/webdriver/lib/WebDriverWait.php | 86 + .../webdriver/lib/WebDriverWindow.php | 162 + vendor/facebook/webdriver/logs/.gitkeep | 0 vendor/guzzlehttp/guzzle/CHANGELOG.md | 1264 ++++++ vendor/guzzlehttp/guzzle/LICENSE | 19 + vendor/guzzlehttp/guzzle/README.md | 89 + vendor/guzzlehttp/guzzle/UPGRADING.md | 1203 ++++++ vendor/guzzlehttp/guzzle/composer.json | 44 + vendor/guzzlehttp/guzzle/src/Client.php | 414 ++ .../guzzlehttp/guzzle/src/ClientInterface.php | 84 + .../guzzle/src/Cookie/CookieJar.php | 314 ++ .../guzzle/src/Cookie/CookieJarInterface.php | 84 + .../guzzle/src/Cookie/FileCookieJar.php | 90 + .../guzzle/src/Cookie/SessionCookieJar.php | 71 + .../guzzle/src/Cookie/SetCookie.php | 404 ++ .../src/Exception/BadResponseException.php | 27 + .../guzzle/src/Exception/ClientException.php | 7 + .../guzzle/src/Exception/ConnectException.php | 37 + .../guzzle/src/Exception/GuzzleException.php | 4 + .../guzzle/src/Exception/RequestException.php | 217 + .../guzzle/src/Exception/SeekException.php | 27 + .../guzzle/src/Exception/ServerException.php | 7 + .../Exception/TooManyRedirectsException.php | 4 + .../src/Exception/TransferException.php | 4 + .../guzzle/src/Handler/CurlFactory.php | 559 +++ .../src/Handler/CurlFactoryInterface.php | 27 + .../guzzle/src/Handler/CurlHandler.php | 45 + .../guzzle/src/Handler/CurlMultiHandler.php | 197 + .../guzzle/src/Handler/EasyHandle.php | 92 + .../guzzle/src/Handler/MockHandler.php | 189 + .../guzzlehttp/guzzle/src/Handler/Proxy.php | 55 + .../guzzle/src/Handler/StreamHandler.php | 533 +++ vendor/guzzlehttp/guzzle/src/HandlerStack.php | 273 ++ .../guzzle/src/MessageFormatter.php | 182 + vendor/guzzlehttp/guzzle/src/Middleware.php | 254 ++ vendor/guzzlehttp/guzzle/src/Pool.php | 123 + .../guzzle/src/PrepareBodyMiddleware.php | 106 + .../guzzle/src/RedirectMiddleware.php | 237 ++ .../guzzlehttp/guzzle/src/RequestOptions.php | 255 ++ .../guzzlehttp/guzzle/src/RetryMiddleware.php | 112 + .../guzzlehttp/guzzle/src/TransferStats.php | 126 + vendor/guzzlehttp/guzzle/src/UriTemplate.php | 241 ++ vendor/guzzlehttp/guzzle/src/functions.php | 331 ++ .../guzzle/src/functions_include.php | 6 + vendor/guzzlehttp/promises/CHANGELOG.md | 65 + vendor/guzzlehttp/promises/LICENSE | 19 + vendor/guzzlehttp/promises/Makefile | 13 + vendor/guzzlehttp/promises/README.md | 504 +++ vendor/guzzlehttp/promises/composer.json | 34 + .../promises/src/AggregateException.php | 16 + .../promises/src/CancellationException.php | 9 + vendor/guzzlehttp/promises/src/Coroutine.php | 151 + .../guzzlehttp/promises/src/EachPromise.php | 229 ++ .../promises/src/FulfilledPromise.php | 82 + vendor/guzzlehttp/promises/src/Promise.php | 280 ++ .../promises/src/PromiseInterface.php | 93 + .../promises/src/PromisorInterface.php | 15 + .../promises/src/RejectedPromise.php | 87 + .../promises/src/RejectionException.php | 47 + vendor/guzzlehttp/promises/src/TaskQueue.php | 66 + .../promises/src/TaskQueueInterface.php | 25 + vendor/guzzlehttp/promises/src/functions.php | 457 +++ .../promises/src/functions_include.php | 6 + vendor/guzzlehttp/psr7/CHANGELOG.md | 110 + vendor/guzzlehttp/psr7/LICENSE | 19 + vendor/guzzlehttp/psr7/README.md | 739 ++++ vendor/guzzlehttp/psr7/composer.json | 39 + vendor/guzzlehttp/psr7/src/AppendStream.php | 233 ++ vendor/guzzlehttp/psr7/src/BufferStream.php | 137 + vendor/guzzlehttp/psr7/src/CachingStream.php | 138 + vendor/guzzlehttp/psr7/src/DroppingStream.php | 42 + vendor/guzzlehttp/psr7/src/FnStream.php | 149 + vendor/guzzlehttp/psr7/src/InflateStream.php | 52 + vendor/guzzlehttp/psr7/src/LazyOpenStream.php | 39 + vendor/guzzlehttp/psr7/src/LimitStream.php | 155 + vendor/guzzlehttp/psr7/src/MessageTrait.php | 183 + .../guzzlehttp/psr7/src/MultipartStream.php | 153 + vendor/guzzlehttp/psr7/src/NoSeekStream.php | 22 + vendor/guzzlehttp/psr7/src/PumpStream.php | 165 + vendor/guzzlehttp/psr7/src/Request.php | 142 + vendor/guzzlehttp/psr7/src/Response.php | 132 + vendor/guzzlehttp/psr7/src/ServerRequest.php | 358 ++ vendor/guzzlehttp/psr7/src/Stream.php | 257 ++ .../psr7/src/StreamDecoratorTrait.php | 149 + vendor/guzzlehttp/psr7/src/StreamWrapper.php | 121 + vendor/guzzlehttp/psr7/src/UploadedFile.php | 316 ++ vendor/guzzlehttp/psr7/src/Uri.php | 702 ++++ vendor/guzzlehttp/psr7/src/UriNormalizer.php | 216 + vendor/guzzlehttp/psr7/src/UriResolver.php | 219 ++ vendor/guzzlehttp/psr7/src/functions.php | 828 ++++ .../guzzlehttp/psr7/src/functions_include.php | 6 + vendor/myclabs/deep-copy/.gitattributes | 7 + vendor/myclabs/deep-copy/.gitignore | 3 + vendor/myclabs/deep-copy/.travis.yml | 40 + vendor/myclabs/deep-copy/LICENSE | 20 + vendor/myclabs/deep-copy/README.md | 372 ++ vendor/myclabs/deep-copy/composer.json | 35 + vendor/myclabs/deep-copy/doc/clone.png | Bin 0 -> 12380 bytes vendor/myclabs/deep-copy/doc/deep-clone.png | Bin 0 -> 14009 bytes vendor/myclabs/deep-copy/doc/deep-copy.png | Bin 0 -> 10895 bytes vendor/myclabs/deep-copy/doc/graph.png | Bin 0 -> 6436 bytes vendor/myclabs/deep-copy/fixtures/f001/A.php | 20 + vendor/myclabs/deep-copy/fixtures/f001/B.php | 20 + vendor/myclabs/deep-copy/fixtures/f002/A.php | 33 + .../myclabs/deep-copy/fixtures/f003/Foo.php | 26 + .../fixtures/f004/UnclonableItem.php | 13 + .../myclabs/deep-copy/fixtures/f005/Foo.php | 13 + vendor/myclabs/deep-copy/fixtures/f006/A.php | 26 + vendor/myclabs/deep-copy/fixtures/f006/B.php | 26 + .../fixtures/f007/FooDateInterval.php | 15 + .../fixtures/f007/FooDateTimeZone.php | 15 + vendor/myclabs/deep-copy/fixtures/f008/A.php | 18 + vendor/myclabs/deep-copy/fixtures/f008/B.php | 7 + .../deep-copy/src/DeepCopy/DeepCopy.php | 281 ++ .../src/DeepCopy/Exception/CloneException.php | 9 + .../DeepCopy/Exception/PropertyException.php | 9 + .../Doctrine/DoctrineCollectionFilter.php | 33 + .../DoctrineEmptyCollectionFilter.php | 28 + .../Filter/Doctrine/DoctrineProxyFilter.php | 22 + .../deep-copy/src/DeepCopy/Filter/Filter.php | 18 + .../src/DeepCopy/Filter/KeepFilter.php | 16 + .../src/DeepCopy/Filter/ReplaceFilter.php | 39 + .../src/DeepCopy/Filter/SetNullFilter.php | 24 + .../Matcher/Doctrine/DoctrineProxyMatcher.php | 22 + .../src/DeepCopy/Matcher/Matcher.php | 14 + .../src/DeepCopy/Matcher/PropertyMatcher.php | 39 + .../DeepCopy/Matcher/PropertyNameMatcher.php | 32 + .../DeepCopy/Matcher/PropertyTypeMatcher.php | 46 + .../DeepCopy/Reflection/ReflectionHelper.php | 78 + .../TypeFilter/Date/DateIntervalFilter.php | 33 + .../src/DeepCopy/TypeFilter/ReplaceFilter.php | 30 + .../DeepCopy/TypeFilter/ShallowCopyFilter.php | 17 + .../TypeFilter/Spl/SplDoublyLinkedList.php | 10 + .../Spl/SplDoublyLinkedListFilter.php | 51 + .../src/DeepCopy/TypeFilter/TypeFilter.php | 13 + .../src/DeepCopy/TypeMatcher/TypeMatcher.php | 29 + .../deep-copy/src/DeepCopy/deep_copy.php | 16 + vendor/phar-io/manifest/.gitignore | 8 + vendor/phar-io/manifest/.php_cs | 67 + vendor/phar-io/manifest/.travis.yml | 33 + vendor/phar-io/manifest/LICENSE | 31 + vendor/phar-io/manifest/README.md | 30 + vendor/phar-io/manifest/build.xml | 50 + vendor/phar-io/manifest/composer.json | 42 + .../phar-io/manifest/examples/example-01.php | 23 + vendor/phar-io/manifest/phive.xml | 4 + vendor/phar-io/manifest/phpunit.xml | 20 + .../manifest/src/ManifestDocumentMapper.php | 193 + .../phar-io/manifest/src/ManifestLoader.php | 66 + .../manifest/src/ManifestSerializer.php | 163 + .../manifest/src/exceptions/Exception.php | 14 + .../InvalidApplicationNameException.php | 16 + .../src/exceptions/InvalidEmailException.php | 14 + .../src/exceptions/InvalidUrlException.php | 14 + .../exceptions/ManifestDocumentException.php | 6 + .../ManifestDocumentMapperException.php | 6 + .../exceptions/ManifestElementException.php | 6 + .../exceptions/ManifestLoaderException.php | 6 + .../manifest/src/values/Application.php | 20 + .../manifest/src/values/ApplicationName.php | 65 + vendor/phar-io/manifest/src/values/Author.php | 57 + .../manifest/src/values/AuthorCollection.php | 43 + .../src/values/AuthorCollectionIterator.php | 56 + .../manifest/src/values/BundledComponent.php | 48 + .../src/values/BundledComponentCollection.php | 43 + .../BundledComponentCollectionIterator.php | 56 + .../src/values/CopyrightInformation.php | 42 + vendor/phar-io/manifest/src/values/Email.php | 47 + .../phar-io/manifest/src/values/Extension.php | 75 + .../phar-io/manifest/src/values/Library.php | 20 + .../phar-io/manifest/src/values/License.php | 42 + .../phar-io/manifest/src/values/Manifest.php | 138 + .../src/values/PhpExtensionRequirement.php | 32 + .../src/values/PhpVersionRequirement.php | 31 + .../manifest/src/values/Requirement.php | 14 + .../src/values/RequirementCollection.php | 43 + .../values/RequirementCollectionIterator.php | 56 + vendor/phar-io/manifest/src/values/Type.php | 60 + vendor/phar-io/manifest/src/values/Url.php | 47 + .../manifest/src/xml/AuthorElement.php | 21 + .../src/xml/AuthorElementCollection.php | 19 + .../manifest/src/xml/BundlesElement.php | 19 + .../manifest/src/xml/ComponentElement.php | 21 + .../src/xml/ComponentElementCollection.php | 19 + .../manifest/src/xml/ContainsElement.php | 31 + .../manifest/src/xml/CopyrightElement.php | 25 + .../manifest/src/xml/ElementCollection.php | 58 + .../phar-io/manifest/src/xml/ExtElement.php | 17 + .../manifest/src/xml/ExtElementCollection.php | 20 + .../manifest/src/xml/ExtensionElement.php | 21 + .../manifest/src/xml/LicenseElement.php | 21 + .../manifest/src/xml/ManifestDocument.php | 118 + .../xml/ManifestDocumentLoadingException.php | 48 + .../manifest/src/xml/ManifestElement.php | 100 + .../phar-io/manifest/src/xml/PhpElement.php | 27 + .../manifest/src/xml/RequiresElement.php | 19 + .../tests/ManifestDocumentMapperTest.php | 110 + .../manifest/tests/ManifestLoaderTest.php | 83 + .../manifest/tests/ManifestSerializerTest.php | 114 + .../manifest/tests/_fixture/custom.xml | 10 + .../_fixture/extension-invalidcompatible.xml | 13 + .../manifest/tests/_fixture/extension.xml | 13 + .../tests/_fixture/invalidversion.xml | 11 + .../_fixture/invalidversionconstraint.xml | 11 + .../manifest/tests/_fixture/library.xml | 11 + .../manifest/tests/_fixture/manifest.xml | 11 + .../manifest/tests/_fixture/phpunit-5.6.5.xml | 46 + .../phar-io/manifest/tests/_fixture/test.phar | Bin 0 -> 7165 bytes .../ManifestDocumentLoadingExceptionTest.php | 19 + .../tests/values/ApplicationNameTest.php | 48 + .../manifest/tests/values/ApplicationTest.php | 44 + .../tests/values/AuthorCollectionTest.php | 62 + .../manifest/tests/values/AuthorTest.php | 45 + .../values/BundledComponentCollectionTest.php | 63 + .../tests/values/BundledComponentTest.php | 42 + .../tests/values/CopyrightInformationTest.php | 62 + .../manifest/tests/values/EmailTest.php | 35 + .../manifest/tests/values/ExtensionTest.php | 109 + .../manifest/tests/values/LibraryTest.php | 44 + .../manifest/tests/values/LicenseTest.php | 41 + .../manifest/tests/values/ManifestTest.php | 187 + .../values/PhpExtensionRequirementTest.php | 26 + .../values/PhpVersionRequirementTest.php | 38 + .../values/RequirementCollectionTest.php | 63 + .../phar-io/manifest/tests/values/UrlTest.php | 35 + .../tests/xml/AuthorElementCollectionTest.php | 18 + .../manifest/tests/xml/AuthorElementTest.php | 25 + .../manifest/tests/xml/BundlesElementTest.php | 41 + .../xml/ComponentElementCollectionTest.php | 18 + .../tests/xml/ComponentElementTest.php | 25 + .../tests/xml/ContainsElementTest.php | 63 + .../tests/xml/CopyrightElementTest.php | 52 + .../tests/xml/ExtElementCollectionTest.php | 19 + .../manifest/tests/xml/ExtElementTest.php | 21 + .../tests/xml/ExtensionElementTest.php | 25 + .../manifest/tests/xml/LicenseElementTest.php | 25 + .../tests/xml/ManifestDocumentTest.php | 110 + .../manifest/tests/xml/PhpElementTest.php | 48 + .../tests/xml/RequiresElementTest.php | 37 + vendor/phar-io/version/.gitignore | 7 + vendor/phar-io/version/.php_cs | 67 + vendor/phar-io/version/.travis.yml | 33 + vendor/phar-io/version/LICENSE | 31 + vendor/phar-io/version/README.md | 16 + vendor/phar-io/version/build.xml | 41 + vendor/phar-io/version/composer.json | 34 + vendor/phar-io/version/phive.xml | 5 + vendor/phar-io/version/phpunit.xml | 19 + .../version/src/AbstractVersionConstraint.php | 32 + .../version/src/AndVersionConstraintGroup.php | 43 + .../version/src/AnyVersionConstraint.php | 29 + .../version/src/ExactVersionConstraint.php | 22 + vendor/phar-io/version/src/Exception.php | 14 + .../GreaterThanOrEqualToVersionConstraint.php | 38 + .../version/src/InvalidVersionException.php | 5 + .../version/src/OrVersionConstraintGroup.php | 43 + .../phar-io/version/src/PreReleaseSuffix.php | 41 + ...SpecificMajorAndMinorVersionConstraint.php | 48 + .../src/SpecificMajorVersionConstraint.php | 37 + .../UnsupportedVersionConstraintException.php | 14 + vendor/phar-io/version/src/Version.php | 162 + .../phar-io/version/src/VersionConstraint.php | 26 + .../version/src/VersionConstraintParser.php | 122 + .../version/src/VersionConstraintValue.php | 123 + vendor/phar-io/version/src/VersionNumber.php | 41 + .../VersionConstraintParserTest.php | 125 + .../Unit/AbstractVersionConstraintTest.php | 25 + .../Unit/AndVersionConstraintGroupTest.php | 52 + .../tests/Unit/AnyVersionConstraintTest.php | 41 + .../tests/Unit/ExactVersionConstraintTest.php | 58 + ...aterThanOrEqualToVersionConstraintTest.php | 47 + .../Unit/OrVersionConstraintGroupTest.php | 65 + ...ificMajorAndMinorVersionConstraintTest.php | 45 + .../SpecificMajorVersionConstraintTest.php | 44 + .../version/tests/Unit/VersionTest.php | 104 + .../reflection-common/.travis.yml | 35 + .../phpdocumentor/reflection-common/LICENSE | 22 + .../phpdocumentor/reflection-common/README.md | 2 + .../reflection-common/composer.json | 29 + .../reflection-common/src/Element.php | 32 + .../reflection-common/src/File.php | 40 + .../reflection-common/src/Fqsen.php | 82 + .../reflection-common/src/Location.php | 57 + .../reflection-common/src/Project.php | 25 + .../reflection-common/src/ProjectFactory.php | 27 + .../reflection-docblock/.coveralls.yml | 3 + .../phpdocumentor/reflection-docblock/LICENSE | 21 + .../reflection-docblock/README.md | 67 + .../reflection-docblock/composer.json | 34 + .../easy-coding-standard.neon | 31 + .../reflection-docblock/src/DocBlock.php | 236 ++ .../src/DocBlock/Description.php | 114 + .../src/DocBlock/DescriptionFactory.php | 191 + .../src/DocBlock/ExampleFinder.php | 170 + .../src/DocBlock/Serializer.php | 155 + .../src/DocBlock/StandardTagFactory.php | 319 ++ .../reflection-docblock/src/DocBlock/Tag.php | 26 + .../src/DocBlock/TagFactory.php | 93 + .../src/DocBlock/Tags/Author.php | 100 + .../src/DocBlock/Tags/BaseTag.php | 52 + .../src/DocBlock/Tags/Covers.php | 83 + .../src/DocBlock/Tags/Deprecated.php | 97 + .../src/DocBlock/Tags/Example.php | 176 + .../DocBlock/Tags/Factory/StaticMethod.php | 18 + .../src/DocBlock/Tags/Factory/Strategy.php | 18 + .../src/DocBlock/Tags/Formatter.php | 27 + .../Tags/Formatter/AlignFormatter.php | 47 + .../Tags/Formatter/PassthroughFormatter.php | 31 + .../src/DocBlock/Tags/Generic.php | 91 + .../src/DocBlock/Tags/Link.php | 77 + .../src/DocBlock/Tags/Method.php | 242 ++ .../src/DocBlock/Tags/Param.php | 141 + .../src/DocBlock/Tags/Property.php | 118 + .../src/DocBlock/Tags/PropertyRead.php | 118 + .../src/DocBlock/Tags/PropertyWrite.php | 118 + .../src/DocBlock/Tags/Reference/Fqsen.php | 42 + .../src/DocBlock/Tags/Reference/Reference.php | 21 + .../src/DocBlock/Tags/Reference/Url.php | 40 + .../src/DocBlock/Tags/Return_.php | 72 + .../src/DocBlock/Tags/See.php | 88 + .../src/DocBlock/Tags/Since.php | 94 + .../src/DocBlock/Tags/Source.php | 97 + .../src/DocBlock/Tags/Throws.php | 72 + .../src/DocBlock/Tags/Uses.php | 83 + .../src/DocBlock/Tags/Var_.php | 118 + .../src/DocBlock/Tags/Version.php | 94 + .../src/DocBlockFactory.php | 277 ++ .../src/DocBlockFactoryInterface.php | 23 + vendor/phpdocumentor/type-resolver/LICENSE | 21 + vendor/phpdocumentor/type-resolver/README.md | 182 + .../phpdocumentor/type-resolver/composer.json | 27 + .../type-resolver/src/FqsenResolver.php | 77 + .../phpdocumentor/type-resolver/src/Type.php | 18 + .../type-resolver/src/TypeResolver.php | 298 ++ .../type-resolver/src/Types/Array_.php | 86 + .../type-resolver/src/Types/Boolean.php | 31 + .../type-resolver/src/Types/Callable_.php | 31 + .../type-resolver/src/Types/Compound.php | 93 + .../type-resolver/src/Types/Context.php | 84 + .../src/Types/ContextFactory.php | 210 + .../type-resolver/src/Types/Float_.php | 31 + .../type-resolver/src/Types/Integer.php | 28 + .../type-resolver/src/Types/Iterable_.php | 31 + .../type-resolver/src/Types/Mixed_.php | 31 + .../type-resolver/src/Types/Null_.php | 31 + .../type-resolver/src/Types/Nullable.php | 56 + .../type-resolver/src/Types/Object_.php | 71 + .../type-resolver/src/Types/Parent_.php | 33 + .../type-resolver/src/Types/Resource_.php | 31 + .../type-resolver/src/Types/Scalar.php | 31 + .../type-resolver/src/Types/Self_.php | 33 + .../type-resolver/src/Types/Static_.php | 38 + .../type-resolver/src/Types/String_.php | 31 + .../type-resolver/src/Types/This.php | 34 + .../type-resolver/src/Types/Void_.php | 34 + vendor/phpspec/prophecy/CHANGES.md | 178 + vendor/phpspec/prophecy/LICENSE | 23 + vendor/phpspec/prophecy/README.md | 391 ++ vendor/phpspec/prophecy/composer.json | 50 + .../prophecy/src/Prophecy/Argument.php | 212 + .../Prophecy/Argument/ArgumentsWildcard.php | 101 + .../Prophecy/Argument/Token/AnyValueToken.php | 52 + .../Argument/Token/AnyValuesToken.php | 52 + .../Argument/Token/ApproximateValueToken.php | 55 + .../Argument/Token/ArrayCountToken.php | 86 + .../Argument/Token/ArrayEntryToken.php | 143 + .../Argument/Token/ArrayEveryEntryToken.php | 82 + .../Prophecy/Argument/Token/CallbackToken.php | 75 + .../Argument/Token/ExactValueToken.php | 116 + .../Argument/Token/IdenticalValueToken.php | 74 + .../Argument/Token/LogicalAndToken.php | 80 + .../Argument/Token/LogicalNotToken.php | 73 + .../Argument/Token/ObjectStateToken.php | 104 + .../Argument/Token/StringContainsToken.php | 67 + .../Argument/Token/TokenInterface.php | 43 + .../src/Prophecy/Argument/Token/TypeToken.php | 76 + .../prophecy/src/Prophecy/Call/Call.php | 127 + .../prophecy/src/Prophecy/Call/CallCenter.php | 171 + .../Prophecy/Comparator/ClosureComparator.php | 42 + .../src/Prophecy/Comparator/Factory.php | 47 + .../Comparator/ProphecyComparator.php | 28 + .../src/Prophecy/Doubler/CachedDoubler.php | 68 + .../ClassPatch/ClassPatchInterface.php | 48 + .../ClassPatch/DisableConstructorPatch.php | 72 + .../Doubler/ClassPatch/HhvmExceptionPatch.php | 63 + .../Doubler/ClassPatch/KeywordPatch.php | 140 + .../Doubler/ClassPatch/MagicCallPatch.php | 89 + .../ClassPatch/ProphecySubjectPatch.php | 104 + .../ReflectionClassNewInstancePatch.php | 57 + .../Doubler/ClassPatch/SplFileInfoPatch.php | 123 + .../Doubler/ClassPatch/TraversablePatch.php | 83 + .../src/Prophecy/Doubler/DoubleInterface.php | 22 + .../prophecy/src/Prophecy/Doubler/Doubler.php | 146 + .../Doubler/Generator/ClassCodeGenerator.php | 145 + .../Doubler/Generator/ClassCreator.php | 67 + .../Doubler/Generator/ClassMirror.php | 258 ++ .../Doubler/Generator/Node/ArgumentNode.php | 102 + .../Doubler/Generator/Node/ClassNode.php | 166 + .../Doubler/Generator/Node/MethodNode.php | 207 + .../Doubler/Generator/ReflectionInterface.php | 22 + .../src/Prophecy/Doubler/LazyDouble.php | 127 + .../src/Prophecy/Doubler/NameGenerator.php | 52 + .../Call/UnexpectedCallException.php | 40 + .../Doubler/ClassCreatorException.php | 31 + .../Doubler/ClassMirrorException.php | 31 + .../Doubler/ClassNotFoundException.php | 33 + .../Exception/Doubler/DoubleException.php | 18 + .../Exception/Doubler/DoublerException.php | 18 + .../Doubler/InterfaceNotFoundException.php | 20 + .../Doubler/MethodNotExtendableException.php | 41 + .../Doubler/MethodNotFoundException.php | 60 + .../Doubler/ReturnByReferenceException.php | 41 + .../src/Prophecy/Exception/Exception.php | 26 + .../Exception/InvalidArgumentException.php | 16 + .../Prediction/AggregateException.php | 50 + .../Prediction/FailedPredictionException.php | 24 + .../Exception/Prediction/NoCallsException.php | 18 + .../Prediction/PredictionException.php | 18 + .../UnexpectedCallsCountException.php | 31 + .../Prediction/UnexpectedCallsException.php | 32 + .../Prophecy/MethodProphecyException.php | 34 + .../Prophecy/ObjectProphecyException.php | 34 + .../Exception/Prophecy/ProphecyException.php | 18 + .../ClassAndInterfaceTagRetriever.php | 69 + .../PhpDocumentor/ClassTagRetriever.php | 52 + .../PhpDocumentor/LegacyClassTagRetriever.php | 35 + .../MethodTagRetrieverInterface.php | 30 + .../Prophecy/Prediction/CallPrediction.php | 86 + .../Prediction/CallTimesPrediction.php | 107 + .../Prediction/CallbackPrediction.php | 65 + .../Prophecy/Prediction/NoCallsPrediction.php | 68 + .../Prediction/PredictionInterface.php | 37 + .../src/Prophecy/Promise/CallbackPromise.php | 66 + .../src/Prophecy/Promise/PromiseInterface.php | 35 + .../Promise/ReturnArgumentPromise.php | 61 + .../src/Prophecy/Promise/ReturnPromise.php | 55 + .../src/Prophecy/Promise/ThrowPromise.php | 99 + .../src/Prophecy/Prophecy/MethodProphecy.php | 464 +++ .../src/Prophecy/Prophecy/ObjectProphecy.php | 281 ++ .../Prophecy/Prophecy/ProphecyInterface.php | 27 + .../Prophecy/ProphecySubjectInterface.php | 34 + .../src/Prophecy/Prophecy/Revealer.php | 44 + .../Prophecy/Prophecy/RevealerInterface.php | 29 + .../phpspec/prophecy/src/Prophecy/Prophet.php | 134 + .../prophecy/src/Prophecy/Util/ExportUtil.php | 212 + .../prophecy/src/Prophecy/Util/StringUtil.php | 89 + .../phpunit/php-code-coverage/.gitattributes | 1 + .../php-code-coverage/.github/CONTRIBUTING.md | 1 + .../.github/ISSUE_TEMPLATE.md | 18 + vendor/phpunit/php-code-coverage/.gitignore | 6 + vendor/phpunit/php-code-coverage/.php_cs | 87 + vendor/phpunit/php-code-coverage/.travis.yml | 40 + .../php-code-coverage/ChangeLog-2.2.md | 56 + .../php-code-coverage/ChangeLog-3.0.md | 31 + .../php-code-coverage/ChangeLog-3.1.md | 30 + .../php-code-coverage/ChangeLog-3.2.md | 23 + .../php-code-coverage/ChangeLog-3.3.md | 33 + .../php-code-coverage/ChangeLog-4.0.md | 67 + .../php-code-coverage/ChangeLog-5.0.md | 45 + .../php-code-coverage/ChangeLog-5.1.md | 19 + .../php-code-coverage/ChangeLog-5.2.md | 44 + .../php-code-coverage/ChangeLog-5.3.md | 16 + vendor/phpunit/php-code-coverage/LICENSE | 33 + vendor/phpunit/php-code-coverage/README.md | 40 + vendor/phpunit/php-code-coverage/build.xml | 19 + .../phpunit/php-code-coverage/composer.json | 55 + vendor/phpunit/php-code-coverage/phpunit.xml | 21 + .../php-code-coverage/src/CodeCoverage.php | 1184 ++++++ .../php-code-coverage/src/Driver/Driver.php | 52 + .../php-code-coverage/src/Driver/HHVM.php | 29 + .../php-code-coverage/src/Driver/PHPDBG.php | 111 + .../php-code-coverage/src/Driver/Xdebug.php | 117 + .../CoveredCodeNotExecutedException.php | 18 + .../src/Exception/Exception.php | 18 + .../Exception/InvalidArgumentException.php | 37 + .../MissingCoversAnnotationException.php | 18 + .../src/Exception/RuntimeException.php | 15 + .../UnintentionallyCoveredCodeException.php | 54 + .../phpunit/php-code-coverage/src/Filter.php | 173 + .../src/Node/AbstractNode.php | 404 ++ .../php-code-coverage/src/Node/Builder.php | 245 ++ .../php-code-coverage/src/Node/Directory.php | 483 +++ .../php-code-coverage/src/Node/File.php | 744 ++++ .../php-code-coverage/src/Node/Iterator.php | 103 + .../php-code-coverage/src/Report/Clover.php | 251 ++ .../php-code-coverage/src/Report/Crap4j.php | 172 + .../src/Report/Html/Facade.php | 190 + .../src/Report/Html/Renderer.php | 296 ++ .../src/Report/Html/Renderer/Dashboard.php | 304 ++ .../src/Report/Html/Renderer/Directory.php | 101 + .../src/Report/Html/Renderer/File.php | 561 +++ .../Renderer/Template/coverage_bar.html.dist | 5 + .../Renderer/Template/css/bootstrap.min.css | 6 + .../Html/Renderer/Template/css/nv.d3.min.css | 1 + .../Html/Renderer/Template/css/style.css | 122 + .../Renderer/Template/dashboard.html.dist | 284 ++ .../Renderer/Template/directory.html.dist | 61 + .../Template/directory_item.html.dist | 13 + .../Html/Renderer/Template/file.html.dist | 68 + .../Renderer/Template/file_item.html.dist | 14 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 ++ .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes .../Renderer/Template/js/bootstrap.min.js | 7 + .../Html/Renderer/Template/js/d3.min.js | 5 + .../Report/Html/Renderer/Template/js/file.js | 61 + .../Html/Renderer/Template/js/holder.min.js | 12 + .../Renderer/Template/js/html5shiv.min.js | 326 ++ .../Html/Renderer/Template/js/jquery.min.js | 4 + .../Html/Renderer/Template/js/nv.d3.min.js | 8 + .../Html/Renderer/Template/js/respond.min.js | 5 + .../Renderer/Template/method_item.html.dist | 11 + .../php-code-coverage/src/Report/PHP.php | 51 + .../php-code-coverage/src/Report/Text.php | 257 ++ .../src/Report/Xml/BuildInformation.php | 101 + .../src/Report/Xml/Coverage.php | 67 + .../src/Report/Xml/Directory.php | 15 + .../src/Report/Xml/Facade.php | 283 ++ .../php-code-coverage/src/Report/Xml/File.php | 88 + .../src/Report/Xml/Method.php | 57 + .../php-code-coverage/src/Report/Xml/Node.php | 88 + .../src/Report/Xml/Project.php | 95 + .../src/Report/Xml/Report.php | 92 + .../src/Report/Xml/Source.php | 45 + .../src/Report/Xml/Tests.php | 46 + .../src/Report/Xml/Totals.php | 141 + .../php-code-coverage/src/Report/Xml/Unit.php | 96 + vendor/phpunit/php-code-coverage/src/Util.php | 46 + .../phpunit/php-code-coverage/src/Version.php | 31 + .../php-code-coverage/tests/TestCase.php | 343 ++ .../tests/_files/BankAccount-clover.xml | 26 + .../tests/_files/BankAccount-crap4j.xml | 59 + .../tests/_files/BankAccount-text.txt | 12 + .../tests/_files/BankAccount.php | 33 + .../tests/_files/BankAccountTest.php | 68 + .../_files/CoverageClassExtendedTest.php | 14 + .../tests/_files/CoverageClassTest.php | 14 + .../CoverageFunctionParenthesesTest.php | 13 + ...erageFunctionParenthesesWhitespaceTest.php | 13 + .../tests/_files/CoverageFunctionTest.php | 13 + .../CoverageMethodOneLineAnnotationTest.php | 12 + .../_files/CoverageMethodParenthesesTest.php | 14 + ...overageMethodParenthesesWhitespaceTest.php | 14 + .../tests/_files/CoverageMethodTest.php | 14 + .../tests/_files/CoverageNoneTest.php | 11 + .../tests/_files/CoverageNotPrivateTest.php | 14 + .../tests/_files/CoverageNotProtectedTest.php | 14 + .../tests/_files/CoverageNotPublicTest.php | 14 + .../tests/_files/CoverageNothingTest.php | 15 + .../tests/_files/CoveragePrivateTest.php | 14 + .../tests/_files/CoverageProtectedTest.php | 14 + .../tests/_files/CoveragePublicTest.php | 14 + .../CoverageTwoDefaultClassAnnotations.php | 17 + .../tests/_files/CoveredClass.php | 36 + .../tests/_files/CoveredFunction.php | 4 + .../NamespaceCoverageClassExtendedTest.php | 14 + .../_files/NamespaceCoverageClassTest.php | 14 + ...NamespaceCoverageCoversClassPublicTest.php | 17 + .../NamespaceCoverageCoversClassTest.php | 22 + .../_files/NamespaceCoverageMethodTest.php | 14 + .../NamespaceCoverageNotPrivateTest.php | 14 + .../NamespaceCoverageNotProtectedTest.php | 14 + .../_files/NamespaceCoverageNotPublicTest.php | 14 + .../_files/NamespaceCoveragePrivateTest.php | 14 + .../_files/NamespaceCoverageProtectedTest.php | 14 + .../_files/NamespaceCoveragePublicTest.php | 14 + .../tests/_files/NamespaceCoveredClass.php | 38 + .../_files/NotExistingCoveredElementTest.php | 26 + .../BankAccount.php.html | 245 ++ .../CoverageForBankAccount/dashboard.html | 290 ++ .../HTML/CoverageForBankAccount/index.html | 119 + .../dashboard.html | 288 ++ .../index.html | 119 + ...with_class_and_anonymous_function.php.html | 189 + .../dashboard.html | 286 ++ .../index.html | 109 + .../source_with_ignore.php.html | 217 + .../BankAccount.php.xml | 262 ++ .../XML/CoverageForBankAccount/index.xml | 33 + .../index.xml | 30 + ..._with_class_and_anonymous_function.php.xml | 162 + .../CoverageForFileWithIgnoredLines/index.xml | 30 + .../source_with_ignore.php.xml | 187 + .../class-with-anonymous-function-clover.xml | 22 + .../class-with-anonymous-function-crap4j.xml | 37 + .../class-with-anonymous-function-text.txt | 12 + .../tests/_files/ignored-lines-clover.xml | 17 + .../tests/_files/ignored-lines-crap4j.xml | 37 + .../tests/_files/ignored-lines-text.txt | 10 + ...urce_with_class_and_anonymous_function.php | 19 + .../tests/_files/source_with_ignore.php | 37 + .../tests/_files/source_with_namespace.php | 20 + .../source_with_oneline_annotations.php | 36 + .../tests/_files/source_without_ignore.php | 4 + .../tests/_files/source_without_namespace.php | 18 + .../php-code-coverage/tests/bootstrap.php | 5 + .../tests/tests/BuilderTest.php | 212 + .../tests/tests/CloverTest.php | 49 + .../tests/tests/CodeCoverageTest.php | 560 +++ .../tests/tests/Crap4jTest.php | 49 + .../tests/tests/FilterTest.php | 196 + .../tests/tests/HTMLTest.php | 103 + .../tests/tests/TextTest.php | 49 + .../tests/tests/UtilTest.php | 29 + .../php-code-coverage/tests/tests/XMLTest.php | 98 + .../phpunit/php-file-iterator/.gitattributes | 1 + vendor/phpunit/php-file-iterator/.gitignore | 7 + vendor/phpunit/php-file-iterator/ChangeLog.md | 41 + vendor/phpunit/php-file-iterator/LICENSE | 33 + vendor/phpunit/php-file-iterator/README.md | 12 + .../phpunit/php-file-iterator/composer.json | 36 + .../phpunit/php-file-iterator/src/Facade.php | 123 + .../phpunit/php-file-iterator/src/Factory.php | 91 + .../php-file-iterator/src/Iterator.php | 158 + .../phpunit/php-text-template/.gitattributes | 1 + vendor/phpunit/php-text-template/.gitignore | 5 + vendor/phpunit/php-text-template/LICENSE | 33 + vendor/phpunit/php-text-template/README.md | 14 + .../phpunit/php-text-template/composer.json | 29 + .../php-text-template/src/Template.php | 135 + vendor/phpunit/php-timer/.gitattributes | 1 + vendor/phpunit/php-timer/.gitignore | 4 + vendor/phpunit/php-timer/.travis.yml | 27 + vendor/phpunit/php-timer/LICENSE | 33 + vendor/phpunit/php-timer/README.md | 45 + vendor/phpunit/php-timer/composer.json | 37 + vendor/phpunit/php-timer/phpunit.xml | 19 + vendor/phpunit/php-timer/src/Timer.php | 105 + vendor/phpunit/php-timer/tests/TimerTest.php | 98 + .../phpunit/php-token-stream/.gitattributes | 1 + vendor/phpunit/php-token-stream/.gitignore | 3 + vendor/phpunit/php-token-stream/.travis.yml | 26 + vendor/phpunit/php-token-stream/ChangeLog.md | 19 + vendor/phpunit/php-token-stream/LICENSE | 33 + vendor/phpunit/php-token-stream/README.md | 14 + vendor/phpunit/php-token-stream/build.xml | 21 + vendor/phpunit/php-token-stream/composer.json | 38 + vendor/phpunit/php-token-stream/phpunit.xml | 17 + vendor/phpunit/php-token-stream/src/Token.php | 1460 +++++++ .../php-token-stream/src/Token/Stream.php | 607 +++ .../src/Token/Stream/CachingFactory.php | 46 + .../tests/Token/ClassTest.php | 169 + .../tests/Token/ClosureTest.php | 78 + .../tests/Token/FunctionTest.php | 139 + .../tests/Token/IncludeTest.php | 65 + .../tests/Token/InterfaceTest.php | 195 + .../tests/Token/NamespaceTest.php | 69 + .../php-token-stream/tests/TokenTest.php | 32 + .../_fixture/classExtendsNamespacedClass.php | 10 + .../tests/_fixture/classInNamespace.php | 6 + .../tests/_fixture/classInScopedNamespace.php | 9 + .../_fixture/classUsesNamespacedFunction.php | 8 + .../class_with_method_named_empty.php | 7 + ...h_method_that_declares_anonymous_class.php | 15 + ..._method_that_declares_anonymous_class2.php | 16 + ...ltiple_anonymous_classes_and_functions.php | 26 + .../tests/_fixture/closure.php | 7 + .../tests/_fixture/issue19.php | 3 + .../tests/_fixture/issue30.php | 8 + ...tipleNamespacesWithOneClassUsingBraces.php | 12 + ...espacesWithOneClassUsingNonBraceSyntax.php | 14 + .../_fixture/php-code-coverage-issue-424.php | 13 + .../tests/_fixture/source.php | 36 + .../tests/_fixture/source2.php | 6 + .../tests/_fixture/source3.php | 14 + .../tests/_fixture/source4.php | 30 + .../tests/_fixture/source5.php | 5 + .../php-token-stream/tests/bootstrap.php | 15 + .../phpunit-mock-objects/.gitattributes | 1 + .../.github/ISSUE_TEMPLATE.md | 15 + .../phpunit/phpunit-mock-objects/.gitignore | 4 + vendor/phpunit/phpunit-mock-objects/.php_cs | 87 + .../phpunit/phpunit-mock-objects/.travis.yml | 34 + .../phpunit-mock-objects/CONTRIBUTING.md | 1 + vendor/phpunit/phpunit-mock-objects/LICENSE | 33 + vendor/phpunit/phpunit-mock-objects/README.md | 7 + vendor/phpunit/phpunit-mock-objects/build.xml | 19 + .../phpunit-mock-objects/composer.json | 57 + .../phpunit/phpunit-mock-objects/phpunit.xml | 28 + .../src/Builder/Identity.php | 30 + .../src/Builder/InvocationMocker.php | 299 ++ .../src/Builder/Match.php | 26 + .../src/Builder/MethodNameMatch.php | 26 + .../src/Builder/NamespaceMatch.php | 37 + .../src/Builder/ParametersMatch.php | 50 + .../phpunit-mock-objects/src/Builder/Stub.php | 28 + .../src/Exception/BadMethodCallException.php | 14 + .../src/Exception/Exception.php | 17 + .../src/Exception/RuntimeException.php | 14 + .../src/ForwardCompatibility/MockObject.php | 17 + .../phpunit-mock-objects/src/Generator.php | 1174 ++++++ .../src/Generator/deprecation.tpl.dist | 2 + .../src/Generator/mocked_class.tpl.dist | 40 + .../Generator/mocked_class_method.tpl.dist | 7 + .../src/Generator/mocked_clone.tpl.dist | 4 + .../src/Generator/mocked_method.tpl.dist | 22 + .../src/Generator/mocked_method_void.tpl.dist | 20 + .../Generator/mocked_static_method.tpl.dist | 5 + .../src/Generator/proxied_method.tpl.dist | 22 + .../Generator/proxied_method_void.tpl.dist | 22 + .../src/Generator/trait_class.tpl.dist | 4 + .../src/Generator/unmocked_clone.tpl.dist | 5 + .../src/Generator/wsdl_class.tpl.dist | 7 + .../src/Generator/wsdl_method.tpl.dist | 4 + .../src/Invocation/Invocation.php | 31 + .../src/Invocation/ObjectInvocation.php | 41 + .../src/Invocation/StaticInvocation.php | 255 ++ .../src/InvocationMocker.php | 185 + .../phpunit-mock-objects/src/Invokable.php | 38 + .../phpunit-mock-objects/src/Matcher.php | 321 ++ .../src/Matcher/AnyInvokedCount.php | 29 + .../src/Matcher/AnyParameters.php | 36 + .../src/Matcher/ConsecutiveParameters.php | 134 + .../src/Matcher/Invocation.php | 49 + .../src/Matcher/InvokedAtIndex.php | 89 + .../src/Matcher/InvokedAtLeastCount.php | 58 + .../src/Matcher/InvokedAtLeastOnce.php | 46 + .../src/Matcher/InvokedAtMostCount.php | 58 + .../src/Matcher/InvokedCount.php | 111 + .../src/Matcher/InvokedRecorder.php | 68 + .../src/Matcher/MethodName.php | 73 + .../src/Matcher/Parameters.php | 165 + .../src/Matcher/StatelessInvocation.php | 54 + .../phpunit-mock-objects/src/MockBuilder.php | 389 ++ .../phpunit-mock-objects/src/MockObject.php | 55 + .../phpunit/phpunit-mock-objects/src/Stub.php | 31 + .../src/Stub/ConsecutiveCalls.php | 56 + .../src/Stub/Exception.php | 42 + .../src/Stub/MatcherCollection.php | 26 + .../src/Stub/ReturnArgument.php | 43 + .../src/Stub/ReturnCallback.php | 52 + .../src/Stub/ReturnReference.php | 45 + .../src/Stub/ReturnSelf.php | 38 + .../src/Stub/ReturnStub.php | 45 + .../src/Stub/ReturnValueMap.php | 53 + .../phpunit-mock-objects/src/Verifiable.php | 26 + .../tests/Builder/InvocationMockerTest.php | 74 + .../tests/Generator/232.phpt | 129 + .../tests/Generator/397.phpt | 98 + .../tests/Generator/abstract_class.phpt | 147 + .../tests/Generator/class.phpt | 125 + .../Generator/class_call_parent_clone.phpt | 77 + .../class_call_parent_constructor.phpt | 76 + .../class_dont_call_parent_clone.phpt | 76 + .../class_dont_call_parent_constructor.phpt | 76 + ...ing_interface_call_parent_constructor.phpt | 81 + ...nterface_dont_call_parent_constructor.phpt | 81 + .../tests/Generator/class_partial.phpt | 103 + .../class_with_deprecated_method.phpt | 105 + .../class_with_method_named_method.phpt | 92 + ...ullable_typehinted_variadic_arguments.phpt | 103 + ...od_with_typehinted_variadic_arguments.phpt | 99 + ...s_with_method_with_variadic_arguments.phpt | 99 + .../tests/Generator/interface.phpt | 97 + .../invocation_object_clone_object.phpt | 126 + .../tests/Generator/namespaced_class.phpt | 127 + .../namespaced_class_call_parent_clone.phpt | 79 + ...espaced_class_call_parent_constructor.phpt | 78 + ...mespaced_class_dont_call_parent_clone.phpt | 78 + ...ed_class_dont_call_parent_constructor.phpt | 78 + ...ing_interface_call_parent_constructor.phpt | 83 + ...nterface_dont_call_parent_constructor.phpt | 83 + .../Generator/namespaced_class_partial.phpt | 105 + .../tests/Generator/namespaced_interface.phpt | 99 + .../tests/Generator/nonexistent_class.phpt | 74 + .../nonexistent_class_with_namespace.phpt | 82 + ...ith_namespace_starting_with_separator.phpt | 82 + .../tests/Generator/nullable_types.phpt | 103 + .../tests/Generator/proxy.phpt | 121 + .../return_type_declarations_closure.phpt | 97 + .../return_type_declarations_final.phpt | 108 + .../return_type_declarations_generator.phpt | 97 + .../return_type_declarations_nullable.phpt | 101 + ...eturn_type_declarations_object_method.phpt | 100 + .../return_type_declarations_self.phpt | 97 + ...eturn_type_declarations_static_method.phpt | 83 + .../return_type_declarations_void.phpt | 99 + .../Generator/scalar_type_declarations.phpt | 99 + .../tests/Generator/wsdl_class.phpt | 37 + .../tests/Generator/wsdl_class_namespace.phpt | 39 + .../tests/Generator/wsdl_class_partial.phpt | 30 + .../tests/GeneratorTest.php | 210 + .../tests/Invocation/ObjectInvocationTest.php | 120 + .../tests/Invocation/StaticInvocationTest.php | 99 + .../Matcher/ConsecutiveParametersTest.php | 68 + .../tests/MockBuilderTest.php | 129 + .../tests/MockObjectTest.php | 1075 +++++ .../tests/ProxyObjectTest.php | 41 + .../tests/_fixture/AbstractMockTestClass.php | 10 + .../tests/_fixture/AbstractTrait.php | 15 + .../tests/_fixture/AnInterface.php | 6 + .../_fixture/AnInterfaceWithReturnType.php | 5 + .../tests/_fixture/AnotherInterface.php | 5 + .../tests/_fixture/Bar.php | 8 + .../ClassThatImplementsSerializable.php | 15 + .../ClassWithAllPossibleReturnTypes.php | 56 + .../tests/_fixture/ClassWithSelfTypeHint.php | 7 + .../tests/_fixture/ClassWithStaticMethod.php | 7 + .../tests/_fixture/Foo.php | 8 + .../tests/_fixture/FunctionCallback.php | 9 + .../tests/_fixture/GoogleSearch.wsdl | 198 + .../InterfaceWithSemiReservedMethodName.php | 5 + .../_fixture/InterfaceWithStaticMethod.php | 5 + .../tests/_fixture/MethodCallback.php | 21 + .../_fixture/MethodCallbackByReference.php | 13 + .../tests/_fixture/MockTestInterface.php | 6 + .../tests/_fixture/Mockable.php | 28 + .../tests/_fixture/PartialMockTestClass.php | 18 + .../tests/_fixture/SingletonClass.php | 28 + .../tests/_fixture/SomeClass.php | 13 + .../tests/_fixture/StaticMockTestClass.php | 12 + .../tests/_fixture/StringableClass.php | 8 + .../_fixture/TraversableMockTestInterface.php | 5 + .../phpunit-mock-objects/tests/bootstrap.php | 3 + vendor/phpunit/phpunit/.editorconfig | 8 + vendor/phpunit/phpunit/.gitattributes | 4 + .../phpunit/.github/CODE_OF_CONDUCT.md | 28 + .../phpunit/phpunit/.github/CONTRIBUTING.md | 71 + .../phpunit/phpunit/.github/ISSUE_TEMPLATE.md | 15 + vendor/phpunit/phpunit/.gitignore | 20 + vendor/phpunit/phpunit/.php_cs.dist | 91 + vendor/phpunit/phpunit/.stickler.yml | 3 + vendor/phpunit/phpunit/.travis.yml | 53 + vendor/phpunit/phpunit/ChangeLog-5.7.md | 242 ++ vendor/phpunit/phpunit/ChangeLog-6.5.md | 60 + vendor/phpunit/phpunit/LICENSE | 33 + vendor/phpunit/phpunit/README.md | 46 + vendor/phpunit/phpunit/appveyor.yml | 65 + vendor/phpunit/phpunit/build.xml | 430 ++ vendor/phpunit/phpunit/composer.json | 88 + vendor/phpunit/phpunit/phpunit | 53 + vendor/phpunit/phpunit/phpunit.xml | 32 + vendor/phpunit/phpunit/phpunit.xsd | 270 ++ vendor/phpunit/phpunit/src/Exception.php | 18 + .../phpunit/phpunit/src/Framework/Assert.php | 2920 ++++++++++++++ .../src/Framework/Assert/Functions.php | 1843 +++++++++ .../src/Framework/AssertionFailedError.php | 27 + .../src/Framework/BaseTestListener.php | 20 + .../src/Framework/CodeCoverageException.php | 15 + .../src/Framework/Constraint/ArrayHasKey.php | 83 + .../src/Framework/Constraint/ArraySubset.php | 141 + .../src/Framework/Constraint/Attribute.php | 88 + .../src/Framework/Constraint/Callback.php | 62 + .../Constraint/ClassHasAttribute.php | 83 + .../Constraint/ClassHasStaticAttribute.php | 55 + .../src/Framework/Constraint/Composite.php | 70 + .../src/Framework/Constraint/Constraint.php | 155 + .../src/Framework/Constraint/Count.php | 135 + .../Framework/Constraint/DirectoryExists.php | 59 + .../src/Framework/Constraint/Exception.php | 89 + .../Framework/Constraint/ExceptionCode.php | 68 + .../Framework/Constraint/ExceptionMessage.php | 83 + .../ExceptionMessageRegularExpression.php | 77 + .../src/Framework/Constraint/FileExists.php | 59 + .../src/Framework/Constraint/GreaterThan.php | 55 + .../src/Framework/Constraint/IsAnything.php | 61 + .../src/Framework/Constraint/IsEmpty.php | 67 + .../src/Framework/Constraint/IsEqual.php | 182 + .../src/Framework/Constraint/IsFalse.php | 39 + .../src/Framework/Constraint/IsFinite.php | 39 + .../src/Framework/Constraint/IsIdentical.php | 133 + .../src/Framework/Constraint/IsInfinite.php | 39 + .../src/Framework/Constraint/IsInstanceOf.php | 96 + .../src/Framework/Constraint/IsJson.php | 76 + .../src/Framework/Constraint/IsNan.php | 39 + .../src/Framework/Constraint/IsNull.php | 39 + .../src/Framework/Constraint/IsReadable.php | 59 + .../src/Framework/Constraint/IsTrue.php | 39 + .../src/Framework/Constraint/IsType.php | 142 + .../src/Framework/Constraint/IsWritable.php | 59 + .../src/Framework/Constraint/JsonMatches.php | 113 + .../JsonMatchesErrorMessageProvider.php | 72 + .../src/Framework/Constraint/LessThan.php | 55 + .../src/Framework/Constraint/LogicalAnd.php | 134 + .../src/Framework/Constraint/LogicalNot.php | 181 + .../src/Framework/Constraint/LogicalOr.php | 126 + .../src/Framework/Constraint/LogicalXor.php | 131 + .../Constraint/ObjectHasAttribute.php | 36 + .../Constraint/RegularExpression.php | 62 + .../src/Framework/Constraint/SameSize.php | 26 + .../Framework/Constraint/StringContains.php | 84 + .../Framework/Constraint/StringEndsWith.php | 54 + .../StringMatchesFormatDescription.php | 101 + .../Framework/Constraint/StringStartsWith.php | 54 + .../Constraint/TraversableContains.php | 131 + .../Constraint/TraversableContainsOnly.php | 97 + .../CoveredCodeNotExecutedException.php | 15 + .../src/Framework/DataProviderTestSuite.php | 25 + .../src/Framework/Error/Deprecated.php | 15 + .../phpunit/src/Framework/Error/Error.php | 36 + .../phpunit/src/Framework/Error/Notice.php | 15 + .../phpunit/src/Framework/Error/Warning.php | 15 + .../phpunit/src/Framework/Exception.php | 80 + .../src/Framework/ExceptionWrapper.php | 93 + .../Framework/ExpectationFailedException.php | 44 + .../phpunit/src/Framework/IncompleteTest.php | 19 + .../src/Framework/IncompleteTestCase.php | 83 + .../src/Framework/IncompleteTestError.php | 14 + .../InvalidCoversTargetException.php | 14 + .../MissingCoversAnnotationException.php | 15 + .../phpunit/src/Framework/OutputError.php | 14 + .../phpunit/src/Framework/RiskyTest.php | 15 + .../phpunit/src/Framework/RiskyTestError.php | 14 + .../phpunit/src/Framework/SelfDescribing.php | 24 + .../phpunit/src/Framework/SkippedTest.php | 15 + .../phpunit/src/Framework/SkippedTestCase.php | 81 + .../src/Framework/SkippedTestError.php | 15 + .../src/Framework/SkippedTestSuiteError.php | 15 + .../phpunit/src/Framework/SyntheticError.php | 80 + vendor/phpunit/phpunit/src/Framework/Test.php | 28 + .../phpunit/src/Framework/TestCase.php | 2534 ++++++++++++ .../phpunit/src/Framework/TestFailure.php | 169 + .../phpunit/src/Framework/TestListener.php | 99 + .../TestListenerDefaultImplementation.php | 53 + .../phpunit/src/Framework/TestResult.php | 1310 ++++++ .../phpunit/src/Framework/TestSuite.php | 1020 +++++ .../src/Framework/TestSuiteIterator.php | 104 + .../UnintentionallyCoveredCodeError.php | 18 + .../phpunit/phpunit/src/Framework/Warning.php | 26 + .../phpunit/src/Framework/WarningTestCase.php | 76 + .../phpunit/src/Runner/BaseTestRunner.php | 147 + .../phpunit/phpunit/src/Runner/Exception.php | 14 + .../Filter/ExcludeGroupFilterIterator.php | 23 + .../phpunit/src/Runner/Filter/Factory.php | 55 + .../src/Runner/Filter/GroupFilterIterator.php | 61 + .../Filter/IncludeGroupFilterIterator.php | 23 + .../src/Runner/Filter/NameFilterIterator.php | 124 + .../phpunit/src/Runner/PhptTestCase.php | 613 +++ .../src/Runner/StandardTestSuiteLoader.php | 120 + .../phpunit/src/Runner/TestSuiteLoader.php | 34 + vendor/phpunit/phpunit/src/Runner/Version.php | 75 + vendor/phpunit/phpunit/src/TextUI/Command.php | 1276 ++++++ .../phpunit/src/TextUI/ResultPrinter.php | 706 ++++ .../phpunit/phpunit/src/TextUI/TestRunner.php | 1114 ++++++ vendor/phpunit/phpunit/src/Util/Blacklist.php | 113 + .../phpunit/src/Util/Configuration.php | 1206 ++++++ .../src/Util/ConfigurationGenerator.php | 67 + .../phpunit/phpunit/src/Util/ErrorHandler.php | 118 + .../phpunit/phpunit/src/Util/Fileloader.php | 80 + .../phpunit/phpunit/src/Util/Filesystem.php | 40 + vendor/phpunit/phpunit/src/Util/Filter.php | 107 + vendor/phpunit/phpunit/src/Util/Getopt.php | 166 + .../phpunit/phpunit/src/Util/GlobalState.php | 202 + .../src/Util/InvalidArgumentHelper.php | 42 + vendor/phpunit/phpunit/src/Util/Json.php | 78 + vendor/phpunit/phpunit/src/Util/Log/JUnit.php | 451 +++ .../phpunit/phpunit/src/Util/Log/TeamCity.php | 423 ++ .../src/Util/PHP/AbstractPhpProcess.php | 421 ++ .../src/Util/PHP/DefaultPhpProcess.php | 232 ++ .../Util/PHP/Template/PhptTestCase.tpl.dist | 46 + .../Util/PHP/Template/TestCaseClass.tpl.dist | 107 + .../Util/PHP/Template/TestCaseMethod.tpl.dist | 109 + .../src/Util/PHP/WindowsPhpProcess.php | 43 + .../phpunit/src/Util/PHP/eval-stdin.php | 10 + vendor/phpunit/phpunit/src/Util/Printer.php | 146 + .../phpunit/src/Util/RegularExpression.php | 34 + vendor/phpunit/phpunit/src/Util/Test.php | 1193 ++++++ .../src/Util/TestDox/HtmlResultPrinter.php | 138 + .../src/Util/TestDox/NamePrettifier.php | 142 + .../src/Util/TestDox/ResultPrinter.php | 412 ++ .../src/Util/TestDox/TextResultPrinter.php | 53 + .../src/Util/TestDox/XmlResultPrinter.php | 238 ++ .../phpunit/src/Util/TextTestListRenderer.php | 44 + vendor/phpunit/phpunit/src/Util/Type.php | 43 + vendor/phpunit/phpunit/src/Util/Xml.php | 314 ++ .../phpunit/src/Util/XmlTestListRenderer.php | 82 + vendor/phpunit/phpunit/tests/Fail/fail.phpt | 5 + .../phpunit/tests/Framework/AssertTest.php | 3190 +++++++++++++++ .../tests/Framework/BaseTestListenerTest.php | 32 + .../Framework/Constraint/ArrayHasKeyTest.php | 65 + .../Framework/Constraint/ArraySubsetTest.php | 84 + .../Framework/Constraint/AttributeTest.php | 81 + .../Framework/Constraint/CallbackTest.php | 66 + .../Constraint/ClassHasAttributeTest.php | 71 + .../ClassHasStaticAttributeTest.php | 67 + .../Constraint/ConstraintTestCase.php | 57 + .../tests/Framework/Constraint/CountTest.php | 146 + .../Constraint/DirectoryExistsTest.php | 67 + .../Constraint/ExceptionMessageRegExpTest.php | 56 + .../Constraint/ExceptionMessageTest.php | 52 + .../Framework/Constraint/FileExistsTest.php | 66 + .../Framework/Constraint/GreaterThanTest.php | 67 + .../Framework/Constraint/IsEmptyTest.php | 68 + .../Framework/Constraint/IsEqualTest.php | 287 ++ .../Framework/Constraint/IsIdenticalTest.php | 101 + .../tests/Framework/Constraint/IsJsonTest.php | 32 + .../tests/Framework/Constraint/IsNullTest.php | 67 + .../Framework/Constraint/IsReadableTest.php | 43 + .../tests/Framework/Constraint/IsTypeTest.php | 103 + .../Framework/Constraint/IsWritableTest.php | 43 + .../JsonMatchesErrorMessageProviderTest.php | 82 + .../Framework/Constraint/JsonMatchesTest.php | 86 + .../Framework/Constraint/LessThanTest.php | 67 + .../Framework/Constraint/LogicalAndTest.php | 238 ++ .../Framework/Constraint/LogicalOrTest.php | 233 ++ .../Framework/Constraint/LogicalXorTest.php | 44 + .../Constraint/ObjectHasAttributeTest.php | 67 + .../Constraint/RegularExpressionTest.php | 67 + .../Framework/Constraint/SameSizeTest.php | 63 + .../Constraint/StringContainsTest.php | 97 + .../Constraint/StringEndsWithTest.php | 88 + .../StringMatchesFormatDescriptionTest.php | 74 + .../Constraint/StringStartsWithTest.php | 89 + .../Constraint/TraversableContainsTest.php | 171 + .../tests/Framework/ConstraintTest.php | 1493 +++++++ .../phpunit/tests/Framework/SuiteTest.php | 236 ++ .../phpunit/tests/Framework/TestCaseTest.php | 720 ++++ .../tests/Framework/TestFailureTest.php | 41 + .../tests/Framework/TestImplementorTest.php | 26 + .../tests/Framework/TestListenerTest.php | 112 + .../phpunit/tests/Regression/GitHub/1149.phpt | 20 + .../Regression/GitHub/1149/Issue1149Test.php | 20 + .../phpunit/tests/Regression/GitHub/1216.phpt | 25 + .../Regression/GitHub/1216/Issue1216Test.php | 10 + .../Regression/GitHub/1216/bootstrap1216.php | 2 + .../Regression/GitHub/1216/phpunit1216.xml | 8 + .../phpunit/tests/Regression/GitHub/1265.phpt | 21 + .../Regression/GitHub/1265/Issue1265Test.php | 10 + .../Regression/GitHub/1265/phpunit1265.xml | 2 + .../phpunit/tests/Regression/GitHub/1330.phpt | 24 + .../Regression/GitHub/1330/Issue1330Test.php | 10 + .../Regression/GitHub/1330/phpunit1330.xml | 5 + .../phpunit/tests/Regression/GitHub/1335.phpt | 19 + .../Regression/GitHub/1335/Issue1335Test.php | 69 + .../Regression/GitHub/1335/bootstrap1335.php | 13 + .../phpunit/tests/Regression/GitHub/1337.phpt | 19 + .../Regression/GitHub/1337/Issue1337Test.php | 21 + .../phpunit/tests/Regression/GitHub/1348.phpt | 33 + .../Regression/GitHub/1348/Issue1348Test.php | 16 + .../phpunit/tests/Regression/GitHub/1351.phpt | 46 + .../GitHub/1351/ChildProcessClass1351.php | 4 + .../Regression/GitHub/1351/Issue1351Test.php | 50 + .../phpunit/tests/Regression/GitHub/1374.phpt | 19 + .../Regression/GitHub/1374/Issue1374Test.php | 23 + .../phpunit/tests/Regression/GitHub/1437.phpt | 26 + .../Regression/GitHub/1437/Issue1437Test.php | 11 + .../phpunit/tests/Regression/GitHub/1468.phpt | 20 + .../Regression/GitHub/1468/Issue1468Test.php | 13 + .../phpunit/tests/Regression/GitHub/1471.phpt | 26 + .../Regression/GitHub/1471/Issue1471Test.php | 14 + .../phpunit/tests/Regression/GitHub/1472.phpt | 18 + .../Regression/GitHub/1472/Issue1472Test.php | 23 + .../phpunit/tests/Regression/GitHub/1570.phpt | 25 + .../Regression/GitHub/1570/Issue1570Test.php | 10 + .../tests/Regression/GitHub/2137-filter.phpt | 28 + .../Regression/GitHub/2137-no_filter.phpt | 30 + .../Regression/GitHub/2137/Issue2137Test.php | 33 + .../phpunit/tests/Regression/GitHub/2145.phpt | 27 + .../Regression/GitHub/2145/Issue2145Test.php | 16 + .../phpunit/tests/Regression/GitHub/2158.phpt | 19 + .../Regression/GitHub/2158/Issue2158Test.php | 25 + .../tests/Regression/GitHub/2158/constant.inc | 5 + .../phpunit/tests/Regression/GitHub/2366.phpt | 19 + .../Regression/GitHub/2366/Issue2366Test.php | 32 + .../phpunit/tests/Regression/GitHub/2380.phpt | 19 + .../Regression/GitHub/2380/Issue2380Test.php | 21 + .../phpunit/tests/Regression/GitHub/2382.phpt | 19 + .../Regression/GitHub/2382/Issue2382Test.php | 22 + .../phpunit/tests/Regression/GitHub/2435.phpt | 20 + .../Regression/GitHub/2435/Issue2435Test.php | 11 + .../phpunit/tests/Regression/GitHub/244.phpt | 32 + .../Regression/GitHub/244/Issue244Test.php | 57 + .../Regression/GitHub/2448-existing-test.phpt | 20 + .../GitHub/2448-not-existing-test.phpt | 12 + .../tests/Regression/GitHub/2448/Test.php | 8 + ...-separate-class-preserve-no-bootstrap.phpt | 30 + .../GitHub/2591-separate-class-preserve.phpt | 21 + ...ction-no-preserve-no-bootstrap-xdebug.phpt | 39 + ...ate-function-no-preserve-no-bootstrap.phpt | 35 + .../2591-separate-function-no-preserve.phpt | 20 + .../2591-separate-function-preserve.phpt | 20 + .../GitHub/2591/SeparateClassPreserveTest.php | 26 + .../2591/SeparateFunctionNoPreserveTest.php | 21 + .../2591/SeparateFunctionPreserveTest.php | 21 + .../GitHub/2591/bootstrapNoBootstrap.php | 7 + .../GitHub/2591/bootstrapWithBootstrap.php | 4 + .../2591/bootstrapWithBootstrapNoGlobal.php | 4 + .../2725-separate-class-before-after-pid.phpt | 19 + .../GitHub/2725/BeforeAfterClassPidTest.php | 37 + .../phpunit/tests/Regression/GitHub/2731.phpt | 26 + .../Regression/GitHub/2731/Issue2731Test.php | 11 + .../phpunit/tests/Regression/GitHub/2811.phpt | 20 + .../Regression/GitHub/2811/Issue2811Test.php | 10 + .../phpunit/tests/Regression/GitHub/2972.phpt | 18 + .../GitHub/2972/issue-2972-test.phpt | 10 + .../2972/unconventiallyNamedIssue2972Test.php | 13 + .../phpunit/tests/Regression/GitHub/322.phpt | 27 + .../Regression/GitHub/322/Issue322Test.php | 21 + .../Regression/GitHub/322/phpunit322.xml | 11 + .../phpunit/tests/Regression/GitHub/433.phpt | 31 + .../Regression/GitHub/433/Issue433Test.php | 23 + .../phpunit/tests/Regression/GitHub/445.phpt | 32 + .../Regression/GitHub/445/Issue445Test.php | 23 + .../phpunit/tests/Regression/GitHub/498.phpt | 29 + .../Regression/GitHub/498/Issue498Test.php | 46 + .../phpunit/tests/Regression/GitHub/503.phpt | 34 + .../Regression/GitHub/503/Issue503Test.php | 13 + .../phpunit/tests/Regression/GitHub/581.phpt | 38 + .../Regression/GitHub/581/Issue581Test.php | 13 + .../phpunit/tests/Regression/GitHub/74.phpt | 28 + .../Regression/GitHub/74/Issue74Test.php | 11 + .../Regression/GitHub/74/NewException.php | 4 + .../phpunit/tests/Regression/GitHub/765.phpt | 26 + .../Regression/GitHub/765/Issue765Test.php | 24 + .../phpunit/tests/Regression/GitHub/797.phpt | 22 + .../Regression/GitHub/797/Issue797Test.php | 12 + .../Regression/GitHub/797/bootstrap797.php | 6 + .../phpunit/tests/Regression/GitHub/863.phpt | 24 + .../phpunit/tests/Regression/GitHub/873.phpt | 22 + .../Regression/GitHub/873/Issue873Test.php | 9 + .../phpunit/tests/Regression/Trac/1021.phpt | 19 + .../Regression/Trac/1021/Issue1021Test.php | 26 + .../phpunit/tests/Regression/Trac/523.phpt | 19 + .../Regression/Trac/523/Issue523Test.php | 15 + .../phpunit/tests/Regression/Trac/578.phpt | 37 + .../Regression/Trac/578/Issue578Test.php | 22 + .../phpunit/tests/Regression/Trac/684.phpt | 25 + .../Regression/Trac/684/Issue684Test.php | 6 + .../phpunit/tests/Regression/Trac/783.phpt | 21 + .../tests/Regression/Trac/783/ChildSuite.php | 17 + .../tests/Regression/Trac/783/OneTest.php | 13 + .../tests/Regression/Trac/783/ParentSuite.php | 15 + .../tests/Regression/Trac/783/TwoTest.php | 13 + .../phpunit/tests/Runner/PhptTestCaseTest.php | 321 ++ .../tests/TextUI/_files/expect_external.txt | 1 + .../tests/TextUI/_files/phpt-env.expected.txt | 1 + .../tests/TextUI/_files/phpt_external.php | 2 + .../tests/TextUI/abstract-test-class.phpt | 24 + .../phpunit/tests/TextUI/assertion.phpt | 38 + .../tests/TextUI/code-coverage-ignore.phpt | 36 + .../tests/TextUI/code-coverage-phpt.phpt | 43 + .../phpunit/tests/TextUI/colors-always.phpt | 18 + .../tests/TextUI/concrete-test-class.phpt | 18 + .../tests/TextUI/custom-printer-debug.phpt | 26 + .../tests/TextUI/custom-printer-verbose.phpt | 31 + .../tests/TextUI/dataprovider-debug.phpt | 33 + .../tests/TextUI/dataprovider-issue-2833.phpt | 17 + .../tests/TextUI/dataprovider-issue-2859.phpt | 17 + .../tests/TextUI/dataprovider-issue-2922.phpt | 18 + .../dataprovider-log-xml-isolation.phpt | 46 + .../tests/TextUI/dataprovider-log-xml.phpt | 45 + .../tests/TextUI/dataprovider-testdox.phpt | 19 + .../phpunit/phpunit/tests/TextUI/debug.phpt | 25 + .../tests/TextUI/default-isolation.phpt | 19 + .../phpunit/phpunit/tests/TextUI/default.phpt | 18 + .../defaulttestsuite-using-testsuite.phpt | 17 + .../tests/TextUI/defaulttestsuite.phpt | 15 + .../tests/TextUI/dependencies-clone.phpt | 22 + .../tests/TextUI/dependencies-isolation.phpt | 42 + .../phpunit/tests/TextUI/dependencies.phpt | 41 + .../tests/TextUI/dependencies2-isolation.phpt | 19 + .../phpunit/tests/TextUI/dependencies2.phpt | 18 + .../tests/TextUI/dependencies3-isolation.phpt | 19 + .../phpunit/tests/TextUI/dependencies3.phpt | 19 + .../TextUI/disable-code-coverage-ignore.phpt | 40 + .../phpunit/tests/TextUI/empty-testcase.phpt | 25 + .../phpunit/tests/TextUI/exception-stack.phpt | 62 + .../tests/TextUI/exclude-group-isolation.phpt | 21 + .../phpunit/tests/TextUI/exclude-group.phpt | 20 + .../tests/TextUI/failure-isolation.phpt | 137 + .../tests/TextUI/failure-reverse-list.phpt | 137 + .../phpunit/phpunit/tests/TextUI/failure.phpt | 136 + .../phpunit/tests/TextUI/fatal-isolation.phpt | 25 + .../tests/TextUI/filter-class-isolation.phpt | 21 + .../phpunit/tests/TextUI/filter-class.phpt | 20 + ...ider-by-classname-and-range-isolation.phpt | 21 + ...r-dataprovider-by-classname-and-range.phpt | 20 + ...lter-dataprovider-by-number-isolation.phpt | 21 + .../TextUI/filter-dataprovider-by-number.phpt | 20 + ...-dataprovider-by-only-range-isolation.phpt | 21 + .../filter-dataprovider-by-only-range.phpt | 20 + ...dataprovider-by-only-regexp-isolation.phpt | 21 + .../filter-dataprovider-by-only-regexp.phpt | 20 + ...dataprovider-by-only-string-isolation.phpt | 21 + .../filter-dataprovider-by-only-string.phpt | 20 + ...ilter-dataprovider-by-range-isolation.phpt | 21 + .../TextUI/filter-dataprovider-by-range.phpt | 20 + ...lter-dataprovider-by-regexp-isolation.phpt | 21 + .../TextUI/filter-dataprovider-by-regexp.phpt | 20 + ...lter-dataprovider-by-string-isolation.phpt | 21 + .../TextUI/filter-dataprovider-by-string.phpt | 20 + .../filter-method-case-insensitive.phpt | 20 + ...ilter-method-case-sensitive-no-result.phpt | 20 + .../tests/TextUI/filter-method-isolation.phpt | 21 + .../phpunit/tests/TextUI/filter-method.phpt | 20 + .../tests/TextUI/filter-no-results.phpt | 20 + .../tests/TextUI/forward-compatibility.phpt | 18 + .../phpunit/tests/TextUI/group-isolation.phpt | 21 + .../phpunit/phpunit/tests/TextUI/group.phpt | 20 + vendor/phpunit/phpunit/tests/TextUI/help.phpt | 103 + .../phpunit/phpunit/tests/TextUI/help2.phpt | 104 + .../phpunit/tests/TextUI/ini-isolation.phpt | 21 + .../phpunit/tests/TextUI/list-groups.phpt | 18 + .../phpunit/tests/TextUI/list-suites.phpt | 16 + .../tests/TextUI/list-tests-dataprovider.phpt | 19 + .../TextUI/list-tests-xml-dataprovider.phpt | 31 + .../phpunit/tests/TextUI/log-junit.phpt | 89 + .../phpunit/tests/TextUI/log-teamcity.phpt | 38 + .../phpunit/tests/TextUI/mycommand.phpt | 23 + .../tests/TextUI/options-after-arguments.phpt | 18 + .../tests/TextUI/output-isolation.phpt | 20 + .../TextUI/phar-extension-suppressed.phpt | 12 + .../phpunit/tests/TextUI/phar-extension.phpt | 21 + .../phpunit/tests/TextUI/phpt-args.phpt | 12 + .../phpunit/tests/TextUI/phpt-env.phpt | 12 + .../phpunit/tests/TextUI/phpt-external.phpt | 6 + .../phpunit/tests/TextUI/phpt-stderr.phpt | 8 + .../phpunit/tests/TextUI/phpt-stdin.phpt | 11 + .../phpunit/tests/TextUI/phpt-xfail.phpt | 18 + .../phpunit/phpunit/tests/TextUI/repeat.phpt | 20 + .../report-useless-tests-incomplete.phpt | 19 + .../report-useless-tests-isolation.phpt | 25 + .../tests/TextUI/report-useless-tests.phpt | 24 + .../tests/TextUI/stop-on-warning-via-cli.phpt | 25 + .../TextUI/stop-on-warning-via-config.phpt | 26 + .../TextUI/teamcity-inner-exceptions.phpt | 39 + .../phpunit/tests/TextUI/teamcity.phpt | 37 + .../tests/TextUI/test-suffix-multiple.phpt | 19 + .../tests/TextUI/test-suffix-single.phpt | 19 + .../tests/TextUI/testdox-exclude-group.phpt | 25 + .../phpunit/tests/TextUI/testdox-group.phpt | 25 + .../phpunit/tests/TextUI/testdox-html.phpt | 56 + .../phpunit/tests/TextUI/testdox-text.phpt | 24 + .../phpunit/tests/TextUI/testdox-xml.phpt | 62 + .../phpunit/phpunit/tests/TextUI/testdox.phpt | 18 + .../tests/Util/ConfigurationGeneratorTest.php | 50 + .../phpunit/tests/Util/ConfigurationTest.php | 481 +++ .../phpunit/phpunit/tests/Util/GetoptTest.php | 215 + .../phpunit/tests/Util/GlobalStateTest.php | 36 + .../phpunit/phpunit/tests/Util/JsonTest.php | 79 + .../tests/Util/PHP/AbstractPhpProcessTest.php | 124 + .../tests/Util/RegularExpressionTest.php | 51 + .../tests/Util/TestDox/NamePrettifierTest.php | 79 + .../phpunit/phpunit/tests/Util/TestTest.php | 1002 +++++ vendor/phpunit/phpunit/tests/Util/XmlTest.php | 117 + .../phpunit/tests/_files/AbstractTest.php | 10 + .../phpunit/tests/_files/ArrayAccessible.php | 40 + .../phpunit/tests/_files/AssertionExample.php | 8 + .../tests/_files/AssertionExampleTest.php | 12 + .../phpunit/phpunit/tests/_files/Author.php | 25 + .../phpunit/tests/_files/BankAccount.php | 80 + .../phpunit/tests/_files/BankAccountTest.php | 93 + .../tests/_files/BankAccountTest.test.php | 86 + .../phpunit/tests/_files/BankAccountTest2.php | 56 + .../tests/_files/BaseTestListenerSample.php | 14 + .../tests/_files/BeforeAndAfterTest.php | 37 + .../_files/BeforeClassAndAfterClassTest.php | 37 + .../BeforeClassWithOnlyDataProviderTest.php | 39 + vendor/phpunit/phpunit/tests/_files/Book.php | 18 + .../phpunit/tests/_files/Calculator.php | 14 + .../ChangeCurrentWorkingDirectoryTest.php | 11 + .../_files/ClassWithNonPublicAttributes.php | 29 + .../ClassWithScalarTypeDeclarations.php | 7 + .../tests/_files/ClassWithToString.php | 20 + .../tests/_files/ClonedDependencyTest.php | 59 + .../phpunit/tests/_files/ConcreteTest.my.php | 8 + .../phpunit/tests/_files/ConcreteTest.php | 8 + .../phpunit/tests/_files/CountConstraint.php | 37 + .../_files/CoverageClassExtendedTest.php | 14 + .../tests/_files/CoverageClassTest.php | 14 + .../CoverageFunctionParenthesesTest.php | 13 + ...erageFunctionParenthesesWhitespaceTest.php | 13 + .../tests/_files/CoverageFunctionTest.php | 13 + .../CoverageMethodOneLineAnnotationTest.php | 13 + .../_files/CoverageMethodParenthesesTest.php | 14 + ...overageMethodParenthesesWhitespaceTest.php | 14 + .../tests/_files/CoverageMethodTest.php | 14 + .../_files/CoverageNamespacedFunctionTest.php | 13 + .../phpunit/tests/_files/CoverageNoneTest.php | 11 + .../tests/_files/CoverageNotPrivateTest.php | 14 + .../tests/_files/CoverageNotProtectedTest.php | 14 + .../tests/_files/CoverageNotPublicTest.php | 14 + .../tests/_files/CoverageNothingTest.php | 15 + .../tests/_files/CoveragePrivateTest.php | 14 + .../tests/_files/CoverageProtectedTest.php | 14 + .../tests/_files/CoveragePublicTest.php | 14 + .../CoverageTwoDefaultClassAnnotations.php | 17 + .../phpunit/tests/_files/CoveredClass.php | 36 + .../phpunit/tests/_files/CoveredFunction.php | 4 + .../phpunit/tests/_files/CustomPrinter.php | 6 + .../tests/_files/DataProviderDebugTest.php | 50 + .../_files/DataProviderDependencyTest.php | 24 + .../tests/_files/DataProviderFilterTest.php | 41 + .../_files/DataProviderIncompleteTest.php | 39 + .../DataProviderIssue2833/FirstTest.php | 23 + .../DataProviderIssue2833/SecondTest.php | 15 + .../_files/DataProviderIssue2859/phpunit.xml | 10 + .../another/TestWithDataProviderTest.php | 21 + .../DataProviderIssue2922/FirstTest.php | 24 + .../DataProviderIssue2922/SecondTest.php | 14 + .../tests/_files/DataProviderSkippedTest.php | 39 + .../phpunit/tests/_files/DataProviderTest.php | 23 + .../tests/_files/DataProviderTestDoxTest.php | 30 + .../tests/_files/DependencyFailureTest.php | 34 + .../tests/_files/DependencySuccessTest.php | 26 + .../tests/_files/DependencyTestSuite.php | 15 + .../phpunit/tests/_files/DoubleTestCase.php | 29 + .../phpunit/tests/_files/DummyBarTest.php | 18 + .../phpunit/tests/_files/DummyException.php | 5 + .../phpunit/tests/_files/DummyFooTest.php | 18 + .../tests/_files/EmptyTestCaseTest.php | 6 + .../ExceptionInAssertPostConditionsTest.php | 37 + .../ExceptionInAssertPreConditionsTest.php | 37 + .../tests/_files/ExceptionInSetUpTest.php | 37 + .../tests/_files/ExceptionInTearDownTest.php | 37 + .../phpunit/tests/_files/ExceptionInTest.php | 37 + .../tests/_files/ExceptionNamespaceTest.php | 38 + .../tests/_files/ExceptionStackTest.php | 26 + .../phpunit/tests/_files/ExceptionTest.php | 141 + .../phpunit/phpunit/tests/_files/Failure.php | 10 + .../phpunit/tests/_files/FailureTest.php | 77 + .../phpunit/tests/_files/FalsyConstraint.php | 18 + .../phpunit/tests/_files/FatalTest.php | 15 + .../tests/_files/IgnoreCodeCoverageClass.php | 16 + .../_files/IgnoreCodeCoverageClassTest.php | 17 + .../phpunit/tests/_files/IncompleteTest.php | 10 + .../tests/_files/Inheritance/InheritanceA.php | 7 + .../tests/_files/Inheritance/InheritanceB.php | 10 + .../tests/_files/InheritedTestCase.php | 7 + .../phpunit/phpunit/tests/_files/IniTest.php | 10 + .../phpunit/tests/_files/IsolationTest.php | 15 + .../tests/_files/JsonData/arrayObject.json | 1 + .../tests/_files/JsonData/simpleObject.json | 1 + .../phpunit/tests/_files/MockRunner.php | 9 + .../phpunit/phpunit/tests/_files/Mockable.php | 26 + .../tests/_files/MultiDependencyTest.php | 29 + .../tests/_files/MultipleDataProviderTest.php | 77 + .../phpunit/tests/_files/MyCommand.php | 16 + .../phpunit/tests/_files/NamedConstraint.php | 29 + .../NamespaceCoverageClassExtendedTest.php | 14 + .../_files/NamespaceCoverageClassTest.php | 14 + ...NamespaceCoverageCoversClassPublicTest.php | 17 + .../NamespaceCoverageCoversClassTest.php | 22 + .../_files/NamespaceCoverageMethodTest.php | 14 + .../NamespaceCoverageNotPrivateTest.php | 14 + .../NamespaceCoverageNotProtectedTest.php | 14 + .../_files/NamespaceCoverageNotPublicTest.php | 14 + .../_files/NamespaceCoveragePrivateTest.php | 14 + .../_files/NamespaceCoverageProtectedTest.php | 14 + .../_files/NamespaceCoveragePublicTest.php | 14 + .../tests/_files/NamespaceCoveredClass.php | 38 + .../tests/_files/NamespaceCoveredFunction.php | 7 + .../tests/_files/NoArgTestCaseTest.php | 9 + .../phpunit/tests/_files/NoTestCaseClass.php | 4 + .../phpunit/tests/_files/NoTestCases.php | 9 + .../phpunit/tests/_files/NonStatic.php | 7 + .../_files/NotExistingCoveredElementTest.php | 26 + .../tests/_files/NotPublicTestCase.php | 13 + .../phpunit/tests/_files/NotVoidTestCase.php | 6 + .../phpunit/tests/_files/NothingTest.php | 9 + .../phpunit/tests/_files/OneTestCase.php | 13 + .../phpunit/tests/_files/OutputTestCase.php | 29 + .../phpunit/tests/_files/OverrideTestCase.php | 7 + .../_files/ParseTestMethodAnnotationsMock.php | 15 + .../RequirementsClassBeforeClassHookTest.php | 13 + .../_files/RequirementsClassDocBlockTest.php | 22 + .../phpunit/tests/_files/RequirementsTest.php | 447 +++ .../tests/_files/SampleArrayAccess.php | 36 + .../phpunit/tests/_files/SampleClass.php | 14 + .../phpunit/tests/_files/Singleton.php | 22 + .../phpunit/tests/_files/StackTest.php | 26 + .../phpunit/tests/_files/StatusTest.php | 42 + .../tests/_files/StopOnWarningTestSuite.php | 15 + .../tests/_files/StopsOnWarningTest.php | 9 + .../phpunit/phpunit/tests/_files/Struct.php | 10 + .../phpunit/phpunit/tests/_files/Success.php | 10 + .../tests/_files/TemplateMethodsTest.php | 53 + .../tests/_files/TestAutoreferenced.php | 12 + .../phpunit/tests/_files/TestDoxGroupTest.php | 22 + .../tests/_files/TestGeneratorMaker.php | 10 + .../phpunit/tests/_files/TestIncomplete.php | 10 + .../phpunit/tests/_files/TestIterator.php | 36 + .../phpunit/tests/_files/TestIterator2.php | 35 + .../tests/_files/TestIteratorAggregate.php | 16 + .../tests/_files/TestIteratorAggregate2.php | 19 + .../phpunit/tests/_files/TestSkipped.php | 10 + .../phpunit/tests/_files/TestTestError.php | 10 + .../phpunit/tests/_files/TestWithTest.php | 26 + .../tests/_files/ThrowExceptionTestCase.php | 10 + .../tests/_files/ThrowNoExceptionTestCase.php | 9 + .../phpunit/tests/_files/TruthyConstraint.php | 18 + .../VariousIterableDataProviderTest.php | 38 + .../phpunit/phpunit/tests/_files/WasRun.php | 12 + .../tests/_files/WrapperIteratorAggregate.php | 22 + vendor/phpunit/phpunit/tests/_files/bar.xml | 1 + .../_files/configuration.colors.empty.xml | 1 + .../_files/configuration.colors.false.xml | 1 + .../_files/configuration.colors.invalid.xml | 1 + .../_files/configuration.colors.true.xml | 1 + .../_files/configuration.custom-printer.xml | 2 + .../_files/configuration.defaulttestsuite.xml | 10 + .../_files/configuration.one-file-suite.xml | 7 + .../tests/_files/configuration.suites.xml | 6 + .../phpunit/tests/_files/configuration.xml | 131 + .../tests/_files/configuration_empty.xml | 49 + .../_files/configuration_stop_on_warning.xml | 2 + .../tests/_files/configuration_xinclude.xml | 79 + .../tests/_files/expectedFileFormat.txt | 1 + vendor/phpunit/phpunit/tests/_files/foo.xml | 1 + .../tests/_files/phpt-for-coverage.phpt | 8 + .../phpunit/tests/_files/phpt-xfail.phpt | 11 + .../phpunit-example-extension/phpunit.xml | 10 + .../tests/OneTest.php | 13 + .../phpunit-example-extension-1.0.1.phar | Bin 0 -> 6464 bytes ...uctureAttributesAreSameButValuesAreNot.xml | 10 + .../tests/_files/structureExpected.xml | 10 + .../tests/_files/structureIgnoreTextNodes.xml | 13 + .../_files/structureIsSameButDataIsNot.xml | 10 + .../structureWrongNumberOfAttributes.xml | 10 + .../_files/structureWrongNumberOfNodes.xml | 9 + vendor/phpunit/phpunit/tests/bootstrap.php | 30 + vendor/psr/http-message/CHANGELOG.md | 36 + vendor/psr/http-message/LICENSE | 19 + vendor/psr/http-message/README.md | 13 + vendor/psr/http-message/composer.json | 26 + .../psr/http-message/src/MessageInterface.php | 187 + .../psr/http-message/src/RequestInterface.php | 129 + .../http-message/src/ResponseInterface.php | 68 + .../src/ServerRequestInterface.php | 261 ++ .../psr/http-message/src/StreamInterface.php | 158 + .../src/UploadedFileInterface.php | 123 + vendor/psr/http-message/src/UriInterface.php | 323 ++ .../code-unit-reverse-lookup/.gitignore | 4 + .../code-unit-reverse-lookup/.php_cs | 67 + .../code-unit-reverse-lookup/.travis.yml | 25 + .../code-unit-reverse-lookup/ChangeLog.md | 10 + .../code-unit-reverse-lookup/LICENSE | 33 + .../code-unit-reverse-lookup/README.md | 14 + .../code-unit-reverse-lookup/build.xml | 22 + .../code-unit-reverse-lookup/composer.json | 28 + .../code-unit-reverse-lookup/phpunit.xml | 21 + .../code-unit-reverse-lookup/src/Wizard.php | 111 + .../tests/WizardTest.php | 45 + vendor/sebastian/comparator/.gitignore | 4 + vendor/sebastian/comparator/.php_cs.dist | 88 + vendor/sebastian/comparator/.travis.yml | 34 + vendor/sebastian/comparator/ChangeLog.md | 33 + vendor/sebastian/comparator/LICENSE | 33 + vendor/sebastian/comparator/README.md | 37 + vendor/sebastian/comparator/build.xml | 21 + vendor/sebastian/comparator/composer.json | 54 + vendor/sebastian/comparator/phpunit.xml | 18 + .../comparator/src/ArrayComparator.php | 131 + .../sebastian/comparator/src/Comparator.php | 65 + .../comparator/src/ComparisonFailure.php | 135 + .../comparator/src/DOMNodeComparator.php | 87 + .../comparator/src/DateTimeComparator.php | 84 + .../comparator/src/DoubleComparator.php | 57 + .../comparator/src/ExceptionComparator.php | 53 + vendor/sebastian/comparator/src/Factory.php | 139 + .../comparator/src/MockObjectComparator.php | 48 + .../comparator/src/NumericComparator.php | 69 + .../comparator/src/ObjectComparator.php | 107 + .../comparator/src/ResourceComparator.php | 53 + .../comparator/src/ScalarComparator.php | 92 + .../src/SplObjectStorageComparator.php | 70 + .../comparator/src/TypeComparator.php | 60 + .../comparator/tests/ArrayComparatorTest.php | 168 + .../tests/ComparisonFailureTest.php | 58 + .../tests/DOMNodeComparatorTest.php | 163 + .../tests/DateTimeComparatorTest.php | 223 ++ .../comparator/tests/DoubleComparatorTest.php | 137 + .../tests/ExceptionComparatorTest.php | 138 + .../comparator/tests/FactoryTest.php | 126 + .../tests/MockObjectComparatorTest.php | 170 + .../tests/NumericComparatorTest.php | 125 + .../comparator/tests/ObjectComparatorTest.php | 152 + .../tests/ResourceComparatorTest.php | 124 + .../comparator/tests/ScalarComparatorTest.php | 161 + .../tests/SplObjectStorageComparatorTest.php | 149 + .../comparator/tests/TypeComparatorTest.php | 108 + .../comparator/tests/_fixture/Author.php | 27 + .../comparator/tests/_fixture/Book.php | 20 + .../tests/_fixture/ClassWithToString.php | 19 + .../comparator/tests/_fixture/SampleClass.php | 28 + .../comparator/tests/_fixture/Struct.php | 24 + .../comparator/tests/_fixture/TestClass.php | 15 + .../tests/_fixture/TestClassComparator.php | 15 + vendor/sebastian/diff/.gitignore | 5 + vendor/sebastian/diff/.php_cs | 81 + vendor/sebastian/diff/.travis.yml | 27 + vendor/sebastian/diff/ChangeLog.md | 22 + vendor/sebastian/diff/LICENSE | 33 + vendor/sebastian/diff/README.md | 126 + vendor/sebastian/diff/build.xml | 22 + vendor/sebastian/diff/composer.json | 33 + vendor/sebastian/diff/phpunit.xml | 19 + vendor/sebastian/diff/src/Chunk.php | 78 + vendor/sebastian/diff/src/Diff.php | 67 + vendor/sebastian/diff/src/Differ.php | 321 ++ .../diff/src/Exception/Exception.php | 15 + .../Exception/InvalidArgumentException.php | 15 + vendor/sebastian/diff/src/Line.php | 44 + .../LongestCommonSubsequenceCalculator.php | 24 + ...ientLongestCommonSubsequenceCalculator.php | 81 + .../src/Output/AbstractChunkOutputBuilder.php | 56 + .../diff/src/Output/DiffOnlyOutputBuilder.php | 63 + .../src/Output/DiffOutputBuilderInterface.php | 19 + .../src/Output/UnifiedDiffOutputBuilder.php | 165 + vendor/sebastian/diff/src/Parser.php | 106 + ...ientLongestCommonSubsequenceCalculator.php | 66 + vendor/sebastian/diff/tests/ChunkTest.php | 68 + vendor/sebastian/diff/tests/DiffTest.php | 55 + vendor/sebastian/diff/tests/DifferTest.php | 1042 +++++ .../sebastian/diff/tests/DifferTestTest.php | 83 + vendor/sebastian/diff/tests/LineTest.php | 44 + .../tests/LongestCommonSubsequenceTest.php | 201 + .../MemoryEfficientImplementationTest.php | 22 + vendor/sebastian/diff/tests/ParserTest.php | 151 + .../tests/TimeEfficientImplementationTest.php | 22 + .../sebastian/diff/tests/fixtures/patch.txt | 9 + .../sebastian/diff/tests/fixtures/patch2.txt | 21 + vendor/sebastian/environment/.gitignore | 5 + vendor/sebastian/environment/.php_cs | 79 + vendor/sebastian/environment/.travis.yml | 34 + vendor/sebastian/environment/ChangeLog.md | 51 + vendor/sebastian/environment/LICENSE | 33 + vendor/sebastian/environment/README.md | 17 + vendor/sebastian/environment/build.xml | 21 + vendor/sebastian/environment/composer.json | 30 + vendor/sebastian/environment/phpunit.xml | 18 + vendor/sebastian/environment/src/Console.php | 146 + .../environment/src/OperatingSystem.php | 51 + vendor/sebastian/environment/src/Runtime.php | 186 + .../environment/tests/ConsoleTest.php | 67 + .../environment/tests/OperatingSystemTest.php | 39 + .../environment/tests/RuntimeTest.php | 112 + vendor/sebastian/exporter/.gitignore | 4 + vendor/sebastian/exporter/.php_cs | 77 + vendor/sebastian/exporter/.travis.yml | 26 + vendor/sebastian/exporter/LICENSE | 33 + vendor/sebastian/exporter/README.md | 172 + vendor/sebastian/exporter/build.xml | 21 + vendor/sebastian/exporter/composer.json | 48 + vendor/sebastian/exporter/phpunit.xml | 19 + vendor/sebastian/exporter/src/Exporter.php | 312 ++ .../sebastian/exporter/tests/ExporterTest.php | 361 ++ vendor/sebastian/global-state/.gitignore | 4 + vendor/sebastian/global-state/.php_cs | 79 + vendor/sebastian/global-state/.travis.yml | 26 + vendor/sebastian/global-state/LICENSE | 33 + vendor/sebastian/global-state/README.md | 16 + vendor/sebastian/global-state/build.xml | 22 + vendor/sebastian/global-state/composer.json | 40 + vendor/sebastian/global-state/phpunit.xml | 24 + .../sebastian/global-state/src/Blacklist.php | 123 + .../global-state/src/CodeExporter.php | 94 + .../sebastian/global-state/src/Restorer.php | 137 + .../sebastian/global-state/src/Snapshot.php | 368 ++ .../global-state/src/exceptions/Exception.php | 17 + .../src/exceptions/RuntimeException.php | 17 + .../global-state/tests/BlacklistTest.php | 120 + .../global-state/tests/CodeExporterTest.php | 38 + .../global-state/tests/RestorerTest.php | 105 + .../global-state/tests/SnapshotTest.php | 116 + .../tests/_fixture/BlacklistedChildClass.php | 17 + .../tests/_fixture/BlacklistedClass.php | 18 + .../tests/_fixture/BlacklistedImplementor.php | 18 + .../tests/_fixture/BlacklistedInterface.php | 17 + .../tests/_fixture/SnapshotClass.php | 37 + .../tests/_fixture/SnapshotDomDocument.php | 19 + .../tests/_fixture/SnapshotFunctions.php | 17 + .../tests/_fixture/SnapshotTrait.php | 17 + vendor/sebastian/object-enumerator/.gitignore | 8 + vendor/sebastian/object-enumerator/.php_cs | 67 + .../sebastian/object-enumerator/.travis.yml | 26 + .../sebastian/object-enumerator/ChangeLog.md | 53 + vendor/sebastian/object-enumerator/LICENSE | 33 + vendor/sebastian/object-enumerator/README.md | 14 + vendor/sebastian/object-enumerator/build.xml | 22 + .../sebastian/object-enumerator/composer.json | 35 + .../sebastian/object-enumerator/phpunit.xml | 20 + .../object-enumerator/src/Enumerator.php | 85 + .../object-enumerator/src/Exception.php | 15 + .../src/InvalidArgumentException.php | 15 + .../tests/EnumeratorTest.php | 139 + .../tests/_fixture/ExceptionThrower.php | 28 + vendor/sebastian/object-reflector/.gitignore | 4 + vendor/sebastian/object-reflector/.php_cs | 79 + vendor/sebastian/object-reflector/.travis.yml | 26 + .../sebastian/object-reflector/ChangeLog.md | 20 + vendor/sebastian/object-reflector/LICENSE | 33 + vendor/sebastian/object-reflector/README.md | 14 + vendor/sebastian/object-reflector/build.xml | 22 + .../sebastian/object-reflector/composer.json | 33 + vendor/sebastian/object-reflector/phpunit.xml | 19 + .../object-reflector/src/Exception.php | 17 + .../src/InvalidArgumentException.php | 17 + .../object-reflector/src/ObjectReflector.php | 51 + .../tests/ObjectReflectorTest.php | 70 + .../tests/_fixture/ChildClass.php | 25 + .../ClassWithIntegerAttributeName.php | 22 + .../tests/_fixture/ParentClass.php | 20 + vendor/sebastian/recursion-context/.gitignore | 3 + .../sebastian/recursion-context/.travis.yml | 23 + vendor/sebastian/recursion-context/LICENSE | 33 + vendor/sebastian/recursion-context/README.md | 14 + vendor/sebastian/recursion-context/build.xml | 21 + .../sebastian/recursion-context/composer.json | 36 + .../sebastian/recursion-context/phpunit.xml | 19 + .../recursion-context/src/Context.php | 167 + .../recursion-context/src/Exception.php | 17 + .../src/InvalidArgumentException.php | 17 + .../recursion-context/tests/ContextTest.php | 142 + .../sebastian/resource-operations/.gitignore | 3 + vendor/sebastian/resource-operations/LICENSE | 33 + .../sebastian/resource-operations/README.md | 16 + .../sebastian/resource-operations/build.xml | 24 + .../resource-operations/build/generate.php | 62 + .../resource-operations/composer.json | 26 + .../src/ResourceOperations.php | 670 ++++ vendor/sebastian/version/.gitattributes | 1 + vendor/sebastian/version/.gitignore | 1 + vendor/sebastian/version/.php_cs | 66 + vendor/sebastian/version/LICENSE | 33 + vendor/sebastian/version/README.md | 43 + vendor/sebastian/version/composer.json | 29 + vendor/sebastian/version/src/Version.php | 109 + vendor/symfony/browser-kit/.gitignore | 3 + vendor/symfony/browser-kit/CHANGELOG.md | 35 + vendor/symfony/browser-kit/Client.php | 619 +++ vendor/symfony/browser-kit/Cookie.php | 301 ++ vendor/symfony/browser-kit/CookieJar.php | 250 ++ vendor/symfony/browser-kit/History.php | 100 + vendor/symfony/browser-kit/LICENSE | 19 + vendor/symfony/browser-kit/README.md | 14 + vendor/symfony/browser-kit/Request.php | 116 + vendor/symfony/browser-kit/Response.php | 125 + .../symfony/browser-kit/Tests/ClientTest.php | 718 ++++ .../browser-kit/Tests/CookieJarTest.php | 250 ++ .../symfony/browser-kit/Tests/CookieTest.php | 205 + .../symfony/browser-kit/Tests/HistoryTest.php | 102 + .../symfony/browser-kit/Tests/RequestTest.php | 54 + .../browser-kit/Tests/ResponseTest.php | 77 + vendor/symfony/browser-kit/composer.json | 41 + vendor/symfony/browser-kit/phpunit.xml.dist | 31 + vendor/symfony/console/.gitignore | 3 + vendor/symfony/console/Application.php | 1130 ++++++ vendor/symfony/console/CHANGELOG.md | 122 + vendor/symfony/console/Command/Command.php | 647 +++ .../symfony/console/Command/HelpCommand.php | 81 + .../symfony/console/Command/ListCommand.php | 90 + .../symfony/console/Command/LockableTrait.php | 72 + .../CommandLoader/CommandLoaderInterface.php | 37 + .../CommandLoader/ContainerCommandLoader.php | 55 + .../CommandLoader/FactoryCommandLoader.php | 62 + vendor/symfony/console/ConsoleEvents.php | 47 + .../AddConsoleCommandPass.php | 98 + .../Descriptor/ApplicationDescription.php | 144 + .../symfony/console/Descriptor/Descriptor.php | 107 + .../Descriptor/DescriptorInterface.php | 31 + .../console/Descriptor/JsonDescriptor.php | 168 + .../console/Descriptor/MarkdownDescriptor.php | 182 + .../console/Descriptor/TextDescriptor.php | 334 ++ .../console/Descriptor/XmlDescriptor.php | 245 ++ .../console/Event/ConsoleCommandEvent.php | 60 + .../console/Event/ConsoleErrorEvent.php | 58 + vendor/symfony/console/Event/ConsoleEvent.php | 67 + .../console/Event/ConsoleTerminateEvent.php | 53 + .../console/EventListener/ErrorListener.php | 91 + .../Exception/CommandNotFoundException.php | 43 + .../console/Exception/ExceptionInterface.php | 21 + .../Exception/InvalidArgumentException.php | 19 + .../Exception/InvalidOptionException.php | 21 + .../console/Exception/LogicException.php | 19 + .../console/Exception/RuntimeException.php | 19 + .../console/Formatter/OutputFormatter.php | 230 ++ .../Formatter/OutputFormatterInterface.php | 71 + .../Formatter/OutputFormatterStyle.php | 219 ++ .../OutputFormatterStyleInterface.php | 62 + .../Formatter/OutputFormatterStyleStack.php | 109 + .../console/Helper/DebugFormatterHelper.php | 127 + .../console/Helper/DescriptorHelper.php | 94 + .../console/Helper/FormatterHelper.php | 106 + vendor/symfony/console/Helper/Helper.php | 138 + .../console/Helper/HelperInterface.php | 39 + vendor/symfony/console/Helper/HelperSet.php | 108 + .../console/Helper/InputAwareHelper.php | 33 + .../symfony/console/Helper/ProcessHelper.php | 141 + vendor/symfony/console/Helper/ProgressBar.php | 523 +++ .../console/Helper/ProgressIndicator.php | 269 ++ .../symfony/console/Helper/QuestionHelper.php | 419 ++ .../console/Helper/SymfonyQuestionHelper.php | 96 + vendor/symfony/console/Helper/Table.php | 665 ++++ vendor/symfony/console/Helper/TableCell.php | 68 + .../symfony/console/Helper/TableSeparator.php | 25 + vendor/symfony/console/Helper/TableStyle.php | 258 ++ vendor/symfony/console/Input/ArgvInput.php | 338 ++ vendor/symfony/console/Input/ArrayInput.php | 206 + vendor/symfony/console/Input/Input.php | 203 + .../symfony/console/Input/InputArgument.php | 129 + .../console/Input/InputAwareInterface.php | 28 + .../symfony/console/Input/InputDefinition.php | 402 ++ .../symfony/console/Input/InputInterface.php | 157 + vendor/symfony/console/Input/InputOption.php | 208 + .../Input/StreamableInputInterface.php | 37 + vendor/symfony/console/Input/StringInput.php | 72 + vendor/symfony/console/LICENSE | 19 + .../symfony/console/Logger/ConsoleLogger.php | 124 + .../symfony/console/Output/BufferedOutput.php | 45 + .../symfony/console/Output/ConsoleOutput.php | 152 + .../console/Output/ConsoleOutputInterface.php | 30 + vendor/symfony/console/Output/NullOutput.php | 123 + vendor/symfony/console/Output/Output.php | 175 + .../console/Output/OutputInterface.php | 114 + .../symfony/console/Output/StreamOutput.php | 103 + .../console/Question/ChoiceQuestion.php | 184 + .../console/Question/ConfirmationQuestion.php | 59 + vendor/symfony/console/Question/Question.php | 246 ++ vendor/symfony/console/README.md | 20 + .../console/Resources/bin/hiddeninput.exe | Bin 0 -> 9216 bytes vendor/symfony/console/Style/OutputStyle.php | 155 + .../symfony/console/Style/StyleInterface.php | 154 + vendor/symfony/console/Style/SymfonyStyle.php | 428 ++ vendor/symfony/console/Terminal.php | 137 + .../console/Tester/ApplicationTester.php | 176 + .../symfony/console/Tester/CommandTester.php | 156 + .../symfony/console/Tests/ApplicationTest.php | 1644 ++++++++ .../console/Tests/Command/CommandTest.php | 428 ++ .../console/Tests/Command/HelpCommandTest.php | 71 + .../console/Tests/Command/ListCommandTest.php | 113 + .../Tests/Command/LockableTraitTest.php | 67 + .../ContainerCommandLoaderTest.php | 61 + .../FactoryCommandLoaderTest.php | 60 + .../AddConsoleCommandPassTest.php | 183 + .../Descriptor/AbstractDescriptorTest.php | 107 + .../Tests/Descriptor/JsonDescriptorTest.php | 35 + .../Descriptor/MarkdownDescriptorTest.php | 45 + .../Tests/Descriptor/ObjectsProvider.php | 82 + .../Tests/Descriptor/TextDescriptorTest.php | 53 + .../Tests/Descriptor/XmlDescriptorTest.php | 27 + .../Tests/EventListener/ErrorListenerTest.php | 156 + .../console/Tests/Fixtures/BarBucCommand.php | 11 + .../Tests/Fixtures/DescriptorApplication1.php | 18 + .../Tests/Fixtures/DescriptorApplication2.php | 26 + .../DescriptorApplicationMbString.php | 24 + .../Tests/Fixtures/DescriptorCommand1.php | 27 + .../Tests/Fixtures/DescriptorCommand2.php | 32 + .../Tests/Fixtures/DescriptorCommand3.php | 27 + .../Tests/Fixtures/DescriptorCommand4.php | 25 + .../Fixtures/DescriptorCommandMbString.php | 32 + .../console/Tests/Fixtures/DummyOutput.php | 36 + .../console/Tests/Fixtures/Foo1Command.php | 26 + .../console/Tests/Fixtures/Foo2Command.php | 21 + .../console/Tests/Fixtures/Foo3Command.php | 29 + .../console/Tests/Fixtures/Foo4Command.php | 11 + .../console/Tests/Fixtures/Foo5Command.php | 10 + .../console/Tests/Fixtures/Foo6Command.php | 12 + .../console/Tests/Fixtures/FooCommand.php | 33 + .../Tests/Fixtures/FooLock2Command.php | 28 + .../console/Tests/Fixtures/FooLockCommand.php | 27 + .../console/Tests/Fixtures/FooOptCommand.php | 36 + .../Fixtures/FooSameCaseLowercaseCommand.php | 11 + .../Fixtures/FooSameCaseUppercaseCommand.php | 11 + .../Fixtures/FooSubnamespaced1Command.php | 26 + .../Fixtures/FooSubnamespaced2Command.php | 26 + .../console/Tests/Fixtures/FoobarCommand.php | 25 + .../Style/SymfonyStyle/command/command_0.php | 11 + .../Style/SymfonyStyle/command/command_1.php | 13 + .../Style/SymfonyStyle/command/command_10.php | 17 + .../Style/SymfonyStyle/command/command_11.php | 12 + .../Style/SymfonyStyle/command/command_12.php | 13 + .../Style/SymfonyStyle/command/command_13.php | 14 + .../Style/SymfonyStyle/command/command_14.php | 17 + .../Style/SymfonyStyle/command/command_15.php | 14 + .../Style/SymfonyStyle/command/command_16.php | 15 + .../Style/SymfonyStyle/command/command_17.php | 13 + .../Style/SymfonyStyle/command/command_2.php | 16 + .../Style/SymfonyStyle/command/command_3.php | 12 + .../Style/SymfonyStyle/command/command_4.php | 34 + .../Style/SymfonyStyle/command/command_5.php | 37 + .../Style/SymfonyStyle/command/command_6.php | 16 + .../Style/SymfonyStyle/command/command_7.php | 15 + .../Style/SymfonyStyle/command/command_8.php | 26 + .../Style/SymfonyStyle/command/command_9.php | 11 + .../command/interactive_command_1.php | 19 + .../output/interactive_output_1.txt | 7 + .../Style/SymfonyStyle/output/output_0.txt | 3 + .../Style/SymfonyStyle/output/output_1.txt | 9 + .../Style/SymfonyStyle/output/output_10.txt | 7 + .../Style/SymfonyStyle/output/output_11.txt | 4 + .../Style/SymfonyStyle/output/output_12.txt | 6 + .../Style/SymfonyStyle/output/output_13.txt | 7 + .../Style/SymfonyStyle/output/output_14.txt | 6 + .../Style/SymfonyStyle/output/output_15.txt | 7 + .../Style/SymfonyStyle/output/output_16.txt | 8 + .../Style/SymfonyStyle/output/output_17.txt | 7 + .../Style/SymfonyStyle/output/output_2.txt | 13 + .../Style/SymfonyStyle/output/output_3.txt | 7 + .../Style/SymfonyStyle/output/output_4.txt | 32 + .../Style/SymfonyStyle/output/output_5.txt | 18 + .../Style/SymfonyStyle/output/output_6.txt | 6 + .../Style/SymfonyStyle/output/output_7.txt | 5 + .../Style/SymfonyStyle/output/output_8.txt | 9 + .../Style/SymfonyStyle/output/output_9.txt | 5 + .../console/Tests/Fixtures/TestCommand.php | 28 + .../console/Tests/Fixtures/TestTiti.php | 21 + .../console/Tests/Fixtures/TestToto.php | 22 + .../console/Tests/Fixtures/application_1.json | 156 + .../console/Tests/Fixtures/application_1.md | 172 + .../console/Tests/Fixtures/application_1.txt | 17 + .../console/Tests/Fixtures/application_1.xml | 104 + .../console/Tests/Fixtures/application_2.json | 509 +++ .../console/Tests/Fixtures/application_2.md | 431 ++ .../console/Tests/Fixtures/application_2.txt | 21 + .../console/Tests/Fixtures/application_2.xml | 254 ++ .../application_filtered_namespace.txt | 16 + .../Tests/Fixtures/application_gethelp.txt | 1 + .../Tests/Fixtures/application_mbstring.md | 269 ++ .../Tests/Fixtures/application_mbstring.txt | 19 + .../Fixtures/application_renderexception1.txt | 5 + .../Fixtures/application_renderexception2.txt | 7 + .../Fixtures/application_renderexception3.txt | 18 + .../application_renderexception3decorated.txt | 18 + .../Fixtures/application_renderexception4.txt | 6 + ...plication_renderexception_doublewidth1.txt | 8 + ..._renderexception_doublewidth1decorated.txt | 8 + ...plication_renderexception_doublewidth2.txt | 9 + ...plication_renderexception_escapeslines.txt | 9 + ...application_renderexception_linebreaks.txt | 11 + .../Tests/Fixtures/application_run1.txt | 17 + .../Tests/Fixtures/application_run2.txt | 26 + .../Tests/Fixtures/application_run3.txt | 26 + .../Tests/Fixtures/application_run4.txt | 1 + .../console/Tests/Fixtures/command_1.json | 15 + .../console/Tests/Fixtures/command_1.md | 12 + .../console/Tests/Fixtures/command_1.txt | 7 + .../console/Tests/Fixtures/command_1.xml | 12 + .../console/Tests/Fixtures/command_2.json | 33 + .../console/Tests/Fixtures/command_2.md | 29 + .../console/Tests/Fixtures/command_2.txt | 13 + .../console/Tests/Fixtures/command_2.xml | 21 + .../Tests/Fixtures/command_mbstring.md | 29 + .../Tests/Fixtures/command_mbstring.txt | 13 + .../Tests/Fixtures/input_argument_1.json | 7 + .../Tests/Fixtures/input_argument_1.md | 5 + .../Tests/Fixtures/input_argument_1.txt | 1 + .../Tests/Fixtures/input_argument_1.xml | 5 + .../Tests/Fixtures/input_argument_2.json | 7 + .../Tests/Fixtures/input_argument_2.md | 7 + .../Tests/Fixtures/input_argument_2.txt | 1 + .../Tests/Fixtures/input_argument_2.xml | 5 + .../Tests/Fixtures/input_argument_3.json | 7 + .../Tests/Fixtures/input_argument_3.md | 7 + .../Tests/Fixtures/input_argument_3.txt | 1 + .../Tests/Fixtures/input_argument_3.xml | 7 + .../Tests/Fixtures/input_argument_4.json | 7 + .../Tests/Fixtures/input_argument_4.md | 8 + .../Tests/Fixtures/input_argument_4.txt | 2 + .../Tests/Fixtures/input_argument_4.xml | 6 + ...input_argument_with_default_inf_value.json | 7 + .../input_argument_with_default_inf_value.md | 7 + .../input_argument_with_default_inf_value.txt | 1 + .../input_argument_with_default_inf_value.xml | 7 + .../Fixtures/input_argument_with_style.json | 7 + .../Fixtures/input_argument_with_style.md | 7 + .../Fixtures/input_argument_with_style.txt | 1 + .../Fixtures/input_argument_with_style.xml | 7 + .../Tests/Fixtures/input_definition_1.json | 4 + .../Tests/Fixtures/input_definition_1.md | 0 .../Tests/Fixtures/input_definition_1.txt | 0 .../Tests/Fixtures/input_definition_1.xml | 5 + .../Tests/Fixtures/input_definition_2.json | 12 + .../Tests/Fixtures/input_definition_2.md | 7 + .../Tests/Fixtures/input_definition_2.txt | 2 + .../Tests/Fixtures/input_definition_2.xml | 10 + .../Tests/Fixtures/input_definition_3.json | 14 + .../Tests/Fixtures/input_definition_3.md | 8 + .../Tests/Fixtures/input_definition_3.txt | 2 + .../Tests/Fixtures/input_definition_3.xml | 9 + .../Tests/Fixtures/input_definition_4.json | 22 + .../Tests/Fixtures/input_definition_4.md | 16 + .../Tests/Fixtures/input_definition_4.txt | 5 + .../Tests/Fixtures/input_definition_4.xml | 14 + .../Tests/Fixtures/input_option_1.json | 9 + .../console/Tests/Fixtures/input_option_1.md | 6 + .../console/Tests/Fixtures/input_option_1.txt | 1 + .../console/Tests/Fixtures/input_option_1.xml | 4 + .../Tests/Fixtures/input_option_2.json | 9 + .../console/Tests/Fixtures/input_option_2.md | 8 + .../console/Tests/Fixtures/input_option_2.txt | 1 + .../console/Tests/Fixtures/input_option_2.xml | 7 + .../Tests/Fixtures/input_option_3.json | 9 + .../console/Tests/Fixtures/input_option_3.md | 8 + .../console/Tests/Fixtures/input_option_3.txt | 1 + .../console/Tests/Fixtures/input_option_3.xml | 5 + .../Tests/Fixtures/input_option_4.json | 9 + .../console/Tests/Fixtures/input_option_4.md | 8 + .../console/Tests/Fixtures/input_option_4.txt | 1 + .../console/Tests/Fixtures/input_option_4.xml | 5 + .../Tests/Fixtures/input_option_5.json | 9 + .../console/Tests/Fixtures/input_option_5.md | 9 + .../console/Tests/Fixtures/input_option_5.txt | 2 + .../console/Tests/Fixtures/input_option_5.xml | 6 + .../Tests/Fixtures/input_option_6.json | 9 + .../console/Tests/Fixtures/input_option_6.md | 8 + .../console/Tests/Fixtures/input_option_6.txt | 1 + .../console/Tests/Fixtures/input_option_6.xml | 5 + .../input_option_with_default_inf_value.json | 9 + .../input_option_with_default_inf_value.md | 8 + .../input_option_with_default_inf_value.txt | 1 + .../input_option_with_default_inf_value.xml | 7 + .../Fixtures/input_option_with_style.json | 9 + .../Tests/Fixtures/input_option_with_style.md | 8 + .../Fixtures/input_option_with_style.txt | 1 + .../Fixtures/input_option_with_style.xml | 7 + .../input_option_with_style_array.json | 12 + .../Fixtures/input_option_with_style_array.md | 8 + .../input_option_with_style_array.txt | 1 + .../input_option_with_style_array.xml | 8 + .../OutputFormatterStyleStackTest.php | 71 + .../Formatter/OutputFormatterStyleTest.php | 100 + .../Tests/Formatter/OutputFormatterTest.php | 333 ++ .../Helper/AbstractQuestionHelperTest.php | 34 + .../Tests/Helper/FormatterHelperTest.php | 129 + .../console/Tests/Helper/HelperSetTest.php | 127 + .../console/Tests/Helper/HelperTest.php | 55 + .../Tests/Helper/ProcessHelperTest.php | 118 + .../console/Tests/Helper/ProgressBarTest.php | 792 ++++ .../Tests/Helper/ProgressIndicatorTest.php | 183 + .../Tests/Helper/QuestionHelperTest.php | 585 +++ .../Helper/SymfonyQuestionHelperTest.php | 156 + .../console/Tests/Helper/TableStyleTest.php | 28 + .../console/Tests/Helper/TableTest.php | 838 ++++ .../console/Tests/Input/ArgvInputTest.php | 408 ++ .../console/Tests/Input/ArrayInputTest.php | 174 + .../console/Tests/Input/InputArgumentTest.php | 103 + .../Tests/Input/InputDefinitionTest.php | 406 ++ .../console/Tests/Input/InputOptionTest.php | 196 + .../symfony/console/Tests/Input/InputTest.php | 149 + .../console/Tests/Input/StringInputTest.php | 87 + .../Tests/Logger/ConsoleLoggerTest.php | 215 + .../Tests/Output/ConsoleOutputTest.php | 42 + .../console/Tests/Output/NullOutputTest.php | 88 + .../console/Tests/Output/OutputTest.php | 176 + .../console/Tests/Output/StreamOutputTest.php | 61 + .../console/Tests/Style/SymfonyStyleTest.php | 116 + vendor/symfony/console/Tests/TerminalTest.php | 44 + .../Tests/Tester/ApplicationTesterTest.php | 70 + .../Tests/Tester/CommandTesterTest.php | 163 + vendor/symfony/console/composer.json | 52 + vendor/symfony/console/phpunit.xml.dist | 41 + vendor/symfony/css-selector/.gitignore | 3 + vendor/symfony/css-selector/CHANGELOG.md | 13 + .../css-selector/CssSelectorConverter.php | 65 + .../Exception/ExceptionInterface.php | 24 + .../Exception/ExpressionErrorException.php | 24 + .../Exception/InternalErrorException.php | 24 + .../css-selector/Exception/ParseException.php | 24 + .../Exception/SyntaxErrorException.php | 73 + vendor/symfony/css-selector/LICENSE | 19 + .../css-selector/Node/AbstractNode.php | 42 + .../css-selector/Node/AttributeNode.php | 85 + .../symfony/css-selector/Node/ClassNode.php | 60 + .../Node/CombinedSelectorNode.php | 69 + .../symfony/css-selector/Node/ElementNode.php | 72 + .../css-selector/Node/FunctionNode.php | 81 + vendor/symfony/css-selector/Node/HashNode.php | 60 + .../css-selector/Node/NegationNode.php | 66 + .../css-selector/Node/NodeInterface.php | 31 + .../symfony/css-selector/Node/PseudoNode.php | 60 + .../css-selector/Node/SelectorNode.php | 60 + .../symfony/css-selector/Node/Specificity.php | 75 + .../Parser/Handler/CommentHandler.php | 48 + .../Parser/Handler/HandlerInterface.php | 33 + .../Parser/Handler/HashHandler.php | 58 + .../Parser/Handler/IdentifierHandler.php | 58 + .../Parser/Handler/NumberHandler.php | 54 + .../Parser/Handler/StringHandler.php | 77 + .../Parser/Handler/WhitespaceHandler.php | 46 + vendor/symfony/css-selector/Parser/Parser.php | 353 ++ .../css-selector/Parser/ParserInterface.php | 34 + vendor/symfony/css-selector/Parser/Reader.php | 86 + .../Parser/Shortcut/ClassParser.php | 51 + .../Parser/Shortcut/ElementParser.php | 47 + .../Parser/Shortcut/EmptyStringParser.php | 46 + .../Parser/Shortcut/HashParser.php | 51 + vendor/symfony/css-selector/Parser/Token.php | 111 + .../css-selector/Parser/TokenStream.php | 175 + .../Parser/Tokenizer/Tokenizer.php | 75 + .../Parser/Tokenizer/TokenizerEscaping.php | 63 + .../Parser/Tokenizer/TokenizerPatterns.php | 89 + vendor/symfony/css-selector/README.md | 20 + .../Tests/CssSelectorConverterTest.php | 76 + .../Tests/Node/AbstractNodeTest.php | 34 + .../Tests/Node/AttributeNodeTest.php | 37 + .../css-selector/Tests/Node/ClassNodeTest.php | 33 + .../Tests/Node/CombinedSelectorNodeTest.php | 35 + .../Tests/Node/ElementNodeTest.php | 35 + .../Tests/Node/FunctionNodeTest.php | 47 + .../css-selector/Tests/Node/HashNodeTest.php | 33 + .../Tests/Node/NegationNodeTest.php | 33 + .../Tests/Node/PseudoNodeTest.php | 32 + .../Tests/Node/SelectorNodeTest.php | 34 + .../Tests/Node/SpecificityTest.php | 63 + .../Parser/Handler/AbstractHandlerTest.php | 70 + .../Parser/Handler/CommentHandlerTest.php | 55 + .../Tests/Parser/Handler/HashHandlerTest.php | 49 + .../Parser/Handler/IdentifierHandlerTest.php | 49 + .../Parser/Handler/NumberHandlerTest.php | 50 + .../Parser/Handler/StringHandlerTest.php | 50 + .../Parser/Handler/WhitespaceHandlerTest.php | 44 + .../css-selector/Tests/Parser/ParserTest.php | 249 ++ .../css-selector/Tests/Parser/ReaderTest.php | 102 + .../Tests/Parser/Shortcut/ClassParserTest.php | 45 + .../Parser/Shortcut/ElementParserTest.php | 44 + .../Parser/Shortcut/EmptyStringParserTest.php | 36 + .../Tests/Parser/Shortcut/HashParserTest.php | 45 + .../Tests/Parser/TokenStreamTest.php | 96 + .../Tests/XPath/Fixtures/ids.html | 48 + .../Tests/XPath/Fixtures/lang.xml | 11 + .../Tests/XPath/Fixtures/shakespear.html | 308 ++ .../Tests/XPath/TranslatorTest.php | 325 ++ .../XPath/Extension/AbstractExtension.php | 65 + .../Extension/AttributeMatchingExtension.php | 119 + .../XPath/Extension/CombinationExtension.php | 83 + .../XPath/Extension/ExtensionInterface.php | 69 + .../XPath/Extension/FunctionExtension.php | 177 + .../XPath/Extension/HtmlExtension.php | 216 + .../XPath/Extension/NodeExtension.php | 197 + .../XPath/Extension/PseudoClassExtension.php | 148 + .../symfony/css-selector/XPath/Translator.php | 224 ++ .../XPath/TranslatorInterface.php | 37 + .../symfony/css-selector/XPath/XPathExpr.php | 102 + vendor/symfony/css-selector/composer.json | 37 + vendor/symfony/css-selector/phpunit.xml.dist | 31 + vendor/symfony/dom-crawler/.gitignore | 3 + .../dom-crawler/AbstractUriElement.php | 200 + vendor/symfony/dom-crawler/CHANGELOG.md | 53 + vendor/symfony/dom-crawler/Crawler.php | 1154 ++++++ .../dom-crawler/Field/ChoiceFormField.php | 320 ++ .../dom-crawler/Field/FileFormField.php | 108 + .../symfony/dom-crawler/Field/FormField.php | 136 + .../dom-crawler/Field/InputFormField.php | 45 + .../dom-crawler/Field/TextareaFormField.php | 37 + vendor/symfony/dom-crawler/Form.php | 489 +++ .../symfony/dom-crawler/FormFieldRegistry.php | 215 + vendor/symfony/dom-crawler/Image.php | 37 + vendor/symfony/dom-crawler/LICENSE | 19 + vendor/symfony/dom-crawler/Link.php | 34 + vendor/symfony/dom-crawler/README.md | 13 + .../symfony/dom-crawler/Tests/CrawlerTest.php | 1204 ++++++ .../Tests/Field/ChoiceFormFieldTest.php | 404 ++ .../Tests/Field/FileFormFieldTest.php | 114 + .../dom-crawler/Tests/Field/FormFieldTest.php | 72 + .../Tests/Field/FormFieldTestCase.php | 29 + .../Tests/Field/InputFormFieldTest.php | 49 + .../Tests/Field/TextareaFormFieldTest.php | 46 + .../dom-crawler/Tests/Fixtures/no-extension | 1 + .../Tests/Fixtures/windows-1250.html | 8 + vendor/symfony/dom-crawler/Tests/FormTest.php | 962 +++++ .../symfony/dom-crawler/Tests/ImageTest.php | 49 + vendor/symfony/dom-crawler/Tests/LinkTest.php | 161 + vendor/symfony/dom-crawler/composer.json | 40 + vendor/symfony/dom-crawler/phpunit.xml.dist | 31 + vendor/symfony/event-dispatcher/.gitignore | 3 + vendor/symfony/event-dispatcher/CHANGELOG.md | 48 + .../Debug/TraceableEventDispatcher.php | 322 ++ .../TraceableEventDispatcherInterface.php | 39 + .../Debug/WrappedListener.php | 114 + .../RegisterListenersPass.php | 134 + vendor/symfony/event-dispatcher/Event.php | 58 + .../event-dispatcher/EventDispatcher.php | 236 ++ .../EventDispatcherInterface.php | 93 + .../EventSubscriberInterface.php | 46 + .../symfony/event-dispatcher/GenericEvent.php | 175 + .../ImmutableEventDispatcher.php | 91 + vendor/symfony/event-dispatcher/LICENSE | 19 + vendor/symfony/event-dispatcher/README.md | 15 + .../Tests/AbstractEventDispatcherTest.php | 442 +++ .../Debug/TraceableEventDispatcherTest.php | 257 ++ .../RegisterListenersPassTest.php | 179 + .../Tests/EventDispatcherTest.php | 22 + .../event-dispatcher/Tests/EventTest.php | 55 + .../Tests/GenericEventTest.php | 140 + .../Tests/ImmutableEventDispatcherTest.php | 106 + vendor/symfony/event-dispatcher/composer.json | 47 + .../symfony/event-dispatcher/phpunit.xml.dist | 31 + vendor/symfony/finder/.gitignore | 3 + vendor/symfony/finder/CHANGELOG.md | 61 + .../symfony/finder/Comparator/Comparator.php | 98 + .../finder/Comparator/DateComparator.php | 51 + .../finder/Comparator/NumberComparator.php | 79 + .../Exception/AccessDeniedException.php | 19 + vendor/symfony/finder/Finder.php | 718 ++++ vendor/symfony/finder/Glob.php | 116 + .../finder/Iterator/CustomFilterIterator.php | 61 + .../Iterator/DateRangeFilterIterator.php | 58 + .../Iterator/DepthRangeFilterIterator.php | 45 + .../ExcludeDirectoryFilterIterator.php | 84 + .../Iterator/FileTypeFilterIterator.php | 53 + .../Iterator/FilecontentFilterIterator.php | 58 + .../Iterator/FilenameFilterIterator.php | 47 + .../Iterator/MultiplePcreFilterIterator.php | 112 + .../finder/Iterator/PathFilterIterator.php | 56 + .../Iterator/RecursiveDirectoryIterator.php | 140 + .../Iterator/SizeRangeFilterIterator.php | 57 + .../finder/Iterator/SortableIterator.php | 80 + vendor/symfony/finder/LICENSE | 19 + vendor/symfony/finder/README.md | 14 + vendor/symfony/finder/SplFileInfo.php | 79 + .../Tests/Comparator/ComparatorTest.php | 65 + .../Tests/Comparator/DateComparatorTest.php | 64 + .../Tests/Comparator/NumberComparatorTest.php | 108 + vendor/symfony/finder/Tests/FinderTest.php | 698 ++++ vendor/symfony/finder/Tests/Fixtures/.dot/a | 0 .../finder/Tests/Fixtures/.dot/b/c.neon | 0 .../finder/Tests/Fixtures/.dot/b/d.neon | 0 .../finder/Tests/Fixtures/A/B/C/abc.dat | 0 .../symfony/finder/Tests/Fixtures/A/B/ab.dat | 0 vendor/symfony/finder/Tests/Fixtures/A/a.dat | 0 .../Tests/Fixtures/copy/A/B/C/abc.dat.copy | 0 .../Tests/Fixtures/copy/A/B/ab.dat.copy | 0 .../finder/Tests/Fixtures/copy/A/a.dat.copy | 0 .../symfony/finder/Tests/Fixtures/dolor.txt | 2 + .../symfony/finder/Tests/Fixtures/ipsum.txt | 2 + .../symfony/finder/Tests/Fixtures/lorem.txt | 2 + vendor/symfony/finder/Tests/Fixtures/one/.dot | 1 + vendor/symfony/finder/Tests/Fixtures/one/a | 0 .../finder/Tests/Fixtures/one/b/c.neon | 0 .../finder/Tests/Fixtures/one/b/d.neon | 0 .../Fixtures/r+e.gex[c]a(r)s/dir/bar.dat | 0 .../finder/Tests/Fixtures/with space/foo.txt | 0 vendor/symfony/finder/Tests/GlobTest.php | 95 + .../Iterator/CustomFilterIteratorTest.php | 46 + .../Iterator/DateRangeFilterIteratorTest.php | 74 + .../Iterator/DepthRangeFilterIteratorTest.php | 83 + .../ExcludeDirectoryFilterIteratorTest.php | 80 + .../Iterator/FileTypeFilterIteratorTest.php | 73 + .../FilecontentFilterIteratorTest.php | 86 + .../Iterator/FilenameFilterIteratorTest.php | 54 + .../finder/Tests/Iterator/Iterator.php | 55 + .../Tests/Iterator/IteratorTestCase.php | 100 + .../Tests/Iterator/MockFileListIterator.php | 21 + .../finder/Tests/Iterator/MockSplFileInfo.php | 132 + .../MultiplePcreFilterIteratorTest.php | 71 + .../Tests/Iterator/PathFilterIteratorTest.php | 82 + .../Tests/Iterator/RealIteratorTestCase.php | 110 + .../RecursiveDirectoryIteratorTest.php | 59 + .../Iterator/SizeRangeFilterIteratorTest.php | 69 + .../Tests/Iterator/SortableIteratorTest.php | 183 + vendor/symfony/finder/composer.json | 33 + vendor/symfony/finder/phpunit.xml.dist | 30 + vendor/symfony/polyfill-mbstring/LICENSE | 19 + vendor/symfony/polyfill-mbstring/Mbstring.php | 791 ++++ vendor/symfony/polyfill-mbstring/README.md | 13 + .../Resources/unidata/lowerCase.php | 1101 ++++++ .../Resources/unidata/upperCase.php | 1109 ++++++ .../symfony/polyfill-mbstring/bootstrap.php | 58 + .../symfony/polyfill-mbstring/composer.json | 34 + vendor/symfony/process/.gitignore | 3 + vendor/symfony/process/CHANGELOG.md | 74 + .../process/Exception/ExceptionInterface.php | 21 + .../Exception/InvalidArgumentException.php | 21 + .../process/Exception/LogicException.php | 21 + .../Exception/ProcessFailedException.php | 54 + .../Exception/ProcessTimedOutException.php | 69 + .../process/Exception/RuntimeException.php | 21 + vendor/symfony/process/ExecutableFinder.php | 88 + vendor/symfony/process/InputStream.php | 92 + vendor/symfony/process/LICENSE | 19 + .../symfony/process/PhpExecutableFinder.php | 82 + vendor/symfony/process/PhpProcess.php | 71 + .../symfony/process/Pipes/AbstractPipes.php | 168 + .../symfony/process/Pipes/PipesInterface.php | 67 + vendor/symfony/process/Pipes/UnixPipes.php | 150 + vendor/symfony/process/Pipes/WindowsPipes.php | 196 + vendor/symfony/process/Process.php | 1562 ++++++++ vendor/symfony/process/ProcessUtils.php | 69 + vendor/symfony/process/README.md | 13 + .../process/Tests/ExecutableFinderTest.php | 133 + .../process/Tests/NonStopableProcess.php | 47 + .../process/Tests/PhpExecutableFinderTest.php | 49 + .../symfony/process/Tests/PhpProcessTest.php | 48 + .../PipeStdinInStdoutStdErrStreamSelect.php | 72 + .../Tests/ProcessFailedExceptionTest.php | 137 + vendor/symfony/process/Tests/ProcessTest.php | 1521 +++++++ .../symfony/process/Tests/SignalListener.php | 21 + vendor/symfony/process/composer.json | 33 + vendor/symfony/process/phpunit.xml.dist | 30 + vendor/symfony/yaml/.gitignore | 3 + vendor/symfony/yaml/CHANGELOG.md | 179 + vendor/symfony/yaml/Command/LintCommand.php | 248 ++ vendor/symfony/yaml/Dumper.php | 94 + vendor/symfony/yaml/Escaper.php | 101 + .../symfony/yaml/Exception/DumpException.php | 21 + .../yaml/Exception/ExceptionInterface.php | 21 + .../symfony/yaml/Exception/ParseException.php | 139 + .../yaml/Exception/RuntimeException.php | 21 + vendor/symfony/yaml/Inline.php | 741 ++++ vendor/symfony/yaml/LICENSE | 19 + vendor/symfony/yaml/Parser.php | 1106 ++++++ vendor/symfony/yaml/README.md | 13 + vendor/symfony/yaml/Tag/TaggedValue.php | 38 + .../yaml/Tests/Command/LintCommandTest.php | 139 + vendor/symfony/yaml/Tests/DumperTest.php | 418 ++ .../yaml/Tests/Fixtures/YtsAnchorAlias.yml | 31 + .../yaml/Tests/Fixtures/YtsBasicTests.yml | 202 + .../yaml/Tests/Fixtures/YtsBlockMapping.yml | 51 + .../Tests/Fixtures/YtsDocumentSeparator.yml | 85 + .../yaml/Tests/Fixtures/YtsErrorTests.yml | 25 + .../Tests/Fixtures/YtsFlowCollections.yml | 60 + .../yaml/Tests/Fixtures/YtsFoldedScalars.yml | 176 + .../Tests/Fixtures/YtsNullsAndEmpties.yml | 45 + .../Fixtures/YtsSpecificationExamples.yml | 1662 ++++++++ .../yaml/Tests/Fixtures/YtsTypeTransfers.yml | 224 ++ vendor/symfony/yaml/Tests/Fixtures/arrow.gif | Bin 0 -> 185 bytes .../Tests/Fixtures/booleanMappingKeys.yml | 11 + .../yaml/Tests/Fixtures/embededPhp.yml | 1 + .../yaml/Tests/Fixtures/escapedCharacters.yml | 155 + vendor/symfony/yaml/Tests/Fixtures/index.yml | 18 + .../multiple_lines_as_literal_block.yml | 14 + .../yaml/Tests/Fixtures/nonStringKeys.yml | 3 + .../yaml/Tests/Fixtures/not_readable.yml | 18 + .../yaml/Tests/Fixtures/nullMappingKey.yml | 9 + .../Tests/Fixtures/numericMappingKeys.yml | 23 + .../yaml/Tests/Fixtures/sfComments.yml | 76 + .../symfony/yaml/Tests/Fixtures/sfCompact.yml | 159 + .../yaml/Tests/Fixtures/sfMergeKey.yml | 61 + .../symfony/yaml/Tests/Fixtures/sfObjects.yml | 11 + .../symfony/yaml/Tests/Fixtures/sfQuotes.yml | 33 + .../symfony/yaml/Tests/Fixtures/sfTests.yml | 140 + .../Tests/Fixtures/unindentedCollections.yml | 82 + vendor/symfony/yaml/Tests/InlineTest.php | 751 ++++ .../symfony/yaml/Tests/ParseExceptionTest.php | 34 + vendor/symfony/yaml/Tests/ParserTest.php | 2022 ++++++++++ vendor/symfony/yaml/Tests/YamlTest.php | 44 + vendor/symfony/yaml/Unescaper.php | 138 + vendor/symfony/yaml/Yaml.php | 102 + vendor/symfony/yaml/composer.json | 42 + vendor/symfony/yaml/phpunit.xml.dist | 30 + vendor/theseer/tokenizer/.gitignore | 7 + vendor/theseer/tokenizer/.php_cs | 67 + vendor/theseer/tokenizer/.travis.yml | 33 + vendor/theseer/tokenizer/LICENSE | 30 + vendor/theseer/tokenizer/README.md | 49 + vendor/theseer/tokenizer/build.xml | 41 + vendor/theseer/tokenizer/composer.json | 27 + vendor/theseer/tokenizer/phive.xml | 5 + vendor/theseer/tokenizer/phpunit.xml | 25 + vendor/theseer/tokenizer/src/Exception.php | 6 + vendor/theseer/tokenizer/src/NamespaceUri.php | 28 + .../tokenizer/src/NamespaceUriException.php | 6 + vendor/theseer/tokenizer/src/Token.php | 55 + .../theseer/tokenizer/src/TokenCollection.php | 128 + .../src/TokenCollectionException.php | 6 + vendor/theseer/tokenizer/src/Tokenizer.php | 82 + .../theseer/tokenizer/src/XMLSerializer.php | 94 + .../tokenizer/tests/NamespaceUriTest.php | 29 + .../tokenizer/tests/TokenCollectionTest.php | 72 + vendor/theseer/tokenizer/tests/TokenTest.php | 31 + .../theseer/tokenizer/tests/TokenizerTest.php | 21 + .../tokenizer/tests/XMLSerializerTest.php | 43 + .../tokenizer/tests/_files/customns.xml | 177 + .../theseer/tokenizer/tests/_files/test.php | 25 + .../tokenizer/tests/_files/test.php.tokens | Bin 0 -> 29474 bytes .../tokenizer/tests/_files/test.php.xml | 177 + vendor/webmozart/assert/.composer-auth.json | 7 + vendor/webmozart/assert/.styleci.yml | 11 + vendor/webmozart/assert/CHANGELOG.md | 53 + vendor/webmozart/assert/LICENSE | 20 + vendor/webmozart/assert/README.md | 252 ++ vendor/webmozart/assert/composer.json | 34 + vendor/webmozart/assert/src/Assert.php | 1087 +++++ 3550 files changed, 342635 insertions(+) create mode 100644 .gitmodules create mode 100644 composer.json create mode 100644 composer.lock create mode 160000 e107 create mode 100644 vendor/autoload.php create mode 100644 vendor/behat/gherkin/.gitignore create mode 100644 vendor/behat/gherkin/.travis.yml create mode 100644 vendor/behat/gherkin/CHANGES.md create mode 100644 vendor/behat/gherkin/CONTRIBUTING.md create mode 100644 vendor/behat/gherkin/LICENSE create mode 100644 vendor/behat/gherkin/README.md create mode 100755 vendor/behat/gherkin/bin/update_i18n create mode 100644 vendor/behat/gherkin/composer.json create mode 100644 vendor/behat/gherkin/i18n.php create mode 100644 vendor/behat/gherkin/libpath.php create mode 100644 vendor/behat/gherkin/package.xml.tpl create mode 100644 vendor/behat/gherkin/phpdoc.ini.dist create mode 100644 vendor/behat/gherkin/phpunit.xml.dist create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Cache/CacheInterface.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Cache/FileCache.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Cache/MemoryCache.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Exception/CacheException.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Exception/Exception.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Exception/LexerException.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Exception/NodeException.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Exception/ParserException.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Filter/ComplexFilter.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Filter/ComplexFilterInterface.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Filter/FeatureFilterInterface.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Filter/FilterInterface.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Filter/LineFilter.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Filter/LineRangeFilter.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Filter/NameFilter.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Filter/NarrativeFilter.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Filter/PathsFilter.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Filter/RoleFilter.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Filter/SimpleFilter.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Filter/TagFilter.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Gherkin.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Keywords/ArrayKeywords.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Keywords/CachedArrayKeywords.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Keywords/CucumberKeywords.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Keywords/KeywordsDumper.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Keywords/KeywordsInterface.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Lexer.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Loader/AbstractFileLoader.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Loader/ArrayLoader.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Loader/DirectoryLoader.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Loader/FileLoaderInterface.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Loader/GherkinFileLoader.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Loader/LoaderInterface.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Loader/YamlFileLoader.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Node/ArgumentInterface.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Node/BackgroundNode.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Node/ExampleNode.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Node/ExampleTableNode.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Node/FeatureNode.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Node/KeywordNodeInterface.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Node/NodeInterface.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Node/OutlineNode.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Node/PyStringNode.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Node/ScenarioInterface.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Node/ScenarioLikeInterface.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Node/ScenarioNode.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Node/StepContainerInterface.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Node/StepNode.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Node/TableNode.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Node/TaggedNodeInterface.php create mode 100644 vendor/behat/gherkin/src/Behat/Gherkin/Parser.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Cache/FileCacheTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Cache/MemoryCacheTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Filter/FilterTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Filter/Fixtures/full/file2 create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Filter/Fixtures/full_path/file1 create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Filter/LineFilterTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Filter/LineRangeFilterTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Filter/NameFilterTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Filter/NarrativeFilterTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Filter/PathsFilterTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Filter/RoleFilterTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Filter/TagFilterTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/directories/phps/some_file.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/addition.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/background.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/background_title.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/big_pystring.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/clean_tags.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/commented_out.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/comments.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/complex_descriptions.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/empty.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/empty_scenario.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/empty_scenario_without_linefeed.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/empty_scenarios.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/fibonacci.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/hashes_in_quotes.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/issue_13.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ja_addition.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/long_title_feature.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/multiline_name.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/multiline_name_with_newlines.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/multiplepystrings.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/outline_with_spaces.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/outline_with_step_table.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/pystring.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ru_addition.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ru_commented.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ru_consecutive_calculations.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ru_division.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/start_comments.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/tables.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/tags_sample.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/test_unit.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/trimpystring.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/undefined_multiline_args.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/addition.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/background.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/background_title.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/big_pystring.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/clean_tags.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/commented_out.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/comments.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/complex_descriptions.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/empty.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/empty_scenario.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/empty_scenario_without_linefeed.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/empty_scenarios.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/fibonacci.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/hashes_in_quotes.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/issue_13.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ja_addition.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/long_title_feature.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/multiline_name.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/multiline_name_with_newlines.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/multiplepystrings.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/outline_with_spaces.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/outline_with_step_table.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/pystring.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ru_addition.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ru_commented.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ru_consecutive_calculations.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ru_division.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/start_comments.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/tables.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/tags_sample.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/test_unit.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/trimpystring.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/undefined_multiline_args.feature create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/i18n.yml create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/GherkinTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Keywords/ArrayKeywordsTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Keywords/CachedArrayKeywordsTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Keywords/CucumberKeywordsTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Keywords/KeywordsDumperTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Keywords/KeywordsTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Loader/ArrayLoaderTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Loader/DirectoryLoaderTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Loader/GherkinFileLoaderTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Loader/YamlFileLoaderTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Node/ExampleNodeTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Node/OutlineNodeTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Node/PyStringNodeTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Node/StepNodeTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/Node/TableNodeTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/ParserExceptionsTest.php create mode 100644 vendor/behat/gherkin/tests/Behat/Gherkin/ParserTest.php create mode 120000 vendor/bin/codecept create mode 120000 vendor/bin/phpunit create mode 100644 vendor/codeception/codeception/.gitattributes create mode 100644 vendor/codeception/codeception/.gitignore create mode 100644 vendor/codeception/codeception/.travis.yml create mode 100644 vendor/codeception/codeception/CHANGELOG-2.0.md create mode 100644 vendor/codeception/codeception/CHANGELOG-2.1.md create mode 100644 vendor/codeception/codeception/CHANGELOG-2.2.md create mode 100644 vendor/codeception/codeception/CHANGELOG-2.3.md create mode 100644 vendor/codeception/codeception/CONTRIBUTING.md create mode 100644 vendor/codeception/codeception/Dockerfile create mode 100644 vendor/codeception/codeception/ISSUE_TEMPLATE.md create mode 100644 vendor/codeception/codeception/LICENSE create mode 100644 vendor/codeception/codeception/RoboFile.php create mode 100644 vendor/codeception/codeception/appveyor.yml create mode 100644 vendor/codeception/codeception/autoload.php create mode 100755 vendor/codeception/codeception/codecept create mode 100644 vendor/codeception/codeception/codecept.bat create mode 100644 vendor/codeception/codeception/codeception.yml create mode 100644 vendor/codeception/codeception/composer.json create mode 100644 vendor/codeception/codeception/docs/01-Introduction.md create mode 100644 vendor/codeception/codeception/docs/02-GettingStarted.md create mode 100644 vendor/codeception/codeception/docs/03-AcceptanceTests.md create mode 100644 vendor/codeception/codeception/docs/04-FunctionalTests.md create mode 100644 vendor/codeception/codeception/docs/05-UnitTests.md create mode 100644 vendor/codeception/codeception/docs/06-ModulesAndHelpers.md create mode 100644 vendor/codeception/codeception/docs/06-ReusingTestCode.md create mode 100644 vendor/codeception/codeception/docs/07-AdvancedUsage.md create mode 100644 vendor/codeception/codeception/docs/07-BDD.md create mode 100644 vendor/codeception/codeception/docs/08-Customization.md create mode 100644 vendor/codeception/codeception/docs/09-Data.md create mode 100644 vendor/codeception/codeception/docs/10-WebServices.md create mode 100644 vendor/codeception/codeception/docs/11-Codecoverage.md create mode 100644 vendor/codeception/codeception/docs/12-ContinuousIntegration.md create mode 100644 vendor/codeception/codeception/docs/12-ParallelExecution.md create mode 100644 vendor/codeception/codeception/docs/modules/AMQP.md create mode 100644 vendor/codeception/codeception/docs/modules/AngularJS.md create mode 100644 vendor/codeception/codeception/docs/modules/Apc.md create mode 100644 vendor/codeception/codeception/docs/modules/Asserts.md create mode 100644 vendor/codeception/codeception/docs/modules/Cli.md create mode 100644 vendor/codeception/codeception/docs/modules/DataFactory.md create mode 100644 vendor/codeception/codeception/docs/modules/Db.md create mode 100644 vendor/codeception/codeception/docs/modules/Doctrine2.md create mode 100644 vendor/codeception/codeception/docs/modules/FTP.md create mode 100644 vendor/codeception/codeception/docs/modules/Facebook.md create mode 100644 vendor/codeception/codeception/docs/modules/Filesystem.md create mode 100644 vendor/codeception/codeception/docs/modules/Laravel5.md create mode 100644 vendor/codeception/codeception/docs/modules/Lumen.md create mode 100644 vendor/codeception/codeception/docs/modules/Memcache.md create mode 100644 vendor/codeception/codeception/docs/modules/MongoDb.md create mode 100644 vendor/codeception/codeception/docs/modules/Phalcon.md create mode 100644 vendor/codeception/codeception/docs/modules/PhpBrowser.md create mode 100644 vendor/codeception/codeception/docs/modules/Queue.md create mode 100644 vendor/codeception/codeception/docs/modules/REST.md create mode 100644 vendor/codeception/codeception/docs/modules/Redis.md create mode 100644 vendor/codeception/codeception/docs/modules/SOAP.md create mode 100644 vendor/codeception/codeception/docs/modules/Sequence.md create mode 100644 vendor/codeception/codeception/docs/modules/Silex.md create mode 100644 vendor/codeception/codeception/docs/modules/Symfony.md create mode 100644 vendor/codeception/codeception/docs/modules/WebDriver.md create mode 100644 vendor/codeception/codeception/docs/modules/XMLRPC.md create mode 100644 vendor/codeception/codeception/docs/modules/Yii1.md create mode 100644 vendor/codeception/codeception/docs/modules/Yii2.md create mode 100644 vendor/codeception/codeception/docs/modules/ZF1.md create mode 100644 vendor/codeception/codeception/docs/modules/ZF2.md create mode 100644 vendor/codeception/codeception/docs/modules/ZendExpressive.md create mode 100644 vendor/codeception/codeception/docs/reference/Autoload.md create mode 100644 vendor/codeception/codeception/docs/reference/Commands.md create mode 100644 vendor/codeception/codeception/docs/reference/Configuration.md create mode 100644 vendor/codeception/codeception/docs/reference/Fixtures.md create mode 100644 vendor/codeception/codeception/docs/reference/Functions.md create mode 100644 vendor/codeception/codeception/docs/reference/HttpCode.md create mode 100644 vendor/codeception/codeception/docs/reference/InitTemplate.md create mode 100644 vendor/codeception/codeception/docs/reference/JsonType.md create mode 100644 vendor/codeception/codeception/docs/reference/Locator.md create mode 100644 vendor/codeception/codeception/docs/reference/Mock.md create mode 100644 vendor/codeception/codeception/docs/reference/Module.md create mode 100644 vendor/codeception/codeception/docs/reference/Stub.md create mode 100644 vendor/codeception/codeception/docs/reference/XmlBuilder.md create mode 100644 vendor/codeception/codeception/ext/DotReporter.php create mode 100644 vendor/codeception/codeception/ext/Logger.php create mode 100644 vendor/codeception/codeception/ext/README.md create mode 100644 vendor/codeception/codeception/ext/Recorder.php create mode 100644 vendor/codeception/codeception/ext/RunFailed.php create mode 100644 vendor/codeception/codeception/ext/RunProcess.php create mode 100644 vendor/codeception/codeception/ext/SimpleReporter.php create mode 100644 vendor/codeception/codeception/nitpick.json create mode 100644 vendor/codeception/codeception/package/bin create mode 100644 vendor/codeception/codeception/package/stub.php create mode 100644 vendor/codeception/codeception/phpunit5-loggers.php create mode 100644 vendor/codeception/codeception/readme.md create mode 100644 vendor/codeception/codeception/ruleset.xml create mode 100644 vendor/codeception/codeception/shim.php create mode 100644 vendor/codeception/codeception/src/Codeception/Actor.php create mode 100644 vendor/codeception/codeception/src/Codeception/Application.php create mode 100644 vendor/codeception/codeception/src/Codeception/Codecept.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/Bootstrap.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/Build.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/Clean.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/Completion.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/CompletionFallback.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/ConfigValidate.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/Console.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/DryRun.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/GenerateCept.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/GenerateCest.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/GenerateEnvironment.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/GenerateFeature.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/GenerateGroup.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/GenerateHelper.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/GeneratePageObject.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/GenerateScenarios.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/GenerateStepObject.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/GenerateSuite.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/GenerateTest.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/GherkinSnippets.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/GherkinSteps.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/Init.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/Run.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/SelfUpdate.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/Shared/Config.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/Shared/FileSystem.php create mode 100644 vendor/codeception/codeception/src/Codeception/Command/Shared/Style.php create mode 100644 vendor/codeception/codeception/src/Codeception/Configuration.php create mode 100644 vendor/codeception/codeception/src/Codeception/Coverage/DummyCodeCoverage.php create mode 100644 vendor/codeception/codeception/src/Codeception/Coverage/Filter.php create mode 100644 vendor/codeception/codeception/src/Codeception/Coverage/Subscriber/Local.php create mode 100644 vendor/codeception/codeception/src/Codeception/Coverage/Subscriber/LocalServer.php create mode 100644 vendor/codeception/codeception/src/Codeception/Coverage/Subscriber/Printer.php create mode 100644 vendor/codeception/codeception/src/Codeception/Coverage/Subscriber/RemoteServer.php create mode 100644 vendor/codeception/codeception/src/Codeception/Coverage/SuiteSubscriber.php create mode 100644 vendor/codeception/codeception/src/Codeception/CustomCommandInterface.php create mode 100644 vendor/codeception/codeception/src/Codeception/Event/FailEvent.php create mode 100644 vendor/codeception/codeception/src/Codeception/Event/PrintResultEvent.php create mode 100644 vendor/codeception/codeception/src/Codeception/Event/StepEvent.php create mode 100644 vendor/codeception/codeception/src/Codeception/Event/SuiteEvent.php create mode 100644 vendor/codeception/codeception/src/Codeception/Event/TestEvent.php create mode 100644 vendor/codeception/codeception/src/Codeception/Events.php create mode 100644 vendor/codeception/codeception/src/Codeception/Example.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/ConditionalAssertionFailed.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/ConfigurationException.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/ConnectionException.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/ContentNotFound.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/ElementNotFound.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/ExtensionException.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/ExternalUrlException.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/Fail.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/Incomplete.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/InjectionException.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/MalformedLocatorException.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/ModuleConfigException.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/ModuleConflictException.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/ModuleException.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/ModuleRequireException.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/ParseException.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/RemoteException.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/Skip.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/TestParseException.php create mode 100644 vendor/codeception/codeception/src/Codeception/Exception/TestRuntimeException.php create mode 100644 vendor/codeception/codeception/src/Codeception/Extension.php create mode 100644 vendor/codeception/codeception/src/Codeception/GroupObject.php create mode 100644 vendor/codeception/codeception/src/Codeception/InitTemplate.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Actor/Shared/Comment.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Actor/Shared/Friend.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Guzzle.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Guzzle6.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Laravel5.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Laravel5/ExceptionHandlerDecorator.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Lumen.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Lumen/DummyKernel.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Phalcon.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Phalcon/MemorySession.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Shared/LaravelCommon.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Shared/PhpSuperGlobalsConverter.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Symfony.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Universal.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Yii1.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Yii2.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Yii2/FixturesStore.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Yii2/Logger.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/Yii2/TestMailer.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/ZF1.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/ZF2.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/ZF2/PersistentServiceManager.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/ZendExpressive.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Connector/ZendExpressive/ResponseCollector.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Console/Colorizer.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Console/DiffFactory.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Console/Message.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Console/MessageFactory.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Console/Output.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/DbPopulator.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Di.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Driver/AmazonSQS.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Driver/Beanstalk.php create mode 100755 vendor/codeception/codeception/src/Codeception/Lib/Driver/Db.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Driver/Facebook.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Driver/Iron.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Driver/MongoDb.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Driver/MySql.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Driver/Oci.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Driver/PostgreSql.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Driver/SqlSrv.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Driver/Sqlite.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Framework.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Friend.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Generator/Actions.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Generator/Actor.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Generator/Cept.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Generator/Cest.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Generator/Feature.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Generator/GherkinSnippets.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Generator/Group.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Generator/Helper.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Generator/PageObject.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Generator/Shared/Classname.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Generator/StepObject.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Generator/Test.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/GroupManager.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/InnerBrowser.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/API.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/ActiveRecord.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/ConflictsWithModule.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/DataMapper.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/Db.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/DependsOnModule.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/DoctrineProvider.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/ElementLocator.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/MultiSession.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/ORM.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/PageSourceSaver.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/PartedModule.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/Queue.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/Remote.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/RequiresPackage.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/ScreenshotSaver.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/SessionSnapshot.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Interfaces/Web.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/ModuleContainer.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Notification.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/ParamsLoader.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Parser.php create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/README.md create mode 100644 vendor/codeception/codeception/src/Codeception/Lib/Shared/LaravelCommon.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/AMQP.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/AngularJS.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Apc.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Asserts.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Cli.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/DataFactory.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Db.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Doctrine2.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/FTP.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Facebook.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Filesystem.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Laravel5.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Lumen.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Memcache.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/MongoDb.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Phalcon.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/PhpBrowser.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Queue.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/README.md create mode 100644 vendor/codeception/codeception/src/Codeception/Module/REST.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Redis.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/SOAP.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Sequence.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Silex.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Symfony.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/WebDriver.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/XMLRPC.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Yii1.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/Yii2.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/ZF1.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/ZF2.php create mode 100644 vendor/codeception/codeception/src/Codeception/Module/ZendExpressive.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/ConsolePrinter.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/Constraint/Crawler.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/Constraint/CrawlerNot.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/Constraint/JsonContains.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/Constraint/JsonType.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/Constraint/Page.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/Constraint/WebDriver.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/Constraint/WebDriverNot.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/FilterTest.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/Listener.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/Log/JUnit.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/Overrides/Filter.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/README.md create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/ResultPrinter.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/ResultPrinter/HTML.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/ResultPrinter/Report.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/ResultPrinter/UI.php create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/ResultPrinter/template/fail.html.dist create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/ResultPrinter/template/scenario.html.dist create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/ResultPrinter/template/scenario_header.html.dist create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/ResultPrinter/template/scenarios.html.dist create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/ResultPrinter/template/step.html.dist create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/ResultPrinter/template/substeps.html.dist create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/ResultPrinter/template/suite.html.dist create mode 100644 vendor/codeception/codeception/src/Codeception/PHPUnit/Runner.php create mode 100644 vendor/codeception/codeception/src/Codeception/README.md create mode 100644 vendor/codeception/codeception/src/Codeception/Scenario.php create mode 100644 vendor/codeception/codeception/src/Codeception/Step.php create mode 100644 vendor/codeception/codeception/src/Codeception/Step/Action.php create mode 100644 vendor/codeception/codeception/src/Codeception/Step/Assertion.php create mode 100644 vendor/codeception/codeception/src/Codeception/Step/Comment.php create mode 100644 vendor/codeception/codeception/src/Codeception/Step/Condition.php create mode 100644 vendor/codeception/codeception/src/Codeception/Step/ConditionalAssertion.php create mode 100644 vendor/codeception/codeception/src/Codeception/Step/Executor.php create mode 100644 vendor/codeception/codeception/src/Codeception/Step/Incomplete.php create mode 100644 vendor/codeception/codeception/src/Codeception/Step/Meta.php create mode 100644 vendor/codeception/codeception/src/Codeception/Step/README.md create mode 100644 vendor/codeception/codeception/src/Codeception/Step/Skip.php create mode 100644 vendor/codeception/codeception/src/Codeception/Subscriber/AutoRebuild.php create mode 100644 vendor/codeception/codeception/src/Codeception/Subscriber/BeforeAfterTest.php create mode 100644 vendor/codeception/codeception/src/Codeception/Subscriber/Bootstrap.php create mode 100644 vendor/codeception/codeception/src/Codeception/Subscriber/Console.php create mode 100644 vendor/codeception/codeception/src/Codeception/Subscriber/Dependencies.php create mode 100644 vendor/codeception/codeception/src/Codeception/Subscriber/ErrorHandler.php create mode 100644 vendor/codeception/codeception/src/Codeception/Subscriber/ExtensionLoader.php create mode 100644 vendor/codeception/codeception/src/Codeception/Subscriber/FailFast.php create mode 100644 vendor/codeception/codeception/src/Codeception/Subscriber/GracefulTermination.php create mode 100644 vendor/codeception/codeception/src/Codeception/Subscriber/Module.php create mode 100644 vendor/codeception/codeception/src/Codeception/Subscriber/PrepareTest.php create mode 100644 vendor/codeception/codeception/src/Codeception/Subscriber/README.md create mode 100644 vendor/codeception/codeception/src/Codeception/Subscriber/Shared/StaticEvents.php create mode 100644 vendor/codeception/codeception/src/Codeception/Suite.php create mode 100644 vendor/codeception/codeception/src/Codeception/SuiteManager.php create mode 100644 vendor/codeception/codeception/src/Codeception/Template/Acceptance.php create mode 100644 vendor/codeception/codeception/src/Codeception/Template/Api.php create mode 100644 vendor/codeception/codeception/src/Codeception/Template/Bootstrap.php create mode 100644 vendor/codeception/codeception/src/Codeception/Template/Unit.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Cept.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Cest.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Descriptor.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Feature/AssertionCounter.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Feature/CodeCoverage.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Feature/ErrorLogger.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Feature/IgnoreIfMetadataBlocked.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Feature/MetadataCollector.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Feature/ScenarioLoader.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Gherkin.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Interfaces/Dependent.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Interfaces/Descriptive.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Interfaces/Plain.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Interfaces/Reported.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Interfaces/ScenarioDriven.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Interfaces/StrictCoverage.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Loader.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Loader/Cept.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Loader/Cest.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Loader/Gherkin.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Loader/LoaderInterface.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Loader/Unit.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Metadata.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Test.php create mode 100644 vendor/codeception/codeception/src/Codeception/Test/Unit.php create mode 100644 vendor/codeception/codeception/src/Codeception/TestInterface.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/ActionSequence.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/Annotation.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/ArrayContainsComparator.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/Autoload.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/Debug.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/FileSystem.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/Fixtures.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/HttpCode.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/JsonArray.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/JsonType.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/Locator.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/Maybe.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/PathResolver.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/PropertyAccess.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/README.md create mode 100644 vendor/codeception/codeception/src/Codeception/Util/ReflectionHelper.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/Shared/Asserts.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/Shared/Namespaces.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/Soap.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/Stub.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/Template.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/Uri.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/Xml.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/XmlBuilder.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/XmlStructure.php create mode 100644 vendor/codeception/codeception/src/Codeception/Util/sq.php create mode 100644 vendor/codeception/codeception/tests/README.md create mode 100644 vendor/codeception/codeception/tests/angular.suite.yml create mode 100644 vendor/codeception/codeception/tests/angular/AngularCest.php create mode 100644 vendor/codeception/codeception/tests/cli.suite.yml create mode 100644 vendor/codeception/codeception/tests/cli/AutoRebuildCept.php create mode 100644 vendor/codeception/codeception/tests/cli/BootstrapCest.php create mode 100644 vendor/codeception/codeception/tests/cli/BuildCept.php create mode 100644 vendor/codeception/codeception/tests/cli/CodeceptionYmlInTestsDirCest.php create mode 100644 vendor/codeception/codeception/tests/cli/ConfigBundledSuitesCest.php create mode 100644 vendor/codeception/codeception/tests/cli/ConfigNoActorCest.php create mode 100644 vendor/codeception/codeception/tests/cli/ConfigParamsCest.php create mode 100644 vendor/codeception/codeception/tests/cli/ConfigValidateCest.php create mode 100644 vendor/codeception/codeception/tests/cli/DataProviderFailuresAndExceptionsCest.php create mode 100644 vendor/codeception/codeception/tests/cli/DryRunCest.php create mode 100644 vendor/codeception/codeception/tests/cli/ExceptionInBeforeDoesNotMakeFatalErrorCept.php create mode 100644 vendor/codeception/codeception/tests/cli/ExtensionsCest.php create mode 100644 vendor/codeception/codeception/tests/cli/GenerateCeptCept.php create mode 100644 vendor/codeception/codeception/tests/cli/GenerateCestCept.php create mode 100644 vendor/codeception/codeception/tests/cli/GenerateFeatureCept.php create mode 100644 vendor/codeception/codeception/tests/cli/GenerateGroupCept.php create mode 100644 vendor/codeception/codeception/tests/cli/GenerateHelperCept.php create mode 100644 vendor/codeception/codeception/tests/cli/GeneratePageObjectCest.php create mode 100644 vendor/codeception/codeception/tests/cli/GenerateScenariosCept.php create mode 100644 vendor/codeception/codeception/tests/cli/GenerateStepObjectCept.php create mode 100644 vendor/codeception/codeception/tests/cli/GenerateSuiteCest.php create mode 100644 vendor/codeception/codeception/tests/cli/GenerateTestCept.php create mode 100644 vendor/codeception/codeception/tests/cli/GherkinCest.php create mode 100644 vendor/codeception/codeception/tests/cli/GlobalCommandOptionCest.php create mode 100644 vendor/codeception/codeception/tests/cli/GroupEventsCept.php create mode 100644 vendor/codeception/codeception/tests/cli/GroupExtensionCept.php create mode 100644 vendor/codeception/codeception/tests/cli/IncludedCest.php create mode 100644 vendor/codeception/codeception/tests/cli/MixedIncludeCest.php create mode 100644 vendor/codeception/codeception/tests/cli/OrderCest.php create mode 100644 vendor/codeception/codeception/tests/cli/RegisterCommandCest.php create mode 100644 vendor/codeception/codeception/tests/cli/RunCest.php create mode 100644 vendor/codeception/codeception/tests/cli/RunEnvironmentCest.php create mode 100644 vendor/codeception/codeception/tests/cli/RunIncompleteCept.php create mode 100644 vendor/codeception/codeception/tests/cli/RunSingleTestWithIncludeCest.php create mode 100644 vendor/codeception/codeception/tests/cli/RunSkippedCept.php create mode 100644 vendor/codeception/codeception/tests/cli/SecondTestIsExecutedWhenTheFirstTestFailsCest.php create mode 100644 vendor/codeception/codeception/tests/cli/UnitCept.php create mode 100644 vendor/codeception/codeception/tests/cli/WildcardIncludeCest.php create mode 100644 vendor/codeception/codeception/tests/cli/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/cli/_steps/GeneratorSteps.php create mode 100644 vendor/codeception/codeception/tests/coverage.suite.yml create mode 100644 vendor/codeception/codeception/tests/coverage/LocalCept.php create mode 100644 vendor/codeception/codeception/tests/coverage/RemoteServerWithCrap4jCept.php create mode 100644 vendor/codeception/codeception/tests/coverage/RemoteServerWithHtmlCept.php create mode 100644 vendor/codeception/codeception/tests/coverage/RemoteServerWithPHPUnitCept.php create mode 100644 vendor/codeception/codeception/tests/coverage/RemoteServerWithXmlCept.php create mode 100644 vendor/codeception/codeception/tests/coverage/RemoteWithCrap4jCept.php create mode 100644 vendor/codeception/codeception/tests/coverage/RemoteWithEnvironmentXmlCept.php create mode 100644 vendor/codeception/codeception/tests/coverage/RemoteWithHtmlCept.php create mode 100644 vendor/codeception/codeception/tests/coverage/RemoteWithPHPUnitCept.php create mode 100644 vendor/codeception/codeception/tests/coverage/RemoteWithTextCept.php create mode 100644 vendor/codeception/codeception/tests/coverage/RemoteWithXmlCept.php create mode 100644 vendor/codeception/codeception/tests/coverage/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/.gitignore create mode 100755 vendor/codeception/codeception/tests/data/DummyClass.php create mode 100644 vendor/codeception/codeception/tests/data/DummyOverloadableClass.php create mode 100644 vendor/codeception/codeception/tests/data/FailDependenciesCyclic.php create mode 100644 vendor/codeception/codeception/tests/data/FailDependenciesInChain.php create mode 100644 vendor/codeception/codeception/tests/data/FailDependenciesNonExistent.php create mode 100644 vendor/codeception/codeception/tests/data/FailDependenciesPrimitiveParam.php create mode 100644 vendor/codeception/codeception/tests/data/Invalid.php create mode 100644 vendor/codeception/codeception/tests/data/SimpleAdminGroupCest.php create mode 100755 vendor/codeception/codeception/tests/data/SimpleCept.php create mode 100755 vendor/codeception/codeception/tests/data/SimpleCest.php create mode 100644 vendor/codeception/codeception/tests/data/SimpleNamespacedTest.php create mode 100755 vendor/codeception/codeception/tests/data/SimpleTest.php create mode 100644 vendor/codeception/codeception/tests/data/SimpleWithDependencyInjectionCest.php create mode 100755 vendor/codeception/codeception/tests/data/SimpleWithNoClassCest.php create mode 100755 vendor/codeception/codeception/tests/data/app/.htaccess create mode 100755 vendor/codeception/codeception/tests/data/app/avatar.jpg create mode 100755 vendor/codeception/codeception/tests/data/app/controllers.php create mode 100755 vendor/codeception/codeception/tests/data/app/data.php create mode 100755 vendor/codeception/codeception/tests/data/app/glue.php create mode 100644 vendor/codeception/codeception/tests/data/app/hhvm-server.ini create mode 100755 vendor/codeception/codeception/tests/data/app/index.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/basehref.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/content_type.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/content_type2.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/cookies.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/external_url.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/facebook.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/anchor.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/bug1467.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/bug1535.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/bug1585.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/bug1598.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/bug1637.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/bug2841.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/bug2921.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/bug3824.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/bug3865.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/bug3866.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/bug3953.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/button-not-in-form.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/form/button.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/form/button_in_link.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/form/checkbox.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/checkbox_array.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/form/checkbox_default_value.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/click.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/form/complex.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/div_content_editable.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/form/empty.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/empty_fill.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example1.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example10.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example11.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example12.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example13.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example14.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example15.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example16.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example17.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example18.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example2.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example3.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example4.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example5.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example6.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example7.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example8.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/example9.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/form/field.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/field_values.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/form/file.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/form_with_buttons.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/form/hidden.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/image.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/index.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/form/multiple_matches.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/names-sq-brackets.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/popup.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/radio.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/relative_siteroot.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/form/select.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/select_multiple.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/select_second.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/select_selectors.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/select_two_submits.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/form/strict_selectors.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/submit_adjacentforms.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/submitform_ampersands.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/submitform_multiple.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/form/textarea.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/timeout.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/form/unchecked.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/iframe.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/index.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/info.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/jserroronload.php create mode 100755 vendor/codeception/codeception/tests/data/app/view/login.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/minimal.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/redirect2.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/redirect_interval.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/redirect_meta_refresh.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/redirect_params.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/register.php create mode 100644 vendor/codeception/codeception/tests/data/app/view/search.php create mode 100644 vendor/codeception/codeception/tests/data/bundled_suites/BasicTest.php create mode 100644 vendor/codeception/codeception/tests/data/bundled_suites/_support/UnitTester.php create mode 100644 vendor/codeception/codeception/tests/data/bundled_suites/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/c3.php create mode 100755 vendor/codeception/codeception/tests/data/claypit/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/codeception_custom_report.yml create mode 100755 vendor/codeception/codeception/tests/data/claypit/codeception_extended.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/codeception_grouped.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/codeception_invalid.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/codeception_strict_xml.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/composer.json create mode 100644 vendor/codeception/codeception/tests/data/claypit/src/FooBar/dummy.txt create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_bootstrap.php create mode 100755 vendor/codeception/codeception/tests/data/claypit/tests/_data/DummyClass.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_data/MyGroupHighlighter.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_data/MyReportPrinter.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_data/VerbosityLevelOutput.php create mode 100755 vendor/codeception/codeception/tests/data/claypit/tests/_data/dump.sql create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_data/groupFileTest1 create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_envs/env2.dist.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_envs/env2.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_envs/subenv/env3.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/AbsolutelyOtherGuy.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/CodeGuy.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/CodeHelper.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/DumbGuy.php create mode 100755 vendor/codeception/codeception/tests/data/claypit/tests/_support/DumbHelper.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/ExtendedGuy.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/Group/CountEvents.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/Helper/Extended.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/Helper/Scenario.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/Math/Adder.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/Math/CalcHelper.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/Math/Subtractor.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/MathTester.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/MessageGuy.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/MessageHelper.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/OrderGuy.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/OrderHelper.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/OtherGuy.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/OtherHelper.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/Page/Math/Trigonometry.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/PowerGuy.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/PowerHelper.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/ScenarioGuy.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/SkipGroup.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/SkipGuy.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/SkipHelper.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/Step/Order/CanCantSteps.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/_support/SuiteExtension.php create mode 100755 vendor/codeception/codeception/tests/data/claypit/tests/dummy.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/dummy/AnotherCest.php create mode 100755 vendor/codeception/codeception/tests/data/claypit/tests/dummy/AnotherTest.php create mode 100755 vendor/codeception/codeception/tests/data/claypit/tests/dummy/FileExistsCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/dummy/GroupEventsCest.php create mode 100755 vendor/codeception/codeception/tests/data/claypit/tests/dummy/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/extended.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/extended/HelloCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/extended/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/math.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/math/MathCest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/math/MathTest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/math/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/messages.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/messages/EmailCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/messages/MessageCest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/messages/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/order.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/order/AnotherCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/order/BeforeAfterClassTest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/order/BeforeAfterClassWithDataProviderTest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/order/CanCantFailCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/order/CanCantFailCest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/order/CodeTest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/order/Dependent2Cest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/order/DependentCest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/order/FailedCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/order/FailedCest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/order/LoadingOrderCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/order/ParsedLoadedTest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/order/ReorderCest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/order/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/powers.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/powers/MageGuildCest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/powers/PowerIsRisingCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/powers/PowerUpCest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/powers/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/remote.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/remote/DemoCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/remote/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/remote_server.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/remote_server/DemoCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/remote_server/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario/ConditionalCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario/DataProviderCest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario/DependencyForCest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario/ExamplesCest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario/Fail.feature create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario/FailedCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario/File.feature create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario/FileExamples.feature create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario/InlineArgumentExample.feature create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario/PartialFailedCest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario/PyStringArgumentExample.feature create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario/SubStepsCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario/SuccessCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario/Utf8Example.feature create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/scenario/subfolder/SubFile.feature create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/skipped.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/skipped/IncompleteMeCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/skipped/NoEnvironmentCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/skipped/SkipByGroupTest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/skipped/SkipMeCept.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/skipped/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/unit.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/unit/DataProvidersTest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/unit/Depends2Test.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/unit/DependsTest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/unit/ErrorTest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/unit/ExceptionTest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/unit/FailingTest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/unit/PassingTest.php create mode 100644 vendor/codeception/codeception/tests/data/claypit/tests/unit/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/codeception_yml_in_tests_dir/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/codeception_yml_in_tests_dir/_output/.gitignore create mode 100644 vendor/codeception/codeception/tests/data/codeception_yml_in_tests_dir/_support/UnitTester.php create mode 100644 vendor/codeception/codeception/tests/data/codeception_yml_in_tests_dir/_support/_generated/.gitignore create mode 100644 vendor/codeception/codeception/tests/data/codeception_yml_in_tests_dir/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/codeception_yml_in_tests_dir/unit.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/codeception_yml_in_tests_dir/unit/ExampleCest.php create mode 100644 vendor/codeception/codeception/tests/data/codeception_yml_in_tests_dir/unit/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/dataprovider_failures_and_exceptions/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/dataprovider_failures_and_exceptions/tests/_support/UnitTester.php create mode 100644 vendor/codeception/codeception/tests/data/dataprovider_failures_and_exceptions/tests/_support/_generated/.gitignore create mode 100644 vendor/codeception/codeception/tests/data/dataprovider_failures_and_exceptions/tests/unit.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/dataprovider_failures_and_exceptions/tests/unit/DataProvidersExceptionCest.php create mode 100644 vendor/codeception/codeception/tests/data/dataprovider_failures_and_exceptions/tests/unit/DataProvidersFailureCest.php create mode 100755 vendor/codeception/codeception/tests/data/dump.sql create mode 100644 vendor/codeception/codeception/tests/data/dumps/mongo.js create mode 100644 vendor/codeception/codeception/tests/data/dumps/mysql.sql create mode 100755 vendor/codeception/codeception/tests/data/dumps/postgres-hhvm.sql create mode 100755 vendor/codeception/codeception/tests/data/dumps/postgres.sql create mode 100755 vendor/codeception/codeception/tests/data/dumps/sqlite-54.sql create mode 100755 vendor/codeception/codeception/tests/data/dumps/sqlite.sql create mode 100644 vendor/codeception/codeception/tests/data/exception_in_before/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/exception_in_before/tests/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/exception_in_before/tests/_support/Helper/Unit.php create mode 100644 vendor/codeception/codeception/tests/data/exception_in_before/tests/_support/UnitTester.php create mode 100644 vendor/codeception/codeception/tests/data/exception_in_before/tests/_support/_generated/.gitignore create mode 100644 vendor/codeception/codeception/tests/data/exception_in_before/tests/unit.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/exception_in_before/tests/unit/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/exception_in_before/tests/unit/failing.feature create mode 100644 vendor/codeception/codeception/tests/data/exception_in_before/tests/unit/failingCept.php create mode 100644 vendor/codeception/codeception/tests/data/exception_in_before/tests/unit/failingCest.php create mode 100644 vendor/codeception/codeception/tests/data/exception_in_before/tests/unit/failingTest.php create mode 100644 vendor/codeception/codeception/tests/data/first_test_fails/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/first_test_fails/tests/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/first_test_fails/tests/_output/.gitignore create mode 100644 vendor/codeception/codeception/tests/data/first_test_fails/tests/_support/CustomReporter.php create mode 100644 vendor/codeception/codeception/tests/data/first_test_fails/tests/_support/UnitTester.php create mode 100644 vendor/codeception/codeception/tests/data/first_test_fails/tests/_support/_generated/.gitignore create mode 100644 vendor/codeception/codeception/tests/data/first_test_fails/tests/unit.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/first_test_fails/tests/unit/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/first_test_fails/tests/unit/twoTestsCest.php create mode 100644 vendor/codeception/codeception/tests/data/group_1 create mode 100644 vendor/codeception/codeception/tests/data/group_2 create mode 100644 vendor/codeception/codeception/tests/data/group_3 create mode 100644 vendor/codeception/codeception/tests/data/included/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/pianist/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/pianist/src/BillEvans.php create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/pianist/tests/_data/dump.sql create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/pianist/tests/_helpers/TestGuy.php create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/pianist/tests/_helpers/TestHelper.php create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/pianist/tests/functional.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/pianist/tests/functional/PianistCept.php create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/pianist/tests/functional/TestGuy.php create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/pianist/tests/functional/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/src/Musician.php create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/tests/_data/dump.sql create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/tests/_helpers/Helper/Unit.php create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/tests/_helpers/TestGuy.php create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/tests/_helpers/TestHelper.php create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/tests/_helpers/UnitGuy.php create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/tests/_helpers/_generated/.gitignore create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/tests/functional.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/tests/functional/DemoCept.php create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/tests/functional/TestGuy.php create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/tests/functional/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/tests/unit.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/tests/unit/SimpleTest.php create mode 100644 vendor/codeception/codeception/tests/data/included/jazz/tests/unit/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/included/shire/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/included/shire/src/Hobbit.php create mode 100644 vendor/codeception/codeception/tests/data/included/shire/tests/_data/dump.sql create mode 100644 vendor/codeception/codeception/tests/data/included/shire/tests/_helpers/TestGuy.php create mode 100644 vendor/codeception/codeception/tests/data/included/shire/tests/_helpers/TestHelper.php create mode 100644 vendor/codeception/codeception/tests/data/included/shire/tests/_helpers/_generated/.gitignore create mode 100644 vendor/codeception/codeception/tests/data/included/shire/tests/functional.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/included/shire/tests/functional/HobbitCept.php create mode 100644 vendor/codeception/codeception/tests/data/included/shire/tests/functional/TestGuy.php create mode 100644 vendor/codeception/codeception/tests/data/included/shire/tests/functional/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/included_mix/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/included_mix/src/foo/AcmePack/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/included_mix/src/foo/AcmePack/src/Acme.php create mode 100644 vendor/codeception/codeception/tests/data/included_mix/src/foo/AcmePack/tests/_support/UnitTester.php create mode 100644 vendor/codeception/codeception/tests/data/included_mix/src/foo/AcmePack/tests/unit.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/included_mix/src/foo/AcmePack/tests/unit/BasicTest.php create mode 100644 vendor/codeception/codeception/tests/data/included_mix/src/foo/AcmePack/tests/unit/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/included_mix/support/NoTester.php create mode 100644 vendor/codeception/codeception/tests/data/included_mix/tests/unit.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/included_mix/tests/unit/SimpleTest.php create mode 100644 vendor/codeception/codeception/tests/data/included_w/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/Spam/.gitkeep create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/Spam/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/Spam/tests/_output/.gitkeep create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/Spam/tests/_support/UnitTester.php create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/Spam/tests/unit.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/Spam/tests/unit/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/SpamPack/.gitkeep create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/Sub/EwokPack/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/Sub/EwokPack/src/Ewok.php create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/Sub/EwokPack/tests/_data/.gitkeep create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/Sub/EwokPack/tests/_log/.gitkeep create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/Sub/EwokPack/tests/_support/UnitTester.php create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/Sub/EwokPack/tests/unit.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/Sub/EwokPack/tests/unit/BasicTest.php create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/Sub/EwokPack/tests/unit/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/ToastPack/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/ToastPack/src/Toast.php create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/ToastPack/tests/_data/.gitkeep create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/ToastPack/tests/_log/.gitkeep create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/ToastPack/tests/_support/UnitTester.php create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/ToastPack/tests/unit.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/bar/ToastPack/tests/unit/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/foo/AcmePack/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/foo/AcmePack/src/Acme.php create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/foo/AcmePack/tests/_data/.gitkeep create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/foo/AcmePack/tests/_support/UnitTester.php create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/foo/AcmePack/tests/unit.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/foo/AcmePack/tests/unit/BasicTest.php create mode 100644 vendor/codeception/codeception/tests/data/included_w/src/foo/AcmePack/tests/unit/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/no_actor_suites/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/no_actor_suites/tests/BasicTest.php create mode 100644 vendor/codeception/codeception/tests/data/no_actor_suites/tests/_support/.gitkeep create mode 100644 vendor/codeception/codeception/tests/data/params/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/params/codeception_dotenv.yml create mode 100644 vendor/codeception/codeception/tests/data/params/codeception_dotenv2.yml create mode 100644 vendor/codeception/codeception/tests/data/params/codeception_self.yml create mode 100644 vendor/codeception/codeception/tests/data/params/codeception_yaml.yml create mode 100644 vendor/codeception/codeception/tests/data/params/params.env create mode 100644 vendor/codeception/codeception/tests/data/params/params.env.example create mode 100644 vendor/codeception/codeception/tests/data/params/params.yml create mode 100644 vendor/codeception/codeception/tests/data/params/tests/_support/DummyTester.php create mode 100644 vendor/codeception/codeception/tests/data/params/tests/_support/Helper/Dummy.php create mode 100644 vendor/codeception/codeception/tests/data/params/tests/_support/_generated/.gitignore create mode 100644 vendor/codeception/codeception/tests/data/params/tests/dummy.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/params/tests/dummy/DummyCept.php create mode 100644 vendor/codeception/codeception/tests/data/php55Test create mode 100644 vendor/codeception/codeception/tests/data/php70Test create mode 100644 vendor/codeception/codeception/tests/data/refund.feature create mode 100644 vendor/codeception/codeception/tests/data/register_command/examples/MyCustomCommand.php create mode 100644 vendor/codeception/codeception/tests/data/register_command/examples/YourCustomCommand.php create mode 100644 vendor/codeception/codeception/tests/data/register_command/standard/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/register_command/standard/tests/_autoload.php create mode 100644 vendor/codeception/codeception/tests/data/register_command/standard/tests/_data/.gitkeep create mode 100644 vendor/codeception/codeception/tests/data/register_command/standard/tests/_log/.gitkeep create mode 100644 vendor/codeception/codeception/tests/data/register_command/standard/tests/_support/.gitkeep create mode 100644 vendor/codeception/codeception/tests/data/rest/hhvm-server.ini create mode 100755 vendor/codeception/codeception/tests/data/rest/index.php create mode 100755 vendor/codeception/codeception/tests/data/rest/server.php create mode 100755 vendor/codeception/codeception/tests/data/result.html create mode 100755 vendor/codeception/codeception/tests/data/services/UserModel.php create mode 100755 vendor/codeception/codeception/tests/data/services/UserService.php create mode 100644 vendor/codeception/codeception/tests/data/single_test_with_include/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/single_test_with_include/_output/.gitignore create mode 100644 vendor/codeception/codeception/tests/data/single_test_with_include/_support/UnitTester.php create mode 100644 vendor/codeception/codeception/tests/data/single_test_with_include/_support/_generated/.gitignore create mode 100644 vendor/codeception/codeception/tests/data/single_test_with_include/codeception.yml create mode 100644 vendor/codeception/codeception/tests/data/single_test_with_include/unit.suite.yml create mode 100644 vendor/codeception/codeception/tests/data/single_test_with_include/unit/ExampleCest.php create mode 100644 vendor/codeception/codeception/tests/data/single_test_with_include/unit/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/data/test_groups create mode 100644 vendor/codeception/codeception/tests/data/unsetFile.php create mode 100644 vendor/codeception/codeception/tests/data/whitespace_group_test create mode 100755 vendor/codeception/codeception/tests/data/xml/layout.xml create mode 100644 vendor/codeception/codeception/tests/docker-compose.yml create mode 100644 vendor/codeception/codeception/tests/facebook.suite.yml create mode 100644 vendor/codeception/codeception/tests/facebook/FacebookTest.php create mode 100644 vendor/codeception/codeception/tests/log/.gitignore create mode 100644 vendor/codeception/codeception/tests/support/AngularGuy.php create mode 100644 vendor/codeception/codeception/tests/support/CliGuy.php create mode 100644 vendor/codeception/codeception/tests/support/CliHelper.php create mode 100644 vendor/codeception/codeception/tests/support/CodeGuy.php create mode 100644 vendor/codeception/codeception/tests/support/CodeHelper.php create mode 100644 vendor/codeception/codeception/tests/support/CoverGuy.php create mode 100644 vendor/codeception/codeception/tests/support/CoverHelper.php create mode 100644 vendor/codeception/codeception/tests/support/EmulateModuleHelper.php create mode 100644 vendor/codeception/codeception/tests/support/FacebookGuy.php create mode 100644 vendor/codeception/codeception/tests/support/Helper/Angular.php create mode 100644 vendor/codeception/codeception/tests/support/Helper/Shire.php create mode 100644 vendor/codeception/codeception/tests/support/Shire/Codeception/Module/EmulateModuleHelper.php create mode 100644 vendor/codeception/codeception/tests/support/TestHelper.php create mode 100644 vendor/codeception/codeception/tests/support/UniversalFramework.php create mode 100644 vendor/codeception/codeception/tests/support/WebGuy.php create mode 100644 vendor/codeception/codeception/tests/support/WebHelper.php create mode 100644 vendor/codeception/codeception/tests/unit.suite.yml create mode 100644 vendor/codeception/codeception/tests/unit/C3Test.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/ApplicationTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Command/BaseCommandRunner.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Command/BuildTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Command/GenerateCeptTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Command/GenerateCestTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Command/GenerateEnvironmentTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Command/GenerateGroupTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Command/GeneratePageObjectTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Command/GenerateScenarioTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Command/GenerateStepObjectTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Command/GenerateSuiteTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Command/GenerateTestTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Command/MyCustomCommandTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Command/SelfUpdateTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/ConfigurationTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Constraints/CrawlerConstraintTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Constraints/CrawlerNotConstraintTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Constraints/WebDriverConstraintTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Constraints/WebDriverNotConstraintTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Constraints/mocked_webelement.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Coverage/FilterTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Exception/ModuleConfigTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Lib/Console/ColorizerTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Lib/Console/DiffFactoryTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Lib/Console/MessageTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Lib/DiTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Lib/Driver/DbTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Lib/Driver/MysqlTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Lib/Driver/PostgresTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Lib/Driver/SqliteTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Lib/GroupManagerTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Lib/ModuleContainerTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Lib/ParserTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/AMQPTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/AssertsTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/BeanstalkdTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/Db/MySqlDbTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/Db/Populator/DbPopulatorTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/Db/PostgreSqlDbTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/Db/SqliteDbTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/Db/TestsForDb.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/FTPTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/FilesystemTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/FrameworksTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/MongoDbLegacyTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/MongoDbTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/PhpBrowserRestTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/PhpBrowserTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/RedisTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/RestTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/SFTPTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/SequenceTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/SoapTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/TestsForBrowsers.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Module/TestsForWeb.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/ModuleTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/ScenarioTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Step/ConditionalAssertionTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Step/ExecutorTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/StepTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Subscriber/ErrorHandlerTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/SuiteManagerTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Test/CeptTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Test/CestTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Test/GherkinTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Test/UnitTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/TestLoaderTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Util/AnnotationTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Util/ArrayContainsComparatorTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Util/AutoloadTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Util/HttpCodeTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Util/JsonArrayTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Util/JsonTypeTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Util/LocatorTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Util/MockAutoload.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Util/PathResolverTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Util/StubTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Util/TemplateTest.php create mode 100644 vendor/codeception/codeception/tests/unit/Codeception/Util/UriTest.php create mode 100644 vendor/codeception/codeception/tests/unit/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/web.suite.yml create mode 100644 vendor/codeception/codeception/tests/web/FriendWithStepsCept.php create mode 100644 vendor/codeception/codeception/tests/web/FriendsCept.php create mode 100644 vendor/codeception/codeception/tests/web/FriendsLeaveCept.php create mode 100644 vendor/codeception/codeception/tests/web/ReconfigureWebDriverCept.php create mode 100644 vendor/codeception/codeception/tests/web/WebDriverTest.php create mode 100644 vendor/codeception/codeception/tests/web/_bootstrap.php create mode 100644 vendor/codeception/codeception/tests/web/_steps/RootWatcherSteps.php create mode 100644 vendor/codeception/codeception/wercker.yml create mode 100644 vendor/codeception/stub/.gitignore create mode 100644 vendor/codeception/stub/.travis.yml create mode 100644 vendor/codeception/stub/Readme.md create mode 100644 vendor/codeception/stub/RoboFile.php create mode 100644 vendor/codeception/stub/composer.json create mode 100644 vendor/codeception/stub/docs/Expected.md create mode 100644 vendor/codeception/stub/docs/Stub.md create mode 100644 vendor/codeception/stub/docs/StubTrait.md create mode 100644 vendor/codeception/stub/src/Stub.php create mode 100644 vendor/codeception/stub/src/Stub/ConsecutiveMap.php create mode 100644 vendor/codeception/stub/src/Stub/Expected.php create mode 100644 vendor/codeception/stub/src/Stub/StubMarshaler.php create mode 100644 vendor/codeception/stub/src/Test/Feature/Stub.php create mode 100644 vendor/codeception/stub/src/shim.php create mode 100644 vendor/codeception/stub/tests/ResetMocks.php create mode 100644 vendor/codeception/stub/tests/StubTest.php create mode 100644 vendor/codeception/stub/tests/StubTraitTest.php create mode 100755 vendor/codeception/stub/tests/_data/DummyClass.php create mode 100644 vendor/codeception/stub/tests/_data/DummyOverloadableClass.php create mode 100644 vendor/composer/ClassLoader.php create mode 100644 vendor/composer/LICENSE create mode 100644 vendor/composer/autoload_classmap.php create mode 100644 vendor/composer/autoload_files.php create mode 100644 vendor/composer/autoload_namespaces.php create mode 100644 vendor/composer/autoload_psr4.php create mode 100644 vendor/composer/autoload_real.php create mode 100644 vendor/composer/autoload_static.php create mode 100644 vendor/composer/installed.json create mode 100644 vendor/doctrine/instantiator/CONTRIBUTING.md create mode 100644 vendor/doctrine/instantiator/LICENSE create mode 100644 vendor/doctrine/instantiator/README.md create mode 100644 vendor/doctrine/instantiator/composer.json create mode 100644 vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php create mode 100644 vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php create mode 100644 vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php create mode 100644 vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php create mode 100644 vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php create mode 100644 vendor/facebook/webdriver/.coveralls.yml create mode 100644 vendor/facebook/webdriver/.php_cs.dist create mode 100644 vendor/facebook/webdriver/CHANGELOG.md create mode 100644 vendor/facebook/webdriver/CONTRIBUTING.md create mode 100644 vendor/facebook/webdriver/ISSUE_TEMPLATE.md create mode 100644 vendor/facebook/webdriver/LICENCE.md create mode 100644 vendor/facebook/webdriver/README.md create mode 100644 vendor/facebook/webdriver/composer.json create mode 100644 vendor/facebook/webdriver/lib/Chrome/ChromeDriver.php create mode 100644 vendor/facebook/webdriver/lib/Chrome/ChromeDriverService.php create mode 100644 vendor/facebook/webdriver/lib/Chrome/ChromeOptions.php create mode 100644 vendor/facebook/webdriver/lib/Cookie.php create mode 100644 vendor/facebook/webdriver/lib/Exception/ElementNotSelectableException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/ElementNotVisibleException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/ExpectedException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/IMEEngineActivationFailedException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/IMENotAvailableException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/IndexOutOfBoundsException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/InvalidCookieDomainException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/InvalidCoordinatesException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/InvalidElementStateException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/InvalidSelectorException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/MoveTargetOutOfBoundsException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/NoAlertOpenException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/NoCollectionException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/NoScriptResultException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/NoStringException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/NoStringLengthException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/NoStringWrapperException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/NoSuchCollectionException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/NoSuchDocumentException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/NoSuchDriverException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/NoSuchElementException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/NoSuchFrameException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/NoSuchWindowException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/NullPointerException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/ScriptTimeoutException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/SessionNotCreatedException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/StaleElementReferenceException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/TimeOutException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/UnableToSetCookieException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/UnexpectedAlertOpenException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/UnexpectedJavascriptException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/UnexpectedTagNameException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/UnknownCommandException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/UnknownServerException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/UnrecognizedExceptionException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/UnsupportedOperationException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/WebDriverCurlException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/WebDriverException.php create mode 100644 vendor/facebook/webdriver/lib/Exception/XPathLookupException.php create mode 100644 vendor/facebook/webdriver/lib/Firefox/FirefoxDriver.php create mode 100644 vendor/facebook/webdriver/lib/Firefox/FirefoxPreferences.php create mode 100644 vendor/facebook/webdriver/lib/Firefox/FirefoxProfile.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Internal/WebDriverButtonReleaseAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Internal/WebDriverClickAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Internal/WebDriverClickAndHoldAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Internal/WebDriverContextClickAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Internal/WebDriverCoordinates.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Internal/WebDriverDoubleClickAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Internal/WebDriverKeyDownAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Internal/WebDriverKeyUpAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Internal/WebDriverKeysRelatedAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Internal/WebDriverMouseAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Internal/WebDriverMouseMoveAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Internal/WebDriverMoveToOffsetAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Internal/WebDriverSendKeysAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Internal/WebDriverSingleKeyAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Touch/WebDriverDoubleTapAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Touch/WebDriverDownAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Touch/WebDriverFlickAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Touch/WebDriverFlickFromElementAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Touch/WebDriverLongPressAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Touch/WebDriverMoveAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Touch/WebDriverScrollAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Touch/WebDriverScrollFromElementAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Touch/WebDriverTapAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Touch/WebDriverTouchAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/Touch/WebDriverTouchScreen.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/WebDriverActions.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/WebDriverCompositeAction.php create mode 100644 vendor/facebook/webdriver/lib/Interactions/WebDriverTouchActions.php create mode 100644 vendor/facebook/webdriver/lib/Internal/WebDriverLocatable.php create mode 100644 vendor/facebook/webdriver/lib/JavaScriptExecutor.php create mode 100644 vendor/facebook/webdriver/lib/Net/URLChecker.php create mode 100644 vendor/facebook/webdriver/lib/Remote/DesiredCapabilities.php create mode 100644 vendor/facebook/webdriver/lib/Remote/DriverCommand.php create mode 100644 vendor/facebook/webdriver/lib/Remote/ExecuteMethod.php create mode 100644 vendor/facebook/webdriver/lib/Remote/FileDetector.php create mode 100644 vendor/facebook/webdriver/lib/Remote/HttpCommandExecutor.php create mode 100644 vendor/facebook/webdriver/lib/Remote/LocalFileDetector.php create mode 100644 vendor/facebook/webdriver/lib/Remote/RemoteExecuteMethod.php create mode 100644 vendor/facebook/webdriver/lib/Remote/RemoteKeyboard.php create mode 100644 vendor/facebook/webdriver/lib/Remote/RemoteMouse.php create mode 100644 vendor/facebook/webdriver/lib/Remote/RemoteTargetLocator.php create mode 100644 vendor/facebook/webdriver/lib/Remote/RemoteTouchScreen.php create mode 100644 vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php create mode 100644 vendor/facebook/webdriver/lib/Remote/RemoteWebElement.php create mode 100644 vendor/facebook/webdriver/lib/Remote/Service/DriverCommandExecutor.php create mode 100644 vendor/facebook/webdriver/lib/Remote/Service/DriverService.php create mode 100644 vendor/facebook/webdriver/lib/Remote/UselessFileDetector.php create mode 100644 vendor/facebook/webdriver/lib/Remote/WebDriverBrowserType.php create mode 100644 vendor/facebook/webdriver/lib/Remote/WebDriverCapabilityType.php create mode 100644 vendor/facebook/webdriver/lib/Remote/WebDriverCommand.php create mode 100644 vendor/facebook/webdriver/lib/Remote/WebDriverResponse.php create mode 100644 vendor/facebook/webdriver/lib/Support/Events/EventFiringWebDriver.php create mode 100644 vendor/facebook/webdriver/lib/Support/Events/EventFiringWebDriverNavigation.php create mode 100644 vendor/facebook/webdriver/lib/Support/Events/EventFiringWebElement.php create mode 100644 vendor/facebook/webdriver/lib/Support/XPathEscaper.php create mode 100755 vendor/facebook/webdriver/lib/WebDriver.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverAction.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverAlert.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverBy.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverCapabilities.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverCommandExecutor.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverDimension.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverDispatcher.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverElement.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverEventListener.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverExpectedCondition.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverHasInputDevices.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverKeyboard.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverKeys.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverMouse.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverNavigation.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverOptions.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverPlatform.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverPoint.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverSearchContext.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverSelect.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverSelectInterface.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverTargetLocator.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverTimeouts.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverUpAction.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverWait.php create mode 100644 vendor/facebook/webdriver/lib/WebDriverWindow.php create mode 100644 vendor/facebook/webdriver/logs/.gitkeep create mode 100644 vendor/guzzlehttp/guzzle/CHANGELOG.md create mode 100644 vendor/guzzlehttp/guzzle/LICENSE create mode 100644 vendor/guzzlehttp/guzzle/README.md create mode 100644 vendor/guzzlehttp/guzzle/UPGRADING.md create mode 100644 vendor/guzzlehttp/guzzle/composer.json create mode 100644 vendor/guzzlehttp/guzzle/src/Client.php create mode 100644 vendor/guzzlehttp/guzzle/src/ClientInterface.php create mode 100644 vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php create mode 100644 vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php create mode 100644 vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php create mode 100644 vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php create mode 100644 vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/ClientException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/RequestException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/SeekException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/ServerException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Exception/TransferException.php create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/Proxy.php create mode 100644 vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php create mode 100644 vendor/guzzlehttp/guzzle/src/HandlerStack.php create mode 100644 vendor/guzzlehttp/guzzle/src/MessageFormatter.php create mode 100644 vendor/guzzlehttp/guzzle/src/Middleware.php create mode 100644 vendor/guzzlehttp/guzzle/src/Pool.php create mode 100644 vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php create mode 100644 vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php create mode 100644 vendor/guzzlehttp/guzzle/src/RequestOptions.php create mode 100644 vendor/guzzlehttp/guzzle/src/RetryMiddleware.php create mode 100644 vendor/guzzlehttp/guzzle/src/TransferStats.php create mode 100644 vendor/guzzlehttp/guzzle/src/UriTemplate.php create mode 100644 vendor/guzzlehttp/guzzle/src/functions.php create mode 100644 vendor/guzzlehttp/guzzle/src/functions_include.php create mode 100644 vendor/guzzlehttp/promises/CHANGELOG.md create mode 100644 vendor/guzzlehttp/promises/LICENSE create mode 100644 vendor/guzzlehttp/promises/Makefile create mode 100644 vendor/guzzlehttp/promises/README.md create mode 100644 vendor/guzzlehttp/promises/composer.json create mode 100644 vendor/guzzlehttp/promises/src/AggregateException.php create mode 100644 vendor/guzzlehttp/promises/src/CancellationException.php create mode 100644 vendor/guzzlehttp/promises/src/Coroutine.php create mode 100644 vendor/guzzlehttp/promises/src/EachPromise.php create mode 100644 vendor/guzzlehttp/promises/src/FulfilledPromise.php create mode 100644 vendor/guzzlehttp/promises/src/Promise.php create mode 100644 vendor/guzzlehttp/promises/src/PromiseInterface.php create mode 100644 vendor/guzzlehttp/promises/src/PromisorInterface.php create mode 100644 vendor/guzzlehttp/promises/src/RejectedPromise.php create mode 100644 vendor/guzzlehttp/promises/src/RejectionException.php create mode 100644 vendor/guzzlehttp/promises/src/TaskQueue.php create mode 100644 vendor/guzzlehttp/promises/src/TaskQueueInterface.php create mode 100644 vendor/guzzlehttp/promises/src/functions.php create mode 100644 vendor/guzzlehttp/promises/src/functions_include.php create mode 100644 vendor/guzzlehttp/psr7/CHANGELOG.md create mode 100644 vendor/guzzlehttp/psr7/LICENSE create mode 100644 vendor/guzzlehttp/psr7/README.md create mode 100644 vendor/guzzlehttp/psr7/composer.json create mode 100644 vendor/guzzlehttp/psr7/src/AppendStream.php create mode 100644 vendor/guzzlehttp/psr7/src/BufferStream.php create mode 100644 vendor/guzzlehttp/psr7/src/CachingStream.php create mode 100644 vendor/guzzlehttp/psr7/src/DroppingStream.php create mode 100644 vendor/guzzlehttp/psr7/src/FnStream.php create mode 100644 vendor/guzzlehttp/psr7/src/InflateStream.php create mode 100644 vendor/guzzlehttp/psr7/src/LazyOpenStream.php create mode 100644 vendor/guzzlehttp/psr7/src/LimitStream.php create mode 100644 vendor/guzzlehttp/psr7/src/MessageTrait.php create mode 100644 vendor/guzzlehttp/psr7/src/MultipartStream.php create mode 100644 vendor/guzzlehttp/psr7/src/NoSeekStream.php create mode 100644 vendor/guzzlehttp/psr7/src/PumpStream.php create mode 100644 vendor/guzzlehttp/psr7/src/Request.php create mode 100644 vendor/guzzlehttp/psr7/src/Response.php create mode 100644 vendor/guzzlehttp/psr7/src/ServerRequest.php create mode 100644 vendor/guzzlehttp/psr7/src/Stream.php create mode 100644 vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php create mode 100644 vendor/guzzlehttp/psr7/src/StreamWrapper.php create mode 100644 vendor/guzzlehttp/psr7/src/UploadedFile.php create mode 100644 vendor/guzzlehttp/psr7/src/Uri.php create mode 100644 vendor/guzzlehttp/psr7/src/UriNormalizer.php create mode 100644 vendor/guzzlehttp/psr7/src/UriResolver.php create mode 100644 vendor/guzzlehttp/psr7/src/functions.php create mode 100644 vendor/guzzlehttp/psr7/src/functions_include.php create mode 100755 vendor/myclabs/deep-copy/.gitattributes create mode 100755 vendor/myclabs/deep-copy/.gitignore create mode 100755 vendor/myclabs/deep-copy/.travis.yml create mode 100644 vendor/myclabs/deep-copy/LICENSE create mode 100644 vendor/myclabs/deep-copy/README.md create mode 100644 vendor/myclabs/deep-copy/composer.json create mode 100644 vendor/myclabs/deep-copy/doc/clone.png create mode 100644 vendor/myclabs/deep-copy/doc/deep-clone.png create mode 100644 vendor/myclabs/deep-copy/doc/deep-copy.png create mode 100644 vendor/myclabs/deep-copy/doc/graph.png create mode 100644 vendor/myclabs/deep-copy/fixtures/f001/A.php create mode 100644 vendor/myclabs/deep-copy/fixtures/f001/B.php create mode 100644 vendor/myclabs/deep-copy/fixtures/f002/A.php create mode 100644 vendor/myclabs/deep-copy/fixtures/f003/Foo.php create mode 100644 vendor/myclabs/deep-copy/fixtures/f004/UnclonableItem.php create mode 100644 vendor/myclabs/deep-copy/fixtures/f005/Foo.php create mode 100644 vendor/myclabs/deep-copy/fixtures/f006/A.php create mode 100644 vendor/myclabs/deep-copy/fixtures/f006/B.php create mode 100644 vendor/myclabs/deep-copy/fixtures/f007/FooDateInterval.php create mode 100644 vendor/myclabs/deep-copy/fixtures/f007/FooDateTimeZone.php create mode 100644 vendor/myclabs/deep-copy/fixtures/f008/A.php create mode 100644 vendor/myclabs/deep-copy/fixtures/f008/B.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/DeepCopy.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Exception/PropertyException.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Matcher.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyMatcher.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php create mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php create mode 100644 vendor/phar-io/manifest/.gitignore create mode 100644 vendor/phar-io/manifest/.php_cs create mode 100644 vendor/phar-io/manifest/.travis.yml create mode 100644 vendor/phar-io/manifest/LICENSE create mode 100644 vendor/phar-io/manifest/README.md create mode 100644 vendor/phar-io/manifest/build.xml create mode 100644 vendor/phar-io/manifest/composer.json create mode 100644 vendor/phar-io/manifest/examples/example-01.php create mode 100644 vendor/phar-io/manifest/phive.xml create mode 100644 vendor/phar-io/manifest/phpunit.xml create mode 100644 vendor/phar-io/manifest/src/ManifestDocumentMapper.php create mode 100644 vendor/phar-io/manifest/src/ManifestLoader.php create mode 100644 vendor/phar-io/manifest/src/ManifestSerializer.php create mode 100644 vendor/phar-io/manifest/src/exceptions/Exception.php create mode 100644 vendor/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php create mode 100644 vendor/phar-io/manifest/src/exceptions/InvalidEmailException.php create mode 100644 vendor/phar-io/manifest/src/exceptions/InvalidUrlException.php create mode 100644 vendor/phar-io/manifest/src/exceptions/ManifestDocumentException.php create mode 100644 vendor/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php create mode 100644 vendor/phar-io/manifest/src/exceptions/ManifestElementException.php create mode 100644 vendor/phar-io/manifest/src/exceptions/ManifestLoaderException.php create mode 100644 vendor/phar-io/manifest/src/values/Application.php create mode 100644 vendor/phar-io/manifest/src/values/ApplicationName.php create mode 100644 vendor/phar-io/manifest/src/values/Author.php create mode 100644 vendor/phar-io/manifest/src/values/AuthorCollection.php create mode 100644 vendor/phar-io/manifest/src/values/AuthorCollectionIterator.php create mode 100644 vendor/phar-io/manifest/src/values/BundledComponent.php create mode 100644 vendor/phar-io/manifest/src/values/BundledComponentCollection.php create mode 100644 vendor/phar-io/manifest/src/values/BundledComponentCollectionIterator.php create mode 100644 vendor/phar-io/manifest/src/values/CopyrightInformation.php create mode 100644 vendor/phar-io/manifest/src/values/Email.php create mode 100644 vendor/phar-io/manifest/src/values/Extension.php create mode 100644 vendor/phar-io/manifest/src/values/Library.php create mode 100644 vendor/phar-io/manifest/src/values/License.php create mode 100644 vendor/phar-io/manifest/src/values/Manifest.php create mode 100644 vendor/phar-io/manifest/src/values/PhpExtensionRequirement.php create mode 100644 vendor/phar-io/manifest/src/values/PhpVersionRequirement.php create mode 100644 vendor/phar-io/manifest/src/values/Requirement.php create mode 100644 vendor/phar-io/manifest/src/values/RequirementCollection.php create mode 100644 vendor/phar-io/manifest/src/values/RequirementCollectionIterator.php create mode 100644 vendor/phar-io/manifest/src/values/Type.php create mode 100644 vendor/phar-io/manifest/src/values/Url.php create mode 100644 vendor/phar-io/manifest/src/xml/AuthorElement.php create mode 100644 vendor/phar-io/manifest/src/xml/AuthorElementCollection.php create mode 100644 vendor/phar-io/manifest/src/xml/BundlesElement.php create mode 100644 vendor/phar-io/manifest/src/xml/ComponentElement.php create mode 100644 vendor/phar-io/manifest/src/xml/ComponentElementCollection.php create mode 100644 vendor/phar-io/manifest/src/xml/ContainsElement.php create mode 100644 vendor/phar-io/manifest/src/xml/CopyrightElement.php create mode 100644 vendor/phar-io/manifest/src/xml/ElementCollection.php create mode 100644 vendor/phar-io/manifest/src/xml/ExtElement.php create mode 100644 vendor/phar-io/manifest/src/xml/ExtElementCollection.php create mode 100644 vendor/phar-io/manifest/src/xml/ExtensionElement.php create mode 100644 vendor/phar-io/manifest/src/xml/LicenseElement.php create mode 100644 vendor/phar-io/manifest/src/xml/ManifestDocument.php create mode 100644 vendor/phar-io/manifest/src/xml/ManifestDocumentLoadingException.php create mode 100644 vendor/phar-io/manifest/src/xml/ManifestElement.php create mode 100644 vendor/phar-io/manifest/src/xml/PhpElement.php create mode 100644 vendor/phar-io/manifest/src/xml/RequiresElement.php create mode 100644 vendor/phar-io/manifest/tests/ManifestDocumentMapperTest.php create mode 100644 vendor/phar-io/manifest/tests/ManifestLoaderTest.php create mode 100644 vendor/phar-io/manifest/tests/ManifestSerializerTest.php create mode 100644 vendor/phar-io/manifest/tests/_fixture/custom.xml create mode 100644 vendor/phar-io/manifest/tests/_fixture/extension-invalidcompatible.xml create mode 100644 vendor/phar-io/manifest/tests/_fixture/extension.xml create mode 100644 vendor/phar-io/manifest/tests/_fixture/invalidversion.xml create mode 100644 vendor/phar-io/manifest/tests/_fixture/invalidversionconstraint.xml create mode 100644 vendor/phar-io/manifest/tests/_fixture/library.xml create mode 100644 vendor/phar-io/manifest/tests/_fixture/manifest.xml create mode 100644 vendor/phar-io/manifest/tests/_fixture/phpunit-5.6.5.xml create mode 100644 vendor/phar-io/manifest/tests/_fixture/test.phar create mode 100644 vendor/phar-io/manifest/tests/exceptions/ManifestDocumentLoadingExceptionTest.php create mode 100644 vendor/phar-io/manifest/tests/values/ApplicationNameTest.php create mode 100644 vendor/phar-io/manifest/tests/values/ApplicationTest.php create mode 100644 vendor/phar-io/manifest/tests/values/AuthorCollectionTest.php create mode 100644 vendor/phar-io/manifest/tests/values/AuthorTest.php create mode 100644 vendor/phar-io/manifest/tests/values/BundledComponentCollectionTest.php create mode 100644 vendor/phar-io/manifest/tests/values/BundledComponentTest.php create mode 100644 vendor/phar-io/manifest/tests/values/CopyrightInformationTest.php create mode 100644 vendor/phar-io/manifest/tests/values/EmailTest.php create mode 100644 vendor/phar-io/manifest/tests/values/ExtensionTest.php create mode 100644 vendor/phar-io/manifest/tests/values/LibraryTest.php create mode 100644 vendor/phar-io/manifest/tests/values/LicenseTest.php create mode 100644 vendor/phar-io/manifest/tests/values/ManifestTest.php create mode 100644 vendor/phar-io/manifest/tests/values/PhpExtensionRequirementTest.php create mode 100644 vendor/phar-io/manifest/tests/values/PhpVersionRequirementTest.php create mode 100644 vendor/phar-io/manifest/tests/values/RequirementCollectionTest.php create mode 100644 vendor/phar-io/manifest/tests/values/UrlTest.php create mode 100644 vendor/phar-io/manifest/tests/xml/AuthorElementCollectionTest.php create mode 100644 vendor/phar-io/manifest/tests/xml/AuthorElementTest.php create mode 100644 vendor/phar-io/manifest/tests/xml/BundlesElementTest.php create mode 100644 vendor/phar-io/manifest/tests/xml/ComponentElementCollectionTest.php create mode 100644 vendor/phar-io/manifest/tests/xml/ComponentElementTest.php create mode 100644 vendor/phar-io/manifest/tests/xml/ContainsElementTest.php create mode 100644 vendor/phar-io/manifest/tests/xml/CopyrightElementTest.php create mode 100644 vendor/phar-io/manifest/tests/xml/ExtElementCollectionTest.php create mode 100644 vendor/phar-io/manifest/tests/xml/ExtElementTest.php create mode 100644 vendor/phar-io/manifest/tests/xml/ExtensionElementTest.php create mode 100644 vendor/phar-io/manifest/tests/xml/LicenseElementTest.php create mode 100644 vendor/phar-io/manifest/tests/xml/ManifestDocumentTest.php create mode 100644 vendor/phar-io/manifest/tests/xml/PhpElementTest.php create mode 100644 vendor/phar-io/manifest/tests/xml/RequiresElementTest.php create mode 100644 vendor/phar-io/version/.gitignore create mode 100644 vendor/phar-io/version/.php_cs create mode 100644 vendor/phar-io/version/.travis.yml create mode 100644 vendor/phar-io/version/LICENSE create mode 100644 vendor/phar-io/version/README.md create mode 100644 vendor/phar-io/version/build.xml create mode 100644 vendor/phar-io/version/composer.json create mode 100644 vendor/phar-io/version/phive.xml create mode 100644 vendor/phar-io/version/phpunit.xml create mode 100644 vendor/phar-io/version/src/AbstractVersionConstraint.php create mode 100644 vendor/phar-io/version/src/AndVersionConstraintGroup.php create mode 100644 vendor/phar-io/version/src/AnyVersionConstraint.php create mode 100644 vendor/phar-io/version/src/ExactVersionConstraint.php create mode 100644 vendor/phar-io/version/src/Exception.php create mode 100644 vendor/phar-io/version/src/GreaterThanOrEqualToVersionConstraint.php create mode 100644 vendor/phar-io/version/src/InvalidVersionException.php create mode 100644 vendor/phar-io/version/src/OrVersionConstraintGroup.php create mode 100644 vendor/phar-io/version/src/PreReleaseSuffix.php create mode 100644 vendor/phar-io/version/src/SpecificMajorAndMinorVersionConstraint.php create mode 100644 vendor/phar-io/version/src/SpecificMajorVersionConstraint.php create mode 100644 vendor/phar-io/version/src/UnsupportedVersionConstraintException.php create mode 100644 vendor/phar-io/version/src/Version.php create mode 100644 vendor/phar-io/version/src/VersionConstraint.php create mode 100644 vendor/phar-io/version/src/VersionConstraintParser.php create mode 100644 vendor/phar-io/version/src/VersionConstraintValue.php create mode 100644 vendor/phar-io/version/src/VersionNumber.php create mode 100644 vendor/phar-io/version/tests/Integration/VersionConstraintParserTest.php create mode 100644 vendor/phar-io/version/tests/Unit/AbstractVersionConstraintTest.php create mode 100644 vendor/phar-io/version/tests/Unit/AndVersionConstraintGroupTest.php create mode 100644 vendor/phar-io/version/tests/Unit/AnyVersionConstraintTest.php create mode 100644 vendor/phar-io/version/tests/Unit/ExactVersionConstraintTest.php create mode 100644 vendor/phar-io/version/tests/Unit/GreaterThanOrEqualToVersionConstraintTest.php create mode 100644 vendor/phar-io/version/tests/Unit/OrVersionConstraintGroupTest.php create mode 100644 vendor/phar-io/version/tests/Unit/SpecificMajorAndMinorVersionConstraintTest.php create mode 100644 vendor/phar-io/version/tests/Unit/SpecificMajorVersionConstraintTest.php create mode 100644 vendor/phar-io/version/tests/Unit/VersionTest.php create mode 100644 vendor/phpdocumentor/reflection-common/.travis.yml create mode 100644 vendor/phpdocumentor/reflection-common/LICENSE create mode 100644 vendor/phpdocumentor/reflection-common/README.md create mode 100644 vendor/phpdocumentor/reflection-common/composer.json create mode 100644 vendor/phpdocumentor/reflection-common/src/Element.php create mode 100644 vendor/phpdocumentor/reflection-common/src/File.php create mode 100644 vendor/phpdocumentor/reflection-common/src/Fqsen.php create mode 100644 vendor/phpdocumentor/reflection-common/src/Location.php create mode 100644 vendor/phpdocumentor/reflection-common/src/Project.php create mode 100644 vendor/phpdocumentor/reflection-common/src/ProjectFactory.php create mode 100644 vendor/phpdocumentor/reflection-docblock/.coveralls.yml create mode 100644 vendor/phpdocumentor/reflection-docblock/LICENSE create mode 100644 vendor/phpdocumentor/reflection-docblock/README.md create mode 100644 vendor/phpdocumentor/reflection-docblock/composer.json create mode 100644 vendor/phpdocumentor/reflection-docblock/easy-coding-standard.neon create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/TagFactory.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/BaseTag.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/StaticMethod.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/Strategy.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Url.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php create mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php create mode 100644 vendor/phpdocumentor/type-resolver/LICENSE create mode 100644 vendor/phpdocumentor/type-resolver/README.md create mode 100644 vendor/phpdocumentor/type-resolver/composer.json create mode 100644 vendor/phpdocumentor/type-resolver/src/FqsenResolver.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Type.php create mode 100644 vendor/phpdocumentor/type-resolver/src/TypeResolver.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Array_.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Boolean.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Callable_.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Compound.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Context.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Float_.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Integer.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Iterable_.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Mixed_.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Null_.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Nullable.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Object_.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Parent_.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Resource_.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Scalar.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Self_.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Static_.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/String_.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/This.php create mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Void_.php create mode 100644 vendor/phpspec/prophecy/CHANGES.md create mode 100644 vendor/phpspec/prophecy/LICENSE create mode 100644 vendor/phpspec/prophecy/README.md create mode 100644 vendor/phpspec/prophecy/composer.json create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument/ArgumentsWildcard.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument/Token/AnyValueToken.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument/Token/AnyValuesToken.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ApproximateValueToken.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ArrayCountToken.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ArrayEntryToken.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ArrayEveryEntryToken.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument/Token/CallbackToken.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ExactValueToken.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument/Token/IdenticalValueToken.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument/Token/LogicalAndToken.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument/Token/LogicalNotToken.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument/Token/StringContainsToken.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument/Token/TokenInterface.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Argument/Token/TypeToken.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Call/Call.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Comparator/ClosureComparator.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Comparator/Factory.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Comparator/ProphecyComparator.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/CachedDoubler.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ClassPatchInterface.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/DisableConstructorPatch.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/HhvmExceptionPatch.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ProphecySubjectPatch.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ReflectionClassNewInstancePatch.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/TraversablePatch.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/DoubleInterface.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/Doubler.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCreator.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ClassNode.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ReflectionInterface.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/LazyDouble.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Doubler/NameGenerator.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Call/UnexpectedCallException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/ClassCreatorException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/ClassMirrorException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/ClassNotFoundException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/DoubleException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/DoublerException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/InterfaceNotFoundException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotExtendableException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotFoundException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Doubler/ReturnByReferenceException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Exception.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/InvalidArgumentException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Prediction/AggregateException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Prediction/FailedPredictionException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Prediction/NoCallsException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Prediction/PredictionException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Prediction/UnexpectedCallsCountException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Prediction/UnexpectedCallsException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Prophecy/MethodProphecyException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Prophecy/ObjectProphecyException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Exception/Prophecy/ProphecyException.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassAndInterfaceTagRetriever.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassTagRetriever.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/LegacyClassTagRetriever.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/PhpDocumentor/MethodTagRetrieverInterface.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Prediction/CallPrediction.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Prediction/CallTimesPrediction.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Prediction/CallbackPrediction.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Prediction/NoCallsPrediction.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Prediction/PredictionInterface.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Promise/CallbackPromise.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Promise/PromiseInterface.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Promise/ReturnArgumentPromise.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Promise/ReturnPromise.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Prophecy/ObjectProphecy.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Prophecy/ProphecyInterface.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Prophecy/ProphecySubjectInterface.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Prophecy/Revealer.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Prophecy/RevealerInterface.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Prophet.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php create mode 100644 vendor/phpspec/prophecy/src/Prophecy/Util/StringUtil.php create mode 100644 vendor/phpunit/php-code-coverage/.gitattributes create mode 100644 vendor/phpunit/php-code-coverage/.github/CONTRIBUTING.md create mode 100644 vendor/phpunit/php-code-coverage/.github/ISSUE_TEMPLATE.md create mode 100644 vendor/phpunit/php-code-coverage/.gitignore create mode 100644 vendor/phpunit/php-code-coverage/.php_cs create mode 100644 vendor/phpunit/php-code-coverage/.travis.yml create mode 100644 vendor/phpunit/php-code-coverage/ChangeLog-2.2.md create mode 100644 vendor/phpunit/php-code-coverage/ChangeLog-3.0.md create mode 100644 vendor/phpunit/php-code-coverage/ChangeLog-3.1.md create mode 100644 vendor/phpunit/php-code-coverage/ChangeLog-3.2.md create mode 100644 vendor/phpunit/php-code-coverage/ChangeLog-3.3.md create mode 100644 vendor/phpunit/php-code-coverage/ChangeLog-4.0.md create mode 100644 vendor/phpunit/php-code-coverage/ChangeLog-5.0.md create mode 100644 vendor/phpunit/php-code-coverage/ChangeLog-5.1.md create mode 100644 vendor/phpunit/php-code-coverage/ChangeLog-5.2.md create mode 100644 vendor/phpunit/php-code-coverage/ChangeLog-5.3.md create mode 100644 vendor/phpunit/php-code-coverage/LICENSE create mode 100644 vendor/phpunit/php-code-coverage/README.md create mode 100644 vendor/phpunit/php-code-coverage/build.xml create mode 100644 vendor/phpunit/php-code-coverage/composer.json create mode 100644 vendor/phpunit/php-code-coverage/phpunit.xml create mode 100644 vendor/phpunit/php-code-coverage/src/CodeCoverage.php create mode 100644 vendor/phpunit/php-code-coverage/src/Driver/Driver.php create mode 100644 vendor/phpunit/php-code-coverage/src/Driver/HHVM.php create mode 100644 vendor/phpunit/php-code-coverage/src/Driver/PHPDBG.php create mode 100644 vendor/phpunit/php-code-coverage/src/Driver/Xdebug.php create mode 100644 vendor/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php create mode 100644 vendor/phpunit/php-code-coverage/src/Exception/Exception.php create mode 100644 vendor/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php create mode 100644 vendor/phpunit/php-code-coverage/src/Exception/MissingCoversAnnotationException.php create mode 100644 vendor/phpunit/php-code-coverage/src/Exception/RuntimeException.php create mode 100644 vendor/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php create mode 100644 vendor/phpunit/php-code-coverage/src/Filter.php create mode 100644 vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php create mode 100644 vendor/phpunit/php-code-coverage/src/Node/Builder.php create mode 100644 vendor/phpunit/php-code-coverage/src/Node/Directory.php create mode 100644 vendor/phpunit/php-code-coverage/src/Node/File.php create mode 100644 vendor/phpunit/php-code-coverage/src/Node/Iterator.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Clover.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Crap4j.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/coverage_bar.html.dist create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/bootstrap.min.css create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/nv.d3.min.css create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/style.css create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/dashboard.html.dist create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/directory.html.dist create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/directory_item.html.dist create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/file.html.dist create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/file_item.html.dist create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/fonts/glyphicons-halflings-regular.eot create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/fonts/glyphicons-halflings-regular.svg create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/fonts/glyphicons-halflings-regular.ttf create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/fonts/glyphicons-halflings-regular.woff create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/fonts/glyphicons-halflings-regular.woff2 create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/bootstrap.min.js create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/d3.min.js create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/file.js create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/holder.min.js create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/html5shiv.min.js create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/jquery.min.js create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/nv.d3.min.js create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/respond.min.js create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/method_item.html.dist create mode 100644 vendor/phpunit/php-code-coverage/src/Report/PHP.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Text.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Coverage.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Directory.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Facade.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/File.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Method.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Node.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Project.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Report.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Source.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Tests.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Totals.php create mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Unit.php create mode 100644 vendor/phpunit/php-code-coverage/src/Util.php create mode 100644 vendor/phpunit/php-code-coverage/src/Version.php create mode 100644 vendor/phpunit/php-code-coverage/tests/TestCase.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/BankAccount-clover.xml create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/BankAccount-crap4j.xml create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/BankAccount-text.txt create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/BankAccount.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/BankAccountTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoverageClassExtendedTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoverageClassTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoverageFunctionParenthesesTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoverageFunctionParenthesesWhitespaceTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoverageFunctionTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoverageMethodOneLineAnnotationTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoverageMethodParenthesesTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoverageMethodParenthesesWhitespaceTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoverageMethodTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoverageNoneTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoverageNotPrivateTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoverageNotProtectedTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoverageNotPublicTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoverageNothingTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoveragePrivateTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoverageProtectedTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoveragePublicTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoverageTwoDefaultClassAnnotations.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoveredClass.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/CoveredFunction.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/NamespaceCoverageClassExtendedTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/NamespaceCoverageClassTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/NamespaceCoverageCoversClassPublicTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/NamespaceCoverageCoversClassTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/NamespaceCoverageMethodTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/NamespaceCoverageNotPrivateTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/NamespaceCoverageNotProtectedTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/NamespaceCoverageNotPublicTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/NamespaceCoveragePrivateTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/NamespaceCoverageProtectedTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/NamespaceCoveragePublicTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/NamespaceCoveredClass.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/NotExistingCoveredElementTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/Report/HTML/CoverageForBankAccount/BankAccount.php.html create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/Report/HTML/CoverageForBankAccount/dashboard.html create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/Report/HTML/CoverageForBankAccount/index.html create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/Report/HTML/CoverageForClassWithAnonymousFunction/dashboard.html create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/Report/HTML/CoverageForClassWithAnonymousFunction/index.html create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/Report/HTML/CoverageForClassWithAnonymousFunction/source_with_class_and_anonymous_function.php.html create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/Report/HTML/CoverageForFileWithIgnoredLines/dashboard.html create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/Report/HTML/CoverageForFileWithIgnoredLines/index.html create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/Report/HTML/CoverageForFileWithIgnoredLines/source_with_ignore.php.html create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/Report/XML/CoverageForBankAccount/BankAccount.php.xml create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/Report/XML/CoverageForBankAccount/index.xml create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/Report/XML/CoverageForClassWithAnonymousFunction/index.xml create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/Report/XML/CoverageForClassWithAnonymousFunction/source_with_class_and_anonymous_function.php.xml create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/Report/XML/CoverageForFileWithIgnoredLines/index.xml create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/Report/XML/CoverageForFileWithIgnoredLines/source_with_ignore.php.xml create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/class-with-anonymous-function-clover.xml create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/class-with-anonymous-function-crap4j.xml create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/class-with-anonymous-function-text.txt create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/ignored-lines-clover.xml create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/ignored-lines-crap4j.xml create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/ignored-lines-text.txt create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/source_with_class_and_anonymous_function.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/source_with_ignore.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/source_with_namespace.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/source_with_oneline_annotations.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/source_without_ignore.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/source_without_namespace.php create mode 100644 vendor/phpunit/php-code-coverage/tests/bootstrap.php create mode 100644 vendor/phpunit/php-code-coverage/tests/tests/BuilderTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/tests/CloverTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/tests/CodeCoverageTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/tests/Crap4jTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/tests/FilterTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/tests/HTMLTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/tests/TextTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/tests/UtilTest.php create mode 100644 vendor/phpunit/php-code-coverage/tests/tests/XMLTest.php create mode 100644 vendor/phpunit/php-file-iterator/.gitattributes create mode 100644 vendor/phpunit/php-file-iterator/.gitignore create mode 100644 vendor/phpunit/php-file-iterator/ChangeLog.md create mode 100644 vendor/phpunit/php-file-iterator/LICENSE create mode 100644 vendor/phpunit/php-file-iterator/README.md create mode 100644 vendor/phpunit/php-file-iterator/composer.json create mode 100644 vendor/phpunit/php-file-iterator/src/Facade.php create mode 100644 vendor/phpunit/php-file-iterator/src/Factory.php create mode 100644 vendor/phpunit/php-file-iterator/src/Iterator.php create mode 100644 vendor/phpunit/php-text-template/.gitattributes create mode 100644 vendor/phpunit/php-text-template/.gitignore create mode 100644 vendor/phpunit/php-text-template/LICENSE create mode 100644 vendor/phpunit/php-text-template/README.md create mode 100644 vendor/phpunit/php-text-template/composer.json create mode 100644 vendor/phpunit/php-text-template/src/Template.php create mode 100644 vendor/phpunit/php-timer/.gitattributes create mode 100644 vendor/phpunit/php-timer/.gitignore create mode 100644 vendor/phpunit/php-timer/.travis.yml create mode 100644 vendor/phpunit/php-timer/LICENSE create mode 100644 vendor/phpunit/php-timer/README.md create mode 100644 vendor/phpunit/php-timer/composer.json create mode 100644 vendor/phpunit/php-timer/phpunit.xml create mode 100644 vendor/phpunit/php-timer/src/Timer.php create mode 100644 vendor/phpunit/php-timer/tests/TimerTest.php create mode 100644 vendor/phpunit/php-token-stream/.gitattributes create mode 100644 vendor/phpunit/php-token-stream/.gitignore create mode 100644 vendor/phpunit/php-token-stream/.travis.yml create mode 100644 vendor/phpunit/php-token-stream/ChangeLog.md create mode 100644 vendor/phpunit/php-token-stream/LICENSE create mode 100644 vendor/phpunit/php-token-stream/README.md create mode 100644 vendor/phpunit/php-token-stream/build.xml create mode 100644 vendor/phpunit/php-token-stream/composer.json create mode 100644 vendor/phpunit/php-token-stream/phpunit.xml create mode 100644 vendor/phpunit/php-token-stream/src/Token.php create mode 100644 vendor/phpunit/php-token-stream/src/Token/Stream.php create mode 100644 vendor/phpunit/php-token-stream/src/Token/Stream/CachingFactory.php create mode 100644 vendor/phpunit/php-token-stream/tests/Token/ClassTest.php create mode 100644 vendor/phpunit/php-token-stream/tests/Token/ClosureTest.php create mode 100644 vendor/phpunit/php-token-stream/tests/Token/FunctionTest.php create mode 100644 vendor/phpunit/php-token-stream/tests/Token/IncludeTest.php create mode 100644 vendor/phpunit/php-token-stream/tests/Token/InterfaceTest.php create mode 100644 vendor/phpunit/php-token-stream/tests/Token/NamespaceTest.php create mode 100644 vendor/phpunit/php-token-stream/tests/TokenTest.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/classExtendsNamespacedClass.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/classInNamespace.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/classInScopedNamespace.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/classUsesNamespacedFunction.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/class_with_method_named_empty.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/class_with_method_that_declares_anonymous_class.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/class_with_method_that_declares_anonymous_class2.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/class_with_multiple_anonymous_classes_and_functions.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/closure.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/issue19.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/issue30.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/multipleNamespacesWithOneClassUsingBraces.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/multipleNamespacesWithOneClassUsingNonBraceSyntax.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/php-code-coverage-issue-424.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/source.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/source2.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/source3.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/source4.php create mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/source5.php create mode 100644 vendor/phpunit/php-token-stream/tests/bootstrap.php create mode 100644 vendor/phpunit/phpunit-mock-objects/.gitattributes create mode 100644 vendor/phpunit/phpunit-mock-objects/.github/ISSUE_TEMPLATE.md create mode 100644 vendor/phpunit/phpunit-mock-objects/.gitignore create mode 100644 vendor/phpunit/phpunit-mock-objects/.php_cs create mode 100644 vendor/phpunit/phpunit-mock-objects/.travis.yml create mode 100644 vendor/phpunit/phpunit-mock-objects/CONTRIBUTING.md create mode 100644 vendor/phpunit/phpunit-mock-objects/LICENSE create mode 100644 vendor/phpunit/phpunit-mock-objects/README.md create mode 100644 vendor/phpunit/phpunit-mock-objects/build.xml create mode 100644 vendor/phpunit/phpunit-mock-objects/composer.json create mode 100644 vendor/phpunit/phpunit-mock-objects/phpunit.xml create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Builder/Identity.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Builder/InvocationMocker.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Builder/Match.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Builder/MethodNameMatch.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Builder/NamespaceMatch.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Builder/ParametersMatch.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Builder/Stub.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Exception/BadMethodCallException.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Exception/Exception.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Exception/RuntimeException.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/ForwardCompatibility/MockObject.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Generator.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Generator/deprecation.tpl.dist create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Generator/mocked_class.tpl.dist create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Generator/mocked_class_method.tpl.dist create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Generator/mocked_clone.tpl.dist create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Generator/mocked_method.tpl.dist create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Generator/mocked_method_void.tpl.dist create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Generator/mocked_static_method.tpl.dist create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Generator/proxied_method.tpl.dist create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Generator/proxied_method_void.tpl.dist create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Generator/trait_class.tpl.dist create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Generator/unmocked_clone.tpl.dist create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Generator/wsdl_class.tpl.dist create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Generator/wsdl_method.tpl.dist create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Invocation/Invocation.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Invocation/ObjectInvocation.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Invocation/StaticInvocation.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/InvocationMocker.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Invokable.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Matcher.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Matcher/AnyInvokedCount.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Matcher/AnyParameters.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Matcher/ConsecutiveParameters.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Matcher/Invocation.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtIndex.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtLeastCount.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtLeastOnce.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtMostCount.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Matcher/InvokedCount.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Matcher/InvokedRecorder.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Matcher/MethodName.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Matcher/Parameters.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Matcher/StatelessInvocation.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/MockBuilder.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/MockObject.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Stub.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Stub/ConsecutiveCalls.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Stub/Exception.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Stub/MatcherCollection.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Stub/ReturnArgument.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Stub/ReturnCallback.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Stub/ReturnReference.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Stub/ReturnSelf.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Stub/ReturnStub.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Stub/ReturnValueMap.php create mode 100644 vendor/phpunit/phpunit-mock-objects/src/Verifiable.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Builder/InvocationMockerTest.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/232.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/397.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/abstract_class.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/class.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/class_call_parent_clone.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/class_call_parent_constructor.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/class_dont_call_parent_clone.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/class_dont_call_parent_constructor.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/class_implementing_interface_call_parent_constructor.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/class_implementing_interface_dont_call_parent_constructor.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/class_partial.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/class_with_deprecated_method.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/class_with_method_named_method.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/class_with_method_with_nullable_typehinted_variadic_arguments.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/class_with_method_with_typehinted_variadic_arguments.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/class_with_method_with_variadic_arguments.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/interface.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/invocation_object_clone_object.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/namespaced_class.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/namespaced_class_call_parent_clone.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/namespaced_class_call_parent_constructor.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/namespaced_class_dont_call_parent_clone.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/namespaced_class_dont_call_parent_constructor.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/namespaced_class_implementing_interface_call_parent_constructor.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/namespaced_class_implementing_interface_dont_call_parent_constructor.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/namespaced_class_partial.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/namespaced_interface.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/nonexistent_class.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/nonexistent_class_with_namespace.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/nonexistent_class_with_namespace_starting_with_separator.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/nullable_types.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/proxy.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/return_type_declarations_closure.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/return_type_declarations_final.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/return_type_declarations_generator.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/return_type_declarations_nullable.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/return_type_declarations_object_method.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/return_type_declarations_self.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/return_type_declarations_static_method.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/return_type_declarations_void.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/scalar_type_declarations.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/wsdl_class.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/wsdl_class_namespace.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Generator/wsdl_class_partial.phpt create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/GeneratorTest.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Invocation/ObjectInvocationTest.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Invocation/StaticInvocationTest.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/Matcher/ConsecutiveParametersTest.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/MockBuilderTest.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/MockObjectTest.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/ProxyObjectTest.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/AbstractMockTestClass.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/AbstractTrait.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/AnInterface.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/AnInterfaceWithReturnType.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/AnotherInterface.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/Bar.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/ClassThatImplementsSerializable.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/ClassWithAllPossibleReturnTypes.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/ClassWithSelfTypeHint.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/ClassWithStaticMethod.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/Foo.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/FunctionCallback.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/GoogleSearch.wsdl create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/InterfaceWithSemiReservedMethodName.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/InterfaceWithStaticMethod.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/MethodCallback.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/MethodCallbackByReference.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/MockTestInterface.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/Mockable.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/PartialMockTestClass.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/SingletonClass.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/SomeClass.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/StaticMockTestClass.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/StringableClass.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/_fixture/TraversableMockTestInterface.php create mode 100644 vendor/phpunit/phpunit-mock-objects/tests/bootstrap.php create mode 100644 vendor/phpunit/phpunit/.editorconfig create mode 100644 vendor/phpunit/phpunit/.gitattributes create mode 100644 vendor/phpunit/phpunit/.github/CODE_OF_CONDUCT.md create mode 100644 vendor/phpunit/phpunit/.github/CONTRIBUTING.md create mode 100644 vendor/phpunit/phpunit/.github/ISSUE_TEMPLATE.md create mode 100644 vendor/phpunit/phpunit/.gitignore create mode 100644 vendor/phpunit/phpunit/.php_cs.dist create mode 100644 vendor/phpunit/phpunit/.stickler.yml create mode 100644 vendor/phpunit/phpunit/.travis.yml create mode 100644 vendor/phpunit/phpunit/ChangeLog-5.7.md create mode 100644 vendor/phpunit/phpunit/ChangeLog-6.5.md create mode 100644 vendor/phpunit/phpunit/LICENSE create mode 100644 vendor/phpunit/phpunit/README.md create mode 100644 vendor/phpunit/phpunit/appveyor.yml create mode 100644 vendor/phpunit/phpunit/build.xml create mode 100644 vendor/phpunit/phpunit/composer.json create mode 100755 vendor/phpunit/phpunit/phpunit create mode 100644 vendor/phpunit/phpunit/phpunit.xml create mode 100644 vendor/phpunit/phpunit/phpunit.xsd create mode 100644 vendor/phpunit/phpunit/src/Exception.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Assert.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Assert/Functions.php create mode 100644 vendor/phpunit/phpunit/src/Framework/AssertionFailedError.php create mode 100644 vendor/phpunit/phpunit/src/Framework/BaseTestListener.php create mode 100644 vendor/phpunit/phpunit/src/Framework/CodeCoverageException.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Attribute.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Callback.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Composite.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Constraint.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Count.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/DirectoryExists.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Exception.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegularExpression.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/FileExists.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsAnything.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsEqual.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsFalse.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsFinite.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsJson.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsNan.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsNull.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsReadable.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsTrue.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsType.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsWritable.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/LessThan.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/LogicalAnd.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/LogicalNot.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/LogicalOr.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/LogicalXor.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/RegularExpression.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/SameSize.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/StringContains.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/StringMatchesFormatDescription.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php create mode 100644 vendor/phpunit/phpunit/src/Framework/CoveredCodeNotExecutedException.php create mode 100644 vendor/phpunit/phpunit/src/Framework/DataProviderTestSuite.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Error/Deprecated.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Error/Error.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Error/Notice.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Error/Warning.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception.php create mode 100644 vendor/phpunit/phpunit/src/Framework/ExceptionWrapper.php create mode 100644 vendor/phpunit/phpunit/src/Framework/ExpectationFailedException.php create mode 100644 vendor/phpunit/phpunit/src/Framework/IncompleteTest.php create mode 100644 vendor/phpunit/phpunit/src/Framework/IncompleteTestCase.php create mode 100644 vendor/phpunit/phpunit/src/Framework/IncompleteTestError.php create mode 100644 vendor/phpunit/phpunit/src/Framework/InvalidCoversTargetException.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MissingCoversAnnotationException.php create mode 100644 vendor/phpunit/phpunit/src/Framework/OutputError.php create mode 100644 vendor/phpunit/phpunit/src/Framework/RiskyTest.php create mode 100644 vendor/phpunit/phpunit/src/Framework/RiskyTestError.php create mode 100644 vendor/phpunit/phpunit/src/Framework/SelfDescribing.php create mode 100644 vendor/phpunit/phpunit/src/Framework/SkippedTest.php create mode 100644 vendor/phpunit/phpunit/src/Framework/SkippedTestCase.php create mode 100644 vendor/phpunit/phpunit/src/Framework/SkippedTestError.php create mode 100644 vendor/phpunit/phpunit/src/Framework/SkippedTestSuiteError.php create mode 100644 vendor/phpunit/phpunit/src/Framework/SyntheticError.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Test.php create mode 100644 vendor/phpunit/phpunit/src/Framework/TestCase.php create mode 100644 vendor/phpunit/phpunit/src/Framework/TestFailure.php create mode 100644 vendor/phpunit/phpunit/src/Framework/TestListener.php create mode 100644 vendor/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php create mode 100644 vendor/phpunit/phpunit/src/Framework/TestResult.php create mode 100644 vendor/phpunit/phpunit/src/Framework/TestSuite.php create mode 100644 vendor/phpunit/phpunit/src/Framework/TestSuiteIterator.php create mode 100644 vendor/phpunit/phpunit/src/Framework/UnintentionallyCoveredCodeError.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Warning.php create mode 100644 vendor/phpunit/phpunit/src/Framework/WarningTestCase.php create mode 100644 vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php create mode 100644 vendor/phpunit/phpunit/src/Runner/Exception.php create mode 100644 vendor/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php create mode 100644 vendor/phpunit/phpunit/src/Runner/Filter/Factory.php create mode 100644 vendor/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php create mode 100644 vendor/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php create mode 100644 vendor/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php create mode 100644 vendor/phpunit/phpunit/src/Runner/PhptTestCase.php create mode 100644 vendor/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php create mode 100644 vendor/phpunit/phpunit/src/Runner/TestSuiteLoader.php create mode 100644 vendor/phpunit/phpunit/src/Runner/Version.php create mode 100644 vendor/phpunit/phpunit/src/TextUI/Command.php create mode 100644 vendor/phpunit/phpunit/src/TextUI/ResultPrinter.php create mode 100644 vendor/phpunit/phpunit/src/TextUI/TestRunner.php create mode 100644 vendor/phpunit/phpunit/src/Util/Blacklist.php create mode 100644 vendor/phpunit/phpunit/src/Util/Configuration.php create mode 100644 vendor/phpunit/phpunit/src/Util/ConfigurationGenerator.php create mode 100644 vendor/phpunit/phpunit/src/Util/ErrorHandler.php create mode 100644 vendor/phpunit/phpunit/src/Util/Fileloader.php create mode 100644 vendor/phpunit/phpunit/src/Util/Filesystem.php create mode 100644 vendor/phpunit/phpunit/src/Util/Filter.php create mode 100644 vendor/phpunit/phpunit/src/Util/Getopt.php create mode 100644 vendor/phpunit/phpunit/src/Util/GlobalState.php create mode 100644 vendor/phpunit/phpunit/src/Util/InvalidArgumentHelper.php create mode 100644 vendor/phpunit/phpunit/src/Util/Json.php create mode 100644 vendor/phpunit/phpunit/src/Util/Log/JUnit.php create mode 100644 vendor/phpunit/phpunit/src/Util/Log/TeamCity.php create mode 100644 vendor/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php create mode 100644 vendor/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php create mode 100644 vendor/phpunit/phpunit/src/Util/PHP/Template/PhptTestCase.tpl.dist create mode 100644 vendor/phpunit/phpunit/src/Util/PHP/Template/TestCaseClass.tpl.dist create mode 100644 vendor/phpunit/phpunit/src/Util/PHP/Template/TestCaseMethod.tpl.dist create mode 100644 vendor/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.php create mode 100644 vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php create mode 100644 vendor/phpunit/phpunit/src/Util/Printer.php create mode 100644 vendor/phpunit/phpunit/src/Util/RegularExpression.php create mode 100644 vendor/phpunit/phpunit/src/Util/Test.php create mode 100644 vendor/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php create mode 100644 vendor/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php create mode 100644 vendor/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php create mode 100644 vendor/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php create mode 100644 vendor/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php create mode 100644 vendor/phpunit/phpunit/src/Util/TextTestListRenderer.php create mode 100644 vendor/phpunit/phpunit/src/Util/Type.php create mode 100644 vendor/phpunit/phpunit/src/Util/Xml.php create mode 100644 vendor/phpunit/phpunit/src/Util/XmlTestListRenderer.php create mode 100644 vendor/phpunit/phpunit/tests/Fail/fail.phpt create mode 100644 vendor/phpunit/phpunit/tests/Framework/AssertTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/BaseTestListenerTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/ArrayHasKeyTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/ArraySubsetTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/AttributeTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/CallbackTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/ClassHasAttributeTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/ClassHasStaticAttributeTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/ConstraintTestCase.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/CountTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/DirectoryExistsTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/ExceptionMessageRegExpTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/ExceptionMessageTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/FileExistsTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/GreaterThanTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/IsEmptyTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/IsEqualTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/IsIdenticalTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/IsJsonTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/IsNullTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/IsReadableTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/IsTypeTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/IsWritableTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/JsonMatchesErrorMessageProviderTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/JsonMatchesTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/LessThanTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/LogicalAndTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/LogicalOrTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/LogicalXorTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/ObjectHasAttributeTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/RegularExpressionTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/SameSizeTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/StringContainsTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/StringEndsWithTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/StringMatchesFormatDescriptionTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/StringStartsWithTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/Constraint/TraversableContainsTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/ConstraintTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/SuiteTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/TestCaseTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/TestFailureTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/TestImplementorTest.php create mode 100644 vendor/phpunit/phpunit/tests/Framework/TestListenerTest.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1149.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1149/Issue1149Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1216.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1216/Issue1216Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1216/bootstrap1216.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1216/phpunit1216.xml create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1265.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1265/Issue1265Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1265/phpunit1265.xml create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1330.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1330/Issue1330Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1330/phpunit1330.xml create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1335.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1335/Issue1335Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1335/bootstrap1335.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1337.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1337/Issue1337Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1348.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1348/Issue1348Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1351.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1351/ChildProcessClass1351.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1351/Issue1351Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1374.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1374/Issue1374Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1437.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1437/Issue1437Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1468.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1468/Issue1468Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1471.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1471/Issue1471Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1472.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1472/Issue1472Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1570.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/1570/Issue1570Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2137-filter.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2137-no_filter.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2137/Issue2137Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2145.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2145/Issue2145Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2158.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2158/Issue2158Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2158/constant.inc create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2366.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2366/Issue2366Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2380.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2380/Issue2380Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2382.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2382/Issue2382Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2435.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2435/Issue2435Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/244.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/244/Issue244Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2448-existing-test.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2448-not-existing-test.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2448/Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2591-separate-class-preserve-no-bootstrap.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2591-separate-class-preserve.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2591-separate-function-no-preserve-no-bootstrap-xdebug.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2591-separate-function-no-preserve-no-bootstrap.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2591-separate-function-no-preserve.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2591-separate-function-preserve.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2591/SeparateClassPreserveTest.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2591/SeparateFunctionNoPreserveTest.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2591/SeparateFunctionPreserveTest.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2591/bootstrapNoBootstrap.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2591/bootstrapWithBootstrap.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2591/bootstrapWithBootstrapNoGlobal.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2725-separate-class-before-after-pid.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2725/BeforeAfterClassPidTest.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2731.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2731/Issue2731Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2811.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2811/Issue2811Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2972.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2972/issue-2972-test.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/2972/unconventiallyNamedIssue2972Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/322.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/322/Issue322Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/322/phpunit322.xml create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/433.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/433/Issue433Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/445.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/445/Issue445Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/498.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/498/Issue498Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/503.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/503/Issue503Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/581.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/581/Issue581Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/74.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/74/Issue74Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/74/NewException.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/765.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/765/Issue765Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/797.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/797/Issue797Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/797/bootstrap797.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/863.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/873.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/GitHub/873/Issue873Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/Trac/1021.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/Trac/1021/Issue1021Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/Trac/523.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/Trac/523/Issue523Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/Trac/578.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/Trac/578/Issue578Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/Trac/684.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/Trac/684/Issue684Test.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/Trac/783.phpt create mode 100644 vendor/phpunit/phpunit/tests/Regression/Trac/783/ChildSuite.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/Trac/783/OneTest.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/Trac/783/ParentSuite.php create mode 100644 vendor/phpunit/phpunit/tests/Regression/Trac/783/TwoTest.php create mode 100644 vendor/phpunit/phpunit/tests/Runner/PhptTestCaseTest.php create mode 100644 vendor/phpunit/phpunit/tests/TextUI/_files/expect_external.txt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/_files/phpt-env.expected.txt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/_files/phpt_external.php create mode 100644 vendor/phpunit/phpunit/tests/TextUI/abstract-test-class.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/assertion.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/code-coverage-ignore.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/code-coverage-phpt.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/colors-always.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/concrete-test-class.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/custom-printer-debug.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/custom-printer-verbose.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/dataprovider-debug.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/dataprovider-issue-2833.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/dataprovider-issue-2859.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/dataprovider-issue-2922.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/dataprovider-log-xml-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/dataprovider-log-xml.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/dataprovider-testdox.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/debug.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/default-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/default.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/defaulttestsuite-using-testsuite.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/defaulttestsuite.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/dependencies-clone.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/dependencies-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/dependencies.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/dependencies2-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/dependencies2.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/dependencies3-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/dependencies3.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/disable-code-coverage-ignore.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/empty-testcase.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/exception-stack.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/exclude-group-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/exclude-group.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/failure-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/failure-reverse-list.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/failure.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/fatal-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-class-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-class.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-dataprovider-by-classname-and-range-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-dataprovider-by-classname-and-range.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-dataprovider-by-number-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-dataprovider-by-number.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-dataprovider-by-only-range-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-dataprovider-by-only-range.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-dataprovider-by-only-regexp-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-dataprovider-by-only-regexp.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-dataprovider-by-only-string-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-dataprovider-by-only-string.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-dataprovider-by-range-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-dataprovider-by-range.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-dataprovider-by-regexp-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-dataprovider-by-regexp.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-dataprovider-by-string-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-dataprovider-by-string.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-method-case-insensitive.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-method-case-sensitive-no-result.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-method-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-method.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/filter-no-results.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/forward-compatibility.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/group-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/group.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/help.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/help2.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/ini-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/list-groups.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/list-suites.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/list-tests-dataprovider.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/list-tests-xml-dataprovider.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/log-junit.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/log-teamcity.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/mycommand.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/options-after-arguments.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/output-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/phar-extension-suppressed.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/phar-extension.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/phpt-args.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/phpt-env.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/phpt-external.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/phpt-stderr.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/phpt-stdin.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/phpt-xfail.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/repeat.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/report-useless-tests-incomplete.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/report-useless-tests-isolation.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/report-useless-tests.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/stop-on-warning-via-cli.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/stop-on-warning-via-config.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/teamcity-inner-exceptions.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/teamcity.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/test-suffix-multiple.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/test-suffix-single.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/testdox-exclude-group.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/testdox-group.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/testdox-html.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/testdox-text.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/testdox-xml.phpt create mode 100644 vendor/phpunit/phpunit/tests/TextUI/testdox.phpt create mode 100644 vendor/phpunit/phpunit/tests/Util/ConfigurationGeneratorTest.php create mode 100644 vendor/phpunit/phpunit/tests/Util/ConfigurationTest.php create mode 100644 vendor/phpunit/phpunit/tests/Util/GetoptTest.php create mode 100644 vendor/phpunit/phpunit/tests/Util/GlobalStateTest.php create mode 100644 vendor/phpunit/phpunit/tests/Util/JsonTest.php create mode 100644 vendor/phpunit/phpunit/tests/Util/PHP/AbstractPhpProcessTest.php create mode 100644 vendor/phpunit/phpunit/tests/Util/RegularExpressionTest.php create mode 100644 vendor/phpunit/phpunit/tests/Util/TestDox/NamePrettifierTest.php create mode 100644 vendor/phpunit/phpunit/tests/Util/TestTest.php create mode 100644 vendor/phpunit/phpunit/tests/Util/XmlTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/AbstractTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ArrayAccessible.php create mode 100644 vendor/phpunit/phpunit/tests/_files/AssertionExample.php create mode 100644 vendor/phpunit/phpunit/tests/_files/AssertionExampleTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/Author.php create mode 100644 vendor/phpunit/phpunit/tests/_files/BankAccount.php create mode 100644 vendor/phpunit/phpunit/tests/_files/BankAccountTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/BankAccountTest.test.php create mode 100644 vendor/phpunit/phpunit/tests/_files/BankAccountTest2.php create mode 100644 vendor/phpunit/phpunit/tests/_files/BaseTestListenerSample.php create mode 100644 vendor/phpunit/phpunit/tests/_files/BeforeAndAfterTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/BeforeClassAndAfterClassTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/BeforeClassWithOnlyDataProviderTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/Book.php create mode 100644 vendor/phpunit/phpunit/tests/_files/Calculator.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ChangeCurrentWorkingDirectoryTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ClassWithNonPublicAttributes.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ClassWithScalarTypeDeclarations.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ClassWithToString.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ClonedDependencyTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ConcreteTest.my.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ConcreteTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CountConstraint.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageClassExtendedTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageClassTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageFunctionParenthesesTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageFunctionParenthesesWhitespaceTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageFunctionTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageMethodOneLineAnnotationTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageMethodParenthesesTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageMethodParenthesesWhitespaceTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageMethodTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageNamespacedFunctionTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageNoneTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageNotPrivateTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageNotProtectedTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageNotPublicTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageNothingTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoveragePrivateTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageProtectedTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoveragePublicTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageTwoDefaultClassAnnotations.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoveredClass.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CoveredFunction.php create mode 100644 vendor/phpunit/phpunit/tests/_files/CustomPrinter.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderDebugTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderDependencyTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderFilterTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderIncompleteTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderIssue2833/FirstTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderIssue2833/SecondTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderIssue2859/phpunit.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderIssue2859/tests/another/TestWithDataProviderTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderIssue2922/FirstTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderIssue2922/SecondTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderSkippedTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderTestDoxTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DependencyFailureTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DependencySuccessTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DependencyTestSuite.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DoubleTestCase.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DummyBarTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DummyException.php create mode 100644 vendor/phpunit/phpunit/tests/_files/DummyFooTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/EmptyTestCaseTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionInAssertPostConditionsTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionInAssertPreConditionsTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionInSetUpTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionInTearDownTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionInTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionNamespaceTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionStackTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/Failure.php create mode 100644 vendor/phpunit/phpunit/tests/_files/FailureTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/FalsyConstraint.php create mode 100644 vendor/phpunit/phpunit/tests/_files/FatalTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/IgnoreCodeCoverageClass.php create mode 100644 vendor/phpunit/phpunit/tests/_files/IgnoreCodeCoverageClassTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/IncompleteTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/Inheritance/InheritanceA.php create mode 100644 vendor/phpunit/phpunit/tests/_files/Inheritance/InheritanceB.php create mode 100644 vendor/phpunit/phpunit/tests/_files/InheritedTestCase.php create mode 100644 vendor/phpunit/phpunit/tests/_files/IniTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/IsolationTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/JsonData/arrayObject.json create mode 100644 vendor/phpunit/phpunit/tests/_files/JsonData/simpleObject.json create mode 100644 vendor/phpunit/phpunit/tests/_files/MockRunner.php create mode 100644 vendor/phpunit/phpunit/tests/_files/Mockable.php create mode 100644 vendor/phpunit/phpunit/tests/_files/MultiDependencyTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/MultipleDataProviderTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/MyCommand.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NamedConstraint.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageClassExtendedTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageClassTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageCoversClassPublicTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageCoversClassTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageMethodTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageNotPrivateTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageNotProtectedTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageNotPublicTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoveragePrivateTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageProtectedTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoveragePublicTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoveredClass.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoveredFunction.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NoArgTestCaseTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NoTestCaseClass.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NoTestCases.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NonStatic.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NotExistingCoveredElementTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NotPublicTestCase.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NotVoidTestCase.php create mode 100644 vendor/phpunit/phpunit/tests/_files/NothingTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/OneTestCase.php create mode 100644 vendor/phpunit/phpunit/tests/_files/OutputTestCase.php create mode 100644 vendor/phpunit/phpunit/tests/_files/OverrideTestCase.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ParseTestMethodAnnotationsMock.php create mode 100644 vendor/phpunit/phpunit/tests/_files/RequirementsClassBeforeClassHookTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/RequirementsClassDocBlockTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/RequirementsTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/SampleArrayAccess.php create mode 100644 vendor/phpunit/phpunit/tests/_files/SampleClass.php create mode 100644 vendor/phpunit/phpunit/tests/_files/Singleton.php create mode 100644 vendor/phpunit/phpunit/tests/_files/StackTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/StatusTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/StopOnWarningTestSuite.php create mode 100644 vendor/phpunit/phpunit/tests/_files/StopsOnWarningTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/Struct.php create mode 100644 vendor/phpunit/phpunit/tests/_files/Success.php create mode 100644 vendor/phpunit/phpunit/tests/_files/TemplateMethodsTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/TestAutoreferenced.php create mode 100644 vendor/phpunit/phpunit/tests/_files/TestDoxGroupTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/TestGeneratorMaker.php create mode 100644 vendor/phpunit/phpunit/tests/_files/TestIncomplete.php create mode 100644 vendor/phpunit/phpunit/tests/_files/TestIterator.php create mode 100644 vendor/phpunit/phpunit/tests/_files/TestIterator2.php create mode 100644 vendor/phpunit/phpunit/tests/_files/TestIteratorAggregate.php create mode 100644 vendor/phpunit/phpunit/tests/_files/TestIteratorAggregate2.php create mode 100644 vendor/phpunit/phpunit/tests/_files/TestSkipped.php create mode 100644 vendor/phpunit/phpunit/tests/_files/TestTestError.php create mode 100644 vendor/phpunit/phpunit/tests/_files/TestWithTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ThrowExceptionTestCase.php create mode 100644 vendor/phpunit/phpunit/tests/_files/ThrowNoExceptionTestCase.php create mode 100644 vendor/phpunit/phpunit/tests/_files/TruthyConstraint.php create mode 100644 vendor/phpunit/phpunit/tests/_files/VariousIterableDataProviderTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/WasRun.php create mode 100644 vendor/phpunit/phpunit/tests/_files/WrapperIteratorAggregate.php create mode 100644 vendor/phpunit/phpunit/tests/_files/bar.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.colors.empty.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.colors.false.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.colors.invalid.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.colors.true.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.custom-printer.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.defaulttestsuite.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.one-file-suite.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.suites.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/configuration_empty.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/configuration_stop_on_warning.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/configuration_xinclude.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/expectedFileFormat.txt create mode 100644 vendor/phpunit/phpunit/tests/_files/foo.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/phpt-for-coverage.phpt create mode 100644 vendor/phpunit/phpunit/tests/_files/phpt-xfail.phpt create mode 100644 vendor/phpunit/phpunit/tests/_files/phpunit-example-extension/phpunit.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/phpunit-example-extension/tests/OneTest.php create mode 100644 vendor/phpunit/phpunit/tests/_files/phpunit-example-extension/tools/phpunit.d/phpunit-example-extension-1.0.1.phar create mode 100644 vendor/phpunit/phpunit/tests/_files/structureAttributesAreSameButValuesAreNot.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/structureExpected.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/structureIgnoreTextNodes.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/structureIsSameButDataIsNot.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/structureWrongNumberOfAttributes.xml create mode 100644 vendor/phpunit/phpunit/tests/_files/structureWrongNumberOfNodes.xml create mode 100644 vendor/phpunit/phpunit/tests/bootstrap.php create mode 100644 vendor/psr/http-message/CHANGELOG.md create mode 100644 vendor/psr/http-message/LICENSE create mode 100644 vendor/psr/http-message/README.md create mode 100644 vendor/psr/http-message/composer.json create mode 100644 vendor/psr/http-message/src/MessageInterface.php create mode 100644 vendor/psr/http-message/src/RequestInterface.php create mode 100644 vendor/psr/http-message/src/ResponseInterface.php create mode 100644 vendor/psr/http-message/src/ServerRequestInterface.php create mode 100644 vendor/psr/http-message/src/StreamInterface.php create mode 100644 vendor/psr/http-message/src/UploadedFileInterface.php create mode 100644 vendor/psr/http-message/src/UriInterface.php create mode 100644 vendor/sebastian/code-unit-reverse-lookup/.gitignore create mode 100644 vendor/sebastian/code-unit-reverse-lookup/.php_cs create mode 100644 vendor/sebastian/code-unit-reverse-lookup/.travis.yml create mode 100644 vendor/sebastian/code-unit-reverse-lookup/ChangeLog.md create mode 100644 vendor/sebastian/code-unit-reverse-lookup/LICENSE create mode 100644 vendor/sebastian/code-unit-reverse-lookup/README.md create mode 100644 vendor/sebastian/code-unit-reverse-lookup/build.xml create mode 100644 vendor/sebastian/code-unit-reverse-lookup/composer.json create mode 100644 vendor/sebastian/code-unit-reverse-lookup/phpunit.xml create mode 100644 vendor/sebastian/code-unit-reverse-lookup/src/Wizard.php create mode 100644 vendor/sebastian/code-unit-reverse-lookup/tests/WizardTest.php create mode 100644 vendor/sebastian/comparator/.gitignore create mode 100644 vendor/sebastian/comparator/.php_cs.dist create mode 100644 vendor/sebastian/comparator/.travis.yml create mode 100644 vendor/sebastian/comparator/ChangeLog.md create mode 100644 vendor/sebastian/comparator/LICENSE create mode 100644 vendor/sebastian/comparator/README.md create mode 100644 vendor/sebastian/comparator/build.xml create mode 100644 vendor/sebastian/comparator/composer.json create mode 100644 vendor/sebastian/comparator/phpunit.xml create mode 100644 vendor/sebastian/comparator/src/ArrayComparator.php create mode 100644 vendor/sebastian/comparator/src/Comparator.php create mode 100644 vendor/sebastian/comparator/src/ComparisonFailure.php create mode 100644 vendor/sebastian/comparator/src/DOMNodeComparator.php create mode 100644 vendor/sebastian/comparator/src/DateTimeComparator.php create mode 100644 vendor/sebastian/comparator/src/DoubleComparator.php create mode 100644 vendor/sebastian/comparator/src/ExceptionComparator.php create mode 100644 vendor/sebastian/comparator/src/Factory.php create mode 100644 vendor/sebastian/comparator/src/MockObjectComparator.php create mode 100644 vendor/sebastian/comparator/src/NumericComparator.php create mode 100644 vendor/sebastian/comparator/src/ObjectComparator.php create mode 100644 vendor/sebastian/comparator/src/ResourceComparator.php create mode 100644 vendor/sebastian/comparator/src/ScalarComparator.php create mode 100644 vendor/sebastian/comparator/src/SplObjectStorageComparator.php create mode 100644 vendor/sebastian/comparator/src/TypeComparator.php create mode 100644 vendor/sebastian/comparator/tests/ArrayComparatorTest.php create mode 100644 vendor/sebastian/comparator/tests/ComparisonFailureTest.php create mode 100644 vendor/sebastian/comparator/tests/DOMNodeComparatorTest.php create mode 100644 vendor/sebastian/comparator/tests/DateTimeComparatorTest.php create mode 100644 vendor/sebastian/comparator/tests/DoubleComparatorTest.php create mode 100644 vendor/sebastian/comparator/tests/ExceptionComparatorTest.php create mode 100644 vendor/sebastian/comparator/tests/FactoryTest.php create mode 100644 vendor/sebastian/comparator/tests/MockObjectComparatorTest.php create mode 100644 vendor/sebastian/comparator/tests/NumericComparatorTest.php create mode 100644 vendor/sebastian/comparator/tests/ObjectComparatorTest.php create mode 100644 vendor/sebastian/comparator/tests/ResourceComparatorTest.php create mode 100644 vendor/sebastian/comparator/tests/ScalarComparatorTest.php create mode 100644 vendor/sebastian/comparator/tests/SplObjectStorageComparatorTest.php create mode 100644 vendor/sebastian/comparator/tests/TypeComparatorTest.php create mode 100644 vendor/sebastian/comparator/tests/_fixture/Author.php create mode 100644 vendor/sebastian/comparator/tests/_fixture/Book.php create mode 100644 vendor/sebastian/comparator/tests/_fixture/ClassWithToString.php create mode 100644 vendor/sebastian/comparator/tests/_fixture/SampleClass.php create mode 100644 vendor/sebastian/comparator/tests/_fixture/Struct.php create mode 100644 vendor/sebastian/comparator/tests/_fixture/TestClass.php create mode 100644 vendor/sebastian/comparator/tests/_fixture/TestClassComparator.php create mode 100644 vendor/sebastian/diff/.gitignore create mode 100644 vendor/sebastian/diff/.php_cs create mode 100644 vendor/sebastian/diff/.travis.yml create mode 100644 vendor/sebastian/diff/ChangeLog.md create mode 100644 vendor/sebastian/diff/LICENSE create mode 100644 vendor/sebastian/diff/README.md create mode 100644 vendor/sebastian/diff/build.xml create mode 100644 vendor/sebastian/diff/composer.json create mode 100644 vendor/sebastian/diff/phpunit.xml create mode 100644 vendor/sebastian/diff/src/Chunk.php create mode 100644 vendor/sebastian/diff/src/Diff.php create mode 100644 vendor/sebastian/diff/src/Differ.php create mode 100644 vendor/sebastian/diff/src/Exception/Exception.php create mode 100644 vendor/sebastian/diff/src/Exception/InvalidArgumentException.php create mode 100644 vendor/sebastian/diff/src/Line.php create mode 100644 vendor/sebastian/diff/src/LongestCommonSubsequenceCalculator.php create mode 100644 vendor/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php create mode 100644 vendor/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php create mode 100644 vendor/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php create mode 100644 vendor/sebastian/diff/src/Output/DiffOutputBuilderInterface.php create mode 100644 vendor/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php create mode 100644 vendor/sebastian/diff/src/Parser.php create mode 100644 vendor/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php create mode 100644 vendor/sebastian/diff/tests/ChunkTest.php create mode 100644 vendor/sebastian/diff/tests/DiffTest.php create mode 100644 vendor/sebastian/diff/tests/DifferTest.php create mode 100644 vendor/sebastian/diff/tests/DifferTestTest.php create mode 100644 vendor/sebastian/diff/tests/LineTest.php create mode 100644 vendor/sebastian/diff/tests/LongestCommonSubsequenceTest.php create mode 100644 vendor/sebastian/diff/tests/MemoryEfficientImplementationTest.php create mode 100644 vendor/sebastian/diff/tests/ParserTest.php create mode 100644 vendor/sebastian/diff/tests/TimeEfficientImplementationTest.php create mode 100644 vendor/sebastian/diff/tests/fixtures/patch.txt create mode 100644 vendor/sebastian/diff/tests/fixtures/patch2.txt create mode 100644 vendor/sebastian/environment/.gitignore create mode 100644 vendor/sebastian/environment/.php_cs create mode 100644 vendor/sebastian/environment/.travis.yml create mode 100644 vendor/sebastian/environment/ChangeLog.md create mode 100644 vendor/sebastian/environment/LICENSE create mode 100644 vendor/sebastian/environment/README.md create mode 100644 vendor/sebastian/environment/build.xml create mode 100644 vendor/sebastian/environment/composer.json create mode 100644 vendor/sebastian/environment/phpunit.xml create mode 100644 vendor/sebastian/environment/src/Console.php create mode 100644 vendor/sebastian/environment/src/OperatingSystem.php create mode 100644 vendor/sebastian/environment/src/Runtime.php create mode 100644 vendor/sebastian/environment/tests/ConsoleTest.php create mode 100644 vendor/sebastian/environment/tests/OperatingSystemTest.php create mode 100644 vendor/sebastian/environment/tests/RuntimeTest.php create mode 100644 vendor/sebastian/exporter/.gitignore create mode 100644 vendor/sebastian/exporter/.php_cs create mode 100644 vendor/sebastian/exporter/.travis.yml create mode 100644 vendor/sebastian/exporter/LICENSE create mode 100644 vendor/sebastian/exporter/README.md create mode 100644 vendor/sebastian/exporter/build.xml create mode 100644 vendor/sebastian/exporter/composer.json create mode 100644 vendor/sebastian/exporter/phpunit.xml create mode 100644 vendor/sebastian/exporter/src/Exporter.php create mode 100644 vendor/sebastian/exporter/tests/ExporterTest.php create mode 100644 vendor/sebastian/global-state/.gitignore create mode 100644 vendor/sebastian/global-state/.php_cs create mode 100644 vendor/sebastian/global-state/.travis.yml create mode 100644 vendor/sebastian/global-state/LICENSE create mode 100644 vendor/sebastian/global-state/README.md create mode 100644 vendor/sebastian/global-state/build.xml create mode 100644 vendor/sebastian/global-state/composer.json create mode 100644 vendor/sebastian/global-state/phpunit.xml create mode 100644 vendor/sebastian/global-state/src/Blacklist.php create mode 100644 vendor/sebastian/global-state/src/CodeExporter.php create mode 100644 vendor/sebastian/global-state/src/Restorer.php create mode 100644 vendor/sebastian/global-state/src/Snapshot.php create mode 100644 vendor/sebastian/global-state/src/exceptions/Exception.php create mode 100644 vendor/sebastian/global-state/src/exceptions/RuntimeException.php create mode 100644 vendor/sebastian/global-state/tests/BlacklistTest.php create mode 100644 vendor/sebastian/global-state/tests/CodeExporterTest.php create mode 100644 vendor/sebastian/global-state/tests/RestorerTest.php create mode 100644 vendor/sebastian/global-state/tests/SnapshotTest.php create mode 100644 vendor/sebastian/global-state/tests/_fixture/BlacklistedChildClass.php create mode 100644 vendor/sebastian/global-state/tests/_fixture/BlacklistedClass.php create mode 100644 vendor/sebastian/global-state/tests/_fixture/BlacklistedImplementor.php create mode 100644 vendor/sebastian/global-state/tests/_fixture/BlacklistedInterface.php create mode 100644 vendor/sebastian/global-state/tests/_fixture/SnapshotClass.php create mode 100644 vendor/sebastian/global-state/tests/_fixture/SnapshotDomDocument.php create mode 100644 vendor/sebastian/global-state/tests/_fixture/SnapshotFunctions.php create mode 100644 vendor/sebastian/global-state/tests/_fixture/SnapshotTrait.php create mode 100644 vendor/sebastian/object-enumerator/.gitignore create mode 100644 vendor/sebastian/object-enumerator/.php_cs create mode 100644 vendor/sebastian/object-enumerator/.travis.yml create mode 100644 vendor/sebastian/object-enumerator/ChangeLog.md create mode 100644 vendor/sebastian/object-enumerator/LICENSE create mode 100644 vendor/sebastian/object-enumerator/README.md create mode 100644 vendor/sebastian/object-enumerator/build.xml create mode 100644 vendor/sebastian/object-enumerator/composer.json create mode 100644 vendor/sebastian/object-enumerator/phpunit.xml create mode 100644 vendor/sebastian/object-enumerator/src/Enumerator.php create mode 100644 vendor/sebastian/object-enumerator/src/Exception.php create mode 100644 vendor/sebastian/object-enumerator/src/InvalidArgumentException.php create mode 100644 vendor/sebastian/object-enumerator/tests/EnumeratorTest.php create mode 100644 vendor/sebastian/object-enumerator/tests/_fixture/ExceptionThrower.php create mode 100644 vendor/sebastian/object-reflector/.gitignore create mode 100644 vendor/sebastian/object-reflector/.php_cs create mode 100644 vendor/sebastian/object-reflector/.travis.yml create mode 100644 vendor/sebastian/object-reflector/ChangeLog.md create mode 100644 vendor/sebastian/object-reflector/LICENSE create mode 100644 vendor/sebastian/object-reflector/README.md create mode 100644 vendor/sebastian/object-reflector/build.xml create mode 100644 vendor/sebastian/object-reflector/composer.json create mode 100644 vendor/sebastian/object-reflector/phpunit.xml create mode 100644 vendor/sebastian/object-reflector/src/Exception.php create mode 100644 vendor/sebastian/object-reflector/src/InvalidArgumentException.php create mode 100644 vendor/sebastian/object-reflector/src/ObjectReflector.php create mode 100644 vendor/sebastian/object-reflector/tests/ObjectReflectorTest.php create mode 100644 vendor/sebastian/object-reflector/tests/_fixture/ChildClass.php create mode 100644 vendor/sebastian/object-reflector/tests/_fixture/ClassWithIntegerAttributeName.php create mode 100644 vendor/sebastian/object-reflector/tests/_fixture/ParentClass.php create mode 100644 vendor/sebastian/recursion-context/.gitignore create mode 100644 vendor/sebastian/recursion-context/.travis.yml create mode 100644 vendor/sebastian/recursion-context/LICENSE create mode 100644 vendor/sebastian/recursion-context/README.md create mode 100644 vendor/sebastian/recursion-context/build.xml create mode 100644 vendor/sebastian/recursion-context/composer.json create mode 100644 vendor/sebastian/recursion-context/phpunit.xml create mode 100644 vendor/sebastian/recursion-context/src/Context.php create mode 100644 vendor/sebastian/recursion-context/src/Exception.php create mode 100644 vendor/sebastian/recursion-context/src/InvalidArgumentException.php create mode 100644 vendor/sebastian/recursion-context/tests/ContextTest.php create mode 100644 vendor/sebastian/resource-operations/.gitignore create mode 100644 vendor/sebastian/resource-operations/LICENSE create mode 100644 vendor/sebastian/resource-operations/README.md create mode 100644 vendor/sebastian/resource-operations/build.xml create mode 100755 vendor/sebastian/resource-operations/build/generate.php create mode 100644 vendor/sebastian/resource-operations/composer.json create mode 100644 vendor/sebastian/resource-operations/src/ResourceOperations.php create mode 100644 vendor/sebastian/version/.gitattributes create mode 100644 vendor/sebastian/version/.gitignore create mode 100644 vendor/sebastian/version/.php_cs create mode 100644 vendor/sebastian/version/LICENSE create mode 100644 vendor/sebastian/version/README.md create mode 100644 vendor/sebastian/version/composer.json create mode 100644 vendor/sebastian/version/src/Version.php create mode 100644 vendor/symfony/browser-kit/.gitignore create mode 100644 vendor/symfony/browser-kit/CHANGELOG.md create mode 100644 vendor/symfony/browser-kit/Client.php create mode 100644 vendor/symfony/browser-kit/Cookie.php create mode 100644 vendor/symfony/browser-kit/CookieJar.php create mode 100644 vendor/symfony/browser-kit/History.php create mode 100644 vendor/symfony/browser-kit/LICENSE create mode 100644 vendor/symfony/browser-kit/README.md create mode 100644 vendor/symfony/browser-kit/Request.php create mode 100644 vendor/symfony/browser-kit/Response.php create mode 100644 vendor/symfony/browser-kit/Tests/ClientTest.php create mode 100644 vendor/symfony/browser-kit/Tests/CookieJarTest.php create mode 100644 vendor/symfony/browser-kit/Tests/CookieTest.php create mode 100644 vendor/symfony/browser-kit/Tests/HistoryTest.php create mode 100644 vendor/symfony/browser-kit/Tests/RequestTest.php create mode 100644 vendor/symfony/browser-kit/Tests/ResponseTest.php create mode 100644 vendor/symfony/browser-kit/composer.json create mode 100644 vendor/symfony/browser-kit/phpunit.xml.dist create mode 100644 vendor/symfony/console/.gitignore create mode 100644 vendor/symfony/console/Application.php create mode 100644 vendor/symfony/console/CHANGELOG.md create mode 100644 vendor/symfony/console/Command/Command.php create mode 100644 vendor/symfony/console/Command/HelpCommand.php create mode 100644 vendor/symfony/console/Command/ListCommand.php create mode 100644 vendor/symfony/console/Command/LockableTrait.php create mode 100644 vendor/symfony/console/CommandLoader/CommandLoaderInterface.php create mode 100644 vendor/symfony/console/CommandLoader/ContainerCommandLoader.php create mode 100644 vendor/symfony/console/CommandLoader/FactoryCommandLoader.php create mode 100644 vendor/symfony/console/ConsoleEvents.php create mode 100644 vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php create mode 100644 vendor/symfony/console/Descriptor/ApplicationDescription.php create mode 100644 vendor/symfony/console/Descriptor/Descriptor.php create mode 100644 vendor/symfony/console/Descriptor/DescriptorInterface.php create mode 100644 vendor/symfony/console/Descriptor/JsonDescriptor.php create mode 100644 vendor/symfony/console/Descriptor/MarkdownDescriptor.php create mode 100644 vendor/symfony/console/Descriptor/TextDescriptor.php create mode 100644 vendor/symfony/console/Descriptor/XmlDescriptor.php create mode 100644 vendor/symfony/console/Event/ConsoleCommandEvent.php create mode 100644 vendor/symfony/console/Event/ConsoleErrorEvent.php create mode 100644 vendor/symfony/console/Event/ConsoleEvent.php create mode 100644 vendor/symfony/console/Event/ConsoleTerminateEvent.php create mode 100644 vendor/symfony/console/EventListener/ErrorListener.php create mode 100644 vendor/symfony/console/Exception/CommandNotFoundException.php create mode 100644 vendor/symfony/console/Exception/ExceptionInterface.php create mode 100644 vendor/symfony/console/Exception/InvalidArgumentException.php create mode 100644 vendor/symfony/console/Exception/InvalidOptionException.php create mode 100644 vendor/symfony/console/Exception/LogicException.php create mode 100644 vendor/symfony/console/Exception/RuntimeException.php create mode 100644 vendor/symfony/console/Formatter/OutputFormatter.php create mode 100644 vendor/symfony/console/Formatter/OutputFormatterInterface.php create mode 100644 vendor/symfony/console/Formatter/OutputFormatterStyle.php create mode 100644 vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php create mode 100644 vendor/symfony/console/Formatter/OutputFormatterStyleStack.php create mode 100644 vendor/symfony/console/Helper/DebugFormatterHelper.php create mode 100644 vendor/symfony/console/Helper/DescriptorHelper.php create mode 100644 vendor/symfony/console/Helper/FormatterHelper.php create mode 100644 vendor/symfony/console/Helper/Helper.php create mode 100644 vendor/symfony/console/Helper/HelperInterface.php create mode 100644 vendor/symfony/console/Helper/HelperSet.php create mode 100644 vendor/symfony/console/Helper/InputAwareHelper.php create mode 100644 vendor/symfony/console/Helper/ProcessHelper.php create mode 100644 vendor/symfony/console/Helper/ProgressBar.php create mode 100644 vendor/symfony/console/Helper/ProgressIndicator.php create mode 100644 vendor/symfony/console/Helper/QuestionHelper.php create mode 100644 vendor/symfony/console/Helper/SymfonyQuestionHelper.php create mode 100644 vendor/symfony/console/Helper/Table.php create mode 100644 vendor/symfony/console/Helper/TableCell.php create mode 100644 vendor/symfony/console/Helper/TableSeparator.php create mode 100644 vendor/symfony/console/Helper/TableStyle.php create mode 100644 vendor/symfony/console/Input/ArgvInput.php create mode 100644 vendor/symfony/console/Input/ArrayInput.php create mode 100644 vendor/symfony/console/Input/Input.php create mode 100644 vendor/symfony/console/Input/InputArgument.php create mode 100644 vendor/symfony/console/Input/InputAwareInterface.php create mode 100644 vendor/symfony/console/Input/InputDefinition.php create mode 100644 vendor/symfony/console/Input/InputInterface.php create mode 100644 vendor/symfony/console/Input/InputOption.php create mode 100644 vendor/symfony/console/Input/StreamableInputInterface.php create mode 100644 vendor/symfony/console/Input/StringInput.php create mode 100644 vendor/symfony/console/LICENSE create mode 100644 vendor/symfony/console/Logger/ConsoleLogger.php create mode 100644 vendor/symfony/console/Output/BufferedOutput.php create mode 100644 vendor/symfony/console/Output/ConsoleOutput.php create mode 100644 vendor/symfony/console/Output/ConsoleOutputInterface.php create mode 100644 vendor/symfony/console/Output/NullOutput.php create mode 100644 vendor/symfony/console/Output/Output.php create mode 100644 vendor/symfony/console/Output/OutputInterface.php create mode 100644 vendor/symfony/console/Output/StreamOutput.php create mode 100644 vendor/symfony/console/Question/ChoiceQuestion.php create mode 100644 vendor/symfony/console/Question/ConfirmationQuestion.php create mode 100644 vendor/symfony/console/Question/Question.php create mode 100644 vendor/symfony/console/README.md create mode 100644 vendor/symfony/console/Resources/bin/hiddeninput.exe create mode 100644 vendor/symfony/console/Style/OutputStyle.php create mode 100644 vendor/symfony/console/Style/StyleInterface.php create mode 100644 vendor/symfony/console/Style/SymfonyStyle.php create mode 100644 vendor/symfony/console/Terminal.php create mode 100644 vendor/symfony/console/Tester/ApplicationTester.php create mode 100644 vendor/symfony/console/Tester/CommandTester.php create mode 100644 vendor/symfony/console/Tests/ApplicationTest.php create mode 100644 vendor/symfony/console/Tests/Command/CommandTest.php create mode 100644 vendor/symfony/console/Tests/Command/HelpCommandTest.php create mode 100644 vendor/symfony/console/Tests/Command/ListCommandTest.php create mode 100644 vendor/symfony/console/Tests/Command/LockableTraitTest.php create mode 100644 vendor/symfony/console/Tests/CommandLoader/ContainerCommandLoaderTest.php create mode 100644 vendor/symfony/console/Tests/CommandLoader/FactoryCommandLoaderTest.php create mode 100644 vendor/symfony/console/Tests/DependencyInjection/AddConsoleCommandPassTest.php create mode 100644 vendor/symfony/console/Tests/Descriptor/AbstractDescriptorTest.php create mode 100644 vendor/symfony/console/Tests/Descriptor/JsonDescriptorTest.php create mode 100644 vendor/symfony/console/Tests/Descriptor/MarkdownDescriptorTest.php create mode 100644 vendor/symfony/console/Tests/Descriptor/ObjectsProvider.php create mode 100644 vendor/symfony/console/Tests/Descriptor/TextDescriptorTest.php create mode 100644 vendor/symfony/console/Tests/Descriptor/XmlDescriptorTest.php create mode 100644 vendor/symfony/console/Tests/EventListener/ErrorListenerTest.php create mode 100644 vendor/symfony/console/Tests/Fixtures/BarBucCommand.php create mode 100644 vendor/symfony/console/Tests/Fixtures/DescriptorApplication1.php create mode 100644 vendor/symfony/console/Tests/Fixtures/DescriptorApplication2.php create mode 100644 vendor/symfony/console/Tests/Fixtures/DescriptorApplicationMbString.php create mode 100644 vendor/symfony/console/Tests/Fixtures/DescriptorCommand1.php create mode 100644 vendor/symfony/console/Tests/Fixtures/DescriptorCommand2.php create mode 100644 vendor/symfony/console/Tests/Fixtures/DescriptorCommand3.php create mode 100644 vendor/symfony/console/Tests/Fixtures/DescriptorCommand4.php create mode 100644 vendor/symfony/console/Tests/Fixtures/DescriptorCommandMbString.php create mode 100644 vendor/symfony/console/Tests/Fixtures/DummyOutput.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Foo1Command.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Foo2Command.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Foo3Command.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Foo4Command.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Foo5Command.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Foo6Command.php create mode 100644 vendor/symfony/console/Tests/Fixtures/FooCommand.php create mode 100644 vendor/symfony/console/Tests/Fixtures/FooLock2Command.php create mode 100644 vendor/symfony/console/Tests/Fixtures/FooLockCommand.php create mode 100644 vendor/symfony/console/Tests/Fixtures/FooOptCommand.php create mode 100644 vendor/symfony/console/Tests/Fixtures/FooSameCaseLowercaseCommand.php create mode 100644 vendor/symfony/console/Tests/Fixtures/FooSameCaseUppercaseCommand.php create mode 100644 vendor/symfony/console/Tests/Fixtures/FooSubnamespaced1Command.php create mode 100644 vendor/symfony/console/Tests/Fixtures/FooSubnamespaced2Command.php create mode 100644 vendor/symfony/console/Tests/Fixtures/FoobarCommand.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_0.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_1.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_10.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_11.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_12.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_13.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_14.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_15.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_16.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_17.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_2.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_3.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_4.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_5.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_6.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_7.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_8.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_9.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/interactive_command_1.php create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/interactive_output_1.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_0.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_1.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_10.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_11.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_12.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_13.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_14.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_15.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_16.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_17.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_2.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_3.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_4.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_5.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_6.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_7.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_8.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_9.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/TestCommand.php create mode 100644 vendor/symfony/console/Tests/Fixtures/TestTiti.php create mode 100644 vendor/symfony/console/Tests/Fixtures/TestToto.php create mode 100644 vendor/symfony/console/Tests/Fixtures/application_1.json create mode 100644 vendor/symfony/console/Tests/Fixtures/application_1.md create mode 100644 vendor/symfony/console/Tests/Fixtures/application_1.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_1.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/application_2.json create mode 100644 vendor/symfony/console/Tests/Fixtures/application_2.md create mode 100644 vendor/symfony/console/Tests/Fixtures/application_2.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_2.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/application_filtered_namespace.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_gethelp.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_mbstring.md create mode 100644 vendor/symfony/console/Tests/Fixtures/application_mbstring.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_renderexception1.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_renderexception2.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_renderexception3.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_renderexception3decorated.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_renderexception4.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth1.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth1decorated.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth2.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_renderexception_escapeslines.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_renderexception_linebreaks.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_run1.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_run2.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_run3.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/application_run4.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/command_1.json create mode 100644 vendor/symfony/console/Tests/Fixtures/command_1.md create mode 100644 vendor/symfony/console/Tests/Fixtures/command_1.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/command_1.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/command_2.json create mode 100644 vendor/symfony/console/Tests/Fixtures/command_2.md create mode 100644 vendor/symfony/console/Tests/Fixtures/command_2.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/command_2.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/command_mbstring.md create mode 100644 vendor/symfony/console/Tests/Fixtures/command_mbstring.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_1.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_1.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_1.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_1.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_2.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_2.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_2.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_2.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_3.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_3.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_3.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_3.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_4.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_4.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_4.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_4.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_with_style.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_with_style.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_with_style.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_argument_with_style.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_definition_1.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_definition_1.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_definition_1.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_definition_1.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_definition_2.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_definition_2.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_definition_2.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_definition_2.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_definition_3.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_definition_3.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_definition_3.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_definition_3.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_definition_4.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_definition_4.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_definition_4.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_definition_4.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_1.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_1.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_1.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_1.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_2.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_2.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_2.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_2.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_3.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_3.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_3.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_3.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_4.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_4.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_4.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_4.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_5.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_5.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_5.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_5.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_6.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_6.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_6.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_6.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_with_style.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_with_style.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_with_style.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_with_style.xml create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.json create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.md create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.txt create mode 100644 vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.xml create mode 100644 vendor/symfony/console/Tests/Formatter/OutputFormatterStyleStackTest.php create mode 100644 vendor/symfony/console/Tests/Formatter/OutputFormatterStyleTest.php create mode 100644 vendor/symfony/console/Tests/Formatter/OutputFormatterTest.php create mode 100644 vendor/symfony/console/Tests/Helper/AbstractQuestionHelperTest.php create mode 100644 vendor/symfony/console/Tests/Helper/FormatterHelperTest.php create mode 100644 vendor/symfony/console/Tests/Helper/HelperSetTest.php create mode 100644 vendor/symfony/console/Tests/Helper/HelperTest.php create mode 100644 vendor/symfony/console/Tests/Helper/ProcessHelperTest.php create mode 100644 vendor/symfony/console/Tests/Helper/ProgressBarTest.php create mode 100644 vendor/symfony/console/Tests/Helper/ProgressIndicatorTest.php create mode 100644 vendor/symfony/console/Tests/Helper/QuestionHelperTest.php create mode 100644 vendor/symfony/console/Tests/Helper/SymfonyQuestionHelperTest.php create mode 100644 vendor/symfony/console/Tests/Helper/TableStyleTest.php create mode 100644 vendor/symfony/console/Tests/Helper/TableTest.php create mode 100644 vendor/symfony/console/Tests/Input/ArgvInputTest.php create mode 100644 vendor/symfony/console/Tests/Input/ArrayInputTest.php create mode 100644 vendor/symfony/console/Tests/Input/InputArgumentTest.php create mode 100644 vendor/symfony/console/Tests/Input/InputDefinitionTest.php create mode 100644 vendor/symfony/console/Tests/Input/InputOptionTest.php create mode 100644 vendor/symfony/console/Tests/Input/InputTest.php create mode 100644 vendor/symfony/console/Tests/Input/StringInputTest.php create mode 100644 vendor/symfony/console/Tests/Logger/ConsoleLoggerTest.php create mode 100644 vendor/symfony/console/Tests/Output/ConsoleOutputTest.php create mode 100644 vendor/symfony/console/Tests/Output/NullOutputTest.php create mode 100644 vendor/symfony/console/Tests/Output/OutputTest.php create mode 100644 vendor/symfony/console/Tests/Output/StreamOutputTest.php create mode 100644 vendor/symfony/console/Tests/Style/SymfonyStyleTest.php create mode 100644 vendor/symfony/console/Tests/TerminalTest.php create mode 100644 vendor/symfony/console/Tests/Tester/ApplicationTesterTest.php create mode 100644 vendor/symfony/console/Tests/Tester/CommandTesterTest.php create mode 100644 vendor/symfony/console/composer.json create mode 100644 vendor/symfony/console/phpunit.xml.dist create mode 100644 vendor/symfony/css-selector/.gitignore create mode 100644 vendor/symfony/css-selector/CHANGELOG.md create mode 100644 vendor/symfony/css-selector/CssSelectorConverter.php create mode 100644 vendor/symfony/css-selector/Exception/ExceptionInterface.php create mode 100644 vendor/symfony/css-selector/Exception/ExpressionErrorException.php create mode 100644 vendor/symfony/css-selector/Exception/InternalErrorException.php create mode 100644 vendor/symfony/css-selector/Exception/ParseException.php create mode 100644 vendor/symfony/css-selector/Exception/SyntaxErrorException.php create mode 100644 vendor/symfony/css-selector/LICENSE create mode 100644 vendor/symfony/css-selector/Node/AbstractNode.php create mode 100644 vendor/symfony/css-selector/Node/AttributeNode.php create mode 100644 vendor/symfony/css-selector/Node/ClassNode.php create mode 100644 vendor/symfony/css-selector/Node/CombinedSelectorNode.php create mode 100644 vendor/symfony/css-selector/Node/ElementNode.php create mode 100644 vendor/symfony/css-selector/Node/FunctionNode.php create mode 100644 vendor/symfony/css-selector/Node/HashNode.php create mode 100644 vendor/symfony/css-selector/Node/NegationNode.php create mode 100644 vendor/symfony/css-selector/Node/NodeInterface.php create mode 100644 vendor/symfony/css-selector/Node/PseudoNode.php create mode 100644 vendor/symfony/css-selector/Node/SelectorNode.php create mode 100644 vendor/symfony/css-selector/Node/Specificity.php create mode 100644 vendor/symfony/css-selector/Parser/Handler/CommentHandler.php create mode 100644 vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php create mode 100644 vendor/symfony/css-selector/Parser/Handler/HashHandler.php create mode 100644 vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php create mode 100644 vendor/symfony/css-selector/Parser/Handler/NumberHandler.php create mode 100644 vendor/symfony/css-selector/Parser/Handler/StringHandler.php create mode 100644 vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php create mode 100644 vendor/symfony/css-selector/Parser/Parser.php create mode 100644 vendor/symfony/css-selector/Parser/ParserInterface.php create mode 100644 vendor/symfony/css-selector/Parser/Reader.php create mode 100644 vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php create mode 100644 vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php create mode 100644 vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php create mode 100644 vendor/symfony/css-selector/Parser/Shortcut/HashParser.php create mode 100644 vendor/symfony/css-selector/Parser/Token.php create mode 100644 vendor/symfony/css-selector/Parser/TokenStream.php create mode 100644 vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php create mode 100644 vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php create mode 100644 vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php create mode 100644 vendor/symfony/css-selector/README.md create mode 100644 vendor/symfony/css-selector/Tests/CssSelectorConverterTest.php create mode 100644 vendor/symfony/css-selector/Tests/Node/AbstractNodeTest.php create mode 100644 vendor/symfony/css-selector/Tests/Node/AttributeNodeTest.php create mode 100644 vendor/symfony/css-selector/Tests/Node/ClassNodeTest.php create mode 100644 vendor/symfony/css-selector/Tests/Node/CombinedSelectorNodeTest.php create mode 100644 vendor/symfony/css-selector/Tests/Node/ElementNodeTest.php create mode 100644 vendor/symfony/css-selector/Tests/Node/FunctionNodeTest.php create mode 100644 vendor/symfony/css-selector/Tests/Node/HashNodeTest.php create mode 100644 vendor/symfony/css-selector/Tests/Node/NegationNodeTest.php create mode 100644 vendor/symfony/css-selector/Tests/Node/PseudoNodeTest.php create mode 100644 vendor/symfony/css-selector/Tests/Node/SelectorNodeTest.php create mode 100644 vendor/symfony/css-selector/Tests/Node/SpecificityTest.php create mode 100644 vendor/symfony/css-selector/Tests/Parser/Handler/AbstractHandlerTest.php create mode 100644 vendor/symfony/css-selector/Tests/Parser/Handler/CommentHandlerTest.php create mode 100644 vendor/symfony/css-selector/Tests/Parser/Handler/HashHandlerTest.php create mode 100644 vendor/symfony/css-selector/Tests/Parser/Handler/IdentifierHandlerTest.php create mode 100644 vendor/symfony/css-selector/Tests/Parser/Handler/NumberHandlerTest.php create mode 100644 vendor/symfony/css-selector/Tests/Parser/Handler/StringHandlerTest.php create mode 100644 vendor/symfony/css-selector/Tests/Parser/Handler/WhitespaceHandlerTest.php create mode 100644 vendor/symfony/css-selector/Tests/Parser/ParserTest.php create mode 100644 vendor/symfony/css-selector/Tests/Parser/ReaderTest.php create mode 100644 vendor/symfony/css-selector/Tests/Parser/Shortcut/ClassParserTest.php create mode 100644 vendor/symfony/css-selector/Tests/Parser/Shortcut/ElementParserTest.php create mode 100644 vendor/symfony/css-selector/Tests/Parser/Shortcut/EmptyStringParserTest.php create mode 100644 vendor/symfony/css-selector/Tests/Parser/Shortcut/HashParserTest.php create mode 100644 vendor/symfony/css-selector/Tests/Parser/TokenStreamTest.php create mode 100644 vendor/symfony/css-selector/Tests/XPath/Fixtures/ids.html create mode 100644 vendor/symfony/css-selector/Tests/XPath/Fixtures/lang.xml create mode 100644 vendor/symfony/css-selector/Tests/XPath/Fixtures/shakespear.html create mode 100644 vendor/symfony/css-selector/Tests/XPath/TranslatorTest.php create mode 100644 vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php create mode 100644 vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php create mode 100644 vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php create mode 100644 vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php create mode 100644 vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php create mode 100644 vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php create mode 100644 vendor/symfony/css-selector/XPath/Extension/NodeExtension.php create mode 100644 vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php create mode 100644 vendor/symfony/css-selector/XPath/Translator.php create mode 100644 vendor/symfony/css-selector/XPath/TranslatorInterface.php create mode 100644 vendor/symfony/css-selector/XPath/XPathExpr.php create mode 100644 vendor/symfony/css-selector/composer.json create mode 100644 vendor/symfony/css-selector/phpunit.xml.dist create mode 100644 vendor/symfony/dom-crawler/.gitignore create mode 100644 vendor/symfony/dom-crawler/AbstractUriElement.php create mode 100644 vendor/symfony/dom-crawler/CHANGELOG.md create mode 100644 vendor/symfony/dom-crawler/Crawler.php create mode 100644 vendor/symfony/dom-crawler/Field/ChoiceFormField.php create mode 100644 vendor/symfony/dom-crawler/Field/FileFormField.php create mode 100644 vendor/symfony/dom-crawler/Field/FormField.php create mode 100644 vendor/symfony/dom-crawler/Field/InputFormField.php create mode 100644 vendor/symfony/dom-crawler/Field/TextareaFormField.php create mode 100644 vendor/symfony/dom-crawler/Form.php create mode 100644 vendor/symfony/dom-crawler/FormFieldRegistry.php create mode 100644 vendor/symfony/dom-crawler/Image.php create mode 100644 vendor/symfony/dom-crawler/LICENSE create mode 100644 vendor/symfony/dom-crawler/Link.php create mode 100644 vendor/symfony/dom-crawler/README.md create mode 100644 vendor/symfony/dom-crawler/Tests/CrawlerTest.php create mode 100644 vendor/symfony/dom-crawler/Tests/Field/ChoiceFormFieldTest.php create mode 100644 vendor/symfony/dom-crawler/Tests/Field/FileFormFieldTest.php create mode 100644 vendor/symfony/dom-crawler/Tests/Field/FormFieldTest.php create mode 100644 vendor/symfony/dom-crawler/Tests/Field/FormFieldTestCase.php create mode 100644 vendor/symfony/dom-crawler/Tests/Field/InputFormFieldTest.php create mode 100644 vendor/symfony/dom-crawler/Tests/Field/TextareaFormFieldTest.php create mode 100644 vendor/symfony/dom-crawler/Tests/Fixtures/no-extension create mode 100644 vendor/symfony/dom-crawler/Tests/Fixtures/windows-1250.html create mode 100644 vendor/symfony/dom-crawler/Tests/FormTest.php create mode 100644 vendor/symfony/dom-crawler/Tests/ImageTest.php create mode 100644 vendor/symfony/dom-crawler/Tests/LinkTest.php create mode 100644 vendor/symfony/dom-crawler/composer.json create mode 100644 vendor/symfony/dom-crawler/phpunit.xml.dist create mode 100644 vendor/symfony/event-dispatcher/.gitignore create mode 100644 vendor/symfony/event-dispatcher/CHANGELOG.md create mode 100644 vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php create mode 100644 vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php create mode 100644 vendor/symfony/event-dispatcher/Debug/WrappedListener.php create mode 100644 vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php create mode 100644 vendor/symfony/event-dispatcher/Event.php create mode 100644 vendor/symfony/event-dispatcher/EventDispatcher.php create mode 100644 vendor/symfony/event-dispatcher/EventDispatcherInterface.php create mode 100644 vendor/symfony/event-dispatcher/EventSubscriberInterface.php create mode 100644 vendor/symfony/event-dispatcher/GenericEvent.php create mode 100644 vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php create mode 100644 vendor/symfony/event-dispatcher/LICENSE create mode 100644 vendor/symfony/event-dispatcher/README.md create mode 100644 vendor/symfony/event-dispatcher/Tests/AbstractEventDispatcherTest.php create mode 100644 vendor/symfony/event-dispatcher/Tests/Debug/TraceableEventDispatcherTest.php create mode 100644 vendor/symfony/event-dispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php create mode 100644 vendor/symfony/event-dispatcher/Tests/EventDispatcherTest.php create mode 100644 vendor/symfony/event-dispatcher/Tests/EventTest.php create mode 100644 vendor/symfony/event-dispatcher/Tests/GenericEventTest.php create mode 100644 vendor/symfony/event-dispatcher/Tests/ImmutableEventDispatcherTest.php create mode 100644 vendor/symfony/event-dispatcher/composer.json create mode 100644 vendor/symfony/event-dispatcher/phpunit.xml.dist create mode 100644 vendor/symfony/finder/.gitignore create mode 100644 vendor/symfony/finder/CHANGELOG.md create mode 100644 vendor/symfony/finder/Comparator/Comparator.php create mode 100644 vendor/symfony/finder/Comparator/DateComparator.php create mode 100644 vendor/symfony/finder/Comparator/NumberComparator.php create mode 100644 vendor/symfony/finder/Exception/AccessDeniedException.php create mode 100644 vendor/symfony/finder/Finder.php create mode 100644 vendor/symfony/finder/Glob.php create mode 100644 vendor/symfony/finder/Iterator/CustomFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/DateRangeFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/FileTypeFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/FilecontentFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/FilenameFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/PathFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php create mode 100644 vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/SortableIterator.php create mode 100644 vendor/symfony/finder/LICENSE create mode 100644 vendor/symfony/finder/README.md create mode 100644 vendor/symfony/finder/SplFileInfo.php create mode 100644 vendor/symfony/finder/Tests/Comparator/ComparatorTest.php create mode 100644 vendor/symfony/finder/Tests/Comparator/DateComparatorTest.php create mode 100644 vendor/symfony/finder/Tests/Comparator/NumberComparatorTest.php create mode 100644 vendor/symfony/finder/Tests/FinderTest.php create mode 100644 vendor/symfony/finder/Tests/Fixtures/.dot/a create mode 100644 vendor/symfony/finder/Tests/Fixtures/.dot/b/c.neon create mode 100644 vendor/symfony/finder/Tests/Fixtures/.dot/b/d.neon create mode 100644 vendor/symfony/finder/Tests/Fixtures/A/B/C/abc.dat create mode 100644 vendor/symfony/finder/Tests/Fixtures/A/B/ab.dat create mode 100644 vendor/symfony/finder/Tests/Fixtures/A/a.dat create mode 100644 vendor/symfony/finder/Tests/Fixtures/copy/A/B/C/abc.dat.copy create mode 100644 vendor/symfony/finder/Tests/Fixtures/copy/A/B/ab.dat.copy create mode 100644 vendor/symfony/finder/Tests/Fixtures/copy/A/a.dat.copy create mode 100644 vendor/symfony/finder/Tests/Fixtures/dolor.txt create mode 100644 vendor/symfony/finder/Tests/Fixtures/ipsum.txt create mode 100644 vendor/symfony/finder/Tests/Fixtures/lorem.txt create mode 100644 vendor/symfony/finder/Tests/Fixtures/one/.dot create mode 100644 vendor/symfony/finder/Tests/Fixtures/one/a create mode 100644 vendor/symfony/finder/Tests/Fixtures/one/b/c.neon create mode 100644 vendor/symfony/finder/Tests/Fixtures/one/b/d.neon create mode 100644 vendor/symfony/finder/Tests/Fixtures/r+e.gex[c]a(r)s/dir/bar.dat create mode 100644 vendor/symfony/finder/Tests/Fixtures/with space/foo.txt create mode 100644 vendor/symfony/finder/Tests/GlobTest.php create mode 100644 vendor/symfony/finder/Tests/Iterator/CustomFilterIteratorTest.php create mode 100644 vendor/symfony/finder/Tests/Iterator/DateRangeFilterIteratorTest.php create mode 100644 vendor/symfony/finder/Tests/Iterator/DepthRangeFilterIteratorTest.php create mode 100644 vendor/symfony/finder/Tests/Iterator/ExcludeDirectoryFilterIteratorTest.php create mode 100644 vendor/symfony/finder/Tests/Iterator/FileTypeFilterIteratorTest.php create mode 100644 vendor/symfony/finder/Tests/Iterator/FilecontentFilterIteratorTest.php create mode 100644 vendor/symfony/finder/Tests/Iterator/FilenameFilterIteratorTest.php create mode 100644 vendor/symfony/finder/Tests/Iterator/Iterator.php create mode 100644 vendor/symfony/finder/Tests/Iterator/IteratorTestCase.php create mode 100644 vendor/symfony/finder/Tests/Iterator/MockFileListIterator.php create mode 100644 vendor/symfony/finder/Tests/Iterator/MockSplFileInfo.php create mode 100644 vendor/symfony/finder/Tests/Iterator/MultiplePcreFilterIteratorTest.php create mode 100644 vendor/symfony/finder/Tests/Iterator/PathFilterIteratorTest.php create mode 100644 vendor/symfony/finder/Tests/Iterator/RealIteratorTestCase.php create mode 100644 vendor/symfony/finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php create mode 100644 vendor/symfony/finder/Tests/Iterator/SizeRangeFilterIteratorTest.php create mode 100644 vendor/symfony/finder/Tests/Iterator/SortableIteratorTest.php create mode 100644 vendor/symfony/finder/composer.json create mode 100644 vendor/symfony/finder/phpunit.xml.dist create mode 100644 vendor/symfony/polyfill-mbstring/LICENSE create mode 100644 vendor/symfony/polyfill-mbstring/Mbstring.php create mode 100644 vendor/symfony/polyfill-mbstring/README.md create mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php create mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php create mode 100644 vendor/symfony/polyfill-mbstring/bootstrap.php create mode 100644 vendor/symfony/polyfill-mbstring/composer.json create mode 100644 vendor/symfony/process/.gitignore create mode 100644 vendor/symfony/process/CHANGELOG.md create mode 100644 vendor/symfony/process/Exception/ExceptionInterface.php create mode 100644 vendor/symfony/process/Exception/InvalidArgumentException.php create mode 100644 vendor/symfony/process/Exception/LogicException.php create mode 100644 vendor/symfony/process/Exception/ProcessFailedException.php create mode 100644 vendor/symfony/process/Exception/ProcessTimedOutException.php create mode 100644 vendor/symfony/process/Exception/RuntimeException.php create mode 100644 vendor/symfony/process/ExecutableFinder.php create mode 100644 vendor/symfony/process/InputStream.php create mode 100644 vendor/symfony/process/LICENSE create mode 100644 vendor/symfony/process/PhpExecutableFinder.php create mode 100644 vendor/symfony/process/PhpProcess.php create mode 100644 vendor/symfony/process/Pipes/AbstractPipes.php create mode 100644 vendor/symfony/process/Pipes/PipesInterface.php create mode 100644 vendor/symfony/process/Pipes/UnixPipes.php create mode 100644 vendor/symfony/process/Pipes/WindowsPipes.php create mode 100644 vendor/symfony/process/Process.php create mode 100644 vendor/symfony/process/ProcessUtils.php create mode 100644 vendor/symfony/process/README.md create mode 100644 vendor/symfony/process/Tests/ExecutableFinderTest.php create mode 100644 vendor/symfony/process/Tests/NonStopableProcess.php create mode 100644 vendor/symfony/process/Tests/PhpExecutableFinderTest.php create mode 100644 vendor/symfony/process/Tests/PhpProcessTest.php create mode 100644 vendor/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php create mode 100644 vendor/symfony/process/Tests/ProcessFailedExceptionTest.php create mode 100644 vendor/symfony/process/Tests/ProcessTest.php create mode 100644 vendor/symfony/process/Tests/SignalListener.php create mode 100644 vendor/symfony/process/composer.json create mode 100644 vendor/symfony/process/phpunit.xml.dist create mode 100644 vendor/symfony/yaml/.gitignore create mode 100644 vendor/symfony/yaml/CHANGELOG.md create mode 100644 vendor/symfony/yaml/Command/LintCommand.php create mode 100644 vendor/symfony/yaml/Dumper.php create mode 100644 vendor/symfony/yaml/Escaper.php create mode 100644 vendor/symfony/yaml/Exception/DumpException.php create mode 100644 vendor/symfony/yaml/Exception/ExceptionInterface.php create mode 100644 vendor/symfony/yaml/Exception/ParseException.php create mode 100644 vendor/symfony/yaml/Exception/RuntimeException.php create mode 100644 vendor/symfony/yaml/Inline.php create mode 100644 vendor/symfony/yaml/LICENSE create mode 100644 vendor/symfony/yaml/Parser.php create mode 100644 vendor/symfony/yaml/README.md create mode 100644 vendor/symfony/yaml/Tag/TaggedValue.php create mode 100644 vendor/symfony/yaml/Tests/Command/LintCommandTest.php create mode 100644 vendor/symfony/yaml/Tests/DumperTest.php create mode 100644 vendor/symfony/yaml/Tests/Fixtures/YtsAnchorAlias.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/YtsBasicTests.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/YtsBlockMapping.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/YtsDocumentSeparator.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/YtsErrorTests.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/YtsFlowCollections.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/YtsFoldedScalars.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/YtsNullsAndEmpties.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/YtsSpecificationExamples.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/YtsTypeTransfers.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/arrow.gif create mode 100644 vendor/symfony/yaml/Tests/Fixtures/booleanMappingKeys.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/embededPhp.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/escapedCharacters.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/index.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/multiple_lines_as_literal_block.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/nonStringKeys.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/not_readable.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/nullMappingKey.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/numericMappingKeys.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/sfComments.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/sfCompact.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/sfMergeKey.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/sfObjects.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/sfQuotes.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/sfTests.yml create mode 100644 vendor/symfony/yaml/Tests/Fixtures/unindentedCollections.yml create mode 100644 vendor/symfony/yaml/Tests/InlineTest.php create mode 100644 vendor/symfony/yaml/Tests/ParseExceptionTest.php create mode 100644 vendor/symfony/yaml/Tests/ParserTest.php create mode 100644 vendor/symfony/yaml/Tests/YamlTest.php create mode 100644 vendor/symfony/yaml/Unescaper.php create mode 100644 vendor/symfony/yaml/Yaml.php create mode 100644 vendor/symfony/yaml/composer.json create mode 100644 vendor/symfony/yaml/phpunit.xml.dist create mode 100644 vendor/theseer/tokenizer/.gitignore create mode 100644 vendor/theseer/tokenizer/.php_cs create mode 100644 vendor/theseer/tokenizer/.travis.yml create mode 100644 vendor/theseer/tokenizer/LICENSE create mode 100644 vendor/theseer/tokenizer/README.md create mode 100644 vendor/theseer/tokenizer/build.xml create mode 100644 vendor/theseer/tokenizer/composer.json create mode 100644 vendor/theseer/tokenizer/phive.xml create mode 100644 vendor/theseer/tokenizer/phpunit.xml create mode 100644 vendor/theseer/tokenizer/src/Exception.php create mode 100644 vendor/theseer/tokenizer/src/NamespaceUri.php create mode 100644 vendor/theseer/tokenizer/src/NamespaceUriException.php create mode 100644 vendor/theseer/tokenizer/src/Token.php create mode 100644 vendor/theseer/tokenizer/src/TokenCollection.php create mode 100644 vendor/theseer/tokenizer/src/TokenCollectionException.php create mode 100644 vendor/theseer/tokenizer/src/Tokenizer.php create mode 100644 vendor/theseer/tokenizer/src/XMLSerializer.php create mode 100644 vendor/theseer/tokenizer/tests/NamespaceUriTest.php create mode 100644 vendor/theseer/tokenizer/tests/TokenCollectionTest.php create mode 100644 vendor/theseer/tokenizer/tests/TokenTest.php create mode 100644 vendor/theseer/tokenizer/tests/TokenizerTest.php create mode 100644 vendor/theseer/tokenizer/tests/XMLSerializerTest.php create mode 100644 vendor/theseer/tokenizer/tests/_files/customns.xml create mode 100644 vendor/theseer/tokenizer/tests/_files/test.php create mode 100644 vendor/theseer/tokenizer/tests/_files/test.php.tokens create mode 100644 vendor/theseer/tokenizer/tests/_files/test.php.xml create mode 100644 vendor/webmozart/assert/.composer-auth.json create mode 100644 vendor/webmozart/assert/.styleci.yml create mode 100644 vendor/webmozart/assert/CHANGELOG.md create mode 100644 vendor/webmozart/assert/LICENSE create mode 100644 vendor/webmozart/assert/README.md create mode 100644 vendor/webmozart/assert/composer.json create mode 100644 vendor/webmozart/assert/src/Assert.php diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..fc8427d5a --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "e107"] + path = e107 + url = git@github.com:e107inc/e107.git diff --git a/composer.json b/composer.json new file mode 100644 index 000000000..ca3956d13 --- /dev/null +++ b/composer.json @@ -0,0 +1,5 @@ +{ + "require-dev": { + "codeception/codeception": "^2.3" + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 000000000..b0efa1cdf --- /dev/null +++ b/composer.lock @@ -0,0 +1,2459 @@ +{ + "_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#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "d7f6d3ee397cfa99747ed52cf3079412", + "packages": [], + "packages-dev": [ + { + "name": "behat/gherkin", + "version": "v4.4.5", + "source": { + "type": "git", + "url": "https://github.com/Behat/Gherkin.git", + "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/5c14cff4f955b17d20d088dec1bde61c0539ec74", + "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74", + "shasum": "" + }, + "require": { + "php": ">=5.3.1" + }, + "require-dev": { + "phpunit/phpunit": "~4.5|~5", + "symfony/phpunit-bridge": "~2.7|~3", + "symfony/yaml": "~2.3|~3" + }, + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Gherkin": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Gherkin DSL parser for PHP 5.3", + "homepage": "http://behat.org/", + "keywords": [ + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" + ], + "time": "2016-10-30T11:50:56+00:00" + }, + { + "name": "codeception/codeception", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Codeception.git", + "reference": "43eade17a8cd68e9cde401e8585b09d11d41b12d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/43eade17a8cd68e9cde401e8585b09d11d41b12d", + "reference": "43eade17a8cd68e9cde401e8585b09d11d41b12d", + "shasum": "" + }, + "require": { + "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.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", + "symfony/dom-crawler": ">=2.7 <5.0", + "symfony/event-dispatcher": ">=2.7 <5.0", + "symfony/finder": ">=2.7 <5.0", + "symfony/yaml": ">=2.7 <5.0" + }, + "require-dev": { + "codeception/specify": "~0.3", + "facebook/graph-sdk": "~5.3", + "flow/jsonpath": "~0.2", + "monolog/monolog": "~1.8", + "pda/pheanstalk": "~3.0", + "php-amqplib/php-amqplib": "~2.4", + "predis/predis": "^1.0", + "squizlabs/php_codesniffer": "~2.0", + "symfony/process": ">=2.7 <5.0", + "vlucas/phpdotenv": "^2.4.0" + }, + "suggest": { + "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", + "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests", + "codeception/specify": "BDD-style code blocks", + "codeception/verify": "BDD-style assertions", + "flow/jsonpath": "For using JSONPath in REST module", + "league/factory-muffin": "For DataFactory module", + "league/factory-muffin-faker": "For Faker support in DataFactory module", + "phpseclib/phpseclib": "for SFTP option in FTP Module", + "stecman/symfony-console-completion": "For BASH autocompletion", + "symfony/phpunit-bridge": "For phpunit-bridge support" + }, + "bin": [ + "codecept" + ], + "type": "library", + "extra": { + "branch-alias": [] + }, + "autoload": { + "psr-4": { + "Codeception\\": "src\\Codeception", + "Codeception\\Extension\\": "ext" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "http://codegyre.com" + } + ], + "description": "BDD-style testing framework", + "homepage": "http://codeception.com/", + "keywords": [ + "BDD", + "TDD", + "acceptance testing", + "functional testing", + "unit testing" + ], + "time": "2018-01-27T22:47:33+00:00" + }, + { + "name": "codeception/stub", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Stub.git", + "reference": "673ea54cdd7141e0a5138ad78aaa60751912f573" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/673ea54cdd7141e0a5138ad78aaa60751912f573", + "reference": "673ea54cdd7141e0a5138ad78aaa60751912f573", + "shasum": "" + }, + "require": { + "phpunit/phpunit-mock-objects": "^2.3|^3.0|^4.0|^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8|^5.0|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", + "time": "2018-01-27T00:37:17+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2017-07-22T11:58:36+00:00" + }, + { + "name": "facebook/webdriver", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/facebook/php-webdriver.git", + "reference": "86b5ca2f67173c9d34340845dd690149c886a605" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/86b5ca2f67173c9d34340845dd690149c886a605", + "reference": "86b5ca2f67173c9d34340845dd690149c886a605", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-zip": "*", + "php": "^5.6 || ~7.0", + "symfony/process": "^2.8 || ^3.1 || ^4.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "guzzle/guzzle": "^3.4.1", + "php-coveralls/php-coveralls": "^1.0.2", + "php-mock/php-mock-phpunit": "^1.1", + "phpunit/phpunit": "^5.7", + "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", + "squizlabs/php_codesniffer": "^2.6", + "symfony/var-dumper": "^3.3 || ^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-community": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "Facebook\\WebDriver\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "A PHP client for Selenium WebDriver", + "homepage": "https://github.com/facebook/php-webdriver", + "keywords": [ + "facebook", + "php", + "selenium", + "webdriver" + ], + "time": "2017-11-15T11:08:09+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2017-06-22T18:50:49+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2017-10-19T19:58:43+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^1.0.1", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2017-03-05T18:14:27+00:00" + }, + { + "name": "phar-io/version", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "time": "2017-03-05T17:38:23+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "4.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", + "shasum": "" + }, + "require": { + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "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" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-07-14T14:27:02+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2017-11-24T13:59:53+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "5.3.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/661f34d0bd3f1a7225ef491a70a020ad23a057a1", + "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.0", + "phpunit/php-file-iterator": "^1.4.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^2.0.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-xdebug": "^2.5.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2017-12-06T09:29:45+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2017-11-27T13:52:08+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "791198a2c6254db10131eecfe8c06670700904db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-11-27T05:48:46+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "6.5.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "3330ef26ade05359d006041316ed0fa9e8e3cefe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3330ef26ade05359d006041316ed0fa9e8e3cefe", + "reference": "3330ef26ade05359d006041316ed0fa9e8e3cefe", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "^1.6.1", + "phar-io/manifest": "^1.0.1", + "phar-io/version": "^1.0", + "php": "^7.0", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^5.3", + "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.5", + "sebastian/comparator": "^2.1", + "sebastian/diff": "^2.0", + "sebastian/environment": "^3.1", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "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" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2018-02-01T05:57:37+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "5.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/33fd41a76e746b8fa96d00b49a23dadfa8334cdf", + "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.5", + "php": "^7.0", + "phpunit/php-text-template": "^1.2.1", + "sebastian/exporter": "^3.1" + }, + "conflict": { + "phpunit/phpunit": "<6.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.5" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2018-01-06T05:45:45+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" + }, + { + "name": "sebastian/comparator", + "version": "2.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/diff": "^2.0 || ^3.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-02-01T13:46:46+00:00" + }, + { + "name": "sebastian/diff", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-08-03T08:09:46+00:00" + }, + { + "name": "sebastian/environment", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2017-07-01T08:51:00+00:00" + }, + { + "name": "sebastian/exporter", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "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" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2017-04-03T13:19:02+00:00" + }, + { + "name": "sebastian/global-state", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2017-04-27T15:39:26+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-08-03T12:35:26+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29T09:07:27+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2015-07-28T20:34:47+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "symfony/browser-kit", + "version": "v4.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/browser-kit.git", + "reference": "fee0fcd501304b1c3190f6293f650cceb738a353" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/fee0fcd501304b1c3190f6293f650cceb738a353", + "reference": "fee0fcd501304b1c3190f6293f650cceb738a353", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/dom-crawler": "~3.4|~4.0" + }, + "require-dev": { + "symfony/css-selector": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\BrowserKit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony BrowserKit Component", + "homepage": "https://symfony.com", + "time": "2018-01-03T07:38:00+00:00" + }, + { + "name": "symfony/console", + "version": "v4.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "36d5b41e7d4e1ccf0370f6babe966c08ef0a1488" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/36d5b41e7d4e1ccf0370f6babe966c08ef0a1488", + "reference": "36d5b41e7d4e1ccf0370f6babe966c08ef0a1488", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2018-01-29T09:06:29+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v4.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "f97600434e3141ef3cbb9ea42cf500fba88022b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/f97600434e3141ef3cbb9ea42cf500fba88022b7", + "reference": "f97600434e3141ef3cbb9ea42cf500fba88022b7", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "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" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "time": "2018-01-03T07:38:00+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v4.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "39b785e1cf28e9f21bb601a5d62c4992a8e8a290" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/39b785e1cf28e9f21bb601a5d62c4992a8e8a290", + "reference": "39b785e1cf28e9f21bb601a5d62c4992a8e8a290", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "symfony/css-selector": "~3.4|~4.0" + }, + "suggest": { + "symfony/css-selector": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DomCrawler Component", + "homepage": "https://symfony.com", + "time": "2018-01-03T07:38:00+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v4.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "74d33aac36208c4d6757807d9f598f0133a3a4eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/74d33aac36208c4d6757807d9f598f0133a3a4eb", + "reference": "74d33aac36208c4d6757807d9f598f0133a3a4eb", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "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/stopwatch": "~3.4|~4.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2018-01-03T07:38:00+00:00" + }, + { + "name": "symfony/finder", + "version": "v4.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "8b08180f2b7ccb41062366b9ad91fbc4f1af8601" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/8b08180f2b7ccb41062366b9ad91fbc4f1af8601", + "reference": "8b08180f2b7ccb41062366b9ad91fbc4f1af8601", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2018-01-03T07:38:00+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "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 for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2018-01-30T19:27:44+00:00" + }, + { + "name": "symfony/process", + "version": "v4.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "e1712002d81de6f39f854bc5bbd9e9f4bb6345b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/e1712002d81de6f39f854bc5bbd9e9f4bb6345b4", + "reference": "e1712002d81de6f39f854bc5bbd9e9f4bb6345b4", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2018-01-29T09:06:29+00:00" + }, + { + "name": "symfony/yaml", + "version": "v4.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "ffc60bda1d4a00ec0b32eeabf39dc017bf480028" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ffc60bda1d4a00ec0b32eeabf39dc017bf480028", + "reference": "ffc60bda1d4a00ec0b32eeabf39dc017bf480028", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2018-01-21T19:06:11+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2017-04-07T12:08:54+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2018-01-29T19:49:41+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/e107 b/e107 new file mode 160000 index 000000000..21215da3b --- /dev/null +++ b/e107 @@ -0,0 +1 @@ +Subproject commit 21215da3b8fbf85d1953795205a7a235559d7bd8 diff --git a/vendor/autoload.php b/vendor/autoload.php new file mode 100644 index 000000000..350dee9ec --- /dev/null +++ b/vendor/autoload.php @@ -0,0 +1,7 @@ + phpunit +``` + +Contributing to Gherkin Translations +------------------------------------ + +Gherkin supports →40 different languages and you could add more! You might notice +`i18n.php` file in the root of the library. This file is downloaded and **autogenerated** +from original [cucumber/gherkin translations](https://github.com/cucumber/gherkin/blob/master/lib/gherkin/i18n.json). +So, in order to fix/update/add some translation, you should send Pull Request to the +`cucumber/gherkin` repository. `Behat\Gherkin` will redownload/regenerate translations +from there before each release. + +It might sounds difficult, but this way of dictionary sharing gives you ability to +migrate your `*.feature` files from language to language and library to library without +the need to rewrite/modify them - same dictionary (Gherkin) used everywhere. diff --git a/vendor/behat/gherkin/LICENSE b/vendor/behat/gherkin/LICENSE new file mode 100644 index 000000000..14f15e8b4 --- /dev/null +++ b/vendor/behat/gherkin/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2011-2013 Konstantin Kudryashov + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/behat/gherkin/README.md b/vendor/behat/gherkin/README.md new file mode 100644 index 000000000..e7034df92 --- /dev/null +++ b/vendor/behat/gherkin/README.md @@ -0,0 +1,68 @@ +Behat Gherkin Parser +==================== + +This is the php Gherkin parser for Behat. It comes bundled with more than 40 native languages +(see `i18n.php`) support & clean architecture. + +[![Build Status](https://travis-ci.org/Behat/Gherkin.svg?branch=master)](https://travis-ci.org/Behat/Gherkin) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/Behat/Gherkin/badges/quality-score.png?s=04d9d0237c89f4c45a94ba5304234db861dfd036)](https://scrutinizer-ci.com/g/Behat/Gherkin/) +[![Code Coverage](https://scrutinizer-ci.com/g/Behat/Gherkin/badges/coverage.png?s=204ca44800469d295b73d18c91011cb9d2dc99fc)](https://scrutinizer-ci.com/g/Behat/Gherkin/) + +Useful Links +------------ + +- Official Google Group is at [http://groups.google.com/group/behat](http://groups.google.com/group/behat) +- IRC channel on [#freenode](http://freenode.net/) is `#behat` +- [Note on Patches/Pull Requests](CONTRIBUTING.md) + +Usage Example +------------- + +``` php + array( + 'feature' => 'Feature', + 'background' => 'Background', + 'scenario' => 'Scenario', + 'scenario_outline' => 'Scenario Outline|Scenario Template', + 'examples' => 'Examples|Scenarios', + 'given' => 'Given', + 'when' => 'When', + 'then' => 'Then', + 'and' => 'And', + 'but' => 'But' + ), + 'en-pirate' => array( + 'feature' => 'Ahoy matey!', + 'background' => 'Yo-ho-ho', + 'scenario' => 'Heave to', + 'scenario_outline' => 'Shiver me timbers', + 'examples' => 'Dead men tell no tales', + 'given' => 'Gangway!', + 'when' => 'Blimey!', + 'then' => 'Let go and haul', + 'and' => 'Aye', + 'but' => 'Avast!' + ) +)); +$lexer = new Behat\Gherkin\Lexer($keywords); +$parser = new Behat\Gherkin\Parser($lexer); + +$feature = $parser->parse(file_get_contents('some.feature')); +``` + +Installing Dependencies +----------------------- + +``` bash +$> curl http://getcomposer.org/installer | php +$> php composer.phar update +``` + +Contributors +------------ + +* Konstantin Kudryashov [everzet](http://github.com/everzet) [lead developer] +* Other [awesome developers](https://github.com/Behat/Gherkin/graphs/contributors) diff --git a/vendor/behat/gherkin/bin/update_i18n b/vendor/behat/gherkin/bin/update_i18n new file mode 100755 index 000000000..cef40686a --- /dev/null +++ b/vendor/behat/gherkin/bin/update_i18n @@ -0,0 +1,70 @@ +#!/usr/bin/env php + $keywords) { + $langMessages = array(); + + foreach ($keywords as $type => $words) { + if (!is_array($words)) { + $words = array($words); + } + + if ('scenarioOutline' === $type) { + $type = 'scenario_outline'; + } + + if (in_array($type, array('given', 'when', 'then', 'and', 'but'))) { + $formattedKeywords = array(); + + foreach ($words as $word) { + $formattedWord = trim($word); + + if ($formattedWord === $word) { + $formattedWord = $formattedWord.'<'; // Convert the keywords to the syntax used by Gherkin 2, which is expected by our Lexer. + } + + $formattedKeywords[] = $formattedWord; + } + + $words = $formattedKeywords; + } + + usort($words, function($type1, $type2) { + return mb_strlen($type2, 'utf8') - mb_strlen($type1, 'utf8'); + }); + + $langMessages[$type] = implode('|', $words); + } + + // ensure that the order of keys is consistent between updates + ksort($langMessages); + + $array[$lang] = $langMessages; +} + +// ensure that the languages are sorted to avoid useless diffs between updates. We keep the English first though as it is the reference. +$enData = $array['en']; +unset($array['en']); +ksort($array); +$array = array_merge(array('en' => $enData), $array); +$arrayString = var_export($array, true); + +file_put_contents(__DIR__.'/../i18n.php', <<=5.3.1" + }, + + "require-dev": { + "symfony/yaml": "~2.3|~3", + "symfony/phpunit-bridge": "~2.7|~3", + "phpunit/phpunit": "~4.5|~5" + }, + + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" + }, + + "autoload": { + "psr-0": { + "Behat\\Gherkin": "src/" + } + }, + + "autoload-dev": { + "psr-4": { + "Tests\\Behat\\": "tests/Behat/" + } + }, + + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + } +} diff --git a/vendor/behat/gherkin/i18n.php b/vendor/behat/gherkin/i18n.php new file mode 100644 index 000000000..ea71bad59 --- /dev/null +++ b/vendor/behat/gherkin/i18n.php @@ -0,0 +1,1063 @@ + + array ( + 'and' => 'And|*', + 'background' => 'Background', + 'but' => 'But|*', + 'examples' => 'Scenarios|Examples', + 'feature' => 'Business Need|Feature|Ability', + 'given' => 'Given|*', + 'name' => 'English', + 'native' => 'English', + 'scenario' => 'Scenario', + 'scenario_outline' => 'Scenario Template|Scenario Outline', + 'then' => 'Then|*', + 'when' => 'When|*', + ), + 'af' => + array ( + 'and' => 'En|*', + 'background' => 'Agtergrond', + 'but' => 'Maar|*', + 'examples' => 'Voorbeelde', + 'feature' => 'Besigheid Behoefte|Funksie|Vermoë', + 'given' => 'Gegewe|*', + 'name' => 'Afrikaans', + 'native' => 'Afrikaans', + 'scenario' => 'Situasie', + 'scenario_outline' => 'Situasie Uiteensetting', + 'then' => 'Dan|*', + 'when' => 'Wanneer|*', + ), + 'am' => + array ( + 'and' => 'ÔµÕ¾|*', + 'background' => 'Ô¿Õ¸Õ¶Õ¿Õ¥Ö„Õ½Õ¿', + 'but' => 'Ô²Õ¡ÕµÖ|*', + 'examples' => 'Õ•Ö€Õ«Õ¶Õ¡Õ¯Õ¶Õ¥Ö€', + 'feature' => 'Õ–Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¸Õ¶Õ¡Õ¬Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶|Õ€Õ¡Õ¿Õ¯Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶', + 'given' => 'Ô´Õ«ÖÕ¸Ö‚Ö„|*', + 'name' => 'Armenian', + 'native' => 'Õ°Õ¡ÕµÕ¥Ö€Õ¥Õ¶', + 'scenario' => 'ÕÖÕ¥Õ¶Õ¡Ö€', + 'scenario_outline' => 'ÕÖÕ¥Õ¶Õ¡Ö€Õ« Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡ÖÖ„Õ¨', + 'then' => 'Ô±ÕºÕ¡|*', + 'when' => 'ÔµÖ€Õ¢|ÔµÕ©Õ¥|*', + ), + 'ar' => + array ( + 'and' => '*|Ùˆ', + 'background' => 'الخلÙية', + 'but' => 'لكن|*', + 'examples' => 'امثلة', + 'feature' => 'خاصية', + 'given' => 'Ø¨ÙØ±Ø¶|*', + 'name' => 'Arabic', + 'native' => 'العربية', + 'scenario' => 'سيناريو', + 'scenario_outline' => 'سيناريو مخطط', + 'then' => 'اذاً|ثم|*', + 'when' => 'عندما|متى|*', + ), + 'ast' => + array ( + 'and' => 'Ya|*|Y', + 'background' => 'Antecedentes', + 'but' => 'Peru|*', + 'examples' => 'Exemplos', + 'feature' => 'Carauterística', + 'given' => 'Dada|Daos|Daes|Dáu|*', + 'name' => 'Asturian', + 'native' => 'asturianu', + 'scenario' => 'Casu', + 'scenario_outline' => 'Esbozu del casu', + 'then' => 'Entós|*', + 'when' => 'Cuando|*', + ), + 'az' => + array ( + 'and' => 'HÉ™m|VÉ™|*', + 'background' => 'Kontekst|KeçmiÅŸ', + 'but' => 'Ancaq|Amma|*', + 'examples' => 'NümunÉ™lÉ™r', + 'feature' => 'ÖzÉ™llik', + 'given' => 'Tutaq ki|Verilir|*', + 'name' => 'Azerbaijani', + 'native' => 'AzÉ™rbaycanca', + 'scenario' => 'Ssenari', + 'scenario_outline' => 'Ssenarinin strukturu', + 'then' => 'O halda|*', + 'when' => 'NÉ™ vaxt ki|ÆgÉ™r|*', + ), + 'bg' => + array ( + 'and' => '*|И', + 'background' => 'ПредиÑториÑ', + 'but' => 'Ðо|*', + 'examples' => 'Примери', + 'feature' => 'ФункционалноÑÑ‚', + 'given' => 'Дадено|*', + 'name' => 'Bulgarian', + 'native' => 'българÑки', + 'scenario' => 'Сценарий', + 'scenario_outline' => 'Рамка на Ñценарий', + 'then' => 'То|*', + 'when' => 'Когато|*', + ), + 'bm' => + array ( + 'and' => 'Dan|*', + 'background' => 'Latar Belakang', + 'but' => 'Tetapi|Tapi|*', + 'examples' => 'Contoh', + 'feature' => 'Fungsi', + 'given' => 'Diberi|Bagi|*', + 'name' => 'Malay', + 'native' => 'Bahasa Melayu', + 'scenario' => 'Senario|Situasi|Keadaan', + 'scenario_outline' => 'Garis Panduan Senario|Kerangka Senario|Kerangka Situasi|Kerangka Keadaan', + 'then' => 'Kemudian|Maka|*', + 'when' => 'Apabila|*', + ), + 'bs' => + array ( + 'and' => '*|I|A', + 'background' => 'Pozadina', + 'but' => 'Ali|*', + 'examples' => 'Primjeri', + 'feature' => 'Karakteristika', + 'given' => 'Dato|*', + 'name' => 'Bosnian', + 'native' => 'Bosanski', + 'scenario' => 'Scenariju|Scenario', + 'scenario_outline' => 'Scenario-outline|Scenariju-obris', + 'then' => 'Zatim|*', + 'when' => 'Kada|*', + ), + 'ca' => + array ( + 'and' => '*|I', + 'background' => 'Antecedents|Rerefons', + 'but' => 'Però|*', + 'examples' => 'Exemples', + 'feature' => 'Característica|Funcionalitat', + 'given' => 'Donada|Donat|Atesa|Atès|*', + 'name' => 'Catalan', + 'native' => 'català', + 'scenario' => 'Escenari', + 'scenario_outline' => 'Esquema de l\'escenari', + 'then' => 'Aleshores|Cal|*', + 'when' => 'Quan|*', + ), + 'cs' => + array ( + 'and' => 'A také|*|A', + 'background' => 'Kontext|Pozadí', + 'but' => 'Ale|*', + 'examples' => 'Příklady', + 'feature' => 'Požadavek', + 'given' => 'Za pÅ™edpokladu|Pokud|*', + 'name' => 'Czech', + 'native' => 'ÄŒesky', + 'scenario' => 'Scénář', + 'scenario_outline' => 'Osnova scénáře|NáÄrt Scénáře', + 'then' => 'Pak|*', + 'when' => 'Když|*', + ), + 'cy-GB' => + array ( + 'and' => '*|A', + 'background' => 'Cefndir', + 'but' => 'Ond|*', + 'examples' => 'Enghreifftiau', + 'feature' => 'Arwedd', + 'given' => 'Anrhegedig a|*', + 'name' => 'Welsh', + 'native' => 'Cymraeg', + 'scenario' => 'Scenario', + 'scenario_outline' => 'Scenario Amlinellol', + 'then' => 'Yna|*', + 'when' => 'Pryd|*', + ), + 'da' => + array ( + 'and' => 'Og|*', + 'background' => 'Baggrund', + 'but' => 'Men|*', + 'examples' => 'Eksempler', + 'feature' => 'Egenskab', + 'given' => 'Givet|*', + 'name' => 'Danish', + 'native' => 'dansk', + 'scenario' => 'Scenarie', + 'scenario_outline' => 'Abstrakt Scenario', + 'then' => 'SÃ¥|*', + 'when' => 'NÃ¥r|*', + ), + 'de' => + array ( + 'and' => 'Und|*', + 'background' => 'Grundlage', + 'but' => 'Aber|*', + 'examples' => 'Beispiele', + 'feature' => 'Funktionalität', + 'given' => 'Gegeben seien|Gegeben sei|Angenommen|*', + 'name' => 'German', + 'native' => 'Deutsch', + 'scenario' => 'Szenario', + 'scenario_outline' => 'Szenariogrundriss', + 'then' => 'Dann|*', + 'when' => 'Wenn|*', + ), + 'el' => + array ( + 'and' => 'Και|*', + 'background' => 'ΥπόβαθÏο', + 'but' => 'Αλλά|*', + 'examples' => 'ΠαÏαδείγματα|ΣενάÏια', + 'feature' => 'Δυνατότητα|ΛειτουÏγία', + 'given' => 'Δεδομένου|*', + 'name' => 'Greek', + 'native' => 'Ελληνικά', + 'scenario' => 'ΣενάÏιο', + 'scenario_outline' => 'ΠεÏιγÏαφή ΣεναÏίου', + 'then' => 'Τότε|*', + 'when' => 'Όταν|*', + ), + 'em' => + array ( + 'and' => '😂<|*', + 'background' => '💤', + 'but' => '😔<|*', + 'examples' => '📓', + 'feature' => '📚', + 'given' => 'ðŸ˜<|*', + 'name' => 'Emoji', + 'native' => '😀', + 'scenario' => '📕', + 'scenario_outline' => '📖', + 'then' => 'ðŸ™<|*', + 'when' => '🎬<|*', + ), + 'en-Scouse' => + array ( + 'and' => 'An|*', + 'background' => 'Dis is what went down', + 'but' => 'Buh|*', + 'examples' => 'Examples', + 'feature' => 'Feature', + 'given' => 'Youse know when youse got|Givun|*', + 'name' => 'Scouse', + 'native' => 'Scouse', + 'scenario' => 'The thing of it is', + 'scenario_outline' => 'Wharrimean is', + 'then' => 'Den youse gotta|Dun|*', + 'when' => 'Youse know like when|Wun|*', + ), + 'en-au' => + array ( + 'and' => 'Too right|*', + 'background' => 'First off', + 'but' => 'Yeah nah|*', + 'examples' => 'You\'ll wanna', + 'feature' => 'Pretty much', + 'given' => 'Y\'know|*', + 'name' => 'Australian', + 'native' => 'Australian', + 'scenario' => 'Awww, look mate', + 'scenario_outline' => 'Reckon it\'s like', + 'then' => 'But at the end of the day I reckon|*', + 'when' => 'It\'s just unbelievable|*', + ), + 'en-lol' => + array ( + 'and' => 'AN|*', + 'background' => 'B4', + 'but' => 'BUT|*', + 'examples' => 'EXAMPLZ', + 'feature' => 'OH HAI', + 'given' => 'I CAN HAZ|*', + 'name' => 'LOLCAT', + 'native' => 'LOLCAT', + 'scenario' => 'MISHUN', + 'scenario_outline' => 'MISHUN SRSLY', + 'then' => 'DEN|*', + 'when' => 'WEN|*', + ), + 'en-old' => + array ( + 'and' => 'Ond|*|7', + 'background' => 'Aer|Ær', + 'but' => 'Ac|*', + 'examples' => 'Se the|Se þe|Se ðe', + 'feature' => 'Hwaet|Hwæt', + 'given' => 'Thurh|Þurh|Ãurh|*', + 'name' => 'Old English', + 'native' => 'Englisc', + 'scenario' => 'Swa', + 'scenario_outline' => 'Swa hwaer swa|Swa hwær swa', + 'then' => 'Tha the|Þa þe|Ãa ðe|Tha|Þa|Ãa|*', + 'when' => 'Tha|Þa|Ãa|*', + ), + 'en-pirate' => + array ( + 'and' => 'Aye|*', + 'background' => 'Yo-ho-ho', + 'but' => 'Avast!|*', + 'examples' => 'Dead men tell no tales', + 'feature' => 'Ahoy matey!', + 'given' => 'Gangway!|*', + 'name' => 'Pirate', + 'native' => 'Pirate', + 'scenario' => 'Heave to', + 'scenario_outline' => 'Shiver me timbers', + 'then' => 'Let go and haul|*', + 'when' => 'Blimey!|*', + ), + 'eo' => + array ( + 'and' => 'Kaj|*', + 'background' => 'Fono', + 'but' => 'Sed|*', + 'examples' => 'Ekzemploj', + 'feature' => 'Trajto', + 'given' => 'Donitaĵo|Komence|*', + 'name' => 'Esperanto', + 'native' => 'Esperanto', + 'scenario' => 'Scenaro|Kazo', + 'scenario_outline' => 'Konturo de la scenaro|Kazo-skizo|Skizo', + 'then' => 'Do|*', + 'when' => 'Se|*', + ), + 'es' => + array ( + 'and' => '*|Y|E', + 'background' => 'Antecedentes', + 'but' => 'Pero|*', + 'examples' => 'Ejemplos', + 'feature' => 'Característica', + 'given' => 'Dados|Dadas|Dada|Dado|*', + 'name' => 'Spanish', + 'native' => 'español', + 'scenario' => 'Escenario', + 'scenario_outline' => 'Esquema del escenario', + 'then' => 'Entonces|*', + 'when' => 'Cuando|*', + ), + 'et' => + array ( + 'and' => 'Ja|*', + 'background' => 'Taust', + 'but' => 'Kuid|*', + 'examples' => 'Juhtumid', + 'feature' => 'Omadus', + 'given' => 'Eeldades|*', + 'name' => 'Estonian', + 'native' => 'eesti keel', + 'scenario' => 'Stsenaarium', + 'scenario_outline' => 'Raamstsenaarium', + 'then' => 'Siis|*', + 'when' => 'Kui|*', + ), + 'fa' => + array ( + 'and' => '*|Ùˆ', + 'background' => 'زمینه', + 'but' => 'اما|*', + 'examples' => 'نمونه ها', + 'feature' => 'ÙˆÙیژگی', + 'given' => 'با ÙØ±Ø¶|*', + 'name' => 'Persian', + 'native' => 'ÙØ§Ø±Ø³ÛŒ', + 'scenario' => 'سناریو', + 'scenario_outline' => 'الگوی سناریو', + 'then' => 'آنگاه|*', + 'when' => 'هنگامی|*', + ), + 'fi' => + array ( + 'and' => 'Ja|*', + 'background' => 'Tausta', + 'but' => 'Mutta|*', + 'examples' => 'Tapaukset', + 'feature' => 'Ominaisuus', + 'given' => 'Oletetaan|*', + 'name' => 'Finnish', + 'native' => 'suomi', + 'scenario' => 'Tapaus', + 'scenario_outline' => 'Tapausaihio', + 'then' => 'Niin|*', + 'when' => 'Kun|*', + ), + 'fr' => + array ( + 'and' => 'Et qu\'<|Et que|Et|*', + 'background' => 'Contexte', + 'but' => 'Mais qu\'<|Mais que|Mais|*', + 'examples' => 'Exemples', + 'feature' => 'Fonctionnalité', + 'given' => 'Etant donné qu\'<|Étant donné qu\'<|Etant donné que|Étant donné que|Etant données|Étant données|Etant donnée|Etant donnés|Étant donnée|Étant donnés|Etant donné|Étant donné|Soit|*', + 'name' => 'French', + 'native' => 'français', + 'scenario' => 'Scénario', + 'scenario_outline' => 'Plan du scénario|Plan du Scénario', + 'then' => 'Alors|*', + 'when' => 'Lorsqu\'<|Lorsque|Quand|*', + ), + 'ga' => + array ( + 'and' => 'Agus<|*', + 'background' => 'Cúlra', + 'but' => 'Ach<|*', + 'examples' => 'Samplaí', + 'feature' => 'Gné', + 'given' => 'Cuir i gcás nach<|Cuir i gcás gur<|Cuir i gcás nár<|Cuir i gcás go<|*', + 'name' => 'Irish', + 'native' => 'Gaeilge', + 'scenario' => 'Cás', + 'scenario_outline' => 'Cás Achomair', + 'then' => 'Ansin<|*', + 'when' => 'Nuair nach<|Nuair nár<|Nuair ba<|Nuair a<|*', + ), + 'gj' => + array ( + 'and' => 'અને|*', + 'background' => 'બેકગà«àª°àª¾àª‰àª¨à«àª¡', + 'but' => 'પણ|*', + 'examples' => 'ઉદાહરણો', + 'feature' => 'વà«àª¯àª¾àªªàª¾àª° જરૂર|કà«àª·àª®àª¤àª¾|લકà«àª·àª£', + 'given' => 'આપેલ છે|*', + 'name' => 'Gujarati', + 'native' => 'ગà«àªœàª°àª¾àª¤à«€', + 'scenario' => 'સà«àª¥àª¿àª¤àª¿', + 'scenario_outline' => 'પરિદà«àª¦àª¶à«àª¯ રૂપરેખા|પરિદà«àª¦àª¶à«àª¯ ઢાંચો', + 'then' => 'પછી|*', + 'when' => 'કà«àª¯àª¾àª°à«‡|*', + ), + 'gl' => + array ( + 'and' => '*|E', + 'background' => 'Contexto', + 'but' => 'Pero|Mais|*', + 'examples' => 'Exemplos', + 'feature' => 'Característica', + 'given' => 'Dados|Dadas|Dada|Dado|*', + 'name' => 'Galician', + 'native' => 'galego', + 'scenario' => 'Escenario', + 'scenario_outline' => 'Esbozo do escenario', + 'then' => 'Entón|Logo|*', + 'when' => 'Cando|*', + ), + 'he' => + array ( + 'and' => 'וג×|*', + 'background' => 'רקע', + 'but' => '×בל|*', + 'examples' => 'דוגמ×ות', + 'feature' => 'תכונה', + 'given' => 'בהינתן|*', + 'name' => 'Hebrew', + 'native' => 'עברית', + 'scenario' => 'תרחיש', + 'scenario_outline' => 'תבנית תרחיש', + 'then' => '××–×™|××–|*', + 'when' => '×›×שר|*', + ), + 'hi' => + array ( + 'and' => 'तथा|और|*', + 'background' => 'पृषà¥à¤ à¤­à¥‚मि', + 'but' => 'परनà¥à¤¤à¥|किनà¥à¤¤à¥|पर|*', + 'examples' => 'उदाहरण', + 'feature' => 'रूप लेख', + 'given' => 'चूंकि|यदि|अगर|*', + 'name' => 'Hindi', + 'native' => 'हिंदी', + 'scenario' => 'परिदृशà¥à¤¯', + 'scenario_outline' => 'परिदृशà¥à¤¯ रूपरेखा', + 'then' => 'तदा|तब|*', + 'when' => 'कदा|जब|*', + ), + 'hr' => + array ( + 'and' => '*|I', + 'background' => 'Pozadina', + 'but' => 'Ali|*', + 'examples' => 'Scenariji|Primjeri', + 'feature' => 'Mogucnost|Mogućnost|Osobina', + 'given' => 'Zadani|Zadano|Zadan|*', + 'name' => 'Croatian', + 'native' => 'hrvatski', + 'scenario' => 'Scenarij', + 'scenario_outline' => 'Koncept|Skica', + 'then' => 'Onda|*', + 'when' => 'Kada|Kad|*', + ), + 'ht' => + array ( + 'and' => 'Epi|Ak|*|E', + 'background' => 'Kontèks|Istorik', + 'but' => 'Men|*', + 'examples' => 'Egzanp', + 'feature' => 'Karakteristik|Fonksyonalite|Mak', + 'given' => 'Sipoze ke|Sipoze Ke|Sipoze|*', + 'name' => 'Creole', + 'native' => 'kreyòl', + 'scenario' => 'Senaryo', + 'scenario_outline' => 'Senaryo deskripsyon|Senaryo Deskripsyon|Dyagram senaryo|Dyagram Senaryo|Plan senaryo|Plan Senaryo', + 'then' => 'Le sa a|Lè sa a|*', + 'when' => 'Le|Lè|*', + ), + 'hu' => + array ( + 'and' => 'És|*', + 'background' => 'Háttér', + 'but' => 'De|*', + 'examples' => 'Példák', + 'feature' => 'JellemzÅ‘', + 'given' => 'Amennyiben|Adott|*', + 'name' => 'Hungarian', + 'native' => 'magyar', + 'scenario' => 'Forgatókönyv', + 'scenario_outline' => 'Forgatókönyv vázlat', + 'then' => 'Akkor|*', + 'when' => 'Amikor|Majd|Ha|*', + ), + 'id' => + array ( + 'and' => 'Dan|*', + 'background' => 'Dasar', + 'but' => 'Tapi|*', + 'examples' => 'Contoh', + 'feature' => 'Fitur', + 'given' => 'Dengan|*', + 'name' => 'Indonesian', + 'native' => 'Bahasa Indonesia', + 'scenario' => 'Skenario', + 'scenario_outline' => 'Skenario konsep', + 'then' => 'Maka|*', + 'when' => 'Ketika|*', + ), + 'is' => + array ( + 'and' => 'Og|*', + 'background' => 'Bakgrunnur', + 'but' => 'En|*', + 'examples' => 'Atburðarásir|Dæmi', + 'feature' => 'Eiginleiki', + 'given' => 'Ef|*', + 'name' => 'Icelandic', + 'native' => 'Ãslenska', + 'scenario' => 'Atburðarás', + 'scenario_outline' => 'Lýsing Atburðarásar|Lýsing Dæma', + 'then' => 'Þá|*', + 'when' => 'Þegar|*', + ), + 'it' => + array ( + 'and' => '*|E', + 'background' => 'Contesto', + 'but' => 'Ma|*', + 'examples' => 'Esempi', + 'feature' => 'Funzionalità', + 'given' => 'Data|Dato|Dati|Date|*', + 'name' => 'Italian', + 'native' => 'italiano', + 'scenario' => 'Scenario', + 'scenario_outline' => 'Schema dello scenario', + 'then' => 'Allora|*', + 'when' => 'Quando|*', + ), + 'ja' => + array ( + 'and' => 'ã‹ã¤<|*', + 'background' => '背景', + 'but' => 'ã—ã‹ã—<|ãŸã ã—<|但ã—<|*', + 'examples' => 'サンプル|例', + 'feature' => 'フィーãƒãƒ£|機能', + 'given' => '剿<|*', + 'name' => 'Japanese', + 'native' => '日本語', + 'scenario' => 'シナリオ', + 'scenario_outline' => 'シナリオアウトライン|シナリオテンプレート|シナリオテンプレ|テンプレ', + 'then' => 'ãªã‚‰ã°<|*', + 'when' => 'ã‚‚ã—<|*', + ), + 'jv' => + array ( + 'and' => 'Lan|*', + 'background' => 'Dasar', + 'but' => 'Ananging|Nanging|Tapi|*', + 'examples' => 'Contone|Conto', + 'feature' => 'Fitur', + 'given' => 'Nalikaning|Nalika|*', + 'name' => 'Javanese', + 'native' => 'Basa Jawa', + 'scenario' => 'Skenario', + 'scenario_outline' => 'Konsep skenario', + 'then' => 'Banjur|Njuk|*', + 'when' => 'Menawa|Manawa|*', + ), + 'kn' => + array ( + 'and' => 'ಮತà³à²¤à³|*', + 'background' => 'ಹಿನà³à²¨à³†à²²à³†', + 'but' => 'ಆದರೆ|*', + 'examples' => 'ಉದಾಹರಣೆಗಳà³', + 'feature' => 'ಹೆಚà³à²šà²³', + 'given' => 'ನೀಡಿದ|*', + 'name' => 'Kannada', + 'native' => 'ಕನà³à²¨à²¡', + 'scenario' => 'ಕಥಾಸಾರಾಂಶ', + 'scenario_outline' => 'ವಿವರಣೆ', + 'then' => 'ನಂತರ|*', + 'when' => 'ಸà³à²¥à²¿à²¤à²¿à²¯à²¨à³à²¨à³|*', + ), + 'ko' => + array ( + 'and' => '그리고<|*', + 'background' => 'ë°°ê²½', + 'but' => '하지만<|단<|*', + 'examples' => '예', + 'feature' => '기능', + 'given' => '먼저<|ì¡°ê±´<|*', + 'name' => 'Korean', + 'native' => '한국어', + 'scenario' => '시나리오', + 'scenario_outline' => '시나리오 개요', + 'then' => '그러면<|*', + 'when' => '만약<|ë§Œì¼<|*', + ), + 'lt' => + array ( + 'and' => 'Ir|*', + 'background' => 'Kontekstas', + 'but' => 'Bet|*', + 'examples' => 'Pavyzdžiai|Scenarijai|Variantai', + 'feature' => 'SavybÄ—', + 'given' => 'Duota|*', + 'name' => 'Lithuanian', + 'native' => 'lietuvių kalba', + 'scenario' => 'Scenarijus', + 'scenario_outline' => 'Scenarijaus Å¡ablonas', + 'then' => 'Tada|*', + 'when' => 'Kai|*', + ), + 'lu' => + array ( + 'and' => 'an|*|a', + 'background' => 'Hannergrond', + 'but' => 'awer|mä|*', + 'examples' => 'Beispiller', + 'feature' => 'Funktionalitéit', + 'given' => 'ugeholl|*', + 'name' => 'Luxemburgish', + 'native' => 'Lëtzebuergesch', + 'scenario' => 'Szenario', + 'scenario_outline' => 'Plang vum Szenario', + 'then' => 'dann|*', + 'when' => 'wann|*', + ), + 'lv' => + array ( + 'and' => 'Un|*', + 'background' => 'Konteksts|SituÄcija', + 'but' => 'Bet|*', + 'examples' => 'PiemÄ“ri|Paraugs', + 'feature' => 'FunkcionalitÄte|FÄ«Äa', + 'given' => 'Kad|*', + 'name' => 'Latvian', + 'native' => 'latvieÅ¡u', + 'scenario' => 'ScenÄrijs', + 'scenario_outline' => 'ScenÄrijs pÄ“c parauga', + 'then' => 'Tad|*', + 'when' => 'Ja|*', + ), + 'mn' => + array ( + 'and' => 'ТÑгÑÑд|Мөн|*', + 'background' => 'Ðгуулга', + 'but' => 'ГÑхдÑÑ|Харин|*', + 'examples' => 'Тухайлбал', + 'feature' => 'Функционал|Функц', + 'given' => 'ӨгөгдÑөн нь|Ðнх|*', + 'name' => 'Mongolian', + 'native' => 'монгол', + 'scenario' => 'Сценар', + 'scenario_outline' => 'Сценарын төлөвлөгөө', + 'then' => 'Үүний дараа|ТÑгÑÑ…Ñд|*', + 'when' => 'Ð¥ÑÑ€Ñв|*', + ), + 'nl' => + array ( + 'and' => 'En|*', + 'background' => 'Achtergrond', + 'but' => 'Maar|*', + 'examples' => 'Voorbeelden', + 'feature' => 'Functionaliteit', + 'given' => 'Gegeven|Stel|*', + 'name' => 'Dutch', + 'native' => 'Nederlands', + 'scenario' => 'Scenario', + 'scenario_outline' => 'Abstract Scenario', + 'then' => 'Dan|*', + 'when' => 'Als|*', + ), + 'no' => + array ( + 'and' => 'Og|*', + 'background' => 'Bakgrunn', + 'but' => 'Men|*', + 'examples' => 'Eksempler', + 'feature' => 'Egenskap', + 'given' => 'Gitt|*', + 'name' => 'Norwegian', + 'native' => 'norsk', + 'scenario' => 'Scenario', + 'scenario_outline' => 'Abstrakt Scenario|Scenariomal', + 'then' => 'SÃ¥|*', + 'when' => 'NÃ¥r|*', + ), + 'pa' => + array ( + 'and' => 'ਅਤੇ|*', + 'background' => 'ਪਿਛੋਕੜ', + 'but' => 'ਪਰ|*', + 'examples' => 'ਉਦਾਹਰਨਾਂ', + 'feature' => 'ਨਕਸ਼ ਨà©à¨¹à¨¾à¨°|ਮà©à¨¹à¨¾à¨‚ਦਰਾ|ਖਾਸੀਅਤ', + 'given' => 'ਜਿਵੇਂ ਕਿ|ਜੇਕਰ|*', + 'name' => 'Panjabi', + 'native' => 'ਪੰਜਾਬੀ', + 'scenario' => 'ਪਟਕਥਾ', + 'scenario_outline' => 'ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਟਕਥਾ ਢਾਂਚਾ', + 'then' => 'ਤਦ|*', + 'when' => 'ਜਦੋਂ|*', + ), + 'pl' => + array ( + 'and' => 'Oraz|*|I', + 'background' => 'ZaÅ‚ożenia', + 'but' => 'Ale|*', + 'examples' => 'PrzykÅ‚ady', + 'feature' => 'Potrzeba biznesowa|WÅ‚aÅ›ciwość|Funkcja|Aspekt', + 'given' => 'ZakÅ‚adajÄ…c, że|ZakÅ‚adajÄ…c|MajÄ…c|*', + 'name' => 'Polish', + 'native' => 'polski', + 'scenario' => 'Scenariusz', + 'scenario_outline' => 'Szablon scenariusza', + 'then' => 'Wtedy|*', + 'when' => 'Jeżeli|JeÅ›li|Kiedy|Gdy|*', + ), + 'pt' => + array ( + 'and' => '*|E', + 'background' => 'Cenario de Fundo|Cenário de Fundo|Contexto|Fundo', + 'but' => 'Mas|*', + 'examples' => 'Exemplos|Cenários|Cenarios', + 'feature' => 'Funcionalidade|Característica|Caracteristica', + 'given' => 'Dados|Dadas|Dada|Dado|*', + 'name' => 'Portuguese', + 'native' => 'português', + 'scenario' => 'Cenário|Cenario', + 'scenario_outline' => 'Delineação do Cenário|Delineacao do Cenario|Esquema do Cenário|Esquema do Cenario', + 'then' => 'Entao|Então|*', + 'when' => 'Quando|*', + ), + 'ro' => + array ( + 'and' => 'Și|Si|Åži|*', + 'background' => 'Context', + 'but' => 'Dar|*', + 'examples' => 'Exemple', + 'feature' => 'Functionalitate|FuncÈ›ionalitate|FuncÅ£ionalitate', + 'given' => 'Date fiind|Dati fiind|DaÈ›i fiind|DaÅ£i fiind|Dat fiind|*', + 'name' => 'Romanian', + 'native' => 'română', + 'scenario' => 'Scenariu', + 'scenario_outline' => 'Structura scenariu|Structură scenariu', + 'then' => 'Atunci|*', + 'when' => 'Când|Cand|*', + ), + 'ru' => + array ( + 'and' => 'К тому же|Также|*|И', + 'background' => 'ПредыÑториÑ|КонтекÑÑ‚', + 'but' => 'Ðо|*|Ð', + 'examples' => 'Примеры', + 'feature' => 'ФункциональноÑть|Функционал|СвойÑтво|ФункциÑ', + 'given' => 'ДопуÑтим|ПуÑть|Дано|*', + 'name' => 'Russian', + 'native' => 'руÑÑкий', + 'scenario' => 'Сценарий', + 'scenario_outline' => 'Структура ÑценариÑ', + 'then' => 'Тогда|То|*', + 'when' => 'Когда|ЕÑли|*', + ), + 'sk' => + array ( + 'and' => 'A taktiež|A zároveň|A tiež|*|A', + 'background' => 'Pozadie', + 'but' => 'Ale|*', + 'examples' => 'Príklady', + 'feature' => 'Požiadavka|VlastnosÅ¥|Funkcia', + 'given' => 'Za predpokladu|Pokiaľ|*', + 'name' => 'Slovak', + 'native' => 'Slovensky', + 'scenario' => 'Scenár', + 'scenario_outline' => 'Osnova Scenára|NáÄrt Scenáru|NáÄrt Scenára', + 'then' => 'Potom|Tak|*', + 'when' => 'KeÄ|Ak|*', + ), + 'sl' => + array ( + 'and' => 'Ter|In', + 'background' => 'Kontekst|Osnova|Ozadje', + 'but' => 'Vendar|Ampak|Toda', + 'examples' => 'Scenariji|Primeri', + 'feature' => 'Funkcionalnost|ZnaÄilnost|Funkcija|Možnosti|Moznosti|Lastnost', + 'given' => 'Privzeto|Zaradi|Podano|Dano', + 'name' => 'Slovenian', + 'native' => 'Slovenski', + 'scenario' => 'Scenarij|Primer', + 'scenario_outline' => 'Struktura scenarija|Oris scenarija|Koncept|Osnutek|Skica', + 'then' => 'Takrat|Potem|Nato', + 'when' => 'Kadar|Ko|Ce|ÄŒe', + ), + 'sr-Cyrl' => + array ( + 'and' => '*|И', + 'background' => 'КонтекÑÑ‚|Позадина|ОÑнова', + 'but' => 'Ðли|*', + 'examples' => 'Сценарији|Примери', + 'feature' => 'ФункционалноÑÑ‚|МогућноÑÑ‚|ОÑобина', + 'given' => 'За дате|За дато|За дати|*', + 'name' => 'Serbian', + 'native' => 'СрпÑки', + 'scenario' => 'Сценарио|Пример', + 'scenario_outline' => 'Структура Ñценарија|Концепт|Скица', + 'then' => 'Онда|*', + 'when' => 'Када|Кад|*', + ), + 'sr-Latn' => + array ( + 'and' => '*|I', + 'background' => 'Kontekst|Pozadina|Osnova', + 'but' => 'Ali|*', + 'examples' => 'Scenariji|Primeri', + 'feature' => 'Funkcionalnost|Mogućnost|Mogucnost|Osobina', + 'given' => 'Za date|Za dato|Za dati|*', + 'name' => 'Serbian (Latin)', + 'native' => 'Srpski (Latinica)', + 'scenario' => 'Scenario|Primer', + 'scenario_outline' => 'Struktura scenarija|Koncept|Skica', + 'then' => 'Onda|*', + 'when' => 'Kada|Kad|*', + ), + 'sv' => + array ( + 'and' => 'Och|*', + 'background' => 'Bakgrund', + 'but' => 'Men|*', + 'examples' => 'Exempel', + 'feature' => 'Egenskap', + 'given' => 'Givet|*', + 'name' => 'Swedish', + 'native' => 'Svenska', + 'scenario' => 'Scenario', + 'scenario_outline' => 'Abstrakt Scenario|Scenariomall', + 'then' => 'SÃ¥|*', + 'when' => 'När|*', + ), + 'ta' => + array ( + 'and' => 'மறà¯à®±à¯à®®à¯|மேலà¯à®®à¯|*', + 'background' => 'பினà¯à®©à®£à®¿', + 'but' => 'ஆனாலà¯|*', + 'examples' => 'எடà¯à®¤à¯à®¤à¯à®•à¯à®•ாடà¯à®Ÿà¯à®•ளà¯| நிலைமைகளிலà¯|காடà¯à®šà®¿à®•ளà¯', + 'feature' => 'வணிக தேவை|à®…à®®à¯à®šà®®à¯|திறனà¯', + 'given' => 'கொடà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿ|*', + 'name' => 'Tamil', + 'native' => 'தமிழà¯', + 'scenario' => 'காடà¯à®šà®¿', + 'scenario_outline' => 'காடà¯à®šà®¿ வாரà¯à®ªà¯à®ªà¯à®°à¯|காடà¯à®šà®¿ சà¯à®°à¯à®•à¯à®•à®®à¯', + 'then' => 'அபà¯à®ªà¯†à®¾à®´à¯à®¤à¯|*', + 'when' => 'எபà¯à®ªà¯‡à®¾à®¤à¯|*', + ), + 'th' => + array ( + 'and' => 'à¹à¸¥à¸°|*', + 'background' => 'à¹à¸™à¸§à¸„ิด', + 'but' => 'à¹à¸•่|*', + 'examples' => 'ชุดของเหตุà¸à¸²à¸£à¸“์|ชุดของตัวอย่าง', + 'feature' => 'ความต้องà¸à¸²à¸£à¸—างธุรà¸à¸´à¸ˆ|ความสามารถ|โครงหลัà¸', + 'given' => 'à¸à¸³à¸«à¸™à¸”ให้|*', + 'name' => 'Thai', + 'native' => 'ไทย', + 'scenario' => 'เหตุà¸à¸²à¸£à¸“์', + 'scenario_outline' => 'โครงสร้างของเหตุà¸à¸²à¸£à¸“์|สรุปเหตุà¸à¸²à¸£à¸“์', + 'then' => 'ดังนั้น|*', + 'when' => 'เมื่อ|*', + ), + 'tl' => + array ( + 'and' => 'మరియà±|*', + 'background' => 'నేపథà±à°¯à°‚', + 'but' => 'కాని|*', + 'examples' => 'ఉదాహరణలà±', + 'feature' => 'à°—à±à°£à°®à±', + 'given' => 'చెపà±à°ªà°¬à°¡à°¿à°¨à°¦à°¿|*', + 'name' => 'Telugu', + 'native' => 'తెలà±à°—à±', + 'scenario' => 'సనà±à°¨à°¿à°µà±‡à°¶à°‚', + 'scenario_outline' => 'కథనం', + 'then' => 'à°…à°ªà±à°ªà±à°¡à±|*', + 'when' => 'à°ˆ పరిసà±à°¥à°¿à°¤à°¿à°²à±‹|*', + ), + 'tlh' => + array ( + 'and' => 'latlh|\'ej|*', + 'background' => 'mo\'', + 'but' => '\'ach|\'a|*', + 'examples' => 'ghantoH|lutmey', + 'feature' => 'poQbogh malja\'|Qu\'meH \'ut|perbogh|Qap|laH', + 'given' => 'DaH ghu\' bejlu\'|ghu\' noblu\'|*', + 'name' => 'Klingon', + 'native' => 'tlhIngan', + 'scenario' => 'lut', + 'scenario_outline' => 'lut chovnatlh', + 'then' => 'vaj|*', + 'when' => 'qaSDI\'|*', + ), + 'tr' => + array ( + 'and' => 'Ve|*', + 'background' => 'GeçmiÅŸ', + 'but' => 'Fakat|Ama|*', + 'examples' => 'Örnekler', + 'feature' => 'Özellik', + 'given' => 'Diyelim ki|*', + 'name' => 'Turkish', + 'native' => 'Türkçe', + 'scenario' => 'Senaryo', + 'scenario_outline' => 'Senaryo taslağı', + 'then' => 'O zaman|*', + 'when' => 'EÄŸer ki|*', + ), + 'tt' => + array ( + 'and' => 'Һәм|Ð’Ó™|*', + 'background' => 'Кереш', + 'but' => 'Ләкин|Әмма|*', + 'examples' => 'Үрнәкләр|МиÑаллар', + 'feature' => 'Үзенчәлеклелек|Мөмкинлек', + 'given' => 'Әйтик|*', + 'name' => 'Tatar', + 'native' => 'Татарча', + 'scenario' => 'Сценарий', + 'scenario_outline' => 'Сценарийның төзелеше', + 'then' => 'Ðәтиҗәдә|*', + 'when' => 'Әгәр|*', + ), + 'uk' => + array ( + 'and' => 'Ртакож|Та|*|І', + 'background' => 'Передумова', + 'but' => 'Ðле|*', + 'examples' => 'Приклади', + 'feature' => 'Функціонал', + 'given' => 'ПрипуÑтимо, що|ПрипуÑтимо|Ðехай|Дано|*', + 'name' => 'Ukrainian', + 'native' => 'УкраїнÑька', + 'scenario' => 'Сценарій', + 'scenario_outline' => 'Структура Ñценарію', + 'then' => 'Тоді|То|*', + 'when' => 'Коли|Якщо|*', + ), + 'ur' => + array ( + 'and' => 'اور|*', + 'background' => 'پس منظر', + 'but' => 'لیکن|*', + 'examples' => 'مثالیں', + 'feature' => 'کاروبار Ú©ÛŒ ضرورت|صلاحیت|خصوصیت', + 'given' => 'ÙØ±Ø¶ کیا|Ø¨Ø§Ù„ÙØ±Ø¶|اگر|*', + 'name' => 'Urdu', + 'native' => 'اردو', + 'scenario' => 'منظرنامÛ', + 'scenario_outline' => 'منظر نامے کا خاکÛ', + 'then' => 'پھر|تب|*', + 'when' => 'جب|*', + ), + 'uz' => + array ( + 'and' => 'Ва|*', + 'background' => 'Тарих', + 'but' => 'Бирок|Лекин|Ðммо|*', + 'examples' => 'МиÑоллар', + 'feature' => 'Функционал', + 'given' => 'Ðгар|*', + 'name' => 'Uzbek', + 'native' => 'Узбекча', + 'scenario' => 'Сценарий', + 'scenario_outline' => 'Сценарий ÑтруктураÑи', + 'then' => 'Унда|*', + 'when' => 'Ðгар|*', + ), + 'vi' => + array ( + 'and' => 'Và|*', + 'background' => 'Bối cảnh', + 'but' => 'Nhưng|*', + 'examples' => 'Dữ liệu', + 'feature' => 'Tính năng', + 'given' => 'Biết|Cho|*', + 'name' => 'Vietnamese', + 'native' => 'Tiếng Việt', + 'scenario' => 'Tình huống|Kịch bản', + 'scenario_outline' => 'Khung tình huống|Khung kịch bản', + 'then' => 'Thì|*', + 'when' => 'Khi|*', + ), + 'zh-CN' => + array ( + 'and' => '并且<|而且<|åŒæ—¶<|*', + 'background' => '背景', + 'but' => '但是<|*', + 'examples' => '例å­', + 'feature' => '功能', + 'given' => 'å‡è®¾<|å‡å¦‚<|å‡å®š<|*', + 'name' => 'Chinese simplified', + 'native' => '简体中文', + 'scenario' => '场景|剧本', + 'scenario_outline' => '场景大纲|剧本大纲', + 'then' => '那么<|*', + 'when' => '当<|*', + ), + 'zh-TW' => + array ( + 'and' => '並且<|而且<|åŒæ™‚<|*', + 'background' => '背景', + 'but' => '但是<|*', + 'examples' => '例å­', + 'feature' => '功能', + 'given' => 'å‡è¨­<|å‡å¦‚<|å‡å®š<|*', + 'name' => 'Chinese traditional', + 'native' => 'ç¹é«”中文', + 'scenario' => '場景|劇本', + 'scenario_outline' => '場景大綱|劇本大綱', + 'then' => '那麼<|*', + 'when' => 'ç•¶<|*', + ), +); \ No newline at end of file diff --git a/vendor/behat/gherkin/libpath.php b/vendor/behat/gherkin/libpath.php new file mode 100644 index 000000000..35379fe54 --- /dev/null +++ b/vendor/behat/gherkin/libpath.php @@ -0,0 +1,3 @@ + + + gherkin + pear.behat.org + Behat\Gherkin is a BDD DSL for PHP + + Behat\Gherkin is an open source behavior driven development DSL for php 5.3. + + + Konstantin Kudryashov + everzet + ever.zet@gmail.com + yes + + ##CURRENT_DATE## + + ##GHERKIN_VERSION## + 1.0.0 + + + ##STABILITY## + ##STABILITY## + + MIT + - + + + + ##SOURCE_FILES## + + + + + + + + + + + + + + + + + + + 5.3.1 + + + 1.4.0 + + + pcre + + + simplexml + + + xml + + + mbstring + + + + + diff --git a/vendor/behat/gherkin/phpdoc.ini.dist b/vendor/behat/gherkin/phpdoc.ini.dist new file mode 100644 index 000000000..f983946e2 --- /dev/null +++ b/vendor/behat/gherkin/phpdoc.ini.dist @@ -0,0 +1,14 @@ +files = "*.php" +ignore = "CVS, .svn, .git, _compiled" +source_path = "./src" +doclet = standard +overview = readme.html +package_comment_dir = ./ +public = on +d = "api" +default_package = "Behat Gherkin" +windowtitle = "Behat Gherkin" +doctitle = "Behat Gherkin: PHP 5.3 Gherkin parser" +header = "Behat Gherkin" +footer = "Behat Gherkin" +tree = on diff --git a/vendor/behat/gherkin/phpunit.xml.dist b/vendor/behat/gherkin/phpunit.xml.dist new file mode 100644 index 000000000..24fc8d87a --- /dev/null +++ b/vendor/behat/gherkin/phpunit.xml.dist @@ -0,0 +1,25 @@ + + + + + + ./tests/Behat/Gherkin/ + + + + + + ./src/Behat/Gherkin/ + + + diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Cache/CacheInterface.php b/vendor/behat/gherkin/src/Behat/Gherkin/Cache/CacheInterface.php new file mode 100644 index 000000000..87d4a472e --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Cache/CacheInterface.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Cache; + +use Behat\Gherkin\Node\FeatureNode; + +/** + * Parser cache interface. + * + * @author Konstantin Kudryashov + */ +interface CacheInterface +{ + /** + * Checks that cache for feature exists and is fresh. + * + * @param string $path Feature path + * @param integer $timestamp The last time feature was updated + * + * @return Boolean + */ + public function isFresh($path, $timestamp); + + /** + * Reads feature cache from path. + * + * @param string $path Feature path + * + * @return FeatureNode + */ + public function read($path); + + /** + * Caches feature node. + * + * @param string $path Feature path + * @param FeatureNode $feature Feature instance + */ + public function write($path, FeatureNode $feature); +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Cache/FileCache.php b/vendor/behat/gherkin/src/Behat/Gherkin/Cache/FileCache.php new file mode 100644 index 000000000..17a206ac7 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Cache/FileCache.php @@ -0,0 +1,109 @@ + +* +* For the full copyright and license information, please view the LICENSE +* file that was distributed with this source code. +*/ + +namespace Behat\Gherkin\Cache; + +use Behat\Gherkin\Exception\CacheException; +use Behat\Gherkin\Node\FeatureNode; +use Behat\Gherkin\Gherkin; + +/** + * File cache. + * Caches feature into a file. + * + * @author Konstantin Kudryashov + */ +class FileCache implements CacheInterface +{ + private $path; + + /** + * Initializes file cache. + * + * @param string $path Path to the folder where to store caches. + * + * @throws CacheException + */ + public function __construct($path) + { + $this->path = rtrim($path, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.'v'.Gherkin::VERSION; + + if (!is_dir($this->path)) { + @mkdir($this->path, 0777, true); + } + + if (!is_writeable($this->path)) { + throw new CacheException(sprintf('Cache path "%s" is not writeable. Check your filesystem permissions or disable Gherkin file cache.', $this->path)); + } + } + + /** + * Checks that cache for feature exists and is fresh. + * + * @param string $path Feature path + * @param integer $timestamp The last time feature was updated + * + * @return Boolean + */ + public function isFresh($path, $timestamp) + { + $cachePath = $this->getCachePathFor($path); + + if (!file_exists($cachePath)) { + return false; + } + + return filemtime($cachePath) > $timestamp; + } + + /** + * Reads feature cache from path. + * + * @param string $path Feature path + * + * @return FeatureNode + * + * @throws CacheException + */ + public function read($path) + { + $cachePath = $this->getCachePathFor($path); + $feature = unserialize(file_get_contents($cachePath)); + + if (!$feature instanceof FeatureNode) { + throw new CacheException(sprintf('Can not load cache for a feature "%s" from "%s".', $path, $cachePath )); + } + + return $feature; + } + + /** + * Caches feature node. + * + * @param string $path Feature path + * @param FeatureNode $feature Feature instance + */ + public function write($path, FeatureNode $feature) + { + file_put_contents($this->getCachePathFor($path), serialize($feature)); + } + + /** + * Returns feature cache file path from features path. + * + * @param string $path Feature path + * + * @return string + */ + protected function getCachePathFor($path) + { + return $this->path.'/'.md5($path).'.feature.cache'; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Cache/MemoryCache.php b/vendor/behat/gherkin/src/Behat/Gherkin/Cache/MemoryCache.php new file mode 100644 index 000000000..e404f3048 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Cache/MemoryCache.php @@ -0,0 +1,66 @@ + +* +* For the full copyright and license information, please view the LICENSE +* file that was distributed with this source code. +*/ + +namespace Behat\Gherkin\Cache; + +use Behat\Gherkin\Node\FeatureNode; + +/** + * Memory cache. + * Caches feature into a memory. + * + * @author Konstantin Kudryashov + */ +class MemoryCache implements CacheInterface +{ + private $features = array(); + private $timestamps = array(); + + /** + * Checks that cache for feature exists and is fresh. + * + * @param string $path Feature path + * @param integer $timestamp The last time feature was updated + * + * @return Boolean + */ + public function isFresh($path, $timestamp) + { + if (!isset($this->features[$path])) { + return false; + } + + return $this->timestamps[$path] > $timestamp; + } + + /** + * Reads feature cache from path. + * + * @param string $path Feature path + * + * @return FeatureNode + */ + public function read($path) + { + return $this->features[$path]; + } + + /** + * Caches feature node. + * + * @param string $path Feature path + * @param FeatureNode $feature Feature instance + */ + public function write($path, FeatureNode $feature) + { + $this->features[$path] = $feature; + $this->timestamps[$path] = time(); + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Exception/CacheException.php b/vendor/behat/gherkin/src/Behat/Gherkin/Exception/CacheException.php new file mode 100644 index 000000000..f8b9214c3 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Exception/CacheException.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Exception; + +use RuntimeException; + +/** + * Cache exception. + * + * @author Konstantin Kudryashov + */ +class CacheException extends RuntimeException implements Exception +{ +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Exception/Exception.php b/vendor/behat/gherkin/src/Behat/Gherkin/Exception/Exception.php new file mode 100644 index 000000000..f377e30fe --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Exception/Exception.php @@ -0,0 +1,15 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Exception; + +interface Exception +{ +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Exception/LexerException.php b/vendor/behat/gherkin/src/Behat/Gherkin/Exception/LexerException.php new file mode 100644 index 000000000..476d81f56 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Exception/LexerException.php @@ -0,0 +1,17 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Exception; + +use RuntimeException; + +class LexerException extends RuntimeException implements Exception +{ +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Exception/NodeException.php b/vendor/behat/gherkin/src/Behat/Gherkin/Exception/NodeException.php new file mode 100644 index 000000000..b7d7a4c6a --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Exception/NodeException.php @@ -0,0 +1,17 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Exception; + +use RuntimeException; + +class NodeException extends RuntimeException implements Exception +{ +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Exception/ParserException.php b/vendor/behat/gherkin/src/Behat/Gherkin/Exception/ParserException.php new file mode 100644 index 000000000..f835e726b --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Exception/ParserException.php @@ -0,0 +1,17 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Exception; + +use RuntimeException; + +class ParserException extends RuntimeException implements Exception +{ +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Filter/ComplexFilter.php b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/ComplexFilter.php new file mode 100644 index 000000000..a3a3b0847 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/ComplexFilter.php @@ -0,0 +1,52 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Filter; + +use Behat\Gherkin\Node\FeatureNode; + +/** + * Abstract filter class. + * + * @author Konstantin Kudryashov + */ +abstract class ComplexFilter implements ComplexFilterInterface +{ + /** + * Filters feature according to the filter. + * + * @param FeatureNode $feature + * + * @return FeatureNode + */ + public function filterFeature(FeatureNode $feature) + { + $scenarios = array(); + foreach ($feature->getScenarios() as $scenario) { + if (!$this->isScenarioMatch($feature, $scenario)) { + continue; + } + + $scenarios[] = $scenario; + } + + return new FeatureNode( + $feature->getTitle(), + $feature->getDescription(), + $feature->getTags(), + $feature->getBackground(), + $scenarios, + $feature->getKeyword(), + $feature->getLanguage(), + $feature->getFile(), + $feature->getLine() + ); + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Filter/ComplexFilterInterface.php b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/ComplexFilterInterface.php new file mode 100644 index 000000000..8a0ebd566 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/ComplexFilterInterface.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Filter; + +use Behat\Gherkin\Node\FeatureNode; +use Behat\Gherkin\Node\ScenarioInterface; + +/** + * Filter interface. + * + * @author Konstantin Kudryashov + */ +interface ComplexFilterInterface extends FeatureFilterInterface +{ + /** + * Checks if scenario or outline matches specified filter. + * + * @param FeatureNode $feature Feature node instance + * @param ScenarioInterface $scenario Scenario or Outline node instance + * + * @return Boolean + */ + public function isScenarioMatch(FeatureNode $feature, ScenarioInterface $scenario); +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Filter/FeatureFilterInterface.php b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/FeatureFilterInterface.php new file mode 100644 index 000000000..a7c43eccb --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/FeatureFilterInterface.php @@ -0,0 +1,39 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Filter; + +use Behat\Gherkin\Node\FeatureNode; + +/** + * Feature filter interface. + * + * @author Konstantin Kudryashov + */ +interface FeatureFilterInterface +{ + /** + * Checks if Feature matches specified filter. + * + * @param FeatureNode $feature Feature instance + * + * @return Boolean + */ + public function isFeatureMatch(FeatureNode $feature); + + /** + * Filters feature according to the filter and returns new one. + * + * @param FeatureNode $feature + * + * @return FeatureNode + */ + public function filterFeature(FeatureNode $feature); +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Filter/FilterInterface.php b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/FilterInterface.php new file mode 100644 index 000000000..4a531a0dd --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/FilterInterface.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Filter; + +use Behat\Gherkin\Node\ScenarioInterface; + +/** + * Filter interface. + * + * @author Konstantin Kudryashov + */ +interface FilterInterface extends FeatureFilterInterface +{ + /** + * Checks if scenario or outline matches specified filter. + * + * @param ScenarioInterface $scenario Scenario or Outline node instance + * + * @return Boolean + */ + public function isScenarioMatch(ScenarioInterface $scenario); +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Filter/LineFilter.php b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/LineFilter.php new file mode 100644 index 000000000..455e9ac35 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/LineFilter.php @@ -0,0 +1,122 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Filter; + +use Behat\Gherkin\Node\ExampleTableNode; +use Behat\Gherkin\Node\FeatureNode; +use Behat\Gherkin\Node\OutlineNode; +use Behat\Gherkin\Node\ScenarioInterface; + +/** + * Filters scenarios by definition line number. + * + * @author Konstantin Kudryashov + */ +class LineFilter implements FilterInterface +{ + protected $filterLine; + + /** + * Initializes filter. + * + * @param string $filterLine Line of the scenario to filter on + */ + public function __construct($filterLine) + { + $this->filterLine = intval($filterLine); + } + + /** + * Checks if Feature matches specified filter. + * + * @param FeatureNode $feature Feature instance + * + * @return Boolean + */ + public function isFeatureMatch(FeatureNode $feature) + { + return $this->filterLine === $feature->getLine(); + } + + /** + * Checks if scenario or outline matches specified filter. + * + * @param ScenarioInterface $scenario Scenario or Outline node instance + * + * @return Boolean + */ + public function isScenarioMatch(ScenarioInterface $scenario) + { + if ($this->filterLine === $scenario->getLine()) { + return true; + } + + if ($scenario instanceof OutlineNode && $scenario->hasExamples()) { + return $this->filterLine === $scenario->getLine() + || in_array($this->filterLine, $scenario->getExampleTable()->getLines()); + } + + return false; + } + + /** + * Filters feature according to the filter and returns new one. + * + * @param FeatureNode $feature + * + * @return FeatureNode + */ + public function filterFeature(FeatureNode $feature) + { + $scenarios = array(); + foreach ($feature->getScenarios() as $scenario) { + if (!$this->isScenarioMatch($scenario)) { + continue; + } + + if ($scenario instanceof OutlineNode && $scenario->hasExamples()) { + $table = $scenario->getExampleTable()->getTable(); + $lines = array_keys($table); + + if (in_array($this->filterLine, $lines)) { + $filteredTable = array($lines[0] => $table[$lines[0]]); + + if ($lines[0] !== $this->filterLine) { + $filteredTable[$this->filterLine] = $table[$this->filterLine]; + } + + $scenario = new OutlineNode( + $scenario->getTitle(), + $scenario->getTags(), + $scenario->getSteps(), + new ExampleTableNode($filteredTable, $scenario->getExampleTable()->getKeyword()), + $scenario->getKeyword(), + $scenario->getLine() + ); + } + } + + $scenarios[] = $scenario; + } + + return new FeatureNode( + $feature->getTitle(), + $feature->getDescription(), + $feature->getTags(), + $feature->getBackground(), + $scenarios, + $feature->getKeyword(), + $feature->getLanguage(), + $feature->getFile(), + $feature->getLine() + ); + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Filter/LineRangeFilter.php b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/LineRangeFilter.php new file mode 100644 index 000000000..b8062bed5 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/LineRangeFilter.php @@ -0,0 +1,134 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Filter; + +use Behat\Gherkin\Node\ExampleTableNode; +use Behat\Gherkin\Node\FeatureNode; +use Behat\Gherkin\Node\OutlineNode; +use Behat\Gherkin\Node\ScenarioInterface; + +/** + * Filters scenarios by definition line number range. + * + * @author Fabian Kiss + */ +class LineRangeFilter implements FilterInterface +{ + protected $filterMinLine; + protected $filterMaxLine; + + /** + * Initializes filter. + * + * @param string $filterMinLine Minimum line of a scenario to filter on + * @param string $filterMaxLine Maximum line of a scenario to filter on + */ + public function __construct($filterMinLine, $filterMaxLine) + { + $this->filterMinLine = intval($filterMinLine); + if ($filterMaxLine == '*') { + $this->filterMaxLine = PHP_INT_MAX; + } else { + $this->filterMaxLine = intval($filterMaxLine); + } + } + + /** + * Checks if Feature matches specified filter. + * + * @param FeatureNode $feature Feature instance + * + * @return Boolean + */ + public function isFeatureMatch(FeatureNode $feature) + { + return $this->filterMinLine <= $feature->getLine() + && $this->filterMaxLine >= $feature->getLine(); + } + + /** + * Checks if scenario or outline matches specified filter. + * + * @param ScenarioInterface $scenario Scenario or Outline node instance + * + * @return Boolean + */ + public function isScenarioMatch(ScenarioInterface $scenario) + { + if ($this->filterMinLine <= $scenario->getLine() && $this->filterMaxLine >= $scenario->getLine()) { + return true; + } + + if ($scenario instanceof OutlineNode && $scenario->hasExamples()) { + foreach ($scenario->getExampleTable()->getLines() as $line) { + if ($this->filterMinLine <= $line && $this->filterMaxLine >= $line) { + return true; + } + } + } + + return false; + } + + /** + * Filters feature according to the filter. + * + * @param FeatureNode $feature + * + * @return FeatureNode + */ + public function filterFeature(FeatureNode $feature) + { + $scenarios = array(); + foreach ($feature->getScenarios() as $scenario) { + if (!$this->isScenarioMatch($scenario)) { + continue; + } + + if ($scenario instanceof OutlineNode && $scenario->hasExamples()) { + $table = $scenario->getExampleTable()->getTable(); + $lines = array_keys($table); + + $filteredTable = array($lines[0] => $table[$lines[0]]); + unset($table[$lines[0]]); + + foreach ($table as $line => $row) { + if ($this->filterMinLine <= $line && $this->filterMaxLine >= $line) { + $filteredTable[$line] = $row; + } + } + + $scenario = new OutlineNode( + $scenario->getTitle(), + $scenario->getTags(), + $scenario->getSteps(), + new ExampleTableNode($filteredTable, $scenario->getExampleTable()->getKeyword()), + $scenario->getKeyword(), + $scenario->getLine() + ); + } + + $scenarios[] = $scenario; + } + + return new FeatureNode( + $feature->getTitle(), + $feature->getDescription(), + $feature->getTags(), + $feature->getBackground(), + $scenarios, + $feature->getKeyword(), + $feature->getLanguage(), + $feature->getFile(), + $feature->getLine() + ); + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Filter/NameFilter.php b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/NameFilter.php new file mode 100644 index 000000000..82ae0e582 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/NameFilter.php @@ -0,0 +1,68 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Filter; + +use Behat\Gherkin\Node\FeatureNode; +use Behat\Gherkin\Node\ScenarioInterface; + +/** + * Filters scenarios by feature/scenario name. + * + * @author Konstantin Kudryashov + */ +class NameFilter extends SimpleFilter +{ + protected $filterString; + + /** + * Initializes filter. + * + * @param string $filterString Name filter string + */ + public function __construct($filterString) + { + $this->filterString = trim($filterString); + } + + /** + * Checks if Feature matches specified filter. + * + * @param FeatureNode $feature Feature instance + * + * @return Boolean + */ + public function isFeatureMatch(FeatureNode $feature) + { + if ('/' === $this->filterString[0]) { + return 1 === preg_match($this->filterString, $feature->getTitle()); + } + + return false !== mb_strpos($feature->getTitle(), $this->filterString, 0, 'utf8'); + } + + /** + * Checks if scenario or outline matches specified filter. + * + * @param ScenarioInterface $scenario Scenario or Outline node instance + * + * @return Boolean + */ + public function isScenarioMatch(ScenarioInterface $scenario) + { + if ('/' === $this->filterString[0] && 1 === preg_match($this->filterString, $scenario->getTitle())) { + return true; + } elseif (false !== mb_strpos($scenario->getTitle(), $this->filterString, 0, 'utf8')) { + return true; + } + + return false; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Filter/NarrativeFilter.php b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/NarrativeFilter.php new file mode 100644 index 000000000..61126e569 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/NarrativeFilter.php @@ -0,0 +1,61 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Filter; + +use Behat\Gherkin\Node\ScenarioInterface; +use Behat\Gherkin\Node\FeatureNode; + +/** + * Filters features by their narrative using regular expression. + * + * @author Konstantin Kudryashov + */ +class NarrativeFilter extends SimpleFilter +{ + /** + * @var string + */ + private $regex; + + /** + * Initializes filter. + * + * @param string $regex + */ + public function __construct($regex) + { + $this->regex = $regex; + } + + /** + * Checks if Feature matches specified filter. + * + * @param FeatureNode $feature Feature instance + * + * @return Boolean + */ + public function isFeatureMatch(FeatureNode $feature) + { + return 1 === preg_match($this->regex, $feature->getDescription()); + } + + /** + * Checks if scenario or outline matches specified filter. + * + * @param ScenarioInterface $scenario Scenario or Outline node instance + * + * @return Boolean + */ + public function isScenarioMatch(ScenarioInterface $scenario) + { + return false; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Filter/PathsFilter.php b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/PathsFilter.php new file mode 100644 index 000000000..5dac3dc9d --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/PathsFilter.php @@ -0,0 +1,72 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Filter; + +use Behat\Gherkin\Node\FeatureNode; +use Behat\Gherkin\Node\ScenarioInterface; + +/** + * Filters features by their paths. + * + * @author Konstantin Kudryashov + */ +class PathsFilter extends SimpleFilter +{ + protected $filterPaths = array(); + + /** + * Initializes filter. + * + * @param string[] $paths List of approved paths + */ + public function __construct(array $paths) + { + $this->filterPaths = array_map( + function ($realpath) { + return rtrim($realpath, DIRECTORY_SEPARATOR) . + (is_dir($realpath) ? DIRECTORY_SEPARATOR : ''); + }, + array_filter( + array_map('realpath', $paths) + ) + ); + } + + /** + * Checks if Feature matches specified filter. + * + * @param FeatureNode $feature Feature instance + * + * @return Boolean + */ + public function isFeatureMatch(FeatureNode $feature) + { + foreach ($this->filterPaths as $path) { + if (0 === strpos($feature->getFile(), $path)) { + return true; + } + } + + return false; + } + + /** + * Checks if scenario or outline matches specified filter. + * + * @param ScenarioInterface $scenario Scenario or Outline node instance + * + * @return false This filter is designed to work only with features + */ + public function isScenarioMatch(ScenarioInterface $scenario) + { + return false; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Filter/RoleFilter.php b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/RoleFilter.php new file mode 100644 index 000000000..19e9377a9 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/RoleFilter.php @@ -0,0 +1,63 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Filter; + +use Behat\Gherkin\Node\FeatureNode; +use Behat\Gherkin\Node\ScenarioInterface; + +/** + * Filters features by their actors role. + * + * @author Konstantin Kudryashov + */ +class RoleFilter extends SimpleFilter +{ + protected $pattern; + + /** + * Initializes filter. + * + * @param string $role Approved role wildcard + */ + public function __construct($role) + { + $this->pattern = '/as an? ' . strtr(preg_quote($role, '/'), array( + '\*' => '.*', + '\?' => '.', + '\[' => '[', + '\]' => ']' + )) . '[$\n]/i'; + } + + /** + * Checks if Feature matches specified filter. + * + * @param FeatureNode $feature Feature instance + * + * @return Boolean + */ + public function isFeatureMatch(FeatureNode $feature) + { + return 1 === preg_match($this->pattern, $feature->getDescription()); + } + + /** + * Checks if scenario or outline matches specified filter. + * + * @param ScenarioInterface $scenario Scenario or Outline node instance + * + * @return false This filter is designed to work only with features + */ + public function isScenarioMatch(ScenarioInterface $scenario) + { + return false; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Filter/SimpleFilter.php b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/SimpleFilter.php new file mode 100644 index 000000000..10bee8fad --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/SimpleFilter.php @@ -0,0 +1,56 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Filter; + +use Behat\Gherkin\Node\FeatureNode; + +/** + * Abstract filter class. + * + * @author Konstantin Kudryashov + */ +abstract class SimpleFilter implements FilterInterface +{ + /** + * Filters feature according to the filter. + * + * @param FeatureNode $feature + * + * @return FeatureNode + */ + public function filterFeature(FeatureNode $feature) + { + if ($this->isFeatureMatch($feature)) { + return $feature; + } + + $scenarios = array(); + foreach ($feature->getScenarios() as $scenario) { + if (!$this->isScenarioMatch($scenario)) { + continue; + } + + $scenarios[] = $scenario; + } + + return new FeatureNode( + $feature->getTitle(), + $feature->getDescription(), + $feature->getTags(), + $feature->getBackground(), + $scenarios, + $feature->getKeyword(), + $feature->getLanguage(), + $feature->getFile(), + $feature->getLine() + ); + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Filter/TagFilter.php b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/TagFilter.php new file mode 100644 index 000000000..fed6c1afd --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Filter/TagFilter.php @@ -0,0 +1,90 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Filter; + +use Behat\Gherkin\Node\FeatureNode; +use Behat\Gherkin\Node\ScenarioInterface; + +/** + * Filters scenarios by feature/scenario tag. + * + * @author Konstantin Kudryashov + */ +class TagFilter extends ComplexFilter +{ + protected $filterString; + + /** + * Initializes filter. + * + * @param string $filterString Name filter string + */ + public function __construct($filterString) + { + $this->filterString = trim($filterString); + } + + /** + * Checks if Feature matches specified filter. + * + * @param FeatureNode $feature Feature instance + * + * @return Boolean + */ + public function isFeatureMatch(FeatureNode $feature) + { + return $this->isTagsMatchCondition($feature->getTags()); + } + + /** + * Checks if scenario or outline matches specified filter. + * + * @param FeatureNode $feature Feature node instance + * @param ScenarioInterface $scenario Scenario or Outline node instance + * + * @return Boolean + */ + public function isScenarioMatch(FeatureNode $feature, ScenarioInterface $scenario) + { + return $this->isTagsMatchCondition(array_merge($feature->getTags(), $scenario->getTags())); + } + + /** + * Checks that node matches condition. + * + * @param string[] $tags + * + * @return Boolean + */ + protected function isTagsMatchCondition($tags) + { + $satisfies = true; + + foreach (explode('&&', $this->filterString) as $andTags) { + $satisfiesComma = false; + + foreach (explode(',', $andTags) as $tag) { + $tag = str_replace('@', '', trim($tag)); + + if ('~' === $tag[0]) { + $tag = mb_substr($tag, 1, mb_strlen($tag, 'utf8') - 1, 'utf8'); + $satisfiesComma = !in_array($tag, $tags) || $satisfiesComma; + } else { + $satisfiesComma = in_array($tag, $tags) || $satisfiesComma; + } + } + + $satisfies = (false !== $satisfiesComma && $satisfies && $satisfiesComma) || false; + } + + return $satisfies; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Gherkin.php b/vendor/behat/gherkin/src/Behat/Gherkin/Gherkin.php new file mode 100644 index 000000000..e457cd873 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Gherkin.php @@ -0,0 +1,142 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin; + +use Behat\Gherkin\Filter\FeatureFilterInterface; +use Behat\Gherkin\Filter\LineFilter; +use Behat\Gherkin\Filter\LineRangeFilter; +use Behat\Gherkin\Loader\FileLoaderInterface; +use Behat\Gherkin\Loader\LoaderInterface; + +/** + * Gherkin manager. + * + * @author Konstantin Kudryashov + */ +class Gherkin +{ + const VERSION = '4.4-dev'; + + /** + * @var LoaderInterface[] + */ + protected $loaders = array(); + /** + * @var FeatureFilterInterface[] + */ + protected $filters = array(); + + /** + * Adds loader to manager. + * + * @param LoaderInterface $loader Feature loader + */ + public function addLoader(LoaderInterface $loader) + { + $this->loaders[] = $loader; + } + + /** + * Adds filter to manager. + * + * @param FeatureFilterInterface $filter Feature filter + */ + public function addFilter(FeatureFilterInterface $filter) + { + $this->filters[] = $filter; + } + + /** + * Sets filters to the parser. + * + * @param FeatureFilterInterface[] $filters + */ + public function setFilters(array $filters) + { + $this->filters = array(); + array_map(array($this, 'addFilter'), $filters); + } + + /** + * Sets base features path. + * + * @param string $path Loaders base path + */ + public function setBasePath($path) + { + foreach ($this->loaders as $loader) { + if ($loader instanceof FileLoaderInterface) { + $loader->setBasePath($path); + } + } + } + + /** + * Loads & filters resource with added loaders. + * + * @param mixed $resource Resource to load + * @param FeatureFilterInterface[] $filters Additional filters + * + * @return array + */ + public function load($resource, array $filters = array()) + { + $filters = array_merge($this->filters, $filters); + + $matches = array(); + if (preg_match('/^(.*)\:(\d+)-(\d+|\*)$/', $resource, $matches)) { + $resource = $matches[1]; + $filters[] = new LineRangeFilter($matches[2], $matches[3]); + } elseif (preg_match('/^(.*)\:(\d+)$/', $resource, $matches)) { + $resource = $matches[1]; + $filters[] = new LineFilter($matches[2]); + } + + $loader = $this->resolveLoader($resource); + + if (null === $loader) { + return array(); + } + + $features = array(); + foreach ($loader->load($resource) as $feature) { + foreach ($filters as $filter) { + $feature = $filter->filterFeature($feature); + + if (!$feature->hasScenarios() && !$filter->isFeatureMatch($feature)) { + continue 2; + } + } + + $features[] = $feature; + } + + return $features; + } + + /** + * Resolves loader by resource. + * + * @param mixed $resource Resource to load + * + * @return LoaderInterface + */ + public function resolveLoader($resource) + { + foreach ($this->loaders as $loader) { + if ($loader->supports($resource)) { + return $loader; + } + } + + return null; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Keywords/ArrayKeywords.php b/vendor/behat/gherkin/src/Behat/Gherkin/Keywords/ArrayKeywords.php new file mode 100644 index 000000000..35b9b821a --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Keywords/ArrayKeywords.php @@ -0,0 +1,200 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Keywords; + +/** + * Array initializable keywords holder. + * + * $keywords = new Behat\Gherkin\Keywords\ArrayKeywords(array( + * 'en' => array( + * 'feature' => 'Feature', + * 'background' => 'Background', + * 'scenario' => 'Scenario', + * 'scenario_outline' => 'Scenario Outline|Scenario Template', + * 'examples' => 'Examples|Scenarios', + * 'given' => 'Given', + * 'when' => 'When', + * 'then' => 'Then', + * 'and' => 'And', + * 'but' => 'But' + * ), + * 'ru' => array( + * 'feature' => 'Функционал', + * 'background' => 'ПредыÑториÑ', + * 'scenario' => 'Сценарий', + * 'scenario_outline' => 'Структура ÑценариÑ', + * 'examples' => 'ЗначениÑ', + * 'given' => 'ДопуÑтим', + * 'when' => 'ЕÑли', + * 'then' => 'То', + * 'and' => 'И', + * 'but' => 'Ðо' + * ) + * )); + * + * @author Konstantin Kudryashov + */ +class ArrayKeywords implements KeywordsInterface +{ + private $keywords = array(); + private $keywordString = array(); + private $language; + + /** + * Initializes holder with keywords. + * + * @param array $keywords Keywords array + */ + public function __construct(array $keywords) + { + $this->keywords = $keywords; + } + + /** + * Sets keywords holder language. + * + * @param string $language Language name + */ + public function setLanguage($language) + { + if (!isset($this->keywords[$language])) { + $this->language = 'en'; + } else { + $this->language = $language; + } + } + + /** + * Returns Feature keywords (splitted by "|"). + * + * @return string + */ + public function getFeatureKeywords() + { + return $this->keywords[$this->language]['feature']; + } + + /** + * Returns Background keywords (splitted by "|"). + * + * @return string + */ + public function getBackgroundKeywords() + { + return $this->keywords[$this->language]['background']; + } + + /** + * Returns Scenario keywords (splitted by "|"). + * + * @return string + */ + public function getScenarioKeywords() + { + return $this->keywords[$this->language]['scenario']; + } + + /** + * Returns Scenario Outline keywords (splitted by "|"). + * + * @return string + */ + public function getOutlineKeywords() + { + return $this->keywords[$this->language]['scenario_outline']; + } + + /** + * Returns Examples keywords (splitted by "|"). + * + * @return string + */ + public function getExamplesKeywords() + { + return $this->keywords[$this->language]['examples']; + } + + /** + * Returns Given keywords (splitted by "|"). + * + * @return string + */ + public function getGivenKeywords() + { + return $this->keywords[$this->language]['given']; + } + + /** + * Returns When keywords (splitted by "|"). + * + * @return string + */ + public function getWhenKeywords() + { + return $this->keywords[$this->language]['when']; + } + + /** + * Returns Then keywords (splitted by "|"). + * + * @return string + */ + public function getThenKeywords() + { + return $this->keywords[$this->language]['then']; + } + + /** + * Returns And keywords (splitted by "|"). + * + * @return string + */ + public function getAndKeywords() + { + return $this->keywords[$this->language]['and']; + } + + /** + * Returns But keywords (splitted by "|"). + * + * @return string + */ + public function getButKeywords() + { + return $this->keywords[$this->language]['but']; + } + + /** + * Returns all step keywords (Given, When, Then, And, But). + * + * @return string + */ + public function getStepKeywords() + { + if (!isset($this->keywordString[$this->language])) { + $keywords = array_merge( + explode('|', $this->getGivenKeywords()), + explode('|', $this->getWhenKeywords()), + explode('|', $this->getThenKeywords()), + explode('|', $this->getAndKeywords()), + explode('|', $this->getButKeywords()) + ); + + usort($keywords, function ($keyword1, $keyword2) { + return mb_strlen($keyword2, 'utf8') - mb_strlen($keyword1, 'utf8'); + }); + + $this->keywordString[$this->language] = implode('|', $keywords); + } + + return $this->keywordString[$this->language]; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Keywords/CachedArrayKeywords.php b/vendor/behat/gherkin/src/Behat/Gherkin/Keywords/CachedArrayKeywords.php new file mode 100644 index 000000000..871f196f4 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Keywords/CachedArrayKeywords.php @@ -0,0 +1,31 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Keywords; + +/** + * File initializable keywords holder. + * + * $keywords = new Behat\Gherkin\Keywords\CachedArrayKeywords($file); + * + * @author Konstantin Kudryashov + */ +class CachedArrayKeywords extends ArrayKeywords +{ + /** + * Initializes holder with file. + * + * @param string $file Cached array path + */ + public function __construct($file) + { + parent::__construct(include($file)); + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Keywords/CucumberKeywords.php b/vendor/behat/gherkin/src/Behat/Gherkin/Keywords/CucumberKeywords.php new file mode 100644 index 000000000..2a5439677 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Keywords/CucumberKeywords.php @@ -0,0 +1,121 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Keywords; + +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Yaml; + +/** + * Cucumber-translations reader. + * + * $keywords = new Behat\Gherkin\Keywords\CucumberKeywords($i18nYmlPath); + * + * @author Konstantin Kudryashov + */ +class CucumberKeywords extends ArrayKeywords +{ + /** + * Initializes holder with yaml string OR file. + * + * @param string $yaml Yaml string or file path + */ + public function __construct($yaml) + { + // Handle filename explicitly for BC reasons, as Symfony Yaml 3.0 does not do it anymore + $file = null; + if (strpos($yaml, "\n") === false && is_file($yaml)) { + if (false === is_readable($yaml)) { + throw new ParseException(sprintf('Unable to parse "%s" as the file is not readable.', $yaml)); + } + + $file = $yaml; + $yaml = file_get_contents($file); + } + + try { + $content = Yaml::parse($yaml); + } catch (ParseException $e) { + if ($file) { + $e->setParsedFile($file); + } + + throw $e; + } + + parent::__construct($content); + } + + /** + * Returns Feature keywords (splitted by "|"). + * + * @return string + */ + public function getGivenKeywords() + { + return $this->prepareStepString(parent::getGivenKeywords()); + } + + /** + * Returns When keywords (splitted by "|"). + * + * @return string + */ + public function getWhenKeywords() + { + return $this->prepareStepString(parent::getWhenKeywords()); + } + + /** + * Returns Then keywords (splitted by "|"). + * + * @return string + */ + public function getThenKeywords() + { + return $this->prepareStepString(parent::getThenKeywords()); + } + + /** + * Returns And keywords (splitted by "|"). + * + * @return string + */ + public function getAndKeywords() + { + return $this->prepareStepString(parent::getAndKeywords()); + } + + /** + * Returns But keywords (splitted by "|"). + * + * @return string + */ + public function getButKeywords() + { + return $this->prepareStepString(parent::getButKeywords()); + } + + /** + * Trim *| from the begining of the list. + * + * @param string $keywordsString Keywords string + * + * @return string + */ + private function prepareStepString($keywordsString) + { + if (0 === mb_strpos($keywordsString, '*|', 0, 'UTF-8')) { + $keywordsString = mb_substr($keywordsString, 2, mb_strlen($keywordsString, 'utf8') - 2, 'utf8'); + } + + return $keywordsString; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Keywords/KeywordsDumper.php b/vendor/behat/gherkin/src/Behat/Gherkin/Keywords/KeywordsDumper.php new file mode 100644 index 000000000..fcd9769ba --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Keywords/KeywordsDumper.php @@ -0,0 +1,365 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Keywords; + +/** + * Gherkin keywords dumper. + * + * @author Konstantin Kudryashov + */ +class KeywordsDumper +{ + private $keywords; + private $keywordsDumper; + + /** + * Initializes dumper. + * + * @param KeywordsInterface $keywords Keywords instance + */ + public function __construct(KeywordsInterface $keywords) + { + $this->keywords = $keywords; + $this->keywordsDumper = array($this, 'dumpKeywords'); + } + + /** + * Sets keywords mapper function. + * + * Callable should accept 2 arguments (array $keywords and Boolean $isShort) + * + * @param callable $mapper Mapper function + */ + public function setKeywordsDumperFunction($mapper) + { + $this->keywordsDumper = $mapper; + } + + /** + * Defaults keywords dumper. + * + * @param array $keywords Keywords list + * @param Boolean $isShort Is short version + * + * @return string + */ + public function dumpKeywords(array $keywords, $isShort) + { + if ($isShort) { + return 1 < count($keywords) ? '(' . implode('|', $keywords) . ')' : $keywords[0]; + } + + return $keywords[0]; + } + + /** + * Dumps keyworded feature into string. + * + * @param string $language Keywords language + * @param Boolean $short Dump short version + * @param bool $excludeAsterisk + * + * @return string|array String for short version and array of features for extended + */ + public function dump($language, $short = true, $excludeAsterisk = false) + { + $this->keywords->setLanguage($language); + $languageComment = ''; + if ('en' !== $language) { + $languageComment = "# language: $language\n"; + } + + $keywords = explode('|', $this->keywords->getFeatureKeywords()); + + if ($short) { + $keywords = call_user_func($this->keywordsDumper, $keywords, $short); + + return trim($languageComment . $this->dumpFeature($keywords, $short, $excludeAsterisk)); + } + + $features = array(); + foreach ($keywords as $keyword) { + $keyword = call_user_func($this->keywordsDumper, array($keyword), $short); + $features[] = trim($languageComment . $this->dumpFeature($keyword, $short, $excludeAsterisk)); + } + + return $features; + } + + /** + * Dumps feature example. + * + * @param string $keyword Item keyword + * @param Boolean $short Dump short version? + * + * @return string + */ + protected function dumpFeature($keyword, $short = true, $excludeAsterisk = false) + { + $dump = <<keywords->getBackgroundKeywords()); + if ($short) { + $keywords = call_user_func($this->keywordsDumper, $keywords, $short); + $dump .= $this->dumpBackground($keywords, $short, $excludeAsterisk); + } else { + $keyword = call_user_func($this->keywordsDumper, array($keywords[0]), $short); + $dump .= $this->dumpBackground($keyword, $short, $excludeAsterisk); + } + + // Scenario + $keywords = explode('|', $this->keywords->getScenarioKeywords()); + if ($short) { + $keywords = call_user_func($this->keywordsDumper, $keywords, $short); + $dump .= $this->dumpScenario($keywords, $short, $excludeAsterisk); + } else { + foreach ($keywords as $keyword) { + $keyword = call_user_func($this->keywordsDumper, array($keyword), $short); + $dump .= $this->dumpScenario($keyword, $short, $excludeAsterisk); + } + } + + // Outline + $keywords = explode('|', $this->keywords->getOutlineKeywords()); + if ($short) { + $keywords = call_user_func($this->keywordsDumper, $keywords, $short); + $dump .= $this->dumpOutline($keywords, $short, $excludeAsterisk); + } else { + foreach ($keywords as $keyword) { + $keyword = call_user_func($this->keywordsDumper, array($keyword), $short); + $dump .= $this->dumpOutline($keyword, $short, $excludeAsterisk); + } + } + + return $dump; + } + + /** + * Dumps background example. + * + * @param string $keyword Item keyword + * @param Boolean $short Dump short version? + * + * @return string + */ + protected function dumpBackground($keyword, $short = true, $excludeAsterisk = false) + { + $dump = <<dumpStep( + $this->keywords->getGivenKeywords(), + 'there is agent A', + $short, + $excludeAsterisk + ); + + // And + $dump .= $this->dumpStep( + $this->keywords->getAndKeywords(), + 'there is agent B', + $short, + $excludeAsterisk + ); + + return $dump . "\n"; + } + + /** + * Dumps scenario example. + * + * @param string $keyword Item keyword + * @param Boolean $short Dump short version? + * + * @return string + */ + protected function dumpScenario($keyword, $short = true, $excludeAsterisk = false) + { + $dump = <<dumpStep( + $this->keywords->getGivenKeywords(), + 'there is agent J', + $short, + $excludeAsterisk + ); + + // And + $dump .= $this->dumpStep( + $this->keywords->getAndKeywords(), + 'there is agent K', + $short, + $excludeAsterisk + ); + + // When + $dump .= $this->dumpStep( + $this->keywords->getWhenKeywords(), + 'I erase agent K\'s memory', + $short, + $excludeAsterisk + ); + + // Then + $dump .= $this->dumpStep( + $this->keywords->getThenKeywords(), + 'there should be agent J', + $short, + $excludeAsterisk + ); + + // But + $dump .= $this->dumpStep( + $this->keywords->getButKeywords(), + 'there should not be agent K', + $short, + $excludeAsterisk + ); + + return $dump . "\n"; + } + + /** + * Dumps outline example. + * + * @param string $keyword Item keyword + * @param Boolean $short Dump short version? + * + * @return string + */ + protected function dumpOutline($keyword, $short = true, $excludeAsterisk = false) + { + $dump = <<dumpStep( + $this->keywords->getGivenKeywords(), + 'there is agent ', + $short, + $excludeAsterisk + ); + + // And + $dump .= $this->dumpStep( + $this->keywords->getAndKeywords(), + 'there is agent ', + $short, + $excludeAsterisk + ); + + // When + $dump .= $this->dumpStep( + $this->keywords->getWhenKeywords(), + 'I erase agent \'s memory', + $short, + $excludeAsterisk + ); + + // Then + $dump .= $this->dumpStep( + $this->keywords->getThenKeywords(), + 'there should be agent ', + $short, + $excludeAsterisk + ); + + // But + $dump .= $this->dumpStep( + $this->keywords->getButKeywords(), + 'there should not be agent ', + $short, + $excludeAsterisk + ); + + $keywords = explode('|', $this->keywords->getExamplesKeywords()); + if ($short) { + $keyword = call_user_func($this->keywordsDumper, $keywords, $short); + } else { + $keyword = call_user_func($this->keywordsDumper, array($keywords[0]), $short); + } + + $dump .= <<keywordsDumper, $keywords, $short); + $dump .= <<keywordsDumper, array($keyword), $short); + $dump .= << + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Keywords; + +/** + * Keywords holder interface. + * + * @author Konstantin Kudryashov + */ +interface KeywordsInterface +{ + /** + * Sets keywords holder language. + * + * @param string $language Language name + */ + public function setLanguage($language); + + /** + * Returns Feature keywords (splitted by "|"). + * + * @return string + */ + public function getFeatureKeywords(); + + /** + * Returns Background keywords (splitted by "|"). + * + * @return string + */ + public function getBackgroundKeywords(); + + /** + * Returns Scenario keywords (splitted by "|"). + * + * @return string + */ + public function getScenarioKeywords(); + + /** + * Returns Scenario Outline keywords (splitted by "|"). + * + * @return string + */ + public function getOutlineKeywords(); + + /** + * Returns Examples keywords (splitted by "|"). + * + * @return string + */ + public function getExamplesKeywords(); + + /** + * Returns Given keywords (splitted by "|"). + * + * @return string + */ + public function getGivenKeywords(); + + /** + * Returns When keywords (splitted by "|"). + * + * @return string + */ + public function getWhenKeywords(); + + /** + * Returns Then keywords (splitted by "|"). + * + * @return string + */ + public function getThenKeywords(); + + /** + * Returns And keywords (splitted by "|"). + * + * @return string + */ + public function getAndKeywords(); + + /** + * Returns But keywords (splitted by "|"). + * + * @return string + */ + public function getButKeywords(); + + /** + * Returns all step keywords (splitted by "|"). + * + * @return string + */ + public function getStepKeywords(); +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Lexer.php b/vendor/behat/gherkin/src/Behat/Gherkin/Lexer.php new file mode 100644 index 000000000..446d462c9 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Lexer.php @@ -0,0 +1,614 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin; + +use Behat\Gherkin\Exception\LexerException; +use Behat\Gherkin\Keywords\KeywordsInterface; + +/** + * Gherkin lexer. + * + * @author Konstantin Kudryashov + */ +class Lexer +{ + private $language; + private $lines; + private $linesCount; + private $line; + private $trimmedLine; + private $lineNumber; + private $eos; + private $keywords; + private $keywordsCache = array(); + private $stepKeywordTypesCache = array(); + private $deferredObjects = array(); + private $deferredObjectsCount = 0; + private $stashedToken; + private $inPyString = false; + private $pyStringSwallow = 0; + private $featureStarted = false; + private $allowMultilineArguments = false; + private $allowSteps = false; + + /** + * Initializes lexer. + * + * @param KeywordsInterface $keywords Keywords holder + */ + public function __construct(KeywordsInterface $keywords) + { + $this->keywords = $keywords; + } + + /** + * Sets lexer input. + * + * @param string $input Input string + * @param string $language Language name + * + * @throws Exception\LexerException + */ + public function analyse($input, $language = 'en') + { + // try to detect unsupported encoding + if ('UTF-8' !== mb_detect_encoding($input, 'UTF-8', true)) { + throw new LexerException('Feature file is not in UTF8 encoding'); + } + + $input = strtr($input, array("\r\n" => "\n", "\r" => "\n")); + + $this->lines = explode("\n", $input); + $this->linesCount = count($this->lines); + $this->line = $this->lines[0]; + $this->lineNumber = 1; + $this->trimmedLine = null; + $this->eos = false; + + $this->deferredObjects = array(); + $this->deferredObjectsCount = 0; + $this->stashedToken = null; + $this->inPyString = false; + $this->pyStringSwallow = 0; + + $this->featureStarted = false; + $this->allowMultilineArguments = false; + $this->allowSteps = false; + + $this->keywords->setLanguage($this->language = $language); + $this->keywordsCache = array(); + $this->stepKeywordTypesCache = array(); + } + + /** + * Returns current lexer language. + * + * @return string + */ + public function getLanguage() + { + return $this->language; + } + + /** + * Returns next token or previously stashed one. + * + * @return array + */ + public function getAdvancedToken() + { + return $this->getStashedToken() ?: $this->getNextToken(); + } + + /** + * Defers token. + * + * @param array $token Token to defer + */ + public function deferToken(array $token) + { + $token['deferred'] = true; + $this->deferredObjects[] = $token; + ++$this->deferredObjectsCount; + } + + /** + * Predicts for number of tokens. + * + * @return array + */ + public function predictToken() + { + if (null === $this->stashedToken) { + $this->stashedToken = $this->getNextToken(); + } + + return $this->stashedToken; + } + + /** + * Constructs token with specified parameters. + * + * @param string $type Token type + * @param string $value Token value + * + * @return array + */ + public function takeToken($type, $value = null) + { + return array( + 'type' => $type, + 'line' => $this->lineNumber, + 'value' => $value ?: null, + 'deferred' => false + ); + } + + /** + * Consumes line from input & increments line counter. + */ + protected function consumeLine() + { + ++$this->lineNumber; + + if (($this->lineNumber - 1) === $this->linesCount) { + $this->eos = true; + + return; + } + + $this->line = $this->lines[$this->lineNumber - 1]; + $this->trimmedLine = null; + } + + /** + * Returns trimmed version of line. + * + * @return string + */ + protected function getTrimmedLine() + { + return null !== $this->trimmedLine ? $this->trimmedLine : $this->trimmedLine = trim($this->line); + } + + /** + * Returns stashed token or null if hasn't. + * + * @return array|null + */ + protected function getStashedToken() + { + $stashedToken = $this->stashedToken; + $this->stashedToken = null; + + return $stashedToken; + } + + /** + * Returns deferred token or null if hasn't. + * + * @return array|null + */ + protected function getDeferredToken() + { + if (!$this->deferredObjectsCount) { + return null; + } + + --$this->deferredObjectsCount; + + return array_shift($this->deferredObjects); + } + + /** + * Returns next token from input. + * + * @return array + */ + protected function getNextToken() + { + return $this->getDeferredToken() + ?: $this->scanEOS() + ?: $this->scanLanguage() + ?: $this->scanComment() + ?: $this->scanPyStringOp() + ?: $this->scanPyStringContent() + ?: $this->scanStep() + ?: $this->scanScenario() + ?: $this->scanBackground() + ?: $this->scanOutline() + ?: $this->scanExamples() + ?: $this->scanFeature() + ?: $this->scanTags() + ?: $this->scanTableRow() + ?: $this->scanNewline() + ?: $this->scanText(); + } + + /** + * Scans for token with specified regex. + * + * @param string $regex Regular expression + * @param string $type Expected token type + * + * @return null|array + */ + protected function scanInput($regex, $type) + { + if (!preg_match($regex, $this->line, $matches)) { + return null; + } + + $token = $this->takeToken($type, $matches[1]); + $this->consumeLine(); + + return $token; + } + + /** + * Scans for token with specified keywords. + * + * @param string $keywords Keywords (splitted with |) + * @param string $type Expected token type + * + * @return null|array + */ + protected function scanInputForKeywords($keywords, $type) + { + if (!preg_match('/^(\s*)(' . $keywords . '):\s*(.*)/u', $this->line, $matches)) { + return null; + } + + $token = $this->takeToken($type, $matches[3]); + $token['keyword'] = $matches[2]; + $token['indent'] = mb_strlen($matches[1], 'utf8'); + + $this->consumeLine(); + + // turn off language searching + if ('Feature' === $type) { + $this->featureStarted = true; + } + + // turn off PyString and Table searching + if ('Feature' === $type || 'Scenario' === $type || 'Outline' === $type) { + $this->allowMultilineArguments = false; + } elseif ('Examples' === $type) { + $this->allowMultilineArguments = true; + } + + // turn on steps searching + if ('Scenario' === $type || 'Background' === $type || 'Outline' === $type) { + $this->allowSteps = true; + } + + return $token; + } + + /** + * Scans EOS from input & returns it if found. + * + * @return null|array + */ + protected function scanEOS() + { + if (!$this->eos) { + return null; + } + + return $this->takeToken('EOS'); + } + + /** + * Returns keywords for provided type. + * + * @param string $type Keyword type + * + * @return string + */ + protected function getKeywords($type) + { + if (!isset($this->keywordsCache[$type])) { + $getter = 'get' . $type . 'Keywords'; + $keywords = $this->keywords->$getter(); + + if ('Step' === $type) { + $padded = array(); + foreach (explode('|', $keywords) as $keyword) { + $padded[] = false !== mb_strpos($keyword, '<', 0, 'utf8') + ? preg_quote(mb_substr($keyword, 0, -1, 'utf8'), '/') . '\s*' + : preg_quote($keyword, '/') . '\s+'; + } + + $keywords = implode('|', $padded); + } + + $this->keywordsCache[$type] = $keywords; + } + + return $this->keywordsCache[$type]; + } + + /** + * Scans Feature from input & returns it if found. + * + * @return null|array + */ + protected function scanFeature() + { + return $this->scanInputForKeywords($this->getKeywords('Feature'), 'Feature'); + } + + /** + * Scans Background from input & returns it if found. + * + * @return null|array + */ + protected function scanBackground() + { + return $this->scanInputForKeywords($this->getKeywords('Background'), 'Background'); + } + + /** + * Scans Scenario from input & returns it if found. + * + * @return null|array + */ + protected function scanScenario() + { + return $this->scanInputForKeywords($this->getKeywords('Scenario'), 'Scenario'); + } + + /** + * Scans Scenario Outline from input & returns it if found. + * + * @return null|array + */ + protected function scanOutline() + { + return $this->scanInputForKeywords($this->getKeywords('Outline'), 'Outline'); + } + + /** + * Scans Scenario Outline Examples from input & returns it if found. + * + * @return null|array + */ + protected function scanExamples() + { + return $this->scanInputForKeywords($this->getKeywords('Examples'), 'Examples'); + } + + /** + * Scans Step from input & returns it if found. + * + * @return null|array + */ + protected function scanStep() + { + if (!$this->allowSteps) { + return null; + } + + $keywords = $this->getKeywords('Step'); + if (!preg_match('/^\s*(' . $keywords . ')([^\s].+)/u', $this->line, $matches)) { + return null; + } + + $keyword = trim($matches[1]); + $token = $this->takeToken('Step', $keyword); + $token['keyword_type'] = $this->getStepKeywordType($keyword); + $token['text'] = $matches[2]; + + $this->consumeLine(); + $this->allowMultilineArguments = true; + + return $token; + } + + /** + * Scans PyString from input & returns it if found. + * + * @return null|array + */ + protected function scanPyStringOp() + { + if (!$this->allowMultilineArguments) { + return null; + } + + if (false === ($pos = mb_strpos($this->line, '"""', 0, 'utf8'))) { + return null; + } + + $this->inPyString = !$this->inPyString; + $token = $this->takeToken('PyStringOp'); + $this->pyStringSwallow = $pos; + + $this->consumeLine(); + + return $token; + } + + /** + * Scans PyString content. + * + * @return null|array + */ + protected function scanPyStringContent() + { + if (!$this->inPyString) { + return null; + } + + $token = $this->scanText(); + // swallow trailing spaces + $token['value'] = preg_replace('/^\s{0,' . $this->pyStringSwallow . '}/u', '', $token['value']); + + return $token; + } + + /** + * Scans Table Row from input & returns it if found. + * + * @return null|array + */ + protected function scanTableRow() + { + if (!$this->allowMultilineArguments) { + return null; + } + + $line = $this->getTrimmedLine(); + if (!isset($line[0]) || '|' !== $line[0] || '|' !== substr($line, -1)) { + return null; + } + + $token = $this->takeToken('TableRow'); + $line = mb_substr($line, 1, mb_strlen($line, 'utf8') - 2, 'utf8'); + $columns = array_map(function ($column) { + return trim(str_replace('\\|', '|', $column)); + }, preg_split('/(?consumeLine(); + + return $token; + } + + /** + * Scans Tags from input & returns it if found. + * + * @return null|array + */ + protected function scanTags() + { + $line = $this->getTrimmedLine(); + if (!isset($line[0]) || '@' !== $line[0]) { + return null; + } + + $token = $this->takeToken('Tag'); + $tags = explode('@', mb_substr($line, 1, mb_strlen($line, 'utf8') - 1, 'utf8')); + $tags = array_map('trim', $tags); + $token['tags'] = $tags; + + $this->consumeLine(); + + return $token; + } + + /** + * Scans Language specifier from input & returns it if found. + * + * @return null|array + */ + protected function scanLanguage() + { + if ($this->featureStarted) { + return null; + } + + if ($this->inPyString) { + return null; + } + + if (0 !== mb_strpos(ltrim($this->line), '#', 0, 'utf8')) { + return null; + } + + return $this->scanInput('/^\s*\#\s*language:\s*([\w_\-]+)\s*$/', 'Language'); + } + + /** + * Scans Comment from input & returns it if found. + * + * @return null|array + */ + protected function scanComment() + { + if ($this->inPyString) { + return null; + } + + $line = $this->getTrimmedLine(); + if (0 !== mb_strpos($line, '#', 0, 'utf8')) { + return null; + } + + $token = $this->takeToken('Comment', $line); + $this->consumeLine(); + + return $token; + } + + /** + * Scans Newline from input & returns it if found. + * + * @return null|array + */ + protected function scanNewline() + { + if ('' !== $this->getTrimmedLine()) { + return null; + } + + $token = $this->takeToken('Newline', mb_strlen($this->line, 'utf8')); + $this->consumeLine(); + + return $token; + } + + /** + * Scans text from input & returns it if found. + * + * @return null|array + */ + protected function scanText() + { + $token = $this->takeToken('Text', $this->line); + $this->consumeLine(); + + return $token; + } + + /** + * Returns step type keyword (Given, When, Then, etc.). + * + * @param string $native Step keyword in provided language + * @return string + */ + private function getStepKeywordType($native) + { + // Consider "*" as a AND keyword so that it is normalized to the previous step type + if ('*' === $native) { + return 'And'; + } + + if (empty($this->stepKeywordTypesCache)) { + $this->stepKeywordTypesCache = array( + 'Given' => explode('|', $this->keywords->getGivenKeywords()), + 'When' => explode('|', $this->keywords->getWhenKeywords()), + 'Then' => explode('|', $this->keywords->getThenKeywords()), + 'And' => explode('|', $this->keywords->getAndKeywords()), + 'But' => explode('|', $this->keywords->getButKeywords()) + ); + } + + foreach ($this->stepKeywordTypesCache as $type => $keywords) { + if (in_array($native, $keywords) || in_array($native . '<', $keywords)) { + return $type; + } + } + + return 'Given'; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Loader/AbstractFileLoader.php b/vendor/behat/gherkin/src/Behat/Gherkin/Loader/AbstractFileLoader.php new file mode 100644 index 000000000..20932c129 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Loader/AbstractFileLoader.php @@ -0,0 +1,72 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Loader; + +/** + * Abstract filesystem loader. + * + * @author Konstantin Kudryashov + */ +abstract class AbstractFileLoader implements FileLoaderInterface +{ + protected $basePath; + + /** + * Sets base features path. + * + * @param string $path Base loader path + */ + public function setBasePath($path) + { + $this->basePath = realpath($path); + } + + /** + * Finds relative path for provided absolute (relative to base features path). + * + * @param string $path Absolute path + * + * @return string + */ + protected function findRelativePath($path) + { + if (null !== $this->basePath) { + return strtr($path, array($this->basePath . DIRECTORY_SEPARATOR => '')); + } + + return $path; + } + + /** + * Finds absolute path for provided relative (relative to base features path). + * + * @param string $path Relative path + * + * @return string + */ + protected function findAbsolutePath($path) + { + if (is_file($path) || is_dir($path)) { + return realpath($path); + } + + if (null === $this->basePath) { + return false; + } + + if (is_file($this->basePath . DIRECTORY_SEPARATOR . $path) + || is_dir($this->basePath . DIRECTORY_SEPARATOR . $path)) { + return realpath($this->basePath . DIRECTORY_SEPARATOR . $path); + } + + return false; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Loader/ArrayLoader.php b/vendor/behat/gherkin/src/Behat/Gherkin/Loader/ArrayLoader.php new file mode 100644 index 000000000..3492d6e6a --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Loader/ArrayLoader.php @@ -0,0 +1,269 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Loader; + +use Behat\Gherkin\Node\BackgroundNode; +use Behat\Gherkin\Node\ExampleTableNode; +use Behat\Gherkin\Node\FeatureNode; +use Behat\Gherkin\Node\OutlineNode; +use Behat\Gherkin\Node\PyStringNode; +use Behat\Gherkin\Node\ScenarioNode; +use Behat\Gherkin\Node\StepNode; +use Behat\Gherkin\Node\TableNode; + +/** + * From-array loader. + * + * @author Konstantin Kudryashov + */ +class ArrayLoader implements LoaderInterface +{ + /** + * Checks if current loader supports provided resource. + * + * @param mixed $resource Resource to load + * + * @return Boolean + */ + public function supports($resource) + { + return is_array($resource) && (isset($resource['features']) || isset($resource['feature'])); + } + + /** + * Loads features from provided resource. + * + * @param mixed $resource Resource to load + * + * @return FeatureNode[] + */ + public function load($resource) + { + $features = array(); + + if (isset($resource['features'])) { + foreach ($resource['features'] as $iterator => $hash) { + $feature = $this->loadFeatureHash($hash, $iterator); + $features[] = $feature; + } + } elseif (isset($resource['feature'])) { + $feature = $this->loadFeatureHash($resource['feature']); + $features[] = $feature; + } + + return $features; + } + + /** + * Loads feature from provided feature hash. + * + * @param array $hash Feature hash + * @param integer $line + * + * @return FeatureNode + */ + protected function loadFeatureHash(array $hash, $line = 0) + { + $hash = array_merge( + array( + 'title' => null, + 'description' => null, + 'tags' => array(), + 'keyword' => 'Feature', + 'language' => 'en', + 'line' => $line, + 'scenarios' => array(), + ), + $hash + ); + $background = isset($hash['background']) ? $this->loadBackgroundHash($hash['background']) : null; + + $scenarios = array(); + foreach ((array) $hash['scenarios'] as $scenarioIterator => $scenarioHash) { + if (isset($scenarioHash['type']) && 'outline' === $scenarioHash['type']) { + $scenarios[] = $this->loadOutlineHash($scenarioHash, $scenarioIterator); + } else { + $scenarios[] = $this->loadScenarioHash($scenarioHash, $scenarioIterator); + } + } + + return new FeatureNode($hash['title'], $hash['description'], $hash['tags'], $background, $scenarios, $hash['keyword'], $hash['language'], null, $hash['line']); + } + + /** + * Loads background from provided hash. + * + * @param array $hash Background hash + * + * @return BackgroundNode + */ + protected function loadBackgroundHash(array $hash) + { + $hash = array_merge( + array( + 'title' => null, + 'keyword' => 'Background', + 'line' => 0, + 'steps' => array(), + ), + $hash + ); + + $steps = $this->loadStepsHash($hash['steps']); + + return new BackgroundNode($hash['title'], $steps, $hash['keyword'], $hash['line']); + } + + /** + * Loads scenario from provided scenario hash. + * + * @param array $hash Scenario hash + * @param integer $line Scenario definition line + * + * @return ScenarioNode + */ + protected function loadScenarioHash(array $hash, $line = 0) + { + $hash = array_merge( + array( + 'title' => null, + 'tags' => array(), + 'keyword' => 'Scenario', + 'line' => $line, + 'steps' => array(), + ), + $hash + ); + + $steps = $this->loadStepsHash($hash['steps']); + + return new ScenarioNode($hash['title'], $hash['tags'], $steps, $hash['keyword'], $hash['line']); + } + + /** + * Loads outline from provided outline hash. + * + * @param array $hash Outline hash + * @param integer $line Outline definition line + * + * @return OutlineNode + */ + protected function loadOutlineHash(array $hash, $line = 0) + { + $hash = array_merge( + array( + 'title' => null, + 'tags' => array(), + 'keyword' => 'Scenario Outline', + 'line' => $line, + 'steps' => array(), + 'examples' => array(), + ), + $hash + ); + + $steps = $this->loadStepsHash($hash['steps']); + + if (isset($hash['examples']['keyword'])) { + $examplesKeyword = $hash['examples']['keyword']; + unset($hash['examples']['keyword']); + } else { + $examplesKeyword = 'Examples'; + } + + $examples = new ExampleTableNode($hash['examples'], $examplesKeyword); + + return new OutlineNode($hash['title'], $hash['tags'], $steps, $examples, $hash['keyword'], $hash['line']); + } + + /** + * Loads steps from provided hash. + * + * @param array $hash + * + * @return StepNode[] + */ + private function loadStepsHash(array $hash) + { + $steps = array(); + foreach ($hash as $stepIterator => $stepHash) { + $steps[] = $this->loadStepHash($stepHash, $stepIterator); + } + + return $steps; + } + + /** + * Loads step from provided hash. + * + * @param array $hash Step hash + * @param integer $line Step definition line + * + * @return StepNode + */ + protected function loadStepHash(array $hash, $line = 0) + { + $hash = array_merge( + array( + 'keyword_type' => 'Given', + 'type' => 'Given', + 'text' => null, + 'keyword' => 'Scenario', + 'line' => $line, + 'arguments' => array(), + ), + $hash + ); + + $arguments = array(); + foreach ($hash['arguments'] as $argumentHash) { + if ('table' === $argumentHash['type']) { + $arguments[] = $this->loadTableHash($argumentHash['rows']); + } elseif ('pystring' === $argumentHash['type']) { + $arguments[] = $this->loadPyStringHash($argumentHash, $hash['line'] + 1); + } + } + + return new StepNode($hash['type'], $hash['text'], $arguments, $hash['line'], $hash['keyword_type']); + } + + /** + * Loads table from provided hash. + * + * @param array $hash Table hash + * + * @return TableNode + */ + protected function loadTableHash(array $hash) + { + return new TableNode($hash); + } + + /** + * Loads PyString from provided hash. + * + * @param array $hash PyString hash + * @param integer $line + * + * @return PyStringNode + */ + protected function loadPyStringHash(array $hash, $line = 0) + { + $line = isset($hash['line']) ? $hash['line'] : $line; + + $strings = array(); + foreach (explode("\n", $hash['text']) as $string) { + $strings[] = $string; + } + + return new PyStringNode($strings, $line); + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Loader/DirectoryLoader.php b/vendor/behat/gherkin/src/Behat/Gherkin/Loader/DirectoryLoader.php new file mode 100644 index 000000000..dcde0e628 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Loader/DirectoryLoader.php @@ -0,0 +1,80 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Loader; + +use Behat\Gherkin\Gherkin; +use Behat\Gherkin\Node\FeatureNode; +use RecursiveDirectoryIterator; +use RecursiveIteratorIterator; + +/** + * Directory contents loader. + * + * @author Konstantin Kudryashov + */ +class DirectoryLoader extends AbstractFileLoader +{ + protected $gherkin; + + /** + * Initializes loader. + * + * @param Gherkin $gherkin Gherkin manager + */ + public function __construct(Gherkin $gherkin) + { + $this->gherkin = $gherkin; + } + + /** + * Checks if current loader supports provided resource. + * + * @param mixed $path Resource to load + * + * @return Boolean + */ + public function supports($path) + { + return is_string($path) + && is_dir($this->findAbsolutePath($path)); + } + + /** + * Loads features from provided resource. + * + * @param string $path Resource to load + * + * @return FeatureNode[] + */ + public function load($path) + { + $path = $this->findAbsolutePath($path); + + $iterator = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS) + ); + $paths = array_map('strval', iterator_to_array($iterator)); + uasort($paths, 'strnatcasecmp'); + + $features = array(); + + foreach ($paths as $path) { + $path = (string) $path; + $loader = $this->gherkin->resolveLoader($path); + + if (null !== $loader) { + $features = array_merge($features, $loader->load($path)); + } + } + + return $features; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Loader/FileLoaderInterface.php b/vendor/behat/gherkin/src/Behat/Gherkin/Loader/FileLoaderInterface.php new file mode 100644 index 000000000..f18f19ae2 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Loader/FileLoaderInterface.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Loader; + +/** + * File Loader interface. + * + * @author Konstantin Kudryashov + */ +interface FileLoaderInterface extends LoaderInterface +{ + /** + * Sets base features path. + * + * @param string $path Base loader path + */ + public function setBasePath($path); +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Loader/GherkinFileLoader.php b/vendor/behat/gherkin/src/Behat/Gherkin/Loader/GherkinFileLoader.php new file mode 100644 index 000000000..ae8bf992d --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Loader/GherkinFileLoader.php @@ -0,0 +1,102 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Loader; + +use Behat\Gherkin\Cache\CacheInterface; +use Behat\Gherkin\Node\FeatureNode; +use Behat\Gherkin\Parser; + +/** + * Gherkin *.feature files loader. + * + * @author Konstantin Kudryashov + */ +class GherkinFileLoader extends AbstractFileLoader +{ + protected $parser; + protected $cache; + + /** + * Initializes loader. + * + * @param Parser $parser Parser + * @param CacheInterface $cache Cache layer + */ + public function __construct(Parser $parser, CacheInterface $cache = null) + { + $this->parser = $parser; + $this->cache = $cache; + } + + /** + * Sets cache layer. + * + * @param CacheInterface $cache Cache layer + */ + public function setCache(CacheInterface $cache) + { + $this->cache = $cache; + } + + /** + * Checks if current loader supports provided resource. + * + * @param mixed $path Resource to load + * + * @return Boolean + */ + public function supports($path) + { + return is_string($path) + && is_file($absolute = $this->findAbsolutePath($path)) + && 'feature' === pathinfo($absolute, PATHINFO_EXTENSION); + } + + /** + * Loads features from provided resource. + * + * @param string $path Resource to load + * + * @return FeatureNode[] + */ + public function load($path) + { + $path = $this->findAbsolutePath($path); + + if ($this->cache) { + if ($this->cache->isFresh($path, filemtime($path))) { + $feature = $this->cache->read($path); + } elseif (null !== $feature = $this->parseFeature($path)) { + $this->cache->write($path, $feature); + } + } else { + $feature = $this->parseFeature($path); + } + + return null !== $feature ? array($feature) : array(); + } + + /** + * Parses feature at provided absolute path. + * + * @param string $path Feature path + * + * @return FeatureNode + */ + protected function parseFeature($path) + { + $filename = $this->findRelativePath($path); + $content = file_get_contents($path); + $feature = $this->parser->parse($content, $filename); + + return $feature; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Loader/LoaderInterface.php b/vendor/behat/gherkin/src/Behat/Gherkin/Loader/LoaderInterface.php new file mode 100644 index 000000000..861332ccc --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Loader/LoaderInterface.php @@ -0,0 +1,39 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Loader; + +use Behat\Gherkin\Node\FeatureNode; + +/** + * Loader interface. + * + * @author Konstantin Kudryashov + */ +interface LoaderInterface +{ + /** + * Checks if current loader supports provided resource. + * + * @param mixed $resource Resource to load + * + * @return Boolean + */ + public function supports($resource); + + /** + * Loads features from provided resource. + * + * @param mixed $resource Resource to load + * + * @return FeatureNode[] + */ + public function load($resource); +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Loader/YamlFileLoader.php b/vendor/behat/gherkin/src/Behat/Gherkin/Loader/YamlFileLoader.php new file mode 100644 index 000000000..0c268fd3a --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Loader/YamlFileLoader.php @@ -0,0 +1,73 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Loader; + +use Behat\Gherkin\Node\FeatureNode; +use Symfony\Component\Yaml\Yaml; + +/** + * Yaml files loader. + * + * @author Konstantin Kudryashov + */ +class YamlFileLoader extends AbstractFileLoader +{ + private $loader; + + public function __construct() + { + $this->loader = new ArrayLoader(); + } + + /** + * Checks if current loader supports provided resource. + * + * @param mixed $path Resource to load + * + * @return Boolean + */ + public function supports($path) + { + return is_string($path) + && is_file($absolute = $this->findAbsolutePath($path)) + && 'yml' === pathinfo($absolute, PATHINFO_EXTENSION); + } + + /** + * Loads features from provided resource. + * + * @param string $path Resource to load + * + * @return FeatureNode[] + */ + public function load($path) + { + $path = $this->findAbsolutePath($path); + $hash = Yaml::parse(file_get_contents($path)); + + $features = $this->loader->load($hash); + $filename = $this->findRelativePath($path); + + return array_map(function (FeatureNode $feature) use ($filename) { + return new FeatureNode( + $feature->getTitle(), + $feature->getDescription(), + $feature->getTags(), + $feature->getBackground(), + $feature->getScenarios(), + $feature->getKeyword(), + $feature->getLanguage(), + $filename, + $feature->getLine() + ); + }, $features); + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Node/ArgumentInterface.php b/vendor/behat/gherkin/src/Behat/Gherkin/Node/ArgumentInterface.php new file mode 100644 index 000000000..4457f1807 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Node/ArgumentInterface.php @@ -0,0 +1,20 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Node; + +/** + * Gherkin arguments interface. + * + * @author Konstantin Kudryashov + */ +interface ArgumentInterface extends NodeInterface +{ +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Node/BackgroundNode.php b/vendor/behat/gherkin/src/Behat/Gherkin/Node/BackgroundNode.php new file mode 100644 index 000000000..fb1edb4b2 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Node/BackgroundNode.php @@ -0,0 +1,112 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Node; + +/** + * Represents Gherkin Background. + * + * @author Konstantin Kudryashov + */ +class BackgroundNode implements ScenarioLikeInterface +{ + /** + * @var string + */ + private $title; + /** + * @var StepNode[] + */ + private $steps = array(); + /** + * @var string + */ + private $keyword; + /** + * @var integer + */ + private $line; + + /** + * Initializes background. + * + * @param null|string $title + * @param StepNode[] $steps + * @param string $keyword + * @param integer $line + */ + public function __construct($title, array $steps, $keyword, $line) + { + $this->title = $title; + $this->steps = $steps; + $this->keyword = $keyword; + $this->line = $line; + } + + /** + * Returns node type string + * + * @return string + */ + public function getNodeType() + { + return 'Background'; + } + + /** + * Returns background title. + * + * @return null|string + */ + public function getTitle() + { + return $this->title; + } + + /** + * Checks if background has steps. + * + * @return Boolean + */ + public function hasSteps() + { + return 0 < count($this->steps); + } + + /** + * Returns background steps. + * + * @return StepNode[] + */ + public function getSteps() + { + return $this->steps; + } + + /** + * Returns background keyword. + * + * @return string + */ + public function getKeyword() + { + return $this->keyword; + } + + /** + * Returns background declaration line number. + * + * @return integer + */ + public function getLine() + { + return $this->line; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Node/ExampleNode.php b/vendor/behat/gherkin/src/Behat/Gherkin/Node/ExampleNode.php new file mode 100644 index 000000000..b4beaba48 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Node/ExampleNode.php @@ -0,0 +1,258 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Node; + +/** + * Represents Gherkin Outline Example. + * + * @author Konstantin Kudryashov + */ +class ExampleNode implements ScenarioInterface +{ + /** + * @var string + */ + private $title; + /** + * @var string[] + */ + private $tags; + /** + * @var StepNode[] + */ + private $outlineSteps; + /** + * @var string[] + */ + private $tokens; + /** + * @var integer + */ + private $line; + /** + * @var null|StepNode[] + */ + private $steps; + + /** + * Initializes outline. + * + * @param string $title + * @param string[] $tags + * @param StepNode[] $outlineSteps + * @param string[] $tokens + * @param integer $line + */ + public function __construct($title, array $tags, $outlineSteps, array $tokens, $line) + { + $this->title = $title; + $this->tags = $tags; + $this->outlineSteps = $outlineSteps; + $this->tokens = $tokens; + $this->line = $line; + } + + /** + * Returns node type string + * + * @return string + */ + public function getNodeType() + { + return 'Example'; + } + + /** + * Returns node keyword. + * + * @return string + */ + public function getKeyword() + { + return $this->getNodeType(); + } + + /** + * Returns example title. + * + * @return string + */ + public function getTitle() + { + return $this->title; + } + + /** + * Checks if outline is tagged with tag. + * + * @param string $tag + * + * @return Boolean + */ + public function hasTag($tag) + { + return in_array($tag, $this->getTags()); + } + + /** + * Checks if outline has tags (both inherited from feature and own). + * + * @return Boolean + */ + public function hasTags() + { + return 0 < count($this->getTags()); + } + + /** + * Returns outline tags (including inherited from feature). + * + * @return string[] + */ + public function getTags() + { + return $this->tags; + } + + /** + * Checks if outline has steps. + * + * @return Boolean + */ + public function hasSteps() + { + return 0 < count($this->outlineSteps); + } + + /** + * Returns outline steps. + * + * @return StepNode[] + */ + public function getSteps() + { + return $this->steps = $this->steps ? : $this->createExampleSteps(); + } + + /** + * Returns example tokens. + * + * @return string[] + */ + public function getTokens() + { + return $this->tokens; + } + + /** + * Returns outline declaration line number. + * + * @return integer + */ + public function getLine() + { + return $this->line; + } + + /** + * Creates steps for this example from abstract outline steps. + * + * @return StepNode[] + */ + protected function createExampleSteps() + { + $steps = array(); + foreach ($this->outlineSteps as $outlineStep) { + $keyword = $outlineStep->getKeyword(); + $keywordType = $outlineStep->getKeywordType(); + $text = $this->replaceTextTokens($outlineStep->getText()); + $args = $this->replaceArgumentsTokens($outlineStep->getArguments()); + $line = $outlineStep->getLine(); + + $steps[] = new StepNode($keyword, $text, $args, $line, $keywordType); + } + + return $steps; + } + + /** + * Replaces tokens in arguments with row values. + * + * @param ArgumentInterface[] $arguments + * + * @return ArgumentInterface[] + */ + protected function replaceArgumentsTokens(array $arguments) + { + foreach ($arguments as $num => $argument) { + if ($argument instanceof TableNode) { + $arguments[$num] = $this->replaceTableArgumentTokens($argument); + } + if ($argument instanceof PyStringNode) { + $arguments[$num] = $this->replacePyStringArgumentTokens($argument); + } + } + + return $arguments; + } + + /** + * Replaces tokens in table with row values. + * + * @param TableNode $argument + * + * @return TableNode + */ + protected function replaceTableArgumentTokens(TableNode $argument) + { + $table = $argument->getTable(); + foreach ($table as $line => $row) { + foreach (array_keys($row) as $col) { + $table[$line][$col] = $this->replaceTextTokens($table[$line][$col]); + } + } + + return new TableNode($table); + } + + /** + * Replaces tokens in PyString with row values. + * + * @param PyStringNode $argument + * + * @return PyStringNode + */ + protected function replacePyStringArgumentTokens(PyStringNode $argument) + { + $strings = $argument->getStrings(); + foreach ($strings as $line => $string) { + $strings[$line] = $this->replaceTextTokens($strings[$line]); + } + + return new PyStringNode($strings, $argument->getLine()); + } + + /** + * Replaces tokens in text with row values. + * + * @param string $text + * + * @return string + */ + protected function replaceTextTokens($text) + { + foreach ($this->tokens as $key => $val) { + $text = str_replace('<' . $key . '>', $val, $text); + } + + return $text; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Node/ExampleTableNode.php b/vendor/behat/gherkin/src/Behat/Gherkin/Node/ExampleTableNode.php new file mode 100644 index 000000000..805e659ef --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Node/ExampleTableNode.php @@ -0,0 +1,57 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Node; + +/** + * Represents Gherkin Outline Example Table. + * + * @author Konstantin Kudryashov + */ +class ExampleTableNode extends TableNode +{ + /** + * @var string + */ + private $keyword; + + /** + * Initializes example table. + * + * @param array $table Table in form of [$rowLineNumber => [$val1, $val2, $val3]] + * @param string $keyword + */ + public function __construct(array $table, $keyword) + { + $this->keyword = $keyword; + + parent::__construct($table); + } + + /** + * Returns node type string + * + * @return string + */ + public function getNodeType() + { + return 'ExampleTable'; + } + + /** + * Returns example table keyword. + * + * @return string + */ + public function getKeyword() + { + return $this->keyword; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Node/FeatureNode.php b/vendor/behat/gherkin/src/Behat/Gherkin/Node/FeatureNode.php new file mode 100644 index 000000000..641365996 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Node/FeatureNode.php @@ -0,0 +1,243 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Node; + +/** + * Represents Gherkin Feature. + * + * @author Konstantin Kudryashov + */ +class FeatureNode implements KeywordNodeInterface, TaggedNodeInterface +{ + /** + * @var null|string + */ + private $title; + /** + * @var null|string + */ + private $description; + /** + * @var string[] + */ + private $tags = array(); + /** + * @var null|BackgroundNode + */ + private $background; + /** + * @var ScenarioInterface[] + */ + private $scenarios = array(); + /** + * @var string + */ + private $keyword; + /** + * @var string + */ + private $language; + /** + * @var null|string + */ + private $file; + /** + * @var integer + */ + private $line; + + /** + * Initializes feature. + * + * @param null|string $title + * @param null|string $description + * @param string[] $tags + * @param null|BackgroundNode $background + * @param ScenarioInterface[] $scenarios + * @param string $keyword + * @param string $language + * @param null|string $file + * @param integer $line + */ + public function __construct( + $title, + $description, + array $tags, + BackgroundNode $background = null, + array $scenarios, + $keyword, + $language, + $file, + $line + ) { + $this->title = $title; + $this->description = $description; + $this->tags = $tags; + $this->background = $background; + $this->scenarios = $scenarios; + $this->keyword = $keyword; + $this->language = $language; + $this->file = $file; + $this->line = $line; + } + + /** + * Returns node type string + * + * @return string + */ + public function getNodeType() + { + return 'Feature'; + } + + /** + * Returns feature title. + * + * @return null|string + */ + public function getTitle() + { + return $this->title; + } + + /** + * Checks if feature has a description. + * + * @return Boolean + */ + public function hasDescription() + { + return !empty($this->description); + } + + /** + * Returns feature description. + * + * @return null|string + */ + public function getDescription() + { + return $this->description; + } + + /** + * Checks if feature is tagged with tag. + * + * @param string $tag + * + * @return Boolean + */ + public function hasTag($tag) + { + return in_array($tag, $this->tags); + } + + /** + * Checks if feature has tags. + * + * @return Boolean + */ + public function hasTags() + { + return 0 < count($this->tags); + } + + /** + * Returns feature tags. + * + * @return string[] + */ + public function getTags() + { + return $this->tags; + } + + /** + * Checks if feature has background. + * + * @return Boolean + */ + public function hasBackground() + { + return null !== $this->background; + } + + /** + * Returns feature background. + * + * @return null|BackgroundNode + */ + public function getBackground() + { + return $this->background; + } + + /** + * Checks if feature has scenarios. + * + * @return Boolean + */ + public function hasScenarios() + { + return 0 < count($this->scenarios); + } + + /** + * Returns feature scenarios. + * + * @return ScenarioInterface[] + */ + public function getScenarios() + { + return $this->scenarios; + } + + /** + * Returns feature keyword. + * + * @return string + */ + public function getKeyword() + { + return $this->keyword; + } + + /** + * Returns feature language. + * + * @return string + */ + public function getLanguage() + { + return $this->language; + } + + /** + * Returns feature file. + * + * @return null|string + */ + public function getFile() + { + return $this->file; + } + + /** + * Returns feature declaration line number. + * + * @return integer + */ + public function getLine() + { + return $this->line; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Node/KeywordNodeInterface.php b/vendor/behat/gherkin/src/Behat/Gherkin/Node/KeywordNodeInterface.php new file mode 100644 index 000000000..e6e412f38 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Node/KeywordNodeInterface.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Node; + +/** + * Gherkin keyword node interface. + * + * @author Konstantin Kudryashov + */ +interface KeywordNodeInterface extends NodeInterface +{ + /** + * Returns node keyword. + * + * @return string + */ + public function getKeyword(); + + /** + * Returns node title. + * + * @return null|string + */ + public function getTitle(); +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Node/NodeInterface.php b/vendor/behat/gherkin/src/Behat/Gherkin/Node/NodeInterface.php new file mode 100644 index 000000000..eabe61a0c --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Node/NodeInterface.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Node; + +/** + * Gherkin node interface. + * + * @author Konstantin Kudryashov + */ +interface NodeInterface +{ + /** + * Returns node type string + * + * @return string + */ + public function getNodeType(); + + /** + * Returns feature declaration line number. + * + * @return integer + */ + public function getLine(); +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Node/OutlineNode.php b/vendor/behat/gherkin/src/Behat/Gherkin/Node/OutlineNode.php new file mode 100644 index 000000000..083b411fc --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Node/OutlineNode.php @@ -0,0 +1,217 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Node; + +/** + * Represents Gherkin Outline. + * + * @author Konstantin Kudryashov + */ +class OutlineNode implements ScenarioInterface +{ + /** + * @var string + */ + private $title; + /** + * @var string[] + */ + private $tags; + /** + * @var StepNode[] + */ + private $steps; + /** + * @var ExampleTableNode + */ + private $table; + /** + * @var string + */ + private $keyword; + /** + * @var integer + */ + private $line; + /** + * @var null|ExampleNode[] + */ + private $examples; + + /** + * Initializes outline. + * + * @param null|string $title + * @param string[] $tags + * @param StepNode[] $steps + * @param ExampleTableNode $table + * @param string $keyword + * @param integer $line + */ + public function __construct( + $title, + array $tags, + array $steps, + ExampleTableNode $table, + $keyword, + $line + ) { + $this->title = $title; + $this->tags = $tags; + $this->steps = $steps; + $this->table = $table; + $this->keyword = $keyword; + $this->line = $line; + } + + /** + * Returns node type string + * + * @return string + */ + public function getNodeType() + { + return 'Outline'; + } + + /** + * Returns outline title. + * + * @return null|string + */ + public function getTitle() + { + return $this->title; + } + + /** + * Checks if outline is tagged with tag. + * + * @param string $tag + * + * @return Boolean + */ + public function hasTag($tag) + { + return in_array($tag, $this->getTags()); + } + + /** + * Checks if outline has tags (both inherited from feature and own). + * + * @return Boolean + */ + public function hasTags() + { + return 0 < count($this->getTags()); + } + + /** + * Returns outline tags (including inherited from feature). + * + * @return string[] + */ + public function getTags() + { + return $this->tags; + } + + /** + * Checks if outline has steps. + * + * @return Boolean + */ + public function hasSteps() + { + return 0 < count($this->steps); + } + + /** + * Returns outline steps. + * + * @return StepNode[] + */ + public function getSteps() + { + return $this->steps; + } + + /** + * Checks if outline has examples. + * + * @return Boolean + */ + public function hasExamples() + { + return 0 < count($this->table->getColumnsHash()); + } + + /** + * Returns examples table. + * + * @return ExampleTableNode + */ + public function getExampleTable() + { + return $this->table; + } + + /** + * Returns list of examples for the outline. + * + * @return ExampleNode[] + */ + public function getExamples() + { + return $this->examples = $this->examples ? : $this->createExamples(); + } + + /** + * Returns outline keyword. + * + * @return string + */ + public function getKeyword() + { + return $this->keyword; + } + + /** + * Returns outline declaration line number. + * + * @return integer + */ + public function getLine() + { + return $this->line; + } + + /** + * Creates examples for this outline using examples table. + * + * @return ExampleNode[] + */ + protected function createExamples() + { + $examples = array(); + foreach ($this->table->getColumnsHash() as $rowNum => $row) { + $examples[] = new ExampleNode( + $this->table->getRowAsString($rowNum + 1), + $this->tags, + $this->getSteps(), + $row, + $this->table->getRowLine($rowNum + 1) + ); + } + + return $examples; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Node/PyStringNode.php b/vendor/behat/gherkin/src/Behat/Gherkin/Node/PyStringNode.php new file mode 100644 index 000000000..f0e8948ee --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Node/PyStringNode.php @@ -0,0 +1,90 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Node; + +/** + * Represents Gherkin PyString argument. + * + * @author Konstantin Kudryashov + */ +class PyStringNode implements ArgumentInterface +{ + /** + * @var array + */ + private $strings = array(); + /** + * @var integer + */ + private $line; + + /** + * Initializes PyString. + * + * @param array $strings String in form of [$stringLine] + * @param integer $line Line number where string been started + */ + public function __construct(array $strings, $line) + { + $this->strings = $strings; + $this->line = $line; + } + + /** + * Returns node type. + * + * @return string + */ + public function getNodeType() + { + return 'PyString'; + } + + /** + * Returns entire PyString lines set. + * + * @return array + */ + public function getStrings() + { + return $this->strings; + } + + /** + * Returns raw string. + * + * @return string + */ + public function getRaw() + { + return implode("\n", $this->strings); + } + + /** + * Converts PyString into string. + * + * @return string + */ + public function __toString() + { + return $this->getRaw(); + } + + /** + * Returns line number at which PyString was started. + * + * @return integer + */ + public function getLine() + { + return $this->line; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Node/ScenarioInterface.php b/vendor/behat/gherkin/src/Behat/Gherkin/Node/ScenarioInterface.php new file mode 100644 index 000000000..fb298435d --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Node/ScenarioInterface.php @@ -0,0 +1,20 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Node; + +/** + * Gherkin scenario interface. + * + * @author Konstantin Kudryashov + */ +interface ScenarioInterface extends ScenarioLikeInterface, TaggedNodeInterface +{ +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Node/ScenarioLikeInterface.php b/vendor/behat/gherkin/src/Behat/Gherkin/Node/ScenarioLikeInterface.php new file mode 100644 index 000000000..88f793474 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Node/ScenarioLikeInterface.php @@ -0,0 +1,20 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Node; + +/** + * Gherkin scenario-like interface. + * + * @author Konstantin Kudryashov + */ +interface ScenarioLikeInterface extends KeywordNodeInterface, StepContainerInterface +{ +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Node/ScenarioNode.php b/vendor/behat/gherkin/src/Behat/Gherkin/Node/ScenarioNode.php new file mode 100644 index 000000000..58267e1e2 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Node/ScenarioNode.php @@ -0,0 +1,150 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Node; + +/** + * Represents Gherkin Scenario. + * + * @author Konstantin Kudryashov + */ +class ScenarioNode implements ScenarioInterface +{ + /** + * @var string + */ + private $title; + /** + * @var array + */ + private $tags = array(); + /** + * @var StepNode[] + */ + private $steps = array(); + /** + * @var string + */ + private $keyword; + /** + * @var integer + */ + private $line; + + /** + * Initializes scenario. + * + * @param null|string $title + * @param array $tags + * @param StepNode[] $steps + * @param string $keyword + * @param integer $line + */ + public function __construct($title, array $tags, array $steps, $keyword, $line) + { + $this->title = $title; + $this->tags = $tags; + $this->steps = $steps; + $this->keyword = $keyword; + $this->line = $line; + } + + /** + * Returns node type string + * + * @return string + */ + public function getNodeType() + { + return 'Scenario'; + } + + /** + * Returns scenario title. + * + * @return null|string + */ + public function getTitle() + { + return $this->title; + } + + /** + * Checks if scenario is tagged with tag. + * + * @param string $tag + * + * @return Boolean + */ + public function hasTag($tag) + { + return in_array($tag, $this->getTags()); + } + + /** + * Checks if scenario has tags (both inherited from feature and own). + * + * @return Boolean + */ + public function hasTags() + { + return 0 < count($this->getTags()); + } + + /** + * Returns scenario tags (including inherited from feature). + * + * @return array + */ + public function getTags() + { + return $this->tags; + } + + /** + * Checks if scenario has steps. + * + * @return Boolean + */ + public function hasSteps() + { + return 0 < count($this->steps); + } + + /** + * Returns scenario steps. + * + * @return StepNode[] + */ + public function getSteps() + { + return $this->steps; + } + + /** + * Returns scenario keyword. + * + * @return string + */ + public function getKeyword() + { + return $this->keyword; + } + + /** + * Returns scenario declaration line number. + * + * @return integer + */ + public function getLine() + { + return $this->line; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Node/StepContainerInterface.php b/vendor/behat/gherkin/src/Behat/Gherkin/Node/StepContainerInterface.php new file mode 100644 index 000000000..2a5c73d9e --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Node/StepContainerInterface.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Node; + +/** + * Gherkin step container interface. + * + * @author Konstantin Kudryashov + */ +interface StepContainerInterface extends NodeInterface +{ + /** + * Checks if container has steps. + * + * @return Boolean + */ + public function hasSteps(); + + /** + * Returns container steps. + * + * @return StepNode[] + */ + public function getSteps(); +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Node/StepNode.php b/vendor/behat/gherkin/src/Behat/Gherkin/Node/StepNode.php new file mode 100644 index 000000000..82eaef490 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Node/StepNode.php @@ -0,0 +1,152 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Node; + +use Behat\Gherkin\Exception\NodeException; + +/** + * Represents Gherkin Step. + * + * @author Konstantin Kudryashov + */ +class StepNode implements NodeInterface +{ + /** + * @var string + */ + private $keyword; + /** + * @var string + */ + private $keywordType; + /** + * @var string + */ + private $text; + /** + * @var ArgumentInterface[] + */ + private $arguments = array(); + /** + * @var integer + */ + private $line; + + /** + * Initializes step. + * + * @param string $keyword + * @param string $text + * @param ArgumentInterface[] $arguments + * @param integer $line + * @param string $keywordType + */ + public function __construct($keyword, $text, array $arguments, $line, $keywordType = null) + { + if (count($arguments) > 1) { + throw new NodeException(sprintf( + 'Steps could have only one argument, but `%s %s` have %d.', + $keyword, + $text, + count($arguments) + )); + } + + $this->keyword = $keyword; + $this->text = $text; + $this->arguments = $arguments; + $this->line = $line; + $this->keywordType = $keywordType ?: 'Given'; + } + + /** + * Returns node type string + * + * @return string + */ + public function getNodeType() + { + return 'Step'; + } + + /** + * Returns step keyword in provided language (Given, When, Then, etc.). + * + * @return string + * + * @deprecated use getKeyword() instead + */ + public function getType() + { + return $this->getKeyword(); + } + + /** + * Returns step keyword in provided language (Given, When, Then, etc.). + * + * @return string + * + */ + public function getKeyword() + { + return $this->keyword; + } + + /** + * Returns step type keyword (Given, When, Then, etc.). + * + * @return string + */ + public function getKeywordType() + { + return $this->keywordType; + } + + /** + * Returns step text. + * + * @return string + */ + public function getText() + { + return $this->text; + } + + /** + * Checks if step has arguments. + * + * @return Boolean + */ + public function hasArguments() + { + return 0 < count($this->arguments); + } + + /** + * Returns step arguments. + * + * @return ArgumentInterface[] + */ + public function getArguments() + { + return $this->arguments; + } + + /** + * Returns step declaration line number. + * + * @return integer + */ + public function getLine() + { + return $this->line; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Node/TableNode.php b/vendor/behat/gherkin/src/Behat/Gherkin/Node/TableNode.php new file mode 100644 index 000000000..9e5d17407 --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Node/TableNode.php @@ -0,0 +1,313 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Node; + +use ArrayIterator; +use Behat\Gherkin\Exception\NodeException; +use Iterator; +use IteratorAggregate; + +/** + * Represents Gherkin Table argument. + * + * @author Konstantin Kudryashov + */ +class TableNode implements ArgumentInterface, IteratorAggregate +{ + /** + * @var array + */ + private $table; + /** + * @var integer + */ + private $maxLineLength = array(); + + /** + * Initializes table. + * + * @param array $table Table in form of [$rowLineNumber => [$val1, $val2, $val3]] + * + * @throws NodeException If the number of columns is not the same in each row + */ + public function __construct(array $table) + { + $this->table = $table; + $columnCount = null; + + foreach ($this->getRows() as $row) { + if ($columnCount === null) { + $columnCount = count($row); + } + + if (count($row) !== $columnCount) { + throw new NodeException('Table does not have same number of columns in every row.'); + } + + foreach ($row as $column => $string) { + if (!isset($this->maxLineLength[$column])) { + $this->maxLineLength[$column] = 0; + } + + $this->maxLineLength[$column] = max($this->maxLineLength[$column], mb_strlen($string, 'utf8')); + } + } + } + + /** + * Returns node type. + * + * @return string + */ + public function getNodeType() + { + return 'Table'; + } + + /** + * Returns table hash, formed by columns (ColumnsHash). + * + * @return array + */ + public function getHash() + { + return $this->getColumnsHash(); + } + + /** + * Returns table hash, formed by columns. + * + * @return array + */ + public function getColumnsHash() + { + $rows = $this->getRows(); + $keys = array_shift($rows); + + $hash = array(); + foreach ($rows as $row) { + $hash[] = array_combine($keys, $row); + } + + return $hash; + } + + /** + * Returns table hash, formed by rows. + * + * @return array + */ + public function getRowsHash() + { + $hash = array(); + + foreach ($this->getRows() as $row) { + $hash[array_shift($row)] = (1 == count($row)) ? $row[0] : $row; + } + + return $hash; + } + + /** + * Returns numerated table lines. + * Line numbers are keys, lines are values. + * + * @return array + */ + public function getTable() + { + return $this->table; + } + + /** + * Returns table rows. + * + * @return array + */ + public function getRows() + { + return array_values($this->table); + } + + /** + * Returns table definition lines. + * + * @return array + */ + public function getLines() + { + return array_keys($this->table); + } + + /** + * Returns specific row in a table. + * + * @param integer $index Row number + * + * @return array + * + * @throws NodeException If row with specified index does not exist + */ + public function getRow($index) + { + $rows = $this->getRows(); + + if (!isset($rows[$index])) { + throw new NodeException(sprintf('Rows #%d does not exist in table.', $index)); + } + + return $rows[$index]; + } + + /** + * Returns specific column in a table. + * + * @param integer $index Column number + * + * @return array + * + * @throws NodeException If column with specified index does not exist + */ + public function getColumn($index) + { + if ($index >= count($this->getRow(0))) { + throw new NodeException(sprintf('Column #%d does not exist in table.', $index)); + } + + $rows = $this->getRows(); + $column = array(); + + foreach ($rows as $row) { + $column[] = $row[$index]; + } + + return $column; + } + + /** + * Returns line number at which specific row was defined. + * + * @param integer $index + * + * @return integer + * + * @throws NodeException If row with specified index does not exist + */ + public function getRowLine($index) + { + $lines = array_keys($this->table); + + if (!isset($lines[$index])) { + throw new NodeException(sprintf('Rows #%d does not exist in table.', $index)); + } + + return $lines[$index]; + } + + /** + * Converts row into delimited string. + * + * @param integer $rowNum Row number + * + * @return string + */ + public function getRowAsString($rowNum) + { + $values = array(); + foreach ($this->getRow($rowNum) as $column => $value) { + $values[] = $this->padRight(' ' . $value . ' ', $this->maxLineLength[$column] + 2); + } + + return sprintf('|%s|', implode('|', $values)); + } + + /** + * Converts row into delimited string. + * + * @param integer $rowNum Row number + * @param callable $wrapper Wrapper function + * + * @return string + */ + public function getRowAsStringWithWrappedValues($rowNum, $wrapper) + { + $values = array(); + foreach ($this->getRow($rowNum) as $column => $value) { + $value = $this->padRight(' ' . $value . ' ', $this->maxLineLength[$column] + 2); + + $values[] = call_user_func($wrapper, $value, $column); + } + + return sprintf('|%s|', implode('|', $values)); + } + + /** + * Converts entire table into string + * + * @return string + */ + public function getTableAsString() + { + $lines = array(); + for ($i = 0; $i < count($this->getRows()); $i++) { + $lines[] = $this->getRowAsString($i); + } + + return implode("\n", $lines); + } + + /** + * Returns line number at which table was started. + * + * @return integer + */ + public function getLine() + { + return $this->getRowLine(0); + } + + /** + * Converts table into string + * + * @return string + */ + public function __toString() + { + return $this->getTableAsString(); + } + + /** + * Retrieves a hash iterator. + * + * @return Iterator + */ + public function getIterator() + { + return new ArrayIterator($this->getHash()); + } + + /** + * Pads string right. + * + * @param string $text Text to pad + * @param integer $length Length + * + * @return string + */ + protected function padRight($text, $length) + { + while ($length > mb_strlen($text, 'utf8')) { + $text = $text . ' '; + } + + return $text; + } +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Node/TaggedNodeInterface.php b/vendor/behat/gherkin/src/Behat/Gherkin/Node/TaggedNodeInterface.php new file mode 100644 index 000000000..cce6bcafd --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Node/TaggedNodeInterface.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin\Node; + +/** + * Gherkin tagged node interface. + * + * @author Konstantin Kudryashov + */ +interface TaggedNodeInterface extends NodeInterface +{ + /** + * Checks if node is tagged with tag. + * + * @param string $tag + * + * @return Boolean + */ + public function hasTag($tag); + + /** + * Checks if node has tags (both inherited from feature and own). + * + * @return Boolean + */ + public function hasTags(); + + /** + * Returns node tags (including inherited from feature). + * + * @return string[] + */ + public function getTags(); +} diff --git a/vendor/behat/gherkin/src/Behat/Gherkin/Parser.php b/vendor/behat/gherkin/src/Behat/Gherkin/Parser.php new file mode 100644 index 000000000..5cc85424b --- /dev/null +++ b/vendor/behat/gherkin/src/Behat/Gherkin/Parser.php @@ -0,0 +1,699 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Gherkin; + +use Behat\Gherkin\Exception\LexerException; +use Behat\Gherkin\Exception\ParserException; +use Behat\Gherkin\Node\BackgroundNode; +use Behat\Gherkin\Node\ExampleTableNode; +use Behat\Gherkin\Node\FeatureNode; +use Behat\Gherkin\Node\OutlineNode; +use Behat\Gherkin\Node\PyStringNode; +use Behat\Gherkin\Node\ScenarioInterface; +use Behat\Gherkin\Node\ScenarioNode; +use Behat\Gherkin\Node\StepNode; +use Behat\Gherkin\Node\TableNode; + +/** + * Gherkin parser. + * + * $lexer = new Behat\Gherkin\Lexer($keywords); + * $parser = new Behat\Gherkin\Parser($lexer); + * $featuresArray = $parser->parse('/path/to/feature.feature'); + * + * @author Konstantin Kudryashov + */ +class Parser +{ + private $lexer; + private $input; + private $file; + private $tags = array(); + private $languageSpecifierLine; + + /** + * Initializes parser. + * + * @param Lexer $lexer Lexer instance + */ + public function __construct(Lexer $lexer) + { + $this->lexer = $lexer; + } + + /** + * Parses input & returns features array. + * + * @param string $input Gherkin string document + * @param string $file File name + * + * @return FeatureNode|null + * + * @throws ParserException + */ + public function parse($input, $file = null) + { + $this->languageSpecifierLine = null; + $this->input = $input; + $this->file = $file; + $this->tags = array(); + + try { + $this->lexer->analyse($this->input, 'en'); + } catch (LexerException $e) { + throw new ParserException( + sprintf('Lexer exception "%s" thrown for file %s', $e->getMessage(), $file), + 0, + $e + ); + } + + $feature = null; + while ('EOS' !== ($predicted = $this->predictTokenType())) { + $node = $this->parseExpression(); + + if (null === $node || "\n" === $node) { + continue; + } + + if (!$feature && $node instanceof FeatureNode) { + $feature = $node; + continue; + } + + if ($feature && $node instanceof FeatureNode) { + throw new ParserException(sprintf( + 'Only one feature is allowed per feature file. But %s got multiple.', + $this->file + )); + } + + if (is_string($node)) { + throw new ParserException(sprintf( + 'Expected Feature, but got text: "%s"%s', + $node, + $this->file ? ' in file: ' . $this->file : '' + )); + } + + if (!$node instanceof FeatureNode) { + throw new ParserException(sprintf( + 'Expected Feature, but got %s on line: %d%s', + $node->getKeyword(), + $node->getLine(), + $this->file ? ' in file: ' . $this->file : '' + )); + } + } + + return $feature; + } + + /** + * Returns next token if it's type equals to expected. + * + * @param string $type Token type + * + * @return array + * + * @throws Exception\ParserException + */ + protected function expectTokenType($type) + { + $types = (array) $type; + if (in_array($this->predictTokenType(), $types)) { + return $this->lexer->getAdvancedToken(); + } + + $token = $this->lexer->predictToken(); + + throw new ParserException(sprintf( + 'Expected %s token, but got %s on line: %d%s', + implode(' or ', $types), + $this->predictTokenType(), + $token['line'], + $this->file ? ' in file: ' . $this->file : '' + )); + } + + /** + * Returns next token if it's type equals to expected. + * + * @param string $type Token type + * + * @return null|array + */ + protected function acceptTokenType($type) + { + if ($type !== $this->predictTokenType()) { + return null; + } + + return $this->lexer->getAdvancedToken(); + } + + /** + * Returns next token type without real input reading (prediction). + * + * @return string + */ + protected function predictTokenType() + { + $token = $this->lexer->predictToken(); + + return $token['type']; + } + + /** + * Parses current expression & returns Node. + * + * @return string|FeatureNode|BackgroundNode|ScenarioNode|OutlineNode|TableNode|StepNode + * + * @throws ParserException + */ + protected function parseExpression() + { + switch ($type = $this->predictTokenType()) { + case 'Feature': + return $this->parseFeature(); + case 'Background': + return $this->parseBackground(); + case 'Scenario': + return $this->parseScenario(); + case 'Outline': + return $this->parseOutline(); + case 'Examples': + return $this->parseExamples(); + case 'TableRow': + return $this->parseTable(); + case 'PyStringOp': + return $this->parsePyString(); + case 'Step': + return $this->parseStep(); + case 'Text': + return $this->parseText(); + case 'Newline': + return $this->parseNewline(); + case 'Tag': + return $this->parseTags(); + case 'Comment': + return $this->parseComment(); + case 'Language': + return $this->parseLanguage(); + case 'EOS': + return ''; + } + + throw new ParserException(sprintf('Unknown token type: %s', $type)); + } + + /** + * Parses feature token & returns it's node. + * + * @return FeatureNode + * + * @throws ParserException + */ + protected function parseFeature() + { + $token = $this->expectTokenType('Feature'); + + $title = trim($token['value']) ?: null; + $description = null; + $tags = $this->popTags(); + $background = null; + $scenarios = array(); + $keyword = $token['keyword']; + $language = $this->lexer->getLanguage(); + $file = $this->file; + $line = $token['line']; + + // Parse description, background, scenarios & outlines + while ('EOS' !== $this->predictTokenType()) { + $node = $this->parseExpression(); + + if (is_string($node)) { + $text = preg_replace('/^\s{0,' . ($token['indent'] + 2) . '}|\s*$/', '', $node); + $description .= (null !== $description ? "\n" : '') . $text; + continue; + } + + if (!$background && $node instanceof BackgroundNode) { + $background = $node; + continue; + } + + if ($node instanceof ScenarioInterface) { + $scenarios[] = $node; + continue; + } + + if ($background instanceof BackgroundNode && $node instanceof BackgroundNode) { + throw new ParserException(sprintf( + 'Each Feature could have only one Background, but found multiple on lines %d and %d%s', + $background->getLine(), + $node->getLine(), + $this->file ? ' in file: ' . $this->file : '' + )); + } + + if (!$node instanceof ScenarioNode) { + throw new ParserException(sprintf( + 'Expected Scenario, Outline or Background, but got %s on line: %d%s', + $node->getNodeType(), + $node->getLine(), + $this->file ? ' in file: ' . $this->file : '' + )); + } + } + + return new FeatureNode( + rtrim($title) ?: null, + rtrim($description) ?: null, + $tags, + $background, + $scenarios, + $keyword, + $language, + $file, + $line + ); + } + + /** + * Parses background token & returns it's node. + * + * @return BackgroundNode + * + * @throws ParserException + */ + protected function parseBackground() + { + $token = $this->expectTokenType('Background'); + + $title = trim($token['value']); + $keyword = $token['keyword']; + $line = $token['line']; + + if (count($this->popTags())) { + throw new ParserException(sprintf( + 'Background can not be tagged, but it is on line: %d%s', + $line, + $this->file ? ' in file: ' . $this->file : '' + )); + } + + // Parse description and steps + $steps = array(); + $allowedTokenTypes = array('Step', 'Newline', 'Text', 'Comment'); + while (in_array($this->predictTokenType(), $allowedTokenTypes)) { + $node = $this->parseExpression(); + + if ($node instanceof StepNode) { + $steps[] = $this->normalizeStepNodeKeywordType($node, $steps); + continue; + } + + if (!count($steps) && is_string($node)) { + $text = preg_replace('/^\s{0,' . ($token['indent'] + 2) . '}|\s*$/', '', $node); + $title .= "\n" . $text; + continue; + } + + if ("\n" === $node) { + continue; + } + + if (is_string($node)) { + throw new ParserException(sprintf( + 'Expected Step, but got text: "%s"%s', + $node, + $this->file ? ' in file: ' . $this->file : '' + )); + } + + if (!$node instanceof StepNode) { + throw new ParserException(sprintf( + 'Expected Step, but got %s on line: %d%s', + $node->getNodeType(), + $node->getLine(), + $this->file ? ' in file: ' . $this->file : '' + )); + } + } + + return new BackgroundNode(rtrim($title) ?: null, $steps, $keyword, $line); + } + + /** + * Parses scenario token & returns it's node. + * + * @return ScenarioNode + * + * @throws ParserException + */ + protected function parseScenario() + { + $token = $this->expectTokenType('Scenario'); + + $title = trim($token['value']); + $tags = $this->popTags(); + $keyword = $token['keyword']; + $line = $token['line']; + + // Parse description and steps + $steps = array(); + while (in_array($this->predictTokenType(), array('Step', 'Newline', 'Text', 'Comment'))) { + $node = $this->parseExpression(); + + if ($node instanceof StepNode) { + $steps[] = $this->normalizeStepNodeKeywordType($node, $steps); + continue; + } + + if (!count($steps) && is_string($node)) { + $text = preg_replace('/^\s{0,' . ($token['indent'] + 2) . '}|\s*$/', '', $node); + $title .= "\n" . $text; + continue; + } + + if ("\n" === $node) { + continue; + } + + if (is_string($node)) { + throw new ParserException(sprintf( + 'Expected Step, but got text: "%s"%s', + $node, + $this->file ? ' in file: ' . $this->file : '' + )); + } + + if (!$node instanceof StepNode) { + throw new ParserException(sprintf( + 'Expected Step, but got %s on line: %d%s', + $node->getNodeType(), + $node->getLine(), + $this->file ? ' in file: ' . $this->file : '' + )); + } + } + + return new ScenarioNode(rtrim($title) ?: null, $tags, $steps, $keyword, $line); + } + + /** + * Parses scenario outline token & returns it's node. + * + * @return OutlineNode + * + * @throws ParserException + */ + protected function parseOutline() + { + $token = $this->expectTokenType('Outline'); + + $title = trim($token['value']); + $tags = $this->popTags(); + $keyword = $token['keyword']; + $examples = null; + $line = $token['line']; + + // Parse description, steps and examples + $steps = array(); + while (in_array($this->predictTokenType(), array('Step', 'Examples', 'Newline', 'Text', 'Comment'))) { + $node = $this->parseExpression(); + + if ($node instanceof StepNode) { + $steps[] = $this->normalizeStepNodeKeywordType($node, $steps); + continue; + } + + if ($node instanceof ExampleTableNode) { + $examples = $node; + continue; + } + + if (!count($steps) && is_string($node)) { + $text = preg_replace('/^\s{0,' . ($token['indent'] + 2) . '}|\s*$/', '', $node); + $title .= "\n" . $text; + continue; + } + + if ("\n" === $node) { + continue; + } + + if (is_string($node)) { + throw new ParserException(sprintf( + 'Expected Step or Examples table, but got text: "%s"%s', + $node, + $this->file ? ' in file: ' . $this->file : '' + )); + } + + if (!$node instanceof StepNode) { + throw new ParserException(sprintf( + 'Expected Step or Examples table, but got %s on line: %d%s', + $node->getNodeType(), + $node->getLine(), + $this->file ? ' in file: ' . $this->file : '' + )); + } + } + + if (null === $examples) { + throw new ParserException(sprintf( + 'Outline should have examples table, but got none for outline "%s" on line: %d%s', + rtrim($title), + $line, + $this->file ? ' in file: ' . $this->file : '' + )); + } + + return new OutlineNode(rtrim($title) ?: null, $tags, $steps, $examples, $keyword, $line); + } + + /** + * Parses step token & returns it's node. + * + * @return StepNode + */ + protected function parseStep() + { + $token = $this->expectTokenType('Step'); + + $keyword = $token['value']; + $keywordType = $token['keyword_type']; + $text = trim($token['text']); + $line = $token['line']; + + $arguments = array(); + while (in_array($predicted = $this->predictTokenType(), array('PyStringOp', 'TableRow', 'Newline', 'Comment'))) { + if ('Comment' === $predicted || 'Newline' === $predicted) { + $this->acceptTokenType($predicted); + continue; + } + + $node = $this->parseExpression(); + + if ($node instanceof PyStringNode || $node instanceof TableNode) { + $arguments[] = $node; + } + } + + return new StepNode($keyword, $text, $arguments, $line, $keywordType); + } + + /** + * Parses examples table node. + * + * @return ExampleTableNode + */ + protected function parseExamples() + { + $token = $this->expectTokenType('Examples'); + + $keyword = $token['keyword']; + + return new ExampleTableNode($this->parseTableRows(), $keyword); + } + + /** + * Parses table token & returns it's node. + * + * @return TableNode + */ + protected function parseTable() + { + return new TableNode($this->parseTableRows()); + } + + /** + * Parses PyString token & returns it's node. + * + * @return PyStringNode + */ + protected function parsePyString() + { + $token = $this->expectTokenType('PyStringOp'); + + $line = $token['line']; + + $strings = array(); + while ('PyStringOp' !== ($predicted = $this->predictTokenType()) && 'Text' === $predicted) { + $token = $this->expectTokenType('Text'); + + $strings[] = $token['value']; + } + + $this->expectTokenType('PyStringOp'); + + return new PyStringNode($strings, $line); + } + + /** + * Parses tags. + * + * @return BackgroundNode|FeatureNode|OutlineNode|ScenarioNode|StepNode|TableNode|string + */ + protected function parseTags() + { + $token = $this->expectTokenType('Tag'); + $this->tags = array_merge($this->tags, $token['tags']); + + return $this->parseExpression(); + } + + /** + * Returns current set of tags and clears tag buffer. + * + * @return array + */ + protected function popTags() + { + $tags = $this->tags; + $this->tags = array(); + + return $tags; + } + + /** + * Parses next text line & returns it. + * + * @return string + */ + protected function parseText() + { + $token = $this->expectTokenType('Text'); + + return $token['value']; + } + + /** + * Parses next newline & returns \n. + * + * @return string + */ + protected function parseNewline() + { + $this->expectTokenType('Newline'); + + return "\n"; + } + + /** + * Parses next comment token & returns it's string content. + * + * @return BackgroundNode|FeatureNode|OutlineNode|ScenarioNode|StepNode|TableNode|string + */ + protected function parseComment() + { + $this->expectTokenType('Comment'); + + return $this->parseExpression(); + } + + /** + * Parses language block and updates lexer configuration based on it. + * + * @return BackgroundNode|FeatureNode|OutlineNode|ScenarioNode|StepNode|TableNode|string + * + * @throws ParserException + */ + protected function parseLanguage() + { + $token = $this->expectTokenType('Language'); + + if (null === $this->languageSpecifierLine) { + $this->lexer->analyse($this->input, $token['value']); + $this->languageSpecifierLine = $token['line']; + } elseif ($token['line'] !== $this->languageSpecifierLine) { + throw new ParserException(sprintf( + 'Ambiguous language specifiers on lines: %d and %d%s', + $this->languageSpecifierLine, + $token['line'], + $this->file ? ' in file: ' . $this->file : '' + )); + } + + return $this->parseExpression(); + } + + /** + * Parses the rows of a table + * + * @return string[][] + */ + private function parseTableRows() + { + $table = array(); + while (in_array($predicted = $this->predictTokenType(), array('TableRow', 'Newline', 'Comment'))) { + if ('Comment' === $predicted || 'Newline' === $predicted) { + $this->acceptTokenType($predicted); + continue; + } + + $token = $this->expectTokenType('TableRow'); + + $table[$token['line']] = $token['columns']; + } + + return $table; + } + + /** + * Changes step node type for types But, And to type of previous step if it exists else sets to Given + * + * @param StepNode $node + * @param StepNode[] $steps + * @return StepNode + */ + private function normalizeStepNodeKeywordType(StepNode $node, array $steps = array()) + { + if (in_array($node->getKeywordType(), array('And', 'But'))) { + if (($prev = end($steps))) { + $keywordType = $prev->getKeywordType(); + } else { + $keywordType = 'Given'; + } + + $node = new StepNode( + $node->getKeyword(), + $node->getText(), + $node->getArguments(), + $node->getLine(), + $keywordType + ); + } + return $node; + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Cache/FileCacheTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Cache/FileCacheTest.php new file mode 100644 index 000000000..2f0b7c950 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Cache/FileCacheTest.php @@ -0,0 +1,75 @@ +assertFalse($this->cache->isFresh('unexisting', time() + 100)); + } + + public function testIsFreshOnFreshFile() + { + $feature = new FeatureNode(null, null, array(), null, array(), null, null, null, null); + + $this->cache->write('some_path', $feature); + + $this->assertFalse($this->cache->isFresh('some_path', time() + 100)); + } + + public function testIsFreshOnOutdated() + { + $feature = new FeatureNode(null, null, array(), null, array(), null, null, null, null); + + $this->cache->write('some_path', $feature); + + $this->assertTrue($this->cache->isFresh('some_path', time() - 100)); + } + + public function testCacheAndRead() + { + $scenarios = array(new ScenarioNode('Some scenario', array(), array(), null, null)); + $feature = new FeatureNode('Some feature', 'some description', array(), null, $scenarios, null, null, null, null); + + $this->cache->write('some_feature', $feature); + $featureRead = $this->cache->read('some_feature'); + + $this->assertEquals($feature, $featureRead); + } + + public function testBrokenCacheRead() + { + $this->setExpectedException('Behat\Gherkin\Exception\CacheException'); + + touch($this->path . '/v' . Gherkin::VERSION . '/' . md5('broken_feature') . '.feature.cache'); + $this->cache->read('broken_feature'); + } + + public function testUnwriteableCacheDir() + { + $this->setExpectedException('Behat\Gherkin\Exception\CacheException'); + + new FileCache('/dev/null/gherkin-test'); + } + + protected function setUp() + { + $this->cache = new FileCache($this->path = sys_get_temp_dir() . '/gherkin-test'); + } + + protected function tearDown() + { + foreach (glob($this->path . '/*.feature.cache') as $file) { + unlink((string) $file); + } + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Cache/MemoryCacheTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Cache/MemoryCacheTest.php new file mode 100644 index 000000000..a0bb6c86f --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Cache/MemoryCacheTest.php @@ -0,0 +1,51 @@ +assertFalse($this->cache->isFresh('unexisting', time() + 100)); + } + + public function testIsFreshOnFreshFile() + { + $feature = new FeatureNode(null, null, array(), null, array(), null, null, null, null); + + $this->cache->write('some_path', $feature); + + $this->assertFalse($this->cache->isFresh('some_path', time() + 100)); + } + + public function testIsFreshOnOutdated() + { + $feature = new FeatureNode(null, null, array(), null, array(), null, null, null, null); + + $this->cache->write('some_path', $feature); + + $this->assertTrue($this->cache->isFresh('some_path', time() - 100)); + } + + public function testCacheAndRead() + { + $scenarios = array(new ScenarioNode('Some scenario', array(), array(), null, null)); + $feature = new FeatureNode('Some feature', 'some description', array(), null, $scenarios, null, null, null, null); + + $this->cache->write('some_feature', $feature); + $featureRead = $this->cache->read('some_feature'); + + $this->assertEquals($feature, $featureRead); + } + + protected function setUp() + { + $this->cache = new MemoryCache(); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/FilterTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/FilterTest.php new file mode 100644 index 000000000..994e6564a --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/FilterTest.php @@ -0,0 +1,64 @@ + array( + 'feature' => 'Feature', + 'background' => 'Background', + 'scenario' => 'Scenario', + 'scenario_outline' => 'Scenario Outline|Scenario Template', + 'examples' => 'Examples|Scenarios', + 'given' => 'Given', + 'when' => 'When', + 'then' => 'Then', + 'and' => 'And', + 'but' => 'But' + ) + )) + ) + ); + } + + protected function getGherkinFeature() + { + return << occurs + Then should be visible + + Examples: + | action | outcome | + | act#1 | out#1 | + | act#2 | out#2 | + | act#3 | out#3 | +GHERKIN; + } + + protected function getParsedFeature() + { + return $this->getParser()->parse($this->getGherkinFeature()); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/Fixtures/full/file2 b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/Fixtures/full/file2 new file mode 100644 index 000000000..e69de29bb diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/Fixtures/full_path/file1 b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/Fixtures/full_path/file1 new file mode 100644 index 000000000..e69de29bb diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/LineFilterTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/LineFilterTest.php new file mode 100644 index 000000000..846a719de --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/LineFilterTest.php @@ -0,0 +1,103 @@ +assertTrue($filter->isFeatureMatch($feature)); + + $filter = new LineFilter(2); + $this->assertFalse($filter->isFeatureMatch($feature)); + + $filter = new LineFilter(3); + $this->assertFalse($filter->isFeatureMatch($feature)); + } + + public function testIsScenarioMatchFilter() + { + $scenario = new ScenarioNode(null, array(), array(), null, 2); + + $filter = new LineFilter(2); + $this->assertTrue($filter->isScenarioMatch($scenario)); + + $filter = new LineFilter(1); + $this->assertFalse($filter->isScenarioMatch($scenario)); + + $filter = new LineFilter(5); + $this->assertFalse($filter->isScenarioMatch($scenario)); + + $outline = new OutlineNode(null, array(), array(), new ExampleTableNode(array(), null), null, 20); + + $filter = new LineFilter(5); + $this->assertFalse($filter->isScenarioMatch($outline)); + + $filter = new LineFilter(20); + $this->assertTrue($filter->isScenarioMatch($outline)); + } + + public function testFilterFeatureScenario() + { + $filter = new LineFilter(2); + $feature = $filter->filterFeature($this->getParsedFeature()); + $this->assertCount(1, $scenarios = $feature->getScenarios()); + $this->assertSame('Scenario#1', $scenarios[0]->getTitle()); + + $filter = new LineFilter(7); + $feature = $filter->filterFeature($this->getParsedFeature()); + $this->assertCount(1, $scenarios = $feature->getScenarios()); + $this->assertSame('Scenario#2', $scenarios[0]->getTitle()); + + $filter = new LineFilter(5); + $feature = $filter->filterFeature($this->getParsedFeature()); + $this->assertCount(0, $scenarios = $feature->getScenarios()); + } + + public function testFilterFeatureOutline() + { + $filter = new LineFilter(13); + $feature = $filter->filterFeature($this->getParsedFeature()); + $this->assertCount(1, $scenarios = $feature->getScenarios()); + $this->assertSame('Scenario#3', $scenarios[0]->getTitle()); + $this->assertCount(4, $scenarios[0]->getExampleTable()->getRows()); + + $filter = new LineFilter(19); + $feature = $filter->filterFeature($this->getParsedFeature()); + $this->assertCount(1, $scenarios = $feature->getScenarios()); + $this->assertSame('Scenario#3', $scenarios[0]->getTitle()); + $this->assertCount(2, $scenarios[0]->getExampleTable()->getRows()); + $this->assertSame(array( + array('action', 'outcome'), + array('act#1', 'out#1'), + ), $scenarios[0]->getExampleTable()->getRows()); + + $filter = new LineFilter(21); + $feature = $filter->filterFeature($this->getParsedFeature()); + $this->assertCount(1, $scenarios = $feature->getScenarios()); + $this->assertSame('Scenario#3', $scenarios[0]->getTitle()); + $this->assertCount(2, $scenarios[0]->getExampleTable()->getRows()); + $this->assertSame(array( + array('action', 'outcome'), + array('act#3', 'out#3'), + ), $scenarios[0]->getExampleTable()->getRows()); + + $filter = new LineFilter(18); + $feature = $filter->filterFeature($this->getParsedFeature()); + $this->assertCount(1, $scenarios = $feature->getScenarios()); + $this->assertSame('Scenario#3', $scenarios[0]->getTitle()); + $this->assertCount(1, $scenarios[0]->getExampleTable()->getRows()); + $this->assertSame(array( + array('action', 'outcome'), + ), $scenarios[0]->getExampleTable()->getRows()); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/LineRangeFilterTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/LineRangeFilterTest.php new file mode 100644 index 000000000..fb8abe1ce --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/LineRangeFilterTest.php @@ -0,0 +1,101 @@ +assertSame($expected, $filter->isFeatureMatch($feature)); + } + + public function scenarioLineRangeProvider() + { + return array( + array('1', '2', 1), + array('1', '*', 2), + array('2', '2', 1), + array('2', '*', 2), + array('3', '3', 1), + array('3', '*', 1), + array('1', '1', 0), + array('4', '4', 0), + array('4', '*', 0) + ); + } + + /** + * @dataProvider scenarioLineRangeProvider + */ + public function testIsScenarioMatchFilter($filterMinLine, $filterMaxLine, $expectedNumberOfMatches) + { + $scenario = new ScenarioNode(null, array(), array(), null, 2); + $outline = new OutlineNode(null, array(), array(), new ExampleTableNode(array(), null), null, 3); + + $filter = new LineRangeFilter($filterMinLine, $filterMaxLine); + $this->assertEquals( + $expectedNumberOfMatches, + intval($filter->isScenarioMatch($scenario)) + intval($filter->isScenarioMatch($outline)) + ); + } + + public function testFilterFeatureScenario() + { + $filter = new LineRangeFilter(1, 3); + $feature = $filter->filterFeature($this->getParsedFeature()); + $this->assertCount(1, $scenarios = $feature->getScenarios()); + $this->assertSame('Scenario#1', $scenarios[0]->getTitle()); + + $filter = new LineRangeFilter(5, 9); + $feature = $filter->filterFeature($this->getParsedFeature()); + $this->assertCount(1, $scenarios = $feature->getScenarios()); + $this->assertSame('Scenario#2', $scenarios[0]->getTitle()); + + $filter = new LineRangeFilter(5, 6); + $feature = $filter->filterFeature($this->getParsedFeature()); + $this->assertCount(0, $scenarios = $feature->getScenarios()); + } + + public function testFilterFeatureOutline() + { + $filter = new LineRangeFilter(12, 14); + $feature = $filter->filterFeature($this->getParsedFeature()); + $this->assertCount(1, $scenarios = $feature->getScenarios()); + $this->assertSame('Scenario#3', $scenarios[0]->getTitle()); + $this->assertCount(1, $scenarios[0]->getExampleTable()->getRows()); + + $filter = new LineRangeFilter(15, 20); + $feature = $filter->filterFeature($this->getParsedFeature()); + $this->assertCount(1, $scenarios = $feature->getScenarios()); + $this->assertSame('Scenario#3', $scenarios[0]->getTitle()); + $this->assertCount(3, $scenarios[0]->getExampleTable()->getRows()); + $this->assertSame(array( + array('action', 'outcome'), + array('act#1', 'out#1'), + array('act#2', 'out#2'), + ), $scenarios[0]->getExampleTable()->getRows()); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/NameFilterTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/NameFilterTest.php new file mode 100644 index 000000000..24914ecf1 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/NameFilterTest.php @@ -0,0 +1,79 @@ +assertSame($feature, $filter->filterFeature($feature)); + + $scenarios = array( + new ScenarioNode('scenario1', array(), array(), null, 2), + $matchedScenario = new ScenarioNode('scenario2', array(), array(), null, 4) + ); + $feature = new FeatureNode('feature1', null, array(), null, $scenarios, null, null, null, 1); + $filter = new NameFilter('scenario2'); + $filteredFeature = $filter->filterFeature($feature); + + $this->assertSame(array($matchedScenario), $filteredFeature->getScenarios()); + } + + public function testIsFeatureMatchFilter() + { + $feature = new FeatureNode('random feature title', null, array(), null, array(), null, null, null, 1); + + $filter = new NameFilter('feature1'); + $this->assertFalse($filter->isFeatureMatch($feature)); + + $feature = new FeatureNode('feature1', null, array(), null, array(), null, null, null, 1); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $feature = new FeatureNode('feature1 title', null, array(), null, array(), null, null, null, 1); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $feature = new FeatureNode('some feature1 title', null, array(), null, array(), null, null, null, 1); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $feature = new FeatureNode('some feature title', null, array(), null, array(), null, null, null, 1); + $this->assertFalse($filter->isFeatureMatch($feature)); + + $filter = new NameFilter('/fea.ure/'); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $feature = new FeatureNode('some feaSure title', null, array(), null, array(), null, null, null, 1); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $feature = new FeatureNode('some feture title', null, array(), null, array(), null, null, null, 1); + $this->assertFalse($filter->isFeatureMatch($feature)); + } + + public function testIsScenarioMatchFilter() + { + $filter = new NameFilter('scenario1'); + + $scenario = new ScenarioNode('UNKNOWN', array(), array(), null, 2); + $this->assertFalse($filter->isScenarioMatch($scenario)); + + $scenario = new ScenarioNode('scenario1', array(), array(), null, 2); + $this->assertTrue($filter->isScenarioMatch($scenario)); + + $scenario = new ScenarioNode('scenario1 title', array(), array(), null, 2); + $this->assertTrue($filter->isScenarioMatch($scenario)); + + $scenario = new ScenarioNode('some scenario title', array(), array(), null, 2); + $this->assertFalse($filter->isScenarioMatch($scenario)); + + $filter = new NameFilter('/sce.ario/'); + $this->assertTrue($filter->isScenarioMatch($scenario)); + + $filter = new NameFilter('/scen.rio/'); + $this->assertTrue($filter->isScenarioMatch($scenario)); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/NarrativeFilterTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/NarrativeFilterTest.php new file mode 100644 index 000000000..6a50e1eb0 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/NarrativeFilterTest.php @@ -0,0 +1,34 @@ +assertFalse($filter->isFeatureMatch($feature)); + + $filter = new NarrativeFilter('/as (?:a|an) french user/i'); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $filter = new NarrativeFilter('/french .*/'); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $filter = new NarrativeFilter('/^french/'); + $this->assertFalse($filter->isFeatureMatch($feature)); + + $filter = new NarrativeFilter('/user$/'); + $this->assertFalse($filter->isFeatureMatch($feature)); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/PathsFilterTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/PathsFilterTest.php new file mode 100644 index 000000000..b53e18dc7 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/PathsFilterTest.php @@ -0,0 +1,48 @@ +assertTrue($filter->isFeatureMatch($feature)); + + $filter = new PathsFilter(array('/abc', '/def', dirname(__DIR__))); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $filter = new PathsFilter(array('/abc', '/def', __DIR__)); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $filter = new PathsFilter(array('/abc', __DIR__, '/def')); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $filter = new PathsFilter(array('/abc', '/def', '/wrong/path')); + $this->assertFalse($filter->isFeatureMatch($feature)); + } + + public function testItDoesNotMatchPartialPaths() + { + $fixtures = __DIR__ . DIRECTORY_SEPARATOR . 'Fixtures' . DIRECTORY_SEPARATOR; + + $feature = new FeatureNode(null, null, array(), null, array(), null, null, $fixtures . 'full_path' . DIRECTORY_SEPARATOR . 'file1', 1); + + $filter = new PathsFilter(array($fixtures . 'full')); + $this->assertFalse($filter->isFeatureMatch($feature)); + + $filter = new PathsFilter(array($fixtures . 'full' . DIRECTORY_SEPARATOR)); + $this->assertFalse($filter->isFeatureMatch($feature)); + + $filter = new PathsFilter(array($fixtures . 'full_path' . DIRECTORY_SEPARATOR)); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $filter = new PathsFilter(array($fixtures . 'full_path')); + $this->assertTrue($filter->isFeatureMatch($feature)); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/RoleFilterTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/RoleFilterTest.php new file mode 100644 index 000000000..8e8af3e0d --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/RoleFilterTest.php @@ -0,0 +1,73 @@ +assertTrue($filter->isFeatureMatch($feature)); + + $filter = new RoleFilter('french *'); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $filter = new RoleFilter('french'); + $this->assertFalse($filter->isFeatureMatch($feature)); + + $filter = new RoleFilter('user'); + $this->assertFalse($filter->isFeatureMatch($feature)); + + $filter = new RoleFilter('*user'); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $filter = new RoleFilter('French User'); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $feature = new FeatureNode(null, null, array(), null, array(), null, null, null, 1); + $filter = new RoleFilter('French User'); + $this->assertFalse($filter->isFeatureMatch($feature)); + } + + public function testFeatureRolePrefixedWithAn() + { + $description = <<assertTrue($filter->isFeatureMatch($feature)); + + $filter = new RoleFilter('american *'); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $filter = new RoleFilter('american'); + $this->assertFalse($filter->isFeatureMatch($feature)); + + $filter = new RoleFilter('user'); + $this->assertFalse($filter->isFeatureMatch($feature)); + + $filter = new RoleFilter('*user'); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $filter = new RoleFilter('American User'); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $feature = new FeatureNode(null, null, array(), null, array(), null, null, null, 1); + $filter = new RoleFilter('American User'); + $this->assertFalse($filter->isFeatureMatch($feature)); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/TagFilterTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/TagFilterTest.php new file mode 100644 index 000000000..5c6c9ab28 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Filter/TagFilterTest.php @@ -0,0 +1,144 @@ +assertEquals($feature, $filter->filterFeature($feature)); + + $scenarios = array( + new ScenarioNode(null, array(), array(), null, 2), + $matchedScenario = new ScenarioNode(null, array('wip'), array(), null, 4) + ); + $feature = new FeatureNode(null, null, array(), null, $scenarios, null, null, null, 1); + $filteredFeature = $filter->filterFeature($feature); + + $this->assertSame(array($matchedScenario), $filteredFeature->getScenarios()); + + $filter = new TagFilter('~@wip'); + $scenarios = array( + $matchedScenario = new ScenarioNode(null, array(), array(), null, 2), + new ScenarioNode(null, array('wip'), array(), null, 4) + ); + $feature = new FeatureNode(null, null, array(), null, $scenarios, null, null, null, 1); + $filteredFeature = $filter->filterFeature($feature); + + $this->assertSame(array($matchedScenario), $filteredFeature->getScenarios()); + } + + public function testIsFeatureMatchFilter() + { + $feature = new FeatureNode(null, null, array(), null, array(), null, null, null, 1); + + $filter = new TagFilter('@wip'); + $this->assertFalse($filter->isFeatureMatch($feature)); + + $feature = new FeatureNode(null, null, array('wip'), null, array(), null, null, null, 1); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $filter = new TagFilter('~@done'); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $feature = new FeatureNode(null, null, array('wip', 'done'), null, array(), null, null, null, 1); + $this->assertFalse($filter->isFeatureMatch($feature)); + + $feature = new FeatureNode(null, null, array('tag1', 'tag2', 'tag3'), null, array(), null, null, null, 1); + $filter = new TagFilter('@tag5,@tag4,@tag6'); + $this->assertFalse($filter->isFeatureMatch($feature)); + + $feature = new FeatureNode(null, null, array( + 'tag1', + 'tag2', + 'tag3', + 'tag5' + ), null, array(), null, null, null, 1); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $filter = new TagFilter('@wip&&@vip'); + $feature = new FeatureNode(null, null, array('wip', 'done'), null, array(), null, null, null, 1); + $this->assertFalse($filter->isFeatureMatch($feature)); + + $feature = new FeatureNode(null, null, array('wip', 'done', 'vip'), null, array(), null, null, null, 1); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $filter = new TagFilter('@wip,@vip&&@user'); + $feature = new FeatureNode(null, null, array('wip'), null, array(), null, null, null, 1); + $this->assertFalse($filter->isFeatureMatch($feature)); + + $feature = new FeatureNode(null, null, array('vip'), null, array(), null, null, null, 1); + $this->assertFalse($filter->isFeatureMatch($feature)); + + $feature = new FeatureNode(null, null, array('wip', 'user'), null, array(), null, null, null, 1); + $this->assertTrue($filter->isFeatureMatch($feature)); + + $feature = new FeatureNode(null, null, array('vip', 'user'), null, array(), null, null, null, 1); + $this->assertTrue($filter->isFeatureMatch($feature)); + } + + public function testIsScenarioMatchFilter() + { + $feature = new FeatureNode(null, null, array('feature-tag'), null, array(), null, null, null, 1); + $scenario = new ScenarioNode(null, array(), array(), null, 2); + + $filter = new TagFilter('@wip'); + $this->assertFalse($filter->isScenarioMatch($feature, $scenario)); + + $filter = new TagFilter('~@done'); + $this->assertTrue($filter->isScenarioMatch($feature, $scenario)); + + $scenario = new ScenarioNode(null, array( + 'tag1', + 'tag2', + 'tag3' + ), array(), null, 2); + $filter = new TagFilter('@tag5,@tag4,@tag6'); + $this->assertFalse($filter->isScenarioMatch($feature, $scenario)); + + $scenario = new ScenarioNode(null, array( + 'tag1', + 'tag2', + 'tag3', + 'tag5' + ), array(), null, 2); + $this->assertTrue($filter->isScenarioMatch($feature, $scenario)); + + $filter = new TagFilter('@wip&&@vip'); + $scenario = new ScenarioNode(null, array('wip', 'not-done'), array(), null, 2); + $this->assertFalse($filter->isScenarioMatch($feature, $scenario)); + + $scenario = new ScenarioNode(null, array( + 'wip', + 'not-done', + 'vip' + ), array(), null, 2); + $this->assertTrue($filter->isScenarioMatch($feature, $scenario)); + + $filter = new TagFilter('@wip,@vip&&@user'); + $scenario = new ScenarioNode(null, array( + 'wip' + ), array(), null, 2); + $this->assertFalse($filter->isScenarioMatch($feature, $scenario)); + + $scenario = new ScenarioNode(null, array('vip'), array(), null, 2); + $this->assertFalse($filter->isScenarioMatch($feature, $scenario)); + + $scenario = new ScenarioNode(null, array('wip', 'user'), array(), null, 2); + $this->assertTrue($filter->isScenarioMatch($feature, $scenario)); + + $filter = new TagFilter('@feature-tag&&@user'); + $scenario = new ScenarioNode(null, array('wip', 'user'), array(), null, 2); + $this->assertTrue($filter->isScenarioMatch($feature, $scenario)); + + $filter = new TagFilter('@feature-tag&&@user'); + $scenario = new ScenarioNode(null, array('wip'), array(), null, 2); + $this->assertFalse($filter->isScenarioMatch($feature, $scenario)); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/directories/phps/some_file.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/directories/phps/some_file.php new file mode 100644 index 000000000..e69de29bb diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/addition.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/addition.yml new file mode 100644 index 000000000..7627fe614 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/addition.yml @@ -0,0 +1,29 @@ +feature: + title: Addition + language: en + line: 2 + description: |- + In order to avoid silly mistakes + As a math idiot + I want to be told the sum of two numbers + + scenarios: + - + type: scenario + title: Add two numbers + line: 7 + steps: + - { keyword_type: 'Given', type: 'Given', text: 'I have entered 11 into the calculator', line: 8 } + - { keyword_type: 'Given', type: 'And', text: 'I have entered 12 into the calculator', line: 9 } + - { keyword_type: 'When', type: 'When', text: 'I press add', line: 10 } + - { keyword_type: 'Then', type: 'Then', text: 'the result should be 23 on the screen', line: 11 } + + - + type: scenario + title: Div two numbers + line: 13 + steps: + - { keyword_type: 'Given', type: 'Given', text: 'I have entered 10 into the calculator', line: 14 } + - { keyword_type: 'Given', type: 'And', text: 'I have entered 2 into the calculator', line: 15 } + - { keyword_type: 'When', type: 'When', text: 'I press div', line: 16 } + - { keyword_type: 'Then', type: 'Then', text: 'the result should be 5 on the screen', line: 17 } diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/background.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/background.yml new file mode 100644 index 000000000..a7b1a7b25 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/background.yml @@ -0,0 +1,18 @@ +feature: + title: Feature with background + language: en + line: 1 + description: ~ + + background: + line: 3 + steps: + - { keyword_type: Given, type: Given, text: a passing step, line: 4 } + + scenarios: + - + type: scenario + title: ~ + line: 6 + steps: + - { keyword_type: Given, type: Given, text: a failing step, line: 7 } diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/background_title.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/background_title.yml new file mode 100644 index 000000000..f69277d74 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/background_title.yml @@ -0,0 +1,26 @@ +feature: + title: Feature with titled background + language: en + line: 1 + description: ~ + + background: + line: 3 + title: |- + Some Background + title with + couple + of + | continuous | + """ + strings + steps: + - { keyword_type: Given, type: Given, text: a passing step, line: 10 } + + scenarios: + - + type: scenario + title: ~ + line: 12 + steps: + - { keyword_type: Given, type: Given, text: a failing step, line: 13 } diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/big_pystring.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/big_pystring.yml new file mode 100644 index 000000000..31089fd5d --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/big_pystring.yml @@ -0,0 +1,18 @@ +feature: + line: 1 + title: Big PyString + + scenarios: + - + type: scenario + line: 2 + steps: + - + keyword_type: Then + type: Then + text: it should fail with: + line: 3 + arguments: + - + type: pystring + text: "\n# language: ru\n\nUUUUUU\n\n2 scenarios (2 undefined)\n6 steps (6 undefined)\n\nYou can implement step definitions for undefined steps with these snippets:\n\n$steps->Given('/^I have entered (\\d+)$/', function($world, $arg1) {\n throw new \\Everzet\\Behat\\Exception\\Pending();\n});\n\n$steps->Then('/^I must have (\\d+)$/', function($world, $arg1) {\n throw new \\Everzet\\Behat\\Exception\\Pending();\n});\n\n$steps->Then('/^String must be \\'([^\\']*)\\'$/', function($world, $arg1) {\n throw new \\Everzet\\Behat\\Exception\\Pending();\n});" diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/clean_tags.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/clean_tags.yml new file mode 100644 index 000000000..014c8d38a --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/clean_tags.yml @@ -0,0 +1,20 @@ +feature: + title: Feature N4 + line: 1 + description: ~ + + scenarios: + - + type: scenario + tags: [normal] + line: 4 + steps: + - { keyword_type: 'Given', type: 'Given', text: 'Some normal step N41', line: 5 } + - { keyword_type: 'Given', type: 'And', text: 'Some fast step N42', line: 6 } + + - + type: scenario + tags: [fast] + line: 9 + steps: + - { keyword_type: 'Given', type: 'Given', text: 'Some slow step N43', line: 10 } diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/commented_out.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/commented_out.yml new file mode 100644 index 000000000..a8a2c5159 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/commented_out.yml @@ -0,0 +1,10 @@ +feature: + title: Fibonacci + language: en + line: 1 + description: |- + In order to calculate super fast fibonacci series + As a pythonista + I want to use Python for that + + scenarios: ~ diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/comments.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/comments.yml new file mode 100644 index 000000000..2ae46cbc1 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/comments.yml @@ -0,0 +1,21 @@ +feature: + title: Using the Console Formatter + language: en + line: 3 + description: |- + In order to verify this error # comment + + + + I want to run this feature using the progress format#comment + So that it can be fixed + + scenarios: + - + type: scenario + title: "A normal feature #comment in scenario title" + line: 19 + steps: + - { keyword_type: 'Given', type: 'Given', text: 'I have a pending step #comment', line: 21 } + - { keyword_type: 'When', type: 'When', text: 'I run this feature with the progress format #comment', line: 24 } + - { keyword_type: 'Then', type: 'Then', text: "I should get a no method error for 'backtrace_line'", line: 31 } diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/complex_descriptions.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/complex_descriptions.yml new file mode 100644 index 000000000..d0d65dc27 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/complex_descriptions.yml @@ -0,0 +1,26 @@ +feature: + title: Complex descriptions + language: en + line: 7 + description: |- + Some description with + | table | row| + + and + + """ + """ + + scenarios: + - + type: scenario + title: |- + Some + | complex | description | + + """ + hell yeah + """ + line: 16 + steps: + - { keyword_type: 'Given', type: 'Given', text: 'one two three', line: 22 } diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/empty.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/empty.yml new file mode 100644 index 000000000..e13f36391 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/empty.yml @@ -0,0 +1,7 @@ +feature: + title: Some feature + language: en + line: 1 + description: ~ + + scenarios: [] diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/empty_scenario.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/empty_scenario.yml new file mode 100644 index 000000000..43e7201d5 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/empty_scenario.yml @@ -0,0 +1,13 @@ +feature: + title: Cucumber command line + language: en + line: 1 + description: |- + In order to write better software + Developers should be able to execute requirements as tests + + scenarios: + - + type: scenario + title: Pending Scenario at the end of a file with whitespace after it + line: 6 diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/empty_scenario_without_linefeed.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/empty_scenario_without_linefeed.yml new file mode 100644 index 000000000..43e7201d5 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/empty_scenario_without_linefeed.yml @@ -0,0 +1,13 @@ +feature: + title: Cucumber command line + language: en + line: 1 + description: |- + In order to write better software + Developers should be able to execute requirements as tests + + scenarios: + - + type: scenario + title: Pending Scenario at the end of a file with whitespace after it + line: 6 diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/empty_scenarios.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/empty_scenarios.yml new file mode 100644 index 000000000..35a144ba0 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/empty_scenarios.yml @@ -0,0 +1,30 @@ +feature: + title: Math + language: en + line: 1 + description: |- + In order to avoid silly mistakes + As a math idiot + I want to be told the calculation of two numbers + + scenarios: + - + type: scenario + title: Add two numbers + line: 6 + steps: [] + - + type: scenario + title: Div two numbers + line: 7 + steps: [] + - + type: scenario + title: Multiply two numbers + line: 9 + steps: [] + - + type: scenario + title: Sub two numbers + line: 12 + steps: [] diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/fibonacci.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/fibonacci.yml new file mode 100644 index 000000000..c450a8b10 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/fibonacci.yml @@ -0,0 +1,27 @@ +feature: + title: Fibonacci + language: en + line: 1 + description: |- + In order to calculate super fast fibonacci series + As a pythonista + I want to use Python for that + + scenarios: + - + type: outline + title: Series + line: 6 + steps: + - { keyword_type: 'When', type: 'When', text: 'I ask python to calculate fibonacci up to ', line: 7 } + - { keyword_type: 'Then', type: 'Then', text: 'it should give me ', line: 8 } + + examples: + 11: [ n , series ] + 12: [ 1 , '[]' ] + 13: [ 2 , '[1, 1]' ] + 14: [ 3 , '[1, 1, 2]' ] + 15: [ 4 , '[1, 1, 2, 3]' ] + 16: [ 6 , '[1, 1, 2, 3, 5]' ] + 17: [ 9 , '[1, 1, 2, 3, 5, 8]' ] + 18: [ 100 , '[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]' ] diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/hashes_in_quotes.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/hashes_in_quotes.yml new file mode 100644 index 000000000..55abe3b22 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/hashes_in_quotes.yml @@ -0,0 +1,29 @@ +feature: + title: "Some '#quoted' string" + language: en + line: 2 + description: |- + In order to avoid silly mistakes + As a "#math" idiot + I want to be told the sum of two numbers + + scenarios: + - + type: scenario + title: Add two numbers + line: 7 + steps: + - { keyword_type: 'Given', type: 'Given', text: 'I have entered 11 into the calculator', line: 8 } + - { keyword_type: 'Given', type: 'And', text: 'I have entered 12 into the calculator', line: 9 } + - { keyword_type: 'When', type: 'When', text: 'I press "#add"', line: 10 } + - { keyword_type: 'Then', type: 'Then', text: 'the result should be 23 on the screen', line: 11 } + + - + type: scenario + title: 'Div "#two" numbers # as' + line: 13 + steps: + - { keyword_type: 'Given', type: 'Given', text: 'I have entered 10 into the calculator', line: 14 } + - { keyword_type: 'Given', type: 'And', text: 'I have entered # 2 into the calculator', line: 15 } + - { keyword_type: 'When', type: 'When', text: 'I press div', line: 16 } + - { keyword_type: 'Then', type: 'Then', text: 'the result should be 5 on the screen', line: 17 } diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/issue_13.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/issue_13.yml new file mode 100644 index 000000000..091103c2f --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/issue_13.yml @@ -0,0 +1,49 @@ +feature: + title: test pystring + description: second line + language: en + line: 1 + + scenarios: + - + type: scenario + title: |- + testing py string in scenario + second line + line: 4 + steps: + - + keyword_type: Given + type: Given + text: the pystring is + line: 7 + arguments: + - + type: pystring + text: |- + Test store name + Denmark, Kolding + 6000 + + - + type: outline + title: |- + testing py string in scenario outline + second line + line: 14 + steps: + - + keyword_type: Given + type: Given + text: the pystring is + line: 17 + arguments: + arguments: + - + type: pystring + text: |- + Test store name + Denmark, Kolding + 6000 + examples: + 24: [''] diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ja_addition.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ja_addition.yml new file mode 100644 index 000000000..d56aa4412 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ja_addition.yml @@ -0,0 +1,21 @@ +feature: + title: '加算' + keyword: 'フィーãƒãƒ£' + language: ja + line: 2 + description: |- + ãƒã‚«ãªé–“é•ã„ã‚’é¿ã‘ã‚‹ãŸã‚ã« + 数学オンãƒã¨ã—㦠+ 2ã¤ã®æ•°ã®åˆè¨ˆã‚’知りãŸã„ + + scenarios: + - + type: scenario + keyword: 'シナリオ' + title: '2ã¤ã®æ•°ã®åŠ ç®—ã«ã¤ã„ã¦' + line: 7 + steps: + - { keyword_type: 'Given', type: '剿', type: '剿', text: '50 を入力', line: 8 } + - { keyword_type: 'Given', type: 'ã‹ã¤', type: 'ã‹ã¤', text: '70 を入力', line: 9 } + - { keyword_type: 'When', type: 'ã‚‚ã—', type: 'ã‚‚ã—', text: 'add ボタンを押ã—ãŸ', line: 10 } + - { keyword_type: 'Then', type: 'ãªã‚‰ã°', type: 'ãªã‚‰ã°', text: 'çµæžœã¯ 120 を表示', line: 11 } diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/long_title_feature.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/long_title_feature.yml new file mode 100644 index 000000000..7e30cf54d --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/long_title_feature.yml @@ -0,0 +1,13 @@ +feature: + title: https://rspec.lighthouseapp.com/projects/16211/tickets/246-distorted-console-output-for-slightly-complicated-step-regexp-match + language: en + line: 1 + description: ~ + + scenarios: + - + type: scenario + title: See "No Record(s) Found" for Zero Existing + line: 3 + steps: + - { keyword_type: Given, type: Given, text: no public holiday exists in the system, line: 4 } diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/multiline_name.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/multiline_name.yml new file mode 100644 index 000000000..b41bc58d6 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/multiline_name.yml @@ -0,0 +1,44 @@ +feature: + title: multiline + language: en + line: 1 + description: ~ + + background: + line: 3 + steps: + - { keyword_type: Given, type: Given, text: passing without a table, line: 4 } + + scenarios: + - + type: scenario + title: |- + I'm a multiline name + which goes on and on and on for three lines + yawn + line: 6 + steps: + - { keyword_type: Given, type: Given, text: passing without a table, line: 9 } + + - + type: outline + title: |- + I'm a multiline name + which goes on and on and on for three lines + yawn + line: 11 + steps: + - { keyword_type: Given, type: 'Given', text: ' without a table', line: 14 } + examples: + 16: [state] + 17: [passing] + + - + type: outline + title: name + line: 19 + steps: + - { keyword_type: Given, type: 'Given', text: ' without a table', line: 20 } + examples: + 22: [state] + 23: [passing] diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/multiline_name_with_newlines.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/multiline_name_with_newlines.yml new file mode 100644 index 000000000..d7aebc06c --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/multiline_name_with_newlines.yml @@ -0,0 +1,65 @@ +feature: + title: multiline + language: en + line: 1 + description: |- + + Feature description + + With etc. + + background: + line: 8 + steps: + - { keyword_type: Given, type: Given, text: passing without a table, line: 11 } + + scenarios: + - + type: scenario + title: |- + + I'm a multiline name + which goes on and on and on for three lines + yawn + line: 13 + steps: + - { keyword_type: Given, type: Given, text: passing without a table, line: 19 } + + - + type: outline + title: |- + I'm a multiline name + + which goes on and on and on for three lines + + yawn + line: 21 + steps: + - { keyword_type: 'Given', type: 'Given', text: ' without a table', line: 28 } + examples: + 34: [state] + 35: [passing] + + - + type: outline + title: name + line: 37 + steps: + - { keyword_type: 'Given', type: 'Given', text: ' without a table', line: 40 } + examples: + 45: [state] + 46: [passing] + - + type: outline + title: |- + + + I'm a multiline name + which goes on and on and on for three lines + yawn + line: 48 + steps: + - { keyword_type: 'Given', type: 'Given', text: ' without a table', line: 55 } + examples: + 60: [state] + 61: [passing] diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/multiplepystrings.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/multiplepystrings.yml new file mode 100644 index 000000000..6c73bba01 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/multiplepystrings.yml @@ -0,0 +1,47 @@ +feature: + title: A multiple py string feature + line: 1 + language: en + description: ~ + + scenarios: + - + type: scenario + title: ~ + line: 3 + steps: + - + keyword_type: When + type: When + text: I enter a string + line: 4 + arguments: + - + type: pystring + text: |- + - + a string + with something + be + a + u + ti + ful + + - + keyword_type: Then + type: Then + text: String must be + line: 15 + arguments: + - + type: pystring + text: |- + - + a string + with something + be + a + u + ti + ful diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/outline_with_spaces.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/outline_with_spaces.yml new file mode 100644 index 000000000..c6e897725 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/outline_with_spaces.yml @@ -0,0 +1,33 @@ +feature: + title: Login + language: en + line: 1 + description: |- + To ensure the safety of the application + A regular user of the system + Must authenticate before using the app + + scenarios: + - + type: outline + title: Failed Login + line: 7 + steps: + - { keyword_type: 'Given', type: 'Given', text: 'the user "known_user"', line: 8 } + - { keyword_type: 'When', type: 'When', text: 'I go to the main page', line: 10 } + - { keyword_type: 'Then', type: 'Then', text: 'I should see the login form', line: 11 } + - { keyword_type: 'When', type: 'When', text: 'I fill in "login" with ""', line: 13 } + - { keyword_type: 'When', type: 'And', text: 'I fill in "password" with ""', line: 14 } + - { keyword_type: 'When', type: 'And', text: 'I press "Log In"', line: 15 } + - { keyword_type: 'Then', type: 'Then', text: 'the login request should fail', line: 16 } + - { keyword_type: 'Then', type: 'And', text: 'I should see the error message "Login or Password incorrect"', line: 17 } + examples: + 20: [login, password] + 21: ['', ''] + 22: [unknown_user, ''] + 23: [known_user, ''] + 24: ['', wrong_password] + 25: ['', known_userpass] + 26: [unknown_user, wrong_password] + 27: [unknown_user, known_userpass] + 28: [known_user, wrong_password] diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/outline_with_step_table.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/outline_with_step_table.yml new file mode 100644 index 000000000..8c59ff132 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/outline_with_step_table.yml @@ -0,0 +1,29 @@ +feature: + title: Unsubstituted argument placeholder + language: en + line: 1 + description: ~ + + scenarios: + - + type: outline + title: 'See Annual Leave Details (as Management & Human Resource)' + line: 3 + steps: + - + keyword_type: Given + type: Given + text: the following users exist in the system + line: 4 + arguments: + - + type: table + rows: + 5: [ name, email, role_assignments, group_memberships ] + 6: [ Jane, jane@fmail.com, , Sales (manager) ] + 7: [ Max, max@fmail.com, '', Sales (member) ] + 8: [ Carol, carol@fmail.com, '', Sales (member) ] + 9: [ Cat, cat@fmail.com, '', '' ] + examples: + 12: [ role ] + 13: [ HUMAN RESOURCE ] diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/pystring.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/pystring.yml new file mode 100644 index 000000000..bc21a9a95 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/pystring.yml @@ -0,0 +1,22 @@ +feature: + title: A py string feature + language: en + line: 1 + description: ~ + + scenarios: + - + type: scenario + title: ~ + line: 3 + steps: + - + keyword_type: Then + type: Then + text: I should see + line: 4 + arguments: + - + type: pystring + swallow: 6 + text: "a string with #something" diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ru_addition.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ru_addition.yml new file mode 100644 index 000000000..9c0db4aa2 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ru_addition.yml @@ -0,0 +1,21 @@ +feature: + title: Сложение чиÑел + keyword: Функционал + language: ru + line: 2 + description: |- + Чтобы не Ñкладывать в уме + Ð’Ñе, у кого Ñ Ñтим туго + ХотÑÑ‚ автоматичеÑкое Ñложение целых чиÑел + + scenarios: + - + type: scenario + keyword: Сценарий + title: Сложение двух целых чиÑел + line: 7 + steps: + - { keyword_type: 'Given', type: 'ДопуÑтим', text: 'Ñ Ð²Ð²Ð¾Ð¶Ñƒ чиÑло 50', line: 8 } + - { keyword_type: 'Given', type: 'И', text: 'затем ввожу чиÑло 70', line: 9 } + - { keyword_type: 'Then', type: 'ЕÑли', text: 'Ñ Ð½Ð°Ð¶Ð¸Ð¼Ð°ÑŽ "+"', line: 10 } + - { keyword_type: 'When', type: 'То', text: 'результатом должно быть чиÑло 120', line: 11 } diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ru_commented.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ru_commented.yml new file mode 100644 index 000000000..1097d5d5f --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ru_commented.yml @@ -0,0 +1,11 @@ +feature: + title: ТеÑÑ‚ комментов + keyword: Функционал + language: ru + line: 7 + description: |- + i18n должен правильно ÑчитыватьÑÑ + Даже еÑли в начале файла 1000 + комментов! + + scenarios: ~ diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ru_consecutive_calculations.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ru_consecutive_calculations.yml new file mode 100644 index 000000000..358d86787 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ru_consecutive_calculations.yml @@ -0,0 +1,34 @@ +feature: + title: ПоÑледовательные вычиÑÐ»ÐµÐ½Ð¸Ñ + keyword: Функционал + language: ru + line: 2 + description: |- + Чтобы вычиÑлÑть Ñложные Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ + Пользователи хотÑÑ‚ проводить вычиÑÐ»ÐµÐ½Ð¸Ñ Ð½Ð°Ð´ результатом предыдущей операций + + background: + keyword: ПредыÑÑ‚Ð¾Ñ€Ð¸Ñ + line: 6 + steps: + - { keyword_type: Given, type: ДопуÑтим, text: Ñ Ñложил 3 и 5, line: 7 } + + scenarios: + - + type: scenario + keyword: Сценарий + title: Ñложение Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð¾Ð¼ поÑледней операций + line: 9 + steps: + - { keyword_type: Then, type: ЕÑли, text: 'Ñ Ð²Ð²Ð¾Ð¶Ñƒ чиÑло 4', line: 10 } + - { keyword_type: Then, type: И, text: 'нажимаю "+"', line: 11 } + - { keyword_type: When, type: То, text: 'результатом должно быть чиÑло 12', line: 12 } + - + type: scenario + keyword: Сценарий + title: деление результата поÑледней операции + line: 14 + steps: + - { keyword_type: Then, type: ЕÑли, text: 'Ñ Ð²Ð²Ð¾Ð¶Ñƒ чиÑло 2', line: 15 } + - { keyword_type: Then, type: И, text: 'нажимаю "/"', line: 16 } + - { keyword_type: When, type: То, text: 'результатом должно быть чиÑло 4', line: 17 } diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ru_division.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ru_division.yml new file mode 100644 index 000000000..b4d3005c7 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/ru_division.yml @@ -0,0 +1,27 @@ +feature: + title: Деление чиÑел + keyword: Функционал + language: ru + line: 2 + description: |- + ПоÑкольку деление Ñложный процеÑÑ Ð¸ люди чаÑто допуÑкают ошибки + Ðужно дать им возможноÑть делить на калькулÑторе + + scenarios: + - + type: outline + keyword: Структура ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ + title: ЦелочиÑленное деление + line: 6 + steps: + - { keyword_type: Given, type: 'ДопуÑтим', text: 'Ñ Ð²Ð²Ð¾Ð¶Ñƒ чиÑло <делимое>', line: 7 } + - { keyword_type: Given, type: 'И', text: 'затем ввожу чиÑло <делитель>', line: 8 } + - { keyword_type: Then, type: 'ЕÑли', text: 'Ñ Ð½Ð°Ð¶Ð¸Ð¼Ð°ÑŽ "/"', line: 9 } + - { keyword_type: When, type: 'То', text: 'результатом должно быть чиÑло <чаÑтное>', line: 10 } + + examples: + keyword: Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ + 13: [делимое, делитель, чаÑтное] + 14: [100, 2, 50] + 15: [28, 7, 4] + 16: [0, 5, 0] diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/start_comments.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/start_comments.yml new file mode 100644 index 000000000..45fcd77cd --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/start_comments.yml @@ -0,0 +1,18 @@ +feature: + title: Using the Console Formatter + language: en + line: 3 + description: |- + In order to verify this error + I want to run this feature using the progress format + So that it can be fixed + + scenarios: + - + type: scenario + title: A normal feature + line: 8 + steps: + - { keyword_type: 'Given', type: 'Given', text: 'I have a pending step', line: 9 } + - { keyword_type: 'When', type: 'When', text: 'I run this feature with the progress format', line: 10 } + - { keyword_type: 'Then', type: 'Then', text: "I should get a no method error for 'backtrace_line'", line: 11 } diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/tables.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/tables.yml new file mode 100644 index 000000000..97966665f --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/tables.yml @@ -0,0 +1,42 @@ +feature: + title: A scenario outline + language: en + line: 1 + description: ~ + + scenarios: + - + type: outline + title: ~ + line: 3 + steps: + - { keyword_type: Given, type: Given, text: I add and , line: 4 } + - + keyword_type: When + type: When + text: I pass a table argument + line: 6 + arguments: + - + type: table + rows: + 7: [foo, bar] + 8: [bar, baz] + - { keyword_type: Then, type: Then, text: I the result should be , line: 10 } + - + keyword_type: Then + type: And + text: the table should be properly escaped: + line: 12 + arguments: + - + type: table + rows: + 13: ['|a', b, c] + 14: [1, '|2', 3] + 15: [2, 3, '|4'] + + examples: + 18: [ a, b, c ] + 19: [ 1, '|2', 3 ] + 20: [ 2, 3, 4 ] diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/tags_sample.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/tags_sample.yml new file mode 100644 index 000000000..486d9585c --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/tags_sample.yml @@ -0,0 +1,35 @@ +feature: + title: Tag samples + language: en + tags: [sample_one] + line: 2 + description: ~ + + scenarios: + - + type: scenario + title: Passing + tags: [sample_two, sample_four] + line: 5 + steps: + - { keyword_type: 'Given', type: 'Given', text: 'missing', line: 6 } + + - + type: outline + title: ~ + tags: [sample_three] + line: 9 + steps: + - { keyword_type: 'Given', type: 'Given', text: '', line: 10 } + + examples: + 12: [state] + 13: [missing] + + - + type: scenario + title: Skipped + tags: [sample_three, sample_four] + line: 16 + steps: + - { keyword_type: 'Given', type: 'Given', text: 'missing', line: 17 } diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/test_unit.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/test_unit.yml new file mode 100644 index 000000000..fca7e2075 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/test_unit.yml @@ -0,0 +1,18 @@ +feature: + title: Test::Unit + language: en + line: 1 + description: |- + In order to please people who like Test::Unit + As a Cucumber user + I want to be able to use assert* in my step definitions + + scenarios: + - + type: scenario + title: assert_equal + line: 6 + steps: + - { keyword_type: 'Given', type: 'Given', text: 'x = 5', line: 7 } + - { keyword_type: 'Given', type: 'And', text: 'y = 5', line: 8 } + - { keyword_type: 'Then', type: 'Then', text: 'I can assert that x == y', line: 9 } diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/trimpystring.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/trimpystring.yml new file mode 100644 index 000000000..3857fdf3d --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/trimpystring.yml @@ -0,0 +1,29 @@ +feature: + title: A py string feature + language: en + line: 1 + description: ~ + + scenarios: + - + type: scenario + title: ~ + line: 3 + steps: + - + keyword_type: Then + type: Then + text: String must be + line: 4 + arguments: + - + type: pystring + text: |- + - + a string + with something + be + a + u + ti + ful diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/undefined_multiline_args.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/undefined_multiline_args.yml new file mode 100644 index 000000000..84cb8ff64 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/etalons/undefined_multiline_args.yml @@ -0,0 +1,38 @@ +feature: + title: undefined multiline args + language: en + line: 1 + description: ~ + + scenarios: + - + type: scenario + title: pystring + line: 3 + steps: + - + keyword_type: Given + type: Given + text: a pystring + line: 4 + arguments: + - + type: pystring + text: ' example' + + - + type: scenario + title: table + line: 9 + steps: + - + keyword_type: Given + type: Given + text: a table + line: 10 + arguments: + - + type: table + rows: + 11: [table] + 12: [example] diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/addition.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/addition.feature new file mode 100644 index 000000000..744184f16 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/addition.feature @@ -0,0 +1,17 @@ +# language: en +Feature: Addition + In order to avoid silly mistakes + As a math idiot + I want to be told the sum of two numbers + + Scenario: Add two numbers + Given I have entered 11 into the calculator + And I have entered 12 into the calculator + When I press add + Then the result should be 23 on the screen + + Scenario: Div two numbers + Given I have entered 10 into the calculator + And I have entered 2 into the calculator + When I press div + Then the result should be 5 on the screen diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/background.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/background.feature new file mode 100644 index 000000000..9a3ffb82c --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/background.feature @@ -0,0 +1,7 @@ +Feature: Feature with background + + Background: + Given a passing step + + Scenario: + Given a failing step \ No newline at end of file diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/background_title.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/background_title.feature new file mode 100644 index 000000000..d8ed4d3d4 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/background_title.feature @@ -0,0 +1,13 @@ +Feature: Feature with titled background + + Background: Some Background + title with + couple + of + | continuous | + """ + strings + Given a passing step + + Scenario: + Given a failing step diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/big_pystring.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/big_pystring.feature new file mode 100644 index 000000000..900d6c718 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/big_pystring.feature @@ -0,0 +1,26 @@ +Feature: Big PyString + Scenario: + Then it should fail with: + """ + + # language: ru + + UUUUUU + + 2 scenarios (2 undefined) + 6 steps (6 undefined) + + You can implement step definitions for undefined steps with these snippets: + + $steps->Given('/^I have entered (\d+)$/', function($world, $arg1) { + throw new \Everzet\Behat\Exception\Pending(); + }); + + $steps->Then('/^I must have (\d+)$/', function($world, $arg1) { + throw new \Everzet\Behat\Exception\Pending(); + }); + + $steps->Then('/^String must be \'([^\']*)\'$/', function($world, $arg1) { + throw new \Everzet\Behat\Exception\Pending(); + }); + """ diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/clean_tags.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/clean_tags.feature new file mode 100644 index 000000000..e3e9cc7bd --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/clean_tags.feature @@ -0,0 +1,10 @@ +Feature: Feature N4 + + @normal + Scenario: + Given Some normal step N41 + And Some fast step N42 + + @fast + Scenario: + Given Some slow step N43 diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/commented_out.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/commented_out.feature new file mode 100644 index 000000000..61d7bef59 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/commented_out.feature @@ -0,0 +1,34 @@ +Feature: Fibonacci + In order to calculate super fast fibonacci series + As a pythonista + I want to use Python for that + +# +# Background: +# Given passing without a table +# +# Scenario: I'm a multiline name +# which goes on and on and on for three lines +# yawn +# Given passing without a table +# +# Scenario: +# Then I should see +# """ +# a string with #something +# """ +# +# Scenario Outline: Series +# When I ask python to calculate fibonacci up to +# Then it should give me +# +# Examples: +# | n | series | +# | 1 | [] | +# | 2 | [1, 1] | +# | 3 | [1, 1, 2] | +# | 4 | [1, 1, 2, 3] | +# | 6 | [1, 1, 2, 3, 5] | +# | 9 | [1, 1, 2, 3, 5, 8] | +# | 100 | [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] | +# diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/comments.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/comments.feature new file mode 100644 index 000000000..02ca25cc9 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/comments.feature @@ -0,0 +1,32 @@ +# Users want to use cucumber, so tests are necessary to verify +# it is all working as expected +Feature: Using the Console Formatter +# com +# comment +#com + In order to verify this error # comment + + + + I want to run this feature using the progress format#comment + # COMMENT + # COMMENT + # COMMENT + # COMMENT + So that it can be fixed + + #comment + Scenario: A normal feature #comment in scenario title + #comment + Given I have a pending step #comment + #comment + #comment + When I run this feature with the progress format #comment + + +#comment + #comment + #comment + + Then I should get a no method error for 'backtrace_line' + diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/complex_descriptions.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/complex_descriptions.feature new file mode 100644 index 000000000..4db3b874e --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/complex_descriptions.feature @@ -0,0 +1,22 @@ +# language: en + +# multiline +# comment +# YEAH + +Feature: Complex descriptions + Some description with + | table | row| + + and + + """ + """ + + Scenario: Some + | complex | description | + +""" +hell yeah +""" +Given one two three diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/empty.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/empty.feature new file mode 100644 index 000000000..8a560d71d --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/empty.feature @@ -0,0 +1,2 @@ +Feature: Some feature +# \ No newline at end of file diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/empty_scenario.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/empty_scenario.feature new file mode 100644 index 000000000..6c661c123 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/empty_scenario.feature @@ -0,0 +1,7 @@ +Feature: Cucumber command line + In order to write better software + Developers should be able to execute requirements as tests + + + Scenario: Pending Scenario at the end of a file with whitespace after it + diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/empty_scenario_without_linefeed.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/empty_scenario_without_linefeed.feature new file mode 100644 index 000000000..7e17ff2ad --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/empty_scenario_without_linefeed.feature @@ -0,0 +1,7 @@ +Feature: Cucumber command line + In order to write better software + Developers should be able to execute requirements as tests + + + Scenario: Pending Scenario at the end of a file with whitespace after it + # \ No newline at end of file diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/empty_scenarios.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/empty_scenarios.feature new file mode 100644 index 000000000..f17bef5e5 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/empty_scenarios.feature @@ -0,0 +1,12 @@ +Feature: Math + In order to avoid silly mistakes + As a math idiot + I want to be told the calculation of two numbers + + Scenario: Add two numbers + Scenario: Div two numbers + + Scenario: Multiply two numbers + + + Scenario: Sub two numbers diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/fibonacci.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/fibonacci.feature new file mode 100644 index 000000000..4a743ea72 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/fibonacci.feature @@ -0,0 +1,19 @@ +Feature: Fibonacci + In order to calculate super fast fibonacci series + As a pythonista + I want to use Python for that + + Scenario Outline: Series + When I ask python to calculate fibonacci up to + Then it should give me + + Examples: + | n | series | + | 1 | [] | + | 2 | [1, 1] | + | 3 | [1, 1, 2] | + | 4 | [1, 1, 2, 3] | + | 6 | [1, 1, 2, 3, 5] | + | 9 | [1, 1, 2, 3, 5, 8] | + | 100 | [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] | + diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/hashes_in_quotes.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/hashes_in_quotes.feature new file mode 100644 index 000000000..e08fa7043 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/hashes_in_quotes.feature @@ -0,0 +1,17 @@ +# language: en +Feature: Some '#quoted' string + In order to avoid silly mistakes + As a "#math" idiot + I want to be told the sum of two numbers + + Scenario: Add two numbers + Given I have entered 11 into the calculator + And I have entered 12 into the calculator + When I press "#add" + Then the result should be 23 on the screen + + Scenario: Div "#two" numbers # as + Given I have entered 10 into the calculator + And I have entered # 2 into the calculator + When I press div + Then the result should be 5 on the screen diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/issue_13.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/issue_13.feature new file mode 100644 index 000000000..4218a974a --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/issue_13.feature @@ -0,0 +1,24 @@ +Feature: test pystring +second line + +Scenario: testing py string in scenario +second line + +Given the pystring is +""" +Test store name +Denmark, Kolding +6000 +""" + +Scenario Outline: testing py string in scenario outline +second line + +Given the pystring is +""" +Test store name +Denmark, Kolding +6000 +""" + Examples: + || diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ja_addition.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ja_addition.feature new file mode 100644 index 000000000..b843852d9 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ja_addition.feature @@ -0,0 +1,11 @@ +# language: ja +フィーãƒãƒ£: 加算 + ãƒã‚«ãªé–“é•ã„ã‚’é¿ã‘ã‚‹ãŸã‚ã« + 数学オンãƒã¨ã—㦠+ 2ã¤ã®æ•°ã®åˆè¨ˆã‚’知りãŸã„ + + シナリオ: 2ã¤ã®æ•°ã®åŠ ç®—ã«ã¤ã„㦠+ 剿 50 を入力 + ã‹ã¤ 70 を入力 + ã‚‚ã— add ボタンを押ã—㟠+ ãªã‚‰ã°çµæžœã¯ 120 を表示 \ No newline at end of file diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/long_title_feature.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/long_title_feature.feature new file mode 100644 index 000000000..a93cb4d83 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/long_title_feature.feature @@ -0,0 +1,4 @@ +Feature: https://rspec.lighthouseapp.com/projects/16211/tickets/246-distorted-console-output-for-slightly-complicated-step-regexp-match + +Scenario: See "No Record(s) Found" for Zero Existing + Given no public holiday exists in the system diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/multiline_name.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/multiline_name.feature new file mode 100644 index 000000000..95b9d5590 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/multiline_name.feature @@ -0,0 +1,23 @@ +Feature: multiline + + Background: + Given passing without a table + + Scenario: I'm a multiline name + which goes on and on and on for three lines + yawn + Given passing without a table + + Scenario Outline: I'm a multiline name + which goes on and on and on for three lines + yawn + Given without a table + Examples: + | state | + |passing| + + Scenario Outline: name + Given without a table + Examples: + | state | + |passing| diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/multiline_name_with_newlines.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/multiline_name_with_newlines.feature new file mode 100644 index 000000000..bfc3e064e --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/multiline_name_with_newlines.feature @@ -0,0 +1,61 @@ +Feature: multiline + + Feature description + + With etc. + + + Background: + + + Given passing without a table + + Scenario: + I'm a multiline name + which goes on and on and on for three lines + yawn + + + Given passing without a table + + Scenario Outline: I'm a multiline name + + which goes on and on and on for three lines + + yawn + + + Given without a table + + + Examples: + + + | state | + |passing| + + Scenario Outline: name + + + Given without a table + + + Examples: + + | state | + |passing| + + Scenario Outline: + + I'm a multiline name + which goes on and on and on for three lines + yawn + + + Given without a table + + + Examples: + + | state | + |passing| diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/multiplepystrings.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/multiplepystrings.feature new file mode 100644 index 000000000..f5526af42 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/multiplepystrings.feature @@ -0,0 +1,25 @@ +Feature: A multiple py string feature + + Scenario: + When I enter a string + """ +- + a string + with something + be + a + u + ti + ful + """ + Then String must be + """ +- + a string + with something + be + a + u + ti + ful + """ diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/outline_with_spaces.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/outline_with_spaces.feature new file mode 100644 index 000000000..e587faada --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/outline_with_spaces.feature @@ -0,0 +1,28 @@ +Feature: Login + To ensure the safety of the application + A regular user of the system + Must authenticate before using the app + + + Scenario Outline: Failed Login + Given the user "known_user" + + When I go to the main page + Then I should see the login form + + When I fill in "login" with "" + And I fill in "password" with "" + And I press "Log In" + Then the login request should fail + And I should see the error message "Login or Password incorrect" + + Examples: + | login | password | + | | | + | unknown_user | | + | known_user | | + | | wrong_password | + | | known_userpass | + | unknown_user | wrong_password | + | unknown_user | known_userpass | + | known_user | wrong_password | diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/outline_with_step_table.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/outline_with_step_table.feature new file mode 100644 index 000000000..9d317719e --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/outline_with_step_table.feature @@ -0,0 +1,13 @@ +Feature: Unsubstituted argument placeholder + + Scenario Outline: See Annual Leave Details (as Management & Human Resource) + Given the following users exist in the system + | name | email | role_assignments | group_memberships | + | Jane | jane@fmail.com | | Sales (manager) | + | Max | max@fmail.com | | Sales (member) | + | Carol | carol@fmail.com | | Sales (member) | + | Cat | cat@fmail.com | | | + + Examples: + | role | + | HUMAN RESOURCE | diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/pystring.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/pystring.feature new file mode 100644 index 000000000..601373f25 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/pystring.feature @@ -0,0 +1,8 @@ +Feature: A py string feature + + Scenario: + Then I should see + """ + a string with #something + """ + \ No newline at end of file diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ru_addition.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ru_addition.feature new file mode 100644 index 000000000..eda57222a --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ru_addition.feature @@ -0,0 +1,11 @@ +# language: ru +Функционал: Сложение чиÑел + Чтобы не Ñкладывать в уме + Ð’Ñе, у кого Ñ Ñтим туго + ХотÑÑ‚ автоматичеÑкое Ñложение целых чиÑел + + Сценарий: Сложение двух целых чиÑел + ДопуÑтим Ñ Ð²Ð²Ð¾Ð¶Ñƒ чиÑло 50 + И затем ввожу чиÑло 70 + ЕÑли Ñ Ð½Ð°Ð¶Ð¸Ð¼Ð°ÑŽ "+" + То результатом должно быть чиÑло 120 \ No newline at end of file diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ru_commented.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ru_commented.feature new file mode 100644 index 000000000..36cbd054e --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ru_commented.feature @@ -0,0 +1,10 @@ +# Comments +# comments +# COOOOOMMEEEENTS +# +# language: ru + +Функционал: ТеÑÑ‚ комментов + i18n должен правильно ÑчитыватьÑÑ + Даже еÑли в начале файла 1000 + комментов! diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ru_consecutive_calculations.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ru_consecutive_calculations.feature new file mode 100644 index 000000000..87cc7f2ee --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ru_consecutive_calculations.feature @@ -0,0 +1,17 @@ +# language: ru +Функционал: ПоÑледовательные вычиÑÐ»ÐµÐ½Ð¸Ñ + Чтобы вычиÑлÑть Ñложные Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ + Пользователи хотÑÑ‚ проводить вычиÑÐ»ÐµÐ½Ð¸Ñ Ð½Ð°Ð´ результатом предыдущей операций + + ПредыÑториÑ: + ДопуÑтим Ñ Ñложил 3 и 5 + + Сценарий: Ñложение Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð¾Ð¼ поÑледней операций + ЕÑли Ñ Ð²Ð²Ð¾Ð¶Ñƒ чиÑло 4 + И нажимаю "+" + То результатом должно быть чиÑло 12 + + Сценарий: деление результата поÑледней операции + ЕÑли Ñ Ð²Ð²Ð¾Ð¶Ñƒ чиÑло 2 + И нажимаю "/" + То результатом должно быть чиÑло 4 \ No newline at end of file diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ru_division.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ru_division.feature new file mode 100644 index 000000000..7f024f6bb --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/ru_division.feature @@ -0,0 +1,16 @@ +# language: ru +Функционал: Деление чиÑел + ПоÑкольку деление Ñложный процеÑÑ Ð¸ люди чаÑто допуÑкают ошибки + Ðужно дать им возможноÑть делить на калькулÑторе + + Структура ÑценариÑ: ЦелочиÑленное деление + ДопуÑтим Ñ Ð²Ð²Ð¾Ð¶Ñƒ чиÑло <делимое> + И затем ввожу чиÑло <делитель> + ЕÑли Ñ Ð½Ð°Ð¶Ð¸Ð¼Ð°ÑŽ "/" + То результатом должно быть чиÑло <чаÑтное> + + ЗначениÑ: + | делимое | делитель | чаÑтное | + | 100 | 2 | 50 | + | 28 | 7 | 4 | + | 0 | 5 | 0 | \ No newline at end of file diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/start_comments.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/start_comments.feature new file mode 100644 index 000000000..45dd501a3 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/start_comments.feature @@ -0,0 +1,12 @@ +# Users want to use cucumber, so tests are necessary to verify +# it is all working as expected +Feature: Using the Console Formatter + In order to verify this error + I want to run this feature using the progress format + So that it can be fixed + + Scenario: A normal feature + Given I have a pending step + When I run this feature with the progress format + Then I should get a no method error for 'backtrace_line' + diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/tables.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/tables.feature new file mode 100644 index 000000000..92f4c78fc --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/tables.feature @@ -0,0 +1,20 @@ +Feature: A scenario outline + # COMMENT + Scenario Outline: + Given I add and + # comment + When I pass a table argument + | foo | bar | + | bar | baz | + #comment + Then I the result should be + # comment + And the table should be properly escaped: + | \|a | b | c | + | 1 | \|2 | 3 | + | 2 | 3 | \|4 | +#comment + Examples: + | a | b | c | + | 1 | \|2 | 3 | + | 2 | 3 | 4 | diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/tags_sample.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/tags_sample.feature new file mode 100644 index 000000000..21eaaab16 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/tags_sample.feature @@ -0,0 +1,17 @@ +@sample_one +Feature: Tag samples + + @sample_two @sample_four + Scenario: Passing + Given missing + + @sample_three + Scenario Outline: + Given + Examples: + |state| + |missing| + + @sample_three @sample_four + Scenario: Skipped + Given missing \ No newline at end of file diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/test_unit.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/test_unit.feature new file mode 100644 index 000000000..ed08ba42b --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/test_unit.feature @@ -0,0 +1,9 @@ +Feature: Test::Unit + In order to please people who like Test::Unit + As a Cucumber user + I want to be able to use assert* in my step definitions + + Scenario: assert_equal + Given x = 5 + And y = 5 + Then I can assert that x == y diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/trimpystring.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/trimpystring.feature new file mode 100644 index 000000000..4e04950b0 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/trimpystring.feature @@ -0,0 +1,14 @@ +Feature: A py string feature + + Scenario: + Then String must be + """ + - + a string + with something + be + a + u + ti + ful + """ diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/undefined_multiline_args.feature b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/undefined_multiline_args.feature new file mode 100644 index 000000000..ae3c7321b --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/features/undefined_multiline_args.feature @@ -0,0 +1,12 @@ +Feature: undefined multiline args + + Scenario: pystring + Given a pystring + """ + example + """ + + Scenario: table + Given a table + | table | + |example| \ No newline at end of file diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/i18n.yml b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/i18n.yml new file mode 100644 index 000000000..398c60cf5 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Fixtures/i18n.yml @@ -0,0 +1,606 @@ + +# +# !!! DON'T TOUCH THIS FILE, IT WAS AUTODOWNLOADED FROM: +# https://github.com/cucumber/gherkin/blob/master/lib/gherkin/i18n.yml +# + +# encoding: UTF-8 +# +# We use ISO 639-1 (language) and ISO 3166 alpha-2 (region - if applicable): +# http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes +# http://en.wikipedia.org/wiki/ISO_3166-1 +# +# If you want several aliases for a keyword, just separate them +# with a | character. The * is a step keyword alias for all translations. +# +# If you do *not* want a trailing space after a keyword, end it with a < character. +# (See Chinese for examples). +# +"en": + name: English + native: English + feature: Feature + background: Background + scenario: Scenario + scenario_outline: Scenario Outline|Scenario Template + examples: Examples|Scenarios + given: "*|Given" + when: "*|When" + then: "*|Then" + and: "*|And" + but: "*|But" + +# Please keep the grammars in alphabetical order by name from here and down. + +"ar": + name: Arabic + native: العربية + feature: خاصية + background: الخلÙية + scenario: سيناريو + scenario_outline: سيناريو مخطط + examples: امثلة + given: "*|Ø¨ÙØ±Ø¶" + when: "*|متى|عندما" + then: "*|اذاً|ثم" + and: "*|Ùˆ" + but: "*|لكن" +"bg": + name: Bulgarian + native: българÑки + feature: ФункционалноÑÑ‚ + background: ПредиÑÑ‚Ð¾Ñ€Ð¸Ñ + scenario: Сценарий + scenario_outline: Рамка на Ñценарий + examples: Примери + given: "*|Дадено" + when: "*|Когато" + then: "*|То" + and: "*|И" + but: "*|Ðо" +"ca": + name: Catalan + native: català + background: Rerefons|Antecedents + feature: Característica|Funcionalitat + scenario: Escenari + scenario_outline: Esquema de l'escenari + examples: Exemples + given: "*|Donat|Donada|Atès|Atesa" + when: "*|Quan" + then: "*|Aleshores|Cal" + and: "*|I" + but: "*|Però" +"cy-GB": + name: Welsh + native: Cymraeg + background: Cefndir + feature: Arwedd + scenario: Scenario + scenario_outline: Scenario Amlinellol + examples: Enghreifftiau + given: "*|Anrhegedig a" + when: "*|Pryd" + then: "*|Yna" + and: "*|A" + but: "*|Ond" +"cs": + name: Czech + native: ÄŒesky + feature: Požadavek + background: Pozadí|Kontext + scenario: Scénář + scenario_outline: NáÄrt Scénáře|Osnova scénáře + examples: Příklady + given: "*|Pokud" + when: "*|Když" + then: "*|Pak" + and: "*|A také|A" + but: "*|Ale" +"da": + name: Danish + native: dansk + feature: Egenskab + background: Baggrund + scenario: Scenarie + scenario_outline: Abstrakt Scenario + examples: Eksempler + given: "*|Givet" + when: "*|NÃ¥r" + then: "*|SÃ¥" + and: "*|Og" + but: "*|Men" +"de": + name: German + native: Deutsch + feature: Funktionalität + background: Grundlage + scenario: Szenario + scenario_outline: Szenariogrundriss + examples: Beispiele + given: "*|Angenommen|Gegeben sei" + when: "*|Wenn" + then: "*|Dann" + and: "*|Und" + but: "*|Aber" +"en-au": + name: Australian + native: Australian + feature: Crikey + background: Background + scenario: Mate + scenario_outline: Blokes + examples: Cobber + given: "*|Ya know how" + when: "*|When" + then: "*|Ya gotta" + and: "*|N" + but: "*|Cept" +"en-lol": + name: LOLCAT + native: LOLCAT + feature: OH HAI + background: B4 + scenario: MISHUN + scenario_outline: MISHUN SRSLY + examples: EXAMPLZ + given: "*|I CAN HAZ" + when: "*|WEN" + then: "*|DEN" + and: "*|AN" + but: "*|BUT" +"en-pirate": + name: Pirate + native: Pirate + feature: Ahoy matey! + background: Yo-ho-ho + scenario: Heave to + scenario_outline: Shiver me timbers + examples: Dead men tell no tales + given: "*|Gangway!" + when: "*|Blimey!" + then: "*|Let go and haul" + and: "*|Aye" + but: "*|Avast!" +"en-Scouse": + name: Scouse + native: Scouse + feature: Feature + background: "Dis is what went down" + scenario: "The thing of it is" + scenario_outline: "Wharrimean is" + examples: Examples + given: "*|Givun|Youse know when youse got" + when: "*|Wun|Youse know like when" + then: "*|Dun|Den youse gotta" + and: "*|An" + but: "*|Buh" +"en-tx": + name: Texan + native: Texan + feature: Feature + background: Background + scenario: Scenario + scenario_outline: All y'all + examples: Examples + given: "*|Given y'all" + when: "*|When y'all" + then: "*|Then y'all" + and: "*|And y'all" + but: "*|But y'all" +"eo": + name: Esperanto + native: Esperanto + feature: Trajto + background: Fono + scenario: Scenaro + scenario_outline: Konturo de la scenaro + examples: Ekzemploj + given: "*|Donitaĵo" + when: "*|Se" + then: "*|Do" + and: "*|Kaj" + but: "*|Sed" +"es": + name: Spanish + native: español + background: Antecedentes + feature: Característica + scenario: Escenario + scenario_outline: Esquema del escenario + examples: Ejemplos + given: "*|Dado|Dada|Dados|Dadas" + when: "*|Cuando" + then: "*|Entonces" + and: "*|Y" + but: "*|Pero" +"et": + name: Estonian + native: eesti keel + feature: Omadus + background: Taust + scenario: Stsenaarium + scenario_outline: Raamstsenaarium + examples: Juhtumid + given: "*|Eeldades" + when: "*|Kui" + then: "*|Siis" + and: "*|Ja" + but: "*|Kuid" +"fi": + name: Finnish + native: suomi + feature: Ominaisuus + background: Tausta + scenario: Tapaus + scenario_outline: Tapausaihio + examples: Tapaukset + given: "*|Oletetaan" + when: "*|Kun" + then: "*|Niin" + and: "*|Ja" + but: "*|Mutta" +"fr": + name: French + native: français + feature: Fonctionnalité + background: Contexte + scenario: Scénario + scenario_outline: Plan du scénario|Plan du Scénario + examples: Exemples + given: "*|Soit|Etant donné|Etant donnée|Etant donnés|Etant données|Étant donné|Étant donnée|Étant donnés|Étant données" + when: "*|Quand|Lorsque|Lorsqu'<" + then: "*|Alors" + and: "*|Et" + but: "*|Mais" +"he": + name: Hebrew + native: עברית + feature: תכונה + background: רקע + scenario: תרחיש + scenario_outline: תבנית תרחיש + examples: דוגמ×ות + given: "*|בהינתן" + when: "*|×›×שר" + then: "*|××–|××–×™" + and: "*|וג×" + but: "*|×בל" +"hr": + name: Croatian + native: hrvatski + feature: Osobina|Mogućnost|Mogucnost + background: Pozadina + scenario: Scenarij + scenario_outline: Skica|Koncept + examples: Primjeri|Scenariji + given: "*|Zadan|Zadani|Zadano" + when: "*|Kada|Kad" + then: "*|Onda" + and: "*|I" + but: "*|Ali" +"hu": + name: Hungarian + native: magyar + feature: JellemzÅ‘ + background: Háttér + scenario: Forgatókönyv + scenario_outline: Forgatókönyv vázlat + examples: Példák + given: "*|Amennyiben|Adott" + when: "*|Majd|Ha|Amikor" + then: "*|Akkor" + and: "*|És" + but: "*|De" +"id": + name: Indonesian + native: Bahasa Indonesia + feature: Fitur + background: Dasar + scenario: Skenario + scenario_outline: Skenario konsep + examples: Contoh + given: "*|Dengan" + when: "*|Ketika" + then: "*|Maka" + and: "*|Dan" + but: "*|Tapi" +"is": + name: Icelandic + native: Ãslenska + feature: Eiginleiki + background: Bakgrunnur + scenario: Atburðarás + scenario_outline: Lýsing Atburðarásar|Lýsing Dæma + examples: Dæmi|Atburðarásir + given: "*|Ef" + when: "*|Þegar" + then: "*|Þá" + and: "*|Og" + but: "*|En" +"it": + name: Italian + native: italiano + feature: Funzionalità + background: Contesto + scenario: Scenario + scenario_outline: Schema dello scenario + examples: Esempi + given: "*|Dato|Data|Dati|Date" + when: "*|Quando" + then: "*|Allora" + and: "*|E" + but: "*|Ma" +"ja": + name: Japanese + native: 日本語 + feature: フィーãƒãƒ£|機能 + background: 背景 + scenario: シナリオ + scenario_outline: シナリオアウトライン|シナリオテンプレート|テンプレ|シナリオテンプレ + examples: 例|サンプル + given: "*|剿<" + when: "*|ã‚‚ã—<" + then: "*|ãªã‚‰ã°<" + and: "*|ã‹ã¤<" + but: "*|ã—ã‹ã—<|但ã—<|ãŸã ã—<" +"ko": + name: Korean + native: 한국어 + background: ë°°ê²½ + feature: 기능 + scenario: 시나리오 + scenario_outline: 시나리오 개요 + examples: 예 + given: "*|ì¡°ê±´<|먼저<" + when: "*|ë§Œì¼<|만약<" + then: "*|그러면<" + and: "*|그리고<" + but: "*|하지만<|단<" +"lt": + name: Lithuanian + native: lietuvių kalba + feature: SavybÄ— + background: Kontekstas + scenario: Scenarijus + scenario_outline: Scenarijaus Å¡ablonas + examples: Pavyzdžiai|Scenarijai|Variantai + given: "*|Duota" + when: "*|Kai" + then: "*|Tada" + and: "*|Ir" + but: "*|Bet" +"lu": + name: Luxemburgish + native: Lëtzebuergesch + feature: Funktionalitéit + background: Hannergrond + scenario: Szenario + scenario_outline: Plang vum Szenario + examples: Beispiller + given: "*|ugeholl" + when: "*|wann" + then: "*|dann" + and: "*|an|a" + but: "*|awer|mä" +"lv": + name: Latvian + native: latvieÅ¡u + feature: FunkcionalitÄte|FÄ«Äa + background: Konteksts|SituÄcija + scenario: ScenÄrijs + scenario_outline: ScenÄrijs pÄ“c parauga + examples: PiemÄ“ri|Paraugs + given: "*|Kad" + when: "*|Ja" + then: "*|Tad" + and: "*|Un" + but: "*|Bet" +"nl": + name: Dutch + native: Nederlands + feature: Functionaliteit + background: Achtergrond + scenario: Scenario + scenario_outline: Abstract Scenario + examples: Voorbeelden + given: "*|Gegeven|Stel" + when: "*|Als" + then: "*|Dan" + and: "*|En" + but: "*|Maar" +"no": + name: Norwegian + native: norsk + feature: Egenskap + background: Bakgrunn + scenario: Scenario + scenario_outline: Scenariomal|Abstrakt Scenario + examples: Eksempler + given: "*|Gitt" + when: "*|NÃ¥r" + then: "*|SÃ¥" + and: "*|Og" + but: "*|Men" +"pl": + name: Polish + native: polski + feature: WÅ‚aÅ›ciwość + background: ZaÅ‚ożenia + scenario: Scenariusz + scenario_outline: Szablon scenariusza + examples: PrzykÅ‚ady + given: "*|ZakÅ‚adajÄ…c|MajÄ…c" + when: "*|Jeżeli|JeÅ›li" + then: "*|Wtedy" + and: "*|Oraz|I" + but: "*|Ale" +"pt": + name: Portuguese + native: português + background: Contexto + feature: Funcionalidade + scenario: Cenário|Cenario + scenario_outline: Esquema do Cenário|Esquema do Cenario + examples: Exemplos + given: "*|Dado|Dada|Dados|Dadas" + when: "*|Quando" + then: "*|Então|Entao" + and: "*|E" + but: "*|Mas" +"ro": + name: Romanian + native: română + background: Context + feature: Functionalitate|FuncÈ›ionalitate|FuncÅ£ionalitate + scenario: Scenariu + scenario_outline: Structura scenariu|Structură scenariu + examples: Exemple + given: "*|Date fiind|Dat fiind|Dati fiind|DaÈ›i fiind|DaÅ£i fiind" + when: "*|Cand|Când" + then: "*|Atunci" + and: "*|Si|Și|Åži" + but: "*|Dar" +"ru": + name: Russian + native: руÑÑкий + feature: ФункциÑ|Функционал|СвойÑтво + background: ПредыÑториÑ|КонтекÑÑ‚ + scenario: Сценарий + scenario_outline: Структура ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ + examples: Примеры + given: "*|ДопуÑтим|Дано|ПуÑть" + when: "*|ЕÑли|Когда" + then: "*|То|Тогда" + and: "*|И|К тому же" + but: "*|Ðо|Ð" +"sv": + name: Swedish + native: Svenska + feature: Egenskap + background: Bakgrund + scenario: Scenario + scenario_outline: Abstrakt Scenario|Scenariomall + examples: Exempel + given: "*|Givet" + when: "*|När" + then: "*|SÃ¥" + and: "*|Och" + but: "*|Men" +"sk": + name: Slovak + native: Slovensky + feature: Požiadavka + background: Pozadie + scenario: Scenár + scenario_outline: NáÄrt Scenáru + examples: Príklady + given: "*|Pokiaľ" + when: "*|KeÄ" + then: "*|Tak" + and: "*|A" + but: "*|Ale" +"sr-Latn": + name: Serbian (Latin) + native: Srpski (Latinica) + feature: Funkcionalnost|Mogućnost|Mogucnost|Osobina + background: Kontekst|Osnova|Pozadina + scenario: Scenario|Primer + scenario_outline: Struktura scenarija|Skica|Koncept + examples: Primeri|Scenariji + given: "*|Zadato|Zadate|Zatati" + when: "*|Kada|Kad" + then: "*|Onda" + and: "*|I" + but: "*|Ali" +"sr-Cyrl": + name: Serbian + native: СрпÑки + feature: ФункционалноÑÑ‚|МогућноÑÑ‚|ОÑобина + background: КонтекÑÑ‚|ОÑнова|Позадина + scenario: Сценарио|Пример + scenario_outline: Структура Ñценарија|Скица|Концепт + examples: Примери|Сценарији + given: "*|Задато|Задате|Задати" + when: "*|Када|Кад" + then: "*|Онда" + and: "*|И" + but: "*|Ðли" +"tr": + name: Turkish + native: Türkçe + feature: Özellik + background: GeçmiÅŸ + scenario: Senaryo + scenario_outline: Senaryo taslağı + examples: Örnekler + given: "*|Diyelim ki" + when: "*|EÄŸer ki" + then: "*|O zaman" + and: "*|Ve" + but: "*|Fakat|Ama" +"uk": + name: Ukrainian + native: УкраїнÑька + feature: Функціонал + background: Передумова + scenario: Сценарій + scenario_outline: Структура Ñценарію + examples: Приклади + given: "*|ПрипуÑтимо|ПрипуÑтимо, що|Ðехай|Дано" + when: "*|Якщо|Коли" + then: "*|То|Тоді" + and: "*|І|Ртакож|Та" + but: "*|Ðле" +"uz": + name: Uzbek + native: Узбекча + feature: Функционал + background: Тарих + scenario: Сценарий + scenario_outline: Сценарий ÑтруктураÑи + examples: МиÑоллар + given: "*|Ðгар" + when: "*|Ðгар" + then: "*|Унда" + and: "*|Ва" + but: "*|Лекин|Бирок|Ðммо" +"vi": + name: Vietnamese + native: Tiếng Việt + feature: Tính năng + background: Bối cảnh + scenario: Tình huống|Kịch bản + scenario_outline: Khung tình huống|Khung kịch bản + examples: Dữ liệu + given: "*|Biết|Cho" + when: "*|Khi" + then: "*|Thì" + and: "*|Và" + but: "*|Nhưng" +"zh-CN": + name: Chinese simplified + native: 简体中文 + feature: 功能 + background: 背景 + scenario: 场景 + scenario_outline: 场景大纲 + examples: ä¾‹å­ + given: "*|å‡å¦‚<" + when: "*|当<" + then: "*|那么<" + and: "*|而且<" + but: "*|但是<" +"zh-TW": + name: Chinese traditional + native: ç¹é«”中文 + feature: 功能 + background: 背景 + scenario: 場景|劇本 + scenario_outline: 場景大綱|劇本大綱 + examples: ä¾‹å­ + given: "*|å‡è¨­<" + when: "*|ç•¶<" + then: "*|那麼<" + and: "*|而且<|並且<" + but: "*|但是<" diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/GherkinTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/GherkinTest.php new file mode 100644 index 000000000..9e5c0cb5e --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/GherkinTest.php @@ -0,0 +1,184 @@ +getCustomFilterMock(); + $customFilter2 = $this->getCustomFilterMock(); + + $gherkin = new Gherkin(); + $gherkin->addLoader($loader = $this->getLoaderMock()); + $gherkin->addFilter($nameFilter = $this->getNameFilterMock()); + $gherkin->addFilter($tagFilter = $this->getTagFilterMock()); + + $scenario = new ScenarioNode(null, array(), array(), null, null); + $feature = new FeatureNode(null, null, array(), null, array($scenario), null, null, null, null); + + $loader + ->expects($this->once()) + ->method('supports') + ->with($resource = 'some/feature/resource') + ->will($this->returnValue(true)); + $loader + ->expects($this->once()) + ->method('load') + ->with($resource) + ->will($this->returnValue(array($feature))); + + $nameFilter + ->expects($this->once()) + ->method('filterFeature') + ->with($this->identicalTo($feature)) + ->will($this->returnValue($feature)); + $tagFilter + ->expects($this->once()) + ->method('filterFeature') + ->with($this->identicalTo($feature)) + ->will($this->returnValue($feature)); + $customFilter1 + ->expects($this->once()) + ->method('filterFeature') + ->with($this->identicalTo($feature)) + ->will($this->returnValue($feature)); + $customFilter2 + ->expects($this->once()) + ->method('filterFeature') + ->with($this->identicalTo($feature)) + ->will($this->returnValue($feature)); + + $features = $gherkin->load($resource, array($customFilter1, $customFilter2)); + $this->assertEquals(1, count($features)); + + $scenarios = $features[0]->getScenarios(); + $this->assertEquals(1, count($scenarios)); + $this->assertSame($scenario, $scenarios[0]); + } + + public function testNotFoundLoader() + { + $gherkin = new Gherkin(); + + $this->assertEquals(array(), $gherkin->load('some/feature/resource')); + } + + public function testLoaderFiltersFeatures() + { + $gherkin = new Gherkin(); + $gherkin->addLoader($loader = $this->getLoaderMock()); + $gherkin->addFilter($nameFilter = $this->getNameFilterMock()); + + $feature = new FeatureNode(null, null, array(), null, array(), null, null, null, null); + + $loader + ->expects($this->once()) + ->method('supports') + ->with($resource = 'some/feature/resource') + ->will($this->returnValue(true)); + $loader + ->expects($this->once()) + ->method('load') + ->with($resource) + ->will($this->returnValue(array($feature))); + + $nameFilter + ->expects($this->once()) + ->method('filterFeature') + ->with($this->identicalTo($feature)) + ->will($this->returnValue($feature)); + $nameFilter + ->expects($this->once()) + ->method('isFeatureMatch') + ->with($this->identicalTo($feature)) + ->will($this->returnValue(false)); + + $features = $gherkin->load($resource); + $this->assertEquals(0, count($features)); + } + + public function testSetFiltersOverridesAllFilters() + { + $gherkin = new Gherkin(); + $gherkin->addLoader($loader = $this->getLoaderMock()); + $gherkin->addFilter($nameFilter = $this->getNameFilterMock()); + $gherkin->setFilters(array()); + + $feature = new FeatureNode(null, null, array(), null, array(), null, null, null, null); + + $loader + ->expects($this->once()) + ->method('supports') + ->with($resource = 'some/feature/resource') + ->will($this->returnValue(true)); + $loader + ->expects($this->once()) + ->method('load') + ->with($resource) + ->will($this->returnValue(array($feature))); + + $nameFilter + ->expects($this->never()) + ->method('filterFeature'); + $nameFilter + ->expects($this->never()) + ->method('isFeatureMatch'); + + $features = $gherkin->load($resource); + $this->assertEquals(1, count($features)); + } + + public function testSetBasePath() + { + $gherkin = new Gherkin(); + $gherkin->addLoader($loader1 = $this->getLoaderMock()); + $gherkin->addLoader($loader2 = $this->getLoaderMock()); + + $loader1 + ->expects($this->once()) + ->method('setBasePath') + ->with($basePath = '/base/path') + ->will($this->returnValue(null)); + + $loader2 + ->expects($this->once()) + ->method('setBasePath') + ->with($basePath = '/base/path') + ->will($this->returnValue(null)); + + $gherkin->setBasePath($basePath); + } + + protected function getLoaderMock() + { + return $this->getMockBuilder('Behat\Gherkin\Loader\GherkinFileLoader') + ->disableOriginalConstructor() + ->getMock(); + } + + protected function getCustomFilterMock() + { + return $this->getMockBuilder('Behat\Gherkin\Filter\FilterInterface') + ->disableOriginalConstructor() + ->getMock(); + } + + protected function getNameFilterMock() + { + return $this->getMockBuilder('Behat\Gherkin\Filter\NameFilter') + ->disableOriginalConstructor() + ->getMock(); + } + + protected function getTagFilterMock() + { + return $this->getMockBuilder('Behat\Gherkin\Filter\TagFilter') + ->disableOriginalConstructor() + ->getMock(); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Keywords/ArrayKeywordsTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Keywords/ArrayKeywordsTest.php new file mode 100644 index 000000000..e6c18dc94 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Keywords/ArrayKeywordsTest.php @@ -0,0 +1,48 @@ +getKeywordsArray()); + } + + protected function getKeywordsArray() + { + return array( + 'with_special_chars' => array( + 'and' => 'And/foo', + 'background' => 'Background.', + 'but' => 'But[', + 'examples' => 'Examples|Scenarios', + 'feature' => 'Feature|Business Need|Ability', + 'given' => 'Given', + 'name' => 'English', + 'native' => 'English', + 'scenario' => 'Scenario', + 'scenario_outline' => 'Scenario Outline|Scenario Template', + 'then' => 'Then', + 'when' => 'When', + ), + ); + } + + protected function getSteps($keywords, $text, &$line, $keywordType) + { + $steps = array(); + foreach (explode('|', $keywords) as $keyword) { + if (false !== mb_strpos($keyword, '<')) { + $keyword = mb_substr($keyword, 0, -1); + } + + $steps[] = new StepNode($keyword, $text, array(), $line++, $keywordType); + } + + return $steps; + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Keywords/CachedArrayKeywordsTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Keywords/CachedArrayKeywordsTest.php new file mode 100644 index 000000000..bf10cb391 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Keywords/CachedArrayKeywordsTest.php @@ -0,0 +1,37 @@ +keywords = new ArrayKeywords(array( + 'en' => array( + 'feature' => 'Feature', + 'background' => 'Background', + 'scenario' => 'Scenario', + 'scenario_outline' => 'Scenario Outline|Scenario Template', + 'examples' => 'Examples|Scenarios', + 'given' => 'Given', + 'when' => 'When', + 'then' => 'Then', + 'and' => 'And', + 'but' => 'But' + ), + 'ru' => array( + 'feature' => 'Функционал|Фича', + 'background' => 'ПредыÑториÑ|БÑкграунд', + 'scenario' => 'Сценарий|ИÑториÑ', + 'scenario_outline' => 'Структура ÑценариÑ|Ðутлайн', + 'examples' => 'ЗначениÑ', + 'given' => 'ДопуÑтим', + 'when' => 'ЕÑли|@', + 'then' => 'То', + 'and' => 'И', + 'but' => 'Ðо' + ) + )); + } + + public function testEnKeywordsDumper() + { + $dumper = new KeywordsDumper($this->keywords); + + $dumped = $dumper->dump('en'); + $etalon = << + And there is agent + When I erase agent 's memory + Then there should be agent + But there should not be agent + + (Examples|Scenarios): + | agent1 | agent2 | + | D | M | +GHERKIN; + + $this->assertEquals($etalon, $dumped); + } + + public function testRuKeywordsDumper() + { + $dumper = new KeywordsDumper($this->keywords); + + $dumped = $dumper->dump('ru'); + $etalon = << + И there is agent + (ЕÑли|@) I erase agent 's memory + То there should be agent + Ðо there should not be agent + + ЗначениÑ: + | agent1 | agent2 | + | D | M | +GHERKIN; + + $this->assertEquals($etalon, $dumped); + } + + public function testRuKeywordsCustomKeywordsDumper() + { + $dumper = new KeywordsDumper($this->keywords); + $dumper->setKeywordsDumperFunction(function ($keywords) { + return ''.implode(', ', $keywords).''; + }); + + $dumped = $dumper->dump('ru'); + $etalon = <<Функционал, Фича: Internal operations + In order to stay secret + As a secret organization + We need to be able to erase past agents' memory + + ПредыÑториÑ, БÑкграунд: + ДопуÑтим there is agent A + И there is agent B + + Сценарий, ИÑториÑ: Erasing agent memory + ДопуÑтим there is agent J + И there is agent K + ЕÑли, @ I erase agent K's memory + То there should be agent J + Ðо there should not be agent K + + Структура ÑценариÑ, Ðутлайн: Erasing other agents' memory + ДопуÑтим there is agent + И there is agent + ЕÑли, @ I erase agent 's memory + То there should be agent + Ðо there should not be agent + + ЗначениÑ: + | agent1 | agent2 | + | D | M | +GHERKIN; + + $this->assertEquals($etalon, $dumped); + } + + public function testExtendedVersionDumper() + { + $dumper = new KeywordsDumper($this->keywords); + + $dumped = $dumper->dump('ru', false); + $etalon = array( + << + И there is agent + ЕÑли I erase agent 's memory + @ I erase agent 's memory + То there should be agent + Ðо there should not be agent + + ЗначениÑ: + | agent1 | agent2 | + | D | M | + + Ðутлайн: Erasing other agents' memory + ДопуÑтим there is agent + И there is agent + ЕÑли I erase agent 's memory + @ I erase agent 's memory + То there should be agent + Ðо there should not be agent + + ЗначениÑ: + | agent1 | agent2 | + | D | M | +GHERKIN + , << + И there is agent + ЕÑли I erase agent 's memory + @ I erase agent 's memory + То there should be agent + Ðо there should not be agent + + ЗначениÑ: + | agent1 | agent2 | + | D | M | + + Ðутлайн: Erasing other agents' memory + ДопуÑтим there is agent + И there is agent + ЕÑли I erase agent 's memory + @ I erase agent 's memory + То there should be agent + Ðо there should not be agent + + ЗначениÑ: + | agent1 | agent2 | + | D | M | +GHERKIN + ); + + $this->assertEquals($etalon, $dumped); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Keywords/KeywordsTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Keywords/KeywordsTest.php new file mode 100644 index 000000000..fdfc65e29 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Keywords/KeywordsTest.php @@ -0,0 +1,139 @@ +getKeywords(); + $lexer = new Lexer($keywords); + $parser = new Parser($lexer); + $dumper = new KeywordsDumper($keywords); + $keywordsArray = $this->getKeywordsArray(); + + // Remove languages with repeated keywords + unset($keywordsArray['en-old'], $keywordsArray['uz']); + + $data = array(); + foreach ($keywordsArray as $lang => $i18nKeywords) { + $features = array(); + foreach (explode('|', $i18nKeywords['feature']) as $transNum => $featureKeyword) { + $line = 1; + if ('en' !== $lang) { + $line = 2; + } + + $featureLine = $line; + $line += 5; + + $keywords = explode('|', $i18nKeywords['background']); + $backgroundLine = $line; + $line += 1; + $background = new BackgroundNode(null, array_merge( + $this->getSteps($i18nKeywords['given'], 'there is agent A', $line, 'Given'), + $this->getSteps($i18nKeywords['and'], 'there is agent B', $line, 'Given') + ), $keywords[0], $backgroundLine); + + $line += 1; + + $scenarios = array(); + + foreach (explode('|', $i18nKeywords['scenario']) as $scenarioKeyword) { + $scenarioLine = $line; + $line += 1; + + $steps = array_merge( + $this->getSteps($i18nKeywords['given'], 'there is agent J', $line, 'Given'), + $this->getSteps($i18nKeywords['and'], 'there is agent K', $line, 'Given'), + $this->getSteps($i18nKeywords['when'], 'I erase agent K\'s memory', $line, 'When'), + $this->getSteps($i18nKeywords['then'], 'there should be agent J', $line, 'Then'), + $this->getSteps($i18nKeywords['but'], 'there should not be agent K', $line, 'Then') + ); + + $scenarios[] = new ScenarioNode('Erasing agent memory', array(), $steps, $scenarioKeyword, $scenarioLine); + $line += 1; + } + foreach (explode('|', $i18nKeywords['scenario_outline']) as $outlineKeyword) { + $outlineLine = $line; + $line += 1; + + $steps = array_merge( + $this->getSteps($i18nKeywords['given'], 'there is agent ', $line, 'Given'), + $this->getSteps($i18nKeywords['and'], 'there is agent ', $line, 'Given'), + $this->getSteps($i18nKeywords['when'], 'I erase agent \'s memory', $line, 'When'), + $this->getSteps($i18nKeywords['then'], 'there should be agent ', $line, 'Then'), + $this->getSteps($i18nKeywords['but'], 'there should not be agent ', $line, 'Then') + ); + $line += 1; + + $keywords = explode('|', $i18nKeywords['examples']); + $table = new ExampleTableNode(array( + ++$line => array('agent1', 'agent2'), + ++$line => array('D', 'M') + ), $keywords[0]); + $line += 1; + + $scenarios[] = new OutlineNode('Erasing other agents\' memory', array(), $steps, $table, $outlineKeyword, $outlineLine); + $line += 1; + } + + $features[] = new FeatureNode( + 'Internal operations', + <<dump($lang, false, true); + $parsed = array(); + try { + foreach ($dumped as $num => $dumpedFeature) { + $parsed[] = $parser->parse($dumpedFeature, $lang . '_' . ($num + 1) . '.feature'); + } + } catch (\Exception $e) { + throw new \Exception($e->getMessage() . ":\n" . json_encode($dumped), 0, $e); + } + + $data[] = array($lang, $features, $parsed); + } + + return $data; + } + + /** + * @dataProvider translationTestDataProvider + * + * @param string $language language name + * @param array $etalon etalon features (to test against) + * @param array $features array of parsed feature(s) + */ + public function testTranslation($language, array $etalon, array $features) + { + $this->assertEquals($etalon, $features); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Loader/ArrayLoaderTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Loader/ArrayLoaderTest.php new file mode 100644 index 000000000..697d1d3d8 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Loader/ArrayLoaderTest.php @@ -0,0 +1,379 @@ +loader = new ArrayLoader(); + } + + public function testSupports() + { + $this->assertFalse($this->loader->supports(__DIR__)); + $this->assertFalse($this->loader->supports(__FILE__)); + $this->assertFalse($this->loader->supports('string')); + $this->assertFalse($this->loader->supports(array('wrong_root'))); + $this->assertFalse($this->loader->supports(array('features'))); + $this->assertTrue($this->loader->supports(array('features' => array()))); + $this->assertTrue($this->loader->supports(array('feature' => array()))); + } + + public function testLoadEmpty() + { + $this->assertEquals(array(), $this->loader->load(array('features' => array()))); + } + + public function testLoadFeatures() + { + $features = $this->loader->load(array( + 'features' => array( + array( + 'title' => 'First feature', + 'line' => 3, + ), + array( + 'description' => 'Second feature description', + 'language' => 'ru', + 'tags' => array('some', 'tags') + ) + ), + )); + + $this->assertEquals(2, count($features)); + + $this->assertEquals(3, $features[0]->getLine()); + $this->assertEquals('First feature', $features[0]->getTitle()); + $this->assertNull($features[0]->getDescription()); + $this->assertNull($features[0]->getFile()); + $this->assertEquals('en', $features[0]->getLanguage()); + $this->assertFalse($features[0]->hasTags()); + + $this->assertEquals(1, $features[1]->getLine()); + $this->assertNull($features[1]->getTitle()); + $this->assertEquals('Second feature description', $features[1]->getDescription()); + $this->assertNull($features[1]->getFile()); + $this->assertEquals('ru', $features[1]->getLanguage()); + $this->assertEquals(array('some', 'tags'), $features[1]->getTags()); + } + + public function testLoadScenarios() + { + $features = $this->loader->load(array( + 'features' => array( + array( + 'title' => 'Feature', + 'scenarios' => array( + array( + 'title' => 'First scenario', + 'line' => 2 + ), + array( + 'tags' => array('second', 'scenario', 'tags') + ), + array( + 'tags' => array('third', 'scenario'), + 'line' => 3 + ) + ) + ) + ), + )); + + $this->assertEquals(1, count($features)); + + $scenarios = $features[0]->getScenarios(); + + $this->assertEquals(3, count($scenarios)); + + $this->assertInstanceOf('Behat\Gherkin\Node\ScenarioNode', $scenarios[0]); + $this->assertEquals('First scenario', $scenarios[0]->getTitle()); + $this->assertFalse($scenarios[0]->hasTags()); + $this->assertEquals(2, $scenarios[0]->getLine()); + + $this->assertInstanceOf('Behat\Gherkin\Node\ScenarioNode', $scenarios[1]); + $this->assertNull($scenarios[1]->getTitle()); + $this->assertEquals(array('second', 'scenario', 'tags'), $scenarios[1]->getTags()); + $this->assertEquals(1, $scenarios[1]->getLine()); + + $this->assertInstanceOf('Behat\Gherkin\Node\ScenarioNode', $scenarios[2]); + $this->assertNull($scenarios[2]->getTitle()); + $this->assertEquals(array('third', 'scenario'), $scenarios[2]->getTags()); + $this->assertEquals(3, $scenarios[2]->getLine()); + } + + public function testLoadOutline() + { + $features = $this->loader->load(array( + 'features' => array( + array( + 'title' => 'Feature', + 'scenarios' => array( + array( + 'type' => 'outline', + 'title' => 'First outline', + 'line' => 2 + ), + array( + 'type' => 'outline', + 'tags' => array('second', 'outline', 'tags') + ) + ) + ) + ), + )); + + $this->assertEquals(1, count($features)); + + $outlines = $features[0]->getScenarios(); + + $this->assertEquals(2, count($outlines)); + + $this->assertInstanceOf('Behat\Gherkin\Node\OutlineNode', $outlines[0]); + $this->assertEquals('First outline', $outlines[0]->getTitle()); + $this->assertFalse($outlines[0]->hasTags()); + $this->assertEquals(2, $outlines[0]->getLine()); + + $this->assertInstanceOf('Behat\Gherkin\Node\OutlineNode', $outlines[1]); + $this->assertNull($outlines[1]->getTitle()); + $this->assertEquals(array('second', 'outline', 'tags'), $outlines[1]->getTags()); + $this->assertEquals(1, $outlines[1]->getLine()); + } + + public function testOutlineExamples() + { + $features = $this->loader->load(array( + 'features' => array( + array( + 'title' => 'Feature', + 'scenarios' => array( + array( + 'type' => 'outline', + 'title' => 'First outline', + 'line' => 2, + 'examples' => array( + array('user', 'pass'), + array('ever', 'sdsd'), + array('anto', 'fdfd') + ) + ), + array( + 'type' => 'outline', + 'tags' => array('second', 'outline', 'tags') + ) + ) + ) + ), + )); + + $this->assertEquals(1, count($features)); + + $scenarios = $features[0]->getScenarios(); + $scenario = $scenarios[0]; + + $this->assertEquals( + array(array('user' => 'ever', 'pass' => 'sdsd'), array('user' => 'anto', 'pass' => 'fdfd')), + $scenario->getExampleTable()->getHash() + ); + } + + public function testLoadBackground() + { + $features = $this->loader->load(array( + 'features' => array( + array( + ), + array( + 'background' => array() + ), + array( + 'background' => array( + 'line' => 2 + ) + ), + ) + )); + + $this->assertEquals(3, count($features)); + + $this->assertFalse($features[0]->hasBackground()); + $this->assertTrue($features[1]->hasBackground()); + $this->assertEquals(0, $features[1]->getBackground()->getLine()); + $this->assertTrue($features[2]->hasBackground()); + $this->assertEquals(2, $features[2]->getBackground()->getLine()); + } + + public function testLoadSteps() + { + $features = $this->loader->load(array( + 'features' => array( + array( + 'background' => array( + 'steps' => array( + array('type' => 'Gangway!', 'keyword_type' => 'Given', 'text' => 'bg step 1', 'line' => 3), + array('type' => 'Blimey!', 'keyword_type' => 'When', 'text' => 'bg step 2') + ) + ), + 'scenarios' => array( + array( + 'title' => 'Scenario', + 'steps' => array( + array('type' => 'Gangway!', 'keyword_type' => 'Given', 'text' => 'sc step 1'), + array('type' => 'Blimey!', 'keyword_type' => 'When', 'text' => 'sc step 2') + ) + ), + array( + 'title' => 'Outline', + 'type' => 'outline', + 'steps' => array( + array('type' => 'Gangway!', 'keyword_type' => 'Given', 'text' => 'out step 1'), + array('type' => 'Blimey!', 'keyword_type' => 'When', 'text' => 'out step 2') + ) + ) + ) + ) + ) + )); + + $background = $features[0]->getBackground(); + $this->assertTrue($background->hasSteps()); + $this->assertEquals(2, count($background->getSteps())); + $steps = $background->getSteps(); + $this->assertEquals('Gangway!', $steps[0]->getType()); + $this->assertEquals('Gangway!', $steps[0]->getKeyword()); + $this->assertEquals('Given', $steps[0]->getKeywordType()); + $this->assertEquals('bg step 1', $steps[0]->getText()); + $this->assertEquals(3, $steps[0]->getLine()); + $this->assertEquals('Blimey!', $steps[1]->getType()); + $this->assertEquals('Blimey!', $steps[1]->getKeyword()); + $this->assertEquals('When', $steps[1]->getKeywordType()); + $this->assertEquals('bg step 2', $steps[1]->getText()); + $this->assertEquals(1, $steps[1]->getLine()); + + $scenarios = $features[0]->getScenarios(); + + $scenario = $scenarios[0]; + $this->assertTrue($scenario->hasSteps()); + $this->assertEquals(2, count($scenario->getSteps())); + $steps = $scenario->getSteps(); + $this->assertEquals('Gangway!', $steps[0]->getType()); + $this->assertEquals('Gangway!', $steps[0]->getKeyword()); + $this->assertEquals('Given', $steps[0]->getKeywordType()); + $this->assertEquals('sc step 1', $steps[0]->getText()); + $this->assertEquals(0, $steps[0]->getLine()); + $this->assertEquals('Blimey!', $steps[1]->getType()); + $this->assertEquals('Blimey!', $steps[1]->getKeyword()); + $this->assertEquals('When', $steps[1]->getKeywordType()); + $this->assertEquals('sc step 2', $steps[1]->getText()); + $this->assertEquals(1, $steps[1]->getLine()); + + $outline = $scenarios[1]; + $this->assertTrue($outline->hasSteps()); + $this->assertEquals(2, count($outline->getSteps())); + $steps = $outline->getSteps(); + $this->assertEquals('Gangway!', $steps[0]->getType()); + $this->assertEquals('Gangway!', $steps[0]->getKeyword()); + $this->assertEquals('Given', $steps[0]->getKeywordType()); + $this->assertEquals('out step 1', $steps[0]->getText()); + $this->assertEquals(0, $steps[0]->getLine()); + $this->assertEquals('Blimey!', $steps[1]->getType()); + $this->assertEquals('Blimey!', $steps[1]->getKeyword()); + $this->assertEquals('When', $steps[1]->getKeywordType()); + $this->assertEquals('out step 2', $steps[1]->getText()); + $this->assertEquals(1, $steps[1]->getLine()); + } + + public function testLoadStepArguments() + { + $features = $this->loader->load(array( + 'features' => array( + array( + 'background' => array( + 'steps' => array( + array( + 'type' => 'Gangway!', 'keyword_type' => 'Given', 'text' => 'step with table argument', + 'arguments' => array( + array( + 'type' => 'table', + 'rows' => array( + array('key', 'val'), + array(1, 2), + array(3, 4) + ) + ) + ) + ), + array( + 'type' => 'Blimey!', 'keyword_type' => 'When', 'text' => 'step with pystring argument', + 'arguments' => array( + array( + 'type' => 'pystring', + 'text' => ' some text', + ) + ) + ), + array( + 'type' => 'Let go and haul', 'keyword_type' => 'Then', 'text' => '2nd step with pystring argument', + 'arguments' => array( + array( + 'type' => 'pystring', + 'text' => 'some text', + ) + ) + ) + ) + ) + ) + ) + )); + + $background = $features[0]->getBackground(); + + $this->assertTrue($background->hasSteps()); + + $steps = $background->getSteps(); + + $this->assertEquals(3, count($steps)); + + $arguments = $steps[0]->getArguments(); + $this->assertEquals('Gangway!', $steps[0]->getType()); + $this->assertEquals('Gangway!', $steps[0]->getKeyword()); + $this->assertEquals('Given', $steps[0]->getKeywordType()); + $this->assertEquals('step with table argument', $steps[0]->getText()); + $this->assertInstanceOf('Behat\Gherkin\Node\TableNode', $arguments[0]); + $this->assertEquals(array(array('key'=>1, 'val'=>2), array('key'=>3,'val'=>4)), $arguments[0]->getHash()); + + $arguments = $steps[1]->getArguments(); + $this->assertEquals('Blimey!', $steps[1]->getType()); + $this->assertEquals('Blimey!', $steps[1]->getKeyword()); + $this->assertEquals('When', $steps[1]->getKeywordType()); + $this->assertEquals('step with pystring argument', $steps[1]->getText()); + $this->assertInstanceOf('Behat\Gherkin\Node\PyStringNode', $arguments[0]); + $this->assertEquals(' some text', (string) $arguments[0]); + + $arguments = $steps[2]->getArguments(); + $this->assertEquals('Let go and haul', $steps[2]->getType()); + $this->assertEquals('Let go and haul', $steps[2]->getKeyword()); + $this->assertEquals('Then', $steps[2]->getKeywordType()); + $this->assertEquals('2nd step with pystring argument', $steps[2]->getText()); + $this->assertInstanceOf('Behat\Gherkin\Node\PyStringNode', $arguments[0]); + $this->assertEquals('some text', (string) $arguments[0]); + } + + public function testSingleFeatureArray() + { + $features = $this->loader->load(array( + 'feature' => array( + 'title' => 'Some feature' + ) + )); + + $this->assertEquals(1, count($features)); + $this->assertEquals('Some feature', $features[0]->getTitle()); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Loader/DirectoryLoaderTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Loader/DirectoryLoaderTest.php new file mode 100644 index 000000000..de3270866 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Loader/DirectoryLoaderTest.php @@ -0,0 +1,92 @@ +gherkin = $this->createGherkinMock(); + $this->loader = new DirectoryLoader($this->gherkin); + + $this->featuresPath = realpath(__DIR__ . '/../Fixtures/directories'); + } + + protected function createGherkinMock() + { + $gherkin = $this->getMockBuilder('Behat\Gherkin\Gherkin') + ->disableOriginalConstructor() + ->getMock(); + + return $gherkin; + } + + protected function createGherkinFileLoaderMock() + { + $loader = $this->getMockBuilder('Behat\Gherkin\Loader\GherkinFileLoader') + ->disableOriginalConstructor() + ->getMock(); + + return $loader; + } + + public function testSupports() + { + $this->assertFalse($this->loader->supports('non-existent path')); + $this->assertFalse($this->loader->supports('non-existent path:2')); + + $this->assertFalse($this->loader->supports(__DIR__ . ':d')); + $this->assertFalse($this->loader->supports(__DIR__ . '/../Fixtures/features/pystring.feature')); + $this->assertTrue($this->loader->supports(__DIR__)); + $this->assertTrue($this->loader->supports(__DIR__ . '/../Fixtures/features')); + } + + public function testUndefinedFileLoad() + { + $this->gherkin + ->expects($this->once()) + ->method('resolveLoader') + ->with($this->featuresPath.DIRECTORY_SEPARATOR.'phps'.DIRECTORY_SEPARATOR.'some_file.php') + ->will($this->returnValue(null)); + + $this->assertEquals(array(), $this->loader->load($this->featuresPath . '/phps')); + } + + public function testBasePath() + { + $this->gherkin + ->expects($this->once()) + ->method('resolveLoader') + ->with($this->featuresPath.DIRECTORY_SEPARATOR.'phps'.DIRECTORY_SEPARATOR.'some_file.php') + ->will($this->returnValue(null)); + + $this->loader->setBasePath($this->featuresPath); + + $this->assertEquals(array(), $this->loader->load('phps')); + } + + public function testDefinedFileLoad() + { + $loaderMock = $this->createGherkinFileLoaderMock(); + + $this->gherkin + ->expects($this->once()) + ->method('resolveLoader') + ->with($this->featuresPath.DIRECTORY_SEPARATOR.'phps'.DIRECTORY_SEPARATOR.'some_file.php') + ->will($this->returnValue($loaderMock)); + + $loaderMock + ->expects($this->once()) + ->method('load') + ->with($this->featuresPath.DIRECTORY_SEPARATOR.'phps'.DIRECTORY_SEPARATOR.'some_file.php') + ->will($this->returnValue(array('feature1', 'feature2'))); + + $this->assertEquals(array('feature1', 'feature2'), $this->loader->load($this->featuresPath . '/phps')); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Loader/GherkinFileLoaderTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Loader/GherkinFileLoaderTest.php new file mode 100644 index 000000000..8f5d2c17d --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Loader/GherkinFileLoaderTest.php @@ -0,0 +1,111 @@ +assertFalse($this->loader->supports('non-existent path')); + $this->assertFalse($this->loader->supports('non-existent path:2')); + + $this->assertFalse($this->loader->supports(__DIR__)); + $this->assertFalse($this->loader->supports(__DIR__ . ':d')); + $this->assertFalse($this->loader->supports(__FILE__)); + $this->assertTrue($this->loader->supports(__DIR__ . '/../Fixtures/features/pystring.feature')); + } + + public function testLoad() + { + $features = $this->loader->load($this->featuresPath . '/pystring.feature'); + $this->assertEquals(1, count($features)); + $this->assertEquals('A py string feature', $features[0]->getTitle()); + $this->assertEquals($this->featuresPath . DIRECTORY_SEPARATOR . 'pystring.feature', $features[0]->getFile()); + + $features = $this->loader->load($this->featuresPath . '/multiline_name.feature'); + $this->assertEquals(1, count($features)); + $this->assertEquals('multiline', $features[0]->getTitle()); + $this->assertEquals($this->featuresPath . DIRECTORY_SEPARATOR . 'multiline_name.feature', $features[0]->getFile()); + } + + public function testParsingUncachedFeature() + { + $cache = $this->getMockBuilder('Behat\Gherkin\Cache\CacheInterface')->getMock(); + $this->loader->setCache($cache); + + $cache->expects($this->once()) + ->method('isFresh') + ->with($path = $this->featuresPath . DIRECTORY_SEPARATOR . 'pystring.feature', filemtime($path)) + ->will($this->returnValue(false)); + + $cache->expects($this->once()) + ->method('write'); + + $features = $this->loader->load($this->featuresPath . '/pystring.feature'); + $this->assertEquals(1, count($features)); + } + + public function testParsingCachedFeature() + { + $cache = $this->getMockBuilder('Behat\Gherkin\Cache\CacheInterface')->getMock(); + $this->loader->setCache($cache); + + $cache->expects($this->once()) + ->method('isFresh') + ->with($path = $this->featuresPath . DIRECTORY_SEPARATOR . 'pystring.feature', filemtime($path)) + ->will($this->returnValue(true)); + + $cache->expects($this->once()) + ->method('read') + ->with($path) + ->will($this->returnValue('cache')); + + $cache->expects($this->never()) + ->method('write'); + + $features = $this->loader->load($this->featuresPath . '/pystring.feature'); + $this->assertEquals('cache', $features[0]); + } + + public function testBasePath() + { + $this->assertFalse($this->loader->supports('features')); + $this->assertFalse($this->loader->supports('tables.feature')); + + $this->loader->setBasePath($this->featuresPath . '/../'); + $this->assertFalse($this->loader->supports('features')); + $this->assertFalse($this->loader->supports('tables.feature')); + $this->assertTrue($this->loader->supports('features/tables.feature')); + + $features = $this->loader->load('features/pystring.feature'); + $this->assertEquals(1, count($features)); + $this->assertEquals('A py string feature', $features[0]->getTitle()); + $this->assertEquals('features' . DIRECTORY_SEPARATOR . 'pystring.feature', $features[0]->getFile()); + + $this->loader->setBasePath($this->featuresPath); + $features = $this->loader->load('multiline_name.feature'); + $this->assertEquals(1, count($features)); + $this->assertEquals('multiline', $features[0]->getTitle()); + $this->assertEquals('multiline_name.feature', $features[0]->getFile()); + } + + protected function setUp() + { + $keywords = new CucumberKeywords(__DIR__ . '/../Fixtures/i18n.yml'); + $parser = new Parser(new Lexer($keywords)); + $this->loader = new GherkinFileLoader($parser); + + $this->featuresPath = realpath(__DIR__ . '/../Fixtures/features'); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Loader/YamlFileLoaderTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Loader/YamlFileLoaderTest.php new file mode 100644 index 000000000..83b27398f --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Loader/YamlFileLoaderTest.php @@ -0,0 +1,67 @@ +loader = new YamlFileLoader(); + } + + public function testSupports() + { + $this->assertFalse($this->loader->supports(__DIR__)); + $this->assertFalse($this->loader->supports(__FILE__)); + $this->assertFalse($this->loader->supports('string')); + $this->assertFalse($this->loader->supports(__DIR__ . '/file.yml')); + $this->assertTrue($this->loader->supports(__DIR__ . '/../Fixtures/etalons/addition.yml')); + } + + public function testLoadAddition() + { + $this->loader->setBasePath(__DIR__ . '/../Fixtures'); + $features = $this->loader->load('etalons/addition.yml'); + + $this->assertEquals(1, count($features)); + $this->assertEquals('etalons'.DIRECTORY_SEPARATOR.'addition.yml', $features[0]->getFile()); + $this->assertEquals('Addition', $features[0]->getTitle()); + $this->assertEquals(2, $features[0]->getLine()); + $this->assertEquals('en', $features[0]->getLanguage()); + $expectedDescription = <<assertEquals($expectedDescription, $features[0]->getDescription()); + + $scenarios = $features[0]->getScenarios(); + + $this->assertEquals(2, count($scenarios)); + $this->assertInstanceOf('Behat\Gherkin\Node\ScenarioNode', $scenarios[0]); + $this->assertEquals(7, $scenarios[0]->getLine()); + $this->assertEquals('Add two numbers', $scenarios[0]->getTitle()); + $steps = $scenarios[0]->getSteps(); + $this->assertEquals(4, count($steps)); + $this->assertEquals(9, $steps[1]->getLine()); + $this->assertEquals('And', $steps[1]->getType()); + $this->assertEquals('And', $steps[1]->getKeyword()); + $this->assertEquals('Given', $steps[1]->getKeywordType()); + $this->assertEquals('I have entered 12 into the calculator', $steps[1]->getText()); + + $this->assertInstanceOf('Behat\Gherkin\Node\ScenarioNode', $scenarios[1]); + $this->assertEquals(13, $scenarios[1]->getLine()); + $this->assertEquals('Div two numbers', $scenarios[1]->getTitle()); + $steps = $scenarios[1]->getSteps(); + $this->assertEquals(4, count($steps)); + $this->assertEquals(16, $steps[2]->getLine()); + $this->assertEquals('When', $steps[2]->getType()); + $this->assertEquals('When', $steps[2]->getKeyword()); + $this->assertEquals('When', $steps[2]->getKeywordType()); + $this->assertEquals('I press div', $steps[2]->getText()); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Node/ExampleNodeTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Node/ExampleNodeTest.php new file mode 100644 index 000000000..c6f46be54 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Node/ExampleNodeTest.php @@ -0,0 +1,92 @@ +', array(), null, 'Given'), + $step2 = new StepNode('Aye!', 'my email is ', array(), null, 'And'), + $step3 = new StepNode('Blimey!', 'I open homepage', array(), null, 'When'), + $step4 = new StepNode('Let go and haul', 'website should recognise me', array(), null, 'Then'), + ); + + $table = new ExampleTableNode(array( + array('name', 'email'), + array('everzet', 'ever.zet@gmail.com'), + array('example', 'example@example.com') + ), 'Examples'); + + $outline = new OutlineNode(null, array(), $steps, $table, null, null); + $examples = $outline->getExamples(); + + $this->assertCount(4, $steps = $examples[0]->getSteps()); + + $this->assertEquals('Gangway!', $steps[0]->getType()); + $this->assertEquals('Gangway!', $steps[0]->getKeyword()); + $this->assertEquals('Given', $steps[0]->getKeywordType()); + $this->assertEquals('I am everzet', $steps[0]->getText()); + $this->assertEquals('Aye!', $steps[1]->getType()); + $this->assertEquals('Aye!', $steps[1]->getKeyword()); + $this->assertEquals('And', $steps[1]->getKeywordType()); + $this->assertEquals('my email is ever.zet@gmail.com', $steps[1]->getText()); + $this->assertEquals('Blimey!', $steps[2]->getType()); + $this->assertEquals('Blimey!', $steps[2]->getKeyword()); + $this->assertEquals('When', $steps[2]->getKeywordType()); + $this->assertEquals('I open homepage', $steps[2]->getText()); + + $this->assertCount(4, $steps = $examples[1]->getSteps()); + + $this->assertEquals('Gangway!', $steps[0]->getType()); + $this->assertEquals('Gangway!', $steps[0]->getKeyword()); + $this->assertEquals('Given', $steps[0]->getKeywordType()); + $this->assertEquals('I am example', $steps[0]->getText()); + $this->assertEquals('Aye!', $steps[1]->getType()); + $this->assertEquals('Aye!', $steps[1]->getKeyword()); + $this->assertEquals('And', $steps[1]->getKeywordType()); + $this->assertEquals('my email is example@example.com', $steps[1]->getText()); + $this->assertEquals('Blimey!', $steps[2]->getType()); + $this->assertEquals('Blimey!', $steps[2]->getKeyword()); + $this->assertEquals('When', $steps[2]->getKeywordType()); + $this->assertEquals('I open homepage', $steps[2]->getText()); + } + + public function testCreateExampleStepsWithArguments() + { + $steps = array( + $step1 = new StepNode('Gangway!', 'I am ', array(), null, 'Given'), + $step2 = new StepNode('Aye!', 'my email is ', array(), null, 'And'), + $step3 = new StepNode('Blimey!', 'I open:', array( + new PyStringNode(array('page: '), null) + ), null, 'When'), + $step4 = new StepNode('Let go and haul', 'website should recognise me', array( + new TableNode(array(array('page', ''))) + ), null, 'Then'), + ); + + $table = new ExampleTableNode(array( + array('name', 'email', 'url'), + array('everzet', 'ever.zet@gmail.com', 'homepage'), + array('example', 'example@example.com', 'other page') + ), 'Examples'); + + $outline = new OutlineNode(null, array(), $steps, $table, null, null); + $examples = $outline->getExamples(); + + $steps = $examples[0]->getSteps(); + + $args = $steps[2]->getArguments(); + $this->assertEquals('page: homepage', $args[0]->getRaw()); + + $args = $steps[3]->getArguments(); + $this->assertEquals('| page | homepage |', $args[0]->getTableAsString()); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Node/OutlineNodeTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Node/OutlineNodeTest.php new file mode 100644 index 000000000..1e889b80f --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Node/OutlineNodeTest.php @@ -0,0 +1,68 @@ +', array(), null, 'Given'), + new StepNode('Aye!', 'my email is ', array(), null, 'And'), + new StepNode('Blimey!', 'I open homepage', array(), null, 'When'), + new StepNode('Let go and haul', 'website should recognise me', array(), null, 'Then'), + ); + + $table = new ExampleTableNode(array( + array('name', 'email'), + array('everzet', 'ever.zet@gmail.com'), + array('example', 'example@example.com') + ), 'Examples'); + + $outline = new OutlineNode(null, array(), $steps, $table, null, null); + + $this->assertCount(2, $examples = $outline->getExamples()); + $this->assertEquals(1, $examples[0]->getLine()); + $this->assertEquals(2, $examples[1]->getLine()); + $this->assertEquals(array('name' => 'everzet', 'email' => 'ever.zet@gmail.com'), $examples[0]->getTokens()); + $this->assertEquals(array('name' => 'example', 'email' => 'example@example.com'), $examples[1]->getTokens()); + } + + public function testCreatesEmptyExamplesForEmptyExampleTable() + { + $steps = array( + new StepNode('Gangway!', 'I am ', array(), null, 'Given'), + new StepNode('Aye!', 'my email is ', array(), null, 'And'), + new StepNode('Blimey!', 'I open homepage', array(), null, 'When'), + new StepNode('Let go and haul', 'website should recognise me', array(), null, 'Then'), + ); + + $table = new ExampleTableNode(array( + array('name', 'email') + ), 'Examples'); + + $outline = new OutlineNode(null, array(), $steps, $table, null, null); + + $this->assertCount(0, $examples = $outline->getExamples()); + } + + public function testCreatesEmptyExamplesForNoExampleTable() + { + $steps = array( + new StepNode('Gangway!', 'I am ', array(), null, 'Given'), + new StepNode('Aye!', 'my email is ', array(), null, 'And'), + new StepNode('Blimey!', 'I open homepage', array(), null, 'When'), + new StepNode('Let go and haul', 'website should recognise me', array(), null, 'Then'), + ); + + $table = new ExampleTableNode(array(), 'Examples'); + + $outline = new OutlineNode(null, array(), $steps, $table, null, null); + + $this->assertCount(0, $examples = $outline->getExamples()); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Node/PyStringNodeTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Node/PyStringNodeTest.php new file mode 100644 index 000000000..1beed387e --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Node/PyStringNodeTest.php @@ -0,0 +1,27 @@ +assertEquals(array('line1', 'line2', 'line3'), $str->getStrings()); + } + + public function testGetRaw() + { + $str = new PyStringNode(array('line1', 'line2', 'line3'), 0); + + $expected = <<assertEquals($expected, $str->getRaw()); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Node/StepNodeTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Node/StepNodeTest.php new file mode 100644 index 000000000..d334415d6 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Node/StepNodeTest.php @@ -0,0 +1,20 @@ +setExpectedException('Behat\Gherkin\Exception\NodeException'); + + new StepNode('Gangway!', 'I am on the page:', array( + new PyStringNode(array('one', 'two'), 11), + new TableNode(array(array('one', 'two'))), + ), 10, 'Given'); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/Node/TableNodeTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/Node/TableNodeTest.php new file mode 100644 index 000000000..43dfff225 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/Node/TableNodeTest.php @@ -0,0 +1,222 @@ +assertEquals( + array( + array('username' => 'everzet', 'password' => 'qwerty') + , array('username' => 'antono', 'password' => 'pa$sword') + ), + $table->getHash() + ); + + $table = new TableNode(array( + array('username', 'password'), + array('', 'qwerty'), + array('antono', ''), + array('', '') + )); + + $this->assertEquals( + array( + array('username' => '', 'password' => 'qwerty'), + array('username' => 'antono', 'password' => ''), + array('username' => '', 'password' => ''), + ), + $table->getHash() + ); + } + + public function testIterator() + { + $table = new TableNode(array( + array('username', 'password'), + array('', 'qwerty'), + array('antono', ''), + array('', ''), + )); + + $this->assertEquals( + array( + array('username' => '', 'password' => 'qwerty'), + array('username' => 'antono', 'password' => ''), + array('username' => '', 'password' => ''), + ), + iterator_to_array($table) + ); + } + + public function testRowsHashTable() + { + $table = new TableNode(array( + array('username', 'everzet'), + array('password', 'qwerty'), + array('uid', '35'), + )); + + $this->assertEquals( + array('username' => 'everzet', 'password' => 'qwerty', 'uid' => '35'), + $table->getRowsHash() + ); + } + + public function testLongRowsHashTable() + { + $table = new TableNode(array( + array('username', 'everzet', 'marcello'), + array('password', 'qwerty', '12345'), + array('uid', '35', '22') + )); + + $this->assertEquals(array( + 'username' => array('everzet', 'marcello'), + 'password' => array('qwerty', '12345'), + 'uid' => array('35', '22') + ), $table->getRowsHash()); + } + + public function testGetRows() + { + $table = new TableNode(array( + array('username', 'password'), + array('everzet', 'qwerty'), + array('antono', 'pa$sword') + )); + + $this->assertEquals(array( + array('username', 'password'), + array('everzet', 'qwerty'), + array('antono', 'pa$sword') + ), $table->getRows()); + } + + public function testGetLines() + { + $table = new TableNode(array( + 5 => array('username', 'password'), + 10 => array('everzet', 'qwerty'), + 13 => array('antono', 'pa$sword') + )); + + $this->assertEquals(array(5, 10, 13), $table->getLines()); + } + + public function testGetRow() + { + $table = new TableNode(array( + array('username', 'password'), + array('everzet', 'qwerty'), + array('antono', 'pa$sword') + )); + + $this->assertEquals(array('username', 'password'), $table->getRow(0)); + $this->assertEquals(array('antono', 'pa$sword'), $table->getRow(2)); + } + + public function testGetColumn() + { + $table = new TableNode(array( + array('username', 'password'), + array('everzet', 'qwerty'), + array('antono', 'pa$sword') + )); + + $this->assertEquals(array('username', 'everzet', 'antono'), $table->getColumn(0)); + $this->assertEquals(array('password', 'qwerty', 'pa$sword'), $table->getColumn(1)); + + $table = new TableNode(array( + array('username'), + array('everzet'), + array('antono') + )); + + $this->assertEquals(array('username', 'everzet', 'antono'), $table->getColumn(0)); + } + + public function testGetRowWithLineNumbers() + { + $table = new TableNode(array( + 5 => array('username', 'password'), + 10 => array('everzet', 'qwerty'), + 13 => array('antono', 'pa$sword') + )); + + $this->assertEquals(array('username', 'password'), $table->getRow(0)); + $this->assertEquals(array('antono', 'pa$sword'), $table->getRow(2)); + } + + public function testGetTable() + { + $table = new TableNode($a = array( + 5 => array('username', 'password'), + 10 => array('everzet', 'qwerty'), + 13 => array('antono', 'pa$sword') + )); + + $this->assertEquals($a, $table->getTable()); + } + + public function testGetRowLine() + { + $table = new TableNode(array( + 5 => array('username', 'password'), + 10 => array('everzet', 'qwerty'), + 13 => array('antono', 'pa$sword') + )); + + $this->assertEquals(5, $table->getRowLine(0)); + $this->assertEquals(13, $table->getRowLine(2)); + } + + public function testGetRowAsString() + { + $table = new TableNode(array( + 5 => array('username', 'password'), + 10 => array('everzet', 'qwerty'), + 13 => array('antono', 'pa$sword') + )); + + $this->assertEquals('| username | password |', $table->getRowAsString(0)); + $this->assertEquals('| antono | pa$sword |', $table->getRowAsString(2)); + } + + public function testGetTableAsString() + { + $table = new TableNode(array( + 5 => array('id', 'username', 'password'), + 10 => array('42', 'everzet', 'qwerty'), + 13 => array('2', 'antono', 'pa$sword') + )); + + $expected = <<assertEquals($expected, $table->getTableAsString()); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/ParserExceptionsTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/ParserExceptionsTest.php new file mode 100644 index 000000000..c416ec2e7 --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/ParserExceptionsTest.php @@ -0,0 +1,291 @@ + array( + 'feature' => 'Feature', + 'background' => 'Background', + 'scenario' => 'Scenario', + 'scenario_outline' => 'Scenario Outline', + 'examples' => 'Examples', + 'given' => 'Given', + 'when' => 'When', + 'then' => 'Then', + 'and' => 'And', + 'but' => 'But' + ), + 'ru' => array( + 'feature' => 'Функционал', + 'background' => 'ПредыÑториÑ', + 'scenario' => 'Сценарий', + 'scenario_outline' => 'Структура ÑценариÑ', + 'examples' => 'ЗначениÑ', + 'given' => 'ДопуÑтим', + 'when' => 'То', + 'then' => 'ЕÑли', + 'and' => 'И', + 'but' => 'Ðо' + ) + )); + $this->gherkin = new Parser(new Lexer($keywords)); + } + + public function testStepRightAfterFeature() + { + $feature = <<gherkin->parse($feature); + + $this->assertEquals("\n Given some step-like line", $parsed->getDescription()); + } + + public function testTextInBackground() + { + $feature = <<gherkin->parse($feature); + } + + public function testTextInScenario() + { + $feature = <<gherkin->parse($feature); + + $this->assertCount(2, $scenarios = $feature->getScenarios()); + $firstTitle = <<assertEquals($firstTitle, $scenarios[0]->getTitle()); + $secondTitle = <<assertEquals($secondTitle, $scenarios[1]->getTitle()); + } + + /** + * @expectedException \Behat\Gherkin\Exception\ParserException + */ + public function testAmbigiousLanguage() + { + $feature = <<gherkin->parse($feature); + } + + /** + * @expectedException \Behat\Gherkin\Exception\ParserException + */ + public function testEmptyOutline() + { + $feature = <<gherkin->parse($feature); + } + + /** + * @expectedException \Behat\Gherkin\Exception\ParserException + */ + public function testWrongTagPlacement() + { + $feature = <<gherkin->parse($feature); + } + + /** + * @expectedException \Behat\Gherkin\Exception\ParserException + */ + public function testBackgroundWithTag() + { + $feature = <<gherkin->parse($feature); + } + + /** + * @expectedException \Behat\Gherkin\Exception\ParserException + */ + public function testEndlessPyString() + { + $feature = <<gherkin->parse($feature); + } + + /** + * @expectedException \Behat\Gherkin\Exception\ParserException + */ + public function testWrongStepType() + { + $feature = <<gherkin->parse($feature); + } + + /** + * @expectedException \Behat\Gherkin\Exception\ParserException + */ + public function testMultipleBackgrounds() + { + $feature = <<gherkin->parse($feature); + } + + /** + * @expectedException \Behat\Gherkin\Exception\ParserException + */ + public function testMultipleFeatures() + { + $feature = <<gherkin->parse($feature); + } + + /** + * @expectedException \Behat\Gherkin\Exception\ParserException + */ + public function testTableWithoutRightBorder() + { + $feature = <<gherkin->parse($feature); + } +} diff --git a/vendor/behat/gherkin/tests/Behat/Gherkin/ParserTest.php b/vendor/behat/gherkin/tests/Behat/Gherkin/ParserTest.php new file mode 100644 index 000000000..aff585cda --- /dev/null +++ b/vendor/behat/gherkin/tests/Behat/Gherkin/ParserTest.php @@ -0,0 +1,147 @@ +parseEtalon($fixtureName . '.yml'); + $features = $this->parseFixture($fixtureName . '.feature'); + + $this->assertInternalType('array', $features); + $this->assertEquals(1, count($features)); + $fixture = $features[0]; + + $this->assertEquals($etalon, $fixture); + } + + public function testParserResetsTagsBetweenFeatures() + { + $parser = $this->getGherkinParser(); + + $parser->parse(<<parse(<<assertFalse($feature2->hasTags()); + } + + protected function getGherkinParser() + { + if (null === $this->gherkin) { + $keywords = new ArrayKeywords(array( + 'en' => array( + 'feature' => 'Feature', + 'background' => 'Background', + 'scenario' => 'Scenario', + 'scenario_outline' => 'Scenario Outline', + 'examples' => 'Examples', + 'given' => 'Given', + 'when' => 'When', + 'then' => 'Then', + 'and' => 'And', + 'but' => 'But' + ), + 'ru' => array( + 'feature' => 'Функционал', + 'background' => 'ПредыÑториÑ', + 'scenario' => 'Сценарий', + 'scenario_outline' => 'Структура ÑценариÑ', + 'examples' => 'ЗначениÑ', + 'given' => 'ДопуÑтим', + 'when' => 'То', + 'then' => 'ЕÑли', + 'and' => 'И', + 'but' => 'Ðо' + ), + 'ja' => array ( + 'feature' => 'フィーãƒãƒ£', + 'background' => '背景', + 'scenario' => 'シナリオ', + 'scenario_outline' => 'シナリオアウトライン', + 'examples' => '例|サンプル', + 'given' => '剿<', + 'when' => 'ã‚‚ã—<', + 'then' => 'ãªã‚‰ã°<', + 'and' => 'ã‹ã¤<', + 'but' => 'ã—ã‹ã—<' + ) + )); + $this->gherkin = new Parser(new Lexer($keywords)); + } + + return $this->gherkin; + } + + protected function getYamlParser() + { + if (null === $this->yaml) { + $this->yaml = new YamlFileLoader(); + } + + return $this->yaml; + } + + protected function parseFixture($fixture) + { + $file = __DIR__ . '/Fixtures/features/' . $fixture; + + return array($this->getGherkinParser()->parse(file_get_contents($file), $file)); + } + + protected function parseEtalon($etalon) + { + $features = $this->getYamlParser()->load(__DIR__ . '/Fixtures/etalons/' . $etalon); + $feature = $features[0]; + + return new FeatureNode( + $feature->getTitle(), + $feature->getDescription(), + $feature->getTags(), + $feature->getBackground(), + $feature->getScenarios(), + $feature->getKeyword(), + $feature->getLanguage(), + __DIR__ . '/Fixtures/features/' . basename($etalon, '.yml') . '.feature', + $feature->getLine() + ); + } +} diff --git a/vendor/bin/codecept b/vendor/bin/codecept new file mode 120000 index 000000000..6b7ff53fd --- /dev/null +++ b/vendor/bin/codecept @@ -0,0 +1 @@ +../codeception/codeception/codecept \ No newline at end of file diff --git a/vendor/bin/phpunit b/vendor/bin/phpunit new file mode 120000 index 000000000..2c4893031 --- /dev/null +++ b/vendor/bin/phpunit @@ -0,0 +1 @@ +../phpunit/phpunit/phpunit \ No newline at end of file diff --git a/vendor/codeception/codeception/.gitattributes b/vendor/codeception/codeception/.gitattributes new file mode 100644 index 000000000..a69ee2c6d --- /dev/null +++ b/vendor/codeception/codeception/.gitattributes @@ -0,0 +1,35 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Denote text files explicitly, normalize line endings to LF on checkin and forbid conversion to CRLF on checkout +# Without eol=lf, core.autocrlf might come in effect +*.html eol=lf diff=html +*.css eol=lf +*.js eol=lf +*.sql eol=lf +*.php eol=lf diff=php +*.yml eol=lf +*.xml eol=lf +*.dist eol=lf +*.conf eol=lf +*.json eol=lf +*.lock eol=lf + +# Denote all files that are truly binary and should not be modified. +# Git would detect them automatically, but this will save the autodetection +*.png binary +*.jpg binary +*.gif binary +*.ico binary +*.zip binary +*.jar binary +*.docx binary +*.docx binary +*.dot binary +*.xls binary +*.otf binary +*.eot binary +*.ttf binary +*.ttf binary +*.woff binary +*.phar binary \ No newline at end of file diff --git a/vendor/codeception/codeception/.gitignore b/vendor/codeception/codeception/.gitignore new file mode 100644 index 000000000..5b5e3815d --- /dev/null +++ b/vendor/codeception/codeception/.gitignore @@ -0,0 +1,40 @@ +.idea +.roboci +composer.phar +composer.lock +vendor +package/codecept.phar +package/php54/codecept.phar +tests/support/_generated +tests/data/app/db +tests/data/sandbox +tests/_output/* +tests/data/included/_log/* +tests/data/included/jazz/tests/_log/* +tests/data/included/jazz/pianist/tests/_log/* +tests/data/included/shire/tests/_log/* +tests/data/included_w/_log/* +tests/data/included_w/src/foo/AcmePack/tests/_log/* +tests/data/included_w/src/foo/AcmePack/tests/_support/_generated/* +tests/data/included_mix/src/foo/AcmePack/tests/_log/* +tests/data/included_mix/src/foo/AcmePack/tests/_support/_generated/* +tests/data/included_mix/_log/* +tests/data/included_mix/support/_generated/* +tests/data/claypit/tests/_log/* +tests/data/claypit/tests/_output/* +tests/data/claypit/tests/_support/_generated/* +tests/data/claypit/c3tmp +tests/data/included/jazz/pianist/tests/_helpers/_generated/TestGuyActions.php +tests/data/included/jazz/tests/_helpers/_generated/TestGuyActions.php +tests/data/included/shire/tests/_helpers/_generated/TestGuyActions.php +tests/data/included_w/src/bar/Sub/EwokPack/tests/_support/_generated/UnitTesterActions.php +tests/data/included_w/src/bar/ToastPack/tests/_support/_generated/UnitTesterActions.php +tests/data/included_w/src/foo/AcmePack/tests/_support/_generated/UnitTesterActions.php +tests/data/params/tests/_support/_generated/DummyTesterActions.php +tests/data/exception_in_before/tests/_support/_generated/UnitTesterActions.php +tests/data/exception_in_before/tests/_output/ +tests/data/bundled_suites/_support/_generated/UnitTesterActions.php +tests/data/bundled_suites/_output/ +.DS_Store +robo.phar +.env diff --git a/vendor/codeception/codeception/.travis.yml b/vendor/codeception/codeception/.travis.yml new file mode 100644 index 000000000..bfe7eba0a --- /dev/null +++ b/vendor/codeception/codeception/.travis.yml @@ -0,0 +1,140 @@ +sudo: false + +language: php + +matrix: + include: + - php: 5.4 # lowest versions of all dependencies + env: SYMFONY=2.7.19 SYMFONY_DEPRECATIONS_HELPER=weak # latest version of 2.7.* + - php: 5.5 + env: SYMFONY=2.7.5 dependencies=lowest SYMFONY_DEPRECATIONS_HELPER=weak #lowest version of 2.7 + - php: 5.6 + env: SYMFONY=2.8.12 SYMFONY_DEPRECATIONS_HELPER=weak # latest version of 2.8.* + - php: 7.0 + env: SYMFONY=3.2.9 SYMFONY_DEPRECATIONS_HELPER=weak # latest version of 3.2.* + - php: 7.1 + env: SYMFONY=3.3.2 SYMFONY_DEPRECATIONS_HELPER=weak # latest version of 3.3.* + - php: 7.1 + env: SYMFONY=4.0.1 SYMFONY_DEPRECATIONS_HELPER=weak # latest version of 4.0.* + - php: 7.2 + env: SYMFONY=4.0.1 SYMFONY_DEPRECATIONS_HELPER=weak # latest version of 4.0.* + +addons: + postgresql: "9.2" + +branches: + except: + - gh-pages + +cache: + directories: + - vendor + - $HOME/.composer/cache + +services: + - mongodb + - rabbitmq + - postgresql + - redis + +install: + - export SF_VERSION=$(echo $SYMFONY | head -c 1) + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || pecl install -f mongodb' + - yes '' | pecl install imagick + #- echo "extension = mongodb.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini + - composer self-update && composer --version + - if [ -n "$CI_USER_TOKEN" ]; then composer config github-oauth.github.com ${CI_USER_TOKEN}; echo "Configured Github token"; fi; + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || composer require mongodb/mongodb --no-update' + - '[[ "$TRAVIS_PHP_VERSION" == "7.2" ]] || composer global require "fxp/composer-asset-plugin:~1.3.1"' + - '[[ -z "$SYMFONY" ]] || composer require symfony/finder=~$SYMFONY --no-update --ignore-platform-reqs' + - '[[ -z "$SYMFONY" ]] || composer require symfony/yaml=~$SYMFONY --no-update --ignore-platform-reqs' + - '[[ -z "$SYMFONY" ]] || composer require symfony/console=~$SYMFONY --no-update --ignore-platform-reqs' + - '[[ -z "$SYMFONY" ]] || composer require symfony/event-dispatcher=~$SYMFONY --no-update --ignore-platform-reqs' + - '[[ -z "$SYMFONY" ]] || composer require symfony/css-selector=~$SYMFONY --no-update --ignore-platform-reqs' + - '[[ -z "$SYMFONY" ]] || composer require symfony/dom-crawler=~$SYMFONY --no-update --ignore-platform-reqs' + - '[[ -z "$SYMFONY" ]] || composer require symfony/browser-kit=~$SYMFONY --no-update --ignore-platform-reqs' + - composer_parameters="-n --prefer-dist" # this variable will be used in all composer install commands + - '[[ "$dependencies" != "lowest" ]] || composer_parameters="$composer_parameters --prefer-lowest"' + - composer update $composer_parameters + - composer_parameters="$composer_parameters --no-dev" # Codeception needs dev dependencies, but frameworks don't + # Yii2 + - '[[ "$TRAVIS_PHP_VERSION" == "7.2" ]] || composer create-project "yiisoft/yii2-app-basic" frameworks-yii-basic --no-dev' + # Phalcon + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || git clone -q --depth=1 https://github.com/phalcon/cphalcon.git' + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || (cd cphalcon/build; bash ./install --phpize $(phpenv which phpize) --php-config $(phpenv which php-config) &>/dev/null && phpenv config-add ../tests/_ci/phalcon.ini &> /dev/null)' + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || git clone -q --depth=1 https://github.com/Codeception/phalcon-demo.git frameworks-phalcon' + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || composer update -d frameworks-phalcon $composer_parameters' + # Laravel 5 + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || git clone -q --depth=1 -b codeception-2.3 https://github.com/codeception/codeception-laravel5-sample.git frameworks-l5' + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || composer update -d frameworks-l5 $composer_parameters' + # Lumen + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || git clone -q --depth=1 -b codeception-2.2 https://github.com/codeception/codeception-lumen-sample.git frameworks-lumen' + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || composer update -d frameworks-lumen $composer_parameters' + # Symfony + - '[[ "$SF_VERSION" != "2" ]] || (git clone -q --depth=1 -b 2.1 https://github.com/Codeception/symfony-demo.git frameworks-symfony && echo "Cloned Symfony 2 site")' + - '[[ "$SF_VERSION" != "3" ]] || (git clone -q --depth=1 -b master --recursive https://github.com/Naktibalda/codeception-symfony-tests frameworks-symfony && echo "Cloned Symfony 3 site")' + - '[[ "$SF_VERSION" != "4" ]] || (git clone -q --depth=1 -b master https://github.com/Codeception/symfony-demo.git frameworks-symfony && echo "Cloned Symfony 4 site")' + - '[[ "$SF_VERSION" == "4" ]] || composer require -d frameworks-symfony symfony/symfony=~$SYMFONY --no-update' + - "mysql -e 'create database symfony_test;'" + - 'composer update -d frameworks-symfony $composer_parameters' + # ZF1 + - git clone -q -b 2.2 --recursive https://github.com/Naktibalda/codeception-zf1-tests frameworks-zf1 + - composer update -d frameworks-zf1 $composer_parameters + # ZF2 + - git clone -q -b 2.2 --recursive https://github.com/Naktibalda/codeception-zf2-tests frameworks-zf2 + - composer update -d frameworks-zf2 $composer_parameters + # Zend Expressive + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || git clone -q -b 2.2 --recursive https://github.com/Naktibalda/codeception-zend-expressive-tests frameworks-zend-expressive' + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || composer update -d frameworks-zend-expressive $composer_parameters' + +before_script: + - '[[ "$TRAVIS_PHP_VERSION" == 7.* ]] || echo "extension = mongo.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini' + # preparing databases + - "mysql -e 'create database codeception_test;'" + - psql -c 'create database codeception_test;' -U postgres + # starting demo servers + - 'php -S 127.0.0.1:8000 -t tests/data/app >/dev/null 2>&1 &' + - 'php -S 127.0.0.1:8010 -t tests/data >/dev/null 2>&1 &' + # Phalcon + - mysql -e 'CREATE DATABASE phalcon_demo CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;' + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || cat frameworks-phalcon/schemas/phalcon_demo.sql | mysql phalcon_demo' + # Laravel 5 + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || touch frameworks-l5/storage/testing.sqlite' + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || php frameworks-l5/artisan migrate --env=testing --database=sqlite_testing --force' + # Lumen + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || cp frameworks-lumen/.env.testing frameworks-lumen/.env' + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || touch frameworks-lumen/storage/testing.sqlite' + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || php frameworks-lumen/artisan migrate --database=testing --force' + # Symfony + - '[[ "$SF_VERSION" != "2" ]] || php frameworks-symfony/app/console doctrine:schema:create -n --env test' + - '[[ "$SF_VERSION" != "2" ]] || php frameworks-symfony/app/console doctrine:fixtures:load -n --env test' + - '[[ "$SF_VERSION" != "3" ]] || php frameworks-symfony/bin/console doctrine:schema:update --force -n' + # ZF2 + - "mysql -e 'create database zf2_test;'" + - php frameworks-zf2/vendor/bin/doctrine-module orm:schema-tool:create + # Build + - '[[ "$TRAVIS_PHP_VERSION" == "7.2" ]] || php codecept build -c frameworks-yii-basic' + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || php codecept build -c frameworks-phalcon' + - '[[ "$SF_VERSION" != "2" ]] || php codecept build -c frameworks-symfony/src/AppBundle' + - '[[ "$SF_VERSION" == "2" ]] || php codecept build -c frameworks-symfony' + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || php codecept build -c frameworks-l5' + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || php codecept build -c frameworks-lumen' + - php codecept build -c frameworks-zf1 + - php codecept build -c frameworks-zf2 + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || php codecept build -c frameworks-zend-expressive' + +script: + - php codecept run cli,unit # self tests + - '[[ "$TRAVIS_PHP_VERSION" == "7.0" ]] || php codecept run coverage' # run coverage tests on php only + - '[[ "$TRAVIS_PHP_VERSION" == "7.2" ]] || php codecept run functional -c frameworks-yii-basic' # Yii2 tests + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || php codecept run -c frameworks-l5 --skip=seeder' # Laravel5 Tests + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || php codecept run -c frameworks-lumen' # Lumen Tests + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || php codecept run functional -c frameworks-phalcon' # Phalcon Tests + - '[[ "$SF_VERSION" != "2" ]] || php codecept run functional -c frameworks-symfony/src/AppBundle' # Symfony 2 Tests + - '[[ "$SF_VERSION" != "3" ]] || php codecept run -c frameworks-symfony' # Symfony 3 Tests + - '[[ "$SF_VERSION" != "4" ]] || php codecept run -c frameworks-symfony functional,unit' # Symfony 4 Tests + - php codecept run functional -c frameworks-zf1 # ZF1 Tests + #ZF2 run doctrine tests on PHP 5.4 and 5.5 only + - '[[ "$TRAVIS_PHP_VERSION" > "5.5" ]] || php codecept run -c frameworks-zf2 functional,doctrine' + - '[[ "$TRAVIS_PHP_VERSION" < "5.6" ]] || php codecept run -c frameworks-zf2 functional' + - '[[ "$TRAVIS_PHP_VERSION" == "5.4" ]] || [[ "$TRAVIS_PHP_VERSION" == "5.5" ]] || php codecept run functional -c frameworks-zend-expressive' # Zend Expressive Tests diff --git a/vendor/codeception/codeception/CHANGELOG-2.0.md b/vendor/codeception/codeception/CHANGELOG-2.0.md new file mode 100644 index 000000000..681ddb946 --- /dev/null +++ b/vendor/codeception/codeception/CHANGELOG-2.0.md @@ -0,0 +1,346 @@ +#### 2.0.15 + +* [Phalcon1] Fixed getting has more than one field by @sergeyklay #2010. +* [PhpBrowser][Frameworks] Compute relative URIs against the effective request URI when there is a redirect. #2058 #2057 +* [PhpBrowser] Fixed Guzzle Connector headers by @valeriyaslovikovskaya #2028 +* [Symfony2] kernel is created for every test by @quaninte #2020 +* [WebDriver] Added WebDriver init settings `connection_timeout` and `request_timeout` by @n8whnp #2065 +* [MongoDb] added ability to change the database by @clarkeash #2015 +* [Doctrine2] Fixed issues after first request is made #2025 @AlexStansfield +* [REST] Improved JsonArray to compare repeated values correctly by @Naktibalda #2070 +* [MongoDb] Remove not necessary config fields `user` and `password` by @nicklasos +* `Stub::construct` can be used to set private/protected properties by @Naktibalda #2082 +* Fixed @before and @after hooks in Cest. _before method was executed on each call of method specified in @before annotation *2015-06-15* +* [Laravel5] Fix for domains in `route()` helper. See #2000. *2015-06-04* +* [REST] Fixed sending `JsonSerializable` object on POST by @Naktibalda and @andersonamuller. See #1988 #1994 +* [MongoDb] escaped filename shell argument for loading MongoDB by @christoph-hautzinger. #1998 *2015-06-03* +* [Lumen] **Module added** by @janhenkgerritsen + +#### 2.0.14 + +* Improved output *2015-05-22* + * data providers print simplified + * output respects console size with `tput` and tries to fit area + * non-interactive environments for `tput` are ignored +* [Frameworks][PhpBrowser][Symfony2] Fields are passed as PHP-array on form submission the same way as `Symfony\Component\DomCrawler\Form->getPhpValues()` does. Fixes fails of Symfony form tests *2015-05-22* +* [Laravel4] Fixed bug with filters. See #1810. *2015-05-21* +* [PhpBrowser][Frameworks] Fixed working associative array form fields (like `FooBar[bar]`). Fixes regression #1923 by @davertmik and @zbateson. +* [PhpBrowser][Frameworks] Fixed cloning form nodes Codeception\Lib\InnerBrowser::getFormFromCrawler(): ID XXX already defined *2015-05-13* +* [Laravel4] [Laravel5] Improved error message for `amOnRoute` and `amOnAction` methods if route or action does not exist *2015-05-04* +* [Laravel4] Fixed issue with session configuration *2015-05-01* +* [Laravel4] Partial rewrite of module *2015-05-01* + * Added `getApplication()` method + * Added `seeFormHasErrors()`, `seeFormErrorMessages(array $bindings)` and `seeFormErrorMessage($key, $errorMessage)` methods + * Deprecated `seeSessionHasErrors()` and `seeSessionErrorMessage(array $bindings)` methods. +* fixed stderr output messages in PHPStorm console *2015-04-26* +* Allow following symlinks when searching for tests by @nechutny +* Fixed `g:scenarios --single-file` missing linebreaks between scenarios by @Zifius Parially fixes #1866 +* [Frameworks][PhpBrowser] Fixed errors like `[ErrorException] Array to string conversion` when using strict locators. Fix by @neochief #1881 +* [Frameworks][PhpBrowser] Fix for URLs with query parameters not properly constructed for GET form submissions by @zbateson Fixes #1891 +* [Facebook] Updated Facebook SDK to 4.0 by @enginvardar. See #1896. +* [DB] Quote table name in `Db::getPrimaryKeyColumn` and `Db::deleteQueryMethods` by @Naktibalda. See #1912 +* [Silex] Can be used for API functional testing. Improvement by @arduanov See #1945 +* [Doctrine2] Added new config option `symfony_em_service` to specify service name for Doctrine entity manager in Symfony DIC by @danieltuwien #1915 +* [Db] Reversed order of removing records with foreign keys created by `haveInDatabase`. Fixes #1942 by @satahippy +* [Db] Quote names in PostgreSQL queries. Fix #1916 by @satahippy +* [ZF1] Various improvements by @Naktibalda See #1924 +* [ZF2][ZF2] Improved passing request headers by @Naktibalda +* [Phalcon1] Improved dependency injector container check by @sergeyklay #1967 +* [Yii2] Enabled logging by @TriAnMan #1539 +* Attribute `feature` added to xml reports in `Codeception\TestCase\Test` test report by @tankist. See #1964 +* Fixed #1779 by @Naktibalda +* ...special thanks to @Naktibalda for creating demo [ZF1](https://github.com/Naktibalda/codeception-zf1-tests) and [ZF2](https://github.com/Naktibalda/codeception-zf2-tests) applications with api tests examples. + +#### 2.0.13 + +* Updated to PHPUnit 4.6 +* [Db] fixed regression introduced in 2.0.11. `haveInDatabase` works in PostgreSQL on tables with 'id' as primary key. Fix by @akireikin #1846 #1761 +* added `--no-rebuild` option to disable automatic actor classes rebuilds *2015-04-24* +* suppressed warnings on failed actor classes auto-rebuilds +* enable group listener for grouping with annotation by @litpuvn Fixes #1830 +* unix terminals output improved by calculating screen size. Done by @DexterHD See #1858 +* [Yii2] Remove line to activate request parsers by @m8rge #1843 +* [PhpBrowser][Frameworks] Various `fillField`/`submitForm` improvements by @zbateson See #1840. Fixes #1828, #1689 +* Allow following symlinks when searching for tests by @nechutny #1862 + +#### 2.0.12 + +* [Laravel5] Fix for undefined method `Symfony\Component\HttpFoundation\Request::route()` by @janhenkgerritsen +* [Yii2] Fix https support and verbose output added by @TriAnMan See #1770 +* [Yii2] `haveRecord` to insert insert unsafe attributes by @nkovacs. Fixes #1775 +* [Asserts] `assertSame` and `assertNotSame` added by @hidechae *2015-04-03* +* [Laravel5] Add `packages` option for application packages by @jonathantorres #1782 +* [PhpBrowser][WebDriver][Frameworks] `seeInFormFields` method added for checking multiple form field values. See #1795 *2015-04-03* +* [ZF2] Fixed setting Content-Type header by @Gorp See #1796 *2015-04-03* +* [Yii2] Pass body request into yii2 request, allowing to send Xml payload by @m8rge. See #1806 +* Fixed conditional assertions firing TEST_AFTER event by @zbateson. Issues #1647 #1354 and #1111 *2015-04-03* +* Fixing mocking Laravel models by removing `__mocked` property in classes created with Stub by @EVODelavega See #1785 *2015-04-03* +* [WebDriver] `submitForm` allows array parameter values by @zbateson *2015-04-03* +* [SOAP] Added `framework_collect_buffer` option to disable buffering output by @Noles *2015-04-03* +* [Laravel4] added to run artisan commands by @bgetsug *2015-04-03* +* [AMQP] add a routing key to a push to exchange by @jistok *2015-04-03* +* Interactive console updated to work with namespaces by @jistok *2015-04-03* +* [PhpBrowser] added deleteHeader method by @zbateson *2015-04-03* +* Disabling loading of bootstrap files by setting `bootstrap: false` in globall settings or inside suite config. Fixes #1813 *2015-04-03* + +#### 2.0.11 + +* Updated to PHPUnit 4.5 *2015-02-23* +* [Laravel5] module added by @janhenkgerritsen *2015-02-23* +* Fixed problem with extensions being always loaded with default options by @sjableka. Fixes #1716 *2015-02-23* +* [Db] Cleanup now works for tables with primary is not named 'id'. Fix by @KennethVeipert See #1727 *2015-02-23* +* [PhpBrowser][Frameworks] `submitForm` improvements by @zbateson: *2015-02-23* + +Removed submitForm's reliance on using parse_str and parse_url to +generate params (which caused unexpected side-effects like failing +for values with ampersands). + +Modified the css selector for input elements so disabled input +elements don't get sent default values. + +Modifications to ensure multiple values get sent correctly. + +* [Laravel4] middleware is loaded on requests. Fixed #1680 by @jotweh *2015-02-23* +* [Dbh] Begin transaction only unless transaction is already in progress by @thecatontheflat *2015-02-23* +* [PhpBrowser][Frameworks] Fix quiet crash when crawler is null by @aivus. See #1714 *2015-02-23* +* [Yii2] Fixed usage of PUT method by @miroslav-chandler *2015-02-23* + +#### 2.1.0 + +* [WebDriver] Saving and restoring session snapshots implemented *2015-03-16* + +#### 2.0.10 + +* **Console Improvement**: better formatting of test progress. Improved displaying of debug messages and PHP Fatal Errors. + Codeception now uses features of interactive shell to print testing progress. + In case of non-interactive shell (when running from CI like Jenkins) this feature is gracefully degraded to standard mode. + You can turn off interactive printing manually by providing `--no-interaction` option or simply `-n` +* `ExceptionWrapper` messages unpacked into normal and verbose exceptions. +* HTML reports now allow to filter tests by status. Thanks to @raistlin +* Added '_failed' hook for Cest tests. Fixes #1660 *2015-02-02* +* [REST] fixed setting Host header. Issue #1650 *2015-02-02* +* [Laravel4] Disconnecting from database after each test to prevent Too many connections exception #1665 by @mnabialek *2015-02-02* +* [Symfony2] Fixed kernel reuse in #1656 by @hacfi *2015-02-01* +* [REST] request params are now correctly saved to `$this->params` property. Fixes #1682 by @gmhenderson *2015-02-01* +* Interactive shell updated: deprecated Symfony helpers replaced, printed output cleaned *2015-01-28* +* [PhpBrowser][Frameworks] Fixed `matchOption` to return the option value in case there is no value attribute by @synchrone. See #1663 *2015-01-26* +* Fixed remote context options on CodeCoverage by @synchrone. See #1664 *2015-01-26* +* [MongoDb] `seeNumElementsInCollection` method added by @sahanh +* [MongoDb] Added new methods: `grabCollectionCount`, `seeElementIsArray`, `seeElementIsObject` by @antoniofrignani +* [WebDriver] Allow `selectOption()` to select options not inside forms by @n8whnp See #1638 +* [FTP] Added support for sftp connections with an RSA SSH key by @mattvot. +* [PhpBrowser][WebDriver] allows to handle domain and path for cookies *2015-01-24* +* [CLI] Allow CLI module to handle nonzero response codes without failing by @DevShep +* [Yii2] Fix the bug with `session_id()`. See #1606 by @TriAnMan +* [PhpBrowser][Frameworks] Fix double slashes in certain forms submitted by `submitForm` by @Revisor. See #1625 +* [Facebook] `grabFacebookTestUserId` method added by @ipalaus +* Always eval error level settings passed from config file. + +#### 2.0.9 + +* **Fixed Symfony 2.6 compatibility in Yaml::parse by @antonioribeiro** +* Specific tests can be executed without adding .php extension by @antonioribeiro See #1531 *2014-12-20* + +Now you can run specific test using shorter format: + +``` +codecept run unit tests/unit/Codeception/TestLoaderTest +codecept run unit Codeception +codecept run unit Codeception:testAddCept + +codecept run unit Codeception/TestLoaderTest.php +codecept run unit Codeception/TestLoaderTest +codecept run unit Codeception/TestLoaderTest.php:testAddCept +codecept run unit Codeception/TestLoaderTest:testAddCept + +codecept run unit tests/unit/Codeception +codecept run unit tests/unit/Codeception:testAddCept +codecept run unit tests/unit/Codeception/TestLoaderTest.php +codecept run unit tests/unit/Codeception/TestLoaderTest.php:testAddCept +codecept run unit tests/unit/Codeception/TestLoaderTest +codecept run unit tests/unit/Codeception/TestLoaderTest:testAddCept +``` + +* [Db] Remove table constraints prior to drop table in clean up for SqlSrv by @jonsa *2014-12-20* +* [PhpBrowser][Frameworks] Fixed: submitForm with form using site-root relative paths may fail depending on configuration #1510 by @zbateson *2014-12-20* +* [WebDriver][PhpBrowser][Frameworks] `seeInField` method to work for radio, checkbox and select fields. Thanks to @zbateson *2014-12-20* +* Fixed usage of `--no-colors` flag by @zbateson. Issue #1562 *2014-12-20* +* [REST] sendXXX methods now encode objects implementing JsonSerializable interfaces. *2014-12-19* +* [REST] added methods to validate JSON structure *2014-12-19* + +[seeResponseJsonMatchesJsonPath](http://codeception.com/docs/modules/REST#seeResponseJsonMatchesJsonPath) validates response JSON against [JsonPath](http://goessner.net/articles/JsonPath/). +Usage of JsonPath requires library `flow/jsonpath` to be installed. + +[seeResponseJsonMatchesXpath](http://codeception.com/docs/modules/REST#seeResponseJsonMatchesXpath) validates response JSON against XPath. +It converts JSON structure into valid XML document and executes XPath for it. + +[grabDataFromResponseByJsonPath](http://codeception.com/docs/modules/REST#grabDataFromResponseByJsonPath) method was added as well to grab data JSONPath. + +* [REST] `grabDataFromJsonResponse` deprecated in favor of `grabDataFromResponseByJsonPath` *2014-12-19* +* [PhpBrowser][Frameworks] fixed `Unreachable field` error while filling [] fields in input and textarea fields. Issues #1585 #1602 *2014-12-18* + +#### 2.0.8 + +* Dependencies updated: facebook/php-webdriver 0.5.x and guzzle 5 *2014-11-17* +* [WebDriver] Fixed selectOption and (dont)seeOptionIsSelected for multiple radio button groups by @MasonM. See #1467 *2014-11-18* +* [WebDriver][PhpBrowser][Frameworks] Clicked submit button can be specified as 3rd parameter in `submitForm` method by @zbateson. See #1518 +* [ZF1] Format ZF response to Symfony\Component\BrowserKit\Response by @MOuli90. Fixes #1476 +* [PhpBrowser][Frameworks] fixed `grabValueFrom` method by @zbateson. See #1512 +* [Db] Fixed Postgresql error with schemas by @rafreis. Fixes #970 +* [PhpBrowser] Fix for meta refresh tags with interval by @zbateson. See #1515 +* [PhpBrowser][Frameworks] Fixed: `grabTextFrom` doesn't work with regex by @zbateson. See #1519 +* Cest tests support multiple `@before` and `@after` annotations. Thanks to @draculus and @zbateson. See #1517 +* [FTP] Stops test execution on failed connection by @yegortokmakov +* [AMQP] Fix for purging queues on initialization stage. Check for open channel is not needed and it prevents from cleaning queue by @yegortokmakov +* CodeCoverage remote context configuration added by @synchrone. See #1524 [Documentation updated](http://codeception.com/docs/11-Codecoverage#Remote-Context-Options) +* Implemented better descriptions for error exception. Fix #1503 +* Added `c3_url` option to code coverage settings. `c3_url` allows to explicitly set url for index file with c3 included. See #1024 +* [PhpBrowser][Frameworks] Fixed selecting checkbock in a group of checkboxes #1535 +* [PhpBrowser][Frameworks] submitForm sends default values for radio buttons and checkboxes by @zbateson. Fixes #1507 *2014-11-3* +* [ZF2] Close any open ZF2 sessions by @FnTm. See #1486 *2014-10-24* + +#### 2.0.7 + +* [Db] Made the postgresql loader load $$ syntax correctly by @rtuin. See #1450 *2014-10-12* +* [Yii1] fixed syntax typo in Yii1 Connector by @xt99 *2014-10-12* +* [PhpBrowser][WebDriver] amOnUrl method added for opening absolute urls. This behavior taken from amOnPage method, initially introduced in 2.0.6 *2014-10-12* +* Fixed usage of whitespaces in wantTo. See #1456 *2014-10-12* +* [WebDriver][PhpBrowser][Frameworks] fillField is matching element by name, then by CSS. Fixes #1454 *2014-10-12* + +#### 2.0.6 + +* Fixed list of executed suites while running included suites by @gureedo. See #1427 *2014-10-08* +* [Frameworks] support files and request names containing square brackets, dots, spaces. See #1438. Thanks to @kkopachev *2014-10-08* +* [PhpBrowser] array of files for Guzzle to support format: file[foo][bar]. Fixes #342 by @kkopachev *2014-10-07* +* Added strict mode for XML generation. *2014-10-06* + +In this mode only standard JUnit attributes are added to XML reports, so special attributes like `feature` won't be included. This improvement fixes usage XML reports with Jenkins #1408 + To enable strict xml generation add to `codeception.yml`: + +``` +settings: + strict_xml: true +``` + +* Fixed retrieval of codecoverage reports on remote server #1379 *2014-10-06* +* [PhpBrowser][Frameworks] Malformed XPath won't throw fatal error, but makes tests fail. Fixes #1409 *2014-10-06* +* Build command generates actors for included suites. See #1267 *2014-10-03* +* CodeCoverage throws error on unsuccessful requests (status code is not 200) to remote server. Fixes #346 *2014-10-03* +* CodeCoverage can be disabled per suite. Fix #1249 *2014-10-02* +* Fix: --colors and --no-colors options can override settings from config *2014-10-02* +* [WebDriver] `waitForElement*` methods accept strict locators and WebDriverBy as parameters. See #1396 *2014-09-29* +* [PhpBrowser] `executeInGuzzle` uses baseUrl set from config. Fixes #1416 *2014-09-29* +* [Laravel4] fire booted callbacks between requests without kernel reboot. Fixes #1389, See #1415 *2014-09-29* +* [WebDriver][PhpBrowser][Frameworks] `submitForm` accepts forms with document-relative paths. Fixes #1274 *2014-09-28* +* [WebDriver][PhpBrowser][Frameworks] Fixed #1381: `fillField` fails for a form without a submit button by @zbateson *2014-09-28* +* [PhpBrowser][WebDriver] `amOnPage` now accepts absolute urls *2014-09-27* +* [Db] ignore errors from lastInsertId by @tomykaira *2014-09-27* +* [WebDriver] saves HTML snapshot on fail *2014-09-27* +* [WebDriver] fixed #1392: findField should select by id, css, then fall back on xpath *2014-09-27* +* [WebDriver] Don't check for xpath if css selector is set, by @Danielss89 #1367 *2014-09-27* +* Specify actor class for friends by @tomykaira. See #1394 *2014-09-27* + +#### 2.0.5 + +* [Queue] module added with AWS, Iron.io, and Beanstalkd support. Thanks to @nathanmac *2014-08-21* +* [WebDriver] fixed attachFile error message when file does not exists #1333 by @TroyRudolph *2014-08-21* +* [Asserts] Added assertLessThan and assertLessThanOrEqual by @Great-Antique *2014-08-21* +* [ZF2] fixed #1283 by @dkiselew *2014-08-21* +* Added functionality to Stub to allow ConsecutiveCallStub. See #1300 by @nathanmac *2014-08-21* +* Cest generator inserts object into _before and _after methods by @TroyRudolph *2014-08-21* +* [PhpBrowser][Frameworks] Fixed #1304 - ->selectOption() fails if two submit buttons present by @fdjohnston *2014-08-21* +* [WebDriver][PhpBrowser][Frameworks] seeNumberOfElements method added by @dynasource *2014-08-21* +* recursive runner for included suites by @dynasource *2014-08-21* +* Disabled skipped/incomplete tests logging in jUnit logger for smooth Bamboo integration by @ayastreb *2014-08-21* + +#### 2.0.4 + +* [Laravel4] More functional, cli, and api tests added to demo application *2014-08-05* +* Fix: GroupManager uses DIRECTORY_SEPARATOR for loaded tests *2014-08-05* +* [Laravel4] Uses `app.url` config value for creating requests. Fixes #1095 *2014-08-04* +* [Laravel4] `seeAuthenticated` / `dontSeeAuthenticated` assertions added to check that current user is authenticated *2014-08-04* +* [Laravel4] `logout` action added *2014-08-04* +* [Laravel4] `amLoggedAs` can login user by credentials *2014-08-04* +* [Laravel4] Added `amOnRoute`, `amOnAction`, `seeCurrentRouteIs`, `seeCurrentActionIs` actions *2014-08-04* +* [Laravel4] Added `haveEnabledFilters` and `haveDisabledFilters` actions to toggle filters in runtime *2014-08-04* +* [Laravel4] Added `filters` option to enable filters on testing *2014-08-04* +* [REST] seeResponseContainsJson should not take arrays order into account. See #1268 *2014-08-04* +* [REST] grabDataFromJsonResponse accepts empty path to return entire json response *2014-08-04* +* [REST] print_r replaced with var_export for better output on json comparison #1210 *2014-08-02* +* [REST] Reset request variables in the before hook by @brutuscat #1232 *2014-08-01* +* [Db] Oci driver for oracle database by @Sikolasol #1234 #1243 *2014-08-01* +* [Laravel4] Unit testing and test environment are now configurable #1255 by @ipalaus *2014-08-01* +* [Laravel4] Fixed Cest testing when using Laravel's Auth #1258 by @ipalaus *2014-08-01* +* FIX #948 code coverage HTML: uncovered files missing by @RLasinski *2014-07-26* +* [Laravel4] project root relative config parameter added by @kernio *2014-07-26* + +#### 2.0.3 + +* [Symfony2] Symfony3 directory structure implemented by @a6software *2014-07-21* +* Console: printing returned values *2014-07-21* +* FIX: TAP and JSON logging should not be started when no option --json or --tap provided *2014-07-21* +* [Doctrine2] FIXED: persisting transaction between Symfony requests *2014-07-19* +* [Symfony2] created Symfony2 connector with persistent services *2014-07-19* +* [Doctrine2] implemented haveInRepository method (previously empty) *2014-07-17* +* When Cest fails @after method wont be executed *2014-07-17* +* [Laravel4] App is rebooted before each test. Fixes #1205 *2014-07-15* +* FIX: `codeception/specify` is now available in phar *2014-07-14* +* FIX: Interactive console works again *2014-07-09* +* `_bootstrap.php` is now loaded before `beforeSuite` module hooks. +* FIX: Suite `_bootstrap.php` was loaded after test run by @samdark *2014-07-11* + +#### 2.0.2 + +* [PhpBrowser][Frameworks] correctly send values when there are several submit buttons in a form by @TrustNik *2014-07-08* +* [REST] fixed connection with framework modules *2014-07-06* +* [PhpBrowser][Frameworks] `checkOption` now works for checkboxes with array[] name by @TrustNik +* [PhpBrowser][Frameworks] FIX: `seeOptionIsSelected` and `dontSeeOptionIsSelected` now works with radiobuttons by @TrustNik *2014-07-05* +* [FTP] MODULE ADDED by @nathanmac *2014-07-05* +* [WebDriver] Enabled remote upload of local files to remote selenium server by @motin *2014-07-05* +* [Yii2][Yii1] disabled logging for better functional test performance + +#### 2.0.1 + +* [Phalcon1] Fixed connector +* [WebDriver] added seeInPageSource and dontSeeInPageSource methods +* [WebDriver] see method now checks only for visible BODY element by @artyfarty +* [REST] added Bearer authentication by @dizews +* removed auto added submit buttons in forms previously used as hook for DomCrawler +* BUGFIX: PHP 5.4.x compatibility fixed. Sample error output: 'Method WelcomeCept.php does not exist' #1084 #1069 #1109 +* Second parameter of Cest method is treated as scenario variable on parse. Fix #1058 +* prints raw stack trace including codeception classes in -vvv mode +* screenshots on fail are saved to properly named files #1075 +* [Symfony2] added debug config option to switch debug mode by @pmcjury + +#### 2.0.0 + +* renamed `_logs` dir to `_output` by default +* renamed `_helpers` dir to `_support` by default +* Guy renamed to Tester +* Bootstrap command got 3 installation modes: default, compat, setup +* added --coverage-text option + +#### 2.0.0-RC2 + +* removed fabpot/goutte, added Guzzle4 connector +* group configuration can accept groups by patterns + +#### 2.0.0-RC + +* [WebDriver] makeScreenshot does not use filename of a test +* added `grabAttributeFrom` +* seeElement to accept attributes in second parameter: seeElement('input',['name'=>'login']) + +#### 2.0.0-beta + +* executeInGuzzle is back in PhpBrowser +* environment can be accessed via ->env in test +* before/after methods of Cest can take object +* moved logger to extension +* bootstrap files are loaded before suite only +* extension can reconfigure global config +* removed RefactorAddNamespace and Analyze commands +* added options to set output files for xml, html reports, and coverage +* added extension to rerun failed tests +* webdriver upgraded to 0.4 +* upgraded to PHPUnit 4 diff --git a/vendor/codeception/codeception/CHANGELOG-2.1.md b/vendor/codeception/codeception/CHANGELOG-2.1.md new file mode 100644 index 000000000..246311bdd --- /dev/null +++ b/vendor/codeception/codeception/CHANGELOG-2.1.md @@ -0,0 +1,256 @@ +#### 2.1.11 + +* [Yii1] Improved Yii connector. AR metadata is cleaned up between requests. `regenerateId` of session is disabled. +* [REST][InnerBrowser] redirect is not triggered when Location header is set but response code is not 3xx. By @Naktibalda. Fixes #3171. +* [PhpBrowser][Frameworks] checkboxes can be located by label by @dizzy7. See #3237 +* [PhpBrowser][Frameworks] field can be matched by its trimmed label value. See #3209. By @dizzy7 +* [WebDriver] fixed URL matching in WebDriver::seeLink +* [WebDriver][InnerBrowser] Improved error messages of `seeLink` and `dontSeeLink` + +#### 2.1.10 + +* PHPUnit version locked to <5.4 +* [Db] Added missing support for LIKE condition to SqlSrv driver + +#### 2.1.9 + +* PHPUnit 5.4 compatibility for creating mocks using `Codeception\Util\Stub` by @davertmik. See #3093 and #3080 +* Updated dependencies to support Symfony 3.1 +* [Laravel5] Fixed issue where non-existing services were called in _before and _after methods. See #3028. +* Fix self-update command to update only to stable versions by @MAXakaWIZARD +* Added `settings: backup_global` to config, to disable backup_global option of PHPUnit by @mkeasling. See #3045. Fixes #3044 +* [PhpBrowser][Frameworks] `see` matches UTF-8 text case-insensitively by @Naktibalda. Fixes #3114 +* Fixed page object generation with namespaces by @eugene-manuilov and @Naktibalda. See #3126 Fixes #3012 +* `--steps` will not disable code coverage. By @Naktibalda. Fixes #2620 +* Suppress console coverage report with `--quiet` by @EspadaV8. See #2370 +* Improved multibyte output in console by @kt81. See #3130 +* [Lumen] Fixed: `initializeLumen()` method has been called twice on start by @kt81. See #3124 #2607 +* [Db] Allow INT Parameter SQL Binding by @davidcochrum . Fixes #3118 +* [Db] Support LIKE conditions in assertions. +* [Db] Improved regex for parsing comments by @dima-stefantsov. See #3138 +* [Dbh] Fix `seeInDatabase` and `dontSeeInDatabase` with empty criteria. Closes #3116 +* [Symfony] Improve fail messages on seeInCurrentRoute and seeCurrentRouteIs +* [Symfony] Improve route comparison on seeInCurrentRoute and seeCurrentRouteIs +* [WebDriver] multi session testing with friends improved by @eXorus. Webdriver sessions are finished correctly; `leave()` method added to Friend class. See #3068 +* [PhpBrowser] added `handler` and `middleware` config options to customize Guzzle handlers and middleware +* Added full support of phpunit-bridge features. +* [Laravel] Fixed issue where non-existing services were called in _before and _after methods. See #3028. +* [WebDriver] fixed using `saveSessionSnapshot` with codecoverage. Closes #2923 +* [ZF2] create new instance of Application for each request + +#### 2.1.8 + +* `Util\Locator` added methods to create locators to match element at their position: `elementAt`, `firstElement`, `lastElement` +* [Symfony] Refactor to unify service retrieval, avoid memleaks and reduce memory footprint. Closes #2938 and #2954. +* [Symfony] New optoin `rebootable_client` that reboots client's kernel before each request. +* [WebDriver] fixed `seeInField` for textarea with whitespaces before and after string. Closes #2921 +* [Symfony] Deprecated `grabServiceFromContainer` use `grabService` instead. For consistency with other frameworks. +* [Asserts] More `assert*` methods from PHPUnit added +* [Asserts] Added `expectException` method +* `codecept self-update` works with proxy by @gr1ev0us +* [Phalcon1 add params support for method amOnRoute by @MelnykDmitro + +#### 2.1.7 + +* **PHPUnit 5.x support** +* Global Bootstrap, Suite Bootstrap, Module Initialization happens before test loading. Fixes issues of autoloading TestCase classes introduced in 2.1.5, see #2872 +* Added option to skip PHP files validation in `codeception.yml` - `settings: lint: false` +* [Facebook] Updated to facebook/php-sdk-v4 version 5 by @orhan-swe and @tigerseo #2828 #2415 +* [WebDriver] Added `scrollTo` action by @javigomez and @davertmik #2844 +* Fix encoding problems in PHP prior to 5.6 by @pejaycz. See #2831 +* [Queue] Fixed `clearQueue` for AmazonSQS by @mikitu #2805 +* [Db] Fixed loading files in Sqlite @mcustiel See #2812 +* [PhpBrowser] `amHttpAuthenticated` allows null, null as parameters to unset authentication. #2896 +* `Util\Locator` added `contains` method to easily locate any element containing a text. +* [Laravel5] Added `guard` parameters to `seeAuthentication` and `dontSeeAuthentication` methods. By @janhenkgerritsen. See #2876 +* [Laravel5] Added functionality to disable/enable Laravel's exception handling. By @janhenkgerritsen. See #2763 +* [Laravel5] Authentication now persists between requests when calling `amLoggedAs` with an instance of `Authenticable`. See #2795 +* [REST] Fixed dontSeeXmlResponseMatchesXpath method #2825 by @mangust404 +* [ZF2] Fixed POST parameters #2814 by @Naktibalda +* [ZF1] Call Zend_Registry::_unsetInstance in _after #2863 by @Naktibalda + +#### 2.1.6 + +* Starting from 2.1.6 you can **download PHP 5.4 compatible phar build** at http://codeception.com/php54/codecept.phar by @Naktibalda. See [installation guide](http://codeception.com/install). +* [WebDriver] Fixed uploading files with **PhantomJS** #1823 by @DavertMik and @Naktibalda. Please specify your browser name as `phantom` in WebDriver config in order to use PhantomJS-specific hooks. +* Fixed parsing PHP files with spaces in name on PHP<7 by @acuthbert. Fixes #2647 +* [WebDriver] Fixed proxy error when using with Chrome #2651 by @vaikla +* [Laravel5] Allow Laravel5 application URL to be set through config. By @gmhenderson. See #2676 +* [Laravel5] Mocked events should also return an array. Fix by @devinfd +* Fixed using codecoverage with environments #2634 +* Various HHVM improvements by @Naktibalda, for instance, Asserts module issues has been fixed. +* [REST] Fixes #2775 `seeResponseJsonMatchesXpath` when JSON contains ampersand. By @Naktibalda. +* [Filesystem] Added `seeNumberNewLines` method to check the number of new lines in opened file. By @sergeyklay +* [Symfony2] Added `seeCurrentRouteMatches` action by @laszlo-karpati See #2665 +* [Sequence] Added `sqs` function to generate unique sequences per suite. #2766 by @johnatannvmd +* [FTP] Fixed various bugs by @k-serenade. See #2755 +* [Frameworks][PhpBrowser] Fixed #2733: `seeOptionIsSelected` sees first option as selected if none is selected by @Naktibalda +* [Symfony2] Removed 'localhost' from getInternalDomains by @Naktibalda. Fixed #2717 +* Bugfix for using groups by directory on Windows by @tortuetorche See #2550 and #2551 +* [REST] Fixed failed message for `seeHttpHeader` and `dontSeeHttpHeader` from null to expected value #2697 by @zondor +* [REST] Added methods to control redirect: `stopFollowingRedirects` and `startFollowingRedirects` by @brutuscat +* [Recorder Extension] Added `animate_slides` config to disable left-right sliding animation between screenshots by @vml-rmott + +#### 2.1.5 + +* **PHP7 support** +* **Symfony3 support** +* [ZendExpressive] **module added** by @Naktibalda +* [Frameworks] **Internal Domains**: Framework modules now throw an `ExternalUrlException` when a test tries to open a URL that is not handled by the framework, i.e. an external URL. See #2396 +* Syntax check for tests. If PHP7 is used, `ParseException` handles syntax error, otherwise linting happens with `php -l`. @davertmik +* Fixed Cest generation to not include "use" statements if no namespaces set +* [REST] Modified JsonArray::sequentialArrayIntersect to return complete matches only by @Naktibalda. Fixes #2635 +* [REST] Fixes validation of several types with filters. See #2581 By @davertmik +* [REST] JsonType improved URL filter to use `filter_var($value, FILTER_VALIDATE_URL)` +* [REST] JsonType to support collections: all items in an array will be validates against JsonType. By @davertmik +* [REST] Various fixes to JsonType: #2555 #2548 #2542 +* [REST] Hides binary request data in debug by @codemedic. Fixed #1884, See #2552 +* [WebDriver] Allow `appendField` to work with content editable div by @nsanden #2588 +* [WebDriver] Allows adding ssl proxy settings by @mjntan35. +* [Symfony2] Config option `cache_router` added (disabled by default) by @raistlin. +* [Doctrine] Fixed #2060: Too many connections error by @dranzd +* [Symfony2] `services` part added to allow access Symfony DIC while wokring with WebDriver or PhpBrowser by @laszlo-karpati See #2629 +* [WebDriver][PhpBrowser] Unified setCookie "expires" param name by @davertmik. See #2582 +* [Memcache] add adaptive close call on `_after` by @pfz. See #2572 +* [Symfony2] Move kernel booting and container set up into _initialize() method by @Franua #2491 +* [WebDriver] Fixed `seeInField` for textareas by @nsanden +* [Yii2][REST] Fixed using Yii2 as dependency for REST by @Naktibalda. See #2562 +* [Laravel5] Removed `enableMiddleware` and `enableEvents` methods. See #2602. By @janhenkgerritsen +* [Laravel] Refactored modules. See #2602. By @janhenkgerritsen +* [Laravel5] Fix bug for `seeCurrentRouteIs` when routes don't match. See #2593. By @maddhatter +* [PhpBrowser] Set curl options for Guzzle6 correctly. See #2533. By @Naktibalda +* Fixed usage of GroupObject by unit tests. GroupObjects can skip tests by @davetmik. See #2617 + +#### 2.1.4 + +* [PhpBrowser][Frameworks] Added `_getResponseContent` hidden method. By @Naktibalda +* [PhpBrowser][Frameworks] Added `moveBack` method. By @Naktibalda +* [WebDriver][PhpBrowser][Frameworks] Added `seeInSource`, `dontSeeInSource` methods to check raw HTML instead of stripped text in `see`/`dontSee`. By @zbateson in #2465 +* [WebDriver] print Selenium WebDriver logs on failure or manually with `debugWebDriverLogs` in debug mode. Config option `debug_log_entries` added. See #2471 By @MasonM and @DavertMik. +* [ZF2] grabs service from container without reinitializing it. Fixes #2519 where Doctrine2 gets different instances of the entity manager everytime grabServiceFromContainer is called. By @dranzd +* [REST] fixed usage of JsonArray and `json_last_error_msg` function on PHP 5.4. See #2535. By @Naktibalda +* [REST] `seeResponseIsJsonType` can now validate emails with `string:email` definition. By @DavertMik +* [REST] `seeResponseIsJsonType`: `string|null` as well as `null|string` can be used to match null type. #2522 #2500 By @vslovik +* [REST] REST methods can be used to inspect result of the last request made by PhpBrowser or framework module. see #2507. By @Naktibalda +* [Silex] Doctrine provider added. Doctrine2 module can be connected to Silex app with `depends: Silex` in config. By @arduanov #2503 +* [Laravel5] Removed `expectEvents` and added `seeEventTriggered` and `dontSeeEventTriggered`. By @janhenkgerritsen +* [Laravel5] Fixed fatal error in `seeCurrentRouteIs` and `seeCurrentActionIs` methods. See #2517. By @janhenkgerritsen +* [Laravel5] Improved the error messages for several methods. See #2476. By @janhenkgerritsen +* [Laravel5] Improved form error methods. See #2432. By @janhenkgerritsen +* [Laravel5] Added wrapper methods for Laravel 5 model factories. See #2442. By @janhenkgerritsen +* [Phalcon] Added `amOnRoute` and `seeCurrentRouteIs` methods by @sergeyklay +* [Phalcon] Added `seeSessionHasValues` by @sergeyklay +* [Phalcon] Added `getApplication()` method by @sergeyklay +* [Symfony2] Sets `xdebug.max_nesting_level` to 200 only if it is lower. Fixes error hiding #2462 by @mhightower +* [Db] Save the search path when importing Postgres dumps #2441 by @EspadaV8 +* [Yii2] Fixed problems with transaction rollbacks when using the `cleanup` flag. See #2488. By @ivokund +* [Yii2] Clean up previously uploaded files between tests by @tibee +* Actor classes generation improved by @codemedic #2453 +* Added support for nested helper by @luka-zitnik #2494 +* Make `generate:suite` respect bootstrap setting in #2512. By @dmitrivereshchagin + +#### 2.1.3 + +* [REST] **Added matching data types** by with new methods `seeResponseMatchesJsonType` and `dontSeeResponseMatchesJsonType`. See #2391 +* [PhpBrowser][Frameworks] added `_request` and `_loadPage` hidden API methods for performing arbitrary requests. +* [PhpBrowser][Frameworks] Fixed `seeInField`, `dontSeeInField` for disabled fields #2378. See #2414. +* Environment files can now be located in subfolders of `tests/_env` by @Zifius +* [Symfony2] Fixed issue when accessing profiler when no request has been performed #652. +* [Symfony2] Added `amOnRoute` and `seeCurrentRouteIs` methods by @raistlin +* [ZF2] Added `amOnRoute` and `seeCurrentRouteIs` methods module, by @Naktibalda +* Fixed issue with trailing slashes in `seeCurrentUrlEquals` and `dontSeeCurrentUrlEquals` methods #2324. By @janhenkgerritsen +* Warning is displayed once using unconfigured environment. +* Fixed loading environment configurations for Cept files by @splinter89 +* Fixed bootstrap with namespaces to inject namespaced actor classes properly. +* [PhpBrowser][Frameworks] added hidden `_request()` method to send requests to backend from Helper classes. +* [Laravel5] Added `disableEvents()`, `enableEvents()` and `expectEvents()` methods. By @janhenkgerritsen +* [Laravel5] Added `dontSeeFormErrors()` method. By @janhenkgerritsen +* [Db] Deleted Oracle driver (it existed by mistake, the real driver is Oci). By @Naktibalda +* [Db] Implemented getPrimaryKey method for Sqlite, Mysql, Postgresql, Oracle and MsSql. By @Naktibalda +* [Db] Implemented support for composite primary keys and tables without primary keys. By @Naktibalda +* Fixed the scalarizeArray to be aware of NULL fields #2264. By @fbidu +* [Soap] Fixed SOAP module #2296. By @relaxart +* Fixed a bug where blank lines in a groups file would run every test in the project #2297. By @imjoehaines +* [WebDriver] seeNumberOfElements should only count visible elements #2303. By @sascha-egerer +* [PhpBrowser][Frameworks] Verbose output for all HTTP requests. By @Naktibalda +* [PhpBrowser][Frameworks] Throw `Codeception\Exception\ExternalUrlException` when framework module tries to open an external URL #2328. By @Naktibalda +* [PhpBrowser][Frameworks] Added `switchToIframe` method. By @Naktibalda +* [Dbh] module deprecated + +#### 2.1.2 + +* **Updated to PHPUnit 4.8** +* Enhancement: **Wildcard includes enabled when testing [multiple applications](http://codeception.com/docs/08-Customization#One-Runner-for-Multiple-Applications)**. See #2016 By @nzod +* [Symfony2] fixed Doctrine2 integration: Doctrine transactions will start before each test and rollback afterwards. *2015-08-08* +* [Doctrine2] establishing connection and starting transaction is moved to `_before`. *2015-08-08* +* [PhpBrowser] Removed disabled and file fields from form values. By @Naktibalda *2015-08-08* +* [ZF2] Added grabServiceFromContainer function. By InVeX *2015-08-08* +* [PhpBrowser][Guzzle6] Disabled strict mode of CookieJar #2234 By @Naktibalda *2015-08-04* +* [Laravel5] Added `disableMiddleware()` and `enableMiddleware()` methods. By @janhenkgerritsen *2015-08-07* +* Enhancement: If a specific *ActorActions trait does not exist in `tests/_support/_generated` directory, it will be created automatically before run. +* Enhancement: do not execute all included suites if you run one specific suite *2015-08-08* +* `Extension\Recorder` navigate over slides with left and right arrow keys, do not create screenshots for comment steps. +* `Extension\Recorder` generates index html for all saved records. +* `Extension\Recorder` fixed for creating directories twice. Fixed #2216 +* `Extension\Logger` fixed #2216 +* Fixed injection of Helpers into Cest and Test files. See #2222 +* `Stub::makeEmpty` on interfaces works again by @Naktibalda +* Command `generate:scenarios` fixed for Cest files by @mkudenko See #1962 +* [Db] Quoted table name in Db::select, removed identical methods from child classes by @Naktibalda. See #2231 +* [WebDriver] added support for running tests on a remote server behind a proxy with `http_proxy` and `http_proxy_port` config options by @jdq22 *2015-07-29* +* [Laravel] Fixed issue with error handling for `haveRecord()` method in Laravel modules #2217 by @janhenkgerritsen *2015-07-28* +* Fixed displayed XML/HTML report path #2187 by @Naktibalda *2015-07-27* +* [WebDriver] Fixed `waitForElementChange` fatal error by @stipsan +* [Db] Enhanced dollar quoting ($$) processing in PostgreSQL driver by @YasserHassan *2015-07-20* +* [REST] Created tests for file-upload with REST module. By @Naktibalda *2015-08-08* +* [Lumen] Fixed issue where wrong request object was passed to the Lumen application by @janhenkgerritsen *2015-07-18* + +#### 2.1.1 + +* [WebDriver] **Upgraded to facebook/webdriver 1.0** *2015-07-11* + WebDriver classes were moved to `Facebook\WebDriver` namespace. Please take that into account when using WebDriver API directly. + Till 2.2 Codeception will keep non-namespaced aliases of WebDriver classes. +* Module Reference now contains documentation for hidden API methods which should be used in Helper classes +* Skipped and Incomplete tests won't fire `test.before` and `test.after` events. For instance, WebDriver browser won't be started and Db cleanups won't be executed on incomplete or skipped tests. +* Annotations `skip` and `incomplete` enabled in Cest files #2131 +* [WebDriver][PhpBrowser][Frameworks] `_findElements($locator)` method added to use in Helper classes *2015-07-11* + Now you can use `$this->getModule('WebDriver')->findElements('.user');` in Helpers to match all elements with `user` class using WebDriver module +* [PhpBrowser] Fixed `amOnUrl` method to open absolute URLs. +* [PhpBrowser][Frameworks] Fix for `fillField` using values that contain ampersands by @GawainLynch and @zbateson Issue #2132 +* [WebDriver][PhpBrowser][Frameworks] Fixed missing HTTPS when trying to access protected pages #2141 + +#### 2.1.0 + +* [Recorder](https://github.com/Codeception/Codeception/tree/master/ext#codeceptionextensionrecorder) extension added. Shows acceptance test progress with a recorded slideshow. +* **Updated to Guzzle 6**. Codeception can now work both with Guzzle v5 and Guzzle v6. PhpBrowser chooses right connector depending on Guzzle version installed. By @davertmik and @enumag +* Annotations in Cept files. + Instead of calling `$scenario->skip()`, `$scenario->group('firefox')`, etc, it is recommended to set scenario metadata with annotations `// @skip`, `// @group firefox`. + Annotations can be parsed from line or block comments. `$scenario->skip()` and `$scenario->incomplete()` are still valid and can be executed inside conditional statements: + ``` + if (!extension_loaded('xdebug')) $scenario->skip('Xdebug required') + ``` +* **PSR-4**: all support classes moved to `tests/_support` by default. Actors, Helpers, PageObjects, StepObjects, GroupObjects to follow PSR-4 naming style. Autoloader implemented by @splinter89. +* **Dependency Injection**: support classes can be injected into tests. Support classes can be injected into each other too. This happens by implementing method `_inject` and explicitly specifying class names as parameters. Implemented by @splinter89. +* **Actor classes can be extended**, their generated parts were moved to special traits in `_generated` namespace. Each *Tester class can be updated with custom methods. +* **Module config simplified**: Modules can be configured in `enabled` section of suite config. +* **Conflicts**: module can define conflicts with each other by implementing `_conflicts` method +* **Dependencies**: module can explicitly define dependencies and expect their injection by implementing `_inject` and `_depends` methods and relying on dependency injection container. +* **Current** modules, environment, and test name can be received in scenario. Example: `$scenario->current('env')` returns current environment name. Fixes #1251 +* **Environment Matrix**: environments can be merged. Environment configs can be created in `tests/_envs`, environment generator added. Implemented by By @sjableka. See #1747 +* **Custom Printers**: XML, JSON, TAP, Report printers can be redefined in configuration. See #1425 +* [Db] Added `reconnect` option for long running tests, which will connect to database before the test and disconnect after. By @Naktibalda +* Module parts. Actions of modules can be loaded partially in order to disable actions which are not used in current tests. For instance, disable web actions of framework modules in unit testsing. +* **Kohana**, **Symfony1**, **Doctrine1** modules considered deprecated and moved to standalone packages. +* `shuffle` added to settings. Randomizes order of running tests. See #1504 +* Console output improved: scenario stack traces contain files and lines of fail. +* [Doctrine2][Symfony2] `symfony_em_service` config option moved from Doctrine2 to Symfony2 module and renamed to `em_service` *2015-06-03* +* [PhpBrowser][Frameworks] Fixed cloning form nodes `Codeception\Lib\InnerBrowser::getFormFromCrawler(): ID XXX already defined` *2015-05-13* +* [WebDriver] session snapshot implemented, allows to store cookies and load them, i.e., to keep user session between testss. +* [WebDriver][PhpBrowser][Frameworks] Malformed XPath locators wil throw an exception #1441 +* `MODULE_INIT` event is fired before initializing modules #1370 +* Graceful tests termination using `pcntl_signal`. See #1286 +* Group classes renamed to GroupObjects; Base GroupObject class renamed to `Codeception\GroupObject` +* Official extensions moved to `ext` dir; Base Extension class renamed to `Codeception\Extension` +* Duplicate environment options won't cause Codeception to run environment tests twice +* [Phalcon1] `haveServiceInDi` method implemented by @sergeyklay +* [Db] `seeNumRecords` method added by @sergeyklay \ No newline at end of file diff --git a/vendor/codeception/codeception/CHANGELOG-2.2.md b/vendor/codeception/codeception/CHANGELOG-2.2.md new file mode 100644 index 000000000..59c4a62f9 --- /dev/null +++ b/vendor/codeception/codeception/CHANGELOG-2.2.md @@ -0,0 +1,397 @@ + +#### 2.2.12 + +* Don't skip other tests after a failed test #4226 by @Naktibalda +* [REST] `seeResponseContainsJson` doesn't crash when json response is not an array by @Naktibalda +* [PhpBrowser] Fixed redirecting to schemaless url by @Naktibalda #4218 +* [Doctrine2] Added `grabEntityFromRepository`, `grabEntitiesFromRepository` methods by @maximelebastard + +#### 2.2.11 + +* [WebDriver] Added `_restart` method to restart browser with a new configuration. +* [WebDriver] Added `_findClickable` to public API so can be used from helpers. By @tiger-seo +* [WebDriver] `seeLink` compares relative links correctly #4182 +* [Webdriver] fixed attachFile messages when the file does not exist by @Naktibalda +* Fixed setting paths in environments and using `--override` options. By @kusnir. See #4143 +* [Yii1] Allow to set only host in `url` config. #4172 by @SG5. +* [Yii1] Allow to make requests end with slash. #4190 by @SG5 +* [Yii2] Allows use `InitDbFixture` feature #4201 +* [Yii2] Add missing YII2 lifecycle events. #4187 +* Don't run test if exception was thrown in `_before` of a module #4197 by @Naktibalda +* [Mongo] Fixed parsing dbname. See #4186 by @retnek +* [Mongo] Improved legacy driver check by @retnek. See #4178 +* [WebDriver][PhpBrowser][Frameworks] Added `grabPageSource` method by @Kolyunya +* [PhpBrowser][REST] Add DELETE method to supported form data request methods in Guzzle6 by +* [PhpBrowser][REST] Restore request headers in multi-session testing. Fixes #4157 +* Recorder Extension: Replace non-alphanumeric characters with underscores by @tiger-seo. Fixes Recorder on Windows +* [REST] Documented different ways to upload files +* Fixed `$scenario->current('name')` #4154 by @Naktibalda +* [AMQP] Documented parameters of `declareQueue`, `declareExchange` by @Naktibalda +* [Doctrine2] Safe prefix aliases for `buildAssociationQuery` by @jfxninja. See #4195 +* Fixed output of failed step by @Naktibalda #4135 http://phptest.club/t/seeelement-wierd-fail-message/1470 +* [WebDriver] fixed `friend->leave` method. Clearing base element on closing session. Fixes #4098 +* [Symfony] Make symfony bootstrap.php.cache optional for php version > 7 by @patrickjahns +* Gherkin: Command `gherkin:snippets` to generate stub function name for non-english features. By @kuntashov +* Gherkin: Steps with PyString and with inline string argument considered the same. Fixes #4121 by @kuntashov +* [Db] `Oci::cleanup()` should be able to drop objects with case sensitive name. By @pavelkovar +* [Db] loadDump reports sql statement which caused error, fixes regression from 2.2.10. See #4120. By @Naktibalda. +* [Asserts] Add delta parameter to `assertEquals()` `assertNotEquals()` methods by @spideyfusion +* [Yii2] Removed check and notification for environment other than `test` by @samdark +* [Yii2] Unload fixtures only if `cleanup` configuration equals true. #4207 by @Faryshta +* [ZF2] Removed `session_write_close()` from ZF2 module by @tasselchof. Fixes #4112 +* Fixed textual representation of can't steps by @Naktibalda +* [Lumen] Added IoC methods from Laravel5 module: `haveBinding`, `haveSingleton`, `haveContextualBinding`, `haveInstance`, `haveApplicationHandler`, `clearApplicationHandlers`. By @kt81 +* [Lumen] Clear facade cache only when facade exists. Same change as #3124 for refactored Lumen module by @kt81 +* [ZendExpressive] Support Zend Expressive 2.0 by @Naktibalda +* [Doctrine2] `haveFakeRepository` updated to work with Doctrine >= 2.5.7 by @laszlo-karpati #4212 +* Command `bootstrap` adds `support/_generated` to gitignore. By @Naktibalda + +#### 2.2.10 + +* Prefer local composer installation if available. Solves issues with incompatibility between locally and globally installed or packaged in phar file Codeception dependencies. Fix by @Naktibalda See #3997 +* Added console completion by @gdscei. See [documentation](http://codeception.com/docs/07-AdvancedUsage#Shell-autocompletion) +* [WebDriver] Fixed compatibility with `facebook/webdriver` 1.4.0 by @Naktibalda. See #4076 Fixes #4073 +* Run a suite by its path #4079 + +``` +codecept run tests/unit +``` +Improves recent [PHPStorm integration](https://blog.jetbrains.com/phpstorm/2017/03/codeception-support-comes-to-phpstorm-2017-1/). Codeception tests can be started by running a suite directory. + +* [WebDriver] Fixed using `performOn` with `ActionSequence`; supporting multiple actions of same kind. #4066 by @davertmik. Fixes #4044 +* [Laravel5] Added `haveApplicationHandler` and `clearApplicationHandlers` methods. See #4068. By @janhenkgerritsen +* [Laravel5] Close all Laravel DB connections after test execution. Fixes #4031 by @rmblstrp +* [Laravel5] Update Laravel5 `database_migrations_path` to by null by default by @timbroder. Fixes #3990 +* [DataFactory] Add `cleanup` option to skip auto cleanup. By @alexpts. See #3996 +* Fixed printScenarioFail with multiple feature scenarios by @gimler. See #3868 +* Fixed generating JUnit XML when Selenium server can’t be connected. Closes #3653 by @Naktibalda +* Fixes running local suites (under tests folder) and included suite mixed (via include path). See #4063 +* [Db] Run the last statement in dump file even if it doesn't end with delimiter. #4071 by @Naktibalda. Fixes #4059 +* [Memcache] Fixed calling flush on null by @Jurigag. See #4074 +* [Yii2] Fixtures behavior compatibility with `yii2-codeception` by @leandrogehlen. See #4016 +* `g:suite` allows generate suites with uppercase names. Fixes #4072 +* Enabled incomplete/skipped/risky/warning settings for logger. See #3890. By @mario-naether + +```yaml +settings: + report_useless_tests: false + disallow_test_output: false + be_strict_about_changes_to_global_state: false + log_incomplete_skipped: false +``` +* [WebDriver] Fixed double coverage cookie check by @boboldehampsink. See #2923 #4020 +* [WebDriver] Fixed `switchToIframe` regression from 2.2.9 by @lcobucci. PR #4000 +* Speed improvement for group lookup by @pitpit. See #4025 +* Added parse error to `TestParseException` in PHP7 by @Naktibalda. See #4007 +* Auto injection for `Codeception\Test\Unit` format #4070. Allows to customize injection of support objects into a testcase: + +```php +i = $unit; +} +``` + +#### 2.2.9 + +* [Laravel5] **Laravel 5.4 support** by @janhenkgerritsen +* [WebDriver] Added `performOn` to wait for element, and run actions inside it. See [complete reference](http://codeception.com/docs/modules/WebDriver#performOn). #3986 +* [WebDriver] Improved error messages for `wait*` methods by @disc. See #3983 +* [REST] Binary responses support by @spikyjt #3993 #3985 + * `seeBinaryResponseEquals` assert that binary response matches a hash + * `seeBinaryResponseEquals` assert that binary response doesn't match a hash + * hide binary response on debug +* [Laravel5] module fix error for applications that do not use a database. See #3954 by @janhenkgerritsen. Fixed #3942 +* [Laravel5] database seeders to be executed inside a transaction. See #3954 by @janhenkgerritsen. Fixed #3948 by @janhenkgerritsen +* [Yii2] reverted #3834, closing transaction after each request. #3973 by @iRipVanWinkle. Fixes #3961 +* Added crap4j report support. Use `--coverage-crap4j` option and `codeception/c3` 2.0.10 +* [PhpBrowser][Frameworks] If form has no id, use action attribute as identifier by @Naktibalda. Fixes #3953 +* Fixed test coloring output when a Feature title has some special chars in it like `/` or `-` +* [REST] Added missing @part `json` and `xml` to `deleteHeader` by @freezy-sk + +#### 2.2.8 + +* [WebDriver] Added tab actions (not supported in PhantomJS): + * `openNewTab` opens a new tab and switches to it + * `closeTab` closes a tab and switches to previous + * `switchToNextTab` switches to next tab + * `switchToPreviousTab` switches to previous tab +* [WebDriver] Added actions to click element by coordinates. Via @gimler + * `clickWithLeftButton` clicks element with offset + * `clickWithRightButton` right clicks on element with offset +* [WebDriver] Added `js_error_logging` option to print JS logs in console and in HTML report by @ngraf. See #3821 +* [WebDriver] Improvements to `seeInField` by @gimler. See #3905 + * support option text in seeInField not only value + * fix bug match with and without whitespaces + * fix bug seeInField not working after selectOption +* [Wedriver] `pageload_timeout` config option added. The amount of time to wait for a page load to complete before throwing an error. This patch allows to reduce issues from phantomjs random freezing. See #3874. Thanks to @oprudkyi +* [WebDriver] `checkOption` can check option by name #3852. By @gimler +* [WebDriver] Fixed clicking numerical links, like `222` (DOM Exception 12 errors). See #3865. By @gimler +* [PhpBrowser][Frameworks] Fixed #3824 when submitForm used wrong value for `select` by @JorisVanEijden +* [Laravel5] Added `seeNumRecords` and `grabNumRecords` methods. See #3816. By @dmoreno +* Improved `@depends` to work with `@dataprovider`. Fixes #3862. Thanks @edno +* Fixed relative paths for screenshots in HTML report. Fixes #3857 +* Improved error description when injecting invalid classes by @timtkachenko +* Improved `--override` option to support deep configs. See #3820 +* [Yii2] Clear unloaded fixtures after test. Closes #3794 +* [PhpBrowser] Ensure sessions have independent cookies by @insightfuls. Fixes #3911 +* Implemented load params from php files by @arrilot. See #3914 +* [Yii2] Fixes #3916: Don't try to start transaction when working with non-transactional DBs by @samdark. +* [REST] Removed broken xdebug_remote functionality by @Naktibalda. Fixes #3883 +* Added graceful termination by Ctrl-C in PHP 7.1 by @AdrianSkierniewski. See #3907 +* [Db] Disconnect after initializing when using reconnect, fixes #3903. By @insightfuls +* [Phalcon] Fixed handling `$_SERVER` with Phalcon Connector by @sergeyklay +* Avoid notice when checking width of terminal on Windows by @ashnazg. See #3893 +* [Filesystem] `dontSeeFileFound` searches in path by @Naktibalda. Fixes #3877 +* [PhpBrowser][Frameworks] `grabValueFrom` to work after `fillField` by @wumouse. Fix #3866 +* [Db] Oci driver to cleans up views #3881, and result set improvements #3840 by @ashnazg. +* [Yii2] Close transaction created by the controller-action on interruption. See #3834. By @alex20465 +* [Yii2] Fixed using `part: init` with other modules like WebDriver. See #3876. By @margori +* [REST] Implemented `dontSeeResponseJsonMatchesXpath` method by @Naktibalda. Closes #3843 +* [REST] Convert array having single element to XML correctly. Fixes #3827 by @Naktibalda +* Linter to check `exec` function to be enabled before using it. By @Naktibalda. See #3886 +* Fixed #3922: division by zero in steps output on small terminal windows. +* Improved getting terminal width from ENV variable (bash). Fixes #3788 by @schmunk42 + +#### 2.2.7 + +* **Config validation** with `codecept config:validate` command. Use it: + +``` +codecept config:validate +codecept config:validate acceptance +``` + +This should help you next time you get messed with YAML formatting. + +* Gherkin improvements: + * multiple step definitions per method allowed (Fixes #3670). + * regex validation for Gherkin steps; throws exception if invalid regex passed. Fixes #3676 + * currency chars supported in placeholders: + + $,€,£ and other signs can be used before or after a number inside Gherkin scenario. This char will be ignored inside a PHP variable, so you receive only number. + +```gherkin +When I have 100$ => $num === 100 +And I have $100 => $num === 100 +``` + + * escaped strings can now be passed into placeholders. Fixes #3676. + +* Codeception is tested with latest verision of HHVM +* Extensions loader refactored: + * Extensions can be **enabled for suite** in suite config. + * Extensions can be loaded per suite and per environment. + * Extensions configs can be done inside `enabled` section (as it is for modules): + +```yaml +extensions: + enabled: + Codeception\Extension\Recorder: + delete_successful: false +``` + +* **Added dataprovider to Cest** format by @endo. See [updated documentation](http://codeception.com/docs/07-AdvancedUsage#Examples). +* Params loader refactored. Using `vlucas/phpdotenv` to parse .env files. Please install it if you don't have it yet. +* Improved `generate:suite` command to generate actor file for suite. +* HTML reporter: snapshot and screenshots paths made relative to make them accessible on CI. Fixes #3702 +* [WebDriver] added `protocol` and `path` config options by @sven-carstens-udg. See #3717 +* [PhpBrowser][Frameworks] Honour `` meta tag by @Naktibalda. See #3764 +* [Yii2] Removed mockAssetManager by @githubjeka +* [Yii2] Added procesing for native url formats of Yii2 #3725 by @githubjeka +* [Yii2] Fixed unintentional DB connection drop during exception logging, #3696 by @ivokund +* [Yii2] Fixed calling `_fixtures()` method of Cest class. See #3655, fixes #3612 by @primipilus +* [Db] Fixed `removeInserted` for Sqlite by @Naktibalda. Fixes #3680 +* Allows to get groups from scenario by `$scenario->getGroups()`. By @frantzen. See #3675 +* Fixed #3225: incorrect steps shown for multiple canXXX conditional assertion failures. By @Mitrichius +* [SOAP] Force string for debugSection output by @Noles. Fixes #3690 +* Fixed #3562 group files with exact test not working with `@example` on Windows by @Naktibalda. +* [Laravel5] Added `vendor_dir` option. See #3775. By @AdrianSkierniewski +* [Laravel5] Fixed error where custom service container bindings were not available on the first request. See #3728. By @janhenkgerritsen +* [Lumen] Fixed error where a non-existing exception class was thrown. See #3729. By @janhenkgerritsen +* [Phalcon] Added `services` part which can be used to `grabServiceFromContainer` and `addServiceToContainer` when conflicting module is used. By @sergeyklay +* [Phalcon] **Refactored**. Moved in-memory session adapter to the separated namespace. By @sergeyklay +* [Phalcon] Fixed overwriting server parameters on requests. By @sergeyklay +* [Asserts] `assertCount` method added by @disc +* Documentation improvements by @CJDennis + +#### 2.2.6 (October 2016) + +* Ability to update config on run with `--override` (`-o`) option. Usage Examples: + * `codecept run -o "settings: shuffle: true"`: enable shuffle + * `codecept run -o "settings: lint: false"`: disable linting +* [WebDriver] **HTML report to include screenshots of failed tests.** See #3602 +* [PhpBrowser][Frameworks] HTML report to include HTML of failed tests. See #3602 +* [Apc] **Module added** to interact with the Alternative PHP Cache (APC) using either APCu or APC extension. By @sergeyklay +* [Laravel5] Add `run_database_seeder` configuration option. See #3625 and #3630. By @Bouhnosaure +* [Laravel5] Add `database_migrations_path` configuration option. See #3628. By @janhenkgerritsen +* [Laravel5][Lumen] Fixed issue that caused the `have` and `haveMultiple` methods not being available when using the ORM part of the modules. See #3587. By @janhenkgerritsen +* [PhpBrowser][Frameworks] Fixed clicking on a button inside the link +* [PhpBrowser][Frameworks] Click on the first clickable item when clickBySelector is used +* [PhpBrowser][Frameworks] Anchor is no longer sent to server +* Removed tags from `see`/`dontSee` output and friends output +* `--` separates options from arguments in `codecept run` by @Naktibalda. Fixes #3614. See #3615 +* Fixed terminating run process with Ctrl-C for PHP 7.0. Disabled graceful termination +* [Yii2] fixed Yii2 logging complex data by @svoboda2010 Fixes #3452 +* [Yii2] `cleanup` set to true by default (as it was documented but not enabled). +* [Yii2] Close db connections when running `haveFixtures` by @Ni-san. Fixes #3456. See #3586 +* [Yii2] Fixed loading fixtures from `_fixtures` method in testcase by @iRipVanWinkle. See #3565 +* [MongoDb] Added support for [mongofill](https://github.com/mongofill/mongofill), an alternative Mongo client in pure PHP. By @hlogeon at #3641 +* [MongoDb] Fixed data import using mongotype dump type by @hlogeon #3637 +* Fixed #3392 by normalizing namespace loading classes in DI getterby @Mitrichius at #3633 +* [Symfony] Fixed #3608 `[PHPUnit_Framework_Exception] implode()` while printing debug for security roles by @Prazmok. +* [Yii1] Fix domain regex #3581 to return correct value by @amashigeseiji See #3597 +* [WebDriver] Improved tests stability when Selenium server is gone #3534 by @eXorus. Fixes #3531 +* [WebDriver] Tests are errored when Selenium server can't be connected. See #3603 +* MetaSteps are printed even with disabled xdebug by @niclopez. See #3600 +* [WebDriver] submit button in `submitForm` can be located by name or strict locator by @imjoehaines. See #3560 +* [SOAP][REST] removed module conflict by @eXorus. +* Fixed #3571: error handler to call `registerDeprecationErrorHandler` method and `register_shutdown_function` on first SuiteEvent only. By @positronium. See #3572 + +#### 2.2.5 (September 2016) + +* Support for PhpUnit 5.x. +* [Lumen] Major refactoring of Lumen module. See #3533. By @janhenkgerritsen +* [Laravel5] Removed calls to `Auth::logout()`, `Session::flush()` and `Cache::flush()` from after hook. See #3493. By @janhenkgerritsen +* [Memcache] Updated `Memcache::seeInMemcached` to check if the key exists alone or with the desired value. By @sergeyklay +* [Memcache] Added `Memcache::haveInMemcached`. By @sergeyklay +* [Memcache] Fixed `Memcache::dontSeeInMemcached`. By @sergeyklay +* [ZF2] Zend Framework 3 Support. Made `init_autoloader` optional, because ZF3 uses composer for autoloading #3525. By @Naktibalda +* [ZF2] Fixed accessing Doctrine Entity Manager when client is not initialized. By @chris1312. See #3524 +* [Yii2] Allow to load fixtures from `_fixtures` method of a testcase. [See reference](http://codeception.com/docs/modules/Yii2#Fixtures). Fixes usage of nested transactions #3520. By @kalyabin and @davertmik +* [Yii1] Fix private property accessible; allows to change urlManager class to subclass of CUrlManager. See @3287. By @amashigeseiji +* Escaped tags in debug output by @Naktibalda. See #3507. Fixes #3495 +* Fixed #3410: Wrong subSteps rendering in HTML ResultPrinter by @niclopez +* [WebDriver] Improved exception message thrown when click('name') does not match any element #3546 by @Naktibalda. Fixes #3528 +* [SOAP] Removed conflict with REST module. `seeResponseCodeIs` is deprecated in favor of `seeSoapResponseCodeIs` by @eXorus. See #3512. Fixes #3512 +* Fixed #3472: group Files not working with a non-empty data provider by @eXorus +* [REST] Disabled resetting server parameters in _before. Fixed REST+Laravel usage: #3263. See #3539. By @janhenkgerritsen +* [REST] Improved output of failed JsonType assertions #3480. By @Naktibalda. Fixes #2858 +* [REST] Requests are added to browser history #3446. Fixes regression #3197. By @Naktibalda +* [REST] application/json header check made case insensitive. Fixes #3516. By @Naktibalda +* Fix bug in Coverage Filter related to relative filepaths #3518. By @sbacic +* [Db] PostgreSQL: fixed a problem when sequences are not a standard format (ie. table_id_seq). See #3506. By @alexjeen +* [Symfony] Persist doctrine.dbal.backend_connection if Doctrine2 module is used #3500. Fixes #3479. By @Naktibalda +* [Doctrine2] Using `Doctrine\ORM\EntityManagerInterface` as valid em instance #3467. Fixes #3459. By @akbwm +* [MongoDb] Fixes `mongorestore` command syntax and adds --quiet option to config +* [Facebook] Replaced `facebook/php-sdk-v4` library with `facebook/graph-sdk`. +* Fixed #3433 detection of relative path when `codeception.yml` is not in project root. See #3434. By @loren-osborn +* Handle deprecation messages according to `error_level` setting #3460. Fixes #3424. By @Naktibalda. + +#### 2.2.4 (August 2016) + +* Improved using complex params, nested params can be set using dot (`.`). See #3339 +* [Yii2] Mailer mock is now configured with options that make sense for it. Fixes #3382 +* [Yii2] Fixed creating `@webroot` directory on running functional tests. See #3387 +* [Yii2] Fixed regression in Yii 2 connector not allowing to work with output of error pages in functional tests. Fixes #3332 +* [Mongo] support of standard mongodump/mongorestore tools to populate mongo db database. Thanks @GSokol. Fixes #3427 +* [REST] `seeResponseIsJson` fails when response is empty. See #3401, closes #3400 +* [AMQP] Added `purgeQueue` and `purgeAllQueues` actions. By @niclopez +* [DataFactory] `haveMultiple` fixed; corrected the order of arguments in `FactoryMuffin->seed`. See #3413 by @buffcode +* [SOAP] Improved error reporting by @eXorus See #3426 #3422 +* [SOAP] Added `SOAPAction` config param to unset `SOAPAction` header in SOAP >= 1.2. See #3396 +* [REST] fixed digest authentication. See #3416 +* [Laravel5] Fixed an issue with error handling for Laravel 5.3. See #3420. By @bonsi. +* [Laravel5] Fixed an issue with uploaded files. See #3417. By @torkiljohnsen. +* [ZF2] Support for zend-mvc 3.0 +* [Db] Error is thrown if SQLite memory is used. #3319 +* [Frameworks] `REQUEST_TIME` server variable to be set on request. By @gimler. Fixes #3374 + +#### 2.2.3 (July 2016) + +* [Yii2] Improvements: + * Added `init` part to initialize Yii app for unit and acceptance testing. + * added `entryScript` and `entryUrl` config values for acceptance testing. + * Fixtures support: `haveFixtures`, `grabFixtures` methods. + * Yii logs to be printed in debug mode. + * added `amOnRoute` method. + * added `amloggedInAs` method. + * added `grabComponent` method. + * added `seeEmailIsSent`, `grabLastSentEmail`, etc and email part. + * assetManager disabled for unit/functional tests. +* Fixed `@example` to `@group` defined in group files. By @eXorus. Fixes #3278 +* Added `ReqiuiresPackage` interface to set external dependencies for modules. +* Fixed timing values in output. Closes #3331 +* Fixed merging module configs. Closes #3292 +* [Recorder Extension] Fixes saving of files on windows and with using examples. +* [DataFactory] Fixed loading factories twice by @samusenkoiv. See #3314 +* [Laravel5] Added `run_database_migrations` configuration option. By @janhenkgerritsen. +* [Laravel5] Added `callArtisan` method. By @janhenkgerritsen. +* [Laravel5] Added `disableModelEvents()` method and `disable_model_events` configuration option. Fixes #2897. +* [REST] Allow objects in files array #3298 +* [ZF2] Added addServiceToContainer method +* [ZendExpressive] allow instances of UploadedFile in files array +* [ZF2] Added addServiceToContainer method +* Don't fail test validation when exec function is disabled by @Naktialda + +#### 2.2.2 + +* Parameters can be applied to global `codeception.yml` config. See #3255 Thanks to @LeRondPoint +* Fixed loading of parameters from `.env.*` files. See #3224. By @smotesko +* Better failure diff messages by @k0pernikus +* UTF-8 improvements (replaced with custom `ucfirst`, `strtoupper` => `mb_strtoupper`) by @Naktibalda. See #3211 +* Print execution time of non-successful tests by @Naktibalda. Fixes #3274 +* [WebDriver][PhpBrowser][Frameworks] Fixed created files on failure. Fixes #3207 +* [Frameworks][PhpBrowser] Adjacent forms submit improvements by @dizzy7. Fixes #2331 +* [WebDriver] Fixed adjacent `selectOption` with similar options by @eXorus. Fixes #3246 +* [DataFactory] fixed loading factories from relative paths. Fixes #3208 +* *Test\Gherkin* Added JUnit reporter #3273 +* *Test\Gherkin* Added support for multiple languages by @dizzy7. See #3203 +* *Test\Unit* Dependencies can pass and receive values the same way as it is done in PHPUnit. Fixes #3213 +* [Symfony] Fixed failing tests when the profiler is disabled by @dizzy7. See #3223 +* [REST] Added `Codecepion\Util\HttpCode` util class with HTTP code constants. See [class reference](https://github.com/Codeception/Codeception/blob/2.2/docs/reference/HttpCode.md) +* [REST] Support simple key-value format for file uploads. See #3244 +* Bugfix with duplicate instances in the modules container #3219 by @dizzy7 +* [REST] Added `deleteHeader` method by @Naktibalda. Fixes #3161 +* [Yii1] `init` part added to avoid conflicts with `WebDriver` +* `generate:snippets` can accept second parameter to generate snippets from a specific file or folder. +* [Db] Added `grabNumRecords` method by @tocsick. See #3175 +* Fixed group events fire twice #3112. By @jstaudenmaier +* [ZF2] Added services part which can be used to `grabServiceFromContainer` when conflicting module is used by @Naktibalda. +* Improved Examples to be Traversable; Fixed console output for complex data structures. +* [Laravel5] Added `haveBinding`, `haveSingleton`, `haveContextualBinding` and `haveInstance` methods. By @janhenkgerritsen. See #2904. +* + changes from 2.1.11 + +#### 2.2.1 + +* PHPUnit 5.4 and PHPUnit/php-code-coverage 4.0 compatibility. + +#### 2.2.0 + +* **Gherkin format support**. [Announcement](https://github.com/Codeception/Codeception/pull/2750#issue-129899745) +* **Core Test Format Refactorings** Codeception becomes true multiformat testing platform. Format requires a [Loader](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Test/Loader/LoaderInterface.php) and class extending [Test](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Test/Test.php) class, implementing [TestInterface](https://github.com/Codeception/Codeception/blob/master/src/Codeception/TestInterface.php). + * *Breaking* `Codeception\TestCase` replaced with `Codeception\TestInterface` in code and in module signatures. + * *Breaking* Cept/Cest classes are no longer extending `PHPUnit_Framework_TestCase`, so they don't have `expectException`, `getMock`, etc. + * Reduced stack trace for scenario-driven test formats. Codeception tests implement `PHPUnit_Framework_Test` instead of extending heavy `PHPUnit_Framework_TestCase` class. +* *Breaking* **Conflicts API implemented** Frameworks + PhpBrowser + WebDriver can't be used together unless only non-conflicting part is used. [Announcement](http://codeception.com/03-05-2016/codeception-2.2.-upcoming-features.html#conflicts) +* **Examples** as an alternative to Data Providers. [Announcement](http://codeception.com/03-10-2016/even-more-features-of-codeception.html#examples) +* **Params** loading from yml, env files or environment. [Announcement](http://codeception.com/03-05-2016/codeception-2.2.-upcoming-features.html#params) +* **Test dependencies** with `@depends` annotation. [Announcement](http://codeception.com/03-05-2016/codeception-2.2.-upcoming-features.html#test-dependencies) +* **Custom Commands** inject your own commands as as simple as extension. [Announcement](http://codeception.com/03-10-2016/even-more-features-of-codeception.html#custom-commands) +* `codecept dry-run` command added to show scenario steps without executing them. +* *Breaking* [Dbh] module removed +* *Breaking* [Laravel4] module removed. See #2866 +* *Breaking* [Laravel5] Minimum supported Laravel version is 5.1. See [#3243](https://github.com/Codeception/Codeception/issues/3243#issuecomment-227078266) +* *Breaking* [Laravel5] Removed `createModel` method, use `have` method instead. See #2866 +* *Breaking* [Laravel5] Removed `makeModel` method. See #2866 +* *Breaking* [Laravel5] Renamed `haveModel` method to `have`. See #2866 +* *Breaking* [Symfony] public property `container` removed +* *Breaking* [Asserts] removed deprecated `assertLessThen` and `assertGreaterThen` +* *Breaking* mocks created with `Codeception\Util\Stub` are not verified in Cests. See #3005 +* *Breaking* [REST] `grabAttributeFrom` renamed to `grabAttributeFromXmlElement` to avoid conflicts +* [WebDriver] allows getting current browser and capabilities in test. [Announcement](http://codeception.com/03-10-2016/even-more-features-of-codeception.html#Getting-current-browser-and-capabilities-in-tests) +* [AngularJS] module added. Extends WebDriver module for AngularJS testing. [Announcement](http://codeception.com/03-10-2016/even-more-features-of-codeception.html#angularjs) +* [DataFactory] module added. Performs data generation using FactoryMuffin library [Announcement](http://codeception.com/03-10-2016/even-more-features-of-codeception.html#datafactory) +* [Redis] Module rewritten using Predis library as driver by @marcverney +* [Laravel5] Added a `haveMultiple` method to create more than one model per call. See #2866 +* [Laravel5] [Lumen] The `haveRecord`, `seeRecord`, `dontSeeRecord` and `grabRecord` methods now also accept Eloquent model class names instead of only database table names. See #2866 +* [Symfony] module Symfony2 renamed to Symfony +* [Phalcon] Merged `Phalcon1` and `Phalcon2` modules into one `Phalcon` due the fact that Phalcon Framework v1.3.x no longer supported at all +* [Asserts] More `assert*` methods from PHPUnit added +* [Asserts] Added `expectException` method +* [WebDriver][Frameworks][PhpBrowser] `selectOption` can receive option as strict locator to exactly match option by text or by value. Use `['value' => 'myvalue']` or `['text' => 'optiontext']` to select a proper option. By @gdscei and @davertmik See #3003 +* Added config option to disable modules using `modules: disabled:`. +* [Sequence] Changed the prefix value. Generated sequences to include id inside a prefix: `sq('user1') => 'user1_876asd8as87a'. Added `prefix` config option. +* Deprecation errors won't fail tests but will be printed. +* Official [Docker image](https://hub.docker.com/r/codeception/codeception/) introduced by @schmunk42 diff --git a/vendor/codeception/codeception/CHANGELOG-2.3.md b/vendor/codeception/codeception/CHANGELOG-2.3.md new file mode 100644 index 000000000..32041356c --- /dev/null +++ b/vendor/codeception/codeception/CHANGELOG-2.3.md @@ -0,0 +1,180 @@ +#### 2.3.8 + +* `Codeception\Util\Stub` moved to standalone package [Codeception\Stub](https://github.com/Codeception/Stub): + * Use `Codeception\Stub` instead of `Codeception\Util\Stub` + * Mocking methods `::once`, `::never`, etc moved to `Codeception\Stub\Expected` class + * Calling mocking methods from `Codeception\Util\Stub` provides deprecation warning. + * Non-static API is [recommended to use for mocking](http://codeception.com/docs/05-UnitTests) +* [WebDriver] Added `executeAsyncJS` action to run asynchronous scripts. +* [WebDriver] Added second parameter to `executeJS` to pass additional arguments into JavaScript function. +* [Yii2] `setCookie` signs cookies when signing enabled. #4656 By @SamMousa +* [Yii2] Method `createAndSetCsrfCookie` added. #4656 By @SamMousa +* Compatibility with phpunit-mock-objects 5.* by @Naktibalda +* [DataFactory] Removed dependency to `league/factory-muffin-faker` by @Naktibalda and @Insolita +* Fixed auto-rebuilding Actor classes when dependencies are used. See #4694 by @stefankleff. +* [Symfony] allows to use Symfony Dotenv component to parse `.env` files. Fix by @ebuildy +* Added the ability to export the code coverage data in PHPUnit xml format by @tobiasstadler + * `--coverage-phpunit` option added + * Allows to use mutation testing with [Inflection](https://infection.github.io) +* [ZendExpressive] Added Doctrine2 integration by @artmnv +* [PhpBrowser][Frameworks] Added `_getResponseStatusCode` hidden method for using in helpers. By @FanchTheSystem +* [Yii2] Use Yii DI to instantiate record class. Fixes #4762. By @bscheshirwork +* Remote Code Coverage improvements #4768 by @bscheshirwork + * Remove `:port` for cookie domain; + * `->amOnPage('/');` executed when running code coverage with WebDriver +* Fixed running single test with `include` config parameter. Fixes #4733 by @ppetpadriew +* Fixed running single test when a custom suite path is configured (For instance, in single-suite setups). +* `generate:test` command won't include `tester` property if actor is not set for this config. +* [Facebook] Module is not maintained and is deprecated. If you are using it and you want to keep it, please contact us. + +#### 2.3.7 + +* **Symfony 4 support** implemented by @VolCh. + * Dependencies updated to support Symfony 4.x components. + * [Symfony] Support for Symfony Flex directory and namespace structure + * [Demo application](https://github.com/Codeception/symfony-demo) was updated to Symfony 4.0 +* [Db] `seeInDatabse`, `dontSeeInDatabase`, `grabFromDatabase` and other methods to support SQL comparison operators: `<`, `>`, `>=`, `<=`, `!=`, `like`. Thanks @susgo and @Naktibalda. +* [Db] Fixed quoting around schema identifiers in MSSQL by @Naktibalda. See #4542. +* [Db] Added SSL options for connection. Thanks @kossi84 +* [Db] Fix getting Database name from DSN in MSSQL by @yesdevnull. +* [PhpBrowser] Fixed setting `User-Agent` in config via `headers`. Fixed #4576 by @Naktibalda. +* [WebDriver] Implemented `dontSeeInPopup` by @kpascal. +* [WebDriver] Allow to click a button located by its `title` attribute. See #4586 by @gimler. +* [Silex] `app` property added to public API. Thanks @sky003 +* [Yii2] Pass DB to Yii application as early as possible to reuse old connection. By @SilverFire. See #4601 +* [Yii2] Resetting global event handlers after a test. See #4621 by @SamMousa +* [Yii2] Recreate request object to reset headers and cookies before each request. Fixes #4587 by @erickskrauch +* [MongoDb] Allowing `.tgz` files to be accepted for database dumps. #4611 by @Lukazar +* [PhpBrowser][Frameworks] Fixed usage of `see` when source code contains `<=` JS operator. By @tobias-kuendig Fixes #4509. +* [Queue] Added configuration parameter `endpoint` for AmazonSQS by @gitis. +* Fixed signature error in `DummyCodeCoverage::stop` See #4665 by @network-spy +* Throw exception if `exit(0)` was accidentally called. Fixes false-positive test reports. See #4604 by Fenikkusu. +* Fixed using `path: tests: .` in configuration. Fixes #4432 by @marcovtwout +* Fixed suite name containing slash in remote code coverage. #4612 by @bscheshirwork +* Improved generated actions file by removing redundant `use` section. #4614 by @bscheshirwork +* Don't skip last test if some test has missing dependency by @Naktibalda. Fixes #4598 +* Improved PHP 7.2 compatibility by @FanchTheSystem. See #4557 +* Implemented `Descriptor::getTestSignatureUnique` to create unique names for tests. See #4673 by @Tenzian. Fixes #4672 +* Fixed `setExpectedException()` default value for PHPUnit 5.7.23 by @MilesChou. See #4566 +* Fixed printing wrong failed step by @eXorus. See #4654 +* Fixed undefined `argv` warnings, added check for `register_argc_argv`. Fixes #4595 by @Naktibalda +* Added `init` command to `codecept.phar` by @Naktibalda. + +And many thanks to our awesome contributors! Thanks to @VolCh for upgrading to Symfony 4, thanks @Naktibalda for patches and reviews and +thanks to @carusogabriel for refactoring tests. + +#### 2.3.6 + +* **Laravel 5.5 compatibility**. Laravel5 module documentation updated. +* [Doctrine2][DataFactory] Fixes using Doctrine2 with DataFactory module. See #4529. Fix by @samusenkoiv +* [REST] Fixed JsonType crash when key 0 is not an array. Fixes #4517 by @Naktibalda +* [PhpBrowser][Frameworks] `haveHttpHeader` enhanced to handle special characters. #4541 by @bnpatel1990 +* [WebDriver] Delete all cookies before loading session snapshot. Fix by @eXorus. See #4487 +* Added `suite_namespace` config option to suite config. Allows to set custom namespace for tests per suite. #4525 by @pohnean +* [Db] Module enhancements by @eXorus: + * added `updateInDatabase` method + * added hidden `_insertInDatabase` to insert record without cleanup +* [Yii2] Set transaction also in `backupConfig` when initializing yii2 module +* [Yii2] Unload fixtures after rolling back database transaction. By @devonliu02 (#4497) +* [Yii2] Use `andWhere` instead of `where` in Yii module's `findRecord()` by @SamMousa. See #4482 +* [REST] Added `amNTLMAuthenticated` for NTLM authentication using PhpBrowser. By @Tenzian +* Inject exception file and line number frame into stack trace in case it is missing. By @rhl-jfm at #4491) +* `Extension\RunFailed`. Added `fail-group` parameter to customize name of a failed group. By @ maxgorovenko +* Added `\Codeception\Util\Fixtures::exists()` method by @eXorus +* Added line number to `TestParseException` exception message by @gaainf. See #4446 +* Fixed `init` command: create the `_generated` folder before writing a `.gitignore` file there by @nstapelbroek. See #4449 +* Better failure messages for `@dataProvider` by @sh41. See #4439 +* Fixed aliasing issue with `Codeception/Verify` by @ddinchev + +#### 2.3.5 + +* Fixed HTML report with unencoded HTML code by @mpgo13. See #3819 #4423 +* Made `assertArraySubset` protected across all modules by @guidocella +* [WebDriver][PhpBrowser][Frameworks] Added support for associative arrays in `seeInFormFields` by @guidocella +* [PhpBrowser][Frameworks] Submit default values of checkboxes. See #4411 by @guidocella +* [PhpBrowser][Frameworks] Make `seeInField` check options' texts and trimmed texts. By @guidocella +* [PhpBrowser] Prevents `submitForm` to submit inputs in disabled fieldsets. Fixes #4426 by @moebrowne +* [PhpBrowser] Fixed `amOnUrl` with empty path component. If path component was empty, it used previous url. Fixes #4383 by @Naktibalda +* [Db] Improved postgres cleanup (recreate schema) by @samusenkoiv +* [Laravel5] Don't duplicate associative array fields on form submission. See #4414 by @guidocella +* [WebDriver] Fixed `webDriver->getCapabilities()` for `facebook/php-webdriver` < 1.3 (could happen on PHP 5.4, 5.5). Fixes #4435 +* [WebDriver] Make `wait` accept fractional amount of seconds to wait for less than a second. By @gvlasov +* [Laravel5] Changing params loader to use `$_SERVER` global instead of `$_ENV`. See #4401 by @EricTendian +* [Mongo] Fixes `haveInCollection` using `__toString`. See #4442 by @samusenkoiv +* Dereferencing variables for Steps output. Fixes #4402 by @alambe +* [Symfony] Load persistent services before loading profiler. See #4437 by @samusenkoiv + +#### 2.3.4 + +* Added `@prepare` annotation to make realtime configuration for tests in Cest and Test classes. [See documentation](http://codeception.com/docs/06-ModulesAndHelpers#Runtime-Configuration-of-a-Test). + + Example: disabling Doctrine2 database transaction for a test + +```php +_reconfigure(['cleanup' => false]); +} +``` +* [WebDriver] **SmartWait**. Automatically waits for a few extra seconds for element to appear on a page before failing. Can reduce high usage of `wait*` methods. [See Documentation](http://codeception.com/docs/03-AcceptanceTests#SmartWait) +* Added [RunProcess extension](http://codeception.com/extensions#RunProcess). Use it to start/stop Selenium (or other process) automatically for a test suite. +* [WebDriver] Customization improvements: + * added `start` option to disable autostart of a browser for tests. (can be useful for Cloud testing setups) + * added `_capabilities` method for setting desired capabilities in runtime (can be combined with `@prepare` annotation) + * `_initializeSession` and `_closeSession` can be used in Helpers to start and stop browser manually (combine with `start: false` config) +* Fixed running a single test from a global config when using included configs. See #4366 by @zebraf1 (improves PhpStorm integration) +* [Doctrine2][Laravel5][Yii2][Phalcon] Print debug information for started/stopped transactions in tests. See #4352 +* [PhpBrowser][Frameworks] click with context respects base tag #4330 by @Naktibalda. +* [Yii2] Split `cleanup` configuration option (backward-compatible): (#4379 by @leandrogehlen) + * `cleanup` - to cleanup loaded fixtures + * `transaction` - wrap tes into transaction +* [Asserts] Added `assertStringStartsWith` and `assertArraySubset` by @guidocella +* [Db] Added `updateInDatabase` method by @eXorus. See #4385 +* In helpers and modules to check `$module::$excludeActions` property for existence before accessing it. Fixes #4381 by @CactusCoder +* [Symfony] Fixed printing debug response when `Symfony::extractRawRoles()` failed on security collector (Symfony >= 3.3) #4309 by @Basster +* [Laravel5] Fixed bug with `disable_exception_handling` functionality. See #4370. By @janhenkgerritsen +* [Db] Added `grabColumnFromDatabase` to fetches values from the column in database. By @RebOOter + +#### 2.3.3 + +* Fixed running with `--coverage`, `--xml`, `--html` options without parameters (Symfony Console 3.3 compatibility). +* Removed `files` section from `composer.json` (regression from 2.3.2) to avoid unintentionally loading shim files. Fixes [Yii migration issue](https://github.com/yiisoft/yii2/issues/14226). +* [WebDriver] `saveScreenshot` allows to save screenshots with no name passed in. See #4263 by @eXorus +* [REST][PhpBrowser] Fixed #4287, using empty values for headers by @tobiastom. +* Phar `self-update` downloads php5.4 build if php version <7.0. Fixes #4269 + +#### 2.3.2 + +* [Db] Fixed: Database has been cleaned up between tests even with `cleanup: false`. +* [Db] Made `dump` optional if `populator` is set. Fixes #4247 +* Fixed `generate:suite` command to create a directory for the suite. Fixes #4251 +* Fixed composer autoloading with PHPUnit 6 by @enumag. See #4262 + +#### 2.3.1 + +* Updated composer constraints to include PHPUnit 6.x + +#### 2.3.0 + +* **PHPUnit 6.x** support #4142 by @MontealegreLuis. Class aliases are used, so PHPUnit 4.x and 5.x (for PHP <7) are still supported as well. +* Suite customization. [Announcement](/05-22-2017/codeception-2-3.html#configuration-improvements) +* Installation Templates. [Announcement](/05-22-2017/codeception-2-3.html#installation-templates) +* DotReporter introduced. Use it with +``` +codecept run --ext DotReporter +``` +* `--ext` parameter added to load extensions dynamically. +* Db Populator [Announcement](/05-22-2017/codeception-2-3.html#db-populator) by @brutuscat +* [Db] New configuration defaults, cleanups are disabled: `cleanup: false`, `populate: false`. Enable them to load dumps between tests. +* [Redis] New configuration defaults, cleanups are disabled: `cleanupBefore: 'never'` by @hchonan +* Command `generate:phpunit` removed. +* Bootstrap `_bootstrap.php` files are disabled by default. +* Configuration changes: `actor` replaced with `actor_suffix` in global config +* Configuration changes: `class_name` replaced with `actor` in suite config + diff --git a/vendor/codeception/codeception/CONTRIBUTING.md b/vendor/codeception/codeception/CONTRIBUTING.md new file mode 100644 index 000000000..724214c7e --- /dev/null +++ b/vendor/codeception/codeception/CONTRIBUTING.md @@ -0,0 +1,29 @@ +# How to contribute + +At Codeception we are glad to receive contributions and patches from the community. There are a few guidelines that we need contributors to follow so that we can have a chance of keeping on top of things. + +Please check the guide for sending your contributions with Github at +https://github.com/Codeception/Codeception/wiki/Git-workflow-for-Codeception-contributors + +## Coding Standards +All contributions must follow [PSR-2](http://www.php-fig.org/psr/psr-2/) coding standard. + +## Code +**Bugfixes should be sent to to current stable branch, which is the same as major version number.** + +Breaking features and major improvements should be sent into `master`. When you send PRs to master, they will be added to release cycle only when the next stable branch is started. + +## Tests + +Check the [tests/README.md](tests/README.md) to learn how to run and write internal tests. +We encourage you to write a test for a patch you are implementing. If this doesn't seem possible, such PRs are stil valid and can be accepted. + +We also encourage to submit bug reports with a failing test or test environment (3rd party repo with Codeception installation) with demonstration of a failure. That makes easier to us to find the cause and fix it. + +## Documentation + +### Guides +If you want to contribute documentation to the guides you are asked to send your changes to the /docs/ folder: https://github.com/Codeception/Codeception/tree/2.2/docs. Theses files are the source for the codeception website guides: http://codeception.com/docs/01-Introduction. Remind to send your documentation improvements to the right "repository branch" depending on the Codeception version you are working with: 2.2, master,... + +### Modules Documentation +The documentation for each module is directly generated from the corresponding docblock which can be found in each module (src/Codeception/Module/*.php). diff --git a/vendor/codeception/codeception/Dockerfile b/vendor/codeception/codeception/Dockerfile new file mode 100644 index 000000000..9b2df52cf --- /dev/null +++ b/vendor/codeception/codeception/Dockerfile @@ -0,0 +1,54 @@ +FROM php:7.2-cli + +MAINTAINER Tobias Munk tobias@diemeisterei.de + +# Install required system packages +RUN apt-get update && \ + apt-get -y install \ + git \ + zlib1g-dev \ + libssl-dev \ + --no-install-recommends && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +# Install php extensions +RUN docker-php-ext-install \ + bcmath \ + zip + +# Install pecl extensions +RUN pecl install \ + mongodb \ + xdebug-2.6.0beta1 && \ + docker-php-ext-enable \ + mongodb.so \ + xdebug + +# Configure php +RUN echo "date.timezone = UTC" >> /usr/local/etc/php/php.ini + +# Install composer +ENV COMPOSER_ALLOW_SUPERUSER=1 +RUN curl -sS https://getcomposer.org/installer | php -- \ + --filename=composer \ + --install-dir=/usr/local/bin +RUN composer global require --optimize-autoloader \ + "hirak/prestissimo" + +# Prepare application +WORKDIR /repo + +# Install vendor +COPY ./composer.json /repo/composer.json +RUN composer install --prefer-dist --optimize-autoloader + +# Add source-code +COPY . /repo + +ENV PATH /repo:${PATH} +ENTRYPOINT ["codecept"] + +# Prepare host-volume working directory +RUN mkdir /project +WORKDIR /project \ No newline at end of file diff --git a/vendor/codeception/codeception/ISSUE_TEMPLATE.md b/vendor/codeception/codeception/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..aed7fb434 --- /dev/null +++ b/vendor/codeception/codeception/ISSUE_TEMPLATE.md @@ -0,0 +1,26 @@ +#### What are you trying to achieve? + +#### What do you get instead? + +> Provide console output if related. Use `-vvv` mode for more details. + +```bash +# paste output here +``` +> Provide test source code if related + +```php +// paste test +``` +### Details + +* Codeception version: +* PHP Version: +* Operating System: +* Installation type: Phar || Composer +* List of installed packages (`composer show`) +* Suite configuration: + +```yml +# paste suite config here +``` diff --git a/vendor/codeception/codeception/LICENSE b/vendor/codeception/codeception/LICENSE new file mode 100644 index 000000000..cc43c4a8c --- /dev/null +++ b/vendor/codeception/codeception/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2011 Michael Bodnarchuk and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/codeception/codeception/RoboFile.php b/vendor/codeception/codeception/RoboFile.php new file mode 100644 index 000000000..25d95aaed --- /dev/null +++ b/vendor/codeception/codeception/RoboFile.php @@ -0,0 +1,978 @@ +say("CODECEPTION RELEASE: ".\Codeception\Codecept::VERSION); + $this->update(); + $this->buildDocs(); + $this->publishDocs(); + $this->buildPhar(); + $this->buildPhar5(); + $this->publishPhar(); + $this->publishGit(); + $this->publishBase(null, \Codeception\Codecept::VERSION); + $this->versionBump(); + $this->update(); //update dependencies after release, because buildPhar5 set them to old versions + } + + public function versionBump($version = '') + { + if (!$version) { + $versionParts = explode('.', \Codeception\Codecept::VERSION); + $versionParts[count($versionParts)-1]++; + $version = implode('.', $versionParts); + } + $this->say("Bumping version to $version"); + $this->taskReplaceInFile('src/Codeception/Codecept.php') + ->from(\Codeception\Codecept::VERSION) + ->to($version) + ->run(); + } + + public function update() + { + $this->clean(); + $this->taskComposerUpdate()->dir('tests/data/claypit')->run(); + $this->taskComposerUpdate()->run(); + } + + public function changed($change) + { + $this->taskChangelog() + ->version(\Codeception\Codecept::VERSION) + ->change($change) + ->run(); + } + + protected function server() + { + $this->taskServer(8000) + ->background() + ->dir('tests/data/app') + ->run(); + } + + public function testPhpbrowser($args = '', $opt = ['test|t' => null]) + { + $test = $opt['test'] ? ':'.$opt['test'] : ''; + $this->server(); + $this->taskCodecept('./codecept') + ->args($args) + ->test('tests/unit/Codeception/Module/PhpBrowserTest.php'.$test) + ->run(); + } + + public function testRestBrowser($args = '', $opt = ['test|t' => null]) + { + $test = $opt['test'] ? ':'.$opt['test'] : ''; + $this->taskServer(8010) + ->background() + ->dir('tests/data') + ->run(); + + $this->taskCodecept('./codecept') + ->test('tests/unit/Codeception/Module/PhpBrowserRestTest.php'.$test) + ->args($args) + ->run(); + } + + public function testCoverage() + { + $this->server(); + $this->taskSymfonyCommand(new \Codeception\Command\Run('run')) + ->arg('suite', 'coverage') + ->run(); + } + + public function testWebdriver($args = '', $opt = ['test|t' => null]) + { + $test = $opt['test'] ? ':'.$opt['test'] : ''; + $container = $this->taskDockerRun('davert/selenium-env') + ->detached() + ->publish(4444, 4444) + ->env('APP_PORT', 8000) + ->run(); + + $this->taskServer(8000) + ->dir('tests/data/app') + ->background() + ->host('0.0.0.0') + ->run(); + + sleep(3); // wait for selenium to launch + + $this->taskCodecept('./codecept') + ->test('tests/web/WebDriverTest.php'.$test) + ->args($args) + ->run(); + + $this->taskDockerStop($container)->run(); + } + + public function testLaunchServer($pathToSelenium = '~/selenium-server.jar ') + { + $this->taskExec('java -jar '.$pathToSelenium) + ->background() + ->run(); + + $this->taskServer(8010) + ->background() + ->dir('tests/data/rest') + ->run(); + $this->taskServer(8000) + ->dir('tests/data/app') + ->run(); + } + + public function testCli() + { + $this->taskSymfonyCommand(new \Codeception\Command\Run('run')) + ->arg('suite', 'cli') + ->run(); + + $this->taskSymfonyCommand(new \Codeception\Command\Run('run')) + ->arg('suite', 'tests/unit/Codeception/Command') + ->run(); + } + + private function installDependenciesForPhp54() + { + $this->taskReplaceInFile('composer.json') + ->regex('/"platform": \{.*?\}/') + ->to('"platform": {"php": "5.4.0"}') + ->run(); + + $this->taskComposerUpdate()->run(); + } + + private function installDependenciesForPhp70() + { + $this->taskReplaceInFile('composer.json') + ->regex('/"platform": \{.*?\}/') + ->to('"platform": {"php": "7.0.0"}') + ->run(); + + $this->taskComposerUpdate()->run(); + } + + private function revertComposerJsonChanges() + { + $this->taskReplaceInFile('composer.json') + ->regex('/"platform": \{.*?\}/') + ->to('"platform": {}') + ->run(); + } + + + /** + * @desc creates codecept.phar + * @throws Exception + */ + public function buildPhar() + { + $this->installDependenciesForPhp70(); + $this->packPhar('package/codecept.phar'); + $this->revertComposerJsonChanges(); + } + + /** + * @desc creates codecept.phar with Guzzle 5.3 and Symfony 2.8 + * @throws Exception + */ + public function buildPhar5() + { + if (!file_exists('package/php54')) { + mkdir('package/php54'); + } + $this->installDependenciesForPhp54(); + $this->packPhar('package/php54/codecept.phar'); + $this->revertComposerJsonChanges(); + } + + private function packPhar($pharFileName) + { + $pharTask = $this->taskPackPhar($pharFileName) + ->compress() + ->stub('package/stub.php'); + + $finder = Finder::create() + ->ignoreVCS(true) + ->name('*.php') + ->name('*.tpl.dist') + ->name('*.html.dist') + ->in('src'); + + foreach ($finder as $file) { + $pharTask->addFile('src/'.$file->getRelativePathname(), $file->getRealPath()); + } + + $finder = Finder::create() + ->ignoreVCS(true) + ->name('*.php') + ->in('ext'); + + foreach ($finder as $file) { + $pharTask->addFile('ext/'.$file->getRelativePathname(), $file->getRealPath()); + } + + $finder = Finder::create()->files() + ->ignoreVCS(true) + ->name('*.php') + ->name('*.css') + ->name('*.png') + ->name('*.js') + ->name('*.css') + ->name('*.eot') + ->name('*.svg') + ->name('*.ttf') + ->name('*.wof') + ->name('*.woff') + ->name('*.woff2') + ->name('*.png') + ->name('*.tpl.dist') + ->name('*.html.dist') + ->exclude('videlalvaro') + ->exclude('php-amqplib') + ->exclude('pheanstalk') + ->exclude('phpseclib') + ->exclude('codegyre') + ->exclude('monolog') + ->exclude('phpspec') + ->exclude('squizlabs') + ->exclude('Tests') + ->exclude('tests') + ->exclude('benchmark') + ->exclude('demo') + ->in('vendor'); + + + foreach ($finder as $file) { + $pharTask->addStripped('vendor/'.$file->getRelativePathname(), $file->getRealPath()); + } + + $pharTask->addFile('autoload.php', 'autoload.php') + ->addFile('codecept', 'package/bin') + ->addFile('shim.php', 'shim.php') + ->addFile('phpunit5-loggers.php', 'phpunit5-loggers.php') + ->run(); + + $code = $this->taskExec('php ' . $pharFileName)->run()->getExitCode(); + if ($code !== 0) { + throw new Exception("There was problem compiling phar"); + } + } + + /** + * @desc generates modules reference from source files + */ + public function buildDocs() + { + $this->say('generating documentation from source files'); + $this->buildDocsModules(); + $this->buildDocsUtils(); + $this->buildDocsCommands(); + $this->buildDocsStub(); + $this->buildDocsApi(); + $this->buildDocsExtensions(); + } + + public function buildDocsModules() + { + $this->taskCleanDir('docs/modules')->run(); + $this->say("Modules"); + $modules = Finder::create()->files()->name('*.php')->in(__DIR__ . '/src/Codeception/Module'); + + foreach ($modules as $module) { + $moduleName = basename(substr($module, 0, -4)); + $className = 'Codeception\Module\\' . $moduleName; + $source = "https://github.com/Codeception/Codeception/tree/" + .self::STABLE_BRANCH."/src/Codeception/Module/$moduleName.php"; + + $this->taskGenDoc('docs/modules/' . $moduleName . '.md') + ->docClass($className) + ->prepend('# '.$moduleName) + ->append('

 

Module reference is taken from the source code. Help us to improve documentation. Edit module reference
') + ->processClassSignature(false) + ->processClassDocBlock(function (\ReflectionClass $c, $text) { + return "$text\n## Actions"; + })->processProperty(false) + ->filterMethods(function (\ReflectionMethod $method) use ($className) { + if ($method->isConstructor() or $method->isDestructor()) { + return false; + } + if (!$method->isPublic()) { + return false; + } + if (strpos($method->name, '_') === 0) { + $doc = $method->getDocComment(); + try { + $doc = $doc . $method->getPrototype()->getDocComment(); + } catch (\ReflectionException $e) { + } + + if (strpos($doc, '@api') === false) { + return false; + } + }; + return true; + })->processMethod(function (\ReflectionMethod $method, $text) use ($className, $moduleName) { + $title = "\n### {$method->name}\n"; + if (strpos($method->name, '_') === 0) { + $text = str_replace("@api\n", '', $text); + $text = "\n*hidden API method, expected to be used from Helper classes*\n" . $text; + $text = str_replace("{{MODULE_NAME}}", $moduleName, $text); + }; + + if (!trim($text)) { + return $title . "__not documented__\n"; + } + + $text = str_replace( + ['@since', '@version'], + [' * `Available since`', ' * `Available since`'], + $text + ); + $text = str_replace('@part ', ' * `[Part]` ', $text); + $text = str_replace("@return mixed\n", '', $text); + $text = preg_replace('~@return (.*?)~', ' * `return` $1', $text); + $text = preg_replace("~^@(.*?)([$\s])~", ' * `$1` $2', $text); + $result = $title . $text; + return preg_replace('/\n(\s*\n){2,}/', "\n\n", $result); + })->processMethodSignature(false) + ->reorderMethods('ksort') + ->run(); + } + } + + public function buildDocsUtils() + { + $this->say("Util Classes"); + $utils = ['Autoload', 'Fixtures', 'Locator', 'XmlBuilder', 'JsonType', 'HttpCode']; + + foreach ($utils as $utilName) { + $className = '\Codeception\Util\\' . $utilName; + $source = self::REPO_BLOB_URL."/".self::STABLE_BRANCH."/src/Codeception/Util/$utilName.php"; + + $this->documentApiClass('docs/reference/' . $utilName . '.md', $className, $source); + } + } + + public function buildDocsStub() + { + $this->say("Stub Classes"); + + $this->taskGenDoc('docs/reference/Stub.md') + ->docClass('Codeception\Stub') + ->filterMethods(function(\ReflectionMethod $method) { + if ($method->isConstructor() or $method->isDestructor()) return false; + if (!$method->isPublic()) return false; + if (strpos($method->name, '_') === 0) return false; + return true; + }) + ->processMethodDocBlock( + function (\ReflectionMethod $m, $doc) { + $doc = str_replace(array('@since'), array(' * available since version'), $doc); + $doc = str_replace(array(' @', "\n@"), array(" * ", "\n * "), $doc); + return $doc; + }) + ->processProperty(false) + ->run(); + + $mocksDocumentation = <<taskGenDoc('docs/reference/Mock.md') + ->docClass('Codeception\Test\Feature\Stub') + ->docClass('Codeception\Stub\Expected') + ->processClassDocBlock(false) + ->processClassSignature(false) + ->prepend($mocksDocumentation) + ->filterMethods(function(\ReflectionMethod $method) { + if ($method->isConstructor() or $method->isDestructor()) return false; + if (!$method->isPublic()) return false; + if (strpos($method->name, '_') === 0) return false; + if (strpos($method->name, 'stub') === 0) return false; + return true; + }) + ->run(); + } + + public function buildDocsApi() + { + $this->say("API Classes"); + $apiClasses = ['Codeception\Module', 'Codeception\InitTemplate']; + + foreach ($apiClasses as $apiClass) { + $name = (new ReflectionClass($apiClass))->getShortName(); + $this->documentApiClass('docs/reference/' . $name . '.md', $apiClass, true); + } + } + + public function buildDocsCommands() + { + $this->say("Commands"); + + $commands = Finder::create()->files()->name('*.php')->depth(0)->in(__DIR__ . '/src/Codeception/Command'); + + $commandGenerator = $this->taskGenDoc('docs/reference/Commands.md'); + foreach ($commands as $command) { + $commandName = basename(substr($command, 0, -4)); + $className = '\Codeception\Command\\' . $commandName; + $commandGenerator->docClass($className); + } + $commandGenerator + ->prepend("# Console Commands\n") + ->processClassSignature(function ($r, $text) { + return "## ".$r->getShortName(); + }) + ->filterMethods(function (ReflectionMethod $r) { + return false; + }) + ->run(); + } + + public function buildDocsExtensions() + { + $this->say('Extensions'); + + $extensions = Finder::create()->files()->sortByName()->name('*.php')->in(__DIR__ . '/ext'); + + $extGenerator= $this->taskGenDoc(__DIR__.'/ext/README.md'); + foreach ($extensions as $extension) { + $extensionName = basename(substr($extension, 0, -4)); + $className = '\Codeception\Extension\\' . $extensionName; + $extGenerator->docClass($className); + } + $extGenerator + ->prepend("# Official Extensions\n") + ->processClassSignature(function (ReflectionClass $r, $text) { + $name = $r->getShortName(); + return "## $name\n\n[See Source](" . self::REPO_BLOB_URL."/".self::STABLE_BRANCH. "/ext/$name.php)"; + }) + ->filterMethods(function (ReflectionMethod $r) { + return false; + }) + ->filterProperties(function ($r) { + return false; + }) + ->run(); + } + + /** + * @desc publishes generated phar to codeception.com + */ + public function publishPhar() + { + $this->cloneSite(); + $version = \Codeception\Codecept::VERSION; + if (strpos($version, self::STABLE_BRANCH) === 0) { + $this->say("publishing to release branch"); + copy('../codecept.phar', 'codecept.phar'); + if (!is_dir('php54')) { + mkdir('php54'); + } + copy('../php54/codecept.phar', 'php5/codecept.phar'); + $this->taskExec('git add codecept.phar')->run(); + $this->taskExec('git add php5/codecept.phar')->run(); + } + + $this->taskFileSystemStack() + ->mkdir("releases/$version") + ->mkdir("releases/$version/php54") + ->copy('../codecept.phar', "releases/$version/codecept.phar") + ->copy('../php54/codecept.phar', "releases/$version/php54/codecept.phar") + ->run(); + + $this->taskGitStack()->add('-A')->run(); + + $sortByVersion = function (\SplFileInfo $a, \SplFileInfo $b) { + return version_compare($a->getBaseName(), $b->getBaseName()); + }; + + $releases = array_reverse( + iterator_to_array(Finder::create()->depth(0)->directories()->sort($sortByVersion)->in('releases')) + ); + $branch = null; + $releaseFile = $this->taskWriteToFile('builds.markdown') + ->line('---') + ->line('layout: page') + ->line('title: Codeception Builds') + ->line('---') + ->line(''); + + + foreach ($releases as $release) { + $releaseName = $release->getBasename(); + $downloadUrl = "http://codeception.com/releases/$releaseName/codecept.phar"; + + list($major, $minor) = explode('.', $releaseName); + if ("$major.$minor" != $branch) { + $branch = "$major.$minor"; + $releaseFile->line("\n## $branch"); + if ($major < 2) { + $releaseFile->line("*Requires: PHP 5.3 and higher + CURL*\n"); + } else { + $releaseFile->line("*Requires: PHP 5.4 and higher + CURL*\n"); + } + $releaseFile->line("* **[Download Latest $branch Release]($downloadUrl)**"); + } + $versionLine = "* [$releaseName]($downloadUrl)"; + + if (file_exists("releases/$releaseName/php54/codecept.phar")) { + $downloadUrl = "http://codeception.com/releases/$releaseName/php54/codecept.phar"; + if (version_compare($releaseName, '2.3.0', '>=')) { + $versionLine .= ", [for PHP 5.4 - 5.6]($downloadUrl)"; + } else { + $versionLine .= ", [for PHP 5.4 or 5.5]($downloadUrl)"; + } + } + + $releaseFile->line($versionLine); + } + $releaseFile->run(); + + $this->publishSite(); + } + + /** + * Updates docs on codeception.com + * + */ + public function publishDocs() + { + if (strpos(\Codeception\Codecept::VERSION, self::STABLE_BRANCH) !== 0) { + $this->say("The ".\Codeception\Codecept::VERSION." is not in release branch. Site is not build"); + return; + } + $this->say('building site...'); + + $this->cloneSite(); + $this->taskCleanDir('docs') + ->run(); + $this->taskFileSystemStack() + ->mkdir('docs/reference') + ->mkdir('docs/modules') + ->run(); + + chdir('../..'); + + $this->say('building changelog'); + $this->taskWriteToFile('package/site/changelog.markdown') + ->line('---') + ->line('layout: page') + ->line('title: Codeception Changelog') + ->line('---') + ->line('') + ->line( + '
Download specific version at builds page
' + ) + ->line('') + ->line('# Changelog') + ->line('') + ->line($this->processChangelog()) + ->run(); + + $docs = Finder::create()->files('*.md')->sortByName()->in('docs'); + + $modules = []; + $api = []; + $reference = []; + foreach ($docs as $doc) { + $newfile = $doc->getFilename(); + $name = substr($doc->getBasename(), 0, -3); + $contents = $doc->getContents(); + if (strpos($doc->getPathname(), 'docs'.DIRECTORY_SEPARATOR.'modules') !== false) { + $newfile = 'docs/modules/' . $newfile; + $modules[$name] = '/docs/modules/' . $doc->getBasename(); + $contents = str_replace('## ', '### ', $contents); + $buttons = [ + 'source' => self::REPO_BLOB_URL."/".self::STABLE_BRANCH."/src/Codeception/Module/$name.php" + ]; + // building version switcher + foreach (['master', '2.2', '2.1', '2.0', '1.8'] as $branch) { + $buttons[$branch] = self::REPO_BLOB_URL."/$branch/docs/modules/$name.md"; + } + $buttonHtml = "\n\n".'
'; + foreach ($buttons as $link => $url) { + if ($link == self::STABLE_BRANCH) { + $link = "$link"; + } + $buttonHtml.= ''.$link.''; + } + $buttonHtml .= '
'."\n\n"; + $contents = $buttonHtml . $contents; + } elseif (strpos($doc->getPathname(), 'docs'.DIRECTORY_SEPARATOR.'reference') !== false) { + $newfile = 'docs/reference/' . $newfile; + $reference[$name] = '/docs/reference/' . $doc->getBasename(); + } else { + $newfile = 'docs/'.$newfile; + $api[substr($name, 3)] = '/docs/'.$doc->getBasename(); + } + + copy($doc->getPathname(), 'package/site/' . $newfile); + + $highlight_languages = implode('|', ['php', 'html', 'bash', 'yaml', 'json', 'xml', 'sql', 'gherkin']); + $contents = preg_replace( + "~```\s?($highlight_languages)\b(.*?)```~ms", + "{% highlight $1 %}\n$2\n{% endhighlight %}", + $contents + ); + $contents = str_replace('{% highlight %}', '{% highlight yaml %}', $contents); + $contents = preg_replace("~```\s?(.*?)```~ms", "{% highlight yaml %}\n$1\n{% endhighlight %}", $contents); + // set default language in order not to leave unparsed code inside '```' + + $matches = []; + $title = $name; + $contents = "---\nlayout: doc\ntitle: ".($title!="" ? $title." - " : "") + ."Codeception - Documentation\n---\n\n".$contents; + + file_put_contents('package/site/' .$newfile, $contents); + } + chdir('package/site'); + $guides = array_keys($api); + foreach ($api as $name => $url) { + $filename = substr($url, 6); + $doc = file_get_contents('docs/'.$filename)."\n\n\n"; + $i = array_search($name, $guides); + if (isset($guides[$i+1])) { + $next_title = $guides[$i+1]; + $next_url = $api[$guides[$i+1]]; + $next_url = substr($next_url, 0, -3); + $doc .= "\n* **Next Chapter: [$next_title >]($next_url)**"; + } + + if (isset($guides[$i-1])) { + $prev_title = $guides[$i-1]; + $prev_url = $api[$guides[$i-1]]; + $prev_url = substr($prev_url, 0, -3); + $doc .= "\n* **Previous Chapter: [< $prev_title]($prev_url)**"; + } + + $this->taskWriteToFile('docs/'.$filename) + ->text($doc) + ->run(); + } + + + $guides_list = ''; + foreach ($api as $name => $url) { + $url = substr($url, 0, -3); + $name = preg_replace('/([A-Z]+)([A-Z][a-z])/', '\\1 \\2', $name); + $name = preg_replace('/([a-z\d])([A-Z])/', '\\1 \\2', $name); + $guides_list .= '
  • '.$name.'
  • '; + } + file_put_contents('_includes/guides.html', $guides_list); + + $this->say("Building Guides index"); + $this->taskWriteToFile('_includes/guides.html') + ->text($guides_list) + ->run(); + + $this->taskWriteToFile('docs/index.html') + ->line('---') + ->line('layout: doc') + ->line('title: Codeception Documentation') + ->line('---') + ->line('') + ->line("

    Codeception Documentation Guides

    ") + ->line('') + ->text($guides_list) + ->run(); + + /** + * Align modules in two columns like this: + * A D + * B E + * C + */ + $modules_cols = 2; + $modules_rows = ceil(count($modules) / $modules_cols); + $module_names_chunked = array_chunk(array_keys($modules), $modules_rows); + $modules_list = ''; + for ($i = 0; $i < $modules_rows; $i++) { + for ($j = 0; $j < $modules_cols; $j++) { + if (isset($module_names_chunked[$j][$i])) { + $name = $module_names_chunked[$j][$i]; + $url = substr($modules[$name], 0, -3); + $modules_list .= '
  • '.$name.'
  • '; + } + } + } + file_put_contents('_includes/modules.html', $modules_list); + + $reference_list = ''; + foreach ($reference as $name => $url) { + if ($name == 'Commands') { + continue; + } + if ($name == 'Configuration') { + continue; + } + + $url = substr($url, 0, -3); + $reference_list .= '
  • '.$name.'
  • '; + } + file_put_contents('_includes/reference.html', $reference_list); + + $this->say("Writing extensions docs"); + $this->taskWriteToFile('_includes/extensions.md') + ->textFromFile(__DIR__.'/ext/README.md') + ->run(); + + $this->publishSite(); + $this->taskExec('git add')->args('.')->run(); + } + + /** + * @desc creates a new version tag and pushes to github + * @param null $branch + * @param array $opt + */ + public function publishGit($branch = null, $opt = ['tag|t' => null]) + { + $version = isset($opt['tag']) ? $opt['tag'] : \Codeception\Codecept::VERSION; + $this->say('creating new tag for '.$version); + if (!$branch) { + $branch = explode('.', $version); + array_pop($branch); + $branch = implode('.', $branch); + } + $this->taskExec("git tag $version")->run(); + $this->taskExec("git push origin $branch --tags")->run(); + } + + protected function processChangelog() + { + $sortByVersionDesc = function (\SplFileInfo $a, \SplFileInfo $b) { + $pattern = '/^CHANGELOG-(\d+\.\d+).md$/'; + if (preg_match($pattern, $a->getBasename(), $matches1) && preg_match($pattern, $b->getBasename(), $matches2)) { + return version_compare($matches1[1], $matches2[1]) * -1; + } + return 0; + }; + + $changelogFiles = Finder::create()->name('CHANGELOG-*.md')->in('.')->depth(0)->sort($sortByVersionDesc); + $changelog = ''; + foreach ($changelogFiles as $file) { + $changelog .= $file->getContents(); + } + + //user + $changelog = preg_replace('~\s@([\w-]+)~', ' **[$1](https://github.com/$1)**', $changelog); + + //issue + $changelog = preg_replace( + '~#(\d+)~', + '[#$1](https://github.com/Codeception/Codeception/issues/$1)', + $changelog + ); + + //module + $changelog = preg_replace('~\s\[(\w+)\]\s~', ' **[$1]** ', $changelog); + + return $changelog; + } + + /** + * @desc cleans all log and temp directories + */ + public function clean() + { + $this->taskCleanDir([ + 'tests/log', + 'tests/data/claypit/tests/_output', + 'tests/data/included/_log', + 'tests/data/included/jazz/tests/_log', + 'tests/data/included/shire/tests/_log', + ])->run(); + + $this->taskDeleteDir([ + 'tests/data/claypit/c3tmp', + 'tests/data/sandbox' + ])->run(); + } + + public function buildActors() + { + $build = 'php codecept build'; + $this->taskExec($build)->run(); + $this->taskExec($build)->args('-c tests/data/claypit')->run(); + $this->taskExec($build)->args('-c tests/data/included')->run(); + $this->taskExec($build)->args('-c tests/data/included/jazz')->run(); + $this->taskExec($build)->args('-c tests/data/included/shire')->run(); + $this->taskExec($build)->args('-c tests/data/included/jazz')->run(); + } + + protected function cloneSite() + { + @mkdir("package/site"); + $this->taskExec('git clone') + ->args('git@github.com:Codeception/codeception.github.com.git') + ->args('package/site/') + ->run(); + chdir('package/site'); + } + + protected function publishSite() + { + $this->taskGitStack() + ->add('-A') + ->commit('auto updated documentation') + ->push() + ->run(); + + chdir('..'); + sleep(2); + $this->taskDeleteDir('site')->run(); + chdir('..'); + $this->say("Site build succesfully"); + } + + /** + * Publishes Codeception base + * @param null $branch + * @param null $tag + */ + public function publishBase($branch = null, $tag = null) + { + if (!$branch) { + $branch = self::STABLE_BRANCH; + } + + $this->say("Updating Codeception Base distribution"); + + $tempBranch = "tmp".uniqid(); + + $this->taskGitStack() + ->checkout("-b $tempBranch") + ->run(); + + $this->taskReplaceInFile('composer.json') + ->from('"codeception/codeception"') + ->to('"codeception/base"') + ->run(); + + $this->taskReplaceInFile('composer.json') + ->regex('~^\s+"facebook\/webdriver".*$~m') + ->to('') + ->run(); + + $this->taskReplaceInFile('composer.json') + ->regex('~^\s+"guzzlehttp\/guzzle".*$~m') + ->to('') + ->run(); + + $this->taskComposerUpdate()->run(); + $this->taskGitStack() + ->add('composer.json') + ->commit('auto-update') + ->exec("push -f base $tempBranch:$branch") + ->run(); + + if ($tag) { + $this->taskGitStack() + ->exec("tag -d $tag") + ->exec("push base :refs/tags/$tag") + ->exec("tag $tag") + ->push('base', $tag) + ->run(); + } + + $this->taskGitStack() + ->checkout('-- composer.json') + ->checkout($branch) + ->exec("branch -D $tempBranch") + ->run(); + } + + /** + * Checks Codeception code style + * Most useful values for `report` option: `full`, `summary`, `diff` + * + * @param array $opt + */ + public function codestyleCheck($opt = ['report|r' => 'summary']) + { + $this->say("Checking code style"); + + $this->taskExec('php vendor/bin/phpcs') + ->arg('.') + ->arg('--standard=ruleset.xml') + ->arg('--report=' . $opt['report']) + ->arg('--ignore=tests,vendor,package,docs') + ->run(); + } + + public function codestyleFix() + { + $this->taskExec('php vendor/bin/phpcbf') + ->arg('.') + ->arg('--standard=ruleset.xml') + ->arg('--ignore=tests,vendor,package,docs') + ->run(); + } + + /** + * @param $file + * @param $className + * @param $source + */ + protected function documentApiClass($file, $className, $all = false) + { + $uri = str_replace('\\', '/', $className); + $source = self::REPO_BLOB_URL."/".self::STABLE_BRANCH."/src/$uri.php"; + + $this->taskGenDoc($file) + ->docClass($className) + ->filterMethods(function (ReflectionMethod $r) use ($all, $className) { + return $all || $r->isPublic(); + }) + ->append( + '

     

    Reference is taken from the source code. ' + . 'Help us to improve documentation. Edit module reference
    ' + ) + ->processPropertySignature(function ($r) { + return "\n#### $" . $r->name. "\n\n"; + }) + ->processPropertyDocBlock(function ($r, $text) { + $modifiers = implode(' ', \Reflection::getModifierNames($r->getModifiers())); + $text = ' *' . $modifiers . '* **$' . $r->name . "**\n" . $text; + $text = preg_replace("~@(.*?)\s(.*)~", 'type `$2`', $text); + return $text; + }) + ->processClassDocBlock( + function (ReflectionClass $r, $text) { + return $text . "\n"; + } + ) + ->processMethodSignature(function ($r, $text) { + return "#### {$r->name}()\n\n" . ltrim($text, '#'); + }) + ->processMethodDocBlock( + function (ReflectionMethod $r, $text) use ($file) { + $file = str_replace(__DIR__, '', $r->getFileName()); + $source = self::REPO_BLOB_URL."/".self::STABLE_BRANCH. $file; + + $line = $r->getStartLine(); + $text = preg_replace("~^\s?@(.*?)\s~m", ' * `$1` $2', $text); + $text .= "\n[See source]($source#L$line)"; + return "\n" . $text . "\n"; + } + ) + ->reorderMethods('ksort') + ->run(); + } +} diff --git a/vendor/codeception/codeception/appveyor.yml b/vendor/codeception/codeception/appveyor.yml new file mode 100644 index 000000000..e23c3e336 --- /dev/null +++ b/vendor/codeception/codeception/appveyor.yml @@ -0,0 +1,64 @@ +build: false +shallow_clone: true +platform: 'x86' +branches: + except: + - gh-pages + +cache: + - c:\tools\php71 -> appveyor.yml + +services: + - mysql + - postgresql93 + - mongodb + +init: + - SET PATH=C:\Program Files\OpenSSL;c:\tools\php71;%PATH% + - SET COMPOSER_NO_INTERACTION=1 + - SET PHP=1 + - SET ANSICON=121x90 (121x90) + +install: + # databases setup + - SET PATH=C:\Program Files\MySql\MySQL Server 5.7\bin\;%PATH% + - SET PGUSER=postgres + - SET PGPASSWORD=Password12! + - SET PATH=C:\Program Files\PostgreSQL\9.3\bin\;%PATH% + # php setup + - IF EXIST c:\tools\php71 (SET PHP=0) + - IF %PHP%==1 cinst -y OpenSSL.Light + - SET PATH=C:\Program Files\OpenSSL;%PATH% + - cinst -y curl + - SET PATH=C:\Program Files\curl;%PATH% + - sc config wuauserv start= auto + - net start wuauserv + - IF %PHP%==1 cinst -y php + - IF %PHP%==1 cd c:\tools\php71 + - IF %PHP%==1 cd ext + - IF %PHP%==1 appveyor DownloadFile http://windows.php.net/downloads/pecl/releases/mongodb/1.2.0/php_mongodb-1.2.0-7.1-nts-vc14-x64.zip + - IF %PHP%==1 7z x php_mongodb-1.2.0-7.1-nts-vc14-x64.zip -y >nul + - IF %PHP%==1 cd .. + - IF %PHP%==1 copy php.ini-production php.ini + - IF %PHP%==1 echo extension_dir=ext >> php.ini + - IF %PHP%==1 echo extension=php_openssl.dll >> php.ini + - IF %PHP%==1 echo date.timezone="UTC" >> php.ini + - IF %PHP%==1 echo extension=php_mbstring.dll >> php.ini + - IF %PHP%==1 echo extension=php_curl.dll >> php.ini + - IF %PHP%==1 echo extension=php_pdo_mysql.dll >> php.ini + - IF %PHP%==1 echo extension=php_pdo_pgsql.dll >> php.ini + - IF %PHP%==1 echo extension=php_pdo_sqlite.dll >> php.ini + - IF %PHP%==1 echo extension=php_pgsql.dll >> php.ini + - IF %PHP%==1 echo extension=php_mongodb.dll >> php.ini + - SET PATH=C:\tools\php71;%PATH% + - cd %APPVEYOR_BUILD_FOLDER% + - appveyor DownloadFile https://getcomposer.org/composer.phar + - php composer.phar install --prefer-dist -n --no-ansi + +before_test: + - createdb codeception_test + - mysql -uroot -pPassword12! -e "CREATE DATABASE codeception_test" + +test_script: + - php codecept run cli --no-colors -n --skip-group coverage + - php codecept run unit -g core -g appveyor --no-colors -n diff --git a/vendor/codeception/codeception/autoload.php b/vendor/codeception/codeception/autoload.php new file mode 100644 index 000000000..05b92f925 --- /dev/null +++ b/vendor/codeception/codeception/autoload.php @@ -0,0 +1,123 @@ + 'No error', + JSON_ERROR_DEPTH => 'Maximum stack depth exceeded', + JSON_ERROR_STATE_MISMATCH => 'State mismatch (invalid or malformed JSON)', + JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded', + JSON_ERROR_SYNTAX => 'Syntax error', + JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded' + ); + + $error = json_last_error(); + return isset($errors[$error]) ? $errors[$error] : 'Unknown error'; + } +} + +// function not autoloaded in PHP, thus its a good place for them +if (!function_exists('codecept_debug')) { + function codecept_debug($data) + { + \Codeception\Util\Debug::debug($data); + } +} + +if (!function_exists('codecept_root_dir')) { + function codecept_root_dir($appendPath = '') + { + return \Codeception\Configuration::projectDir() . $appendPath; + } +} + +if (!function_exists('codecept_output_dir')) { + function codecept_output_dir($appendPath = '') + { + return \Codeception\Configuration::outputDir() . $appendPath; + } +} + +if (!function_exists('codecept_log_dir')) { + function codecept_log_dir($appendPath = '') + { + return \Codeception\Configuration::outputDir() . $appendPath; + } +} + +if (!function_exists('codecept_data_dir')) { + function codecept_data_dir($appendPath = '') + { + return \Codeception\Configuration::dataDir() . $appendPath; + } +} + +if (!function_exists('codecept_relative_path')) { + function codecept_relative_path($path) + { + return \Codeception\Util\PathResolver::getRelativeDir( + $path, + \Codeception\Configuration::projectDir(), + DIRECTORY_SEPARATOR + ); + } +} diff --git a/vendor/codeception/codeception/codecept b/vendor/codeception/codeception/codecept new file mode 100755 index 000000000..cb11444b7 --- /dev/null +++ b/vendor/codeception/codeception/codecept @@ -0,0 +1,42 @@ +#!/usr/bin/env php +add(new Codeception\Command\Build('build')); +$app->add(new Codeception\Command\Run('run')); +$app->add(new Codeception\Command\Init('init')); +$app->add(new Codeception\Command\Console('console')); +$app->add(new Codeception\Command\Bootstrap('bootstrap')); +$app->add(new Codeception\Command\GenerateCept('generate:cept')); +$app->add(new Codeception\Command\GenerateCest('generate:cest')); +$app->add(new Codeception\Command\GenerateTest('generate:test')); +$app->add(new Codeception\Command\GenerateSuite('generate:suite')); +$app->add(new Codeception\Command\GenerateHelper('generate:helper')); +$app->add(new Codeception\Command\GenerateScenarios('generate:scenarios')); +$app->add(new Codeception\Command\Clean('clean')); +$app->add(new Codeception\Command\GenerateGroup('generate:groupobject')); +$app->add(new Codeception\Command\GeneratePageObject('generate:pageobject')); +$app->add(new Codeception\Command\GenerateStepObject('generate:stepobject')); +$app->add(new Codeception\Command\GenerateEnvironment('generate:environment')); +$app->add(new Codeception\Command\GenerateFeature('generate:feature')); +$app->add(new Codeception\Command\GherkinSnippets('gherkin:snippets')); +$app->add(new Codeception\Command\GherkinSteps('gherkin:steps')); +$app->add(new Codeception\Command\DryRun('dry-run')); +$app->add(new Codeception\Command\ConfigValidate('config:validate')); + +// Suggests package +if (class_exists('Stecman\Component\Symfony\Console\BashCompletion\CompletionCommand')) { + $app->add(new Codeception\Command\Completion()); +} else { + $app->add(new Codeception\Command\CompletionFallback()); +} + +$app->registerCustomCommands(); +$app->run(); diff --git a/vendor/codeception/codeception/codecept.bat b/vendor/codeception/codeception/codecept.bat new file mode 100644 index 000000000..0edc8f793 --- /dev/null +++ b/vendor/codeception/codeception/codecept.bat @@ -0,0 +1,11 @@ +@echo off +if "%PHPBIN%" == "" set PHPBIN=@php_bin@ +if exist "codecept" goto INTERNAL +if not exist "%PHPBIN%" if "%PHP_PEAR_PHP_BIN%" neq "" goto USE_PEAR_PATH +GOTO RUN +:USE_PEAR_PATH +set PHPBIN=%PHP_PEAR_PHP_BIN% +:RUN +"%PHPBIN%" "@bin_dir@\codecept" %* +:INTERNAL +"%PHPBIN%" "codecept" %* \ No newline at end of file diff --git a/vendor/codeception/codeception/codeception.yml b/vendor/codeception/codeception/codeception.yml new file mode 100644 index 000000000..1b9828b94 --- /dev/null +++ b/vendor/codeception/codeception/codeception.yml @@ -0,0 +1,46 @@ +paths: + tests: tests + log: tests/log + data: tests/data + support: tests/support + envs: tests/envs +settings: + shuffle: true + bootstrap: _bootstrap.php + suite_class: \PHPUnit_Framework_TestSuite + colors: true + memory_limit: 1024M + log: true + lint: false + report_useless_tests: false + disallow_test_output: false + be_strict_about_changes_to_global_state: false + log_incomplete_skipped: false + +modules: + config: + AMQP: + host: 'localhost' + port: '5672' + username: 'guest' + password: 'guest' + vhost: '/' + queues: [queue1, queue2] + +extensions: + enabled: [Codeception\Extension\RunFailed] + config: + Codeception\Extension\RunFailed: + fail-group: failed + +coverage: + enabled: true + include: + - src/Codeception/Command/* + - src/Codeception/Module/Symfony1.php + - src/Codeception/Module/Symfony2.php + - src/Codeception/Module/Doctrine1.php + - src/Codeception/Module/Doctrine2.php + - src/Codeception/Module/Kohana.php + - src/Codeception/Module/SocialEngine.php + - src/Codeception/Module/ZF1.php \ No newline at end of file diff --git a/vendor/codeception/codeception/composer.json b/vendor/codeception/codeception/composer.json new file mode 100644 index 000000000..806d03548 --- /dev/null +++ b/vendor/codeception/codeception/composer.json @@ -0,0 +1,77 @@ +{ + "name":"codeception/codeception", + "description":"BDD-style testing framework", + "keywords":["BDD", "acceptance testing", "functional testing", "unit testing", "tdd"], + "homepage":"http://codeception.com/", + "type":"library", + "license":"MIT", + "authors":[ + { + "name":"Michael Bodnarchuk", + "email":"davert@mail.ua", + "homepage":"http://codegyre.com" + } + ], + "minimum-stability": "RC", + + "require": { + "php": ">=5.4.0 <8.0", + "ext-json": "*", + "ext-mbstring": "*", + "phpunit/phpunit": ">=4.8.28 <5.0.0 || >=5.6.3 <7.0", + "phpunit/php-code-coverage": ">=2.2.4 <6.0", + "facebook/webdriver": ">=1.1.3 <2.0", + "guzzlehttp/guzzle": ">=4.1.4 <7.0", + "guzzlehttp/psr7": "~1.0", + "symfony/finder": ">=2.7 <5.0", + "symfony/console": ">=2.7 <5.0", + "symfony/event-dispatcher": ">=2.7 <5.0", + "symfony/yaml": ">=2.7 <5.0", + "symfony/browser-kit": ">=2.7 <5.0", + "symfony/css-selector": ">=2.7 <5.0", + "symfony/dom-crawler": ">=2.7 <5.0", + "behat/gherkin": "~4.4.0", + "sebastian/comparator": ">1.1 <3.0", + "sebastian/diff": ">=1.4 <3.0", + "codeception/stub": "^1.0" + }, + "require-dev": { + "monolog/monolog": "~1.8", + "facebook/graph-sdk": "~5.3", + "php-amqplib/php-amqplib": "~2.4", + "codeception/specify": "~0.3", + "pda/pheanstalk": "~3.0", + "flow/jsonpath": "~0.2", + "predis/predis": "^1.0", + "squizlabs/php_codesniffer": "~2.0", + "vlucas/phpdotenv": "^2.4.0", + "symfony/process": ">=2.7 <5.0" + }, + "suggest": { + "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", + "codeception/specify": "BDD-style code blocks", + "codeception/verify": "BDD-style assertions", + "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests", + "flow/jsonpath": "For using JSONPath in REST module", + "phpseclib/phpseclib": "for SFTP option in FTP Module", + "league/factory-muffin": "For DataFactory module", + "league/factory-muffin-faker": "For Faker support in DataFactory module", + "symfony/phpunit-bridge": "For phpunit-bridge support", + "stecman/symfony-console-completion": "For BASH autocompletion" + }, + + "autoload":{ + "psr-4":{ + "Codeception\\": "src\\Codeception", + "Codeception\\Extension\\": "ext" + } + }, + "extra": { + "branch-alias": { + } + }, + "bin":["codecept"], + "config": { + "platform": {} + } +} diff --git a/vendor/codeception/codeception/docs/01-Introduction.md b/vendor/codeception/codeception/docs/01-Introduction.md new file mode 100644 index 000000000..ff97b2466 --- /dev/null +++ b/vendor/codeception/codeception/docs/01-Introduction.md @@ -0,0 +1,121 @@ +# Introduction + +The idea behind testing is not new. You can't sleep well if you are not confident +that your last commit didn't take down the whole application. +Having your application covered with tests gives you more trust in the stability of your application. That's all. + +In most cases tests don't guarantee that the application works 100% as it is supposed to. +You can't predict all possible scenarios and exceptional situations for complex apps, +but with tests you can cover the most important parts of your app and at least be sure they work as predicted. + +There are plenty of ways to test your application. +The most popular paradigm is [Unit Testing](http://en.wikipedia.org/wiki/Unit_testing). +For web applications, testing just the controller and/or the model doesn't prove that your application is working. +To test the behavior of your application as a whole, you should write functional or acceptance tests. + +Codeception supports all three testing types. +Out of the box you have tools for writing unit, functional, and acceptance tests in a unified framework. + +| | Codeception Unit Tests | Codeception Functional Tests | Codeception Acceptance Tests +| --- | --- | --- | --- | +| Scope of the test | Single PHP class | PHP Framework (Routing, Controllers, etc.) | Page in browser (Chrome, Firefox, or PhpBrowser) | +| Testing computer needs access to project's PHP files | Yes | Yes | No | +| Webserver required | No | No | Yes | +| JavaScript | No | No | Yes | +| Additional software required | None | None |
    • For WebDriver: Selenium Server or PhantomJS (deprecated)
    • For PhpBrowser: None
    | +| Test execution speed | High | High | Low | +| Configuration file | `unit.suite.yml` | `functional.suite.yml` | `acceptance.suite.yml` | + +One of the main advantages of Codeception is that you don't have to decide on just *one* type of testing. You can have all three! +And chances are, that you will (sooner or later) need all three. That's why Codeception consists of three so-called "suites": +A "unit suite" for all unit tests, a "functional suite" for all functional tests, and an "acceptance suite" for all acceptance tests. + +Let's review those three testing types in reverse order. + +### Acceptance Tests + +How does your client, manager, tester, or any other non-technical person know your website is working? +By opening the browser, accessing the site, clicking on links, filling in the forms, +and actually seeing the content on a web page. They have no idea of the programming language, framework, database, web-server, +or why the application did (or did not) behave as expected. + +This is what acceptance tests are doing. They cover scenarios from a user's perspective. +With acceptance tests, you can be confident that users, following all the defined scenarios, won't get errors. + +**Any website** can be covered with acceptance tests, even if you use a very exotic CMS or framework. + +#### Sample acceptance test + +```php +amOnPage('/'); +$I->click('Sign Up'); +$I->submitForm('#signup', ['username' => 'MilesDavis', 'email' => 'miles@davis.com']); +$I->see('Thank you for Signing Up!'); +``` + +### Functional Tests + +What if we could check our application without running it on a server? +That way we could see detailed exceptions on errors, have our tests run faster, +and check the database against predictable and expected results. That's what functional tests are for. + +For functional tests, you emulate a web request (`$_GET` and `$_POST` variables) +which returns the HTML response. Inside a test, you can make assertions about the response, +and you can check if the data was successfully stored in the database. + +For functional tests, your application needs to be structured in order to run in a test environment. +Codeception provides connectors to several popular PHP frameworks. You can also write your own. + +#### Sample functional test + +```php +amOnPage('/'); +$I->click('Sign Up'); +$I->submitForm('#signup', ['username' => 'MilesDavis', 'email' => 'miles@davis.com']); +$I->see('Thank you for Signing Up!'); +$I->seeEmailSent('miles@davis.com', 'Thank you for registration'); +$I->seeInDatabase('users', ['email' => 'miles@davis.com']); +``` + +### Unit Tests + +Testing pieces of code before coupling them together is highly important as well. This way, +you can be sure that some deeply hidden feature still works, even if it was not covered by functional or acceptance tests. +This also shows care in producing stable and testable code. + +Codeception is created on top of [PHPUnit](http://www.phpunit.de/). If you have experience writing unit tests with PHPUnit +you can continue doing so. Codeception has no problem executing standard PHPUnit tests, +but, additionally, Codeception provides some well-built tools to make your unit tests simpler and cleaner. + +Requirements and code can change rapidly, +and unit tests should be updated every time to fit the requirements. +The better you understand the testing scenario, the faster you can update it for new behavior. + +#### Sample integration test + +```php +setName('Miles'); + $user->setSurname('Davis'); + $user->save(); + $this->assertEquals('Miles Davis', $user->getFullName()); + $this->unitTester->seeInDatabase('users', ['name' => 'Miles', 'surname' => 'Davis']); +} +``` + +## Conclusion + +Despite the wide popularity of *TDD* (Test Driven Development), some PHP developers never write automated tests for their applications mostly because they think it's hard, slow or boring. +The Codeception framework was developed to actually make testing fun. +It allows writing unit, functional, integration, and acceptance tests in a single, coherent style. + +It can be called a *BDD* (Behavior Driven Development) framework. All Codeception tests are written in a descriptive manner. +Just by looking at the test body, you can clearly understand what is being tested and how it is performed. +Even complex tests with many assertions are written in a simple PHP Domain-Specific Language (*DSL*). diff --git a/vendor/codeception/codeception/docs/02-GettingStarted.md b/vendor/codeception/codeception/docs/02-GettingStarted.md new file mode 100644 index 000000000..058b13193 --- /dev/null +++ b/vendor/codeception/codeception/docs/02-GettingStarted.md @@ -0,0 +1,347 @@ +# Getting Started + +Let's take a look at Codeception's architecture. We'll assume that you have already [installed](http://codeception.com/install) it +and bootstrapped your first test suites. Codeception has generated three of them: unit, functional, and acceptance. +They are well described in the [previous chapter](http://codeception.com/docs/01-Introduction). Inside your __/tests__ folder you will have three `.yml` config files and three directories +with names corresponding to these suites: `unit`, `functional`, `acceptance`. Suites are independent groups of tests with a common purpose. + +## The Codeception Syntax + +Codeception follows simple naming rules to make it easy to remember (as well as easy to understand) its method names. + +* **Actions** start with a plain english verb, like "click" or "fill". Examples: + ```php + click('Login'); + $I->fillField('#input-username', 'John Dough'); + $i->pressKey('#input-remarks', 'foo'); + ``` +* **Assertions** always start with "see" or "dontSee". Examples: + ```php + see('Welcome'); + $I->seeInTitle('My Company'); + $i->seeElement('nav'); + $i->dontSeeElement('#error-message'); + $i->dontSeeInPageSource('
    '); + ``` +* **Grabbers** just *read* something from the page, but don't process it. The return value of those are meant to be saved as variables and used later. Example: + ```php + grabAttributeFrom('#login-form', 'method'); + $I->assertEquals('post', $method); + ``` + +## Actors + +One of the main concepts of Codeception is representation of tests as actions of a person. +We have a UnitTester, who executes functions and tests the code. We also have a FunctionalTester, a qualified tester, +who tests the application as a whole, with knowledge of its internals. Lastly we have an AcceptanceTester, a user who works with our application +through an interface that we provide. + +**Methods of actor classes are generally taken from [Codeception Modules](http://codeception.com/docs/06-ModulesAndHelpers)**. +Each module provides predefined actions for different testing purposes, and they can be combined to fit the testing environment. +Codeception tries to solve 90% of possible testing issues in its modules, so you don't have to reinvent the wheel. +We think that you can spend more time on writing tests and less on writing support code to make those tests run. +By default, AcceptanceTester relies on PhpBrowser module, which is set in the `tests/acceptance.suite.yml` configuration file: + +```yaml +actor: AcceptanceTester +modules: + enabled: + - PhpBrowser: + url: http://localhost/myapp/ + - \Helper\Acceptance +``` + +In this configuration file you can enable/disable and reconfigure modules for your needs. +When you change the configuration, the actor classes are rebuilt automatically. If the actor classes are not created or updated as you expect, +try to generate them manually with the `build` command: + +```bash +php codecept build +``` + +## Writing a Sample Scenario + +By default tests are written as narrative scenarios. To make a PHP file a valid scenario, its name should have a `Cept` suffix. + +Let's say we have created a file `tests/acceptance/SigninCept.php` + +We can do that by running the following command: + +```bash +php codecept generate:cept acceptance Signin +``` + +A scenario always starts with actor class initialization. After that, writing a scenario is just like typing `$I->` +and choosing a proper action from the auto-completion list. Let's log in to our website: + +```php +wantTo('login to website'); + +``` + +The `wantTo` section describes your scenario in brief. There are additional comment methods that are useful to describe the context of a scenario: + +```php +am('user'); // actor's role +$I->wantTo('login to website'); // feature to test +$I->lookForwardTo('access website features for logged-in users'); // result to achieve +``` + +After we have described the story background, let's start writing a scenario. + +We'll assume that we have a 'login' page where we get authenticated by providing a username and password. +Then we are sent to a user page, where we see the text `Hello, %username%`. Let's look at how this scenario is written in Codeception: + +```php +am('user'); +$I->wantTo('login to website'); +$I->lookForwardTo('access website features for logged-in users'); +$I->amOnPage('/login'); +$I->fillField('Username','davert'); +$I->fillField('Password','qwerty'); +$I->click('Login'); +$I->see('Hello, davert'); +``` + +This scenario can probably be read by non-technical people. If you just remove all special chars like braces, arrows and `$`, +this test transforms into plain English text: + +``` +I am user +I wantTo login to website +I lookForwardTo access website features for logged-in users +I amOnPage '/login' +I fillField 'Username','davert' +I fillField 'Password','qwerty' +I click 'Login' +I see 'Hello, davert' +``` + +Codeception generates this text representation from PHP code by executing: + +```bash +php codecept generate:scenarios +``` + +These generated scenarios will be stored in your `_data` directory in text files. + +Before we execute this test, we should make sure that the website is running on a local web server. +Let's open the `tests/acceptance.suite.yml` file and replace the URL with the URL of your web application: + +```yaml +actor: AcceptanceTester +modules: + enabled: + - PhpBrowser: + url: 'http://myappurl.local' + - \Helper\Acceptance +``` + +After configuring the URL we can run this test with the `run` command: + +```bash +php codecept run +``` + +This is the output we should see: + +```bash +Acceptance Tests (1) ------------------------------- +✔ SigninCept: Login to website +---------------------------------------------------- + +Time: 1 second, Memory: 21.00Mb + +OK (1 test, 1 assertions) +``` + +Let's get some detailed output: + +```bash +php codecept run acceptance --steps +``` + +We should see a step-by-step report on the performed actions: + +```bash +Acceptance Tests (1) ------------------------------- +SigninCept: Login to website +Signature: SigninCept.php +Test: tests/acceptance/SigninCept.php +Scenario -- + I am user + I look forward to access website features for logged-in users + I am on page "/login" + I fill field "Username" "davert" + I fill field "Password" "qwerty" + I click "Login" + I see "Hello, davert" + OK +---------------------------------------------------- + +Time: 0 seconds, Memory: 21.00Mb + +OK (1 test, 1 assertions) +``` + +This simple test can be extended to a complete scenario of site usage, therefore, +by emulating the user's actions, you can test any of your websites. + +Give it a try! + +## Cept, Cest and Test Formats + +Codeception supports three test formats. Beside the previously described scenario-based Cept format, +Codeception can also execute [PHPUnit test files for unit testing](http://codeception.com/docs/05-UnitTests), and Cest format. + +**Cest** combines scenario-driven test approach with OOP design. In case you want to group a few testing scenarios into one, you should consider using Cest format. +In the example below we are testing CRUD actions within a single file but with several tests (one per operation): + +```php +amOnPage('/'); + } + + function createPage(AcceptanceTester $I) + { + // todo: write test + } + + function viewPage(AcceptanceTester $I) + { + // todo: write test + } + + function updatePage(AcceptanceTester $I) + { + // todo: write test + } + + function deletePage(AcceptanceTester $I) + { + // todo: write test + } +} +``` + +Cest files such as this can be created by running a generator: + +```bash +php codecept generate:cest acceptance PageCrud +``` + +Learn more about the [Cest format](http://codeception.com/docs/07-AdvancedUsage#Cest-Classes) in the Advanced Testing section. + +## BDD + +Codeception allows execution of user stories in Gherkin format in a similar manner as is done in Cucumber or Behat. +Please refer to [the BDD chapter](http://codeception.com/docs/07-BDD) to learn more. + +## Configuration + +Codeception has a global configuration in `codeception.yml` and a config for each suite. We also support `.dist` configuration files. +If you have several developers in a project, put shared settings into `codeception.dist.yml` and personal settings into `codeception.yml`. +The same goes for suite configs. For example, the `unit.suite.yml` will be merged with `unit.suite.dist.yml`. + +## Running Tests + +Tests can be started with the `run` command: + +```bash +php codecept run +``` + +With the first argument you can run all tests from one suite: + +```bash +php codecept run acceptance +``` + +To limit tests run to a single class, add a second argument. Provide a local path to the test class, from the suite directory: + +```bash +php codecept run acceptance SigninCept.php +``` + +Alternatively you can provide the full path to test file: + +```bash +php codecept run tests/acceptance/SigninCept.php +``` + +You can further filter which tests are run by appending a method name to the class, separated by a colon (for Cest or Test formats): + +```bash +php codecept run tests/acceptance/SignInCest.php:^anonymousLogin$ +``` + +You can provide a directory path as well. This will execute all acceptance tests from the `backend` dir: + +```bash +php codecept run tests/acceptance/backend +``` + +Using regular expressions, you can even run many different test methods from the same directory or class. +For example, this will execute all acceptance tests from the `backend` dir beginning with the word "login": + +```bash +php codecept run tests/acceptance/backend:^login +``` + +To execute a group of tests that are not stored in the same directory, you can organize them in [groups](http://codeception.com/docs/07-AdvancedUsage#Groups). + +### Reports + +To generate JUnit XML output, you can provide the `--xml` option, and `--html` for HTML report. + +```bash +php codecept run --steps --xml --html +``` + +This command will run all tests for all suites, displaying the steps, and building HTML and XML reports. Reports will be stored in the `tests/_output/` directory. + +To see all the available options, run the following command: + +```bash +php codecept help run +``` + +## Debugging + +To receive detailed output, tests can be executed with the `--debug` option. +You may print any information inside a test using the `codecept_debug` function. + +### Generators + +There are plenty of useful Codeception commands: + +* `generate:cept` *suite* *filename* - Generates a sample Cept scenario +* `generate:cest` *suite* *filename* - Generates a sample Cest test +* `generate:test` *suite* *filename* - Generates a sample PHPUnit Test with Codeception hooks +* `generate:feature` *suite* *filename* - Generates Gherkin feature file +* `generate:suite` *suite* *actor* - Generates a new suite with the given Actor class name +* `generate:scenarios` *suite* - Generates text files containing scenarios from tests +* `generate:helper` *filename* - Generates a sample Helper File +* `generate:pageobject` *suite* *filename* - Generates a sample Page object +* `generate:stepobject` *suite* *filename* - Generates a sample Step object +* `generate:environment` *env* - Generates a sample Environment configuration +* `generate:groupobject` *group* - Generates a sample Group Extension + +## Conclusion + +We have taken a look into the Codeception structure. Most of the things you need were already generated by the `bootstrap` command. +After you have reviewed the basic concepts and configurations, you can start writing your first scenario. diff --git a/vendor/codeception/codeception/docs/03-AcceptanceTests.md b/vendor/codeception/codeception/docs/03-AcceptanceTests.md new file mode 100644 index 000000000..171b1cb75 --- /dev/null +++ b/vendor/codeception/codeception/docs/03-AcceptanceTests.md @@ -0,0 +1,612 @@ +# Acceptance Testing + +Acceptance testing can be performed by a non-technical person. That person can be your tester, manager or even client. +If you are developing a web-application (and you probably are) the tester needs nothing more than a web browser +to check that your site works correctly. You can reproduce an acceptance tester's actions in scenarios +and run them automatically. Codeception keeps tests clean and simple +as if they were recorded from the words of an actual acceptance tester. + +It makes no difference what (if any) CMS or framework is used on the site. You can even test sites created with different +languages, like Java, .NET, etc. It's always a good idea to add tests to your website. +At least you will be sure that site features work after the latest changes were made. + +## Sample Scenario + +Let's say the first test you would want to run, would be signing in. +In order to write such a test, we still require basic knowledge of PHP and HTML: + +```php +amOnPage('/login'); +$I->fillField('username', 'davert'); +$I->fillField('password', 'qwerty'); +$I->click('LOGIN'); +$I->see('Welcome, Davert!'); +``` + +**This scenario can be performed either by PhpBrowser or by a "real" browser through Selenium WebDriver**. + +| | PhpBrowser | WebDriver | +| --- | --- | --- | +| Browser Engine | Guzzle + Symfony BrowserKit | Chrome or Firefox | +| JavaScript | No | Yes | +| `see`/`seeElement` checks if… | …text is present in the HTML source | …text is actually visible to the user | +| Read HTTP response headers | Yes | No | +| System requirements | PHP with [cURL extension](http://php.net/manual/book.curl.php) | Selenium Standalone Server, Chrome or Firefox | +| Speed | Fast | Slow | + +We will start writing our first acceptance tests with PhpBrowser. + +## PhpBrowser + +This is the fastest way to run acceptance tests since it doesn't require running an actual browser. +We use a PHP web scraper, which acts like a browser: It sends a request, then receives and parses the response. +Codeception uses [Guzzle](http://guzzlephp.org) and [Symfony BrowserKit](http://symfony.com/doc/current/components/browser_kit.html) to interact with HTML web pages. + +Common PhpBrowser drawbacks: + +* You can only click on links with valid URLs or form submit buttons +* You can't fill in fields that are not inside a form + +We need to specify the `url` parameter in the acceptance suite config: + +```yaml +# acceptance.suite.yml +actor: AcceptanceTester +modules: + enabled: + - PhpBrowser: + url: http://www.example.com/ + - \Helper\Acceptance +``` + +We should start by creating a 'Cept' file: + +```php +wantTo('sign in'); +``` + +The `$I` object is used to write all interactions. +The methods of the `$I` object are taken from the [PhpBrowser Module](http://codeception.com/docs/modules/PhpBrowser). We will briefly describe them here: + +```php +amOnPage('/login'); +``` + +We will assume that all actions starting with `am` and `have` describe the initial environment. +The `amOnPage` action sets the starting point of a test to the `/login` page. + +With the `PhpBrowser` you can click the links and fill in the forms. That will probably be the majority of your actions. + +#### Click + +Emulates a click on valid anchors. The URL referenced in the `href` attribute will be opened. +As a parameter, you can specify the link name or a valid CSS or XPath selector. + +```php +click('Log in'); +// CSS selector applied +$I->click('#login a'); +// XPath +$I->click('//a[@id=login]'); +// Using context as second argument +$I->click('Login', '.nav'); +``` + +Codeception tries to locate an element by its text, name, CSS or XPath. +You can specify the locator type manually by passing an array as a parameter. We call this a **strict locator**. +Available strict locator types are: + +* id +* name +* css +* xpath +* link +* class + +```php +click(['link' => 'Login']); +$I->click(['class' => 'btn']); +``` + +There is a special class [`Codeception\Util\Locator`](http://codeception.com/docs/reference/Locator) +which may help you to generate complex XPath locators. +For instance, it can easily allow you to click an element on the last row of a table: + +```php +$I->click('Edit' , \Codeception\Util\Locator::elementAt('//table/tr', -1)); +``` + +#### Forms + +Clicking links is probably not what takes the most time during the testing of a website. +The most routine waste of time goes into the testing of forms. Codeception provides several ways of testing forms. + +Let's submit this sample form inside the Codeception test: + +```html +
    + + + + + + + + +``` + +From a user's perspective, a form consists of fields which should be filled in, and then a submit button clicked: + +```php +fillField('Name', 'Miles'); +// we can use input name or id +$I->fillField('user[email]','miles@davis.com'); +$I->selectOption('Gender','Male'); +$I->click('Update'); +``` + +To match fields by their labels, you should write a `for` attribute in the `label` tag. + +From the developer's perspective, submitting a form is just sending a valid POST request to the server. +Sometimes it's easier to fill in all of the fields at once and send the form without clicking a 'Submit' button. +A similar scenario can be rewritten with only one command: + +```php +submitForm('#update_form', array('user' => array( + 'name' => 'Miles', + 'email' => 'Davis', + 'gender' => 'm' +))); +``` + +The `submitForm` is not emulating a user's actions, but it's quite useful +in situations when the form is not formatted properly, for example, to discover that labels aren't set +or that fields have unclean names or badly written IDs, or the form is sent by a JavaScript call. + +By default, `submitForm` doesn't send values for buttons. The last parameter allows specifying +what button values should be sent, or button values can be explicitly specified in the second parameter: + +```php +submitForm('#update_form', array('user' => array( + 'name' => 'Miles', + 'email' => 'Davis', + 'gender' => 'm' +)), 'submitButton'); +// this would have the same effect, but the value has to be explicitly specified +$I->submitForm('#update_form', array('user' => array( + 'name' => 'Miles', + 'email' => 'Davis', + 'gender' => 'm', + 'submitButton' => 'Update' +))); +``` + +#### Assertions + +In the `PhpBrowser` you can test the page contents. +In most cases, you just need to check that the required text or element is on the page. + +The most useful method for this is `see()`: + +```php +see('Thank you, Miles'); +// We check that 'Thank you, Miles' is inside an element with 'notice' class. +$I->see('Thank you, Miles', '.notice'); +// Or using XPath locators +$I->see('Thank you, Miles', "//table/tr[2]"); +// We check this message is *not* on the page. +$I->dontSee('Form is filled incorrectly'); +``` + +You can check that a specific HTML element exists (or doesn't) on a page: + +```php +seeElement('.notice'); +$I->dontSeeElement('.error'); +``` + +We also have other useful commands to perform checks. Please note that they all start with the `see` prefix: + +```php +seeInCurrentUrl('/user/miles'); +$I->seeCheckboxIsChecked('#agree'); +$I->seeInField('user[name]', 'Miles'); +$I->seeLink('Login'); +``` + +#### Conditional Assertions + +Usually, as soon as any assertion fails, further assertions of this test will be skipped. +Sometimes you don't want this - maybe you have a long-running test and you want it to run to the end. +In this case, you can use conditional assertions. +Each `see` method has a corresponding `canSee` method, and `dontSee` has a `cantSee` method: + +```php +canSeeInCurrentUrl('/user/miles'); +$I->canSeeCheckboxIsChecked('#agree'); +$I->cantSeeInField('user[name]', 'Miles'); +``` + +Each failed assertion will be shown in the test results, but it won't stop the test. + +#### Comments + +Within a long scenario, you should describe what actions you are going to perform and what results should be achieved. +Comment methods like `amGoingTo`, `expect`, `expectTo` help you in making tests more descriptive: + +```php +amGoingTo('submit user form with invalid values'); +$I->fillField('user[email]', 'miles'); +$I->click('Update'); +$I->expect('the form is not submitted'); +$I->see('Form is filled incorrectly'); +``` + +#### Grabbers + +These commands retrieve data that can be used in the test. Imagine your site generates a password for every user +and you want to check that the user can log into the site using this password: + +```php +fillField('email', 'miles@davis.com') +$I->click('Generate Password'); +$password = $I->grabTextFrom('#password'); +$I->click('Login'); +$I->fillField('email', 'miles@davis.com'); +$I->fillField('password', $password); +$I->click('Log in!'); +``` + +Grabbers allow you to get a single value from the current page with commands: + +```php +grabTextFrom('.token'); +$password = $I->grabTextFrom("descendant::input/descendant::*[@id = 'password']"); +$api_key = $I->grabValueFrom('input[name=api]'); +``` + +#### Cookies, URLs, Title, etc + +Actions for cookies: + +```php +setCookie('auth', '123345'); +$I->grabCookie('auth'); +$I->seeCookie('auth'); +``` + +Actions for checking the page title: + +```php +seeInTitle('Login'); +$I->dontSeeInTitle('Register'); +``` + +Actions for URLs: + +```php +seeCurrentUrlEquals('/login'); +$I->seeCurrentUrlMatches('~$/users/(\d+)~'); +$I->seeInCurrentUrl('user/1'); +$user_id = $I->grabFromCurrentUrl('~$/user/(\d+)/~'); +``` + +## WebDriver + +A nice feature of Codeception is that most scenarios are similar, no matter of how they are executed. +`PhpBrowser` was emulating browser requests but how to execute such test in a real browser like Chrome or Firefox? +Selenium WebDriver can drive them so in our acceptance tests we can automate scenarios we used to test manually. +In such tests, we should concentrate more on **testing the UI** than on testing functionality. + +"[WebDriver](https://www.w3.org/TR/webdriver/)" is the name of a protocol (specified by W3C) +to drive browsers automatically. This specification is implemented for all modern desktop and mobile browsers. +Codeception uses [facebook/php-webdriver](https://github.com/facebook/php-webdriver) library from Facebook as PHP implementation of WebDriver protocol. + +To control the browsers you need to use a program or a service to start/stop browser sessions. +In the next section, we will overview the most popular solutions. + +### Local Setup + +#### Selenium Server + +[Selenium Server](http://www.seleniumhq.org/) is a de-facto standard for automated web and mobile testing. +It is a server that can launch and drive different browsers locally or remotely. +WebDriver protocol was initially created by Selenium before becoming a W3C standard. +This makes Selenium server the most stable complete implementation of WebDriver for today. +Selenium Server is also recommended by Codeception team. + +To control browsers Selenium Server uses official tools maintained by browser vendors, like [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver) for Chrome or [GeckoDriver](https://github.com/mozilla/geckodriver) for Firefox. +This makes Selenium quite heavy to install, as it requires Java, browsers, Chrome or GeckoDriver and GUI (display server) to run browsers in. + +* Follow [Installation Instructions](http://codeception.com/docs/modules/WebDriver#Selenium) +* Enable [RunProcess](http://codeception.com/extensions#RunProcess) extension to start/stop Selenium automatically *(optional)*. + +#### PhantomJS + +PhantomJS is a customized WebKit-based [headless browser](https://en.wikipedia.org/wiki/Headless_browser) +built for programmatic usage only. It doesn't display a browser window and doesn't require GUI (display server) to be installed. +This makes PhantomJS highly popular for Continuous Integration systems. +PhantomJS needs only one binary with no extra dependencies which make it the simplest WebDriver tool to install. + +However, it should be noted that PhantomJS is not a real browser, so the behavior and output in real browsers may differ from PhantomJS. +And the most important: **PhantomJS is not maintained** anymore. So use it at your own risk. + +* Follow [Installation Instructions](http://codeception.com/docs/modules/WebDriver#PhantomJS) +* Enable [RunProcess](http://codeception.com/extensions#RunProcess) extension to start/stop PhantomJS automatically *(optional)*. + +#### ChromeDriver + +ChromeDriver was created by Google to control Chrome and Chromium browsers programmatically. +It can be paired with [Selenium Server](http://codeception.com/docs/03-AcceptanceTests#Selenium-Server) or used as a standalone tool to drive Chrome browser. +It is simpler to set up than Selenium Server, however, it has limited support for WebDriver protocol. + +* Follow [Installation Instructions](http://codeception.com/docs/modules/WebDriver#ChromeDriver) +* Enable [RunProcess](http://codeception.com/extensions#RunProcess) extension to start/stop ChromeDriver automatically *(optional)*. + +### Configuration + +To execute a test in a browser we need to change the suite configuration to use **WebDriver** instead of `PhpBrowser`. + +Modify your `acceptance.suite.yml` file: + +```yaml +actor: AcceptanceTester +modules: + enabled: + - WebDriver: + url: {{your site URL}} + browser: chrome + - \Helper\Acceptance +``` + +See [WebDriver Module](http://codeception.com/docs/modules/WebDriver) for details. + +Please note that actions executed in a browser will behave differently. For instance, `seeElement` won't just check that the element exists on a page, +but it will also check that element is actually visible to the user: + +```php +seeElement('#modal'); +``` + +While WebDriver duplicates the functionality of PhpBrowser, it has its limitations: It can't check headers since browsers don't provide APIs for that. +WebDriver also adds browser-specific functionality: + +#### Wait + +While testing web application, you may need to wait for JavaScript events to occur. Due to its asynchronous nature, +complex JavaScript interactions are hard to test. That's why you may need to use waiters, actions with `wait` prefix. +They can be used to specify what event you expect to occur on a page, before continuing the test. + +For example: + +```php +waitForElement('#agree_button', 30); // secs +$I->click('#agree_button'); +``` + +In this case, we are waiting for the 'agree' button to appear and then click it. If it didn't appear after 30 seconds, +the test will fail. There are other `wait` methods you may use, like [waitForText](http://codeception.com/docs/modules/WebDriver#waitForText), +[waitForElementVisible](http://codeception.com/docs/modules/WebDriver#waitForElementVisible) and others. + +If you don't know what exact element you need to wait for, you can simply pause execution with using `$I->wait()` + +```php +wait(3); // wait for 3 secs +``` + +#### SmartWait + +*since 2.3.4 version* + +It is possible to wait for elements pragmatically. +If a test uses element which is not on a page yet, Codeception will wait for few extra seconds before failing. +This feature is based on [Implicit Wait](http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp#implicit-waits) of Selenium. +Codeception enables implicit wait only when searching for a specific element and disables in all other cases. Thus, the performance of a test is not affected. + +SmartWait can be enabled by setting `wait` option in WebDriver config. It expects the number of seconds to wait. Example: + +```yaml +wait: 5 +``` + +With this config we have the following test: + +```php +waitForElement(['css' => '#click-me'], 5); +// to wait for element on page +$I->click(['css' => '#click-me']); +``` + +It is important to understand that SmartWait works only with a specific locators: + +* `#locator` - CSS ID locator, works +* `//locator` - general XPath locator, works +* `['css' => 'button'']` - strict locator, works + +But it won't be executed for all other locator types. +See the example: + +```php +click('Login'); // DISABLED, not a specific locator +$I->fillField('user', 'davert'); // DISABLED, not a specific locator +$I->fillField(['name' => 'password'], '123456'); // ENABLED, strict locator +$I->click('#login'); // ENABLED, locator is CSS ID +$I->see('Hello, Davert'); // DISABLED, Not a locator +$I->seeElement('#userbar'); // ENABLED +$I->dontSeeElement('#login'); // DISABLED, can't wait for element to hide +$I->seeNumberOfElements(['css' => 'button.link'], 5); // DISABLED, can wait only for one element +``` + +#### Wait and Act + +To combine `waitForElement` with actions inside that element you can use the [performOn](http://codeception.com/docs/modules/WebDriver#performOn) method. +Let's see how you can perform some actions inside an HTML popup: + +```php +performOn('.confirm', \Codeception\Util\ActionSequence::build() + ->see('Warning') + ->see('Are you sure you want to delete this?') + ->click('Yes') +); +``` +Alternatively, this can be executed using a callback, in this case the `WebDriver` instance is passed as argument + +```php +performOn('.confirm', function(\Codeception\Module\WebDriver $I) { + $I->see('Warning'); + $I->see('Are you sure you want to delete this?'); + $I->click('Yes'); +}); +``` + +For more options see [`performOn()` reference](http://codeception.com/docs/modules/WebDriver#performOn). + +### Multi Session Testing + +Codeception allows you to execute actions in concurrent sessions. The most obvious case for this +is testing realtime messaging between users on a site. In order to do it, you will need to launch two browser windows +at the same time for the same test. Codeception has a very smart concept for doing this. It is called **Friends**: + +```php +amOnPage('/messages'); +$nick = $I->haveFriend('nick'); +$nick->does(function(AcceptanceTester $I) { + $I->amOnPage('/messages/new'); + $I->fillField('body', 'Hello all!'); + $I->click('Send'); + $I->see('Hello all!', '.message'); +}); +$I->wait(3); +$I->see('Hello all!', '.message'); +``` + +In this case, we performed, or 'did', some actions in the second window with the `does` method on a friend object. + +Sometimes you may want to close a webpage before the end of the test. For such cases, you may use `leave()`. +You can also specify roles for a friend: + +```php +haveFriend('nickAdmin', adminStep::class); +$nickAdmin->does(function(adminStep $I) { + // Admin does ... +}); +$nickAdmin->leave(); +``` + +### Cloud Testing + +Some environments are hard to be reproduced manually, testing Internet Explorer 6-8 on Windows XP may be a hard thing, +especially if you don't have Windows XP installed. This is where Cloud Testing services come to help you. +Services such as [SauceLabs](https://saucelabs.com), [BrowserStack](https://www.browserstack.com/) +and [others](http://codeception.com/docs/modules/WebDriver#Cloud-Testing) can create virtual machines on demand +and set up Selenium Server and the desired browser. Tests are executed on a remote machine in a cloud, +to access local files cloud testing services provide a special application called **Tunnel**. +Tunnel operates on a secured protocol and allows browsers executed in a cloud to connect to a local web server. + +Cloud Testing services work with the standard WebDriver protocol. This makes setting up cloud testing really easy. +You just need to set the [WebDriver configuration](http://codeception.com/docs/modules/WebDriver#Cloud-Testing) to: + +* specify the host to connect to (depends on the cloud provider) +* authentication details (to use your account) +* browser +* OS + +We recommend using [params](http://codeception.com/docs/06-ModulesAndHelpers#Dynamic-Configuration-With-Params) +to provide authorization credentials. + +It should be mentioned that Cloud Testing services are not free. You should investigate their pricing models +and choose one that fits your needs. They also may work painfully slowly if ping times between the local server +and the cloud is too high. This may lead to random failures in acceptance tests. + +### AngularJS Testing + +In the modern era of Single Page Applications, the browser replaces the server in creating the user interface. +Unlike traditional web applications, web pages are not reloaded on user actions. +All interactions with the server are done in JavaScript with XHR requests. +However, testing Single Page Applications can be a hard task. +There could be no information of the application state: e.g. has it completed rendering or not? +What is possible to do in this case is to use more `wait*` methods or execute JavaScript that checks the application state. + +For applications built with the AngularJS v1.x framework, +we implemented [AngularJS module](http://codeception.com/docs/modules/AngularJS) which is based on Protractor +(an official tool for testing Angular apps). Under the hood, it pauses step execution +before the previous actions are completed and use the AngularJS API to check the application state. + +The AngularJS module extends WebDriver so that all the configuration options from it are available. + +### Debugging + +Codeception modules can print valuable information while running. +Just execute tests with the `--debug` option to see running details. For any custom output use the `codecept_debug` function: + +```php +grabTextFrom('#name')); +``` + +On each failure, the snapshot of the last shown page will be stored in the `tests/_output` directory. +PhpBrowser will store the HTML code and WebDriver will save a screenshot of the page. + +Additional debugging features by Codeception: + +* [pauseExecution](http://codeception.com/docs/modules/WebDriver#pauseExecution) method of WebDriver module allows pausing the test. +* [Recorder extension](http://codeception.com/addons#CodeceptionExtensionRecorder) allows to record tests step-by-steps and show them in slideshow +* [Interactive Console](http://codeception.com/docs/07-AdvancedUsage#Interactive-Console) is a REPL that allows to type and check commands for instant feedback. + +### Custom Browser Sessions + +By default, WebDriver module is configured to automatically start browser before the test and stop afterward. +However, this can be switched off with `start: false` module configuration. +To start a browser you will need to write corresponding methods in Acceptance [Helper](http://codeception.com/docs/06-ModulesAndHelpers#Helpers). + +WebDriver module provides advanced methods for the browser session, however, they can only be used from Helpers. + +* [_initializeSession](http://codeception.com/docs/modules/WebDriver#_initializeSession) - starts a new browser session +* [_closeSession](http://codeception.com/docs/modules/WebDriver#_closeSession) - stops the browser session +* [_restart](http://codeception.com/docs/modules/WebDriver#_restart) - updates configuration and restarts browser +* [_capabilities](http://codeception.com/docs/modules/WebDriver#_capabilities) - set [desired capabilities](https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities) programmatically. + +Those methods can be used to create custom commands like `$I->startBrowser()` or used in [before/after](http://codeception.com/docs/06-ModulesAndHelpers#Hooks) hooks. + +## Conclusion + +Writing acceptance tests with Codeception and PhpBrowser is a good start. +You can easily test your Joomla, Drupal, WordPress sites, as well as those made with frameworks. +Writing acceptance tests is like describing a tester's actions in PHP. They are quite readable and very easy to write. +If you need to access the database, you can use the [Db Module](http://codeception.com/docs/modules/Db). diff --git a/vendor/codeception/codeception/docs/04-FunctionalTests.md b/vendor/codeception/codeception/docs/04-FunctionalTests.md new file mode 100644 index 000000000..5e0f40f07 --- /dev/null +++ b/vendor/codeception/codeception/docs/04-FunctionalTests.md @@ -0,0 +1,274 @@ +# Functional Tests + +Now that we've written some acceptance tests, functional tests are almost the same, with one major difference: +Functional tests don't require a web server. + +In simple terms we set the `$_REQUEST`, `$_GET` and `$_POST` variables and then we execute the application from a test. +This may be valuable, as functional tests are faster and provide detailed stack traces on failures. + +Codeception can connect to different PHP frameworks that support functional testing: Symfony2, Laravel5, Yii2, +Zend Framework and others. You just need to enable the desired module in your functional suite configuration to start. + +Modules for all of these frameworks share the same interface, and thus your tests are not bound to any one of them. +This is a sample functional test: + +```php +amOnPage('/'); + $I->click('Login'); + $I->fillField('Username', 'Miles'); + $I->fillField('Password', 'Davis'); + $I->click('Enter'); + $I->see('Hello, Miles', 'h1'); + // $I->seeEmailIsSent(); // only for Symfony2 + } +} +``` + +As you see, the syntax is the same for functional and acceptance tests. + +## Limitations + +Functional tests are usually much faster than acceptance tests. But functional tests are less stable as they run Codeception +and the application in one environment. If your application was not designed to run in long lived processes (e.g. +if you use the `exit` operator or global variables), then functional tests are probably not for you. + +### Headers, Cookies, Sessions + +One of the common issues with functional tests is the use of PHP functions that deal with headers, sessions and cookies. +As you may already know, the `header` function triggers an error if it is executed after PHP has already output something. +In functional tests we run the application multiple times, thus we will get lots of irrelevant errors in the result. + +### External URL's + +Functional tests cannot access external URL's, just URL's within your project. You can use Guzzle to open external URL's. + +### Shared Memory + +In functional testing, unlike running the application the traditional way, the PHP application does not stop +after it has finished processing a request. Since all requests are run in one memory container, they are not isolated. +So **if you see that your tests are mysteriously failing when they shouldn't - try to execute a single test.** +This will show if the tests were failing because they weren't isolated during the run. +Keep your memory clean, avoid memory leaks and clean global and static variables. + +## Enabling Framework Modules + +You have a functional testing suite in the `tests/functional` directory. +To start, you need to include one of the framework modules in the suite configuration file: `tests/functional.suite.yml`. + +### Symfony + +To perform Symfony integration you just need to include the Symfony module into your test suite. If you also use Doctrine2, +don't forget to include it too. To make the Doctrine2 module connect using the `doctrine` service from Symfony, +you should specify the Symfony module as a dependency for Doctrine2: + +```yaml +# functional.suite.yml + +actor: FunctionalTester +modules: + enabled: + - Symfony + - Doctrine2: + depends: Symfony # connect to Symfony + - \Helper\Functional +``` + +By default this module will search for AppKernel in the `app` directory. + +The module uses the Symfony Profiler to provide additional information and assertions. + +[See the full reference](http://codeception.com/docs/modules/Symfony) + +### Laravel5 + +The [Laravel5](http://codeception.com/docs/modules/Laravel5) module is included and requires no configuration: + +```yaml +# functional.suite.yml + +actor: FunctionalTester +modules: + enabled: + - Laravel5 + - \Helper\Functional +``` + +### Yii2 + +Yii2 tests are included in [Basic](https://github.com/yiisoft/yii2-app-basic) +and [Advanced](https://github.com/yiisoft/yii2-app-advanced) application templates. Follow the Yii2 guides to start. + +### Yii + +By itself Yii framework does not have an engine for functional testing. +So Codeception is the first and the only functional testing framework for Yii. +To use it with Yii include `Yii1` module into config: + +```yaml +# functional.suite.yml + +actor: FunctionalTester +modules: + enabled: + - Yii1 + - \Helper\Functional +``` + +To avoid the common pitfalls we discussed earlier, Codeception provides basic hooks over the Yii engine. +Please set them up following [the installation steps in the module reference](http://codeception.com/docs/modules/Yii1). + +### Zend Framework 2 + +Use [the ZF2 module](http://codeception.com/docs/modules/ZF2) to run functional tests inside Zend Framework 2: + +```yaml +# functional.suite.yml + +actor: FunctionalTester +modules: + enabled: + - ZF2 + - \Helper\Functional +``` + +### Zend Framework 1.x + +The module for Zend Framework is highly inspired by the ControllerTestCase class, used for functional testing with PHPUnit. +It follows similar approaches for bootstrapping and cleaning up. +To start using Zend Framework in your functional tests, include the `ZF1` module: + +```yaml +# functional.suite.yml + +actor: FunctionalTester +modules: + enabled: + - ZF1 + - \Helper\Functional +``` + +[See the full reference](http://codeception.com/docs/modules/ZF1) + +### Phalcon + +The `Phalcon` module requires creating a bootstrap file which returns an instance of `\Phalcon\Mvc\Application`. +To start writing functional tests with Phalcon support you should enable the `Phalcon` module +and provide the path to this bootstrap file: + +```yaml +# functional.suite.yml + +actor: FunctionalTester +modules: + enabled: + - Phalcon: + bootstrap: 'app/config/bootstrap.php' + cleanup: true + savepoints: true + - \Helper\Functional +``` + +[See the full reference](http://codeception.com/docs/modules/Phalcon) + +## Writing Functional Tests + +Functional tests are written in the same manner as [Acceptance Tests](http://codeception.com/docs/03-AcceptanceTests) +with the `PhpBrowser` module enabled. All framework modules and the `PhpBrowser` module share the same methods +and the same engine. + +Therefore we can open a web page with `amOnPage` method: + +```php +amOnPage('/login'); +``` + +We can click links to open web pages: + +```php +click('Logout'); +// click link inside .nav element +$I->click('Logout', '.nav'); +// click by CSS +$I->click('a.logout'); +// click with strict locator +$I->click(['class' => 'logout']); +``` + +We can submit forms as well: + +```php +submitForm('form#login', ['name' => 'john', 'password' => '123456']); +// alternatively +$I->fillField('#login input[name=name]', 'john'); +$I->fillField('#login input[name=password]', '123456'); +$I->click('Submit', '#login'); +``` + +And do assertions: + +```php +see('Welcome, john'); +$I->see('Logged in successfully', '.notice'); +$I->seeCurrentUrlEquals('/profile/john'); +``` + +Framework modules also contain additional methods to access framework internals. For instance, Laravel5, Phalcon, +and Yii2 modules have a `seeRecord` method which uses the ActiveRecord layer to check that a record exists in the database. + +Take a look at the complete reference for the module you are using. Most of its methods are common to all modules +but some of them are unique. + +You can also access framework globals inside a test or access the dependency injection container +inside the `Helper\Functional` class: + +```php +getModule('Symfony')->grabServiceFromContainer('myservice'); + $service->doSomething(); + } +} +``` + +Also check all available *Public Properties* of the used modules to get full access to their data. + +## Error Reporting + +By default Codeception uses the `E_ALL & ~E_STRICT & ~E_DEPRECATED` error reporting level. +In functional tests you might want to change this level depending on your framework's error policy. +The error reporting level can be set in the suite configuration file: + +```yaml +actor: FunctionalTester +modules: + enabled: + - Yii1 + - \Helper\Functional +error_level: "E_ALL & ~E_STRICT & ~E_DEPRECATED" +``` + +`error_level` can also be set globally in `codeception.yml` file. + +## Conclusion + +Functional tests are great if you are using powerful frameworks. By using functional tests you can access +and manipulate their internal state. This makes your tests shorter and faster. In other cases, +if you don't use frameworks there is no practical reason to write functional tests. +If you are using a framework other than the ones listed here, create a module for it and share it with the community. diff --git a/vendor/codeception/codeception/docs/05-UnitTests.md b/vendor/codeception/codeception/docs/05-UnitTests.md new file mode 100644 index 000000000..2b05f856b --- /dev/null +++ b/vendor/codeception/codeception/docs/05-UnitTests.md @@ -0,0 +1,473 @@ +# Unit & Integration Tests + +Codeception uses PHPUnit as a backend for running its tests. Thus, any PHPUnit test can be added to a Codeception test suite +and then executed. If you ever wrote a PHPUnit test then do it just as you did before. +Codeception adds some nice helpers to simplify common tasks. + +## Creating a Test + +Create a test using `generate:test` command with a suite and test names as parameters: + +```bash +php codecept generate:test unit Example +``` + +It creates a new `ExampleTest` file located in the `tests/unit` directory. + +As always, you can run the newly created test with this command: + +```bash +php codecept run unit ExampleTest +``` + +Or simply run the whole set of unit tests with: + +```bash +php codecept run unit +``` + +A test created by the `generate:test` command will look like this: + +```php +username = null; + $this->assertFalse($user->validate(['username'])); + + $user->username = 'toolooooongnaaaaaaameeee'; + $this->assertFalse($user->validate(['username'])); + + $user->username = 'davert'; + $this->assertTrue($user->validate(['username'])); + } +} +``` + +### Assertions + +There are pretty much assertions you can use inside tests. The most common are: + +* `$this->assertEquals()` +* `$this->assertContains()` +* `$this->assertFalse()` +* `$this->assertTrue()` +* `$this->assertNull()` +* `$this->assertEmpty()` + +Assertion methods come from PHPUnit. [See the complete reference at phpunit.de](https://phpunit.de/manual/current/en/appendixes.assertions.html). + +### Test Doubles + +Codeception provides [Codeception\Stub library](https://github.com/Codeception/Stub) for building mocks and stubs for tests. +Under the hood it used PHPUnit's mock builder but with much simplified API. + +Alternatively, [Mockery](https://github.com/Codeception/MockeryModule) can be used inside Codeception. + +#### Stubs + +Stubs can be created with a static methods of `Codeception\Stub`. + +```php + 'john']); +$name = $user->getName(); // 'john' +``` + +[See complete reference](http://codeception.com/docs/reference/Mock) + +Inside unit tests (`Codeception\Test\Unit`) it is recommended to use alternative API: + +```php +make(UserRepository::class, ['find' => new User]); +$userRepository->find(1); // => User + +// create a dummy +$userRepository = $this->makeEmpty(UserRepository::class); + +// create a stub with all methods replaced except one +$user = $this->makeEmptyExcept(User::class, 'validate'); +$user->validate($data); + +// create a stub by calling constructor and replacing a method +$user = $this->construct(User::class, ['name' => 'davert'], ['save' => false]); + +// create a stub by calling constructor with empty methods +$user = $this->constructEmpty(User::class, ['name' => 'davert']); + +// create a stub by calling constructor with empty methods +$user = $this->constructEmptyExcept(User::class, 'getName', ['name' => 'davert']); +$user->getName(); // => davert +$user->setName('jane'); // => this method is empty +``` + +[See complete reference](http://codeception.com/docs/reference/Mock) + +Stubs can also be created using static methods from `Codeception\Stub` class. +In this + +```php + new User]); +``` + +See a reference for static Stub API + +#### Mocks + +To declare expectations for mocks use `Codeception\Stub\Expected` class: + +```php +getName() should never be called +$user = $this->make('User', [ + 'getName' => Expected::never(), + 'someMethod' => function() {} +]); +$user->someMethod(); + +// create a mock where $user->getName() should be called at least once +$user = $this->make('User', [ + 'getName' => Expected::atLeastOnce('Davert') + ] +); +$user->getName(); +$userName = $user->getName(); +$this->assertEquals('Davert', $userName); +``` + +[See complete reference](http://codeception.com/docs/reference/Mock) + +## Integration Tests + +Unlike unit tests integration tests doesn't require the code to be executed in isolation. +That allows us to use database and other components inside a tests. +To improve the testing experience modules can be used as in functional testing. + +### Using Modules + +As in scenario-driven functional or acceptance tests you can access Actor class methods. +If you write integration tests, it may be useful to include the `Db` module for database testing. + +```yaml +# Codeception Test Suite Configuration + +# suite for unit (internal) tests. +actor: UnitTester +modules: + enabled: + - Asserts + - Db + - \Helper\Unit +``` + +To access UnitTester methods you can use the `UnitTester` property in a test. + +### Testing Database + +Let's see how you can do some database testing: + +```php +setName('Miles'); + $user->setSurname('Davis'); + $user->save(); + $this->assertEquals('Miles Davis', $user->getFullName()); + $this->tester->seeInDatabase('users', ['name' => 'Miles', 'surname' => 'Davis']); +} +``` + +To enable the database functionality in unit tests, make sure the `Db` module is included +in the `unit.suite.yml` configuration file. +The database will be cleaned and populated after each test, the same way it happens for acceptance and functional tests. +If that's not your required behavior, change the settings of the `Db` module for the current suite. See [Db Module](http://codeception.com/docs/modules/Db) + +### Interacting with the Framework + +You should probably not access your database directly if your project already uses ORM for database interactions. +Why not use ORM directly inside your tests? Let's try to write a test using Laravel's ORM Eloquent. +For this we need to configure the Laravel5 module. We won't need its web interaction methods like `amOnPage` or `see`, +so let's enable only the ORM part of it: + +```yaml +actor: UnitTester +modules: + enabled: + - Asserts + - Laravel5: + part: ORM + - \Helper\Unit +``` + +We included the Laravel5 module the same way we did for functional testing. +Let's see how we can use it for integration tests: + +```php +tester->haveRecord('users', ['name' => 'miles']); + // access model + $user = User::find($id); + $user->setName('bill'); + $user->save(); + $this->assertEquals('bill', $user->getName()); + // verify data was saved using framework methods + $this->tester->seeRecord('users', ['name' => 'bill']); + $this->tester->dontSeeRecord('users', ['name' => 'miles']); +} +``` + +A very similar approach can be used for all frameworks that have an ORM implementing the ActiveRecord pattern. +In Yii2 and Phalcon, the methods `haveRecord`, `seeRecord`, `dontSeeRecord` work in the same way. +They also should be included by specifying `part: ORM` in order to not use the functional testing actions. + +If you are using Symfony with Doctrine, you don't need to enable Symfony itself but just Doctrine2: + +```yaml +actor: UnitTester +modules: + enabled: + - Asserts + - Doctrine2: + depends: Symfony + - \Helper\Unit +``` + +In this case you can use the methods from the Doctrine2 module, while Doctrine itself uses the Symfony module +to establish connections to the database. In this case a test might look like: + +```php +tester->haveInRepository(User::class, ['name' => 'miles']); + // get entity manager by accessing module + $em = $this->getModule('Doctrine2')->em; + // get real user + $user = $em->find(User::class, $id); + $user->setName('bill'); + $em->persist($user); + $em->flush(); + $this->assertEquals('bill', $user->getName()); + // verify data was saved using framework methods + $this->tester->seeInRepository(User::class, ['name' => 'bill']); + $this->tester->dontSeeInRepository(User::class, ['name' => 'miles']); +} +``` + +In both examples you should not be worried about the data persistence between tests. +The Doctrine2 and Laravel5 modules will clean up the created data at the end of a test. +This is done by wrapping each test in a transaction and rolling it back afterwards. + +### Accessing Module + +Codeception allows you to access the properties and methods of all modules defined for this suite. +Unlike using the UnitTester class for this purpose, using a module directly grants you access +to all public properties of that module. + +We have already demonstrated this in a previous example where we accessed the Entity Manager from a Doctrine2 module: + +```php +getModule('Doctrine2')->em; +``` + +If you use the `Symfony` module, here is how you can access the Symfony container: + +```php +getModule('Symfony')->container; +``` + +The same can be done for all public properties of an enabled module. Accessible properties are listed in the module reference. + +### Scenario Driven Testing + +[Cest format](http://codeception.com/docs/07-AdvancedUsage#Cest-Classes) can also be used for integration testing. +In some cases it makes tests cleaner as it simplifies module access by using common `$I->` syntax: + +```php +have(Build::class, ['project_id' => $this->project->id]); + $I->assertEquals(1, $build->sequence); + $build = $I->have(Build::class, ['project_id' => $this->project->id]); + $I->assertEquals(2, $build->sequence); + $this->project->refresh(); + $I->assertEquals(3, $this->project->build_sequence); +} +``` +This format can be recommended for testing domain and database interactions. + +In Cest format you don't have native support for test doubles so it's recommended +to include a trait `\Codeception\Test\Feature\Stub` to enable mocks inside a test. +Alternatively, install and enable [Mockery module](https://github.com/Codeception/MockeryModule). + +## Advanced Tools + +### Specify + +When writing tests you should prepare them for constant changes in your application. +Tests should be easy to read and maintain. If a specification of your application is changed, +your tests should be updated as well. If you don't have a convention inside your team for documenting tests, +you will have issues figuring out what tests will be affected by the introduction of a new feature. + +That's why it's pretty important not just to cover your application with unit tests, but make unit tests self-explanatory. +We do this for scenario-driven acceptance and functional tests, and we should do this for unit and integration tests as well. + +For this case we have a stand-alone project [Specify](https://github.com/Codeception/Specify) +(which is included in the phar package) for writing specifications inside unit tests: + +```php +user = User::create(); + + $this->specify("username is required", function() { + $this->user->username = null; + $this->assertFalse($this->user->validate(['username'])); + }); + + $this->specify("username is too long", function() { + $this->user->username = 'toolooooongnaaaaaaameeee'; + $this->assertFalse($this->user->validate(['username'])); + }); + + $this->specify("username is ok", function() { + $this->user->username = 'davert'; + $this->assertTrue($this->user->validate(['username'])); + }); + } +} +``` + +By using `specify` codeblocks, you can describe any piece of a test. +This makes tests much cleaner and comprehensible for everyone in your team. + +Code inside `specify` blocks is isolated. In the example above, any changes to `$this->user` +will not be reflected in other code blocks as it is marked with `@specify` annotation. + +Also, you may add [Codeception\Verify](https://github.com/Codeception/Verify) for BDD-style assertions. +This tiny library adds more readable assertions, which is quite nice, if you are always confused +about which argument in `assert` calls is expected and which one is actual: + +```php +getName())->equals('john'); +``` + +### Domain Assertions + +The more complicated your domain is the more explicit your tests should be. With [DomainAssert](https://github.com/Codeception/DomainAssert) +library you can easily create custom assertion methods for unit and integration tests. + +It allows to reuse business rules inside assertion methods: + +```php +assertUserIsValid($user); +$this->assertUserIsAdmin($user); + +// use combined explicit assertion +// to tell what you expect to check +$this->assertUserCanPostToBlog($user, $blog); +// instead of just calling a bunch of assertions +$this->assertNotNull($user); +$this->assertNotNull($blog); +$this->assertContain($user, $blog->getOwners()); +``` + +With custom assertion methods you can improve readability of your tests and keep them focused around the specification. + +### AspectMock + +[AspectMock](https://github.com/Codeception/AspectMock) is an advanced mocking framework which allows you to replace any methods of any class in a test. +Static methods, class methods, date and time functions can be easily replaced with AspectMock. +For instance, you can test singletons! + +```php +assertInstanceOf('MySingleton', $class); + test::double('MySingleton', ['getInstance' => new DOMDocument]); + $this->assertInstanceOf('DOMDocument', $class); +} +``` + +* [AspectMock on GitHub](https://github.com/Codeception/AspectMock) +* [AspectMock in Action](http://codeception.com/07-31-2013/nothing-is-untestable-aspect-mock.html) +* [How it Works](http://codeception.com/09-13-2013/understanding-aspectmock.html) + +## Conclusion + +PHPUnit tests are first-class citizens in test suites. Whenever you need to write and execute unit tests, +you don't need to install PHPUnit seperately, but use Codeception directly to execute them. +Some nice features can be added to common unit tests by integrating Codeception modules. +For most unit and integration testing, PHPUnit tests are enough. They run fast, and are easy to maintain. diff --git a/vendor/codeception/codeception/docs/06-ModulesAndHelpers.md b/vendor/codeception/codeception/docs/06-ModulesAndHelpers.md new file mode 100644 index 000000000..052a24403 --- /dev/null +++ b/vendor/codeception/codeception/docs/06-ModulesAndHelpers.md @@ -0,0 +1,518 @@ +# Modules and Helpers + +Codeception uses modularity to create a comfortable testing environment for every test suite you write. + +All actions and assertions that can be performed by the Tester object in a class are defined in modules. +You can extend the testing suite with your own actions and assertions by writing them into a custom module. + +Let's look at the following test: + +```php +amOnPage('/'); +$I->see('Hello'); +$I->seeInDatabase('users', array('id' => 1)); +$I->seeFileFound('running.lock'); +``` + +It can operate with different entities: the web page can be loaded with the PhpBrowser module, +the database assertion uses the Db module, and file state can be checked with the Filesystem module. + +Modules are attached to the Actor classes in the suite configuration. +For example, in `tests/functional.suite.yml` we should see: + +```yaml +actor: FunctionalTester +modules: + enabled: + - PhpBrowser: + url: http://localhost + - Db: + dsn: "mysql:host=localhost;dbname=testdb" + - Filesystem +``` + +The FunctionalTester class has its methods defined in modules. Actually, it doesn't contain any of them, +but rather acts as a proxy. It knows which module executes this action and passes parameters into it. +To make your IDE see all of the FunctionalTester methods, you should run use the `codecept build` command. +It generates method signatures from enabled modules and saves them into a trait which is included in an actor. +In the current example, the `tests/support/_generated/FunctionalTesterActions.php` file will be generated. +By default, Codeception automatically rebuilds the Actions trait on each change of the suite configuration. + +## Standard Modules + +Codeception has many bundled modules which will help you run tests for different purposes and different environments. +The idea of modules is to share common actions, so that developers and QA engineers can concentrate on testing +and not on reinventing the wheel. Each module provides methods for testing its own part and +by combining modules you can get a powerful setup to test an application at all levels. + +There is the `WebDriver` module for acceptance testing, modules for all popular PHP frameworks, +`PHPBrowser` to emulate browser execution, `REST` for testing APIs, and more. +Modules are considered to be the most valuable part of Codeception. +They are constantly improving to provide the best testing experience, and be flexible to satisfy everyone's needs. + +### Module Conflicts + +Modules may conflict with one another. If a module implements `Codeception\Lib\Interfaces\ConflictsWithModule`, +it might declare a conflict rule to be used with other modules. For instance, WebDriver conflicts +with all modules implementing the `Codeception\Lib\Interfaces\Web` interface. + +```php +public function _conflicts() +{ + return 'Codeception\Lib\Interfaces\Web'; +} +``` + +This way if you try to use two modules sharing the same conflicted interface you will get an exception. + +To avoid confusion, **Framework modules, PhpBrowser, and WebDriver** can't be used together. For instance, +the `amOnPage` method exists in all those modules, and you should not try to guess which module will actually execute it. +If you are doing acceptance testing, set up either WebDriver or PHPBrowser but do not set both up at the same time. +If you are doing functional testing, enable only one of the framework modules. + +In case you need to use a module which depends on a conflicted one, specify it as a dependent module in the configuration. +You may want to use `WebDriver` with the `REST` module which interacts with a server through `PhpBrowser`. +In this case your config should look like this: + +```yaml +modules: + enabled: + - WebDriver: + browser: firefox + url: http://localhost + - REST: + url: http://localhost/api/v1 + depends: PhpBrowser +``` + +This configuration will allow you to send GET/POST requests to the server's APIs while working with a site through a browser. + +If you only need some parts of a conflicted module to be loaded, refer to the next section. + +### Module Parts + +Modules with *Parts* section in their reference can be partially loaded. This way, the `$I` object will have actions +belonging to only a specific part of that module. Partially loaded modules can be also used to avoid module conflicts. + +For instance, the Laravel5 module has an ORM part which contains database actions. You can enable the PhpBrowser module +for testing and Laravel + ORM for connecting to the database and checking the data. + +```yaml +modules: + enabled: + - PhpBrowser: + url: http://localhost + - Laravel5: + part: ORM +``` + +The modules won't conflict as actions with the same names won't be loaded. + +The REST module has parts for `Xml` and `Json` in the same way. If you are testing a REST service with only JSON responses, +you can enable just the JSON part of this module: + +```yaml +actor: ApiTester +modules: + enabled: + - REST: + url: http://serviceapp/api/v1/ + depends: PhpBrowser + part: Json +``` + +## Helpers + +Codeception doesn't restrict you to only the modules from the main repository. +Your project might need your own actions added to the test suite. By running the `bootstrap` command, +Codeception generates three dummy modules for you, one for each of the newly created suites. +These custom modules are called 'Helpers', and they can be found in the `tests/_support` directory. + +```php + +Public methods prefixed by `_` are treated as hidden and won't be added to your Actor class. + + +Assertions can be a bit tricky. First of all, it's recommended to prefix all your assertion actions with `see` or `dontSee`. + +Name your assertions like this: + +```php +seePageReloaded(); +$I->seeClassIsLoaded($classname); +$I->dontSeeUserExist($user); +``` + +And then use them in your tests: + +```php +seePageReloaded(); +$I->seeClassIsLoaded('FunctionalTester'); +$I->dontSeeUserExist($user); +``` + +You can define assertions by using assertXXX methods in your modules. + +```php +assertTrue(class_exists($class)); +} +``` + +In your helpers you can use these assertions: + +```php +assertTrue(isset($thing), "this thing is set"); + $this->assertFalse(empty($any), "this thing is not empty"); + $this->assertNotNull($thing, "this thing is not null"); + $this->assertContains("world", $thing, "this thing contains 'world'"); + $this->assertNotContains("bye", $thing, "this thing doesn't contain 'bye'"); + $this->assertEquals("hello world", $thing, "this thing is 'Hello world'!"); + // ... +} +``` + +### Accessing Other Modules + +It's possible that you will need to access internal data or functions from other modules. +For example, for your module you might need to access the responses or internal actions of other modules. + +Modules can interact with each other through the `getModule` method. +Please note that this method will throw an exception if the required module was not loaded. + +Let's imagine that we are writing a module that reconnects to a database. +It's supposed to use the dbh connection value from the Db module. + +```php +getModule('Db')->dbh; + $dbh->close(); + $dbh->open(); +} +``` + +By using the `getModule` function, you get access to all of the public methods and properties of the requested module. +The `dbh` property was defined as public specifically to be available to other modules. + +Modules may also contain methods that are exposed for use in helper classes. Those methods start with a `_` prefix +and are not available in Actor classes, so can be accessed only from modules and extensions. + +You should use them to write your own actions using module internals. + +```php +getModule('WebDriver')->_findElements('#result'); + $this->assertNotEmpty($elements); + $table = reset($elements); + $this->assertEquals('table', $table->getTagName()); + $results = $table->findElements('tr'); + // asserting that table contains exactly $num rows + $this->assertEquals($num, count($results)); +} +``` + +In this example we use the API of the facebook/php-webdriver library, +a Selenium WebDriver client the module is build on. +You can also access the `webDriver` property of a module to get access to the `Facebook\WebDriver\RemoteWebDriver` instance +for direct Selenium interaction. + +### Extending a Module + +If accessing modules doesn't provide enough flexibility, you can extend a module inside a Helper class: + +```php +debugSection('Request', $params); + $this->client->request($method, $uri, $params); + $this->debug('Response Code: ' . $this->client->getStatusCode()); +``` + +This test, running with the PhpBrowser module in debug mode, will print something like this: + +```bash +I click "All pages" +* Request (GET) http://localhost/pages {} +* Response code: 200 +``` + +## Configuration + +Modules and Helpers can be configured from the suite configuration file, or globally from `codeception.yml`. + +Mandatory parameters should be defined in the `$requiredFields` property of the class. +Here is how it is done in the Db module: + +```php + '127.0.0.1', 'port' => '4444']; +``` + +The host and port parameter can be redefined in the suite configuration. +Values are set in the `modules:config` section of the configuration file. + +```yaml +modules: + enabled: + - WebDriver: + url: 'http://mysite.com/' + browser: 'firefox' + - Db: + cleanup: false + repopulate: false +``` + +Optional and mandatory parameters can be accessed through the `$config` property. +Use `$this->config['parameter']` to get its value. + +### Dynamic Configuration With Parameters + +Modules can be dynamically configured from environment variables. +Parameter storage should be specified in the global `codeception.yml` configuration inside the `params` section. +Parameters can be loaded from environment vars, from yaml (Symfony format), .env (Laravel format), ini, or php files. + +Use the `params` section of the global configuration file `codeception.yml` to specify how to load them. +You can specify several sources for parameters to be loaded from. + +Example: load parameters from the environment: + +```yaml +params: + - env # load params from environment vars +``` + +Example: load parameters from YAML file (Symfony): + +```yaml +params: + - app/config/parameters.yml +``` + +Example: load parameters from php file (Yii) + +```yaml +params: + - config/params.php +``` + +Example: load parameters from .env files (Laravel): + +```yaml +params: + - .env + - .env.testing +``` + +Once loaded, parameter variables can be used as module configuration values. +Use a variable name wrapped with `%` as a placeholder and it will be replaced by its value. + +Let's say we want to specify credentials for a cloud testing service. We have loaded `SAUCE_USER` +and `SAUCE_KEY` variables from environment, and now we are passing their values into config of `WebDriver`: + +```yaml + modules: + enabled: + - WebDriver: + url: http://mysite.com + host: '%SAUCE_USER%:%SAUCE_KEY%@ondemand.saucelabs.com' +``` + +Parameters are also useful to provide connection credentials for the `Db` module (taken from Laravel's .env files): + +```yaml +module: + enabled: + - Db: + dsn: "mysql:host=%DB_HOST%;dbname=%DB_DATABASE%" + user: "%DB_USERNAME%" + password: "DB_PASSWORD" +``` + +### Runtime Configuration + +If you want to reconfigure a module at runtime, you can use the `_reconfigure` method of the module. +You may call it from a helper class and pass in all the fields you want to change. + +In this case configuration will be changed instantly. In next example we change root URL for PhpBrowser to point to the admin area, + so next `amOnPage('/')` will open `/admin/` page. + +```php +getModule('PhpBrowser')->_reconfigure(array('url' => 'http://localhost/admin')); +``` + +However, in WebDriver configuration changes can't be applied that easily. For instance, if you change the browser you need to close the current browser session and start a new one. +For that WebDriver module provides `_restart` method which takes an array with config and restarts the browser. + +```php +getModule('WebDriver')->_restart(['browser' => 'chrome']); +// or just restart browser +$this->getModule('WebDriver')->_restart(); +``` + +At the end of a test all configuration changes will be rolled back to the original configuration values. + +### Runtime Configuration of a Test + +Sometimes it is needed to set custom configuration for a specific test only. +For [Cest](http://codeception.com/docs/07-AdvancedUsage#Cest-Classes) and [Test\Unit](http://codeception.com/docs/05-UnitTests) +formats you can use `@prepare` annotation which can execute the code before other hooks are executed. This allows `@prepare` +to change the module configuration in runtime. `@prepare` uses [dependency injection](http://codeception.com/docs/07-AdvancedUsage#Dependency-Injection) +to automatically inject required modules into a method. + +To run a specific test only in Chrome browser, you can call `_reconfigure` from WebDriver module for a test itself using `@prepare`. + +```php +_reconfigure(['browser' => 'chrome']); +} +``` + +Prepare methods can invoke all methods of a module, as well as hidden API methods (starting with `_`). Use them to customize the module setup for a specific test. + +To change module configuration for a specific group of tests use [GroupObjects](http://codeception.com/docs/08-Customization#Group-Objects). + +## Conclusion + +Modules are the real power of Codeception. They are used to emulate multiple inheritances for Actor classes +(UnitTester, FunctionalTester, AcceptanceTester, etc). Codeception provides modules to emulate web requests, +access data, interact with popular PHP libraries, etc. If the bundled modules are not enough for you that's OK, +you are free to write your own! Use Helpers (custom modules) for everything that Codeception can't do out of the box. +Helpers also can be used to extend the functionality of the original modules. \ No newline at end of file diff --git a/vendor/codeception/codeception/docs/06-ReusingTestCode.md b/vendor/codeception/codeception/docs/06-ReusingTestCode.md new file mode 100644 index 000000000..ba076e333 --- /dev/null +++ b/vendor/codeception/codeception/docs/06-ReusingTestCode.md @@ -0,0 +1,371 @@ +# Reusing Test Code + +Codeception uses modularity to create a comfortable testing environment for every test suite you write. +Modules allow you to choose the actions and assertions that can be performed in tests. + +## What are Actors + +All actions and assertions that can be performed by the Actor object in a class are defined in modules. +It might look like Codeception limits you in testing, but that's not true. You can extend the testing suite +with your own actions and assertions, by writing them into a custom module, called a Helper. +We will get back to this later in this chapter, but for now let's look at the following test: + +```php +amOnPage('/'); +$I->see('Hello'); +$I->seeInDatabase('users', ['id' => 1]); +$I->seeFileFound('running.lock'); +``` + +It can operate with different entities: the web page can be loaded with the PhpBrowser module, +the database assertion uses the Db module, and the file state can be checked with the Filesystem module. + +Modules are attached to Actor classes in the suite config. +For example, in `tests/acceptance.suite.yml` we should see: + +```yaml +actor: AcceptanceTester +modules: + enabled: + - PhpBrowser: + url: http://localhost + - Db + - Filesystem +``` + +The AcceptanceTester class has its methods defined in modules. +Let's see what's inside the `AcceptanceTester` class, which is located inside the `tests/_support` directory: + +```php +amOnPage('/login'); + $I->submitForm('#loginForm', [ + 'login' => $name, + 'password' => $password + ]); + $I->see($name, '.navbar'); + } +} +``` + +Now you can use the `login` method inside your tests: + +```php +login('miles', '123456'); +``` + +However, implementing all actions for reuse in a single actor class may lead to +breaking the [Single Responsibility Principle](http://en.wikipedia.org/wiki/Single_responsibility_principle). + +### Session Snapshot + +If you need to authorize a user for each test, you can do so by submiting the login form at the beginning of every test. +Running those steps takes time, and in the case of Selenium tests (which are slow by themselves) +that time loss can become significant. + +Codeception allows you to share cookies between tests, so a test user can stay logged in for other tests. + +Let's improve the code of our `login` method, executing the form submission only once +and restoring the session from cookies for each subsequent login function call: + +``` php +loadSessionSnapshot('login')) { + return; + } + // logging in + $I->amOnPage('/login'); + $I->submitForm('#loginForm', [ + 'login' => $name, + 'password' => $password + ]); + $I->see($name, '.navbar'); + // saving snapshot + $I->saveSessionSnapshot('login'); + } +``` + +Note that session restoration only works for `WebDriver` modules +(modules implementing `Codeception\Lib\Interfaces\SessionSnapshot`). + +## StepObjects + +StepObjects are great if you need some common functionality for a group of tests. +Let's say you are going to test an admin area of a site. You probably won't need the same actions from the admin area +while testing the front end, so it's a good idea to move these admin-specific tests into their own class. +We call such a classes StepObjects. + +Lets create an Admin StepObject with the generator: + +```bash +php codecept generate:stepobject acceptance Admin +``` + +You can supply optional action names. Enter one at a time, followed by a newline. +End with an empty line to continue to StepObject creation. + +```bash +php codecept generate:stepobject acceptance Admin +Add action to StepObject class (ENTER to exit): loginAsAdmin +Add action to StepObject class (ENTER to exit): +StepObject was created in /tests/acceptance/_support/Step/Acceptance/Admin.php +``` + +This will generate a class in `/tests/_support/Step/Acceptance/Admin.php` similar to this: + +```php +amOnPage('/admin'); + $I->fillField('username', 'admin'); + $I->fillField('password', '123456'); + $I->click('Login'); + } +} +``` + +In tests, you can use a StepObject by instantiating `Step\Acceptance\Admin` instead of `AcceptanceTester`: + +```php +loginAsAdmin(); +``` + +The same way as above, a StepObject can be instantiated automatically by the Dependency Injection Container +when used inside the Cest format: + +```php +loginAsAdmin(); + $I->amOnPage('/admin/profile'); + $I->see('Admin Profile', 'h1'); + } +} +``` + +If you have a complex interaction scenario, you may use several step objects in one test. +If you feel like adding too many actions into your Actor class +(which is AcceptanceTester in this case) consider moving some of them into separate StepObjects. + +## PageObjects + +For acceptance and functional testing, we will not only need to have common actions being reused across different tests, +we should have buttons, links and form fields being reused as well. For those cases we need to implement +the [PageObject pattern](http://docs.seleniumhq.org/docs/06_test_design_considerations.jsp#page-object-design-pattern), +which is widely used by test automation engineers. The PageObject pattern represents a web page as a class +and the DOM elements on that page as its properties, and some basic interactions as its methods. +PageObjects are very important when you are developing a flexible architecture of your tests. +Do not hardcode complex CSS or XPath locators in your tests but rather move them into PageObject classes. + +Codeception can generate a PageObject class for you with command: + +```bash +php codecept generate:pageobject Login +``` + +This will create a `Login` class in `tests/_support/Page`. +The basic PageObject is nothing more than an empty class with a few stubs. +It is expected that you will populate it with the UI locators of a page it represents +and then those locators will be used on a page. +Locators are represented with public static properties: + +```php +wantTo('login to site'); +$I->amOnPage(LoginPage::$URL); +$I->fillField(LoginPage::$usernameField, 'bill evans'); +$I->fillField(LoginPage::$passwordField, 'debby'); +$I->click(LoginPage::$loginButton); +$I->see('Welcome, bill'); +``` + +As you see, you can freely change markup of your login page, and all the tests interacting with this page +will have their locators updated according to properties of LoginPage class. + +But let's move further. The PageObject concept specifies that the methods for the page interaction +should also be stored in a PageObject class. It now stores a passed instance of an Actor class. +An AcceptanceTester can be accessed via the `AcceptanceTester` property of that class. +Let's define a `login` method in this class: + +```php +tester = $I; + } + + public function login($name, $password) + { + $I = $this->tester; + + $I->amOnPage(self::$URL); + $I->fillField(self::$usernameField, $name); + $I->fillField(self::$passwordField, $password); + $I->click(self::$loginButton); + + return $this; + } +} +``` + +And here is an example of how this PageObject can be used in a test: + +```php +login('bill evans', 'debby'); +$I->amOnPage('/profile'); +$I->see('Bill Evans Profile', 'h1'); +``` + +If you write your scenario-driven tests in the Cest format (which is the recommended approach), +you can bypass the manual creation of a PageObject and delegate this task to Codeception. +If you specify which object you need for a test, Codeception will try to create it using the dependency injection container. +In the case of a PageObject you should declare a class as a parameter for a test method: + +```php +login('bill evans', 'debby'); + $I->amOnPage('/profile'); + $I->see('Bill Evans Profile', 'h1'); + } +} +``` + +The dependency injection container can construct any object that requires any known class type. +For instance, `Page\Login` required `AcceptanceTester`, and so it was injected into `Page\Login` constructor, +and PageObject was created and passed into method arguments. You should explicitly specify +the types of required objects for Codeception to know what objects should be created for a test. +Dependency Injection will be described in the next chapter. + +## Conclusion + +There are lots of ways to create reusable and readable tests. Group common actions together +and move them to an Actor class or StepObjects. Move CSS and XPath locators into PageObjects. +Write your custom actions and assertions in Helpers. +Scenario-driven tests should not contain anything more complex than `$I->doSomething` commands. +Following this approach will allow you to keep your tests clean, readable, stable and make them easy to maintain. diff --git a/vendor/codeception/codeception/docs/07-AdvancedUsage.md b/vendor/codeception/codeception/docs/07-AdvancedUsage.md new file mode 100644 index 000000000..7bc966f03 --- /dev/null +++ b/vendor/codeception/codeception/docs/07-AdvancedUsage.md @@ -0,0 +1,666 @@ +# Advanced Usage + +In this chapter we will cover some techniques and options that you can use to improve your testing experience +and keep your project better organized. + +## Cest Classes + +If you want to get a class-like structure for your Cepts, you can use the Cest format instead of plain PHP. +It is very simple and is fully compatible with Cept scenarios. It means that if you feel that your test is long enough +and you want to split it, you can easily move it into classes. + +You can create a Cest file by running the command: + +```bash +$ php codecept generate:cest suitename CestName +``` + +The generated file will look like this: + +```php +wantTo('log in to site'); + $I->amOnPage('/'); + $I->click('Login'); + $I->fillField('username', 'john'); + $I->fillField('password', 'coltrane'); + $I->click('Enter'); + $I->see('Hello, John'); + $I->seeInCurrentUrl('/account'); + } +} +``` + +As you see, Cest classes have no parents like `\Codeception\Test\Unit` or `PHPUnit_Framework_TestCase`. +This is done intentionally. It allows you to extend your classes with common behaviors and workarounds +that may be used in child classes. But don't forget to make these methods `protected` so they won't be executed as tests. + +You can also define a `_failed` method in Cest classes which will be called if test finishes with `error` or fails. + +## Dependency Injection + +Codeception supports simple dependency injection for Cest and \Codeception\TestCase\Test classes. +It means that you can specify which classes you need as parameters of the special `_inject()` method, +and Codeception will automatically create the respective objects and invoke this method, +passing all dependencies as arguments. This may be useful when working with Helpers. Here's an example for Cest: + +```php +signUp = $signUp; + $this->navBar = $navBar; + } + + public function signUp(\AcceptanceTester $I) + { + $I->wantTo('sign up'); + + $this->navBar->click('Sign up'); + $this->signUp->register([ + 'first_name' => 'Joe', + 'last_name' => 'Jones', + 'email' => 'joe@jones.com', + 'password' => '1234', + 'password_confirmation' => '1234' + ]); + } +} +``` + +And for Test classes: + +```php +math = $math; + } + + public function testAll() + { + $this->assertEquals(3, $this->math->add(1, 2)); + $this->assertEquals(1, $this->math->subtract(3, 2)); + } +} +``` + +However, Dependency Injection is not limited to this. It allows you to **inject any class**, +which can be constructed with arguments known to Codeception. + +In order to make auto-wiring work, you will need to implement the `_inject()` method with the list of desired arguments. +It is important to specify the type of arguments, so Codeception can guess which objects are expected to be received. +The `_inject()` will only be invoked once, just after creation of the TestCase object (either Cest or Test). +Dependency Injection will also work in a similar manner for Helper and Actor classes. + +Each test of a Cest class can declare its own dependencies and receive them from method arguments: + +```php +createDummyUser(); + $userPage->login($user->getName(), $user->getPassword()); + $userPage->updateProfile(['name' => 'Bill']); + $I->see('Profile was saved'); + $I->see('Profile of Bill','h1'); + } +} +``` + +Moreover, Codeception can resolve dependencies recursively (when `A` depends on `B`, and `B` depends on `C` etc.) +and handle parameters of primitive types with default values (like `$param = 'default'`). +Of course, you are not allowed to have *cyclic dependencies*. + +### Examples + +What if you want to execute the same test scenario with different data? In this case you can inject examples +as `\Codeception\Example` instances. +Data is defined via the `@example` annotation, using JSON or Doctrine-style notation (limited to a single line). Doctrine-style: + +```php +sendGET($example[0]); + $I->seeResponseCodeIs($example[1]); + } +``` + +JSON: + +```php +amOnPage($example['url']); + $I->see($example['title'], 'h1'); + $I->seeInTitle($example['title']); + } +``` + +
    +If you use JSON notation please keep in mind that all string keys +and values should be enclosed in double quotes (`"`) according to JSON standard. +
    + +Key-value data in Doctrine-style annotation syntax: + +```php +amOnPage($example['url']); + $I->see($example['title'], 'h1'); + $I->seeInTitle($example['title']); + } +``` + +You can also use the `@dataprovider` annotation for creating dynamic examples, using a protected method for providing example data: + +```php +amOnPage($example['url']); + $I->see($example['title'], 'h1'); + $I->seeInTitle($example['title']); + } + + /** + * @return array + */ + protected function pageProvider() // alternatively, if you want the function to be public, be sure to prefix it with `_` + { + return [ + ['url'=>"/", 'title'=>"Welcome"], + ['url'=>"/info", 'title'=>"Info"], + ['url'=>"/about", 'title'=>"About Us"], + ['url'=>"/contact", 'title'=>"Contact Us"] + ]; + } +``` + +### Before/After Annotations + +You can control execution flow with `@before` and `@after` annotations. You may move common actions +into protected (non-test) methods and invoke them before or after the test method by putting them into annotations. +It is possible to invoke several methods by using more than one `@before` or `@after` annotation. +Methods are invoked in order from top to bottom. + +```php +amOnPage('/login'); + $I->fillField('Username', 'miles'); + $I->fillField('Password', 'davis'); + $I->click('Login'); + } + + /** + * @before login + */ + public function banUser(AcceptanceTester $I) + { + $I->amOnPage('/users/charlie-parker'); + $I->see('Ban', '.button'); + $I->click('Ban'); + } + + /** + * @before login + * @before cleanup + * @after logout + * @after close + */ + public function addUser(AcceptanceTester $I) + { + $I->amOnPage('/users/charlie-parker'); + $I->see('Ban', '.button'); + $I->click('Ban'); + } +} +``` + +## Environments + +For cases where you need to run tests with different configurations you can define different config environments. +The most typical use cases are running acceptance tests in different browsers, +or running database tests using different database engines. + +Let's demonstrate the usage of environments for the browsers case. + +We need to add some new lines to `acceptance.suite.yml`: + +``` yaml +actor: AcceptanceTester +modules: + enabled: + - WebDriver + - \Helper\Acceptance + config: + WebDriver: + url: 'http://127.0.0.1:8000/' + browser: 'firefox' + +env: + phantom: + modules: + config: + WebDriver: + browser: 'phantomjs' + + chrome: + modules: + config: + WebDriver: + browser: 'chrome' + + firefox: + # nothing changed +``` + +Basically you can define different environments inside the `env` root, name them (`phantom`, `chrome` etc.), +and then redefine any configuration parameters that were set before. + +You can also define environments in separate configuration files placed in the directory specified by the `envs` option in +the `paths` configuration: + +```yaml +paths: + envs: tests/_envs +``` + +The names of these files are used as environments names +(e.g. `chrome.yml` or `chrome.dist.yml` for an environment named `chrome`). +You can generate a new file with this environment configuration by using the `generate:environment` command: + +```bash +$ php codecept g:env chrome +``` + +In that file you can specify just the options you wish to override: + +```yaml +modules: + config: + WebDriver: + browser: 'chrome' +``` + +The environment configuration files are merged into the main configuration before the suite configuration is merged. + +You can easily switch between those configs by running tests with `--env` option. +To run the tests only for PhantomJS you just need to pass `--env phantom` as an option: + +```bash +$ php codecept run acceptance --env phantom +``` + +To run the tests in all 3 browsers, list all the environments: + +```bash +$ php codecept run acceptance --env phantom --env chrome --env firefox +``` + +The tests will be executed 3 times, each time in a different browser. + +It's also possible to merge multiple environments into a single configuration by separating them with a comma: + +```bash +$ php codecept run acceptance --env dev,phantom --env dev,chrome --env dev,firefox +``` + +The configuration is merged in the order given. +This way you can easily create multiple combinations of your environment configurations. + +Depending on the environment, you may choose which tests are to be executed. +For example, you might need some tests to be executed in Firefox only, and some tests in Chrome only. + +The desired environments can be specified with the `@env` annotation for tests in Test and Cest formats: + +```php +current()` method. + +```php +current('env'); + +// list of all enabled modules +$scenario->current('modules'); + +// test name +$scenario->current('name'); + +// browser name (if WebDriver module enabled) +$scenario->current('browser'); + +// capabilities (if WebDriver module enabled) +$scenario->current('capabilities'); +``` + +You can access `\Codeception\Scenario` in the Cept and Cest formats. +In Cept, the `$scenario` variable is available by default, +while in Cest you should retrieve it through dependency injection: + +```php +current('browser') == 'phantomjs') { + // emulate popups for PhantomJS + $I->executeScript('window.alert = function(){return true;}'); + } +} +``` + +`Codeception\Scenario` is also availble in Actor classes and StepObjects. You can access it with `$this->getScenario()`. + +### Dependencies + +With the `@depends` annotation you can specify a test that should be passed before the current one. +If that test fails, the current test will be skipped. You should pass the method name of the test you are relying on. + +```php +wantToTest('admin area'); +``` + +For `.feature`-files (Gherkin) use tags: + +```gherkin +@admin @editor +Feature: Admin area +``` + +### Group Files + +Groups can be defined in global or suite configuration files. +Tests for groups can be specified as an array of file names or directories containing them: + +```yaml +groups: + # add 2 tests to db group + db: [tests/unit/PersistTest.php, tests/unit/DataTest.php] + + # add all tests from a directory to api group + api: [tests/functional/api] +``` + +A list of tests for the group can be passed from a Group file. It should be defined in plain text with test names on separate lines: + +```bash +tests/unit/DbTest.php +tests/unit/UserTest.php:create +tests/unit/UserTest.php:update +``` +A group file can be included by its relative filename: + +```yaml +groups: + # requiring a group file + slow: tests/_data/slow.txt +``` + +You can create group files manually or generate them from third party applications. +For example, you can write a script that updates the slow group by taking the slowest tests from xml report. + +You can even specify patterns for loading multiple group files with a single definition: + +```yaml +groups: + p*: tests/_data/p* +``` + +This will load all found `p*` files in `tests/_data` as groups. Group names will be as follows p1,p2,...,pN. + +## Shell autocompletion + +For bash and zsh shells, you can use autocompletion for your Codeception projects by executing the following in your shell (or add it to your .bashrc/.zshrc): +```bash +# BASH ~4.x, ZSH +source <([codecept location] _completion --generate-hook --program codecept --use-vendor-bin) + +# BASH ~3.x, ZSH +[codecept location] _completion --generate-hook --program codecept --use-vendor-bin | source /dev/stdin + +# BASH (any version) +eval $([codecept location] _completion --generate-hook --program codecept --use-vendor-bin) +``` + +### Explanation + +By using the above code in your shell, Codeception will try to autocomplete the following: +* Commands +* Suites +* Test paths + +Usage of `-use-vendor-bin` is optional. This option will work for most Codeception projects, where Codeception is located in your `vendor/bin` folder. +But in case you are using a global Codeception installation for example, you wouldn't use this option. + +Note that with the `-use-vendor-bin` option, your commands will be completed using the Codeception binary located in your project's root. +Without the option, it will use whatever Codeception binary you originally used to generate the completion script ('codecept location' in the above examples) + +## Conclusion + +Codeception is a framework which may look simple at first glance +but it allows you to build powerful tests with a single API, refactor them, +and write them faster using the interactive console. Codeception tests can be easily organized in groups or Cest classes. diff --git a/vendor/codeception/codeception/docs/07-BDD.md b/vendor/codeception/codeception/docs/07-BDD.md new file mode 100644 index 000000000..1c05986f3 --- /dev/null +++ b/vendor/codeception/codeception/docs/07-BDD.md @@ -0,0 +1,557 @@ +# Behavior Driven Development + +Behavior Driven Development (BDD) is a popular software development methodology. BDD is considered an extension of TDD, and is greatly inspired by [Agile](http://agilemanifesto.org/) practices. The primary reason to choose BDD as your development process is to break down communication barriers between business and technical teams. BDD encourages the use of automated testing to verify all documented features of a project from the very beginning. This is why it is common to talk about BDD in the context of test frameworks (like Codeception). The BDD approach, however, is about much more than testing - it is a common language for all team members to use during the development process. + +## What is Behavior Driven Development + +BDD was introduced by [Dan North](https://dannorth.net/introducing-bdd/). He described it as: + +> outside-in, pull-based, multiple-stakeholder, multiple-scale, high-automation, agile methodology. It describes a cycle of interactions with well-defined outputs, resulting in the delivery of working, tested software that matters. + +BDD has its own evolution from the days it was born, started by replacing "test" to "should" in unit tests, and moving towards powerful tools like Cucumber and Behat, which made user stories (human readable text) to be executed as an acceptance test. + +The idea of story BDD can be narrowed to: + +* describe features in a scenario with a formal text +* use examples to make abstract things concrete +* implement each step of a scenario for testing +* write actual code implementing the feature + +By writing every feature in User Story format that is automatically executable as a test we ensure that: business, developers, QAs and managers are in the same boat. + +BDD encourages exploration and debate in order to formalize the requirements and the features that needs to be implemented by requesting to write the User Stories in a way that everyone can understand. + +By making tests to be a part of User Story, BDD allows non-technical personnel to write (or edit) Acceptance tests. + +With this procedure we also ensure that everyone in a team knows what has been developed, what has not, what has been tested and what has not. + +### Ubiquitous Language + +The ubiquitous language is always referred as *common* language. That is it's main benefit. It is not a couple of our business specification's words, and not a couple of developer's technical terms. It is a common words and terms that can be understood by people for whom we are building the software and should be understood by developers. Establishing correct communication between this two groups people is vital for building successful project that will fit the domain and fulfill all business needs. + +Each feature of a product should be born from a talk between + +* business (analysts, product owner) +* developers +* QAs + +which are known in BDD as "three amigos". + +Such talks should produce written stories. There should be an actor that doing some things, the feature that should be fulfilled within the story and the result achieved. + +We can try to write such simple story: + +``` +As a customer I want to buy several products +I put first product with $600 price to my cart +And then another one with $1000 price +When I go to checkout process +I should see that total number of products I want to buy is 2 +And my order amount is $1600 +``` + +As we can see this simple story highlights core concepts that are called *contracts*. We should fulfill those contracts to model software correctly. But how we can verify that those contracts are being satisfied? [Cucumber](http://cucumber.io) introduced a special language for such stories called **Gherkin**. Same story transformed to Gherkin will look like this: + +```gherkin +Feature: checkout process + In order to buy products + As a customer + I want to be able to buy several products + + Scenario: + Given I have product with $600 price in my cart + And I have product with $1000 price + When I go to checkout process + Then I should see that total number of products is 2 + And my order amount is $1600 +``` + +Cucumber, Behat, and sure, **Codeception** can execute this scenario step by step as an automated test. +Every step in this scenario requires a code which defines it. + +## Gherkin + +Let's learn some more about Gherkin format and then we will see how to execute it with Codeception: + +### Features + +Whenever you start writing a story you are describing a specific feature of an application, with a set of scenarios and examples describing this feature. + +Feature file is written in Gherkin format. Codeception can generate a feature file for you. +We will assume that we will use scenarios in feature files for acceptance tests, so feature files to be placed in `acceptance` suite directory: + +```bash +php codecept g:feature acceptance checkout +``` + +Generated template will look like this: + +```gherkin +Feature: checkout + In order to ... + As a ... + I need to ... + + Scenario: try checkout +``` + +This template can be fulfilled by setting actor and goals: + +```gherkin +Feature: checkout + In order to buy product + As a customer + I need to be able to checkout the selected products +``` + +Next, we will describe this feature by writing examples for it + +#### Scenarios + +Scenarios are live examples of feature usage. Inside a feature file it should be written inside a *Feature* block. Each scenario should contain its title: + +```gherkin +Feature: checkout + In order to buy product + As a customer + I need to be able to checkout the selected products + +Scenario: order several products +``` + +Scenarios are written in step-by-step manner using Given-When-Then approach. At start, scenario should describe its context with **Given** keyword: + +```gherkin + Given I have product with $600 price in my cart + And I have product with $1000 price in my cart +``` + +Here we also use word **And** to extend the Given and not to repeat it in each line. + +This is how we described the initial conditions. Next, we perform some action. We use **When** keyword for it: + +```gherkin + When I go to checkout process +``` + +And in the end we are verifying our expectation using **Then** keyword. The action changed the initial given state, and produced some results. Let's check that those results are what we actually expect. + +```gherkin + Then I should see that total number of products is 2 + And my order amount is $1600 +``` + +We can test this scenario by executing it in dry-run mode. In this mode test won't be executed (actually, we didn't define any step for it, so it won't be executed in any case). + +```bash +$ codecept dry-run acceptance checkout.feature +``` + +```bash +checkout: order several products +Signature: checkout:order several products +Test: tests/acceptance/checkout.feature:order several products +Scenario -- + In order to buy product + As a customer + I need to be able to checkout the selected products + Given i have product with $600 price in my cart + And i have product with $1000 price in my cart + When i go to checkout process + Then i should see that total number of products is 2 + And my order amount is $1600 + + INCOMPLETE +Step definition for `I have product with $600 price in my cart` not found in contexts +Step definition for `I have product with $1000 price` not found in contexts +Step definition for `I go to checkout process` not found in contexts +Step definition for `I should see that total number of products is 2` not found in contexts +Step definition for `my order amount is $1600` not found in contexts +Run gherkin:snippets to define missing steps +``` + +Besides the scenario steps listed we got the notification that our steps are not defined yet. +We can define them easily by executing `gherkin:snippets` command for the given suite: + +```bash +codecept gherkin:snippets acceptance +``` + +This will produce code templates for all undefined steps in all feature files of this suite. +Our next step will be to define those steps and transforming feature-file into valid test. + +### Step Definitions + +To match steps from a feature file to PHP code we use annotation which are added to class methods. +By default Codeception expects that all methods marked with `@Given`, `@When`, `@Then` annotation. +Each annotation should contain a step string. + +``` +/** @Given I am logged as admin */ +``` + +Steps can also be matched with regex expressions. This way we can make more flexible steps + +``` +/** @Given /I am (logged|authorized) as admin/ */ +``` + +Please note that regular expressions should start and end with `/` char. Regex is also used to match parameters and pass them as arguments into methods. + +```php +`. You can use `amOnPage`, `click`, `see` methods inside a step definitions, so each Gherkin scenario step to be extended with basic Codeception steps. Let's show how it can be implemented in our case: + +```php +haveRecord('Product', ['name' => 'randomProduct'.uniqid(), 'price' => $num1]); + $this->amOnPage("/item/$productId"); + $this->click('Order'); + } + + /** + * @When I go to checkout process + */ + public function iGoToCheckoutProcess() + { + $this->amOnPage('/checkout'); + } + + /** + * @Then I should see that total number of products is :num1 + */ + public function iShouldSeeThatTotalNumberOfProductsIs($num1) + { + $this->see($num1, '.products-count'); + } + + /** + * @Then my order amount is :num1 + */ + public function myOrderAmountIs($num1) + { + $this->see($num1, '.total'); + } +} +``` + +To make testing more effective we assumed that we are using one of the ActiveRecord frameworks like Laravel, Yii, or Phalcon so we are able to dynamically create records in database with `haveRecord` method. After that we are opening browser and testing our web pages to see that after selecting those products we really see the price was calculated correctly. + +We can dry-run (or run) our feature file to see that Given/When/Then are expanded with substeps: + +```bash + Given i have product with $600 price in my cart + I have record 'Product',{"name":"randomProduct571fad4f88a04","price":"600"} + I am on page "/item/1" + I click "Order" + And i have product with $1000 price in my cart + I have record 'Product',{"name":"randomProduct571fad4f88b14","price":"1000"} + I am on page "/item/2" + I click "Order" + When i go to checkout process + I am on page "/checkout" + Then i should see that total number of products is 2 + I see "2",".products-count" + And my order amount is $1600 + I see "1600",".total" +``` + +This way feature file runs just the same as any other Codeception test. Substeps give us detailed information of how the scenario is being executed. + +One of the criticism for testing with Gherkin was that only technical team were aware of how the test scenario is executed. This could have lead to false-positive tests. Developers could have used empty steps for scenarios (or irrelevant ones) and produced invalid tests for valid scenarios. Codeception brings communication to a next level, everyone in a team can understand what happens on a lower (technical) level. Scenario expanding to substeps shows the actual test execution process. Anyone in a team can read the output, and invest their efforts into improving the test suite. + +## Advanced Gherkin + +Let's improve our BDD suite by using the advanced features of Gherkin language. + +### Background + +If a group of scenarios have the same initial steps, let's that for dashboard we need always need to be logged in as administrator. We can use *Background* section to do the required preparations and not to repeat same steps across scenarios. + +```gherkin +Feature: Dashboard + In order to view current state of business + As an owner + I need to be able to see reports on dashboard + + Background: + Given I am logged in as administrator + And I open dashboard page +``` + +Steps in background are defined the same way as in scenarios. + +### Tables + +Scenarios can become more descriptive when you represent repeating data as tables. Instead of writing several steps "I have product with :num1 $ price in my cart" we can have one step with multiple values in it. + +```gherkin + Given i have products in my cart + | name | category | price | + | Harry Potter | Books | 5 | + | iPhone 5 | Smartphones | 1200 | + | Nuclear Bomb | Weapons | 100000 | +``` + +Tables is a recommended ways to pass arrays into test scenarios. +Inside a step definition data is stored in argument passed as `\Behat\Gherkin\Node\TableNode` instance. + +```php +getRows() as $index => $row) { + if ($index === 0) { // first row to define fields + $keys = $row; + continue; + } + $this->haveRecord('Product', array_combine($keys, $row)); + } + } +``` + +### Examples + +In case scenarios represent the same logic but differ on data, we can use *Scenario Outline* to provide different examples for the same behavior. Scenario outline is just like a basic scenario with some values replaced with placeholders, which are filled from a table. Each set of values is executed as a different test. + +```gherkin + Scenario Outline: order discount + Given I have product with price $ in my cart + And discount for orders greater than $20 is 10 % + When I go to checkout + Then I should see overall price is "" $ + + Examples: + | price | total | + | 10 | 10 | + | 20 | 20 | + | 21 | 18.9 | + | 30 | 27 | + | 50 | 45 | +``` + +### Long Strings + +Text values inside a scenarios can be set inside a `"""` block: + +```gherkin + Then i see in file "codeception.yml" +""" +paths: + tests: tests + log: tests/_output + data: tests/_data + helpers: tests/_support + envs: tests/_envs +""" +``` + +This string is passed as a standard PHP string parameter + +```php +fail("File $fileName not found"); + } + $this->assertEquals(file_get_contents($fileName), $fileContents); + } +``` + +### Tags + +Gherkin scenarios and features can contain tags marked with `@`. Tags are equal to groups in Codeception. +This way if you define a feature with `@important` tag, you can execute it inside `important` group by running: + +```bash +codecept run -g important +``` + +Tag should be placed before *Scenario:* or before *Feature:* keyword. In the last case all scenarios of that feature will be added to corresponding group. + +## Configuration + +As we mentioned earlier, steps should be defined inside context classes. By default all the steps are defined inside an Actor class, for instance, `AcceptanceTester`. However, you can include more contexts. This can be configured inside global `codeception.yml` or suite configuration file: + +```yaml +gherkin: + contexts: + default: + - AcceptanceTester + - AdditionalSteps +``` + +`AdditionalSteps` file should be accessible by autoloader and can be created by `Codeception\Lib\Di`. This means that practically any class can be a context. If a class receives an actor class in constructor or in `_inject` method, DI can inject it into it. + +```php +I = $I; + } + + /** + * @When I do something + */ + function additionalActions() + { + } +} +``` +This way PageObjects, Helpers and StepObjects can become contexts as well. But more preferable to include context classes by their tags or roles. + +If you have `Step\Admin` class which defines only admin steps, it is a good idea to use it as context for all features containing with "As an admin". In this case "admin" is a role and we can configure it to use additional context. + +```yaml +gherkin: + contexts: + role: + admin: + - "Step\Admin" +``` + +Contexts can be attached to tags as well. This may be useful if you want to redefine steps for some scenarios. Let's say we want to bypass login steps for some scenarios loading already defined session. In this case we can create `Step\FastLogin` class with redefined step "I am logged in as". + +```yaml +gherkin: + contexts: + tag: + fastlogin: + - "Step\FastLogin" +``` + +## Migrating From Behat + +While Behat is a great tool for Behavior Driven Development, you still may prefer to use Codeception as your primary testing framework. In case you want to unify all your tests (unit/functional/acceptance), and make them be executed with one runner, Codeception is a good choice. Also Codeception provides rich set of well-maintained modules for various testing backends like Selenium Webdriver, Symfony, Laravel, etc. + +If you decided to run your features with Codeception, we recommend to start with symlinking your `features` directory into one of the test suites: + +```bash +ln -s $PWD/features tests/acceptance +``` + +Then you will need to implement all step definitions. Run `gherkin:snippets` to generate stubs for them. +By default it is recommended to place step definitions into actor class (Tester) and use its methods for steps implementation. + +## Tests vs Features + +It is common to think that BDD scenario is equal to test. But it's actually not. Not every test should be described as a feature. Not every test is written to test real business value. For instance, regression tests or negative scenario tests are not bringing any value to business. Business analysts don't care about scenario reproducing bug #13, or what error message is displayed when user tries to enter wrong password on login screen. Writing all the tests inside a feature files creates informational overflow. + +In Codeception you can combine tests written in Gherkin format with tests written in Cept/Cest/Test formats. This way you can keep your feature files compact with minimal set of scenarios, and write regular tests to cover all cases. + +Corresponding features and tests can be attached to the same group. And what is more interesting, you can make tests to depend on feature scenarios. Let's say we have `login.feature` file with "Log regular user" scenario in it. In this case you can specify that every test which requires login to pass to depend on "Log regular user" scenario: + +``` +@depends login:Log regular user +``` + +Inside `@depends` block you should use test signature. Execute your feature with `dry-run` to see signatures for all scenarios in it. By marking tests with `@depends` you ensure that this test won't be executed before the test it depends on. + +## Conclusions + +If you like the concept of Behavior Driven Development or prefer to keep test scenarios in human readable format, Codeception allows you to write and execute scenarios in Gherkin. Feature files is just another test format inside Codeception, so it can be combined with Cept and Cest files inside the same suite. Steps definitions of your scenarios can use all the power of Codeception modules, PageObjects, and StepObjects. diff --git a/vendor/codeception/codeception/docs/08-Customization.md b/vendor/codeception/codeception/docs/08-Customization.md new file mode 100644 index 000000000..dde87bfbd --- /dev/null +++ b/vendor/codeception/codeception/docs/08-Customization.md @@ -0,0 +1,376 @@ +# Customization + +In this chapter we will explain how you can extend and customize the file structure and test execution routines. + +## One Runner for Multiple Applications + +If your project consists of several applications (frontend, admin, api) or you are using the Symfony framework +with its bundles, you may be interested in having all tests for all applications (bundles) executed in one runner. +In this case you will get one report that covers the whole project. + +Place the `codeception.yml` file into the root folder of your project +and specify the paths to the other `codeception.yml` configurations that you want to include: + +```yaml +include: + - frontend/src/*Bundle + - admin + - api/rest +paths: + output: _output +settings: + colors: false +``` + +You should also specify the path to the `log` directory, where the reports and logs will be saved. + +
    +Wildcards (*) can be used to specify multiple directories at once. +
    + +### Namespaces + +To avoid naming conflicts between Actor classes and Helper classes, they should be separated into namespaces. +To create test suites with namespaces you can add `--namespace` option to the bootstrap command: + +```bash +php codecept bootstrap --namespace frontend +``` + +This will bootstrap a new project with the `namespace: frontend` parameter in the `codeception.yml` file. +Helpers will be in the `frontend\Codeception\Module` namespace and Actor classes will be in the `frontend` namespace. + +Once each of your applications (bundles) has its own namespace and different Helper or Actor classes, +you can execute all the tests in a single runner. Run the Codeception tests as usual, using the meta-config we created earlier: + +```bash +php codecept run +``` + +This will launch the test suites for all three applications and merge the reports from all of them. +This is very useful when you run your tests on a Continuous Integration server +and you want to get a single report in JUnit and HTML format. The code coverage report will be merged too. + +If you want to run a specific suite from the application you can execute: + +``` +php codecept run unit -c frontend +``` + +Where `unit` is the name of suite and the `-c` option specifies the path to the `codeception.yml` configuration file to use. +In this example we will assume that there is `frontend/codeception.yml` configuration file +and that we will execute the unit tests for only that app. + +## Extension + +Codeception has limited capabilities to extend its core features. +Extensions are not supposed to override current functionality, +but can be useful if you are an experienced developer and you want to hook into the testing flow. + +By default, one `RunFailed` Extension is already enabled in your global `codeception.yml`. +It allows you to rerun failed tests by using the `-g failed` option: + +``` +php codecept run -g failed +``` + +Codeception comes with bundled extensions located in `ext` directory. +For instance, you can enable the Logger extension to log the test execution with Monolog: + +```yaml +extensions: + enabled: + - Codeception\Extension\RunFailed # default extension + - Codeception\Extension\Logger: # enabled extension + max_files: 5 # logger configuration +``` + +But what are extensions, anyway? Basically speaking, extensions are nothing more than event listeners +based on the [Symfony Event Dispatcher](http://symfony.com/doc/current/components/event_dispatcher/introduction.html) component. + +### Events + +Here are the events and event classes. The events are listed in the order in which they happen during execution. +All listed events are available as constants in `Codeception\Events` class. + +| Event | When? | Triggered by +|:--------------------:| --------------------------------------- | --------------------------: +| `suite.before` | Before suite is executed | [Suite, Settings](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Event/SuiteEvent.php) +| `test.start` | Before test is executed | [Test](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Event/TestEvent.php) +| `test.before` | At the very beginning of test execution | [Codeception Test](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Event/TestEvent.php) +| `step.before` | Before step | [Step](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Event/StepEvent.php) +| `step.after` | After step | [Step](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Event/StepEvent.php) +| `step.fail` | After failed step | [Step](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Event/StepEvent.php) +| `test.fail` | After failed test | [Test, Fail](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Event/FailEvent.php) +| `test.error` | After test ended with error | [Test, Fail](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Event/FailEvent.php) +| `test.incomplete` | After executing incomplete test | [Test, Fail](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Event/FailEvent.php) +| `test.skipped` | After executing skipped test | [Test, Fail](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Event/FailEvent.php) +| `test.success` | After executing successful test | [Test](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Event/TestEvent.php) +| `test.after` | At the end of test execution | [Codeception Test](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Event/TestEvent.php) +| `test.end` | After test execution | [Test](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Event/TestEvent.php) +| `suite.after` | After suite was executed | [Suite, Result, Settings](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Event/SuiteEvent.php) +| `test.fail.print` | When test fails are printed | [Test, Fail](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Event/FailEvent.php) +| `result.print.after` | After result was printed | [Result, Printer](https://github.com/Codeception/Codeception/blob/master/src/Codeception/Event/PrintResultEvent.php) + +There may be some confusion between `test.start`/`test.before` and `test.after`/`test.end`. +The start and end events are triggered by PHPUnit, but the before and after events are triggered by Codeception. +Thus, when you are using classical PHPUnit tests (extended from `PHPUnit\Framework\TestCase`), +the before/after events won't be triggered for them. During the `test.before` event you can mark a test +as skipped or incomplete, which is not possible in `test.start`. You can learn more from +[Codeception internal event listeners](https://github.com/Codeception/Codeception/tree/master/src/Codeception/Subscriber). + +The extension class itself is inherited from `Codeception\Extension`: + +```php + 'afterSuite', + Events::SUITE_BEFORE => 'beforeTest', + Events::STEP_BEFORE => 'beforeStep', + Events::TEST_FAIL => 'testFailed', + Events::RESULT_PRINT_AFTER => 'print', + ); + + // methods that handle events + + public function afterSuite(\Codeception\Event\SuiteEvent $e) {} + + public function beforeTest(\Codeception\Event\TestEvent $e) {} + + public function beforeStep(\Codeception\Event\StepEvent $e) {} + + public function testFailed(\Codeception\Event\FailEvent $e) {} + + public function print(\Codeception\Event\PrintResultEvent $e) {} +} +``` + +By implementing event handling methods you can listen for events and even update passed objects. +Extensions have some basic methods you can use: + +* `write` - prints to the screen +* `writeln` - prints to the screen with a new-line character at the end +* `getModule` - allows you to access a module +* `hasModule` - checks if a module is enabled +* `getModuleNames` - list all enabled modules +* `_reconfigure` - can be implemented instead of overriding the constructor + +### Enabling Extension + +Once you've implemented a simple extension class, you can require it in `tests/_bootstrap.php`, +load it with Composer's autoloader defined in `composer.json`, or store the class inside `tests/_support`dir. + +You can then enable it in `codeception.yml` + +```yaml +extensions: + enabled: [MyCustomExtension] +``` + +Extensions can also be enabled per suite inside suite configs (like `acceptance.suite.yml`) and for a specific environment. + +To enable extension dynamically, execute the `run` command with `--ext` option. +Provide a class name as a parameter: + +```bash +codecept run --ext MyCustomExtension +codecept run --ext "\My\Extension" +``` + +If a class is in a `Codeception\Extension` namespace you can skip it and provide only a shortname. +So Recorder extension can be started like this: + +```bash +codecept run --ext Recorder +``` + +### Configuring Extension + +In the extension, you can access the currently passed options via the `options` property. +You also can access the global configuration via the `\Codeception\Configuration::config()` method. +If you want to have custom options for your extension, you can pass them in the `codeception.yml` file: + +```yaml +extensions: + enabled: [MyCustomExtension] + config: + MyCustomExtension: + param: value +``` + +The passed in configuration is accessible via the `config` property: `$this->config['param']`. + +Check out a very basic extension [Notifier](https://github.com/Codeception/Notifier). + +### Custom Commands + +You can add your own commands to Codeception. + +Your custom commands have to implement the interface Codeception\CustomCommandInterface, +because there has to be a function to get the name of the command. + +You have to register your command in the file `codeception.yml`: + +```yaml +extensions: + commands: [Project\Command\MyCustomCommand] +``` + +If you want to activate the Command globally, because you are using more then one `codeception.yml` file, +you have to register your command in the `codeception.dist.yml` in the root folder of your project. + +Please see the [complete example](https://github.com/Codeception/Codeception/blob/2.3/tests/data/register_command/examples/MyCustomCommand.php) + +## Group Objects + +Group Objects are extensions listening for the events of tests belonging to a specific group. +When a test is added to a group: + +```php +writeln('inserting additional admin users...'); + + $db = $this->getModule('Db'); + $db->haveInDatabase('users', array('name' => 'bill', 'role' => 'admin')); + $db->haveInDatabase('users', array('name' => 'john', 'role' => 'admin')); + $db->haveInDatabase('users', array('name' => 'mark', 'role' => 'banned')); + } + + public function _after(\Codeception\Event\TestEvent $e) + { + $this->writeln('cleaning up admin users...'); + // ... + } +} +``` + +GroupObjects can also be used to update the module configuration before running a test. +For instance, for `nocleanup` group we prevent Doctrine2 module from wrapping test into transaction: + +```php +getModule('Doctrine2')->_reconfigure(['cleanup' => false]); + } +``` + +A group class can be created with `php codecept generate:group groupname` command. +Group classes will be stored in the `tests/_support/Group` directory. + +A group class can be enabled just like you enable an extension class. In the file `codeception.yml`: + +``` yaml +extensions: + enabled: [Group\Admin] +``` + +Now the Admin group class will listen for all events of tests that belong to the `admin` group. + +## Custom Reporters + +Alternative reporters can be implemented as extension. +There are [DotReporter](http://codeception.com/extensions#DotReporter) and [SimpleReporter](http://codeception.com/extensions#SimpleReporter) extensions included. +Use them to change output or use them as an example to build your own reporter. They can be easily enabled with `--ext` option + +```bash +codecept run --ext DotReporter +``` + +![](https://cloud.githubusercontent.com/assets/220264/26132800/4d23f336-3aab-11e7-81ba-2896a4c623d2.png) + +If you want to use it as default reporter enable it in `codeception.yml`. + +But what if you need to change the output format of the XML or JSON results triggered with the `--xml` or `--json` options? +Codeception uses PHPUnit printers and overrides them. If you need to customize one of the standard reporters you can override them too. +If you are thinking on implementing your own reporter you should add a `reporters` section to `codeception.yml` +and override one of the standard printer classes with one of your own: + +```yaml +reporters: + xml: Codeception\PHPUnit\Log\JUnit + html: Codeception\PHPUnit\ResultPrinter\HTML + report: Codeception\PHPUnit\ResultPrinter\Report +``` + +All PHPUnit printers implement the +[PHPUnit_Framework_TestListener](https://phpunit.de/manual/current/en/extending-phpunit.html#extending-phpunit.PHPUnit_Framework_TestListener) +interface. It is recommended to read the code of the original reporter before overriding it. + +## Installation Templates + +Codeception setup can be customized for the needs of your application. +If you build a distributable application and you have a personalized configuration you can build an +Installation template which will help your users to start testing on their projects. + +Codeception has built-in installation templates for + +* [Acceptance tests](https://github.com/Codeception/Codeception/blob/2.3/src/Codeception/Template/Acceptance.php) +* [Unit tests](https://github.com/Codeception/Codeception/blob/2.3/src/Codeception/Template/Unit.php) +* [REST API tests](https://github.com/Codeception/Codeception/blob/2.3/src/Codeception/Template/Api.php) + +They can be executed with `init` command: + +```bash +codecept init Acceptance +``` +To init tests in specific folder use `--path` option: + +```bash +codecept init Acceptance --path acceptance_tests +``` + +You will be asked several questions and then config files will be generated and all necessary directories will be created. +Learn from the examples above to build a custom Installation Template. Here are the basic rules you should follow: + +* Templates should be inherited from [`Codeception\InitTemplate`](http://codeception.com/docs/reference/InitTemplate) class and implement `setup` method. +* Template class should be placed in `Codeception\Template` namespace so Codeception could locate them by class name +* Use methods like `say`, `saySuccess`, `sayWarning`, `sayError`, `ask`, to interact with a user. +* Use `createDirectoryFor`, `createEmptyDirectory` methods to create directories +* Use `createHelper`, `createActor` methods to create helpers and actors. +* Use [Codeception generators](https://github.com/Codeception/Codeception/tree/2.3/src/Codeception/Lib/Generator) to create other support classes. + +## Conclusion + +Each feature mentioned above may help dramatically when using Codeception to automate the testing of large projects, +although some features may require advanced knowledge of PHP. There is no "best practice" or "use cases" +when we talk about groups, extensions, or other powerful features of Codeception. +If you see you have a problem that can be solved using these extensions, then give them a try. diff --git a/vendor/codeception/codeception/docs/09-Data.md b/vendor/codeception/codeception/docs/09-Data.md new file mode 100644 index 000000000..926d92a6d --- /dev/null +++ b/vendor/codeception/codeception/docs/09-Data.md @@ -0,0 +1,279 @@ +# Working with Data + +Tests should not affect each other. That's a rule of thumb. When tests interact with a database, +they may change the data inside it, which would eventually lead to data inconsistency. +A test may try to insert a record that has already been inserted, or retrieve a deleted record. +To avoid test failures, the database should be brought back to its initial state before each test. +Codeception has different methods and approaches to get your data cleaned. + +This chapter summarizes all of the notices on clean-ups from the previous chapters +and suggests the best strategies of how to choose data storage backends. + +When we decide to clean up a database, we should make this cleaning as fast as possible. Tests should always run fast. +Rebuilding the database from scratch is not the best way, but might be the only one. In any case, +you should use a special test database for testing. **Do not ever run tests on development or production databases!** + +## Db + +Codeception has a `Db` module, which takes on most of the tasks of database interaction. + +```yaml +modules: + config: + Db: + dsn: 'PDO DSN HERE' + user: 'root' + password: +``` + +
    +Use module parameters +to set the database credentials from environment variables or from application configuration files. +
    + +Db module can cleanup database between tests by loading a database dump. This can be done by parsing SQL file and +executing its commands using current connection + +```yaml +modules: + config: + Db: + dsn: 'PDO DSN HERE' + user: 'root' + password: + dump: tests/_data/your-dump-name.sql + cleanup: true # reload dump between tests + populate: true # load dump before all tests + +``` + + Alternatively an external tool (like mysql client, or pg_restore) can be used. This approach is faster and won't produce parsing errors while loading a dump. + Use `populator` config option to specify the command. For MySQL it can look like this: + +```yaml + modules: + enabled: + - Db: + dsn: 'mysql:host=localhost;dbname=testdb' + user: 'root' + password: '' + cleanup: true # run populator before each test + populate: true # run populator before all test + populator: 'mysql -u $user $dbname < tests/_data/dump.sql' +``` + +See the [Db module reference](http://codeception.com/docs/modules/Db#SQL-data-dump) for more examples. + +To ensure database dump is loaded before all tests add `populate: true`. To clean current database and reload dump between tests use `cleanup: true`. + +
    +A full database clean-up can be painfully slow if you use large database dumps. It is recommended to do more data testing +on the functional and integration levels, this way you can get performance bonuses from using ORM. +
    + +In acceptance tests, your tests are interacting with the application through a web server. This means that the test +and the application work with the same database. You should provide the same credentials in the Db module +that your application uses, then you can access the database for assertions (`seeInDatabase` actions) +and to perform automatic clean-ups. + +The Db module provides actions to create and verify data inside a database. + +If you want to create a special database record for one test, +you can use [`haveInDatabase`](http://codeception.com/docs/modules/Db#haveInDatabase) method of `Db` module: + +```php +haveInDatabase('posts', [ + 'title' => 'Top 10 Testing Frameworks', + 'body' => '1. Codeception' +]); +$I->amOnPage('/posts'); +$I->see('Top 10 Testing Frameworks'); + +``` + +`haveInDatabase` inserts a row with the provided values into the database. +All added records will be deleted at the end of the test. + +If you want to check that a table record was created +use [`seeInDatabase`](http://codeception.com/docs/modules/Db#haveInDatabase) method: + +```php +amOnPage('/posts/1'); +$I->fillField('comment', 'This is nice!'); +$I->click('Submit'); +$I->seeInDatabase('comments', ['body' => 'This is nice!']); +``` + +See the module [reference](http://codeception.com/docs/modules/Db) for other methods you can use for database testing. + +There are also modules for [MongoDb](http://codeception.com/docs/modules/MongoDb), +[Redis](http://codeception.com/docs/modules/Redis), +and [Memcache](http://codeception.com/docs/modules/Memcache) which behave in a similar manner. + +### Sequence + +If the database clean-up takes too long, you can follow a different strategy: create new data for each test. +This way, the only problem you might face is duplication of data records. +[Sequence](http://codeception.com/docs/modules/Sequence) was created to solve this. +It provides the `sq()` function which generates unique suffixes for creating data in tests. + +## ORM modules + +Your application is most likely using object-relational mapping (ORM) to work with the database. In this case, +Codeception allows you to use the ORM methods to work with the database, instead of accessing the database directly. +This way you can work with models and entities of a domain, and not on tables and rows. + +By using ORM in functional and integration tests, you can also improve performance of your tests. +Instead of cleaning up the database after each test, the ORM module will wrap all the database actions into transactions +and roll it back at the end. This way, no actual data will be written to the database. +This clean-up strategy is enabled by default, +you can disable it by setting `cleanup: false` in the configuration of any ORM module. + +### ActiveRecord + +Popular frameworks like Laravel, Yii, and Phalcon include an ActiveRecord data layer by default. +Because of this tight integration, you just need to enable the framework module, and use its configuration for database access. + +Corresponding framework modules provide similar methods for ORM access: + +* `haveRecord` +* `seeRecord` +* `dontSeeRecord` +* `grabRecord` + +They allow you to create and check data by model name and field names in the model. Here is the example in Laravel: + +```php +haveRecord('posts', ['body' => 'My first blogpost', 'user_id' => 1]); +$I->amOnPage('/posts/'.$id); +$I->see('My first blogpost', 'article'); +// check record exists +$I->seeRecord('posts', ['id' => $id]); +$I->click('Delete'); +// record was deleted +$I->dontSeeRecord('posts', ['id' => $id]); +``` + +
    +Laravel5 module also provides `haveModel`, `makeModel` methods which use factories to generate models with fake data. +
    + +If you want to use ORM for integration testing only, you should enable the framework module with only the `ORM` part enabled: + +```yaml +modules: + enabled: + - Laravel5: + - part: ORM +``` + +```yaml +modules: + enabled: + - Yii2: + - part: ORM +``` + +This way no web actions will be added to `$I` object. + +If you want to use ORM to work with data inside acceptance tests, you should also include only the ORM part of a module. +Please note that inside acceptance tests, web applications work inside a webserver, so any test data can't be cleaned up +by rolling back transactions. You will need to disable cleaning up, +and use the `Db` module to clean the database up between tests. Here is a sample config: + +```yaml +modules: + enabled: + - WebDriver: + url: http://localhost + browser: firefox + - Laravel5: + cleanup: false + - Db +``` + +### DataMapper + +Doctrine is also a popular ORM, unlike some others it implements the DataMapper pattern and is not bound to any framework. +The [Doctrine2](http://codeception.com/docs/modules/Doctrine2) module requires an `EntityManager` instance to work with. +It can be obtained from a Symfony framework or Zend Framework (configured with Doctrine): + +```yaml +modules: + enabled: + - Symfony + - Doctrine2: + depends: Symfony +``` + +```yaml +modules: + enabled: + - ZF2 + - Doctrine2: + depends: ZF2 +``` + +If no framework is used with Doctrine you should provide the `connection_callback` option +with a valid callback to a function which returns an `EntityManager` instance. + +Doctrine2 also provides methods to create and check data: + +* `haveInRepository` +* `grabFromRepository` +* `grabEntitiesFromRepository` +* `seeInRepository` +* `dontSeeInRepository` + +### DataFactory + +Preparing data for testing is a very creative, although boring, task. If you create a record, +you need to fill in all the fields of the model. It is much easier to use [Faker](https://github.com/fzaninotto/Faker) +for this task, which is more effective to set up data generation rules for models. +Such a set of rules is called *factories* +and are provided by the [DataFactory](http://codeception.com/docs/modules/DataFactory) module. + +Once configured, it can create records with ease: + +```php +have('App\Model\User'); +// creates 3 posts +$I->haveMultiple('App\Model\Post', 3); +``` + +Created records will be deleted at the end of a test. +The DataFactory module only works with ORM, so it requires one of the ORM modules to be enabled: + +```yaml +modules: + enabled: + - Yii2: + configFile: path/to/config.php + - DataFactory: + depends: Yii2 +``` + +```yaml +modules: + enabled: + - Symfony + - Doctrine2: + depends: Symfony + - DataFactory: + depends: Doctrine2 +``` + +DataFactory provides a powerful solution for managing data in integration/functional/acceptance tests. +Read the [full reference](http://codeception.com/docs/modules/DataFactory) to learn how to set this module up. + +## Conclusion + +Codeception also assists the developer when dealing with data. Tools for database population +and cleaning up are bundled within the `Db` module. If you use ORM, you can use one of the provided framework modules +to operate with database through a data abstraction layer, and use the DataFactory module to generate new records with ease. diff --git a/vendor/codeception/codeception/docs/10-WebServices.md b/vendor/codeception/codeception/docs/10-WebServices.md new file mode 100644 index 000000000..7c5556294 --- /dev/null +++ b/vendor/codeception/codeception/docs/10-WebServices.md @@ -0,0 +1,284 @@ +# Testing WebServices + +The same way we tested a web site, Codeception allows you to test web services. They are very hard to test manually, so it's a really good idea to automate web service testing. We have SOAP and REST as standards, which are represented in corresponding modules, which we will cover in this chapter. + +You should start by creating a new test suite, (which was not provided by the `bootstrap` command). We recommend calling it **api** and using the `ApiTester` class for it. + +```bash +$ php codecept generate:suite api +``` + +We will put all the api tests there. + +## REST + +The REST web service is accessed via HTTP with standard methods: `GET`, `POST`, `PUT`, `DELETE`. They allow users to receive and manipulate entities from the service. Accessing a WebService requires an HTTP client, so for using it you need the module `PhpBrowser` or one of framework modules set up. For example, we can use the `Symfony` module for Symfony2 applications in order to ignore web server and test web service internally. + +Configure modules in `api.suite.yml`: + +``` yaml +actor: ApiTester +modules: + enabled: + - REST: + url: http://serviceapp/api/v1/ + depends: PhpBrowser +``` + +The REST module will connect to `PhpBrowser` according to this configuration. Depending on the web service we may deal with XML or JSON responses. Codeception handles both data formats well, however If you don't need one of them, you can explicitly specify that the JSON or XML parts of the module will be used: + +``` yaml +actor: ApiTester +modules: + enabled: + - REST: + url: http://serviceapp/api/v1/ + depends: PhpBrowser + part: Json +``` + +API tests can be functional and be executed using Symfony, Laravel5, Zend, or any other framework module. You will need slightly update configuration for it: + +``` yaml +actor: ApiTester +modules: + enabled: + - REST: + url: /api/v1/ + depends: Laravel5 +``` + +Once we have configured our new testing suite, we can create the first sample test: + +```bash +$ php codecept generate:cept api CreateUser +``` + +It will be called `CreateUserCept.php`. We can use it to test the creation of a user via the REST API. + +```php +wantTo('create a user via API'); +$I->amHttpAuthenticated('service_user', '123456'); +$I->haveHttpHeader('Content-Type', 'application/x-www-form-urlencoded'); +$I->sendPOST('/users', ['name' => 'davert', 'email' => 'davert@codeception.com']); +$I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); // 200 +$I->seeResponseIsJson(); +$I->seeResponseContains('{"result":"ok"}'); + +``` + +We can use HTTP code constants from `Codeception\Util\HttpCode` instead of numeric values to check response code in `seeResponseCodeIs` and `dontSeeResponseCodeIs` methods. + +### Testing JSON Responses + +The last line of the previous example verified that the response contained the provided string. However we shouldn't rely on it, as depending on content formatting we can receive different results with the same data. What we actually need is to check that the response can be parsed and it contains some of the values we expect. In the case of JSON we can use the `seeResponseContainsJson` method + +``` php +seeResponseContainsJson(['result' => 'ok']); +// it can match tree-like structures as well +$I->seeResponseContainsJson([ + 'user' => [ + 'name' => 'davert', + 'email' => 'davert@codeception.com', + 'status' => 'inactive' + ] +]); + +``` + +You may want to perform even more complex assertions on a response. This can be done by writing your own methods in the [Helper](http://codeception.com/docs/06-ReusingTestCode#Modules-and-Helpers) classes. To access the latest JSON response you will need to get the `response` property of the `REST` module. Let's demonstrate it with the `seeResponseIsHtml` method: + +```php +getModule('REST')->response; + $this->assertRegExp('~^.*?<\/html>~m', $response); + } +} + +``` + +The same way you can receive request parameters and headers. + +### Validate JSON structures + +It is pretty common for API tests to not only validate the received data but to check the structure of the response. Response data is not usually considered to be consistent, and may change on each request, however the JSON/XML structure should be kept the same for an API version. In order to check response structure the REST module has some useful methods. + +If we expect a JSON response to be received we can check its structure with [JSONPath](http://goessner.net/articles/JsonPath/). It looks and sounds like XPath but is designed to work with JSON data, however we can convert JSON into XML and use XPath to validate the structure. Both approaches are valid and can be used in the REST module: + +```php +wantTo('validate structure of GitHub api responses'); +$I->sendGET('/users'); +$I->seeResponseCodeIs(HttpCode::OK); // 200 +$I->seeResponseIsJson(); +$I->seeResponseJsonMatchesJsonPath('$[0].user.login'); +$I->seeResponseJsonMatchesXpath('//user/login'); + +``` + +More detailed check can be applied if you need to validate the type of fields in a response. +You can do that by using with a [seeResponseMatchesJsonType](http://codeception.com/docs/modules/REST#seeResponseMatchesJsonType) action in which you define the structure of JSON response. + +```php +sendGET('/users/1'); +$I->seeResponseCodeIs(HttpCode::OK); // 200 +$I->seeResponseIsJson(); +$I->seeResponseMatchesJsonType([ + 'id' => 'integer', + 'name' => 'string', + 'email' => 'string:email', + 'homepage' => 'string:url|null', + 'created_at' => 'string:date', + 'is_active' => 'boolean' +]); + +``` + +Codeception uses this simple and lightweight definitions format which can be [easily learned and extended](http://codeception.com/docs/modules/REST#seeResponseMatchesJsonType). + +### Testing XML Responses + +In case your REST API works with XML format you can use similar methods to test its data and structure. +There is `seeXmlResponseIncludes` method to match inclusion of XML parts in response, and `seeXmlResponseMatchesXpath` to validate its structure. + +```php +wantTo('validate structure of GitHub api responses'); +$I->sendGET('/users.xml'); +$I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); // 200 +$I->seeResponseIsXml(); +$I->seeXmlResponseMatchesXpath('//user/login'); +$I->seeXmlResponseIncludes(XmlUtils::toXml( + 'user' => [ + 'name' => 'davert', + 'email' => 'davert@codeception.com', + 'status' => 'inactive' + ] +)); + +``` + +We are using XmlUtils class which allows us to build XML structures in a clean manner. The `toXml` method may accept a string or array and returns \DOMDocument instance. If your XML contains attributes and so can't be represented as a PHP array you can create XML using the [XmlBuilder](http://codeception.com/docs/reference/XmlBuilder) class. We will take a look at it a bit more in next section. + +
    +Use `\Codeception\Util\Xml::build()` to create XmlBuilder instance. +
    + +## SOAP + +SOAP web services are usually more complex. You will need PHP [configured with SOAP support](http://php.net/manual/en/soap.installation.php). Good knowledge of XML is required too. `SOAP` module uses specially formatted POST request to connect to WSDL web services. Codeception uses `PhpBrowser` or one of framework modules to perform interactions. If you choose using a framework module, SOAP will automatically connect to the underlying framework. That may improve the speed of a test execution and will provide you with more detailed stack traces. + +Let's configure `SOAP` module to be used with `PhpBrowser`: + +``` yaml +actor: ApiTester +modules: + enabled: + - SOAP: + depends: PhpBrowser + endpoint: http://serviceapp/api/v1/ +``` + +SOAP request may contain application specific information, like authentication or payment. This information is provided with SOAP header inside the `` element of XML request. In case you need to submit such header, you can use `haveSoapHeader` action. For example, next line of code + +```php +haveSoapHeader('Auth', array('username' => 'Miles', 'password' => '123456')); + +``` +will produce this XML header + +```xml + + + Miles + 123456 + + +``` + +Use `sendSoapRequest` method to define the body of your request. + +```php +sendSoapRequest('CreateUser', 'Miles Davismiles@davis.com'); + +``` + +This call will be translated to XML: + +```xml + + + Miles Davis + miles@davis.com + + +``` + +And here is the list of sample assertions that can be used with SOAP. + +```php +seeSoapResponseEquals('500'); +$I->seeSoapResponseIncludes('1'); +$I->seeSoapResponseContainsStructure(''); +$I->seeSoapResponseContainsXPath('//result/user/name[@id=1]'); + +``` + +In case you don't want to write long XML strings, consider using [XmlBuilder](http://codeception.com/docs/reference/XmlBuilder) class. It will help you to build complex XMLs in jQuery-like style. +In the next example we will use `XmlBuilder` instead of regular XML. + +```php +wantTo('create user'); +$I->haveSoapHeader('Session', array('token' => '123456')); +$I->sendSoapRequest('CreateUser', Xml::build() + ->user->email->val('miles@davis.com')); +$I->seeSoapResponseIncludes(Xml::build() + ->result->val('Ok') + ->user->attr('id', 1) +); + +``` + +It's up to you to decide whether to use `XmlBuilder` or plain XML. `XmlBuilder` will return XML string as well. + +You may extend current functionality by using `SOAP` module in your helper class. To access the SOAP response as `\DOMDocument` you can use `response` property of `SOAP` module. + +```php +getModule('SOAP')->response; + $this->assertTrue($response->schemaValidate($schema)); + } +} + +``` + +## Conclusion + +Codeception has two modules that will help you to test various web services. They need a new `api` suite to be created. Remember, you are not limited to test only response body. By including `Db` module you may check if a user has been created after the `CreateUser` call. You can improve testing scenarios by using REST or SOAP responses in your helper methods. diff --git a/vendor/codeception/codeception/docs/11-Codecoverage.md b/vendor/codeception/codeception/docs/11-Codecoverage.md new file mode 100644 index 000000000..97cf54ba2 --- /dev/null +++ b/vendor/codeception/codeception/docs/11-Codecoverage.md @@ -0,0 +1,133 @@ +# Code Coverage + +At some point you want to review which parts of your application are tested well and which are not. +Just for this case the [CodeCoverage](http://en.wikipedia.org/wiki/Code_coverage) is used. When you execute your tests to collect coverage report, +you will receive statistics of all classes, methods, and lines triggered by these tests. +The ratio between all lines in script and all touched lines is a main coverage criterion. In the ideal world you should get 100% code coverage, but in reality 80% is really enough. Because even 100% code coverage rate doesn't save you from fatal errors and crashes. + +*To collect coverage information `xdebug` is required**. + +![Code Coverage Example](http://codeception.com/images/coverage.png) + +Coverage data can be collected manually for both local and remote tests. Remote tests may be executed on different nodes, +or locally but running through web server. It may look hard to collect code coverage for Selenium tests or PhpBrowser tests. But Codeception supports remote codecoverage as well as local. + +### Configuration + +To enable code coverage put these lines in the global configuration file `codeception.yml`: + +``` yaml +coverage: + enabled: true +``` + +That's ok for now. But what files should be present in final coverage report? +Pass an array of files or directory to include/exclude sections. The path ending with '\*' matches the directory. +Also you can use '\*' mask in a file name, i.e. `app/models/*Model.php` to match all models. + +There is a shortcut if you don't need that complex filters: + +``` yaml +coverage: + enabled: true + include: + - app/* + exclude: + - app/cache/* +``` +Include and exclude options can be redefined for each suite in corresponding config files. + +By default, if coverage is reported to be < 35% it is marked as low, and >70% is high coverage. +You can also define high and low boundaries with `low_limit` and `high_limit` config options: + +```yaml +coverage: + enabled: true + low_limit: 30 + high_limit: 60 +``` + +## Local CodeCoverage + +The basic codecoverage can be collected for functional and unit tests. +If you performed configuration steps from above, you are ready to go. +All you need is to execute codeception with `--coverage` option. + +To generate a clover xml report or a tasty html report append also `--coverage-xml` and `--coverage-html` options. + +``` yaml +codecept run --coverage --coverage-xml --coverage-html +``` + +XML and HTML reports are stored to the `_output` directory. The best way to review report is to open `index.html` from `tests/_output/coverage` in your browser. +XML clover reports are used by IDEs (like PHPStorm) or Continuous Integration servers (like Jenkins). + +## Remote CodeCoverage + +### Local Server + +If you run your application via Webserver (Apache, Nginx, PHP WebServer) you don't have a direct access to tested code, +so collecting coverage becomes a non-trivial task. The same goes for scripts that are tested on different nodes. +To get access to this code you need `xdebug` installed with `remote_enable` option turned on. +Codeception also requires a little spy to interact with your application. As your application runs standalone, +without even knowing it is being tested, a small file should be included in order to collect coverage info. + +This file is called `c3.php` and is [available on GitHub](https://github.com/Codeception/c3). +`c3.php` should be downloaded and included in your application at the very first line from controller. +By sending special headers Codeception will command your application when to start codecoverage collection and when to stop it. +After the suite is finished, a report will be stored and Codeception will grab it from your application. + +Please, follow installation instructions described in a [readme file](https://github.com/Codeception/c3). + +To connect to `c3` Codeception uses url config from PhpBrowser or WebDriver module. +But URL of index with `c3.php` included can be specified explicitly with `c3_url` parameter defined: + +``` yaml +coverage: + # url of file which includes c3 router. + c3_url: 'http://127.0.0.1:8000/index-test.php/' +``` +> note: we can't have multiple `c3_url` on same host difference only by port. Please, use alias of domain +(i.e. `frontend.dev:8000`,`backend.dev:8080`) instead. + +After the `c3.php` file is included in application you can start gather coverage. +In case you execute your application locally there is nothing to be changed in config. +All codecoverage reports will be collected as usual and merged afterwards. +Think of it: Codeception runs remote coverage in the same way as local. + +### Remote Server + +But if you run tests on different server (or your webserver doesn't use code from current directory) a single option `remote` should be added to config. +For example, let's turn on remote coverage for acceptance suite in `acceptance.suite.yml`: + +``` yaml +coverage: + remote: true +``` + +In this case remote Code Coverage results won't be merged with local ones, if this option is enabled. +Merging is possible only in case a remote and local files have the same path. +But in case of running tests on a remote server we are not sure of it. + +CodeCoverage results from remote server will be saved to `tests/_output` directory. Please note that remote codecoverage results won't be displayed in console by the reason mentioned above: local and remote results can't be merged, and console displays results for local codecoverage. + +### Remote Context Options + +HTML report generation can at times take a little more time than the default 30 second timeout. Or maybe you want to alter SSL settings (verify_peer, for example) +To alter the way c3 sends it's service requests to your webserver (be it a local or a remote one), you can use the `remote_context_options` key in `coverage` settings. + +``` yaml +coverage: + remote_context_options: + http: + timeout: 60 + ssl: + verify_peer: false +``` + +Context stream options are [well documented at php.net](http://php.net/manual/en/context.php) + +## Conclusion + +It's never been easier to setup local and remote code coverage. Just one config and one additional file to include! +**With Codeception you can easily generate CodeCoverage reports for your Selenium tests** (or other acceptance or api tests). Mixing reports for `acceptance`, `functional`, and `unit` suites provides you with the most complete information on which parts of your applications are tested and which are not. diff --git a/vendor/codeception/codeception/docs/12-ContinuousIntegration.md b/vendor/codeception/codeception/docs/12-ContinuousIntegration.md new file mode 100644 index 000000000..bf077354a --- /dev/null +++ b/vendor/codeception/codeception/docs/12-ContinuousIntegration.md @@ -0,0 +1,156 @@ +# Continuous Integration + +Once you get testing suite up and running you are interested in running your tests regularly. If you ensure that tests are running on every code change or at least once a day you can be sure that no regression is introduced. This allows to keep you system stable. But developers are not so passionate about running all tests manually, they also can forget to execute tests before pushing code to production... The solution is simple, test execution should be automated. Instead of running them locally it is better to have dedicated server responsible for running tests for a team. This way we can ensure that everyone's tests executed, which commit made a regression in codebase, and that we can deploy only once tests pass. + +There are many Continuous Integration Servers out there. We will try to list basic steps to setup Codeception tests with them. If your CI system is not mentioned, you can get the idea by analogy. Please also help us to extend this guide by adding instructions for different CIs. + +## Jenkins + +![Jenkins](http://codeception.com/images/jenkins/Jenk1.png) + +[Jenkins](http://jenkins-ci.org/) is one of the most popular open-source solution on market. It is easy to setup and is easy to customize by applying various plugins. + +![Create new job in Jenkins](http://codeception.com/images/jenkins/Jenk2.png) + +### Preparing Jenkins + +It is recommended to have the next plugins installed: + +* **Git Plugin** - for building tests for Git repo +* **Green Balls** - to display success results in green. +* **xUnit Plugin**, **jUnit Plugin** - to process and display Codeception XML reports +* **HTML Publisher Plugin** - to process Codeception HTML reports +* **AnsiColor** - to show colorized console output. + +![Jenkins Plugins](http://codeception.com/images/jenkins/Jenk3.png) + +### Basic Setup + +At first we need to create build project. Depending on your needs you can set up periodical build or trigger build once the change is pushed to GitHub (you will need GitHub plugin for that). + +We need to define build steps. The most simple setup may look like this: + +``` +php codecept run +``` + +![Jenkins Codeception Build Step](http://codeception.com/images/jenkins/Jenk5.png) + +Then we can start the very first job and check the execution progress. If tests fail we will see that in console: + +![Jenkins Console Output](http://codeception.com/images/jenkins/Jenk6.png) + +### XML Reports + +But we don't want to analyze console output for each failing build. Especially If Jenkins can collect and display the results inside its web UI. Codeception can export its results using JUnit XML format. To generate XML report on each build we will need to append `--xml` option to Codeception execution command. Codeception will print `result.xml` file containing information about test status with steps and stack traces for failing tests. + +Now let's update our build step to generate xml: + +``` +php codecept run --xml +``` + +and ask Jenkins to collect resulted XML. This can be done as part of Post-build actions. Let's add *Publish xUnit test result report* action and configure it to use with PHPUnit reports. + +![Use PHPUnit xUnit builder for Jenkins](http://codeception.com/images/jenkins/Jenk7.png) + +Now we should specify path to PHPUnit style XML reports. In case of standard Codeception setup we should specify `tests/_output/*.xml` as a pattern for matching resulted XMLs. Now we save the project and rebuild it. + +![Jenkins Result Trend](http://codeception.com/images/jenkins/Jenk8.png) + +Now for all builds we will see results trend graph that shows us percentage of passing and failing tests. We also will see a **Latest Test Result** link which will lead to to the page where all executed tests and their stats listed in a table. + +### HTML Reports + +To get more details on steps executed you can generate HTML report and use Jenkins to display them. + +``` +php codecept run --html +``` + +Now we need HTML Publisher plugin configured to display generated HTML files. It should be added as post-build action similar way we did it for XML reports. + +![Jenkins Codeception HTML Setup](http://codeception.com/images/jenkins/Jenk9.png) + +Jenkins should locate `report.html` at `tests/_output/`. Now Jenkins will display HTML reports for each build. + +![Jenkins HTML Report](http://codeception.com/images/jenkins/Jenki10.png) +![Jenkins Codeception HTML Results](http://codeception.com/images/jenkins/Jenki11.png) + +## TeamCity + +![TeamCity](http://codeception.com/images/teamcity/logo.jpg) + +TeamCity is a hosted solution from JetBrains. The setup of it can be a bit tricky as TeamCity uses its own reporter format for parsing test results. PHPUnit since version 5.x has integrated support for this format, so does Codeception. What we need to do is to configure Codeception to use custom reporter. By default there is `--report` option which provides an alternative output. You can change the reporter class in `codeception.yml` configuration: + +```yaml +reporters: + report: PHPUnit_Util_Log_TeamCity +``` + +As an alternative you can use 3rd-party [TeamCity extension](https://github.com/neronmoon/TeamcityCodeception) for better reporting. + +After you create build project you should define build step with Codeception which is + +``` +php codecept run --report +``` + +![build step](http://codeception.com/images/teamcity/build.png) + +Once you execute your first build you should see detailed report inside TeamCity interface: + +![report](http://codeception.com/images/teamcity/report2.png) + +## TravisCI + +![Travis CI](http://codeception.com/images/travis.png) + +Travis CI is popular service CI with good GitHub integration. Codeception is self-tested with Travis CI. There nothing special about configuration. Just add to the bottom line of travis configuration: + +```yaml +php codecept run +``` + +More details on configuration can be learned from Codeception's [`.travis.yml`](https://github.com/Codeception/Codeception/blob/master/.travis.yml). + +Travis doesn't provide visualization for XML or HTML reports so you can't view reports in format any different than console output. However, Codeception produces nice console output with detailed error reports. + +## GitLab + +![report](http://codeception.com/images/gitlab/logo.png) + +If a file `.gitlab-ci.yml` exists in the root of the git repository, GitLab will run a pipeline each time you push to the gitlab server. The file configures the docker image that will be called. Below is a sample which loads a php7 docker image, clones your files, installs composer dependencies, runs the built-in php webserver and finally runs codeception: + +```yaml +# Select image from https://hub.docker.com/_/php/ +image: php:7.0 + +# Select what we should cache +cache: + paths: + - vendor/ + +before_script: +# Install git and unzip (composer will need them) +- apt-get update && apt-get install -qqy git unzip +# Install composer +- curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer +# Install all project dependencies +- composer install +# Run webserver +- php -S localhost:8085 --docroot public &>/dev/null& + +# Test +test: + script: + - vendor/bin/codecept run +``` + +![report](http://codeception.com/images/gitlab/build.png) + +For acceptance testing you can use `codeception/codeception` docker image as base. + +## Conclusion + +It is highly recommended to use Continuous Integration system in development. Codeception is easy to install and run in any CI systems. However, each of them has their differences you should take into account. You can use different reporters to provide output in format expected by CI system. diff --git a/vendor/codeception/codeception/docs/12-ParallelExecution.md b/vendor/codeception/codeception/docs/12-ParallelExecution.md new file mode 100644 index 000000000..9ab0bf7d4 --- /dev/null +++ b/vendor/codeception/codeception/docs/12-ParallelExecution.md @@ -0,0 +1,427 @@ +# Parallel Execution + +When execution time of your tests is longer than a coffee break, it is a good reason to think about making your tests faster. If you have already tried to run them on SSD drive, or to use PhantomJS instead of Selenium, and the execution time still upsets you, it might be a good idea to run your tests in parallel. + +## Where to start + +Codeception does not provide a command like `run-parallel`. There is no common solution that can play well for everyone. Here are the questions you will need to answer: + +* How parallel processes will be executed? +* How parallel processes won't affect each other? +* Will they use different databases? +* Will they use different hosts? +* How should I split my tests across parallel processes? + +There are two approaches to achieve parallelization. We can use [Docker](http://docker.com) and run each process inside isolated containers, and have those containers executed simultaneously. + +Docker works really well for isolating testing environments. +By the time of writing this chapter, we didn't have an awesome tool like it. This chapter demonstrates how to manage parallel execution manually. As you will see we spend too much effort trying to isolate tests which Docker does for free. Today we recommend using Docker for parallel testing. + +## Docker + +Please make sure you have `docker` or [Docker Toolbox](https://www.docker.com/products/docker-toolbox) installed. Docker experience is required as well. + +### Using Codeception Docker image + +Run official Codeception image from DockerHub: + + docker run codeception/codeception + +Running tests from a project, by mounting the current path as a host-volume into the container. +The default working directory in the container is `/project`. + + docker run -v ${PWD}:/project codeception/codeception run + +To prepare application and tests to be executed inside containers you will need to use [Docker Compose](https://docs.docker.com/compose/) to run multiple containers and connect them together. + +Define all required services in `docker-compose.yml` file. Make sure to follow Docker philisophy: 1 service = 1 container. So each process should be defined as its own service. Those services can use official Docker images pulled from DockerHub. Directories with code and tests should be mounted using `volume` directive. And exposed ports should be explicitly set using `ports` directive. + +We prepared a sample config with codeception, web server, database, and selenium with firefox to be executed together. + +```yaml +version: '2' +services: + codeception: + image: codeception/codeception + depends_on: + - firefox + - web + volumes: + - ./src:/src + - ./tests:/tests + - ./codeception.yml:/codeception.yml + web: + image: php:7-apache + depends_on: + - db + volumes: + - .:/var/www/html + db: + image: percona:5.6 + ports: + - '3306' + firefox: + image: selenium/standalone-firefox-debug:2.53.0 + ports: + - '4444' + - '5900' +``` + +Codeception service will execute command `codecept run` but only after all services are started. This is defined using `depends_on` parameter. + +It is easy to add more custom services. For instance to use Redis you just simple add this lines: + +```yaml + redis: + image: redis:3 +``` + +By default the image has codecept as its entrypoint, to run the tests simply supply the run command + +``` +docker-compose run --rm codecept help +``` + +Run suite + +``` +docker-compose run --rm codecept run acceptance +``` + +``` +docker-compose run --rm codecept run acceptance LoginCest +``` + +Development bash + +``` +docker-compose run --rm --entrypoint bash codecept +``` + +And finally to execute testing in parallel you should define how you split your tests and run parallel processes for `docker-compose`. Here we split tests by suites, but you can use different groups to split your tests. In section below you will learn how to do that with Robo. + +``` +docker-compose --project-name test-web run -d --rm codecept run --html report-web.html web & \ +docker-compose --project-name test-unit run -d --rm codecept run --html report-unit.html unit & \ +docker-compose --project-name test-functional run -d --rm codecept run --html report-functional.html functional +``` + +At the end, it is worth specifying that Docker setup can be complicated and please make sure you understand Docker and Docker Compose before proceed. We prepared some links that might help you: + +* [Acceptance Tests Demo Repository](https://github.com/dmstr/docker-acception) +* [Dockerized Codeception Internal Tests](https://github.com/Codeception/Codeception/blob/master/tests/README.md#dockerized-testing) +* [Phundament App with Codeception](https://gist.github.com/schmunk42/d6893a64963509ff93daea80f722f694) + +If you want to automate splitting tests by parallel processes, and executing them using PHP script you should use Robo task runner to do that. + +## Robo + +### What to do + +Parallel Test Execution consists of 3 steps: + +* splitting tests +* running tests in parallel +* merging results + +We propose to perform those steps using a task runner. In this guide we will use [**Robo**](http://robo.li) task runner. It is a modern PHP task runner that is very easy to use. It uses [Symfony Process](http://symfony.com/doc/current/components/process.html) to spawn background and parallel processes. Just what we need for the step 2! What about steps 1 and 3? We have created robo [tasks](https://github.com/Codeception/robo-paracept) for splitting tests into groups and merging resulting JUnit XML reports. + +To conclude, we need: + +* [Robo](http://robo.li), a task runner. +* [robo-paracept](https://github.com/Codeception/robo-paracept) - Codeception tasks for parallel execution. + +## Preparing Robo and Robo-paracept + +Execute this command in an empty folder to install Robo and Robo-paracept : +```bash +$ composer require codeception/robo-paracept:dev-master +``` + +You need to install Codeception after, if codeception is already installed it will not work. +```bash +$ composer require codeception/codeception +``` + +### Preparing Robo + +Intitalizes basic RoboFile in the root of your project + +```bash +$ robo init +``` + +Open `RoboFile.php` to edit it + +```php +taskSplitTestFilesByGroups(5) + ->projectRoot('.') + ->testsFrom('tests/acceptance') + ->groupsTo('tests/_data/paracept_') + ->run(); + + /* + // Split your tests by single tests (alternatively) + $this->taskSplitTestsByGroups(5) + ->projectRoot('.') + ->testsFrom('tests/acceptance') + ->groupsTo('tests/_data/paracept_') + ->run(); + */ + } + +``` + +Let's prepare group files: + +```bash +$ robo parallel:split-tests + + [Codeception\Task\SplitTestFilesByGroupsTask] Processing 33 files + [Codeception\Task\SplitTestFilesByGroupsTask] Writing tests/_data/paracept_1 + [Codeception\Task\SplitTestFilesByGroupsTask] Writing tests/_data/paracept_2 + [Codeception\Task\SplitTestFilesByGroupsTask] Writing tests/_data/paracept_3 + [Codeception\Task\SplitTestFilesByGroupsTask] Writing tests/_data/paracept_4 + [Codeception\Task\SplitTestFilesByGroupsTask] Writing tests/_data/paracept_5 +``` + +Now we have group files. We should update `codeception.yml` to load generated group files. In our case we have groups: *paracept_1*, *paracept_2*, *paracept_3*, *paracept_4*, *paracept_5*. + +```yaml +groups: + paracept_*: tests/_data/paracept_* +``` + +Let's try to execute tests from the second group: + +```bash +$ codecept run acceptance -g paracept_2 +``` + +#### Step 2: Running Tests + +Robo has `ParallelExec` task to spawn background processes. + +##### Inside Container + +If you are using [Docker](#docker) containers you can launch multiple Codeception containers for different groups: + +```php +public function parallelRun() +{ + $parallel = $this->taskParallelExec(); + for ($i = 1; $i <= 5; $i++) { + $parallel->process( + $this->taskExec('docker-compose run --rm codecept run') + ->opt('group', "paracept_$i") // run for groups paracept_* + ->opt('xml', "tests/_log/result_$i.xml"); // provide xml report + ); + } + return $parallel->run(); +} +``` + +##### Locally + +If you want to run tests locally just use preinstalled `taskCodecept` task of Robo to define Codeception commands and put them inside `parallelExec`. + +```php +taskParallelExec(); + for ($i = 1; $i <= 5; $i++) { + $parallel->process( + $this->taskCodecept() // use built-in Codecept task + ->suite('acceptance') // run acceptance tests + ->group("paracept_$i") // for all paracept_* groups + ->xml("tests/_log/result_$i.xml") // save XML results + ); + } + return $parallel->run(); +} +``` + +In case you don't use containers you can isolate processes by starting different web servers and databases per each test process. + +We can define different databases for different processes. This can be done using [Environments](http://codeception.com/docs/07-AdvancedUsage#Environments). Let's define 5 new environments in `acceptance.suite.yml`: + +```yaml +actor: AcceptanceTester +modules: + enabled: + - Db: + dsn: 'mysql:dbname=testdb;host=127.0.0.1' + user: 'root' + dump: 'tests/_data/dump.sql' + populate: true + cleanup: true + - WebDriver: + url: 'http://localhost/' +env: + env1: + modules: + config: + Db: + dsn: 'mysql:dbname=testdb_1;host=127.0.0.1' + WebDriver: + url: 'http://test1.localhost/' + env2: + modules: + config: + Db: + dsn: 'mysql:dbname=testdb_2;host=127.0.0.1' + WebDriver: + url: 'http://test2.localhost/' + env3: + modules: + config: + Db: + dsn: 'mysql:dbname=testdb_3;host=127.0.0.1' + WebDriver: + url: 'http://test3.localhost/' + env4: + modules: + config: + Db: + dsn: 'mysql:dbname=testdb_4;host=127.0.0.1' + WebDriver: + url: 'http://test4.localhost/' + env5: + modules: + config: + Db: + dsn: 'mysql:dbname=testdb_5;host=127.0.0.1' + WebDriver: + url: 'http://test5.localhost/' +``` + +---- + +After the `parallelRun` method is defined you can execute tests with + +```bash +$ robo parallel:run +``` + +#### Step 3: Merge Results + +In case of `parallelExec` task we recommend to save results as JUnit XML, which can be merged and plugged into Continuous Integration server. + +```php +taskMergeXmlReports(); + for ($i=1; $i<=5; $i++) { + $merge->from("tests/_output/result_paracept_$i.xml"); + } + $merge->into("tests/_output/result_paracept.xml")->run(); + } + +``` +Now, we can execute : +```bash +$ robo parallel:merge-results +``` +`result_paracept.xml` file will be generated. It can be processed and analyzed. + +#### All Together + +To create one command to rule them all we can define new public method `parallelAll` and execute all commands. We will save the result of `parallelRun` and use it for our final exit code: + +```php +parallelSplitTests(); + $result = $this->parallelRun(); + $this->parallelMergeResults(); + return $result; + } + +``` + +## Conclusion + +Codeception does not provide tools for parallel test execution. This is a complex task and solutions may vary depending on a project. We use [Robo](http://robo.li) task runner as an external tool to perform all required steps. To prepare our tests to be executed in parallel we use Codeception features of dynamic groups and environments. To do even more we can create Extensions and Group classes to perform dynamic configuration depending on a test process. diff --git a/vendor/codeception/codeception/docs/modules/AMQP.md b/vendor/codeception/codeception/docs/modules/AMQP.md new file mode 100644 index 000000000..c7e332eea --- /dev/null +++ b/vendor/codeception/codeception/docs/modules/AMQP.md @@ -0,0 +1,193 @@ +# AMQP + +This module interacts with message broker software that implements +the Advanced Message Queuing Protocol (AMQP) standard. For example, RabbitMQ (tested). + +
    +To use this module with Composer you need "php-amqplib/php-amqplib": "~2.4" package. +
    + +## Config + +* host: localhost - host to connect +* username: guest - username to connect +* password: guest - password to connect +* vhost: '/' - vhost to connect +* cleanup: true - defined queues will be purged before running every test. +* queues: [mail, twitter] - queues to cleanup +* single_channel - create and use only one channel during test execution + +### Example + + modules: + enabled: + - AMQP: + host: 'localhost' + port: '5672' + username: 'guest' + password: 'guest' + vhost: '/' + queues: [queue1, queue2] + single_channel: false + +## Public Properties + +* connection - AMQPStreamConnection - current connection + +## Actions + +### bindQueueToExchange + +Binds a queue to an exchange + +This is an alias of method `queue_bind` of `PhpAmqpLib\Channel\AMQPChannel`. + +```php +bindQueueToExchange( + 'nameOfMyQueueToBind', // name of the queue + 'transactionTracking.transaction', // exchange name to bind to + 'your.routing.key' // Optionally, provide a binding key +) +``` + + * `param string` $queue + * `param string` $exchange + * `param string` $routing_key + * `param bool` $nowait + * `param array` $arguments + * `param int` $ticket + * `return` mixed|null + +### declareExchange + +Declares an exchange + +This is an alias of method `exchange_declare` of `PhpAmqpLib\Channel\AMQPChannel`. + +```php +declareExchange( + 'nameOfMyExchange', // exchange name + 'topic' // exchange type +) +``` + + * `param string` $exchange + * `param string` $type + * `param bool` $passive + * `param bool` $durable + * `param bool` $auto_delete + * `param bool` $internal + * `param bool` $nowait + * `param array` $arguments + * `param int` $ticket + * `return` mixed|null + +### declareQueue + +Declares queue, creates if needed + +This is an alias of method `queue_declare` of `PhpAmqpLib\Channel\AMQPChannel`. + +```php +declareQueue( + 'nameOfMyQueue', // exchange name +) +``` + + * `param string` $queue + * `param bool` $passive + * `param bool` $durable + * `param bool` $exclusive + * `param bool` $auto_delete + * `param bool` $nowait + * `param array` $arguments + * `param int` $ticket + * `return` mixed|null + +### grabMessageFromQueue + +Takes last message from queue. + +``` php +grabMessageFromQueue('queue.emails'); +?> +``` + + * `param string` $queue + * `return` \PhpAmqpLib\Message\AMQPMessage + +### purgeAllQueues + +Purge all queues defined in config. + +``` php +purgeAllQueues(); +?> +``` + +### purgeQueue + +Purge a specific queue defined in config. + +``` php +purgeQueue('queue.emails'); +?> +``` + + * `param string` $queueName + +### pushToExchange + +Sends message to exchange by sending exchange name, message +and (optionally) a routing key + +``` php +pushToExchange('exchange.emails', 'thanks'); +$I->pushToExchange('exchange.emails', new AMQPMessage('Thanks!')); +$I->pushToExchange('exchange.emails', new AMQPMessage('Thanks!'), 'severity'); +?> +``` + + * `param string` $exchange + * `param string|\PhpAmqpLib\Message\AMQPMessage` $message + * `param string` $routing_key + +### pushToQueue + +Sends message to queue + +``` php +pushToQueue('queue.jobs', 'create user'); +$I->pushToQueue('queue.jobs', new AMQPMessage('create')); +?> +``` + + * `param string` $queue + * `param string|\PhpAmqpLib\Message\AMQPMessage` $message + +### seeMessageInQueueContainsText + +Checks if message containing text received. + +**This method drops message from queue** +**This method will wait for message. If none is sent the script will stuck**. + +``` php +pushToQueue('queue.emails', 'Hello, davert'); +$I->seeMessageInQueueContainsText('queue.emails','davert'); +?> +``` + + * `param string` $queue + * `param string` $text + +

     

    Module reference is taken from the source code. Help us to improve documentation. Edit module reference
    diff --git a/vendor/codeception/codeception/docs/modules/AngularJS.md b/vendor/codeception/codeception/docs/modules/AngularJS.md new file mode 100644 index 000000000..e8396ce3d --- /dev/null +++ b/vendor/codeception/codeception/docs/modules/AngularJS.md @@ -0,0 +1,1760 @@ +# AngularJS + +Module for AngularJS testing, based on [WebDriver module](http://codeception.com/docs/modules/WebDriver) and [Protractor](http://angular.github.io/protractor/). + +Performs **synchronization to ensure that page content is fully rendered**. +Uses Angular's and Protractor internals methods to synchronize with the page. + +## Configuration + +The same as for [WebDriver](http://codeception.com/docs/modules/WebDriver#Configuration), but few new options added: + +* `el` - element where Angular application is defined (default: `body`) +* `script_timeout` - for how long in seconds to wait for angular operations to finish (default: 5) + +### Example (`acceptance.suite.yml`) + + modules: + enabled: + - AngularJS: + url: 'http://localhost/' + browser: firefox + script_timeout: 10 + +### Additional Features + +Can perform matching elements by model. In this case you should provide a strict locator with `model` set. + +Example: + +```php +$I->selectOption(['model' => 'customerId'], '3'); +``` + +## Actions + +### _backupSession + +*hidden API method, expected to be used from Helper classes* + +Returns current WebDriver session for saving + + * `return` RemoteWebDriver + +### _capabilities + +*hidden API method, expected to be used from Helper classes* + +Change capabilities of WebDriver. Should be executed before starting a new browser session. +This method expects a function to be passed which returns array or [WebDriver Desired Capabilities](https://github.com/facebook/php-webdriver/blob/community/lib/Remote/DesiredCapabilities.php) object. +Additional [Chrome options](https://github.com/facebook/php-webdriver/wiki/ChromeOptions) (like adding extensions) can be passed as well. + +```php +getModule('WebDriver')->_capabilities(function($currentCapabilities) { + // or new \Facebook\WebDriver\Remote\DesiredCapabilities(); + return \Facebook\WebDriver\Remote\DesiredCapabilities::firefox(); + }); +} +``` + +to make this work load `\Helper\Acceptance` before `WebDriver` in `acceptance.suite.yml`: + +```yaml +modules: + enabled: + - \Helper\Acceptance + - WebDriver +``` + +For instance, [**BrowserStack** cloud service](https://www.browserstack.com/automate/capabilities) may require a test name to be set in capabilities. +This is how it can be done via `_capabilities` method from `Helper\Acceptance`: + +```php +getMetadata()->getName(); + $this->getModule('WebDriver')->_capabilities(function($currentCapabilities) use ($name) { + $currentCapabilities['name'] = $name; + return $currentCapabilities; + }); +} +``` +In this case, please ensure that `\Helper\Acceptance` is loaded before WebDriver so new capabilities could be applied. + + * `param \Closure` $capabilityFunction + +### _closeSession + +*hidden API method, expected to be used from Helper classes* + +Manually closes current WebDriver session. + +```php +getModule('WebDriver')->_closeSession(); + +// close a specific session +$webDriver = $this->getModule('WebDriver')->webDriver; +$this->getModule('WebDriver')->_closeSession($webDriver); +``` + + * `param` $webDriver (optional) a specific webdriver session instance + +### _findClickable + +*hidden API method, expected to be used from Helper classes* + +Locates a clickable element. + +Use it in Helpers or GroupObject or Extension classes: + +```php +getModule('WebDriver'); +$page = $module->webDriver; + +// search a link or button on a page +$el = $module->_findClickable($page, 'Click Me'); + +// search a link or button within an element +$topBar = $module->_findElements('.top-bar')[0]; +$el = $module->_findClickable($topBar, 'Click Me'); + +``` + * `param` $page WebDriver instance or an element to search within + * `param` $link a link text or locator to click + * `return` WebDriverElement + +### _findElements + +*hidden API method, expected to be used from Helper classes* + +Locates element using available Codeception locator types: + +* XPath +* CSS +* Strict Locator + +Use it in Helpers or GroupObject or Extension classes: + +```php +getModule('AngularJS')->_findElements('.items'); +$els = $this->getModule('AngularJS')->_findElements(['name' => 'username']); + +$editLinks = $this->getModule('AngularJS')->_findElements(['link' => 'Edit']); +// now you can iterate over $editLinks and check that all them have valid hrefs +``` + +WebDriver module returns `Facebook\WebDriver\Remote\RemoteWebElement` instances +PhpBrowser and Framework modules return `Symfony\Component\DomCrawler\Crawler` instances + + * `param` $locator + * `return` array of interactive elements + +### _getCurrentUri + +*hidden API method, expected to be used from Helper classes* + +Uri of currently opened page. + * `return` string +@throws ModuleException + +### _getUrl + +*hidden API method, expected to be used from Helper classes* + +Returns URL of a host. + +@throws ModuleConfigException + +### _initializeSession + +*hidden API method, expected to be used from Helper classes* + +Manually starts a new browser session. + +```php +getModule('WebDriver')->_initializeSession(); +``` + +### _loadSession + +*hidden API method, expected to be used from Helper classes* + +Loads current RemoteWebDriver instance as a session + + * `param RemoteWebDriver` $session + +### _restart + +*hidden API method, expected to be used from Helper classes* + +Restarts a web browser. +Can be used with `_reconfigure` to open browser with different configuration + +```php +getModule('WebDriver')->_restart(); // just restart +$this->getModule('WebDriver')->_restart(['browser' => $browser]); // reconfigure + restart +``` + + * `param array` $config + +### _savePageSource + +*hidden API method, expected to be used from Helper classes* + +Saves HTML source of a page to a file + * `param` $filename + +### _saveScreenshot + +*hidden API method, expected to be used from Helper classes* + +Saves screenshot of current page to a file + +```php +$this->getModule('AngularJS')->_saveScreenshot(codecept_output_dir().'screenshot_1.png'); +``` + * `param` $filename + +### acceptPopup + +Accepts the active JavaScript native popup window, as created by `window.alert`|`window.confirm`|`window.prompt`. +Don't confuse popups with modal windows, +as created by [various libraries](http://jster.net/category/windows-modals-popups). + +### amInsideAngularApp + +Enables Angular mode (enabled by default). +Waits for Angular to finish rendering after each action. + +### amOnPage + +Opens the page for the given relative URI. + +``` php +amOnPage('/'); +// opens /register page +$I->amOnPage('/register'); +``` + + * `param string` $page + +### amOnSubdomain + +Changes the subdomain for the 'url' configuration parameter. +Does not open a page; use `amOnPage` for that. + +``` php +amOnSubdomain('user'); +$I->amOnPage('/'); +// moves to http://user.mysite.com/ +?> +``` + + * `param` $subdomain + +### amOnUrl + +Open web page at the given absolute URL and sets its hostname as the base host. + +``` php +amOnUrl('http://codeception.com'); +$I->amOnPage('/quickstart'); // moves to http://codeception.com/quickstart +?> +``` + +### amOutsideAngularApp + +Disabled Angular mode. + +Falls back to original WebDriver, in case web page does not contain Angular app. + +### appendField + +Append the given text to the given element. +Can also add a selection to a select box. + +``` php +appendField('#mySelectbox', 'SelectValue'); +$I->appendField('#myTextField', 'appended'); +?> +``` + + * `param string` $field + * `param string` $value +@throws \Codeception\Exception\ElementNotFound + +### attachFile + +Attaches a file relative to the Codeception `_data` directory to the given file upload field. + +``` php +attachFile('input[@type="file"]', 'prices.xls'); +?> +``` + + * `param` $field + * `param` $filename + +### cancelPopup + +Dismisses the active JavaScript popup, as created by `window.alert`, `window.confirm`, or `window.prompt`. + +### checkOption + +Ticks a checkbox. For radio buttons, use the `selectOption` method instead. + +``` php +checkOption('#agree'); +?> +``` + + * `param` $option + +### click + +Perform a click on a link or a button, given by a locator. +If a fuzzy locator is given, the page will be searched for a button, link, or image matching the locator string. +For buttons, the "value" attribute, "name" attribute, and inner text are searched. +For links, the link text is searched. +For images, the "alt" attribute and inner text of any parent links are searched. + +The second parameter is a context (CSS or XPath locator) to narrow the search. + +Note that if the locator matches a button of type `submit`, the form will be submitted. + +``` php +click('Logout'); +// button of form +$I->click('Submit'); +// CSS button +$I->click('#form input[type=submit]'); +// XPath +$I->click('//form/*[@type=submit]'); +// link in context +$I->click('Logout', '#nav'); +// using strict locator +$I->click(['link' => 'Login']); +?> +``` + + * `param` $link + * `param` $context + +### clickWithLeftButton + +Performs click with the left mouse button on an element. +If the first parameter `null` then the offset is relative to the actual mouse position. +If the second and third parameters are given, +then the mouse is moved to an offset of the element's top-left corner. +Otherwise, the mouse is moved to the center of the element. + +``` php +clickWithLeftButton(['css' => '.checkout']); +$I->clickWithLeftButton(null, 20, 50); +$I->clickWithLeftButton(['css' => '.checkout'], 20, 50); +?> +``` + + * `param string` $cssOrXPath css or xpath of the web element (body by default). + * `param int` $offsetX + * `param int` $offsetY + +@throws \Codeception\Exception\ElementNotFound + +### clickWithRightButton + +Performs contextual click with the right mouse button on an element. +If the first parameter `null` then the offset is relative to the actual mouse position. +If the second and third parameters are given, +then the mouse is moved to an offset of the element's top-left corner. +Otherwise, the mouse is moved to the center of the element. + +``` php +clickWithRightButton(['css' => '.checkout']); +$I->clickWithRightButton(null, 20, 50); +$I->clickWithRightButton(['css' => '.checkout'], 20, 50); +?> +``` + + * `param string` $cssOrXPath css or xpath of the web element (body by default). + * `param int` $offsetX + * `param int` $offsetY + +@throws \Codeception\Exception\ElementNotFound + +### closeTab + +Closes current browser tab and switches to previous active tab. + +```php +closeTab(); +``` + +Can't be used with PhantomJS + +### debugWebDriverLogs + +Print out latest Selenium Logs in debug mode + + * `param TestInterface` $test + +### dontSee + +Checks that the current page doesn't contain the text specified (case insensitive). +Give a locator as the second parameter to match a specific region. + +```php +dontSee('Login'); // I can suppose user is already logged in +$I->dontSee('Sign Up','h1'); // I can suppose it's not a signup page +$I->dontSee('Sign Up','//body/h1'); // with XPath +$I->dontSee('Sign Up', ['css' => 'body h1']); // with strict CSS locator +``` + +Note that the search is done after stripping all HTML tags from the body, +so `$I->dontSee('strong')` will fail on strings like: + + - `

    I am Stronger than thou

    ` + - `` + +But will ignore strings like: + + - `Home` + - `
    Home` + - `` + +For checking the raw source code, use `seeInSource()`. + + * `param string` $text + * `param string` $selector optional + +### dontSeeCheckboxIsChecked + +Check that the specified checkbox is unchecked. + +``` php +dontSeeCheckboxIsChecked('#agree'); // I suppose user didn't agree to terms +$I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user didn't check the first checkbox in form. +?> +``` + + * `param` $checkbox + +### dontSeeCookie + +Checks that there isn't a cookie with the given name. +You can set additional cookie params like `domain`, `path` as array passed in last argument. + + * `param` $cookie + + * `param array` $params + +### dontSeeCurrentUrlEquals + +Checks that the current URL doesn't equal the given string. +Unlike `dontSeeInCurrentUrl`, this only matches the full URL. + +``` php +dontSeeCurrentUrlEquals('/'); +?> +``` + + * `param string` $uri + +### dontSeeCurrentUrlMatches + +Checks that current url doesn't match the given regular expression. + +``` php +dontSeeCurrentUrlMatches('~$/users/(\d+)~'); +?> +``` + + * `param string` $uri + +### dontSeeElement + +Checks that the given element is invisible or not present on the page. +You can also specify expected attributes of this element. + +``` php +dontSeeElement('.error'); +$I->dontSeeElement('//form/input[1]'); +$I->dontSeeElement('input', ['name' => 'login']); +$I->dontSeeElement('input', ['value' => '123456']); +?> +``` + + * `param` $selector + * `param array` $attributes + +### dontSeeElementInDOM + +Opposite of `seeElementInDOM`. + + * `param` $selector + * `param array` $attributes + +### dontSeeInCurrentUrl + +Checks that the current URI doesn't contain the given string. + +``` php +dontSeeInCurrentUrl('/users/'); +?> +``` + + * `param string` $uri + +### dontSeeInField + +Checks that an input field or textarea doesn't contain the given value. +For fuzzy locators, the field is matched by label text, CSS and XPath. + +``` php +dontSeeInField('Body','Type your comment here'); +$I->dontSeeInField('form textarea[name=body]','Type your comment here'); +$I->dontSeeInField('form input[type=hidden]','hidden_value'); +$I->dontSeeInField('#searchform input','Search'); +$I->dontSeeInField('//form/*[@name=search]','Search'); +$I->dontSeeInField(['name' => 'search'], 'Search'); +?> +``` + + * `param` $field + * `param` $value + +### dontSeeInFormFields + +Checks if the array of form parameters (name => value) are not set on the form matched with +the passed selector. + +``` php +dontSeeInFormFields('form[name=myform]', [ + 'input1' => 'non-existent value', + 'input2' => 'other non-existent value', +]); +?> +``` + +To check that an element hasn't been assigned any one of many values, an array can be passed +as the value: + +``` php +dontSeeInFormFields('.form-class', [ + 'fieldName' => [ + 'This value shouldn\'t be set', + 'And this value shouldn\'t be set', + ], +]); +?> +``` + +Additionally, checkbox values can be checked with a boolean. + +``` php +dontSeeInFormFields('#form-id', [ + 'checkbox1' => true, // fails if checked + 'checkbox2' => false, // fails if unchecked +]); +?> +``` + + * `param` $formSelector + * `param` $params + +### dontSeeInPageSource + +Checks that the page source doesn't contain the given string. + + * `param` $text + +### dontSeeInPopup + +Checks that the active JavaScript popup, +as created by `window.alert`|`window.confirm`|`window.prompt`, does NOT contain the given string. + + * `param` $text + +@throws \Codeception\Exception\ModuleException + +### dontSeeInSource + +Checks that the current page contains the given string in its +raw source code. + +```php +dontSeeInSource('

    Green eggs & ham

    '); +``` + + * `param` $raw + +### dontSeeInTitle + +Checks that the page title does not contain the given string. + + * `param` $title + +### dontSeeLink + +Checks that the page doesn't contain a link with the given string. +If the second parameter is given, only links with a matching "href" attribute will be checked. + +``` php +dontSeeLink('Logout'); // I suppose user is not logged in +$I->dontSeeLink('Checkout now', '/store/cart.php'); +?> +``` + + * `param string` $text + * `param string` $url optional + +### dontSeeOptionIsSelected + +Checks that the given option is not selected. + +``` php +dontSeeOptionIsSelected('#form input[name=payment]', 'Visa'); +?> +``` + + * `param` $selector + * `param` $optionText + +### doubleClick + +Performs a double-click on an element matched by CSS or XPath. + + * `param` $cssOrXPath +@throws \Codeception\Exception\ElementNotFound + +### dragAndDrop + +Performs a simple mouse drag-and-drop operation. + +``` php +dragAndDrop('#drag', '#drop'); +?> +``` + + * `param string` $source (CSS ID or XPath) + * `param string` $target (CSS ID or XPath) + +### executeInSelenium + +Low-level API method. +If Codeception commands are not enough, this allows you to use Selenium WebDriver methods directly: + +``` php +$I->executeInSelenium(function(\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) { + $webdriver->get('http://google.com'); +}); +``` + +This runs in the context of the +[RemoteWebDriver class](https://github.com/facebook/php-webdriver/blob/master/lib/remote/RemoteWebDriver.php). +Try not to use this command on a regular basis. +If Codeception lacks a feature you need, please implement it and submit a patch. + + * `param callable` $function + +### executeJS + +Executes custom JavaScript. + +This example uses jQuery to get a value and assigns that value to a PHP variable: + +```php +executeJS('return $("#myField").val()'); +?> +``` + + * `param` $script + +### fillField + +Fills a text field or textarea with the given string. + +``` php +fillField("//input[@type='text']", "Hello World!"); +$I->fillField(['name' => 'email'], 'jon@mail.com'); +?> +``` + + * `param` $field + * `param` $value + +### grabAttributeFrom + +Grabs the value of the given attribute value from the given element. +Fails if element is not found. + +``` php +grabAttributeFrom('#tooltip', 'title'); +?> +``` + + * `param` $cssOrXpath + * `param` $attribute + +### grabCookie + +Grabs a cookie value. +You can set additional cookie params like `domain`, `path` in array passed as last argument. + + * `param` $cookie + + * `param array` $params + +### grabFromCurrentUrl + +Executes the given regular expression against the current URI and returns the first capturing group. +If no parameters are provided, the full URI is returned. + +``` php +grabFromCurrentUrl('~$/user/(\d+)/~'); +$uri = $I->grabFromCurrentUrl(); +?> +``` + + * `param string` $uri optional + +### grabMultiple + +Grabs either the text content, or attribute values, of nodes +matched by $cssOrXpath and returns them as an array. + +```html +First +Second +Third +``` + +```php +grabMultiple('a'); + +// would return ['#first', '#second', '#third'] +$aLinks = $I->grabMultiple('a', 'href'); +?> +``` + + * `param` $cssOrXpath + * `param` $attribute + * `return` string[] + +### grabPageSource + +Grabs current page source code. + +@throws ModuleException if no page was opened. + + * `return` string Current page source code. + +### grabTextFrom + +Finds and returns the text contents of the given element. +If a fuzzy locator is used, the element is found using CSS, XPath, +and by matching the full page source by regular expression. + +``` php +grabTextFrom('h1'); +$heading = $I->grabTextFrom('descendant-or-self::h1'); +$value = $I->grabTextFrom('~ +``` + + * `param` $cssOrXPathOrRegex + +### grabValueFrom + +Finds the value for the given form field. +If a fuzzy locator is used, the field is found by field name, CSS, and XPath. + +``` php +grabValueFrom('Name'); +$name = $I->grabValueFrom('input[name=username]'); +$name = $I->grabValueFrom('descendant-or-self::form/descendant::input[@name = 'username']'); +$name = $I->grabValueFrom(['name' => 'username']); +?> +``` + + * `param` $field + +### loadSessionSnapshot + + * `param string` $name + * `return` bool + +### makeScreenshot + +Takes a screenshot of the current window and saves it to `tests/_output/debug`. + +``` php +amOnPage('/user/edit'); +$I->makeScreenshot('edit_page'); +// saved to: tests/_output/debug/edit_page.png +$I->makeScreenshot(); +// saved to: tests/_output/debug/2017-05-26_14-24-11_4b3403665fea6.png +``` + + * `param` $name + +### maximizeWindow + +Maximizes the current window. + +### moveBack + +Moves back in history. + +### moveForward + +Moves forward in history. + +### moveMouseOver + +Move mouse over the first element matched by the given locator. +If the first parameter null then the page is used. +If the second and third parameters are given, +then the mouse is moved to an offset of the element's top-left corner. +Otherwise, the mouse is moved to the center of the element. + +``` php +moveMouseOver(['css' => '.checkout']); +$I->moveMouseOver(null, 20, 50); +$I->moveMouseOver(['css' => '.checkout'], 20, 50); +?> +``` + + * `param string` $cssOrXPath css or xpath of the web element + * `param int` $offsetX + * `param int` $offsetY + +@throws \Codeception\Exception\ElementNotFound + +### openNewTab + +Opens a new browser tab (wherever it is possible) and switches to it. + +```php +openNewTab(); +``` +Tab is opened by using `window.open` javascript in a browser. +Please note, that adblock can restrict creating such tabs. + +Can't be used with PhantomJS + +### pauseExecution + +Pauses test execution in debug mode. +To proceed test press "ENTER" in console. + +This method is useful while writing tests, +since it allows you to inspect the current page in the middle of a test case. + +### performOn + +Waits for element and runs a sequence of actions inside its context. +Actions can be defined with array, callback, or `Codeception\Util\ActionSequence` instance. + +Actions as array are recommended for simple to combine "waitForElement" with assertions; +`waitForElement($el)` and `see('text', $el)` can be simplified to: + +```php +performOn($el, ['see' => 'text']); +``` + +List of actions can be pragmatically build using `Codeception\Util\ActionSequence`: + +```php +performOn('.model', ActionSequence::build() + ->see('Warning') + ->see('Are you sure you want to delete this?') + ->click('Yes') +); +``` + +Actions executed from array or ActionSequence will print debug output for actions, and adds an action name to +exception on failure. + +Whenever you need to define more actions a callback can be used. A WebDriver module is passed for argument: + +```php +performOn('.rememberMe', function (WebDriver $I) { + $I->see('Remember me next time'); + $I->seeElement('#LoginForm_rememberMe'); + $I->dontSee('Login'); +}); +``` + +In 3rd argument you can set number a seconds to wait for element to appear + + * `param` $element + * `param` $actions + * `param int` $timeout + +### pressKey + +Presses the given key on the given element. +To specify a character and modifier (e.g. ctrl, alt, shift, meta), pass an array for $char with +the modifier as the first element and the character as the second. +For special keys use key constants from WebDriverKeys class. + +``` php + +$I->pressKey('#page','a'); // => olda +$I->pressKey('#page',array('ctrl','a'),'new'); //=> new +$I->pressKey('#page',array('shift','111'),'1','x'); //=> old!!!1x +$I->pressKey('descendant-or-self::*[@id='page']','u'); //=> oldu +$I->pressKey('#name', array('ctrl', 'a'), \Facebook\WebDriver\WebDriverKeys::DELETE); //=>'' +?> +``` + + * `param` $element + * `param` $char string|array Can be char or array with modifier. You can provide several chars. +@throws \Codeception\Exception\ElementNotFound + +### reloadPage + +Reloads the current page. + +### resetCookie + +Unsets cookie with the given name. +You can set additional cookie params like `domain`, `path` in array passed as last argument. + + * `param` $cookie + + * `param array` $params + +### resizeWindow + +Resize the current window. + +``` php +resizeWindow(800, 600); + +``` + + * `param int` $width + * `param int` $height + +### saveSessionSnapshot + + * `param string` $name + +### scrollTo + +Move to the middle of the given element matched by the given locator. +Extra shift, calculated from the top-left corner of the element, +can be set by passing $offsetX and $offsetY parameters. + +``` php +scrollTo(['css' => '.checkout'], 20, 50); +?> +``` + + * `param` $selector + * `param int` $offsetX + * `param int` $offsetY + +### see + +Checks that the current page contains the given string (case insensitive). + +You can specify a specific HTML element (via CSS or XPath) as the second +parameter to only search within that element. + +``` php +see('Logout'); // I can suppose user is logged in +$I->see('Sign Up', 'h1'); // I can suppose it's a signup page +$I->see('Sign Up', '//body/h1'); // with XPath +$I->see('Sign Up', ['css' => 'body h1']); // with strict CSS locator +``` + +Note that the search is done after stripping all HTML tags from the body, +so `$I->see('strong')` will return true for strings like: + + - `

    I am Stronger than thou

    ` + - `` + +But will *not* be true for strings like: + + - `Home` + - `
    Home` + - `` + +For checking the raw source code, use `seeInSource()`. + + * `param string` $text + * `param string` $selector optional + +### seeCheckboxIsChecked + +Checks that the specified checkbox is checked. + +``` php +seeCheckboxIsChecked('#agree'); // I suppose user agreed to terms +$I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user agreed to terms, If there is only one checkbox in form. +$I->seeCheckboxIsChecked('//form/input[@type=checkbox and @name=agree]'); +?> +``` + + * `param` $checkbox + +### seeCookie + +Checks that a cookie with the given name is set. +You can set additional cookie params like `domain`, `path` as array passed in last argument. + +``` php +seeCookie('PHPSESSID'); +?> +``` + + * `param` $cookie + * `param array` $params + +### seeCurrentUrlEquals + +Checks that the current URL is equal to the given string. +Unlike `seeInCurrentUrl`, this only matches the full URL. + +``` php +seeCurrentUrlEquals('/'); +?> +``` + + * `param string` $uri + +### seeCurrentUrlMatches + +Checks that the current URL matches the given regular expression. + +``` php +seeCurrentUrlMatches('~$/users/(\d+)~'); +?> +``` + + * `param string` $uri + +### seeElement + +Checks that the given element exists on the page and is visible. +You can also specify expected attributes of this element. + +``` php +seeElement('.error'); +$I->seeElement('//form/input[1]'); +$I->seeElement('input', ['name' => 'login']); +$I->seeElement('input', ['value' => '123456']); + +// strict locator in first arg, attributes in second +$I->seeElement(['css' => 'form input'], ['name' => 'login']); +?> +``` + + * `param` $selector + * `param array` $attributes +@return + +### seeElementInDOM + +Checks that the given element exists on the page, even it is invisible. + +``` php +seeElementInDOM('//form/input[type=hidden]'); +?> +``` + + * `param` $selector + * `param array` $attributes + +### seeInCurrentUrl + +Checks that current URI contains the given string. + +``` php +seeInCurrentUrl('home'); +// to match: /users/1 +$I->seeInCurrentUrl('/users/'); +?> +``` + + * `param string` $uri + +### seeInField + +Checks that the given input field or textarea *equals* (i.e. not just contains) the given value. +Fields are matched by label text, the "name" attribute, CSS, or XPath. + +``` php +seeInField('Body','Type your comment here'); +$I->seeInField('form textarea[name=body]','Type your comment here'); +$I->seeInField('form input[type=hidden]','hidden_value'); +$I->seeInField('#searchform input','Search'); +$I->seeInField('//form/*[@name=search]','Search'); +$I->seeInField(['name' => 'search'], 'Search'); +?> +``` + + * `param` $field + * `param` $value + +### seeInFormFields + +Checks if the array of form parameters (name => value) are set on the form matched with the +passed selector. + +``` php +seeInFormFields('form[name=myform]', [ + 'input1' => 'value', + 'input2' => 'other value', +]); +?> +``` + +For multi-select elements, or to check values of multiple elements with the same name, an +array may be passed: + +``` php +seeInFormFields('.form-class', [ + 'multiselect' => [ + 'value1', + 'value2', + ], + 'checkbox[]' => [ + 'a checked value', + 'another checked value', + ], +]); +?> +``` + +Additionally, checkbox values can be checked with a boolean. + +``` php +seeInFormFields('#form-id', [ + 'checkbox1' => true, // passes if checked + 'checkbox2' => false, // passes if unchecked +]); +?> +``` + +Pair this with submitForm for quick testing magic. + +``` php + 'value', + 'field2' => 'another value', + 'checkbox1' => true, + // ... +]; +$I->submitForm('//form[@id=my-form]', $form, 'submitButton'); +// $I->amOnPage('/path/to/form-page') may be needed +$I->seeInFormFields('//form[@id=my-form]', $form); +?> +``` + + * `param` $formSelector + * `param` $params + +### seeInPageSource + +Checks that the page source contains the given string. + +```php +seeInPageSource('seeInSource('

    Green eggs & ham

    '); +``` + + * `param` $raw + +### seeInTitle + +Checks that the page title contains the given string. + +``` php +seeInTitle('Blog - Post #1'); +?> +``` + + * `param` $title + +### seeLink + +Checks that there's a link with the specified text. +Give a full URL as the second parameter to match links with that exact URL. + +``` php +seeLink('Logout'); // matches Logout +$I->seeLink('Logout','/logout'); // matches Logout +?> +``` + + * `param string` $text + * `param string` $url optional + +### seeNumberOfElements + +Checks that there are a certain number of elements matched by the given locator on the page. + +``` php +seeNumberOfElements('tr', 10); +$I->seeNumberOfElements('tr', [0,10]); // between 0 and 10 elements +?> +``` + * `param` $selector + * `param mixed` $expected int or int[] + +### seeNumberOfElementsInDOM +__not documented__ + +### seeOptionIsSelected + +Checks that the given option is selected. + +``` php +seeOptionIsSelected('#form input[name=payment]', 'Visa'); +?> +``` + + * `param` $selector + * `param` $optionText + +### selectOption + +Selects an option in a select tag or in radio button group. + +``` php +selectOption('form select[name=account]', 'Premium'); +$I->selectOption('form input[name=payment]', 'Monthly'); +$I->selectOption('//form/select[@name=account]', 'Monthly'); +?> +``` + +Provide an array for the second argument to select multiple options: + +``` php +selectOption('Which OS do you use?', array('Windows','Linux')); +?> +``` + +Or provide an associative array for the second argument to specifically define which selection method should be used: + +``` php +selectOption('Which OS do you use?', array('text' => 'Windows')); // Only search by text 'Windows' +$I->selectOption('Which OS do you use?', array('value' => 'windows')); // Only search by value 'windows' +?> +``` + + * `param` $select + * `param` $option + +### setCookie + +Sets a cookie with the given name and value. +You can set additional cookie params like `domain`, `path`, `expires`, `secure` in array passed as last argument. + +``` php +setCookie('PHPSESSID', 'el4ukv0kqbvoirg7nkp4dncpk3'); +?> +``` + + * `param` $name + * `param` $val + * `param array` $params + +### submitForm + +Submits the given form on the page, optionally with the given form +values. Give the form fields values as an array. Note that hidden fields +can't be accessed. + +Skipped fields will be filled by their values from the page. +You don't need to click the 'Submit' button afterwards. +This command itself triggers the request to form's action. + +You can optionally specify what button's value to include +in the request with the last parameter as an alternative to +explicitly setting its value in the second parameter, as +button values are not otherwise included in the request. + +Examples: + +``` php +submitForm('#login', [ + 'login' => 'davert', + 'password' => '123456' +]); +// or +$I->submitForm('#login', [ + 'login' => 'davert', + 'password' => '123456' +], 'submitButtonName'); + +``` + +For example, given this sample "Sign Up" form: + +``` html +
    + Login: +
    + Password: +
    + Do you agree to our terms? +
    + Select pricing plan: + + + +``` + +You could write the following to submit it: + +``` php +submitForm( + '#userForm', + [ + 'user[login]' => 'Davert', + 'user[password]' => '123456', + 'user[agree]' => true + ], + 'submitButton' +); +``` +Note that "2" will be the submitted value for the "plan" field, as it is +the selected option. + +Also note that this differs from PhpBrowser, in that +```'user' => [ 'login' => 'Davert' ]``` is not supported at the moment. +Named array keys *must* be included in the name as above. + +Pair this with seeInFormFields for quick testing magic. + +``` php + 'value', + 'field2' => 'another value', + 'checkbox1' => true, + // ... +]; +$I->submitForm('//form[@id=my-form]', $form, 'submitButton'); +// $I->amOnPage('/path/to/form-page') may be needed +$I->seeInFormFields('//form[@id=my-form]', $form); +?> +``` + +Parameter values must be set to arrays for multiple input fields +of the same name, or multi-select combo boxes. For checkboxes, +either the string value can be used, or boolean values which will +be replaced by the checkbox's value in the DOM. + +``` php +submitForm('#my-form', [ + 'field1' => 'value', + 'checkbox' => [ + 'value of first checkbox', + 'value of second checkbox, + ], + 'otherCheckboxes' => [ + true, + false, + false + ], + 'multiselect' => [ + 'first option value', + 'second option value' + ] +]); +?> +``` + +Mixing string and boolean values for a checkbox's value is not supported +and may produce unexpected results. + +Field names ending in "[]" must be passed without the trailing square +bracket characters, and must contain an array for its value. This allows +submitting multiple values with the same name, consider: + +```php +$I->submitForm('#my-form', [ + 'field[]' => 'value', + 'field[]' => 'another value', // 'field[]' is already a defined key +]); +``` + +The solution is to pass an array value: + +```php +// this way both values are submitted +$I->submitForm('#my-form', [ + 'field' => [ + 'value', + 'another value', + ] +]); +``` + +The `$button` parameter can be either a string, an array or an instance +of Facebook\WebDriver\WebDriverBy. When it is a string, the +button will be found by its "name" attribute. If $button is an +array then it will be treated as a strict selector and a WebDriverBy +will be used verbatim. + +For example, given the following HTML: + +``` html + +``` + +`$button` could be any one of the following: + - 'submitButton' + - ['name' => 'submitButton'] + - WebDriverBy::name('submitButton') + + * `param` $selector + * `param` $params + * `param` $button + +### switchToIFrame + +Switch to another frame on the page. + +Example: +``` html +